From ef0f9c0451c2ffd425d035c50513f1e92f61504f Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 29 Jun 2018 12:26:19 +0100 Subject: [PATCH 001/273] First attempt at permanent PLUMED interface --- doc/src/fix_plumed.html | 118 +++++++ src/.gitignore | 5 + src/USER-PLUMED/Install.sh | 39 +++ src/USER-PLUMED/Plumed.cpp | 471 +++++++++++++++++++++++++++ src/USER-PLUMED/Plumed.h | 577 +++++++++++++++++++++++++++++++++ src/USER-PLUMED/Plumed.inc | 3 + src/USER-PLUMED/README | 55 ++++ src/USER-PLUMED/fix_plumed.cpp | 291 +++++++++++++++++ src/USER-PLUMED/fix_plumed.h | 53 +++ 9 files changed, 1612 insertions(+) create mode 100644 doc/src/fix_plumed.html create mode 100755 src/USER-PLUMED/Install.sh create mode 100644 src/USER-PLUMED/Plumed.cpp create mode 100644 src/USER-PLUMED/Plumed.h create mode 100644 src/USER-PLUMED/Plumed.inc create mode 100644 src/USER-PLUMED/README create mode 100644 src/USER-PLUMED/fix_plumed.cpp create mode 100644 src/USER-PLUMED/fix_plumed.h diff --git a/doc/src/fix_plumed.html b/doc/src/fix_plumed.html new file mode 100644 index 0000000000..4342403e84 --- /dev/null +++ b/doc/src/fix_plumed.html @@ -0,0 +1,118 @@ + +
LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Commands +
+ + + + + + +
+ +

fix plumed command +

+

Syntax: +

+
fix ID group-ID plumed keyword value ...
+
+ +

Examples: +

+
+  fix pl all plumed all plumed plumedfile plumed.dat outfile p.log 
+
+

Description: +

+

+This fix instructs LAMMPS to call the PLUMED library, which allows one +to perform various forms of trajectory analysis on the fly and to also use +methods such as umbrella sampling and metadynamics to enhance the sampling of +phase space. +

+

The documentation included here only describes the fix plumed command. This command +is LAMMPS specific whereas most of the functionality implemented in PLUMED will work with a +range of MD codes and also when PLUMED is used as a stand alone code. The full documentation +for PLUMED is available at this website +

+

The PLUMED library is developed at https://github.com/plumed/plumed2 +A detailed discussion of the code can be found in (PLUMED). +

+

There are some example scripts for using this package with LAMMPS in the +examples/USER/plumed directory. +

+
+ +

The command to call PLUMED above is reasonably self explanatory. Within the input file +for lammps the user is required to specify the input file for PLUMED and a file on which +to output the PLUMED log. The user must specify both of these arguments every time +PLUMED is to be used. Furthermore, the fix plumed command should appear in the LAMMPS input +file after the relevant input paramters (e.g. the timestep) have been set. +

+

The group-ID entry is ignored. LAMMPS will always pass all the atoms to PLUMED +and there can only be one instance of the plumed fix at a time. The plumed fix communicates +the minimum amount of information required and the PLUMED supports multiple, completely +independent collective variables, multiple independent biases and multiple independent forms of analysis. +There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. +

+

The plumedfile keyword allows the user to specify the name of the PLUMED input file. +Instructions as to what should be included in a plumed input file can be found in the +documentation for PLUMED. +

+

The outfile keyword allows the user to specify the name of a file on which to output +the PLUMED log. This log file normally just parots the information that is contained in the input +file. The names of the files on which the results from the various analyses that have been performed +using PLUMED will be specified by the user in the PLUMED input file. +

+

Restart, fix_modify, output, run start/stop, minimize info: +

+

+When performing a restart of a calculation that involves PLUMED you must include a RESTART command +in the PLUMED input file as detailed in the PLUMED documentation. When the restart +command is found in the PLUMED input PLUMED will append to the files that were generated in the run +that was performed previously. Furthermore, any history dependent bias potentials that were accumulated in +previous calculations will be read in when the restart command is included in the PLUMED input. +

+

The fix_modify energy option is not supported by this fix. +

+

Nothing is computed by this fix that can be accessed by any of the +output commands within LAMMPS. All the quantities +of interest can be output by commands that are native to PLUMED, however. +

+

Restrictions: +

+

This fix is part of the USER-PLUMED package. It is only enabled if +LAMMPS was built with that package. See the Making +LAMMPS section for more info. +

+

There can only be one plumed fix active at a time. Since the interface +communicates only the minimum amount of information and since the PLUMED module +itself can handle an arbitrary number of analysis and biasing methods, this is +not a limitation of functionality. +

+

Related commands: +

+

fix smd +

fix colvars +

+

Default: +

+

The default options are plumedfile = NULL and outfile = NULL +

+
+ + + +

(PLUMED) G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) DOI:https://doi.org/10.1016/j.cpc.2013.09.018 +

+ + diff --git a/src/.gitignore b/src/.gitignore index 92933ce5ee..b84ab65787 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -53,6 +53,11 @@ /colvarproxy_lammps_version.h /fix_colvars.cpp /fix_colvars.h +/fix_plumed.cpp +/fix_plumed.h +/Plumed.cpp +/Plumed.h +/Plumed.inc /dump_molfile.cpp /dump_molfile.h /molfile_interface.cpp diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh new file mode 100755 index 0000000000..3e0bef56ca --- /dev/null +++ b/src/USER-PLUMED/Install.sh @@ -0,0 +1,39 @@ +# Install/unInstall package files in LAMMPS +# edit 2 Makefile.package files to include/exclude ATC info + +if (test $1 = 1) then + + if (test -e ../Makefile.package) then + sed -i -e 's|^PKG_LIB =[ \t]*|& $(PLUMED_LOAD) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/Plumed.inc +' ../Makefile.package.settings + fi + + cp fix_plumed.cpp .. + cp fix_plumed.h .. + cp Plumed.h .. + cp Plumed.cpp .. + cp Plumed.inc .. + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]* \$(PLUMED_LOAD)[^ \t]* //' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*Plumed\.inc.*$/d' ../Makefile.package.settings + fi + + rm -f ../fix_plumed.cpp + rm -f ../fix_plumed.h + rm -f ../Plumed.h + rm -f ../Plumed.cpp + rm -f ../Plumed.inc + +fi diff --git a/src/USER-PLUMED/Plumed.cpp b/src/USER-PLUMED/Plumed.cpp new file mode 100644 index 0000000000..f279c4a0eb --- /dev/null +++ b/src/USER-PLUMED/Plumed.cpp @@ -0,0 +1,471 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2011-2018 The plumed team + (see the PEOPLE file at the root of the distribution for a list of names) + + See http://www.plumed.org for more information. + + This file is part of plumed, version 2. + + plumed is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + plumed is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with plumed. If not, see . ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#include "Plumed.h" + +#ifdef __PLUMED_HAS_DLOPEN +#include +#endif +#include +#include +#include +#include +#include + +/* DECLARATION USED ONLY IN THIS FILE */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Function pointer to plumed_create +*/ + +typedef void*(*plumed_create_pointer)(void); +/** + Function pointer to plumed_cmd +*/ +typedef void(*plumed_cmd_pointer)(void*,const char*,const void*); + +/** + Function pointer to plumed_finalize +*/ +typedef void(*plumed_finalize_pointer)(void*); + +/** + Holder for plumedmain function pointers. +*/ +typedef struct { + plumed_create_pointer create; + plumed_cmd_pointer cmd; + plumed_finalize_pointer finalize; +} plumed_plumedmain_function_holder; + +/** + Holder for plumed symbol table. +*/ +typedef struct { + int version; + plumed_plumedmain_function_holder functions; +} plumed_symbol_table_type; + +/** + Register for plumedmain function pointers +*/ +plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder*); + +#ifdef __PLUMED_STATIC_KERNEL +/* Real interface */ +void*plumed_plumedmain_create(void); +void plumed_plumedmain_cmd(void*,const char*,const void*); +void plumed_plumedmain_finalize(void*); +#else +/* dummy interface */ +void*plumed_dummy_create(void); +void plumed_dummy_cmd(void*,const char*,const void*); +void plumed_dummy_finalize(void*); +#endif + +#ifdef __cplusplus +} +#endif + +/* END OF DECLARATION USED ONLY IN THIS FILE */ + +/* These are the dummy routines which are used when plumed is not available */ + +#ifdef __PLUMED_STATIC_KERNEL + +static int installed=1; + +#else + +static int installed=0; + +static int dummy; + +void*plumed_dummy_create(void) { + return (void*)&dummy; +} + +void plumed_dummy_cmd(void*p,const char*key,const void*val) { + (void) p; /* avoid warning on unused parameter */ + (void) key; /* avoid warning on unused parameter */ + (void) val; /* avoid warning on unused parameter */ + fprintf(stderr,"+++ ERROR: you are trying to use plumed, but it is not available +++\n"); + fprintf(stderr,"+++ Check your PLUMED_KERNEL environment variable +++\n"); + exit(1); +} + +void plumed_dummy_finalize(void*p) { + (void) p; /* avoid warning on unused parameter */ +} + +#endif + +plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder* f) { + /* + Argument f is present for historical reasons but ignored in PLUMED>=2.5. + */ + if(f) { + if(getenv("PLUMED_LOAD_DEBUG")) { + fprintf(stderr,"+++ Ignoring registration at %p (%p,%p,%p) +++\n",(void*)f,(void*)f->create,(void*)f->cmd,(void*)f->finalize); + } + } +#ifdef __PLUMED_STATIC_KERNEL + /* + When __PLUMED_STATIC_KERNEL is defined, the function holder is initialized + to statically bound plumed_plumedmain_create, plumed_plumedmain_cmd, plumed_plumedmain_finalize and + cannot be changed. This saves from mis-set values for PLUMED_KERNEL. + */ + static plumed_plumedmain_function_holder g= {plumed_plumedmain_create,plumed_plumedmain_cmd,plumed_plumedmain_finalize}; +#else + /* + On the other hand, for runtime binding, we use dlsym to find the relevant functions. + Notice that as of PLUMED 2.5 self registration of the kernel is ignored, so argument f + is not used anymore. + Also notice that we should put some guard here for safe multithread calculations. + */ + static plumed_plumedmain_function_holder g= {plumed_dummy_create,plumed_dummy_cmd,plumed_dummy_finalize}; + static int first=1; +#ifdef __PLUMED_HAS_DLOPEN + const char* path; + char* pathcopy; + void* p; + char* pc; + plumed_symbol_table_type* plumed_symbol_table_ptr; + plumed_plumedmain_function_holder functions; + char* debug; + size_t strlenpath; + int dlopenmode; + /* + f==NULL is required here otherwise we would enter this block a second time + when plumed_kernel_register is called by the just loaded shared library. + */ + if(first && f==NULL) { + path=getenv("PLUMED_KERNEL"); + debug=getenv("PLUMED_LOAD_DEBUG"); +#ifdef __PLUMED_DEFAULT_KERNEL + /* + This variable allows a default path for the kernel to be hardcoded. + Can be useful for hardcoding the predefined plumed location + still allowing the user to override this choice setting PLUMED_KERNEL. + The path should be chosen at compile time adding e.g. + -D__PLUMED_DEFAULT_KERNEL=/opt/local/lib/libplumed.dylib + */ + /* This is required to add quotes */ +#define PLUMED_QUOTE_DIRECT(name) #name +#define PLUMED_QUOTE(macro) PLUMED_QUOTE_DIRECT(macro) + if(! (path && (*path) )) path=PLUMED_QUOTE(__PLUMED_DEFAULT_KERNEL); +#endif + if(path && (*path)) { + fprintf(stderr,"+++ Loading the PLUMED kernel runtime +++\n"); + fprintf(stderr,"+++ PLUMED_KERNEL=\"%s\" +++\n",path); + if(getenv("PLUMED_LOAD_NAMESPACE") && !strcmp(getenv("PLUMED_LOAD_NAMESPACE"),"LOCAL")) { + dlopenmode=RTLD_NOW|RTLD_LOCAL; + if(debug) fprintf(stderr,"+++ Loading with mode RTLD_NOW|RTLD_LOCAL +++\n"); + } else { + dlopenmode=RTLD_NOW|RTLD_GLOBAL; + if(debug) fprintf(stderr,"+++ Loading with mode RTLD_NOW|RTLD_GLOBAL +++\n"); + } + p=dlopen(path,dlopenmode); + if(!p) { + /* + Something went wrong. We try to remove "Kernel" string from the PLUMED_KERNEL variable + and load directly the shared library. Notice that this particular path is only expected + to be necessary when using PLUMED<=2.4 and the symbols in the main executable are + not visible. All the other cases (either PLUMED>=2.5 or symbols in the main executable visible) + should work correctly without entering here. + */ + fprintf(stderr,"+++ An error occurred. Message from dlopen(): %s +++\n",dlerror()); + strlenpath=strlen(path); + pathcopy=(char*) malloc(strlenpath+1); + strncpy(pathcopy,path,strlenpath+1); + pc=pathcopy+strlenpath-6; + while(pc>=pathcopy && memcmp(pc,"Kernel",6)) pc--; + if(pc>=pathcopy) { + memmove(pc, pc+6, strlen(pc)-5); + fprintf(stderr,"+++ Trying %s +++\n",pathcopy); + p=dlopen(pathcopy,dlopenmode); + if(!p) fprintf(stderr,"+++ An error occurred. Message from dlopen(): %s +++\n",dlerror()); + } + free(pathcopy); + } + if(p) { + functions.create=NULL; + functions.cmd=NULL; + functions.finalize=NULL; + /* + If the library was loaded, use dlsym to initialize pointers. + Notice that as of PLUMED 2.5 we ignore self registrations. + Pointers are searched in the form of a single pointer to a structure, which + is the standard way in PLUMED 2.5, as well as using alternative names used in + PLUMED 2.0 to 2.4 (e.g. plumedmain_create) and in some intermediate versions between + PLUMED 2.4 and 2.5 (e.g. plumed_plumedmain_create). The last chance is probably + unnecessary and might be removed at some point. + */ + plumed_symbol_table_ptr=(plumed_symbol_table_type*) dlsym(p,"plumed_symbol_table"); + if(plumed_symbol_table_ptr) functions=plumed_symbol_table_ptr->functions; + if(debug && plumed_symbol_table_ptr) { + fprintf(stderr,"+++ plumed_symbol_table version %i found at %p +++\n",plumed_symbol_table_ptr->version,(void*)plumed_symbol_table_ptr); + fprintf(stderr,"+++ plumed_function_pointers found at %p (%p,%p,%p) +++\n",(void*)&plumed_symbol_table_ptr->functions,(void*)functions.create,(void*)functions.cmd,(void*)functions.finalize); + } + + if(!functions.create) { + functions.create=(plumed_create_pointer) dlsym(p,"plumedmain_create"); + if(debug && functions.create) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_create",(void*)functions.create); + } + if(!functions.create) { + functions.create=(plumed_create_pointer) dlsym(p,"plumed_plumedmain_create"); + if(debug && functions.create) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_create",(void*)functions.create); + } + + if(!functions.cmd) { + functions.cmd=(plumed_cmd_pointer) dlsym(p,"plumedmain_cmd"); + if(debug && functions.cmd) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_cmd",(void*)functions.cmd); + } + if(!functions.cmd) { + functions.cmd=(plumed_cmd_pointer) dlsym(p,"plumed_plumedmain_cmd"); + if(debug && functions.cmd) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_cmd",(void*)functions.cmd); + } + + if(!functions.finalize) { + functions.finalize=(plumed_finalize_pointer) dlsym(p,"plumedmain_finalize"); + if(debug && functions.finalize) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_finalize",(void*)functions.finalize); + } + if(!functions.finalize) { + functions.finalize=(plumed_finalize_pointer) dlsym(p,"plumed_plumedmain_finalize"); + if(debug && functions.finalize) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_finalize",(void*)functions.finalize); + } + + if(functions.create && functions.cmd && functions.finalize) { + g=functions; + installed=1; + } else { + if(!functions.create) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_create not found +++\n"); + if(!functions.cmd) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_cmd not found +++\n"); + if(!functions.finalize) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_finalize not found +++\n"); + } + } + } + first=0; + } +#endif +#endif + return &g; +} + +/* C wrappers: */ + +plumed plumed_create(void) { + plumed p; + plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); + assert(h); + assert(h->create); + p.p=(*(h->create))(); + assert(p.p); + return p; +} + +void plumed_cmd(plumed p,const char*key,const void*val) { + plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); + assert(p.p); + assert(h); + assert(h->cmd); + (*(h->cmd))(p.p,key,val); +} + +void plumed_finalize(plumed p) { + plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); + assert(p.p); + assert(h); + assert(h->finalize); + (*(h->finalize))(p.p); + p.p=NULL; +} + +int plumed_installed(void) { + plumed_kernel_register(NULL); + return installed; +} + +/* we declare a Plumed_g_main object here, in such a way that it is always available */ + +static plumed gmain= {NULL}; + +plumed plumed_global(void) { + return gmain; +} + +void plumed_gcreate(void) { + assert(gmain.p==NULL); + gmain=plumed_create(); +} + +void plumed_gcmd(const char*key,const void*val) { + assert(gmain.p); + plumed_cmd(gmain,key,val); +} + +void plumed_gfinalize(void) { + assert(gmain.p); + plumed_finalize(gmain); + gmain.p=NULL; +} + +int plumed_ginitialized(void) { + if(gmain.p) return 1; + else return 0; +} + +void plumed_c2f(plumed p,char*c) { + unsigned i; + unsigned char* cc; + /* + Convert the address stored in p.p into a proper FORTRAN string + made of only ASCII characters. For this to work, the two following + assertions should be satisfied: + */ + assert(CHAR_BIT<=12); + assert(sizeof(p.p)<=16); + + assert(c); + cc=(unsigned char*)&p.p; + for(i=0; i. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifndef __PLUMED_wrapper_Plumed_h +#define __PLUMED_wrapper_Plumed_h + +/** +\page ReferencePlumedH Reference for interfacing MD codes with PLUMED + + Plumed.h and Plumed.c contain the external plumed interface, which is used to + integrate it with MD engines. This interface is very general, and is expected + not to change across plumed versions. Plumed.c also implements a dummy version + of the interface, so as to allow a code to be fully linked even if the plumed + library is not available yet. These files could be directly included in the official + host MD distribution. In this manner, it will be sufficient to link the plumed + library at link time (on all systems) or directly at runtime (on system where + dynamic loading is enabled) to include plumed features. + + Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o + needs to be linked with the host MD code immediately (whereas the rest of plumed + could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we + link the Plumed.o file we would like not to need any C++ library linked. In this + manner, we do not need to know which C++ compiler will be used to compile plumed. + The C++ library is only linked to the "rest" of plumed, which actually use it. + Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ + (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, + which basically includes Plumed.c, is compiled with the C++ compiler). This will + allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into + Plumed.cpp), without the need of configuring a plain C compiler. + + Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed + is hidden inside a single object type, which is described in C by a structure + (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a + fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct + and class interfaces, but the first should be preferred. The reference interface + is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers + around it. + + In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. + In the C and FORTRAN interfaces, all the routines are named plumed_*, to + avoid potential name clashes. Notice that the entire plumed library + is implemented in C++, and it is hidden inside the PLMD namespace. + If the used C++ compiler supports C++11, PLMD::Plumed object defines move semantics + so as to be usable in STL containers. That is, you can declare a std::vector. + + Handlers to the plumed object can be converted among different representations, + to allow inter-operability among languages. In C, there are tools to convert + to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. + + These handlers only contain a pointer to the real structure, so that + when a plumed object is brought from one language to another, + it brings a reference to the same environment. + + Moreover, to simplify life in all cases where a single Plumed object is + required for the entire simulation (which covers most of the practical + applications with conventional MD codes) it is possible to take advantage + of a global interface, which is implicitly referring to a unique global instance. + The global object should still be initialized and finalized properly. + + The basic method to send a message to plumed is +\verbatim + (C) plumed_cmd + (C++) PLMD::Plumed::cmd + (FORTRAN) PLUMED_F_CMD +\endverbatim + + To initialize a plumed object, use: +\verbatim + (C) plumed_create + (C++) (constructor of PLMD::Plumed) + (FORTRAN) PLUMED_F_CREATE +\endverbatim + + To finalize it, use +\verbatim + (C) plumed_finalize + (C++) (destructor of PLMD::Plumed) + (FORTRAN) PLUMED_F_FINALIZE +\endverbatim + + To access to the global-object, use +\verbatim + (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd + (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd + (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD +\endverbatim + + To check if the global object has been initialized, use +\verbatim + (C) plumed_ginitialized + (C++) PLMD::Plumed::ginitialized + (FORTRAN) PLUMED_F_GINITIALIZED +\endverbatim + + To check if plumed library is available (this is useful for runtime linking), use +\verbatim + (C) plumed_installed + (C++) PLMD::Plumed::installed + (FORTRAN) PLUMED_F_INSTALLED +\endverbatim + + To convert handlers use +\verbatim + (C) plumed_c2f (C to FORTRAN) + (C) plumed_f2c (FORTRAN to C) + (C++) Plumed(plumed) constructor (C to C++) + (C++) operator plumed() cast (C++ to C) + (C++) Plumed(char*) constructor (FORTRAN to C++) + (C++) toFortran(char*) (C++ to FORTRAN) +\endverbatim + +\verbatim + FORTRAN interface + SUBROUTINE PLUMED_F_INSTALLED(i) + INTEGER, INTENT(OUT) :: i + SUBROUTINE PLUMED_F_GINITIALIZED(i) + INTEGER, INTENT(OUT) :: i + SUBROUTINE PLUMED_F_GCREATE() + SUBROUTINE PLUMED_F_GCMD(key,val) + CHARACTER(LEN=*), INTENT(IN) :: key + UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) + SUBROUTINE PLUMED_F_GFINALIZE() + SUBROUTINE PLUMED_F_GLOBAL(p) + CHARACTER(LEN=32), INTENT(OUT) :: p + SUBROUTINE PLUMED_F_CREATE(p) + CHARACTER(LEN=32), INTENT(OUT) :: p + SUBROUTINE PLUMED_F_CMD(p,key,val) + CHARACTER(LEN=32), INTENT(IN) :: p + CHARACTER(LEN=*), INTENT(IN) :: key + UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) + SUBROUTINE PLUMED_F_FINALIZE(p) + CHARACTER(LEN=32), INTENT(IN) :: p +\endverbatim + + The main routine is "cmd", which accepts two arguments: + key is a string containing the name of the command + val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed + is going to modify val in several cases (using a const_cast). + In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). + The set of possible keys is the real API of the plumed library, and will be expanded with time. + New commands will be added, but backward compatibility will be retained as long as possible. + + To pass plumed a callback function use the following syntax (not available in FORTRAN yet) +\verbatim + plumed_function_holder ff; + ff.p=your_function; + plumed_cmd(plumed,"xxxx",&ff); +\endverbatim + (this is passing the your_function() function to the "xxxx" command) +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Generic function pointer */ +typedef void (*plumed_function_pointer)(void); + +/** + \brief Holder for function pointer. + + To pass plumed a callback function use the following syntax: +\verbatim + plumed_function_holder ff; + ff.p=your_function; + plumed_cmd(plumed,"xxxx",&ff); +\endverbatim + (this is going to pass the your_function() function to the "xxxx" command) +*/ + +typedef struct { + plumed_function_pointer p; +} plumed_function_holder; + +/** + \brief Main plumed object + + This is an object containing a Plumed instance, which should be used in + the MD engine. It should first be initialized with plumed_create(), + then it communicates with the MD engine using plumed_cmd(). Finally, + before the termination, it should be deallocated with plumed_finalize(). + Its interface is very simple and general, and is expected + not to change across plumed versions. See \ref ReferencePlumedH. +*/ +typedef struct { + /** + \private + \brief Void pointer holding the real PlumedMain structure + */ + void*p; +} plumed; + +/** \relates plumed + \brief Constructor + + \return The constructed plumed object +*/ +plumed plumed_create(void); + +/** \relates plumed + \brief Tells p to execute a command + + \param p The plumed object on which command is acting + \param key The name of the command to be executed + \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), + but for some choice of key it can change the content +*/ +void plumed_cmd(plumed p,const char*key,const void*val); + +/** \relates plumed + \brief Destructor + + \param p The plumed object to be deallocated +*/ +void plumed_finalize(plumed p); + +/** \relates plumed + \brief Check if plumed is installed (for runtime binding) + + \return 1 if plumed is installed, 0 otherwise +*/ +int plumed_installed(void); + +/** \relates plumed + \brief Retrieves an handler to the global structure. +*/ +plumed plumed_global(void); + +/** \relates plumed + \brief Check if the global interface has been initialized + + \return 1 if plumed has been initialized, 0 otherwise +*/ +int plumed_ginitialized(void); + +/* global C interface, working on a global object */ + +/** \relates plumed + \brief Constructor for the global interface. + + \note Equivalent to plumed_create(), but initialize the static global plumed object +*/ +void plumed_gcreate(void); + +/** \relates plumed + \brief Tells to the global interface to execute a command. + + \param key The name of the command to be executed + \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), + but for some choice of key it can change the content + + \note Equivalent to plumed_cmd(), but acting on the global plumed object. + It thus does not require the plumed object to be specified. +*/ +void plumed_gcmd(const char* key,const void* val); + +/** \relates plumed + \brief Destructor for the global interface. + + \note Equivalent to plumed_finalize(), but acting on the global plumed object. + It thus does not require the plumed object to be specified. +*/ +void plumed_gfinalize(void); + +/* routines to convert char handler from/to plumed objects */ + +/** \related plumed + \brief Converts a C handler to a FORTRAN handler + + \param p The C handler + \param c The FORTRAN handler (a char[32]) + + This function can be used to convert a plumed object created in C to + a plumed handler that can be used in FORTRAN. +\verbatim +#include +int main(int argc,char*argv[]){ + plumed p; + p=plumed_create(); + char fortran_handler[32]; + plumed_c2f(p,fortran_handler); + printf("DEBUG: this is a string representation for the plumed handler: %s\n",fortran_handler); + fortran_routine(fortran_handler); + plumed_finalize(p); + return 0; +} +\endverbatim + Here `fortran_routine` is a routine implemented in FORTRAN that manipulates the + fortran_handler. +*/ +void plumed_c2f(plumed p,char* c); + +/** \related plumed + \brief Converts a FORTRAN handler to a C handler + \param c The FORTRAN handler (a char[32]) + \return The C handler + + This function can be used to convert a plumed object created in FORTRAN + to a plumed handler that can be used in C. +\verbatim +void c_routine(char handler[32]){ + plumed p; + p=plumed_f2c(handler); + plumed_cmd(p,"init",NULL); +} +\endverbatim + Here `c_routine` is a C function that can be called from FORTRAN + and interact with the provided plumed handler. +*/ +plumed plumed_f2c(const char* c); + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus + +/* this is to include the NULL pointer */ +#include + +/* C++ interface is hidden in PLMD namespace (same as plumed library) */ +namespace PLMD { + +/** + C++ wrapper for \ref plumed. + + This class provides a C++ interface to PLUMED. +*/ + +class Plumed { + /** + C structure. + */ + plumed main; + /** + keeps track if the object was created from scratch using + the defaults destructor (reference=false) or if it was imported + from C or FORTRAN (reference=true). In the latter case, the + plumed_finalize() method is not called when destructing the object, + since it is expected to be finalized in the C/FORTRAN code + */ + bool reference; +public: + /** + Check if plumed is installed (for runtime binding) + \return true if plumed is installed, false otherwise + \note Equivalent to plumed_installed() but returns a bool + */ + static bool installed(); + /** + Check if global-plumed has been initialized + \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been + called), false otherwise. + \note Equivalent to plumed_ginitialized() but returns a bool + */ + static bool ginitialized(); + /** + Initialize global-plumed. + \note Equivalent to plumed_gcreate() + */ + static void gcreate(); + /** + Send a command to global-plumed + \param key The name of the command to be executed + \param val The argument. It is declared as const to allow calls like gcmd("A","B"), + but for some choice of key it can change the content + \note Equivalent to plumed_gcmd() + */ + static void gcmd(const char* key,const void* val); + /** + Finalize global-plumed + */ + static void gfinalize(); + /** + Returns the Plumed global object + \return The Plumed global object + */ + static Plumed global(); + /** + Constructor. + \note Performs the same task a plumed_create() + */ + Plumed(); + /** + Clone a Plumed object from a FORTRAN char* handler + \param c The FORTRAN handler (a char[32]). + + \attention The Plumed object created in this manner + will not finalize the corresponding plumed structure. + It is expected that the FORTRAN code calls plumed_c_finalize for it + */ +// to have maximum portability of this file I do not use the explicit keyword here +// I thus add a suppress command for cppcheck +// cppcheck-suppress noExplicitConstructor + Plumed(const char*c); + /** + Clone a Plumed object from a C plumed structure + \param p The C plumed structure. + + \attention The Plumed object created in this manner + will not finalize the corresponding plumed structure. + It is expected that the C code calls plumed_finalize for it + */ +// to have maximum portability of this file I do not use the explicit keyword here +// I thus add a suppress command for cppcheck +// cppcheck-suppress noExplicitConstructor + Plumed(plumed p); +private: + /** Copy constructor is disabled (private and unimplemented) + The problem here is that after copying it will not be clear who is + going to finalize the corresponding plumed structure. + */ + Plumed(const Plumed&); + /** Assignment operator is disabled (private and unimplemented) + The problem here is that after copying it will not be clear who is + going to finalize the corresponding plumed structure. + */ + Plumed&operator=(const Plumed&); +public: + /* + PLUMED 2.4 requires a C++11 compiler. + Anyway, since Plumed.h file might be redistributed with other codes + and it should be possible to combine it with earlier PLUMED versions, + we here explicitly check if C+11 is available before enabling move semantics. + This could still create problems if a compiler 'cheats', setting __cplusplus > 199711L + but not supporting move semantics. Hopefully will not happen! + */ +#if __cplusplus > 199711L + /** Move constructor. + Only if move semantics is enabled. + It allows storing PLMD::Plumed objects in STL containers. + */ + Plumed(Plumed&&); + /** Move assignment. + Only if move semantics is enabled. + */ + Plumed& operator=(Plumed&&); +#endif + /** + Retrieve the C plumed structure for this object + */ + operator plumed()const; + /** + Retrieve a FORTRAN handler for this object + \param c The FORTRAN handler (a char[32]). + */ + void toFortran(char*c)const; + /** + Send a command to this plumed object + \param key The name of the command to be executed + \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), + but for some choice of key it can change the content + \note Equivalent to plumed_cmd() + */ + void cmd(const char*key,const void*val=NULL); + /** + Destructor + + Destructor is virtual so as to allow correct inheritance from Plumed object. + To avoid linking problems with g++, I specify "inline" also here (in principle + it should be enough to specify it down in the definition of the function, but + for some reason that I do not understand g++ does not inline it properly in that + case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the + way it is done here seems to work properly). + */ + inline virtual ~Plumed(); +}; + +/* All methods are inlined so as to avoid the compilation of an extra c++ file */ + +inline +bool Plumed::installed() { + return plumed_installed(); +} + +inline +Plumed::Plumed(): + main(plumed_create()), + reference(false) +{} + +inline +Plumed::Plumed(const char*c): + main(plumed_f2c(c)), + reference(true) +{} + +inline +Plumed::Plumed(plumed p): + main(p), + reference(true) +{} + +#if __cplusplus > 199711L +inline +Plumed::Plumed(Plumed&& p): + main(p.main), + reference(p.reference) +{} + +inline +Plumed& Plumed::operator=(Plumed&& p) { + main=p.main; + reference=p.reference; + return *this; +} +#endif + +inline +Plumed::operator plumed()const { + return main; +} + +inline +void Plumed::toFortran(char*c)const { + plumed_c2f(main,c); +} + +inline +void Plumed::cmd(const char*key,const void*val) { + plumed_cmd(main,key,val); +} + +inline +Plumed::~Plumed() { + if(!reference)plumed_finalize(main); +} + +inline +bool Plumed::ginitialized() { + return plumed_ginitialized(); +} + +inline +void Plumed::gcreate() { + plumed_gcreate(); +} + +inline +void Plumed::gcmd(const char* key,const void* val) { + plumed_gcmd(key,val); +} + +inline +void Plumed::gfinalize() { + plumed_gfinalize(); +} + +inline +Plumed Plumed::global() { + return plumed_global(); +} + +} + +#endif + + +#endif diff --git a/src/USER-PLUMED/Plumed.inc b/src/USER-PLUMED/Plumed.inc new file mode 100644 index 0000000000..26bc028d66 --- /dev/null +++ b/src/USER-PLUMED/Plumed.inc @@ -0,0 +1,3 @@ +# PLUMED: runtime installation +PLUMED_LOAD= /data/gt/mycodes/plumed2/src/lib/libplumedWrapper.a -ldl +PLUMED_DEPENDENCIES= diff --git a/src/USER-PLUMED/README b/src/USER-PLUMED/README new file mode 100644 index 0000000000..02a0229e57 --- /dev/null +++ b/src/USER-PLUMED/README @@ -0,0 +1,55 @@ +This package implements the "fix plumed" command, which can be used +in a LAMMPS input script. + +The fix allows enhanced sampling methods such as umbrella sampling and +metadynamics to be used. Furthermore, PLUMED can be used to perform a +wide range of analyses on trajectories on the fly as they are generated. + +The package uses the "PLUMED" library, whose source code is not included +in the LAMMPS source code distribution. The files in the USER-PLUMED package +folder implement an interface between LAMMPS and PLUMED, that are written +and maintained by Gareth Tribello (gareth.tribello@gmail.com). + +PLUMED must instead be downloaded and compiled separately to LAMMPS. This building +and compiling of PLUEMD can be done before or after the building of LAMMPS as LAMMPS +calls PLUMED as a dynamic library. If you wish to use PLUMED with LAMMPS, however, +you must run the command: + +make yes-user-plumed + +before compiling LAMMPS. Furthermore, you must ensure that PLUMED is in your +PATH when running a LAMMPS calculation that takes advantage of PLUMED. If +PLUMED is not in the PATH an error will be returned whenever LAMMPS encounters +the fix plumed command in its input. To be clear, however, LAMMPS will run if +it is compiled with fix-plumed enabled on inputs that do not contain a fix +plumed command when PLUMED is not in the PATH. + +More info about the PLUMED library can be found at: + +www.plumed.org + +and in the reference articles: + +PLUMED2: New feathers for an old bird +G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, +Comp. Phys. Comm 185, 604 (2014) +https://doi.org/10.1016/j.cpc.2013.09.018 + +PLUMED: a portable plugin for free energy calculations with molecular dynamics +M. Bonomi, D. Branduardi, G. Bussi, C. Camilloni, D. Provasi, P. Raiteri, D. Donadio, F. Marinelli, F. Pietrucci, R.A. Broglia and M. Parrinello +Comp. Phys. Comm. 180, 1961 (2009) +https://doi.org/10.1016/j.cpc.2009.05.011 + +Instructions explaining how to use PLUMED and LAMMPS in tandem can be found on the PLUMED website, which also gives +numerous example scripts for PLUMED as well as citations to articles that dcoment the various methods that are +implemented within PLUMED. + +There are also example scripts for using this package in the folder +examples/USER/colvars, as well as on the GitHub page for PLUMED. + +Please contact Gareth Tribello (gareth.tribello@gmail.com) for questions +regarding this package. + +--------------------------------- + +Version: 2016-12-22 diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp new file mode 100644 index 0000000000..91afd367b1 --- /dev/null +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -0,0 +1,291 @@ +#include "math.h" +#include "stdlib.h" +#include "string.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "respa.h" +#include "domain.h" +#include "error.h" +#include "group.h" +#include "fix_plumed.h" +#include "universe.h" +#include "compute.h" +#include "modify.h" +#include "pair.h" + +using namespace LAMMPS_NS; +using namespace PLMD; +using namespace FixConst; + +#define INVOKED_SCALAR 1 + +FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), + p(NULL), + nlocal(0), + gatindex(NULL), + masses(NULL), + charges(NULL) +{ +// Not sure this is really necessary: + if (!atom->tag_enable) error->all(FLERR,"fix plumed requires atom tags"); +// Initialize plumed: + p=new PLMD::Plumed; + +// If the -partition option is activated then enable inter-partition communication + if (universe->existflag == 1) { + int me; + MPI_Comm inter_comm; + MPI_Comm_rank(world,&me); + // Change MPI_COMM_WORLD to universe->uworld which seems more appropriate + MPI_Comm_split(universe->uworld,me,0,&inter_comm); + p->cmd("GREX setMPIIntracomm",&world); + if (me == 0) { + // The inter-partition communicator is only defined for the root in + // each partition (a.k.a. world). This is due to the way in which + // it is defined inside plumed. + p->cmd("GREX setMPIIntercomm",&inter_comm); + } + p->cmd("GREX init",NULL); + } + // The general communicator is independent of the existence of partitions, + // if there are partitions, world is defined within each partition, + // whereas if partitions are not defined then world is equal to MPI_COMM_WORLD. + p->cmd("setMPIComm",&world); + +// Set up units +// LAMMPS units wrt kj/mol - nm - ps +// Set up units + + if (force->boltz == 1.0){ +// LAMMPS units lj + p->cmd("setNaturalUnits"); + } else { + double energyUnits=1.0; + double lengthUnits=1.0; + double timeUnits=1.0; + if (force->boltz == 0.0019872067){ +// LAMMPS units real :: kcal/mol; angstrom; fs + energyUnits=4.184; + lengthUnits=0.1; + timeUnits=0.001; + } else if (force->boltz == 8.617343e-5){ +// LAMMPS units metal :: eV; angstrom; ps + energyUnits=96.48530749925792; + lengthUnits=0.1; + timeUnits=1.0; + } else if (force->boltz == 1.3806504e-23){ +// LAMMPS units si :: Joule, m; s + energyUnits=0.001; + lengthUnits=1.e-9; + timeUnits=1.e-12; + } else if (force->boltz == 1.3806504e-16){ +// LAMMPS units cgs :: erg; cms;, s + energyUnits=6.0221418e13; + lengthUnits=1.e-7; + timeUnits=1.e-12; + } else if (force->boltz == 3.16681534e-6){ +// LAMMPS units electron :: Hartree, bohr, fs + energyUnits=2625.5257; + lengthUnits=0.052917725; + timeUnits=0.001; + } else error->all(FLERR,"Odd LAMMPS units, plumed cannot work with that"); + p->cmd("setMDEnergyUnits",&energyUnits); + p->cmd("setMDLengthUnits",&lengthUnits); + p->cmd("setMDTimeUnits",&timeUnits); + } + +// Read fix parameters: + int next=0; + for(int i=3;iexistflag == 1){ + // Each replica writes an independent log file + // with suffix equal to the replica id + char str_num[32], logFile[1024]; + sprintf(str_num,".%d",universe->iworld); + strncpy(logFile,arg[i],1024-32); + strcat(logFile,str_num); + p->cmd("setLogFile",logFile); + next=0; + } else { + // partition option not used + p->cmd("setLogFile",arg[i]); + next=0; + } + } + else if(!strcmp(arg[i],"plumedfile"))next=2; + else if(next==2){ + p->cmd("setPlumedDat",arg[i]); + next=0; + } + else error->all(FLERR,"syntax error in fix plumed - use 'fix name plumed plumedfile plumed.dat outfile plumed.out' "); + } + if(next==1) error->all(FLERR,"missing argument for outfile option"); + if(next==2) error->all(FLERR,"missing argument for plumedfile option"); + + p->cmd("setMDEngine","LAMMPS"); + + int natoms=int(atom->natoms); + p->cmd("setNatoms",&natoms); + + double dt=update->dt; + p->cmd("setTimestep",&dt); + + virial_flag=1; + scalar_flag = 1; + +// This is the real initialization: + p->cmd("init"); + +// Define compute to calculate potential energy + char *id_pe = (char *) "thermo_pe"; + int ipe = modify->find_compute(id_pe); + c_pe = modify->compute[ipe]; + // Trigger computation of potential energy every step + c_pe->addstep(update->ntimestep+1); +} + +FixPlumed::~FixPlumed() +{ + delete p; +} + +int FixPlumed::setmask() +{ + // set with a bitmask how and when apply the force from plumed + int mask = 0; + mask |= POST_FORCE; + mask |= THERMO_ENERGY; + mask |= POST_FORCE_RESPA; + mask |= MIN_POST_FORCE; + return mask; +} + +void FixPlumed::init() +{ + if (strcmp(update->integrate_style,"respa") == 0) + nlevels_respa = ((Respa *) update->integrate)->nlevels; +} + +void FixPlumed::setup(int vflag) +{ + if (strcmp(update->integrate_style,"verlet") == 0) + post_force(vflag); + else { + ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); + post_force_respa(vflag,nlevels_respa-1,0); + ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); + } +} + +void FixPlumed::min_setup(int vflag) +{ + post_force(vflag); +} + +void FixPlumed::post_force(int vflag) +{ + int update_gatindex=0; +// Try to find out if the domain decomposition has been updated: + if(nlocal!=atom->nlocal){ + if(charges) delete [] charges; + if(masses) delete [] masses; + if(gatindex) delete [] gatindex; + nlocal=atom->nlocal; + gatindex=new int [nlocal]; + masses=new double [nlocal]; + charges=new double [nlocal]; + update_gatindex=1; + } else { + for(int i=0;itag[i]-1){ + update_gatindex=1; + break; + } + } + } + MPI_Allreduce(MPI_IN_PLACE,&update_gatindex,1,MPI_INT,MPI_SUM,world); + +// In case it has been updated, rebuild the local mass/charges array +// and tell plumed about the change: + if(update_gatindex){ + for(int i=0;itag[i]-1; + masses[i]=atom->mass[atom->type[i]]; + if(atom->q) charges[i]=atom->q[atom->type[i]]; + } + p->cmd("setAtomsNlocal",&nlocal); + p->cmd("setAtomsGatindex",gatindex); + } + + +// set up local virial/box. plumed uses full 3x3 matrices + double virial[3][3]; + for(int i=0;i<3;i++) for(int j=0;j<3;j++) virial[i][j]=0.0; + double box[3][3]; + for(int i=0;i<3;i++) for(int j=0;j<3;j++) box[i][j]=0.0; + box[0][0]=domain->h[0]; + box[1][1]=domain->h[1]; + box[2][2]=domain->h[2]; + box[2][1]=domain->h[3]; + box[2][0]=domain->h[4]; + box[1][0]=domain->h[5]; + +// local variable with timestep: + int step=update->ntimestep; + +// pass all pointers to plumed: + p->cmd("setStep",&step); + p->cmd("setPositions",&atom->x[0][0]); + p->cmd("setBox",&box[0][0]); + p->cmd("setForces",&atom->f[0][0]); + p->cmd("setMasses",&masses[0]); + if(atom->q) p->cmd("setCharges",&charges[0]); + p->cmd("setVirial",&virial[0][0]); + p->cmd("getBias",&bias); + +// pass the energy + double pot_energy = 0.; + c_pe->compute_scalar(); + c_pe->invoked_flag |= INVOKED_SCALAR; + pot_energy = c_pe->scalar; + int nprocs; + // Divide energy by number of processors + // Plumed wants it this way + MPI_Comm_size(world,&nprocs); + pot_energy /= nprocs; + p->cmd("setEnergy",&pot_energy); + // Trigger computation of potential energy every step + c_pe->addstep(update->ntimestep+1); + +// do the real calculation: + p->cmd("calc"); + +// retransform virial to lammps representation: + Fix::virial[0]=-virial[0][0]; + Fix::virial[1]=-virial[1][1]; + Fix::virial[2]=-virial[2][2]; + Fix::virial[3]=-virial[0][1]; + Fix::virial[4]=-virial[0][2]; + Fix::virial[5]=-virial[1][2]; +} + +void FixPlumed::post_force_respa(int vflag, int ilevel, int iloop) +{ + if (ilevel == nlevels_respa-1) post_force(vflag); +} + +void FixPlumed::min_post_force(int vflag) +{ + post_force(vflag); +} + +double FixPlumed::compute_scalar() +{ + return bias; +} + + diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h new file mode 100644 index 0000000000..055dc6f1d4 --- /dev/null +++ b/src/USER-PLUMED/fix_plumed.h @@ -0,0 +1,53 @@ + +#ifdef FIX_CLASS + +FixStyle(plumed,FixPlumed) + +#else + +#ifndef LMP_FIX_PLUMED_H +#define LMP_FIX_PLUMED_H + +#include "fix.h" +#include "compute.h" +// the plumed header that defines the class// +#include "../Plumed.h" + +namespace LAMMPS_NS { + +class FixPlumed : public Fix { + public: + FixPlumed(class LAMMPS *, int, char **); + ~FixPlumed(); + int setmask(); + void init(); + void setup(int); + void min_setup(int); + void post_force(int); + void post_force_respa(int, int, int); + void min_post_force(int); + double compute_scalar(); + + private: +// pointer to plumed object: + PLMD::Plumed*p; +// number of atoms local to this process: + int nlocal; +// array of atom indexes local to this process: + int*gatindex; +// array of masses for local atoms: + double*masses; +// array of charges for local atoms: + double*charges; +// this is something to enable respa + int nlevels_respa; +// output bias potential + double bias; +// Compute for the energy + class Compute *c_pe; +}; + +}; + +#endif +#endif From f5642ac292b88824c76ef4a566d0d0274ca854c5 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 29 Jun 2018 16:28:53 +0100 Subject: [PATCH 002/273] Removed reference to local version of PLUMED from interface --- src/USER-PLUMED/Install.sh | 6 ++---- src/USER-PLUMED/Plumed.inc | 3 --- 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 src/USER-PLUMED/Plumed.inc diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index 3e0bef56ca..01552d7134 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -10,7 +10,7 @@ if (test $1 = 1) then if (test -e ../Makefile.package.settings) then # multiline form needed for BSD sed on Macs sed -i -e '4 i \ -include ..\/Plumed.inc +PLUMED_LOAD=Plumed.o -ldl ' ../Makefile.package.settings fi @@ -18,7 +18,6 @@ include ..\/Plumed.inc cp fix_plumed.h .. cp Plumed.h .. cp Plumed.cpp .. - cp Plumed.inc .. elif (test $1 = 0) then @@ -27,13 +26,12 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*Plumed\.inc.*$/d' ../Makefile.package.settings + sed -i -e '/PLUMED_LOAD=Plumed.o -ldl/d' ../Makefile.package.settings fi rm -f ../fix_plumed.cpp rm -f ../fix_plumed.h rm -f ../Plumed.h rm -f ../Plumed.cpp - rm -f ../Plumed.inc fi diff --git a/src/USER-PLUMED/Plumed.inc b/src/USER-PLUMED/Plumed.inc deleted file mode 100644 index 26bc028d66..0000000000 --- a/src/USER-PLUMED/Plumed.inc +++ /dev/null @@ -1,3 +0,0 @@ -# PLUMED: runtime installation -PLUMED_LOAD= /data/gt/mycodes/plumed2/src/lib/libplumedWrapper.a -ldl -PLUMED_DEPENDENCIES= From 9b4452959180bb492f7cf2bccc9e488f046e3014 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 29 Jun 2018 17:46:51 +0100 Subject: [PATCH 003/273] Added an example --- examples/USER/plumed/data.peptide | 6531 ++++++++++++++++++++++++ examples/USER/plumed/in.peptide-plumed | 40 + examples/USER/plumed/plumed.dat | 6 + 3 files changed, 6577 insertions(+) create mode 100644 examples/USER/plumed/data.peptide create mode 100644 examples/USER/plumed/in.peptide-plumed create mode 100644 examples/USER/plumed/plumed.dat diff --git a/examples/USER/plumed/data.peptide b/examples/USER/plumed/data.peptide new file mode 100644 index 0000000000..f9dfb6e485 --- /dev/null +++ b/examples/USER/plumed/data.peptide @@ -0,0 +1,6531 @@ +LAMMPS Description + + 2004 atoms + 1365 bonds + 786 angles + 207 dihedrals + 12 impropers + + 14 atom types + 18 bond types + 31 angle types + 21 dihedral types + 2 improper types + + 36.840194 64.211560 xlo xhi + 41.013691 68.385058 ylo yhi + 29.768095 57.139462 zlo zhi + +Masses + + 1 12.0110 + 2 12.0110 + 3 15.9990 + 4 1.0080 + 5 14.0070 + 6 12.0110 + 7 12.0110 + 8 12.0110 + 9 15.9990 + 10 1.0080 + 11 1.0080 + 12 32.0660 + 13 16.0000 + 14 1.0100 + +Pair Coeffs + + 1 0.110000 3.563595 0.110000 3.563595 + 2 0.080000 3.670503 0.010000 3.385415 + 3 0.120000 3.029056 0.120000 2.494516 + 4 0.022000 2.351973 0.022000 2.351973 + 5 0.200000 3.296325 0.200000 2.761786 + 6 0.020000 4.053589 0.010000 3.385415 + 7 0.055000 3.875410 0.010000 3.385415 + 8 0.070000 3.550053 0.070000 3.550053 + 9 0.152100 3.153782 0.152100 3.153782 + 10 0.046000 0.400014 0.046000 0.400014 + 11 0.030000 2.420037 0.030000 2.420037 + 12 0.450000 3.563595 0.450000 3.563595 + 13 0.152100 3.150570 0.152100 3.150570 + 14 0.046000 0.400014 0.046000 0.400014 + +Bond Coeffs + + 1 249.999999 1.490000 + 2 620.000001 1.230000 + 3 370.000000 1.345000 + 4 322.000001 1.111000 + 5 319.999999 1.430000 + 6 440.000000 0.997000 + 7 222.500001 1.538000 + 8 330.000001 1.080000 + 9 230.000000 1.490000 + 10 309.000001 1.111000 + 11 305.000000 1.375000 + 12 340.000001 1.080000 + 13 334.300000 1.411000 + 14 545.000001 0.960000 + 15 222.500001 1.530000 + 16 198.000000 1.818000 + 17 239.999999 1.816000 + 18 450.000000 0.957200 + +Angle Coeffs + + 1 33.000000 109.500000 30.000000 2.163000 + 2 50.000000 120.000000 0.000000 0.000000 + 3 34.000000 123.000000 0.000000 0.000000 + 4 80.000000 121.000000 0.000000 0.000000 + 5 80.000000 116.500000 0.000000 0.000000 + 6 80.000000 122.500000 0.000000 0.000000 + 7 35.500000 108.400000 5.400000 1.802000 + 8 50.000000 107.000000 0.000000 0.000000 + 9 70.000000 113.500000 0.000000 0.000000 + 10 48.000000 108.000000 0.000000 0.000000 + 11 35.000000 117.000000 0.000000 0.000000 + 12 51.800000 107.500000 0.000000 0.000000 + 13 33.430000 110.100000 22.530000 2.179000 + 14 52.000000 108.000000 0.000000 0.000000 + 15 50.000000 109.500000 0.000000 0.000000 + 16 35.000000 111.000000 0.000000 0.000000 + 17 45.800000 122.300000 0.000000 0.000000 + 18 49.300000 107.500000 0.000000 0.000000 + 19 40.000000 120.000000 35.000000 2.416200 + 20 30.000000 120.000000 22.000000 2.152500 + 21 45.200000 120.000000 0.000000 0.000000 + 22 65.000000 108.000000 0.000000 0.000000 + 23 35.500000 109.000000 5.400000 1.802000 + 24 36.000000 115.000000 0.000000 0.000000 + 25 58.350000 113.500000 11.160000 2.561000 + 26 58.000000 114.500000 0.000000 0.000000 + 27 26.500000 110.100000 22.530000 2.179000 + 28 34.000000 95.000000 0.000000 0.000000 + 29 46.100000 111.300000 0.000000 0.000000 + 30 51.500000 109.500000 0.000000 0.000000 + 31 55.000000 104.520000 0.000000 0.000000 + +Dihedral Coeffs + + 1 0.200000 1 180 1.000000 + 2 1.800000 1 0 1.000000 + 3 0.000000 1 0 1.000000 + 4 1.600000 1 0 0.500000 + 5 2.500000 2 180 0.500000 + 6 2.500000 2 180 1.000000 + 7 0.600000 1 0 1.000000 + 8 0.200000 3 0 1.000000 + 9 0.230000 2 180 1.000000 + 10 0.040000 3 0 1.000000 + 11 1.400000 1 0 1.000000 + 12 3.100000 2 180 1.000000 + 13 4.200000 2 180 1.000000 + 14 3.100000 2 180 0.500000 + 15 0.990000 2 180 1.000000 + 16 2.400000 2 180 1.000000 + 17 0.195000 3 0 1.000000 + 18 0.240000 1 180 0.500000 + 19 0.370000 3 0 0.500000 + 20 0.280000 3 0 1.000000 + 21 0.010000 3 0 1.000000 + +Improper Coeffs + + 1 120.000000 0.000000 + 2 20.000000 0.000000 + +Atoms + + 1 1 1 0.510 43.99993 58.52678 36.78550 0 0 0 + 2 1 2 -0.270 45.10395 58.23499 35.86693 0 0 0 + 3 1 3 -0.510 43.81519 59.54928 37.43995 0 0 0 + 4 1 4 0.090 45.71714 57.34797 36.13434 0 0 0 + 5 1 4 0.090 45.72261 59.13657 35.67007 0 0 0 + 6 1 4 0.090 44.66624 58.09539 34.85538 0 0 0 + 7 1 5 -0.470 43.28193 57.47427 36.91953 0 0 0 + 8 1 6 0.070 42.07157 57.45486 37.62418 0 0 0 + 9 1 1 0.510 42.19985 57.57789 39.12163 0 0 0 + 10 1 3 -0.510 41.88641 58.62251 39.70398 0 0 0 + 11 1 7 -0.180 41.25052 56.15304 37.41811 0 0 0 + 12 1 8 0.000 40.88511 55.94638 35.97460 0 0 0 + 13 1 8 -0.115 41.48305 54.96372 35.11223 0 0 0 + 14 1 8 -0.115 39.74003 56.60996 35.46443 0 0 0 + 15 1 8 -0.115 41.02111 54.75715 33.80764 0 0 0 + 16 1 8 -0.115 39.26180 56.39194 34.12024 0 0 0 + 17 1 8 0.110 39.92330 55.46092 33.27135 0 0 0 + 18 1 9 -0.540 39.48164 55.22919 31.91865 0 0 0 + 19 1 10 0.310 43.60633 56.61693 36.52744 0 0 0 + 20 1 4 0.090 41.49619 58.31145 37.30543 0 0 0 + 21 1 4 0.090 41.88498 55.29476 37.72657 0 0 0 + 22 1 4 0.090 40.30899 56.19690 38.00627 0 0 0 + 23 1 11 0.115 42.31528 54.36176 35.44606 0 0 0 + 24 1 11 0.115 39.26330 57.31216 36.13230 0 0 0 + 25 1 11 0.115 41.62695 54.10606 33.19490 0 0 0 + 26 1 11 0.115 38.42147 56.98236 33.78612 0 0 0 + 27 1 10 0.430 38.78233 55.86217 31.74004 0 0 0 + 28 1 5 -0.470 42.79933 56.56370 39.79000 0 0 0 + 29 1 7 -0.020 42.96709 56.75379 41.28116 0 0 0 + 30 1 1 0.510 43.83019 55.68988 41.92255 0 0 0 + 31 1 3 -0.510 44.98521 55.93104 42.21713 0 0 0 + 32 1 10 0.310 43.13466 55.75696 39.30966 0 0 0 + 33 1 4 0.090 42.04692 56.86721 41.83507 0 0 0 + 34 1 4 0.090 43.52938 57.66324 41.43329 0 0 0 + 35 1 5 -0.470 43.26792 54.43342 42.07043 0 0 0 + 36 1 7 -0.020 43.92411 53.28930 42.63327 0 0 0 + 37 1 1 0.510 43.51012 53.02289 44.10510 0 0 0 + 38 1 3 -0.510 42.35086 53.07863 44.50806 0 0 0 + 39 1 10 0.310 42.28859 54.34993 41.90323 0 0 0 + 40 1 4 0.090 44.98464 53.47473 42.54797 0 0 0 + 41 1 4 0.090 43.49715 52.54787 41.97419 0 0 0 + 42 1 5 -0.470 44.51925 52.64535 44.88133 0 0 0 + 43 1 6 0.070 44.47588 52.35054 46.24397 0 0 0 + 44 1 1 0.510 45.40218 53.34579 46.94730 0 0 0 + 45 1 3 -0.510 45.23520 54.55893 46.92038 0 0 0 + 46 1 7 -0.180 44.77960 50.82831 46.50232 0 0 0 + 47 1 8 0.000 43.72184 49.84551 45.98093 0 0 0 + 48 1 8 -0.115 44.14810 49.00477 44.97195 0 0 0 + 49 1 8 -0.115 42.43499 49.66652 46.53541 0 0 0 + 50 1 8 -0.115 43.26154 48.00434 44.46769 0 0 0 + 51 1 8 -0.115 41.54732 48.79670 45.95416 0 0 0 + 52 1 8 -0.115 41.98220 47.90746 44.95574 0 0 0 + 53 1 10 0.310 45.39510 52.50937 44.42482 0 0 0 + 54 1 4 0.090 43.51312 52.58974 46.67092 0 0 0 + 55 1 4 0.090 44.89709 50.54313 47.56965 0 0 0 + 56 1 4 0.090 45.72096 50.49337 46.01654 0 0 0 + 57 1 11 0.115 45.13573 49.07933 44.54134 0 0 0 + 58 1 11 0.115 42.07869 50.34816 47.29358 0 0 0 + 59 1 11 0.115 43.47793 47.29281 43.68456 0 0 0 + 60 1 11 0.115 40.52625 48.76134 46.30425 0 0 0 + 61 1 11 0.115 41.35446 47.13287 44.54059 0 0 0 + 62 1 5 -0.470 46.41448 52.86278 47.68291 0 0 0 + 63 1 6 0.070 47.25136 53.68184 48.51163 0 0 0 + 64 1 1 0.510 48.33905 54.40097 47.73886 0 0 0 + 65 1 3 -0.510 49.27132 53.85220 47.16549 0 0 0 + 66 1 7 -0.180 47.88329 52.75681 49.60227 0 0 0 + 67 1 7 -0.140 48.82515 53.51102 50.61578 0 0 0 + 68 1 12 -0.090 48.12492 55.00373 51.43039 0 0 0 + 69 1 2 -0.220 47.70783 54.12980 53.04072 0 0 0 + 70 1 10 0.310 46.67199 51.90088 47.73231 0 0 0 + 71 1 4 0.090 46.64593 54.43552 48.99310 0 0 0 + 72 1 4 0.090 48.41361 51.90817 49.11968 0 0 0 + 73 1 4 0.090 47.08748 52.35196 50.26341 0 0 0 + 74 1 4 0.090 49.16067 52.81305 51.41238 0 0 0 + 75 1 4 0.090 49.73705 53.67062 50.00155 0 0 0 + 76 1 4 0.090 47.18593 54.84215 53.71488 0 0 0 + 77 1 4 0.090 48.69939 53.91624 53.49408 0 0 0 + 78 1 4 0.090 47.19749 53.18294 52.76264 0 0 0 + 79 1 5 -0.470 48.34472 55.71775 47.80498 0 0 0 + 80 1 2 -0.110 49.37792 56.51754 47.29492 0 0 0 + 81 1 10 0.310 47.51777 56.11617 48.19410 0 0 0 + 82 1 4 0.090 50.41495 56.13038 47.38980 0 0 0 + 83 1 4 0.090 49.23515 57.51193 47.76940 0 0 0 + 84 1 4 0.090 49.28612 56.52094 46.18773 0 0 0 + 85 2 13 -0.834 52.28049 45.72878 41.48140 -1 0 1 + 86 2 14 0.417 51.97210 46.07066 40.64218 -1 0 1 + 87 2 14 0.417 52.43689 44.79855 41.31868 -1 0 1 + 88 3 13 -0.834 43.84472 45.66062 47.17660 -2 -1 -1 + 89 3 14 0.417 43.42120 44.88337 46.81226 -2 -1 -1 + 90 3 14 0.417 44.31099 46.04907 46.43636 -2 -1 -1 + 91 4 13 -0.834 51.27805 50.25403 54.67397 0 0 -1 + 92 4 14 0.417 50.81295 50.23728 53.83753 0 0 -1 + 93 4 14 0.417 52.00273 49.63953 54.55795 0 0 -1 + 94 5 13 -0.834 44.71976 53.72011 56.43834 -1 0 -1 + 95 5 14 0.417 44.56050 53.84218 55.50241 -1 0 -1 + 96 5 14 0.417 44.91937 52.78829 56.52828 -1 0 -1 + 97 6 13 -0.834 37.07074 62.07204 53.35752 -1 -1 -1 + 98 6 14 0.417 64.17057 61.77089 52.49043 -2 -1 -1 + 99 6 14 0.417 37.90147 62.52273 53.20573 -1 -1 -1 + 100 7 13 -0.834 38.31817 66.10834 49.17406 0 -1 0 + 101 7 14 0.417 37.39300 65.93985 48.99534 0 -1 0 + 102 7 14 0.417 38.36506 66.20528 50.12520 0 -1 0 + 103 8 13 -0.834 60.90915 45.97690 35.53863 -1 -1 1 + 104 8 14 0.417 61.19898 46.87819 35.39745 -1 -1 1 + 105 8 14 0.417 59.98680 45.97855 35.28269 -1 -1 1 + 106 9 13 -0.834 54.33913 64.47210 51.00391 -1 -2 0 + 107 9 14 0.417 54.43191 63.71377 50.42724 -1 -2 0 + 108 9 14 0.417 55.16289 64.94980 50.90662 -1 -2 0 + 109 10 13 -0.834 44.58017 54.03749 53.84708 1 0 -1 + 110 10 14 0.417 43.87040 54.43768 53.34476 1 0 -1 + 111 10 14 0.417 45.02999 53.47261 53.21873 1 0 -1 + 112 11 13 -0.834 45.48693 52.12363 34.38241 0 -1 1 + 113 11 14 0.417 45.46898 52.67450 33.59981 0 -1 1 + 114 11 14 0.417 44.61476 52.22113 34.76457 0 -1 1 + 115 12 13 -0.834 60.15770 61.68799 54.74753 1 0 -2 + 116 12 14 0.417 59.23977 61.46439 54.59378 1 0 -2 + 117 12 14 0.417 60.43785 61.08922 55.43980 1 0 -2 + 118 13 13 -0.834 60.74732 66.72156 42.80906 1 -2 0 + 119 13 14 0.417 60.34713 66.21969 42.09898 1 -2 0 + 120 13 14 0.417 60.92444 66.07344 43.49082 1 -2 0 + 121 14 13 -0.834 60.82245 64.17281 50.54212 0 0 0 + 122 14 14 0.417 61.43571 64.88448 50.35863 0 0 0 + 123 14 14 0.417 60.87804 64.04633 51.48930 0 0 0 + 124 15 13 -0.834 36.92704 63.01353 56.05215 0 -1 0 + 125 15 14 0.417 37.10744 62.17054 56.46815 0 -1 0 + 126 15 14 0.417 64.06237 62.79109 55.15157 -1 -1 0 + 127 16 13 -0.834 48.35559 58.70568 56.14001 1 0 0 + 128 16 14 0.417 48.11655 59.48087 55.63191 1 0 0 + 129 16 14 0.417 47.93212 58.83502 56.98865 1 0 0 + 130 17 13 -0.834 58.14651 57.18542 51.08241 0 -1 -1 + 131 17 14 0.417 57.88523 56.72609 51.88052 0 -1 -1 + 132 17 14 0.417 57.35121 57.63116 50.79076 0 -1 -1 + 133 18 13 -0.834 58.09837 59.68005 36.16995 -1 0 0 + 134 18 14 0.417 58.25901 58.76822 36.41283 -1 0 0 + 135 18 14 0.417 58.56239 60.19049 36.83355 -1 0 0 + 136 19 13 -0.834 52.29019 60.51169 50.55611 0 -2 1 + 137 19 14 0.417 52.61972 60.01708 51.30645 0 -2 1 + 138 19 14 0.417 52.55621 59.99722 49.79401 0 -2 1 + 139 20 13 -0.834 41.36642 50.33705 42.98530 0 -1 -1 + 140 20 14 0.417 41.27846 50.09969 43.90844 0 -1 -1 + 141 20 14 0.417 40.99321 51.21659 42.92708 0 -1 -1 + 142 21 13 -0.834 53.76920 67.02645 32.18667 -1 0 1 + 143 21 14 0.417 53.59447 67.18509 31.25901 -1 0 1 + 144 21 14 0.417 54.65308 67.36647 32.32596 -1 0 1 + 145 22 13 -0.834 57.83691 45.33663 46.94671 0 0 -2 + 146 22 14 0.417 57.36287 45.59552 46.15647 0 0 -2 + 147 22 14 0.417 58.62995 44.91017 46.62197 0 0 -2 + 148 23 13 -0.834 60.34518 45.83000 45.57964 -1 0 0 + 149 23 14 0.417 60.61871 44.93757 45.79176 -1 0 0 + 150 23 14 0.417 61.09971 46.21212 45.13141 -1 0 0 + 151 24 13 -0.834 55.97902 46.85046 56.80163 0 1 1 + 152 24 14 0.417 56.57528 46.69952 30.16370 0 1 2 + 153 24 14 0.417 55.81156 47.79276 56.81850 0 1 1 + 154 25 13 -0.834 57.54668 45.52135 31.46139 -1 0 1 + 155 25 14 0.417 58.36291 46.00311 31.32743 -1 0 1 + 156 25 14 0.417 57.54151 45.31312 32.39566 -1 0 1 + 157 26 13 -0.834 58.03029 52.86783 46.33564 -1 -1 0 + 158 26 14 0.417 58.13662 52.56730 47.23820 -1 -1 0 + 159 26 14 0.417 58.81317 52.55269 45.88396 -1 -1 0 + 160 27 13 -0.834 62.89253 60.86549 46.75131 -2 -1 0 + 161 27 14 0.417 63.83924 60.74010 46.81653 -2 -1 0 + 162 27 14 0.417 62.51896 60.12788 47.23361 -2 -1 0 + 163 28 13 -0.834 43.29171 48.58106 31.82206 -1 0 2 + 164 28 14 0.417 43.07532 49.46362 32.12290 -1 0 2 + 165 28 14 0.417 43.82286 48.21072 32.52701 -1 0 2 + 166 29 13 -0.834 64.19867 44.17673 45.81391 -1 1 -1 + 167 29 14 0.417 63.72986 44.44010 45.02202 -1 1 -1 + 168 29 14 0.417 37.02069 43.24876 45.68087 0 1 -1 + 169 30 13 -0.834 50.42749 42.01163 53.60484 0 2 0 + 170 30 14 0.417 51.03177 41.90084 52.87081 0 2 0 + 171 30 14 0.417 50.77279 42.76181 54.08882 0 2 0 + 172 31 13 -0.834 38.63739 61.71113 49.95150 1 0 0 + 173 31 14 0.417 38.55432 62.15607 49.10808 1 0 0 + 174 31 14 0.417 37.81718 61.22751 50.04950 1 0 0 + 175 32 13 -0.834 61.47262 53.02922 33.08309 -1 -1 0 + 176 32 14 0.417 61.21894 52.67931 33.93717 -1 -1 0 + 177 32 14 0.417 61.89351 53.86564 33.28182 -1 -1 0 + 178 33 13 -0.834 54.44545 60.06011 48.63522 -1 0 1 + 179 33 14 0.417 54.80032 60.94424 48.72810 -1 0 1 + 180 33 14 0.417 54.09041 60.03614 47.74662 -1 0 1 + 181 34 13 -0.834 56.34364 60.90201 52.60838 -1 -1 0 + 182 34 14 0.417 56.48857 60.19161 53.23333 -1 -1 0 + 183 34 14 0.417 56.17362 61.67024 53.15351 -1 -1 0 + 184 35 13 -0.834 56.05881 51.84328 55.76103 -1 0 0 + 185 35 14 0.417 55.59060 51.75146 54.93121 -1 0 0 + 186 35 14 0.417 55.46974 52.35732 56.31335 -1 0 0 + 187 36 13 -0.834 39.00621 42.74743 30.97845 0 0 1 + 188 36 14 0.417 39.67620 42.11390 30.72152 0 0 1 + 189 36 14 0.417 39.43456 43.29673 31.63499 0 0 1 + 190 37 13 -0.834 46.77585 55.39774 30.24026 0 1 0 + 191 37 14 0.417 46.10274 54.90237 29.77360 0 1 0 + 192 37 14 0.417 46.39626 56.26890 30.35527 0 1 0 + 193 38 13 -0.834 45.10722 57.60431 31.54688 -1 0 0 + 194 38 14 0.417 44.80783 58.50032 31.70105 -1 0 0 + 195 38 14 0.417 44.44237 57.22463 30.97238 -1 0 0 + 196 39 13 -0.834 43.94230 46.99244 34.45668 -2 1 1 + 197 39 14 0.417 44.62010 46.49140 34.00306 -2 1 1 + 198 39 14 0.417 44.38150 47.79794 34.72964 -2 1 1 + 199 40 13 -0.834 51.39443 50.96507 34.69072 -1 1 0 + 200 40 14 0.417 51.18729 50.42829 35.45570 -1 1 0 + 201 40 14 0.417 51.33198 51.86665 35.00616 -1 1 0 + 202 41 13 -0.834 58.96398 48.19727 42.98856 -2 1 0 + 203 41 14 0.417 58.42587 48.90112 42.62618 -2 1 0 + 204 41 14 0.417 58.82383 48.25054 43.93397 -2 1 0 + 205 42 13 -0.834 62.89335 41.94260 37.40820 0 0 0 + 206 42 14 0.417 62.48690 41.07818 37.46980 0 0 0 + 207 42 14 0.417 63.01802 42.08284 36.46957 0 0 0 + 208 43 13 -0.834 54.19388 47.88689 36.24110 -1 0 1 + 209 43 14 0.417 54.32054 48.63090 35.65235 -1 0 1 + 210 43 14 0.417 53.24370 47.78935 36.30358 -1 0 1 + 211 44 13 -0.834 39.19734 57.40342 41.28495 0 0 -2 + 212 44 14 0.417 39.05428 57.72940 40.39641 0 0 -2 + 213 44 14 0.417 39.30846 56.45861 41.17895 0 0 -2 + 214 45 13 -0.834 52.85483 61.73749 54.63897 0 0 0 + 215 45 14 0.417 53.34938 62.52765 54.42147 0 0 0 + 216 45 14 0.417 53.01046 61.14656 53.90221 0 0 0 + 217 46 13 -0.834 47.09467 62.01384 35.02302 1 0 1 + 218 46 14 0.417 47.54527 61.47644 35.67448 1 0 1 + 219 46 14 0.417 47.10116 62.89626 35.39385 1 0 1 + 220 47 13 -0.834 46.80497 49.60334 37.05700 0 0 1 + 221 47 14 0.417 46.70216 49.79770 36.12540 0 0 1 + 222 47 14 0.417 45.91311 49.45393 37.37084 0 0 1 + 223 48 13 -0.834 63.21969 59.12311 54.43455 -1 -1 -1 + 224 48 14 0.417 63.94585 59.72833 54.28405 -1 -1 -1 + 225 48 14 0.417 63.63016 58.34481 54.81141 -1 -1 -1 + 226 49 13 -0.834 59.88416 59.64215 44.04914 -2 1 0 + 227 49 14 0.417 59.74255 59.14412 44.85422 -2 1 0 + 228 49 14 0.417 59.02635 60.01323 43.84248 -2 1 0 + 229 50 13 -0.834 40.50825 42.85328 50.81112 -1 1 0 + 230 50 14 0.417 40.34650 43.39801 51.58141 -1 1 0 + 231 50 14 0.417 39.63964 42.69867 50.43985 -1 1 0 + 232 51 13 -0.834 63.77522 64.97067 44.83010 -2 0 0 + 233 51 14 0.417 37.00507 65.56132 45.28388 -1 0 0 + 234 51 14 0.417 64.14243 64.88383 43.95041 -2 0 0 + 235 52 13 -0.834 62.47161 67.86189 47.38235 -1 0 -1 + 236 52 14 0.417 61.58819 67.64608 47.08360 -1 0 -1 + 237 52 14 0.417 62.79136 67.05596 47.78790 -1 0 -1 + 238 53 13 -0.834 43.90800 54.16107 50.35199 0 0 0 + 239 53 14 0.417 43.96769 53.24711 50.07388 0 0 0 + 240 53 14 0.417 43.72593 54.64554 49.54677 0 0 0 + 241 54 13 -0.834 63.46829 44.63390 34.73615 -1 1 1 + 242 54 14 0.417 62.63731 45.04623 34.97217 -1 1 1 + 243 54 14 0.417 64.11050 45.03645 35.32075 -1 1 1 + 244 55 13 -0.834 37.30679 58.22047 51.04345 0 0 0 + 245 55 14 0.417 38.18596 58.37862 50.69950 0 0 0 + 246 55 14 0.417 36.85723 59.06017 50.94824 0 0 0 + 247 56 13 -0.834 58.72649 42.45768 31.23820 -1 1 -1 + 248 56 14 0.417 59.43634 42.77561 30.68028 -1 1 -1 + 249 56 14 0.417 58.76581 41.50474 31.15690 -1 1 -1 + 250 57 13 -0.834 52.47101 42.85691 41.60986 0 1 -1 + 251 57 14 0.417 51.62289 42.91562 41.16997 0 1 -1 + 252 57 14 0.417 52.53109 41.94497 41.89448 0 1 -1 + 253 58 13 -0.834 60.63476 59.78356 56.53663 -2 -1 -1 + 254 58 14 0.417 60.87428 58.86269 56.43247 -2 -1 -1 + 255 58 14 0.417 59.72615 59.76269 56.83705 -2 -1 -1 + 256 59 13 -0.834 52.78127 57.47386 30.66786 -1 -1 0 + 257 59 14 0.417 52.55495 58.26092 30.17228 -1 -1 0 + 258 59 14 0.417 53.05203 56.84104 30.00267 -1 -1 0 + 259 60 13 -0.834 46.04848 57.65321 54.89998 0 3 -1 + 260 60 14 0.417 46.96883 57.71336 55.15607 0 3 -1 + 261 60 14 0.417 46.02768 57.98076 54.00081 0 3 -1 + 262 61 13 -0.834 60.39356 51.43705 35.66109 -1 1 -1 + 263 61 14 0.417 60.57739 52.08235 36.34376 -1 1 -1 + 264 61 14 0.417 59.59475 50.99860 35.95414 -1 1 -1 + 265 62 13 -0.834 50.32338 62.46972 35.65752 -1 0 2 + 266 62 14 0.417 51.24156 62.23287 35.52678 -1 0 2 + 267 62 14 0.417 49.89601 61.64851 35.90085 -1 0 2 + 268 63 13 -0.834 38.23983 45.11908 50.02773 0 1 0 + 269 63 14 0.417 38.61336 45.27494 50.89515 0 1 0 + 270 63 14 0.417 38.91224 45.42406 49.41856 0 1 0 + 271 64 13 -0.834 58.93720 57.36605 46.08362 -3 0 0 + 272 64 14 0.417 58.65753 56.63297 46.63190 -3 0 0 + 273 64 14 0.417 58.29914 58.05674 46.26268 -3 0 0 + 274 65 13 -0.834 47.99806 43.44789 47.43046 -1 0 0 + 275 65 14 0.417 48.39580 43.78289 46.62684 -1 0 0 + 276 65 14 0.417 47.85848 44.22523 47.97128 -1 0 0 + 277 66 13 -0.834 51.26744 52.05593 47.09995 -1 0 0 + 278 66 14 0.417 51.36736 52.09873 46.14894 -1 0 0 + 279 66 14 0.417 50.33779 52.22629 47.25149 -1 0 0 + 280 67 13 -0.834 39.06132 52.11517 46.39010 0 0 -1 + 281 67 14 0.417 38.53402 51.36282 46.65876 0 0 -1 + 282 67 14 0.417 39.47133 52.42190 47.19884 0 0 -1 + 283 68 13 -0.834 60.17907 58.95174 50.22759 -1 1 0 + 284 68 14 0.417 60.34080 59.56538 50.94420 -1 1 0 + 285 68 14 0.417 59.41497 58.44908 50.50992 -1 1 0 + 286 69 13 -0.834 40.47698 59.65154 34.92537 0 -1 1 + 287 69 14 0.417 40.89044 60.49055 35.12877 0 -1 1 + 288 69 14 0.417 41.17964 59.12336 34.54648 0 -1 1 + 289 70 13 -0.834 60.12998 66.51474 47.03971 -1 0 -1 + 290 70 14 0.417 59.26620 66.39701 47.43506 -1 0 -1 + 291 70 14 0.417 60.21358 65.78625 46.42443 -1 0 -1 + 292 71 13 -0.834 49.25986 47.27506 43.03372 -1 0 1 + 293 71 14 0.417 49.11810 48.15331 42.68041 -1 0 1 + 294 71 14 0.417 49.86162 47.40550 43.76662 -1 0 1 + 295 72 13 -0.834 41.48105 63.65699 31.84433 0 0 1 + 296 72 14 0.417 41.11022 64.48589 32.14713 0 0 1 + 297 72 14 0.417 40.89461 63.37379 31.14281 0 0 1 + 298 73 13 -0.834 47.82875 47.97039 54.56720 0 2 0 + 299 73 14 0.417 46.99167 47.50633 54.55352 0 2 0 + 300 73 14 0.417 47.60488 48.87558 54.35102 0 2 0 + 301 74 13 -0.834 62.36735 58.64445 48.35778 -2 1 0 + 302 74 14 0.417 62.88767 57.90867 48.68045 -2 1 0 + 303 74 14 0.417 61.65918 58.73544 48.99531 -2 1 0 + 304 75 13 -0.834 52.09508 65.08907 32.87560 0 0 0 + 305 75 14 0.417 52.67402 65.75058 32.49683 0 0 0 + 306 75 14 0.417 52.41855 64.97003 33.76859 0 0 0 + 307 76 13 -0.834 39.06932 41.62988 40.69498 1 1 0 + 308 76 14 0.417 39.51114 41.04433 40.08003 1 1 0 + 309 76 14 0.417 38.93584 42.43936 40.20186 1 1 0 + 310 77 13 -0.834 37.68325 49.50718 46.00750 0 2 0 + 311 77 14 0.417 64.11601 49.67107 45.91568 -1 2 0 + 312 77 14 0.417 37.90845 48.96991 45.24796 0 2 0 + 313 78 13 -0.834 53.00757 59.49351 52.98404 -2 1 -1 + 314 78 14 0.417 52.16721 59.28329 53.39127 -2 1 -1 + 315 78 14 0.417 53.61000 58.83023 53.32076 -2 1 -1 + 316 79 13 -0.834 51.89369 64.75001 56.68467 1 0 0 + 317 79 14 0.417 51.88079 65.63682 56.32462 1 0 0 + 318 79 14 0.417 52.40589 64.82531 30.11841 1 0 1 + 319 80 13 -0.834 48.43261 63.10155 32.63566 0 0 1 + 320 80 14 0.417 47.68021 63.01753 32.04993 0 0 1 + 321 80 14 0.417 48.13916 62.71424 33.46035 0 0 1 + 322 81 13 -0.834 62.41171 68.18251 30.67168 0 -1 2 + 323 81 14 0.417 61.79235 41.16145 30.03143 0 0 2 + 324 81 14 0.417 63.18314 67.94790 30.15584 0 -1 2 + 325 82 13 -0.834 42.57575 41.32197 37.66791 0 0 1 + 326 82 14 0.417 42.98116 41.36016 36.80164 0 0 1 + 327 82 14 0.417 42.32522 42.22654 37.85569 0 0 1 + 328 83 13 -0.834 50.17315 67.44398 36.91606 0 -2 0 + 329 83 14 0.417 50.08765 67.03449 37.77701 0 -2 0 + 330 83 14 0.417 50.35347 66.71621 36.32101 0 -2 0 + 331 84 13 -0.834 39.70163 60.45247 40.03790 0 -2 -1 + 332 84 14 0.417 38.85282 60.01540 40.10676 0 -2 -1 + 333 84 14 0.417 40.20579 60.11563 40.77858 0 -2 -1 + 334 85 13 -0.834 51.74323 42.80814 51.33239 0 0 -1 + 335 85 14 0.417 52.44810 43.22892 51.82466 0 0 -1 + 336 85 14 0.417 51.80961 43.17998 50.45286 0 0 -1 + 337 86 13 -0.834 51.34695 47.68316 36.38089 0 0 1 + 338 86 14 0.417 50.77701 46.92707 36.52138 0 0 1 + 339 86 14 0.417 51.27109 47.87031 35.44523 0 0 1 + 340 87 13 -0.834 62.66950 50.66085 43.15883 -2 0 0 + 341 87 14 0.417 63.57796 50.36318 43.11051 -2 0 0 + 342 87 14 0.417 62.24654 50.26548 42.39659 -2 0 0 + 343 88 13 -0.834 46.37996 60.13914 31.06428 -2 -1 1 + 344 88 14 0.417 46.89125 59.89673 31.83632 -2 -1 1 + 345 88 14 0.417 45.51811 60.37092 31.41028 -2 -1 1 + 346 89 13 -0.834 50.23251 41.17559 46.18435 0 1 2 + 347 89 14 0.417 49.40509 68.16142 45.89628 0 0 2 + 348 89 14 0.417 50.55747 67.94506 46.85395 0 0 2 + 349 90 13 -0.834 56.10446 66.70018 42.60390 0 -2 1 + 350 90 14 0.417 56.27454 67.42915 42.00732 0 -2 1 + 351 90 14 0.417 56.27819 67.05729 43.47483 0 -2 1 + 352 91 13 -0.834 55.53824 48.43866 51.97225 -1 0 1 + 353 91 14 0.417 56.26440 48.96682 52.30388 -1 0 1 + 354 91 14 0.417 55.26306 48.88494 51.17140 -1 0 1 + 355 92 13 -0.834 37.88016 52.62502 33.55552 0 -1 0 + 356 92 14 0.417 37.58757 51.72397 33.41859 0 -1 0 + 357 92 14 0.417 38.51960 52.77804 32.85986 0 -1 0 + 358 93 13 -0.834 50.40592 66.14455 39.40035 -1 -2 -1 + 359 93 14 0.417 49.74974 66.37168 40.05920 -1 -2 -1 + 360 93 14 0.417 50.22642 65.22843 39.18876 -1 -2 -1 + 361 94 13 -0.834 59.56315 43.63477 50.02876 -1 0 0 + 362 94 14 0.417 60.08533 44.36640 50.35782 -1 0 0 + 363 94 14 0.417 60.10101 42.86112 50.19730 -1 0 0 + 364 95 13 -0.834 57.16125 61.75981 55.17964 0 0 -1 + 365 95 14 0.417 56.45534 61.68609 55.82189 0 0 -1 + 366 95 14 0.417 57.38335 62.69087 55.17297 0 0 -1 + 367 96 13 -0.834 54.81274 43.48714 43.13392 -1 2 1 + 368 96 14 0.417 53.88771 43.40698 42.90124 -1 2 1 + 369 96 14 0.417 54.97915 42.74512 43.71525 -1 2 1 + 370 97 13 -0.834 41.23040 49.49766 49.75568 0 -2 0 + 371 97 14 0.417 40.54278 49.43865 49.09241 0 -2 0 + 372 97 14 0.417 41.81904 48.76959 49.55653 0 -2 0 + 373 98 13 -0.834 54.20957 45.39084 54.97428 -1 0 0 + 374 98 14 0.417 54.66721 46.06623 55.47493 -1 0 0 + 375 98 14 0.417 53.74016 44.87996 55.63374 -1 0 0 + 376 99 13 -0.834 61.27515 64.38553 39.98716 -1 0 1 + 377 99 14 0.417 61.56153 64.23410 40.88787 -1 0 1 + 378 99 14 0.417 60.44736 63.91029 39.91542 -1 0 1 + 379 100 13 -0.834 55.67284 58.14856 42.21767 -1 1 2 + 380 100 14 0.417 55.46369 57.24253 42.44485 -1 1 2 + 381 100 14 0.417 56.62771 58.19397 42.26677 -1 1 2 + 382 101 13 -0.834 43.66528 51.07118 53.71174 0 0 0 + 383 101 14 0.417 42.87715 50.89079 53.19934 0 0 0 + 384 101 14 0.417 43.37793 51.68815 54.38481 0 0 0 + 385 102 13 -0.834 39.90899 44.53973 36.42818 0 2 0 + 386 102 14 0.417 39.84006 43.65427 36.07118 0 2 0 + 387 102 14 0.417 40.52179 44.98683 35.84438 0 2 0 + 388 103 13 -0.834 51.24695 66.96031 48.71611 -1 -1 1 + 389 103 14 0.417 50.88275 67.26607 49.54684 -1 -1 1 + 390 103 14 0.417 52.19366 66.95318 48.85726 -1 -1 1 + 391 104 13 -0.834 55.15911 56.17347 57.08906 -1 0 0 + 392 104 14 0.417 55.86241 55.65189 56.70232 -1 0 0 + 393 104 14 0.417 54.93977 55.71619 30.52949 -1 0 1 + 394 105 13 -0.834 37.33282 54.30424 56.96734 0 0 0 + 395 105 14 0.417 64.15558 54.97773 29.99806 -1 0 1 + 396 105 14 0.417 64.13467 53.88397 56.32293 -1 0 0 + 397 106 13 -0.834 53.07827 51.20543 32.31512 -1 0 1 + 398 106 14 0.417 52.39494 50.78813 31.79057 -1 0 1 + 399 106 14 0.417 52.65819 51.38698 33.15584 -1 0 1 + 400 107 13 -0.834 43.06086 51.65229 35.75926 1 1 1 + 401 107 14 0.417 42.70958 52.01746 36.57135 1 1 1 + 402 107 14 0.417 43.42908 50.80682 36.01586 1 1 1 + 403 108 13 -0.834 53.92253 56.24460 34.48089 0 0 1 + 404 108 14 0.417 53.22007 56.39276 35.11401 0 0 1 + 405 108 14 0.417 54.59075 55.76600 34.97147 0 0 1 + 406 109 13 -0.834 61.71524 66.84153 38.60005 -1 -1 0 + 407 109 14 0.417 61.25397 66.04877 38.87388 -1 -1 0 + 408 109 14 0.417 62.23260 67.09437 39.36467 -1 -1 0 + 409 110 13 -0.834 43.52824 62.78695 41.49939 0 -1 -1 + 410 110 14 0.417 43.61050 61.97218 41.00379 0 -1 -1 + 411 110 14 0.417 43.53140 63.47437 40.83330 0 -1 -1 + 412 111 13 -0.834 51.13822 55.54090 53.50461 0 1 -2 + 413 111 14 0.417 50.69587 56.38179 53.62064 0 1 -2 + 414 111 14 0.417 51.43262 55.54828 52.59383 0 1 -2 + 415 112 13 -0.834 46.94709 50.11761 31.92599 0 0 0 + 416 112 14 0.417 47.19652 51.02564 31.75423 0 0 0 + 417 112 14 0.417 46.57462 49.81059 31.09941 0 0 0 + 418 113 13 -0.834 47.96666 45.13049 44.46108 -1 2 -1 + 419 113 14 0.417 47.01871 45.24108 44.53489 -1 2 -1 + 420 113 14 0.417 48.26343 45.91034 43.99202 -1 2 -1 + 421 114 13 -0.834 44.43868 43.44849 32.90814 -1 -1 1 + 422 114 14 0.417 43.86055 43.24165 33.64245 -1 -1 1 + 423 114 14 0.417 45.31670 43.24154 33.22828 -1 -1 1 + 424 115 13 -0.834 61.07172 47.80130 53.14504 -1 1 -1 + 425 115 14 0.417 61.34864 48.71600 53.19864 -1 1 -1 + 426 115 14 0.417 60.72118 47.60538 54.01394 -1 1 -1 + 427 116 13 -0.834 51.38727 44.10864 54.92855 -1 0 -1 + 428 116 14 0.417 50.77962 44.80360 55.18160 -1 0 -1 + 429 116 14 0.417 52.05111 44.10744 55.61815 -1 0 -1 + 430 117 13 -0.834 41.05585 60.12319 49.44785 1 -1 0 + 431 117 14 0.417 41.72702 60.76812 49.67116 1 -1 0 + 432 117 14 0.417 40.24373 60.62784 49.40265 1 -1 0 + 433 118 13 -0.834 50.88548 68.33364 33.37284 -1 0 -1 + 434 118 14 0.417 50.48275 67.46671 33.32310 -1 0 -1 + 435 118 14 0.417 51.82702 68.16119 33.37343 -1 0 -1 + 436 119 13 -0.834 38.79644 59.29061 55.22446 1 1 -1 + 437 119 14 0.417 38.82887 59.83550 56.01077 1 1 -1 + 438 119 14 0.417 39.26097 59.79985 54.56028 1 1 -1 + 439 120 13 -0.834 56.31813 41.68729 51.11871 -2 0 -1 + 440 120 14 0.417 55.45155 41.35580 51.35412 -2 0 -1 + 441 120 14 0.417 56.14879 42.34135 50.44062 -2 0 -1 + 442 121 13 -0.834 45.53697 59.28154 47.22033 -1 0 -1 + 443 121 14 0.417 45.45062 59.55577 46.30733 -1 0 -1 + 444 121 14 0.417 46.00774 59.99977 47.64313 -1 0 -1 + 445 122 13 -0.834 60.47636 43.28130 46.20944 -1 0 -1 + 446 122 14 0.417 60.97762 42.59184 45.77396 -1 0 -1 + 447 122 14 0.417 59.72992 42.82584 46.59884 -1 0 -1 + 448 123 13 -0.834 58.49080 48.18289 45.77215 0 0 -1 + 449 123 14 0.417 58.74342 47.25991 45.74879 0 0 -1 + 450 123 14 0.417 58.17926 48.32386 46.66621 0 0 -1 + 451 124 13 -0.834 50.93473 56.12663 41.58575 -1 0 0 + 452 124 14 0.417 50.36171 56.05214 42.34885 -1 0 0 + 453 124 14 0.417 50.40135 56.57242 40.92771 -1 0 0 + 454 125 13 -0.834 60.55008 41.95542 56.22749 -1 0 -1 + 455 125 14 0.417 59.65163 41.78987 55.94175 -1 0 -1 + 456 125 14 0.417 61.09463 41.59967 55.52524 -1 0 -1 + 457 126 13 -0.834 58.58373 51.69338 48.78985 -1 1 0 + 458 126 14 0.417 58.38773 52.01803 49.66874 -1 1 0 + 459 126 14 0.417 58.66973 50.74614 48.89756 -1 1 0 + 460 127 13 -0.834 37.82769 45.69808 30.85100 0 1 3 + 461 127 14 0.417 38.37007 45.10637 31.37248 0 1 3 + 462 127 14 0.417 37.14646 45.99401 31.45481 0 1 3 + 463 128 13 -0.834 50.96455 60.06361 33.68049 0 0 0 + 464 128 14 0.417 51.72055 60.15430 34.26055 0 0 0 + 465 128 14 0.417 51.05673 60.77997 33.05234 0 0 0 + 466 129 13 -0.834 46.43413 68.11245 51.48833 -1 0 -1 + 467 129 14 0.417 46.82151 41.36005 50.86943 -1 1 -1 + 468 129 14 0.417 47.09847 67.43153 51.59433 -1 0 -1 + 469 130 13 -0.834 61.79997 47.41648 57.05141 -1 -1 0 + 470 130 14 0.417 62.68713 47.23872 56.73898 -1 -1 0 + 471 130 14 0.417 61.48917 46.57417 30.01195 -1 -1 1 + 472 131 13 -0.834 45.30689 46.58119 54.43763 0 1 -1 + 473 131 14 0.417 45.67282 45.73922 54.70859 0 1 -1 + 474 131 14 0.417 44.46622 46.35973 54.03705 0 1 -1 + 475 132 13 -0.834 62.60829 48.56385 49.02640 -1 1 0 + 476 132 14 0.417 62.44761 48.65968 48.08766 -1 1 0 + 477 132 14 0.417 62.98242 47.68753 49.11762 -1 1 0 + 478 133 13 -0.834 63.49107 56.77075 38.74961 -1 0 2 + 479 133 14 0.417 63.12281 56.39554 39.54952 -1 0 2 + 480 133 14 0.417 62.84612 57.42058 38.47033 -1 0 2 + 481 134 13 -0.834 50.74846 48.34849 33.46075 0 0 1 + 482 134 14 0.417 50.75342 49.30521 33.43086 0 0 1 + 483 134 14 0.417 50.91203 48.07929 32.55686 0 0 1 + 484 135 13 -0.834 44.40923 67.37148 56.42156 0 0 0 + 485 135 14 0.417 43.93400 67.78902 29.76856 0 0 1 + 486 135 14 0.417 44.94884 66.70468 56.84633 0 0 0 + 487 136 13 -0.834 44.25343 64.95349 43.22104 0 0 0 + 488 136 14 0.417 44.13229 64.08173 42.84472 0 0 0 + 489 136 14 0.417 44.01188 65.55470 42.51643 0 0 0 + 490 137 13 -0.834 46.68300 67.52863 32.69859 -1 -1 0 + 491 137 14 0.417 46.68369 68.22637 33.35389 -1 -1 0 + 492 137 14 0.417 47.60248 67.43099 32.45106 -1 -1 0 + 493 138 13 -0.834 57.25376 61.01737 33.86507 -2 1 1 + 494 138 14 0.417 57.40827 60.52366 34.67043 -2 1 1 + 495 138 14 0.417 57.35792 60.37307 33.16488 -2 1 1 + 496 139 13 -0.834 57.39946 54.16835 56.70699 0 -1 -1 + 497 139 14 0.417 57.31939 53.23092 56.53080 0 -1 -1 + 498 139 14 0.417 57.32300 54.24112 30.28699 0 -1 0 + 499 140 13 -0.834 52.36697 48.69246 41.49227 -1 1 0 + 500 140 14 0.417 51.78735 47.93629 41.40021 -1 1 0 + 501 140 14 0.417 53.21603 48.31702 41.72547 -1 1 0 + 502 141 13 -0.834 54.69200 49.57915 45.55048 0 0 -1 + 503 141 14 0.417 54.95958 48.66911 45.42211 0 0 -1 + 504 141 14 0.417 55.28513 50.08439 44.99446 0 0 -1 + 505 142 13 -0.834 37.26724 53.17896 42.50469 1 -1 -1 + 506 142 14 0.417 63.93194 53.34801 43.12782 0 -1 -1 + 507 142 14 0.417 36.94831 52.45044 41.97199 1 -1 -1 + 508 143 13 -0.834 42.56283 66.92379 33.49577 -1 0 1 + 509 143 14 0.417 41.71356 66.58931 33.20750 -1 0 1 + 510 143 14 0.417 43.03645 66.14842 33.79697 -1 0 1 + 511 144 13 -0.834 61.43331 45.62855 38.97695 0 1 1 + 512 144 14 0.417 61.20190 45.98514 39.83458 0 1 1 + 513 144 14 0.417 62.31351 45.96414 38.80708 0 1 1 + 514 145 13 -0.834 49.37935 56.26031 56.72879 1 1 0 + 515 145 14 0.417 49.03977 57.11146 56.45221 1 1 0 + 516 145 14 0.417 48.60052 55.75658 56.96530 1 1 0 + 517 146 13 -0.834 63.13959 56.23999 49.92079 -1 0 -1 + 518 146 14 0.417 63.72474 55.58123 50.29478 -1 0 -1 + 519 146 14 0.417 63.40966 57.06154 50.33112 -1 0 -1 + 520 147 13 -0.834 58.55937 66.56287 54.17345 -1 0 0 + 521 147 14 0.417 59.28260 66.81524 53.59945 -1 0 0 + 522 147 14 0.417 58.28559 67.38088 54.58834 -1 0 0 + 523 148 13 -0.834 55.49901 62.14366 46.01274 -1 0 -1 + 524 148 14 0.417 55.08057 61.57956 45.36238 -1 0 -1 + 525 148 14 0.417 55.53371 63.00495 45.59652 -1 0 -1 + 526 149 13 -0.834 48.09589 47.38106 38.97384 0 1 0 + 527 149 14 0.417 47.94178 48.02346 38.28116 0 1 0 + 528 149 14 0.417 47.26125 47.32494 39.43910 0 1 0 + 529 150 13 -0.834 40.27661 53.03711 48.83757 0 0 0 + 530 150 14 0.417 40.32476 53.91333 49.21992 0 0 0 + 531 150 14 0.417 41.18363 52.81848 48.62365 0 0 0 + 532 151 13 -0.834 36.85277 41.68065 44.81488 1 2 0 + 533 151 14 0.417 36.95709 68.34807 45.45504 1 1 0 + 534 151 14 0.417 37.14062 41.29651 43.98673 1 2 0 + 535 152 13 -0.834 37.74881 65.81650 33.58759 -1 0 1 + 536 152 14 0.417 37.69052 65.99217 34.52673 -1 0 1 + 537 152 14 0.417 37.02193 65.21970 33.40951 -1 0 1 + 538 153 13 -0.834 63.01838 46.13766 43.99274 -2 0 0 + 539 153 14 0.417 62.72780 46.33504 43.10232 -2 0 0 + 540 153 14 0.417 63.75125 46.73459 44.14387 -2 0 0 + 541 154 13 -0.834 43.83288 53.92104 38.64974 0 2 1 + 542 154 14 0.417 44.46072 53.30394 39.02556 0 2 1 + 543 154 14 0.417 44.17373 54.10726 37.77488 0 2 1 + 544 155 13 -0.834 54.48021 41.30441 45.39416 1 1 -2 + 545 155 14 0.417 54.42996 67.86451 44.88861 1 0 -2 + 546 155 14 0.417 54.84291 41.03852 46.23914 1 1 -2 + 547 156 13 -0.834 51.26407 63.10699 50.73012 0 0 -2 + 548 156 14 0.417 51.64016 62.23294 50.83411 0 0 -2 + 549 156 14 0.417 51.56733 63.39797 49.87011 0 0 -2 + 550 157 13 -0.834 54.61161 63.67709 53.56970 0 1 1 + 551 157 14 0.417 55.55339 63.81655 53.47054 0 1 1 + 552 157 14 0.417 54.24805 63.87070 52.70565 0 1 1 + 553 158 13 -0.834 46.57444 42.69363 30.13287 -1 0 1 + 554 158 14 0.417 45.93025 42.28051 30.70783 -1 0 1 + 555 158 14 0.417 47.27305 42.04459 30.04973 -1 0 1 + 556 159 13 -0.834 37.92811 50.36816 42.31352 1 1 0 + 557 159 14 0.417 38.62401 50.90050 42.69899 1 1 0 + 558 159 14 0.417 38.11553 50.37135 41.37484 1 1 0 + 559 160 13 -0.834 40.53318 48.69302 33.52502 -1 0 0 + 560 160 14 0.417 40.10720 48.55075 32.67972 -1 0 0 + 561 160 14 0.417 41.22323 49.33057 33.34173 -1 0 0 + 562 161 13 -0.834 58.20095 45.48345 42.83426 1 0 -1 + 563 161 14 0.417 58.76156 46.25356 42.92849 1 0 -1 + 564 161 14 0.417 58.80813 44.74348 42.83158 1 0 -1 + 565 162 13 -0.834 59.85909 67.06752 31.43173 -1 1 0 + 566 162 14 0.417 59.95062 66.12180 31.54782 -1 1 0 + 567 162 14 0.417 60.75672 67.38534 31.33437 -1 1 0 + 568 163 13 -0.834 48.48808 51.17807 55.92072 -2 0 0 + 569 163 14 0.417 49.24951 51.62602 55.55219 -2 0 0 + 570 163 14 0.417 48.81105 50.30745 56.15303 -2 0 0 + 571 164 13 -0.834 47.51169 45.69616 48.99410 0 0 -1 + 572 164 14 0.417 48.36822 46.03425 48.73281 0 0 -1 + 573 164 14 0.417 47.56201 45.62598 49.94740 0 0 -1 + 574 165 13 -0.834 51.10678 64.23082 47.99167 0 -2 -1 + 575 165 14 0.417 51.33188 65.16116 47.98611 0 -2 -1 + 576 165 14 0.417 50.15837 64.21415 48.12002 0 -2 -1 + 577 166 13 -0.834 42.97263 56.29674 30.18230 0 0 0 + 578 166 14 0.417 42.45756 55.50818 30.01170 0 0 0 + 579 166 14 0.417 42.79675 56.86516 56.80386 0 0 -1 + 580 167 13 -0.834 44.45917 53.64338 31.85015 -1 0 0 + 581 167 14 0.417 44.64093 54.17218 31.07325 -1 0 0 + 582 167 14 0.417 43.66299 53.15965 31.63030 -1 0 0 + 583 168 13 -0.834 52.20677 49.92062 48.65330 1 0 0 + 584 168 14 0.417 52.24176 50.63538 49.28902 1 0 0 + 585 168 14 0.417 52.01918 50.35058 47.81890 1 0 0 + 586 169 13 -0.834 45.94013 51.43638 56.49888 0 0 0 + 587 169 14 0.417 46.89200 51.34153 56.53372 0 0 0 + 588 169 14 0.417 45.60504 50.66051 56.94833 0 0 0 + 589 170 13 -0.834 45.61845 41.38709 48.05698 1 0 0 + 590 170 14 0.417 46.42604 41.83441 47.80406 1 0 0 + 591 170 14 0.417 45.31743 41.85685 48.83477 1 0 0 + 592 171 13 -0.834 47.68232 42.84819 52.92728 0 1 0 + 593 171 14 0.417 47.61830 42.41414 52.07654 0 1 0 + 594 171 14 0.417 48.39202 42.39011 53.37758 0 1 0 + 595 172 13 -0.834 37.01774 65.84057 36.39542 1 -1 0 + 596 172 14 0.417 36.84918 65.13561 37.02061 1 -1 0 + 597 172 14 0.417 63.52368 66.19949 36.19938 0 -1 0 + 598 173 13 -0.834 51.52891 58.65207 39.31760 -1 -3 -1 + 599 173 14 0.417 51.57384 59.35596 39.96472 -1 -3 -1 + 600 173 14 0.417 51.00435 59.01522 38.60403 -1 -3 -1 + 601 174 13 -0.834 49.06578 54.25781 44.33488 0 -1 -1 + 602 174 14 0.417 48.81980 55.18018 44.26437 0 -1 -1 + 603 174 14 0.417 49.41695 54.17018 45.22104 0 -1 -1 + 604 175 13 -0.834 47.03819 42.38557 34.31948 -1 -1 0 + 605 175 14 0.417 47.39035 41.82883 35.01393 -1 -1 0 + 606 175 14 0.417 47.47024 43.23019 34.44673 -1 -1 0 + 607 176 13 -0.834 41.64025 43.65472 38.33192 0 1 0 + 608 176 14 0.417 41.17224 44.02383 37.58295 0 1 0 + 609 176 14 0.417 41.46027 44.26142 39.05008 0 1 0 + 610 177 13 -0.834 61.41261 58.14241 37.49312 -2 0 0 + 611 177 14 0.417 61.24368 59.06676 37.67551 -2 0 0 + 612 177 14 0.417 60.57871 57.80631 37.16465 -2 0 0 + 613 178 13 -0.834 48.58355 55.60536 32.34542 0 -2 -2 + 614 178 14 0.417 48.05292 55.64371 31.54969 0 -2 -2 + 615 178 14 0.417 49.00004 56.46561 32.39784 0 -2 -2 + 616 179 13 -0.834 51.18618 52.33768 44.26866 0 -1 0 + 617 179 14 0.417 50.47419 52.97535 44.21659 0 -1 0 + 618 179 14 0.417 51.18053 51.90159 43.41657 0 -1 0 + 619 180 13 -0.834 63.77008 46.64985 53.45124 -2 0 -1 + 620 180 14 0.417 37.25943 46.94040 53.14955 -1 0 -1 + 621 180 14 0.417 63.15834 47.28506 53.07904 -2 0 -1 + 622 181 13 -0.834 37.28071 56.79400 31.30862 1 1 0 + 623 181 14 0.417 37.34297 57.68998 31.63963 1 1 0 + 624 181 14 0.417 36.99543 56.89301 30.40030 1 1 0 + 625 182 13 -0.834 38.98742 57.66608 44.07685 1 0 1 + 626 182 14 0.417 39.04152 57.61214 43.12270 1 0 1 + 627 182 14 0.417 39.46043 56.89430 44.38805 1 0 1 + 628 183 13 -0.834 64.13749 51.25767 48.28997 0 -1 0 + 629 183 14 0.417 64.05120 52.19840 48.13566 0 -1 0 + 630 183 14 0.417 63.26932 50.90255 48.09918 0 -1 0 + 631 184 13 -0.834 41.02949 42.14202 43.02064 0 0 -1 + 632 184 14 0.417 40.60130 42.82178 43.54104 0 0 -1 + 633 184 14 0.417 40.43829 41.99723 42.28189 0 0 -1 + 634 185 13 -0.834 49.87332 48.21836 52.83028 0 1 0 + 635 185 14 0.417 49.13733 48.15035 53.43849 0 1 0 + 636 185 14 0.417 50.32176 47.37567 52.90100 0 1 0 + 637 186 13 -0.834 56.06860 48.51217 38.12813 -1 1 0 + 638 186 14 0.417 56.55702 47.73454 38.39826 -1 1 0 + 639 186 14 0.417 55.52690 48.21357 37.39762 -1 1 0 + 640 187 13 -0.834 54.22718 59.47740 40.22374 -1 0 1 + 641 187 14 0.417 53.93839 59.03820 39.42377 -1 0 1 + 642 187 14 0.417 54.74005 58.81629 40.68868 -1 0 1 + 643 188 13 -0.834 60.09461 46.88146 32.04739 -1 0 -1 + 644 188 14 0.417 60.91535 46.43611 31.83683 -1 0 -1 + 645 188 14 0.417 60.13630 47.02716 32.99253 -1 0 -1 + 646 189 13 -0.834 45.18646 44.57845 41.54076 0 0 0 + 647 189 14 0.417 44.28239 44.89208 41.51774 0 0 0 + 648 189 14 0.417 45.34481 44.23786 40.66033 0 0 0 + 649 190 13 -0.834 42.47099 45.68692 31.56356 1 0 1 + 650 190 14 0.417 43.26152 45.18821 31.76995 1 0 1 + 651 190 14 0.417 42.78187 46.58070 31.41951 1 0 1 + 652 191 13 -0.834 41.23413 47.67043 41.85221 0 1 0 + 653 191 14 0.417 41.04508 48.58329 42.06946 0 1 0 + 654 191 14 0.417 40.84394 47.54379 40.98737 0 1 0 + 655 192 13 -0.834 48.84750 60.39708 36.57115 0 0 0 + 656 192 14 0.417 48.57626 59.48478 36.46920 0 0 0 + 657 192 14 0.417 48.59448 60.62409 37.46597 0 0 0 + 658 193 13 -0.834 56.78263 43.55464 49.12966 -1 0 -1 + 659 193 14 0.417 56.56851 44.25428 48.51250 -1 0 -1 + 660 193 14 0.417 57.66563 43.76469 49.43365 -1 0 -1 + 661 194 13 -0.834 59.52236 53.66894 43.24587 -1 2 0 + 662 194 14 0.417 59.44365 54.61174 43.10041 -1 2 0 + 663 194 14 0.417 59.73284 53.58637 44.17598 -1 2 0 + 664 195 13 -0.834 63.61393 61.54696 40.57053 -1 -1 1 + 665 195 14 0.417 36.90989 60.94398 40.24291 0 -1 1 + 666 195 14 0.417 63.74510 61.55794 41.51864 -1 -1 1 + 667 196 13 -0.834 54.91742 43.16160 33.69639 0 0 -1 + 668 196 14 0.417 55.84062 43.16106 33.94925 0 0 -1 + 669 196 14 0.417 54.73416 44.07060 33.45898 0 0 -1 + 670 197 13 -0.834 41.09699 64.92982 48.38401 0 -1 -1 + 671 197 14 0.417 40.19042 64.83711 48.67687 0 -1 -1 + 672 197 14 0.417 41.27055 64.13206 47.88433 0 -1 -1 + 673 198 13 -0.834 49.09688 60.43369 49.80048 0 0 -1 + 674 198 14 0.417 49.75346 61.03633 50.14971 0 0 -1 + 675 198 14 0.417 49.51718 59.57440 49.83534 0 0 -1 + 676 199 13 -0.834 45.06873 45.25146 44.50830 0 1 0 + 677 199 14 0.417 45.08807 45.11881 43.56053 0 1 0 + 678 199 14 0.417 44.41198 44.63084 44.82413 0 1 0 + 679 200 13 -0.834 37.63886 45.88962 36.45768 0 0 2 + 680 200 14 0.417 38.32892 45.23766 36.58017 0 0 2 + 681 200 14 0.417 37.24627 45.98938 37.32495 0 0 2 + 682 201 13 -0.834 45.25770 47.01692 51.04211 -1 0 -2 + 683 201 14 0.417 45.49830 47.82868 50.59555 -1 0 -2 + 684 201 14 0.417 46.08295 46.68269 51.39354 -1 0 -2 + 685 202 13 -0.834 63.44567 60.77839 50.98507 -2 0 0 + 686 202 14 0.417 62.95029 60.46072 51.74001 -2 0 0 + 687 202 14 0.417 62.77774 61.08133 50.36998 -2 0 0 + 688 203 13 -0.834 48.00038 59.99003 33.31045 0 1 1 + 689 203 14 0.417 48.92391 59.89924 33.54518 0 1 1 + 690 203 14 0.417 47.68314 60.70831 33.85788 0 1 1 + 691 204 13 -0.834 51.29617 53.45952 36.10138 -1 -1 1 + 692 204 14 0.417 50.79623 53.20605 36.87731 -1 -1 1 + 693 204 14 0.417 51.41983 54.40421 36.19363 -1 -1 1 + 694 205 13 -0.834 48.55343 45.13540 34.47517 0 0 0 + 695 205 14 0.417 48.10547 45.97105 34.34382 0 0 0 + 696 205 14 0.417 49.13373 45.28879 35.22081 0 0 0 + 697 206 13 -0.834 48.34844 61.02741 54.77908 1 -1 -1 + 698 206 14 0.417 47.77364 61.75290 55.02301 1 -1 -1 + 699 206 14 0.417 49.14675 61.17253 55.28690 1 -1 -1 + 700 207 13 -0.834 38.97661 48.73541 31.27301 2 -1 0 + 701 207 14 0.417 38.86774 47.99634 30.67453 2 -1 0 + 702 207 14 0.417 38.60214 49.48112 30.80404 2 -1 0 + 703 208 13 -0.834 56.37687 61.69299 40.12439 0 -1 -1 + 704 208 14 0.417 56.35009 61.71409 39.16778 0 -1 -1 + 705 208 14 0.417 55.62486 61.15580 40.37371 0 -1 -1 + 706 209 13 -0.834 47.86700 41.38854 36.76722 -1 0 0 + 707 209 14 0.417 48.79854 41.26117 36.94678 -1 0 0 + 708 209 14 0.417 47.57553 42.00602 37.43804 -1 0 0 + 709 210 13 -0.834 43.22089 60.92576 39.48904 -1 -1 0 + 710 210 14 0.417 42.70029 60.20976 39.85311 -1 -1 0 + 711 210 14 0.417 43.25319 60.74538 38.54954 -1 -1 0 + 712 211 13 -0.834 56.26248 49.03317 34.29585 -1 0 0 + 713 211 14 0.417 56.69244 49.86416 34.09381 -1 0 0 + 714 211 14 0.417 55.61194 48.92467 33.60212 -1 0 0 + 715 212 13 -0.834 47.52063 49.37901 51.21673 1 0 0 + 716 212 14 0.417 48.35964 48.95385 51.03909 1 0 0 + 717 212 14 0.417 47.47856 49.43746 52.17122 1 0 0 + 718 213 13 -0.834 62.35532 56.31018 41.33556 0 0 0 + 719 213 14 0.417 62.07506 57.22150 41.42032 0 0 0 + 720 213 14 0.417 62.92184 56.16192 42.09274 0 0 0 + 721 214 13 -0.834 61.09797 64.53756 45.11003 -1 0 1 + 722 214 14 0.417 61.11801 63.59600 44.93887 -1 0 1 + 723 214 14 0.417 61.95676 64.85132 44.82670 -1 0 1 + 724 215 13 -0.834 51.22661 62.08872 31.93454 0 0 0 + 725 215 14 0.417 51.98994 62.65586 32.04369 0 0 0 + 726 215 14 0.417 50.47877 62.65171 32.13456 0 0 0 + 727 216 13 -0.834 40.65443 48.64853 54.43476 0 0 -1 + 728 216 14 0.417 40.25608 47.97845 54.99023 0 0 -1 + 729 216 14 0.417 41.58025 48.64240 54.67776 0 0 -1 + 730 217 13 -0.834 39.34873 63.07587 52.07209 1 1 -1 + 731 217 14 0.417 39.17266 63.98076 51.81438 1 1 -1 + 732 217 14 0.417 39.29792 62.57948 51.25523 1 1 -1 + 733 218 13 -0.834 45.66307 65.90840 47.75613 -1 0 0 + 734 218 14 0.417 44.99427 65.52542 48.32381 -1 0 0 + 735 218 14 0.417 45.75913 66.80721 48.07102 -1 0 0 + 736 219 13 -0.834 45.83158 51.91442 38.93974 0 0 0 + 737 219 14 0.417 46.07939 51.87422 39.86344 0 0 0 + 738 219 14 0.417 45.49928 51.03877 38.74210 0 0 0 + 739 220 13 -0.834 58.03934 67.88594 44.36036 -1 1 -1 + 740 220 14 0.417 58.69084 68.22520 43.74661 -1 1 -1 + 741 220 14 0.417 58.24719 68.31309 45.19138 -1 1 -1 + 742 221 13 -0.834 57.23319 66.95459 30.42832 0 0 0 + 743 221 14 0.417 56.95316 66.93560 31.34345 0 0 0 + 744 221 14 0.417 58.18154 66.82998 30.46491 0 0 0 + 745 222 13 -0.834 60.87005 44.72970 53.74755 -1 0 -1 + 746 222 14 0.417 60.02694 44.42275 53.41412 -1 0 -1 + 747 222 14 0.417 61.31963 45.07903 52.97808 -1 0 -1 + 748 223 13 -0.834 50.61352 50.44308 31.66369 0 -1 0 + 749 223 14 0.417 50.38691 49.95555 30.87173 0 -1 0 + 750 223 14 0.417 50.16704 51.28387 31.56391 0 -1 0 + 751 224 13 -0.834 42.70363 42.07925 34.73823 0 1 0 + 752 224 14 0.417 42.74630 41.15512 34.49249 0 1 0 + 753 224 14 0.417 41.77538 42.23983 34.90796 0 1 0 + 754 225 13 -0.834 50.34157 43.80796 44.49841 -1 1 0 + 755 225 14 0.417 49.44649 44.14718 44.50119 -1 1 0 + 756 225 14 0.417 50.24323 42.86994 44.66171 -1 1 0 + 757 226 13 -0.834 62.39528 64.92163 33.72829 -3 -1 1 + 758 226 14 0.417 61.94679 64.42233 34.41078 -3 -1 1 + 759 226 14 0.417 61.94061 64.68505 32.91986 -3 -1 1 + 760 227 13 -0.834 46.62188 47.13429 41.79430 0 1 1 + 761 227 14 0.417 46.21721 46.28415 41.62178 0 1 1 + 762 227 14 0.417 47.40198 46.92861 42.30946 0 1 1 + 763 228 13 -0.834 41.35469 54.31275 56.45453 0 0 -1 + 764 228 14 0.417 41.79769 53.47653 56.31055 0 0 -1 + 765 228 14 0.417 40.57273 54.26794 55.90425 0 0 -1 + 766 229 13 -0.834 48.43878 42.20000 49.94999 0 0 0 + 767 229 14 0.417 49.34431 42.29756 50.24447 0 0 0 + 768 229 14 0.417 48.41583 42.63350 49.09688 0 0 0 + 769 230 13 -0.834 37.29829 50.04209 33.34795 0 1 0 + 770 230 14 0.417 36.96213 49.51969 34.07619 0 1 0 + 771 230 14 0.417 37.98470 49.49933 32.96002 0 1 0 + 772 231 13 -0.834 58.91995 56.17895 33.02333 -1 0 0 + 773 231 14 0.417 59.83980 56.43785 32.96791 -1 0 0 + 774 231 14 0.417 58.89269 55.54120 33.73661 -1 0 0 + 775 232 13 -0.834 39.86900 65.81481 43.81866 0 0 -1 + 776 232 14 0.417 40.31483 64.99515 43.60502 0 0 -1 + 777 232 14 0.417 40.41298 66.21397 44.49762 0 0 -1 + 778 233 13 -0.834 62.71324 65.93556 51.55400 -1 0 0 + 779 233 14 0.417 62.38032 66.39597 52.32436 -1 0 0 + 780 233 14 0.417 63.52336 65.52245 51.85285 -1 0 0 + 781 234 13 -0.834 59.23324 49.58642 31.35843 0 0 0 + 782 234 14 0.417 59.28102 48.68976 31.69001 0 0 0 + 783 234 14 0.417 59.95115 50.04304 31.79700 0 0 0 + 784 235 13 -0.834 41.02310 67.21389 51.60243 0 0 0 + 785 235 14 0.417 41.77450 67.79064 51.74021 0 0 0 + 786 235 14 0.417 40.36922 67.76899 51.17753 0 0 0 + 787 236 13 -0.834 41.38918 62.43794 34.42449 0 0 1 + 788 236 14 0.417 41.26665 63.14612 33.79227 0 0 1 + 789 236 14 0.417 42.30454 62.51275 34.69423 0 0 1 + 790 237 13 -0.834 52.28796 56.01034 50.59905 0 -1 -1 + 791 237 14 0.417 53.14113 56.07317 51.02851 0 -1 -1 + 792 237 14 0.417 52.14509 55.07070 50.48548 0 -1 -1 + 793 238 13 -0.834 53.25204 66.52198 39.76351 0 -1 0 + 794 238 14 0.417 52.30774 66.44732 39.62571 0 -1 0 + 795 238 14 0.417 53.47725 67.38617 39.41895 0 -1 0 + 796 239 13 -0.834 59.77604 60.82055 48.12264 -1 -1 -1 + 797 239 14 0.417 59.80699 60.05926 48.70205 -1 -1 -1 + 798 239 14 0.417 58.96049 60.71611 47.63253 -1 -1 -1 + 799 240 13 -0.834 48.99693 51.07559 36.89084 0 -1 1 + 800 240 14 0.417 48.22315 50.55308 37.10175 0 -1 1 + 801 240 14 0.417 48.88824 51.30348 35.96753 0 -1 1 + 802 241 13 -0.834 50.67863 62.63916 55.60559 1 0 -2 + 803 241 14 0.417 51.43406 62.16856 55.25331 1 0 -2 + 804 241 14 0.417 51.05760 63.36945 56.09477 1 0 -2 + 805 242 13 -0.834 41.05301 64.77947 55.72335 1 -1 -1 + 806 242 14 0.417 41.95836 64.58666 55.96711 1 -1 -1 + 807 242 14 0.417 41.07998 65.67647 55.39035 1 -1 -1 + 808 243 13 -0.834 59.16096 63.30207 34.55147 0 -1 2 + 809 243 14 0.417 58.62636 62.51316 34.64131 0 -1 2 + 810 243 14 0.417 59.80830 63.23451 35.25333 0 -1 2 + 811 244 13 -0.834 59.86542 53.52546 55.50419 0 -1 -1 + 812 244 14 0.417 60.26921 53.79963 56.32761 0 -1 -1 + 813 244 14 0.417 58.96256 53.83773 55.56399 0 -1 -1 + 814 245 13 -0.834 56.48528 44.99075 44.65443 1 0 0 + 815 245 14 0.417 55.84854 44.49932 44.13551 1 0 0 + 816 245 14 0.417 57.18258 45.20803 44.03571 1 0 0 + 817 246 13 -0.834 37.25407 54.85866 36.86076 0 -1 -1 + 818 246 14 0.417 37.37951 55.31820 36.03050 0 -1 -1 + 819 246 14 0.417 36.91899 55.52805 37.45731 0 -1 -1 + 820 247 13 -0.834 54.42875 47.21339 48.23883 -1 -1 -1 + 821 247 14 0.417 54.60966 48.13349 48.43097 -1 -1 -1 + 822 247 14 0.417 54.44092 47.16092 47.28312 -1 -1 -1 + 823 248 13 -0.834 42.61226 41.78391 40.84493 1 0 1 + 824 248 14 0.417 41.98531 41.90233 41.55849 1 0 1 + 825 248 14 0.417 42.35866 42.43623 40.19194 1 0 1 + 826 249 13 -0.834 37.83522 41.95649 50.31377 0 0 -2 + 827 249 14 0.417 37.42231 42.81133 50.19124 0 0 -2 + 828 249 14 0.417 37.46684 41.41031 49.61934 0 0 -2 + 829 250 13 -0.834 44.80898 44.15062 49.20688 0 -1 0 + 830 250 14 0.417 44.80289 44.55594 48.33975 0 -1 0 + 831 250 14 0.417 45.29722 44.76463 49.75537 0 -1 0 + 832 251 13 -0.834 37.44321 44.03405 38.75076 1 0 1 + 833 251 14 0.417 37.12277 44.06014 39.65235 1 0 1 + 834 251 14 0.417 64.13547 43.56266 38.26824 0 0 1 + 835 252 13 -0.834 38.82113 46.15070 46.12915 1 0 0 + 836 252 14 0.417 38.96657 46.44867 47.02709 1 0 0 + 837 252 14 0.417 38.09796 45.52731 46.19733 1 0 0 + 838 253 13 -0.834 43.08482 60.65520 45.34135 -1 0 1 + 839 253 14 0.417 42.82882 59.73347 45.30784 -1 0 1 + 840 253 14 0.417 44.00885 60.65685 45.09147 -1 0 1 + 841 254 13 -0.834 45.72190 46.51173 32.51384 1 0 0 + 842 254 14 0.417 46.00925 45.78294 31.96381 1 0 0 + 843 254 14 0.417 46.53186 46.95248 32.77064 1 0 0 + 844 255 13 -0.834 63.64359 44.33728 41.24417 -1 0 0 + 845 255 14 0.417 63.60411 43.61794 41.87443 -1 0 0 + 846 255 14 0.417 62.76926 44.36407 40.85550 -1 0 0 + 847 256 13 -0.834 48.53353 66.27879 51.60437 0 0 -1 + 848 256 14 0.417 49.21611 66.24938 50.93396 0 0 -1 + 849 256 14 0.417 48.67507 65.48862 52.12577 0 0 -1 + 850 257 13 -0.834 54.11962 54.32751 39.83526 -1 1 1 + 851 257 14 0.417 53.37975 54.47391 39.24585 -1 1 1 + 852 257 14 0.417 53.95747 53.46346 40.21391 -1 1 1 + 853 258 13 -0.834 53.72785 66.08707 44.78384 -1 -1 0 + 854 258 14 0.417 54.65423 65.85662 44.85413 -1 -1 0 + 855 258 14 0.417 53.26300 65.26936 44.96130 -1 -1 0 + 856 259 13 -0.834 39.06287 51.40870 53.96063 0 0 -1 + 857 259 14 0.417 39.12854 51.34243 53.00796 0 0 -1 + 858 259 14 0.417 38.38057 52.06341 54.10916 0 0 -1 + 859 260 13 -0.834 58.77064 49.77012 37.45292 0 0 0 + 860 260 14 0.417 59.49652 49.20688 37.72142 0 0 0 + 861 260 14 0.417 57.98575 49.25379 37.63621 0 0 0 + 862 261 13 -0.834 37.94204 48.36591 35.22049 -1 0 0 + 863 261 14 0.417 37.94000 47.48368 35.59187 -1 0 0 + 864 261 14 0.417 38.86901 48.59216 35.14453 -1 0 0 + 865 262 13 -0.834 47.05754 54.06564 40.63628 0 -2 1 + 866 262 14 0.417 47.01965 53.22193 41.08679 0 -2 1 + 867 262 14 0.417 46.68660 54.68838 41.26145 0 -2 1 + 868 263 13 -0.834 46.01283 65.88108 53.59469 0 0 0 + 869 263 14 0.417 45.30729 66.50296 53.77277 0 0 0 + 870 263 14 0.417 46.76378 66.42902 53.36650 0 0 0 + 871 264 13 -0.834 45.32546 67.91008 39.11365 -1 -1 0 + 872 264 14 0.417 44.38981 67.96233 38.91853 -1 -1 0 + 873 264 14 0.417 45.70517 67.47097 38.35257 -1 -1 0 + 874 265 13 -0.834 55.39761 51.53823 53.16553 -1 1 -1 + 875 265 14 0.417 54.64975 52.10179 53.36389 -1 1 -1 + 876 265 14 0.417 55.78119 51.91789 52.37499 -1 1 -1 + 877 266 13 -0.834 57.06415 51.22923 32.75117 -1 -1 0 + 878 266 14 0.417 56.79908 52.11139 32.49079 -1 -1 0 + 879 266 14 0.417 57.98399 51.16910 32.49322 -1 -1 0 + 880 267 13 -0.834 50.05222 47.30342 45.67457 0 0 -2 + 881 267 14 0.417 49.85957 46.82324 46.47990 0 0 -2 + 882 267 14 0.417 50.60617 46.70964 45.16781 0 0 -2 + 883 268 13 -0.834 50.46819 45.47822 52.51129 0 1 -1 + 884 268 14 0.417 50.78823 45.07196 53.31677 0 1 -1 + 885 268 14 0.417 51.03886 45.13243 51.82499 0 1 -1 + 886 269 13 -0.834 47.44130 61.30175 47.80124 0 0 0 + 887 269 14 0.417 48.02715 60.89314 48.43850 0 0 0 + 888 269 14 0.417 47.98636 61.43626 47.02595 0 0 0 + 889 270 13 -0.834 41.31630 52.47434 39.71677 1 0 0 + 890 270 14 0.417 41.07609 52.94514 40.51485 1 0 0 + 891 270 14 0.417 42.05418 52.96849 39.35955 1 0 0 + 892 271 13 -0.834 55.90762 58.63213 50.47814 0 1 0 + 893 271 14 0.417 55.80273 59.37784 51.06903 0 1 0 + 894 271 14 0.417 55.41449 58.87554 49.69468 0 1 0 + 895 272 13 -0.834 42.23424 55.62725 53.35280 0 1 -1 + 896 272 14 0.417 41.62946 55.10926 53.88399 0 1 -1 + 897 272 14 0.417 41.75761 56.43615 53.16647 0 1 -1 + 898 273 13 -0.834 62.31754 63.97065 42.48774 0 0 1 + 899 273 14 0.417 63.27023 64.05391 42.44669 0 0 1 + 900 273 14 0.417 62.16851 63.13573 42.93152 0 0 1 + 901 274 13 -0.834 60.93154 49.79182 56.13812 0 -1 0 + 902 274 14 0.417 61.38991 48.97402 56.33134 0 -1 0 + 903 274 14 0.417 60.29808 49.88575 56.84955 0 -1 0 + 904 275 13 -0.834 50.39572 45.11274 36.60756 0 1 -1 + 905 275 14 0.417 50.88541 44.33834 36.33051 0 1 -1 + 906 275 14 0.417 50.38352 45.05976 37.56322 0 1 -1 + 907 276 13 -0.834 46.57204 43.12189 39.29488 -1 2 -1 + 908 276 14 0.417 46.48449 42.17951 39.43813 -1 2 -1 + 909 276 14 0.417 47.49357 43.30747 39.47547 -1 2 -1 + 910 277 13 -0.834 54.39979 41.37518 38.62483 0 0 1 + 911 277 14 0.417 54.27469 42.27221 38.31511 0 0 1 + 912 277 14 0.417 54.57135 68.24024 37.83080 0 -1 1 + 913 278 13 -0.834 60.57638 52.40343 41.12327 -1 1 -1 + 914 278 14 0.417 60.40196 53.27982 40.78010 -1 1 -1 + 915 278 14 0.417 60.37657 52.46726 42.05721 -1 1 -1 + 916 279 13 -0.834 61.77806 59.06524 41.98029 0 0 0 + 917 279 14 0.417 62.58317 59.36537 42.40214 0 0 0 + 918 279 14 0.417 61.10430 59.16112 42.65342 0 0 0 + 919 280 13 -0.834 43.46789 48.64833 54.88223 0 1 -2 + 920 280 14 0.417 43.60676 49.48200 54.43286 0 1 -2 + 921 280 14 0.417 43.74339 47.98554 54.24895 0 1 -2 + 922 281 13 -0.834 51.98628 58.37454 48.60562 -1 0 0 + 923 281 14 0.417 51.81372 57.54909 49.05852 -1 0 0 + 924 281 14 0.417 52.67545 58.16319 47.97583 -1 0 0 + 925 282 13 -0.834 55.00551 65.64176 56.63926 0 -1 -1 + 926 282 14 0.417 55.59134 66.11131 29.86167 0 -1 0 + 927 282 14 0.417 54.80211 66.27584 55.95165 0 -1 -1 + 928 283 13 -0.834 55.02996 52.59142 50.59986 -1 1 0 + 929 283 14 0.417 54.13615 52.66743 50.26585 -1 1 0 + 930 283 14 0.417 55.48513 53.35419 50.24316 -1 1 0 + 931 284 13 -0.834 37.39245 67.88600 56.81733 0 -1 -1 + 932 284 14 0.417 38.13326 41.09044 56.62787 0 0 -1 + 933 284 14 0.417 37.74351 67.00148 56.71419 0 -1 -1 + 934 285 13 -0.834 42.83234 60.22766 53.36959 0 0 0 + 935 285 14 0.417 43.51497 59.86233 52.80672 0 0 0 + 936 285 14 0.417 43.27782 60.90528 53.87815 0 0 0 + 937 286 13 -0.834 59.24806 43.81265 38.44265 1 0 0 + 938 286 14 0.417 59.12140 43.55748 39.35647 1 0 0 + 939 286 14 0.417 60.07673 44.29174 38.43991 1 0 0 + 940 287 13 -0.834 61.29263 60.52642 52.74164 -1 1 -1 + 941 287 14 0.417 61.73918 60.02180 53.42149 -1 1 -1 + 942 287 14 0.417 60.93759 61.28711 53.20156 -1 1 -1 + 943 288 13 -0.834 63.43980 43.30119 30.90384 -1 1 0 + 944 288 14 0.417 63.34979 42.36405 30.73085 -1 1 0 + 945 288 14 0.417 64.20504 43.56693 30.39393 -1 1 0 + 946 289 13 -0.834 57.11924 59.06522 54.48909 -1 0 0 + 947 289 14 0.417 57.40605 59.83488 54.98062 -1 0 0 + 948 289 14 0.417 57.59698 58.33614 54.88463 -1 0 0 + 949 290 13 -0.834 51.89759 59.82680 44.82923 1 1 -1 + 950 290 14 0.417 51.33588 59.94068 44.06258 1 1 -1 + 951 290 14 0.417 51.32846 60.01914 45.57443 1 1 -1 + 952 291 13 -0.834 57.64696 65.49112 47.86068 -1 0 0 + 953 291 14 0.417 57.31105 65.98457 48.60895 -1 0 0 + 954 291 14 0.417 57.73765 64.59519 48.18521 -1 0 0 + 955 292 13 -0.834 50.35232 57.73892 32.55459 0 1 0 + 956 292 14 0.417 51.07441 57.69034 31.92813 0 1 0 + 957 292 14 0.417 50.48339 58.57180 33.00777 0 1 0 + 958 293 13 -0.834 46.20166 60.82812 38.38269 0 1 1 + 959 293 14 0.417 46.12191 61.76977 38.53504 0 1 1 + 960 293 14 0.417 45.30555 60.53505 38.21735 0 1 1 + 961 294 13 -0.834 41.42660 51.46433 55.94150 1 0 -1 + 962 294 14 0.417 40.58025 51.71240 55.56944 1 0 -1 + 963 294 14 0.417 41.63094 50.62307 55.53311 1 0 -1 + 964 295 13 -0.834 56.72642 53.95840 32.00323 0 -1 0 + 965 295 14 0.417 57.12177 54.49254 32.69216 0 -1 0 + 966 295 14 0.417 55.80349 54.21231 32.00259 0 -1 0 + 967 296 13 -0.834 43.25852 41.40642 31.27656 0 1 0 + 968 296 14 0.417 43.58058 42.21308 31.67880 0 1 0 + 969 296 14 0.417 43.16985 68.16459 32.00619 0 0 0 + 970 297 13 -0.834 54.50477 52.62435 30.30235 -2 1 0 + 971 297 14 0.417 54.04985 52.22243 31.04245 -2 1 0 + 972 297 14 0.417 54.36900 53.56465 30.41915 -2 1 0 + 973 298 13 -0.834 38.11258 59.33341 36.21749 1 0 0 + 974 298 14 0.417 38.95754 58.91929 36.04205 1 0 0 + 975 298 14 0.417 38.14750 60.16192 35.73940 1 0 0 + 976 299 13 -0.834 39.65020 64.70254 40.48616 -1 0 1 + 977 299 14 0.417 39.87581 65.58596 40.19474 -1 0 1 + 978 299 14 0.417 39.66086 64.17611 39.68676 -1 0 1 + 979 300 13 -0.834 63.26661 53.84973 48.10281 -1 1 1 + 980 300 14 0.417 63.38261 54.75210 48.40032 -1 1 1 + 981 300 14 0.417 62.32830 53.68505 48.19603 -1 1 1 + 982 301 13 -0.834 43.65966 61.04202 50.03088 0 0 0 + 983 301 14 0.417 44.11377 60.35973 50.52538 0 0 0 + 984 301 14 0.417 44.30508 61.74317 49.94108 0 0 0 + 985 302 13 -0.834 61.75204 50.20037 32.39414 0 0 0 + 986 302 14 0.417 62.04749 51.09027 32.58663 0 0 0 + 987 302 14 0.417 62.55370 49.67736 32.38826 0 0 0 + 988 303 13 -0.834 53.79071 58.98335 36.25336 -1 -2 -1 + 989 303 14 0.417 53.17711 58.26833 36.42220 -1 -2 -1 + 990 303 14 0.417 54.65389 58.60140 36.41235 -1 -2 -1 + 991 304 13 -0.834 50.47963 50.13918 42.58243 1 -1 -2 + 992 304 14 0.417 51.28111 49.63880 42.42915 1 -1 -2 + 993 304 14 0.417 50.33279 50.61369 41.76419 1 -1 -2 + 994 305 13 -0.834 50.28770 49.02182 56.79391 1 -1 -2 + 995 305 14 0.417 50.66164 48.14920 56.91622 1 -1 -2 + 996 305 14 0.417 50.60501 49.30063 55.93493 1 -1 -2 + 997 306 13 -0.834 41.36930 46.36343 34.87469 1 1 0 + 998 306 14 0.417 42.25704 46.59841 34.60463 1 1 0 + 999 306 14 0.417 40.85961 47.16333 34.74582 1 1 0 + 1000 307 13 -0.834 61.15349 47.47016 41.71779 0 1 0 + 1001 307 14 0.417 61.50139 48.29469 41.37818 0 1 0 + 1002 307 14 0.417 60.28203 47.69385 42.04454 0 1 0 + 1003 308 13 -0.834 58.35337 46.83622 34.81712 0 0 1 + 1004 308 14 0.417 57.63221 46.22391 34.67141 0 0 1 + 1005 308 14 0.417 57.97297 47.69883 34.65146 0 0 1 + 1006 309 13 -0.834 38.79812 57.92803 48.26323 1 -2 -1 + 1007 309 14 0.417 38.67444 56.98130 48.33141 1 -2 -1 + 1008 309 14 0.417 39.70990 58.06987 48.51776 1 -2 -1 + 1009 310 13 -0.834 42.15963 57.96891 45.03230 1 0 0 + 1010 310 14 0.417 42.11698 57.98663 45.98839 1 0 0 + 1011 310 14 0.417 41.83611 57.10021 44.79371 1 0 0 + 1012 311 13 -0.834 55.17551 54.72671 36.49400 0 -1 0 + 1013 311 14 0.417 55.26386 53.77738 36.57890 0 -1 0 + 1014 311 14 0.417 55.36463 55.06457 37.36939 0 -1 0 + 1015 312 13 -0.834 58.64573 63.28550 41.10609 -1 -2 -1 + 1016 312 14 0.417 58.98147 62.66636 41.75429 -1 -2 -1 + 1017 312 14 0.417 57.90273 62.83419 40.70545 -1 -2 -1 + 1018 313 13 -0.834 49.96498 59.98797 42.54359 0 -1 0 + 1019 313 14 0.417 50.57886 60.48612 42.00390 0 -1 0 + 1020 313 14 0.417 49.10600 60.17526 42.16501 0 -1 0 + 1021 314 13 -0.834 57.54750 44.35075 52.12722 -1 -1 -1 + 1022 314 14 0.417 57.86221 43.84739 51.37633 -1 -1 -1 + 1023 314 14 0.417 56.76423 44.79718 51.80558 -1 -1 -1 + 1024 315 13 -0.834 58.07892 59.46258 41.31930 1 -1 0 + 1025 315 14 0.417 58.27344 60.10968 41.99729 1 -1 0 + 1026 315 14 0.417 57.80524 59.98199 40.56328 1 -1 0 + 1027 316 13 -0.834 42.21869 44.49848 55.65511 2 1 0 + 1028 316 14 0.417 42.77458 44.78017 56.38166 2 1 0 + 1029 316 14 0.417 42.83052 44.15513 55.00395 2 1 0 + 1030 317 13 -0.834 56.38334 63.45614 43.52622 -1 -1 0 + 1031 317 14 0.417 55.66283 63.62998 42.92052 -1 -1 0 + 1032 317 14 0.417 56.48976 64.27319 44.01338 -1 -1 0 + 1033 318 13 -0.834 43.21354 46.04700 52.52965 1 1 0 + 1034 318 14 0.417 43.24360 45.09879 52.40226 1 1 0 + 1035 318 14 0.417 43.99839 46.37328 52.08943 1 1 0 + 1036 319 13 -0.834 55.96174 45.94863 35.39660 -1 0 1 + 1037 319 14 0.417 55.64687 46.44680 36.15088 -1 0 1 + 1038 319 14 0.417 55.28305 46.06527 34.73174 -1 0 1 + 1039 320 13 -0.834 47.36406 54.82690 34.84439 -1 -1 2 + 1040 320 14 0.417 47.90093 54.86776 34.05295 -1 -1 2 + 1041 320 14 0.417 47.23152 53.89118 34.99640 -1 -1 2 + 1042 321 13 -0.834 49.62685 50.00229 45.27362 1 0 -2 + 1043 321 14 0.417 49.70876 49.05477 45.38192 1 0 -2 + 1044 321 14 0.417 49.82566 50.15634 44.35005 1 0 -2 + 1045 322 13 -0.834 49.58249 46.02940 55.43310 -1 0 -2 + 1046 322 14 0.417 49.10378 46.80060 55.12924 -1 0 -2 + 1047 322 14 0.417 49.31802 45.92761 56.34739 -1 0 -2 + 1048 323 13 -0.834 51.72150 51.53491 51.55558 0 -1 -1 + 1049 323 14 0.417 51.50292 52.17946 50.88251 0 -1 -1 + 1050 323 14 0.417 52.14568 52.04382 52.24646 0 -1 -1 + 1051 324 13 -0.834 37.98107 56.66338 52.98024 0 1 0 + 1052 324 14 0.417 37.64467 57.53823 52.78607 0 1 0 + 1053 324 14 0.417 38.15999 56.27913 52.12200 0 1 0 + 1054 325 13 -0.834 59.20226 51.55233 53.16877 -1 1 0 + 1055 325 14 0.417 59.68851 51.88535 53.92302 -1 1 0 + 1056 325 14 0.417 58.63621 50.87031 53.53025 -1 1 0 + 1057 326 13 -0.834 45.75783 63.62117 39.24032 1 1 -1 + 1058 326 14 0.417 46.25179 64.38626 39.53508 1 1 -1 + 1059 326 14 0.417 44.85376 63.80686 39.49409 1 1 -1 + 1060 327 13 -0.834 58.00953 52.38584 37.67148 -1 1 1 + 1061 327 14 0.417 58.24242 51.47235 37.50553 -1 1 1 + 1062 327 14 0.417 57.26453 52.33853 38.27062 -1 1 1 + 1063 328 13 -0.834 50.62838 66.20855 42.36072 0 0 -1 + 1064 328 14 0.417 51.45434 66.68250 42.45770 0 0 -1 + 1065 328 14 0.417 49.99531 66.87945 42.10506 0 0 -1 + 1066 329 13 -0.834 53.69444 52.39171 45.41982 1 0 0 + 1067 329 14 0.417 53.84961 51.45739 45.55855 1 0 0 + 1068 329 14 0.417 52.75879 52.45359 45.22750 1 0 0 + 1069 330 13 -0.834 38.34038 60.92162 30.12773 2 0 0 + 1070 330 14 0.417 39.08908 61.47644 29.90887 2 0 0 + 1071 330 14 0.417 38.64185 60.39196 30.86585 2 0 0 + 1072 331 13 -0.834 48.03336 64.84935 43.13262 -1 0 -2 + 1073 331 14 0.417 48.90813 65.00919 43.48682 -1 0 -2 + 1074 331 14 0.417 47.46214 65.43367 43.63114 -1 0 -2 + 1075 332 13 -0.834 39.68760 66.88962 36.60665 2 0 0 + 1076 332 14 0.417 38.74743 66.72116 36.66944 2 0 0 + 1077 332 14 0.417 40.05009 66.08888 36.22764 2 0 0 + 1078 333 13 -0.834 51.94118 65.49897 51.83197 0 -1 -2 + 1079 333 14 0.417 52.71282 65.06165 51.47204 0 -1 -2 + 1080 333 14 0.417 51.22446 64.88225 51.68297 0 -1 -2 + 1081 334 13 -0.834 43.33066 57.53264 55.09930 -1 0 -2 + 1082 334 14 0.417 43.05496 56.76932 54.59178 -1 0 -2 + 1083 334 14 0.417 44.28179 57.55937 54.99503 -1 0 -2 + 1084 335 13 -0.834 47.70128 45.69178 52.17773 -1 3 -1 + 1085 335 14 0.417 47.54566 44.86273 52.63016 -1 3 -1 + 1086 335 14 0.417 48.58530 45.94693 52.44163 -1 3 -1 + 1087 336 13 -0.834 58.71603 41.81571 40.73899 -1 0 0 + 1088 336 14 0.417 57.77048 41.84330 40.88539 -1 0 0 + 1089 336 14 0.417 58.81275 41.43332 39.86682 -1 0 0 + 1090 337 13 -0.834 57.56034 60.98533 43.60766 0 -1 0 + 1091 337 14 0.417 56.67639 60.61816 43.59917 0 -1 0 + 1092 337 14 0.417 57.42830 61.92611 43.72486 0 -1 0 + 1093 338 13 -0.834 44.68088 65.08579 34.27880 -1 0 2 + 1094 338 14 0.417 45.54678 65.09564 34.68668 -1 0 2 + 1095 338 14 0.417 44.45037 64.15818 34.22739 -1 0 2 + 1096 339 13 -0.834 54.98236 48.04093 42.26075 0 0 0 + 1097 339 14 0.417 55.16505 47.86552 43.18384 0 0 0 + 1098 339 14 0.417 55.70493 48.59999 41.97513 0 0 0 + 1099 340 13 -0.834 60.57099 56.88773 56.53671 0 0 1 + 1100 340 14 0.417 60.67151 56.21616 29.83998 0 0 2 + 1101 340 14 0.417 61.34465 56.78824 55.98192 0 0 1 + 1102 341 13 -0.834 48.05045 49.69974 47.93542 -1 0 0 + 1103 341 14 0.417 48.70922 49.23613 48.45249 -1 0 0 + 1104 341 14 0.417 48.26410 49.48583 47.02721 -1 0 0 + 1105 342 13 -0.834 40.63207 55.77589 49.21695 1 0 -1 + 1106 342 14 0.417 40.84917 56.26844 50.00847 1 0 -1 + 1107 342 14 0.417 41.40772 55.85904 48.66226 1 0 -1 + 1108 343 13 -0.834 61.66015 42.71355 39.91223 0 0 0 + 1109 343 14 0.417 61.87748 41.86774 40.30419 0 0 0 + 1110 343 14 0.417 61.98864 42.65380 39.01514 0 0 0 + 1111 344 13 -0.834 38.52157 65.12766 57.04010 0 -1 -1 + 1112 344 14 0.417 38.04157 64.32142 56.85084 0 -1 -1 + 1113 344 14 0.417 39.36310 65.01535 56.59799 0 -1 -1 + 1114 345 13 -0.834 54.26556 44.72348 38.61852 -1 0 0 + 1115 345 14 0.417 54.65781 45.53245 38.94708 -1 0 0 + 1116 345 14 0.417 54.97105 44.29396 38.13473 -1 0 0 + 1117 346 13 -0.834 55.38993 55.61246 43.96322 -1 0 1 + 1118 346 14 0.417 54.74535 54.99107 43.62461 -1 0 1 + 1119 346 14 0.417 55.11835 55.77119 44.86726 -1 0 1 + 1120 347 13 -0.834 56.42023 55.00369 50.06211 -1 -1 0 + 1121 347 14 0.417 55.77599 55.59187 50.45611 -1 -1 0 + 1122 347 14 0.417 56.93756 54.68448 50.80151 -1 -1 0 + 1123 348 13 -0.834 45.79495 66.88952 36.56670 1 1 -1 + 1124 348 14 0.417 45.28578 66.71904 35.77429 1 1 -1 + 1125 348 14 0.417 46.57709 67.34552 36.25591 1 1 -1 + 1126 349 13 -0.834 62.75278 45.54084 32.23733 0 0 0 + 1127 349 14 0.417 62.61586 44.79986 31.64705 0 0 0 + 1128 349 14 0.417 62.96974 45.14017 33.07913 0 0 0 + 1129 350 13 -0.834 57.50625 65.62986 39.74454 0 0 0 + 1130 350 14 0.417 57.73342 64.85584 40.25983 0 0 0 + 1131 350 14 0.417 57.07082 66.21286 40.36642 0 0 0 + 1132 351 13 -0.834 55.96293 62.10636 50.17062 0 1 -1 + 1133 351 14 0.417 56.24333 61.70901 50.99507 0 1 -1 + 1134 351 14 0.417 56.67888 62.69531 49.93234 0 1 -1 + 1135 352 13 -0.834 37.45010 41.11856 53.00894 0 0 0 + 1136 352 14 0.417 37.99062 41.49514 53.70339 0 0 0 + 1137 352 14 0.417 37.83337 41.45341 52.19826 0 0 0 + 1138 353 13 -0.834 40.59344 47.85232 38.52244 1 0 1 + 1139 353 14 0.417 41.31256 47.71502 37.90580 1 0 1 + 1140 353 14 0.417 40.21612 48.69426 38.26747 1 0 1 + 1141 354 13 -0.834 60.77214 62.31711 30.33695 0 2 -1 + 1142 354 14 0.417 59.83662 62.43212 30.17023 0 2 -1 + 1143 354 14 0.417 60.97856 61.45964 29.96496 0 2 -1 + 1144 355 13 -0.834 47.83829 64.26042 48.43592 0 1 -1 + 1145 355 14 0.417 47.12209 64.85952 48.22523 0 1 -1 + 1146 355 14 0.417 47.44823 63.38856 48.37295 0 1 -1 + 1147 356 13 -0.834 38.69679 45.31108 42.13672 1 1 0 + 1148 356 14 0.417 39.20464 45.52138 41.35308 1 1 0 + 1149 356 14 0.417 37.90440 44.89009 41.80335 1 1 0 + 1150 357 13 -0.834 38.90832 47.67164 52.69089 0 1 0 + 1151 357 14 0.417 39.51269 48.14149 53.26554 0 1 0 + 1152 357 14 0.417 38.42834 48.36117 52.23218 0 1 0 + 1153 358 13 -0.834 45.13879 48.98199 29.96256 0 2 1 + 1154 358 14 0.417 44.63649 48.48457 30.60794 0 2 1 + 1155 358 14 0.417 44.70163 48.80464 56.50106 0 2 0 + 1156 359 13 -0.834 54.78460 57.58368 54.24956 1 1 -1 + 1157 359 14 0.417 54.71436 57.34891 55.17486 1 1 -1 + 1158 359 14 0.417 55.60599 58.07122 54.18735 1 1 -1 + 1159 360 13 -0.834 40.77006 67.09387 46.34204 0 0 1 + 1160 360 14 0.417 40.91087 66.51539 47.09156 0 0 1 + 1161 360 14 0.417 41.47386 67.73986 46.40192 0 0 1 + 1162 361 13 -0.834 53.75960 49.21723 54.03526 1 0 -1 + 1163 361 14 0.417 54.17778 50.07537 53.96484 1 0 -1 + 1164 361 14 0.417 54.18187 48.68822 53.35846 1 0 -1 + 1165 362 13 -0.834 46.41755 62.84035 30.52059 0 0 1 + 1166 362 14 0.417 46.37357 61.90548 30.72136 0 0 1 + 1167 362 14 0.417 46.76359 62.87829 57.00030 0 0 0 + 1168 363 13 -0.834 51.27491 42.28113 30.83818 0 -1 0 + 1169 363 14 0.417 51.18814 42.11416 31.77671 0 -1 0 + 1170 363 14 0.417 50.41560 42.60836 30.57220 0 -1 0 + 1171 364 13 -0.834 52.36258 42.54738 46.83477 0 -1 -1 + 1172 364 14 0.417 51.62853 42.02025 46.51928 0 -1 -1 + 1173 364 14 0.417 53.11771 42.22680 46.34158 0 -1 -1 + 1174 365 13 -0.834 40.11442 46.69570 48.71466 3 -2 1 + 1175 365 14 0.417 39.89820 47.61495 48.55824 3 -2 1 + 1176 365 14 0.417 40.87520 46.72352 49.29493 3 -2 1 + 1177 366 13 -0.834 56.56957 65.78976 45.32589 0 -2 -1 + 1178 366 14 0.417 56.86196 65.56407 46.20896 0 -2 -1 + 1179 366 14 0.417 57.34222 66.16870 44.90678 0 -2 -1 + 1180 367 13 -0.834 38.37373 47.63723 43.98242 2 0 0 + 1181 367 14 0.417 38.78516 47.21384 44.73589 2 0 0 + 1182 367 14 0.417 38.73588 47.18051 43.22315 2 0 0 + 1183 368 13 -0.834 45.69445 49.36872 40.50736 -1 0 -2 + 1184 368 14 0.417 44.73771 49.39892 40.51002 -1 0 -2 + 1185 368 14 0.417 45.90701 48.47357 40.77155 -1 0 -2 + 1186 369 13 -0.834 53.93830 54.76570 31.99728 0 -1 0 + 1187 369 14 0.417 53.94849 55.50033 32.61083 0 -1 0 + 1188 369 14 0.417 53.13070 54.29402 32.20107 0 -1 0 + 1189 370 13 -0.834 58.79125 64.07093 37.97498 -1 -1 -2 + 1190 370 14 0.417 58.48296 64.72380 38.60343 -1 -1 -2 + 1191 370 14 0.417 58.20942 64.16977 37.22136 -1 -1 -2 + 1192 371 13 -0.834 51.76123 61.42281 40.82794 0 -1 0 + 1193 371 14 0.417 52.69114 61.24136 40.69160 0 -1 0 + 1194 371 14 0.417 51.74755 62.21395 41.36660 0 -1 0 + 1195 372 13 -0.834 44.28377 63.70509 53.71234 -1 -2 -1 + 1196 372 14 0.417 44.98211 64.35001 53.59994 -1 -2 -1 + 1197 372 14 0.417 43.75271 63.78587 52.92008 -1 -2 -1 + 1198 373 13 -0.834 61.50835 48.76378 34.91047 0 0 -1 + 1199 373 14 0.417 61.23254 49.09753 34.05678 0 0 -1 + 1200 373 14 0.417 61.51672 49.53447 35.47812 0 0 -1 + 1201 374 13 -0.834 61.51337 41.63477 44.26291 -1 -1 0 + 1202 374 14 0.417 62.42662 41.58544 44.54543 -1 -1 0 + 1203 374 14 0.417 61.34749 68.16405 43.83907 -1 -2 0 + 1204 375 13 -0.834 57.73267 43.39213 33.64792 0 -1 0 + 1205 375 14 0.417 58.46456 43.28438 34.25535 0 -1 0 + 1206 375 14 0.417 58.09278 43.15396 32.79362 0 -1 0 + 1207 376 13 -0.834 63.51473 49.31549 51.59705 -1 1 -1 + 1208 376 14 0.417 63.13045 49.03534 50.76631 -1 1 -1 + 1209 376 14 0.417 62.84038 49.86142 52.00137 -1 1 -1 + 1210 377 13 -0.834 58.21462 44.79010 54.73553 -1 -1 -1 + 1211 377 14 0.417 58.08068 43.94884 55.17209 -1 -1 -1 + 1212 377 14 0.417 57.81645 44.67856 53.87224 -1 -1 -1 + 1213 378 13 -0.834 57.08090 55.14561 52.86183 0 -2 1 + 1214 378 14 0.417 57.05215 55.46811 53.76261 0 -2 1 + 1215 378 14 0.417 57.69965 54.41575 52.88786 0 -2 1 + 1216 379 13 -0.834 60.83502 54.45436 45.82182 1 0 -1 + 1217 379 14 0.417 61.05342 55.38616 45.83857 1 0 -1 + 1218 379 14 0.417 60.79443 54.20077 46.74392 1 0 -1 + 1219 380 13 -0.834 60.86442 48.23162 37.95658 0 0 2 + 1220 380 14 0.417 61.77710 48.43881 37.75572 0 0 2 + 1221 380 14 0.417 60.87611 47.30540 38.19788 0 0 2 + 1222 381 13 -0.834 43.21478 43.26953 44.97859 2 1 -1 + 1223 381 14 0.417 42.50778 42.78849 44.54850 2 1 -1 + 1224 381 14 0.417 43.42173 42.74895 45.75474 2 1 -1 + 1225 382 13 -0.834 39.01904 49.57571 48.28198 1 -1 -1 + 1226 382 14 0.417 38.68877 49.32064 47.42052 1 -1 -1 + 1227 382 14 0.417 38.42357 50.26661 48.57234 1 -1 -1 + 1228 383 13 -0.834 47.20253 45.34580 30.26781 0 0 1 + 1229 383 14 0.417 47.05738 44.40526 30.16508 0 0 1 + 1230 383 14 0.417 46.80592 45.73631 56.86044 0 0 0 + 1231 384 13 -0.834 44.57742 55.88746 33.53830 0 -1 0 + 1232 384 14 0.417 45.13093 56.49768 33.05096 0 -1 0 + 1233 384 14 0.417 44.41092 55.17196 32.92464 0 -1 0 + 1234 385 13 -0.834 42.17091 64.36626 51.74369 1 0 0 + 1235 385 14 0.417 41.78583 65.24128 51.69570 1 0 0 + 1236 385 14 0.417 41.41926 63.77568 51.79343 1 0 0 + 1237 386 13 -0.834 43.82615 43.47821 52.97551 0 0 0 + 1238 386 14 0.417 43.64099 42.56407 52.76025 0 0 0 + 1239 386 14 0.417 44.58924 43.43914 53.55207 0 0 0 + 1240 387 13 -0.834 63.58286 63.91035 38.47173 0 -1 -1 + 1241 387 14 0.417 64.14591 63.71296 39.22023 0 -1 -1 + 1242 387 14 0.417 62.70901 64.01191 38.84896 0 -1 -1 + 1243 388 13 -0.834 57.85225 42.19019 46.82252 1 1 -2 + 1244 388 14 0.417 57.61712 42.29475 47.74450 1 1 -2 + 1245 388 14 0.417 57.29406 42.81537 46.36013 1 1 -2 + 1246 389 13 -0.834 57.90802 64.30101 52.26362 1 0 1 + 1247 389 14 0.417 58.43907 64.81717 52.87010 1 0 1 + 1248 389 14 0.417 58.54387 63.78888 51.76396 1 0 1 + 1249 390 13 -0.834 53.18379 66.68791 54.05156 1 -2 0 + 1250 390 14 0.417 52.23394 66.79510 54.00115 1 -2 0 + 1251 390 14 0.417 53.33447 65.77140 53.82015 1 -2 0 + 1252 391 13 -0.834 56.95394 68.26036 36.42711 -1 1 1 + 1253 391 14 0.417 56.91362 41.83232 36.58445 -1 2 1 + 1254 391 14 0.417 57.79173 67.98998 36.80292 -1 1 1 + 1255 392 13 -0.834 64.19252 44.20158 54.88143 0 0 0 + 1256 392 14 0.417 64.09322 45.07899 54.51194 0 0 0 + 1257 392 14 0.417 63.39239 43.74201 54.62684 0 0 0 + 1258 393 13 -0.834 63.10536 65.42626 48.53464 0 0 0 + 1259 393 14 0.417 62.79665 64.63036 48.10166 0 0 0 + 1260 393 14 0.417 62.77768 65.35429 49.43112 0 0 0 + 1261 394 13 -0.834 49.28836 66.20367 32.27628 1 -1 0 + 1262 394 14 0.417 49.46858 65.88738 33.16155 1 -1 0 + 1263 394 14 0.417 49.29197 65.41476 31.73420 1 -1 0 + 1264 395 13 -0.834 46.11216 66.09570 44.77896 0 -1 0 + 1265 395 14 0.417 45.90309 66.07762 45.71287 0 -1 0 + 1266 395 14 0.417 45.36137 65.67813 44.35683 0 -1 0 + 1267 396 13 -0.834 41.43943 50.30026 52.32584 1 0 0 + 1268 396 14 0.417 41.39866 49.93140 51.44351 1 0 0 + 1269 396 14 0.417 40.92759 49.69528 52.86275 1 0 0 + 1270 397 13 -0.834 54.69177 57.80859 32.50623 0 -1 -1 + 1271 397 14 0.417 53.99890 57.66594 31.86139 0 -1 -1 + 1272 397 14 0.417 54.37599 57.37325 33.29806 0 -1 -1 + 1273 398 13 -0.834 43.56781 46.79065 37.17838 0 1 0 + 1274 398 14 0.417 43.18325 46.24795 36.49004 0 1 0 + 1275 398 14 0.417 44.03819 46.17194 37.73711 0 1 0 + 1276 399 13 -0.834 55.33436 45.90772 50.69068 -1 0 0 + 1277 399 14 0.417 55.55455 46.77982 51.01809 -1 0 0 + 1278 399 14 0.417 55.09425 46.04877 49.77488 -1 0 0 + 1279 400 13 -0.834 56.15383 51.87018 43.92178 -1 0 1 + 1280 400 14 0.417 55.25073 52.12373 44.11256 -1 0 1 + 1281 400 14 0.417 56.65027 52.68628 43.98319 -1 0 1 + 1282 401 13 -0.834 62.38946 50.01240 45.94802 0 1 -2 + 1283 401 14 0.417 62.43815 50.07607 44.99418 0 1 -2 + 1284 401 14 0.417 61.47369 50.19932 46.15457 0 1 -2 + 1285 402 13 -0.834 53.60920 58.35575 46.37412 0 0 1 + 1286 402 14 0.417 53.25556 59.03071 45.79481 0 0 1 + 1287 402 14 0.417 53.24753 57.53627 46.03666 0 0 1 + 1288 403 13 -0.834 43.13375 42.07203 50.04429 1 0 0 + 1289 403 14 0.417 43.76099 42.76922 49.85267 1 0 0 + 1290 403 14 0.417 42.35437 42.53016 50.35879 1 0 0 + 1291 404 13 -0.834 47.41498 59.41146 52.77687 -1 -1 0 + 1292 404 14 0.417 47.81303 59.83868 53.53534 -1 -1 0 + 1293 404 14 0.417 48.01011 59.60512 52.05261 -1 -1 0 + 1294 405 13 -0.834 63.75607 47.28104 38.80571 0 2 -1 + 1295 405 14 0.417 63.78573 48.20840 38.57042 0 2 -1 + 1296 405 14 0.417 37.08655 47.17376 39.44769 1 2 -1 + 1297 406 13 -0.834 46.67594 56.20863 44.42866 1 1 0 + 1298 406 14 0.417 45.82140 56.15280 44.00100 1 1 0 + 1299 406 14 0.417 46.48292 56.12468 45.36243 1 1 0 + 1300 407 13 -0.834 62.54251 68.21194 54.20445 0 -1 1 + 1301 407 14 0.417 63.31640 41.15490 53.73696 0 0 1 + 1302 407 14 0.417 62.78865 67.34176 54.51819 0 -1 1 + 1303 408 13 -0.834 60.27010 54.96049 39.87633 0 0 0 + 1304 408 14 0.417 59.62959 55.67175 39.88547 0 0 0 + 1305 408 14 0.417 61.04761 55.33233 40.29281 0 0 0 + 1306 409 13 -0.834 40.02595 44.30132 44.29580 0 -2 0 + 1307 409 14 0.417 39.70595 44.75009 45.07839 0 -2 0 + 1308 409 14 0.417 39.56836 44.72725 43.57092 0 -2 0 + 1309 410 13 -0.834 54.20011 41.08252 35.61017 0 1 0 + 1310 410 14 0.417 55.10396 68.23613 35.83794 0 0 0 + 1311 410 14 0.417 54.27044 41.57221 34.79072 0 1 0 + 1312 411 13 -0.834 60.64478 45.93023 50.84376 1 1 -1 + 1313 411 14 0.417 60.80088 46.54647 51.55941 1 1 -1 + 1314 411 14 0.417 61.20574 46.24077 50.13303 1 1 -1 + 1315 412 13 -0.834 44.55137 44.47403 38.16771 1 0 -1 + 1316 412 14 0.417 45.28189 43.86333 38.26597 1 0 -1 + 1317 412 14 0.417 43.77025 43.93754 38.30281 1 0 -1 + 1318 413 13 -0.834 58.08933 62.76987 30.45191 1 -1 0 + 1319 413 14 0.417 57.64138 63.31997 29.80927 1 -1 0 + 1320 413 14 0.417 57.43674 62.11708 30.70545 1 -1 0 + 1321 414 13 -0.834 55.65273 56.71117 38.74877 1 0 1 + 1322 414 14 0.417 56.53260 56.59636 39.10779 1 0 1 + 1323 414 14 0.417 55.14964 55.98047 39.10825 1 0 1 + 1324 415 13 -0.834 55.50009 51.16952 38.77962 0 0 0 + 1325 415 14 0.417 54.95350 51.23711 37.99672 0 0 0 + 1326 415 14 0.417 55.53220 50.23190 38.96963 0 0 0 + 1327 416 13 -0.834 47.64702 52.79911 31.71446 0 -1 0 + 1328 416 14 0.417 48.52504 53.09556 31.47481 0 -1 0 + 1329 416 14 0.417 47.06032 53.44853 31.32681 0 -1 0 + 1330 417 13 -0.834 49.26727 42.35880 39.18566 1 1 -2 + 1331 417 14 0.417 50.02784 42.93912 39.15429 1 1 -2 + 1332 417 14 0.417 49.46495 41.74196 39.89040 1 1 -2 + 1333 418 13 -0.834 47.22542 64.65021 35.82232 1 -1 0 + 1334 418 14 0.417 46.76114 65.20346 36.45050 1 -1 0 + 1335 418 14 0.417 47.98585 65.16966 35.56120 1 -1 0 + 1336 419 13 -0.834 58.53686 56.85468 40.78587 1 1 0 + 1337 419 14 0.417 58.45283 56.63469 41.71365 1 1 0 + 1338 419 14 0.417 58.36285 57.79507 40.74550 1 1 0 + 1339 420 13 -0.834 50.09436 46.17981 48.16619 -1 -1 -2 + 1340 420 14 0.417 50.67249 45.42897 48.30138 -1 -1 -2 + 1341 420 14 0.417 50.49629 46.88624 48.67183 -1 -1 -2 + 1342 421 13 -0.834 42.30297 57.95379 33.48633 0 -1 1 + 1343 421 14 0.417 41.56921 57.39445 33.23136 0 -1 1 + 1344 421 14 0.417 43.00718 57.34235 33.70193 0 -1 1 + 1345 422 13 -0.834 45.76518 43.79811 54.82490 0 -1 0 + 1346 422 14 0.417 46.45133 43.55343 54.20397 0 -1 0 + 1347 422 14 0.417 45.87205 43.18693 55.55379 0 -1 0 + 1348 423 13 -0.834 59.33326 61.34125 37.96927 -1 -1 1 + 1349 423 14 0.417 59.29007 62.29004 38.08827 -1 -1 1 + 1350 423 14 0.417 59.90006 61.03609 38.67769 -1 -1 1 + 1351 424 13 -0.834 40.95662 63.48104 42.72192 1 -1 0 + 1352 424 14 0.417 40.33618 63.69074 42.02383 1 -1 0 + 1353 424 14 0.417 41.73946 63.17568 42.26346 1 -1 0 + 1354 425 13 -0.834 38.13662 59.25720 46.08402 1 -1 -1 + 1355 425 14 0.417 38.31499 59.03616 46.99811 1 -1 -1 + 1356 425 14 0.417 38.55502 58.55783 45.58196 1 -1 -1 + 1357 426 13 -0.834 48.88681 66.85051 54.82298 1 -2 0 + 1358 426 14 0.417 49.16879 67.45078 54.13275 1 -2 0 + 1359 426 14 0.417 49.42353 66.06836 54.69484 1 -2 0 + 1360 427 13 -0.834 45.88049 57.05477 48.46508 0 0 -1 + 1361 427 14 0.417 45.73709 57.90911 48.05793 0 0 -1 + 1362 427 14 0.417 45.83791 57.22701 49.40569 0 0 -1 + 1363 428 13 -0.834 39.37333 50.31613 37.93447 0 1 0 + 1364 428 14 0.417 39.11456 50.97624 37.29140 0 1 0 + 1365 428 14 0.417 38.97424 50.60960 38.75352 0 1 0 + 1366 429 13 -0.834 37.89753 62.82745 47.39297 0 -1 0 + 1367 429 14 0.417 38.39122 62.78202 46.57414 0 -1 0 + 1368 429 14 0.417 37.01605 63.08963 47.12747 0 -1 0 + 1369 430 13 -0.834 43.16514 41.31420 47.01379 0 1 0 + 1370 430 14 0.417 42.71409 41.22965 47.85382 0 1 0 + 1371 430 14 0.417 44.05112 68.36565 47.18386 0 0 0 + 1372 431 13 -0.834 47.03179 42.44477 42.46475 1 0 0 + 1373 431 14 0.417 46.12350 42.65285 42.24573 1 0 0 + 1374 431 14 0.417 47.53228 43.19970 42.15516 1 0 0 + 1375 432 13 -0.834 55.35894 54.15040 46.85340 0 -1 0 + 1376 432 14 0.417 54.76544 53.43667 46.61975 0 -1 0 + 1377 432 14 0.417 56.17133 53.71318 47.10853 0 -1 0 + 1378 433 13 -0.834 47.00663 55.28313 38.22800 -1 -2 1 + 1379 433 14 0.417 46.53490 56.00706 38.63987 -1 -2 1 + 1380 433 14 0.417 47.07459 54.61953 38.91449 -1 -2 1 + 1381 434 13 -0.834 57.16336 58.62297 32.33349 -1 0 2 + 1382 434 14 0.417 57.63330 57.80350 32.48798 -1 0 2 + 1383 434 14 0.417 56.24209 58.36680 32.29014 -1 0 2 + 1384 435 13 -0.834 37.23245 47.62479 56.34765 0 1 -1 + 1385 435 14 0.417 37.24274 47.21497 55.48268 0 1 -1 + 1386 435 14 0.417 37.36000 46.89905 56.95860 0 1 -1 + 1387 436 13 -0.834 48.77030 41.06015 29.86683 2 1 0 + 1388 436 14 0.417 48.81141 67.97117 56.39997 2 0 -1 + 1389 436 14 0.417 49.05230 67.78232 30.51123 2 0 0 + 1390 437 13 -0.834 49.10149 56.15638 36.66346 0 0 1 + 1391 437 14 0.417 48.50786 55.61659 36.14146 0 0 1 + 1392 437 14 0.417 48.61812 56.33305 37.47053 0 0 1 + 1393 438 13 -0.834 58.15731 59.39698 29.96092 0 -1 1 + 1394 438 14 0.417 58.20240 59.10993 30.87296 0 -1 1 + 1395 438 14 0.417 57.30076 59.81721 29.88367 0 -1 1 + 1396 439 13 -0.834 59.37068 41.03089 37.87324 1 0 0 + 1397 439 14 0.417 59.56889 41.95335 37.71194 1 0 0 + 1398 439 14 0.417 60.22643 67.97433 37.90167 1 -1 0 + 1399 440 13 -0.834 38.32241 55.03397 50.58952 1 0 0 + 1400 440 14 0.417 38.22793 54.19584 50.13692 1 0 0 + 1401 440 14 0.417 39.21785 55.31153 50.39614 1 0 0 + 1402 441 13 -0.834 36.94673 59.01778 33.00159 1 -1 2 + 1403 441 14 0.417 36.95260 59.97305 32.94091 1 -1 2 + 1404 441 14 0.417 63.71798 58.82680 33.72245 0 -1 2 + 1405 442 13 -0.834 62.50746 54.84239 54.03343 0 -1 0 + 1406 442 14 0.417 61.69710 54.35984 54.19681 0 -1 0 + 1407 442 14 0.417 63.09119 54.20097 53.62833 0 -1 0 + 1408 443 13 -0.834 40.59690 62.80012 38.69405 1 -1 1 + 1409 443 14 0.417 41.53881 62.90970 38.82458 1 -1 1 + 1410 443 14 0.417 40.36980 62.03187 39.21794 1 -1 1 + 1411 444 13 -0.834 37.67477 67.71471 42.59127 0 -1 -1 + 1412 444 14 0.417 38.12213 68.13627 41.85751 0 -1 -1 + 1413 444 14 0.417 38.28279 67.03643 42.88534 0 -1 -1 + 1414 445 13 -0.834 42.73681 50.65782 33.30839 1 1 0 + 1415 445 14 0.417 42.84587 51.15085 34.12157 1 1 0 + 1416 445 14 0.417 42.32631 51.27747 32.70527 1 1 0 + 1417 446 13 -0.834 37.13349 57.05842 55.81927 0 0 0 + 1418 446 14 0.417 37.95375 57.53453 55.68979 0 0 0 + 1419 446 14 0.417 36.99014 56.59807 54.99236 0 0 0 + 1420 447 13 -0.834 61.08039 63.50929 36.52096 -1 0 0 + 1421 447 14 0.417 60.44389 63.87414 37.13579 -1 0 0 + 1422 447 14 0.417 61.70642 63.04107 37.07331 -1 0 0 + 1423 448 13 -0.834 57.12289 46.04019 38.75954 0 0 0 + 1424 448 14 0.417 56.81351 45.55997 39.52760 0 0 0 + 1425 448 14 0.417 57.99543 45.68504 38.58988 0 0 0 + 1426 449 13 -0.834 45.45003 49.45347 49.54397 0 0 -1 + 1427 449 14 0.417 45.96611 49.34591 48.74502 0 0 -1 + 1428 449 14 0.417 46.09930 49.60861 50.22999 0 0 -1 + 1429 450 13 -0.834 37.77009 64.51990 42.66941 1 0 0 + 1430 450 14 0.417 38.49339 64.80040 43.23011 1 0 0 + 1431 450 14 0.417 38.14071 64.50928 41.78694 1 0 0 + 1432 451 13 -0.834 45.78323 57.65378 39.37062 1 0 0 + 1433 451 14 0.417 46.03758 58.03295 40.21190 1 0 0 + 1434 451 14 0.417 44.96217 58.09258 39.14803 1 0 0 + 1435 452 13 -0.834 56.96672 60.41636 47.59314 0 -1 1 + 1436 452 14 0.417 56.18373 60.11455 48.05365 0 -1 1 + 1437 452 14 0.417 56.65889 61.13663 47.04297 0 -1 1 + 1438 453 13 -0.834 52.44356 65.82746 35.82081 -1 -1 0 + 1439 453 14 0.417 53.10567 65.14225 35.91211 -1 -1 0 + 1440 453 14 0.417 52.93741 66.64611 35.86748 -1 -1 0 + 1441 454 13 -0.834 50.70912 51.42252 40.30021 0 0 -1 + 1442 454 14 0.417 50.97387 50.70177 39.72866 0 0 -1 + 1443 454 14 0.417 50.17774 51.98938 39.74116 0 0 -1 + 1444 455 13 -0.834 39.22290 45.94023 39.69239 2 1 -1 + 1445 455 14 0.417 39.63836 46.66722 39.22859 2 1 -1 + 1446 455 14 0.417 38.97218 45.32685 39.00164 2 1 -1 + 1447 456 13 -0.834 43.73041 61.86387 55.46954 2 0 0 + 1448 456 14 0.417 43.61274 62.32163 56.30192 2 0 0 + 1449 456 14 0.417 43.90401 62.55964 54.83549 2 0 0 + 1450 457 13 -0.834 61.51877 56.42039 33.84869 0 0 1 + 1451 457 14 0.417 62.17805 55.74211 33.70200 0 0 1 + 1452 457 14 0.417 62.00943 57.15723 34.21276 0 0 1 + 1453 458 13 -0.834 51.72050 63.63199 42.34406 1 0 1 + 1454 458 14 0.417 51.24482 64.43296 42.56407 1 0 1 + 1455 458 14 0.417 52.62118 63.92057 42.19669 1 0 1 + 1456 459 13 -0.834 54.73666 56.51839 51.73687 0 0 -1 + 1457 459 14 0.417 54.77503 56.56844 52.69200 0 0 -1 + 1458 459 14 0.417 54.91702 57.41111 51.44234 0 0 -1 + 1459 460 13 -0.834 50.97984 54.35591 33.27919 0 1 0 + 1460 460 14 0.417 50.47200 55.12727 33.02747 0 1 0 + 1461 460 14 0.417 50.36917 53.82187 33.78725 0 1 0 + 1462 461 13 -0.834 44.82656 54.45280 36.09973 1 0 2 + 1463 461 14 0.417 45.75766 54.23599 36.14740 1 0 2 + 1464 461 14 0.417 44.76968 55.11700 35.41283 1 0 2 + 1465 462 13 -0.834 58.05791 56.64716 55.29041 1 1 0 + 1466 462 14 0.417 58.98499 56.81997 55.45441 1 1 0 + 1467 462 14 0.417 57.82639 55.96338 55.91897 1 1 0 + 1468 463 13 -0.834 55.95112 61.02029 30.79757 1 0 1 + 1469 463 14 0.417 55.28483 61.63344 30.48711 1 0 1 + 1470 463 14 0.417 55.45357 60.27206 31.12748 1 0 1 + 1471 464 13 -0.834 54.80996 46.88659 45.41700 -1 0 0 + 1472 464 14 0.417 55.42348 46.16300 45.28950 -1 0 0 + 1473 464 14 0.417 54.08129 46.68997 44.82826 -1 0 0 + 1474 465 13 -0.834 60.19361 64.43268 31.92053 0 -1 2 + 1475 465 14 0.417 60.05792 63.85315 32.67017 0 -1 2 + 1476 465 14 0.417 60.47170 63.84993 31.21392 0 -1 2 + 1477 466 13 -0.834 45.55496 65.56032 30.88251 0 -1 1 + 1478 466 14 0.417 45.97644 64.70102 30.89691 0 -1 1 + 1479 466 14 0.417 45.82502 65.97384 31.70248 0 -1 1 + 1480 467 13 -0.834 52.92714 44.06759 29.88429 0 1 0 + 1481 467 14 0.417 52.39641 43.38446 30.29405 0 1 0 + 1482 467 14 0.417 53.79372 43.96686 30.27818 0 1 0 + 1483 468 13 -0.834 40.71534 55.31247 44.93070 1 0 0 + 1484 468 14 0.417 39.81994 55.07165 45.16841 1 0 0 + 1485 468 14 0.417 41.16802 54.47609 44.82218 1 0 0 + 1486 469 13 -0.834 64.04777 59.80626 42.91634 0 -1 -1 + 1487 469 14 0.417 37.09051 60.51146 43.41377 1 -1 -1 + 1488 469 14 0.417 37.01609 59.00291 43.31068 1 -1 -1 + 1489 470 13 -0.834 57.05030 49.72625 41.88829 -1 1 1 + 1490 470 14 0.417 56.75150 50.53290 42.30818 -1 1 1 + 1491 470 14 0.417 57.52176 50.02159 41.10935 -1 1 1 + 1492 471 13 -0.834 62.59447 67.67898 41.14714 -2 -2 1 + 1493 471 14 0.417 63.45155 67.57764 41.56112 -2 -2 1 + 1494 471 14 0.417 61.96974 67.40478 41.81854 -2 -2 1 + 1495 472 13 -0.834 62.98029 58.34420 35.34278 0 0 1 + 1496 472 14 0.417 62.45371 58.26151 36.13783 0 0 1 + 1497 472 14 0.417 63.83636 58.64077 35.65169 0 0 1 + 1498 473 13 -0.834 63.44584 56.74146 44.14484 0 1 -2 + 1499 473 14 0.417 64.13590 56.53036 44.77371 0 1 -2 + 1500 473 14 0.417 62.70665 57.02149 44.68470 0 1 -2 + 1501 474 13 -0.834 44.05905 56.56929 51.60681 1 0 -1 + 1502 474 14 0.417 43.57850 56.15764 52.32504 1 0 -1 + 1503 474 14 0.417 43.90344 55.99747 50.85512 1 0 -1 + 1504 475 13 -0.834 37.49588 59.31379 39.05252 0 0 0 + 1505 475 14 0.417 37.07904 58.45297 39.09112 0 0 0 + 1506 475 14 0.417 37.58867 59.49374 38.11696 0 0 0 + 1507 476 13 -0.834 54.75747 41.52122 56.48609 -1 1 0 + 1508 476 14 0.417 54.79987 42.39714 56.86981 -1 1 0 + 1509 476 14 0.417 54.80582 41.67034 55.54179 -1 1 0 + 1510 477 13 -0.834 42.91665 58.39379 47.91495 1 0 0 + 1511 477 14 0.417 43.70923 58.91951 47.80683 1 0 0 + 1512 477 14 0.417 42.28811 58.98861 48.32409 1 0 0 + 1513 478 13 -0.834 60.63731 64.78822 56.03697 -2 1 -1 + 1514 478 14 0.417 60.86485 63.91302 56.35082 -2 1 -1 + 1515 478 14 0.417 60.50973 65.30321 56.83369 -2 1 -1 + 1516 479 13 -0.834 52.85180 54.69512 43.09842 0 0 1 + 1517 479 14 0.417 52.31485 55.13373 42.43846 0 0 1 + 1518 479 14 0.417 53.08000 53.85428 42.70200 0 0 1 + 1519 480 13 -0.834 51.49497 54.97356 38.95012 -2 1 -1 + 1520 480 14 0.417 50.77717 54.34090 38.97811 -2 1 -1 + 1521 480 14 0.417 51.51597 55.35169 39.82923 -2 1 -1 + 1522 481 13 -0.834 40.46924 62.02458 56.36341 1 0 -1 + 1523 481 14 0.417 40.45814 61.65439 55.48076 1 0 -1 + 1524 481 14 0.417 40.81799 62.90856 56.24853 1 0 -1 + 1525 482 13 -0.834 52.26692 56.29032 45.24820 0 2 1 + 1526 482 14 0.417 51.65227 56.79794 44.71834 0 2 1 + 1527 482 14 0.417 52.43092 55.49973 44.73408 0 2 1 + 1528 483 13 -0.834 53.46372 44.63556 52.39623 -1 1 1 + 1529 483 14 0.417 53.51664 45.03502 53.26448 -1 1 1 + 1530 483 14 0.417 54.08491 45.13343 51.86474 -1 1 1 + 1531 484 13 -0.834 42.90202 49.87822 40.32919 0 2 1 + 1532 484 14 0.417 42.40392 49.63281 41.10889 0 2 1 + 1533 484 14 0.417 42.31302 50.45172 39.83885 0 2 1 + 1534 485 13 -0.834 43.07357 64.57931 39.44006 2 1 1 + 1535 485 14 0.417 42.79300 64.80186 38.55237 2 1 1 + 1536 485 14 0.417 43.26869 65.42268 39.84860 2 1 1 + 1537 486 13 -0.834 38.86691 42.35197 55.12826 1 1 -1 + 1538 486 14 0.417 38.06621 42.87541 55.16185 1 1 -1 + 1539 486 14 0.417 39.52681 42.89488 55.55954 1 1 -1 + 1540 487 13 -0.834 59.15412 47.19863 55.46904 0 -1 0 + 1541 487 14 0.417 59.83963 46.99833 56.10636 0 -1 0 + 1542 487 14 0.417 58.74433 46.35364 55.28381 0 -1 0 + 1543 488 13 -0.834 52.12071 45.94110 44.23903 1 1 0 + 1544 488 14 0.417 51.89927 45.05144 44.51416 1 1 0 + 1545 488 14 0.417 52.26697 45.87115 43.29566 1 1 0 + 1546 489 13 -0.834 41.73140 52.23741 31.27732 0 0 1 + 1547 489 14 0.417 40.84403 52.55314 31.44796 0 0 1 + 1548 489 14 0.417 41.81503 52.26011 30.32405 0 0 1 + 1549 490 13 -0.834 38.46034 66.01701 52.27886 1 0 -1 + 1550 490 14 0.417 39.39276 66.02392 52.49517 1 0 -1 + 1551 490 14 0.417 38.11246 66.80769 52.69121 1 0 -1 + 1552 491 13 -0.834 42.13838 67.12262 54.88509 0 0 -3 + 1553 491 14 0.417 42.22460 67.38235 53.96784 0 0 -3 + 1554 491 14 0.417 42.96673 67.38388 55.28736 0 0 -3 + 1555 492 13 -0.834 37.89607 66.86351 46.16867 -1 -1 -1 + 1556 492 14 0.417 38.03129 66.98073 47.10899 -1 -1 -1 + 1557 492 14 0.417 38.75367 66.60168 45.83369 -1 -1 -1 + 1558 493 13 -0.834 40.37538 58.21424 30.88318 0 -1 0 + 1559 493 14 0.417 41.23010 58.63566 30.79307 0 -1 0 + 1560 493 14 0.417 40.45502 57.40101 30.38463 0 -1 0 + 1561 494 13 -0.834 54.56531 48.85249 32.17940 1 -2 2 + 1562 494 14 0.417 54.90082 48.98086 31.29216 1 -2 2 + 1563 494 14 0.417 54.03604 49.63141 32.35086 1 -2 2 + 1564 495 13 -0.834 63.56488 49.70113 37.88594 0 -1 1 + 1565 495 14 0.417 63.93261 49.40780 37.05228 0 -1 1 + 1566 495 14 0.417 63.98151 50.54765 38.04739 0 -1 1 + 1567 496 13 -0.834 39.26126 54.76920 54.71493 2 -1 2 + 1568 496 14 0.417 38.75402 55.21237 54.03483 2 -1 2 + 1569 496 14 0.417 38.67139 54.73109 55.46781 2 -1 2 + 1570 497 13 -0.834 42.78607 47.20625 49.30057 2 -1 0 + 1571 497 14 0.417 42.93670 46.34815 48.90404 2 -1 0 + 1572 497 14 0.417 43.53800 47.33917 49.87780 2 -1 0 + 1573 498 13 -0.834 59.99490 55.30114 50.55687 0 1 -1 + 1574 498 14 0.417 60.84158 55.66821 50.81111 0 1 -1 + 1575 498 14 0.417 59.38335 56.03363 50.63237 0 1 -1 + 1576 499 13 -0.834 57.95276 49.30660 54.37087 1 -1 -1 + 1577 499 14 0.417 57.34184 49.29544 55.10769 1 -1 -1 + 1578 499 14 0.417 58.55272 48.58151 54.54557 1 -1 -1 + 1579 500 13 -0.834 43.43041 64.04345 57.10111 1 -1 -1 + 1580 500 14 0.417 43.03742 64.07155 30.60210 1 -1 0 + 1581 500 14 0.417 44.26016 64.51104 29.82515 1 -1 0 + 1582 501 13 -0.834 40.71066 57.82778 50.85579 1 -1 -1 + 1583 501 14 0.417 41.04411 57.83612 51.75299 1 -1 -1 + 1584 501 14 0.417 40.96886 58.67633 50.49590 1 -1 -1 + 1585 502 13 -0.834 61.21331 60.53661 39.63578 1 -1 0 + 1586 502 14 0.417 61.87151 61.23113 39.61011 1 -1 0 + 1587 502 14 0.417 61.32085 60.13583 40.49837 1 -1 0 + 1588 503 13 -0.834 43.54081 65.33296 49.47114 1 -1 -1 + 1589 503 14 0.417 42.67637 65.41138 49.06762 1 -1 -1 + 1590 503 14 0.417 43.36562 64.99829 50.35065 1 -1 -1 + 1591 504 13 -0.834 50.27329 53.06087 30.87109 -1 0 1 + 1592 504 14 0.417 50.38769 53.42204 29.99204 -1 0 1 + 1593 504 14 0.417 50.86354 53.57620 31.42092 -1 0 1 + 1594 505 13 -0.834 40.29157 66.01889 32.67757 0 -1 0 + 1595 505 14 0.417 40.18198 66.27998 31.76320 0 -1 0 + 1596 505 14 0.417 39.39873 65.90460 33.00317 0 -1 0 + 1597 506 13 -0.834 48.15372 67.97019 44.25255 1 -1 1 + 1598 506 14 0.417 47.34263 67.52534 44.49854 1 -1 1 + 1599 506 14 0.417 47.87159 41.31478 43.68328 1 0 1 + 1600 507 13 -0.834 53.38019 63.98437 38.13827 0 0 -1 + 1601 507 14 0.417 54.19463 63.69976 37.72362 0 0 -1 + 1602 507 14 0.417 53.59582 64.82739 38.53711 0 0 -1 + 1603 508 13 -0.834 40.87597 58.12305 53.50808 0 0 0 + 1604 508 14 0.417 40.17916 58.26636 54.14852 0 0 0 + 1605 508 14 0.417 41.66044 58.48234 53.92256 0 0 0 + 1606 509 13 -0.834 38.19887 52.28056 36.30714 2 0 -1 + 1607 509 14 0.417 38.20463 53.19038 36.60452 2 0 -1 + 1608 509 14 0.417 38.09924 52.33929 35.35695 2 0 -1 + 1609 510 13 -0.834 49.63883 57.32410 43.72359 0 -1 0 + 1610 510 14 0.417 49.72446 58.17232 43.28833 0 -1 0 + 1611 510 14 0.417 48.76183 57.33851 44.10688 0 -1 0 + 1612 511 13 -0.834 42.58791 59.61362 29.86455 1 0 0 + 1613 511 14 0.417 43.07246 58.91969 56.78877 1 0 -1 + 1614 511 14 0.417 42.69535 60.38141 56.67447 1 0 -1 + 1615 512 13 -0.834 50.76111 60.95449 46.98165 -1 0 -1 + 1616 512 14 0.417 50.90477 61.15450 47.90663 -1 0 -1 + 1617 512 14 0.417 50.20825 61.66875 46.66473 -1 0 -1 + 1618 513 13 -0.834 43.18406 55.61939 48.08539 1 0 0 + 1619 513 14 0.417 43.11229 56.55752 47.90932 1 0 0 + 1620 513 14 0.417 44.01330 55.36231 47.68228 1 0 0 + 1621 514 13 -0.834 54.67377 64.76817 41.62522 1 0 1 + 1622 514 14 0.417 54.39407 65.19031 40.81294 1 0 1 + 1623 514 14 0.417 55.29742 65.38243 42.01250 1 0 1 + 1624 515 13 -0.834 53.87383 68.12810 51.72031 0 -1 0 + 1625 515 14 0.417 53.06918 41.24938 51.55887 0 0 0 + 1626 515 14 0.417 53.74278 67.72971 52.58074 0 -1 0 + 1627 516 13 -0.834 38.24785 41.26767 33.50598 2 0 0 + 1628 516 14 0.417 38.16490 67.75301 33.15337 2 -1 0 + 1629 516 14 0.417 37.95757 41.83753 32.79377 2 0 0 + 1630 517 13 -0.834 47.35008 61.96125 42.94580 2 -2 0 + 1631 517 14 0.417 47.46077 62.90828 43.03015 2 -2 0 + 1632 517 14 0.417 47.09087 61.83022 42.03373 2 -2 0 + 1633 518 13 -0.834 40.55210 54.00820 41.89137 1 -1 1 + 1634 518 14 0.417 39.80099 54.24986 41.34946 1 -1 1 + 1635 518 14 0.417 40.19429 53.40377 42.54166 1 -1 1 + 1636 519 13 -0.834 57.17705 64.40362 55.44286 1 -1 -1 + 1637 519 14 0.417 56.34510 64.78670 55.72097 1 -1 -1 + 1638 519 14 0.417 57.64987 65.12814 55.03330 1 -1 -1 + 1639 520 13 -0.834 41.86955 59.84132 42.65268 0 -1 1 + 1640 520 14 0.417 41.72011 59.11980 43.26367 0 -1 1 + 1641 520 14 0.417 42.24995 60.53605 43.19017 0 -1 1 + 1642 521 13 -0.834 61.62566 57.26645 46.18447 0 -1 -1 + 1643 521 14 0.417 60.68119 57.41642 46.22577 0 -1 -1 + 1644 521 14 0.417 61.98987 57.84356 46.85569 0 -1 -1 + 1645 522 13 -0.834 46.82701 65.68647 41.03579 0 0 0 + 1646 522 14 0.417 46.01385 65.85266 41.51264 0 0 0 + 1647 522 14 0.417 47.44009 65.38297 41.70531 0 0 0 + 1648 523 13 -0.834 54.12960 45.94549 32.81485 0 0 1 + 1649 523 14 0.417 53.25962 45.65636 32.53955 0 0 1 + 1650 523 14 0.417 54.18942 46.85072 32.50950 0 0 1 + 1651 524 13 -0.834 43.71268 59.97805 32.34985 1 1 0 + 1652 524 14 0.417 43.46300 59.27568 32.95033 1 1 0 + 1653 524 14 0.417 42.94131 60.10757 31.79808 1 1 0 + 1654 525 13 -0.834 50.10604 48.47250 49.62054 1 0 -2 + 1655 525 14 0.417 50.96037 48.77303 49.31064 1 0 -2 + 1656 525 14 0.417 50.19320 48.44287 50.57331 1 0 -2 + 1657 526 13 -0.834 54.68660 60.38920 43.62499 0 0 0 + 1658 526 14 0.417 54.62862 59.85089 42.83561 0 0 0 + 1659 526 14 0.417 53.78667 60.44045 43.94712 0 0 0 + 1660 527 13 -0.834 56.35115 44.75736 40.87552 0 -1 -1 + 1661 527 14 0.417 56.99705 44.99197 41.54186 0 -1 -1 + 1662 527 14 0.417 55.55387 44.56808 41.37024 0 -1 -1 + 1663 528 13 -0.834 48.77009 62.36934 40.44473 0 -1 0 + 1664 528 14 0.417 49.30266 62.60520 41.20432 0 -1 0 + 1665 528 14 0.417 49.04689 62.97756 39.75939 0 -1 0 + 1666 529 13 -0.834 45.88757 58.55209 41.94547 0 1 0 + 1667 529 14 0.417 46.76719 58.27665 42.20365 0 1 0 + 1668 529 14 0.417 45.35604 57.75963 42.02128 0 1 0 + 1669 530 13 -0.834 39.44116 52.22097 43.65725 1 0 2 + 1670 530 14 0.417 39.30570 52.06689 44.59221 1 0 2 + 1671 530 14 0.417 38.61744 52.60378 43.35530 1 0 2 + 1672 531 13 -0.834 43.95976 66.73852 41.23250 1 0 1 + 1673 531 14 0.417 44.64454 67.13772 40.69588 1 0 1 + 1674 531 14 0.417 43.40678 67.47232 41.50081 1 0 1 + 1675 532 13 -0.834 62.99634 65.50241 54.70446 0 -1 -1 + 1676 532 14 0.417 63.58398 64.98613 55.25617 0 -1 -1 + 1677 532 14 0.417 62.12519 65.14960 54.88585 0 -1 -1 + 1678 533 13 -0.834 62.92898 53.27582 44.77167 0 0 0 + 1679 533 14 0.417 62.08998 53.60880 45.09018 0 0 0 + 1680 533 14 0.417 62.85751 52.32504 44.85618 0 0 0 + 1681 534 13 -0.834 63.31201 43.08081 48.29805 -1 0 -1 + 1682 534 14 0.417 63.01276 42.23705 47.95930 -1 0 -1 + 1683 534 14 0.417 63.67142 43.53221 47.53431 -1 0 -1 + 1684 535 13 -0.834 47.11867 63.34781 55.06249 0 0 -1 + 1685 535 14 0.417 47.19267 64.30022 55.00160 0 0 -1 + 1686 535 14 0.417 46.22495 63.15783 54.77716 0 0 -1 + 1687 536 13 -0.834 60.37216 67.91341 52.27568 -1 0 0 + 1688 536 14 0.417 61.05051 68.14950 52.90839 -1 0 0 + 1689 536 14 0.417 60.81546 67.93922 51.42771 -1 0 0 + 1690 537 13 -0.834 60.04315 43.26291 35.25445 -1 1 1 + 1691 537 14 0.417 60.42501 44.05815 35.62593 -1 1 1 + 1692 537 14 0.417 60.79709 42.72574 35.01102 -1 1 1 + 1693 538 13 -0.834 53.03851 55.52589 47.75769 0 0 -1 + 1694 538 14 0.417 53.93635 55.46537 47.43136 0 0 -1 + 1695 538 14 0.417 52.51527 55.73342 46.98347 0 0 -1 + 1696 539 13 -0.834 37.91895 50.43697 56.37325 0 0 0 + 1697 539 14 0.417 37.51622 49.56884 56.35299 0 0 0 + 1698 539 14 0.417 38.37591 50.50915 55.53527 0 0 0 + 1699 540 13 -0.834 50.50006 63.56852 38.27177 1 1 0 + 1700 540 14 0.417 50.22462 63.18436 37.43944 1 1 0 + 1701 540 14 0.417 51.44083 63.71275 38.16986 1 1 0 + 1702 541 13 -0.834 49.44600 43.95446 42.01861 0 0 1 + 1703 541 14 0.417 49.59639 44.80378 41.60354 0 0 1 + 1704 541 14 0.417 49.73882 44.07372 42.92211 0 0 1 + 1705 542 13 -0.834 50.98365 47.23031 39.51901 1 0 1 + 1706 542 14 0.417 51.18743 48.09631 39.16579 1 0 1 + 1707 542 14 0.417 50.03928 47.13635 39.39410 1 0 1 + 1708 543 13 -0.834 45.54625 60.20130 44.30493 0 0 2 + 1709 543 14 0.417 46.27140 60.62480 43.84553 0 0 2 + 1710 543 14 0.417 45.09838 59.69256 43.62904 0 0 2 + 1711 544 13 -0.834 60.48207 53.69772 48.42686 0 0 1 + 1712 544 14 0.417 60.03677 54.31581 49.00644 0 0 1 + 1713 544 14 0.417 59.89364 52.94407 48.38216 0 0 1 + 1714 545 13 -0.834 63.04952 45.83903 48.97963 -1 1 1 + 1715 545 14 0.417 63.88202 45.63831 49.40729 -1 1 1 + 1716 545 14 0.417 62.76408 45.00498 48.60667 -1 1 1 + 1717 546 13 -0.834 40.62890 44.95273 52.60003 2 -1 -2 + 1718 546 14 0.417 41.29110 45.55853 52.26721 2 -1 -2 + 1719 546 14 0.417 40.33885 45.34348 53.42431 2 -1 -2 + 1720 547 13 -0.834 39.91743 46.12102 55.72693 -1 1 -1 + 1721 547 14 0.417 40.70381 45.68274 56.05216 -1 1 -1 + 1722 547 14 0.417 39.19323 45.65943 56.14967 -1 1 -1 + 1723 548 13 -0.834 42.06829 45.07566 41.79962 0 0 -1 + 1724 548 14 0.417 41.61985 45.91039 41.93531 0 0 -1 + 1725 548 14 0.417 41.86481 44.56390 42.58253 0 0 -1 + 1726 549 13 -0.834 44.17588 49.40877 37.86902 1 1 0 + 1727 549 14 0.417 43.85185 49.35470 38.76808 1 1 0 + 1728 549 14 0.417 43.95346 48.56183 37.48242 1 1 0 + 1729 550 13 -0.834 52.64793 63.92130 45.68237 0 1 0 + 1730 550 14 0.417 52.63502 62.96908 45.58561 0 1 0 + 1731 550 14 0.417 52.43571 64.07178 46.60356 0 1 0 + 1732 551 13 -0.834 51.57615 43.64864 38.83377 1 1 0 + 1733 551 14 0.417 51.74260 43.03820 38.11551 1 1 0 + 1734 551 14 0.417 52.20192 44.35945 38.69449 1 1 0 + 1735 552 13 -0.834 62.02099 63.12241 47.73587 0 1 0 + 1736 552 14 0.417 61.17806 62.75352 47.99973 0 1 0 + 1737 552 14 0.417 62.48263 62.39363 47.32116 0 1 0 + 1738 553 13 -0.834 38.41497 51.40373 50.93034 1 1 0 + 1739 553 14 0.417 37.60807 51.12879 50.49494 1 1 0 + 1740 553 14 0.417 38.99796 51.65996 50.21571 1 1 0 + 1741 554 13 -0.834 51.96339 44.25313 49.02477 0 0 0 + 1742 554 14 0.417 52.81680 44.60151 49.28274 0 0 0 + 1743 554 14 0.417 52.16570 43.57682 48.37831 0 0 0 + 1744 555 13 -0.834 43.58422 51.42052 49.88959 0 1 -1 + 1745 555 14 0.417 42.74054 51.00549 50.06897 0 1 -1 + 1746 555 14 0.417 44.20160 50.69175 49.82657 0 1 -1 + 1747 556 13 -0.834 52.39836 53.43568 49.29165 1 0 -1 + 1748 556 14 0.417 51.88756 52.90169 48.68323 1 0 -1 + 1749 556 14 0.417 52.64451 54.20889 48.78391 1 0 -1 + 1750 557 13 -0.834 57.76885 46.61656 49.32842 0 1 0 + 1751 557 14 0.417 57.83718 46.26991 48.43879 0 1 0 + 1752 557 14 0.417 58.65246 46.53329 49.68694 0 1 0 + 1753 558 13 -0.834 59.20868 56.75211 36.79427 0 1 -1 + 1754 558 14 0.417 59.74268 56.20033 36.22276 0 1 -1 + 1755 558 14 0.417 58.75094 56.13459 37.36470 0 1 -1 + 1756 559 13 -0.834 51.74055 42.45875 36.24184 0 1 1 + 1757 559 14 0.417 51.04879 41.79745 36.22260 0 1 1 + 1758 559 14 0.417 52.52794 41.99055 35.96429 0 1 1 + 1759 560 13 -0.834 56.37631 67.32150 33.05439 -1 0 1 + 1760 560 14 0.417 56.52797 66.39716 33.25152 -1 0 1 + 1761 560 14 0.417 56.88845 67.79399 33.71068 -1 0 1 + 1762 561 13 -0.834 54.61713 62.99597 56.69158 0 1 -1 + 1763 561 14 0.417 54.59393 63.94258 56.83172 0 1 -1 + 1764 561 14 0.417 54.12883 62.86158 55.87934 0 1 -1 + 1765 562 13 -0.834 59.12420 67.78462 34.49420 0 -1 1 + 1766 562 14 0.417 59.61921 67.94665 33.69111 0 -1 1 + 1767 562 14 0.417 59.22686 41.21594 35.00547 0 0 1 + 1768 563 13 -0.834 63.35827 53.14027 38.43168 -1 0 0 + 1769 563 14 0.417 62.48186 53.05933 38.05538 -1 0 0 + 1770 563 14 0.417 63.87715 53.55740 37.74392 -1 0 0 + 1771 564 13 -0.834 50.05518 64.80335 44.94078 1 0 -2 + 1772 564 14 0.417 50.16173 65.71408 44.66608 1 0 -2 + 1773 564 14 0.417 50.94818 64.48993 45.08424 1 0 -2 + 1774 565 13 -0.834 61.91076 61.67486 44.00650 0 -3 0 + 1775 565 14 0.417 61.40514 60.86646 44.09077 0 -3 0 + 1776 565 14 0.417 62.58390 61.60857 44.68380 0 -3 0 + 1777 566 13 -0.834 61.53884 41.33016 50.02212 -1 0 -1 + 1778 566 14 0.417 61.75835 68.35836 49.15591 -1 -1 -1 + 1779 566 14 0.417 62.19075 42.01255 50.18215 -1 0 -1 + 1780 567 13 -0.834 54.81641 49.94673 49.66324 0 -1 -1 + 1781 567 14 0.417 54.81533 50.72359 50.22249 0 -1 -1 + 1782 567 14 0.417 53.94410 49.93341 49.26932 0 -1 -1 + 1783 568 13 -0.834 60.68933 64.00249 53.56679 -1 -1 -1 + 1784 568 14 0.417 60.72666 63.10922 53.90872 -1 -1 -1 + 1785 568 14 0.417 60.37485 64.52808 54.30238 -1 -1 -1 + 1786 569 13 -0.834 55.51605 42.60469 53.96890 0 -1 0 + 1787 569 14 0.417 55.82084 42.66633 53.06360 0 -1 0 + 1788 569 14 0.417 54.99565 43.39708 54.10137 0 -1 0 + 1789 570 13 -0.834 43.79008 68.23755 52.31171 2 -1 1 + 1790 570 14 0.417 43.47705 41.06627 51.42954 2 0 1 + 1791 570 14 0.417 44.72624 68.07073 52.20206 2 -1 1 + 1792 571 13 -0.834 40.19615 44.94623 32.57234 0 0 1 + 1793 571 14 0.417 40.90940 45.49825 32.25173 0 0 1 + 1794 571 14 0.417 40.42796 44.75889 33.48196 0 0 1 + 1795 572 13 -0.834 51.93921 56.60019 36.60262 -1 0 1 + 1796 572 14 0.417 51.78399 56.35099 37.51368 -1 0 1 + 1797 572 14 0.417 51.06469 56.74242 36.24039 -1 0 1 + 1798 573 13 -0.834 61.66916 50.48338 53.29865 -1 0 -2 + 1799 573 14 0.417 61.63036 50.41309 54.25248 -1 0 -2 + 1800 573 14 0.417 60.77283 50.69388 53.03687 -1 0 -2 + 1801 574 13 -0.834 51.74160 54.87485 56.16871 0 -1 0 + 1802 574 14 0.417 50.91429 55.26706 56.44795 0 -1 0 + 1803 574 14 0.417 51.91124 55.25931 55.30869 0 -1 0 + 1804 575 13 -0.834 40.85698 68.18248 30.13155 1 -1 0 + 1805 575 14 0.417 41.30492 67.87357 56.71541 1 -1 -1 + 1806 575 14 0.417 41.55175 41.19073 30.66952 1 0 0 + 1807 576 13 -0.834 50.89809 58.89690 54.50288 -1 0 0 + 1808 576 14 0.417 50.06229 58.64352 54.89466 -1 0 0 + 1809 576 14 0.417 51.37024 59.33797 55.20914 -1 0 0 + 1810 577 13 -0.834 58.37524 67.95427 49.91095 0 1 0 + 1811 577 14 0.417 57.83519 41.29391 50.25604 0 2 0 + 1812 577 14 0.417 59.26942 68.19076 50.15744 0 1 0 + 1813 578 13 -0.834 51.40785 46.48357 30.68744 1 0 1 + 1814 578 14 0.417 52.21871 45.99275 30.55389 1 0 1 + 1815 578 14 0.417 50.76683 45.82189 30.94725 1 0 1 + 1816 579 13 -0.834 57.04032 43.52295 36.91237 0 0 0 + 1817 579 14 0.417 56.97310 44.35969 36.45239 0 0 0 + 1818 579 14 0.417 57.91622 43.53095 37.29833 0 0 0 + 1819 580 13 -0.834 48.05479 47.92450 33.11226 0 0 1 + 1820 580 14 0.417 47.68291 48.79527 32.97186 0 0 1 + 1821 580 14 0.417 48.92592 48.09081 33.47242 0 0 1 + 1822 581 13 -0.834 52.31083 59.89064 56.95945 1 -2 -1 + 1823 581 14 0.417 51.77727 60.32576 30.25310 1 -2 0 + 1824 581 14 0.417 52.84806 60.59010 56.58744 1 -2 -1 + 1825 582 13 -0.834 49.28190 53.14534 38.62511 0 0 1 + 1826 582 14 0.417 48.56647 53.70668 38.92395 0 0 1 + 1827 582 14 0.417 48.86634 52.52585 38.02526 0 0 1 + 1828 583 13 -0.834 48.15214 51.90611 34.43290 2 0 0 + 1829 583 14 0.417 48.57405 51.97443 33.57642 2 0 0 + 1830 583 14 0.417 47.22654 51.76503 34.23389 2 0 0 + 1831 584 13 -0.834 61.27546 54.09168 30.34511 0 1 1 + 1832 584 14 0.417 61.26898 53.84689 31.27046 0 1 1 + 1833 584 14 0.417 62.02427 53.62196 29.97785 0 1 1 + 1834 585 13 -0.834 47.15916 50.47662 53.78471 0 -1 0 + 1835 585 14 0.417 47.32648 50.93912 54.60588 0 -1 0 + 1836 585 14 0.417 46.29671 50.78520 53.50690 0 -1 0 + 1837 586 13 -0.834 58.58091 63.09753 49.23949 0 -1 1 + 1838 586 14 0.417 59.43607 63.50227 49.38484 0 -1 1 + 1839 586 14 0.417 58.76326 62.34843 48.67219 0 -1 1 + 1840 587 13 -0.834 55.82082 49.65937 30.11648 0 1 1 + 1841 587 14 0.417 56.52757 49.92139 30.70647 0 1 1 + 1842 587 14 0.417 55.68213 50.42183 56.92602 0 1 0 + 1843 588 13 -0.834 63.79581 52.53565 53.17702 0 -2 1 + 1844 588 14 0.417 36.89869 52.41207 52.35479 1 -2 1 + 1845 588 14 0.417 63.12882 51.84908 53.17487 0 -2 1 + 1846 589 13 -0.834 58.30874 56.36537 43.52715 0 0 3 + 1847 589 14 0.417 58.58025 56.80205 44.33452 0 0 3 + 1848 589 14 0.417 57.40732 56.09029 43.69457 0 0 3 + 1849 590 13 -0.834 38.42652 61.06904 33.48425 0 -2 -1 + 1850 590 14 0.417 39.08604 61.75763 33.56856 0 -2 -1 + 1851 590 14 0.417 38.90648 60.25628 33.64334 0 -2 -1 + 1852 591 13 -0.834 46.61439 51.58566 41.81121 1 -1 0 + 1853 591 14 0.417 46.97646 51.37067 42.67082 1 -1 0 + 1854 591 14 0.417 46.41089 50.73724 41.41750 1 -1 0 + 1855 592 13 -0.834 60.01555 43.31814 42.71405 1 0 1 + 1856 592 14 0.417 60.52150 42.79903 43.33920 1 0 1 + 1857 592 14 0.417 59.90024 42.74003 41.95989 1 0 1 + 1858 593 13 -0.834 44.88246 59.34852 51.75271 1 0 -1 + 1859 593 14 0.417 45.75263 59.37400 52.15069 1 0 -1 + 1860 593 14 0.417 44.67274 58.41644 51.69374 1 0 -1 + 1861 594 13 -0.834 58.22051 53.10280 51.15729 0 -1 0 + 1862 594 14 0.417 58.53381 52.60654 51.91346 0 -1 0 + 1863 594 14 0.417 58.92607 53.72100 50.96688 0 -1 0 + 1864 595 13 -0.834 52.85332 67.67658 42.66705 0 -1 0 + 1865 595 14 0.417 53.29462 67.40699 41.86157 0 -1 0 + 1866 595 14 0.417 53.28090 67.16860 43.35652 0 -1 0 + 1867 596 13 -0.834 60.42773 53.38162 37.56585 0 0 1 + 1868 596 14 0.417 60.55482 53.97513 38.30601 0 0 1 + 1869 596 14 0.417 59.53313 53.05721 37.66924 0 0 1 + 1870 597 13 -0.834 56.52028 65.87791 50.38146 0 0 1 + 1871 597 14 0.417 56.94337 66.73645 50.39389 0 0 1 + 1872 597 14 0.417 57.02985 65.35034 50.99649 0 0 1 + 1873 598 13 -0.834 54.80064 62.49993 33.68680 1 0 1 + 1874 598 14 0.417 55.58425 61.96146 33.79744 1 0 1 + 1875 598 14 0.417 55.10591 63.27334 33.21259 1 0 1 + 1876 599 13 -0.834 44.11783 61.90196 34.52932 1 1 -1 + 1877 599 14 0.417 44.98641 61.86349 34.92975 1 1 -1 + 1878 599 14 0.417 44.21923 61.44892 33.69223 1 1 -1 + 1879 600 13 -0.834 47.64060 51.80694 44.33090 -1 -1 0 + 1880 600 14 0.417 48.33775 51.24158 44.66345 -1 -1 0 + 1881 600 14 0.417 47.96940 52.69619 44.46262 -1 -1 0 + 1882 601 13 -0.834 56.93644 64.17109 32.73010 0 -2 0 + 1883 601 14 0.417 57.35484 63.79547 31.95543 0 -2 0 + 1884 601 14 0.417 57.46604 63.85913 33.46389 0 -2 0 + 1885 602 13 -0.834 40.19928 60.95715 53.68963 1 0 -1 + 1886 602 14 0.417 41.08822 60.76154 53.39341 1 0 -1 + 1887 602 14 0.417 39.80336 61.43545 52.96114 1 0 -1 + 1888 603 13 -0.834 56.02366 41.52320 41.07986 0 1 0 + 1889 603 14 0.417 55.42766 41.48842 40.33165 0 1 0 + 1890 603 14 0.417 55.93467 42.41489 41.41631 0 1 0 + 1891 604 13 -0.834 52.35261 67.43639 29.83633 -1 0 0 + 1892 604 14 0.417 53.08703 67.77971 56.69878 -1 0 -1 + 1893 604 14 0.417 51.97673 68.20568 30.26426 -1 0 0 + 1894 605 13 -0.834 51.14102 49.90060 37.90539 1 0 1 + 1895 605 14 0.417 51.41236 49.08269 37.48865 1 0 1 + 1896 605 14 0.417 50.32915 50.13989 37.45830 1 0 1 + 1897 606 13 -0.834 48.40753 57.18555 40.43062 0 0 0 + 1898 606 14 0.417 47.74030 57.19949 39.74445 0 0 0 + 1899 606 14 0.417 48.68357 58.09814 40.51553 0 0 0 + 1900 607 13 -0.834 38.43185 54.52830 40.23522 1 -2 1 + 1901 607 14 0.417 37.76601 54.24704 40.86274 1 -2 1 + 1902 607 14 0.417 37.95756 54.62565 39.40951 1 -2 1 + 1903 608 13 -0.834 52.97765 52.38562 41.57118 0 0 0 + 1904 608 14 0.417 52.16773 52.00413 41.23247 0 0 0 + 1905 608 14 0.417 53.62059 51.67937 41.50742 0 0 0 + 1906 609 13 -0.834 52.82978 61.35779 35.40768 0 1 -2 + 1907 609 14 0.417 53.63682 61.71145 35.03372 0 1 -2 + 1908 609 14 0.417 53.10766 60.57217 35.87865 0 1 -2 + 1909 610 13 -0.834 55.37636 43.79165 30.66790 0 0 0 + 1910 610 14 0.417 55.82860 43.25432 31.31827 0 0 0 + 1911 610 14 0.417 55.97415 44.52040 30.50110 0 0 0 + 1912 611 13 -0.834 37.90570 54.55715 45.50029 1 -2 -1 + 1913 611 14 0.417 37.12871 54.09851 45.18066 1 -2 -1 + 1914 611 14 0.417 38.24821 53.99402 46.19441 1 -2 -1 + 1915 612 13 -0.834 60.01324 50.96528 45.16358 1 1 0 + 1916 612 14 0.417 59.85669 51.13906 44.23539 1 1 0 + 1917 612 14 0.417 59.48415 50.19096 45.35532 1 1 0 + 1918 613 13 -0.834 38.84394 52.32942 30.93040 2 1 0 + 1919 613 14 0.417 38.51878 51.61086 30.38802 2 1 0 + 1920 613 14 0.417 38.41000 53.10831 30.58218 2 1 0 + 1921 614 13 -0.834 38.99542 61.66171 44.80992 1 0 2 + 1922 614 14 0.417 38.78488 60.74588 44.99207 1 0 2 + 1923 614 14 0.417 39.68427 61.62223 44.14648 1 0 2 + 1924 615 13 -0.834 57.70791 41.72720 55.47643 0 1 -2 + 1925 615 14 0.417 57.25844 41.36846 56.24163 0 1 -2 + 1926 615 14 0.417 57.00496 41.93588 54.86116 0 1 -2 + 1927 616 13 -0.834 58.08999 54.20225 35.53764 0 -1 0 + 1928 616 14 0.417 58.28608 53.46338 36.11372 0 -1 0 + 1929 616 14 0.417 57.15628 54.11553 35.34551 0 -1 0 + 1930 617 13 -0.834 53.05217 52.71850 54.07873 0 0 -1 + 1931 617 14 0.417 52.72353 53.45661 54.59199 0 0 -1 + 1932 617 14 0.417 52.69237 51.94509 54.51306 0 0 -1 + 1933 618 13 -0.834 49.92059 65.13477 35.13462 0 1 1 + 1934 618 14 0.417 50.86780 65.25694 35.19866 0 1 1 + 1935 618 14 0.417 49.79534 64.18846 35.20565 0 1 1 + 1936 619 13 -0.834 41.32410 62.50943 46.98364 1 -1 0 + 1937 619 14 0.417 40.63048 62.20572 46.39807 1 -1 0 + 1938 619 14 0.417 41.96090 61.79482 46.99226 1 -1 0 + 1939 620 13 -0.834 53.94559 67.39201 49.11860 0 0 0 + 1940 620 14 0.417 54.46912 66.60137 48.98810 0 0 0 + 1941 620 14 0.417 54.03461 67.58755 50.05138 0 0 0 + 1942 621 13 -0.834 62.73724 52.28919 56.37358 -2 0 0 + 1943 621 14 0.417 61.94239 51.76764 56.26203 -2 0 0 + 1944 621 14 0.417 63.44036 51.64333 56.44233 -2 0 0 + 1945 622 13 -0.834 40.38118 67.16060 39.18721 2 1 1 + 1946 622 14 0.417 41.33280 67.21360 39.09858 2 1 1 + 1947 622 14 0.417 40.05780 67.12713 38.28691 2 1 1 + 1948 623 13 -0.834 62.86517 42.00727 34.57539 -1 0 -1 + 1949 623 14 0.417 63.37239 42.81882 34.59420 -1 0 -1 + 1950 623 14 0.417 63.40838 41.39624 34.07760 -1 0 -1 + 1951 624 13 -0.834 45.52270 49.32960 34.34348 1 -1 1 + 1952 624 14 0.417 45.92383 49.19413 33.48500 1 -1 1 + 1953 624 14 0.417 45.24004 50.24407 34.33468 1 -1 1 + 1954 625 13 -0.834 61.03811 44.77668 56.49913 1 1 0 + 1955 625 14 0.417 60.72892 43.87199 56.45248 1 1 0 + 1956 625 14 0.417 60.93423 45.11202 55.60864 1 1 0 + 1957 626 13 -0.834 37.82896 51.65548 39.75440 0 1 1 + 1958 626 14 0.417 37.05574 52.05171 39.35268 0 1 1 + 1959 626 14 0.417 38.46628 52.36806 39.80236 0 1 1 + 1960 627 13 -0.834 57.87448 65.36125 35.56679 -1 -1 0 + 1961 627 14 0.417 58.45940 64.84211 35.01489 -1 -1 0 + 1962 627 14 0.417 58.01580 66.26448 35.28319 -1 -1 0 + 1963 628 13 -0.834 41.02352 64.37669 36.41484 0 0 1 + 1964 628 14 0.417 40.85775 63.95254 37.25679 0 0 1 + 1965 628 14 0.417 41.32667 63.66948 35.84545 0 0 1 + 1966 629 13 -0.834 48.62923 67.86173 41.06030 1 0 1 + 1967 629 14 0.417 48.15680 41.13844 41.58283 1 1 1 + 1968 629 14 0.417 47.94185 67.35115 40.63246 1 0 1 + 1969 630 13 -0.834 57.99331 55.69311 47.88478 1 2 0 + 1970 630 14 0.417 57.70999 55.65425 48.79826 1 2 0 + 1971 630 14 0.417 57.37284 55.13407 47.41709 1 2 0 + 1972 631 13 -0.834 48.67013 62.47689 45.75332 -1 -1 0 + 1973 631 14 0.417 49.00300 63.35392 45.56291 -1 -1 0 + 1974 631 14 0.417 48.17776 62.23177 44.96992 -1 -1 0 + 1975 632 13 -0.834 63.70160 54.96100 33.30497 -1 0 0 + 1976 632 14 0.417 64.21034 55.41699 32.63452 -1 0 0 + 1977 632 14 0.417 36.84822 54.18301 33.51151 0 0 0 + 1978 633 13 -0.834 61.71933 50.02843 40.52579 1 0 -1 + 1979 633 14 0.417 61.89605 49.89083 39.59516 1 0 -1 + 1980 633 14 0.417 61.20325 50.83404 40.55551 1 0 -1 + 1981 634 13 -0.834 49.51254 64.46386 53.41539 0 -1 -1 + 1982 634 14 0.417 48.93704 63.81647 53.00803 0 -1 -1 + 1983 634 14 0.417 49.96102 63.98252 54.11066 0 -1 -1 + 1984 635 13 -0.834 49.54405 44.64373 31.53722 1 2 1 + 1985 635 14 0.417 49.17415 44.45447 32.39954 1 2 1 + 1986 635 14 0.417 48.78808 44.87386 30.99705 1 2 1 + 1987 636 13 -0.834 55.54392 65.92737 37.61921 0 -1 -1 + 1988 636 14 0.417 56.11408 65.75233 38.36791 0 -1 -1 + 1989 636 14 0.417 56.12096 66.32174 36.96519 0 -1 -1 + 1990 637 13 -0.834 55.12269 51.83986 35.86341 1 0 1 + 1991 637 14 0.417 55.56426 51.26412 35.23910 1 0 1 + 1992 637 14 0.417 54.23658 51.93728 35.51477 1 0 1 + 1993 638 13 -0.834 55.63681 62.23759 37.50835 1 -1 0 + 1994 638 14 0.417 55.30920 61.35525 37.33403 1 -1 0 + 1995 638 14 0.417 56.23965 62.41667 36.78672 1 -1 0 + 1996 639 13 -0.834 39.91450 42.04260 35.59226 0 0 0 + 1997 639 14 0.417 39.72903 41.27571 36.13422 0 0 0 + 1998 639 14 0.417 39.23583 42.02933 34.91737 0 0 0 + 1999 640 13 -0.834 48.26433 59.84813 40.16126 0 1 0 + 2000 640 14 0.417 48.74870 60.67004 40.23938 0 1 0 + 2001 640 14 0.417 47.50743 60.06639 39.61748 0 1 0 + 2002 641 13 -0.834 57.35097 49.28414 48.37687 1 1 1 + 2003 641 14 0.417 57.35715 48.51028 48.94022 1 1 1 + 2004 641 14 0.417 56.55074 49.75049 48.61854 1 1 1 + +Velocities + + 1 -0.000671 -0.002823 0.003832 + 2 -0.001597 0.002405 -0.003777 + 3 0.005494 0.003807 -0.002300 + 4 -0.000077 0.004524 -0.000287 + 5 0.003116 -0.007135 -0.034325 + 6 -0.006676 0.004889 -0.001939 + 7 0.003499 -0.004774 0.000159 + 8 -0.003460 0.000694 0.000994 + 9 -0.000065 -0.001353 -0.002848 + 10 -0.001260 -0.002649 0.000699 + 11 -0.002820 -0.002457 -0.005671 + 12 0.005156 -0.005914 0.000984 + 13 -0.002342 -0.001592 0.004306 + 14 0.004397 -0.000231 0.003308 + 15 -0.003258 -0.000006 0.001838 + 16 -0.001637 -0.004429 0.003154 + 17 0.007073 -0.000472 -0.003331 + 18 -0.003380 -0.001390 0.005013 + 19 -0.011019 -0.005332 -0.010451 + 20 -0.005433 0.000844 0.004938 + 21 0.002988 0.000244 -0.009941 + 22 -0.003695 0.006546 -0.007678 + 23 0.009473 0.023276 0.019457 + 24 -0.010016 -0.024193 0.018017 + 25 0.004015 0.008726 -0.000397 + 26 -0.001741 -0.001861 0.007862 + 27 -0.009771 -0.011577 -0.005703 + 28 0.003573 0.006265 -0.005932 + 29 0.004789 0.001987 -0.004620 + 30 0.008858 -0.001064 -0.001455 + 31 -0.001403 0.000613 0.002330 + 32 -0.005808 -0.001620 0.000816 + 33 -0.004160 0.001188 -0.019638 + 34 -0.006899 0.006285 0.013256 + 35 0.000717 -0.000432 -0.006883 + 36 0.002110 0.002628 -0.004683 + 37 0.000765 -0.007298 0.000289 + 38 -0.000128 -0.002893 0.004065 + 39 -0.000411 -0.021741 0.010968 + 40 0.002858 0.000302 0.000042 + 41 0.014233 -0.004599 -0.004060 + 42 -0.001473 -0.003572 -0.006228 + 43 0.009129 -0.002755 0.001456 + 44 0.003931 0.000151 0.003472 + 45 0.001621 0.005391 -0.006087 + 46 -0.004269 -0.001973 0.002735 + 47 -0.006898 -0.001187 -0.003394 + 48 -0.008556 -0.000163 -0.001387 + 49 -0.000633 -0.001754 0.011460 + 50 0.004854 -0.002902 -0.005057 + 51 0.000678 0.003272 0.006218 + 52 0.006502 0.006365 -0.000215 + 53 0.005708 0.012368 0.002955 + 54 0.008627 -0.007839 0.003177 + 55 0.004394 0.000132 0.002346 + 56 -0.004641 0.009426 -0.005548 + 57 -0.004801 -0.024766 0.002851 + 58 -0.002703 0.001589 0.007521 + 59 0.023718 -0.006559 0.003743 + 60 -0.010013 -0.042894 -0.029745 + 61 0.016140 -0.000721 -0.001747 + 62 -0.004871 0.002439 0.001990 + 63 0.009632 0.007144 0.001203 + 64 -0.001150 0.001648 -0.003018 + 65 0.006658 -0.002268 0.006874 + 66 -0.002617 0.003321 0.002230 + 67 -0.000803 0.002802 0.003258 + 68 -0.000984 -0.001579 -0.001813 + 69 0.001316 0.000607 0.003431 + 70 -0.010901 0.000580 -0.004134 + 71 0.005370 -0.003909 0.013130 + 72 -0.012282 0.007114 -0.015100 + 73 0.004641 -0.007554 0.004302 + 74 0.017455 0.013344 0.004896 + 75 0.006200 0.026885 0.020665 + 76 -0.010372 0.000470 -0.005601 + 77 -0.003368 -0.004484 0.010962 + 78 0.012416 -0.004728 0.000719 + 79 -0.005789 0.005198 -0.007541 + 80 0.005480 -0.004049 0.003455 + 81 -0.004935 0.005839 -0.006405 + 82 0.001157 -0.011200 0.018491 + 83 -0.029013 -0.016935 0.021131 + 84 -0.020335 0.020972 0.006071 + 85 0.003304 0.007374 -0.005056 + 86 0.029227 0.010776 -0.013183 + 87 0.001651 0.006570 -0.002085 + 88 0.001533 -0.009172 0.007562 + 89 0.018153 -0.022223 0.015786 + 90 -0.010012 -0.004911 0.002561 + 91 0.000435 0.003941 -0.005468 + 92 0.003301 0.001183 -0.006999 + 93 0.006788 0.011331 -0.004427 + 94 0.001392 0.005663 -0.002907 + 95 -0.001849 -0.002229 -0.003422 + 96 -0.000820 0.005872 0.004561 + 97 -0.003264 0.002461 -0.009257 + 98 0.000160 0.016954 -0.015355 + 99 -0.006597 0.011858 0.000426 + 100 0.001816 -0.005854 -0.001317 + 101 -0.001936 -0.006103 0.018111 + 102 0.024621 -0.022735 -0.000704 + 103 -0.001102 0.008384 -0.003086 + 104 0.012559 0.004375 -0.000361 + 105 0.008377 0.014814 -0.037755 + 106 -0.002851 -0.000200 -0.000722 + 107 0.010701 0.006888 -0.007831 + 108 -0.008490 0.011514 0.009399 + 109 -0.001181 0.001853 0.002176 + 110 -0.018912 -0.023868 0.006706 + 111 -0.000415 -0.001525 0.005751 + 112 -0.001172 0.001329 -0.001270 + 113 -0.006700 -0.006243 -0.006459 + 114 0.000018 0.001429 0.001376 + 115 0.001269 0.002521 0.005249 + 116 -0.002179 0.015666 0.006861 + 117 -0.007158 0.000981 0.007353 + 118 0.001047 0.000840 -0.004404 + 119 0.000974 -0.012527 0.005053 + 120 0.026729 0.008884 -0.003350 + 121 0.001181 -0.004040 -0.002037 + 122 0.006556 -0.007438 0.002656 + 123 0.005056 -0.015002 -0.003727 + 124 -0.002704 -0.003683 -0.001021 + 125 0.025048 0.007258 0.008873 + 126 0.019645 -0.020824 -0.002539 + 127 0.000061 0.001072 0.002612 + 128 0.005132 0.013203 0.018763 + 129 0.033473 0.004804 0.018651 + 130 -0.003459 -0.000309 -0.001348 + 131 -0.008088 0.023660 0.011047 + 132 0.010962 0.031994 0.008711 + 133 0.000181 -0.002894 -0.001677 + 134 0.024049 -0.000711 -0.009405 + 135 0.018702 0.003422 -0.019522 + 136 -0.000836 -0.003270 -0.005700 + 137 0.012246 0.016524 0.001525 + 138 0.006270 -0.011288 0.002224 + 139 -0.005169 0.005097 -0.000688 + 140 -0.006982 0.003044 -0.001383 + 141 0.012227 0.012767 0.004047 + 142 -0.001169 0.006070 -0.007989 + 143 0.005451 0.002569 -0.009841 + 144 0.001825 -0.002822 -0.005341 + 145 0.000911 0.004242 -0.002026 + 146 0.012072 -0.001187 -0.010498 + 147 0.007366 0.005541 0.012099 + 148 0.009820 0.000588 0.001087 + 149 0.013758 0.005140 0.015262 + 150 0.015580 0.003311 0.013079 + 151 0.002031 0.000411 0.003403 + 152 -0.001996 0.003750 0.007387 + 153 0.000790 0.000281 -0.000919 + 154 -0.004168 0.001886 -0.004993 + 155 -0.011049 0.015294 0.001052 + 156 -0.012308 0.010348 -0.003128 + 157 -0.001609 -0.004040 -0.002294 + 158 -0.005715 -0.015529 -0.005700 + 159 0.014489 0.026653 0.004024 + 160 0.004070 0.000866 0.003373 + 161 0.004691 0.005062 0.002569 + 162 0.007082 -0.019961 -0.026174 + 163 0.005501 0.000902 -0.001325 + 164 0.007503 0.001448 -0.001472 + 165 0.013628 0.003649 -0.005952 + 166 -0.000639 0.003162 -0.007271 + 167 0.007342 -0.011001 -0.016849 + 168 -0.018400 -0.004772 0.020839 + 169 0.000214 -0.000386 0.002706 + 170 -0.005862 0.010449 -0.003793 + 171 -0.013612 0.011870 -0.006417 + 172 -0.005485 0.006465 0.005343 + 173 0.001788 0.008428 0.005641 + 174 -0.018354 0.029579 0.010717 + 175 0.002627 -0.000754 0.000071 + 176 -0.018080 0.018546 0.001794 + 177 0.006754 -0.000962 -0.007786 + 178 0.002343 0.002166 0.004945 + 179 -0.001724 0.003155 0.010761 + 180 0.010728 0.003441 0.001544 + 181 -0.000849 -0.002856 0.001461 + 182 0.009366 -0.003672 -0.001935 + 183 0.016615 -0.001746 0.005238 + 184 -0.002730 -0.000316 -0.004583 + 185 -0.014755 -0.011310 0.003338 + 186 0.005862 0.008235 -0.003200 + 187 -0.003189 -0.006285 0.009536 + 188 -0.005114 -0.007060 0.006450 + 189 -0.000516 -0.008757 0.009854 + 190 -0.000859 0.005266 0.001864 + 191 0.003108 -0.007021 0.009190 + 192 -0.015949 -0.002050 0.007021 + 193 -0.007008 0.002608 -0.004583 + 194 -0.020431 -0.004004 0.008047 + 195 -0.000364 0.001236 -0.011425 + 196 0.002420 0.006931 0.002031 + 197 0.007178 0.006129 0.009924 + 198 -0.005981 0.016623 -0.013067 + 199 0.003142 -0.001394 -0.001846 + 200 0.011374 -0.002895 -0.000674 + 201 0.032698 -0.002552 0.007288 + 202 -0.005709 0.000071 0.005037 + 203 -0.013193 -0.012592 -0.008102 + 204 -0.008194 0.014723 0.003840 + 205 -0.003270 -0.006146 0.004301 + 206 0.004399 -0.010132 -0.001197 + 207 -0.030308 0.012803 0.003540 + 208 0.002110 0.002374 0.006075 + 209 -0.000845 -0.004182 -0.002795 + 210 0.002582 -0.004671 0.002224 + 211 -0.003768 0.002130 0.001339 + 212 0.022509 0.017397 0.002782 + 213 0.020609 0.006682 -0.014082 + 214 0.003956 0.004282 -0.005023 + 215 0.007499 0.004128 0.002237 + 216 0.034882 -0.005096 0.008948 + 217 -0.002552 -0.000287 -0.001907 + 218 0.025445 0.005560 -0.016526 + 219 0.002741 0.000814 -0.004654 + 220 0.002162 -0.001203 0.000936 + 221 0.004071 0.004725 0.001938 + 222 0.002393 -0.013063 -0.003950 + 223 -0.001609 -0.003218 -0.004310 + 224 -0.012550 0.009033 -0.007868 + 225 0.014344 0.000886 -0.013005 + 226 0.005863 0.010335 -0.003424 + 227 0.011104 -0.005602 -0.012415 + 228 0.001222 0.002408 0.001546 + 229 -0.002038 0.001858 0.002991 + 230 -0.017517 -0.020932 0.016099 + 231 0.005257 0.011588 -0.018236 + 232 -0.002660 -0.006193 0.003186 + 233 -0.021995 0.012375 0.004372 + 234 -0.013906 0.028004 -0.004997 + 235 0.002339 -0.001255 -0.003548 + 236 0.001689 0.005243 -0.006337 + 237 0.000498 -0.007782 -0.015260 + 238 0.001142 0.002234 0.003408 + 239 0.007521 0.004622 -0.003272 + 240 -0.001154 0.006952 0.006739 + 241 -0.000938 -0.004609 0.002499 + 242 0.004903 0.001117 0.013021 + 243 0.008126 -0.013873 -0.001075 + 244 -0.004097 0.002491 -0.002459 + 245 0.002093 -0.002989 0.010881 + 246 0.008552 0.010436 0.008330 + 247 -0.000211 0.002295 0.001935 + 248 0.004346 0.003486 0.008405 + 249 -0.006182 0.002873 -0.007955 + 250 0.002466 0.001439 -0.002302 + 251 -0.003246 0.007233 0.009469 + 252 -0.002606 0.002646 0.002563 + 253 0.000833 -0.001794 -0.003483 + 254 -0.001066 -0.001277 -0.012569 + 255 -0.003354 -0.002604 -0.016130 + 256 0.007379 0.006324 -0.003535 + 257 0.025411 0.006788 -0.010928 + 258 0.011648 0.000201 0.004051 + 259 -0.000385 -0.000823 -0.000593 + 260 -0.001070 -0.019569 0.006235 + 261 0.011350 0.009136 0.002805 + 262 -0.001688 0.002178 0.004704 + 263 -0.011748 0.007674 0.002198 + 264 -0.005358 0.003728 -0.002879 + 265 -0.004209 0.000686 -0.004990 + 266 0.000586 0.011928 0.008080 + 267 0.004512 -0.002493 -0.000297 + 268 -0.000130 0.007801 -0.005732 + 269 -0.006259 -0.000991 -0.001515 + 270 0.015560 -0.011483 0.001826 + 271 -0.003544 0.003178 0.000326 + 272 0.006639 0.005731 0.008812 + 273 -0.009361 -0.001371 -0.002830 + 274 -0.000226 0.001739 0.001787 + 275 -0.001846 -0.005637 -0.002071 + 276 0.009461 0.005629 -0.001253 + 277 0.003294 -0.005377 -0.000680 + 278 0.027740 0.013288 0.002669 + 279 0.003403 0.012169 -0.019874 + 280 -0.001383 0.000386 -0.006636 + 281 -0.005910 0.003429 -0.006992 + 282 0.002649 -0.004178 -0.006969 + 283 0.004768 -0.001680 0.000104 + 284 -0.012916 0.017467 -0.012201 + 285 0.010278 -0.007970 0.003734 + 286 0.000005 0.000300 0.006224 + 287 0.003150 -0.001535 0.007443 + 288 -0.000547 -0.003737 0.010794 + 289 0.003054 0.005656 0.000426 + 290 0.006673 0.002252 0.007300 + 291 0.004185 0.001696 0.005292 + 292 -0.001277 -0.005156 -0.001765 + 293 0.005969 -0.004326 -0.002540 + 294 -0.026915 -0.005145 0.019233 + 295 -0.003352 -0.000356 -0.001610 + 296 -0.023375 -0.003718 -0.017075 + 297 0.006387 -0.025086 0.000315 + 298 -0.005064 0.001395 0.004436 + 299 -0.004111 0.000853 -0.032909 + 300 0.000933 0.005949 0.017391 + 301 0.000607 0.002490 -0.002786 + 302 0.002638 0.008857 0.008537 + 303 0.001294 0.011357 -0.003275 + 304 -0.001798 -0.003127 -0.000795 + 305 -0.003320 0.000996 0.004122 + 306 -0.008728 -0.000634 0.002033 + 307 -0.003535 -0.002662 -0.002777 + 308 -0.005954 -0.002781 -0.004403 + 309 -0.002147 -0.001477 -0.001223 + 310 -0.002595 -0.001397 0.002359 + 311 -0.003605 -0.000224 0.015269 + 312 -0.014002 -0.002828 0.000027 + 313 0.001583 -0.005357 0.002380 + 314 -0.002955 -0.014106 -0.011581 + 315 0.000151 -0.006411 0.002865 + 316 0.004278 -0.004088 0.000114 + 317 -0.019291 0.001584 0.015204 + 318 -0.013439 -0.000674 0.010987 + 319 0.000024 0.000995 0.005326 + 320 -0.009041 0.020464 0.014139 + 321 0.004208 -0.003482 0.004723 + 322 0.001489 -0.003292 0.000500 + 323 0.000364 0.006211 0.006844 + 324 0.007467 0.021162 -0.001636 + 325 0.009527 -0.000863 -0.005483 + 326 -0.009936 0.006496 -0.014136 + 327 -0.007595 -0.006469 -0.002090 + 328 -0.002856 -0.010388 -0.000678 + 329 -0.026693 -0.007624 -0.001572 + 330 0.029582 -0.010319 0.009090 + 331 -0.009062 0.000913 0.000368 + 332 -0.019327 0.020501 -0.000560 + 333 -0.018764 -0.008632 0.002570 + 334 0.004502 0.001200 -0.008087 + 335 0.008714 -0.005091 -0.008624 + 336 0.004610 0.003623 -0.007048 + 337 0.002461 -0.000759 0.003913 + 338 0.021591 -0.013925 0.009416 + 339 -0.017190 0.002325 0.006138 + 340 0.003361 0.004027 0.006986 + 341 0.006850 0.012752 0.018496 + 342 0.019589 0.009932 -0.004987 + 343 0.000463 0.005037 -0.000723 + 344 0.008333 0.006382 -0.005532 + 345 0.004288 0.006565 0.007800 + 346 -0.001505 -0.001295 0.001190 + 347 -0.015747 0.011253 0.025149 + 348 0.014871 -0.012646 -0.016815 + 349 -0.000186 0.002115 -0.002539 + 350 0.001936 0.000958 -0.003366 + 351 -0.014299 0.007078 -0.001653 + 352 -0.000876 -0.001637 -0.002032 + 353 -0.001168 0.005556 -0.012749 + 354 -0.003162 -0.016318 -0.009468 + 355 -0.000674 -0.001888 -0.003265 + 356 0.017652 -0.009515 0.007889 + 357 0.015313 -0.006079 0.010454 + 358 -0.000964 -0.004354 0.000067 + 359 0.004137 -0.002540 0.004500 + 360 -0.011376 -0.000921 -0.006123 + 361 0.002023 0.003210 -0.000511 + 362 0.012560 -0.011698 0.016109 + 363 -0.013295 -0.009379 -0.009014 + 364 0.003315 0.003249 0.007620 + 365 -0.010739 0.000915 -0.008118 + 366 -0.015293 0.007564 -0.004343 + 367 0.000192 0.002269 -0.000485 + 368 0.002520 -0.012494 -0.004632 + 369 0.010222 0.003093 -0.002247 + 370 0.003953 0.000628 0.004147 + 371 0.001165 -0.005271 0.007550 + 372 -0.013412 -0.019696 0.026961 + 373 0.001883 0.002252 -0.003560 + 374 0.005482 -0.004609 0.002380 + 375 -0.008048 0.004473 -0.008866 + 376 -0.002663 0.001073 0.001951 + 377 0.010178 0.018964 0.000820 + 378 0.007583 -0.018984 0.016464 + 379 0.001136 0.007646 0.002719 + 380 0.006251 0.008125 0.009187 + 381 0.001284 0.011634 -0.004097 + 382 -0.000767 0.000265 -0.000818 + 383 -0.000089 0.001579 -0.002300 + 384 -0.004565 -0.011251 0.008186 + 385 0.004778 -0.000871 0.002405 + 386 0.006618 -0.002801 0.006849 + 387 0.029884 -0.012377 0.019662 + 388 -0.002799 -0.005785 0.000693 + 389 -0.006988 0.014716 -0.008738 + 390 -0.003130 0.004832 0.002982 + 391 0.000036 -0.002467 0.000498 + 392 -0.001382 -0.006847 0.003863 + 393 -0.003623 0.001391 0.001664 + 394 0.004431 0.000182 0.002043 + 395 0.007177 -0.001675 0.008884 + 396 0.000324 0.003728 0.003379 + 397 0.004107 -0.000618 0.000098 + 398 0.019272 -0.008832 -0.013192 + 399 -0.025041 0.027976 -0.020594 + 400 0.002982 -0.002889 -0.005826 + 401 0.010564 -0.003899 -0.002078 + 402 0.005218 -0.003308 -0.010357 + 403 0.002304 -0.003833 -0.008812 + 404 -0.013421 -0.017603 -0.023172 + 405 -0.003134 -0.000582 0.001712 + 406 -0.003398 -0.002176 0.001635 + 407 -0.015813 0.008046 0.010515 + 408 0.003940 -0.004144 -0.002666 + 409 0.008428 -0.002203 -0.004077 + 410 -0.004859 0.004207 -0.016803 + 411 -0.022714 0.005614 0.004119 + 412 -0.000677 -0.000486 0.001019 + 413 0.004137 0.001524 0.004810 + 414 -0.011495 -0.003293 -0.002498 + 415 -0.004277 -0.004620 -0.002973 + 416 0.005727 -0.002611 0.021922 + 417 0.009759 0.016284 -0.017136 + 418 0.001140 -0.003169 0.001021 + 419 0.002072 0.019101 -0.019824 + 420 0.029356 -0.011686 0.004675 + 421 0.001175 0.002540 0.001846 + 422 0.009479 -0.017538 0.002696 + 423 0.008327 0.028039 -0.001246 + 424 0.002971 -0.004730 0.000069 + 425 0.010168 -0.005904 -0.016535 + 426 0.009223 0.011295 0.006248 + 427 -0.003323 0.000861 0.005020 + 428 -0.005244 0.001685 -0.001864 + 429 0.000994 0.014826 0.000976 + 430 -0.002795 0.003958 -0.004848 + 431 0.010698 -0.011688 -0.000537 + 432 0.008158 0.021591 -0.003259 + 433 0.000363 0.002223 0.004053 + 434 -0.002225 0.004315 -0.010042 + 435 -0.000151 -0.000572 0.000675 + 436 0.006996 -0.000559 0.003307 + 437 -0.011410 -0.004708 0.006782 + 438 -0.015909 0.022113 0.004877 + 439 -0.002401 -0.002279 0.002655 + 440 -0.002478 0.000164 0.005849 + 441 -0.003545 0.002314 0.007358 + 442 0.002189 0.006935 -0.001251 + 443 -0.007190 0.031224 0.006804 + 444 0.004661 -0.003296 0.013412 + 445 0.003709 0.001514 -0.003921 + 446 0.015678 0.007604 0.000133 + 447 -0.004648 -0.004474 -0.027064 + 448 0.001807 -0.004146 0.004203 + 449 0.029598 0.003434 0.012408 + 450 -0.004603 -0.006201 0.002287 + 451 -0.003031 -0.004136 -0.006564 + 452 0.009003 0.019264 0.004529 + 453 -0.000188 0.010449 0.001077 + 454 0.003891 0.002752 0.005629 + 455 0.001092 0.012776 0.008682 + 456 -0.002762 0.015371 -0.005857 + 457 0.002697 -0.003406 -0.002865 + 458 0.007823 -0.013511 0.002023 + 459 -0.030492 -0.008107 -0.020624 + 460 0.000483 0.001162 0.002651 + 461 0.002571 -0.007508 -0.009384 + 462 -0.010774 -0.027329 0.003619 + 463 0.005791 0.000086 0.004298 + 464 0.008820 0.016257 -0.002226 + 465 0.000317 -0.014932 -0.013621 + 466 0.003540 0.001551 -0.001349 + 467 0.008241 0.020014 0.019807 + 468 -0.004258 -0.010227 -0.029599 + 469 0.007640 0.001287 -0.003128 + 470 0.004600 -0.001555 -0.010230 + 471 0.007870 0.002461 0.000094 + 472 0.001001 0.005160 -0.001529 + 473 0.006073 0.015127 0.022819 + 474 0.006356 -0.012345 -0.003131 + 475 -0.005549 -0.000151 0.001312 + 476 -0.015747 0.009610 0.004075 + 477 0.009345 0.004620 -0.013632 + 478 -0.005694 -0.004777 0.002781 + 479 -0.015785 0.018249 0.008919 + 480 0.007264 0.001342 -0.012954 + 481 -0.002601 -0.003124 -0.001775 + 482 -0.010924 -0.002942 0.001676 + 483 0.020644 0.001519 0.001050 + 484 -0.003829 -0.001681 0.001973 + 485 -0.009248 -0.008096 0.002166 + 486 -0.004627 -0.003317 0.000426 + 487 0.004750 0.008629 -0.001691 + 488 -0.009177 0.001481 0.019567 + 489 -0.000748 -0.004703 -0.011184 + 490 -0.000930 -0.004032 -0.001796 + 491 -0.007051 -0.001375 -0.004647 + 492 -0.000505 0.005436 -0.004029 + 493 -0.000767 -0.000313 -0.004426 + 494 0.007019 0.022441 0.008035 + 495 0.002030 -0.018016 0.012244 + 496 -0.000430 -0.004092 0.001186 + 497 0.012447 -0.008156 0.016405 + 498 -0.008008 0.011043 -0.000527 + 499 0.001752 0.001451 -0.008850 + 500 -0.001696 0.002950 -0.000035 + 501 0.006054 -0.001180 -0.028952 + 502 0.001434 -0.008124 -0.001958 + 503 0.001762 -0.007034 -0.009244 + 504 -0.008796 -0.004759 -0.009928 + 505 0.000249 0.001170 0.006380 + 506 -0.005081 0.014461 -0.003259 + 507 -0.002522 0.001324 0.007841 + 508 0.003441 0.001538 0.006742 + 509 0.007735 -0.006583 0.003492 + 510 0.009681 0.006088 0.008608 + 511 -0.006695 -0.001970 0.000807 + 512 0.004268 0.004052 0.001263 + 513 -0.004129 -0.012886 -0.007489 + 514 -0.002878 0.001158 0.006535 + 515 -0.007680 -0.001896 0.002953 + 516 -0.000917 -0.006257 -0.002762 + 517 -0.001401 -0.003523 -0.005778 + 518 -0.001854 0.007834 0.015061 + 519 -0.010095 0.007049 -0.021128 + 520 -0.000766 -0.000153 0.007009 + 521 0.009064 -0.003223 0.017921 + 522 0.000864 -0.000043 0.007876 + 523 -0.001025 0.001319 -0.006573 + 524 -0.006395 0.000755 -0.002686 + 525 -0.032670 0.007943 0.004175 + 526 0.002953 0.006520 0.004065 + 527 0.009139 -0.008077 -0.010889 + 528 -0.002820 0.012454 -0.005504 + 529 -0.008727 0.003418 0.002451 + 530 -0.007112 -0.005703 0.023446 + 531 -0.011285 0.014165 -0.019563 + 532 -0.002562 0.003192 -0.002295 + 533 -0.003618 0.007211 0.002298 + 534 0.010325 0.001834 0.002853 + 535 0.002563 0.000345 -0.002878 + 536 0.002396 0.022293 -0.006961 + 537 0.001693 -0.002677 0.010576 + 538 -0.001561 0.000734 0.001793 + 539 -0.008542 0.015338 0.007321 + 540 -0.015880 0.015140 0.014642 + 541 0.001092 0.000090 0.000997 + 542 -0.004522 -0.004004 0.003687 + 543 0.003258 -0.006156 0.000500 + 544 -0.001608 0.002026 0.003790 + 545 -0.010430 -0.004583 0.015482 + 546 0.002628 0.011416 0.004923 + 547 -0.002068 0.005845 0.001850 + 548 0.001194 0.007931 0.007672 + 549 -0.020261 -0.007195 -0.008896 + 550 0.005399 0.001999 0.000211 + 551 0.004420 0.012603 0.006214 + 552 0.007790 0.005534 0.000006 + 553 -0.004249 0.001186 -0.000260 + 554 0.006385 -0.014925 0.000020 + 555 0.009902 0.016988 -0.004080 + 556 0.006637 -0.003469 0.000450 + 557 -0.002010 0.011423 -0.004361 + 558 -0.009074 0.013716 -0.002539 + 559 0.003243 -0.003710 -0.002565 + 560 -0.000480 -0.009433 0.000267 + 561 0.002981 -0.005587 -0.010088 + 562 0.002665 0.008169 0.002667 + 563 -0.001817 0.009035 0.022525 + 564 0.005689 0.010678 0.000603 + 565 0.003217 0.002617 0.001072 + 566 0.025108 0.001061 -0.027288 + 567 -0.003091 0.028727 0.028529 + 568 0.003991 -0.002246 0.002528 + 569 0.011195 -0.007917 0.010511 + 570 -0.006686 -0.007088 -0.000640 + 571 0.005302 0.003751 0.001484 + 572 0.001250 0.007658 -0.006666 + 573 0.018145 -0.005375 0.000139 + 574 -0.003857 0.003583 0.000238 + 575 0.006752 0.001063 0.004538 + 576 -0.006479 0.014326 -0.017669 + 577 0.001793 0.003661 0.002509 + 578 0.010186 -0.003147 0.008687 + 579 -0.001160 -0.005645 -0.003812 + 580 -0.002296 0.006997 0.000837 + 581 -0.031138 0.017223 0.000984 + 582 0.002587 -0.007480 0.015277 + 583 0.000288 -0.000668 0.001548 + 584 0.016041 -0.004051 0.004629 + 585 -0.025116 0.003224 0.009356 + 586 -0.000853 0.003188 0.004014 + 587 -0.001700 -0.004491 0.006716 + 588 -0.008947 -0.009004 -0.023328 + 589 0.005432 -0.003893 -0.001000 + 590 -0.019524 0.021049 -0.035976 + 591 0.009404 0.004475 -0.004525 + 592 -0.006508 -0.002709 0.000481 + 593 0.010852 -0.015643 0.005754 + 594 0.006526 0.026156 0.009018 + 595 -0.004611 -0.001841 0.002205 + 596 -0.013411 -0.011893 -0.011510 + 597 -0.002150 -0.000804 -0.006730 + 598 -0.002593 -0.000356 0.003104 + 599 0.009483 0.002951 -0.001362 + 600 -0.015523 -0.003843 0.010828 + 601 -0.001229 0.003953 0.000471 + 602 -0.017788 0.002114 0.033354 + 603 0.015187 -0.017947 -0.007994 + 604 -0.001335 -0.000196 0.007281 + 605 0.015188 0.007448 0.005030 + 606 -0.001538 0.002386 -0.009662 + 607 -0.001172 0.004261 0.002894 + 608 -0.002229 0.015661 0.009134 + 609 0.017428 0.004976 0.006974 + 610 -0.001490 0.003604 0.004586 + 611 -0.017720 0.006222 -0.023144 + 612 0.010016 -0.015847 -0.004678 + 613 -0.002648 0.000934 0.000698 + 614 -0.011832 0.016782 0.007626 + 615 -0.005427 0.001385 0.015386 + 616 0.003669 -0.001949 0.003946 + 617 0.005164 0.000243 0.009975 + 618 -0.000161 0.003111 0.001353 + 619 0.002976 -0.004733 0.001868 + 620 -0.002832 -0.014197 -0.023534 + 621 -0.003347 -0.011551 0.000693 + 622 0.004912 0.001701 -0.000793 + 623 0.013809 0.007164 -0.016905 + 624 0.024958 -0.010962 -0.008428 + 625 0.007422 -0.002948 -0.001308 + 626 -0.016590 -0.032000 -0.001025 + 627 0.011367 0.004098 0.010259 + 628 -0.002045 -0.000742 0.000577 + 629 -0.030845 0.001448 0.030396 + 630 0.001781 -0.017639 0.014980 + 631 0.002233 -0.004427 -0.002429 + 632 0.018586 -0.001402 0.006993 + 633 -0.012356 0.003736 0.007796 + 634 -0.004338 0.007766 0.000310 + 635 0.001990 0.000209 0.007107 + 636 -0.006343 0.005190 -0.018263 + 637 -0.005455 0.000492 -0.002847 + 638 0.000522 0.006495 0.003755 + 639 -0.001841 -0.009429 -0.001507 + 640 -0.002314 -0.002516 -0.005613 + 641 0.018652 0.002237 -0.015930 + 642 -0.002326 -0.000776 -0.003132 + 643 -0.005512 -0.000623 -0.000619 + 644 -0.001015 0.005882 0.003225 + 645 0.000586 0.023218 -0.004529 + 646 -0.001138 0.000800 0.002687 + 647 0.003627 0.013371 -0.016172 + 648 0.018968 0.017228 -0.000038 + 649 -0.002086 -0.000112 -0.007393 + 650 0.016103 0.035588 0.008775 + 651 -0.038516 0.012158 -0.009536 + 652 0.002958 0.004862 -0.007554 + 653 0.024333 0.013052 -0.023133 + 654 0.002379 -0.000049 -0.006601 + 655 0.003804 -0.003076 -0.001112 + 656 -0.004763 0.002283 -0.025897 + 657 -0.036538 -0.010672 -0.010599 + 658 -0.000713 0.003957 0.002151 + 659 -0.016531 0.001472 0.004862 + 660 -0.009287 0.028134 0.010480 + 661 0.004192 -0.003835 0.000568 + 662 0.011523 0.002433 0.036479 + 663 -0.009197 -0.041577 0.000393 + 664 0.000280 -0.002373 -0.004460 + 665 0.002206 -0.003211 0.000957 + 666 0.006211 0.013469 -0.005353 + 667 -0.000522 0.001664 -0.004748 + 668 0.004459 -0.024042 -0.023029 + 669 0.011377 0.013403 0.030836 + 670 0.003382 -0.002813 0.000451 + 671 0.000766 0.000074 -0.006820 + 672 0.013252 -0.015598 0.024274 + 673 -0.003243 0.006406 -0.002570 + 674 0.019962 -0.008888 -0.019769 + 675 -0.027628 -0.005508 -0.000297 + 676 -0.007770 -0.003882 0.002155 + 677 -0.001777 0.012358 0.000036 + 678 -0.024978 0.005564 -0.015024 + 679 0.000188 0.001017 0.004117 + 680 -0.006440 -0.003105 0.019733 + 681 -0.016780 0.005575 -0.004078 + 682 0.000151 0.001697 -0.001387 + 683 -0.002925 0.000955 -0.004378 + 684 0.000826 0.008069 0.003052 + 685 -0.003543 -0.000321 -0.000587 + 686 -0.012205 0.000432 -0.005990 + 687 0.004010 0.009678 -0.003793 + 688 0.001940 -0.000340 0.003900 + 689 0.005837 0.014815 -0.005621 + 690 -0.008710 -0.017653 0.020395 + 691 -0.001931 -0.003975 -0.002577 + 692 -0.003368 -0.014386 -0.006878 + 693 -0.013782 -0.002984 0.003522 + 694 0.004968 -0.000283 -0.003322 + 695 0.019160 0.006665 -0.007077 + 696 0.022604 -0.000847 -0.016983 + 697 0.002571 0.000550 -0.007379 + 698 -0.001443 -0.002487 -0.007727 + 699 -0.011487 -0.013883 0.019460 + 700 0.001096 -0.004750 0.003965 + 701 -0.016603 -0.010473 0.014272 + 702 0.023559 -0.001392 -0.008500 + 703 -0.002022 -0.005262 -0.004485 + 704 0.002332 -0.014942 -0.004917 + 705 -0.009402 0.006267 -0.002020 + 706 -0.000288 0.003264 -0.003564 + 707 0.004565 0.033122 -0.006655 + 708 -0.018922 -0.009521 0.000208 + 709 -0.003485 0.003285 -0.000556 + 710 0.004587 -0.002798 -0.000984 + 711 -0.006054 0.007231 -0.001425 + 712 0.004718 0.000201 -0.003948 + 713 -0.014114 0.009800 -0.004955 + 714 -0.008099 -0.004168 0.008689 + 715 0.000410 -0.000654 0.009605 + 716 0.008711 0.018707 0.002740 + 717 0.003459 -0.008185 0.010239 + 718 0.003479 0.000757 0.004467 + 719 0.000433 -0.000495 0.007710 + 720 0.012945 0.003286 -0.002052 + 721 -0.010010 -0.003567 0.006956 + 722 0.005307 -0.001615 -0.002198 + 723 -0.012515 0.011984 0.016669 + 724 0.001378 -0.002186 -0.001614 + 725 0.012587 -0.019891 0.012237 + 726 0.012601 0.007024 0.014776 + 727 -0.002983 -0.001722 -0.004228 + 728 0.015268 -0.011359 -0.002815 + 729 -0.003967 0.028638 0.000653 + 730 -0.000313 -0.000495 0.001546 + 731 -0.030938 -0.009463 -0.008649 + 732 -0.033474 -0.019299 0.015331 + 733 0.000845 -0.003919 -0.003202 + 734 -0.027178 0.011071 -0.026350 + 735 -0.007741 0.001470 -0.016184 + 736 -0.001239 0.001989 -0.002789 + 737 0.011285 0.001382 -0.006222 + 738 0.022813 -0.006205 -0.006536 + 739 0.003987 -0.004190 -0.005010 + 740 -0.007915 0.002670 -0.013878 + 741 0.004194 0.006086 -0.010350 + 742 0.006539 -0.005074 0.002196 + 743 0.015306 0.008181 0.005081 + 744 0.007865 0.003022 -0.004716 + 745 -0.001784 -0.010062 0.004309 + 746 -0.002378 -0.011275 0.006933 + 747 -0.008336 -0.001053 0.004620 + 748 -0.002979 0.004768 -0.002497 + 749 -0.000959 0.004004 -0.002600 + 750 -0.019512 -0.002978 0.005044 + 751 -0.004903 -0.000550 0.000659 + 752 -0.005086 0.005639 -0.022167 + 753 -0.008131 0.001631 -0.018889 + 754 -0.001761 -0.001628 0.000503 + 755 -0.003957 -0.007199 -0.006609 + 756 0.003155 -0.001306 0.005143 + 757 0.000937 0.008247 -0.008723 + 758 0.028994 0.004889 0.007225 + 759 -0.000469 -0.025903 0.001925 + 760 -0.001834 -0.000370 -0.001605 + 761 0.007234 -0.001225 -0.019036 + 762 -0.003442 -0.001966 0.000209 + 763 0.000445 0.007510 0.001158 + 764 -0.008348 0.004439 -0.007776 + 765 -0.012793 0.011539 0.019680 + 766 0.000065 -0.000962 -0.004032 + 767 -0.002013 -0.005477 0.003901 + 768 0.003529 0.021570 0.007224 + 769 -0.002661 0.002604 -0.003268 + 770 0.005668 -0.003962 -0.004196 + 771 -0.003633 0.008263 -0.012842 + 772 0.001811 0.001915 0.002764 + 773 0.007995 -0.017893 0.012738 + 774 -0.018466 -0.002519 -0.001997 + 775 -0.002231 0.000080 0.000338 + 776 -0.020092 -0.012422 0.010443 + 777 0.017610 0.006562 -0.019411 + 778 -0.001733 0.005494 0.004582 + 779 0.013495 0.017522 0.004058 + 780 0.014733 0.026971 -0.010419 + 781 0.001950 0.000577 -0.000870 + 782 -0.025830 0.001269 0.005271 + 783 0.007534 -0.015453 0.006553 + 784 0.004959 0.000931 -0.005022 + 785 -0.008754 0.005835 0.049441 + 786 0.010447 0.012462 0.001546 + 787 -0.001107 0.002522 0.000433 + 788 0.009871 0.011686 0.008446 + 789 -0.006988 0.002247 0.021211 + 790 0.004245 0.001822 -0.000253 + 791 0.000153 -0.002603 0.008675 + 792 0.006252 0.003177 -0.013109 + 793 -0.002534 0.003863 0.000617 + 794 -0.000057 0.004391 -0.016346 + 795 0.005974 -0.000584 -0.004834 + 796 0.001827 -0.002339 -0.002010 + 797 -0.023150 0.007693 0.012507 + 798 0.012203 0.000464 -0.020004 + 799 -0.000293 -0.001883 -0.002470 + 800 -0.004248 0.006084 0.002613 + 801 -0.013517 0.015693 0.003574 + 802 -0.009450 0.005229 -0.003400 + 803 -0.015058 -0.007700 0.001796 + 804 -0.000196 -0.003546 0.002537 + 805 0.008758 -0.003257 0.005431 + 806 0.012998 -0.011952 -0.017276 + 807 0.008558 -0.002765 0.006723 + 808 -0.001470 -0.000539 0.002965 + 809 0.024028 -0.019423 -0.012788 + 810 0.003892 0.003966 -0.001573 + 811 0.000254 0.001510 0.000089 + 812 0.024395 0.007424 -0.013783 + 813 0.006830 0.017138 0.017010 + 814 -0.001535 -0.003749 -0.001708 + 815 0.013748 -0.018314 -0.006646 + 816 0.003900 0.002047 0.006451 + 817 0.006585 0.003832 -0.000629 + 818 0.021540 0.003252 0.001280 + 819 0.007897 0.007247 -0.003727 + 820 -0.002115 -0.002434 -0.005025 + 821 -0.016735 0.003360 -0.019137 + 822 0.003237 -0.017804 -0.004111 + 823 -0.003907 0.002878 -0.003988 + 824 -0.005419 -0.002010 -0.004476 + 825 -0.006449 0.003104 -0.002766 + 826 -0.013638 -0.002258 -0.002448 + 827 -0.007838 0.000023 -0.005866 + 828 -0.006633 0.001312 -0.008943 + 829 0.001696 0.003761 -0.002125 + 830 -0.001113 -0.010288 -0.008692 + 831 0.010380 0.008838 -0.015548 + 832 -0.003164 0.004544 -0.002070 + 833 -0.001495 -0.013094 -0.000890 + 834 0.011945 -0.015741 -0.003378 + 835 -0.008802 -0.001939 -0.005442 + 836 -0.002949 -0.007279 -0.004665 + 837 0.008414 -0.021459 -0.000948 + 838 0.001330 0.000622 0.000916 + 839 -0.001965 0.001331 0.006138 + 840 0.003081 -0.004825 0.007272 + 841 0.001557 -0.005770 -0.001563 + 842 0.014285 0.020628 -0.029634 + 843 -0.006815 0.003616 0.008747 + 844 0.001116 -0.003881 -0.003556 + 845 0.008316 -0.005783 -0.005256 + 846 -0.011615 0.015346 0.026431 + 847 0.004309 0.003546 -0.004311 + 848 0.007868 -0.013572 0.000073 + 849 -0.011699 0.005875 0.003604 + 850 0.000505 -0.004069 -0.002113 + 851 0.001211 -0.005770 -0.003436 + 852 -0.004651 0.001028 0.007154 + 853 -0.003913 -0.006795 -0.004733 + 854 -0.004339 -0.014527 -0.023555 + 855 -0.006756 -0.006056 -0.008714 + 856 0.007493 0.001588 -0.006408 + 857 0.020526 0.022065 -0.006921 + 858 0.010862 0.004031 -0.001655 + 859 0.003459 -0.001125 -0.001494 + 860 -0.000710 0.004855 0.022662 + 861 -0.000022 0.009082 0.012428 + 862 -0.000591 0.002648 0.002517 + 863 0.017910 0.003993 0.005847 + 864 -0.004999 0.014284 -0.016199 + 865 -0.001700 -0.002300 0.001206 + 866 -0.016994 -0.008747 -0.012103 + 867 -0.008118 -0.008616 0.003715 + 868 -0.002056 -0.003732 -0.006667 + 869 -0.002586 -0.005666 -0.002032 + 870 -0.002179 -0.001361 -0.001378 + 871 0.001952 0.000747 -0.004175 + 872 -0.000006 -0.004573 0.003592 + 873 -0.004377 -0.012174 0.000091 + 874 -0.006945 -0.004708 0.004295 + 875 -0.011724 -0.010397 0.002368 + 876 0.006805 0.012734 0.019238 + 877 0.004959 0.005871 -0.001277 + 878 -0.012228 -0.000867 -0.006672 + 879 0.014516 0.032640 0.025985 + 880 0.000767 -0.000179 0.004816 + 881 0.006242 0.002132 0.007465 + 882 0.006812 0.003103 0.007707 + 883 0.005120 -0.003059 -0.001062 + 884 -0.008255 -0.016076 -0.002362 + 885 -0.001789 -0.014152 -0.001194 + 886 -0.009000 0.001340 0.001690 + 887 -0.020559 -0.017599 0.000329 + 888 -0.003544 -0.006539 0.004087 + 889 -0.000933 0.000538 -0.001999 + 890 0.032797 0.013397 0.000525 + 891 -0.012354 -0.008526 -0.038077 + 892 0.002953 -0.002317 -0.004454 + 893 -0.029479 -0.014864 0.005868 + 894 0.019223 0.000709 -0.013773 + 895 0.002346 -0.003694 -0.004486 + 896 -0.005275 -0.001221 -0.010755 + 897 0.010883 0.001918 -0.002099 + 898 -0.000263 -0.000830 0.005518 + 899 0.000399 -0.005578 0.011643 + 900 -0.007207 -0.006080 -0.006632 + 901 -0.000868 0.002637 -0.000416 + 902 -0.003601 0.001456 0.001019 + 903 0.003465 0.009000 0.002627 + 904 -0.005492 0.001153 0.005034 + 905 0.008501 0.009963 0.005133 + 906 0.002740 0.005510 0.005387 + 907 0.001230 0.003701 -0.010904 + 908 0.005640 0.000943 -0.026378 + 909 -0.001655 0.006661 0.001080 + 910 0.000417 -0.004485 0.000899 + 911 0.004051 -0.003590 0.002016 + 912 0.010109 -0.002124 0.001500 + 913 0.002439 0.006335 0.003103 + 914 -0.006325 0.005901 0.006397 + 915 0.008058 0.002545 0.004591 + 916 -0.001774 -0.003954 -0.005522 + 917 -0.001697 -0.002110 -0.006988 + 918 0.000641 -0.012660 -0.001878 + 919 0.000840 0.002158 -0.002127 + 920 -0.006972 -0.005865 -0.019536 + 921 -0.009078 -0.009093 0.005319 + 922 -0.002466 0.001612 -0.002348 + 923 -0.007997 0.000173 -0.007016 + 924 -0.005167 0.000122 -0.004809 + 925 0.000182 0.007626 -0.005820 + 926 -0.000187 0.006758 -0.004766 + 927 -0.005146 0.010941 -0.001145 + 928 -0.001035 0.003329 -0.000156 + 929 -0.002925 0.005286 0.005381 + 930 -0.007353 0.014383 0.015446 + 931 0.001566 0.003779 -0.001844 + 932 0.014111 -0.006162 0.016836 + 933 -0.008051 -0.000942 0.006114 + 934 0.000472 0.000581 0.003898 + 935 0.010438 -0.015336 0.026259 + 936 -0.009803 0.018803 -0.011113 + 937 -0.002622 0.001845 -0.004649 + 938 0.000192 0.006195 -0.003034 + 939 -0.004379 0.004856 -0.008876 + 940 0.005312 -0.005320 -0.000644 + 941 0.004197 0.002434 0.005873 + 942 0.001054 -0.002144 -0.009156 + 943 0.001818 0.002764 0.000410 + 944 0.002489 0.005354 -0.014128 + 945 0.003819 0.010472 0.007403 + 946 0.005262 -0.000699 0.001191 + 947 -0.002052 -0.008290 0.017377 + 948 -0.012921 -0.009037 0.007720 + 949 0.002875 -0.000206 -0.005514 + 950 0.004620 -0.003924 -0.007344 + 951 0.004396 0.015332 -0.008395 + 952 -0.001773 -0.005567 0.004807 + 953 0.014650 -0.004337 0.011316 + 954 0.007355 -0.004603 0.004796 + 955 0.001050 0.002663 -0.000049 + 956 -0.000422 0.019759 -0.003121 + 957 -0.011736 0.001700 0.005445 + 958 0.002314 -0.007359 0.001422 + 959 0.000226 -0.009157 0.011161 + 960 0.002971 -0.007641 -0.001658 + 961 0.002025 0.003310 0.000085 + 962 0.003783 0.005544 -0.002440 + 963 -0.003390 -0.001680 0.007759 + 964 -0.000259 -0.001517 -0.001671 + 965 -0.009891 -0.000275 0.002930 + 966 -0.004798 -0.018121 0.000493 + 967 0.002742 0.002196 0.002639 + 968 -0.032110 0.008681 0.017593 + 969 -0.005767 -0.003804 -0.003447 + 970 -0.001025 -0.001901 0.007377 + 971 -0.025416 -0.005633 -0.009650 + 972 -0.002448 -0.002342 0.009184 + 973 0.000510 -0.004313 0.003297 + 974 -0.004244 -0.006185 -0.015114 + 975 0.002817 0.008222 0.025232 + 976 -0.005979 0.000432 0.003264 + 977 0.000348 0.000126 0.007237 + 978 -0.031461 0.008376 -0.002490 + 979 -0.003066 -0.005264 0.001528 + 980 0.000500 -0.005194 -0.000082 + 981 -0.006145 0.003915 -0.013465 + 982 -0.002081 -0.001596 0.001268 + 983 0.004918 -0.004802 -0.009499 + 984 -0.008729 0.005751 0.010881 + 985 0.002456 -0.001947 -0.001558 + 986 -0.006566 -0.000024 0.003315 + 987 0.007532 0.005898 -0.002575 + 988 -0.004247 -0.003264 -0.000409 + 989 0.002165 -0.007499 0.004990 + 990 -0.000419 0.003692 -0.004472 + 991 -0.001571 -0.000159 -0.000431 + 992 0.005413 0.009517 0.004397 + 993 -0.002643 -0.002292 -0.001478 + 994 -0.003884 0.005066 -0.000457 + 995 0.006816 0.009263 -0.003376 + 996 -0.007273 0.011919 0.000514 + 997 0.000030 0.001409 0.005477 + 998 0.005334 -0.020033 0.004464 + 999 0.016228 0.009598 -0.007106 + 1000 -0.002283 -0.004481 0.001317 + 1001 -0.002631 -0.006631 -0.004233 + 1002 0.004184 0.000805 0.014756 + 1003 0.000408 -0.003693 0.003308 + 1004 0.004530 -0.006410 -0.006453 + 1005 -0.004928 -0.003846 0.015168 + 1006 0.003101 -0.001511 0.005308 + 1007 0.014081 -0.002443 0.012313 + 1008 0.002846 0.010440 -0.000376 + 1009 0.003569 -0.002175 -0.006662 + 1010 -0.008368 -0.011644 -0.006989 + 1011 0.019824 -0.004949 -0.018661 + 1012 0.003202 -0.011850 0.003160 + 1013 0.014918 -0.009378 0.018579 + 1014 -0.002594 0.004575 -0.001959 + 1015 -0.002298 0.000413 -0.003910 + 1016 0.012837 -0.003799 -0.015681 + 1017 -0.005955 -0.000660 0.004171 + 1018 0.001582 0.000975 0.000146 + 1019 0.006776 -0.014144 -0.007821 + 1020 0.004234 -0.001693 -0.007198 + 1021 -0.001802 -0.002656 0.003257 + 1022 0.028537 0.012512 0.005966 + 1023 -0.000026 -0.011732 -0.013572 + 1024 0.006685 0.008417 -0.002619 + 1025 -0.018380 0.006240 0.006444 + 1026 0.014195 0.009753 -0.004447 + 1027 -0.000769 -0.006799 -0.003510 + 1028 -0.003532 0.013774 -0.009337 + 1029 0.005263 0.018084 -0.010946 + 1030 0.004102 0.004262 -0.002426 + 1031 -0.003256 -0.005354 0.003498 + 1032 -0.021894 -0.003478 0.016467 + 1033 0.001456 -0.004355 -0.002070 + 1034 -0.005859 -0.004113 -0.005871 + 1035 -0.005758 -0.006886 -0.016585 + 1036 0.001562 0.006459 -0.000209 + 1037 0.001331 0.004667 0.000892 + 1038 0.012898 0.027063 -0.008125 + 1039 0.002117 0.007131 0.002457 + 1040 0.026605 0.010046 0.019045 + 1041 -0.017364 0.007077 -0.014953 + 1042 -0.000452 0.009291 0.004625 + 1043 -0.011059 0.009571 0.015357 + 1044 0.027928 -0.000208 0.009437 + 1045 0.003475 -0.004274 -0.000546 + 1046 0.012160 -0.001385 -0.006922 + 1047 -0.016274 -0.008100 -0.006675 + 1048 -0.003853 -0.003278 -0.001388 + 1049 0.014697 -0.003341 -0.007454 + 1050 0.011346 -0.009086 -0.006461 + 1051 -0.001161 -0.003940 -0.002833 + 1052 0.011182 0.001281 -0.000803 + 1053 -0.001345 -0.002375 -0.003580 + 1054 0.004028 0.002256 0.000990 + 1055 0.013302 0.008212 -0.007566 + 1056 0.029179 -0.014499 0.008878 + 1057 0.000706 0.001652 0.001826 + 1058 0.000498 -0.007266 0.024956 + 1059 0.001324 -0.008155 0.011295 + 1060 0.000971 -0.006253 -0.004688 + 1061 -0.004746 -0.005680 -0.016047 + 1062 -0.000356 -0.009050 -0.006561 + 1063 -0.000866 0.005460 0.000045 + 1064 -0.006882 0.011747 0.020163 + 1065 -0.000733 0.001409 -0.010900 + 1066 -0.003804 0.003558 0.001444 + 1067 0.004513 0.002071 -0.017536 + 1068 -0.000869 -0.002704 -0.014336 + 1069 -0.003015 0.003241 -0.002075 + 1070 0.003734 -0.005456 -0.000879 + 1071 -0.006686 -0.008010 -0.008654 + 1072 -0.000541 -0.003669 -0.004373 + 1073 0.003151 -0.002513 -0.013951 + 1074 0.003979 -0.005557 0.002931 + 1075 -0.005175 -0.004387 0.000228 + 1076 -0.005613 -0.012392 -0.029351 + 1077 0.009704 0.009953 -0.015680 + 1078 -0.000915 0.003660 -0.003078 + 1079 0.002529 0.001465 0.006987 + 1080 0.000880 0.001866 -0.004217 + 1081 0.000835 -0.000410 0.000029 + 1082 0.003324 -0.009356 0.012151 + 1083 -0.000797 0.009753 -0.012613 + 1084 0.004557 -0.006851 0.000257 + 1085 0.014378 -0.010986 -0.004036 + 1086 0.001889 0.001865 0.000904 + 1087 0.003881 0.000306 -0.000266 + 1088 0.006043 -0.030376 0.018797 + 1089 -0.001012 -0.002296 0.000324 + 1090 0.007042 0.008682 0.007323 + 1091 0.010016 0.002442 -0.028255 + 1092 -0.004827 0.009414 -0.012200 + 1093 0.002178 0.003272 0.000190 + 1094 0.003486 0.001815 -0.002585 + 1095 0.006020 0.002953 -0.010998 + 1096 0.002573 -0.000704 0.002051 + 1097 -0.010233 0.004335 0.005568 + 1098 0.003397 0.002649 0.010631 + 1099 -0.000367 -0.008657 0.004003 + 1100 0.006810 -0.008282 0.003316 + 1101 -0.008301 -0.011638 -0.006525 + 1102 -0.001900 -0.008810 0.001531 + 1103 0.003628 0.008111 0.009571 + 1104 0.017147 0.000173 0.003988 + 1105 0.006161 0.005444 0.001389 + 1106 -0.033784 0.028714 -0.002486 + 1107 0.022179 0.015181 0.025221 + 1108 0.002935 0.001125 -0.009560 + 1109 0.013392 0.009490 0.002655 + 1110 0.015380 -0.002935 -0.004728 + 1111 0.002760 -0.001052 0.002516 + 1112 -0.006737 0.002302 0.012384 + 1113 -0.004649 -0.009652 -0.009326 + 1114 -0.003333 0.004385 -0.006004 + 1115 -0.014175 0.007089 0.000199 + 1116 0.009875 0.004925 0.012791 + 1117 -0.004828 0.000366 0.001718 + 1118 0.009618 -0.007069 -0.012330 + 1119 -0.021489 -0.009155 -0.001603 + 1120 -0.001360 0.002089 -0.003585 + 1121 0.003530 -0.001847 0.010254 + 1122 0.016468 0.005240 -0.014692 + 1123 0.001989 -0.000949 0.003286 + 1124 0.022107 -0.012110 -0.007316 + 1125 0.012518 -0.010337 0.015891 + 1126 0.000850 -0.001413 -0.001737 + 1127 -0.014943 0.000360 -0.000490 + 1128 -0.027983 -0.005206 0.004037 + 1129 0.011232 0.000349 -0.006679 + 1130 -0.005484 -0.003095 -0.004430 + 1131 -0.005050 -0.002005 -0.015837 + 1132 -0.000470 0.001924 0.001131 + 1133 -0.016506 0.005240 0.008171 + 1134 0.011977 -0.012388 0.003671 + 1135 -0.000818 0.001081 0.001571 + 1136 0.009956 -0.006601 -0.002667 + 1137 -0.013344 0.009962 -0.000602 + 1138 -0.004379 0.004681 0.005655 + 1139 -0.022717 0.009805 -0.016911 + 1140 -0.017223 0.002867 0.018671 + 1141 -0.000339 -0.000149 -0.001276 + 1142 0.002292 0.016872 -0.004987 + 1143 -0.012964 -0.000693 -0.007140 + 1144 -0.002149 0.004008 -0.001355 + 1145 0.012575 0.018012 -0.011467 + 1146 -0.018572 0.011663 -0.005755 + 1147 0.000951 -0.000232 0.005705 + 1148 0.001030 -0.002411 0.005162 + 1149 -0.004871 0.010528 0.006213 + 1150 -0.003431 0.005236 0.003321 + 1151 -0.006083 0.008172 0.003730 + 1152 0.021201 0.002738 -0.026021 + 1153 -0.000559 -0.001274 0.002074 + 1154 -0.000342 -0.008595 -0.003314 + 1155 -0.004563 0.013150 0.001114 + 1156 0.002547 -0.003346 0.000793 + 1157 -0.004000 0.002915 0.001908 + 1158 0.008526 -0.013385 0.001263 + 1159 0.003331 -0.001629 -0.001592 + 1160 0.012216 0.004263 0.001290 + 1161 -0.024729 0.027722 0.012828 + 1162 -0.004556 0.005331 -0.000790 + 1163 -0.001260 0.004809 0.012624 + 1164 0.009151 0.007740 0.005908 + 1165 0.006739 -0.002486 0.000962 + 1166 0.002801 -0.001010 0.007063 + 1167 0.006266 -0.009780 0.000447 + 1168 -0.001756 -0.006121 -0.000399 + 1169 0.002128 0.011752 0.003187 + 1170 -0.000744 -0.004455 -0.001624 + 1171 -0.003120 -0.007987 0.008768 + 1172 -0.001279 -0.014309 0.014916 + 1173 -0.003496 -0.005392 0.006518 + 1174 -0.005252 -0.000094 0.002610 + 1175 -0.004319 0.000327 0.003799 + 1176 0.014469 -0.001407 -0.023557 + 1177 -0.001733 0.011173 0.001097 + 1178 0.019607 0.000729 -0.008577 + 1179 -0.013430 0.021297 -0.011104 + 1180 0.005550 -0.002953 -0.004489 + 1181 -0.021164 -0.004283 0.009224 + 1182 0.020762 -0.011806 0.008058 + 1183 -0.003934 -0.006346 0.000789 + 1184 -0.004154 -0.012917 -0.000804 + 1185 0.001834 -0.003234 0.006486 + 1186 -0.003359 -0.000166 0.000482 + 1187 -0.010938 -0.009570 0.011838 + 1188 -0.006339 -0.002743 -0.017319 + 1189 -0.002008 -0.000238 -0.002842 + 1190 0.009730 0.002797 -0.000255 + 1191 0.004802 0.018470 -0.005529 + 1192 0.002978 0.003254 0.000406 + 1193 0.001762 -0.016118 0.017481 + 1194 0.009625 0.005549 -0.002833 + 1195 -0.005277 -0.000015 -0.004247 + 1196 0.008535 -0.018189 -0.023760 + 1197 -0.020839 0.008581 0.007193 + 1198 0.001976 -0.001531 0.001386 + 1199 -0.012488 -0.005613 0.004418 + 1200 0.012387 0.001324 -0.002579 + 1201 0.004612 0.001574 0.002430 + 1202 0.004011 0.024078 0.008286 + 1203 0.028635 -0.001749 -0.000378 + 1204 -0.001292 -0.004163 0.001688 + 1205 0.018917 -0.005327 -0.022863 + 1206 -0.021498 0.026796 -0.015481 + 1207 -0.004360 -0.003023 -0.007483 + 1208 0.015222 -0.007834 -0.014901 + 1209 -0.015487 -0.004003 -0.024684 + 1210 0.000162 -0.000232 -0.002511 + 1211 0.005663 0.001759 0.003041 + 1212 -0.026577 0.001752 0.009499 + 1213 -0.002118 -0.004800 0.002106 + 1214 0.012772 0.013880 -0.004149 + 1215 0.008831 0.004495 0.004278 + 1216 -0.001002 0.000396 0.000450 + 1217 0.001493 -0.000300 0.006615 + 1218 0.022789 -0.011336 -0.001626 + 1219 -0.002165 0.002305 -0.004399 + 1220 -0.001727 0.010653 0.006150 + 1221 0.001799 -0.000399 -0.015101 + 1222 -0.002535 -0.001664 0.000167 + 1223 -0.007939 0.009699 -0.003581 + 1224 -0.009214 -0.009452 -0.003331 + 1225 -0.002745 0.003249 0.011490 + 1226 0.010727 -0.015563 0.011870 + 1227 -0.003771 0.013856 -0.015486 + 1228 -0.000932 0.001513 0.000721 + 1229 -0.002528 0.000192 0.015301 + 1230 -0.027023 -0.007231 0.009659 + 1231 -0.005525 0.001099 -0.001369 + 1232 -0.002318 -0.008510 -0.009719 + 1233 -0.005945 -0.008347 0.009845 + 1234 -0.000817 -0.006097 -0.001394 + 1235 0.026844 0.005400 -0.013998 + 1236 -0.019837 0.017329 -0.010038 + 1237 -0.002691 -0.005371 -0.000786 + 1238 -0.007304 -0.006372 0.007409 + 1239 -0.014066 -0.005252 0.014237 + 1240 -0.000660 -0.004157 -0.007445 + 1241 -0.015343 -0.015681 0.000525 + 1242 -0.004856 0.008296 -0.020506 + 1243 -0.000451 -0.006253 0.005274 + 1244 -0.016626 -0.024128 0.003146 + 1245 0.003430 -0.001516 0.006995 + 1246 0.002369 0.000761 -0.000692 + 1247 -0.011034 0.017913 -0.003576 + 1248 0.014886 0.005052 0.010870 + 1249 0.000976 0.003044 0.004043 + 1250 0.002084 0.009119 -0.003484 + 1251 -0.004682 -0.003095 0.024419 + 1252 -0.001872 0.005519 -0.003878 + 1253 0.014045 0.004474 0.006660 + 1254 -0.006683 -0.012923 -0.006357 + 1255 -0.007125 -0.002296 0.002894 + 1256 -0.009126 -0.000293 0.008175 + 1257 -0.005668 -0.002902 -0.000640 + 1258 -0.009805 0.000500 -0.001546 + 1259 -0.007254 -0.007274 0.010849 + 1260 0.005786 0.004719 0.004479 + 1261 0.000767 -0.007091 -0.002809 + 1262 -0.010861 -0.024470 -0.006678 + 1263 0.010352 0.003874 -0.018616 + 1264 -0.001332 -0.000776 -0.001533 + 1265 0.005055 -0.002761 -0.000154 + 1266 0.001293 -0.010766 0.003695 + 1267 0.004101 0.005423 0.004161 + 1268 -0.006495 -0.001645 0.007645 + 1269 0.024277 0.000761 0.018148 + 1270 0.000384 -0.004677 0.001777 + 1271 -0.000305 -0.022286 0.006378 + 1272 0.014900 -0.009298 0.005029 + 1273 -0.002201 -0.002422 -0.001266 + 1274 0.002419 0.000621 -0.006170 + 1275 0.002242 -0.003567 -0.006329 + 1276 0.001155 0.006214 -0.002164 + 1277 -0.025679 0.011598 0.001775 + 1278 -0.016652 0.005061 0.002255 + 1279 -0.000163 0.000193 -0.001041 + 1280 -0.002822 -0.004131 -0.007696 + 1281 -0.007029 0.005316 -0.012422 + 1282 -0.001259 -0.001443 0.001295 + 1283 -0.000992 -0.027820 -0.000474 + 1284 -0.012190 -0.043729 -0.008054 + 1285 -0.001840 -0.001572 0.001104 + 1286 0.008311 0.001263 -0.001841 + 1287 0.001277 0.000429 -0.007113 + 1288 -0.005029 -0.002280 -0.002761 + 1289 -0.024723 0.012515 -0.012864 + 1290 -0.013845 -0.020399 0.001674 + 1291 -0.000161 0.002303 0.004199 + 1292 -0.010956 -0.010528 0.017163 + 1293 0.023554 -0.006815 0.021159 + 1294 0.000772 -0.000829 0.004462 + 1295 0.024106 -0.007189 -0.017980 + 1296 -0.011795 0.000225 0.018351 + 1297 -0.002503 0.000288 -0.000931 + 1298 -0.001901 -0.006775 -0.001166 + 1299 -0.002626 0.004209 -0.000596 + 1300 -0.003248 -0.009856 0.001496 + 1301 -0.008616 0.000206 -0.000660 + 1302 0.012991 -0.001944 0.010735 + 1303 0.000183 0.003767 -0.002207 + 1304 0.002875 0.006021 0.006091 + 1305 -0.003343 -0.008883 0.015455 + 1306 -0.003761 0.009400 -0.007147 + 1307 -0.002601 -0.012510 0.005900 + 1308 -0.013464 0.021935 0.006364 + 1309 0.007717 -0.006568 -0.004280 + 1310 0.004551 -0.013432 0.001741 + 1311 0.016676 -0.009730 -0.005415 + 1312 -0.003518 -0.000115 0.000120 + 1313 -0.018566 -0.004441 0.007076 + 1314 0.011422 0.004168 0.013848 + 1315 -0.002232 0.003004 -0.005210 + 1316 -0.004985 -0.000655 -0.007286 + 1317 -0.004756 0.005461 -0.010032 + 1318 0.003296 -0.000345 0.003797 + 1319 0.000013 0.003387 0.009258 + 1320 -0.001175 0.009021 0.016554 + 1321 0.004610 0.000563 0.001890 + 1322 0.001511 0.004957 0.010795 + 1323 -0.000517 0.009529 0.012695 + 1324 0.003561 -0.002127 -0.002139 + 1325 -0.016355 -0.004573 0.011414 + 1326 0.002437 -0.000969 0.003958 + 1327 -0.003191 0.002772 0.003706 + 1328 0.002188 0.004078 0.024902 + 1329 0.005804 0.008997 0.000514 + 1330 0.000169 -0.001823 0.006601 + 1331 -0.012837 0.016738 0.032499 + 1332 -0.003787 -0.003993 0.005792 + 1333 -0.006500 -0.001952 -0.005568 + 1334 0.004632 0.002607 -0.001417 + 1335 0.007826 -0.018417 0.003893 + 1336 0.001400 0.000629 -0.002329 + 1337 -0.026090 -0.010827 -0.007428 + 1338 0.014757 0.003359 0.005866 + 1339 0.005344 0.002452 0.000637 + 1340 0.002304 0.001516 0.008371 + 1341 0.003116 0.003502 0.000920 + 1342 0.000219 0.006872 -0.006361 + 1343 0.004872 0.004948 -0.015461 + 1344 0.002293 0.008990 -0.007103 + 1345 -0.000248 -0.001405 -0.000404 + 1346 0.016050 0.005473 0.014883 + 1347 0.000661 0.010958 0.009762 + 1348 0.002507 0.004854 0.004016 + 1349 -0.000026 0.005865 -0.004933 + 1350 -0.003541 0.012071 0.011984 + 1351 -0.000388 -0.001662 -0.002624 + 1352 -0.008781 0.002236 0.005933 + 1353 -0.002303 0.010321 -0.013971 + 1354 0.000266 0.005381 0.006218 + 1355 -0.030793 -0.017551 0.006520 + 1356 -0.001710 0.006198 0.003481 + 1357 -0.000575 0.000387 0.003498 + 1358 0.011844 0.006387 0.013823 + 1359 -0.004149 -0.001630 0.001064 + 1360 0.002966 -0.001211 -0.000529 + 1361 0.011026 0.001160 0.001568 + 1362 0.015143 -0.001234 0.000065 + 1363 0.000976 0.001952 -0.002769 + 1364 0.013527 0.011152 0.001594 + 1365 -0.000179 -0.000211 -0.002554 + 1366 -0.005351 -0.004969 -0.002979 + 1367 -0.006889 0.021662 -0.005435 + 1368 -0.002462 0.016113 0.008657 + 1369 -0.000975 0.000751 -0.000755 + 1370 -0.003243 0.006738 -0.001393 + 1371 -0.002267 -0.000779 0.003167 + 1372 0.001566 -0.003190 -0.000583 + 1373 -0.002018 -0.005136 0.012563 + 1374 -0.006828 0.007134 0.011132 + 1375 0.005244 -0.004715 -0.003319 + 1376 -0.010064 -0.001392 0.024842 + 1377 -0.003331 -0.012180 0.011450 + 1378 0.005044 -0.003538 0.000197 + 1379 0.014932 -0.005316 0.014871 + 1380 0.002959 -0.015155 -0.010790 + 1381 0.004288 0.003508 0.003045 + 1382 0.010516 0.006731 0.001181 + 1383 0.003157 0.002004 0.039661 + 1384 -0.003464 -0.000341 -0.002519 + 1385 0.000767 -0.010574 0.002375 + 1386 0.012132 0.009405 0.005728 + 1387 -0.002537 0.005096 -0.000141 + 1388 0.008455 -0.000335 0.003398 + 1389 0.000567 0.012932 0.006368 + 1390 0.007440 -0.002304 0.001444 + 1391 0.003946 0.007849 -0.005030 + 1392 0.012038 -0.016280 0.007159 + 1393 -0.001061 -0.002610 -0.000083 + 1394 0.010905 -0.006613 -0.001941 + 1395 -0.013885 -0.027620 0.005494 + 1396 0.013746 0.003525 0.007163 + 1397 0.003586 0.002644 -0.010792 + 1398 0.018544 0.013850 0.017322 + 1399 0.004571 0.000027 -0.001760 + 1400 0.012220 0.001858 -0.006751 + 1401 0.009850 -0.002003 0.019339 + 1402 -0.001383 0.002281 -0.007042 + 1403 -0.003363 0.001654 -0.017801 + 1404 0.011330 0.009635 0.005470 + 1405 0.000650 -0.001098 -0.005942 + 1406 0.005198 -0.008028 -0.003832 + 1407 0.017668 -0.005738 0.026099 + 1408 -0.001891 0.001162 0.003476 + 1409 -0.003537 0.018838 0.000972 + 1410 0.007980 0.016250 0.030292 + 1411 -0.001348 0.000197 0.004181 + 1412 -0.002255 -0.008393 -0.001355 + 1413 -0.008567 -0.008184 -0.000151 + 1414 -0.001145 0.001777 -0.004250 + 1415 -0.002565 -0.000609 -0.002622 + 1416 0.017182 0.009342 -0.008899 + 1417 -0.000336 -0.000833 -0.006619 + 1418 0.006594 -0.014023 -0.011705 + 1419 -0.010047 -0.002912 -0.003804 + 1420 0.005759 0.000406 0.005233 + 1421 -0.013174 -0.018780 -0.002966 + 1422 -0.003551 -0.005212 0.011087 + 1423 -0.001811 -0.005836 -0.002120 + 1424 -0.008296 0.022099 0.012646 + 1425 0.010130 0.006059 0.033707 + 1426 0.001039 -0.001025 -0.000459 + 1427 0.004468 0.000527 0.001539 + 1428 -0.001728 -0.005304 0.003140 + 1429 -0.000141 -0.003112 0.003400 + 1430 0.007530 -0.026022 0.005020 + 1431 -0.011982 0.032142 -0.001998 + 1432 -0.001642 0.003923 -0.003350 + 1433 0.016086 -0.002664 -0.005695 + 1434 -0.010354 0.000136 0.021071 + 1435 0.001502 -0.001507 0.005856 + 1436 -0.003359 -0.017617 -0.013060 + 1437 -0.001621 -0.013764 -0.008355 + 1438 -0.006074 0.001165 0.001910 + 1439 -0.004946 0.003618 0.011324 + 1440 -0.007761 0.002697 -0.006763 + 1441 -0.009332 0.000898 0.000750 + 1442 -0.017083 -0.010335 0.011191 + 1443 0.020780 0.013466 -0.015083 + 1444 -0.008140 -0.008032 -0.000180 + 1445 -0.001836 -0.008988 0.003973 + 1446 -0.008280 -0.004548 -0.003224 + 1447 0.000996 -0.002062 -0.001184 + 1448 -0.001863 -0.012096 0.003957 + 1449 -0.027050 0.007989 0.002157 + 1450 -0.001321 -0.000325 0.001355 + 1451 -0.006885 -0.000536 -0.022446 + 1452 0.008792 -0.007975 0.003329 + 1453 -0.003682 -0.004782 -0.002567 + 1454 -0.001180 -0.009011 0.018662 + 1455 -0.000958 -0.004899 0.013723 + 1456 0.000545 0.011919 -0.001753 + 1457 0.023799 0.010298 -0.002649 + 1458 0.014717 0.007757 -0.005400 + 1459 -0.004576 -0.007691 0.001365 + 1460 -0.006577 -0.016846 -0.022862 + 1461 -0.005206 0.003687 0.012428 + 1462 0.001923 -0.004758 -0.001993 + 1463 0.006600 0.017503 0.006935 + 1464 -0.006747 -0.003482 -0.000067 + 1465 0.000613 0.004580 0.004038 + 1466 -0.001945 0.022605 -0.000652 + 1467 0.017624 -0.001392 0.003829 + 1468 -0.003065 -0.003003 -0.000747 + 1469 -0.012664 -0.016566 -0.007030 + 1470 0.008660 -0.008358 0.004763 + 1471 -0.004008 0.000421 -0.006040 + 1472 0.003555 0.008566 -0.015842 + 1473 -0.001032 0.001700 -0.010204 + 1474 -0.000556 0.000599 0.003074 + 1475 0.001542 0.002939 0.005269 + 1476 -0.005281 -0.001944 0.003338 + 1477 -0.000195 -0.000293 -0.001004 + 1478 -0.009991 -0.005354 -0.013386 + 1479 -0.000476 -0.017594 0.007900 + 1480 0.000550 -0.000431 0.001422 + 1481 0.018094 -0.005183 0.016234 + 1482 0.010706 0.011668 -0.017772 + 1483 0.001291 0.006499 0.000951 + 1484 0.009985 -0.016962 0.009714 + 1485 0.020849 0.018365 -0.008351 + 1486 0.006940 0.004692 -0.002409 + 1487 0.022308 0.010182 -0.022897 + 1488 0.000269 0.008847 0.011834 + 1489 0.002051 0.007334 -0.000125 + 1490 -0.023048 0.013759 -0.030276 + 1491 0.023523 -0.005817 0.007754 + 1492 -0.001269 0.002979 0.001311 + 1493 -0.005596 0.006174 0.011007 + 1494 -0.009061 0.022719 0.002133 + 1495 -0.001128 0.004307 -0.002381 + 1496 -0.004340 0.013891 -0.003505 + 1497 0.001822 -0.005505 -0.001135 + 1498 -0.000910 0.001437 0.000165 + 1499 0.004510 -0.000360 -0.006425 + 1500 0.003993 0.000498 0.007321 + 1501 -0.002868 -0.000316 -0.000509 + 1502 0.000620 0.011286 0.008461 + 1503 -0.013079 -0.008157 0.007561 + 1504 -0.003002 0.003413 0.004968 + 1505 0.015262 -0.005133 0.012052 + 1506 -0.003968 -0.003643 0.003514 + 1507 0.005087 -0.001882 -0.000518 + 1508 0.000932 -0.002238 0.000800 + 1509 -0.008149 0.000695 -0.000827 + 1510 -0.001261 -0.003375 0.000333 + 1511 -0.001224 -0.004135 -0.003080 + 1512 0.009246 -0.010372 0.026354 + 1513 0.000697 -0.003200 0.001222 + 1514 -0.002319 0.003800 0.022860 + 1515 -0.018205 0.011600 -0.011416 + 1516 -0.001731 -0.001076 0.002612 + 1517 -0.004661 -0.010783 -0.001505 + 1518 0.016208 0.002810 0.004482 + 1519 0.003508 -0.001750 0.002537 + 1520 0.024576 -0.026041 -0.004083 + 1521 -0.019140 0.000844 0.001909 + 1522 -0.000341 0.001152 0.001967 + 1523 -0.020076 0.003364 0.001315 + 1524 -0.000942 0.000692 -0.003283 + 1525 -0.006519 -0.000419 0.000991 + 1526 -0.004033 0.006531 0.004791 + 1527 0.005626 0.012187 -0.014266 + 1528 0.001113 -0.004253 0.011930 + 1529 -0.010144 0.003567 0.009059 + 1530 -0.003464 0.001115 0.011591 + 1531 0.000006 0.000074 0.005751 + 1532 0.003604 0.008464 0.010627 + 1533 -0.004351 -0.009621 -0.000453 + 1534 -0.000196 -0.001160 0.002795 + 1535 -0.006855 0.001414 0.005552 + 1536 -0.000894 -0.002102 0.005053 + 1537 -0.002040 -0.005887 -0.003590 + 1538 -0.006852 -0.011947 -0.023080 + 1539 -0.016070 0.000160 0.010390 + 1540 0.004712 0.002848 -0.002998 + 1541 -0.004259 0.007840 0.008142 + 1542 -0.004861 0.004263 0.011728 + 1543 0.006968 -0.004871 0.004119 + 1544 -0.016558 -0.002046 -0.006090 + 1545 -0.006229 0.004475 0.001436 + 1546 -0.002341 -0.004733 -0.003946 + 1547 0.003563 0.004733 0.009615 + 1548 -0.013018 0.004747 -0.004733 + 1549 0.001703 -0.000331 0.003605 + 1550 0.005459 -0.002653 -0.012447 + 1551 0.013689 0.008625 -0.003301 + 1552 0.003195 0.001205 -0.000779 + 1553 -0.003336 -0.011439 -0.004979 + 1554 0.001015 0.018568 -0.007361 + 1555 -0.001647 -0.003759 0.001214 + 1556 0.015583 -0.016961 0.000384 + 1557 -0.011138 -0.013161 -0.015913 + 1558 0.005848 -0.002193 -0.007682 + 1559 0.009577 -0.005765 0.010025 + 1560 0.006984 0.005858 -0.020668 + 1561 -0.005040 0.001396 0.001932 + 1562 0.007071 0.009231 0.007700 + 1563 0.001743 0.005137 0.005850 + 1564 0.001857 0.002145 -0.004455 + 1565 -0.007462 0.014047 -0.012730 + 1566 0.013730 -0.006385 0.009586 + 1567 -0.002000 0.003453 -0.001882 + 1568 -0.009622 -0.007424 -0.003371 + 1569 -0.006993 -0.018224 -0.006858 + 1570 0.001461 0.001281 -0.002568 + 1571 0.018901 0.002357 0.001811 + 1572 -0.001592 0.019333 -0.002732 + 1573 -0.001308 -0.005730 -0.002519 + 1574 -0.014074 0.007287 0.021518 + 1575 -0.017324 -0.018775 -0.005647 + 1576 0.002340 -0.001593 0.004994 + 1577 -0.000516 0.003608 0.002676 + 1578 -0.014840 -0.017283 -0.001508 + 1579 -0.001557 -0.002471 -0.002555 + 1580 0.016654 -0.033672 0.006595 + 1581 0.013351 -0.030070 0.003443 + 1582 0.003752 0.001449 0.001862 + 1583 -0.011257 -0.002704 0.007355 + 1584 0.002139 0.006577 0.012771 + 1585 0.002251 0.002492 -0.002180 + 1586 0.010691 -0.005615 -0.001517 + 1587 -0.018738 0.016070 0.006914 + 1588 -0.001600 0.000180 0.001378 + 1589 0.004891 -0.007732 -0.013906 + 1590 -0.015149 0.011285 0.002913 + 1591 0.003944 -0.001162 -0.002407 + 1592 -0.013220 -0.006427 -0.006873 + 1593 -0.008388 0.022805 -0.011588 + 1594 0.000621 -0.004836 0.005509 + 1595 0.006148 -0.013451 0.002326 + 1596 -0.001161 -0.012639 -0.002024 + 1597 -0.005042 0.000613 0.003072 + 1598 -0.002560 -0.009516 -0.007164 + 1599 -0.007736 0.003315 0.007824 + 1600 -0.002409 -0.002549 -0.003082 + 1601 -0.002839 0.004415 -0.008830 + 1602 -0.006633 -0.001003 -0.004060 + 1603 -0.004810 -0.007495 -0.004047 + 1604 0.005200 -0.017270 0.009101 + 1605 0.000670 -0.009280 -0.012848 + 1606 -0.003830 0.001924 -0.002728 + 1607 -0.035525 0.007821 -0.020602 + 1608 0.016575 -0.019547 -0.006176 + 1609 0.003828 0.000099 -0.002605 + 1610 0.017387 0.007652 0.014875 + 1611 0.012190 0.014852 0.016071 + 1612 -0.003436 0.002187 -0.001035 + 1613 -0.005586 -0.003901 0.006033 + 1614 -0.005884 -0.005331 -0.011796 + 1615 -0.001799 -0.005019 0.004011 + 1616 0.002094 -0.028579 0.008471 + 1617 0.023334 0.020189 0.016696 + 1618 -0.000653 -0.003079 -0.001689 + 1619 -0.005925 -0.004542 -0.007489 + 1620 0.003980 0.000361 0.005598 + 1621 -0.000999 0.004025 -0.003724 + 1622 0.000058 0.024442 0.006515 + 1623 0.011473 -0.013431 0.004073 + 1624 0.002923 -0.003314 0.001931 + 1625 0.003377 -0.006029 -0.008704 + 1626 0.002413 0.015094 0.010447 + 1627 0.003654 -0.000619 -0.001261 + 1628 -0.004232 -0.000930 0.001384 + 1629 0.019160 0.000313 -0.006734 + 1630 0.003534 0.002394 -0.000501 + 1631 -0.008068 0.002953 0.008451 + 1632 0.014612 0.006975 -0.004278 + 1633 0.001620 0.003004 0.003226 + 1634 -0.007605 -0.007788 0.011245 + 1635 0.020296 -0.014907 -0.003043 + 1636 -0.002678 -0.006261 0.001869 + 1637 -0.007968 -0.013586 -0.003793 + 1638 -0.015202 -0.007224 -0.014352 + 1639 -0.005816 -0.003019 0.006480 + 1640 -0.001607 -0.004084 0.006246 + 1641 0.008520 -0.008049 0.002824 + 1642 -0.000658 -0.004008 -0.000300 + 1643 -0.000444 0.000650 -0.012168 + 1644 -0.006399 -0.006883 0.005254 + 1645 -0.001317 0.006093 0.001522 + 1646 -0.010770 -0.004270 -0.010989 + 1647 -0.005520 0.020979 0.012203 + 1648 -0.004763 0.001957 0.003649 + 1649 -0.010531 0.001095 0.022741 + 1650 0.001695 -0.009764 -0.029750 + 1651 0.000561 0.003660 0.004562 + 1652 0.004814 -0.011887 -0.011791 + 1653 0.015151 -0.017660 -0.020515 + 1654 -0.003720 -0.008154 0.002101 + 1655 -0.006836 0.005342 0.006830 + 1656 -0.008891 -0.005752 0.002656 + 1657 -0.004211 -0.006534 0.001470 + 1658 0.024344 -0.009232 0.001415 + 1659 -0.010793 -0.032076 -0.013330 + 1660 -0.000393 0.010082 -0.000260 + 1661 -0.003386 0.024037 -0.002341 + 1662 0.005231 -0.007154 0.002310 + 1663 0.004778 0.000685 -0.001247 + 1664 0.006845 -0.000146 -0.002439 + 1665 0.002831 0.001509 -0.001312 + 1666 -0.004575 0.002015 0.002231 + 1667 -0.008714 0.004773 0.019310 + 1668 -0.009036 0.006437 0.017025 + 1669 -0.001102 -0.003004 0.003294 + 1670 0.004690 0.016121 0.007181 + 1671 -0.000881 -0.003815 0.001639 + 1672 -0.000053 -0.001708 0.002633 + 1673 -0.004620 0.003536 0.000715 + 1674 -0.002636 -0.005429 0.007498 + 1675 0.002307 0.001406 0.002665 + 1676 -0.005270 -0.001969 0.007587 + 1677 0.001417 -0.009022 -0.021912 + 1678 0.000203 0.002930 -0.002177 + 1679 0.003819 0.012652 -0.002939 + 1680 -0.001040 0.005171 0.022221 + 1681 -0.001765 0.004140 -0.001020 + 1682 0.015888 -0.002384 -0.000464 + 1683 -0.019573 0.014814 -0.003047 + 1684 -0.002840 -0.000626 0.000097 + 1685 0.019011 -0.004434 -0.031132 + 1686 -0.011722 0.011711 0.019623 + 1687 -0.000720 0.008278 0.001232 + 1688 -0.000014 -0.005707 0.005722 + 1689 0.006445 -0.004607 0.004541 + 1690 -0.008451 -0.005406 -0.003097 + 1691 -0.025859 -0.004092 0.011942 + 1692 0.003198 0.017013 -0.015979 + 1693 0.001237 0.005482 0.001012 + 1694 -0.003233 0.012773 -0.012817 + 1695 -0.013658 -0.008102 0.007350 + 1696 0.004867 0.002547 -0.001769 + 1697 0.019074 -0.004173 0.005165 + 1698 0.008487 0.001064 0.000080 + 1699 0.002766 -0.001251 -0.001561 + 1700 -0.019200 0.027169 -0.007481 + 1701 0.006036 -0.028485 -0.009388 + 1702 -0.005460 0.002563 0.001784 + 1703 -0.017462 0.006398 0.005231 + 1704 -0.014453 0.005484 0.004388 + 1705 0.002956 -0.001348 0.006512 + 1706 0.009654 0.004653 0.025184 + 1707 0.006226 -0.001478 -0.018062 + 1708 0.003757 -0.000921 -0.000401 + 1709 0.004307 -0.009700 -0.007768 + 1710 0.003780 -0.012914 0.008582 + 1711 0.004846 -0.002032 -0.000808 + 1712 -0.000823 -0.002500 -0.004619 + 1713 0.014769 -0.010350 0.008970 + 1714 -0.001580 -0.000837 0.000021 + 1715 -0.002003 -0.002972 -0.000158 + 1716 -0.004469 -0.000404 0.001257 + 1717 -0.001782 0.001231 -0.003624 + 1718 -0.009550 0.008477 -0.006010 + 1719 -0.003240 -0.001801 -0.002707 + 1720 -0.003131 -0.002749 -0.002782 + 1721 -0.003319 -0.008008 -0.009572 + 1722 -0.003280 -0.008289 -0.009069 + 1723 -0.006776 0.001807 0.000809 + 1724 0.000630 0.005359 0.003033 + 1725 0.016012 0.013546 0.014364 + 1726 -0.005383 0.003683 -0.001052 + 1727 -0.000343 -0.021814 -0.000655 + 1728 0.015975 0.004809 -0.015863 + 1729 -0.002843 0.002136 0.000031 + 1730 0.008511 0.002265 -0.002748 + 1731 -0.026285 -0.002274 -0.004757 + 1732 0.005294 -0.003565 0.004694 + 1733 -0.002668 0.001103 -0.001112 + 1734 -0.009429 0.006969 -0.008965 + 1735 -0.001634 0.000110 0.001819 + 1736 -0.004942 0.001203 -0.007254 + 1737 -0.002655 0.002573 -0.003610 + 1738 -0.004831 0.005860 0.001407 + 1739 -0.014232 0.009476 0.016389 + 1740 -0.017895 0.005674 -0.009379 + 1741 0.003013 -0.002508 -0.001228 + 1742 0.000746 0.006449 -0.005992 + 1743 0.006650 -0.002762 0.000152 + 1744 0.002550 -0.008457 0.001324 + 1745 -0.001868 -0.010233 -0.023525 + 1746 0.003968 -0.007880 0.008439 + 1747 -0.000591 0.004322 -0.003592 + 1748 -0.014424 0.009132 0.003708 + 1749 0.012052 -0.004950 -0.011581 + 1750 0.001849 0.003842 -0.009164 + 1751 0.009453 -0.005684 -0.004817 + 1752 0.001564 0.018776 -0.004831 + 1753 0.000794 0.000968 -0.001710 + 1754 -0.003816 -0.004723 -0.000498 + 1755 -0.011972 0.005633 -0.006975 + 1756 -0.004635 0.005064 -0.004764 + 1757 -0.010722 0.012077 -0.027297 + 1758 -0.003376 0.000707 0.006078 + 1759 0.001092 0.005159 -0.000557 + 1760 0.014326 0.002844 -0.021424 + 1761 0.019579 -0.002405 -0.009532 + 1762 -0.000565 0.006632 0.002294 + 1763 -0.025047 0.006219 0.001583 + 1764 -0.004637 -0.007484 0.007079 + 1765 0.002563 -0.001616 -0.003316 + 1766 -0.001239 0.014897 -0.002355 + 1767 -0.001256 -0.009226 0.009450 + 1768 0.001056 0.005329 -0.003831 + 1769 -0.012555 0.037676 0.021233 + 1770 -0.005969 -0.003116 -0.014248 + 1771 0.000691 0.001302 0.002405 + 1772 -0.015733 0.001224 -0.004288 + 1773 0.006783 0.015986 -0.003342 + 1774 0.002355 0.002897 -0.002965 + 1775 -0.000435 0.005789 0.007980 + 1776 0.014211 0.000855 -0.014841 + 1777 -0.004596 -0.002169 0.000774 + 1778 0.002630 -0.027237 0.012553 + 1779 -0.000727 -0.003394 -0.009924 + 1780 0.001821 -0.001310 0.000540 + 1781 0.005476 -0.002057 0.001588 + 1782 0.008060 0.013457 -0.013767 + 1783 0.003078 -0.007047 0.009501 + 1784 -0.004392 -0.004982 0.015684 + 1785 -0.021173 -0.003917 -0.003013 + 1786 0.001492 -0.007162 -0.003460 + 1787 0.020179 0.025050 0.005018 + 1788 -0.018378 -0.021938 0.007656 + 1789 -0.000363 0.004076 -0.003991 + 1790 0.012179 0.023942 -0.003853 + 1791 0.002207 0.011773 0.006443 + 1792 0.001993 0.000538 0.002365 + 1793 0.008602 -0.013779 -0.007218 + 1794 0.007374 0.001122 0.001108 + 1795 0.003207 -0.011319 -0.004081 + 1796 0.010332 -0.007827 -0.001929 + 1797 0.001869 0.022609 0.012256 + 1798 0.001101 0.003835 0.002357 + 1799 -0.003624 0.011759 0.002745 + 1800 0.001557 -0.002337 -0.004179 + 1801 0.003327 -0.001910 -0.005250 + 1802 0.011996 0.003017 0.013309 + 1803 -0.013682 -0.002775 -0.008939 + 1804 -0.002064 -0.000934 0.000427 + 1805 -0.012146 0.024406 -0.015171 + 1806 0.005030 -0.019570 0.004311 + 1807 0.003003 0.004365 0.002257 + 1808 0.000823 0.000086 -0.005161 + 1809 -0.003001 0.001206 0.008241 + 1810 0.005602 -0.001423 0.002945 + 1811 0.000330 0.001483 -0.011075 + 1812 0.003652 0.009252 -0.000166 + 1813 0.004531 -0.000860 -0.000170 + 1814 0.018728 0.013621 0.031510 + 1815 0.011579 -0.009257 -0.004100 + 1816 0.002862 0.000330 -0.002342 + 1817 -0.003456 -0.001426 -0.004566 + 1818 -0.006589 0.018593 0.018322 + 1819 -0.001663 0.002113 0.003120 + 1820 0.002523 0.005185 0.010725 + 1821 -0.006456 -0.005159 0.018366 + 1822 -0.000677 -0.000638 0.005530 + 1823 0.006499 0.011396 0.003392 + 1824 0.000945 -0.008826 -0.007441 + 1825 -0.002582 0.001006 0.000170 + 1826 -0.000739 0.010378 -0.012944 + 1827 -0.004082 -0.009693 0.012271 + 1828 -0.002259 -0.002179 0.001812 + 1829 0.004365 0.028602 0.007523 + 1830 -0.001047 0.006781 -0.010318 + 1831 0.003053 0.002227 0.004523 + 1832 -0.004297 -0.007295 0.001900 + 1833 0.002925 0.002066 0.004473 + 1834 0.003171 0.000025 0.002189 + 1835 0.001188 0.002838 0.001014 + 1836 0.006142 0.003073 -0.003689 + 1837 0.009818 0.005253 0.006222 + 1838 0.013907 -0.003607 0.006764 + 1839 -0.000327 0.015573 -0.010930 + 1840 -0.003110 -0.005538 0.000400 + 1841 0.006244 -0.021206 -0.003853 + 1842 -0.010299 0.008474 0.021147 + 1843 -0.001053 -0.000598 0.004581 + 1844 -0.013621 0.002557 -0.003175 + 1845 -0.002495 0.000789 0.011106 + 1846 -0.000137 -0.004006 -0.000014 + 1847 -0.017819 -0.013981 0.011316 + 1848 -0.005844 -0.000863 -0.025248 + 1849 -0.002799 0.002996 -0.002499 + 1850 -0.012455 0.012490 -0.004469 + 1851 0.010514 0.009490 -0.009495 + 1852 -0.000560 -0.004144 -0.000656 + 1853 -0.007255 0.002559 0.003817 + 1854 0.004602 -0.007276 0.003469 + 1855 0.000128 0.001144 -0.008402 + 1856 0.008157 0.001721 -0.014464 + 1857 -0.004034 0.002739 -0.008982 + 1858 0.002856 0.004731 -0.003812 + 1859 0.008481 -0.004184 -0.015612 + 1860 -0.004966 0.006658 -0.006541 + 1861 0.005415 -0.007185 0.002622 + 1862 -0.000791 0.004294 0.012806 + 1863 0.006266 -0.008943 0.000048 + 1864 -0.004891 -0.000259 0.002435 + 1865 0.000775 -0.012600 0.009738 + 1866 -0.000239 0.020688 0.014963 + 1867 0.007752 0.006605 0.003522 + 1868 0.005559 0.005449 0.004823 + 1869 0.001382 0.020031 -0.009484 + 1870 0.000269 -0.000837 -0.001948 + 1871 -0.015324 0.006379 0.032972 + 1872 -0.010895 -0.006739 0.002233 + 1873 0.002406 -0.005817 -0.007929 + 1874 0.011974 0.013774 0.020789 + 1875 -0.005616 -0.012309 -0.023698 + 1876 -0.002712 -0.000118 0.000894 + 1877 -0.000559 -0.018665 -0.005699 + 1878 -0.022904 -0.016730 0.007620 + 1879 -0.006235 -0.000119 -0.005440 + 1880 -0.008616 0.001720 0.002602 + 1881 -0.019263 0.001295 0.018377 + 1882 -0.002493 0.002824 -0.002915 + 1883 0.007384 0.000692 0.003462 + 1884 -0.019228 -0.005451 0.005676 + 1885 0.002956 0.004628 -0.002177 + 1886 0.005617 0.021792 -0.005623 + 1887 -0.010771 -0.007154 -0.002600 + 1888 -0.006932 -0.006388 0.001795 + 1889 -0.026638 0.002211 0.017012 + 1890 -0.006429 -0.013703 0.021233 + 1891 0.004179 0.001508 -0.002942 + 1892 -0.015358 0.009799 -0.025507 + 1893 -0.009827 0.001263 -0.015038 + 1894 0.002515 0.004808 -0.006083 + 1895 -0.001395 -0.005178 0.010798 + 1896 0.005498 0.001296 -0.013456 + 1897 -0.006679 0.000004 0.000833 + 1898 -0.006339 0.003210 0.000555 + 1899 -0.007815 -0.000155 0.006317 + 1900 -0.003334 -0.000730 -0.000139 + 1901 -0.003197 -0.021225 -0.009098 + 1902 0.003310 -0.008203 -0.004863 + 1903 -0.007379 0.001152 -0.003847 + 1904 -0.008175 0.003836 -0.004939 + 1905 -0.007216 0.002039 -0.012076 + 1906 -0.002751 -0.006050 -0.001404 + 1907 -0.005827 0.008129 0.005351 + 1908 0.010377 0.010628 0.018761 + 1909 -0.002571 -0.007065 0.006215 + 1910 -0.004848 -0.014622 0.001577 + 1911 -0.004351 -0.002361 0.020679 + 1912 0.006139 0.001291 0.002464 + 1913 0.004939 0.003608 0.002097 + 1914 0.004274 0.000152 0.002451 + 1915 0.002989 0.000832 -0.000352 + 1916 -0.014159 -0.000914 0.002187 + 1917 0.012237 -0.003167 0.009134 + 1918 -0.004575 -0.001662 0.000082 + 1919 -0.007883 -0.002056 0.002571 + 1920 -0.003336 -0.001305 -0.000658 + 1921 0.004366 0.000439 0.001158 + 1922 -0.000155 0.003368 0.010592 + 1923 -0.014972 -0.009424 -0.018312 + 1924 -0.000613 -0.002374 0.000797 + 1925 0.007460 -0.016336 -0.000977 + 1926 -0.006787 0.004573 0.010255 + 1927 -0.002452 -0.000122 0.000124 + 1928 -0.015584 -0.009431 -0.007285 + 1929 -0.000101 0.008080 -0.015191 + 1930 0.002197 0.002310 -0.001612 + 1931 0.016237 -0.005090 0.018070 + 1932 0.001709 -0.003220 -0.011865 + 1933 -0.001150 0.000898 0.004173 + 1934 0.000323 -0.000312 -0.014495 + 1935 0.000516 -0.000491 -0.011422 + 1936 -0.005815 -0.002965 0.000187 + 1937 0.008195 0.018425 -0.027236 + 1938 -0.010921 -0.007575 -0.002217 + 1939 -0.004740 0.002745 0.006330 + 1940 0.002035 0.006523 0.010880 + 1941 -0.012191 0.004818 0.006605 + 1942 -0.003197 -0.004418 -0.003375 + 1943 0.003590 -0.017196 0.008070 + 1944 0.004548 0.006106 0.016045 + 1945 0.005444 0.002200 0.004561 + 1946 0.004448 0.009092 -0.001577 + 1947 -0.000522 0.006033 0.006559 + 1948 0.005450 0.001267 0.002269 + 1949 0.027952 -0.012604 0.001935 + 1950 -0.004826 -0.018174 0.014813 + 1951 0.005498 -0.000626 0.001156 + 1952 0.001428 -0.010472 0.000805 + 1953 -0.010198 -0.005573 -0.014564 + 1954 0.001605 -0.006572 0.005587 + 1955 -0.002403 -0.004981 0.000460 + 1956 0.010287 -0.003414 0.005774 + 1957 -0.005679 0.003540 -0.003175 + 1958 -0.005054 0.005203 -0.002733 + 1959 -0.006462 0.003843 0.002657 + 1960 -0.006606 -0.002499 -0.001538 + 1961 0.027567 -0.002565 0.034908 + 1962 0.001905 -0.003739 -0.001134 + 1963 -0.000871 0.002779 0.006534 + 1964 -0.013473 -0.002631 0.001200 + 1965 -0.008136 0.003625 0.001725 + 1966 0.002375 -0.002767 -0.000214 + 1967 0.015603 0.001192 0.006785 + 1968 -0.008229 0.002751 0.010337 + 1969 -0.002111 -0.006139 0.006236 + 1970 0.025783 -0.003684 0.015052 + 1971 -0.008026 -0.018580 0.028847 + 1972 -0.001966 -0.005103 0.002533 + 1973 0.025504 -0.012928 0.014439 + 1974 0.015919 0.008653 -0.013047 + 1975 -0.002145 -0.003853 -0.002353 + 1976 0.020573 0.023626 0.033600 + 1977 0.002418 -0.000127 0.000258 + 1978 -0.000168 -0.002747 0.002505 + 1979 0.011847 0.007945 0.003222 + 1980 0.002222 -0.001343 0.005437 + 1981 -0.004734 0.003071 -0.000955 + 1982 0.003752 -0.001882 -0.005052 + 1983 -0.008195 0.007844 0.004577 + 1984 0.007575 0.002209 -0.000466 + 1985 -0.005510 0.009650 -0.004399 + 1986 0.018263 0.019292 -0.008157 + 1987 -0.005098 -0.001581 -0.000328 + 1988 -0.004522 -0.021884 -0.005509 + 1989 -0.001598 -0.001668 0.002704 + 1990 -0.000494 0.002205 0.012458 + 1991 0.003153 0.001522 0.015672 + 1992 -0.000092 -0.002603 0.010098 + 1993 0.001919 -0.007389 0.001539 + 1994 -0.002690 -0.003376 -0.009963 + 1995 -0.005006 0.002932 -0.001670 + 1996 -0.003089 -0.005736 0.003689 + 1997 0.010713 -0.027613 -0.023000 + 1998 -0.006878 0.009457 0.006998 + 1999 -0.001817 0.000266 -0.004238 + 2000 -0.010974 0.005190 0.000117 + 2001 -0.008937 -0.003277 0.004337 + 2002 -0.000987 -0.001334 -0.004265 + 2003 -0.022280 -0.011677 -0.018343 + 2004 -0.010076 -0.005729 -0.026032 + +Bonds + + 1 3 1 7 + 2 2 1 3 + 3 1 1 2 + 4 4 2 5 + 5 4 2 6 + 6 4 2 4 + 7 6 7 19 + 8 5 7 8 + 9 1 8 9 + 10 7 8 11 + 11 8 8 20 + 12 3 9 28 + 13 2 9 10 + 14 10 11 21 + 15 9 11 12 + 16 10 11 22 + 17 11 12 14 + 18 11 12 13 + 19 12 13 23 + 20 11 13 15 + 21 12 14 24 + 22 11 14 16 + 23 11 15 17 + 24 12 15 25 + 25 11 16 17 + 26 12 16 26 + 27 13 17 18 + 28 14 18 27 + 29 5 28 29 + 30 6 28 32 + 31 1 29 30 + 32 8 29 33 + 33 8 29 34 + 34 3 30 35 + 35 2 30 31 + 36 5 35 36 + 37 6 35 39 + 38 1 36 37 + 39 8 36 40 + 40 8 36 41 + 41 2 37 38 + 42 3 37 42 + 43 6 42 53 + 44 5 42 43 + 45 1 43 44 + 46 7 43 46 + 47 8 43 54 + 48 3 44 62 + 49 2 44 45 + 50 10 46 56 + 51 10 46 55 + 52 9 46 47 + 53 11 47 48 + 54 11 47 49 + 55 11 48 50 + 56 12 48 57 + 57 11 49 51 + 58 12 49 58 + 59 11 50 52 + 60 12 50 59 + 61 11 51 52 + 62 12 51 60 + 63 12 52 61 + 64 6 62 70 + 65 5 62 63 + 66 7 63 66 + 67 1 63 64 + 68 8 63 71 + 69 2 64 65 + 70 3 64 79 + 71 15 66 67 + 72 10 66 73 + 73 10 66 72 + 74 10 67 75 + 75 10 67 74 + 76 16 67 68 + 77 17 68 69 + 78 4 69 76 + 79 4 69 78 + 80 4 69 77 + 81 5 79 80 + 82 6 79 81 + 83 4 80 84 + 84 4 80 83 + 85 4 80 82 + 86 18 85 86 + 87 18 85 87 + 88 18 88 90 + 89 18 88 89 + 90 18 91 93 + 91 18 91 92 + 92 18 94 96 + 93 18 94 95 + 94 18 97 98 + 95 18 97 99 + 96 18 100 101 + 97 18 100 102 + 98 18 103 104 + 99 18 103 105 + 100 18 106 107 + 101 18 106 108 + 102 18 109 111 + 103 18 109 110 + 104 18 112 114 + 105 18 112 113 + 106 18 115 116 + 107 18 115 117 + 108 18 118 120 + 109 18 118 119 + 110 18 121 123 + 111 18 121 122 + 112 18 124 126 + 113 18 124 125 + 114 18 127 128 + 115 18 127 129 + 116 18 130 132 + 117 18 130 131 + 118 18 133 134 + 119 18 133 135 + 120 18 136 137 + 121 18 136 138 + 122 18 139 140 + 123 18 139 141 + 124 18 142 144 + 125 18 142 143 + 126 18 145 147 + 127 18 145 146 + 128 18 148 150 + 129 18 148 149 + 130 18 151 152 + 131 18 151 153 + 132 18 154 156 + 133 18 154 155 + 134 18 157 159 + 135 18 157 158 + 136 18 160 162 + 137 18 160 161 + 138 18 163 164 + 139 18 163 165 + 140 18 166 168 + 141 18 166 167 + 142 18 169 171 + 143 18 169 170 + 144 18 172 174 + 145 18 172 173 + 146 18 175 177 + 147 18 175 176 + 148 18 178 180 + 149 18 178 179 + 150 18 181 182 + 151 18 181 183 + 152 18 184 186 + 153 18 184 185 + 154 18 187 188 + 155 18 187 189 + 156 18 190 191 + 157 18 190 192 + 158 18 193 194 + 159 18 193 195 + 160 18 196 197 + 161 18 196 198 + 162 18 199 201 + 163 18 199 200 + 164 18 202 204 + 165 18 202 203 + 166 18 205 206 + 167 18 205 207 + 168 18 208 210 + 169 18 208 209 + 170 18 211 212 + 171 18 211 213 + 172 18 214 215 + 173 18 214 216 + 174 18 217 219 + 175 18 217 218 + 176 18 220 222 + 177 18 220 221 + 178 18 223 224 + 179 18 223 225 + 180 18 226 228 + 181 18 226 227 + 182 18 229 231 + 183 18 229 230 + 184 18 232 233 + 185 18 232 234 + 186 18 235 236 + 187 18 235 237 + 188 18 238 240 + 189 18 238 239 + 190 18 241 242 + 191 18 241 243 + 192 18 244 246 + 193 18 244 245 + 194 18 247 248 + 195 18 247 249 + 196 18 250 251 + 197 18 250 252 + 198 18 253 254 + 199 18 253 255 + 200 18 256 257 + 201 18 256 258 + 202 18 259 261 + 203 18 259 260 + 204 18 262 264 + 205 18 262 263 + 206 18 265 266 + 207 18 265 267 + 208 18 268 269 + 209 18 268 270 + 210 18 271 272 + 211 18 271 273 + 212 18 274 275 + 213 18 274 276 + 214 18 277 279 + 215 18 277 278 + 216 18 280 282 + 217 18 280 281 + 218 18 283 284 + 219 18 283 285 + 220 18 286 287 + 221 18 286 288 + 222 18 289 290 + 223 18 289 291 + 224 18 292 294 + 225 18 292 293 + 226 18 295 296 + 227 18 295 297 + 228 18 298 299 + 229 18 298 300 + 230 18 301 303 + 231 18 301 302 + 232 18 304 305 + 233 18 304 306 + 234 18 307 309 + 235 18 307 308 + 236 18 310 311 + 237 18 310 312 + 238 18 313 314 + 239 18 313 315 + 240 18 316 317 + 241 18 316 318 + 242 18 319 321 + 243 18 319 320 + 244 18 322 323 + 245 18 322 324 + 246 18 325 327 + 247 18 325 326 + 248 18 328 329 + 249 18 328 330 + 250 18 331 332 + 251 18 331 333 + 252 18 334 335 + 253 18 334 336 + 254 18 337 339 + 255 18 337 338 + 256 18 340 341 + 257 18 340 342 + 258 18 343 344 + 259 18 343 345 + 260 18 346 347 + 261 18 346 348 + 262 18 349 350 + 263 18 349 351 + 264 18 352 353 + 265 18 352 354 + 266 18 355 356 + 267 18 355 357 + 268 18 358 359 + 269 18 358 360 + 270 18 361 362 + 271 18 361 363 + 272 18 364 365 + 273 18 364 366 + 274 18 367 369 + 275 18 367 368 + 276 18 370 372 + 277 18 370 371 + 278 18 373 374 + 279 18 373 375 + 280 18 376 378 + 281 18 376 377 + 282 18 379 381 + 283 18 379 380 + 284 18 382 383 + 285 18 382 384 + 286 18 385 386 + 287 18 385 387 + 288 18 388 390 + 289 18 388 389 + 290 18 391 393 + 291 18 391 392 + 292 18 394 395 + 293 18 394 396 + 294 18 397 399 + 295 18 397 398 + 296 18 400 402 + 297 18 400 401 + 298 18 403 405 + 299 18 403 404 + 300 18 406 407 + 301 18 406 408 + 302 18 409 411 + 303 18 409 410 + 304 18 412 413 + 305 18 412 414 + 306 18 415 417 + 307 18 415 416 + 308 18 418 420 + 309 18 418 419 + 310 18 421 422 + 311 18 421 423 + 312 18 424 425 + 313 18 424 426 + 314 18 427 428 + 315 18 427 429 + 316 18 430 432 + 317 18 430 431 + 318 18 433 435 + 319 18 433 434 + 320 18 436 437 + 321 18 436 438 + 322 18 439 440 + 323 18 439 441 + 324 18 442 443 + 325 18 442 444 + 326 18 445 447 + 327 18 445 446 + 328 18 448 449 + 329 18 448 450 + 330 18 451 453 + 331 18 451 452 + 332 18 454 456 + 333 18 454 455 + 334 18 457 458 + 335 18 457 459 + 336 18 460 462 + 337 18 460 461 + 338 18 463 465 + 339 18 463 464 + 340 18 466 467 + 341 18 466 468 + 342 18 469 470 + 343 18 469 471 + 344 18 472 473 + 345 18 472 474 + 346 18 475 476 + 347 18 475 477 + 348 18 478 479 + 349 18 478 480 + 350 18 481 482 + 351 18 481 483 + 352 18 484 485 + 353 18 484 486 + 354 18 487 489 + 355 18 487 488 + 356 18 490 492 + 357 18 490 491 + 358 18 493 495 + 359 18 493 494 + 360 18 496 497 + 361 18 496 498 + 362 18 499 501 + 363 18 499 500 + 364 18 502 503 + 365 18 502 504 + 366 18 505 507 + 367 18 505 506 + 368 18 508 509 + 369 18 508 510 + 370 18 511 513 + 371 18 511 512 + 372 18 514 516 + 373 18 514 515 + 374 18 517 518 + 375 18 517 519 + 376 18 520 521 + 377 18 520 522 + 378 18 523 525 + 379 18 523 524 + 380 18 526 528 + 381 18 526 527 + 382 18 529 530 + 383 18 529 531 + 384 18 532 533 + 385 18 532 534 + 386 18 535 536 + 387 18 535 537 + 388 18 538 540 + 389 18 538 539 + 390 18 541 542 + 391 18 541 543 + 392 18 544 546 + 393 18 544 545 + 394 18 547 549 + 395 18 547 548 + 396 18 550 551 + 397 18 550 552 + 398 18 553 555 + 399 18 553 554 + 400 18 556 557 + 401 18 556 558 + 402 18 559 561 + 403 18 559 560 + 404 18 562 563 + 405 18 562 564 + 406 18 565 567 + 407 18 565 566 + 408 18 568 570 + 409 18 568 569 + 410 18 571 573 + 411 18 571 572 + 412 18 574 575 + 413 18 574 576 + 414 18 577 579 + 415 18 577 578 + 416 18 580 581 + 417 18 580 582 + 418 18 583 585 + 419 18 583 584 + 420 18 586 588 + 421 18 586 587 + 422 18 589 590 + 423 18 589 591 + 424 18 592 594 + 425 18 592 593 + 426 18 595 597 + 427 18 595 596 + 428 18 598 600 + 429 18 598 599 + 430 18 601 602 + 431 18 601 603 + 432 18 604 606 + 433 18 604 605 + 434 18 607 609 + 435 18 607 608 + 436 18 610 611 + 437 18 610 612 + 438 18 613 615 + 439 18 613 614 + 440 18 616 618 + 441 18 616 617 + 442 18 619 620 + 443 18 619 621 + 444 18 622 623 + 445 18 622 624 + 446 18 625 627 + 447 18 625 626 + 448 18 628 629 + 449 18 628 630 + 450 18 631 632 + 451 18 631 633 + 452 18 634 635 + 453 18 634 636 + 454 18 637 639 + 455 18 637 638 + 456 18 640 642 + 457 18 640 641 + 458 18 643 644 + 459 18 643 645 + 460 18 646 647 + 461 18 646 648 + 462 18 649 650 + 463 18 649 651 + 464 18 652 653 + 465 18 652 654 + 466 18 655 657 + 467 18 655 656 + 468 18 658 660 + 469 18 658 659 + 470 18 661 663 + 471 18 661 662 + 472 18 664 665 + 473 18 664 666 + 474 18 667 669 + 475 18 667 668 + 476 18 670 672 + 477 18 670 671 + 478 18 673 674 + 479 18 673 675 + 480 18 676 677 + 481 18 676 678 + 482 18 679 681 + 483 18 679 680 + 484 18 682 684 + 485 18 682 683 + 486 18 685 686 + 487 18 685 687 + 488 18 688 690 + 489 18 688 689 + 490 18 691 693 + 491 18 691 692 + 492 18 694 695 + 493 18 694 696 + 494 18 697 698 + 495 18 697 699 + 496 18 700 701 + 497 18 700 702 + 498 18 703 704 + 499 18 703 705 + 500 18 706 707 + 501 18 706 708 + 502 18 709 710 + 503 18 709 711 + 504 18 712 714 + 505 18 712 713 + 506 18 715 716 + 507 18 715 717 + 508 18 718 719 + 509 18 718 720 + 510 18 721 722 + 511 18 721 723 + 512 18 724 726 + 513 18 724 725 + 514 18 727 728 + 515 18 727 729 + 516 18 730 731 + 517 18 730 732 + 518 18 733 735 + 519 18 733 734 + 520 18 736 737 + 521 18 736 738 + 522 18 739 741 + 523 18 739 740 + 524 18 742 743 + 525 18 742 744 + 526 18 745 746 + 527 18 745 747 + 528 18 748 750 + 529 18 748 749 + 530 18 751 753 + 531 18 751 752 + 532 18 754 756 + 533 18 754 755 + 534 18 757 758 + 535 18 757 759 + 536 18 760 762 + 537 18 760 761 + 538 18 763 764 + 539 18 763 765 + 540 18 766 767 + 541 18 766 768 + 542 18 769 770 + 543 18 769 771 + 544 18 772 774 + 545 18 772 773 + 546 18 775 777 + 547 18 775 776 + 548 18 778 780 + 549 18 778 779 + 550 18 781 783 + 551 18 781 782 + 552 18 784 786 + 553 18 784 785 + 554 18 787 789 + 555 18 787 788 + 556 18 790 791 + 557 18 790 792 + 558 18 793 795 + 559 18 793 794 + 560 18 796 797 + 561 18 796 798 + 562 18 799 801 + 563 18 799 800 + 564 18 802 803 + 565 18 802 804 + 566 18 805 806 + 567 18 805 807 + 568 18 808 809 + 569 18 808 810 + 570 18 811 813 + 571 18 811 812 + 572 18 814 815 + 573 18 814 816 + 574 18 817 818 + 575 18 817 819 + 576 18 820 821 + 577 18 820 822 + 578 18 823 824 + 579 18 823 825 + 580 18 826 828 + 581 18 826 827 + 582 18 829 830 + 583 18 829 831 + 584 18 832 834 + 585 18 832 833 + 586 18 835 837 + 587 18 835 836 + 588 18 838 839 + 589 18 838 840 + 590 18 841 842 + 591 18 841 843 + 592 18 844 845 + 593 18 844 846 + 594 18 847 848 + 595 18 847 849 + 596 18 850 852 + 597 18 850 851 + 598 18 853 854 + 599 18 853 855 + 600 18 856 858 + 601 18 856 857 + 602 18 859 861 + 603 18 859 860 + 604 18 862 863 + 605 18 862 864 + 606 18 865 866 + 607 18 865 867 + 608 18 868 869 + 609 18 868 870 + 610 18 871 873 + 611 18 871 872 + 612 18 874 875 + 613 18 874 876 + 614 18 877 878 + 615 18 877 879 + 616 18 880 882 + 617 18 880 881 + 618 18 883 884 + 619 18 883 885 + 620 18 886 887 + 621 18 886 888 + 622 18 889 891 + 623 18 889 890 + 624 18 892 894 + 625 18 892 893 + 626 18 895 896 + 627 18 895 897 + 628 18 898 899 + 629 18 898 900 + 630 18 901 903 + 631 18 901 902 + 632 18 904 905 + 633 18 904 906 + 634 18 907 908 + 635 18 907 909 + 636 18 910 911 + 637 18 910 912 + 638 18 913 915 + 639 18 913 914 + 640 18 916 917 + 641 18 916 918 + 642 18 919 920 + 643 18 919 921 + 644 18 922 924 + 645 18 922 923 + 646 18 925 927 + 647 18 925 926 + 648 18 928 930 + 649 18 928 929 + 650 18 931 932 + 651 18 931 933 + 652 18 934 935 + 653 18 934 936 + 654 18 937 939 + 655 18 937 938 + 656 18 940 942 + 657 18 940 941 + 658 18 943 945 + 659 18 943 944 + 660 18 946 948 + 661 18 946 947 + 662 18 949 950 + 663 18 949 951 + 664 18 952 953 + 665 18 952 954 + 666 18 955 956 + 667 18 955 957 + 668 18 958 960 + 669 18 958 959 + 670 18 961 963 + 671 18 961 962 + 672 18 964 965 + 673 18 964 966 + 674 18 967 969 + 675 18 967 968 + 676 18 970 972 + 677 18 970 971 + 678 18 973 975 + 679 18 973 974 + 680 18 976 978 + 681 18 976 977 + 682 18 979 981 + 683 18 979 980 + 684 18 982 983 + 685 18 982 984 + 686 18 985 987 + 687 18 985 986 + 688 18 988 989 + 689 18 988 990 + 690 18 991 993 + 691 18 991 992 + 692 18 994 996 + 693 18 994 995 + 694 18 997 998 + 695 18 997 999 + 696 18 1000 1001 + 697 18 1000 1002 + 698 18 1003 1005 + 699 18 1003 1004 + 700 18 1006 1007 + 701 18 1006 1008 + 702 18 1009 1011 + 703 18 1009 1010 + 704 18 1012 1013 + 705 18 1012 1014 + 706 18 1015 1017 + 707 18 1015 1016 + 708 18 1018 1020 + 709 18 1018 1019 + 710 18 1021 1023 + 711 18 1021 1022 + 712 18 1024 1025 + 713 18 1024 1026 + 714 18 1027 1028 + 715 18 1027 1029 + 716 18 1030 1032 + 717 18 1030 1031 + 718 18 1033 1034 + 719 18 1033 1035 + 720 18 1036 1037 + 721 18 1036 1038 + 722 18 1039 1041 + 723 18 1039 1040 + 724 18 1042 1043 + 725 18 1042 1044 + 726 18 1045 1046 + 727 18 1045 1047 + 728 18 1048 1050 + 729 18 1048 1049 + 730 18 1051 1053 + 731 18 1051 1052 + 732 18 1054 1056 + 733 18 1054 1055 + 734 18 1057 1058 + 735 18 1057 1059 + 736 18 1060 1062 + 737 18 1060 1061 + 738 18 1063 1064 + 739 18 1063 1065 + 740 18 1066 1068 + 741 18 1066 1067 + 742 18 1069 1071 + 743 18 1069 1070 + 744 18 1072 1074 + 745 18 1072 1073 + 746 18 1075 1077 + 747 18 1075 1076 + 748 18 1078 1079 + 749 18 1078 1080 + 750 18 1081 1082 + 751 18 1081 1083 + 752 18 1084 1085 + 753 18 1084 1086 + 754 18 1087 1089 + 755 18 1087 1088 + 756 18 1090 1092 + 757 18 1090 1091 + 758 18 1093 1095 + 759 18 1093 1094 + 760 18 1096 1097 + 761 18 1096 1098 + 762 18 1099 1100 + 763 18 1099 1101 + 764 18 1102 1103 + 765 18 1102 1104 + 766 18 1105 1107 + 767 18 1105 1106 + 768 18 1108 1110 + 769 18 1108 1109 + 770 18 1111 1112 + 771 18 1111 1113 + 772 18 1114 1116 + 773 18 1114 1115 + 774 18 1117 1119 + 775 18 1117 1118 + 776 18 1120 1121 + 777 18 1120 1122 + 778 18 1123 1124 + 779 18 1123 1125 + 780 18 1126 1128 + 781 18 1126 1127 + 782 18 1129 1130 + 783 18 1129 1131 + 784 18 1132 1133 + 785 18 1132 1134 + 786 18 1135 1137 + 787 18 1135 1136 + 788 18 1138 1140 + 789 18 1138 1139 + 790 18 1141 1142 + 791 18 1141 1143 + 792 18 1144 1146 + 793 18 1144 1145 + 794 18 1147 1149 + 795 18 1147 1148 + 796 18 1150 1152 + 797 18 1150 1151 + 798 18 1153 1155 + 799 18 1153 1154 + 800 18 1156 1158 + 801 18 1156 1157 + 802 18 1159 1160 + 803 18 1159 1161 + 804 18 1162 1164 + 805 18 1162 1163 + 806 18 1165 1166 + 807 18 1165 1167 + 808 18 1168 1170 + 809 18 1168 1169 + 810 18 1171 1172 + 811 18 1171 1173 + 812 18 1174 1175 + 813 18 1174 1176 + 814 18 1177 1179 + 815 18 1177 1178 + 816 18 1180 1182 + 817 18 1180 1181 + 818 18 1183 1185 + 819 18 1183 1184 + 820 18 1186 1187 + 821 18 1186 1188 + 822 18 1189 1190 + 823 18 1189 1191 + 824 18 1192 1194 + 825 18 1192 1193 + 826 18 1195 1196 + 827 18 1195 1197 + 828 18 1198 1199 + 829 18 1198 1200 + 830 18 1201 1202 + 831 18 1201 1203 + 832 18 1204 1205 + 833 18 1204 1206 + 834 18 1207 1209 + 835 18 1207 1208 + 836 18 1210 1212 + 837 18 1210 1211 + 838 18 1213 1214 + 839 18 1213 1215 + 840 18 1216 1218 + 841 18 1216 1217 + 842 18 1219 1221 + 843 18 1219 1220 + 844 18 1222 1224 + 845 18 1222 1223 + 846 18 1225 1226 + 847 18 1225 1227 + 848 18 1228 1229 + 849 18 1228 1230 + 850 18 1231 1232 + 851 18 1231 1233 + 852 18 1234 1236 + 853 18 1234 1235 + 854 18 1237 1239 + 855 18 1237 1238 + 856 18 1240 1242 + 857 18 1240 1241 + 858 18 1243 1244 + 859 18 1243 1245 + 860 18 1246 1248 + 861 18 1246 1247 + 862 18 1249 1250 + 863 18 1249 1251 + 864 18 1252 1254 + 865 18 1252 1253 + 866 18 1255 1256 + 867 18 1255 1257 + 868 18 1258 1259 + 869 18 1258 1260 + 870 18 1261 1263 + 871 18 1261 1262 + 872 18 1264 1265 + 873 18 1264 1266 + 874 18 1267 1268 + 875 18 1267 1269 + 876 18 1270 1271 + 877 18 1270 1272 + 878 18 1273 1274 + 879 18 1273 1275 + 880 18 1276 1277 + 881 18 1276 1278 + 882 18 1279 1280 + 883 18 1279 1281 + 884 18 1282 1283 + 885 18 1282 1284 + 886 18 1285 1286 + 887 18 1285 1287 + 888 18 1288 1289 + 889 18 1288 1290 + 890 18 1291 1293 + 891 18 1291 1292 + 892 18 1294 1295 + 893 18 1294 1296 + 894 18 1297 1299 + 895 18 1297 1298 + 896 18 1300 1302 + 897 18 1300 1301 + 898 18 1303 1304 + 899 18 1303 1305 + 900 18 1306 1308 + 901 18 1306 1307 + 902 18 1309 1311 + 903 18 1309 1310 + 904 18 1312 1314 + 905 18 1312 1313 + 906 18 1315 1317 + 907 18 1315 1316 + 908 18 1318 1320 + 909 18 1318 1319 + 910 18 1321 1323 + 911 18 1321 1322 + 912 18 1324 1325 + 913 18 1324 1326 + 914 18 1327 1329 + 915 18 1327 1328 + 916 18 1330 1332 + 917 18 1330 1331 + 918 18 1333 1334 + 919 18 1333 1335 + 920 18 1336 1337 + 921 18 1336 1338 + 922 18 1339 1340 + 923 18 1339 1341 + 924 18 1342 1344 + 925 18 1342 1343 + 926 18 1345 1347 + 927 18 1345 1346 + 928 18 1348 1350 + 929 18 1348 1349 + 930 18 1351 1352 + 931 18 1351 1353 + 932 18 1354 1355 + 933 18 1354 1356 + 934 18 1357 1358 + 935 18 1357 1359 + 936 18 1360 1362 + 937 18 1360 1361 + 938 18 1363 1365 + 939 18 1363 1364 + 940 18 1366 1368 + 941 18 1366 1367 + 942 18 1369 1370 + 943 18 1369 1371 + 944 18 1372 1373 + 945 18 1372 1374 + 946 18 1375 1377 + 947 18 1375 1376 + 948 18 1378 1379 + 949 18 1378 1380 + 950 18 1381 1382 + 951 18 1381 1383 + 952 18 1384 1385 + 953 18 1384 1386 + 954 18 1387 1388 + 955 18 1387 1389 + 956 18 1390 1392 + 957 18 1390 1391 + 958 18 1393 1395 + 959 18 1393 1394 + 960 18 1396 1397 + 961 18 1396 1398 + 962 18 1399 1401 + 963 18 1399 1400 + 964 18 1402 1403 + 965 18 1402 1404 + 966 18 1405 1406 + 967 18 1405 1407 + 968 18 1408 1409 + 969 18 1408 1410 + 970 18 1411 1412 + 971 18 1411 1413 + 972 18 1414 1416 + 973 18 1414 1415 + 974 18 1417 1419 + 975 18 1417 1418 + 976 18 1420 1422 + 977 18 1420 1421 + 978 18 1423 1425 + 979 18 1423 1424 + 980 18 1426 1428 + 981 18 1426 1427 + 982 18 1429 1430 + 983 18 1429 1431 + 984 18 1432 1434 + 985 18 1432 1433 + 986 18 1435 1436 + 987 18 1435 1437 + 988 18 1438 1439 + 989 18 1438 1440 + 990 18 1441 1442 + 991 18 1441 1443 + 992 18 1444 1445 + 993 18 1444 1446 + 994 18 1447 1448 + 995 18 1447 1449 + 996 18 1450 1451 + 997 18 1450 1452 + 998 18 1453 1455 + 999 18 1453 1454 + 1000 18 1456 1457 + 1001 18 1456 1458 + 1002 18 1459 1461 + 1003 18 1459 1460 + 1004 18 1462 1463 + 1005 18 1462 1464 + 1006 18 1465 1466 + 1007 18 1465 1467 + 1008 18 1468 1470 + 1009 18 1468 1469 + 1010 18 1471 1472 + 1011 18 1471 1473 + 1012 18 1474 1476 + 1013 18 1474 1475 + 1014 18 1477 1478 + 1015 18 1477 1479 + 1016 18 1480 1482 + 1017 18 1480 1481 + 1018 18 1483 1485 + 1019 18 1483 1484 + 1020 18 1486 1488 + 1021 18 1486 1487 + 1022 18 1489 1491 + 1023 18 1489 1490 + 1024 18 1492 1493 + 1025 18 1492 1494 + 1026 18 1495 1496 + 1027 18 1495 1497 + 1028 18 1498 1499 + 1029 18 1498 1500 + 1030 18 1501 1502 + 1031 18 1501 1503 + 1032 18 1504 1505 + 1033 18 1504 1506 + 1034 18 1507 1509 + 1035 18 1507 1508 + 1036 18 1510 1512 + 1037 18 1510 1511 + 1038 18 1513 1515 + 1039 18 1513 1514 + 1040 18 1516 1518 + 1041 18 1516 1517 + 1042 18 1519 1520 + 1043 18 1519 1521 + 1044 18 1522 1524 + 1045 18 1522 1523 + 1046 18 1525 1526 + 1047 18 1525 1527 + 1048 18 1528 1529 + 1049 18 1528 1530 + 1050 18 1531 1533 + 1051 18 1531 1532 + 1052 18 1534 1536 + 1053 18 1534 1535 + 1054 18 1537 1539 + 1055 18 1537 1538 + 1056 18 1540 1541 + 1057 18 1540 1542 + 1058 18 1543 1545 + 1059 18 1543 1544 + 1060 18 1546 1547 + 1061 18 1546 1548 + 1062 18 1549 1551 + 1063 18 1549 1550 + 1064 18 1552 1553 + 1065 18 1552 1554 + 1066 18 1555 1557 + 1067 18 1555 1556 + 1068 18 1558 1559 + 1069 18 1558 1560 + 1070 18 1561 1562 + 1071 18 1561 1563 + 1072 18 1564 1565 + 1073 18 1564 1566 + 1074 18 1567 1569 + 1075 18 1567 1568 + 1076 18 1570 1571 + 1077 18 1570 1572 + 1078 18 1573 1575 + 1079 18 1573 1574 + 1080 18 1576 1578 + 1081 18 1576 1577 + 1082 18 1579 1581 + 1083 18 1579 1580 + 1084 18 1582 1584 + 1085 18 1582 1583 + 1086 18 1585 1586 + 1087 18 1585 1587 + 1088 18 1588 1590 + 1089 18 1588 1589 + 1090 18 1591 1592 + 1091 18 1591 1593 + 1092 18 1594 1596 + 1093 18 1594 1595 + 1094 18 1597 1598 + 1095 18 1597 1599 + 1096 18 1600 1602 + 1097 18 1600 1601 + 1098 18 1603 1605 + 1099 18 1603 1604 + 1100 18 1606 1608 + 1101 18 1606 1607 + 1102 18 1609 1610 + 1103 18 1609 1611 + 1104 18 1612 1614 + 1105 18 1612 1613 + 1106 18 1615 1617 + 1107 18 1615 1616 + 1108 18 1618 1620 + 1109 18 1618 1619 + 1110 18 1621 1623 + 1111 18 1621 1622 + 1112 18 1624 1625 + 1113 18 1624 1626 + 1114 18 1627 1629 + 1115 18 1627 1628 + 1116 18 1630 1631 + 1117 18 1630 1632 + 1118 18 1633 1635 + 1119 18 1633 1634 + 1120 18 1636 1637 + 1121 18 1636 1638 + 1122 18 1639 1641 + 1123 18 1639 1640 + 1124 18 1642 1643 + 1125 18 1642 1644 + 1126 18 1645 1646 + 1127 18 1645 1647 + 1128 18 1648 1650 + 1129 18 1648 1649 + 1130 18 1651 1653 + 1131 18 1651 1652 + 1132 18 1654 1656 + 1133 18 1654 1655 + 1134 18 1657 1658 + 1135 18 1657 1659 + 1136 18 1660 1661 + 1137 18 1660 1662 + 1138 18 1663 1664 + 1139 18 1663 1665 + 1140 18 1666 1668 + 1141 18 1666 1667 + 1142 18 1669 1670 + 1143 18 1669 1671 + 1144 18 1672 1674 + 1145 18 1672 1673 + 1146 18 1675 1676 + 1147 18 1675 1677 + 1148 18 1678 1680 + 1149 18 1678 1679 + 1150 18 1681 1683 + 1151 18 1681 1682 + 1152 18 1684 1685 + 1153 18 1684 1686 + 1154 18 1687 1688 + 1155 18 1687 1689 + 1156 18 1690 1691 + 1157 18 1690 1692 + 1158 18 1693 1695 + 1159 18 1693 1694 + 1160 18 1696 1697 + 1161 18 1696 1698 + 1162 18 1699 1701 + 1163 18 1699 1700 + 1164 18 1702 1703 + 1165 18 1702 1704 + 1166 18 1705 1707 + 1167 18 1705 1706 + 1168 18 1708 1709 + 1169 18 1708 1710 + 1170 18 1711 1712 + 1171 18 1711 1713 + 1172 18 1714 1716 + 1173 18 1714 1715 + 1174 18 1717 1718 + 1175 18 1717 1719 + 1176 18 1720 1721 + 1177 18 1720 1722 + 1178 18 1723 1724 + 1179 18 1723 1725 + 1180 18 1726 1727 + 1181 18 1726 1728 + 1182 18 1729 1730 + 1183 18 1729 1731 + 1184 18 1732 1734 + 1185 18 1732 1733 + 1186 18 1735 1737 + 1187 18 1735 1736 + 1188 18 1738 1740 + 1189 18 1738 1739 + 1190 18 1741 1743 + 1191 18 1741 1742 + 1192 18 1744 1745 + 1193 18 1744 1746 + 1194 18 1747 1749 + 1195 18 1747 1748 + 1196 18 1750 1751 + 1197 18 1750 1752 + 1198 18 1753 1755 + 1199 18 1753 1754 + 1200 18 1756 1758 + 1201 18 1756 1757 + 1202 18 1759 1760 + 1203 18 1759 1761 + 1204 18 1762 1764 + 1205 18 1762 1763 + 1206 18 1765 1767 + 1207 18 1765 1766 + 1208 18 1768 1769 + 1209 18 1768 1770 + 1210 18 1771 1773 + 1211 18 1771 1772 + 1212 18 1774 1776 + 1213 18 1774 1775 + 1214 18 1777 1779 + 1215 18 1777 1778 + 1216 18 1780 1781 + 1217 18 1780 1782 + 1218 18 1783 1784 + 1219 18 1783 1785 + 1220 18 1786 1787 + 1221 18 1786 1788 + 1222 18 1789 1790 + 1223 18 1789 1791 + 1224 18 1792 1793 + 1225 18 1792 1794 + 1226 18 1795 1796 + 1227 18 1795 1797 + 1228 18 1798 1799 + 1229 18 1798 1800 + 1230 18 1801 1803 + 1231 18 1801 1802 + 1232 18 1804 1806 + 1233 18 1804 1805 + 1234 18 1807 1809 + 1235 18 1807 1808 + 1236 18 1810 1812 + 1237 18 1810 1811 + 1238 18 1813 1815 + 1239 18 1813 1814 + 1240 18 1816 1818 + 1241 18 1816 1817 + 1242 18 1819 1821 + 1243 18 1819 1820 + 1244 18 1822 1823 + 1245 18 1822 1824 + 1246 18 1825 1827 + 1247 18 1825 1826 + 1248 18 1828 1830 + 1249 18 1828 1829 + 1250 18 1831 1832 + 1251 18 1831 1833 + 1252 18 1834 1835 + 1253 18 1834 1836 + 1254 18 1837 1838 + 1255 18 1837 1839 + 1256 18 1840 1842 + 1257 18 1840 1841 + 1258 18 1843 1845 + 1259 18 1843 1844 + 1260 18 1846 1848 + 1261 18 1846 1847 + 1262 18 1849 1851 + 1263 18 1849 1850 + 1264 18 1852 1854 + 1265 18 1852 1853 + 1266 18 1855 1856 + 1267 18 1855 1857 + 1268 18 1858 1859 + 1269 18 1858 1860 + 1270 18 1861 1862 + 1271 18 1861 1863 + 1272 18 1864 1866 + 1273 18 1864 1865 + 1274 18 1867 1869 + 1275 18 1867 1868 + 1276 18 1870 1871 + 1277 18 1870 1872 + 1278 18 1873 1874 + 1279 18 1873 1875 + 1280 18 1876 1877 + 1281 18 1876 1878 + 1282 18 1879 1881 + 1283 18 1879 1880 + 1284 18 1882 1883 + 1285 18 1882 1884 + 1286 18 1885 1886 + 1287 18 1885 1887 + 1288 18 1888 1890 + 1289 18 1888 1889 + 1290 18 1891 1892 + 1291 18 1891 1893 + 1292 18 1894 1896 + 1293 18 1894 1895 + 1294 18 1897 1898 + 1295 18 1897 1899 + 1296 18 1900 1902 + 1297 18 1900 1901 + 1298 18 1903 1905 + 1299 18 1903 1904 + 1300 18 1906 1908 + 1301 18 1906 1907 + 1302 18 1909 1911 + 1303 18 1909 1910 + 1304 18 1912 1913 + 1305 18 1912 1914 + 1306 18 1915 1916 + 1307 18 1915 1917 + 1308 18 1918 1920 + 1309 18 1918 1919 + 1310 18 1921 1923 + 1311 18 1921 1922 + 1312 18 1924 1926 + 1313 18 1924 1925 + 1314 18 1927 1929 + 1315 18 1927 1928 + 1316 18 1930 1932 + 1317 18 1930 1931 + 1318 18 1933 1935 + 1319 18 1933 1934 + 1320 18 1936 1937 + 1321 18 1936 1938 + 1322 18 1939 1940 + 1323 18 1939 1941 + 1324 18 1942 1944 + 1325 18 1942 1943 + 1326 18 1945 1947 + 1327 18 1945 1946 + 1328 18 1948 1950 + 1329 18 1948 1949 + 1330 18 1951 1953 + 1331 18 1951 1952 + 1332 18 1954 1955 + 1333 18 1954 1956 + 1334 18 1957 1959 + 1335 18 1957 1958 + 1336 18 1960 1961 + 1337 18 1960 1962 + 1338 18 1963 1965 + 1339 18 1963 1964 + 1340 18 1966 1967 + 1341 18 1966 1968 + 1342 18 1969 1970 + 1343 18 1969 1971 + 1344 18 1972 1974 + 1345 18 1972 1973 + 1346 18 1975 1977 + 1347 18 1975 1976 + 1348 18 1978 1979 + 1349 18 1978 1980 + 1350 18 1981 1982 + 1351 18 1981 1983 + 1352 18 1984 1986 + 1353 18 1984 1985 + 1354 18 1987 1988 + 1355 18 1987 1989 + 1356 18 1990 1992 + 1357 18 1990 1991 + 1358 18 1993 1995 + 1359 18 1993 1994 + 1360 18 1996 1998 + 1361 18 1996 1997 + 1362 18 1999 2000 + 1363 18 1999 2001 + 1364 18 2002 2004 + 1365 18 2002 2003 + +Angles + + 1 5 2 1 7 + 2 4 2 1 3 + 3 6 3 1 7 + 4 7 4 2 5 + 5 7 5 2 6 + 6 1 1 2 5 + 7 1 1 2 6 + 8 1 1 2 4 + 9 7 4 2 6 + 10 2 1 7 8 + 11 3 1 7 19 + 12 11 8 7 19 + 13 9 7 8 11 + 14 8 7 8 9 + 15 16 11 8 20 + 16 15 9 8 20 + 17 14 9 8 11 + 18 10 7 8 20 + 19 5 8 9 28 + 20 4 8 9 10 + 21 6 10 9 28 + 22 18 12 11 22 + 23 23 21 11 22 + 24 12 8 11 12 + 25 13 8 11 21 + 26 18 12 11 21 + 27 13 8 11 22 + 28 19 13 12 14 + 29 17 11 12 14 + 30 17 11 12 13 + 31 20 15 13 23 + 32 20 12 13 23 + 33 19 12 13 15 + 34 20 12 14 24 + 35 20 16 14 24 + 36 19 12 14 16 + 37 20 13 15 25 + 38 20 17 15 25 + 39 19 13 15 17 + 40 20 14 16 26 + 41 19 14 16 17 + 42 20 17 16 26 + 43 21 15 17 18 + 44 19 15 17 16 + 45 21 16 17 18 + 46 22 17 18 27 + 47 2 9 28 29 + 48 3 9 28 32 + 49 11 29 28 32 + 50 15 30 29 34 + 51 10 28 29 33 + 52 10 28 29 34 + 53 15 30 29 33 + 54 24 33 29 34 + 55 8 28 29 30 + 56 6 31 30 35 + 57 5 29 30 35 + 58 4 29 30 31 + 59 2 30 35 36 + 60 3 30 35 39 + 61 11 36 35 39 + 62 8 35 36 37 + 63 10 35 36 41 + 64 10 35 36 40 + 65 24 40 36 41 + 66 15 37 36 40 + 67 15 37 36 41 + 68 6 38 37 42 + 69 5 36 37 42 + 70 4 36 37 38 + 71 11 43 42 53 + 72 2 37 42 43 + 73 3 37 42 53 + 74 10 42 43 54 + 75 16 46 43 54 + 76 14 44 43 46 + 77 9 42 43 46 + 78 8 42 43 44 + 79 15 44 43 54 + 80 5 43 44 62 + 81 6 45 44 62 + 82 4 43 44 45 + 83 13 43 46 55 + 84 13 43 46 56 + 85 12 43 46 47 + 86 23 55 46 56 + 87 18 47 46 56 + 88 18 47 46 55 + 89 17 46 47 49 + 90 17 46 47 48 + 91 19 48 47 49 + 92 20 50 48 57 + 93 19 47 48 50 + 94 20 47 48 57 + 95 20 51 49 58 + 96 19 47 49 51 + 97 20 47 49 58 + 98 20 48 50 59 + 99 19 48 50 52 + 100 20 52 50 59 + 101 20 52 51 60 + 102 20 49 51 60 + 103 19 49 51 52 + 104 20 50 52 61 + 105 19 50 52 51 + 106 20 51 52 61 + 107 2 44 62 63 + 108 3 44 62 70 + 109 11 63 62 70 + 110 16 66 63 71 + 111 15 64 63 71 + 112 14 64 63 66 + 113 10 62 63 71 + 114 9 62 63 66 + 115 8 62 63 64 + 116 4 63 64 65 + 117 6 65 64 79 + 118 5 63 64 79 + 119 23 72 66 73 + 120 27 67 66 73 + 121 27 67 66 72 + 122 25 63 66 67 + 123 13 63 66 73 + 124 13 63 66 72 + 125 29 68 67 75 + 126 23 74 67 75 + 127 29 68 67 74 + 128 26 66 67 68 + 129 27 66 67 74 + 130 27 66 67 75 + 131 28 67 68 69 + 132 29 68 69 76 + 133 29 68 69 77 + 134 29 68 69 78 + 135 7 76 69 78 + 136 7 76 69 77 + 137 7 77 69 78 + 138 3 64 79 81 + 139 2 64 79 80 + 140 11 80 79 81 + 141 7 83 80 84 + 142 30 79 80 84 + 143 7 82 80 83 + 144 30 79 80 83 + 145 30 79 80 82 + 146 7 82 80 84 + 147 31 86 85 87 + 148 31 89 88 90 + 149 31 92 91 93 + 150 31 95 94 96 + 151 31 98 97 99 + 152 31 101 100 102 + 153 31 104 103 105 + 154 31 107 106 108 + 155 31 110 109 111 + 156 31 113 112 114 + 157 31 116 115 117 + 158 31 119 118 120 + 159 31 122 121 123 + 160 31 125 124 126 + 161 31 128 127 129 + 162 31 131 130 132 + 163 31 134 133 135 + 164 31 137 136 138 + 165 31 140 139 141 + 166 31 143 142 144 + 167 31 146 145 147 + 168 31 149 148 150 + 169 31 152 151 153 + 170 31 155 154 156 + 171 31 158 157 159 + 172 31 161 160 162 + 173 31 164 163 165 + 174 31 167 166 168 + 175 31 170 169 171 + 176 31 173 172 174 + 177 31 176 175 177 + 178 31 179 178 180 + 179 31 182 181 183 + 180 31 185 184 186 + 181 31 188 187 189 + 182 31 191 190 192 + 183 31 194 193 195 + 184 31 197 196 198 + 185 31 200 199 201 + 186 31 203 202 204 + 187 31 206 205 207 + 188 31 209 208 210 + 189 31 212 211 213 + 190 31 215 214 216 + 191 31 218 217 219 + 192 31 221 220 222 + 193 31 224 223 225 + 194 31 227 226 228 + 195 31 230 229 231 + 196 31 233 232 234 + 197 31 236 235 237 + 198 31 239 238 240 + 199 31 242 241 243 + 200 31 245 244 246 + 201 31 248 247 249 + 202 31 251 250 252 + 203 31 254 253 255 + 204 31 257 256 258 + 205 31 260 259 261 + 206 31 263 262 264 + 207 31 266 265 267 + 208 31 269 268 270 + 209 31 272 271 273 + 210 31 275 274 276 + 211 31 278 277 279 + 212 31 281 280 282 + 213 31 284 283 285 + 214 31 287 286 288 + 215 31 290 289 291 + 216 31 293 292 294 + 217 31 296 295 297 + 218 31 299 298 300 + 219 31 302 301 303 + 220 31 305 304 306 + 221 31 308 307 309 + 222 31 311 310 312 + 223 31 314 313 315 + 224 31 317 316 318 + 225 31 320 319 321 + 226 31 323 322 324 + 227 31 326 325 327 + 228 31 329 328 330 + 229 31 332 331 333 + 230 31 335 334 336 + 231 31 338 337 339 + 232 31 341 340 342 + 233 31 344 343 345 + 234 31 347 346 348 + 235 31 350 349 351 + 236 31 353 352 354 + 237 31 356 355 357 + 238 31 359 358 360 + 239 31 362 361 363 + 240 31 365 364 366 + 241 31 368 367 369 + 242 31 371 370 372 + 243 31 374 373 375 + 244 31 377 376 378 + 245 31 380 379 381 + 246 31 383 382 384 + 247 31 386 385 387 + 248 31 389 388 390 + 249 31 392 391 393 + 250 31 395 394 396 + 251 31 398 397 399 + 252 31 401 400 402 + 253 31 404 403 405 + 254 31 407 406 408 + 255 31 410 409 411 + 256 31 413 412 414 + 257 31 416 415 417 + 258 31 419 418 420 + 259 31 422 421 423 + 260 31 425 424 426 + 261 31 428 427 429 + 262 31 431 430 432 + 263 31 434 433 435 + 264 31 437 436 438 + 265 31 440 439 441 + 266 31 443 442 444 + 267 31 446 445 447 + 268 31 449 448 450 + 269 31 452 451 453 + 270 31 455 454 456 + 271 31 458 457 459 + 272 31 461 460 462 + 273 31 464 463 465 + 274 31 467 466 468 + 275 31 470 469 471 + 276 31 473 472 474 + 277 31 476 475 477 + 278 31 479 478 480 + 279 31 482 481 483 + 280 31 485 484 486 + 281 31 488 487 489 + 282 31 491 490 492 + 283 31 494 493 495 + 284 31 497 496 498 + 285 31 500 499 501 + 286 31 503 502 504 + 287 31 506 505 507 + 288 31 509 508 510 + 289 31 512 511 513 + 290 31 515 514 516 + 291 31 518 517 519 + 292 31 521 520 522 + 293 31 524 523 525 + 294 31 527 526 528 + 295 31 530 529 531 + 296 31 533 532 534 + 297 31 536 535 537 + 298 31 539 538 540 + 299 31 542 541 543 + 300 31 545 544 546 + 301 31 548 547 549 + 302 31 551 550 552 + 303 31 554 553 555 + 304 31 557 556 558 + 305 31 560 559 561 + 306 31 563 562 564 + 307 31 566 565 567 + 308 31 569 568 570 + 309 31 572 571 573 + 310 31 575 574 576 + 311 31 578 577 579 + 312 31 581 580 582 + 313 31 584 583 585 + 314 31 587 586 588 + 315 31 590 589 591 + 316 31 593 592 594 + 317 31 596 595 597 + 318 31 599 598 600 + 319 31 602 601 603 + 320 31 605 604 606 + 321 31 608 607 609 + 322 31 611 610 612 + 323 31 614 613 615 + 324 31 617 616 618 + 325 31 620 619 621 + 326 31 623 622 624 + 327 31 626 625 627 + 328 31 629 628 630 + 329 31 632 631 633 + 330 31 635 634 636 + 331 31 638 637 639 + 332 31 641 640 642 + 333 31 644 643 645 + 334 31 647 646 648 + 335 31 650 649 651 + 336 31 653 652 654 + 337 31 656 655 657 + 338 31 659 658 660 + 339 31 662 661 663 + 340 31 665 664 666 + 341 31 668 667 669 + 342 31 671 670 672 + 343 31 674 673 675 + 344 31 677 676 678 + 345 31 680 679 681 + 346 31 683 682 684 + 347 31 686 685 687 + 348 31 689 688 690 + 349 31 692 691 693 + 350 31 695 694 696 + 351 31 698 697 699 + 352 31 701 700 702 + 353 31 704 703 705 + 354 31 707 706 708 + 355 31 710 709 711 + 356 31 713 712 714 + 357 31 716 715 717 + 358 31 719 718 720 + 359 31 722 721 723 + 360 31 725 724 726 + 361 31 728 727 729 + 362 31 731 730 732 + 363 31 734 733 735 + 364 31 737 736 738 + 365 31 740 739 741 + 366 31 743 742 744 + 367 31 746 745 747 + 368 31 749 748 750 + 369 31 752 751 753 + 370 31 755 754 756 + 371 31 758 757 759 + 372 31 761 760 762 + 373 31 764 763 765 + 374 31 767 766 768 + 375 31 770 769 771 + 376 31 773 772 774 + 377 31 776 775 777 + 378 31 779 778 780 + 379 31 782 781 783 + 380 31 785 784 786 + 381 31 788 787 789 + 382 31 791 790 792 + 383 31 794 793 795 + 384 31 797 796 798 + 385 31 800 799 801 + 386 31 803 802 804 + 387 31 806 805 807 + 388 31 809 808 810 + 389 31 812 811 813 + 390 31 815 814 816 + 391 31 818 817 819 + 392 31 821 820 822 + 393 31 824 823 825 + 394 31 827 826 828 + 395 31 830 829 831 + 396 31 833 832 834 + 397 31 836 835 837 + 398 31 839 838 840 + 399 31 842 841 843 + 400 31 845 844 846 + 401 31 848 847 849 + 402 31 851 850 852 + 403 31 854 853 855 + 404 31 857 856 858 + 405 31 860 859 861 + 406 31 863 862 864 + 407 31 866 865 867 + 408 31 869 868 870 + 409 31 872 871 873 + 410 31 875 874 876 + 411 31 878 877 879 + 412 31 881 880 882 + 413 31 884 883 885 + 414 31 887 886 888 + 415 31 890 889 891 + 416 31 893 892 894 + 417 31 896 895 897 + 418 31 899 898 900 + 419 31 902 901 903 + 420 31 905 904 906 + 421 31 908 907 909 + 422 31 911 910 912 + 423 31 914 913 915 + 424 31 917 916 918 + 425 31 920 919 921 + 426 31 923 922 924 + 427 31 926 925 927 + 428 31 929 928 930 + 429 31 932 931 933 + 430 31 935 934 936 + 431 31 938 937 939 + 432 31 941 940 942 + 433 31 944 943 945 + 434 31 947 946 948 + 435 31 950 949 951 + 436 31 953 952 954 + 437 31 956 955 957 + 438 31 959 958 960 + 439 31 962 961 963 + 440 31 965 964 966 + 441 31 968 967 969 + 442 31 971 970 972 + 443 31 974 973 975 + 444 31 977 976 978 + 445 31 980 979 981 + 446 31 983 982 984 + 447 31 986 985 987 + 448 31 989 988 990 + 449 31 992 991 993 + 450 31 995 994 996 + 451 31 998 997 999 + 452 31 1001 1000 1002 + 453 31 1004 1003 1005 + 454 31 1007 1006 1008 + 455 31 1010 1009 1011 + 456 31 1013 1012 1014 + 457 31 1016 1015 1017 + 458 31 1019 1018 1020 + 459 31 1022 1021 1023 + 460 31 1025 1024 1026 + 461 31 1028 1027 1029 + 462 31 1031 1030 1032 + 463 31 1034 1033 1035 + 464 31 1037 1036 1038 + 465 31 1040 1039 1041 + 466 31 1043 1042 1044 + 467 31 1046 1045 1047 + 468 31 1049 1048 1050 + 469 31 1052 1051 1053 + 470 31 1055 1054 1056 + 471 31 1058 1057 1059 + 472 31 1061 1060 1062 + 473 31 1064 1063 1065 + 474 31 1067 1066 1068 + 475 31 1070 1069 1071 + 476 31 1073 1072 1074 + 477 31 1076 1075 1077 + 478 31 1079 1078 1080 + 479 31 1082 1081 1083 + 480 31 1085 1084 1086 + 481 31 1088 1087 1089 + 482 31 1091 1090 1092 + 483 31 1094 1093 1095 + 484 31 1097 1096 1098 + 485 31 1100 1099 1101 + 486 31 1103 1102 1104 + 487 31 1106 1105 1107 + 488 31 1109 1108 1110 + 489 31 1112 1111 1113 + 490 31 1115 1114 1116 + 491 31 1118 1117 1119 + 492 31 1121 1120 1122 + 493 31 1124 1123 1125 + 494 31 1127 1126 1128 + 495 31 1130 1129 1131 + 496 31 1133 1132 1134 + 497 31 1136 1135 1137 + 498 31 1139 1138 1140 + 499 31 1142 1141 1143 + 500 31 1145 1144 1146 + 501 31 1148 1147 1149 + 502 31 1151 1150 1152 + 503 31 1154 1153 1155 + 504 31 1157 1156 1158 + 505 31 1160 1159 1161 + 506 31 1163 1162 1164 + 507 31 1166 1165 1167 + 508 31 1169 1168 1170 + 509 31 1172 1171 1173 + 510 31 1175 1174 1176 + 511 31 1178 1177 1179 + 512 31 1181 1180 1182 + 513 31 1184 1183 1185 + 514 31 1187 1186 1188 + 515 31 1190 1189 1191 + 516 31 1193 1192 1194 + 517 31 1196 1195 1197 + 518 31 1199 1198 1200 + 519 31 1202 1201 1203 + 520 31 1205 1204 1206 + 521 31 1208 1207 1209 + 522 31 1211 1210 1212 + 523 31 1214 1213 1215 + 524 31 1217 1216 1218 + 525 31 1220 1219 1221 + 526 31 1223 1222 1224 + 527 31 1226 1225 1227 + 528 31 1229 1228 1230 + 529 31 1232 1231 1233 + 530 31 1235 1234 1236 + 531 31 1238 1237 1239 + 532 31 1241 1240 1242 + 533 31 1244 1243 1245 + 534 31 1247 1246 1248 + 535 31 1250 1249 1251 + 536 31 1253 1252 1254 + 537 31 1256 1255 1257 + 538 31 1259 1258 1260 + 539 31 1262 1261 1263 + 540 31 1265 1264 1266 + 541 31 1268 1267 1269 + 542 31 1271 1270 1272 + 543 31 1274 1273 1275 + 544 31 1277 1276 1278 + 545 31 1280 1279 1281 + 546 31 1283 1282 1284 + 547 31 1286 1285 1287 + 548 31 1289 1288 1290 + 549 31 1292 1291 1293 + 550 31 1295 1294 1296 + 551 31 1298 1297 1299 + 552 31 1301 1300 1302 + 553 31 1304 1303 1305 + 554 31 1307 1306 1308 + 555 31 1310 1309 1311 + 556 31 1313 1312 1314 + 557 31 1316 1315 1317 + 558 31 1319 1318 1320 + 559 31 1322 1321 1323 + 560 31 1325 1324 1326 + 561 31 1328 1327 1329 + 562 31 1331 1330 1332 + 563 31 1334 1333 1335 + 564 31 1337 1336 1338 + 565 31 1340 1339 1341 + 566 31 1343 1342 1344 + 567 31 1346 1345 1347 + 568 31 1349 1348 1350 + 569 31 1352 1351 1353 + 570 31 1355 1354 1356 + 571 31 1358 1357 1359 + 572 31 1361 1360 1362 + 573 31 1364 1363 1365 + 574 31 1367 1366 1368 + 575 31 1370 1369 1371 + 576 31 1373 1372 1374 + 577 31 1376 1375 1377 + 578 31 1379 1378 1380 + 579 31 1382 1381 1383 + 580 31 1385 1384 1386 + 581 31 1388 1387 1389 + 582 31 1391 1390 1392 + 583 31 1394 1393 1395 + 584 31 1397 1396 1398 + 585 31 1400 1399 1401 + 586 31 1403 1402 1404 + 587 31 1406 1405 1407 + 588 31 1409 1408 1410 + 589 31 1412 1411 1413 + 590 31 1415 1414 1416 + 591 31 1418 1417 1419 + 592 31 1421 1420 1422 + 593 31 1424 1423 1425 + 594 31 1427 1426 1428 + 595 31 1430 1429 1431 + 596 31 1433 1432 1434 + 597 31 1436 1435 1437 + 598 31 1439 1438 1440 + 599 31 1442 1441 1443 + 600 31 1445 1444 1446 + 601 31 1448 1447 1449 + 602 31 1451 1450 1452 + 603 31 1454 1453 1455 + 604 31 1457 1456 1458 + 605 31 1460 1459 1461 + 606 31 1463 1462 1464 + 607 31 1466 1465 1467 + 608 31 1469 1468 1470 + 609 31 1472 1471 1473 + 610 31 1475 1474 1476 + 611 31 1478 1477 1479 + 612 31 1481 1480 1482 + 613 31 1484 1483 1485 + 614 31 1487 1486 1488 + 615 31 1490 1489 1491 + 616 31 1493 1492 1494 + 617 31 1496 1495 1497 + 618 31 1499 1498 1500 + 619 31 1502 1501 1503 + 620 31 1505 1504 1506 + 621 31 1508 1507 1509 + 622 31 1511 1510 1512 + 623 31 1514 1513 1515 + 624 31 1517 1516 1518 + 625 31 1520 1519 1521 + 626 31 1523 1522 1524 + 627 31 1526 1525 1527 + 628 31 1529 1528 1530 + 629 31 1532 1531 1533 + 630 31 1535 1534 1536 + 631 31 1538 1537 1539 + 632 31 1541 1540 1542 + 633 31 1544 1543 1545 + 634 31 1547 1546 1548 + 635 31 1550 1549 1551 + 636 31 1553 1552 1554 + 637 31 1556 1555 1557 + 638 31 1559 1558 1560 + 639 31 1562 1561 1563 + 640 31 1565 1564 1566 + 641 31 1568 1567 1569 + 642 31 1571 1570 1572 + 643 31 1574 1573 1575 + 644 31 1577 1576 1578 + 645 31 1580 1579 1581 + 646 31 1583 1582 1584 + 647 31 1586 1585 1587 + 648 31 1589 1588 1590 + 649 31 1592 1591 1593 + 650 31 1595 1594 1596 + 651 31 1598 1597 1599 + 652 31 1601 1600 1602 + 653 31 1604 1603 1605 + 654 31 1607 1606 1608 + 655 31 1610 1609 1611 + 656 31 1613 1612 1614 + 657 31 1616 1615 1617 + 658 31 1619 1618 1620 + 659 31 1622 1621 1623 + 660 31 1625 1624 1626 + 661 31 1628 1627 1629 + 662 31 1631 1630 1632 + 663 31 1634 1633 1635 + 664 31 1637 1636 1638 + 665 31 1640 1639 1641 + 666 31 1643 1642 1644 + 667 31 1646 1645 1647 + 668 31 1649 1648 1650 + 669 31 1652 1651 1653 + 670 31 1655 1654 1656 + 671 31 1658 1657 1659 + 672 31 1661 1660 1662 + 673 31 1664 1663 1665 + 674 31 1667 1666 1668 + 675 31 1670 1669 1671 + 676 31 1673 1672 1674 + 677 31 1676 1675 1677 + 678 31 1679 1678 1680 + 679 31 1682 1681 1683 + 680 31 1685 1684 1686 + 681 31 1688 1687 1689 + 682 31 1691 1690 1692 + 683 31 1694 1693 1695 + 684 31 1697 1696 1698 + 685 31 1700 1699 1701 + 686 31 1703 1702 1704 + 687 31 1706 1705 1707 + 688 31 1709 1708 1710 + 689 31 1712 1711 1713 + 690 31 1715 1714 1716 + 691 31 1718 1717 1719 + 692 31 1721 1720 1722 + 693 31 1724 1723 1725 + 694 31 1727 1726 1728 + 695 31 1730 1729 1731 + 696 31 1733 1732 1734 + 697 31 1736 1735 1737 + 698 31 1739 1738 1740 + 699 31 1742 1741 1743 + 700 31 1745 1744 1746 + 701 31 1748 1747 1749 + 702 31 1751 1750 1752 + 703 31 1754 1753 1755 + 704 31 1757 1756 1758 + 705 31 1760 1759 1761 + 706 31 1763 1762 1764 + 707 31 1766 1765 1767 + 708 31 1769 1768 1770 + 709 31 1772 1771 1773 + 710 31 1775 1774 1776 + 711 31 1778 1777 1779 + 712 31 1781 1780 1782 + 713 31 1784 1783 1785 + 714 31 1787 1786 1788 + 715 31 1790 1789 1791 + 716 31 1793 1792 1794 + 717 31 1796 1795 1797 + 718 31 1799 1798 1800 + 719 31 1802 1801 1803 + 720 31 1805 1804 1806 + 721 31 1808 1807 1809 + 722 31 1811 1810 1812 + 723 31 1814 1813 1815 + 724 31 1817 1816 1818 + 725 31 1820 1819 1821 + 726 31 1823 1822 1824 + 727 31 1826 1825 1827 + 728 31 1829 1828 1830 + 729 31 1832 1831 1833 + 730 31 1835 1834 1836 + 731 31 1838 1837 1839 + 732 31 1841 1840 1842 + 733 31 1844 1843 1845 + 734 31 1847 1846 1848 + 735 31 1850 1849 1851 + 736 31 1853 1852 1854 + 737 31 1856 1855 1857 + 738 31 1859 1858 1860 + 739 31 1862 1861 1863 + 740 31 1865 1864 1866 + 741 31 1868 1867 1869 + 742 31 1871 1870 1872 + 743 31 1874 1873 1875 + 744 31 1877 1876 1878 + 745 31 1880 1879 1881 + 746 31 1883 1882 1884 + 747 31 1886 1885 1887 + 748 31 1889 1888 1890 + 749 31 1892 1891 1893 + 750 31 1895 1894 1896 + 751 31 1898 1897 1899 + 752 31 1901 1900 1902 + 753 31 1904 1903 1905 + 754 31 1907 1906 1908 + 755 31 1910 1909 1911 + 756 31 1913 1912 1914 + 757 31 1916 1915 1917 + 758 31 1919 1918 1920 + 759 31 1922 1921 1923 + 760 31 1925 1924 1926 + 761 31 1928 1927 1929 + 762 31 1931 1930 1932 + 763 31 1934 1933 1935 + 764 31 1937 1936 1938 + 765 31 1940 1939 1941 + 766 31 1943 1942 1944 + 767 31 1946 1945 1947 + 768 31 1949 1948 1950 + 769 31 1952 1951 1953 + 770 31 1955 1954 1956 + 771 31 1958 1957 1959 + 772 31 1961 1960 1962 + 773 31 1964 1963 1965 + 774 31 1967 1966 1968 + 775 31 1970 1969 1971 + 776 31 1973 1972 1974 + 777 31 1976 1975 1977 + 778 31 1979 1978 1980 + 779 31 1982 1981 1983 + 780 31 1985 1984 1986 + 781 31 1988 1987 1989 + 782 31 1991 1990 1992 + 783 31 1994 1993 1995 + 784 31 1997 1996 1998 + 785 31 2000 1999 2001 + 786 31 2003 2002 2004 + +Dihedrals + + 1 6 3 1 7 8 + 2 6 2 1 7 19 + 3 4 2 1 7 8 + 4 5 2 1 7 8 + 5 6 3 1 7 19 + 6 3 3 1 2 4 + 7 3 3 1 2 6 + 8 3 3 1 2 5 + 9 3 5 2 1 7 + 10 3 4 2 1 7 + 11 3 6 2 1 7 + 12 3 19 7 8 20 + 13 1 1 7 8 9 + 14 3 1 7 8 20 + 15 2 1 7 8 11 + 16 8 9 8 11 22 + 17 3 7 8 9 10 + 18 7 7 8 9 28 + 19 8 7 8 11 21 + 20 8 7 8 11 12 + 21 3 9 8 7 19 + 22 3 11 8 9 28 + 23 8 7 8 11 22 + 24 3 11 8 7 19 + 25 10 9 8 11 12 + 26 3 20 8 9 28 + 27 8 9 8 11 21 + 28 8 20 8 11 22 + 29 8 20 8 11 21 + 30 4 8 9 28 29 + 31 5 8 9 28 29 + 32 6 10 9 28 29 + 33 11 10 9 8 11 + 34 6 10 9 28 32 + 35 3 10 9 8 20 + 36 6 8 9 28 32 + 37 9 8 11 12 13 + 38 8 12 11 8 20 + 39 9 8 11 12 14 + 40 14 14 12 13 15 + 41 13 13 12 14 24 + 42 3 13 12 11 22 + 43 14 13 12 14 16 + 44 3 14 12 11 22 + 45 3 13 12 11 21 + 46 13 11 12 14 24 + 47 12 11 12 14 16 + 48 3 14 12 11 21 + 49 13 11 12 13 23 + 50 13 14 12 13 23 + 51 12 11 12 13 15 + 52 16 23 13 15 25 + 53 13 12 13 15 25 + 54 14 12 13 15 17 + 55 14 12 14 16 17 + 56 13 12 14 16 26 + 57 16 24 14 16 26 + 58 12 13 15 17 18 + 59 13 17 15 13 23 + 60 14 13 15 17 16 + 61 12 14 16 17 18 + 62 13 17 16 14 24 + 63 14 14 16 17 15 + 64 15 16 17 18 27 + 65 13 15 17 16 26 + 66 13 18 17 15 25 + 67 15 15 17 18 27 + 68 13 16 17 15 25 + 69 13 18 17 16 26 + 70 1 9 28 29 30 + 71 3 32 28 29 33 + 72 3 9 28 29 33 + 73 3 9 28 29 34 + 74 3 32 28 29 34 + 75 3 33 29 30 35 + 76 3 30 29 28 32 + 77 3 34 29 30 35 + 78 7 28 29 30 35 + 79 3 28 29 30 31 + 80 6 29 30 35 39 + 81 4 29 30 35 36 + 82 5 29 30 35 36 + 83 3 31 30 29 34 + 84 3 31 30 29 33 + 85 6 31 30 35 39 + 86 6 31 30 35 36 + 87 1 30 35 36 37 + 88 3 39 35 36 41 + 89 3 30 35 36 40 + 90 3 30 35 36 41 + 91 3 39 35 36 40 + 92 3 40 36 37 42 + 93 3 41 36 37 42 + 94 7 35 36 37 42 + 95 3 35 36 37 38 + 96 3 37 36 35 39 + 97 6 38 37 42 53 + 98 3 38 37 36 40 + 99 6 38 37 42 43 + 100 4 36 37 42 43 + 101 6 36 37 42 53 + 102 5 36 37 42 43 + 103 3 38 37 36 41 + 104 3 37 42 43 54 + 105 1 37 42 43 44 + 106 3 53 42 43 54 + 107 2 37 42 43 46 + 108 10 44 43 46 47 + 109 3 44 43 42 53 + 110 8 42 43 46 56 + 111 8 42 43 46 55 + 112 8 42 43 46 47 + 113 3 46 43 42 53 + 114 8 44 43 46 55 + 115 8 54 43 46 56 + 116 7 42 43 44 62 + 117 3 42 43 44 45 + 118 3 46 43 44 62 + 119 3 54 43 44 62 + 120 8 54 43 46 55 + 121 8 44 43 46 56 + 122 5 43 44 62 63 + 123 6 45 44 62 70 + 124 6 43 44 62 70 + 125 4 43 44 62 63 + 126 11 45 44 43 46 + 127 3 45 44 43 54 + 128 6 45 44 62 63 + 129 9 43 46 47 48 + 130 8 47 46 43 54 + 131 9 43 46 47 49 + 132 3 49 47 46 55 + 133 13 46 47 48 57 + 134 14 49 47 48 50 + 135 3 49 47 46 56 + 136 12 46 47 48 50 + 137 12 46 47 49 51 + 138 14 48 47 49 51 + 139 13 46 47 49 58 + 140 3 48 47 46 55 + 141 3 48 47 46 56 + 142 13 48 47 49 58 + 143 13 49 47 48 57 + 144 14 47 48 50 52 + 145 16 57 48 50 59 + 146 13 47 48 50 59 + 147 16 58 49 51 60 + 148 13 47 49 51 60 + 149 14 47 49 51 52 + 150 13 48 50 52 61 + 151 14 48 50 52 51 + 152 16 59 50 52 61 + 153 13 52 50 48 57 + 154 14 49 51 52 50 + 155 13 49 51 52 61 + 156 13 52 51 49 58 + 157 16 60 51 52 61 + 158 13 51 52 50 59 + 159 13 50 52 51 60 + 160 3 70 62 63 71 + 161 2 44 62 63 66 + 162 1 44 62 63 64 + 163 3 44 62 63 71 + 164 8 62 63 66 72 + 165 8 62 63 66 67 + 166 3 71 63 64 79 + 167 3 62 63 64 65 + 168 3 64 63 62 70 + 169 8 62 63 66 73 + 170 7 62 63 64 79 + 171 8 64 63 66 67 + 172 3 66 63 64 79 + 173 8 64 63 66 72 + 174 3 66 63 62 70 + 175 8 71 63 66 73 + 176 8 64 63 66 73 + 177 8 71 63 66 72 + 178 6 63 64 79 81 + 179 6 65 64 79 80 + 180 3 65 64 63 71 + 181 4 63 64 79 80 + 182 6 65 64 79 81 + 183 5 63 64 79 80 + 184 11 65 64 63 66 + 185 8 67 66 63 71 + 186 17 63 66 67 74 + 187 17 72 66 67 75 + 188 17 63 66 67 75 + 189 17 63 66 67 68 + 190 17 73 66 67 74 + 191 17 73 66 67 75 + 192 17 72 66 67 74 + 193 19 66 67 68 69 + 194 21 68 67 66 72 + 195 18 66 67 68 69 + 196 21 68 67 66 73 + 197 20 69 68 67 74 + 198 20 69 68 67 75 + 199 20 67 68 69 77 + 200 20 67 68 69 76 + 201 20 67 68 69 78 + 202 3 81 79 80 83 + 203 3 81 79 80 84 + 204 3 64 79 80 84 + 205 3 81 79 80 82 + 206 3 64 79 80 83 + 207 3 64 79 80 82 + +Impropers + + 1 2 7 1 8 19 + 2 1 1 2 7 3 + 3 1 9 8 28 10 + 4 2 28 9 29 32 + 5 1 30 29 35 31 + 6 2 35 30 36 39 + 7 1 37 36 42 38 + 8 2 42 37 43 53 + 9 1 44 43 62 45 + 10 2 62 44 63 70 + 11 1 64 63 79 65 + 12 2 79 64 80 81 diff --git a/examples/USER/plumed/in.peptide-plumed b/examples/USER/plumed/in.peptide-plumed new file mode 100644 index 0000000000..40657d987e --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed @@ -0,0 +1,40 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 2 all plumed plumedfile plumed.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 + + +run 100 diff --git a/examples/USER/plumed/plumed.dat b/examples/USER/plumed/plumed.dat new file mode 100644 index 0000000000..cab1b923f4 --- /dev/null +++ b/examples/USER/plumed/plumed.dat @@ -0,0 +1,6 @@ +c1: COM ATOMS=2,4,5,6 +c2: COM ATOMS=80,82,83,84 +d1: DISTANCE ATOMS=c1,37 +d2: DISTANCE ATOMS=c2,37 +h_pot: RESTRAINT ARG=d1,d2 CENTER=1.0,1.0 KAPPA=10,10 +PRINT ARG=d1,d2,h_pot.* From 2c5f2a668398f4d74bf192010df1094a60d8c974 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Mon, 2 Jul 2018 10:22:23 +0100 Subject: [PATCH 004/273] Added running example of PLUMED + LAMMPS Not sure if this has been done correctly. I add both the input and the output --- examples/USER/plumed/colvar | 102 ++++++++++++++++++++++++++++++++ examples/USER/plumed/p.log | 64 ++++++++++++++++++++ examples/USER/plumed/plumed.dat | 4 +- src/USER-PLUMED/fix_plumed.cpp | 18 +++--- src/USER-PLUMED/fix_plumed.h | 2 +- 5 files changed, 178 insertions(+), 12 deletions(-) create mode 100644 examples/USER/plumed/colvar create mode 100644 examples/USER/plumed/p.log diff --git a/examples/USER/plumed/colvar b/examples/USER/plumed/colvar new file mode 100644 index 0000000000..b909300108 --- /dev/null +++ b/examples/USER/plumed/colvar @@ -0,0 +1,102 @@ +#! FIELDS time d1 d2 h_pot.bias h_pot.force2 + 0.000000 0.993491 0.758366 0.292146 5.842921 + 0.002000 0.995476 0.759311 0.289757 5.795146 + 0.004000 0.997617 0.760436 0.286982 5.739638 + 0.006000 0.999849 0.761714 0.283902 5.678045 + 0.008000 1.002126 0.763111 0.280604 5.612077 + 0.010000 1.004429 0.764614 0.277132 5.542631 + 0.012000 1.006758 0.766228 0.273476 5.469523 + 0.014000 1.009119 0.767975 0.269594 5.391885 + 0.016000 1.011514 0.769873 0.265455 5.309099 + 0.018000 1.013929 0.771911 0.261093 5.221860 + 0.020000 1.016331 0.774032 0.256641 5.132826 + 0.022000 1.018671 0.776135 0.252321 5.046430 + 0.024000 1.020900 0.778094 0.248395 4.967894 + 0.026000 1.022979 0.779791 0.245099 4.901982 + 0.028000 1.024903 0.781143 0.242592 4.851832 + 0.030000 1.026700 0.782129 0.240904 4.818078 + 0.032000 1.028430 0.782795 0.239931 4.798623 + 0.034000 1.030167 0.783248 0.239458 4.789166 + 0.036000 1.031975 0.783621 0.239212 4.784241 + 0.038000 1.033897 0.784047 0.238923 4.778459 + 0.040000 1.035930 0.784627 0.238382 4.767647 + 0.042000 1.038033 0.785407 0.237484 4.749678 + 0.044000 1.040121 0.786369 0.236240 4.724809 + 0.046000 1.042091 0.787439 0.234768 4.695368 + 0.048000 1.043837 0.788511 0.233246 4.664919 + 0.050000 1.045280 0.789471 0.231863 4.637266 + 0.052000 1.046388 0.790226 0.230785 4.615694 + 0.054000 1.047178 0.790712 0.230136 4.602723 + 0.056000 1.047712 0.790891 0.230015 4.600302 + 0.058000 1.048083 0.790742 0.230505 4.610102 + 0.060000 1.048397 0.790252 0.231683 4.633662 + 0.062000 1.048754 0.789414 0.233618 4.672352 + 0.064000 1.049236 0.788230 0.236354 4.727083 + 0.066000 1.049892 0.786723 0.239883 4.797654 + 0.068000 1.050741 0.784954 0.244096 4.881918 + 0.070000 1.051768 0.783036 0.248766 4.975312 + 0.072000 1.052946 0.781120 0.253559 5.071179 + 0.074000 1.054246 0.779374 0.258094 5.161873 + 0.076000 1.055648 0.777949 0.262017 5.240331 + 0.078000 1.057143 0.776950 0.265083 5.301665 + 0.080000 1.058728 0.776406 0.267217 5.344336 + 0.082000 1.060397 0.776265 0.268526 5.370525 + 0.084000 1.062135 0.776403 0.269282 5.385630 + 0.086000 1.063918 0.776650 0.269855 5.397095 + 0.088000 1.065713 0.776818 0.270642 5.412845 + 0.090000 1.067486 0.776746 0.271982 5.439646 + 0.092000 1.069203 0.776331 0.274084 5.481685 + 0.094000 1.070839 0.775547 0.276987 5.539735 + 0.096000 1.072370 0.774448 0.280554 5.611090 + 0.098000 1.073779 0.773153 0.284514 5.690279 + 0.100000 1.075049 0.771810 0.288515 5.770295 + 0.102000 1.076167 0.770572 0.292193 5.843867 + 0.104000 1.077116 0.769571 0.295223 5.904455 + 0.106000 1.077882 0.768908 0.297345 5.946904 + 0.108000 1.078459 0.768648 0.298397 5.967949 + 0.110000 1.078853 0.768806 0.298342 5.966843 + 0.112000 1.079090 0.769340 0.297296 5.945926 + 0.114000 1.079219 0.770158 0.295516 5.910315 + 0.116000 1.079303 0.771141 0.293328 5.866561 + 0.118000 1.079415 0.772170 0.291067 5.821338 + 0.120000 1.079622 0.773135 0.289037 5.780735 + 0.122000 1.079971 0.773942 0.287489 5.749783 + 0.124000 1.080476 0.774515 0.286599 5.731971 + 0.126000 1.081103 0.774812 0.286437 5.728730 + 0.128000 1.081783 0.774828 0.286955 5.739101 + 0.130000 1.082421 0.774602 0.287987 5.759744 + 0.132000 1.082925 0.774217 0.289271 5.785430 + 0.134000 1.083230 0.773787 0.290498 5.809961 + 0.136000 1.083320 0.773437 0.291366 5.827324 + 0.138000 1.083229 0.773283 0.291638 5.832753 + 0.140000 1.083032 0.773417 0.291171 5.823427 + 0.142000 1.082825 0.773886 0.289936 5.798729 + 0.144000 1.082697 0.774694 0.288007 5.760150 + 0.146000 1.082716 0.775795 0.285550 5.710997 + 0.148000 1.082911 0.777098 0.282797 5.655945 + 0.150000 1.083267 0.778482 0.280018 5.600355 + 0.152000 1.083739 0.779816 0.277467 5.549332 + 0.154000 1.084258 0.780984 0.275337 5.506735 + 0.156000 1.084764 0.781917 0.273726 5.474524 + 0.158000 1.085215 0.782595 0.272633 5.452651 + 0.160000 1.085600 0.783050 0.271973 5.439463 + 0.162000 1.085939 0.783349 0.271614 5.432288 + 0.164000 1.086269 0.783582 0.271395 5.427907 + 0.166000 1.086632 0.783845 0.271141 5.422814 + 0.168000 1.087062 0.784236 0.270670 5.413403 + 0.170000 1.087575 0.784841 0.269815 5.396302 + 0.172000 1.088169 0.785721 0.268447 5.368936 + 0.174000 1.088827 0.786902 0.266506 5.330122 + 0.176000 1.089527 0.788366 0.264020 5.280397 + 0.178000 1.090249 0.790062 0.261095 5.221908 + 0.180000 1.090983 0.791909 0.257899 5.157988 + 0.182000 1.091725 0.793812 0.254634 5.092674 + 0.184000 1.092478 0.795671 0.251513 5.030265 + 0.186000 1.093252 0.797384 0.248746 4.974922 + 0.188000 1.094056 0.798864 0.246512 4.930235 + 0.190000 1.094906 0.800048 0.244938 4.898769 + 0.192000 1.095809 0.800909 0.244083 4.881658 + 0.194000 1.096763 0.801455 0.243917 4.878336 + 0.196000 1.097747 0.801731 0.244326 4.886516 + 0.198000 1.098716 0.801809 0.245123 4.902456 + 0.200000 1.099614 0.801777 0.246077 4.921541 diff --git a/examples/USER/plumed/p.log b/examples/USER/plumed/p.log new file mode 100644 index 0000000000..c2f2163c83 --- /dev/null +++ b/examples/USER/plumed/p.log @@ -0,0 +1,64 @@ +PLUMED: PLUMED is starting +PLUMED: Version: 2.5.0-dev (git: a10584333) compiled on Jul 2 2018 at 09:29:02 +PLUMED: Please cite this paper when using PLUMED [1] +PLUMED: For further information see the PLUMED web page at http://www.plumed.org +PLUMED: Root: /data/gt/mycodes/plumed2/ +PLUMED: For installed feature, see /data/gt/mycodes/plumed2//src/config/config.txt +PLUMED: Molecular dynamics engine: LAMMPS +PLUMED: Precision of reals: 8 +PLUMED: Running over 1 node +PLUMED: Number of threads: 1 +PLUMED: Cache line size: 512 +PLUMED: Number of atoms: 2004 +PLUMED: File suffix: +PLUMED: FILE: plumed.dat +PLUMED: Action COM +PLUMED: with label c1 +PLUMED: serial associated to this virtual atom is 2005 +PLUMED: of atoms +PLUMED: 2 4 5 6 +PLUMED: broken molecules will be rebuilt assuming atoms are in the proper order +PLUMED: Action COM +PLUMED: with label c2 +PLUMED: serial associated to this virtual atom is 2006 +PLUMED: of atoms +PLUMED: 80 82 83 84 +PLUMED: broken molecules will be rebuilt assuming atoms are in the proper order +PLUMED: Action DISTANCE +PLUMED: with label d1 +PLUMED: between atoms 2005 37 +PLUMED: using periodic boundary conditions +PLUMED: Action DISTANCE +PLUMED: with label d2 +PLUMED: between atoms 2006 37 +PLUMED: using periodic boundary conditions +PLUMED: Action RESTRAINT +PLUMED: with label h_pot +PLUMED: with arguments d1 d2 +PLUMED: added component to this action: h_pot.bias +PLUMED: at 1.000000 1.000000 +PLUMED: with harmonic force constant 10.000000 10.000000 +PLUMED: and linear force constant 0.000000 0.000000 +PLUMED: added component to this action: h_pot.force2 +PLUMED: Action PRINT +PLUMED: with label @5 +PLUMED: with stride 1 +PLUMED: with arguments d1 d2 h_pot.bias h_pot.force2 +PLUMED: on file colvar +PLUMED: with format %f +PLUMED: END FILE: plumed.dat +PLUMED: Timestep: 0.002000 +PLUMED: KbT has not been set by the MD engine +PLUMED: It should be set by hand where needed +PLUMED: Relevant bibliography: +PLUMED: [1] Tribello, Bonomi, Branduardi, Camilloni, and Bussi, Comput. Phys. Commun. 185, 604 (2014) +PLUMED: Please read and cite where appropriate! +PLUMED: Finished setup +PLUMED: Cycles Total Average Minumum Maximum +PLUMED: 1 0.015035 0.015035 0.015035 0.015035 +PLUMED: 1 Prepare dependencies 101 0.000123 0.000001 0.000001 0.000004 +PLUMED: 2 Sharing data 101 0.006837 0.000068 0.000047 0.000891 +PLUMED: 3 Waiting for data 101 0.000967 0.000010 0.000007 0.000041 +PLUMED: 4 Calculating (forward loop) 101 0.001616 0.000016 0.000011 0.000043 +PLUMED: 5 Applying (backward loop) 101 0.002159 0.000021 0.000018 0.000057 +PLUMED: 6 Update 101 0.001059 0.000010 0.000006 0.000086 diff --git a/examples/USER/plumed/plumed.dat b/examples/USER/plumed/plumed.dat index cab1b923f4..d316d4b035 100644 --- a/examples/USER/plumed/plumed.dat +++ b/examples/USER/plumed/plumed.dat @@ -2,5 +2,5 @@ c1: COM ATOMS=2,4,5,6 c2: COM ATOMS=80,82,83,84 d1: DISTANCE ATOMS=c1,37 d2: DISTANCE ATOMS=c2,37 -h_pot: RESTRAINT ARG=d1,d2 CENTER=1.0,1.0 KAPPA=10,10 -PRINT ARG=d1,d2,h_pot.* +h_pot: RESTRAINT ARG=d1,d2 AT=1.0,1.0 KAPPA=10,10 +PRINT ARG=d1,d2,h_pot.* FILE=colvar diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 91afd367b1..15753596a5 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -223,8 +223,8 @@ void FixPlumed::post_force(int vflag) // set up local virial/box. plumed uses full 3x3 matrices - double virial[3][3]; - for(int i=0;i<3;i++) for(int j=0;j<3;j++) virial[i][j]=0.0; + double plmd_virial[3][3]; + for(int i=0;i<3;i++) for(int j=0;j<3;j++) plmd_virial[i][j]=0.0; double box[3][3]; for(int i=0;i<3;i++) for(int j=0;j<3;j++) box[i][j]=0.0; box[0][0]=domain->h[0]; @@ -244,7 +244,7 @@ void FixPlumed::post_force(int vflag) p->cmd("setForces",&atom->f[0][0]); p->cmd("setMasses",&masses[0]); if(atom->q) p->cmd("setCharges",&charges[0]); - p->cmd("setVirial",&virial[0][0]); + p->cmd("setVirial",&plmd_virial[0][0]); p->cmd("getBias",&bias); // pass the energy @@ -265,12 +265,12 @@ void FixPlumed::post_force(int vflag) p->cmd("calc"); // retransform virial to lammps representation: - Fix::virial[0]=-virial[0][0]; - Fix::virial[1]=-virial[1][1]; - Fix::virial[2]=-virial[2][2]; - Fix::virial[3]=-virial[0][1]; - Fix::virial[4]=-virial[0][2]; - Fix::virial[5]=-virial[1][2]; + Fix::virial[0]=-plmd_virial[0][0]; + Fix::virial[1]=-plmd_virial[1][1]; + Fix::virial[2]=-plmd_virial[2][2]; + Fix::virial[3]=-plmd_virial[0][1]; + Fix::virial[4]=-plmd_virial[0][2]; + Fix::virial[5]=-plmd_virial[1][2]; } void FixPlumed::post_force_respa(int vflag, int ilevel, int iloop) diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index 055dc6f1d4..6bd6d59f39 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -11,7 +11,7 @@ FixStyle(plumed,FixPlumed) #include "fix.h" #include "compute.h" // the plumed header that defines the class// -#include "../Plumed.h" +#include "Plumed.h" namespace LAMMPS_NS { From b299bfa821efe38fc761a15f3eded8820ad22d30 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Mon, 2 Jul 2018 13:58:38 +0100 Subject: [PATCH 005/273] Started adding tests on PLUMED interface --- examples/USER/plumed/check-plumed.sh | 32 ++++++++ examples/USER/plumed/colvar | 102 ------------------------- examples/USER/plumed/in.peptide-plumed | 7 +- examples/USER/plumed/p.log | 64 ---------------- examples/USER/plumed/plumed.dat | 8 +- src/USER-PLUMED/fix_plumed.cpp | 3 + 6 files changed, 44 insertions(+), 172 deletions(-) create mode 100755 examples/USER/plumed/check-plumed.sh delete mode 100644 examples/USER/plumed/colvar delete mode 100644 examples/USER/plumed/p.log diff --git a/examples/USER/plumed/check-plumed.sh b/examples/USER/plumed/check-plumed.sh new file mode 100755 index 0000000000..584b4d3297 --- /dev/null +++ b/examples/USER/plumed/check-plumed.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Check PLUMED positions +nlines=`paste plumed.xyz lammps.xyz | awk '{if( $2<$6-0.0001 || $2>$6+0.0001 || $3<$7-0.0001 || $3>$7+0.0001 || $4<$8-0.0002 || $4>$8+0.0002 ) if( $5!="Timestep:" && $1!=2004 ) print $0}' | wc -l` +if [ "$nlines" -gt 0 ] ; then + echo ERROR passing positions from LAMMPS to PLUMED + paste plumed.xyz lammps.xyz | awk '{if( $2<$6-0.0001 || $2>$6+0.0001 || $3<$7-0.0001 || $3>$7+0.0001 || $4<$8-0.0002 || $4>$8+0.0002 ) if( $5!="Timestep:" && $1!=2004 ) print $0, $2-$6, $3-$7, $4-$8}' +fi + +# CHECK PLUMED timestep +tstep=`grep timestep in.peptide-plumed | awk '{print $2}'` +tstep=`echo $tstep \* 0.001 \* 10 | bc -l` +nlines=`wc -l plmd_energy | awk '{print $1}'` + +for ((i=3;i<$nlines;i++)); do + told=`head -n $(($i-1)) plmd_energy | tail -n 1 | awk '{print $1}'` + tnew=`head -n $i plmd_energy | tail -n 1 | awk '{print $1}'` + tdiff=`echo \( $tnew - $told - $tstep \) \> 0 | bc -l` + if [ $tdiff -gt 0 ] ; then + echo ERROR passing timestep from LAMMPS to PLUMED + fi +done + +# Check PLUMED energy +tail -n +2 plmd_energy > plmd_energy2 +nlines=`paste lammps_energy plmd_energy2 | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` +if [ "$nlines" -gt 0 ] ; then + echo ERROR passing potential energy from LAMMPS to PLUMED + paste lammps_energy plmd_energy2 | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' +fi +rm -f plmd_energy2 + diff --git a/examples/USER/plumed/colvar b/examples/USER/plumed/colvar deleted file mode 100644 index b909300108..0000000000 --- a/examples/USER/plumed/colvar +++ /dev/null @@ -1,102 +0,0 @@ -#! FIELDS time d1 d2 h_pot.bias h_pot.force2 - 0.000000 0.993491 0.758366 0.292146 5.842921 - 0.002000 0.995476 0.759311 0.289757 5.795146 - 0.004000 0.997617 0.760436 0.286982 5.739638 - 0.006000 0.999849 0.761714 0.283902 5.678045 - 0.008000 1.002126 0.763111 0.280604 5.612077 - 0.010000 1.004429 0.764614 0.277132 5.542631 - 0.012000 1.006758 0.766228 0.273476 5.469523 - 0.014000 1.009119 0.767975 0.269594 5.391885 - 0.016000 1.011514 0.769873 0.265455 5.309099 - 0.018000 1.013929 0.771911 0.261093 5.221860 - 0.020000 1.016331 0.774032 0.256641 5.132826 - 0.022000 1.018671 0.776135 0.252321 5.046430 - 0.024000 1.020900 0.778094 0.248395 4.967894 - 0.026000 1.022979 0.779791 0.245099 4.901982 - 0.028000 1.024903 0.781143 0.242592 4.851832 - 0.030000 1.026700 0.782129 0.240904 4.818078 - 0.032000 1.028430 0.782795 0.239931 4.798623 - 0.034000 1.030167 0.783248 0.239458 4.789166 - 0.036000 1.031975 0.783621 0.239212 4.784241 - 0.038000 1.033897 0.784047 0.238923 4.778459 - 0.040000 1.035930 0.784627 0.238382 4.767647 - 0.042000 1.038033 0.785407 0.237484 4.749678 - 0.044000 1.040121 0.786369 0.236240 4.724809 - 0.046000 1.042091 0.787439 0.234768 4.695368 - 0.048000 1.043837 0.788511 0.233246 4.664919 - 0.050000 1.045280 0.789471 0.231863 4.637266 - 0.052000 1.046388 0.790226 0.230785 4.615694 - 0.054000 1.047178 0.790712 0.230136 4.602723 - 0.056000 1.047712 0.790891 0.230015 4.600302 - 0.058000 1.048083 0.790742 0.230505 4.610102 - 0.060000 1.048397 0.790252 0.231683 4.633662 - 0.062000 1.048754 0.789414 0.233618 4.672352 - 0.064000 1.049236 0.788230 0.236354 4.727083 - 0.066000 1.049892 0.786723 0.239883 4.797654 - 0.068000 1.050741 0.784954 0.244096 4.881918 - 0.070000 1.051768 0.783036 0.248766 4.975312 - 0.072000 1.052946 0.781120 0.253559 5.071179 - 0.074000 1.054246 0.779374 0.258094 5.161873 - 0.076000 1.055648 0.777949 0.262017 5.240331 - 0.078000 1.057143 0.776950 0.265083 5.301665 - 0.080000 1.058728 0.776406 0.267217 5.344336 - 0.082000 1.060397 0.776265 0.268526 5.370525 - 0.084000 1.062135 0.776403 0.269282 5.385630 - 0.086000 1.063918 0.776650 0.269855 5.397095 - 0.088000 1.065713 0.776818 0.270642 5.412845 - 0.090000 1.067486 0.776746 0.271982 5.439646 - 0.092000 1.069203 0.776331 0.274084 5.481685 - 0.094000 1.070839 0.775547 0.276987 5.539735 - 0.096000 1.072370 0.774448 0.280554 5.611090 - 0.098000 1.073779 0.773153 0.284514 5.690279 - 0.100000 1.075049 0.771810 0.288515 5.770295 - 0.102000 1.076167 0.770572 0.292193 5.843867 - 0.104000 1.077116 0.769571 0.295223 5.904455 - 0.106000 1.077882 0.768908 0.297345 5.946904 - 0.108000 1.078459 0.768648 0.298397 5.967949 - 0.110000 1.078853 0.768806 0.298342 5.966843 - 0.112000 1.079090 0.769340 0.297296 5.945926 - 0.114000 1.079219 0.770158 0.295516 5.910315 - 0.116000 1.079303 0.771141 0.293328 5.866561 - 0.118000 1.079415 0.772170 0.291067 5.821338 - 0.120000 1.079622 0.773135 0.289037 5.780735 - 0.122000 1.079971 0.773942 0.287489 5.749783 - 0.124000 1.080476 0.774515 0.286599 5.731971 - 0.126000 1.081103 0.774812 0.286437 5.728730 - 0.128000 1.081783 0.774828 0.286955 5.739101 - 0.130000 1.082421 0.774602 0.287987 5.759744 - 0.132000 1.082925 0.774217 0.289271 5.785430 - 0.134000 1.083230 0.773787 0.290498 5.809961 - 0.136000 1.083320 0.773437 0.291366 5.827324 - 0.138000 1.083229 0.773283 0.291638 5.832753 - 0.140000 1.083032 0.773417 0.291171 5.823427 - 0.142000 1.082825 0.773886 0.289936 5.798729 - 0.144000 1.082697 0.774694 0.288007 5.760150 - 0.146000 1.082716 0.775795 0.285550 5.710997 - 0.148000 1.082911 0.777098 0.282797 5.655945 - 0.150000 1.083267 0.778482 0.280018 5.600355 - 0.152000 1.083739 0.779816 0.277467 5.549332 - 0.154000 1.084258 0.780984 0.275337 5.506735 - 0.156000 1.084764 0.781917 0.273726 5.474524 - 0.158000 1.085215 0.782595 0.272633 5.452651 - 0.160000 1.085600 0.783050 0.271973 5.439463 - 0.162000 1.085939 0.783349 0.271614 5.432288 - 0.164000 1.086269 0.783582 0.271395 5.427907 - 0.166000 1.086632 0.783845 0.271141 5.422814 - 0.168000 1.087062 0.784236 0.270670 5.413403 - 0.170000 1.087575 0.784841 0.269815 5.396302 - 0.172000 1.088169 0.785721 0.268447 5.368936 - 0.174000 1.088827 0.786902 0.266506 5.330122 - 0.176000 1.089527 0.788366 0.264020 5.280397 - 0.178000 1.090249 0.790062 0.261095 5.221908 - 0.180000 1.090983 0.791909 0.257899 5.157988 - 0.182000 1.091725 0.793812 0.254634 5.092674 - 0.184000 1.092478 0.795671 0.251513 5.030265 - 0.186000 1.093252 0.797384 0.248746 4.974922 - 0.188000 1.094056 0.798864 0.246512 4.930235 - 0.190000 1.094906 0.800048 0.244938 4.898769 - 0.192000 1.095809 0.800909 0.244083 4.881658 - 0.194000 1.096763 0.801455 0.243917 4.878336 - 0.196000 1.097747 0.801731 0.244326 4.886516 - 0.198000 1.098716 0.801809 0.245123 4.902456 - 0.200000 1.099614 0.801777 0.246077 4.921541 diff --git a/examples/USER/plumed/in.peptide-plumed b/examples/USER/plumed/in.peptide-plumed index 40657d987e..2f5e8d026f 100644 --- a/examples/USER/plumed/in.peptide-plumed +++ b/examples/USER/plumed/in.peptide-plumed @@ -35,6 +35,9 @@ fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 thermo_style custom step temp etotal pe ke epair ebond f_2 thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy - -run 100 +run 101 diff --git a/examples/USER/plumed/p.log b/examples/USER/plumed/p.log deleted file mode 100644 index c2f2163c83..0000000000 --- a/examples/USER/plumed/p.log +++ /dev/null @@ -1,64 +0,0 @@ -PLUMED: PLUMED is starting -PLUMED: Version: 2.5.0-dev (git: a10584333) compiled on Jul 2 2018 at 09:29:02 -PLUMED: Please cite this paper when using PLUMED [1] -PLUMED: For further information see the PLUMED web page at http://www.plumed.org -PLUMED: Root: /data/gt/mycodes/plumed2/ -PLUMED: For installed feature, see /data/gt/mycodes/plumed2//src/config/config.txt -PLUMED: Molecular dynamics engine: LAMMPS -PLUMED: Precision of reals: 8 -PLUMED: Running over 1 node -PLUMED: Number of threads: 1 -PLUMED: Cache line size: 512 -PLUMED: Number of atoms: 2004 -PLUMED: File suffix: -PLUMED: FILE: plumed.dat -PLUMED: Action COM -PLUMED: with label c1 -PLUMED: serial associated to this virtual atom is 2005 -PLUMED: of atoms -PLUMED: 2 4 5 6 -PLUMED: broken molecules will be rebuilt assuming atoms are in the proper order -PLUMED: Action COM -PLUMED: with label c2 -PLUMED: serial associated to this virtual atom is 2006 -PLUMED: of atoms -PLUMED: 80 82 83 84 -PLUMED: broken molecules will be rebuilt assuming atoms are in the proper order -PLUMED: Action DISTANCE -PLUMED: with label d1 -PLUMED: between atoms 2005 37 -PLUMED: using periodic boundary conditions -PLUMED: Action DISTANCE -PLUMED: with label d2 -PLUMED: between atoms 2006 37 -PLUMED: using periodic boundary conditions -PLUMED: Action RESTRAINT -PLUMED: with label h_pot -PLUMED: with arguments d1 d2 -PLUMED: added component to this action: h_pot.bias -PLUMED: at 1.000000 1.000000 -PLUMED: with harmonic force constant 10.000000 10.000000 -PLUMED: and linear force constant 0.000000 0.000000 -PLUMED: added component to this action: h_pot.force2 -PLUMED: Action PRINT -PLUMED: with label @5 -PLUMED: with stride 1 -PLUMED: with arguments d1 d2 h_pot.bias h_pot.force2 -PLUMED: on file colvar -PLUMED: with format %f -PLUMED: END FILE: plumed.dat -PLUMED: Timestep: 0.002000 -PLUMED: KbT has not been set by the MD engine -PLUMED: It should be set by hand where needed -PLUMED: Relevant bibliography: -PLUMED: [1] Tribello, Bonomi, Branduardi, Camilloni, and Bussi, Comput. Phys. Commun. 185, 604 (2014) -PLUMED: Please read and cite where appropriate! -PLUMED: Finished setup -PLUMED: Cycles Total Average Minumum Maximum -PLUMED: 1 0.015035 0.015035 0.015035 0.015035 -PLUMED: 1 Prepare dependencies 101 0.000123 0.000001 0.000001 0.000004 -PLUMED: 2 Sharing data 101 0.006837 0.000068 0.000047 0.000891 -PLUMED: 3 Waiting for data 101 0.000967 0.000010 0.000007 0.000041 -PLUMED: 4 Calculating (forward loop) 101 0.001616 0.000016 0.000011 0.000043 -PLUMED: 5 Applying (backward loop) 101 0.002159 0.000021 0.000018 0.000057 -PLUMED: 6 Update 101 0.001059 0.000010 0.000006 0.000086 diff --git a/examples/USER/plumed/plumed.dat b/examples/USER/plumed/plumed.dat index d316d4b035..27f4d635fb 100644 --- a/examples/USER/plumed/plumed.dat +++ b/examples/USER/plumed/plumed.dat @@ -1,6 +1,6 @@ +UNITS ENERGY=kcal/mol c1: COM ATOMS=2,4,5,6 c2: COM ATOMS=80,82,83,84 -d1: DISTANCE ATOMS=c1,37 -d2: DISTANCE ATOMS=c2,37 -h_pot: RESTRAINT ARG=d1,d2 AT=1.0,1.0 KAPPA=10,10 -PRINT ARG=d1,d2,h_pot.* FILE=colvar +energy: ENERGY +DUMPATOMS ATOMS=1-2004 FILE=plumed.xyz UNITS=A PRECISION=4 STRIDE=10 +PRINT ARG=energy STRIDE=10 FMT=%8.4f FILE=plmd_energy diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 15753596a5..b6af7c691d 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -32,6 +32,9 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : if (!atom->tag_enable) error->all(FLERR,"fix plumed requires atom tags"); // Initialize plumed: p=new PLMD::Plumed; +// Check API version + int api_version; p->cmd("getApiVersion",&api_version); + if( api_version!=6 ) error->all(FLERR,"invalid api version for PLUMED"); // If the -partition option is activated then enable inter-partition communication if (universe->existflag == 1) { From 7f5a83cb1ddc1ce1ef1b0066bcdf7bd10ac39f94 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Mon, 2 Jul 2018 17:04:19 +0100 Subject: [PATCH 006/273] Added first go at checks on PLUMED interface to LAMMPS --- examples/USER/plumed/check-plumed.sh | 49 +++++++++++++++++++ examples/USER/plumed/clear-files.sh | 8 +++ examples/USER/plumed/in.peptide-plumed | 1 + .../plumed/in.peptide-plumed-eng-force-plumed | 41 ++++++++++++++++ .../plumed/in.peptide-plumed-engforce-ref | 40 +++++++++++++++ examples/USER/plumed/in.peptide-plumed-expand | 40 +++++++++++++++ .../plumed/in.peptide-plumed-lammps-restraint | 44 +++++++++++++++++ examples/USER/plumed/in.peptide-plumed-npt | 43 ++++++++++++++++ examples/USER/plumed/in.peptide-plumed-npt2 | 43 ++++++++++++++++ .../plumed/in.peptide-plumed-plumed-restraint | 44 +++++++++++++++++ examples/USER/plumed/plumed-eng-ref.dat | 2 + examples/USER/plumed/plumed-engforce.dat | 3 ++ examples/USER/plumed/plumed-expand.dat | 3 ++ examples/USER/plumed/plumed-norestraint.dat | 3 ++ examples/USER/plumed/plumed-restraint.dat | 4 ++ examples/USER/plumed/plumed.dat | 1 + examples/USER/plumed/plumed_npt.dat | 2 + examples/USER/plumed/plumed_npt2.dat | 3 ++ 18 files changed, 374 insertions(+) create mode 100755 examples/USER/plumed/clear-files.sh create mode 100644 examples/USER/plumed/in.peptide-plumed-eng-force-plumed create mode 100644 examples/USER/plumed/in.peptide-plumed-engforce-ref create mode 100644 examples/USER/plumed/in.peptide-plumed-expand create mode 100644 examples/USER/plumed/in.peptide-plumed-lammps-restraint create mode 100644 examples/USER/plumed/in.peptide-plumed-npt create mode 100644 examples/USER/plumed/in.peptide-plumed-npt2 create mode 100644 examples/USER/plumed/in.peptide-plumed-plumed-restraint create mode 100644 examples/USER/plumed/plumed-eng-ref.dat create mode 100644 examples/USER/plumed/plumed-engforce.dat create mode 100644 examples/USER/plumed/plumed-expand.dat create mode 100644 examples/USER/plumed/plumed-norestraint.dat create mode 100644 examples/USER/plumed/plumed-restraint.dat create mode 100644 examples/USER/plumed/plumed_npt.dat create mode 100644 examples/USER/plumed/plumed_npt2.dat diff --git a/examples/USER/plumed/check-plumed.sh b/examples/USER/plumed/check-plumed.sh index 584b4d3297..720bc34400 100755 --- a/examples/USER/plumed/check-plumed.sh +++ b/examples/USER/plumed/check-plumed.sh @@ -1,5 +1,10 @@ #!/bin/bash +LAMMPS=../../../src/lmp_mpi + +# Run first LAMMPS calculation +$LAMMPS < in.peptide-plumed + # Check PLUMED positions nlines=`paste plumed.xyz lammps.xyz | awk '{if( $2<$6-0.0001 || $2>$6+0.0001 || $3<$7-0.0001 || $3>$7+0.0001 || $4<$8-0.0002 || $4>$8+0.0002 ) if( $5!="Timestep:" && $1!=2004 ) print $0}' | wc -l` if [ "$nlines" -gt 0 ] ; then @@ -30,3 +35,47 @@ if [ "$nlines" -gt 0 ] ; then fi rm -f plmd_energy2 +# Check PLMD mass and charge +nlines=`wc -l mq_lammps | awk '{print $1}'` +sline=`grep -n "mass q" mq_lammps | awk '{print $1}' | sed -e s/:ITEM://` +for ((i=$sline+1;i<$nlines;i++)); do + # Mass and charge from LAMMPS + index=`head -n $i mq_lammps | tail -n 1 | awk '{print $1}'` + l_mass=`head -n $i mq_lammps | tail -n 1 | awk '{print $2}'` + l_charge=`head -n $i mq_lammps | tail -n 1 | awk '{print $3}'` + # Mass and charge from PLUMED + p_mass=`head -n $(($index+1)) mq_plumed | tail -n 1 | awk '{print $2}'` + p_charge=`head -n $(($index+1)) mq_plumed | tail -n 1 | awk '{print $3}'` + # Check PLUMED mass is same as lammps mass + mdiff=`echo \( $l_mass - $p_mass \) \> 0 | bc -l` + if [ "$mdiff" -gt 0 ] ; then + echo ERROR passing masses from LAMMPS to PLUMED + fi + # Check PLUMED charge is same as lammps charge + qdiff=`echo \( $l_charge - $p_charge \) \> 0 | bc -l` + if [ "$qdiff" -gt 0 ] ; then + echo ERROR passing charges from LAMMPS to PLUMED + fi +done + +# Run calculations to test adding restraint on bond +$LAMMPS < in.peptide-plumed-plumed-restraint +$LAMMPS < in.peptide-plumed-lammps-restraint +# Now compare value of distance when lammps and plumed restraint the distance +nlines=`paste lammps_restraint plumed_restraint | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` +if [ "$nlines" -gt 0 ] ; then + echo ERROR passing forces from PLUMED back to LAMMPS +fi + +# Nothing from here works + +# Now try to simply increase the size of the box by applying a moving restraint on the volume +$LAMMPS < in.peptide-plumed-expand + +# Now run calculations to test virial +$LAMMPS < in.peptide-plumed-npt +$LAMMPS < in.peptide-plumed-npt2 + +# Now run calculations to check forces on energy +$LAMMPS < in.peptide-plumed-engforce-ref +$LAMMPS < in.peptide-plumed-eng-force-plumed diff --git a/examples/USER/plumed/clear-files.sh b/examples/USER/plumed/clear-files.sh new file mode 100755 index 0000000000..5e588146f7 --- /dev/null +++ b/examples/USER/plumed/clear-files.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Data from first set of checks +rm bck.* plmd_energy lammps_energy mq_plumed mq_lammps lammps.xyz plumed.xyz p.log +# Data from checks on restraints +rm bck.* p.log lammps_restraint plumed_restraint +# Data from checks on virial +rm bck.* lammps_energy lammps.xyz log.lammps plmd_volume p.log plmd_volume_without_restraint plmd_volume_with_restraint diff --git a/examples/USER/plumed/in.peptide-plumed b/examples/USER/plumed/in.peptide-plumed index 2f5e8d026f..ef9d15b961 100644 --- a/examples/USER/plumed/in.peptide-plumed +++ b/examples/USER/plumed/in.peptide-plumed @@ -39,5 +39,6 @@ dump dd all xyz 10 lammps.xyz variable step equal step variable pe equal pe fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-eng-force-plumed b/examples/USER/plumed/in.peptide-plumed-eng-force-plumed new file mode 100644 index 0000000000..e45fd0844a --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-eng-force-plumed @@ -0,0 +1,41 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 1.8181818181818181 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all nvt temp 363.0 363.0 90.90909090909091 tchain 1 + +fix 2 all plumed plumedfile plumed-engforce.dat outfile p.log + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-engforce-ref b/examples/USER/plumed/in.peptide-plumed-engforce-ref new file mode 100644 index 0000000000..d812e2b015 --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-engforce-ref @@ -0,0 +1,40 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all nvt temp 300.0 300.0 100.0 tchain 1 + +fix 2 all plumed plumedfile plumed-eng-ref.dat outfile p.log + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-expand b/examples/USER/plumed/in.peptide-plumed-expand new file mode 100644 index 0000000000..ed70929ab6 --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-expand @@ -0,0 +1,40 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all npt temp 275.0 275.0 100.0 iso 0.987 0.987 400.0 tchain 1 + +fix 2 all plumed plumedfile plumed-expand.dat outfile p.log + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-lammps-restraint b/examples/USER/plumed/in.peptide-plumed-lammps-restraint new file mode 100644 index 0000000000..3476c76b22 --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-lammps-restraint @@ -0,0 +1,44 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 +fix 6 all restrain bond 45 48 1000.0 1000.0 6.0 +fix 2 all plumed plumedfile plumed-norestraint.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-npt b/examples/USER/plumed/in.peptide-plumed-npt new file mode 100644 index 0000000000..1fe9e0c2fa --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-npt @@ -0,0 +1,43 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 +fix 1 all npt temp 275.0 275.0 100.0 iso 0.987 0.987 400.0 tchain 1 + +fix 2 all plumed plumedfile plumed_npt.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-npt2 b/examples/USER/plumed/in.peptide-plumed-npt2 new file mode 100644 index 0000000000..984407d1e8 --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-npt2 @@ -0,0 +1,43 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 +fix 1 all npt temp 275.0 275.0 100.0 iso 987.9 987.9 400.0 tchain 1 + +fix 2 all plumed plumedfile plumed_npt2.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-plumed-restraint b/examples/USER/plumed/in.peptide-plumed-plumed-restraint new file mode 100644 index 0000000000..8ce35dd720 --- /dev/null +++ b/examples/USER/plumed/in.peptide-plumed-plumed-restraint @@ -0,0 +1,44 @@ +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +group one id 2 4 5 6 +group two id 80 82 83 84 +group ref id 37 +group colvar union one two ref + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 2 all plumed plumedfile plumed-restraint.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +dump dd all xyz 10 lammps.xyz +variable step equal step +variable pe equal pe +fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy +dump mq all custom 200 mq_lammps id mass q + +run 101 diff --git a/examples/USER/plumed/plumed-eng-ref.dat b/examples/USER/plumed/plumed-eng-ref.dat new file mode 100644 index 0000000000..90e589157e --- /dev/null +++ b/examples/USER/plumed/plumed-eng-ref.dat @@ -0,0 +1,2 @@ +e: ENERGY +PRINT ARG=e FILE=energy_ref FMT=%8.4f diff --git a/examples/USER/plumed/plumed-engforce.dat b/examples/USER/plumed/plumed-engforce.dat new file mode 100644 index 0000000000..31a1564798 --- /dev/null +++ b/examples/USER/plumed/plumed-engforce.dat @@ -0,0 +1,3 @@ +e: ENERGY +RESTRAINT ARG=e AT=0 SLOPE=0.1 +PRINT ARG=e FILE=engforced FMT=%8.4f diff --git a/examples/USER/plumed/plumed-expand.dat b/examples/USER/plumed/plumed-expand.dat new file mode 100644 index 0000000000..29a8cf4182 --- /dev/null +++ b/examples/USER/plumed/plumed-expand.dat @@ -0,0 +1,3 @@ +v: VOLUME +r: MOVINGRESTRAINT ARG=v KAPPA0=100. AT0=20 AT1=30 STEP0=0 STEP1=100 +PRINT ARG=v,r.* FILE=expanding diff --git a/examples/USER/plumed/plumed-norestraint.dat b/examples/USER/plumed/plumed-norestraint.dat new file mode 100644 index 0000000000..1fed74ae81 --- /dev/null +++ b/examples/USER/plumed/plumed-norestraint.dat @@ -0,0 +1,3 @@ +UNITS LENGTH=A +dd: DISTANCE ATOMS=45,48 +PRINT ARG=dd FILE=lammps_restraint FMT=%8.4f diff --git a/examples/USER/plumed/plumed-restraint.dat b/examples/USER/plumed/plumed-restraint.dat new file mode 100644 index 0000000000..6ae4c8ce10 --- /dev/null +++ b/examples/USER/plumed/plumed-restraint.dat @@ -0,0 +1,4 @@ +UNITS LENGTH=A ENERGY=kcal/mol +dd: DISTANCE ATOMS=45,48 +RESTRAINT ARG=dd KAPPA=2000 AT=6.0 +PRINT ARG=dd FILE=plumed_restraint FMT=%8.4f diff --git a/examples/USER/plumed/plumed.dat b/examples/USER/plumed/plumed.dat index 27f4d635fb..7fe1290c0d 100644 --- a/examples/USER/plumed/plumed.dat +++ b/examples/USER/plumed/plumed.dat @@ -4,3 +4,4 @@ c2: COM ATOMS=80,82,83,84 energy: ENERGY DUMPATOMS ATOMS=1-2004 FILE=plumed.xyz UNITS=A PRECISION=4 STRIDE=10 PRINT ARG=energy STRIDE=10 FMT=%8.4f FILE=plmd_energy +DUMPMASSCHARGE FILE=mq_plumed diff --git a/examples/USER/plumed/plumed_npt.dat b/examples/USER/plumed/plumed_npt.dat new file mode 100644 index 0000000000..d41c41fa45 --- /dev/null +++ b/examples/USER/plumed/plumed_npt.dat @@ -0,0 +1,2 @@ +vv: VOLUME +PRINT ARG=vv FILE=plmd_volume_without_restraint diff --git a/examples/USER/plumed/plumed_npt2.dat b/examples/USER/plumed/plumed_npt2.dat new file mode 100644 index 0000000000..ea26ab3042 --- /dev/null +++ b/examples/USER/plumed/plumed_npt2.dat @@ -0,0 +1,3 @@ +vv: VOLUME +RESTRAINT AT=0.0 ARG=vv SLOPE=-60.221429 +PRINT ARG=vv FILE=plmd_volume_with_restraint From 43cdca80f287e2af980faf1732aab98285028ad7 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Mon, 9 Jul 2018 15:06:10 +0100 Subject: [PATCH 007/273] Fixed passing of charges --- src/USER-PLUMED/fix_plumed.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index b6af7c691d..89115c4cce 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -34,7 +34,7 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : p=new PLMD::Plumed; // Check API version int api_version; p->cmd("getApiVersion",&api_version); - if( api_version!=6 ) error->all(FLERR,"invalid api version for PLUMED"); + if( api_version>6 ) error->all(FLERR,"invalid api version for PLUMED"); // If the -partition option is activated then enable inter-partition communication if (universe->existflag == 1) { @@ -218,7 +218,7 @@ void FixPlumed::post_force(int vflag) for(int i=0;itag[i]-1; masses[i]=atom->mass[atom->type[i]]; - if(atom->q) charges[i]=atom->q[atom->type[i]]; + if(atom->q) charges[i]=atom->q[i]; } p->cmd("setAtomsNlocal",&nlocal); p->cmd("setAtomsGatindex",gatindex); From c84ae38e349b8c7bc1861ae0fac8f90ac5352661 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Mon, 9 Jul 2018 17:27:41 +0100 Subject: [PATCH 008/273] Fixed installation scripts for PLUMED --- src/USER-PLUMED/Install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index 01552d7134..e48bd546b0 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -5,12 +5,13 @@ if (test $1 = 1) then if (test -e ../Makefile.package) then sed -i -e 's|^PKG_LIB =[ \t]*|& $(PLUMED_LOAD) |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|& -D__PLUMED_HAS_DLOPEN |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then # multiline form needed for BSD sed on Macs sed -i -e '4 i \ -PLUMED_LOAD=Plumed.o -ldl +PLUMED_LOAD=-ldl ' ../Makefile.package.settings fi @@ -23,10 +24,11 @@ elif (test $1 = 0) then if (test -e ../Makefile.package) then sed -i -e 's/[^ \t]* \$(PLUMED_LOAD)[^ \t]* //' ../Makefile.package + sed -i -e 's/[^ \t]* -D__PLUMED_HAS_DLOPEN[^ \t]* //' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/PLUMED_LOAD=Plumed.o -ldl/d' ../Makefile.package.settings + sed -i -e '/PLUMED_LOAD=-ldl/d' ../Makefile.package.settings fi rm -f ../fix_plumed.cpp From 4d5635a3c43a33ae770a6a0df5f66dfae06c33dd Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Tue, 10 Jul 2018 16:01:45 +0100 Subject: [PATCH 009/273] Fixed virial contribution from PLUMED --- examples/USER/plumed/check-plumed.sh | 12 +++--- examples/USER/plumed/in.peptide-plumed-expand | 40 ------------------- examples/USER/plumed/plumed-expand.dat | 3 -- examples/USER/plumed/plumed_npt.dat | 2 +- examples/USER/plumed/plumed_npt2.dat | 2 +- src/USER-PLUMED/fix_plumed.cpp | 1 + 6 files changed, 10 insertions(+), 50 deletions(-) delete mode 100644 examples/USER/plumed/in.peptide-plumed-expand delete mode 100644 examples/USER/plumed/plumed-expand.dat diff --git a/examples/USER/plumed/check-plumed.sh b/examples/USER/plumed/check-plumed.sh index 720bc34400..0dadc96f41 100755 --- a/examples/USER/plumed/check-plumed.sh +++ b/examples/USER/plumed/check-plumed.sh @@ -67,15 +67,17 @@ if [ "$nlines" -gt 0 ] ; then echo ERROR passing forces from PLUMED back to LAMMPS fi -# Nothing from here works - -# Now try to simply increase the size of the box by applying a moving restraint on the volume -$LAMMPS < in.peptide-plumed-expand - # Now run calculations to test virial $LAMMPS < in.peptide-plumed-npt $LAMMPS < in.peptide-plumed-npt2 +nlines=`paste plmd_volume_with_restraint plmd_volume_without_restraint | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` +if [ "$nlines" -gt 0 ] ; then + echo ERROR passing virial from PLUMED back to LAMMPS +fi + +# Nothing from here works + # Now run calculations to check forces on energy $LAMMPS < in.peptide-plumed-engforce-ref $LAMMPS < in.peptide-plumed-eng-force-plumed diff --git a/examples/USER/plumed/in.peptide-plumed-expand b/examples/USER/plumed/in.peptide-plumed-expand deleted file mode 100644 index ed70929ab6..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-expand +++ /dev/null @@ -1,40 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 1 all npt temp 275.0 275.0 100.0 iso 0.987 0.987 400.0 tchain 1 - -fix 2 all plumed plumedfile plumed-expand.dat outfile p.log - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/plumed-expand.dat b/examples/USER/plumed/plumed-expand.dat deleted file mode 100644 index 29a8cf4182..0000000000 --- a/examples/USER/plumed/plumed-expand.dat +++ /dev/null @@ -1,3 +0,0 @@ -v: VOLUME -r: MOVINGRESTRAINT ARG=v KAPPA0=100. AT0=20 AT1=30 STEP0=0 STEP1=100 -PRINT ARG=v,r.* FILE=expanding diff --git a/examples/USER/plumed/plumed_npt.dat b/examples/USER/plumed/plumed_npt.dat index d41c41fa45..53579ac4ec 100644 --- a/examples/USER/plumed/plumed_npt.dat +++ b/examples/USER/plumed/plumed_npt.dat @@ -1,2 +1,2 @@ vv: VOLUME -PRINT ARG=vv FILE=plmd_volume_without_restraint +PRINT ARG=vv FILE=plmd_volume_without_restraint FMT=%8.5f diff --git a/examples/USER/plumed/plumed_npt2.dat b/examples/USER/plumed/plumed_npt2.dat index ea26ab3042..2074128cd0 100644 --- a/examples/USER/plumed/plumed_npt2.dat +++ b/examples/USER/plumed/plumed_npt2.dat @@ -1,3 +1,3 @@ vv: VOLUME RESTRAINT AT=0.0 ARG=vv SLOPE=-60.221429 -PRINT ARG=vv FILE=plmd_volume_with_restraint +PRINT ARG=vv FILE=plmd_volume_with_restraint FMT=%8.5f diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 89115c4cce..d54b547862 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -138,6 +138,7 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : p->cmd("setTimestep",&dt); virial_flag=1; + thermo_virial=1; scalar_flag = 1; // This is the real initialization: From 492e945b5ad85817f9c47814659ec4529d3c010b Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Wed, 11 Jul 2018 16:39:52 +0100 Subject: [PATCH 010/273] Added options to link plumed statically --- lib/plumed/.gitignore | 2 + lib/plumed/Install.py | 147 +++++++++++++++++++++++++++++++++ src/USER-PLUMED/Install.sh | 27 ++++-- src/USER-PLUMED/fix_plumed.cpp | 19 ++++- 4 files changed, 186 insertions(+), 9 deletions(-) create mode 100644 lib/plumed/.gitignore create mode 100644 lib/plumed/Install.py diff --git a/lib/plumed/.gitignore b/lib/plumed/.gitignore new file mode 100644 index 0000000000..f1a18f99d0 --- /dev/null +++ b/lib/plumed/.gitignore @@ -0,0 +1,2 @@ +# files to ignore +/plumed2* diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py new file mode 100644 index 0000000000..86e7cb7522 --- /dev/null +++ b/lib/plumed/Install.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +# Install.py tool to download, unpack, build, and link to the Voro++ library +# used to automate the steps described in the README file in this dir + +from __future__ import print_function +import sys,os,re,subprocess + +# help message + +help = """ +Syntax from src dir: make lib-plumed args="-b" + or: make lib-plumed args="-b -v 2.4.2" +Syntax from lib dir: python Install.py -b -v 2.4.2 + or: python Install.py -b + +specify one or more options, order does not matter + + -b = download and build the plumed2 library + -v = set version of Voro++ to download and build (default: latest stable version) + +Example: + +make lib-plumed args="-b" # download/build in lib/plumed/plumed2 +""" + +# settings + +version = "2.4.2" + +# Add known checksums for different PLUMED versions and use them to validate the download + +# print error message or help +def error(str=None): + if not str: print(help) + else: print("ERROR",str) + sys.exit() + +# expand to full path name +# process leading '~' or relative path + +def fullpath(path): + return os.path.abspath(os.path.expanduser(path)) + +def which(program): + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + + return None + +def geturl(url,fname): + success = False + + if which('curl') != None: + cmd = 'curl -L -o "%s" %s' % (fname,url) + try: + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + success = True + except subprocess.CalledProcessError as e: + print("Calling curl failed with: %s" % e.output.decode('UTF-8')) + + if not success and which('wget') != None: + cmd = 'wget -O "%s" %s' % (fname,url) + try: + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + success = True + except subprocess.CalledProcessError as e: + print("Calling wget failed with: %s" % e.output.decode('UTF-8')) + + if not success: + error("Failed to download source code with 'curl' or 'wget'") + return + +# Here add function to check fsum + +# parse args + +args = sys.argv[1:] +nargs = len(args) +if nargs == 0: error() + +homepath = "." + +buildflag = False +suffixflag = False +linkflag = True + +iarg = 0 +while iarg < nargs: + if args[iarg] == "-v": + if iarg+2 > nargs: error() + version = args[iarg+1] + iarg += 2 + elif args[iarg] == "-b": + buildflag = True + iarg += 1 + else: error() + +homepath = fullpath(homepath) + +# download and unpack plumed tarball + +if buildflag: + url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version + filename = "v%s.tar.gz" %version + print("Downloading plumed ...") + geturl(url,filename) + + print("Unpacking plumed tarball ...") + if os.path.exists("%s/%s" % (homepath,version)): + cmd = 'rm -rf "%s/%s"' % (homepath,version) + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'cd "%s"; tar -xzvf v%s.tar.gz' % (homepath,version) + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + os.remove("%s/v%s.tar.gz" % (homepath,version)) + +# build plumed + +if buildflag: + print("Building plumed ...") + cmd = 'cd %s/plumed2-%s; ./configure ; make' % (homepath,version) + txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + print(txt.decode('UTF-8')) +# +# # create 2 links in lib/voronoi to Voro++ src dir +# +# if linkflag: +# print("Creating links to Voro++ include and lib files") +# if os.path.isfile("includelink") or os.path.islink("includelink"): +# os.remove("includelink") +# if os.path.isfile("liblink") or os.path.islink("liblink"): +# os.remove("liblink") +# cmd = 'ln -s "%s/src" includelink' % homedir +# subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +# cmd = 'ln -s "%s/src" liblink' % homedir +# subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index e48bd546b0..69653ae60f 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -5,20 +5,33 @@ if (test $1 = 1) then if (test -e ../Makefile.package) then sed -i -e 's|^PKG_LIB =[ \t]*|& $(PLUMED_LOAD) |' ../Makefile.package - sed -i -e 's|^PKG_SYSINC =[ \t]*|& -D__PLUMED_HAS_DLOPEN |' ../Makefile.package + if ( ! test -e ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static ) then + sed -i -e 's|^PKG_SYSINC =[ \t]*|& -D__PLUMED_HAS_DLOPEN |' ../Makefile.package + fi fi if (test -e ../Makefile.package.settings) then + # This is for statically linking plumed2 + if ( test -e ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static ) then + fname=`ls ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static` + sed -i -e "4 i \ +include $fname +" ../Makefile.package.settings + dname=`ls ../../lib/plumed/plumed2*/src/wrapper/Plumed.h` + ln -s USER-PLUMED/$dname ../Plumed.h + # This is for linking plumed2 as a runtime library -- this is the default behavior + else # multiline form needed for BSD sed on Macs - sed -i -e '4 i \ + sed -i -e '4 i \ PLUMED_LOAD=-ldl ' ../Makefile.package.settings + cp Plumed.h .. + cp Plumed.cpp .. + fi fi cp fix_plumed.cpp .. cp fix_plumed.h .. - cp Plumed.h .. - cp Plumed.cpp .. elif (test $1 = 0) then @@ -28,12 +41,16 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then + fname=`ls ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static` + sed -i -e "\:include $fname: d" ../Makefile.package.settings sed -i -e '/PLUMED_LOAD=-ldl/d' ../Makefile.package.settings fi rm -f ../fix_plumed.cpp rm -f ../fix_plumed.h rm -f ../Plumed.h - rm -f ../Plumed.cpp + if ( test -e ../Plumed.h ) then + rm -f ../Plumed.cpp + fi fi diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index d54b547862..32ff09b8c2 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -192,6 +192,9 @@ void FixPlumed::min_setup(int vflag) void FixPlumed::post_force(int vflag) { +// Check tag is enabled + if( !atom->tag_enable ) error->all(FLERR,"to run PLUMED you must have tag_enable==1"); + int update_gatindex=0; // Try to find out if the domain decomposition has been updated: if(nlocal!=atom->nlocal){ @@ -216,10 +219,18 @@ void FixPlumed::post_force(int vflag) // In case it has been updated, rebuild the local mass/charges array // and tell plumed about the change: if(update_gatindex){ - for(int i=0;itag[i]-1; - masses[i]=atom->mass[atom->type[i]]; - if(atom->q) charges[i]=atom->q[i]; + for(int i=0;itag[i]-1; + // Get masses + if(atom->rmass_flag) { + for(int i=0;irmass[i]; + } else { + for(int i=0;imass[atom->type[i]]; + } + // Get charges + if(atom->q_flag) { + for(int i=0;iq[i]; + } else { + for(int i=0;icmd("setAtomsNlocal",&nlocal); p->cmd("setAtomsGatindex",gatindex); From 4734bc09dcebc0a3974e5b2b93229424776cff48 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Wed, 11 Jul 2018 21:56:08 +0100 Subject: [PATCH 011/273] Added descriptions of static linking of PLUMED to README files --- lib/plumed/README | 56 ++++++++++++++++++++++++++++++++++++++ src/USER-PLUMED/Install.sh | 6 ++-- src/USER-PLUMED/README | 33 ++++++++++++++++------ 3 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 lib/plumed/README diff --git a/lib/plumed/README b/lib/plumed/README new file mode 100644 index 0000000000..fb8ef29ff3 --- /dev/null +++ b/lib/plumed/README @@ -0,0 +1,56 @@ +This directory contains links to the PLUMED library which is required +to use the PLUMED package and its fix plumed command in a +LAMMPS input script. PLUMED should only be downloaded into this directory if +you wish to statically link the library. If you wish to link PLUMED as +a dynamic library (as we recommend) then you can compile and build PLUMED +separately to LAMMPS. To use PLUMED in conjuction with LAMMPS you then simply +need to ensure that the PLUMED library is in your path at runtime. + +More info about the PLUMED library can be found at http://www.plumed.org. + +You can type "make lib-plumed" from the src directory to see help on +how to download, build and statically link PLUMED via make commands, or you can +do the same thing by typing "python Install.py" from within this +directory. Alternatively you can download and build PLUMED manually by following the instructions +below. + +----------------- + +Instructions: + +1. Download PLUMED either as a tarball from + http://www.plumed.org/get-it + or clone it using git clone https://github.com/plumed/plumed2.git. + If you download the tarball + unpack it in unpack it in this /lib/plumed directory. + Similarly if you clone it clone it to the /lib/plumed + directory. + +2. Compile PLUMED from within its home directory. In the + simplest cases this be done by issuing the commands + % ./configure + % make + More detailed instructions can be found at + http://plumed.github.io/doc-master/user-doc/html/_installation.html + +3. There is no need to install PLUMED if you only wish + to use it from LAMMPS. You should thus only run + make install if you want to use PLUMED as a stand-alone + code or from some other code. To install it you can + run the following commands: + a) install under the default /usr/local + % sudo make install + b) install under a user-writeable location by first + changing the PREFIX variable when running the + configure command file, then + % make install + +----------------- + +When these steps are complete you can build LAMMPS +with the PLUMED package installed: + +% cd lammps/src +% make yes-user-plumed +% make mpi (or whatever target you wish) + diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index 69653ae60f..0b8e9e6c9a 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -14,9 +14,9 @@ if (test $1 = 1) then # This is for statically linking plumed2 if ( test -e ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static ) then fname=`ls ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static` - sed -i -e "4 i \ -include $fname -" ../Makefile.package.settings + sed -i -e '4 i \ +include '$fname' +' ../Makefile.package.settings dname=`ls ../../lib/plumed/plumed2*/src/wrapper/Plumed.h` ln -s USER-PLUMED/$dname ../Plumed.h # This is for linking plumed2 as a runtime library -- this is the default behavior diff --git a/src/USER-PLUMED/README b/src/USER-PLUMED/README index 02a0229e57..11ca0a7281 100644 --- a/src/USER-PLUMED/README +++ b/src/USER-PLUMED/README @@ -11,18 +11,33 @@ folder implement an interface between LAMMPS and PLUMED, that are written and maintained by Gareth Tribello (gareth.tribello@gmail.com). PLUMED must instead be downloaded and compiled separately to LAMMPS. This building -and compiling of PLUEMD can be done before or after the building of LAMMPS as LAMMPS -calls PLUMED as a dynamic library. If you wish to use PLUMED with LAMMPS, however, -you must run the command: +and compiling of PLUMED can be done before or after the building of LAMMPS as LAMMPS +can call PLUMED as a dynamic library. There is also the possibility to link PLUEMD +statically. In this case a copy of PLUMED must be downloaded into the lib/plumed +directory. This copy of PLUMED will then always be linked into the code at compile +time. + +However you decide to link PLUMED (statically or dynamically) you must run the command: make yes-user-plumed -before compiling LAMMPS. Furthermore, you must ensure that PLUMED is in your +before compiling LAMMPS in order to enable the module. In addition, if you have chosen to +link PLUMED dynamically you must ensure that PLUMED is in your PATH when running a LAMMPS calculation that takes advantage of PLUMED. If -PLUMED is not in the PATH an error will be returned whenever LAMMPS encounters -the fix plumed command in its input. To be clear, however, LAMMPS will run if -it is compiled with fix-plumed enabled on inputs that do not contain a fix -plumed command when PLUMED is not in the PATH. +PLUMED is linked as a runtime library and if PLUMED is not in the PATH an error will be returned whenever LAMMPS encounters +the fix plumed command in its input. To be clear, however, a LAMMPS executable that was dynamically linked with PLUMED will run +even if PLUMED is not in the path if as long as the input does not contain a fix +plumed command. + +If you wish to statically link PLUMED you must download PLUMED to the /lib/plumed directory before compiling LAMMPS. You can +download a tar ball into that directory or you can clone the plumed2 repository from github there. Once you have created a +directory containing a distribution of PLUMED within /lib/plumed you then must build PLUMED within that directory by issuing +the usual commands. It is worth noting that we have provided a script that will download and build PLUMED for you with +a minimal set of options. To run this script you need to issue the following command: + +make lib-plumed args="-b" + +in the src directory. More info about the PLUMED library can be found at: @@ -45,7 +60,7 @@ numerous example scripts for PLUMED as well as citations to articles that dcomen implemented within PLUMED. There are also example scripts for using this package in the folder -examples/USER/colvars, as well as on the GitHub page for PLUMED. +examples/USER/plumed, as well as on the GitHub page for PLUMED. Please contact Gareth Tribello (gareth.tribello@gmail.com) for questions regarding this package. From 6d9face1ec0b3e55ce62ba40d1783cac7dab6eca Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Thu, 12 Jul 2018 12:26:09 +0100 Subject: [PATCH 012/273] Added documentation describing PLUMED package installation --- doc/src/Section_packages.txt | 72 ++++++++++++++++++++++++++++ examples/USER/plumed/check-plumed.sh | 6 +++ 2 files changed, 78 insertions(+) diff --git a/doc/src/Section_packages.txt b/doc/src/Section_packages.txt index e9387fe35f..2a150b08bc 100644 --- a/doc/src/Section_packages.txt +++ b/doc/src/Section_packages.txt @@ -1784,6 +1784,78 @@ examples/USER/colvars :ul :line +USER-PLUMED package :link(USER-PLUMED),h4 + +[Contents:] + +The fix plumed command allows you to use the plugin for molecular +dynamics PLUMED to analyse and bias your LAMMPS trajectory on the fly. +In practise PLUMED is called from within the lammps input script by using +the "fix plumed _fix_plumed.html command. + +[Authors:] The PLUMED library is written and maintained by +Massimilliano Bonomi, Giovanni Bussi, Carlo Camiloni and +Gareth Tribello. + +[Install or un-install:] + +Before building LAMMPS with this package, you must first build +PLUMED. We recommending building PLUMED separately to LAMMPS using +the instructions that can be found at http://plumed.github.io/doc-master/user-doc/html/_installation.html. +Before compiling LAMMPS you can then install the fix plumed command +and compile LAMMPS in the usual manner: + +make yes-user-plumed +make machine :pre + +Once this compilation completes you should be able to run LAMMPS in the usual +way. When running LAMMPS with an input script that contains a fix +plumed command LAMMPS will try to call the PLUMED runtime library. PLUMED +must therefore be available in your path if LAMMPS is compiled in this way. + +On some machines it is not possible to call runtime libraries in the way described +above. When compiling on these machines it is thus better to statically link +PLUMED when compiling LAMMPS. To do this you must either download a PLUMED +tarball from http://www.plumed.org/get-it or clone it using +git clone https://github.com/plumed/plumed2.git. If you download the tarball +unpack it in the /lib/plumed directory. Similarly if you clone +it clone it to the /lib/plumed directory as if there is a version of PLUMED within +this directory LAMMPS will always try to statically link the version of PLUMED +that this directory contains instead of dynamically linking the library. + +Once you have downloaded PLUMED into /lib/plumed you must again build the code +here by following the instructions that can be found at +http://plumed.github.io/doc-master/user-doc/html/_installation.html. + +You can statically link PLUMED manually and if you want to access the full +range of PLUMED functionalities this is what you should do. If you only want the +basic range of functionalities, however, (i.e. no user contributed modules) then +you can download and compile PLUMED in one step from the lammps/src dir, using a +command like like those below: + +make lib-plumed # print help message +make lib-plumed args="-b" # download and build the latest stable version of PLUMED + +These commands will simply invoke the lib/plumed/Install.py script with +args specified. Furthermore, once the script has completed you should +have a compiled version of PLUMED. With this built you can install/un-install +PLUMED and build LAMMPS in the usual manner: + +make yes-user-plumed +make machine :pre + +make no-user-plumed +make machine :pre + +[Supporting info:] + +src/USER-PLUMED/README +lib/plumed/README +"fix plumed "_fix_plumed.html +examples/USER/plumed :ul + +:line + USER-DIFFRACTION package :link(USER-DIFFRACTION),h4 [Contents:] diff --git a/examples/USER/plumed/check-plumed.sh b/examples/USER/plumed/check-plumed.sh index 0dadc96f41..b1b599f15c 100755 --- a/examples/USER/plumed/check-plumed.sh +++ b/examples/USER/plumed/check-plumed.sh @@ -1,3 +1,9 @@ +# Needs make yes-molecule +# make yes-rigid +# make yes-kspace +# make yes-user-plumed ( obviously ) + + #!/bin/bash LAMMPS=../../../src/lmp_mpi From c442166dede75d2b06ea0d4cd71dce6477163794 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Thu, 12 Jul 2018 16:22:40 +0100 Subject: [PATCH 013/273] Tidied up example directory for PLUMED --- examples/USER/plumed/check-plumed.sh | 89 --------------- examples/USER/plumed/clear-files.sh | 8 -- examples/USER/plumed/colvar | 103 ++++++++++++++++++ examples/USER/plumed/in.peptide-plumed | 3 - .../plumed/in.peptide-plumed-eng-force-plumed | 41 ------- .../plumed/in.peptide-plumed-engforce-ref | 40 ------- .../plumed/in.peptide-plumed-lammps-restraint | 44 -------- examples/USER/plumed/in.peptide-plumed-npt | 43 -------- examples/USER/plumed/in.peptide-plumed-npt2 | 43 -------- .../plumed/in.peptide-plumed-plumed-restraint | 44 -------- examples/USER/plumed/p.log | 57 ++++++++++ examples/USER/plumed/plumed-eng-ref.dat | 2 - examples/USER/plumed/plumed-engforce.dat | 3 - examples/USER/plumed/plumed-norestraint.dat | 3 - examples/USER/plumed/plumed-restraint.dat | 4 - examples/USER/plumed/plumed.dat | 11 +- examples/USER/plumed/plumed_npt.dat | 2 - examples/USER/plumed/plumed_npt2.dat | 3 - 18 files changed, 164 insertions(+), 379 deletions(-) delete mode 100755 examples/USER/plumed/check-plumed.sh delete mode 100755 examples/USER/plumed/clear-files.sh create mode 100644 examples/USER/plumed/colvar delete mode 100644 examples/USER/plumed/in.peptide-plumed-eng-force-plumed delete mode 100644 examples/USER/plumed/in.peptide-plumed-engforce-ref delete mode 100644 examples/USER/plumed/in.peptide-plumed-lammps-restraint delete mode 100644 examples/USER/plumed/in.peptide-plumed-npt delete mode 100644 examples/USER/plumed/in.peptide-plumed-npt2 delete mode 100644 examples/USER/plumed/in.peptide-plumed-plumed-restraint create mode 100644 examples/USER/plumed/p.log delete mode 100644 examples/USER/plumed/plumed-eng-ref.dat delete mode 100644 examples/USER/plumed/plumed-engforce.dat delete mode 100644 examples/USER/plumed/plumed-norestraint.dat delete mode 100644 examples/USER/plumed/plumed-restraint.dat delete mode 100644 examples/USER/plumed/plumed_npt.dat delete mode 100644 examples/USER/plumed/plumed_npt2.dat diff --git a/examples/USER/plumed/check-plumed.sh b/examples/USER/plumed/check-plumed.sh deleted file mode 100755 index b1b599f15c..0000000000 --- a/examples/USER/plumed/check-plumed.sh +++ /dev/null @@ -1,89 +0,0 @@ -# Needs make yes-molecule -# make yes-rigid -# make yes-kspace -# make yes-user-plumed ( obviously ) - - -#!/bin/bash - -LAMMPS=../../../src/lmp_mpi - -# Run first LAMMPS calculation -$LAMMPS < in.peptide-plumed - -# Check PLUMED positions -nlines=`paste plumed.xyz lammps.xyz | awk '{if( $2<$6-0.0001 || $2>$6+0.0001 || $3<$7-0.0001 || $3>$7+0.0001 || $4<$8-0.0002 || $4>$8+0.0002 ) if( $5!="Timestep:" && $1!=2004 ) print $0}' | wc -l` -if [ "$nlines" -gt 0 ] ; then - echo ERROR passing positions from LAMMPS to PLUMED - paste plumed.xyz lammps.xyz | awk '{if( $2<$6-0.0001 || $2>$6+0.0001 || $3<$7-0.0001 || $3>$7+0.0001 || $4<$8-0.0002 || $4>$8+0.0002 ) if( $5!="Timestep:" && $1!=2004 ) print $0, $2-$6, $3-$7, $4-$8}' -fi - -# CHECK PLUMED timestep -tstep=`grep timestep in.peptide-plumed | awk '{print $2}'` -tstep=`echo $tstep \* 0.001 \* 10 | bc -l` -nlines=`wc -l plmd_energy | awk '{print $1}'` - -for ((i=3;i<$nlines;i++)); do - told=`head -n $(($i-1)) plmd_energy | tail -n 1 | awk '{print $1}'` - tnew=`head -n $i plmd_energy | tail -n 1 | awk '{print $1}'` - tdiff=`echo \( $tnew - $told - $tstep \) \> 0 | bc -l` - if [ $tdiff -gt 0 ] ; then - echo ERROR passing timestep from LAMMPS to PLUMED - fi -done - -# Check PLUMED energy -tail -n +2 plmd_energy > plmd_energy2 -nlines=`paste lammps_energy plmd_energy2 | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` -if [ "$nlines" -gt 0 ] ; then - echo ERROR passing potential energy from LAMMPS to PLUMED - paste lammps_energy plmd_energy2 | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' -fi -rm -f plmd_energy2 - -# Check PLMD mass and charge -nlines=`wc -l mq_lammps | awk '{print $1}'` -sline=`grep -n "mass q" mq_lammps | awk '{print $1}' | sed -e s/:ITEM://` -for ((i=$sline+1;i<$nlines;i++)); do - # Mass and charge from LAMMPS - index=`head -n $i mq_lammps | tail -n 1 | awk '{print $1}'` - l_mass=`head -n $i mq_lammps | tail -n 1 | awk '{print $2}'` - l_charge=`head -n $i mq_lammps | tail -n 1 | awk '{print $3}'` - # Mass and charge from PLUMED - p_mass=`head -n $(($index+1)) mq_plumed | tail -n 1 | awk '{print $2}'` - p_charge=`head -n $(($index+1)) mq_plumed | tail -n 1 | awk '{print $3}'` - # Check PLUMED mass is same as lammps mass - mdiff=`echo \( $l_mass - $p_mass \) \> 0 | bc -l` - if [ "$mdiff" -gt 0 ] ; then - echo ERROR passing masses from LAMMPS to PLUMED - fi - # Check PLUMED charge is same as lammps charge - qdiff=`echo \( $l_charge - $p_charge \) \> 0 | bc -l` - if [ "$qdiff" -gt 0 ] ; then - echo ERROR passing charges from LAMMPS to PLUMED - fi -done - -# Run calculations to test adding restraint on bond -$LAMMPS < in.peptide-plumed-plumed-restraint -$LAMMPS < in.peptide-plumed-lammps-restraint -# Now compare value of distance when lammps and plumed restraint the distance -nlines=`paste lammps_restraint plumed_restraint | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` -if [ "$nlines" -gt 0 ] ; then - echo ERROR passing forces from PLUMED back to LAMMPS -fi - -# Now run calculations to test virial -$LAMMPS < in.peptide-plumed-npt -$LAMMPS < in.peptide-plumed-npt2 - -nlines=`paste plmd_volume_with_restraint plmd_volume_without_restraint | tail -n +2 | awk '{if( $2<$4-0.0001 || $2>$4+0.0001 ) print $0}' | wc -l` -if [ "$nlines" -gt 0 ] ; then - echo ERROR passing virial from PLUMED back to LAMMPS -fi - -# Nothing from here works - -# Now run calculations to check forces on energy -$LAMMPS < in.peptide-plumed-engforce-ref -$LAMMPS < in.peptide-plumed-eng-force-plumed diff --git a/examples/USER/plumed/clear-files.sh b/examples/USER/plumed/clear-files.sh deleted file mode 100755 index 5e588146f7..0000000000 --- a/examples/USER/plumed/clear-files.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# Data from first set of checks -rm bck.* plmd_energy lammps_energy mq_plumed mq_lammps lammps.xyz plumed.xyz p.log -# Data from checks on restraints -rm bck.* p.log lammps_restraint plumed_restraint -# Data from checks on virial -rm bck.* lammps_energy lammps.xyz log.lammps plmd_volume p.log plmd_volume_without_restraint plmd_volume_with_restraint diff --git a/examples/USER/plumed/colvar b/examples/USER/plumed/colvar new file mode 100644 index 0000000000..df282364f5 --- /dev/null +++ b/examples/USER/plumed/colvar @@ -0,0 +1,103 @@ +#! FIELDS time dd + 0.000000 5.985554 + 0.002000 6.002880 + 0.004000 6.022015 + 0.006000 6.029922 + 0.008000 6.020103 + 0.010000 5.996906 + 0.012000 5.972734 + 0.014000 5.960079 + 0.016000 5.963714 + 0.018000 5.978140 + 0.020000 5.991813 + 0.022000 5.995155 + 0.024000 5.987021 + 0.026000 5.975340 + 0.028000 5.971456 + 0.030000 5.981945 + 0.032000 6.003550 + 0.034000 6.024743 + 0.036000 6.032990 + 0.038000 6.022936 + 0.040000 6.000131 + 0.042000 5.977800 + 0.044000 5.968692 + 0.046000 5.977224 + 0.048000 5.996934 + 0.050000 6.014800 + 0.052000 6.019586 + 0.054000 6.008803 + 0.056000 5.989809 + 0.058000 5.974484 + 0.060000 5.971140 + 0.062000 5.979074 + 0.064000 5.989379 + 0.066000 5.991356 + 0.068000 5.980176 + 0.070000 5.960625 + 0.072000 5.944401 + 0.074000 5.942614 + 0.076000 5.958402 + 0.078000 5.984574 + 0.080000 6.007964 + 0.082000 6.017667 + 0.084000 6.011795 + 0.086000 5.998304 + 0.088000 5.989405 + 0.090000 5.993275 + 0.092000 6.008545 + 0.094000 6.025183 + 0.096000 6.031186 + 0.098000 6.020651 + 0.100000 5.997952 + 0.102000 5.975230 + 0.104000 5.964757 + 0.106000 5.971150 + 0.108000 5.988568 + 0.110000 6.004676 + 0.112000 6.008731 + 0.114000 5.998481 + 0.116000 5.981406 + 0.118000 5.969615 + 0.120000 5.971827 + 0.122000 5.987658 + 0.124000 6.007888 + 0.126000 6.020477 + 0.128000 6.018377 + 0.130000 6.004046 + 0.132000 5.987682 + 0.134000 5.980338 + 0.136000 5.986534 + 0.138000 6.001303 + 0.140000 6.013589 + 0.142000 6.013717 + 0.144000 6.000028 + 0.146000 5.980283 + 0.148000 5.966836 + 0.150000 5.968670 + 0.152000 5.985459 + 0.154000 6.007612 + 0.156000 6.022374 + 0.158000 6.022034 + 0.160000 6.008851 + 0.162000 5.993355 + 0.164000 5.987212 + 0.166000 5.995452 + 0.168000 6.013111 + 0.170000 6.028386 + 0.172000 6.030387 + 0.174000 6.016468 + 0.176000 5.994191 + 0.178000 5.976616 + 0.180000 5.973983 + 0.182000 5.987185 + 0.184000 6.007275 + 0.186000 6.021338 + 0.188000 6.020837 + 0.190000 6.006955 + 0.192000 5.989433 + 0.194000 5.979796 + 0.196000 5.983601 + 0.198000 5.996921 + 0.200000 6.009310 + 0.202000 6.011114 diff --git a/examples/USER/plumed/in.peptide-plumed b/examples/USER/plumed/in.peptide-plumed index ef9d15b961..6972c0cfca 100644 --- a/examples/USER/plumed/in.peptide-plumed +++ b/examples/USER/plumed/in.peptide-plumed @@ -35,10 +35,7 @@ fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 thermo_style custom step temp etotal pe ke epair ebond f_2 thermo 10 -dump dd all xyz 10 lammps.xyz variable step equal step variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-eng-force-plumed b/examples/USER/plumed/in.peptide-plumed-eng-force-plumed deleted file mode 100644 index e45fd0844a..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-eng-force-plumed +++ /dev/null @@ -1,41 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 1.8181818181818181 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 1 all nvt temp 363.0 363.0 90.90909090909091 tchain 1 - -fix 2 all plumed plumedfile plumed-engforce.dat outfile p.log - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-engforce-ref b/examples/USER/plumed/in.peptide-plumed-engforce-ref deleted file mode 100644 index d812e2b015..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-engforce-ref +++ /dev/null @@ -1,40 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 1 all nvt temp 300.0 300.0 100.0 tchain 1 - -fix 2 all plumed plumedfile plumed-eng-ref.dat outfile p.log - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-lammps-restraint b/examples/USER/plumed/in.peptide-plumed-lammps-restraint deleted file mode 100644 index 3476c76b22..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-lammps-restraint +++ /dev/null @@ -1,44 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 -fix 6 all restrain bond 45 48 1000.0 1000.0 6.0 -fix 2 all plumed plumedfile plumed-norestraint.dat outfile p.log -fix 2a ref setforce 0.0 0.0 0.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-npt b/examples/USER/plumed/in.peptide-plumed-npt deleted file mode 100644 index 1fe9e0c2fa..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-npt +++ /dev/null @@ -1,43 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 -fix 1 all npt temp 275.0 275.0 100.0 iso 0.987 0.987 400.0 tchain 1 - -fix 2 all plumed plumedfile plumed_npt.dat outfile p.log -fix 2a ref setforce 0.0 0.0 0.0 - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-npt2 b/examples/USER/plumed/in.peptide-plumed-npt2 deleted file mode 100644 index 984407d1e8..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-npt2 +++ /dev/null @@ -1,43 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 -fix 1 all npt temp 275.0 275.0 100.0 iso 987.9 987.9 400.0 tchain 1 - -fix 2 all plumed plumedfile plumed_npt2.dat outfile p.log -fix 2a ref setforce 0.0 0.0 0.0 - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/in.peptide-plumed-plumed-restraint b/examples/USER/plumed/in.peptide-plumed-plumed-restraint deleted file mode 100644 index 8ce35dd720..0000000000 --- a/examples/USER/plumed/in.peptide-plumed-plumed-restraint +++ /dev/null @@ -1,44 +0,0 @@ -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -group one id 2 4 5 6 -group two id 80 82 83 84 -group ref id 37 -group colvar union one two ref - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -fix 2 all plumed plumedfile plumed-restraint.dat outfile p.log -fix 2a ref setforce 0.0 0.0 0.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 -dump dd all xyz 10 lammps.xyz -variable step equal step -variable pe equal pe -fix 5 all print 10 "$(v_step) $(v_pe)" file lammps_energy -dump mq all custom 200 mq_lammps id mass q - -run 101 diff --git a/examples/USER/plumed/p.log b/examples/USER/plumed/p.log new file mode 100644 index 0000000000..79d0bbd84c --- /dev/null +++ b/examples/USER/plumed/p.log @@ -0,0 +1,57 @@ +PLUMED: PLUMED is starting +PLUMED: Version: 2.4.2 (git: Unknown) compiled on Jul 11 2018 at 19:09:03 +PLUMED: Please cite this paper when using PLUMED [1] +PLUMED: For further information see the PLUMED web page at http://www.plumed.org +PLUMED: Root: /Users/gareth/MD_code/lammps-permanent/lammps/lib/plumed/plumed2-2.4.2/ +PLUMED: For installed feature, see /Users/gareth/MD_code/lammps-permanent/lammps/lib/plumed/plumed2-2.4.2//src/config/config.txt +PLUMED: Molecular dynamics engine: LAMMPS +PLUMED: Precision of reals: 8 +PLUMED: Running over 1 node +PLUMED: Number of threads: 1 +PLUMED: Cache line size: 512 +PLUMED: Number of atoms: 2004 +PLUMED: File suffix: +PLUMED: FILE: plumed.dat +PLUMED: Action UNITS +PLUMED: with label @0 +PLUMED: length: A +PLUMED: energy: kcal/mol +PLUMED: time: ps +PLUMED: charge: e +PLUMED: mass: amu +PLUMED: using physical units +PLUMED: inside PLUMED, Boltzmann constant is 0.001987 +PLUMED: Action DISTANCE +PLUMED: with label dd +PLUMED: between atoms 45 48 +PLUMED: using periodic boundary conditions +PLUMED: Action RESTRAINT +PLUMED: with label @2 +PLUMED: with arguments dd +PLUMED: added component to this action: @2.bias +PLUMED: at 6.000000 +PLUMED: with harmonic force constant 2000.000000 +PLUMED: and linear force constant 0.000000 +PLUMED: added component to this action: @2.force2 +PLUMED: Action PRINT +PLUMED: with label @3 +PLUMED: with stride 1 +PLUMED: with arguments dd +PLUMED: on file colvar +PLUMED: with format %f +PLUMED: END FILE: plumed.dat +PLUMED: Timestep: 0.002000 +PLUMED: KbT has not been set by the MD engine +PLUMED: It should be set by hand where needed +PLUMED: Relevant bibliography: +PLUMED: [1] Tribello, Bonomi, Branduardi, Camilloni, and Bussi, Comput. Phys. Commun. 185, 604 (2014) +PLUMED: Please read and cite where appropriate! +PLUMED: Finished setup +PLUMED: Cycles Total Average Minumum Maximum +PLUMED: 1 0.020354 0.020354 0.020354 0.020354 +PLUMED: 1 Prepare dependencies 102 0.000256 0.000003 0.000001 0.000006 +PLUMED: 2 Sharing data 102 0.010002 0.000098 0.000078 0.000546 +PLUMED: 3 Waiting for data 102 0.001398 0.000014 0.000011 0.000072 +PLUMED: 4 Calculating (forward loop) 102 0.001797 0.000018 0.000013 0.000058 +PLUMED: 5 Applying (backward loop) 102 0.002666 0.000026 0.000022 0.000062 +PLUMED: 6 Update 102 0.001126 0.000011 0.000007 0.000055 diff --git a/examples/USER/plumed/plumed-eng-ref.dat b/examples/USER/plumed/plumed-eng-ref.dat deleted file mode 100644 index 90e589157e..0000000000 --- a/examples/USER/plumed/plumed-eng-ref.dat +++ /dev/null @@ -1,2 +0,0 @@ -e: ENERGY -PRINT ARG=e FILE=energy_ref FMT=%8.4f diff --git a/examples/USER/plumed/plumed-engforce.dat b/examples/USER/plumed/plumed-engforce.dat deleted file mode 100644 index 31a1564798..0000000000 --- a/examples/USER/plumed/plumed-engforce.dat +++ /dev/null @@ -1,3 +0,0 @@ -e: ENERGY -RESTRAINT ARG=e AT=0 SLOPE=0.1 -PRINT ARG=e FILE=engforced FMT=%8.4f diff --git a/examples/USER/plumed/plumed-norestraint.dat b/examples/USER/plumed/plumed-norestraint.dat deleted file mode 100644 index 1fed74ae81..0000000000 --- a/examples/USER/plumed/plumed-norestraint.dat +++ /dev/null @@ -1,3 +0,0 @@ -UNITS LENGTH=A -dd: DISTANCE ATOMS=45,48 -PRINT ARG=dd FILE=lammps_restraint FMT=%8.4f diff --git a/examples/USER/plumed/plumed-restraint.dat b/examples/USER/plumed/plumed-restraint.dat deleted file mode 100644 index 6ae4c8ce10..0000000000 --- a/examples/USER/plumed/plumed-restraint.dat +++ /dev/null @@ -1,4 +0,0 @@ -UNITS LENGTH=A ENERGY=kcal/mol -dd: DISTANCE ATOMS=45,48 -RESTRAINT ARG=dd KAPPA=2000 AT=6.0 -PRINT ARG=dd FILE=plumed_restraint FMT=%8.4f diff --git a/examples/USER/plumed/plumed.dat b/examples/USER/plumed/plumed.dat index 7fe1290c0d..0437836d03 100644 --- a/examples/USER/plumed/plumed.dat +++ b/examples/USER/plumed/plumed.dat @@ -1,7 +1,4 @@ -UNITS ENERGY=kcal/mol -c1: COM ATOMS=2,4,5,6 -c2: COM ATOMS=80,82,83,84 -energy: ENERGY -DUMPATOMS ATOMS=1-2004 FILE=plumed.xyz UNITS=A PRECISION=4 STRIDE=10 -PRINT ARG=energy STRIDE=10 FMT=%8.4f FILE=plmd_energy -DUMPMASSCHARGE FILE=mq_plumed +UNITS LENGTH=A ENERGY=kcal/mol +dd: DISTANCE ATOMS=45,48 +RESTRAINT ARG=dd KAPPA=2000 AT=6.0 +PRINT ARG=dd FILE=colvar diff --git a/examples/USER/plumed/plumed_npt.dat b/examples/USER/plumed/plumed_npt.dat deleted file mode 100644 index 53579ac4ec..0000000000 --- a/examples/USER/plumed/plumed_npt.dat +++ /dev/null @@ -1,2 +0,0 @@ -vv: VOLUME -PRINT ARG=vv FILE=plmd_volume_without_restraint FMT=%8.5f diff --git a/examples/USER/plumed/plumed_npt2.dat b/examples/USER/plumed/plumed_npt2.dat deleted file mode 100644 index 2074128cd0..0000000000 --- a/examples/USER/plumed/plumed_npt2.dat +++ /dev/null @@ -1,3 +0,0 @@ -vv: VOLUME -RESTRAINT AT=0.0 ARG=vv SLOPE=-60.221429 -PRINT ARG=vv FILE=plmd_volume_with_restraint FMT=%8.5f From c8870f1b78e5863fbd49e961ce2cf210e93c5d7e Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 24 Oct 2018 11:57:34 -0600 Subject: [PATCH 014/273] change intro to each list of commands --- doc/src/bond_style.txt | 12 +++++++++--- doc/src/compute.txt | 5 ----- doc/src/dihedral_style.txt | 14 ++++++++++---- doc/src/fix.txt | 4 ---- doc/src/improper_style.txt | 14 ++++++++++---- doc/src/pair_style.txt | 14 +++++--------- 6 files changed, 34 insertions(+), 29 deletions(-) diff --git a/doc/src/bond_style.txt b/doc/src/bond_style.txt index 197a4fb1b6..d603bc28fd 100644 --- a/doc/src/bond_style.txt +++ b/doc/src/bond_style.txt @@ -65,9 +65,15 @@ Here is an alphabetic list of bond styles defined in LAMMPS. Click on the style to display the formula it computes and coefficients specified by the associated "bond_coeff"_bond_coeff.html command. -Note that there are also additional bond styles submitted by users -which are included in the LAMMPS distribution. The full list of all -bond styles is on the "Commands bond"_Commands_bond.html doc page. +Click on the style to display the formula it computes, any additional +arguments specified in the bond_style command, and coefficients +specified by the associated "bond_coeff"_bond_coeff.html command. + +There are also additional accelerated pair styles included in the +LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. +The individual style names on the "Commands bond"_Commands_bond.html +doc page are followed by one or more of (g,i,k,o,t) to indicate which +accelerated styles exist. "none"_bond_none.html - turn off bonded interactions "zero"_bond_zero.html - topology but no interactions diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 857795ffe5..c34d6f950b 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -164,11 +164,6 @@ and what it does. Here is an alphabetic list of compute styles available in LAMMPS. They are also listed in more compact form on the "Commands compute"_Commands_compute.html doc page. -There are also additional compute styles (not listed here) submitted -by users which are included in the LAMMPS distribution. The full list -of all compute styles is on the "Commands -compute"_Commands_compute.html doc page. - There are also additional accelerated compute styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands diff --git a/doc/src/dihedral_style.txt b/doc/src/dihedral_style.txt index d45d9b488d..2a5b9baf52 100644 --- a/doc/src/dihedral_style.txt +++ b/doc/src/dihedral_style.txt @@ -80,10 +80,16 @@ Here is an alphabetic list of dihedral styles defined in LAMMPS. Click on the style to display the formula it computes and coefficients specified by the associated "dihedral_coeff"_dihedral_coeff.html command. -Note that there are also additional dihedral styles submitted by users -which are included in the LAMMPS distribution. The full list of all -dihedral styles is on the "Commands bond"_Commands_bond.html#dihedral -doc page. +Click on the style to display the formula it computes, any additional +arguments specified in the dihedral_style command, and coefficients +specified by the associated "dihedral_coeff"_dihedral_coeff.html +command. + +There are also additional accelerated pair styles included in the +LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. +The individual style names on the "Commands +dihedral"_Commands_bond.html#dihedral doc page are followed by one or +more of (g,i,k,o,t) to indicate which accelerated styles exist. "none"_dihedral_none.html - turn off dihedral interactions "zero"_dihedral_zero.html - topology but no interactions diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 27cc0467e2..0163ac2863 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -156,10 +156,6 @@ what it does, as listed below. Here is an alphabetic list of fix styles available in LAMMPS. They are also listed in more compact form on the "Commands fix"_Commands_fix.html doc page. -There are also additional fix styles (not listed here) submitted by -users which are included in the LAMMPS distribution. The full list of -all fix styles is on the "Commands fix"_Commands_fix.html doc page. - There are also additional accelerated fix styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands fix"_Commands_fix.html doc diff --git a/doc/src/improper_style.txt b/doc/src/improper_style.txt index f315509fe4..c5e0be8a81 100644 --- a/doc/src/improper_style.txt +++ b/doc/src/improper_style.txt @@ -59,10 +59,16 @@ Click on the style to display the formula it computes and coefficients specified by the associated "improper_coeff"_improper_coeff.html command. -Note that there are also additional improper styles submitted by users -which are included in the LAMMPS distribution. The full list of all -improper styles is on the "Commands bond"_Commands_bond.html#improper -doc page. +Click on the style to display the formula it computes, any additional +arguments specified in the improper_style command, and coefficients +specified by the associated "improper_coeff"_improper_coeff.html +command. + +There are also additional accelerated pair styles included in the +LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. +The individual style names on the "Commands +improper"_Commands_bond.html#improper doc page are followed by one or +more of (g,i,k,o,t) to indicate which accelerated styles exist. "none"_improper_none.html - turn off improper interactions "zero"_improper_zero.html - topology but no interactions diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 14e3f79215..9a5de55ef0 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -85,15 +85,11 @@ Click on the style to display the formula it computes, arguments specified in the pair_style command, and coefficients specified by the associated "pair_coeff"_pair_coeff.html command. -There are also additional pair styles (not listed here) submitted by -users which are included in the LAMMPS distribution. The full list of -all pair styles is on the "Commands pair"_Commands_pair.html doc page. - -There are also additional accelerated pair styles (not listed here) -included in the LAMMPS distribution for faster performance on CPUs, -GPUs, and KNLs. The individual style names on the "Commands -pair"_Commands_pair.html doc page are followed by one or more of -(g,i,k,o,t) to indicate which accelerated styles exist. +There are also additional accelerated pair styles included in the +LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. +The individual style names on the "Commands pair"_Commands_pair.html +doc page are followed by one or more of (g,i,k,o,t) to indicate which +accelerated styles exist. "none"_pair_none.html - turn off pairwise interactions "hybrid"_pair_hybrid.html - multiple styles of pairwise interactions From 7e5ec96bcdde4bf3735a2c2d006034294d0368d6 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 24 Oct 2018 12:02:36 -0600 Subject: [PATCH 015/273] more tweaks from style check script --- doc/src/Commands_fix.txt | 4 ++-- doc/src/compute.txt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 4144c7eb90..670f1b0462 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -107,7 +107,7 @@ OPT. "nph/asphere (o)"_fix_nph_asphere.html, "nph/body"_fix_nph_body.html, "nph/eff"_fix_nh_eff.html, -"nph/sphere (ko)"_fix_nph_sphere.html, +"nph/sphere (o)"_fix_nph_sphere.html, "nphug (o)"_fix_nphug.html, "npt (iko)"_fix_nh.html, "npt/asphere (o)"_fix_npt_asphere.html, @@ -127,7 +127,7 @@ OPT. "nve/line"_fix_nve_line.html, "nve/manifold/rattle"_fix_nve_manifold_rattle.html, "nve/noforce"_fix_nve_noforce.html, -"nve/sphere (o)"_fix_nve_sphere.html, +"nve/sphere (ko)"_fix_nve_sphere.html, "nve/spin"_fix_nve_spin.html, "nve/tri"_fix_nve_tri.html, "nvk"_fix_nvk.html, diff --git a/doc/src/compute.txt b/doc/src/compute.txt index c34d6f950b..8d3cf7d2f2 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -171,6 +171,7 @@ compute"_Commands_compute.html doc page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. "ackland/atom"_compute_ackland_atom.html - +"adf"_compute_adf.html - angular distribution function of triples of atoms "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom "angle"_compute_angle.html - "angle/local"_compute_angle_local.html - From 07f92d225eed98a34262ae0c4528813766f7dd61 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 24 Oct 2018 12:03:51 -0600 Subject: [PATCH 016/273] formatting tweak --- doc/src/Run_options.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index db5a7baa6e..742d38d456 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -388,7 +388,7 @@ optional keyword/value settings. :line -[-restart2dump restartfile {remap} group-ID dumpstyle dumpfile arg1 arg2 ...] :link(restart2dump) +[-restart2dump restartfile (remap) group-ID dumpstyle dumpfile arg1 arg2 ...] :link(restart2dump) Convert the restart file into a dump file and immediately exit. This is the same operation as if the following 2-line input script were From 2c1f420a48c28d0f56951b29b6864ea25eaf4d10 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 24 Oct 2018 13:43:26 -0600 Subject: [PATCH 017/273] more tweaks --- doc/src/angle_style.txt | 13 +++++++++---- doc/src/pair_style.txt | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/doc/src/angle_style.txt b/doc/src/angle_style.txt index a0bc47ba4c..2c3c1f2bd1 100644 --- a/doc/src/angle_style.txt +++ b/doc/src/angle_style.txt @@ -57,10 +57,15 @@ Here is an alphabetic list of angle styles defined in LAMMPS. Click on the style to display the formula it computes and coefficients specified by the associated "angle_coeff"_angle_coeff.html command. -Note that there are also additional angle styles submitted by users -which are included in the LAMMPS distribution. The full list of all -angle styles are is on the "Commands bond"_Commands_bond.html#angle -doc page. +Click on the style to display the formula it computes, any additional +arguments specified in the angle_style command, and coefficients +specified by the associated "angle_coeff"_angle_coeff.html command. + +There are also additional accelerated pair styles included in the +LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. +The individual style names on the "Commands +angle"_Commands_bond.html#angle doc page are followed by one or more +of (g,i,k,o,t) to indicate which accelerated styles exist. "none"_angle_none.html - turn off angle interactions "zero"_angle_zero.html - topology but no interactions diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 9a5de55ef0..5eb810db8f 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -81,9 +81,9 @@ Here is an alphabetic list of pair styles defined in LAMMPS. They are also listed in more compact form on the "Commands pair"_Commands_pair.html doc page. -Click on the style to display the formula it computes, arguments -specified in the pair_style command, and coefficients specified by the -associated "pair_coeff"_pair_coeff.html command. +Click on the style to display the formula it computes, any additional +arguments specified in the pair_style command, and coefficients +specified by the associated "pair_coeff"_pair_coeff.html command. There are also additional accelerated pair styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. From 2e79d9f340aa2f7bb12b45315f705f49630d366a Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Thu, 25 Oct 2018 21:45:35 +0100 Subject: [PATCH 018/273] Merged Pablo's fixes into the plumed interface for lammps --- src/USER-PLUMED/fix_plumed.cpp | 161 +++++++++++++++++++++++++++------ src/USER-PLUMED/fix_plumed.h | 6 ++ 2 files changed, 139 insertions(+), 28 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 32ff09b8c2..794ab50f82 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -26,7 +26,9 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : nlocal(0), gatindex(NULL), masses(NULL), - charges(NULL) + charges(NULL), + id_pe(NULL), + id_press(NULL) { // Not sure this is really necessary: if (!atom->tag_enable) error->all(FLERR,"fix plumed requires atom tags"); @@ -145,16 +147,48 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : p->cmd("init"); // Define compute to calculate potential energy - char *id_pe = (char *) "thermo_pe"; + id_pe = new char[7]; + id_pe = (char *) "plmd_pe"; + char **newarg = new char*[3]; + newarg[0] = id_pe; + newarg[1] = (char *) "all"; + newarg[2] = (char *) "pe"; + modify->add_compute(3,newarg); + delete [] newarg; int ipe = modify->find_compute(id_pe); c_pe = modify->compute[ipe]; - // Trigger computation of potential energy every step - c_pe->addstep(update->ntimestep+1); + +// Define compute to calculate pressure tensor + id_press = new char[9]; + id_press = (char *) "plmd_press"; + newarg = new char*[5]; + newarg[0] = id_press; + newarg[1] = (char *) "all"; + newarg[2] = (char *) "pressure"; + newarg[3] = (char *) "NULL"; + newarg[4] = (char *) "virial"; + modify->add_compute(5,newarg); + delete [] newarg; + int ipress = modify->find_compute(id_press); + c_press = modify->compute[ipress]; + + // Check if nh type fixes have been called + // See comment in the setup method + for (int i = 0; i < modify->nfix; i++) { + if ( strncmp(modify->fix[i]->style,"nph",3) || + strncmp(modify->fix[i]->style,"nph_sphere",10) || + strncmp(modify->fix[i]->style,"npt",3) || + strncmp(modify->fix[i]->style,"npt_sphere",10) ) + error->all(FLERR,"Fix plumed must be called before fix_nh derived fixes, " + "for instance nph and npt fixes"); + } } FixPlumed::~FixPlumed() { delete p; + modify->delete_compute(id_pe); + modify->delete_compute(id_press); } int FixPlumed::setmask() @@ -172,10 +206,22 @@ void FixPlumed::init() { if (strcmp(update->integrate_style,"respa") == 0) nlevels_respa = ((Respa *) update->integrate)->nlevels; + // This avoids nan pressure if compute_pressure is called + // in a setup method + for(int i=0;i<6;i++) virial[i] = 0.; } void FixPlumed::setup(int vflag) { + // Here there is a crucial issue connected to constant pressure + // simulations. The fix_nh will call the compute_pressure inside + // the setup method, that is executed once and for all at the + // beginning of the simulation. Since our fix has a contribution + // to the virial, when this happens the variable virial must have + // been calculated. In other words, the setup method of fix_plumed + // has to be executed first. This creates a race condition with the + // setup method of fix_nh. This is why in the constructor I check if + // nh fixes have already been called. if (strcmp(update->integrate_style,"verlet") == 0) post_force(vflag); else { @@ -187,6 +233,8 @@ void FixPlumed::setup(int vflag) void FixPlumed::min_setup(int vflag) { + // This has to be checked. + // For instance it might have problems with fix_box_relax post_force(vflag); } @@ -248,6 +296,9 @@ void FixPlumed::post_force(int vflag) box[2][1]=domain->h[3]; box[2][0]=domain->h[4]; box[1][0]=domain->h[5]; + // Make initial of virial of this fix zero + // The following line is very important, otherwise the compute pressure will include + for(int i=0;i<6;++i) virial[i] = 0.; // local variable with timestep: int step=update->ntimestep; @@ -259,33 +310,87 @@ void FixPlumed::post_force(int vflag) p->cmd("setForces",&atom->f[0][0]); p->cmd("setMasses",&masses[0]); if(atom->q) p->cmd("setCharges",&charges[0]); - p->cmd("setVirial",&plmd_virial[0][0]); p->cmd("getBias",&bias); + // Pass virial to plumed + // If energy is needed virial_plmd is equal to Lammps' virial + // If energy is not needed virial_plmd is initialized to zero + // In the first case the virial will be rescaled and an extra term will be added + // In the latter case only an extra term will be added + p->cmd("setVirial",&plmd_virial[0][0]); + p->cmd("prepareCalc"); -// pass the energy - double pot_energy = 0.; - c_pe->compute_scalar(); - c_pe->invoked_flag |= INVOKED_SCALAR; - pot_energy = c_pe->scalar; - int nprocs; - // Divide energy by number of processors - // Plumed wants it this way - MPI_Comm_size(world,&nprocs); - pot_energy /= nprocs; - p->cmd("setEnergy",&pot_energy); - // Trigger computation of potential energy every step + plumedNeedsEnergy=0; + p->cmd("isEnergyNeeded",&plumedNeedsEnergy); + + // Pass potential energy and virial if needed + double *virial_lmp; + if (plumedNeedsEnergy) { + // Error if tail corrections are included + if (force->pair && force->pair->tail_flag) + error->all(FLERR,"Tail corrections to the pair potential included." + " The energy cannot be biased in this case." + " Remove the tail corrections by removing the" + " command: pair_modify tail yes"); + // compute the potential energy + double pot_energy = 0.; + c_pe->compute_scalar(); + pot_energy = c_pe->scalar; + // Divide energy by number of processes + // Plumed wants it this way + int nprocs; + MPI_Comm_size(world,&nprocs); + pot_energy /= nprocs; + p->cmd("setEnergy",&pot_energy); + // Compute pressure due to the virial (no kinetic energy term!) + c_press->compute_vector(); + virial_lmp = c_press->vector; + // Check if pressure is finite + if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1]) || !std::isfinite(virial_lmp[2]) + || !std::isfinite(virial_lmp[3]) || !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5])) + error->all(FLERR,"Non-numeric virial - Plumed cannot work with that"); + // Convert pressure to virial per number of MPI processes + // From now on all virials are divided by the number of MPI processes + double nktv2p = force->nktv2p; + double inv_volume; + if (domain->dimension == 3) { + inv_volume = 1.0 / (domain->xprd * domain->yprd * domain->zprd); + } else { + inv_volume = 1.0 / (domain->xprd * domain->yprd); + } + for(int i=0;i<6;i++) virial_lmp[i] /= (inv_volume * nktv2p * nprocs); + // Convert virial from lammps to plumed representation + plmd_virial[0][0]=-virial_lmp[0]; + plmd_virial[1][1]=-virial_lmp[1]; + plmd_virial[2][2]=-virial_lmp[2]; + plmd_virial[0][1]=-virial_lmp[3]; + plmd_virial[0][2]=-virial_lmp[4]; + plmd_virial[1][2]=-virial_lmp[5]; + } else { + virial_lmp = new double[6]; + for(int i=0;i<6;i++) virial_lmp[i] = 0.; + } + // do the real calculation: + p->cmd("performCalc"); + +// retransform virial to lammps representation and assign it to this fix's virial. +// Plumed is giving back the full virial and therefore we have to subtract the +// initial virial i.e. virial_lmp. +// The vector virial contains only the contribution added by plumed +// The calculation of the pressure will be done by a compute pressure and will +// include this contribution. + virial[0] = -plmd_virial[0][0]-virial_lmp[0]; + virial[1] = -plmd_virial[1][1]-virial_lmp[1]; + virial[2] = -plmd_virial[2][2]-virial_lmp[2]; + virial[3] = -plmd_virial[0][1]-virial_lmp[3]; + virial[4] = -plmd_virial[0][2]-virial_lmp[4]; + virial[5] = -plmd_virial[1][2]-virial_lmp[5]; + + // Ask for the computes in the next time step + // such that the virial and energy are tallied. + // This should be changed to something that triggers the + // calculation only if plumed needs it. c_pe->addstep(update->ntimestep+1); - -// do the real calculation: - p->cmd("calc"); - -// retransform virial to lammps representation: - Fix::virial[0]=-plmd_virial[0][0]; - Fix::virial[1]=-plmd_virial[1][1]; - Fix::virial[2]=-plmd_virial[2][2]; - Fix::virial[3]=-plmd_virial[0][1]; - Fix::virial[4]=-plmd_virial[0][2]; - Fix::virial[5]=-plmd_virial[1][2]; + c_press->addstep(update->ntimestep+1); } void FixPlumed::post_force_respa(int vflag, int ilevel, int iloop) diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index 6bd6d59f39..6b067e1920 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -45,6 +45,12 @@ class FixPlumed : public Fix { double bias; // Compute for the energy class Compute *c_pe; +// Compute for the pressure + class Compute *c_press; +// Flag to trigger calculation of the energy and virial + int plumedNeedsEnergy; +// ID for potential energy and pressure compute + char *id_pe, *id_press; }; }; From 4fa78a78deb6175d0bed0abc02e035e164953144 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 26 Oct 2018 22:12:17 +0100 Subject: [PATCH 019/273] Added instructions on PLUMED to build extras and Package details pages of manual --- doc/src/Build_extras.txt | 57 ++++++++++++++++++++++++++++++++++++ doc/src/Packages_details.txt | 28 ++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index d256a1afc8..e4ab6b9541 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -41,6 +41,7 @@ This is the list of packages that may require additional steps. "USER-ATC"_#user-atc, "USER-AWPMD"_#user-awpmd, "USER-COLVARS"_#user-colvars, +"USER-PLUMED" _#user-plumed, "USER-H5MD"_#user-h5md, "USER-INTEL"_#user-intel, "USER-MOLFILE"_#user-molfile, @@ -712,6 +713,62 @@ a corresponding Makefile.lammps.machine file. :line +USER-PLUMED package :h4,link(user-plumed) + +[CMake build]: + +[Traditional make]: + +Before building LAMMPS with this package, you must first build +PLUMED. We recommending building PLUMED separately to LAMMPS using +the instructions that can be found at http://plumed.github.io/doc-master/user-doc/html/_installation.html. +Before compiling LAMMPS you can then install the fix plumed command +and compile LAMMPS in the usual manner: + +make yes-user-plumed +make machine :pre + +Once this compilation completes you should be able to run LAMMPS in the usual +way. When running LAMMPS with an input script that contains a fix +plumed command LAMMPS will try to call the PLUMED runtime library. PLUMED +must therefore be available in your path if LAMMPS is compiled in this way. + +On some machines it is not possible to call runtime libraries in the way described +above. When compiling on these machines it is thus better to statically link +PLUMED when compiling LAMMPS. To do this you must either download a PLUMED +tarball from http://www.plumed.org/get-it or clone it using +git clone https://github.com/plumed/plumed2.git. If you download the tarball +unpack it in the /lib/plumed directory. Similarly if you clone +it clone it to the /lib/plumed directory as if there is a version of PLUMED within +this directory LAMMPS will always try to statically link the version of PLUMED +that this directory contains instead of dynamically linking the library. + +Once you have downloaded PLUMED into /lib/plumed you must again build the code +here by following the instructions that can be found at +http://plumed.github.io/doc-master/user-doc/html/_installation.html. + +You can statically link PLUMED manually and if you want to access the full +range of PLUMED functionalities this is what you should do. If you only want the +basic range of functionalities, however, (i.e. no user contributed modules) then +you can download and compile PLUMED in one step from the lammps/src dir, using a +command like like those below: + +make lib-plumed # print help message +make lib-plumed args="-b" # download and build the latest stable version of PLUMED + +These commands will simply invoke the lib/plumed/Install.py script with +args specified. Furthermore, once the script has completed you should +have a compiled version of PLUMED. With this built you can install/un-install +PLUMED and build LAMMPS in the usual manner: + +make yes-user-plumed +make machine :pre + +make no-user-plumed +make machine :pre + +:line + USER-H5MD package :h4,link(user-h5md) To build with this package you must have the HDF5 software package diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 031858e846..87f2493f93 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -1200,6 +1200,34 @@ examples/USER/colvars :ul :line +USER-PLUMED package :link(USER-PLUMED),h4 + +[Contents:] + +The fix plumed command allows you to use the plugin for molecular +dynamics PLUMED to analyse and bias your LAMMPS trajectory on the fly. +In practise PLUMED is called from within the lammps input script by using +the "fix plumed _fix_plumed.html command. + +[Authors:] The PLUMED library is written and maintained by +Massimilliano Bonomi, Giovanni Bussi, Carlo Camiloni and +Gareth Tribello. + +[Install:] + +This package has "specific installation +instructions"_Build_extras.html#gpu on the "Build +extras"_Build_extras.html doc page. + +[Supporting info:] + +src/USER-PLUMED/README +lib/plumed/README +"fix plumed "_fix_plumed.html +examples/USER/plumed :ul + +:line + USER-DIFFRACTION package :link(PKG-USER-DIFFRACTION),h4 [Contents:] From f70af61b35d97d3e30c322b606e1b7af03cbb9b9 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 28 Oct 2018 09:27:22 +0000 Subject: [PATCH 020/273] Added new version of Plumed wrapper --- src/USER-PLUMED/Plumed.cpp | 471 ++----------------------------------- 1 file changed, 22 insertions(+), 449 deletions(-) diff --git a/src/USER-PLUMED/Plumed.cpp b/src/USER-PLUMED/Plumed.cpp index f279c4a0eb..787a178cbd 100644 --- a/src/USER-PLUMED/Plumed.cpp +++ b/src/USER-PLUMED/Plumed.cpp @@ -19,453 +19,26 @@ You should have received a copy of the GNU Lesser General Public License along with plumed. If not, see . +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + +/* + Do not link plumed directly but rather do it at runtime +*/ +#define __PLUMED_WRAPPER_LINK_RUNTIME 1 + +/* + Make sure the inline C++ interface is not included here. + Should not be necessary, but it doesn't hurt. +*/ +#define __PLUMED_WRAPPER_CXX 0 + +/* + Tell Plumed.h to emit the whole implementation +*/ +#define __PLUMED_WRAPPER_IMPLEMENTATION 1 + +/* + Emit fortran wrappers +*/ +#define __PLUMED_WRAPPER_FORTRAN 1 + #include "Plumed.h" - -#ifdef __PLUMED_HAS_DLOPEN -#include -#endif -#include -#include -#include -#include -#include - -/* DECLARATION USED ONLY IN THIS FILE */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Function pointer to plumed_create -*/ - -typedef void*(*plumed_create_pointer)(void); -/** - Function pointer to plumed_cmd -*/ -typedef void(*plumed_cmd_pointer)(void*,const char*,const void*); - -/** - Function pointer to plumed_finalize -*/ -typedef void(*plumed_finalize_pointer)(void*); - -/** - Holder for plumedmain function pointers. -*/ -typedef struct { - plumed_create_pointer create; - plumed_cmd_pointer cmd; - plumed_finalize_pointer finalize; -} plumed_plumedmain_function_holder; - -/** - Holder for plumed symbol table. -*/ -typedef struct { - int version; - plumed_plumedmain_function_holder functions; -} plumed_symbol_table_type; - -/** - Register for plumedmain function pointers -*/ -plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder*); - -#ifdef __PLUMED_STATIC_KERNEL -/* Real interface */ -void*plumed_plumedmain_create(void); -void plumed_plumedmain_cmd(void*,const char*,const void*); -void plumed_plumedmain_finalize(void*); -#else -/* dummy interface */ -void*plumed_dummy_create(void); -void plumed_dummy_cmd(void*,const char*,const void*); -void plumed_dummy_finalize(void*); -#endif - -#ifdef __cplusplus -} -#endif - -/* END OF DECLARATION USED ONLY IN THIS FILE */ - -/* These are the dummy routines which are used when plumed is not available */ - -#ifdef __PLUMED_STATIC_KERNEL - -static int installed=1; - -#else - -static int installed=0; - -static int dummy; - -void*plumed_dummy_create(void) { - return (void*)&dummy; -} - -void plumed_dummy_cmd(void*p,const char*key,const void*val) { - (void) p; /* avoid warning on unused parameter */ - (void) key; /* avoid warning on unused parameter */ - (void) val; /* avoid warning on unused parameter */ - fprintf(stderr,"+++ ERROR: you are trying to use plumed, but it is not available +++\n"); - fprintf(stderr,"+++ Check your PLUMED_KERNEL environment variable +++\n"); - exit(1); -} - -void plumed_dummy_finalize(void*p) { - (void) p; /* avoid warning on unused parameter */ -} - -#endif - -plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder* f) { - /* - Argument f is present for historical reasons but ignored in PLUMED>=2.5. - */ - if(f) { - if(getenv("PLUMED_LOAD_DEBUG")) { - fprintf(stderr,"+++ Ignoring registration at %p (%p,%p,%p) +++\n",(void*)f,(void*)f->create,(void*)f->cmd,(void*)f->finalize); - } - } -#ifdef __PLUMED_STATIC_KERNEL - /* - When __PLUMED_STATIC_KERNEL is defined, the function holder is initialized - to statically bound plumed_plumedmain_create, plumed_plumedmain_cmd, plumed_plumedmain_finalize and - cannot be changed. This saves from mis-set values for PLUMED_KERNEL. - */ - static plumed_plumedmain_function_holder g= {plumed_plumedmain_create,plumed_plumedmain_cmd,plumed_plumedmain_finalize}; -#else - /* - On the other hand, for runtime binding, we use dlsym to find the relevant functions. - Notice that as of PLUMED 2.5 self registration of the kernel is ignored, so argument f - is not used anymore. - Also notice that we should put some guard here for safe multithread calculations. - */ - static plumed_plumedmain_function_holder g= {plumed_dummy_create,plumed_dummy_cmd,plumed_dummy_finalize}; - static int first=1; -#ifdef __PLUMED_HAS_DLOPEN - const char* path; - char* pathcopy; - void* p; - char* pc; - plumed_symbol_table_type* plumed_symbol_table_ptr; - plumed_plumedmain_function_holder functions; - char* debug; - size_t strlenpath; - int dlopenmode; - /* - f==NULL is required here otherwise we would enter this block a second time - when plumed_kernel_register is called by the just loaded shared library. - */ - if(first && f==NULL) { - path=getenv("PLUMED_KERNEL"); - debug=getenv("PLUMED_LOAD_DEBUG"); -#ifdef __PLUMED_DEFAULT_KERNEL - /* - This variable allows a default path for the kernel to be hardcoded. - Can be useful for hardcoding the predefined plumed location - still allowing the user to override this choice setting PLUMED_KERNEL. - The path should be chosen at compile time adding e.g. - -D__PLUMED_DEFAULT_KERNEL=/opt/local/lib/libplumed.dylib - */ - /* This is required to add quotes */ -#define PLUMED_QUOTE_DIRECT(name) #name -#define PLUMED_QUOTE(macro) PLUMED_QUOTE_DIRECT(macro) - if(! (path && (*path) )) path=PLUMED_QUOTE(__PLUMED_DEFAULT_KERNEL); -#endif - if(path && (*path)) { - fprintf(stderr,"+++ Loading the PLUMED kernel runtime +++\n"); - fprintf(stderr,"+++ PLUMED_KERNEL=\"%s\" +++\n",path); - if(getenv("PLUMED_LOAD_NAMESPACE") && !strcmp(getenv("PLUMED_LOAD_NAMESPACE"),"LOCAL")) { - dlopenmode=RTLD_NOW|RTLD_LOCAL; - if(debug) fprintf(stderr,"+++ Loading with mode RTLD_NOW|RTLD_LOCAL +++\n"); - } else { - dlopenmode=RTLD_NOW|RTLD_GLOBAL; - if(debug) fprintf(stderr,"+++ Loading with mode RTLD_NOW|RTLD_GLOBAL +++\n"); - } - p=dlopen(path,dlopenmode); - if(!p) { - /* - Something went wrong. We try to remove "Kernel" string from the PLUMED_KERNEL variable - and load directly the shared library. Notice that this particular path is only expected - to be necessary when using PLUMED<=2.4 and the symbols in the main executable are - not visible. All the other cases (either PLUMED>=2.5 or symbols in the main executable visible) - should work correctly without entering here. - */ - fprintf(stderr,"+++ An error occurred. Message from dlopen(): %s +++\n",dlerror()); - strlenpath=strlen(path); - pathcopy=(char*) malloc(strlenpath+1); - strncpy(pathcopy,path,strlenpath+1); - pc=pathcopy+strlenpath-6; - while(pc>=pathcopy && memcmp(pc,"Kernel",6)) pc--; - if(pc>=pathcopy) { - memmove(pc, pc+6, strlen(pc)-5); - fprintf(stderr,"+++ Trying %s +++\n",pathcopy); - p=dlopen(pathcopy,dlopenmode); - if(!p) fprintf(stderr,"+++ An error occurred. Message from dlopen(): %s +++\n",dlerror()); - } - free(pathcopy); - } - if(p) { - functions.create=NULL; - functions.cmd=NULL; - functions.finalize=NULL; - /* - If the library was loaded, use dlsym to initialize pointers. - Notice that as of PLUMED 2.5 we ignore self registrations. - Pointers are searched in the form of a single pointer to a structure, which - is the standard way in PLUMED 2.5, as well as using alternative names used in - PLUMED 2.0 to 2.4 (e.g. plumedmain_create) and in some intermediate versions between - PLUMED 2.4 and 2.5 (e.g. plumed_plumedmain_create). The last chance is probably - unnecessary and might be removed at some point. - */ - plumed_symbol_table_ptr=(plumed_symbol_table_type*) dlsym(p,"plumed_symbol_table"); - if(plumed_symbol_table_ptr) functions=plumed_symbol_table_ptr->functions; - if(debug && plumed_symbol_table_ptr) { - fprintf(stderr,"+++ plumed_symbol_table version %i found at %p +++\n",plumed_symbol_table_ptr->version,(void*)plumed_symbol_table_ptr); - fprintf(stderr,"+++ plumed_function_pointers found at %p (%p,%p,%p) +++\n",(void*)&plumed_symbol_table_ptr->functions,(void*)functions.create,(void*)functions.cmd,(void*)functions.finalize); - } - - if(!functions.create) { - functions.create=(plumed_create_pointer) dlsym(p,"plumedmain_create"); - if(debug && functions.create) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_create",(void*)functions.create); - } - if(!functions.create) { - functions.create=(plumed_create_pointer) dlsym(p,"plumed_plumedmain_create"); - if(debug && functions.create) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_create",(void*)functions.create); - } - - if(!functions.cmd) { - functions.cmd=(plumed_cmd_pointer) dlsym(p,"plumedmain_cmd"); - if(debug && functions.cmd) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_cmd",(void*)functions.cmd); - } - if(!functions.cmd) { - functions.cmd=(plumed_cmd_pointer) dlsym(p,"plumed_plumedmain_cmd"); - if(debug && functions.cmd) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_cmd",(void*)functions.cmd); - } - - if(!functions.finalize) { - functions.finalize=(plumed_finalize_pointer) dlsym(p,"plumedmain_finalize"); - if(debug && functions.finalize) fprintf(stderr,"+++ %s found at %p +++\n","plumedmain_finalize",(void*)functions.finalize); - } - if(!functions.finalize) { - functions.finalize=(plumed_finalize_pointer) dlsym(p,"plumed_plumedmain_finalize"); - if(debug && functions.finalize) fprintf(stderr,"+++ %s found at %p +++\n","plumed_plumedmain_finalize",(void*)functions.finalize); - } - - if(functions.create && functions.cmd && functions.finalize) { - g=functions; - installed=1; - } else { - if(!functions.create) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_create not found +++\n"); - if(!functions.cmd) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_cmd not found +++\n"); - if(!functions.finalize) fprintf(stderr,"+++ pointer to (plumed_)plumedmain_finalize not found +++\n"); - } - } - } - first=0; - } -#endif -#endif - return &g; -} - -/* C wrappers: */ - -plumed plumed_create(void) { - plumed p; - plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); - assert(h); - assert(h->create); - p.p=(*(h->create))(); - assert(p.p); - return p; -} - -void plumed_cmd(plumed p,const char*key,const void*val) { - plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); - assert(p.p); - assert(h); - assert(h->cmd); - (*(h->cmd))(p.p,key,val); -} - -void plumed_finalize(plumed p) { - plumed_plumedmain_function_holder*h=plumed_kernel_register(NULL); - assert(p.p); - assert(h); - assert(h->finalize); - (*(h->finalize))(p.p); - p.p=NULL; -} - -int plumed_installed(void) { - plumed_kernel_register(NULL); - return installed; -} - -/* we declare a Plumed_g_main object here, in such a way that it is always available */ - -static plumed gmain= {NULL}; - -plumed plumed_global(void) { - return gmain; -} - -void plumed_gcreate(void) { - assert(gmain.p==NULL); - gmain=plumed_create(); -} - -void plumed_gcmd(const char*key,const void*val) { - assert(gmain.p); - plumed_cmd(gmain,key,val); -} - -void plumed_gfinalize(void) { - assert(gmain.p); - plumed_finalize(gmain); - gmain.p=NULL; -} - -int plumed_ginitialized(void) { - if(gmain.p) return 1; - else return 0; -} - -void plumed_c2f(plumed p,char*c) { - unsigned i; - unsigned char* cc; - /* - Convert the address stored in p.p into a proper FORTRAN string - made of only ASCII characters. For this to work, the two following - assertions should be satisfied: - */ - assert(CHAR_BIT<=12); - assert(sizeof(p.p)<=16); - - assert(c); - cc=(unsigned char*)&p.p; - for(i=0; i Date: Sun, 28 Oct 2018 18:12:02 -0400 Subject: [PATCH 021/273] remove file that is not present --- src/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/src/.gitignore b/src/.gitignore index 641c4d5499..9a4871d250 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -63,7 +63,6 @@ /fix_plumed.h /Plumed.cpp /Plumed.h -/Plumed.inc /dump_molfile.cpp /dump_molfile.h /molfile_interface.cpp From a60b6d1ab8a5be3560a4b4361540bcc442bd4bec Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 18:12:32 -0400 Subject: [PATCH 022/273] add feature to python lib install script to support existing installation and use links --- lib/plumed/Install.py | 56 ++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 86e7cb7522..438516b0b6 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -13,15 +13,18 @@ Syntax from src dir: make lib-plumed args="-b" or: make lib-plumed args="-b -v 2.4.2" Syntax from lib dir: python Install.py -b -v 2.4.2 or: python Install.py -b + or: python Install.py -p /usr/local/plumed-2.4.2 specify one or more options, order does not matter -b = download and build the plumed2 library - -v = set version of Voro++ to download and build (default: latest stable version) + -p = specify folder of existing plumed2 installation + -v = set version of plumed2 to download and build (default: 2.4.2) Example: make lib-plumed args="-b" # download/build in lib/plumed/plumed2 +make lib-plumed args="-p $HOME/plumed-2.4.2" # use existing Plumed2 installation in $HOME/plumed-2.4.2 """ # settings @@ -93,6 +96,7 @@ if nargs == 0: error() homepath = "." buildflag = False +pathflag = False suffixflag = False linkflag = True @@ -102,6 +106,11 @@ while iarg < nargs: if iarg+2 > nargs: error() version = args[iarg+1] iarg += 2 + elif args[iarg] == "-p": + if iarg+2 > nargs: error() + plumedpath = fullpath(args[iarg+1]) + pathflag = True + iarg += 2 elif args[iarg] == "-b": buildflag = True iarg += 1 @@ -109,7 +118,17 @@ while iarg < nargs: homepath = fullpath(homepath) -# download and unpack plumed tarball +if (pathflag): + if not os.path.isdir(plumedpath): error("Plumed2 path does not exist") + homedir = plumedpath + +if (buildflag and pathflag): + error("Cannot use -b and -p flag at the same time") + +if (not buildflag and not pathflag): + error("Have to use either -b or -p flag") + +# download and unpack plumed2 tarball if buildflag: url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version @@ -118,8 +137,11 @@ if buildflag: geturl(url,filename) print("Unpacking plumed tarball ...") - if os.path.exists("%s/%s" % (homepath,version)): - cmd = 'rm -rf "%s/%s"' % (homepath,version) + if os.path.exists("%s/plumed2-%s" % (homepath,version)): + cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + if os.path.exists("%s/plumed2" % (homepath)): + cmd = 'rm -rf "%s/plumed2"' % (homepath) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'cd "%s"; tar -xzvf v%s.tar.gz' % (homepath,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) @@ -129,19 +151,19 @@ if buildflag: if buildflag: print("Building plumed ...") - cmd = 'cd %s/plumed2-%s; ./configure ; make' % (homepath,version) + cmd = 'cd %s/plumed2-%s; ./configure --prefix=%s/plumed2 ; make ; make install' % (homepath,version,homepath) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) print(txt.decode('UTF-8')) # -# # create 2 links in lib/voronoi to Voro++ src dir -# -# if linkflag: -# print("Creating links to Voro++ include and lib files") -# if os.path.isfile("includelink") or os.path.islink("includelink"): -# os.remove("includelink") -# if os.path.isfile("liblink") or os.path.islink("liblink"): -# os.remove("liblink") -# cmd = 'ln -s "%s/src" includelink' % homedir -# subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) -# cmd = 'ln -s "%s/src" liblink' % homedir -# subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +# create 2 links in lib/plumed to plumed2 installation dir + +if linkflag: + print("Creating links to plumed2 include and lib files") + if os.path.isfile("includelink") or os.path.islink("includelink"): + os.remove("includelink") + if os.path.isfile("liblink") or os.path.islink("liblink"): + os.remove("liblink") + cmd = 'ln -s "%s/plumed2/include" includelink' % homepath + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/plumed2/lib" liblink' % homepath + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From 3cc938448818239ec94666ea76780d0c4e709b57 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Sun, 28 Oct 2018 16:23:29 -0600 Subject: [PATCH 023/273] cmake: add support USER-PLUMED --- cmake/CMakeLists.txt | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b3c0a70e4a..ebcd34f966 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -171,8 +171,9 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF - USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SMD USER-SMTBQ - USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) + USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC USER-SCAFACOS + USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP + USER-QMMM) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) set(OTHER_PACKAGES CORESHELL QEQ) foreach(PKG ${DEFAULT_PACKAGES}) @@ -526,6 +527,27 @@ if(PKG_USER-SCAFACOS) include_directories(${SCAFACOS_INCLUDE_DIRS}) endif() +if(PKG_USER-PLUMED) + option(DOWNLOAD_PLUMED "Download Plumed (instead of using the system's one)" OFF) + if(DOWNLOAD_PLUMED) + include(ExternalProject) + ExternalProject_Add(plumed_build + URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-2.4.3.tgz + URL_MD5 bed9c88c8c635b269c1cd4a0598a2934 + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND /configure --prefix= + $<$:--with-pic> ) + ExternalProject_get_property(plumed_build INSTALL_DIR) + set(PLUMED_BUILD_DIR ${INSTALL_DIR}) + list(APPEND LAMMPS_DEPS plumed_build) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_BUILD_DIR}/lib/libplumed.so) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(PLUMED plumed REQUIRED) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LDFLAGS}) + endif() +endif() + if(PKG_USER-MOLFILE) add_library(molfile INTERFACE) target_include_directories(molfile INTERFACE ${LAMMPS_LIB_SOURCE_DIR}/molfile) From bfbf5695fd2f104af78b33f847d7601bc18989e3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:30:37 -0400 Subject: [PATCH 024/273] adjust path for includelink to find the Plumed.h wrapper properly --- lib/plumed/Install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 438516b0b6..eab78a5b4a 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -163,7 +163,7 @@ if linkflag: os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") - cmd = 'ln -s "%s/plumed2/include" includelink' % homepath + cmd = 'ln -s "%s/plumed2/include/plumed/wrapper" includelink' % homepath subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'ln -s "%s/plumed2/lib" liblink' % homepath subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From bdf37649057de199bba3d557acba95815a16d1aa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:31:40 -0400 Subject: [PATCH 025/273] update user-plumed Install.sh file to fit better into LAMMPS, adjust to changes in lib folder --- src/USER-PLUMED/Install.sh | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index 0b8e9e6c9a..20215e4c99 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -4,29 +4,27 @@ if (test $1 = 1) then if (test -e ../Makefile.package) then - sed -i -e 's|^PKG_LIB =[ \t]*|& $(PLUMED_LOAD) |' ../Makefile.package - if ( ! test -e ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static ) then + sed -i -e 's|^PKG_LIB =[ \t]*|& -lplumedWrapper -ldl |' ../Makefile.package + if ( ! test -e ../../lib/plumed/liblink/plumed/src/lib/Plumed.inc.static ) then sed -i -e 's|^PKG_SYSINC =[ \t]*|& -D__PLUMED_HAS_DLOPEN |' ../Makefile.package fi + sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/plumed/includelink |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/plumed/liblink |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then # This is for statically linking plumed2 - if ( test -e ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static ) then - fname=`ls ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static` + if ( test -e ../../lib/plumed/liblink/src/lib/Plumed.inc.static ) then + fname=../../lib/plumed/liblink/src/lib/Plumed.inc.static sed -i -e '4 i \ include '$fname' ' ../Makefile.package.settings - dname=`ls ../../lib/plumed/plumed2*/src/wrapper/Plumed.h` - ln -s USER-PLUMED/$dname ../Plumed.h # This is for linking plumed2 as a runtime library -- this is the default behavior else # multiline form needed for BSD sed on Macs sed -i -e '4 i \ PLUMED_LOAD=-ldl ' ../Makefile.package.settings - cp Plumed.h .. - cp Plumed.cpp .. fi fi @@ -36,21 +34,12 @@ PLUMED_LOAD=-ldl elif (test $1 = 0) then if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]* \$(PLUMED_LOAD)[^ \t]* //' ../Makefile.package - sed -i -e 's/[^ \t]* -D__PLUMED_HAS_DLOPEN[^ \t]* //' ../Makefile.package - fi - - if (test -e ../Makefile.package.settings) then - fname=`ls ../../lib/plumed/plumed2*/src/lib/Plumed.inc.static` - sed -i -e "\:include $fname: d" ../Makefile.package.settings - sed -i -e '/PLUMED_LOAD=-ldl/d' ../Makefile.package.settings + sed -i -e 's/[^ \t]*-lplumedWrapper -ldl[^ \t]* //' ../Makefile.package + sed -i -e 's/[^ \t]*-D__PLUMED_HAS_DLOPEN[^ \t]* //' ../Makefile.package + sed -i -e 's|[^ \t]*-I../../lib/plumed/includelink[^ \t]* ||' ../Makefile.package + sed -i -e 's|[^ \t]*-L../../lib/plumed/liblink[^ \t]* ||' ../Makefile.package fi rm -f ../fix_plumed.cpp rm -f ../fix_plumed.h - rm -f ../Plumed.h - if ( test -e ../Plumed.h ) then - rm -f ../Plumed.cpp - fi - fi From 925d6d37b9d3be6c2b95255657feb3d1bf18bd7c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:32:01 -0400 Subject: [PATCH 026/273] adjust header inclusion to current LAMMPS conventions --- src/USER-PLUMED/fix_plumed.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 794ab50f82..1b05477e38 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -1,6 +1,8 @@ -#include "math.h" -#include "stdlib.h" -#include "string.h" + +#include +#include +#include + #include "atom.h" #include "update.h" #include "force.h" From ae499b980dc12c6ee1e3da0a9ecc48db541ab9c3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:32:47 -0400 Subject: [PATCH 027/273] make Plumed.cpp obsolete in USER-PLUMED code by inserting it into fix_plumed.cpp --- src/USER-PLUMED/fix_plumed.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 1b05477e38..00a899724b 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -16,6 +16,29 @@ #include "modify.h" #include "pair.h" +/* + Do not link plumed directly but rather do it at runtime +*/ +#define __PLUMED_WRAPPER_LINK_RUNTIME 1 + +/* + Make sure the inline C++ interface is not included here. + Should not be necessary, but it doesn't hurt. +*/ +#define __PLUMED_WRAPPER_CXX 0 + +/* + Tell Plumed.h to emit the whole implementation +*/ +#define __PLUMED_WRAPPER_IMPLEMENTATION 1 + +/* + Emit fortran wrappers +*/ +#define __PLUMED_WRAPPER_FORTRAN 1 + +#include "Plumed.h" + using namespace LAMMPS_NS; using namespace PLMD; using namespace FixConst; From 54d728c0c7a09cc562555e708a2d8d0db0d06904 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:33:06 -0400 Subject: [PATCH 028/273] reduce need for include files by adding forward declaration --- src/USER-PLUMED/fix_plumed.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index 6b067e1920..d4bc037024 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -9,9 +9,11 @@ FixStyle(plumed,FixPlumed) #define LMP_FIX_PLUMED_H #include "fix.h" -#include "compute.h" -// the plumed header that defines the class// -#include "Plumed.h" + +// forward declaration +namespace PLMD { + class Plumed; +} namespace LAMMPS_NS { @@ -30,15 +32,15 @@ class FixPlumed : public Fix { private: // pointer to plumed object: - PLMD::Plumed*p; + PLMD::Plumed *p; // number of atoms local to this process: int nlocal; // array of atom indexes local to this process: - int*gatindex; + int *gatindex; // array of masses for local atoms: - double*masses; + double *masses; // array of charges for local atoms: - double*charges; + double *charges; // this is something to enable respa int nlevels_respa; // output bias potential From 3a082e227e4237ae2161b82e74e1800358bdeefa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:33:51 -0400 Subject: [PATCH 029/273] remove obsolete and redundant files --- src/USER-PLUMED/Plumed.cpp | 44 --- src/USER-PLUMED/Plumed.h | 577 ------------------------------------- 2 files changed, 621 deletions(-) delete mode 100644 src/USER-PLUMED/Plumed.cpp delete mode 100644 src/USER-PLUMED/Plumed.h diff --git a/src/USER-PLUMED/Plumed.cpp b/src/USER-PLUMED/Plumed.cpp deleted file mode 100644 index 787a178cbd..0000000000 --- a/src/USER-PLUMED/Plumed.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Copyright (c) 2011-2018 The plumed team - (see the PEOPLE file at the root of the distribution for a list of names) - - See http://www.plumed.org for more information. - - This file is part of plumed, version 2. - - plumed is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - plumed is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with plumed. If not, see . -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ - -/* - Do not link plumed directly but rather do it at runtime -*/ -#define __PLUMED_WRAPPER_LINK_RUNTIME 1 - -/* - Make sure the inline C++ interface is not included here. - Should not be necessary, but it doesn't hurt. -*/ -#define __PLUMED_WRAPPER_CXX 0 - -/* - Tell Plumed.h to emit the whole implementation -*/ -#define __PLUMED_WRAPPER_IMPLEMENTATION 1 - -/* - Emit fortran wrappers -*/ -#define __PLUMED_WRAPPER_FORTRAN 1 - -#include "Plumed.h" diff --git a/src/USER-PLUMED/Plumed.h b/src/USER-PLUMED/Plumed.h deleted file mode 100644 index 826bed4af6..0000000000 --- a/src/USER-PLUMED/Plumed.h +++ /dev/null @@ -1,577 +0,0 @@ -/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Copyright (c) 2011-2018 The plumed team - (see the PEOPLE file at the root of the distribution for a list of names) - - See http://www.plumed.org for more information. - - This file is part of plumed, version 2. - - plumed is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - plumed is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with plumed. If not, see . -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ -#ifndef __PLUMED_wrapper_Plumed_h -#define __PLUMED_wrapper_Plumed_h - -/** -\page ReferencePlumedH Reference for interfacing MD codes with PLUMED - - Plumed.h and Plumed.c contain the external plumed interface, which is used to - integrate it with MD engines. This interface is very general, and is expected - not to change across plumed versions. Plumed.c also implements a dummy version - of the interface, so as to allow a code to be fully linked even if the plumed - library is not available yet. These files could be directly included in the official - host MD distribution. In this manner, it will be sufficient to link the plumed - library at link time (on all systems) or directly at runtime (on system where - dynamic loading is enabled) to include plumed features. - - Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o - needs to be linked with the host MD code immediately (whereas the rest of plumed - could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we - link the Plumed.o file we would like not to need any C++ library linked. In this - manner, we do not need to know which C++ compiler will be used to compile plumed. - The C++ library is only linked to the "rest" of plumed, which actually use it. - Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ - (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, - which basically includes Plumed.c, is compiled with the C++ compiler). This will - allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into - Plumed.cpp), without the need of configuring a plain C compiler. - - Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed - is hidden inside a single object type, which is described in C by a structure - (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a - fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct - and class interfaces, but the first should be preferred. The reference interface - is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers - around it. - - In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. - In the C and FORTRAN interfaces, all the routines are named plumed_*, to - avoid potential name clashes. Notice that the entire plumed library - is implemented in C++, and it is hidden inside the PLMD namespace. - If the used C++ compiler supports C++11, PLMD::Plumed object defines move semantics - so as to be usable in STL containers. That is, you can declare a std::vector. - - Handlers to the plumed object can be converted among different representations, - to allow inter-operability among languages. In C, there are tools to convert - to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. - - These handlers only contain a pointer to the real structure, so that - when a plumed object is brought from one language to another, - it brings a reference to the same environment. - - Moreover, to simplify life in all cases where a single Plumed object is - required for the entire simulation (which covers most of the practical - applications with conventional MD codes) it is possible to take advantage - of a global interface, which is implicitly referring to a unique global instance. - The global object should still be initialized and finalized properly. - - The basic method to send a message to plumed is -\verbatim - (C) plumed_cmd - (C++) PLMD::Plumed::cmd - (FORTRAN) PLUMED_F_CMD -\endverbatim - - To initialize a plumed object, use: -\verbatim - (C) plumed_create - (C++) (constructor of PLMD::Plumed) - (FORTRAN) PLUMED_F_CREATE -\endverbatim - - To finalize it, use -\verbatim - (C) plumed_finalize - (C++) (destructor of PLMD::Plumed) - (FORTRAN) PLUMED_F_FINALIZE -\endverbatim - - To access to the global-object, use -\verbatim - (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd - (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd - (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD -\endverbatim - - To check if the global object has been initialized, use -\verbatim - (C) plumed_ginitialized - (C++) PLMD::Plumed::ginitialized - (FORTRAN) PLUMED_F_GINITIALIZED -\endverbatim - - To check if plumed library is available (this is useful for runtime linking), use -\verbatim - (C) plumed_installed - (C++) PLMD::Plumed::installed - (FORTRAN) PLUMED_F_INSTALLED -\endverbatim - - To convert handlers use -\verbatim - (C) plumed_c2f (C to FORTRAN) - (C) plumed_f2c (FORTRAN to C) - (C++) Plumed(plumed) constructor (C to C++) - (C++) operator plumed() cast (C++ to C) - (C++) Plumed(char*) constructor (FORTRAN to C++) - (C++) toFortran(char*) (C++ to FORTRAN) -\endverbatim - -\verbatim - FORTRAN interface - SUBROUTINE PLUMED_F_INSTALLED(i) - INTEGER, INTENT(OUT) :: i - SUBROUTINE PLUMED_F_GINITIALIZED(i) - INTEGER, INTENT(OUT) :: i - SUBROUTINE PLUMED_F_GCREATE() - SUBROUTINE PLUMED_F_GCMD(key,val) - CHARACTER(LEN=*), INTENT(IN) :: key - UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) - SUBROUTINE PLUMED_F_GFINALIZE() - SUBROUTINE PLUMED_F_GLOBAL(p) - CHARACTER(LEN=32), INTENT(OUT) :: p - SUBROUTINE PLUMED_F_CREATE(p) - CHARACTER(LEN=32), INTENT(OUT) :: p - SUBROUTINE PLUMED_F_CMD(p,key,val) - CHARACTER(LEN=32), INTENT(IN) :: p - CHARACTER(LEN=*), INTENT(IN) :: key - UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) - SUBROUTINE PLUMED_F_FINALIZE(p) - CHARACTER(LEN=32), INTENT(IN) :: p -\endverbatim - - The main routine is "cmd", which accepts two arguments: - key is a string containing the name of the command - val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed - is going to modify val in several cases (using a const_cast). - In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). - The set of possible keys is the real API of the plumed library, and will be expanded with time. - New commands will be added, but backward compatibility will be retained as long as possible. - - To pass plumed a callback function use the following syntax (not available in FORTRAN yet) -\verbatim - plumed_function_holder ff; - ff.p=your_function; - plumed_cmd(plumed,"xxxx",&ff); -\endverbatim - (this is passing the your_function() function to the "xxxx" command) -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Generic function pointer */ -typedef void (*plumed_function_pointer)(void); - -/** - \brief Holder for function pointer. - - To pass plumed a callback function use the following syntax: -\verbatim - plumed_function_holder ff; - ff.p=your_function; - plumed_cmd(plumed,"xxxx",&ff); -\endverbatim - (this is going to pass the your_function() function to the "xxxx" command) -*/ - -typedef struct { - plumed_function_pointer p; -} plumed_function_holder; - -/** - \brief Main plumed object - - This is an object containing a Plumed instance, which should be used in - the MD engine. It should first be initialized with plumed_create(), - then it communicates with the MD engine using plumed_cmd(). Finally, - before the termination, it should be deallocated with plumed_finalize(). - Its interface is very simple and general, and is expected - not to change across plumed versions. See \ref ReferencePlumedH. -*/ -typedef struct { - /** - \private - \brief Void pointer holding the real PlumedMain structure - */ - void*p; -} plumed; - -/** \relates plumed - \brief Constructor - - \return The constructed plumed object -*/ -plumed plumed_create(void); - -/** \relates plumed - \brief Tells p to execute a command - - \param p The plumed object on which command is acting - \param key The name of the command to be executed - \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), - but for some choice of key it can change the content -*/ -void plumed_cmd(plumed p,const char*key,const void*val); - -/** \relates plumed - \brief Destructor - - \param p The plumed object to be deallocated -*/ -void plumed_finalize(plumed p); - -/** \relates plumed - \brief Check if plumed is installed (for runtime binding) - - \return 1 if plumed is installed, 0 otherwise -*/ -int plumed_installed(void); - -/** \relates plumed - \brief Retrieves an handler to the global structure. -*/ -plumed plumed_global(void); - -/** \relates plumed - \brief Check if the global interface has been initialized - - \return 1 if plumed has been initialized, 0 otherwise -*/ -int plumed_ginitialized(void); - -/* global C interface, working on a global object */ - -/** \relates plumed - \brief Constructor for the global interface. - - \note Equivalent to plumed_create(), but initialize the static global plumed object -*/ -void plumed_gcreate(void); - -/** \relates plumed - \brief Tells to the global interface to execute a command. - - \param key The name of the command to be executed - \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), - but for some choice of key it can change the content - - \note Equivalent to plumed_cmd(), but acting on the global plumed object. - It thus does not require the plumed object to be specified. -*/ -void plumed_gcmd(const char* key,const void* val); - -/** \relates plumed - \brief Destructor for the global interface. - - \note Equivalent to plumed_finalize(), but acting on the global plumed object. - It thus does not require the plumed object to be specified. -*/ -void plumed_gfinalize(void); - -/* routines to convert char handler from/to plumed objects */ - -/** \related plumed - \brief Converts a C handler to a FORTRAN handler - - \param p The C handler - \param c The FORTRAN handler (a char[32]) - - This function can be used to convert a plumed object created in C to - a plumed handler that can be used in FORTRAN. -\verbatim -#include -int main(int argc,char*argv[]){ - plumed p; - p=plumed_create(); - char fortran_handler[32]; - plumed_c2f(p,fortran_handler); - printf("DEBUG: this is a string representation for the plumed handler: %s\n",fortran_handler); - fortran_routine(fortran_handler); - plumed_finalize(p); - return 0; -} -\endverbatim - Here `fortran_routine` is a routine implemented in FORTRAN that manipulates the - fortran_handler. -*/ -void plumed_c2f(plumed p,char* c); - -/** \related plumed - \brief Converts a FORTRAN handler to a C handler - \param c The FORTRAN handler (a char[32]) - \return The C handler - - This function can be used to convert a plumed object created in FORTRAN - to a plumed handler that can be used in C. -\verbatim -void c_routine(char handler[32]){ - plumed p; - p=plumed_f2c(handler); - plumed_cmd(p,"init",NULL); -} -\endverbatim - Here `c_routine` is a C function that can be called from FORTRAN - and interact with the provided plumed handler. -*/ -plumed plumed_f2c(const char* c); - -#ifdef __cplusplus -} -#endif - -#ifdef __cplusplus - -/* this is to include the NULL pointer */ -#include - -/* C++ interface is hidden in PLMD namespace (same as plumed library) */ -namespace PLMD { - -/** - C++ wrapper for \ref plumed. - - This class provides a C++ interface to PLUMED. -*/ - -class Plumed { - /** - C structure. - */ - plumed main; - /** - keeps track if the object was created from scratch using - the defaults destructor (reference=false) or if it was imported - from C or FORTRAN (reference=true). In the latter case, the - plumed_finalize() method is not called when destructing the object, - since it is expected to be finalized in the C/FORTRAN code - */ - bool reference; -public: - /** - Check if plumed is installed (for runtime binding) - \return true if plumed is installed, false otherwise - \note Equivalent to plumed_installed() but returns a bool - */ - static bool installed(); - /** - Check if global-plumed has been initialized - \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been - called), false otherwise. - \note Equivalent to plumed_ginitialized() but returns a bool - */ - static bool ginitialized(); - /** - Initialize global-plumed. - \note Equivalent to plumed_gcreate() - */ - static void gcreate(); - /** - Send a command to global-plumed - \param key The name of the command to be executed - \param val The argument. It is declared as const to allow calls like gcmd("A","B"), - but for some choice of key it can change the content - \note Equivalent to plumed_gcmd() - */ - static void gcmd(const char* key,const void* val); - /** - Finalize global-plumed - */ - static void gfinalize(); - /** - Returns the Plumed global object - \return The Plumed global object - */ - static Plumed global(); - /** - Constructor. - \note Performs the same task a plumed_create() - */ - Plumed(); - /** - Clone a Plumed object from a FORTRAN char* handler - \param c The FORTRAN handler (a char[32]). - - \attention The Plumed object created in this manner - will not finalize the corresponding plumed structure. - It is expected that the FORTRAN code calls plumed_c_finalize for it - */ -// to have maximum portability of this file I do not use the explicit keyword here -// I thus add a suppress command for cppcheck -// cppcheck-suppress noExplicitConstructor - Plumed(const char*c); - /** - Clone a Plumed object from a C plumed structure - \param p The C plumed structure. - - \attention The Plumed object created in this manner - will not finalize the corresponding plumed structure. - It is expected that the C code calls plumed_finalize for it - */ -// to have maximum portability of this file I do not use the explicit keyword here -// I thus add a suppress command for cppcheck -// cppcheck-suppress noExplicitConstructor - Plumed(plumed p); -private: - /** Copy constructor is disabled (private and unimplemented) - The problem here is that after copying it will not be clear who is - going to finalize the corresponding plumed structure. - */ - Plumed(const Plumed&); - /** Assignment operator is disabled (private and unimplemented) - The problem here is that after copying it will not be clear who is - going to finalize the corresponding plumed structure. - */ - Plumed&operator=(const Plumed&); -public: - /* - PLUMED 2.4 requires a C++11 compiler. - Anyway, since Plumed.h file might be redistributed with other codes - and it should be possible to combine it with earlier PLUMED versions, - we here explicitly check if C+11 is available before enabling move semantics. - This could still create problems if a compiler 'cheats', setting __cplusplus > 199711L - but not supporting move semantics. Hopefully will not happen! - */ -#if __cplusplus > 199711L - /** Move constructor. - Only if move semantics is enabled. - It allows storing PLMD::Plumed objects in STL containers. - */ - Plumed(Plumed&&); - /** Move assignment. - Only if move semantics is enabled. - */ - Plumed& operator=(Plumed&&); -#endif - /** - Retrieve the C plumed structure for this object - */ - operator plumed()const; - /** - Retrieve a FORTRAN handler for this object - \param c The FORTRAN handler (a char[32]). - */ - void toFortran(char*c)const; - /** - Send a command to this plumed object - \param key The name of the command to be executed - \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), - but for some choice of key it can change the content - \note Equivalent to plumed_cmd() - */ - void cmd(const char*key,const void*val=NULL); - /** - Destructor - - Destructor is virtual so as to allow correct inheritance from Plumed object. - To avoid linking problems with g++, I specify "inline" also here (in principle - it should be enough to specify it down in the definition of the function, but - for some reason that I do not understand g++ does not inline it properly in that - case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the - way it is done here seems to work properly). - */ - inline virtual ~Plumed(); -}; - -/* All methods are inlined so as to avoid the compilation of an extra c++ file */ - -inline -bool Plumed::installed() { - return plumed_installed(); -} - -inline -Plumed::Plumed(): - main(plumed_create()), - reference(false) -{} - -inline -Plumed::Plumed(const char*c): - main(plumed_f2c(c)), - reference(true) -{} - -inline -Plumed::Plumed(plumed p): - main(p), - reference(true) -{} - -#if __cplusplus > 199711L -inline -Plumed::Plumed(Plumed&& p): - main(p.main), - reference(p.reference) -{} - -inline -Plumed& Plumed::operator=(Plumed&& p) { - main=p.main; - reference=p.reference; - return *this; -} -#endif - -inline -Plumed::operator plumed()const { - return main; -} - -inline -void Plumed::toFortran(char*c)const { - plumed_c2f(main,c); -} - -inline -void Plumed::cmd(const char*key,const void*val) { - plumed_cmd(main,key,val); -} - -inline -Plumed::~Plumed() { - if(!reference)plumed_finalize(main); -} - -inline -bool Plumed::ginitialized() { - return plumed_ginitialized(); -} - -inline -void Plumed::gcreate() { - plumed_gcreate(); -} - -inline -void Plumed::gcmd(const char* key,const void* val) { - plumed_gcmd(key,val); -} - -inline -void Plumed::gfinalize() { - plumed_gfinalize(); -} - -inline -Plumed Plumed::global() { - return plumed_global(); -} - -} - -#endif - - -#endif From a662afe97084c4bf0061d2e6ff1793160a87da9b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:37:33 -0400 Subject: [PATCH 030/273] fully integrate USER-PLUMED package into conventional build --- src/Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7d31c81c75..b40c98cd76 100644 --- a/src/Makefile +++ b/src/Makefile @@ -61,21 +61,22 @@ PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ user-intel user-lb user-manifold user-meamc user-meso \ user-mgpt user-misc user-mofff user-molfile \ - user-netcdf user-omp user-phonon user-ptm user-qmmm user-qtb \ - user-quip user-reaxc user-scafacos user-smd user-smtbq \ + user-netcdf user-omp user-phonon user-plumed user-ptm user-qmmm \ + user-qtb user-quip user-reaxc user-scafacos user-smd user-smtbq \ user-sph user-tally user-uef user-vtk PACKLIB = compress gpu kim kokkos latte meam message mpiio mscg poems \ python reax voronoi \ user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ - user-netcdf user-qmmm user-quip user-scafacos user-smd user-vtk + user-netcdf user-plumed user-qmmm user-quip user-scafacos \ + user-smd user-vtk PACKSYS = compress mpiio python user-lb PACKINT = gpu kokkos meam message poems reax user-atc user-awpmd user-colvars PACKEXT = kim latte mscg voronoi \ - user-h5md user-molfile user-netcdf user-qmmm user-quip \ + user-h5md user-molfile user-netcdf user-plumed user-qmmm user-quip \ user-smd user-vtk PACKALL = $(PACKAGE) $(PACKUSER) From 360aca581cba306f3d01db66ecb9fdeefe37292b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 21:56:49 -0400 Subject: [PATCH 031/273] remove last reference to voro++ --- lib/plumed/Install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index eab78a5b4a..6613add4f3 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Install.py tool to download, unpack, build, and link to the Voro++ library +# Install.py tool to download, unpack, build, and link to the plumed2 library # used to automate the steps described in the README file in this dir from __future__ import print_function From bee2cb96fa473c1afe0a51303b1a459bdde9af9d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 22:18:27 -0400 Subject: [PATCH 032/273] remove references to Plumed.cpp and Plumed.h --- src/.gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index 9a4871d250..74b43cd3d7 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -61,8 +61,6 @@ /fix_colvars.h /fix_plumed.cpp /fix_plumed.h -/Plumed.cpp -/Plumed.h /dump_molfile.cpp /dump_molfile.h /molfile_interface.cpp From 25b425dbb017010eb908d71c016e6d5a1aec940d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 28 Oct 2018 22:21:35 -0400 Subject: [PATCH 033/273] no need to import the PLMD namespace globally --- src/USER-PLUMED/fix_plumed.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 00a899724b..d43c39bf8d 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -40,7 +40,6 @@ #include "Plumed.h" using namespace LAMMPS_NS; -using namespace PLMD; using namespace FixConst; #define INVOKED_SCALAR 1 From 283096d1d5c5f1e5d11392cff986b19bc016d2a1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 29 Oct 2018 03:50:55 -0400 Subject: [PATCH 034/273] update .gitignore --- lib/plumed/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/plumed/.gitignore b/lib/plumed/.gitignore index f1a18f99d0..c17bb18bf0 100644 --- a/lib/plumed/.gitignore +++ b/lib/plumed/.gitignore @@ -1,2 +1,3 @@ -# files to ignore /plumed2* +/includelink +/liblink From bcc7a4c32fc1fd29d855d68cda84eed7f9e3c095 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Mon, 29 Oct 2018 06:36:47 -0600 Subject: [PATCH 035/273] cmake: add PLUMED include dir --- cmake/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ebcd34f966..d46567b277 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -538,14 +538,17 @@ if(PKG_USER-PLUMED) CONFIGURE_COMMAND /configure --prefix= $<$:--with-pic> ) ExternalProject_get_property(plumed_build INSTALL_DIR) - set(PLUMED_BUILD_DIR ${INSTALL_DIR}) + set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_BUILD_DIR}/lib/libplumed.so) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so) + set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include/plumed/wrapper") else() find_package(PkgConfig REQUIRED) pkg_check_modules(PLUMED plumed REQUIRED) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LDFLAGS}) + set(PLUMED_INCLUDE_DIRS "${PLUMED_INCLUDE_DIRS}/plumed/wrapper") endif() + include_directories(${PLUMED_INCLUDE_DIRS}) endif() if(PKG_USER-MOLFILE) From 044507640f6fa0ff044f3192a1f1efe5a0688471 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Mon, 29 Oct 2018 06:52:19 -0600 Subject: [PATCH 036/273] include Plumed.h with full path --- cmake/CMakeLists.txt | 3 +-- lib/plumed/Install.py | 2 +- src/USER-PLUMED/fix_plumed.cpp | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d46567b277..89eb9df257 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -541,12 +541,11 @@ if(PKG_USER-PLUMED) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so) - set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include/plumed/wrapper") + set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") else() find_package(PkgConfig REQUIRED) pkg_check_modules(PLUMED plumed REQUIRED) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LDFLAGS}) - set(PLUMED_INCLUDE_DIRS "${PLUMED_INCLUDE_DIRS}/plumed/wrapper") endif() include_directories(${PLUMED_INCLUDE_DIRS}) endif() diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 6613add4f3..fc8fa509c1 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -163,7 +163,7 @@ if linkflag: os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") - cmd = 'ln -s "%s/plumed2/include/plumed/wrapper" includelink' % homepath + cmd = 'ln -s "%s/plumed2/include" includelink' % homepath subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'ln -s "%s/plumed2/lib" liblink' % homepath subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index d43c39bf8d..f0582b184a 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -37,7 +37,7 @@ */ #define __PLUMED_WRAPPER_FORTRAN 1 -#include "Plumed.h" +#include "plumed/wrapper/Plumed.h" using namespace LAMMPS_NS; using namespace FixConst; From 1bae30c295527f9cba86fd1a737653865a943af9 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Mon, 29 Oct 2018 06:57:46 -0600 Subject: [PATCH 037/273] liblammps.pc: add some more documentation --- cmake/pkgconfig/liblammps.pc.in | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/cmake/pkgconfig/liblammps.pc.in b/cmake/pkgconfig/liblammps.pc.in index 7850972f3b..a8710ca224 100644 --- a/cmake/pkgconfig/liblammps.pc.in +++ b/cmake/pkgconfig/liblammps.pc.in @@ -1,9 +1,29 @@ # pkg-config file for lammps # https://people.freedesktop.org/~dbn/pkg-config-guide.html -# Usage: cc `pkg-config --cflags --libs liblammps` -o myapp myapp.c -# after you added @CMAKE_INSTALL_FULL_LIBDIR@/pkg-config to PKG_CONFIG_PATH, + +# Add the directory where lammps.pc got installed to your PKG_CONFIG_PATH # e.g. export PKG_CONFIG_PATH=@CMAKE_INSTALL_FULL_LIBDIR@/pkgconfig +# Use this on commandline with: +# c++ `pkg-config --cflags --libs lammps` -o myapp myapp.cpp + +# Use this in a Makefile: +# myapp: myapp.cpp +# $(CC) `pkg-config --cflags --libs lammps` -o $@ $< + +# Use this in autotools: +# configure.ac: +# PKG_CHECK_MODULES([LAMMPS], [lammps]) +# Makefile.am: +# myapp_CFLAGS = $(LAMMPS_CFLAGS) +# myapp_LDADD = $(LAMMPS_LIBS) + +# Use this in CMake: +# CMakeLists.txt: +# find_package(PkgConfig) +# pkg_check_modules(LAMMPS IMPORTED_TARGET lammps) +# target_link_libraries( PkgConfig::LAMMPS) + prefix=@CMAKE_INSTALL_PREFIX@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ From ba6f6f73f172f936ce7979a4ffac476ca96941d3 Mon Sep 17 00:00:00 2001 From: Morteza Jalalvand Date: Tue, 30 Oct 2018 17:40:00 +0330 Subject: [PATCH 038/273] first commit: added SDPD --- cmake/CMakeLists.txt | 4 +- cmake/presets/all_off.cmake | 2 +- cmake/presets/all_on.cmake | 2 +- cmake/presets/manual_selection.cmake | 1 + cmake/presets/nolib.cmake | 2 +- cmake/presets/std.cmake | 2 +- cmake/presets/std_nolib.cmake | 2 +- cmake/presets/user.cmake | 2 +- doc/src/Commands_fix.txt | 2 + doc/src/Commands_pair.txt | 1 + doc/src/Packages_details.txt | 26 + doc/src/Packages_user.txt | 1 + doc/src/fix.txt | 2 + doc/src/fix_meso_move.txt | 233 ++++ doc/src/fix_rigid_meso.txt | 349 ++++++ doc/src/fixes.txt | 2 + doc/src/lammps.book | 3 + doc/src/pair_sdpd_taitwater_isothermal.txt | 108 ++ doc/src/pair_style.txt | 1 + doc/src/pairs.txt | 1 + .../sdpd/2d-diffusion-in-shear-flow/in.lammps | 61 ++ ...g.24Oct18.2d-diffusion-in-shear-flow.g++.1 | 247 +++++ ...g.24Oct18.2d-diffusion-in-shear-flow.g++.4 | 247 +++++ examples/USER/sdpd/2d-diffusion/in.lammps | 49 + .../log.24Oct18.2d-diffusion.g++.1 | 226 ++++ .../log.24Oct18.2d-diffusion.g++.4 | 226 ++++ examples/USER/sdpd/README | 24 + .../sdpd/equipartition-verification/in.lammps | 45 + .../log.24Oct18.equipartition.g++.1 | 146 +++ .../log.24Oct18.equipartition.g++.4 | 146 +++ src/Depend.sh | 1 + src/USER-SDPD/Install.sh | 37 + src/USER-SDPD/README | 13 + src/USER-SDPD/fix_meso_move.cpp | 998 ++++++++++++++++++ src/USER-SDPD/fix_meso_move.h | 127 +++ src/USER-SDPD/fix_rigid_meso.cpp | 500 +++++++++ src/USER-SDPD/fix_rigid_meso.h | 69 ++ .../pair_sdpd_taitwater_isothermal.cpp | 321 ++++++ .../pair_sdpd_taitwater_isothermal.h | 60 ++ 39 files changed, 4281 insertions(+), 8 deletions(-) create mode 100644 doc/src/fix_meso_move.txt create mode 100644 doc/src/fix_rigid_meso.txt create mode 100644 doc/src/pair_sdpd_taitwater_isothermal.txt create mode 100644 examples/USER/sdpd/2d-diffusion-in-shear-flow/in.lammps create mode 100644 examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.1 create mode 100644 examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.4 create mode 100644 examples/USER/sdpd/2d-diffusion/in.lammps create mode 100644 examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.1 create mode 100644 examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.4 create mode 100644 examples/USER/sdpd/README create mode 100644 examples/USER/sdpd/equipartition-verification/in.lammps create mode 100644 examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.1 create mode 100644 examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.4 create mode 100644 src/USER-SDPD/Install.sh create mode 100644 src/USER-SDPD/README create mode 100644 src/USER-SDPD/fix_meso_move.cpp create mode 100644 src/USER-SDPD/fix_meso_move.h create mode 100644 src/USER-SDPD/fix_rigid_meso.cpp create mode 100644 src/USER-SDPD/fix_rigid_meso.h create mode 100644 src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp create mode 100644 src/USER-SDPD/pair_sdpd_taitwater_isothermal.h diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b3c0a70e4a..a334ba0368 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -171,8 +171,8 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF - USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SMD USER-SMTBQ - USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) + USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD + USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) set(OTHER_PACKAGES CORESHELL QEQ) foreach(PKG ${DEFAULT_PACKAGES}) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index f7e90ddbb4..9021dedc08 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 2c6f67904e..ef17e38914 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/cmake/presets/manual_selection.cmake b/cmake/presets/manual_selection.cmake index 6c03d983f6..35a45a5c87 100644 --- a/cmake/presets/manual_selection.cmake +++ b/cmake/presets/manual_selection.cmake @@ -61,6 +61,7 @@ set(PKG_USER-QMMM OFF CACHE BOOL "" FORCE) set(PKG_USER-QTB OFF CACHE BOOL "" FORCE) set(PKG_USER-QUIP OFF CACHE BOOL "" FORCE) set(PKG_USER-REAXC OFF CACHE BOOL "" FORCE) +set(PKG_USER-SDPD OFF CACHE BOOL "" FORCE) set(PKG_USER-SMD OFF CACHE BOOL "" FORCE) set(PKG_USER-SMTBQ OFF CACHE BOOL "" FORCE) set(PKG_USER-SPH OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index cd603aa804..54db12a851 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/cmake/presets/std.cmake b/cmake/presets/std.cmake index 36da897957..4176aba44e 100644 --- a/cmake/presets/std.cmake +++ b/cmake/presets/std.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/cmake/presets/std_nolib.cmake b/cmake/presets/std_nolib.cmake index 9bffefcbe0..aa067f2ba0 100644 --- a/cmake/presets/std_nolib.cmake +++ b/cmake/presets/std_nolib.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/cmake/presets/user.cmake b/cmake/presets/user.cmake index cb81b67558..afb030d3d6 100644 --- a/cmake/presets/user.cmake +++ b/cmake/presets/user.cmake @@ -8,7 +8,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 4144c7eb90..77684390bd 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -94,6 +94,7 @@ OPT. "lineforce"_fix_lineforce.html, "manifoldforce"_fix_manifoldforce.html, "meso"_fix_meso.html, +"meso/move"_fix_meso_move.html, "meso/stationary"_fix_meso_stationary.html, "momentum (k)"_fix_momentum.html, "move"_fix_move.html, @@ -172,6 +173,7 @@ OPT. "restrain"_fix_restrain.html, "rhok"_fix_rhok.html, "rigid (o)"_fix_rigid.html, +"rigid/meso"_fix_rigid_meso.html, "rigid/nph (o)"_fix_rigid.html, "rigid/nph/small"_fix_rigid.html, "rigid/npt (o)"_fix_rigid.html, diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index a74574367c..7af2cc9bae 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -198,6 +198,7 @@ OPT. "reax/c (ko)"_pair_reaxc.html, "rebo (io)"_pair_airebo.html, "resquared (go)"_pair_resquared.html, +"sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html, "smd/hertz"_pair_smd_hertz.html, "smd/tlsph"_pair_smd_tlsph.html, "smd/tri_surface"_pair_smd_triangulated_surface.html, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 031858e846..be9006316a 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -95,6 +95,7 @@ as contained in the file name. "USER-QUIP"_#PKG-USER-QUIP, "USER-REAXC"_#PKG-USER-REAXC, "USER-SCAFACOS"_#PKG-USER-SCAFACOS, +"USER-SDPD"_#PKG-USER-SDPD, "USER-SMD"_#PKG-USER-SMD, "USER-SMTBQ"_#PKG-USER-SMTBQ, "USER-SPH"_#PKG-USER-SPH, @@ -1916,6 +1917,31 @@ examples/USER/scafacos :ul :line +USER-SDPD package :link(PKG-USER-SDPD),h4 + +[Contents:] + +A pair style for smoothed dissipative particle dynamics (SDPD), which +is an extension of smoothed particle hydrodynamics (SPH) to mesoscale +where thermal fluctuations are important (see the +"USER-SPH package"_#PKG-USER-SPH). +Also two fixes for moving and rigid body integration of SPH/SDPD particles +(particles of atom_style meso). + +[Author:] Morteza Jalalvand (Institute for Advanced Studies in Basic +Sciences, Iran). + +[Supporting info:] + +src/USER-SDPD: filenames -> commands +src/USER-SDPD/README +"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html +"fix meso/move"_fix_meso_move.html +"fix rigid/meso"_fix_rigid_meso.html +examples/USER/sdpd :ul + +:line + USER-SMD package :link(PKG-USER-SMD),h4 [Contents:] diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index 9bb3fbd18c..e1269b0d0c 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -68,6 +68,7 @@ Package, Description, Doc page, Example, Library "USER-QUIP"_Packages_details.html#PKG-USER-QUIP, QUIP/libatoms interface,"pair_style quip"_pair_quip.html, USER/quip, ext "USER-REAXC"_Packages_details.html#PKG-USER-REAXC, ReaxFF potential (C/C++) ,"pair_style reaxc"_pair_reaxc.html, reax, no "USER-SCAFACOS"_Packages_details.html#PKG-USER-SCAFACOS, wrapper on ScaFaCoS solver,"kspace_style scafacos"_kspace_style.html, USER/scafacos, ext +"USER-SDPD"_Packages_details.html#PKG-USER-SDPD, smoothed dissipative particle dynamics,"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal, USER/sdpd, no "USER-SMD"_Packages_details.html#PKG-USER-SMD, smoothed Mach dynamics,"SMD User Guide"_PDF/SMD_LAMMPS_userguide.pdf, USER/smd, ext "USER-SMTBQ"_Packages_details.html#PKG-USER-SMTBQ, second moment tight binding QEq potential,"pair_style smtbq"_pair_smtbq.html, USER/smtbq, no "USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 27cc0467e2..8d00fa987d 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -237,6 +237,7 @@ accelerated styles exist. "lineforce"_fix_lineforce.html - constrain atoms to move in a line "manifoldforce"_fix_manifoldforce.html - "meso"_fix_meso.html - +"meso"_fix_meso_move.html - move mesoscopic SPH/SDPD particles in a prescribed fashion "meso/stationary"_fix_meso_stationary.html - "momentum"_fix_momentum.html - zero the linear and/or angular momentum of a group of atoms "move"_fix_move.html - move atoms in a prescribed fashion @@ -331,6 +332,7 @@ accelerated styles exist. "rigid/small/npt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPT integration "rigid/small/nve"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with alternate NVE integration "rigid/small/nvt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVT integration +"rigid/meso"_fix_rigid_meso.html - constrain clusters of mesoscopic SPH/SDPD particles to move as a rigid body "rx"_fix_rx.html - "saed/vtk"_fix_saed_vtk.html - "setforce"_fix_setforce.html - set the force on each atom diff --git a/doc/src/fix_meso_move.txt b/doc/src/fix_meso_move.txt new file mode 100644 index 0000000000..0a222e79ed --- /dev/null +++ b/doc/src/fix_meso_move.txt @@ -0,0 +1,233 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix meso/move command :h3 + +[Syntax:] + +fix ID group-ID meso/move style args keyword values ... :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +meso/move = style name of this fix command :l +style = {linear} or {wiggle} or {rotate} or {variable} :l + {linear} args = Vx Vy Vz + Vx,Vy,Vz = components of velocity vector (velocity units), any component can be specified as NULL + {wiggle} args = Ax Ay Az period + Ax,Ay,Az = components of amplitude vector (distance units), any component can be specified as NULL + period = period of oscillation (time units) + {rotate} args = Px Py Pz Rx Ry Rz period + Px,Py,Pz = origin point of axis of rotation (distance units) + Rx,Ry,Rz = axis of rotation vector + period = period of rotation (time units) + {variable} args = v_dx v_dy v_dz v_vx v_vy v_vz + v_dx,v_dy,v_dz = 3 variable names that calculate x,y,z displacement as function of time, any component can be specified as NULL + v_vx,v_vy,v_vz = 3 variable names that calculate x,y,z velocity as function of time, any component can be specified as NULL :pre + +zero or more keyword/value pairs may be appended :l +keyword = {units} :l + {units} value = {box} or {lattice} :pre +:ule + +[Examples:] + +fix 1 boundary meso/move wiggle 3.0 0.0 0.0 1.0 units box +fix 2 boundary meso/move rotate 0.0 0.0 0.0 0.0 0.0 1.0 5.0 +fix 2 boundary meso/move variable v_myx v_myy NULL v_VX v_VY NULL :pre + +[Description:] + +Perform updates of position, velocity, internal energy and local +density for mesoscopic particles in the group each timestep using the +specified settings or formulas, without regard to forces on the +particles. This can be useful for boundary, solid bodies or other +particles, whose movement can influence nearby particles. + +The operation of this fix is exactly like that described by the +"fix move"_fix_move.html command, except that particles' density, +internal energy and extrapolated velocity are also updated. + +NOTE: The particles affected by this fix should not be time integrated +by other fixes (e.g. "fix meso"_fix_meso.html, "fix +meso/stationary"_fix_meso_stationary.html), since that will change their +positions and velocities twice. + +NOTE: As particles move due to this fix, they will pass thru periodic +boundaries and be remapped to the other side of the simulation box, +just as they would during normal time integration (e.g. via the "fix +meso"_fix_meso.html command). It is up to you to decide whether periodic +boundaries are appropriate with the kind of particle motion you are +prescribing with this fix. + +NOTE: As dicsussed below, particles are moved relative to their initial +position at the time the fix is specified. These initial coordinates +are stored by the fix in "unwrapped" form, by using the image flags +associated with each particle. See the "dump custom"_dump.html command +for a discussion of "unwrapped" coordinates. See the Atoms section of +the "read_data"_read_data.html command for a discussion of image flags +and how they are set for each particle. You can reset the image flags +(e.g. to 0) before invoking this fix by using the "set image"_set.html +command. + +:line + +The {linear} style moves particles at a constant velocity, so that their +position {X} = (x,y,z) as a function of time is given in vector +notation as + +X(t) = X0 + V * delta :pre + +where {X0} = (x0,y0,z0) is their position at the time the fix is +specified, {V} is the specified velocity vector with components +(Vx,Vy,Vz), and {delta} is the time elapsed since the fix was +specified. This style also sets the velocity of each particle to V = +(Vx,Vy,Vz). If any of the velocity components is specified as NULL, +then the position and velocity of that component is time integrated +the same as the "fix meso"_fix_meso.html command would perform, using +the corresponding force component on the particle. + +Note that the {linear} style is identical to using the {variable} +style with an "equal-style variable"_variable.html that uses the +vdisplace() function. E.g. + +variable V equal 10.0 +variable x equal vdisplace(0.0,$V) +fix 1 boundary move variable v_x NULL NULL v_V NULL NULL :pre + +The {wiggle} style moves particles in an oscillatory fashion, so that +their position {X} = (x,y,z) as a function of time is given in vector +notation as + +X(t) = X0 + A sin(omega*delta) :pre + +where {X0} = (x0,y0,z0) is their position at the time the fix is +specified, {A} is the specified amplitude vector with components +(Ax,Ay,Az), {omega} is 2 PI / {period}, and {delta} is the time +elapsed since the fix was specified. This style also sets the +velocity of each particle to the time derivative of this expression. +If any of the amplitude components is specified as NULL, then the +position and velocity of that component is time integrated the same as +the "fix meso"_fix_meso.html command would perform, using the +corresponding force component on the particle. + +Note that the {wiggle} style is identical to using the {variable} +style with "equal-style variables"_variable.html that use the +swiggle() and cwiggle() functions. E.g. + +variable A equal 10.0 +variable T equal 5.0 +variable omega equal 2.0*PI/$T +variable x equal swiggle(0.0,$A,$T) +variable v equal v_omega*($A-cwiggle(0.0,$A,$T)) +fix 1 boundary move variable v_x NULL NULL v_v NULL NULL :pre + +The {rotate} style rotates particles around a rotation axis {R} = +(Rx,Ry,Rz) that goes thru a point {P} = (Px,Py,Pz). The {period} of +the rotation is also specified. The direction of rotation for the +particles around the rotation axis is consistent with the right-hand +rule: if your right-hand thumb points along {R}, then your fingers wrap +around the axis in the direction of rotation. + +This style also sets the velocity of each particle to (omega cross +Rperp) where omega is its angular velocity around the rotation axis and +Rperp is a perpendicular vector from the rotation axis to the particle. + +The {variable} style allows the position and velocity components of +each particle to be set by formulas specified via the +"variable"_variable.html command. Each of the 6 variables is +specified as an argument to the fix as v_name, where name is the +variable name that is defined elsewhere in the input script. + +Each variable must be of either the {equal} or {atom} style. +{Equal}-style variables compute a single numeric quantity, that can be +a function of the timestep as well as of other simulation values. +{Atom}-style variables compute a numeric quantity for each particle, that +can be a function per-atom quantities, such as the particle's position, as +well as of the timestep and other simulation values. Note that this +fix stores the original coordinates of each particle (see note below) so +that per-atom quantity can be used in an atom-style variable formula. +See the "variable"_variable.html command for details. + +The first 3 variables (v_dx,v_dy,v_dz) specified for the {variable} +style are used to calculate a displacement from the particle's original +position at the time the fix was specified. The second 3 variables +(v_vx,v_vy,v_vz) specified are used to compute a velocity for each +particle. + +Any of the 6 variables can be specified as NULL. If both the +displacement and velocity variables for a particular x,y,z component +are specified as NULL, then the position and velocity of that +component is time integrated the same as the "fix meso"_fix_meso.html +command would perform, using the corresponding force component on the +particle. If only the velocity variable for a component is specified as +NULL, then the displacement variable will be used to set the position +of the particle, and its velocity component will not be changed. If only +the displacement variable for a component is specified as NULL, then +the velocity variable will be used to set the velocity of the particle, +and the position of the particle will be time integrated using that +velocity. + +The {units} keyword determines the meaning of the distance units used +to define the {linear} velocity and {wiggle} amplitude and {rotate} +origin. This setting is ignored for the {variable} style. A {box} +value selects standard units as defined by the "units"_units.html +command, e.g. velocity in Angstroms/fmsec and amplitude and position +in Angstroms for units = real. A {lattice} value means the velocity +units are in lattice spacings per time and the amplitude and position +are in lattice spacings. The "lattice"_lattice.html command must have +been previously used to define the lattice spacing. Each of these 3 +quantities may be dependent on the x,y,z dimension, since the lattice +spacings can be different in x,y,z. + +:line + +[Restart, fix_modify, output, run start/stop, minimize info:] + +This fix writes the original coordinates of moving particles to "binary +restart files"_restart.html, as well as the initial timestep, so that +the motion can be continuous in a restarted simulation. See the +"read_restart"_read_restart.html command for info on how to re-specify +a fix in an input script that reads a restart file, so that the +operation of the fix continues in an uninterrupted fashion. + +NOTE: Because the move positions are a function of the current +timestep and the initial timestep, you cannot reset the timestep to a +different value after reading a restart file, if you expect a fix move +command to work in an uninterrupted fashion. + +None of the "fix_modify"_fix_modify.html options are relevant to this +fix. + +This fix produces a per-atom array which can be accessed by various +"output commands"_Howto_output.html. The number of columns for each +atom is 3, and the columns store the original unwrapped x,y,z coords +of each particle. The per-atom values can be accessed on any timestep. + +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. + +This fix is not invoked during "energy minimization"_minimize.html. + +[Restrictions:] + +This fix is part of the USER-SDPD package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +This fix requires that atoms store density and internal energy as +defined by the "atom_style meso"_atom_style.html command. + +All particles in the group must be mesoscopic SPH/SDPD particles. + +[Related commands:] + +"fix move"_fix_move.html, "fix meso"_fix_meso.html, +"displace_atoms"_displace_atoms.html + +[Default:] + +The option default is units = lattice. diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt new file mode 100644 index 0000000000..79b014e671 --- /dev/null +++ b/doc/src/fix_rigid_meso.txt @@ -0,0 +1,349 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix rigid/meso command :h3 + +[Syntax:] + +fix ID group-ID rigid/meso bodystyle args keyword values ... :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +rigid/meso = style name of this fix command :l +bodystyle = {single} or {molecule} or {group} :l + {single} args = none + {molecule} args = none + {custom} args = {i_propname} or {v_varname} + i_propname = an integer property defined via fix property/atom + v_varname = an atom-style or atomfile-style variable + {group} args = N groupID1 groupID2 ... + N = # of groups + groupID1, groupID2, ... = list of N group IDs :pre + +zero or more keyword/value pairs may be appended :l +keyword = {reinit} or {force} or {torque} or {infile} :l + {reinit} = {yes} or {no} + {force} values = M xflag yflag zflag + M = which rigid body from 1-Nbody (see asterisk form below) + xflag,yflag,zflag = off/on if component of center-of-mass force is active + {torque} values = M xflag yflag zflag + M = which rigid body from 1-Nbody (see asterisk form below) + xflag,yflag,zflag = off/on if component of center-of-mass torque is active + {infile} filename + filename = file with per-body values of mass, center-of-mass, moments of inertia :pre +:ule + +[Examples:] + +fix 1 ellipsoid rigid/meso single +fix 1 rods rigid/meso molecule +fix 1 spheres rigid/meso single force 1 off off on +fix 1 particles rigid/meso molecule force 1*5 off off off force 6*10 off off on +fix 2 spheres rigid/meso group 3 sphere1 sphere2 sphere3 torque * off off off :pre + +[Description:] + +Treat one or more sets of mesoscopic SPH/SDPD particles as independent +rigid bodies. This means that each timestep the total force and torque +on each rigid body is computed as the sum of the forces and torques on +its constituent particles. The coordinates and velocities of the +particles in each body are then updated so that the body moves and +rotates as a single entity using the methods described in the paper by +"(Miller)"_#Miller. Density and internal energy of the particles will +also be updated. This is implemented by creating internal data structures +for each rigid body and performing time integration on these data +structures. Positions and velocities of the constituent particles are +regenerated from the rigid body data structures in every time step. This +restricts which operations and fixes can be applied to rigid bodies. See +below for a detailed discussion. + +The operation of this fix is exactly like that described by the +"fix rigid/nve"_fix_rigid.html command, except that particles' density, +internal energy and extrapolated velocity are also updated. + +NOTE: You should not update the particles in rigid bodies via other +time-integration fixes (e.g. "fix meso"_fix_meso.html, +"fix meso/stationary"_fix_meso_stationary.html), or you will have conflicting +updates to positions and velocities resulting in unphysical behavior in most +cases. When performing a hybrid simulation with some atoms in rigid bodies, +and some not, a separate time integration fix like "fix meso"_fix_meso.html +should be used for the non-rigid particles. + +NOTE: These fixes are overkill if you simply want to hold a collection +of particles stationary or have them move with a constant velocity. To +hold particles stationary use "fix +meso/stationary"_fix_meso_stationary.html instead. If you would like to +move particles with a constant velocity use "fix +meso/move"_fix_meso_move.html. + +IMPORTANT NOTE: The aggregate properties of each rigid body are +calculated at the start of a simulation run and are maintained in +internal data structures. The properties include the position and +velocity of the center-of-mass of the body, its moments of inertia, and +its angular momentum. This is done using the properties of the +constituent particles of the body at that point in time (or see the {infile} +keyword option). Thereafter, changing these properties of individual +particles in the body will have no effect on a rigid body's dynamics, unless +they effect any computation of per-particle forces or torques. If the +keyword {reinit} is set to {yes} (the default), the rigid body data +structures will be recreated at the beginning of each {run} command; +if the keyword {reinit} is set to {no}, the rigid body data structures +will be built only at the very first {run} command and maintained for +as long as the rigid fix is defined. For example, you might think you +could displace the particles in a body or add a large velocity to each particle +in a body to make it move in a desired direction before a 2nd run is +performed, using the "set"_set.html or +"displace_atoms"_displace_atoms.html or "velocity"_velocity.html +commands. But these commands will not affect the internal attributes +of the body unless {reinit} is set to {yes}. With {reinit} set to {no} +(or using the {infile} option, which implies {reinit} {no}) the position +and velocity of individual particles in the body will be reset when time +integration starts again. + +:line + +Each rigid body must have two or more particles. A particle can belong +to at most one rigid body. Which particles are in which bodies can be +defined via several options. + +For bodystyle {single} the entire fix group of particles is treated as +one rigid body. + +For bodystyle {molecule}, particles are grouped into rigid bodies by their +respective molecule IDs: each set of particles in the fix group with the +same molecule ID is treated as a different rigid body. Note that particles +with a molecule ID = 0 will be treated as a single rigid body. For a +system with solvent (typically this is particles with molecule ID = 0) +surrounding rigid bodies, this may not be what you want. Thus you +should be careful to use a fix group that only includes particles you +want to be part of rigid bodies. + +Bodystyle {custom} is similar to bodystyle {molecule} except that it +is more flexible in using other per-atom properties to define the sets +of particles that form rigid bodies. An integer vector defined by the +"fix property/atom"_fix_property_atom.html command can be used. Or an +"atom-style or atomfile-style variable"_variable.html can be used; the +floating-point value produced by the variable is rounded to an +integer. As with bondstyle {molecule}, each set of particles in the fix +groups with the same integer value is treated as a different rigid +body. Since fix property/atom vectors and atom-style variables +produce values for all particles, you should be careful to use a fix group +that only includes particles you want to be part of rigid bodies. + +For bodystyle {group}, each of the listed groups is treated as a +separate rigid body. Only particles that are also in the fix group are +included in each rigid body. + +NOTE: To compute the initial center-of-mass position and other +properties of each rigid body, the image flags for each particle in the +body are used to "unwrap" the particle coordinates. Thus you must +insure that these image flags are consistent so that the unwrapping +creates a valid rigid body (one where the particles are close together) +, particularly if the particles in a single rigid body straddle a +periodic boundary. This means the input data file or restart file must +define the image flags for each particle consistently or that you have +used the "set"_set.html command to specify them correctly. If a +dimension is non-periodic then the image flag of each particle must be +0 in that dimension, else an error is generated. + +By default, each rigid body is acted on by other particles which induce +an external force and torque on its center of mass, causing it to +translate and rotate. Components of the external center-of-mass force +and torque can be turned off by the {force} and {torque} keywords. +This may be useful if you wish a body to rotate but not translate, or +vice versa, or if you wish it to rotate or translate continuously +unaffected by interactions with other particles. Note that if you +expect a rigid body not to move or rotate by using these keywords, you +must insure its initial center-of-mass translational or angular +velocity is 0.0. Otherwise the initial translational or angular +momentum the body has will persist. + +An xflag, yflag, or zflag set to {off} means turn off the component of +force or torque in that dimension. A setting of {on} means turn on +the component, which is the default. Which rigid body(s) the settings +apply to is determined by the first argument of the {force} and +{torque} keywords. It can be an integer M from 1 to Nbody, where +Nbody is the number of rigid bodies defined. A wild-card asterisk can +be used in place of, or in conjunction with, the M argument to set the +flags for multiple rigid bodies. This takes the form "*" or "*n" or +"n*" or "m*n". If N = the number of rigid bodies, then an asterisk +with no numeric values means all bodies from 1 to N. A leading +asterisk means all bodies from 1 to n (inclusive). A trailing +asterisk means all bodies from n to N (inclusive). A middle asterisk +means all bodies from m to n (inclusive). Note that you can use the +{force} or {torque} keywords as many times as you like. If a +particular rigid body has its component flags set multiple times, the +settings from the final keyword are used. + +For computational efficiency, you should typically define one fix +rigid/meso command which includes all the desired rigid bodies. LAMMPS +will allow multiple rigid/meso fixes to be defined, but it is more +expensive. + +:line + +The keyword/value option pairs are used in the following ways. + +The {reinit} keyword determines, whether the rigid body properties +are re-initialized between run commands. With the option {yes} (the +default) this is done, with the option {no} this is not done. Turning +off the re-initialization can be helpful to protect rigid bodies against +unphysical manipulations between runs or when properties cannot be +easily re-computed (e.g. when read from a file). When using the {infile} +keyword, the {reinit} option is automatically set to {no}. + +:line + +The {infile} keyword allows a file of rigid body attributes to be read +in from a file, rather then having LAMMPS compute them. There are 5 +such attributes: the total mass of the rigid body, its center-of-mass +position, its 6 moments of inertia, its center-of-mass velocity, and +the 3 image flags of the center-of-mass position. For rigid bodies +consisting of point particles or non-overlapping finite-size +particles, LAMMPS can compute these values accurately. However, for +rigid bodies consisting of finite-size particles which overlap each +other, LAMMPS will ignore the overlaps when computing these 4 +attributes. The amount of error this induces depends on the amount of +overlap. To avoid this issue, the values can be pre-computed +(e.g. using Monte Carlo integration). + +The format of the file is as follows. Note that the file does not +have to list attributes for every rigid body integrated by fix rigid. +Only bodies which the file specifies will have their computed +attributes overridden. The file can contain initial blank lines or +comment lines starting with "#" which are ignored. The first +non-blank, non-comment line should list N = the number of lines to +follow. The N successive lines contain the following information: + +ID1 masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm +ID2 masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm +... +IDN masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm :pre + +The rigid body IDs are all positive integers. For the {single} +bodystyle, only an ID of 1 can be used. For the {group} bodystyle, +IDs from 1 to Ng can be used where Ng is the number of specified +groups. For the {molecule} bodystyle, use the molecule ID for the +atoms in a specific rigid body as the rigid body ID. + +The masstotal and center-of-mass coordinates (xcm,ycm,zcm) are +self-explanatory. The center-of-mass should be consistent with what +is calculated for the position of the rigid body with all its atoms +unwrapped by their respective image flags. If this produces a +center-of-mass that is outside the simulation box, LAMMPS wraps it +back into the box. + +The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the +values consistent with the current orientation of the rigid body +around its center of mass. The values are with respect to the +simulation box XYZ axes, not with respect to the principal axes of the +rigid body itself. LAMMPS performs the latter calculation internally. + +The (vxcm,vycm,vzcm) values are the velocity of the center of mass. +The (lx,ly,lz) values are the angular momentum of the body. The +(vxcm,vycm,vzcm) and (lx,ly,lz) values can simply be set to 0 if you +wish the body to have no initial motion. + +The (ixcm,iycm,izcm) values are the image flags of the center of mass +of the body. For periodic dimensions, they specify which image of the +simulation box the body is considered to be in. An image of 0 means +it is inside the box as defined. A value of 2 means add 2 box lengths +to get the true value. A value of -1 means subtract 1 box length to +get the true value. LAMMPS updates these flags as the rigid bodies +cross periodic boundaries during the simulation. + +NOTE: If you use the {infile} keyword and write restart +files during a simulation, then each time a restart file is written, +the fix also write an auxiliary restart file with the name +rfile.rigid, where "rfile" is the name of the restart file, +e.g. tmp.restart.10000 and tmp.restart.10000.rigid. This auxiliary +file is in the same format described above. Thus it can be used in a +new input script that restarts the run and re-specifies a rigid fix +using an {infile} keyword and the appropriate filename. Note that the +auxiliary file will contain one line for every rigid body, even if the +original file only listed a subset of the rigid bodies. + +:line + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information is written to "binary restart files"_restart.html. +If the {infile} keyword is used, an auxiliary file is written out +with rigid body information each time a restart file is written, as +explained above for the {infile} keyword. + +None of the "fix_modify"_fix_modify.html options are relevant to this +fix. + +This fix computes a global array of values which can be accessed by +various "output commands"_Howto_output.html. + +The number of rows in the array is equal to the number of rigid +bodies. The number of columns is 28. Thus for each rigid body, 28 +values are stored: the xyz coords of the center of mass (COM), the xyz +components of the COM velocity, the xyz components of the force acting +on the COM, the components of the 4-vector quaternion representing the +orientation of the rigid body, the xyz components of the angular momentum +of the body around its COM, the xyz components of the torque acting on the +COM, the 3 principal components of the moment of inertia and the xyz image +flags of the COM. + +The center of mass (COM) for each body is similar to unwrapped +coordinates written to a dump file. It will always be inside (or +slightly outside) the simulation box. The image flags have the same +meaning as image flags for particle positions (see the "dump" command). +This means you can calculate the unwrapped COM by applying the image +flags to the COM, the same as when unwrapped coordinates are written +to a dump file. + +The force and torque values in the array are not affected by the +{force} and {torque} keywords in the fix rigid command; they reflect +values before any changes are made by those keywords. + +The ordering of the rigid bodies (by row in the array) is as follows. +For the {single} keyword there is just one rigid body. For the +{molecule} keyword, the bodies are ordered by ascending molecule ID. +For the {group} keyword, the list of group IDs determines the ordering +of bodies. + +The array values calculated by this fix are "intensive", meaning they +are independent of the number of particles in the simulation. + +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. + +This fix is not invoked during "energy minimization"_minimize.html. + +:line + +[Restrictions:] + +This fix is part of the USER-SDPD package and also depends on the RIGID +package. It is only enabled if LAMMPS was built with both packages. See +the "Build package"_Build_package.html doc page for more info. + +This fix requires that atoms store density and internal energy as +defined by the "atom_style meso"_atom_style.html command. + +All particles in the group must be mesoscopic SPH/SDPD particles. + +[Related commands:] + +"fix meso/move"_fix_meso_move.html, "fix rigid"_fix_rigid.html, +"neigh_modify exclude"_neigh_modify.html + +[Default:] + +The option defaults are force * on on on and torque * on on on, +meaning all rigid bodies are acted on by center-of-mass force and +torque. Also reinit = yes. + +:line + +:link(Miller) +[(Miller)] Miller, Eleftheriou, Pattnaik, Ndirango, and Newns, +J Chem Phys, 116, 8649 (2002). diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 66f6633124..36ccf4269a 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -73,6 +73,7 @@ Fixes :h1 fix_lineforce fix_manifoldforce fix_meso + fix_meso_move fix_meso_stationary fix_momentum fix_move @@ -137,6 +138,7 @@ Fixes :h1 fix_restrain fix_rhok fix_rigid + fix_rigid_meso fix_rx fix_saed_vtk fix_setforce diff --git a/doc/src/lammps.book b/doc/src/lammps.book index f739712f08..cb328c4089 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -293,6 +293,7 @@ fix_lb_viscous.html fix_lineforce.html fix_manifoldforce.html fix_meso.html +fix_meso_move.html fix_meso_stationary.html fix_momentum.html fix_move.html @@ -356,6 +357,7 @@ fix_reaxc_species.html fix_recenter.html fix_restrain.html fix_rigid.html +fix_rigid_meso.html fix_rhok.html fix_rx.html fix_saed_vtk.html @@ -615,6 +617,7 @@ pair_reax.html pair_reaxc.html pair_resquared.html pair_sdk.html +pair_sdpd_taitwater_isothermal.html pair_smd_hertz.html pair_smd_tlsph.html pair_smd_triangulated_surface.html diff --git a/doc/src/pair_sdpd_taitwater_isothermal.txt b/doc/src/pair_sdpd_taitwater_isothermal.txt new file mode 100644 index 0000000000..97b68ceba7 --- /dev/null +++ b/doc/src/pair_sdpd_taitwater_isothermal.txt @@ -0,0 +1,108 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style sdpd/taitwater/isothermal command :h3 + +[Syntax:] + +pair_style sdpd/taitwater/isothermal temperature viscosity seed +:pre + +temperature = temperature of the fluid (temperature units) +viscosity = dynamic viscosity of the fluid (mass*distance/time units) +seed = random number generator seed (positive integer, optional) :ul + +[Examples:] + +pair_style sdpd/taitwater/isothermal 300. 1. 28681 +pair_coeff * * 1000.0 1430.0 2.4 :pre + +[Description:] + +The sdpd/taitwater/isothermal style computes forces between mesoscopic +particles according to the Smoothed Dissipative Particle Dynamics model +described in this paper by "(Español and Revenga)"_#Español_Revenga under +the following assumptions: + +:olb +The temperature is constant and uniform. :l +The shear viscosity is constant and uniform. :l +The volume viscosity is negligible before the shear viscosity. :l +The Boltzmann constant is negligible before the heat capacity of a +single mesoscopic particle of fluid. :ole,l + +The third assumption is true for water in nearly incompressible flows. +The fourth holds true for water for any reasonable size one can +imagine for a mesoscopic particle. + +The pressure forces between particles will be computed according to +Tait's equation of state: + +:c,image(Eqs/pair_sph_tait.jpg) + +where gamma = 7 and B = c_0^2 rho_0 / gamma, with rho_0 being the +reference density and c_0 the reference speed of sound. + +The laminar viscosity and the random forces will be computed according +to formulas described in "(Español and Revenga)"_#Español_Revenga. + +IMPORTANT NOTE: Similar to "brownian"_pair_brownian.html and +"dpd"_pair_dpd.html styles, the "newton"_newton.html setting for +pairwise interactions needs to be on when running LAMMPS in parallel +if you want to ensure linear momentum conservation. Otherwise random +forces generated for pairs straddling processor boundary will not be +equal and opposite. + +NOTE: The actual random seed used will be a mix of what you specify +and other parameters like the MPI ranks. This is to ensure that +different MPI tasks have distinct seeds. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above. + +rho0 reference density (mass/volume units) +c0 reference soundspeed (distance/time units) +h kernel function cutoff (distance units) :ul + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This style does not support mixing. Thus, coefficients for all +I,J pairs must be specified explicitly. + +This style does not support the "pair_modify"_pair_modify.html +shift, table, and tail options. + +This style does not write information to "binary restart +files"_restart.html. Thus, you need to re-specify the pair_style and +pair_coeff commands in an input script that reads a restart file. + +This style can only be used via the {pair} keyword of the "run_style +respa"_run_style.html command. It does not support the {inner}, +{middle}, {outer} keywords. + +[Restrictions:] + +This pair style is part of the USER-SDPD package. It is only enabled +if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair coeff"_pair_coeff.html, "pair sph/rhosum"_pair_sph_rhosum.html + +[Default:] + +The default seed is 0 (before mixing). + +:line + +:link(Español_Revenga) +[(Español and Revenga)] Español, Revenga, Physical Review E, 67, 026705 (2003). diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 14e3f79215..f6098fa005 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -268,6 +268,7 @@ pair"_Commands_pair.html doc page are followed by one or more of "reax/c"_pair_reaxc.html - ReaxFF potential in C "rebo"_pair_airebo.html - 2nd generation REBO potential of Brenner "resquared"_pair_resquared.html - Everaers RE-Squared ellipsoidal potential +"sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html - smoothed dissipative particle dynamics for water at isothermal conditions "smd/hertz"_pair_smd_hertz.html - "smd/tlsph"_pair_smd_tlsph.html - "smd/tri_surface"_pair_smd_triangulated_surface.html - diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index d535798482..ca79051053 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -86,6 +86,7 @@ Pair Styles :h1 pair_reaxc pair_resquared pair_sdk + pair_sdpd_taitwater_isothermal pair_smd_hertz pair_smd_tlsph pair_smd_triangulated_surface diff --git a/examples/USER/sdpd/2d-diffusion-in-shear-flow/in.lammps b/examples/USER/sdpd/2d-diffusion-in-shear-flow/in.lammps new file mode 100644 index 0000000000..138f7b5338 --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion-in-shear-flow/in.lammps @@ -0,0 +1,61 @@ +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable Lf equal $R*3 +variable Lb equal $R*4 +variable wall_velocity equal 0.01 # micrometers/microsecond +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable mass equal $a*$a*$a*${rho_0} +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h + +region box block -${Lb} ${Lb} -${Lb} ${Lb} 0 ${a} units box +create_box 4 box +lattice sq $a + +create_atoms 1 box + +region sphere sphere 0 0 0 $R units box +set region sphere type 2 + +region upper_wall block INF INF +${Lf} INF INF INF units box +set region upper_wall type 3 + +region lower_wall block INF INF INF -${Lf} INF INF units box +set region lower_wall type 4 + +group fluid type 1 +group sphere type 2 +group upper_wall type 3 +group lower_wall type 4 + +mass * ${mass} +set group all meso/rho ${rho_0} + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_coeff * * ${rho_0} ${c_0} ${h} + +fix 1 fluid meso +fix 2 sphere rigid/meso single +fix 3 upper_wall meso/move linear +${wall_velocity} 0 0 units box +fix 4 lower_wall meso/move linear -${wall_velocity} 0 0 units box + +fix 2d all enforce2d + +neighbor ${skin} bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 diff --git a/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.1 b/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.1 new file mode 100644 index 0000000000..cd01601292 --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.1 @@ -0,0 +1,247 @@ +LAMMPS (24 Oct 2018) +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable a equal 0.5/5 +variable Lf equal $R*3 +variable Lf equal 0.5*3 +variable Lb equal $R*4 +variable Lb equal 0.5*4 +variable wall_velocity equal 0.01 # micrometers/microsecond +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable h equal 0.1*4.5 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h +variable skin equal 0.2*0.45 + +region box block -${Lb} ${Lb} -${Lb} ${Lb} 0 ${a} units box +region box block -2 ${Lb} -${Lb} ${Lb} 0 ${a} units box +region box block -2 2 -${Lb} ${Lb} 0 ${a} units box +region box block -2 2 -2 ${Lb} 0 ${a} units box +region box block -2 2 -2 2 0 ${a} units box +region box block -2 2 -2 2 0 0.1 units box +create_box 4 box +Created orthogonal box = (-2 -2 0) to (2 2 0.1) + 1 by 1 by 1 MPI processor grid +lattice sq $a +lattice sq 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 1600 atoms + Time spent = 0.00169706 secs + +region sphere sphere 0 0 0 $R units box +region sphere sphere 0 0 0 0.5 units box +set region sphere type 2 + 81 settings made for type + +region upper_wall block INF INF +${Lf} INF INF INF units box +region upper_wall block INF INF +1.5 INF INF INF units box +set region upper_wall type 3 + 200 settings made for type + +region lower_wall block INF INF INF -${Lf} INF INF units box +region lower_wall block INF INF INF -1.5 INF INF units box +set region lower_wall type 4 + 240 settings made for type + +group fluid type 1 +1079 atoms in group fluid +group sphere type 2 +81 atoms in group sphere +group upper_wall type 3 +200 atoms in group upper_wall +group lower_wall type 4 +240 atoms in group lower_wall + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 1600 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 100 ${h} +pair_coeff * * 1 100 0.45 + +fix 1 fluid meso +fix 2 sphere rigid/meso single +1 rigid bodies with 81 atoms +fix 3 upper_wall meso/move linear +${wall_velocity} 0 0 units box +fix 3 upper_wall meso/move linear +0.01 0 0 units box +fix 4 lower_wall meso/move linear -${wall_velocity} 0 0 units box +fix 4 lower_wall meso/move linear -0.01 0 0 units box + +fix 2d all enforce2d + +neighbor ${skin} bin +neighbor 0.09 bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} +timestep 0.001 + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.54 + ghost atom cutoff = 0.54 + binsize = 0.27, bins = 15 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.937 | 6.937 | 6.937 Mbytes +Step Time Nbuild Ndanger + 0 0 0 0 + 100 0.1 0 0 + 200 0.2 0 0 + 300 0.3 0 0 + 400 0.4 0 0 + 500 0.5 1 0 + 600 0.6 1 0 + 700 0.7 2 0 + 800 0.8 2 0 + 900 0.9 2 0 + 1000 1 3 0 + 1100 1.1 3 0 + 1200 1.2 3 0 + 1300 1.3 4 0 + 1400 1.4 4 0 + 1500 1.5 4 0 + 1600 1.6 5 0 + 1700 1.7 5 0 + 1800 1.8 5 0 + 1900 1.9 6 0 + 2000 2 6 0 + 2100 2.1 6 0 + 2200 2.2 7 0 + 2300 2.3 7 0 + 2400 2.4 7 0 + 2500 2.5 8 0 + 2600 2.6 8 0 + 2700 2.7 8 0 + 2800 2.8 9 0 + 2900 2.9 9 0 + 3000 3 9 0 + 3100 3.1 10 0 + 3200 3.2 10 0 + 3300 3.3 10 0 + 3400 3.4 11 0 + 3500 3.5 11 0 + 3600 3.6 11 0 + 3700 3.7 12 0 + 3800 3.8 12 0 + 3900 3.9 12 0 + 4000 4 13 0 + 4100 4.1 13 0 + 4200 4.2 14 0 + 4300 4.3 14 0 + 4400 4.4 14 0 + 4500 4.5 15 0 + 4600 4.6 15 0 + 4700 4.7 15 0 + 4800 4.8 16 0 + 4900 4.9 16 0 + 5000 5 16 0 + 5100 5.1 17 0 + 5200 5.2 17 0 + 5300 5.3 17 0 + 5400 5.4 17 0 + 5500 5.5 18 0 + 5600 5.6 18 0 + 5700 5.7 19 0 + 5800 5.8 19 0 + 5900 5.9 19 0 + 6000 6 20 0 + 6100 6.1 20 0 + 6200 6.2 21 0 + 6300 6.3 21 0 + 6400 6.4 21 0 + 6500 6.5 22 0 + 6600 6.6 22 0 + 6700 6.7 22 0 + 6800 6.8 23 0 + 6900 6.9 23 0 + 7000 7 23 0 + 7100 7.1 24 0 + 7200 7.2 24 0 + 7300 7.3 25 0 + 7400 7.4 25 0 + 7500 7.5 25 0 + 7600 7.6 26 0 + 7700 7.7 26 0 + 7800 7.8 26 0 + 7900 7.9 27 0 + 8000 8 27 0 + 8100 8.1 27 0 + 8200 8.2 28 0 + 8300 8.3 28 0 + 8400 8.4 28 0 + 8500 8.5 29 0 + 8600 8.6 29 0 + 8700 8.7 30 0 + 8800 8.8 30 0 + 8900 8.9 30 0 + 9000 9 31 0 + 9100 9.1 31 0 + 9200 9.2 31 0 + 9300 9.3 32 0 + 9400 9.4 32 0 + 9500 9.5 32 0 + 9600 9.6 33 0 + 9700 9.7 33 0 + 9800 9.8 33 0 + 9900 9.9 34 0 + 10000 10 34 0 +Loop time of 144.208 on 1 procs for 10000 steps with 1600 atoms + +Performance: 5991348.580 ns/day, 0.000 hours/ns, 69.344 timesteps/s +99.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 143.08 | 143.08 | 143.08 | 0.0 | 99.22 +Neigh | 0.033195 | 0.033195 | 0.033195 | 0.0 | 0.02 +Comm | 0.24139 | 0.24139 | 0.24139 | 0.0 | 0.17 +Output | 0.11687 | 0.11687 | 0.11687 | 0.0 | 0.08 +Modify | 0.61566 | 0.61566 | 0.61566 | 0.0 | 0.43 +Other | | 0.117 | | | 0.08 + +Nlocal: 1600 ave 1600 max 1600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 993 ave 993 max 993 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 73236 ave 73236 max 73236 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 73236 +Ave neighs/atom = 45.7725 +Neighbor list builds = 34 +Dangerous builds = 0 +Total wall time: 0:02:24 diff --git a/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.4 b/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.4 new file mode 100644 index 0000000000..77823e00fc --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion-in-shear-flow/log.24Oct18.2d-diffusion-in-shear-flow.g++.4 @@ -0,0 +1,247 @@ +LAMMPS (24 Oct 2018) +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable a equal 0.5/5 +variable Lf equal $R*3 +variable Lf equal 0.5*3 +variable Lb equal $R*4 +variable Lb equal 0.5*4 +variable wall_velocity equal 0.01 # micrometers/microsecond +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable h equal 0.1*4.5 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h +variable skin equal 0.2*0.45 + +region box block -${Lb} ${Lb} -${Lb} ${Lb} 0 ${a} units box +region box block -2 ${Lb} -${Lb} ${Lb} 0 ${a} units box +region box block -2 2 -${Lb} ${Lb} 0 ${a} units box +region box block -2 2 -2 ${Lb} 0 ${a} units box +region box block -2 2 -2 2 0 ${a} units box +region box block -2 2 -2 2 0 0.1 units box +create_box 4 box +Created orthogonal box = (-2 -2 0) to (2 2 0.1) + 2 by 2 by 1 MPI processor grid +lattice sq $a +lattice sq 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 1600 atoms + Time spent = 0.000589566 secs + +region sphere sphere 0 0 0 $R units box +region sphere sphere 0 0 0 0.5 units box +set region sphere type 2 + 81 settings made for type + +region upper_wall block INF INF +${Lf} INF INF INF units box +region upper_wall block INF INF +1.5 INF INF INF units box +set region upper_wall type 3 + 200 settings made for type + +region lower_wall block INF INF INF -${Lf} INF INF units box +region lower_wall block INF INF INF -1.5 INF INF units box +set region lower_wall type 4 + 240 settings made for type + +group fluid type 1 +1079 atoms in group fluid +group sphere type 2 +81 atoms in group sphere +group upper_wall type 3 +200 atoms in group upper_wall +group lower_wall type 4 +240 atoms in group lower_wall + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 1600 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 100 ${h} +pair_coeff * * 1 100 0.45 + +fix 1 fluid meso +fix 2 sphere rigid/meso single +1 rigid bodies with 81 atoms +fix 3 upper_wall meso/move linear +${wall_velocity} 0 0 units box +fix 3 upper_wall meso/move linear +0.01 0 0 units box +fix 4 lower_wall meso/move linear -${wall_velocity} 0 0 units box +fix 4 lower_wall meso/move linear -0.01 0 0 units box + +fix 2d all enforce2d + +neighbor ${skin} bin +neighbor 0.09 bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} +timestep 0.001 + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.54 + ghost atom cutoff = 0.54 + binsize = 0.27, bins = 15 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.854 | 6.854 | 6.854 Mbytes +Step Time Nbuild Ndanger + 0 0 0 0 + 100 0.1 0 0 + 200 0.2 0 0 + 300 0.3 0 0 + 400 0.4 1 0 + 500 0.5 1 0 + 600 0.6 1 0 + 700 0.7 2 0 + 800 0.8 2 0 + 900 0.9 2 0 + 1000 1 3 0 + 1100 1.1 3 0 + 1200 1.2 4 0 + 1300 1.3 4 0 + 1400 1.4 4 0 + 1500 1.5 4 0 + 1600 1.6 5 0 + 1700 1.7 5 0 + 1800 1.8 5 0 + 1900 1.9 6 0 + 2000 2 6 0 + 2100 2.1 6 0 + 2200 2.2 6 0 + 2300 2.3 7 0 + 2400 2.4 7 0 + 2500 2.5 7 0 + 2600 2.6 8 0 + 2700 2.7 8 0 + 2800 2.8 8 0 + 2900 2.9 9 0 + 3000 3 9 0 + 3100 3.1 9 0 + 3200 3.2 10 0 + 3300 3.3 10 0 + 3400 3.4 10 0 + 3500 3.5 11 0 + 3600 3.6 11 0 + 3700 3.7 11 0 + 3800 3.8 12 0 + 3900 3.9 12 0 + 4000 4 12 0 + 4100 4.1 13 0 + 4200 4.2 13 0 + 4300 4.3 13 0 + 4400 4.4 14 0 + 4500 4.5 14 0 + 4600 4.6 15 0 + 4700 4.7 15 0 + 4800 4.8 15 0 + 4900 4.9 16 0 + 5000 5 16 0 + 5100 5.1 17 0 + 5200 5.2 17 0 + 5300 5.3 17 0 + 5400 5.4 17 0 + 5500 5.5 18 0 + 5600 5.6 18 0 + 5700 5.7 18 0 + 5800 5.8 19 0 + 5900 5.9 19 0 + 6000 6 20 0 + 6100 6.1 20 0 + 6200 6.2 20 0 + 6300 6.3 21 0 + 6400 6.4 21 0 + 6500 6.5 21 0 + 6600 6.6 22 0 + 6700 6.7 22 0 + 6800 6.8 22 0 + 6900 6.9 23 0 + 7000 7 23 0 + 7100 7.1 23 0 + 7200 7.2 24 0 + 7300 7.3 24 0 + 7400 7.4 25 0 + 7500 7.5 25 0 + 7600 7.6 25 0 + 7700 7.7 25 0 + 7800 7.8 26 0 + 7900 7.9 26 0 + 8000 8 26 0 + 8100 8.1 27 0 + 8200 8.2 27 0 + 8300 8.3 27 0 + 8400 8.4 28 0 + 8500 8.5 28 0 + 8600 8.6 28 0 + 8700 8.7 29 0 + 8800 8.8 29 0 + 8900 8.9 29 0 + 9000 9 30 0 + 9100 9.1 30 0 + 9200 9.2 31 0 + 9300 9.3 31 0 + 9400 9.4 31 0 + 9500 9.5 32 0 + 9600 9.6 32 0 + 9700 9.7 32 0 + 9800 9.8 32 0 + 9900 9.9 33 0 + 10000 10 33 0 +Loop time of 63.2372 on 4 procs for 10000 steps with 1600 atoms + +Performance: 13662841.706 ns/day, 0.000 hours/ns, 158.135 timesteps/s +94.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 51.576 | 53.662 | 55.484 | 23.9 | 84.86 +Neigh | 0.011519 | 0.012395 | 0.013405 | 0.7 | 0.02 +Comm | 6.8389 | 8.5423 | 10.517 | 56.1 | 13.51 +Output | 0.12342 | 0.12513 | 0.1302 | 0.8 | 0.20 +Modify | 0.58708 | 0.69128 | 0.78806 | 11.3 | 1.09 +Other | | 0.2038 | | | 0.32 + +Nlocal: 400 ave 411 max 388 min +Histogram: 1 1 0 0 0 0 0 0 0 2 +Nghost: 552.25 ave 567 max 539 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 18298.8 ave 18781 max 17829 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 73195 +Ave neighs/atom = 45.7469 +Neighbor list builds = 33 +Dangerous builds = 0 +Total wall time: 0:01:03 diff --git a/examples/USER/sdpd/2d-diffusion/in.lammps b/examples/USER/sdpd/2d-diffusion/in.lammps new file mode 100644 index 0000000000..6ef36a0cf6 --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion/in.lammps @@ -0,0 +1,49 @@ +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable L equal $R*3 +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable mass equal $a*$a*$a*${rho_0} +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h + +region box block -$L $L -$L $L 0 $a units box +create_box 2 box +lattice sq $a + +create_atoms 1 box + +region sphere sphere 0 0 0 $R units box +set region sphere type 2 + +group fluid type 1 +group sphere type 2 + +mass * ${mass} +set group all meso/rho ${rho_0} + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_coeff * * ${rho_0} ${c_0} ${h} + +fix 1 fluid meso +fix 2 sphere rigid/meso single + +fix 2d all enforce2d + +neighbor ${skin} bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 diff --git a/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.1 b/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.1 new file mode 100644 index 0000000000..d44c0fd6f4 --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.1 @@ -0,0 +1,226 @@ +LAMMPS (24 Oct 2018) +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable a equal 0.5/5 +variable L equal $R*3 +variable L equal 0.5*3 +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable h equal 0.1*4.5 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h +variable skin equal 0.2*0.45 + +region box block -$L $L -$L $L 0 $a units box +region box block -1.5 $L -$L $L 0 $a units box +region box block -1.5 1.5 -$L $L 0 $a units box +region box block -1.5 1.5 -1.5 $L 0 $a units box +region box block -1.5 1.5 -1.5 1.5 0 $a units box +region box block -1.5 1.5 -1.5 1.5 0 0.1 units box +create_box 2 box +Created orthogonal box = (-1.5 -1.5 0) to (1.5 1.5 0.1) + 1 by 1 by 1 MPI processor grid +lattice sq $a +lattice sq 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 900 atoms + Time spent = 0.0015769 secs + +region sphere sphere 0 0 0 $R units box +region sphere sphere 0 0 0 0.5 units box +set region sphere type 2 + 81 settings made for type + +group fluid type 1 +819 atoms in group fluid +group sphere type 2 +81 atoms in group sphere + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 900 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 100 ${h} +pair_coeff * * 1 100 0.45 + +fix 1 fluid meso +fix 2 sphere rigid/meso single +1 rigid bodies with 81 atoms + +fix 2d all enforce2d + +neighbor ${skin} bin +neighbor 0.09 bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} +timestep 0.001 + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.54 + ghost atom cutoff = 0.54 + binsize = 0.27, bins = 12 12 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.137 | 6.137 | 6.137 Mbytes +Step Time Nbuild Ndanger + 0 0 0 0 + 100 0.1 0 0 + 200 0.2 0 0 + 300 0.3 0 0 + 400 0.4 1 0 + 500 0.5 1 0 + 600 0.6 1 0 + 700 0.7 2 0 + 800 0.8 2 0 + 900 0.9 2 0 + 1000 1 3 0 + 1100 1.1 3 0 + 1200 1.2 3 0 + 1300 1.3 4 0 + 1400 1.4 4 0 + 1500 1.5 4 0 + 1600 1.6 5 0 + 1700 1.7 5 0 + 1800 1.8 6 0 + 1900 1.9 6 0 + 2000 2 6 0 + 2100 2.1 7 0 + 2200 2.2 7 0 + 2300 2.3 7 0 + 2400 2.4 7 0 + 2500 2.5 8 0 + 2600 2.6 8 0 + 2700 2.7 8 0 + 2800 2.8 9 0 + 2900 2.9 9 0 + 3000 3 10 0 + 3100 3.1 10 0 + 3200 3.2 10 0 + 3300 3.3 11 0 + 3400 3.4 11 0 + 3500 3.5 11 0 + 3600 3.6 12 0 + 3700 3.7 12 0 + 3800 3.8 12 0 + 3900 3.9 13 0 + 4000 4 13 0 + 4100 4.1 13 0 + 4200 4.2 14 0 + 4300 4.3 14 0 + 4400 4.4 14 0 + 4500 4.5 15 0 + 4600 4.6 15 0 + 4700 4.7 15 0 + 4800 4.8 16 0 + 4900 4.9 16 0 + 5000 5 17 0 + 5100 5.1 17 0 + 5200 5.2 17 0 + 5300 5.3 17 0 + 5400 5.4 18 0 + 5500 5.5 18 0 + 5600 5.6 18 0 + 5700 5.7 19 0 + 5800 5.8 19 0 + 5900 5.9 19 0 + 6000 6 19 0 + 6100 6.1 20 0 + 6200 6.2 20 0 + 6300 6.3 20 0 + 6400 6.4 21 0 + 6500 6.5 21 0 + 6600 6.6 21 0 + 6700 6.7 21 0 + 6800 6.8 22 0 + 6900 6.9 22 0 + 7000 7 22 0 + 7100 7.1 23 0 + 7200 7.2 23 0 + 7300 7.3 23 0 + 7400 7.4 24 0 + 7500 7.5 24 0 + 7600 7.6 24 0 + 7700 7.7 25 0 + 7800 7.8 25 0 + 7900 7.9 26 0 + 8000 8 26 0 + 8100 8.1 26 0 + 8200 8.2 26 0 + 8300 8.3 27 0 + 8400 8.4 27 0 + 8500 8.5 27 0 + 8600 8.6 28 0 + 8700 8.7 28 0 + 8800 8.8 28 0 + 8900 8.9 29 0 + 9000 9 29 0 + 9100 9.1 29 0 + 9200 9.2 30 0 + 9300 9.3 30 0 + 9400 9.4 30 0 + 9500 9.5 30 0 + 9600 9.6 31 0 + 9700 9.7 31 0 + 9800 9.8 32 0 + 9900 9.9 32 0 + 10000 10 32 0 +Loop time of 80.9456 on 1 procs for 10000 steps with 900 atoms + +Performance: 10673829.855 ns/day, 0.000 hours/ns, 123.540 timesteps/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 80.306 | 80.306 | 80.306 | 0.0 | 99.21 +Neigh | 0.017418 | 0.017418 | 0.017418 | 0.0 | 0.02 +Comm | 0.16939 | 0.16939 | 0.16939 | 0.0 | 0.21 +Output | 0.070281 | 0.070281 | 0.070281 | 0.0 | 0.09 +Modify | 0.3154 | 0.3154 | 0.3154 | 0.0 | 0.39 +Other | | 0.067 | | | 0.08 + +Nlocal: 900 ave 900 max 900 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 762 ave 762 max 762 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 40697 ave 40697 max 40697 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 40697 +Ave neighs/atom = 45.2189 +Neighbor list builds = 32 +Dangerous builds = 0 +Total wall time: 0:01:20 diff --git a/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.4 b/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.4 new file mode 100644 index 0000000000..f904b78ab4 --- /dev/null +++ b/examples/USER/sdpd/2d-diffusion/log.24Oct18.2d-diffusion.g++.4 @@ -0,0 +1,226 @@ +LAMMPS (24 Oct 2018) +dimension 2 +units micro +atom_style meso + +variable R equal 0.5 # radius of sphere micrometers +variable a equal $R/5 # lattice spacing micrometers +variable a equal 0.5/5 +variable L equal $R*3 +variable L equal 0.5*3 +variable T equal 300. +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 100. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.5 # kernel function cutoff micrometers +variable h equal 0.1*4.5 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 1e-3 # timestep microseconds +variable skin equal 0.2*$h +variable skin equal 0.2*0.45 + +region box block -$L $L -$L $L 0 $a units box +region box block -1.5 $L -$L $L 0 $a units box +region box block -1.5 1.5 -$L $L 0 $a units box +region box block -1.5 1.5 -1.5 $L 0 $a units box +region box block -1.5 1.5 -1.5 1.5 0 $a units box +region box block -1.5 1.5 -1.5 1.5 0 0.1 units box +create_box 2 box +Created orthogonal box = (-1.5 -1.5 0) to (1.5 1.5 0.1) + 2 by 2 by 1 MPI processor grid +lattice sq $a +lattice sq 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 900 atoms + Time spent = 0.0010246 secs + +region sphere sphere 0 0 0 $R units box +region sphere sphere 0 0 0 0.5 units box +set region sphere type 2 + 81 settings made for type + +group fluid type 1 +819 atoms in group fluid +group sphere type 2 +81 atoms in group sphere + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 900 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 100 ${h} +pair_coeff * * 1 100 0.45 + +fix 1 fluid meso +fix 2 sphere rigid/meso single +1 rigid bodies with 81 atoms + +fix 2d all enforce2d + +neighbor ${skin} bin +neighbor 0.09 bin +neigh_modify delay 0 every 1 check yes +timestep ${dt} +timestep 0.001 + +dump dump_id all atom 100 dump.lammpstrj + +thermo 100 +thermo_style custom step time nbuild ndanger + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.54 + ghost atom cutoff = 0.54 + binsize = 0.27, bins = 12 12 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.087 | 6.087 | 6.087 Mbytes +Step Time Nbuild Ndanger + 0 0 0 0 + 100 0.1 0 0 + 200 0.2 0 0 + 300 0.3 0 0 + 400 0.4 1 0 + 500 0.5 1 0 + 600 0.6 1 0 + 700 0.7 2 0 + 800 0.8 2 0 + 900 0.9 2 0 + 1000 1 3 0 + 1100 1.1 3 0 + 1200 1.2 3 0 + 1300 1.3 4 0 + 1400 1.4 4 0 + 1500 1.5 5 0 + 1600 1.6 5 0 + 1700 1.7 5 0 + 1800 1.8 6 0 + 1900 1.9 6 0 + 2000 2 6 0 + 2100 2.1 7 0 + 2200 2.2 7 0 + 2300 2.3 7 0 + 2400 2.4 8 0 + 2500 2.5 8 0 + 2600 2.6 8 0 + 2700 2.7 9 0 + 2800 2.8 9 0 + 2900 2.9 9 0 + 3000 3 9 0 + 3100 3.1 10 0 + 3200 3.2 10 0 + 3300 3.3 10 0 + 3400 3.4 11 0 + 3500 3.5 11 0 + 3600 3.6 11 0 + 3700 3.7 12 0 + 3800 3.8 12 0 + 3900 3.9 12 0 + 4000 4 13 0 + 4100 4.1 13 0 + 4200 4.2 13 0 + 4300 4.3 14 0 + 4400 4.4 14 0 + 4500 4.5 15 0 + 4600 4.6 15 0 + 4700 4.7 15 0 + 4800 4.8 16 0 + 4900 4.9 16 0 + 5000 5 16 0 + 5100 5.1 16 0 + 5200 5.2 17 0 + 5300 5.3 17 0 + 5400 5.4 18 0 + 5500 5.5 18 0 + 5600 5.6 19 0 + 5700 5.7 19 0 + 5800 5.8 19 0 + 5900 5.9 20 0 + 6000 6 20 0 + 6100 6.1 20 0 + 6200 6.2 21 0 + 6300 6.3 21 0 + 6400 6.4 21 0 + 6500 6.5 22 0 + 6600 6.6 22 0 + 6700 6.7 22 0 + 6800 6.8 23 0 + 6900 6.9 23 0 + 7000 7 23 0 + 7100 7.1 24 0 + 7200 7.2 24 0 + 7300 7.3 24 0 + 7400 7.4 25 0 + 7500 7.5 25 0 + 7600 7.6 25 0 + 7700 7.7 26 0 + 7800 7.8 26 0 + 7900 7.9 26 0 + 8000 8 27 0 + 8100 8.1 27 0 + 8200 8.2 27 0 + 8300 8.3 28 0 + 8400 8.4 28 0 + 8500 8.5 28 0 + 8600 8.6 28 0 + 8700 8.7 29 0 + 8800 8.8 29 0 + 8900 8.9 29 0 + 9000 9 30 0 + 9100 9.1 30 0 + 9200 9.2 31 0 + 9300 9.3 31 0 + 9400 9.4 31 0 + 9500 9.5 31 0 + 9600 9.6 32 0 + 9700 9.7 32 0 + 9800 9.8 32 0 + 9900 9.9 33 0 + 10000 10 33 0 +Loop time of 69.01 on 4 procs for 10000 steps with 900 atoms + +Performance: 12519931.275 ns/day, 0.000 hours/ns, 144.907 timesteps/s +48.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 56.528 | 57.936 | 58.729 | 11.0 | 83.95 +Neigh | 0.013157 | 0.013382 | 0.013551 | 0.1 | 0.02 +Comm | 8.9594 | 9.7555 | 11.113 | 26.7 | 14.14 +Output | 0.14644 | 0.15009 | 0.15809 | 1.2 | 0.22 +Modify | 0.72913 | 0.91574 | 1.0524 | 12.4 | 1.33 +Other | | 0.2389 | | | 0.35 + +Nlocal: 225 ave 229 max 223 min +Histogram: 1 2 0 0 0 0 0 0 0 1 +Nghost: 442 ave 444 max 439 min +Histogram: 1 0 0 0 1 0 0 0 0 2 +Neighs: 10188.8 ave 10437 max 9932 min +Histogram: 1 0 0 1 0 0 0 1 0 1 + +Total # of neighbors = 40755 +Ave neighs/atom = 45.2833 +Neighbor list builds = 33 +Dangerous builds = 0 +Total wall time: 0:01:09 diff --git a/examples/USER/sdpd/README b/examples/USER/sdpd/README new file mode 100644 index 0000000000..72feff15dc --- /dev/null +++ b/examples/USER/sdpd/README @@ -0,0 +1,24 @@ +Smoothed Dissipative Particle Dynamics examples + +equipartition-verification: + This example verifies the equipartition theorem. + It simulates a periodic box of water with no solid bodies. + If equipartition theorem holds true, the average of each component of + translational kinetic energy should be equal to k_B T, and therefore + vx_sq_check, vy_sq_check, and vz_sq_check should fluctuate near 1. + +2d-diffusion: + This example demonstrates the free diffusion of a disk in 2D. + The 3D simulation is similar but takes much longer to complete. + As with other statistical experiments you need an ensemble to + extract meaningful average quantities. + For a more realistic simulation you should increase the resolution + of the disk/sphere which also necessitates reduction of timestep. + +2d-diffusion-in-shear-flow: + This example demonstrates the diffusion of a disk in shear flow in 2D. + The 3D simulation is similar but takes much longer to complete. + As with other statistical experiments you need an ensemble to + extract meaningful average quantities. + For a more realistic simulation you should increase the resolution + of the disk/sphere which also necessitates reduction of timestep. diff --git a/examples/USER/sdpd/equipartition-verification/in.lammps b/examples/USER/sdpd/equipartition-verification/in.lammps new file mode 100644 index 0000000000..0d06723f59 --- /dev/null +++ b/examples/USER/sdpd/equipartition-verification/in.lammps @@ -0,0 +1,45 @@ +dimension 3 +units micro +atom_style meso + +variable a equal 0.1 # lattice spacing micrometers +variable L equal $a*10 +variable T equal 300. +variable kB equal 1.3806504e-8 # picogram-micrometer^2/(microsecond^2-Kelvin) +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 10. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.0 # kernel function cutoff micrometers +variable mass equal $a*$a*$a*${rho_0} +variable dt equal 5e-4 # timestep microseconds +variable skin equal 0.1*$h + +region box block -$L $L -$L $L -$L $L units box +create_box 1 box +lattice sc $a + +create_atoms 1 box + +mass * ${mass} +set group all meso/rho ${rho_0} + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_coeff * * ${rho_0} ${c_0} ${h} + +variable vx_sq atom vx*vx +variable vy_sq atom vy*vy +variable vz_sq atom vz*vz +compute v_sq all reduce ave v_vx_sq v_vy_sq v_vz_sq +variable vx_sq_check equal c_v_sq[1]*${mass}/${kB}/$T +variable vy_sq_check equal c_v_sq[2]*${mass}/${kB}/$T +variable vz_sq_check equal c_v_sq[3]*${mass}/${kB}/$T + +fix 1 all meso + +neighbor ${skin} bin +timestep ${dt} + +thermo 10 +thermo_style custom step time v_vx_sq_check v_vy_sq_check v_vz_sq_check + +run 200 diff --git a/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.1 b/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.1 new file mode 100644 index 0000000000..06ffd699bc --- /dev/null +++ b/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.1 @@ -0,0 +1,146 @@ +LAMMPS (24 Oct 2018) +dimension 3 +units micro +atom_style meso + +variable a equal 0.1 # lattice spacing micrometers +variable L equal $a*10 +variable L equal 0.1*10 +variable T equal 300. +variable kB equal 1.3806504e-8 # picogram-micrometer^2/(microsecond^2-Kelvin) +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 10. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.0 # kernel function cutoff micrometers +variable h equal 0.1*4.0 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 5e-4 # timestep microseconds +variable skin equal 0.1*$h +variable skin equal 0.1*0.4 + +region box block -$L $L -$L $L -$L $L units box +region box block -1 $L -$L $L -$L $L units box +region box block -1 1 -$L $L -$L $L units box +region box block -1 1 -1 $L -$L $L units box +region box block -1 1 -1 1 -$L $L units box +region box block -1 1 -1 1 -1 $L units box +region box block -1 1 -1 1 -1 1 units box +create_box 1 box +Created orthogonal box = (-1 -1 -1) to (1 1 1) + 1 by 1 by 1 MPI processor grid +lattice sc $a +lattice sc 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 8000 atoms + Time spent = 0.00285411 secs + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 8000 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 10 ${h} +pair_coeff * * 1 10 0.4 + +variable vx_sq atom vx*vx +variable vy_sq atom vy*vy +variable vz_sq atom vz*vz +compute v_sq all reduce ave v_vx_sq v_vy_sq v_vz_sq +variable vx_sq_check equal c_v_sq[1]*${mass}/${kB}/$T +variable vx_sq_check equal c_v_sq[1]*0.001/${kB}/$T +variable vx_sq_check equal c_v_sq[1]*0.001/1.3806504e-08/$T +variable vx_sq_check equal c_v_sq[1]*0.001/1.3806504e-08/300 +variable vy_sq_check equal c_v_sq[2]*${mass}/${kB}/$T +variable vy_sq_check equal c_v_sq[2]*0.001/${kB}/$T +variable vy_sq_check equal c_v_sq[2]*0.001/1.3806504e-08/$T +variable vy_sq_check equal c_v_sq[2]*0.001/1.3806504e-08/300 +variable vz_sq_check equal c_v_sq[3]*${mass}/${kB}/$T +variable vz_sq_check equal c_v_sq[3]*0.001/${kB}/$T +variable vz_sq_check equal c_v_sq[3]*0.001/1.3806504e-08/$T +variable vz_sq_check equal c_v_sq[3]*0.001/1.3806504e-08/300 + +fix 1 all meso + +neighbor ${skin} bin +neighbor 0.04 bin +timestep ${dt} +timestep 0.0005 + +thermo 10 +thermo_style custom step time v_vx_sq_check v_vy_sq_check v_vz_sq_check + +run 200 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.44 + ghost atom cutoff = 0.44 + binsize = 0.22, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 13.54 | 13.54 | 13.54 Mbytes +Step Time v_vx_sq_check v_vy_sq_check v_vz_sq_check + 0 0 0 0 0 + 10 0.005 0.70973271 0.71495693 0.71910087 + 20 0.01 0.90418096 0.88845437 0.89659567 + 30 0.015 0.9590736 0.97880338 0.9619016 + 40 0.02 0.98533774 0.96057682 0.95600448 + 50 0.025 0.96433662 0.96650071 0.95509683 + 60 0.03 0.96598029 0.96373656 0.96734888 + 70 0.035 0.95433045 0.98004764 0.96255924 + 80 0.04 0.97872906 0.95987289 0.96623598 + 90 0.045 0.99913888 0.99255731 0.95616142 + 100 0.05 0.98872675 0.97141018 0.95338841 + 110 0.055 0.97794592 0.97389258 0.98473719 + 120 0.06 0.98389266 0.96716284 0.95504862 + 130 0.065 0.98572886 0.96680923 0.95599065 + 140 0.07 0.97602684 0.97580081 0.9886878 + 150 0.075 0.99172003 0.95027467 0.96028033 + 160 0.08 0.96793247 0.94590928 0.95644301 + 170 0.085 0.94167619 0.98048861 0.93439426 + 180 0.09 0.97277934 0.97383622 0.96900866 + 190 0.095 0.96647288 1.0027643 0.96230782 + 200 0.1 0.94864291 0.95902585 0.96398175 +Loop time of 60.1095 on 1 procs for 200 steps with 8000 atoms + +Performance: 143737.595 ns/day, 0.000 hours/ns, 3.327 timesteps/s +99.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 59.92 | 59.92 | 59.92 | 0.0 | 99.68 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.11154 | 0.11154 | 0.11154 | 0.0 | 0.19 +Output | 0.0063498 | 0.0063498 | 0.0063498 | 0.0 | 0.01 +Modify | 0.043546 | 0.043546 | 0.043546 | 0.0 | 0.07 +Other | | 0.02811 | | | 0.05 + +Nlocal: 8000 ave 8000 max 8000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 16389 ave 16389 max 16389 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.456e+06 ave 1.456e+06 max 1.456e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1456000 +Ave neighs/atom = 182 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:01:00 diff --git a/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.4 b/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.4 new file mode 100644 index 0000000000..88509f0fd1 --- /dev/null +++ b/examples/USER/sdpd/equipartition-verification/log.24Oct18.equipartition.g++.4 @@ -0,0 +1,146 @@ +LAMMPS (24 Oct 2018) +dimension 3 +units micro +atom_style meso + +variable a equal 0.1 # lattice spacing micrometers +variable L equal $a*10 +variable L equal 0.1*10 +variable T equal 300. +variable kB equal 1.3806504e-8 # picogram-micrometer^2/(microsecond^2-Kelvin) +variable rho_0 equal 1. # density picograms/micrometer^3 +variable c_0 equal 10. # speed of sound micrometers/microsecond +variable mu equal 1. # dynamic viscosity picogram/(micrometer-microsecond) +variable h equal $a*4.0 # kernel function cutoff micrometers +variable h equal 0.1*4.0 +variable mass equal $a*$a*$a*${rho_0} +variable mass equal 0.1*$a*$a*${rho_0} +variable mass equal 0.1*0.1*$a*${rho_0} +variable mass equal 0.1*0.1*0.1*${rho_0} +variable mass equal 0.1*0.1*0.1*1 +variable dt equal 5e-4 # timestep microseconds +variable skin equal 0.1*$h +variable skin equal 0.1*0.4 + +region box block -$L $L -$L $L -$L $L units box +region box block -1 $L -$L $L -$L $L units box +region box block -1 1 -$L $L -$L $L units box +region box block -1 1 -1 $L -$L $L units box +region box block -1 1 -1 1 -$L $L units box +region box block -1 1 -1 1 -1 $L units box +region box block -1 1 -1 1 -1 1 units box +create_box 1 box +Created orthogonal box = (-1 -1 -1) to (1 1 1) + 1 by 2 by 2 MPI processor grid +lattice sc $a +lattice sc 0.1 +Lattice spacing in x,y,z = 0.1 0.1 0.1 + +create_atoms 1 box +Created 8000 atoms + Time spent = 0.00252754 secs + +mass * ${mass} +mass * 0.001 +set group all meso/rho ${rho_0} +set group all meso/rho 1 + 8000 settings made for meso/rho + +pair_style sdpd/taitwater/isothermal $T ${mu} 76787 # temperature viscosity random_seed +pair_style sdpd/taitwater/isothermal 300 ${mu} 76787 +pair_style sdpd/taitwater/isothermal 300 1 76787 +pair_coeff * * ${rho_0} ${c_0} ${h} +pair_coeff * * 1 ${c_0} ${h} +pair_coeff * * 1 10 ${h} +pair_coeff * * 1 10 0.4 + +variable vx_sq atom vx*vx +variable vy_sq atom vy*vy +variable vz_sq atom vz*vz +compute v_sq all reduce ave v_vx_sq v_vy_sq v_vz_sq +variable vx_sq_check equal c_v_sq[1]*${mass}/${kB}/$T +variable vx_sq_check equal c_v_sq[1]*0.001/${kB}/$T +variable vx_sq_check equal c_v_sq[1]*0.001/1.3806504e-08/$T +variable vx_sq_check equal c_v_sq[1]*0.001/1.3806504e-08/300 +variable vy_sq_check equal c_v_sq[2]*${mass}/${kB}/$T +variable vy_sq_check equal c_v_sq[2]*0.001/${kB}/$T +variable vy_sq_check equal c_v_sq[2]*0.001/1.3806504e-08/$T +variable vy_sq_check equal c_v_sq[2]*0.001/1.3806504e-08/300 +variable vz_sq_check equal c_v_sq[3]*${mass}/${kB}/$T +variable vz_sq_check equal c_v_sq[3]*0.001/${kB}/$T +variable vz_sq_check equal c_v_sq[3]*0.001/1.3806504e-08/$T +variable vz_sq_check equal c_v_sq[3]*0.001/1.3806504e-08/300 + +fix 1 all meso + +neighbor ${skin} bin +neighbor 0.04 bin +timestep ${dt} +timestep 0.0005 + +thermo 10 +thermo_style custom step time v_vx_sq_check v_vy_sq_check v_vz_sq_check + +run 200 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0.44 + ghost atom cutoff = 0.44 + binsize = 0.22, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sdpd/taitwater/isothermal, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.795 | 5.795 | 5.795 Mbytes +Step Time v_vx_sq_check v_vy_sq_check v_vz_sq_check + 0 0 0 0 0 + 10 0.005 0.71224819 0.71470372 0.7008956 + 20 0.01 0.90627589 0.90683966 0.90116506 + 30 0.015 0.938505 0.95884272 0.93337542 + 40 0.02 0.94394649 0.93668038 0.96468004 + 50 0.025 0.97152309 0.97546161 0.95107762 + 60 0.03 0.94710871 0.95678322 0.97285504 + 70 0.035 0.96253148 0.95838642 0.95450883 + 80 0.04 0.97581495 0.95278681 0.95099478 + 90 0.045 0.96251614 0.9740684 0.96081505 + 100 0.05 0.94191275 0.97137523 0.94084858 + 110 0.055 0.953406 0.95739684 0.98574522 + 120 0.06 0.99001614 0.99608287 0.9839996 + 130 0.065 0.96575225 0.94309655 0.92847798 + 140 0.07 0.97642687 0.97458638 0.94696406 + 150 0.075 0.99316381 0.96876814 0.95440106 + 160 0.08 0.94589744 0.95264791 0.95495169 + 170 0.085 0.97599092 0.95336014 0.97687718 + 180 0.09 0.97214242 0.9726305 0.9726035 + 190 0.095 0.97577583 0.96523645 0.9756968 + 200 0.1 0.96386053 0.97268854 0.94582436 +Loop time of 32.5247 on 4 procs for 200 steps with 8000 atoms + +Performance: 265644.515 ns/day, 0.000 hours/ns, 6.149 timesteps/s +73.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 27.385 | 28.409 | 28.761 | 11.1 | 87.34 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 3.582 | 3.9343 | 4.9531 | 29.7 | 12.10 +Output | 0.022267 | 0.026073 | 0.033141 | 2.7 | 0.08 +Modify | 0.031714 | 0.033134 | 0.034367 | 0.6 | 0.10 +Other | | 0.1226 | | | 0.38 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 8469 ave 8469 max 8469 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 364000 ave 376628 max 351184 min +Histogram: 1 0 1 0 0 0 0 1 0 1 + +Total # of neighbors = 1456000 +Ave neighs/atom = 182 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:32 diff --git a/src/Depend.sh b/src/Depend.sh index a3f4e49667..b7ee740c52 100755 --- a/src/Depend.sh +++ b/src/Depend.sh @@ -107,6 +107,7 @@ fi if (test $1 = "RIGID") then depend USER-OMP + depend USER-SDPD fi if (test $1 = "SNAP") then diff --git a/src/USER-SDPD/Install.sh b/src/USER-SDPD/Install.sh new file mode 100644 index 0000000000..cc4af1c038 --- /dev/null +++ b/src/USER-SDPD/Install.sh @@ -0,0 +1,37 @@ +# Install/Uninstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# package files without dependencies +action pair_sdpd_taitwater_isothermal.h +action pair_sdpd_taitwater_isothermal.cpp +action fix_meso_move.h +action fix_meso_move.cpp + +# package files with dependencies +action fix_rigid_meso.h fix_rigid.h +action fix_rigid_meso.cpp fix_rigid.h diff --git a/src/USER-SDPD/README b/src/USER-SDPD/README new file mode 100644 index 0000000000..88ece7ddbf --- /dev/null +++ b/src/USER-SDPD/README @@ -0,0 +1,13 @@ +This package implements the Smoothed Dissipative Particle Dynamics (SDPD) +method for modelling fluids at mesoscale and diffusion of colloids. +Currently it adds pair style sdpd/taitwater/isothermal for modelling water +at isothermal conditions using the Tait equation of state. +It also adds fix meso/move command to move mesoscopic SPH/SDPD particles with +prescribed velocity and fix rigid/meso command to integrate rigid bodies +composed of mesoscopic SPH/SDPD particles. + +Creator of this package is: + +Morteza Jalalvand +Institute for Advanced Studies in Basic Sciences +jalalvand.m AT gmail DOT com diff --git a/src/USER-SDPD/fix_meso_move.cpp b/src/USER-SDPD/fix_meso_move.cpp new file mode 100644 index 0000000000..3e2902d0cc --- /dev/null +++ b/src/USER-SDPD/fix_meso_move.cpp @@ -0,0 +1,998 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: + Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com +------------------------------------------------------------------------- */ + +#include "string.h" +#include "math.h" +#include "fix_meso_move.h" +#include "atom.h" +#include "group.h" +#include "update.h" +#include "modify.h" +#include "force.h" +#include "domain.h" +#include "lattice.h" +#include "comm.h" +#include "input.h" +#include "variable.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathConst; + +enum{LINEAR,WIGGLE,ROTATE,VARIABLE}; +enum{EQUAL,ATOM}; + +/* ---------------------------------------------------------------------- */ + +FixMesoMove::FixMesoMove (LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), + xvarstr(NULL), yvarstr(NULL), zvarstr(NULL), + vxvarstr(NULL), vyvarstr(NULL), vzvarstr(NULL), + xoriginal(NULL), displace(NULL), velocity(NULL) { + if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + error->all(FLERR, + "fix meso/move command requires atom_style with both energy and density"); + + if (narg < 4) error->all(FLERR,"Illegal fix meso/move command"); + + restart_global = 1; + restart_peratom = 1; + peratom_flag = 1; + size_peratom_cols = 3; + peratom_freq = 1; + time_integrate = 1; + create_attribute = 1; + displaceflag = 0; + velocityflag = 0; + maxatom = 0; + + // parse args + + int iarg; + + if (strcmp(arg[3],"linear") == 0) { + if (narg < 7) error->all(FLERR,"Illegal fix meso/move command"); + iarg = 7; + mstyle = LINEAR; + if (strcmp(arg[4],"NULL") == 0) vxflag = 0; + else { + vxflag = 1; + vx = force->numeric(FLERR,arg[4]); + } + if (strcmp(arg[5],"NULL") == 0) vyflag = 0; + else { + vyflag = 1; + vy = force->numeric(FLERR,arg[5]); + } + if (strcmp(arg[6],"NULL") == 0) vzflag = 0; + else { + vzflag = 1; + vz = force->numeric(FLERR,arg[6]); + } + + } else if (strcmp(arg[3],"wiggle") == 0) { + if (narg < 8) error->all(FLERR,"Illegal fix meso/move command"); + iarg = 8; + mstyle = WIGGLE; + if (strcmp(arg[4],"NULL") == 0) axflag = 0; + else { + axflag = 1; + ax = force->numeric(FLERR,arg[4]); + } + if (strcmp(arg[5],"NULL") == 0) ayflag = 0; + else { + ayflag = 1; + ay = force->numeric(FLERR,arg[5]); + } + if (strcmp(arg[6],"NULL") == 0) azflag = 0; + else { + azflag = 1; + az = force->numeric(FLERR,arg[6]); + } + period = force->numeric(FLERR,arg[7]); + if (period <= 0.0) error->all(FLERR,"Illegal fix meso/move command"); + + } else if (strcmp(arg[3],"rotate") == 0) { + if (narg < 11) error->all(FLERR,"Illegal fix meso/move command"); + iarg = 11; + mstyle = ROTATE; + point[0] = force->numeric(FLERR,arg[4]); + point[1] = force->numeric(FLERR,arg[5]); + point[2] = force->numeric(FLERR,arg[6]); + axis[0] = force->numeric(FLERR,arg[7]); + axis[1] = force->numeric(FLERR,arg[8]); + axis[2] = force->numeric(FLERR,arg[9]); + period = force->numeric(FLERR,arg[10]); + if (period <= 0.0) error->all(FLERR,"Illegal fix meso/move command"); + + } else if (strcmp(arg[3],"variable") == 0) { + if (narg < 10) error->all(FLERR,"Illegal fix meso/move command"); + iarg = 10; + mstyle = VARIABLE; + if (strcmp(arg[4],"NULL") == 0) xvarstr = NULL; + else if (strstr(arg[4],"v_") == arg[4]) { + int n = strlen(&arg[4][2]) + 1; + xvarstr = new char[n]; + strcpy(xvarstr,&arg[4][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[5],"NULL") == 0) yvarstr = NULL; + else if (strstr(arg[5],"v_") == arg[5]) { + int n = strlen(&arg[5][2]) + 1; + yvarstr = new char[n]; + strcpy(yvarstr,&arg[5][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[6],"NULL") == 0) zvarstr = NULL; + else if (strstr(arg[6],"v_") == arg[6]) { + int n = strlen(&arg[6][2]) + 1; + zvarstr = new char[n]; + strcpy(zvarstr,&arg[6][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[7],"NULL") == 0) vxvarstr = NULL; + else if (strstr(arg[7],"v_") == arg[7]) { + int n = strlen(&arg[7][2]) + 1; + vxvarstr = new char[n]; + strcpy(vxvarstr,&arg[7][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[8],"NULL") == 0) vyvarstr = NULL; + else if (strstr(arg[8],"v_") == arg[8]) { + int n = strlen(&arg[8][2]) + 1; + vyvarstr = new char[n]; + strcpy(vyvarstr,&arg[8][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[9],"NULL") == 0) vzvarstr = NULL; + else if (strstr(arg[9],"v_") == arg[9]) { + int n = strlen(&arg[9][2]) + 1; + vzvarstr = new char[n]; + strcpy(vzvarstr,&arg[9][2]); + } else error->all(FLERR,"Illegal fix meso/move command"); + + } else error->all(FLERR,"Illegal fix meso/move command"); + + // optional args + + int scaleflag = 1; + + while (iarg < narg) { + if (strcmp(arg[iarg],"units") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix meso/move command"); + if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0; + else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1; + else error->all(FLERR,"Illegal fix meso/move command"); + iarg += 2; + } else error->all(FLERR,"Illegal fix meso/move command"); + } + + // error checks and warnings + + if (domain->dimension == 2) { + if (mstyle == LINEAR && vzflag && vz != 0.0) + error->all(FLERR,"Fix meso/move cannot set linear z motion for 2d problem"); + if (mstyle == WIGGLE && azflag && az != 0.0) + error->all(FLERR,"Fix meso/move cannot set wiggle z motion for 2d problem"); + if (mstyle == ROTATE && (axis[0] != 0.0 || axis[1] != 0.0)) + error->all(FLERR, "Fix meso/move cannot rotate aroung non z-axis for 2d problem"); + if (mstyle == VARIABLE && (zvarstr || vzvarstr)) + error->all(FLERR, "Fix meso/move cannot define z or vz variable for 2d problem"); + } + + // setup scaling and apply scaling factors to velocity & amplitude + + if ((mstyle == LINEAR || mstyle == WIGGLE || mstyle == ROTATE) && + scaleflag) { + double xscale = domain->lattice->xlattice; + double yscale = domain->lattice->ylattice; + double zscale = domain->lattice->zlattice; + + if (mstyle == LINEAR) { + if (vxflag) vx *= xscale; + if (vyflag) vy *= yscale; + if (vzflag) vz *= zscale; + } else if (mstyle == WIGGLE) { + if (axflag) ax *= xscale; + if (ayflag) ay *= yscale; + if (azflag) az *= zscale; + } else if (mstyle == ROTATE) { + point[0] *= xscale; + point[1] *= yscale; + point[2] *= zscale; + } + } + + // set omega_rotate from period + + if (mstyle == WIGGLE || mstyle == ROTATE) omega_rotate = MY_2PI / period; + + // runit = unit vector along rotation axis + + if (mstyle == ROTATE) { + double len = sqrt(axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2]); + if (len == 0.0) + error->all(FLERR,"Zero length rotation vector with fix meso/move"); + runit[0] = axis[0]/len; + runit[1] = axis[1]/len; + runit[2] = axis[2]/len; + } + + // perform initial allocation of atom-based array + // register with Atom class + + grow_arrays(atom->nmax); + atom->add_callback(0); + atom->add_callback(1); + + displace = velocity = NULL; + + // xoriginal = initial unwrapped positions of atoms + + double **x = atom->x; + imageint *image = atom->image; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]); + else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0; + } + + time_origin = update->ntimestep; +} + +/* ---------------------------------------------------------------------- */ + +FixMesoMove::~FixMesoMove () { + // unregister callbacks to this fix from Atom class + + atom->delete_callback(id,0); + atom->delete_callback(id,1); + + // delete locally stored arrays + + memory->destroy(xoriginal); + memory->destroy(displace); + memory->destroy(velocity); + + delete [] xvarstr; + delete [] yvarstr; + delete [] zvarstr; + delete [] vxvarstr; + delete [] vyvarstr; + delete [] vzvarstr; +} + +/* ---------------------------------------------------------------------- */ + +int FixMesoMove::setmask () { + int mask = 0; + mask |= INITIAL_INTEGRATE; + mask |= FINAL_INTEGRATE; + mask |= PRE_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixMesoMove::init () { + dt = update->dt; + dtv = update->dt; + dtf = 0.5 * update->dt * force->ftm2v; + + // set indices and style of all variables + + displaceflag = velocityflag = 0; + + if (mstyle == VARIABLE) { + if (xvarstr) { + xvar = input->variable->find(xvarstr); + if (xvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(xvar)) xvarstyle = EQUAL; + else if (input->variable->atomstyle(xvar)) xvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + if (yvarstr) { + yvar = input->variable->find(yvarstr); + if (yvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(yvar)) yvarstyle = EQUAL; + else if (input->variable->atomstyle(yvar)) yvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + if (zvarstr) { + zvar = input->variable->find(zvarstr); + if (zvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(zvar)) zvarstyle = EQUAL; + else if (input->variable->atomstyle(zvar)) zvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + if (vxvarstr) { + vxvar = input->variable->find(vxvarstr); + if (vxvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(vxvar)) vxvarstyle = EQUAL; + else if (input->variable->atomstyle(vxvar)) vxvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + if (vyvarstr) { + vyvar = input->variable->find(vyvarstr); + if (vyvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(vyvar)) vyvarstyle = EQUAL; + else if (input->variable->atomstyle(vyvar)) vyvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + if (vzvarstr) { + vzvar = input->variable->find(vzvarstr); + if (vzvar < 0) error->all(FLERR, "Variable name for fix meso/move does not exist"); + if (input->variable->equalstyle(vzvar)) vzvarstyle = EQUAL; + else if (input->variable->atomstyle(vzvar)) vzvarstyle = ATOM; + else error->all(FLERR,"Variable for fix meso/move is invalid style"); + } + + if (xvarstr && xvarstyle == ATOM) displaceflag = 1; + if (yvarstr && yvarstyle == ATOM) displaceflag = 1; + if (zvarstr && zvarstyle == ATOM) displaceflag = 1; + if (vxvarstr && vxvarstyle == ATOM) velocityflag = 1; + if (vyvarstr && vyvarstyle == ATOM) velocityflag = 1; + if (vzvarstr && vzvarstyle == ATOM) velocityflag = 1; + } + + maxatom = atom->nmax; + memory->destroy(displace); + memory->destroy(velocity); + if (displaceflag) memory->create(displace,maxatom,3,"move:displace"); + else displace = NULL; + if (velocityflag) memory->create(velocity,maxatom,3,"move:velocity"); + else velocity = NULL; +} + +void FixMesoMove::setup_pre_force (int /*vflag*/) { + // set vest equal to v + double **v = atom->v; + double **vest = atom->vest; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) + nlocal = atom->nfirst; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + vest[i][0] = v[i][0]; + vest[i][1] = v[i][1]; + vest[i][2] = v[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- + set x,v of particles +------------------------------------------------------------------------- */ + +void FixMesoMove::initial_integrate (int /*vflag*/) { + double ddotr,dx,dy,dz; + double dtfm; + double xold[3],a[3],b[3],c[3],d[3],disp[3],disp_next[3]; + + double delta = (update->ntimestep - time_origin) * dt; + double delta_next = (update->ntimestep - time_origin + 1) * dt; + + double **x = atom->x; + double **v = atom->v; + double **vest = atom->vest; + double *rho = atom->rho; + double *drho = atom->drho; + double *e = atom->e; + double *de = atom->de; + double **f = atom->f; + double **omega = atom->omega; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + int rmass_flag = atom->rmass_flag; + + if (igroup == atom->firstgroup) + nlocal = atom->nfirst; + + // for linear: X = X0 + V*dt + + if (mstyle == LINEAR) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + xold[0] = x[i][0]; + xold[1] = x[i][1]; + xold[2] = x[i][2]; + + e[i] += dtf * de[i]; // half-step update of particle internal energy + rho[i] += dtf * drho[i]; // ... and density + + if (vxflag) { + vest[i][0] = v[i][0] = vx; + x[i][0] = xoriginal[i][0] + vx*delta; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][0] = v[i][0] + 2.0 * dtfm * f[i][0]; + v[i][0] += dtfm * f[i][0]; + x[i][0] += dtv * v[i][0]; + } + + if (vyflag) { + vest[i][1] = v[i][1] = vy; + x[i][1] = xoriginal[i][1] + vy*delta; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][1] = v[i][1] + 2.0 * dtfm * f[i][1]; + v[i][1] += dtfm * f[i][1]; + x[i][1] += dtv * v[i][1]; + } + + if (vzflag) { + vest[i][2] = v[i][2] = vz; + x[i][2] = xoriginal[i][2] + vz*delta; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][2] = v[i][2] + 2.0 * dtfm * f[i][2]; + v[i][2] += dtfm * f[i][2]; + x[i][2] += dtv * v[i][2]; + } + + domain->remap_near(x[i],xold); + } + } + + // for wiggle: X = X0 + A sin(w*dt) + + } else if (mstyle == WIGGLE) { + double arg = omega_rotate * delta; + double arg_next = omega_rotate * delta_next; + double sine = sin(arg); + double cosine = cos(arg); + double cosine_next = cos(arg_next); + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + xold[0] = x[i][0]; + xold[1] = x[i][1]; + xold[2] = x[i][2]; + + e[i] += dtf * de[i]; // half-step update of particle internal energy + rho[i] += dtf * drho[i]; // ... and density + + if (axflag) { + v[i][0] = ax*omega_rotate*cosine; + vest[i][0] = ax*omega_rotate*cosine_next; + x[i][0] = xoriginal[i][0] + ax*sine; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][0] = v[i][0] + 2.0 * dtfm * f[i][0]; + v[i][0] += dtfm * f[i][0]; + x[i][0] += dtv * v[i][0]; + } + + if (ayflag) { + v[i][1] = ay*omega_rotate*cosine; + vest[i][1] = ay*omega_rotate*cosine_next; + x[i][1] = xoriginal[i][1] + ay*sine; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][1] = v[i][1] + 2.0 * dtfm * f[i][1]; + v[i][1] += dtfm * f[i][1]; + x[i][1] += dtv * v[i][1]; + } + + if (azflag) { + v[i][2] = az*omega_rotate*cosine; + vest[i][2] = az*omega_rotate*cosine_next; + x[i][2] = xoriginal[i][2] + az*sine; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][2] = v[i][2] + 2.0 * dtfm * f[i][2]; + v[i][2] += dtfm * f[i][2]; + x[i][2] += dtv * v[i][2]; + } + + domain->remap_near(x[i],xold); + } + } + + // for rotate by right-hand rule around omega: + // P = point = vector = point of rotation + // R = vector = axis of rotation + // w = omega of rotation (from period) + // X0 = xoriginal = initial coord of atom + // R0 = runit = unit vector for R + // D = X0 - P = vector from P to X0 + // C = (D dot R0) R0 = projection of atom coord onto R line + // A = D - C = vector from R line to X0 + // B = R0 cross A = vector perp to A in plane of rotation + // A,B define plane of circular rotation around R line + // X = P + C + A cos(w*dt) + B sin(w*dt) + // V = w R0 cross (A cos(w*dt) + B sin(w*dt)) + + } else if (mstyle == ROTATE) { + double arg = omega_rotate * delta; + double arg_next = omega_rotate * delta_next; + double sine = sin(arg); + double cosine = cos(arg); + double sine_next = sin(arg_next); + double cosine_next = cos(arg_next); + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + xold[0] = x[i][0]; + xold[1] = x[i][1]; + xold[2] = x[i][2]; + + e[i] += dtf * de[i]; // half-step update of particle internal energy + rho[i] += dtf * drho[i]; // ... and density + + d[0] = xoriginal[i][0] - point[0]; + d[1] = xoriginal[i][1] - point[1]; + d[2] = xoriginal[i][2] - point[2]; + ddotr = d[0]*runit[0] + d[1]*runit[1] + d[2]*runit[2]; + c[0] = ddotr*runit[0]; + c[1] = ddotr*runit[1]; + c[2] = ddotr*runit[2]; + a[0] = d[0] - c[0]; + a[1] = d[1] - c[1]; + a[2] = d[2] - c[2]; + b[0] = runit[1]*a[2] - runit[2]*a[1]; + b[1] = runit[2]*a[0] - runit[0]*a[2]; + b[2] = runit[0]*a[1] - runit[1]*a[0]; + disp[0] = a[0]*cosine + b[0]*sine; + disp[1] = a[1]*cosine + b[1]*sine; + disp[2] = a[2]*cosine + b[2]*sine; + disp_next[0] = a[0]*cosine_next + b[0]*sine_next; + disp_next[1] = a[1]*cosine_next + b[1]*sine_next; + disp_next[2] = a[2]*cosine_next + b[2]*sine_next; + + x[i][0] = point[0] + c[0] + disp[0]; + x[i][1] = point[1] + c[1] + disp[1]; + x[i][2] = point[2] + c[2] + disp[2]; + v[i][0] = omega_rotate * (runit[1]*disp[2] - runit[2]*disp[1]); + v[i][1] = omega_rotate * (runit[2]*disp[0] - runit[0]*disp[2]); + v[i][2] = omega_rotate * (runit[0]*disp[1] - runit[1]*disp[0]); + vest[i][0] = omega_rotate * (runit[1]*disp_next[2] - runit[2]*disp_next[1]); + vest[i][1] = omega_rotate * (runit[2]*disp_next[0] - runit[0]*disp_next[2]); + vest[i][2] = omega_rotate * (runit[0]*disp_next[1] - runit[1]*disp_next[0]); + + domain->remap_near(x[i],xold); + } + } + + // for variable: compute x,v from variables + + } else if (mstyle == VARIABLE) { + + // reallocate displace and velocity arrays as necessary + + if ((displaceflag || velocityflag) && atom->nmax > maxatom) { + maxatom = atom->nmax; + if (displaceflag) { + memory->destroy(displace); + memory->create(displace,maxatom,3,"move:displace"); + } + if (velocityflag) { + memory->destroy(velocity); + memory->create(velocity,maxatom,3,"move:velocity"); + } + } + + // pre-compute variable values, wrap with clear/add + + modify->clearstep_compute(); + + if (xvarstr) { + if (xvarstyle == EQUAL) dx = input->variable->compute_equal(xvar); + else input->variable->compute_atom(xvar,igroup,&displace[0][0],3,0); + } + if (yvarstr) { + if (yvarstyle == EQUAL) dy = input->variable->compute_equal(yvar); + else input->variable->compute_atom(yvar,igroup,&displace[0][1],3,0); + } + if (zvarstr) { + if (zvarstyle == EQUAL) dz = input->variable->compute_equal(zvar); + else input->variable->compute_atom(zvar,igroup,&displace[0][2],3,0); + } + if (vxvarstr) { + if (vxvarstyle == EQUAL) vx = input->variable->compute_equal(vxvar); + else input->variable->compute_atom(vxvar,igroup,&velocity[0][0],3,0); + } + if (vyvarstr) { + if (vyvarstyle == EQUAL) vy = input->variable->compute_equal(vyvar); + else input->variable->compute_atom(vyvar,igroup,&velocity[0][1],3,0); + } + if (vzvarstr) { + if (vzvarstyle == EQUAL) vz = input->variable->compute_equal(vzvar); + else input->variable->compute_atom(vzvar,igroup,&velocity[0][2],3,0); + } + + modify->addstep_compute(update->ntimestep + 1); + + // update x,v + // vest (velocity in next step) could be different from v in the next + // step, but this is the best we could do + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + xold[0] = x[i][0]; + xold[1] = x[i][1]; + xold[2] = x[i][2]; + + if (xvarstr && vxvarstr) { + if (vxvarstyle == EQUAL) { + vest[i][0] = 2*vx - v[i][0]; + v[i][0] = vx; + } + else { + vest[i][0] = 2*velocity[i][0] - v[i][0]; + v[i][0] = velocity[i][0]; + } + if (xvarstyle == EQUAL) x[i][0] = xoriginal[i][0] + dx; + else x[i][0] = xoriginal[i][0] + displace[i][0]; + } else if (xvarstr) { + if (xvarstyle == EQUAL) x[i][0] = xoriginal[i][0] + dx; + else x[i][0] = xoriginal[i][0] + displace[i][0]; + } else if (vxvarstr) { + if (vxvarstyle == EQUAL) { + vest[i][0] = 2*vx - v[i][0]; + v[i][0] = vx; + } + else { + vest[i][0] = 2*velocity[i][0] - v[i][0]; + v[i][0] = velocity[i][0]; + } + x[i][0] += dtv * v[i][0]; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][0] = v[i][0] + 2.0 * dtfm * f[i][0]; + v[i][0] += dtfm * f[i][0]; + x[i][0] += dtv * v[i][0]; + } + + if (yvarstr && vyvarstr) { + if (vyvarstyle == EQUAL) { + vest[i][1] = 2*vy - v[i][1]; + v[i][1] = vy; + } + else { + vest[i][1] = 2*velocity[i][1] - v[i][1]; + v[i][1] = velocity[i][1]; + } + if (yvarstyle == EQUAL) x[i][1] = xoriginal[i][1] + dy; + else x[i][1] = xoriginal[i][1] + displace[i][1]; + } else if (yvarstr) { + if (yvarstyle == EQUAL) x[i][1] = xoriginal[i][1] + dy; + else x[i][1] = xoriginal[i][1] + displace[i][1]; + } else if (vyvarstr) { + if (vyvarstyle == EQUAL) { + vest[i][1] = 2*vy - v[i][1]; + v[i][1] = vy; + } + else { + vest[i][1] = 2*velocity[i][1] - v[i][1]; + v[i][1] = velocity[i][1]; + } + x[i][1] += dtv * v[i][1]; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][1] = v[i][1] + 2.0 * dtfm * f[i][1]; + v[i][1] += dtfm * f[i][1]; + x[i][1] += dtv * v[i][1]; + } + + if (zvarstr && vzvarstr) { + if (vzvarstyle == EQUAL) { + vest[i][2] = 2*vz - v[i][2]; + v[i][2] = vz; + } + else { + vest[i][2] = 2*velocity[i][2] - v[i][2]; + v[i][2] = velocity[i][2]; + } + if (zvarstyle == EQUAL) x[i][2] = xoriginal[i][2] + dz; + else x[i][2] = xoriginal[i][2] + displace[i][2]; + } else if (zvarstr) { + if (zvarstyle == EQUAL) x[i][2] = xoriginal[i][2] + dz; + else x[i][2] = xoriginal[i][2] + displace[i][2]; + } else if (vzvarstr) { + if (vzvarstyle == EQUAL) { + vest[i][2] = 2*vz - v[i][2]; + v[i][2] = vz; + } + else { + vest[i][2] = 2*velocity[i][2] - v[i][2]; + v[i][2] = velocity[i][2]; + } + x[i][2] += dtv * v[i][2]; + } else { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + vest[i][2] = v[i][2] + 2.0 * dtfm * f[i][2]; + v[i][2] += dtfm * f[i][2]; + x[i][2] += dtv * v[i][2]; + } + + domain->remap_near(x[i],xold); + } + } + } +} + +/* ---------------------------------------------------------------------- + final NVE of particles with NULL components +------------------------------------------------------------------------- */ + +void FixMesoMove::final_integrate () { + double dtfm; + + int xflag = 1; + if (mstyle == LINEAR && vxflag) xflag = 0; + else if (mstyle == WIGGLE && axflag) xflag = 0; + else if (mstyle == ROTATE) xflag = 0; + else if (mstyle == VARIABLE && (xvarstr || vxvarstr)) xflag = 0; + + int yflag = 1; + if (mstyle == LINEAR && vyflag) yflag = 0; + else if (mstyle == WIGGLE && ayflag) yflag = 0; + else if (mstyle == ROTATE) yflag = 0; + else if (mstyle == VARIABLE && (yvarstr || vyvarstr)) yflag = 0; + + int zflag = 1; + if (mstyle == LINEAR && vzflag) zflag = 0; + else if (mstyle == WIGGLE && azflag) zflag = 0; + else if (mstyle == ROTATE) zflag = 0; + else if (mstyle == VARIABLE && (zvarstr || vzvarstr)) zflag = 0; + + double **v = atom->v; + double **f = atom->f; + double *e = atom->e; + double *de = atom->de; + double *rho = atom->rho; + double *drho = atom->drho; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + int rmass_flag = atom->rmass_flag; + + if (igroup == atom->firstgroup) + nlocal = atom->nfirst; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + e[i] += dtf * de[i]; + rho[i] += dtf * drho[i]; + + if (xflag) { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + v[i][0] += dtfm * f[i][0]; + } + + if (yflag) { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + v[i][1] += dtfm * f[i][1]; + } + + if (zflag) { + dtfm = rmass_flag ? dtf / rmass[i] : dtf / mass[type[i]]; + v[i][2] += dtfm * f[i][2]; + } + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double FixMesoMove::memory_usage () { + double bytes = atom->nmax*3 * sizeof(double); + if (displaceflag) bytes += atom->nmax*3 * sizeof(double); + if (velocityflag) bytes += atom->nmax*3 * sizeof(double); + return bytes; +} + +/* ---------------------------------------------------------------------- + pack entire state of Fix into one write +------------------------------------------------------------------------- */ + +void FixMesoMove::write_restart (FILE *fp) { + int n = 0; + double list[1]; + list[n++] = time_origin; + + if (comm->me == 0) { + int size = n * sizeof(double); + fwrite(&size,sizeof(int),1,fp); + fwrite(list,sizeof(double),n,fp); + } +} + +/* ---------------------------------------------------------------------- + use state info from restart file to restart the Fix +------------------------------------------------------------------------- */ + +void FixMesoMove::restart (char *buf) { + int n = 0; + double *list = (double *) buf; + + time_origin = static_cast (list[n++]); +} + +/* ---------------------------------------------------------------------- + allocate atom-based array +------------------------------------------------------------------------- */ + +void FixMesoMove::grow_arrays (int nmax) { + memory->grow(xoriginal,nmax,3,"move:xoriginal"); + array_atom = xoriginal; +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based array +------------------------------------------------------------------------- */ + +void FixMesoMove::copy_arrays (int i, int j, int /*delflag*/) { + xoriginal[j][0] = xoriginal[i][0]; + xoriginal[j][1] = xoriginal[i][1]; + xoriginal[j][2] = xoriginal[i][2]; +} + +/* ---------------------------------------------------------------------- + initialize one atom's array values, called when atom is created +------------------------------------------------------------------------- */ + +void FixMesoMove::set_arrays (int i) { + double **x = atom->x; + imageint *image = atom->image; + int *mask = atom->mask; + + // particle not in group + + if (!(mask[i] & groupbit)) { + xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0; + return; + } + + // current time still equal fix creation time + + if (update->ntimestep == time_origin) { + domain->unmap(x[i],image[i],xoriginal[i]); + return; + } + + // backup particle to time_origin + + if (mstyle == VARIABLE) + error->all(FLERR,"Cannot add atoms to fix meso/move variable"); + + domain->unmap(x[i],image[i],xoriginal[i]); + double delta = (update->ntimestep - time_origin) * update->dt; + + if (mstyle == LINEAR) { + if (vxflag) xoriginal[i][0] -= vx * delta; + if (vyflag) xoriginal[i][1] -= vy * delta; + if (vzflag) xoriginal[i][2] -= vz * delta; + } else if (mstyle == WIGGLE) { + double arg = omega_rotate * delta; + double sine = sin(arg); + if (axflag) xoriginal[i][0] -= ax*sine; + if (ayflag) xoriginal[i][1] -= ay*sine; + if (azflag) xoriginal[i][2] -= az*sine; + } else if (mstyle == ROTATE) { + double a[3],b[3],c[3],d[3],disp[3],ddotr; + double arg = - omega_rotate * delta; + double sine = sin(arg); + double cosine = cos(arg); + d[0] = x[i][0] - point[0]; + d[1] = x[i][1] - point[1]; + d[2] = x[i][2] - point[2]; + ddotr = d[0]*runit[0] + d[1]*runit[1] + d[2]*runit[2]; + c[0] = ddotr*runit[0]; + c[1] = ddotr*runit[1]; + c[2] = ddotr*runit[2]; + + a[0] = d[0] - c[0]; + a[1] = d[1] - c[1]; + a[2] = d[2] - c[2]; + b[0] = runit[1]*a[2] - runit[2]*a[1]; + b[1] = runit[2]*a[0] - runit[0]*a[2]; + b[2] = runit[0]*a[1] - runit[1]*a[0]; + disp[0] = a[0]*cosine + b[0]*sine; + disp[1] = a[1]*cosine + b[1]*sine; + disp[2] = a[2]*cosine + b[2]*sine; + + xoriginal[i][0] = point[0] + c[0] + disp[0]; + xoriginal[i][1] = point[1] + c[1] + disp[1]; + xoriginal[i][2] = point[2] + c[2] + disp[2]; + } +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based array for exchange with another proc +------------------------------------------------------------------------- */ + +int FixMesoMove::pack_exchange (int i, double *buf) { + buf[0] = xoriginal[i][0]; + buf[1] = xoriginal[i][1]; + buf[2] = xoriginal[i][2]; + return 3; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based array from exchange with another proc +------------------------------------------------------------------------- */ + +int FixMesoMove::unpack_exchange (int nlocal, double *buf) { + xoriginal[nlocal][0] = buf[0]; + xoriginal[nlocal][1] = buf[1]; + xoriginal[nlocal][2] = buf[2]; + return 3; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based arrays for restart file +------------------------------------------------------------------------- */ + +int FixMesoMove::pack_restart (int i, double *buf) { + buf[0] = 4; + buf[1] = xoriginal[i][0]; + buf[2] = xoriginal[i][1]; + buf[3] = xoriginal[i][2]; + return 4; +} + +/* ---------------------------------------------------------------------- + unpack values from atom->extra array to restart the fix +------------------------------------------------------------------------- */ + +void FixMesoMove::unpack_restart (int nlocal, int nth) { + double **extra = atom->extra; + + // skip to Nth set of extra values + + int m = 0; + for (int i = 0; i < nth; i++) m += static_cast (extra[nlocal][m]); + m++; + + xoriginal[nlocal][0] = extra[nlocal][m++]; + xoriginal[nlocal][1] = extra[nlocal][m++]; + xoriginal[nlocal][2] = extra[nlocal][m++]; +} + +/* ---------------------------------------------------------------------- + maxsize of any atom's restart data +------------------------------------------------------------------------- */ + +int FixMesoMove::maxsize_restart () { + return 4; +} + +/* ---------------------------------------------------------------------- + size of atom nlocal's restart data +------------------------------------------------------------------------- */ + +int FixMesoMove::size_restart (int nlocal) { + return 4; +} + +/* ---------------------------------------------------------------------- */ + +void FixMesoMove::reset_dt () { + error->all(FLERR,"Resetting timestep size is not allowed with fix meso/move"); +} diff --git a/src/USER-SDPD/fix_meso_move.h b/src/USER-SDPD/fix_meso_move.h new file mode 100644 index 0000000000..a5e213ba81 --- /dev/null +++ b/src/USER-SDPD/fix_meso_move.h @@ -0,0 +1,127 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(meso/move,FixMesoMove) + +#else + +#ifndef LMP_FIX_MESO_MOVE_H +#define LMP_FIX_MESO_MOVE_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixMesoMove : public Fix { + public: + FixMesoMove (class LAMMPS *, int, char **); + ~FixMesoMove (); + int setmask (); + void init (); + void setup_pre_force (int); + void initial_integrate (int); + void final_integrate (); + + double memory_usage (); + void write_restart (FILE *); + void restart (char *); + void grow_arrays (int); + void copy_arrays (int, int, int); + void set_arrays (int); + int pack_exchange (int, double *); + int unpack_exchange (int, double *); + int pack_restart (int, double *); + void unpack_restart (int, int); + int maxsize_restart (); + int size_restart (int); + + void reset_dt (); + + private: + char *xvarstr,*yvarstr,*zvarstr,*vxvarstr,*vyvarstr,*vzvarstr; + int mstyle; + int vxflag,vyflag,vzflag,axflag,ayflag,azflag; + double vx,vy,vz,ax,ay,az; + double period,omega_rotate; + double point[3],axis[3],runit[3]; + double dt,dtv,dtf; + int xvar,yvar,zvar,vxvar,vyvar,vzvar; + int xvarstyle,yvarstyle,zvarstyle,vxvarstyle,vyvarstyle,vzvarstyle; + int time_origin; + + double **xoriginal; // original coords of atoms + int displaceflag,velocityflag; + int maxatom; + double **displace,**velocity; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Fix meso/move cannot set linear z motion for 2d problem + +Self-explanatory. + +E: Fix meso/move cannot set wiggle z motion for 2d problem + +Self-explanatory. + +E: Fix meso/move cannot rotate aroung non z-axis for 2d problem + +Self-explanatory. + +E: Fix meso/move cannot define z or vz variable for 2d problem + +Self-explanatory. + +W: Fix meso/move does not update angular momentum + +Atoms store this quantity, but fix meso/move does not (yet) update it. + +W: Fix meso/move does not update quaternions + +Atoms store this quantity, but fix meso/move does not (yet) update it. + +E: Zero length rotation vector with fix meso/move + +Self-explanatory. + +E: Variable name for fix meso/move does not exist + +Self-explanatory. + +E: Variable for fix meso/move is invalid style + +Only equal-style variables can be used. + +E: Cannot add atoms to fix meso/move variable + +Atoms can not be added afterwards to this fix option. + +E: Resetting timestep size is not allowed with fix meso/move + +This is because fix meso/move is moving atoms based on elapsed time. + +*/ diff --git a/src/USER-SDPD/fix_rigid_meso.cpp b/src/USER-SDPD/fix_rigid_meso.cpp new file mode 100644 index 0000000000..fd881852f7 --- /dev/null +++ b/src/USER-SDPD/fix_rigid_meso.cpp @@ -0,0 +1,500 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Tony Sheh (U Michigan), Trung Dac Nguyen (U Michigan) + references: Kamberaj et al., J. Chem. Phys. 122, 224114 (2005) + Miller et al., J Chem Phys. 116, 8649-8659 (2002) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: + Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com + + This is an extension of fix/rigid/nve to SPH/SDPD particles + You can see the original copyright notice of fix/rigid authors above + Note that the Kamberaj paper was related to the nvt variant + and all codes relevant to that has been removed +------------------------------------------------------------------------- */ + +#include +#include "fix_rigid_meso.h" +#include "math_extra.h" +#include "atom.h" +#include "compute.h" +#include "domain.h" +#include "update.h" +#include "modify.h" +#include "group.h" +#include "force.h" +#include "output.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixRigidMeso::FixRigidMeso (LAMMPS *lmp, int narg, char **arg) : +FixRigid (lmp, narg, arg) { + scalar_flag = 0; + size_array_cols = 28; + if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + error->all (FLERR, "fix rigid/meso command requires atom_style with" + " both energy and density"); + + if (langflag || tstat_flag) + error->all (FLERR,"Can not use thermostat with fix rigid/meso"); + + if (pstat_flag) + error->all (FLERR,"Can not use barostat with fix rigid/meso"); + + // memory allocation and initialization + + memory->create(conjqm,nbody,4,"rigid_nh:conjqm"); +} + +/* ---------------------------------------------------------------------- */ + +FixRigidMeso::~FixRigidMeso () { + memory->destroy(conjqm); +} + +/* ---------------------------------------------------------------------- */ + +int FixRigidMeso::setmask () { + int mask = 0; + mask |= INITIAL_INTEGRATE; + mask |= FINAL_INTEGRATE; + mask |= PRE_NEIGHBOR; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidMeso::setup (int vflag) { + FixRigid::setup(vflag); + + double mbody[3]; + for (int ibody = 0; ibody < nbody; ibody++) { + MathExtra::transpose_matvec (ex_space[ibody],ey_space[ibody],ez_space[ibody], + angmom[ibody],mbody); + MathExtra::quatvec (quat[ibody],mbody,conjqm[ibody]); + conjqm[ibody][0] *= 2.0; + conjqm[ibody][1] *= 2.0; + conjqm[ibody][2] *= 2.0; + conjqm[ibody][3] *= 2.0; + } +} + +/* ---------------------------------------------------------------------- + perform preforce velocity Verlet integration + see Kamberaj paper for step references +------------------------------------------------------------------------- */ + +void FixRigidMeso::initial_integrate (int vflag) { + double dtfm,mbody[3],tbody[3],fquat[4]; + double dtf2 = dtf * 2.0; + + // update xcm, vcm, quat, conjqm and angmom + + for (int ibody = 0; ibody < nbody; ibody++) { + + // step 1.1 - update vcm by 1/2 step + + dtfm = dtf / masstotal[ibody]; + vcm[ibody][0] += dtfm * fcm[ibody][0] * fflag[ibody][0]; + vcm[ibody][1] += dtfm * fcm[ibody][1] * fflag[ibody][1]; + vcm[ibody][2] += dtfm * fcm[ibody][2] * fflag[ibody][2]; + + // step 1.2 - update xcm by full step + + xcm[ibody][0] += dtv * vcm[ibody][0]; + xcm[ibody][1] += dtv * vcm[ibody][1]; + xcm[ibody][2] += dtv * vcm[ibody][2]; + + // step 1.3 - apply torque (body coords) to quaternion momentum + + torque[ibody][0] *= tflag[ibody][0]; + torque[ibody][1] *= tflag[ibody][1]; + torque[ibody][2] *= tflag[ibody][2]; + + MathExtra::transpose_matvec (ex_space[ibody],ey_space[ibody],ez_space[ibody], + torque[ibody],tbody); + MathExtra::quatvec (quat[ibody],tbody,fquat); + + conjqm[ibody][0] += dtf2 * fquat[0]; + conjqm[ibody][1] += dtf2 * fquat[1]; + conjqm[ibody][2] += dtf2 * fquat[2]; + conjqm[ibody][3] += dtf2 * fquat[3]; + + // step 1.4 to 1.13 - use no_squish rotate to update p and q + + MathExtra::no_squish_rotate (3,conjqm[ibody],quat[ibody],inertia[ibody],dtq); + MathExtra::no_squish_rotate (2,conjqm[ibody],quat[ibody],inertia[ibody],dtq); + MathExtra::no_squish_rotate (1,conjqm[ibody],quat[ibody],inertia[ibody],dtv); + MathExtra::no_squish_rotate (2,conjqm[ibody],quat[ibody],inertia[ibody],dtq); + MathExtra::no_squish_rotate (3,conjqm[ibody],quat[ibody],inertia[ibody],dtq); + + // update exyz_space + // transform p back to angmom + // update angular velocity + + MathExtra::q_to_exyz (quat[ibody],ex_space[ibody],ey_space[ibody], + ez_space[ibody]); + MathExtra::invquatvec (quat[ibody],conjqm[ibody],mbody); + MathExtra::matvec (ex_space[ibody],ey_space[ibody],ez_space[ibody], + mbody,angmom[ibody]); + + angmom[ibody][0] *= 0.5; + angmom[ibody][1] *= 0.5; + angmom[ibody][2] *= 0.5; + + MathExtra::angmom_to_omega (angmom[ibody],ex_space[ibody],ey_space[ibody], + ez_space[ibody],inertia[ibody],omega[ibody]); + } + + // virial setup before call to set_xv + + if (vflag) v_setup(vflag); + else evflag = 0; + + // set coords/orient and velocity/rotation of atoms in rigid bodies + // from quarternion and omega + + set_xv(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidMeso::final_integrate () { + int i,ibody; + double dtfm,xy,xz,yz; + double mbody[3],tbody[3],fquat[4]; + + double dtf2 = dtf * 2.0; + + // late calculation of forces and torques (if requested) + + if (!earlyflag) compute_forces_and_torques(); + + // update vcm and angmom + // fflag,tflag = 0 for some dimensions in 2d + + for (ibody = 0; ibody < nbody; ibody++) { + + // update vcm by 1/2 step + + dtfm = dtf / masstotal[ibody]; + + vcm[ibody][0] += dtfm * fcm[ibody][0] * fflag[ibody][0]; + vcm[ibody][1] += dtfm * fcm[ibody][1] * fflag[ibody][1]; + vcm[ibody][2] += dtfm * fcm[ibody][2] * fflag[ibody][2]; + + // update conjqm, then transform to angmom, set velocity again + // virial is already setup from initial_integrate + + torque[ibody][0] *= tflag[ibody][0]; + torque[ibody][1] *= tflag[ibody][1]; + torque[ibody][2] *= tflag[ibody][2]; + + MathExtra::transpose_matvec (ex_space[ibody],ey_space[ibody], + ez_space[ibody],torque[ibody],tbody); + MathExtra::quatvec (quat[ibody],tbody,fquat); + + conjqm[ibody][0] += dtf2 * fquat[0]; + conjqm[ibody][1] += dtf2 * fquat[1]; + conjqm[ibody][2] += dtf2 * fquat[2]; + conjqm[ibody][3] += dtf2 * fquat[3]; + + MathExtra::invquatvec (quat[ibody],conjqm[ibody],mbody); + MathExtra::matvec (ex_space[ibody],ey_space[ibody],ez_space[ibody], + mbody,angmom[ibody]); + + angmom[ibody][0] *= 0.5; + angmom[ibody][1] *= 0.5; + angmom[ibody][2] *= 0.5; + + MathExtra::angmom_to_omega (angmom[ibody],ex_space[ibody],ey_space[ibody], + ez_space[ibody],inertia[ibody],omega[ibody]); + } + + // set velocity/rotation of atoms in rigid bodies + // virial is already setup from initial_integrate + + set_v(); +} + +/* ---------------------------------------------------------------------- + set space-frame coords and velocity of each atom in each rigid body + set orientation and rotation of extended particles + x = Q displace + Xcm, mapped back to periodic box + v = Vcm + (W cross (x - Xcm)) +------------------------------------------------------------------------- */ + +void FixRigidMeso::set_xv () { + int ibody; + int xbox,ybox,zbox; + double x0,x1,x2,v0,v1,v2,fc0,fc1,fc2,massone; + double xy,xz,yz; + double ione[3],exone[3],eyone[3],ezone[3],vr[6],p[3][3]; + + double **x = atom->x; + double **v = atom->v; + double **vest = atom->vest; + double **f = atom->f; + double *e = atom->e; + double *de = atom->de; + double *rho = atom->rho; + double *drho = atom->drho; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int nlocal = atom->nlocal; + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + + if (triclinic) { + xy = domain->xy; + xz = domain->xz; + yz = domain->yz; + } + + // set x and v of each atom + + for (int i = 0; i < nlocal; i++) { + if (body[i] < 0) continue; + + // half-step update of particle internal energy and density + e[i] += dtf * de[i]; + rho[i] += dtf * drho[i]; + + ibody = body[i]; + + xbox = (xcmimage[i] & IMGMASK) - IMGMAX; + ybox = (xcmimage[i] >> IMGBITS & IMGMASK) - IMGMAX; + zbox = (xcmimage[i] >> IMG2BITS) - IMGMAX; + + // save old positions and velocities for virial + + if (evflag) { + if (triclinic == 0) { + x0 = x[i][0] + xbox*xprd; + x1 = x[i][1] + ybox*yprd; + x2 = x[i][2] + zbox*zprd; + } else { + x0 = x[i][0] + xbox*xprd + ybox*xy + zbox*xz; + x1 = x[i][1] + ybox*yprd + zbox*yz; + x2 = x[i][2] + zbox*zprd; + } + } + + v0 = v[i][0]; + v1 = v[i][1]; + v2 = v[i][2]; + + // x = displacement from center-of-mass, based on body orientation + // v = vcm + omega around center-of-mass + // vest = 2*v - v_old + + MathExtra::matvec (ex_space[ibody],ey_space[ibody], + ez_space[ibody],displace[i],x[i]); + + v[i][0] = omega[ibody][1]*x[i][2] - omega[ibody][2]*x[i][1] + + vcm[ibody][0]; + v[i][1] = omega[ibody][2]*x[i][0] - omega[ibody][0]*x[i][2] + + vcm[ibody][1]; + v[i][2] = omega[ibody][0]*x[i][1] - omega[ibody][1]*x[i][0] + + vcm[ibody][2]; + + vest[i][0] = 2*v[i][0] - v0; + vest[i][1] = 2*v[i][1] - v1; + vest[i][2] = 2*v[i][2] - v2; + + // add center of mass to displacement + // map back into periodic box via xbox,ybox,zbox + // for triclinic, add in box tilt factors as well + + if (triclinic == 0) { + x[i][0] += xcm[ibody][0] - xbox*xprd; + x[i][1] += xcm[ibody][1] - ybox*yprd; + x[i][2] += xcm[ibody][2] - zbox*zprd; + } else { + x[i][0] += xcm[ibody][0] - xbox*xprd - ybox*xy - zbox*xz; + x[i][1] += xcm[ibody][1] - ybox*yprd - zbox*yz; + x[i][2] += xcm[ibody][2] - zbox*zprd; + } + + // virial = unwrapped coords dotted into body constraint force + // body constraint force = implied force due to v change minus f external + // assume f does not include forces internal to body + // 1/2 factor b/c final_integrate contributes other half + // assume per-atom contribution is due to constraint force on that atom + + if (evflag) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + fc0 = massone*(v[i][0] - v0)/dtf - f[i][0]; + fc1 = massone*(v[i][1] - v1)/dtf - f[i][1]; + fc2 = massone*(v[i][2] - v2)/dtf - f[i][2]; + + vr[0] = 0.5*x0*fc0; + vr[1] = 0.5*x1*fc1; + vr[2] = 0.5*x2*fc2; + vr[3] = 0.5*x0*fc1; + vr[4] = 0.5*x0*fc2; + vr[5] = 0.5*x1*fc2; + + v_tally(1,&i,1.0,vr); + } + } + + // set orientation, omega, angmom of each extended particle + + if (extended) { + // TBD + } +} + +/* ---------------------------------------------------------------------- + set space-frame velocity of each atom in a rigid body + set omega and angmom of extended particles + v = Vcm + (W cross (x - Xcm)) +------------------------------------------------------------------------- */ + +void FixRigidMeso::set_v () { + int xbox,ybox,zbox; + double x0,x1,x2,v0,v1,v2,fc0,fc1,fc2,massone; + double xy,xz,yz; + double ione[3],exone[3],eyone[3],ezone[3],delta[3],vr[6]; + + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double *e = atom->e; + double *de = atom->de; + double *rho = atom->rho; + double *drho = atom->drho; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int nlocal = atom->nlocal; + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + if (triclinic) { + xy = domain->xy; + xz = domain->xz; + yz = domain->yz; + } + + // set v of each atom + + for (int i = 0; i < nlocal; i++) { + if (body[i] < 0) continue; + + // half-step update of particle internal energy and density + e[i] += dtf * de[i]; + rho[i] += dtf * drho[i]; + + const int ibody = body[i]; + + MathExtra::matvec (ex_space[ibody],ey_space[ibody], + ez_space[ibody],displace[i],delta); + + // save old velocities for virial + + if (evflag) { + v0 = v[i][0]; + v1 = v[i][1]; + v2 = v[i][2]; + } + + v[i][0] = omega[ibody][1]*delta[2] - omega[ibody][2]*delta[1] + + vcm[ibody][0]; + v[i][1] = omega[ibody][2]*delta[0] - omega[ibody][0]*delta[2] + + vcm[ibody][1]; + v[i][2] = omega[ibody][0]*delta[1] - omega[ibody][1]*delta[0] + + vcm[ibody][2]; + + // virial = unwrapped coords dotted into body constraint force + // body constraint force = implied force due to v change minus f external + // assume f does not include forces internal to body + // 1/2 factor b/c initial_integrate contributes other half + // assume per-atom contribution is due to constraint force on that atom + + if (evflag) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + fc0 = massone*(v[i][0] - v0)/dtf - f[i][0]; + fc1 = massone*(v[i][1] - v1)/dtf - f[i][1]; + fc2 = massone*(v[i][2] - v2)/dtf - f[i][2]; + + xbox = (xcmimage[i] & IMGMASK) - IMGMAX; + ybox = (xcmimage[i] >> IMGBITS & IMGMASK) - IMGMAX; + zbox = (xcmimage[i] >> IMG2BITS) - IMGMAX; + + if (triclinic == 0) { + x0 = x[i][0] + xbox*xprd; + x1 = x[i][1] + ybox*yprd; + x2 = x[i][2] + zbox*zprd; + } else { + x0 = x[i][0] + xbox*xprd + ybox*xy + zbox*xz; + x1 = x[i][1] + ybox*yprd + zbox*yz; + x2 = x[i][2] + zbox*zprd; + } + + vr[0] = 0.5*x0*fc0; + vr[1] = 0.5*x1*fc1; + vr[2] = 0.5*x2*fc2; + vr[3] = 0.5*x0*fc1; + vr[4] = 0.5*x0*fc2; + vr[5] = 0.5*x1*fc2; + + v_tally(1,&i,1.0,vr); + } + } + + // set omega, angmom of each extended particle + + if (extended) { + // TBD + } +} + +/* ---------------------------------------------------------------------- + return attributes of a rigid body + 19 values per body + xcm = 0,1,2; vcm = 3,4,5; fcm = 6,7,8; + quat = 9,10,11,12; omega = 13,14,15; torque = 16,17,18; + inertia = 19,20,21; angmom = 22,23,24; + image = 25,26,27 +------------------------------------------------------------------------- */ + +double FixRigidMeso::compute_array (int i, int j) { + if (j < 3) return xcm[i][j]; + if (j < 6) return vcm[i][j-3]; + if (j < 9) return fcm[i][j-6]; + if (j < 13) return quat[i][j-9]; + if (j < 16) return omega[i][j-13]; + if (j < 19) return torque[i][j-16]; + if (j < 22) return inertia[i][j-19]; + if (j < 25) return angmom[i][j-22]; + if (j == 25) return (imagebody[i] & IMGMASK) - IMGMAX; + if (j == 26) return (imagebody[i] >> IMGBITS & IMGMASK) - IMGMAX; + return (imagebody[i] >> IMG2BITS) - IMGMAX; +} diff --git a/src/USER-SDPD/fix_rigid_meso.h b/src/USER-SDPD/fix_rigid_meso.h new file mode 100644 index 0000000000..ac73a9503b --- /dev/null +++ b/src/USER-SDPD/fix_rigid_meso.h @@ -0,0 +1,69 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(rigid/meso,FixRigidMeso) + +#else + +#ifndef LMP_FIX_RIGID_MESO_H +#define LMP_FIX_RIGID_MESO_H + +#include "fix_rigid.h" + +namespace LAMMPS_NS { + +class FixRigidMeso : public FixRigid { + public: + FixRigidMeso (class LAMMPS *, int, char **); + ~FixRigidMeso (); + int setmask (); + void setup (int); + void initial_integrate (int); + void final_integrate (); + double compute_scalar () {} + double compute_array (int, int); + + protected: + void set_xv (); + void set_v (); + double **conjqm; // conjugate quaternion momentum +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: fix rigid/meso command requires atom_style with both energy and density + +You should use atom_style meso with this fix + +E: Can not use thermostat with fix rigid/meso + +Self-explanatory + +E: Can not use barostat with fix rigid/meso + +Self-explanatory + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp new file mode 100644 index 0000000000..d8c32e7f6c --- /dev/null +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -0,0 +1,321 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. + ------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: + Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com + + references: Espanol and Revenga, Phys Rev E 67, 026705 (2003) +------------------------------------------------------------------------- */ + +#include +#include +#include "pair_sdpd_taitwater_isothermal.h" +#include "atom.h" +#include "force.h" +#include "comm.h" +#include "neigh_list.h" +#include "memory.h" +#include "error.h" +#include "domain.h" +#include "update.h" +#ifndef USE_ZEST +#include "random_mars.h" +#endif + +using namespace LAMMPS_NS; + +static const double sqrt_2_inv = std::sqrt(0.5); + +/* ---------------------------------------------------------------------- */ + +PairSDPDTaitwaterIsothermal::PairSDPDTaitwaterIsothermal (LAMMPS *lmp) +: Pair (lmp) { + restartinfo = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairSDPDTaitwaterIsothermal::~PairSDPDTaitwaterIsothermal () { + if (allocated) { + memory->destroy (setflag); + memory->destroy (cutsq); + + memory->destroy (cut); + memory->destroy (rho0); + memory->destroy (soundspeed); + memory->destroy (B); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairSDPDTaitwaterIsothermal::compute (int eflag, int vflag) { + int i, j, ii, jj, inum, jnum, itype, jtype; + double xtmp, ytmp, ztmp, delx, dely, delz, fpair; + + int *ilist, *jlist, *numneigh, **firstneigh; + double vxtmp, vytmp, vztmp, imass, jmass, fi, fj, fvisc; + double h, ih, ihsq, velx, vely, velz; + double rsq, tmp, wfd, delVdotDelR, deltaE; + double prefactor, wiener[3][3], f_random[3]; + + if (eflag || vflag) ev_setup (eflag, vflag); + else evflag = vflag_fdotr = 0; + + double **v = atom->vest; + double **x = atom->x; + double **f = atom->f; + double *rho = atom->rho; + double *mass = atom->mass; + double *de = atom->de; + double *drho = atom->drho; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + int dimension = domain->dimension; + double dtinv = 1.0 / update->dt; + double kBoltzmann = force->boltz; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + vxtmp = v[i][0]; + vytmp = v[i][1]; + vztmp = v[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + imass = mass[itype]; + + // compute pressure of atom i with Tait EOS + tmp = rho[i] / rho0[itype]; + fi = tmp * tmp * tmp; + fi = B[itype] * (fi * fi * tmp - 1.0) / (rho[i] * rho[i]); + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + jmass = mass[jtype]; + + if (rsq < cutsq[itype][jtype]) { + h = cut[itype][jtype]; + ih = 1.0 / h; + ihsq = ih * ih; + + double r = sqrt (rsq); + wfd = h - r; + if (dimension == 3) { + // Lucy Kernel, 3d + // Note that wfd, the derivative of the weight function with respect to r, + // is lacking a factor of r. + // The missing factor of r is recovered by + // (1) using delV . delX instead of delV . (delX/r) and + // (2) using f[i][0] += delx * fpair instead of f[i][0] += (delx/r) * fpair + wfd = -25.066903536973515383e0 * wfd * wfd * ihsq * ihsq * ihsq * ih; + } else { + // Lucy Kernel, 2d + wfd = -19.098593171027440292e0 * wfd * wfd * ihsq * ihsq * ihsq; + } + + // compute pressure of atom j with Tait EOS + tmp = rho[j] / rho0[jtype]; + fj = tmp * tmp * tmp; + fj = B[jtype] * (fj * fj * tmp - 1.0) / (rho[j] * rho[j]); + + velx=vxtmp - v[j][0]; + vely=vytmp - v[j][1]; + velz=vztmp - v[j][2]; + + // dot product of velocity delta and distance vector + delVdotDelR = delx * velx + dely * vely + delz * velz; + + // Espanol Viscosity (Espanol, 2003) + + fvisc = (5. / 3.) * viscosity * imass * jmass * wfd / (rho[i]*rho[j]); + + // total pair force + fpair = -imass * jmass * (fi + fj) * wfd; + + // random force calculation + // independent increments of a Wiener process matrix +#ifdef USE_ZEST + wiener[0][0] = gaussian (generator); + wiener[1][1] = gaussian (generator); + wiener[2][2] = gaussian (generator); + + wiener[0][1] = wiener[1][0] = sqrt_2_inv * gaussian (generator); + wiener[0][2] = wiener[2][0] = sqrt_2_inv * gaussian (generator); + wiener[1][2] = wiener[2][1] = sqrt_2_inv * gaussian (generator); +#else + wiener[0][0] = random->gaussian (); + wiener[1][1] = random->gaussian (); + wiener[2][2] = random->gaussian (); + + wiener[0][1] = wiener[1][0] = sqrt_2_inv * random->gaussian (); + wiener[0][2] = wiener[2][0] = sqrt_2_inv * random->gaussian (); + wiener[1][2] = wiener[2][1] = sqrt_2_inv * random->gaussian (); +#endif + + prefactor = sqrt (-4. * kBoltzmann*temperature * fvisc * dtinv) / r; + + f_random[0] = prefactor * (wiener[0][0]*delx + wiener[0][1]*dely + wiener[0][2]*delz); + f_random[1] = prefactor * (wiener[1][0]*delx + wiener[1][1]*dely + wiener[1][2]*delz); + f_random[2] = prefactor * (wiener[2][0]*delx + wiener[2][1]*dely + wiener[2][2]*delz); + + f[i][0] += delx * fpair + (velx + delx * delVdotDelR / rsq) * fvisc + f_random[0]; + f[i][1] += dely * fpair + (vely + dely * delVdotDelR / rsq) * fvisc + f_random[1]; + f[i][2] += delz * fpair + (velz + delz * delVdotDelR / rsq) * fvisc + f_random[2]; + + // and change in density + drho[i] += jmass * delVdotDelR * wfd; + + if (newton_pair || j < nlocal) { + f[j][0] -= delx * fpair + (velx + delx * delVdotDelR / rsq) * fvisc + f_random[0]; + f[j][1] -= dely * fpair + (vely + dely * delVdotDelR / rsq) * fvisc + f_random[1]; + f[j][2] -= delz * fpair + (velz + delz * delVdotDelR / rsq) * fvisc + f_random[2]; + drho[j] += imass * delVdotDelR * wfd; + } + + if (evflag) + ev_tally (i, j, nlocal, newton_pair, 0.0, 0.0, fpair, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute (); +} + +/* ---------------------------------------------------------------------- + allocate all arrays + ------------------------------------------------------------------------- */ + +void PairSDPDTaitwaterIsothermal::allocate () { + allocated = 1; + int n = atom->ntypes; + + memory->create (setflag, n + 1, n + 1, "pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create (cutsq, n + 1, n + 1, "pair:cutsq"); + + memory->create (rho0, n + 1, "pair:rho0"); + memory->create (soundspeed, n + 1, "pair:soundspeed"); + memory->create (B, n + 1, "pair:B"); + memory->create (cut, n + 1, n + 1, "pair:cut"); +} + +/* ---------------------------------------------------------------------- + global settings + ------------------------------------------------------------------------- */ + +void PairSDPDTaitwaterIsothermal::settings (int narg, char **arg) { + if (narg != 2 && narg != 3) error->all (FLERR, "Illegal number of setting " + "arguments for pair_style sdpd/taitwater/morris/isothermal"); + + temperature = force->numeric (FLERR, arg[0]); + viscosity = force->numeric (FLERR, arg[1]); + + if (temperature <= 0) error->all (FLERR, "Temperature must be positive"); + if (viscosity <= 0) error->all (FLERR, "Viscosity must be positive"); + + // seed is immune to underflow/overflow because it is unsigned + seed = comm->nprocs + comm->me + atom->nlocal; + if (narg == 3) seed += force->inumeric (FLERR, arg[2]); +#ifdef USE_ZEST + generator.seed (seed); +#else + random = new RanMars (lmp, seed); +#endif +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs + ------------------------------------------------------------------------- */ + +void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { + if (narg != 5) error->all (FLERR, "Incorrect args for pair_style " + "sph/taitwater/morris coefficients"); + + if (!allocated) allocate(); + + int ilo, ihi, jlo, jhi; + force->bounds (FLERR, arg[0], atom->ntypes, ilo, ihi); + force->bounds (FLERR, arg[1], atom->ntypes, jlo, jhi); + + double rho0_one = force->numeric (FLERR,arg[2]); + double soundspeed_one = force->numeric (FLERR,arg[3]); + double cut_one = force->numeric (FLERR,arg[4]); + double B_one = soundspeed_one * soundspeed_one * rho0_one / 7.0; + + if (rho0_one <= 0) error->all (FLERR, "Density must be positive"); + if (soundspeed_one <= 0) error->all (FLERR, "Sound speed must be positive"); + if (cut_one <= 0) error->all (FLERR, "Cutoff must be positive"); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + rho0[i] = rho0_one; + soundspeed[i] = soundspeed_one; + B[i] = B_one; + for (int j = MAX(jlo,i); j <= jhi; j++) { + cut[i][j] = cut_one; + + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) + error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i + ------------------------------------------------------------------------- */ + +double PairSDPDTaitwaterIsothermal::init_one (int i, int j) { + if (setflag[i][j] == 0) + error->all(FLERR,"Not all pair sph/taitwater/morris coeffs are not set"); + + cut[j][i] = cut[i][j]; + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- */ + +double PairSDPDTaitwaterIsothermal::single (int /*i*/, int /*j*/, int /*itype*/, + int /*jtype*/, double /*rsq*/, double /*factor_coul*/, + double /*factor_lj*/, double &fforce) { + fforce = 0.0; + + return 0.0; +} diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h new file mode 100644 index 0000000000..afa21c4132 --- /dev/null +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(sdpd/taitwater/isothermal,PairSDPDTaitwaterIsothermal) + +#else + +#ifndef LMP_PAIR_SDPD_TAITWATER_MORRIS_ISOTHERMAL_H +#define LMP_PAIR_SDPD_TAITWATER_MORRIS_ISOTHERMAL_H + +#include "pair.h" +#ifdef USE_ZEST +#include +#include "zest.hpp" +#endif + +namespace LAMMPS_NS { + +class PairSDPDTaitwaterIsothermal : public Pair { + public: + PairSDPDTaitwaterIsothermal (class LAMMPS *); + virtual ~PairSDPDTaitwaterIsothermal (); + virtual void compute (int, int); + void settings (int, char **); + void coeff (int, char **); + virtual double init_one (int, int); + virtual double single (int, int, int, int, double, double, double, double &); + + protected: + double viscosity, temperature; + double *rho0, *soundspeed, *B; + double **cut; + + void allocate (); + + unsigned int seed; +#ifdef USE_ZEST + std::mt19937_64 generator; + Ziggurat gaussian; +#else + class RanMars *random; +#endif +}; + +} + +#endif +#endif From e70a9b0f2634582668cfcec452ad5d51d3297f99 Mon Sep 17 00:00:00 2001 From: Morteza Jalalvand Date: Tue, 30 Oct 2018 19:35:22 +0330 Subject: [PATCH 039/273] updated CMakeLists to handle the optional dependency of USER-SDPD --- cmake/CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a334ba0368..52277f558a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -876,6 +876,20 @@ if(PKG_USER-OMP) include_directories(${USER-OMP_SOURCES_DIR}) endif() +# Fix rigid/meso requires RIGID to be installed +if(PKG_USER-SDPD) + set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) + + get_property(hlist GLOBAL PROPERTY FIX) + if(NOT PKG_RIGID) + list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) + list(REMOVE_ITEM LIB_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) + endif() + set_property(GLOBAL PROPERTY FIX "${hlist}") + + include_directories(${USER-SDPD_SOURCES_DIR}) +endif() + if(PKG_KOKKOS) set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) From e3b89b60dc424759267cdef92d272f775106fcc2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 30 Oct 2018 20:43:20 -0400 Subject: [PATCH 040/273] add checksum support for downloaded tar archives. upgrade to v2.4.3 --- lib/plumed/Install.py | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 6613add4f3..73c4e24bae 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -4,34 +4,40 @@ # used to automate the steps described in the README file in this dir from __future__ import print_function -import sys,os,re,subprocess +import sys,os,re,subprocess,hashlib # help message help = """ Syntax from src dir: make lib-plumed args="-b" - or: make lib-plumed args="-b -v 2.4.2" -Syntax from lib dir: python Install.py -b -v 2.4.2 + or: make lib-plumed args="-b -v 2.4.3" + or: make lib-plumed args="-p /usr/local/plumed2-2.4.3" + +Syntax from lib dir: python Install.py -b -v 2.4.3 or: python Install.py -b - or: python Install.py -p /usr/local/plumed-2.4.2 + or: python Install.py -p /usr/local/plumed2-2.4.3 specify one or more options, order does not matter -b = download and build the plumed2 library -p = specify folder of existing plumed2 installation - -v = set version of plumed2 to download and build (default: 2.4.2) + -v = set version of plumed2 to download and build (default: 2.4.3) Example: make lib-plumed args="-b" # download/build in lib/plumed/plumed2 -make lib-plumed args="-p $HOME/plumed-2.4.2" # use existing Plumed2 installation in $HOME/plumed-2.4.2 +make lib-plumed args="-p $HOME/plumed-2.4.3" # use existing Plumed2 installation in $HOME/plumed-2.4.3 """ # settings -version = "2.4.2" +version = "2.4.3" -# Add known checksums for different PLUMED versions and use them to validate the download +# known checksums for different PLUMED versions. used to validate the download. +checksums = { \ + '2.4.2' : '0f66f24b4c763ae8b2f39574113e9935', \ + '2.4.3' : 'dc38de0ffd59d13950d8f1ef1ce05574', \ + } # print error message or help def error(str=None): @@ -85,7 +91,16 @@ def geturl(url,fname): error("Failed to download source code with 'curl' or 'wget'") return -# Here add function to check fsum +def checkmd5sum(md5sum,fname): + with open(fname,'rb') as fh: + m = hashlib.md5() + while True: + data = fh.read(81920) + if not data: + break + m.update(data) + fh.close() + return m.hexdigest() == md5sum # parse args @@ -134,9 +149,15 @@ if buildflag: url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version filename = "v%s.tar.gz" %version print("Downloading plumed ...") - geturl(url,filename) + geturl(url,filename) - print("Unpacking plumed tarball ...") + # verify downloaded archive integrity via md5 checksum, if known. + if version in checksums: + if not checkmd5sum(checksums[version],filename): + error("Checksum for plumed2 library does not match") + + + print("Unpacking plumed2 tarball ...") if os.path.exists("%s/plumed2-%s" % (homepath,version)): cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From 50b99c8450ff35761cf41a856d31ebacbf51da70 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 31 Oct 2018 00:19:06 -0400 Subject: [PATCH 041/273] silence compiler warnings about unused arguments --- src/USER-PLUMED/fix_plumed.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index f0582b184a..7c05a02335 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -262,7 +262,7 @@ void FixPlumed::min_setup(int vflag) post_force(vflag); } -void FixPlumed::post_force(int vflag) +void FixPlumed::post_force(int /* vflag */) { // Check tag is enabled if( !atom->tag_enable ) error->all(FLERR,"to run PLUMED you must have tag_enable==1"); @@ -417,7 +417,7 @@ void FixPlumed::post_force(int vflag) c_press->addstep(update->ntimestep+1); } -void FixPlumed::post_force_respa(int vflag, int ilevel, int iloop) +void FixPlumed::post_force_respa(int vflag, int ilevel, int /* iloop */) { if (ilevel == nlevels_respa-1) post_force(vflag); } From 5821a5ecc8e87bdd212f3d16e12e4f3e2759fc90 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 1 Nov 2018 01:04:45 -0600 Subject: [PATCH 042/273] bond/react: custom group with stabilization option --- doc/src/fix_bond_react.txt | 32 +++--- src/USER-MISC/fix_bond_react.cpp | 161 +++++++++++++++++++------------ src/USER-MISC/fix_bond_react.h | 3 + 3 files changed, 124 insertions(+), 72 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index f806da3324..b5ac87327d 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -102,19 +102,27 @@ involved in any new reactions. The {xmax} value keyword should typically be set to the maximum distance that non-reacting atoms move during the simulation. -The group-ID set using the {stabilization} keyword should be a -previously unused group-ID. It cannot be specified as 'all'. The fix -bond/react command creates a "dynamic group"_group.html of this name -that includes all non-reacting atoms. This dynamic group-ID should -then be used by a subsequent system-wide time integrator such as nvt, -npt, or nve, as shown in the second example above. It is currently -necessary to place the time integration command after the fix -bond/react command due to the internal dynamic grouping performed by -fix bond/react. +The group-ID set using the {stabilization} keyword can be an existing +static group or a previously-unused group-ID. It cannot be specified +as 'all'. If the group-ID is previously unused, fix bond/react command +creates a "dynamic group"_group.html of this name that is initialized +to include all atoms. If the group-ID is that of an existing static +group, the group is converted into a dynamic group, whose atoms are +limited to those belonging to the original static group. In either +case, this dynamic group-ID should then be used by a subsequent +system-wide time integrator such as nvt, npt, or nve, as shown in the +second example above. The time integration command should be placed +after the fix bond/react command due to the internal dynamic grouping +performed by fix bond/react. By specifying an existing group, you may +thermostat non-reacting parts of your system separately. -NOTE: The internally created group currently applies to all atoms in -the system, i.e. you should generally not have a separate thermostat -which acts on the 'all' group. +NOTE: If the group-ID is an existing static group, react-group-IDs +should also be specified as this group, or a subset. + +NOTE: If the group-ID is previously unused, the internally created +group applies to all atoms in the system, i.e. you should generally +not have a separate thermostat which acts on the 'all' group, or any +other group. The following comments pertain to each {react} argument: diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 705bb8ff70..1124d359ce 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -354,6 +354,9 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : id_fix1 = NULL; id_fix2 = NULL; + id_fix3 = NULL; + statted_id = NULL; + custom_exclude_flag = 0; } /* ---------------------------------------------------------------------- */ @@ -426,11 +429,17 @@ FixBondReact::~FixBondReact() // check nfix in case all fixes have already been deleted if (id_fix1 == NULL && modify->nfix) modify->delete_fix(id_fix1); delete [] id_fix1; + + if (custom_exclude_flag == 0) { + if (id_fix3 == NULL && modify->nfix) modify->delete_fix(id_fix3); + delete [] id_fix3; + } } if (id_fix2 == NULL && modify->nfix) modify->delete_fix(id_fix2); delete [] id_fix2; + delete [] statted_id; delete [] guess_branch; delete [] pioneer_count; } @@ -461,21 +470,20 @@ void FixBondReact::post_constructor() int ifix = modify->find_fix(id_fix2); if (ifix == -1) { - char **newarg = new char*[8]; + char **newarg = new char*[7]; newarg[0] = (char *) "bond_react_props_internal"; newarg[1] = (char *) "all"; // group ID is ignored newarg[2] = (char *) "property/atom"; newarg[3] = (char *) "i_limit_tags"; - newarg[4] = (char *) "i_statted_tags"; - newarg[5] = (char *) "i_react_tags"; - newarg[6] = (char *) "ghost"; - newarg[7] = (char *) "yes"; - modify->add_fix(8,newarg); - fix2 = modify->fix[modify->nfix-1]; + newarg[4] = (char *) "i_react_tags"; + newarg[5] = (char *) "ghost"; + newarg[6] = (char *) "yes"; + modify->add_fix(7,newarg); delete [] newarg; } // create master_group if not already existing + // NOTE: limit_tags and react_tags automaticaly intitialized to zero (unless read from restart) if (group->find(master_group) == -1) { group->find_or_create(master_group); char **newarg; @@ -489,33 +497,100 @@ void FixBondReact::post_constructor() delete [] newarg; } - // on to statted_tags (system-wide thermostat) - // intialize per-atom statted_flags to 1 - // (only if not already initialized by restart) - // NOTE: limit_tags and react_tags automaticaly intitialized to zero (unless read from restart) - if (fix2->restart_reset != 1) { - int flag; - int index = atom->find_custom("statted_tags",flag); - int *i_statted_tags = atom->ivector[index]; - - for (int i = 0; i < atom->nlocal; i++) - i_statted_tags[i] = 1; - } - if (stabilization_flag == 1) { - // create exclude_group if not already existing - if (group->find(exclude_group) == -1) { + int igroup = group->find(exclude_group); + // create exclude_group if not already existing, or use as parent group if static + if (igroup == -1 || group->dynamic[igroup] == 0) { + // create stabilization per-atom property + len = strlen("bond_react_stabilization_internal") + 1; + id_fix3 = new char[len]; + strcpy(id_fix3,"bond_react_stabilization_internal"); + + ifix = modify->find_fix(id_fix3); + if (ifix == -1) { + char **newarg = new char*[6]; + newarg[0] = (char *) "bond_react_stabilization_internal"; + newarg[1] = (char *) "all"; // group ID is ignored + newarg[2] = (char *) "property/atom"; + newarg[3] = (char *) "i_statted_tags"; + newarg[4] = (char *) "ghost"; + newarg[5] = (char *) "yes"; + modify->add_fix(6,newarg); + fix2 = modify->fix[modify->nfix-1]; + delete [] newarg; + } + + len = strlen("statted_tags") + 1; + statted_id = new char[len]; + strcpy(statted_id,"statted_tags"); + + // if static group exists, duplicate it, use duplicate as parent group + // original will be converted into dynamic per-atom property group + if (igroup != -1) { + char **newarg; + newarg = new char*[3]; + newarg[0] = (char *) "exclude_PARENT_group"; + newarg[1] = (char *) "union"; + newarg[2] = exclude_group; + group->assign(3,newarg); + delete [] newarg; + } + group->find_or_create(exclude_group); char **newarg; newarg = new char*[5]; newarg[0] = exclude_group; newarg[1] = (char *) "dynamic"; - newarg[2] = (char *) "all"; + if (igroup == -1) newarg[2] = (char *) "all"; + else newarg[2] = (char *) "exclude_PARENT_group"; newarg[3] = (char *) "property"; newarg[4] = (char *) "statted_tags"; group->assign(5,newarg); delete [] newarg; - } + + // on to statted_tags (system-wide thermostat) + // intialize per-atom statted_flags to 1 + // (only if not already initialized by restart) + if (fix2->restart_reset != 1) { + int flag; + int index = atom->find_custom("statted_tags",flag); + int *i_statted_tags = atom->ivector[index]; + + for (int i = 0; i < atom->nlocal; i++) + i_statted_tags[i] = 1; + } + } else { + // sleeping code, for future capabilities + custom_exclude_flag = 1; + // first we have to find correct fix group reference + int n = strlen("GROUP_") + strlen(exclude_group) + 1; + char *fix_group = new char[n]; + strcpy(fix_group,"GROUP_"); + strcat(fix_group,exclude_group); + int ifix = modify->find_fix(fix_group); + Fix *fix = modify->fix[ifix]; + delete [] fix_group; + + // this returns names of corresponding property + int unused; + char * idprop; + idprop = (char *) fix->extract("property",unused); + if (idprop == NULL) + error->all(FLERR,"Exclude group must be a per-atom property group"); + + len = strlen(idprop) + 1; + statted_id = new char[len]; + strcpy(statted_id,idprop); + + // intialize per-atom statted_tags to 1 + // need to correct for smooth restarts + //int flag; + //int index = atom->find_custom(statted_id,flag); + //int *i_statted_tags = atom->ivector[index]; + //for (int i = 0; i < atom->nlocal; i++) + // i_statted_tags[i] = 1; + } + // let's create a new nve/limit fix to limit newly reacted atoms len = strlen("bond_react_MASTER_nve_limit") + 1; @@ -534,40 +609,6 @@ void FixBondReact::post_constructor() fix1 = modify->fix[modify->nfix-1]; delete [] newarg; } - - } - - // currently must redefine dynamic groups so they are updated at proper time - // -> should double check as to why - - int must_redefine_groups = 1; - - if (must_redefine_groups) { - group->find_or_create(master_group); - char **newarg; - newarg = new char*[5]; - newarg[0] = master_group; - newarg[1] = (char *) "dynamic"; - newarg[2] = (char *) "all"; - newarg[3] = (char *) "property"; - newarg[4] = (char *) "limit_tags"; - group->assign(5,newarg); - delete [] newarg; - } - - if (stabilization_flag == 1) { - if (must_redefine_groups) { - group->find_or_create(exclude_group); - char **newarg; - newarg = new char*[5]; - newarg[0] = exclude_group; - newarg[1] = (char *) "dynamic"; - newarg[2] = (char *) "all"; - newarg[3] = (char *) "property"; - newarg[4] = (char *) "statted_tags"; - group->assign(5,newarg); - delete [] newarg; - } } } @@ -1812,7 +1853,7 @@ void FixBondReact::limit_bond(int limit_bond_mode) int index1 = atom->find_custom("limit_tags",flag); int *i_limit_tags = atom->ivector[index1]; - int index2 = atom->find_custom("statted_tags",flag); + int index2 = atom->find_custom(statted_id,flag); int *i_statted_tags = atom->ivector[index2]; int index3 = atom->find_custom("react_tags",flag); @@ -1842,7 +1883,7 @@ void FixBondReact::unlimit_bond() int index1 = atom->find_custom("limit_tags",flag); int *i_limit_tags = atom->ivector[index1]; - int index2 = atom->find_custom("statted_tags",flag); + int index2 = atom->find_custom(statted_id,flag); int *i_statted_tags = atom->ivector[index2]; int index3 = atom->find_custom("react_tags",flag); diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index b960ec8e73..472a02be1a 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -57,6 +57,7 @@ class FixBondReact : public Fix { double **cutsq,*fraction; tagint lastcheck; int stabilization_flag; + int custom_exclude_flag; int *stabilize_steps_flag; int *update_edges_flag; int status; @@ -88,6 +89,8 @@ class FixBondReact : public Fix { char *nve_limit_xmax; // indicates max distance allowed to move when relaxing char *id_fix1; // id of internally created fix nve/limit char *id_fix2; // id of internally created fix per-atom properties + char *id_fix3; // id of internally created 'stabilization group' per-atom property fix + char *statted_id; // name of 'stabilization group' per-atom property char *master_group; // group containing relaxing atoms from all fix rxns char *exclude_group; // group for system-wide thermostat From b67e54dd7dced4c5bd80db0d0ec69fefcec446d6 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 1 Nov 2018 01:09:52 -0600 Subject: [PATCH 043/273] reciprocal 'related commands' --- doc/src/fix_bond_break.txt | 4 ++-- doc/src/fix_bond_create.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_bond_break.txt b/doc/src/fix_bond_break.txt index 59fea8f45b..5927ceb4e5 100644 --- a/doc/src/fix_bond_break.txt +++ b/doc/src/fix_bond_break.txt @@ -137,8 +137,8 @@ doc page for more info. [Related commands:] "fix bond/create"_fix_bond_create.html, "fix -bond/swap"_fix_bond_swap.html, "dump local"_dump.html, -"special_bonds"_special_bonds.html +bond/react"_fix_bond_react.html, "fix bond/swap"_fix_bond_swap.html, +"dump local"_dump.html, "special_bonds"_special_bonds.html [Default:] diff --git a/doc/src/fix_bond_create.txt b/doc/src/fix_bond_create.txt index 02655577fd..de1a9f93f1 100644 --- a/doc/src/fix_bond_create.txt +++ b/doc/src/fix_bond_create.txt @@ -232,8 +232,8 @@ doc page for more info. [Related commands:] "fix bond/break"_fix_bond_break.html, "fix -bond/swap"_fix_bond_swap.html, "dump local"_dump.html, -"special_bonds"_special_bonds.html +bond/react"_fix_bond_react.html, "fix bond/swap"_fix_bond_swap.html, +"dump local"_dump.html, "special_bonds"_special_bonds.html [Default:] From 0c7c344e19b1c52f6160f41c9899304ba8acbf42 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 1 Nov 2018 01:26:12 -0600 Subject: [PATCH 044/273] additional molecule templates sanity-check thanks to Sagar Patil for report --- src/USER-MISC/fix_bond_react.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 1124d359ce..abb2f9f7d8 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -279,6 +279,9 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : open(files[i]); onemol = atom->molecules[unreacted_mol[i]]; twomol = atom->molecules[reacted_mol[i]]; + if (onemol->natoms != twomol->natoms) + error->all(FLERR,"Post-reacted template must contain the same " + "number of atoms as the pre-reacted template"); get_molxspecials(); read(i); fclose(fp); From b1c50e3bbe90f1c5289b4d00306bef6e72d3b7d2 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 2 Nov 2018 19:50:49 +0000 Subject: [PATCH 045/273] Added plumed documentation in a txt file --- doc/src/fix_plumed.html | 118 ---------------------------------------- doc/src/fix_plumed.txt | 104 +++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 118 deletions(-) delete mode 100644 doc/src/fix_plumed.html create mode 100644 doc/src/fix_plumed.txt diff --git a/doc/src/fix_plumed.html b/doc/src/fix_plumed.html deleted file mode 100644 index 4342403e84..0000000000 --- a/doc/src/fix_plumed.html +++ /dev/null @@ -1,118 +0,0 @@ - -
LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Commands -
- - - - - - -
- -

fix plumed command -

-

Syntax: -

-
fix ID group-ID plumed keyword value ...
-
-
  • ID, group-ID are documented in fix command - -
  • plumed = style name of this fix command - -
  • keyword = plumedfile or outfile - -
      plumedfile arg = name of PLUMED input file to use
    -  outfile  arg = name of file on which to write the PLUMED log
    -
    - -
-

Examples: -

-
-  fix pl all plumed all plumed plumedfile plumed.dat outfile p.log 
-
-

Description: -

-

-This fix instructs LAMMPS to call the PLUMED library, which allows one -to perform various forms of trajectory analysis on the fly and to also use -methods such as umbrella sampling and metadynamics to enhance the sampling of -phase space. -

-

The documentation included here only describes the fix plumed command. This command -is LAMMPS specific whereas most of the functionality implemented in PLUMED will work with a -range of MD codes and also when PLUMED is used as a stand alone code. The full documentation -for PLUMED is available at this website -

-

The PLUMED library is developed at https://github.com/plumed/plumed2 -A detailed discussion of the code can be found in (PLUMED). -

-

There are some example scripts for using this package with LAMMPS in the -examples/USER/plumed directory. -

-
- -

The command to call PLUMED above is reasonably self explanatory. Within the input file -for lammps the user is required to specify the input file for PLUMED and a file on which -to output the PLUMED log. The user must specify both of these arguments every time -PLUMED is to be used. Furthermore, the fix plumed command should appear in the LAMMPS input -file after the relevant input paramters (e.g. the timestep) have been set. -

-

The group-ID entry is ignored. LAMMPS will always pass all the atoms to PLUMED -and there can only be one instance of the plumed fix at a time. The plumed fix communicates -the minimum amount of information required and the PLUMED supports multiple, completely -independent collective variables, multiple independent biases and multiple independent forms of analysis. -There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. -

-

The plumedfile keyword allows the user to specify the name of the PLUMED input file. -Instructions as to what should be included in a plumed input file can be found in the -documentation for PLUMED. -

-

The outfile keyword allows the user to specify the name of a file on which to output -the PLUMED log. This log file normally just parots the information that is contained in the input -file. The names of the files on which the results from the various analyses that have been performed -using PLUMED will be specified by the user in the PLUMED input file. -

-

Restart, fix_modify, output, run start/stop, minimize info: -

-

-When performing a restart of a calculation that involves PLUMED you must include a RESTART command -in the PLUMED input file as detailed in the PLUMED documentation. When the restart -command is found in the PLUMED input PLUMED will append to the files that were generated in the run -that was performed previously. Furthermore, any history dependent bias potentials that were accumulated in -previous calculations will be read in when the restart command is included in the PLUMED input. -

-

The fix_modify energy option is not supported by this fix. -

-

Nothing is computed by this fix that can be accessed by any of the -output commands within LAMMPS. All the quantities -of interest can be output by commands that are native to PLUMED, however. -

-

Restrictions: -

-

This fix is part of the USER-PLUMED package. It is only enabled if -LAMMPS was built with that package. See the Making -LAMMPS section for more info. -

-

There can only be one plumed fix active at a time. Since the interface -communicates only the minimum amount of information and since the PLUMED module -itself can handle an arbitrary number of analysis and biasing methods, this is -not a limitation of functionality. -

-

Related commands: -

-

fix smd -

fix colvars -

-

Default: -

-

The default options are plumedfile = NULL and outfile = NULL -

-
- - - -

(PLUMED) G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) DOI:https://doi.org/10.1016/j.cpc.2013.09.018 -

- - diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt new file mode 100644 index 0000000000..d9ee6dce39 --- /dev/null +++ b/doc/src/fix_plumed.txt @@ -0,0 +1,104 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix plumed command :h3 + +[Syntax:] + +fix ID group-ID plumed keyword value ... :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +plumed = style name of this fix command :1 +keyword = {plumedfile} or {outfile} :1 + {plumedfile} arg = name of PLUMED input file to use (default: NULL) + {outfile} arg = name of file on which to write the PLUMED log (default: NULL) +:ule + +[Examples:] + +fix pl all plumed all plumed plumedfile plumed.dat outfile p.log + +[Description:] + +This fix instructs LAMMPS to call the PLUMED library, which allows one +to perform various forms of trajectory analysis on the fly and to also use +methods such as umbrella sampling and metadynamics to enhance the sampling of +phase space. + +The documentation included here only describes the fix plumed command. This command +is LAMMPS specific whereas most of the functionality implemented in PLUMED will work with a +range of MD codes and also when PLUMED is used as a stand alone code. The full documentation +for PLUMED is available at "this website"_http://www.plumed.org/documentation + +The PLUMED library is developed at "https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 +A detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. + +There are some example scripts for using this package with LAMMPS in the +examples/USER/plumed directory. + +:line + +The command to call PLUMED above is reasonably self explanatory. Within the input file +for lammps the user is required to specify the input file for PLUMED and a file on which +to output the PLUMED log. The user must specify both of these arguments every time +PLUMED is to be used. Furthermore, the fix plumed command should appear in the LAMMPS input +file after the relevant input paramters (e.g. the timestep) have been set. + +The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED +and there can only be one instance of the plumed fix at a time. The plumed fix communicates +the minimum amount of information required and the PLUMED supports multiple, completely +independent collective variables, multiple independent biases and multiple independent forms of analysis. +There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. + +The {plumedfile} keyword allows the user to specify the name of the PLUMED input file. +Instructions as to what should be included in a plumed input file can be found in the +"documentation for PLUMED"_http://www.plumed.org/documentation. + +The {outfile} keyword allows the user to specify the name of a file on which to output +the PLUMED log. This log file normally just parots the information that is contained in the input +file. The names of the files on which the results from the various analyses that have been performed +using PLUMED will be specified by the user in the PLUMED input file. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +When performing a restart of a calculation that involves PLUMED you must include a RESTART command +in the PLUMED input file as detailed in the "PLUMED documentation"_http://www.plumed.org/documentation. When the restart +command is found in the PLUMED input PLUMED will append to the files that were generated in the run +that was performed previously. Furthermore, any history dependent bias potentials that were accumulated in +previous calculations will be read in when the restart command is included in the PLUMED input. + +The "fix_modify"_fix_modify.html {energy} option is not supported by this fix. + +Nothing is computed by this fix that can be accessed by any of the +"output commands"_Howto_output.html within LAMMPS. All the quantities +of interest can be output by commands that are native to PLUMED, however. + +[Restrictions:] + +This fix is part of the USER-PLUMED package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +There can only be one plumed fix active at a time. Since the interface +communicates only the minimum amount of information and since the PLUMED module +itself can handle an arbitrary number of analysis and biasing methods, this is +not a limitation of functionality. + +[Related commands:] + +"fix smd"_fix_smd.html +"fix colvars"_fix_colvars.html + +[Default:] + +The default options are plumedfile = NULL and outfile = NULL + +:line + +:link(PLUMED) +[(PLUMED)] G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) DOI:https://doi.org/10.1016/j.cpc.2013.09.018 From 85a5cab6638875b930faaf90ab899815a840175a Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Fri, 2 Nov 2018 17:45:20 -0400 Subject: [PATCH 046/273] Update Colvars library to version 2018-10-16 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 588670 -> 621342 bytes lib/colvars/colvar.cpp | 122 +++- lib/colvars/colvar.h | 20 +- lib/colvars/colvaratoms.cpp | 4 +- lib/colvars/colvaratoms.h | 2 +- lib/colvars/colvarbias_abf.cpp | 58 +- lib/colvars/colvarbias_abf.h | 6 +- lib/colvars/colvarbias_restraint.cpp | 22 +- lib/colvars/colvarcomp.cpp | 25 +- lib/colvars/colvarcomp.h | 118 ++-- lib/colvars/colvarcomp_coordnums.cpp | 521 ++++++++++++------ lib/colvars/colvarcomp_distances.cpp | 2 +- lib/colvars/colvarmodule.cpp | 31 +- lib/colvars/colvarmodule.h | 8 +- lib/colvars/colvarparse.cpp | 55 +- lib/colvars/colvarparse.h | 24 +- lib/colvars/colvarproxy.cpp | 20 +- lib/colvars/colvarproxy.h | 3 + lib/colvars/colvars_version.h | 2 +- lib/colvars/colvarscript.cpp | 35 +- lib/colvars/colvarscript.h | 19 + lib/colvars/colvarvalue.cpp | 34 ++ lib/colvars/colvarvalue.h | 43 +- src/USER-COLVARS/colvarproxy_lammps_version.h | 2 +- 24 files changed, 800 insertions(+), 376 deletions(-) diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 7f52367c82eec09a0465b356b326e996482a9bc3..4afeedccc87bb748bdc3fcb6eceb56d4004331c6 100644 GIT binary patch delta 337242 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

tWc~NdX)k1NJUu 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%0AK{l`@*G*eKiu#4Zweaj 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,&F&uf}CQYRD)8byM3 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

=e)B|Xd=B@cUS2-T&a7xJ&bn`I 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

XC`@;To34USXe;C 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

WB)FqX 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 delta 304409 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

  • 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

    ccL8)Q<&AiLxsFHz7S8mMV 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 UwEdQmhs(&x(g_OQHPEE{4;SYFIsgCw diff --git a/lib/colvars/colvar.cpp b/lib/colvars/colvar.cpp index c5b6d906c1..22befdfd43 100644 --- a/lib/colvars/colvar.cpp +++ b/lib/colvars/colvar.cpp @@ -426,8 +426,8 @@ int colvar::init_custom_function(std::string const &conf) if (x.size() != value_evaluators.size()) { cvm::error("Error: based on custom function type, expected " - + cvm::to_str(x.size()) + " scalar expressions, but " - + cvm::to_str(value_evaluators.size() + " were found.\n")); + + cvm::to_str(x.size()) + " scalar expressions, but " + + cvm::to_str(value_evaluators.size()) + " were found.\n"); return INPUT_ERROR; } @@ -455,36 +455,42 @@ int colvar::init_grid_parameters(std::string const &conf) } lower_boundary.type(value()); - upper_boundary.type(value()); - upper_wall.type(value()); if (is_enabled(f_cv_scalar)) { if (get_keyval(conf, "lowerBoundary", lower_boundary, lower_boundary)) { enable(f_cv_lower_boundary); } - std::string lw_conf, uw_conf; - - if (get_keyval(conf, "lowerWallConstant", lower_wall_k, 0.0, parse_silent)) { - cvm::log("Warning: lowerWallConstant and lowerWall are deprecated, " - "please define a harmonicWalls bias instead.\n"); - lower_wall.type(value()); - get_keyval(conf, "lowerWall", lower_wall, lower_boundary); - lw_conf = std::string("\n\ - lowerWallConstant "+cvm::to_str(lower_wall_k*width*width)+"\n\ - lowerWalls "+cvm::to_str(lower_wall)+"\n"); - } if (get_keyval(conf, "upperBoundary", upper_boundary, upper_boundary)) { enable(f_cv_upper_boundary); } - if (get_keyval(conf, "upperWallConstant", upper_wall_k, 0.0, parse_silent)) { - cvm::log("Warning: upperWallConstant and upperWall are deprecated, " - "please define a harmonicWalls bias instead.\n"); + std::string lw_conf, uw_conf; + if (get_keyval(conf, "lowerWallConstant", lower_wall_k, 0.0, + parse_silent)) { + cvm::log("Reading legacy options lowerWall and lowerWallConstant: " + "consider using a harmonicWalls restraint.\n"); + lower_wall.type(value()); + if (!get_keyval(conf, "lowerWall", lower_wall, lower_boundary)) { + cvm::log("Warning: lowerWall will need to be " + "defined explicitly in the next release.\n"); + } + lw_conf = std::string("\n\ + lowerWallConstant "+cvm::to_str(lower_wall_k*width*width)+"\n\ + lowerWalls "+cvm::to_str(lower_wall)+"\n"); + } + + if (get_keyval(conf, "upperWallConstant", upper_wall_k, 0.0, + parse_silent)) { + cvm::log("Reading legacy options upperWall and upperWallConstant: " + "consider using a harmonicWalls restraint.\n"); upper_wall.type(value()); - get_keyval(conf, "upperWall", upper_wall, upper_boundary); + if (!get_keyval(conf, "upperWall", upper_wall, upper_boundary)) { + cvm::log("Warning: upperWall will need to be " + "defined explicitly in the next release.\n"); + } uw_conf = std::string("\n\ upperWallConstant "+cvm::to_str(upper_wall_k*width*width)+"\n\ upperWalls "+cvm::to_str(upper_wall)+"\n"); @@ -677,6 +683,7 @@ template int colvar::init_components_type(std::string c if (cvcp != NULL) { cvcs.push_back(cvcp); cvcp->check_keywords(def_conf, def_config_key); + cvcp->config_key = def_config_key; if (cvm::get_error()) { cvm::error("Error: in setting up component \""+ std::string(def_config_key)+"\".\n", INPUT_ERROR); @@ -1022,13 +1029,13 @@ int colvar::calc() int colvar::calc_cvcs(int first_cvc, size_t num_cvcs) { - colvarproxy *proxy = cvm::main()->proxy; - - int error_code = COLVARS_OK; if (cvm::debug()) cvm::log("Calculating colvar \""+this->name+"\", components "+ cvm::to_str(first_cvc)+" through "+cvm::to_str(first_cvc+num_cvcs)+".\n"); + colvarproxy *proxy = cvm::main()->proxy; + int error_code = COLVARS_OK; + error_code |= check_cvc_range(first_cvc, num_cvcs); if (error_code != COLVARS_OK) { return error_code; @@ -1059,9 +1066,10 @@ int colvar::collect_cvc_data() if (cvm::debug()) cvm::log("Calculating colvar \""+this->name+"\"'s properties.\n"); + colvarproxy *proxy = cvm::main()->proxy; int error_code = COLVARS_OK; - if (cvm::step_relative() > 0) { + if ((cvm::step_relative() > 0) && (!proxy->total_forces_same_step())){ // Total force depends on Jacobian derivative from previous timestep // collect_cvc_total_forces() uses the previous value of jd error_code |= collect_cvc_total_forces(); @@ -1069,6 +1077,10 @@ int colvar::collect_cvc_data() error_code |= collect_cvc_values(); error_code |= collect_cvc_gradients(); error_code |= collect_cvc_Jacobians(); + if (proxy->total_forces_same_step()){ + // Use Jacobian derivative from this timestep + error_code |= collect_cvc_total_forces(); + } error_code |= calc_colvar_properties(); if (cvm::debug()) @@ -1394,6 +1406,13 @@ int colvar::calc_colvar_properties() vr.reset(); // (already 0; added for clarity) } + // Special case of a repeated timestep (eg. multiple NAMD "run" statements) + // revert values of the extended coordinate and velocity prior to latest integration + if (cvm::step_relative() == prev_timestep) { + xr = prev_xr; + vr = prev_vr; + } + // report the restraint center as "value" x_reported = xr; v_reported = vr; @@ -1450,7 +1469,6 @@ cvm::real colvar::update_forces_energy() // extended variable if there is one if (is_enabled(f_cv_extended_Lagrangian)) { - if (cvm::debug()) { cvm::log("Updating extended-Lagrangian degree of freedom.\n"); } @@ -1502,6 +1520,11 @@ cvm::real colvar::update_forces_energy() ft_reported = f_ext; } + // backup in case we need to revert this integration timestep + // if the same MD timestep is re-run + prev_xr = xr; + prev_vr = vr; + // leapfrog: starting from x_i, f_i, v_(i-1/2) vr += (0.5 * dt) * f_ext / ext_mass; // Because of leapfrog, kinetic energy at time i is approximate @@ -1638,18 +1661,26 @@ int colvar::set_cvc_flags(std::vector const &flags) } +void colvar::update_active_cvc_square_norm() +{ + active_cvc_square_norm = 0.0; + for (size_t i = 0; i < cvcs.size(); i++) { + if (cvcs[i]->is_enabled()) { + active_cvc_square_norm += cvcs[i]->sup_coeff * cvcs[i]->sup_coeff; + } + } +} + + int colvar::update_cvc_flags() { // Update the enabled/disabled status of cvcs if necessary if (cvc_flags.size()) { n_active_cvcs = 0; - active_cvc_square_norm = 0.; - for (size_t i = 0; i < cvcs.size(); i++) { cvcs[i]->set_enabled(f_cvc_active, cvc_flags[i]); if (cvcs[i]->is_enabled()) { n_active_cvcs++; - active_cvc_square_norm += cvcs[i]->sup_coeff * cvcs[i]->sup_coeff; } } if (!n_active_cvcs) { @@ -1657,12 +1688,49 @@ int colvar::update_cvc_flags() return COLVARS_ERROR; } cvc_flags.clear(); + + update_active_cvc_square_norm(); } return COLVARS_OK; } +int colvar::update_cvc_config(std::vector const &confs) +{ + cvm::log("Updating configuration for colvar \""+name+"\""); + + if (confs.size() != cvcs.size()) { + return cvm::error("Error: Wrong number of CVC config strings. " + "For those CVCs that are not being changed, try passing " + "an empty string.", INPUT_ERROR); + } + + int error_code = COLVARS_OK; + int num_changes = 0; + for (size_t i = 0; i < cvcs.size(); i++) { + if (confs[i].size()) { + std::string conf(confs[i]); + cvm::increase_depth(); + error_code |= cvcs[i]->colvar::cvc::init(conf); + error_code |= cvcs[i]->check_keywords(conf, + cvcs[i]->config_key.c_str()); + cvm::decrease_depth(); + num_changes++; + } + } + + if (num_changes == 0) { + cvm::log("Warning: no changes were applied through modifycvcs; " + "please check that its argument is a list of strings.\n"); + } + + update_active_cvc_square_norm(); + + return error_code; +} + + // ******************** METRIC FUNCTIONS ******************** // Use the metrics defined by \link cvc \endlink objects diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index 271231fb2a..989d55124f 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -171,8 +171,12 @@ protected: // Options for extended_lagrangian /// Restraint center colvarvalue xr; + /// Previous value of the restraint center; + colvarvalue prev_xr; /// Velocity of the restraint center colvarvalue vr; + /// Previous velocity of the restraint center + colvarvalue prev_vr; /// Mass of the restraint center cvm::real ext_mass; /// Restraint force constant @@ -352,6 +356,9 @@ public: /// \brief Updates the flags in the CVC objects, and their number int update_cvc_flags(); + /// \brief Modify the configuration of CVCs (currently, only base class data) + int update_cvc_config(std::vector const &confs); + protected: /// \brief Number of CVC objects with an active flag size_t n_active_cvcs; @@ -359,10 +366,17 @@ protected: /// Sum of square coefficients for active cvcs cvm::real active_cvc_square_norm; + /// Update the sum of square coefficients for active cvcs + void update_active_cvc_square_norm(); + /// \brief Absolute timestep number when this colvar was last updated int prev_timestep; public: + + /// \brief Return the number of CVC objects defined + inline size_t num_cvcs() const { return cvcs.size(); } + /// \brief Return the number of CVC objects with an active flag (as set by update_cvc_flags) inline size_t num_active_cvcs() const { return n_active_cvcs; } @@ -371,21 +385,21 @@ public: /// /// Handles correctly symmetries and periodic boundary conditions cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; + colvarvalue const &x2) const; /// \brief Use the internal metrics (as from \link cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + colvarvalue const &x2) const; /// \brief Use the internal metrics (as from \link cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + colvarvalue const &x2) const; /// \brief Use the internal metrics (as from \link cvc /// \endlink objects) to wrap a value into a standard interval diff --git a/lib/colvars/colvaratoms.cpp b/lib/colvars/colvaratoms.cpp index c8dcfc0766..3315007b54 100644 --- a/lib/colvars/colvaratoms.cpp +++ b/lib/colvars/colvaratoms.cpp @@ -21,6 +21,8 @@ cvm::atom::atom() { index = -1; id = -1; + mass = 1.0; + charge = 1.0; reset_data(); } @@ -395,7 +397,7 @@ int cvm::atom_group::parse(std::string const &group_conf) } // NOTE: calls to add_atom() and/or add_atom_id() are in the proxy-implemented function - cvm::load_atoms(atoms_file_name.c_str(), *this, atoms_col, atoms_col_value); + parse_error |= cvm::load_atoms(atoms_file_name.c_str(), *this, atoms_col, atoms_col_value); } } diff --git a/lib/colvars/colvaratoms.h b/lib/colvars/colvaratoms.h index 93ae594aae..0b0dd62c70 100644 --- a/lib/colvars/colvaratoms.h +++ b/lib/colvars/colvaratoms.h @@ -90,7 +90,7 @@ public: /// Destructor ~atom(); - /// Set mutable data (everything except id and mass) to zero; update mass + /// Set mutable data (everything except id and mass) to zero inline void reset_data() { pos = cvm::atom_pos(0.0); diff --git a/lib/colvars/colvarbias_abf.cpp b/lib/colvars/colvarbias_abf.cpp index 771955a4fa..e5edd92ae6 100644 --- a/lib/colvars/colvarbias_abf.cpp +++ b/lib/colvars/colvarbias_abf.cpp @@ -564,6 +564,8 @@ int colvarbias_abf::replica_share() { return COLVARS_OK; } + + void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool append) { std::string samples_out_name = prefix + ".count"; @@ -572,10 +574,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::ostream *samples_os = cvm::proxy->output_stream(samples_out_name, mode); - if (!samples_os) { - cvm::error("Error opening ABF samples file " + samples_out_name + " for writing"); - return; - } + if (!samples_os) return; samples->write_multicol(*samples_os); cvm::proxy->close_output_stream(samples_out_name); @@ -583,10 +582,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app if (num_variables() > 2) { std::string samples_dx_out_name = prefix + ".count.dx"; std::ostream *samples_dx_os = cvm::proxy->output_stream(samples_dx_out_name, mode); - if (!samples_os) { - cvm::error("Error opening samples file " + samples_dx_out_name + " for writing"); - return; - } + if (!samples_os) return; samples->write_opendx(*samples_dx_os); *samples_dx_os << std::endl; cvm::proxy->close_output_stream(samples_dx_out_name); @@ -594,10 +590,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::ostream *gradients_os = cvm::proxy->output_stream(gradients_out_name, mode); - if (!gradients_os) { - cvm::error("Error opening ABF gradient file " + gradients_out_name + " for writing"); - return; - } + if (!gradients_os) return; gradients->write_multicol(*gradients_os); cvm::proxy->close_output_stream(gradients_out_name); @@ -609,20 +602,14 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::string pmf_out_name = prefix + ".pmf"; std::ostream *pmf_os = cvm::proxy->output_stream(pmf_out_name, mode); - if (!pmf_os) { - cvm::error("Error opening pmf file " + pmf_out_name + " for writing"); - return; - } + if (!pmf_os) return; pmf->write_multicol(*pmf_os); // In dimension higher than 2, dx is easier to handle and visualize if (num_variables() > 2) { std::string pmf_dx_out_name = prefix + ".pmf.dx"; std::ostream *pmf_dx_os = cvm::proxy->output_stream(pmf_dx_out_name, mode); - if (!pmf_dx_os) { - cvm::error("Error opening pmf file " + pmf_dx_out_name + " for writing"); - return; - } + if (!pmf_dx_os) return; pmf->write_opendx(*pmf_dx_os); *pmf_dx_os << std::endl; cvm::proxy->close_output_stream(pmf_dx_out_name); @@ -639,10 +626,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::ostream *z_samples_os = cvm::proxy->output_stream(z_samples_out_name, mode); - if (!z_samples_os) { - cvm::error("Error opening eABF z-histogram file " + z_samples_out_name + " for writing"); - return; - } + if (!z_samples_os) return; z_samples->write_multicol(*z_samples_os); cvm::proxy->close_output_stream(z_samples_out_name); @@ -651,10 +635,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::ostream *z_gradients_os = cvm::proxy->output_stream(z_gradients_out_name, mode); - if (!z_gradients_os) { - cvm::error("Error opening eABF z-gradient file " + z_gradients_out_name + " for writing"); - return; - } + if (!z_gradients_os) return; z_gradients->write_multicol(*z_gradients_os); cvm::proxy->close_output_stream(z_gradients_out_name); } @@ -672,10 +653,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::ostream *czar_gradients_os = cvm::proxy->output_stream(czar_gradients_out_name, mode); - if (!czar_gradients_os) { - cvm::error("Error opening CZAR gradient file " + czar_gradients_out_name + " for writing"); - return; - } + if (!czar_gradients_os) return; czar_gradients->write_multicol(*czar_gradients_os); cvm::proxy->close_output_stream(czar_gradients_out_name); @@ -688,20 +666,14 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app std::string czar_pmf_out_name = prefix + ".czar.pmf"; std::ostream *czar_pmf_os = cvm::proxy->output_stream(czar_pmf_out_name, mode); - if (!czar_pmf_os) { - cvm::error("Error opening CZAR pmf file " + czar_pmf_out_name + " for writing"); - return; - } + if (!czar_pmf_os) return; czar_pmf->write_multicol(*czar_pmf_os); // In dimension higher than 2, dx is easier to handle and visualize if (num_variables() > 2) { std::string czar_pmf_dx_out_name = prefix + ".czar.pmf.dx"; std::ostream *czar_pmf_dx_os = cvm::proxy->output_stream(czar_pmf_dx_out_name, mode); - if (!czar_pmf_dx_os) { - cvm::error("Error opening CZAR pmf file " + czar_pmf_dx_out_name + " for writing"); - return; - } + if (!czar_pmf_dx_os) return; czar_pmf->write_opendx(*czar_pmf_dx_os); *czar_pmf_dx_os << std::endl; cvm::proxy->close_output_stream(czar_pmf_dx_out_name); @@ -854,3 +826,9 @@ std::istream & colvarbias_abf::read_state_data(std::istream& is) return is; } + +int colvarbias_abf::write_output_files() +{ + write_gradients_samples(output_prefix); + return COLVARS_OK; +} diff --git a/lib/colvars/colvarbias_abf.h b/lib/colvars/colvarbias_abf.h index 0260401292..52bf2df210 100644 --- a/lib/colvars/colvarbias_abf.h +++ b/lib/colvars/colvarbias_abf.h @@ -136,13 +136,13 @@ private: /// Write human-readable FE gradients and sample count, and DX file in dim > 2 void write_gradients_samples(const std::string &prefix, bool append = false); - void write_last_gradients_samples(const std::string &prefix, bool append = false); /// Read human-readable FE gradients and sample count (if not using restart) void read_gradients_samples(); - std::istream& read_state_data(std::istream&); - std::ostream& write_state_data(std::ostream&); + virtual std::istream& read_state_data(std::istream&); + virtual std::ostream& write_state_data(std::ostream&); + virtual int write_output_files(); }; #endif diff --git a/lib/colvars/colvarbias_restraint.cpp b/lib/colvars/colvarbias_restraint.cpp index 4ed1a95f94..2daf7a0876 100644 --- a/lib/colvars/colvarbias_restraint.cpp +++ b/lib/colvars/colvarbias_restraint.cpp @@ -996,11 +996,16 @@ int colvarbias_restraint_harmonic_walls::init(std::string const &conf) if ((lower_walls.size() > 0) && (upper_walls.size() > 0)) { for (i = 0; i < num_variables(); i++) { if (lower_walls[i] >= upper_walls[i]) { - cvm::error("Error: one upper wall, "+ - cvm::to_str(upper_walls[i])+ - ", is not higher than the lower wall, "+ - cvm::to_str(lower_walls[i])+".\n", - INPUT_ERROR); + return cvm::error("Error: one upper wall, "+ + cvm::to_str(upper_walls[i])+ + ", is not higher than the lower wall, "+ + cvm::to_str(lower_walls[i])+".\n", + INPUT_ERROR); + } + if (variables(i)->dist2(lower_walls[i], upper_walls[i]) < 1.0e-12) { + return cvm::error("Error: lower wall and upper wall are equal " + "in the domain of the variable \""+ + variables(i)->name+"\".\n", INPUT_ERROR); } } if (lower_wall_k * upper_wall_k == 0.0) { @@ -1279,13 +1284,16 @@ cvm::real colvarbias_restraint_linear::energy_difference(std::string const &conf cvm::real colvarbias_restraint_linear::restraint_potential(size_t i) const { - return force_k / variables(i)->width * (variables(i)->value() - colvar_centers[i]); + return force_k / variables(i)->width * (variables(i)->value() - + colvar_centers[i]).sum(); } colvarvalue const colvarbias_restraint_linear::restraint_force(size_t i) const { - return -1.0 * force_k / variables(i)->width; + colvarvalue dummy(variables(i)->value()); + dummy.set_ones(); + return -1.0 * force_k / variables(i)->width * dummy; } diff --git a/lib/colvars/colvarcomp.cpp b/lib/colvars/colvarcomp.cpp index 39b84b26d1..cb272eed05 100644 --- a/lib/colvars/colvarcomp.cpp +++ b/lib/colvars/colvarcomp.cpp @@ -43,16 +43,27 @@ colvar::cvc::cvc(std::string const &conf) int colvar::cvc::init(std::string const &conf) { - int error_code = COLVARS_OK; if (cvm::debug()) cvm::log("Initializing cvc base object.\n"); - get_keyval(conf, "name", this->name, this->name); + std::string const old_name(name); + if (name.size() > 0) { - // Temporary description until child object is initialized - description = "cvc " + name; - } else { - description = "uninitialized cvc"; + cvm::log("Updating configuration for component \""+name+"\""); + } + + if (get_keyval(conf, "name", name, name)) { + if (name.size() > 0) { + description = "cvc \"" + name + "\" of type " + function_type; + } else { + description = "unnamed cvc"; + } + if ((name != old_name) && (old_name.size() > 0)) { + cvm::error("Error: cannot rename component \""+old_name+ + "\" after initialization (new name = \""+name+"\")", + INPUT_ERROR); + name = old_name; + } } get_keyval(conf, "componentCoeff", sup_coeff, sup_coeff); @@ -78,7 +89,7 @@ int colvar::cvc::init(std::string const &conf) if (cvm::debug()) cvm::log("Done initializing cvc base object.\n"); - return error_code; + return cvm::get_error(); } diff --git a/lib/colvars/colvarcomp.h b/lib/colvars/colvarcomp.h index b5c3b16098..1a6df3771e 100644 --- a/lib/colvars/colvarcomp.h +++ b/lib/colvars/colvarcomp.h @@ -82,6 +82,9 @@ public: /// this variable definition should be set within the constructor. std::string function_type; + /// Keyword used in the input to denote this CVC + std::string config_key; + /// \brief Coefficient in the polynomial combination (default: 1.0) cvm::real sup_coeff; /// \brief Exponent in the polynomial combination (default: 1) @@ -834,49 +837,70 @@ protected: cvm::real r0; /// \brief "Cutoff vector" for anisotropic calculation cvm::rvector r0_vec; - /// \brief Wheter dist/r0 or \vec{dist}*\vec{1/r0_vec} should ne be - /// used + /// \brief Whether r/r0 or \vec{r}*\vec{1/r0_vec} should be used bool b_anisotropic; /// Integer exponent of the function numerator int en; /// Integer exponent of the function denominator int ed; - /// \brief If true, group2 will be treated as a single atom - /// (default: loop over all pairs of atoms in group1 and group2) - bool b_group2_center_only; + + /// \brief If true, group2 will be treated as a single atom, stored in this + /// accessory group + cvm::atom_group *group2_center; + + /// Tolerance for the pair list + cvm::real tolerance; + + /// Frequency of update of the pair list + int pairlist_freq; + + /// Pair list + bool *pairlist; + public: - /// Constructor + coordnum(std::string const &conf); coordnum(); - virtual ~coordnum() {} + ~coordnum(); + virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - template - /// \brief Calculate a coordination number through the function - /// (1-x**n)/(1-x**m), x = |A1-A2|/r0 \param r0 "cutoff" for the - /// coordination number \param exp_num \i n exponent \param exp_den - /// \i m exponent \param A1 atom \param A2 atom - static cvm::real switching_function(cvm::real const &r0, - int const &exp_num, int const &exp_den, - cvm::atom &A1, cvm::atom &A2); - - template - /// \brief Calculate a coordination number through the function - /// (1-x**n)/(1-x**m), x = |(A1-A2)*(r0_vec)^-|1 \param r0_vec - /// vector of different cutoffs in the three directions \param - /// exp_num \i n exponent \param exp_den \i m exponent \param A1 - /// atom \param A2 atom - static cvm::real switching_function(cvm::rvector const &r0_vec, - int const &exp_num, int const &exp_den, - cvm::atom &A1, cvm::atom &A2); - virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + + enum { + ef_null = 0, + ef_gradients = 1, + ef_anisotropic = (1<<8), + ef_use_pairlist = (1<<9), + ef_rebuild_pairlist = (1<<10) + }; + + /// \brief Calculate a coordination number through the function + /// (1-x**n)/(1-x**m), where x = |A1-A2|/r0 \param r0, r0_vec "cutoff" for + /// the coordination number (scalar or vector depending on user choice) + /// \param en Numerator exponent \param ed Denominator exponent \param First + /// atom \param Second atom \param pairlist_elem pointer to pair flag for + /// this pair \param tolerance A pair is defined as having a larger + /// coordination than this number + template + static cvm::real switching_function(cvm::real const &r0, + cvm::rvector const &r0_vec, + int en, + int ed, + cvm::atom &A1, + cvm::atom &A2, + bool **pairlist_elem, + cvm::real tolerance); + + /// Main workhorse function + template int compute_coordnum(); + }; @@ -887,7 +911,8 @@ class colvar::selfcoordnum : public colvar::cvc { protected: - /// First atom group + + /// Selected atoms cvm::atom_group *group1; /// \brief "Cutoff" for isotropic calculation (default) cvm::real r0; @@ -895,22 +920,18 @@ protected: int en; /// Integer exponent of the function denominator int ed; + cvm::real tolerance; + int pairlist_freq; + bool *pairlist; + public: - /// Constructor + selfcoordnum(std::string const &conf); selfcoordnum(); - virtual ~selfcoordnum() {} + ~selfcoordnum(); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - template - /// \brief Calculate a coordination number through the function - /// (1-x**n)/(1-x**m), x = |A1-A2|/r0 \param r0 "cutoff" for the - /// coordination number \param exp_num \i n exponent \param exp_den - /// \i m exponent \param A1 atom \param A2 atom - static cvm::real switching_function(cvm::real const &r0, - int const &exp_num, int const &exp_den, - cvm::atom &A1, cvm::atom &A2); virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -918,6 +939,9 @@ public: colvarvalue const &x2) const; virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + + /// Main workhorse function + template int compute_selfcoordnum(); }; @@ -947,26 +971,6 @@ public: virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - template - /// \brief Calculate a coordination number through the function - /// (1-x**n)/(1-x**m), x = |A1-A2|/r0 \param r0 "cutoff" for the - /// coordination number \param exp_num \i n exponent \param exp_den - /// \i m exponent \param A1 atom \param A2 atom - static cvm::real switching_function(cvm::real const &r0, - int const &exp_num, int const &exp_den, - cvm::atom &A1, cvm::atom &A2); - - /* - template - /// \brief Calculate a coordination number through the function - /// (1-x**n)/(1-x**m), x = |(A1-A2)*(r0_vec)^-|1 \param r0_vec - /// vector of different cutoffs in the three directions \param - /// exp_num \i n exponent \param exp_den \i m exponent \param A1 - /// atom \param A2 atom - static cvm::real switching_function(cvm::rvector const &r0_vec, - int const &exp_num, int const &exp_den, - cvm::atom &A1, cvm::atom &A2); - */ virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; diff --git a/lib/colvars/colvarcomp_coordnums.cpp b/lib/colvars/colvarcomp_coordnums.cpp index c34dc77215..ec53391ef5 100644 --- a/lib/colvars/colvarcomp_coordnums.cpp +++ b/lib/colvars/colvarcomp_coordnums.cpp @@ -18,45 +18,36 @@ - -template +template cvm::real colvar::coordnum::switching_function(cvm::real const &r0, - int const &en, - int const &ed, + cvm::rvector const &r0_vec, + int en, + int ed, cvm::atom &A1, - cvm::atom &A2) + cvm::atom &A2, + bool **pairlist_elem, + cvm::real pairlist_tol) { - cvm::rvector const diff = cvm::position_distance(A1.pos, A2.pos); - cvm::real const l2 = diff.norm2()/(r0*r0); - - // Assume en and ed are even integers, and avoid sqrt in the following - int const en2 = en/2; - int const ed2 = ed/2; - - cvm::real const xn = cvm::integer_power(l2, en2); - cvm::real const xd = cvm::integer_power(l2, ed2); - cvm::real const func = (1.0-xn)/(1.0-xd); - - if (calculate_gradients) { - cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2) - func*ed2*(xd/l2))*(-1.0); - cvm::rvector const dl2dx = (2.0/(r0*r0))*diff; - A1.grad += (-1.0)*dFdl2*dl2dx; - A2.grad += dFdl2*dl2dx; + if ((flags & ef_use_pairlist) && !(flags & ef_rebuild_pairlist)) { + bool const within = **pairlist_elem; + (*pairlist_elem)++; + if (!within) { + return 0.0; + } } - return func; -} + cvm::rvector const r0sq_vec(r0_vec.x*r0_vec.x, + r0_vec.y*r0_vec.y, + r0_vec.z*r0_vec.z); - -template -cvm::real colvar::coordnum::switching_function(cvm::rvector const &r0_vec, - int const &en, - int const &ed, - cvm::atom &A1, - cvm::atom &A2) -{ cvm::rvector const diff = cvm::position_distance(A1.pos, A2.pos); - cvm::rvector const scal_diff(diff.x/r0_vec.x, diff.y/r0_vec.y, diff.z/r0_vec.z); + + cvm::rvector const scal_diff(diff.x/((flags & ef_anisotropic) ? + r0_vec.x : r0), + diff.y/((flags & ef_anisotropic) ? + r0_vec.y : r0), + diff.z/((flags & ef_anisotropic) ? + r0_vec.z : r0)); cvm::real const l2 = scal_diff.norm2(); // Assume en and ed are even integers, and avoid sqrt in the following @@ -65,22 +56,45 @@ cvm::real colvar::coordnum::switching_function(cvm::rvector const &r0_vec, cvm::real const xn = cvm::integer_power(l2, en2); cvm::real const xd = cvm::integer_power(l2, ed2); - cvm::real const func = (1.0-xn)/(1.0-xd); + //The subtraction and division stretches the function back to the range of [0,1] from [pairlist_tol,1] + cvm::real const func = (((1.0-xn)/(1.0-xd)) - pairlist_tol) / (1.0-pairlist_tol); - if (calculate_gradients) { - cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2) - func*ed2*(xd/l2))*(-1.0); - cvm::rvector const dl2dx((2.0/(r0_vec.x*r0_vec.x))*diff.x, - (2.0/(r0_vec.y*r0_vec.y))*diff.y, - (2.0/(r0_vec.z*r0_vec.z))*diff.z); + if (flags & ef_rebuild_pairlist) { + //Particles just outside of the cutoff also are considered if they come near. + **pairlist_elem = (func > (-pairlist_tol * 0.5)) ? true : false; + (*pairlist_elem)++; + } + //If the value is too small, we need to exclude it, rather than let it contribute to the sum or the gradients. + if (func < 0) + return 0; + + if (flags & ef_gradients) { + //This is the old, completely correct expression for dFdl2: + //cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2) - + // func*ed2*(xd/l2))*(-1.0); + //This can become: + //cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2)*(1.0-xn)/(1.0-xn) - + // func*ed2*(xd/l2))*(-1.0); + //Recognizing that func = (1.0-xn)/(1.0-xd), we can group together the "func" and get a version of dFdl2 that is 0 + //when func=0, which lets us skip this gradient calculation when func=0. + cvm::real const dFdl2 = func * ((ed2*xd/((1.0-xd)*l2)) - (en2*xn/((1.0-xn)*l2))); + cvm::rvector const dl2dx((2.0/((flags & ef_anisotropic) ? r0sq_vec.x : + r0*r0)) * diff.x, + (2.0/((flags & ef_anisotropic) ? r0sq_vec.y : + r0*r0)) * diff.y, + (2.0/((flags & ef_anisotropic) ? r0sq_vec.z : + r0*r0)) * diff.z); A1.grad += (-1.0)*dFdl2*dl2dx; A2.grad += dFdl2*dl2dx; } + return func; } colvar::coordnum::coordnum(std::string const &conf) - : cvc(conf), b_anisotropic(false), b_group2_center_only(false) + : cvc(conf), b_anisotropic(false), group2_center(NULL), pairlist(NULL) + { function_type = "coordnum"; x.type(colvarvalue::type_scalar); @@ -90,23 +104,26 @@ colvar::coordnum::coordnum(std::string const &conf) if (int atom_number = cvm::atom_group::overlap(*group1, *group2)) { cvm::error("Error: group1 and group2 share a common atom (number: " + - cvm::to_str(atom_number) + ")\n"); + cvm::to_str(atom_number) + ")\n", INPUT_ERROR); return; } if (group1->b_dummy) { - cvm::error("Error: only group2 is allowed to be a dummy atom\n"); + cvm::error("Error: only group2 is allowed to be a dummy atom\n", + INPUT_ERROR); return; } bool const b_isotropic = get_keyval(conf, "cutoff", r0, cvm::real(4.0 * cvm::unit_angstrom())); - if (get_keyval(conf, "cutoff3", r0_vec, cvm::rvector(4.0 * cvm::unit_angstrom(), - 4.0 * cvm::unit_angstrom(), - 4.0 * cvm::unit_angstrom()))) { + if (get_keyval(conf, "cutoff3", r0_vec, + cvm::rvector(4.0 * cvm::unit_angstrom(), + 4.0 * cvm::unit_angstrom(), + 4.0 * cvm::unit_angstrom()))) { if (b_isotropic) { - cvm::error("Error: cannot specify \"cutoff\" and \"cutoff3\" at the same time.\n", + cvm::error("Error: cannot specify \"cutoff\" and \"cutoff3\" " + "at the same time.\n", INPUT_ERROR); return; } @@ -135,86 +152,178 @@ colvar::coordnum::coordnum(std::string const &conf) cvm::log("Warning: only minimum-image distances are used by this variable.\n"); } + bool b_group2_center_only = false; get_keyval(conf, "group2CenterOnly", b_group2_center_only, group2->b_dummy); + if (b_group2_center_only) { + if (!group2_center) { + group2_center = new cvm::atom_group(); + group2_center->add_atom(cvm::atom()); + } + } + + get_keyval(conf, "tolerance", tolerance, 0.0); + if (tolerance > 0) { + get_keyval(conf, "pairListFrequency", pairlist_freq, 100); + if ( ! (pairlist_freq > 0) ) { + cvm::error("Error: non-positive pairlistfrequency provided.\n", + INPUT_ERROR); + return; // and do not allocate the pairlists below + } + if (b_group2_center_only) { + pairlist = new bool[group1->size()]; + } + else { + pairlist = new bool[group1->size() * group2->size()]; + } + } + } colvar::coordnum::coordnum() - : b_anisotropic(false), b_group2_center_only(false) + : b_anisotropic(false), group2_center(NULL), pairlist(NULL) { function_type = "coordnum"; x.type(colvarvalue::type_scalar); } -void colvar::coordnum::calc_value() +colvar::coordnum::~coordnum() { - x.real_value = 0.0; + if (pairlist != NULL) { + delete [] pairlist; + } + if (group2_center != NULL) { + delete group2_center; + } +} - if (b_group2_center_only) { - // create a fake atom to hold the group2 com coordinates - cvm::atom group2_com_atom; - group2_com_atom.pos = group2->center_of_mass(); +template int colvar::coordnum::compute_coordnum() +{ + if (group2_center) { + (*group2_center)[0].pos = group2->center_of_mass(); + group2_center->calc_required_properties(); + } + cvm::atom_group *group2p = group2_center ? group2_center : group2; - if (b_anisotropic) { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - x.real_value += switching_function(r0_vec, en, ed, *ai1, group2_com_atom); - } else { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - x.real_value += switching_function(r0, en, ed, *ai1, group2_com_atom); + bool const use_pairlist = (pairlist != NULL); + bool const rebuild_pairlist = (pairlist != NULL) && + (cvm::step_relative() % pairlist_freq == 0); + + bool *pairlist_elem = use_pairlist ? pairlist : NULL; + cvm::atom_iter ai1 = group1->begin(), ai2 = group2p->begin(); + cvm::atom_iter const ai1_end = group1->end(); + cvm::atom_iter const ai2_end = group2p->end(); + + if (b_anisotropic) { + + if (use_pairlist) { + + if (rebuild_pairlist) { + + int const flags = compute_flags | ef_anisotropic | ef_use_pairlist | + ef_rebuild_pairlist; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + &pairlist_elem, + tolerance); + } + } + + } else { + + int const flags = compute_flags | ef_anisotropic | ef_use_pairlist; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + &pairlist_elem, + tolerance); + } + } + } + + } else { // if (use_pairlist) { + + int const flags = compute_flags | ef_anisotropic; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + NULL, 0.0); + } + } } } else { - if (b_anisotropic) { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - for (cvm::atom_iter ai2 = group2->begin(); ai2 != group2->end(); ai2++) { - x.real_value += switching_function(r0_vec, en, ed, *ai1, *ai2); + if (use_pairlist) { + + if (rebuild_pairlist) { + + int const flags = compute_flags | ef_use_pairlist | ef_rebuild_pairlist; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + &pairlist_elem, + tolerance); + } } - } else { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - for (cvm::atom_iter ai2 = group2->begin(); ai2 != group2->end(); ai2++) { - x.real_value += switching_function(r0, en, ed, *ai1, *ai2); + + } else { + + int const flags = compute_flags | ef_use_pairlist; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + &pairlist_elem, + tolerance); + } } + } + + } else { // if (use_pairlist) { + + int const flags = compute_flags; + for (ai1 = group1->begin(); ai1 != ai1_end; ai1++) { + for (ai2 = group2->begin(); ai2 != ai2_end; ai2++) { + x.real_value += switching_function(r0, r0_vec, en, ed, + *ai1, *ai2, + NULL, 0.0); + } + } } } + + if (compute_flags & ef_gradients) { + if (group2_center) { + group2->set_weighted_gradient((*group2_center)[0].grad); + } + } + + return COLVARS_OK; +} + + +void colvar::coordnum::calc_value() +{ + x.real_value = 0.0; + if (is_enabled(f_cvc_gradient)) { + compute_coordnum(); + } else { + compute_coordnum(); + } } void colvar::coordnum::calc_gradients() { - if (b_group2_center_only) { - - // create a fake atom to hold the group2 com coordinates - cvm::atom group2_com_atom; - group2_com_atom.pos = group2->center_of_mass(); - - - if (b_anisotropic) { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - switching_function(r0_vec, en, ed, *ai1, group2_com_atom); - } else { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - switching_function(r0, en, ed, *ai1, group2_com_atom); - } - - group2->set_weighted_gradient(group2_com_atom.grad); - - } else { - - if (b_anisotropic) { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - for (cvm::atom_iter ai2 = group2->begin(); ai2 != group2->end(); ai2++) { - switching_function(r0_vec, en, ed, *ai1, *ai2); - } - } else { - for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) - for (cvm::atom_iter ai2 = group2->begin(); ai2 != group2->end(); ai2++) { - switching_function(r0, en, ed, *ai1, *ai2); - } - } - } + // Gradients are computed by calc_value() if f_cvc_gradients is enabled } @@ -235,7 +344,7 @@ simple_scalar_dist_functions(coordnum) // h_bond member functions colvar::h_bond::h_bond(std::string const &conf) - : cvc(conf) +: cvc(conf) { if (cvm::debug()) cvm::log("Initializing h_bond object.\n"); @@ -307,13 +416,24 @@ colvar::h_bond::~h_bond() void colvar::h_bond::calc_value() { - x.real_value = colvar::coordnum::switching_function(r0, en, ed, (*atom_groups[0])[0], (*atom_groups[0])[1]); + int const flags = coordnum::ef_null; + cvm::rvector const r0_vec(0.0); // TODO enable the flag? + x.real_value = + coordnum::switching_function(r0, r0_vec, en, ed, + (*atom_groups[0])[0], + (*atom_groups[0])[1], + NULL, 0.0); } void colvar::h_bond::calc_gradients() { - colvar::coordnum::switching_function(r0, en, ed, (*atom_groups[0])[0], (*atom_groups[0])[1]); + int const flags = coordnum::ef_gradients; + cvm::rvector const r0_vec(0.0); // TODO enable the flag? + coordnum::switching_function(r0, r0_vec, en, ed, + (*atom_groups[0])[0], + (*atom_groups[0])[1], + NULL, 0.0); } @@ -328,7 +448,7 @@ simple_scalar_dist_functions(h_bond) colvar::selfcoordnum::selfcoordnum(std::string const &conf) - : cvc(conf) + : cvc(conf), pairlist(NULL) { function_type = "selfcoordnum"; x.type(colvarvalue::type_scalar); @@ -353,36 +473,115 @@ colvar::selfcoordnum::selfcoordnum(std::string const &conf) if (!is_enabled(f_cvc_pbc_minimum_image)) { cvm::log("Warning: only minimum-image distances are used by this variable.\n"); } + + get_keyval(conf, "tolerance", tolerance, 0.0); + if (tolerance > 0) { + get_keyval(conf, "pairListFrequency", pairlist_freq, 100); + if ( ! (pairlist_freq > 0) ) { + cvm::error("Error: non-positive pairlistfrequency provided.\n", + INPUT_ERROR); + return; + } + pairlist = new bool[(group1->size()-1) * (group1->size()-1)]; + } } colvar::selfcoordnum::selfcoordnum() + : pairlist(NULL) { function_type = "selfcoordnum"; x.type(colvarvalue::type_scalar); } +colvar::selfcoordnum::~selfcoordnum() +{ + if (pairlist != NULL) { + delete [] pairlist; + } +} + + +template int colvar::selfcoordnum::compute_selfcoordnum() +{ + cvm::rvector const r0_vec(0.0); // TODO enable the flag? + + bool const use_pairlist = (pairlist != NULL); + bool const rebuild_pairlist = (pairlist != NULL) && + (cvm::step_relative() % pairlist_freq == 0); + + bool *pairlist_elem = use_pairlist ? pairlist : NULL; + size_t i = 0, j = 0; + size_t const n = group1->size(); + + // Always isotropic (TODO: enable the ellipsoid?) + + if (use_pairlist) { + + if (rebuild_pairlist) { + int const flags = compute_flags | coordnum::ef_use_pairlist | + coordnum::ef_rebuild_pairlist; + for (i = 0; i < n - 1; i++) { + for (j = i + 1; j < n; j++) { + x.real_value += + coordnum::switching_function(r0, r0_vec, en, ed, + (*group1)[i], + (*group1)[j], + &pairlist_elem, + tolerance); + } + } + } else { + int const flags = compute_flags | coordnum::ef_use_pairlist; + for (i = 0; i < n - 1; i++) { + for (j = i + 1; j < n; j++) { + x.real_value += + coordnum::switching_function(r0, r0_vec, en, ed, + (*group1)[i], + (*group1)[j], + &pairlist_elem, + tolerance); + } + } + } + + } else { // if (use_pairlist) { + + int const flags = compute_flags | coordnum::ef_null; + for (i = 0; i < n - 1; i++) { + for (j = i + 1; j < n; j++) { + x.real_value += + coordnum::switching_function(r0, r0_vec, en, ed, + (*group1)[i], + (*group1)[j], + &pairlist_elem, + tolerance); + } + } + } + + return COLVARS_OK; +} + + void colvar::selfcoordnum::calc_value() { x.real_value = 0.0; - for (size_t i = 0; i < group1->size() - 1; i++) { - for (size_t j = i + 1; j < group1->size(); j++) { - x.real_value += colvar::coordnum::switching_function(r0, en, ed, (*group1)[i], (*group1)[j]); - } + if (is_enabled(f_cvc_gradient)) { + compute_selfcoordnum(); + } else { + compute_selfcoordnum(); } } void colvar::selfcoordnum::calc_gradients() { - for (size_t i = 0; i < group1->size() - 1; i++) { - for (size_t j = i + 1; j < group1->size(); j++) { - colvar::coordnum::switching_function(r0, en, ed, (*group1)[i], (*group1)[j]); - } - } + // Gradients are computed by calc_value() if f_cvc_gradients is enabled } + void colvar::selfcoordnum::apply_force(colvarvalue const &force) { if (!group1->noforce) { @@ -394,6 +593,7 @@ void colvar::selfcoordnum::apply_force(colvarvalue const &force) simple_scalar_dist_functions(selfcoordnum) + // groupcoordnum member functions colvar::groupcoordnum::groupcoordnum(std::string const &conf) : distance(conf), b_anisotropic(false) @@ -415,7 +615,7 @@ colvar::groupcoordnum::groupcoordnum(std::string const &conf) if (b_scale) { cvm::error("Error: cannot specify \"scale\" and " - "\"scale3\" at the same time.\n"); + "\"scale3\" at the same time.\n"); return; } b_anisotropic = true; @@ -453,95 +653,56 @@ colvar::groupcoordnum::groupcoordnum() } -template -cvm::real colvar::groupcoordnum::switching_function(cvm::real const &r0, - int const &en, - int const &ed, - cvm::atom &A1, - cvm::atom &A2) -{ - cvm::rvector const diff = cvm::position_distance(A1.pos, A2.pos); - cvm::real const l2 = diff.norm2()/(r0*r0); - - // Assume en and ed are even integers, and avoid sqrt in the following - int const en2 = en/2; - int const ed2 = ed/2; - - cvm::real const xn = cvm::integer_power(l2, en2); - cvm::real const xd = cvm::integer_power(l2, ed2); - cvm::real const func = (1.0-xn)/(1.0-xd); - - if (calculate_gradients) { - cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2) - func*ed2*(xd/l2))*(-1.0); - cvm::rvector const dl2dx = (2.0/(r0*r0))*diff; - A1.grad += (-1.0)*dFdl2*dl2dx; - A2.grad += dFdl2*dl2dx; - } - - return func; -} - - -#if 0 // AMG: I don't think there's any reason to support anisotropic, - // and I don't have those flags below in calc_value, but - // if I need them, I'll also need to uncomment this method -template -cvm::real colvar::groupcoordnum::switching_function(cvm::rvector const &r0_vec, - int const &en, - int const &ed, - cvm::atom &A1, - cvm::atom &A2) -{ - cvm::rvector const diff = cvm::position_distance(A1.pos, A2.pos); - cvm::rvector const scal_diff(diff.x/r0_vec.x, diff.y/r0_vec.y, diff.z/r0_vec.z); - cvm::real const l2 = scal_diff.norm2(); - - // Assume en and ed are even integers, and avoid sqrt in the following - int const en2 = en/2; - int const ed2 = ed/2; - - cvm::real const xn = cvm::integer_power(l2, en2); - cvm::real const xd = cvm::integer_power(l2, ed2); - cvm::real const func = (1.0-xn)/(1.0-xd); - - if (calculate_gradients) { - cvm::real const dFdl2 = (1.0/(1.0-xd))*(en2*(xn/l2) - func*ed2*(xd/l2))*(-1.0); - cvm::rvector const dl2dx((2.0/(r0_vec.x*r0_vec.x))*diff.x, - (2.0/(r0_vec.y*r0_vec.y))*diff.y, - (2.0/(r0_vec.z*r0_vec.z))*diff.z); - A1.grad += (-1.0)*dFdl2*dl2dx; - A2.grad += dFdl2*dl2dx; - } - return func; -} -#endif - - void colvar::groupcoordnum::calc_value() { + cvm::rvector const r0_vec(0.0); // TODO enable the flag? // create fake atoms to hold the com coordinates cvm::atom group1_com_atom; cvm::atom group2_com_atom; group1_com_atom.pos = group1->center_of_mass(); group2_com_atom.pos = group2->center_of_mass(); - - x.real_value = coordnum::switching_function(r0, en, ed, - group1_com_atom, group2_com_atom); + if (b_anisotropic) { + int const flags = coordnum::ef_anisotropic; + x.real_value = coordnum::switching_function(r0, r0_vec, en, ed, + group1_com_atom, + group2_com_atom, + NULL, 0.0); + } else { + int const flags = coordnum::ef_null; + x.real_value = coordnum::switching_function(r0, r0_vec, en, ed, + group1_com_atom, + group2_com_atom, + NULL, 0.0); + } } void colvar::groupcoordnum::calc_gradients() { + cvm::rvector const r0_vec(0.0); // TODO enable the flag? + cvm::atom group1_com_atom; cvm::atom group2_com_atom; group1_com_atom.pos = group1->center_of_mass(); group2_com_atom.pos = group2->center_of_mass(); - coordnum::switching_function(r0, en, ed, group1_com_atom, group2_com_atom); + if (b_anisotropic) { + int const flags = coordnum::ef_gradients | coordnum::ef_anisotropic; + coordnum::switching_function(r0, r0_vec, en, ed, + group1_com_atom, + group2_com_atom, + NULL, 0.0); + } else { + int const flags = coordnum::ef_gradients; + coordnum::switching_function(r0, r0_vec, en, ed, + group1_com_atom, + group2_com_atom, + NULL, 0.0); + } + group1->set_weighted_gradient(group1_com_atom.grad); group2->set_weighted_gradient(group2_com_atom.grad); - } diff --git a/lib/colvars/colvarcomp_distances.cpp b/lib/colvars/colvarcomp_distances.cpp index 57b2a9a625..a2b1a5cd23 100644 --- a/lib/colvars/colvarcomp_distances.cpp +++ b/lib/colvars/colvarcomp_distances.cpp @@ -939,7 +939,7 @@ colvar::rmsd::rmsd(std::string const &conf) bool b_Jacobian_derivative = true; if (atoms->fitting_group != NULL && b_Jacobian_derivative) { - cvm::log("The option \"refPositionsGroup\" (alternative group for fitting) was enabled: " + cvm::log("The option \"fittingGroup\" (alternative group for fitting) was enabled: " "Jacobian derivatives of the RMSD will not be calculated.\n"); b_Jacobian_derivative = false; } diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index dc6242c5bc..87b08b1ef8 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -139,7 +139,7 @@ int colvarmodule::read_config_file(char const *config_filename) // read the config file into a string std::string conf = ""; std::string line; - while (colvarparse::getline_nocomments(config_s, line)) { + while (parse->read_config_line(config_s, line)) { // Delete lines that contain only white space after removing comments if (line.find_first_not_of(colvarparse::white_space) != std::string::npos) conf.append(line+"\n"); @@ -159,11 +159,12 @@ int colvarmodule::read_config_string(std::string const &config_str) // strip the comments away std::string conf = ""; std::string line; - while (colvarparse::getline_nocomments(config_s, line)) { + while (parse->read_config_line(config_s, line)) { // Delete lines that contain only white space after removing comments if (line.find_first_not_of(colvarparse::white_space) != std::string::npos) conf.append(line+"\n"); } + return parse_config(conf); } @@ -191,6 +192,12 @@ int colvarmodule::parse_config(std::string &conf) { extra_conf.clear(); + // Check that the input has matching braces + if (colvarparse::check_braces(conf, 0) != COLVARS_OK) { + return cvm::error("Error: unmatched curly braces in configuration.\n", + INPUT_ERROR); + } + // Parse global options if (catch_input_errors(parse_global_params(conf))) { return get_error(); @@ -235,6 +242,12 @@ int colvarmodule::parse_config(std::string &conf) } +std::string const & colvarmodule::get_config() const +{ + return parse->get_config(); +} + + int colvarmodule::append_new_config(std::string const &new_conf) { extra_conf += new_conf; @@ -246,9 +259,13 @@ int colvarmodule::parse_global_params(std::string const &conf) { colvarmodule *cvm = cvm::main(); - std::string index_file_name; - if (parse->get_keyval(conf, "indexFile", index_file_name)) { - cvm->read_index_file(index_file_name.c_str()); + { + std::string index_file_name; + size_t pos = 0; + while (parse->key_lookup(conf, "indexFile", &index_file_name, &pos)) { + cvm->read_index_file(index_file_name.c_str()); + index_file_name.clear(); + } } if (parse->get_keyval(conf, "smp", proxy->b_smp_active, proxy->b_smp_active)) { @@ -1073,10 +1090,10 @@ colvarmodule::~colvarmodule() int colvarmodule::reset() { - parse->init(); - cvm::log("Resetting the Collective Variables module.\n"); + parse->init(); + // Iterate backwards because we are deleting the elements as we go for (std::vector::reverse_iterator bi = biases.rbegin(); bi != biases.rend(); diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index f3d99a2b23..3d93798e0a 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -131,7 +131,7 @@ public: /// Module-wide error state /// see constants at the top of this file -protected: +private: static int errorCode; @@ -274,6 +274,9 @@ public: /// \brief Parse a "clean" config string (no comments) int parse_config(std::string &conf); + /// Get the configuration string read so far (includes comments) + std::string const & get_config() const; + // Parse functions (setup internal data based on a string) /// Allow reading from Windows text files using using std::getline @@ -296,6 +299,9 @@ public: private: + /// Configuration string read so far by the module (includes comments) + std::string config_string; + /// Auto-generated configuration during parsing (e.g. to implement /// back-compatibility) std::string extra_conf; diff --git a/lib/colvars/colvarparse.cpp b/lib/colvars/colvarparse.cpp index 43c8c69c04..d8b3a359cd 100644 --- a/lib/colvars/colvarparse.cpp +++ b/lib/colvars/colvarparse.cpp @@ -43,9 +43,10 @@ template bool colvarparse::_get_keyval_scalar_(std::string const } } while (b_found); - if (found_count > 1) - cvm::log("Warning: found more than one instance of \""+ - std::string(key)+"\".\n"); + if (found_count > 1) { + cvm::error("Error: found more than one instance of \""+ + std::string(key)+"\".\n", INPUT_ERROR); + } if (data.size()) { std::istringstream is(data); @@ -98,9 +99,10 @@ bool colvarparse::_get_keyval_scalar_string_(std::string const &conf, } } while (b_found); - if (found_count > 1) - cvm::log("Warning: found more than one instance of \""+ - std::string(key)+"\".\n"); + if (found_count > 1) { + cvm::error("Error: found more than one instance of \""+ + std::string(key)+"\".\n", INPUT_ERROR); + } if (data.size()) { std::istringstream is(data); @@ -162,9 +164,10 @@ template bool colvarparse::_get_keyval_vector_(std::string const } } while (b_found); - if (found_count > 1) - cvm::log("Warning: found more than one instance of \""+ - std::string(key)+"\".\n"); + if (found_count > 1) { + cvm::error("Error: found more than one instance of \""+ + std::string(key)+"\".\n", INPUT_ERROR); + } if (data.size()) { std::istringstream is(data); @@ -319,9 +322,10 @@ bool colvarparse::get_keyval(std::string const &conf, } } while (b_found); - if (found_count > 1) - cvm::log("Warning: found more than one instance of \""+ - std::string(key)+"\".\n"); + if (found_count > 1) { + cvm::error("Error: found more than one instance of \""+ + std::string(key)+"\".\n", INPUT_ERROR); + } if (data.size()) { if ( (data == std::string("on")) || @@ -535,6 +539,19 @@ int colvarparse::check_keywords(std::string &conf, char const *key) } +std::istream & colvarparse::read_config_line(std::istream &is, + std::string &line) +{ + cvm::getline(is, line); + config_string += line+'\n'; + size_t const comment = line.find('#'); + if (comment != std::string::npos) { + line.erase(comment); + } + return is; +} + + std::istream & colvarparse::getline_nocomments(std::istream &is, std::string &line) { @@ -607,7 +624,7 @@ bool colvarparse::key_lookup(std::string const &conf, } // check that there are matching braces between here and the end of conf - bool const b_not_within_block = brace_check(conf, pos); + bool const b_not_within_block = (check_braces(conf, pos) == COLVARS_OK); bool const b_isolated = (b_isolated_left && b_isolated_right && b_not_within_block); @@ -781,19 +798,15 @@ std::istream & operator>> (std::istream &is, colvarparse::read_block const &rb) } -bool colvarparse::brace_check(std::string const &conf, +int colvarparse::check_braces(std::string const &conf, size_t const start_pos) { - size_t brace_count = 0; + int brace_count = 0; size_t brace = start_pos; - while ( (brace = conf.find_first_of("{}", brace)) != std::string::npos) { + while ((brace = conf.find_first_of("{}", brace)) != std::string::npos) { if (conf[brace] == '{') brace_count++; if (conf[brace] == '}') brace_count--; brace++; } - - if (brace_count != 0) - return false; - else - return true; + return (brace_count != 0) ? INPUT_ERROR : COLVARS_OK; } diff --git a/lib/colvars/colvarparse.h b/lib/colvars/colvarparse.h index 9389bc49da..28ad3c052b 100644 --- a/lib/colvars/colvarparse.h +++ b/lib/colvars/colvarparse.h @@ -24,7 +24,7 @@ /// need to parse input inherit from this class colvarparse { -private: +protected: /// \brief List of legal keywords for this object: this is updated /// by each call to colvarparse::get_keyval() or @@ -47,7 +47,7 @@ private: /// \brief Remove all the values from the config string void strip_values(std::string &conf); - /// \brief Configuration string of the object + /// \brief Configuration string of the object (includes comments) std::string config_string; public: @@ -72,7 +72,7 @@ public: } /// Set a new config string for this object - inline void init(const std::string& conf) + inline void init(std::string const &conf) { if (! config_string.size()) { init(); @@ -80,7 +80,8 @@ public: } } - inline const std::string& get_config() + /// Get the configuration string (includes comments) + inline std::string const & get_config() const { return config_string; } @@ -284,14 +285,19 @@ public: std::string *data = NULL, size_t *save_pos = NULL); + /// \brief Reads a configuration line, adds it to config_string, and returns + /// the stream \param is Input stream \param s String that will hold the + /// configuration line, with comments stripped + std::istream & read_config_line(std::istream &is, std::string &line); + /// \brief Works as std::getline() but also removes everything /// between a comment character and the following newline - static std::istream & getline_nocomments(std::istream &is, - std::string &s); + static std::istream & getline_nocomments(std::istream &is, std::string &s); - /// Check if the content of the file has matching braces - bool brace_check(std::string const &conf, - size_t const start_pos = 0); + /// \brief Check if the content of a config string has matching braces + /// \param conf The configuration string \param start_pos Start the count + /// from this position + static int check_braces(std::string const &conf, size_t const start_pos); }; diff --git a/lib/colvars/colvarproxy.cpp b/lib/colvars/colvarproxy.cpp index 86338dfd1b..da9257eee2 100644 --- a/lib/colvars/colvarproxy.cpp +++ b/lib/colvars/colvarproxy.cpp @@ -289,13 +289,23 @@ colvarproxy_smp::colvarproxy_smp() omp_lock_state = NULL; #if defined(_OPENMP) if (smp_thread_id() == 0) { + omp_lock_state = reinterpret_cast(new omp_lock_t); omp_init_lock(reinterpret_cast(omp_lock_state)); } #endif } -colvarproxy_smp::~colvarproxy_smp() {} +colvarproxy_smp::~colvarproxy_smp() +{ +#if defined(_OPENMP) + if (smp_thread_id() == 0) { + if (omp_lock_state) { + delete reinterpret_cast(omp_lock_state); + } + } +#endif +} int colvarproxy_smp::smp_enabled() @@ -499,6 +509,14 @@ char const *colvarproxy_script::script_obj_to_str(unsigned char *obj) } +std::vector colvarproxy_script::script_obj_to_str_vector(unsigned char *obj) +{ + cvm::error("Error: trying to print a script object without a scripting " + "language interface.\n", BUG_ERROR); + return std::vector(); +} + + int colvarproxy_script::run_force_callback() { return COLVARS_NOT_IMPLEMENTED; diff --git a/lib/colvars/colvarproxy.h b/lib/colvars/colvarproxy.h index 845f93c9bc..3ff5f3c697 100644 --- a/lib/colvars/colvarproxy.h +++ b/lib/colvars/colvarproxy.h @@ -461,6 +461,9 @@ public: /// Convert a script object (Tcl or Python call argument) to a C string virtual char const *script_obj_to_str(unsigned char *obj); + /// Convert a script object (Tcl or Python call argument) to a vector of strings + virtual std::vector script_obj_to_str_vector(unsigned char *obj); + /// Pointer to the scripting interface object /// (does not need to be allocated in a new interface) colvarscript *script; diff --git a/lib/colvars/colvars_version.h b/lib/colvars/colvars_version.h index 68f5cd13ab..a37d264a20 100644 --- a/lib/colvars/colvars_version.h +++ b/lib/colvars/colvars_version.h @@ -1,5 +1,5 @@ #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2018-04-29" +#define COLVARS_VERSION "2018-10-16" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp index a55e4c65d9..c9fe0497a9 100644 --- a/lib/colvars/colvarscript.cpp +++ b/lib/colvars/colvarscript.cpp @@ -82,6 +82,14 @@ int colvarscript::run(int objc, unsigned char *const objv[]) int error_code = COLVARS_OK; + // If command is found in map, execute it + std::string const cmd_key("cv_"+cmd); + if (comm_str_map.count(cmd_key) > 0) { + error_code |= (*(comm_fns[comm_str_map[cmd_key]]))( + reinterpret_cast(this), objc, objv); + return error_code; + } + if (cmd == "colvar") { if (objc < 3) { result = "Missing parameters\n" + help_string(); @@ -295,11 +303,12 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) } if (subcmd == "delete") { - size_t i; - for (i = 0; i < cv->biases.size(); i++) { + while (cv->biases.size() > 0) { + size_t i = cv->biases.size()-1; + cvm::log("Warning: before deleting colvar " + cv->name + + ", deleting parent bias " + cv->biases[i]->name); delete cv->biases[i]; } - cv->biases.clear(); // colvar destructor is tasked with the cleanup delete cv; // TODO this could be done by the destructors @@ -373,6 +382,23 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) return COLVARS_OK; } + if (subcmd == "modifycvcs") { + if (objc < 4) { + result = "cvcflags: missing parameter: vector of strings"; + return COLVARSCRIPT_ERROR; + } + std::vector const confs(proxy->script_obj_to_str_vector(objv[3])); + cvm::increase_depth(); + int res = cv->update_cvc_config(confs); + cvm::decrease_depth(); + if (res != COLVARS_OK) { + result = "Error setting CVC flags"; + return COLVARSCRIPT_ERROR; + } + result = "0"; + return COLVARS_OK; + } + if ((subcmd == "get") || (subcmd == "set") || (subcmd == "state")) { return proc_features(cv, objc, objv); } @@ -547,6 +573,8 @@ std::string colvarscript::help_string() const Managing the Colvars module:\n\ configfile -- read configuration from a file\n\ config -- read configuration from the given string\n\ + getconfig -- get the module's configuration string\n\ + resetindexgroups -- clear the index groups loaded so far\n\ reset -- delete all internal configuration\n\ delete -- delete this Colvars module instance\n\ version -- return version of Colvars code\n\ @@ -579,6 +607,7 @@ Accessing collective variables:\n\ colvar gettotalforce -- return total force of colvar \n\ colvar getconfig -- return config string of colvar \n\ colvar cvcflags -- enable or disable cvcs according to 0/1 flags\n\ + colvar modifycvcs -- pass new config strings to each CVC\n\ colvar get -- get the value of the colvar feature \n\ colvar set -- set the value of the colvar feature \n\ \n\ diff --git a/lib/colvars/colvarscript.h b/lib/colvars/colvarscript.h index 39cd089340..313dbd661b 100644 --- a/lib/colvars/colvarscript.h +++ b/lib/colvars/colvarscript.h @@ -71,8 +71,10 @@ public: cv_help, cv_version, cv_config, + cv_getconfig, cv_configfile, cv_reset, + cv_resetindexgroups, cv_delete, cv_list, cv_list_biases, @@ -254,6 +256,23 @@ extern "C" { return COLVARSCRIPT_ERROR; ) + CVSCRIPT(cv_getconfig, + "Get the module's configuration string read so far", + 0, 0, + { }, + script->set_str_result(cvm::main()->get_config()); + return COLVARS_OK; + ) + + CVSCRIPT(cv_resetindexgroups, + "Clear the index groups loaded so far, allowing to replace them", + 0, 0, + { }, + cvm::main()->index_group_names.clear(); + cvm::main()->index_groups.clear(); + return COLVARS_OK; + ) + CVSCRIPT(cv_addenergy, "Add an energy to the MD engine", 1, 1, diff --git a/lib/colvars/colvarvalue.cpp b/lib/colvars/colvarvalue.cpp index 312d101603..86b99ed3d6 100644 --- a/lib/colvars/colvarvalue.cpp +++ b/lib/colvars/colvarvalue.cpp @@ -379,6 +379,40 @@ void colvarvalue::set_random() } +void colvarvalue::set_ones(cvm::real assigned_value) +{ + size_t ic; + switch (this->type()) { + case colvarvalue::type_scalar: + this->real_value = assigned_value; + break; + case colvarvalue::type_3vector: + case colvarvalue::type_unit3vector: + case colvarvalue::type_unit3vectorderiv: + this->rvector_value.x = assigned_value; + this->rvector_value.y = assigned_value; + this->rvector_value.z = assigned_value; + break; + case colvarvalue::type_quaternion: + case colvarvalue::type_quaternionderiv: + this->quaternion_value.q0 = assigned_value; + this->quaternion_value.q1 = assigned_value; + this->quaternion_value.q2 = assigned_value; + this->quaternion_value.q3 = assigned_value; + break; + case colvarvalue::type_vector: + for (ic = 0; ic < this->vector1d_value.size(); ic++) { + this->vector1d_value[ic] = assigned_value; + } + break; + case colvarvalue::type_notset: + default: + undef_op(); + break; + } +} + + void colvarvalue::undef_op() const { cvm::error("Error: Undefined operation on a colvar of type \""+ diff --git a/lib/colvars/colvarvalue.h b/lib/colvars/colvarvalue.h index 41759e92b0..25255e2f7c 100644 --- a/lib/colvars/colvarvalue.h +++ b/lib/colvars/colvarvalue.h @@ -187,6 +187,12 @@ public: return std::sqrt(this->norm2()); } + /// Sum of the components of this colvarvalue (if more than one dimension) + cvm::real sum() const; + + /// Return a colvarvalue object of the same type and all components set to 1 + colvarvalue ones() const; + /// Square distance between this \link colvarvalue \endlink and another cvm::real dist2(colvarvalue const &x2) const; @@ -272,17 +278,21 @@ public: /// Get a single colvarvalue out of elements of the vector colvarvalue const get_elem(int const i_begin, int const i_end, Type const vt) const; + /// Get a single colvarvalue out of elements of the vector + colvarvalue const get_elem(int const icv) const; + + /// Set elements of the vector from a single colvarvalue (uses the rank of x + /// to compute the length) + void set_elem(int const icv, colvarvalue const &x); + /// Set elements of the vector from a single colvarvalue void set_elem(int const i_begin, int const i_end, colvarvalue const &x); /// Make each element a random number in N(0,1) void set_random(); - /// Get a single colvarvalue out of elements of the vector - colvarvalue const get_elem(int const icv) const; - - /// Set elements of the vector from a single colvarvalue - void set_elem(int const icv, colvarvalue const &x); + /// Make each element equal to the given argument + void set_ones(cvm::real assigned_value = 1.0); /// Get a scalar number out of an element of the vector cvm::real operator [] (int const i) const; @@ -683,6 +693,29 @@ inline cvm::real colvarvalue::norm2() const } +inline cvm::real colvarvalue::sum() const +{ + switch (value_type) { + case colvarvalue::type_scalar: + return (this->real_value); + case colvarvalue::type_3vector: + case colvarvalue::type_unit3vector: + case colvarvalue::type_unit3vectorderiv: + return (this->rvector_value).x + (this->rvector_value).y + + (this->rvector_value).z; + case colvarvalue::type_quaternion: + case colvarvalue::type_quaternionderiv: + return (this->quaternion_value).q0 + (this->quaternion_value).q1 + + (this->quaternion_value).q2 + (this->quaternion_value).q3; + case colvarvalue::type_vector: + return (this->vector1d_value).sum(); + case colvarvalue::type_notset: + default: + return 0.0; + } +} + + inline cvm::real colvarvalue::dist2(colvarvalue const &x2) const { colvarvalue::check_types(*this, x2); diff --git a/src/USER-COLVARS/colvarproxy_lammps_version.h b/src/USER-COLVARS/colvarproxy_lammps_version.h index 0d451212b2..edd6778c64 100644 --- a/src/USER-COLVARS/colvarproxy_lammps_version.h +++ b/src/USER-COLVARS/colvarproxy_lammps_version.h @@ -1,5 +1,5 @@ #ifndef COLVARPROXY_VERSION -#define COLVARPROXY_VERSION "2018-04-29" +#define COLVARPROXY_VERSION "2018-08-29" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars From ea9746f26d1da69aa23468f0165561ec7aee8502 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 21:08:32 -0400 Subject: [PATCH 047/273] insert fix plumed docs into manual generation --- doc/src/fixes.txt | 1 + doc/src/lammps.book | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 66f6633124..601d8208fe 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -117,6 +117,7 @@ Fixes :h1 fix_phonon fix_pimd fix_planeforce + fix_plumed fix_poems fix_pour fix_precession_spin diff --git a/doc/src/lammps.book b/doc/src/lammps.book index f739712f08..9c97d403d4 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -337,6 +337,7 @@ fix_orient.html fix_phonon.html fix_pimd.html fix_planeforce.html +fix_plumed.html fix_poems.html fix_pour.html fix_precession_spin.html From b7e507a2585fe8e42d203c503e106296d5cee650 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 21:08:45 -0400 Subject: [PATCH 048/273] fix typo and reformat --- doc/src/fix_plumed.txt | 107 +++++++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 47 deletions(-) diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index d9ee6dce39..d5fbcd88ef 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -12,82 +12,95 @@ fix plumed command :h3 fix ID group-ID plumed keyword value ... :pre -ID, group-ID are documented in "fix"_fix.html command :ulb,l -plumed = style name of this fix command :1 -keyword = {plumedfile} or {outfile} :1 +ID, group-ID are documented in "fix"_fix.html command :ulb,l +plumed = style name of this fix command :l +keyword = {plumedfile} or {outfile} :l {plumedfile} arg = name of PLUMED input file to use (default: NULL) - {outfile} arg = name of file on which to write the PLUMED log (default: NULL) -:ule + {outfile} arg = name of file on which to write the PLUMED log (default: NULL) :pre +:ule [Examples:] -fix pl all plumed all plumed plumedfile plumed.dat outfile p.log +fix pl all plumed all plumed plumedfile plumed.dat outfile p.log [Description:] -This fix instructs LAMMPS to call the PLUMED library, which allows one -to perform various forms of trajectory analysis on the fly and to also use -methods such as umbrella sampling and metadynamics to enhance the sampling of -phase space. +This fix instructs LAMMPS to call the PLUMED library, which allows one +to perform various forms of trajectory analysis on the fly and to also +use methods such as umbrella sampling and metadynamics to enhance the +sampling of phase space. -The documentation included here only describes the fix plumed command. This command -is LAMMPS specific whereas most of the functionality implemented in PLUMED will work with a -range of MD codes and also when PLUMED is used as a stand alone code. The full documentation -for PLUMED is available at "this website"_http://www.plumed.org/documentation +The documentation included here only describes the fix plumed command. +This command is LAMMPS specific whereas most of the functionality +implemented in PLUMED will work with a range of MD codes and also when +PLUMED is used as a stand alone code. The full documentation for PLUMED +is available at "this website"_http://www.plumed.org/documentation -The PLUMED library is developed at "https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 -A detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. +The PLUMED library is developed at +"https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 A +detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. There are some example scripts for using this package with LAMMPS in the examples/USER/plumed directory. :line -The command to call PLUMED above is reasonably self explanatory. Within the input file -for lammps the user is required to specify the input file for PLUMED and a file on which -to output the PLUMED log. The user must specify both of these arguments every time -PLUMED is to be used. Furthermore, the fix plumed command should appear in the LAMMPS input -file after the relevant input paramters (e.g. the timestep) have been set. +The command to call PLUMED above is reasonably self explanatory. Within +the input file for lammps the user is required to specify the input file +for PLUMED and a file on which to output the PLUMED log. The user must +specify both of these arguments every time PLUMED is to be used. +Furthermore, the fix plumed command should appear in the LAMMPS input +file after the relevant input paramters (e.g. the timestep) have been +set. -The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED -and there can only be one instance of the plumed fix at a time. The plumed fix communicates -the minimum amount of information required and the PLUMED supports multiple, completely -independent collective variables, multiple independent biases and multiple independent forms of analysis. -There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. +The {group-ID} entry is ignored. LAMMPS will always pass all the atoms +to PLUMED and there can only be one instance of the plumed fix at a +time. The plumed fix communicates the minimum amount of information +required and the PLUMED supports multiple, completely independent +collective variables, multiple independent biases and multiple +independent forms of analysis. There is thus really no restriction in +functionality by only allowing only one plumed fix in the LAMMPS input. -The {plumedfile} keyword allows the user to specify the name of the PLUMED input file. -Instructions as to what should be included in a plumed input file can be found in the -"documentation for PLUMED"_http://www.plumed.org/documentation. +The {plumedfile} keyword allows the user to specify the name of the +PLUMED input file. Instructions as to what should be included in a +plumed input file can be found in the "documentation for +PLUMED"_http://www.plumed.org/documentation. -The {outfile} keyword allows the user to specify the name of a file on which to output -the PLUMED log. This log file normally just parots the information that is contained in the input -file. The names of the files on which the results from the various analyses that have been performed -using PLUMED will be specified by the user in the PLUMED input file. +The {outfile} keyword allows the user to specify the name of a file on +which to output the PLUMED log. This log file normally just parots the +information that is contained in the input file. The names of the files +on which the results from the various analyses that have been performed +using PLUMED will be specified by the user in the PLUMED input file. [Restart, fix_modify, output, run start/stop, minimize info:] -When performing a restart of a calculation that involves PLUMED you must include a RESTART command -in the PLUMED input file as detailed in the "PLUMED documentation"_http://www.plumed.org/documentation. When the restart -command is found in the PLUMED input PLUMED will append to the files that were generated in the run -that was performed previously. Furthermore, any history dependent bias potentials that were accumulated in -previous calculations will be read in when the restart command is included in the PLUMED input. +When performing a restart of a calculation that involves PLUMED you must +include a RESTART command in the PLUMED input file as detailed in the +"PLUMED documentation"_http://www.plumed.org/documentation. When the +restart command is found in the PLUMED input PLUMED will append to the +files that were generated in the run that was performed previously. +Furthermore, any history dependent bias potentials that were accumulated +in previous calculations will be read in when the restart command is +included in the PLUMED input. -The "fix_modify"_fix_modify.html {energy} option is not supported by this fix. +The "fix_modify"_fix_modify.html {energy} option is not supported by +this fix. -Nothing is computed by this fix that can be accessed by any of the +Nothing is computed by this fix that can be accessed by any of the "output commands"_Howto_output.html within LAMMPS. All the quantities -of interest can be output by commands that are native to PLUMED, however. +of interest can be output by commands that are native to PLUMED, +however. [Restrictions:] This fix is part of the USER-PLUMED package. It is only enabled if -LAMMPS was built with that package. See the "Build +LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. There can only be one plumed fix active at a time. Since the interface -communicates only the minimum amount of information and since the PLUMED module -itself can handle an arbitrary number of analysis and biasing methods, this is -not a limitation of functionality. +communicates only the minimum amount of information and since the PLUMED +module itself can handle an arbitrary number of analysis and biasing +methods, this is not a limitation of functionality. [Related commands:] @@ -96,9 +109,9 @@ not a limitation of functionality. [Default:] -The default options are plumedfile = NULL and outfile = NULL +The default options are plumedfile = NULL and outfile = NULL :line :link(PLUMED) -[(PLUMED)] G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) DOI:https://doi.org/10.1016/j.cpc.2013.09.018 +[(PLUMED)] G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) From 30518a993bfe6a402a232ff090c793bf4e8fd847 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 21:14:04 -0400 Subject: [PATCH 049/273] add LAMMPS header --- src/USER-PLUMED/fix_plumed.cpp | 16 ++++++++++++++++ src/USER-PLUMED/fix_plumed.h | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 7c05a02335..b326940d94 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -1,3 +1,19 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Gareth Tribello (Queens U, Belfast) +------------------------------------------------------------------------- */ #include #include diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index d4bc037024..55671f7c9b 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -1,3 +1,15 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ #ifdef FIX_CLASS From d185b34b191c629c41ad63f6d6af741a67f1eb34 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 21:19:53 -0400 Subject: [PATCH 050/273] reformat to closer match LAMMPS programming style --- src/USER-PLUMED/fix_plumed.h | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index 55671f7c9b..bc1d5af034 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -43,28 +43,19 @@ class FixPlumed : public Fix { double compute_scalar(); private: -// pointer to plumed object: - PLMD::Plumed *p; -// number of atoms local to this process: - int nlocal; -// array of atom indexes local to this process: - int *gatindex; -// array of masses for local atoms: - double *masses; -// array of charges for local atoms: - double *charges; -// this is something to enable respa - int nlevels_respa; -// output bias potential - double bias; -// Compute for the energy - class Compute *c_pe; -// Compute for the pressure - class Compute *c_press; -// Flag to trigger calculation of the energy and virial - int plumedNeedsEnergy; -// ID for potential energy and pressure compute - char *id_pe, *id_press; + + PLMD::Plumed *p; // pointer to plumed object + int nlocal; // number of atoms local to this process + int *gatindex; // array of atom indexes local to this process + double *masses; // array of masses for local atoms + double *charges; // array of charges for local atoms + int nlevels_respa; // this is something to enable respa + double bias; // output bias potential + class Compute *c_pe; // Compute for the energy + class Compute *c_press; // Compute for the pressure + int plumedNeedsEnergy; // Flag to trigger calculation of the + // energy and virial + char *id_pe, *id_press; // ID for potential energy and pressure compute }; }; From df3390e224074b18ffe95f9623aef1f1c5be3261 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 21:33:30 -0400 Subject: [PATCH 051/273] update formatting to closer match LAMMPS' programming style --- src/USER-PLUMED/fix_plumed.cpp | 189 ++++++++++++++++++--------------- 1 file changed, 103 insertions(+), 86 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index b326940d94..feb12716b8 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -55,6 +55,8 @@ #include "plumed/wrapper/Plumed.h" +/* -------------------------------------------------------------------- */ + using namespace LAMMPS_NS; using namespace FixConst; @@ -62,76 +64,88 @@ using namespace FixConst; FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), - p(NULL), - nlocal(0), - gatindex(NULL), - masses(NULL), - charges(NULL), - id_pe(NULL), - id_press(NULL) + p(NULL), nlocal(0), gatindex(NULL), masses(NULL), charges(NULL), + id_pe(NULL), id_press(NULL) { -// Not sure this is really necessary: - if (!atom->tag_enable) error->all(FLERR,"fix plumed requires atom tags"); -// Initialize plumed: - p=new PLMD::Plumed; -// Check API version - int api_version; p->cmd("getApiVersion",&api_version); - if( api_version>6 ) error->all(FLERR,"invalid api version for PLUMED"); -// If the -partition option is activated then enable inter-partition communication + if (!atom->tag_enable) + error->all(FLERR,"Fix plumed requires atom tags"); + + if (igroup != 0 && comm->me == 0) + error->warning(FLERR,"Fix group for fix plumed is not 'all'. " + "Group will be ignored."); + + + p=new PLMD::Plumed; + + // Check API version + + int api_version; + p->cmd("getApiVersion",&api_version); + if (api_version > 6) + error->all(FLERR,"Incompatible API version for PLUMED in fix plumed"); + + // If the -partition option is activated then enable + // inter-partition communication + if (universe->existflag == 1) { - int me; - MPI_Comm inter_comm; - MPI_Comm_rank(world,&me); - // Change MPI_COMM_WORLD to universe->uworld which seems more appropriate - MPI_Comm_split(universe->uworld,me,0,&inter_comm); - p->cmd("GREX setMPIIntracomm",&world); - if (me == 0) { - // The inter-partition communicator is only defined for the root in - // each partition (a.k.a. world). This is due to the way in which - // it is defined inside plumed. - p->cmd("GREX setMPIIntercomm",&inter_comm); - } - p->cmd("GREX init",NULL); + int me; + MPI_Comm inter_comm; + MPI_Comm_rank(world,&me); + + // Change MPI_COMM_WORLD to universe->uworld which seems more appropriate + + MPI_Comm_split(universe->uworld,me,0,&inter_comm); + p->cmd("GREX setMPIIntracomm",&world); + if (me == 0) { + // The inter-partition communicator is only defined for the root in + // each partition (a.k.a. world). This is due to the way in which + // it is defined inside plumed. + p->cmd("GREX setMPIIntercomm",&inter_comm); + } + p->cmd("GREX init",NULL); } + // The general communicator is independent of the existence of partitions, - // if there are partitions, world is defined within each partition, - // whereas if partitions are not defined then world is equal to MPI_COMM_WORLD. + // if there are partitions, world is defined within each partition, + // whereas if partitions are not defined then world is equal to + // MPI_COMM_WORLD. + p->cmd("setMPIComm",&world); -// Set up units -// LAMMPS units wrt kj/mol - nm - ps -// Set up units + // Set up units + // LAMMPS units wrt kj/mol - nm - ps + // Set up units - if (force->boltz == 1.0){ -// LAMMPS units lj + if (force->boltz == 1.0) { + // LAMMPS units lj p->cmd("setNaturalUnits"); } else { double energyUnits=1.0; double lengthUnits=1.0; double timeUnits=1.0; - if (force->boltz == 0.0019872067){ -// LAMMPS units real :: kcal/mol; angstrom; fs + if (force->boltz == 0.0019872067) { + // LAMMPS units real :: kcal/mol; angstrom; fs energyUnits=4.184; lengthUnits=0.1; timeUnits=0.001; - } else if (force->boltz == 8.617343e-5){ -// LAMMPS units metal :: eV; angstrom; ps + } else if (force->boltz == 8.617343e-5) { + // LAMMPS units metal :: eV; angstrom; ps energyUnits=96.48530749925792; lengthUnits=0.1; timeUnits=1.0; - } else if (force->boltz == 1.3806504e-23){ -// LAMMPS units si :: Joule, m; s + } else if (force->boltz == 1.3806504e-23) { + // LAMMPS units si :: Joule, m; s energyUnits=0.001; lengthUnits=1.e-9; timeUnits=1.e-12; - } else if (force->boltz == 1.3806504e-16){ -// LAMMPS units cgs :: erg; cms;, s + } else if (force->boltz == 1.3806504e-16) { + // LAMMPS units cgs :: erg; cms;, s energyUnits=6.0221418e13; lengthUnits=1.e-7; timeUnits=1.e-12; - } else if (force->boltz == 3.16681534e-6){ -// LAMMPS units electron :: Hartree, bohr, fs + } else if (force->boltz == 3.16681534e-6) { + // LAMMPS units electron :: Hartree, bohr, fs energyUnits=2625.5257; lengthUnits=0.052917725; timeUnits=0.001; @@ -141,12 +155,13 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : p->cmd("setMDTimeUnits",&timeUnits); } -// Read fix parameters: + // Read fix parameters: int next=0; - for(int i=3;iexistflag == 1){ + for (int i=3;iexistflag == 1) { // Each replica writes an independent log file // with suffix equal to the replica id char str_num[32], logFile[1024]; @@ -160,16 +175,16 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : p->cmd("setLogFile",arg[i]); next=0; } - } - else if(!strcmp(arg[i],"plumedfile"))next=2; - else if(next==2){ + } else if (!strcmp(arg[i],"plumedfile")) { + next=2; + } else if (next==2) { p->cmd("setPlumedDat",arg[i]); next=0; - } - else error->all(FLERR,"syntax error in fix plumed - use 'fix name plumed plumedfile plumed.dat outfile plumed.out' "); + } else error->all(FLERR,"Syntax error - use 'fix plumed " + "plumedfile plumed.dat outfile plumed.out' "); } - if(next==1) error->all(FLERR,"missing argument for outfile option"); - if(next==2) error->all(FLERR,"missing argument for plumedfile option"); + if (next==1) error->all(FLERR,"missing argument for outfile option"); + if (next==2) error->all(FLERR,"missing argument for plumedfile option"); p->cmd("setMDEngine","LAMMPS"); @@ -183,10 +198,12 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : thermo_virial=1; scalar_flag = 1; -// This is the real initialization: + // This is the real initialization: + p->cmd("init"); -// Define compute to calculate potential energy + // Define compute to calculate potential energy + id_pe = new char[7]; id_pe = (char *) "plmd_pe"; char **newarg = new char*[3]; @@ -220,7 +237,7 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : strncmp(modify->fix[i]->style,"npt",3) || strncmp(modify->fix[i]->style,"npt_sphere",10) ) error->all(FLERR,"Fix plumed must be called before fix_nh derived fixes, " - "for instance nph and npt fixes"); + "for instance nph and npt fixes"); } } @@ -248,7 +265,7 @@ void FixPlumed::init() nlevels_respa = ((Respa *) update->integrate)->nlevels; // This avoids nan pressure if compute_pressure is called // in a setup method - for(int i=0;i<6;i++) virial[i] = 0.; + for (int i=0;i<6;i++) virial[i] = 0.; } void FixPlumed::setup(int vflag) @@ -281,22 +298,22 @@ void FixPlumed::min_setup(int vflag) void FixPlumed::post_force(int /* vflag */) { // Check tag is enabled - if( !atom->tag_enable ) error->all(FLERR,"to run PLUMED you must have tag_enable==1"); + if ( !atom->tag_enable ) error->all(FLERR,"to run PLUMED you must have tag_enable==1"); int update_gatindex=0; // Try to find out if the domain decomposition has been updated: - if(nlocal!=atom->nlocal){ - if(charges) delete [] charges; - if(masses) delete [] masses; - if(gatindex) delete [] gatindex; + if (nlocal!=atom->nlocal) { + if (charges) delete [] charges; + if (masses) delete [] masses; + if (gatindex) delete [] gatindex; nlocal=atom->nlocal; gatindex=new int [nlocal]; masses=new double [nlocal]; charges=new double [nlocal]; update_gatindex=1; } else { - for(int i=0;itag[i]-1){ + for (int i=0;itag[i]-1) { update_gatindex=1; break; } @@ -306,19 +323,19 @@ void FixPlumed::post_force(int /* vflag */) // In case it has been updated, rebuild the local mass/charges array // and tell plumed about the change: - if(update_gatindex){ - for(int i=0;itag[i]-1; + if (update_gatindex) { + for (int i=0;itag[i]-1; // Get masses - if(atom->rmass_flag) { - for(int i=0;irmass[i]; + if (atom->rmass_flag) { + for (int i=0;irmass[i]; } else { - for(int i=0;imass[atom->type[i]]; + for (int i=0;imass[atom->type[i]]; } // Get charges - if(atom->q_flag) { - for(int i=0;iq[i]; + if (atom->q_flag) { + for (int i=0;iq[i]; } else { - for(int i=0;icmd("setAtomsNlocal",&nlocal); p->cmd("setAtomsGatindex",gatindex); @@ -327,9 +344,9 @@ void FixPlumed::post_force(int /* vflag */) // set up local virial/box. plumed uses full 3x3 matrices double plmd_virial[3][3]; - for(int i=0;i<3;i++) for(int j=0;j<3;j++) plmd_virial[i][j]=0.0; + for (int i=0;i<3;i++) for (int j=0;j<3;j++) plmd_virial[i][j]=0.0; double box[3][3]; - for(int i=0;i<3;i++) for(int j=0;j<3;j++) box[i][j]=0.0; + for (int i=0;i<3;i++) for (int j=0;j<3;j++) box[i][j]=0.0; box[0][0]=domain->h[0]; box[1][1]=domain->h[1]; box[2][2]=domain->h[2]; @@ -338,7 +355,7 @@ void FixPlumed::post_force(int /* vflag */) box[1][0]=domain->h[5]; // Make initial of virial of this fix zero // The following line is very important, otherwise the compute pressure will include - for(int i=0;i<6;++i) virial[i] = 0.; + for (int i=0;i<6;++i) virial[i] = 0.; // local variable with timestep: int step=update->ntimestep; @@ -349,7 +366,7 @@ void FixPlumed::post_force(int /* vflag */) p->cmd("setBox",&box[0][0]); p->cmd("setForces",&atom->f[0][0]); p->cmd("setMasses",&masses[0]); - if(atom->q) p->cmd("setCharges",&charges[0]); + if (atom->q) p->cmd("setCharges",&charges[0]); p->cmd("getBias",&bias); // Pass virial to plumed // If energy is needed virial_plmd is equal to Lammps' virial @@ -368,9 +385,9 @@ void FixPlumed::post_force(int /* vflag */) // Error if tail corrections are included if (force->pair && force->pair->tail_flag) error->all(FLERR,"Tail corrections to the pair potential included." - " The energy cannot be biased in this case." - " Remove the tail corrections by removing the" - " command: pair_modify tail yes"); + " The energy cannot be biased in this case." + " Remove the tail corrections by removing the" + " command: pair_modify tail yes"); // compute the potential energy double pot_energy = 0.; c_pe->compute_scalar(); @@ -386,7 +403,7 @@ void FixPlumed::post_force(int /* vflag */) virial_lmp = c_press->vector; // Check if pressure is finite if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1]) || !std::isfinite(virial_lmp[2]) - || !std::isfinite(virial_lmp[3]) || !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5])) + || !std::isfinite(virial_lmp[3]) || !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5])) error->all(FLERR,"Non-numeric virial - Plumed cannot work with that"); // Convert pressure to virial per number of MPI processes // From now on all virials are divided by the number of MPI processes @@ -397,7 +414,7 @@ void FixPlumed::post_force(int /* vflag */) } else { inv_volume = 1.0 / (domain->xprd * domain->yprd); } - for(int i=0;i<6;i++) virial_lmp[i] /= (inv_volume * nktv2p * nprocs); + for (int i=0;i<6;i++) virial_lmp[i] /= (inv_volume * nktv2p * nprocs); // Convert virial from lammps to plumed representation plmd_virial[0][0]=-virial_lmp[0]; plmd_virial[1][1]=-virial_lmp[1]; @@ -407,7 +424,7 @@ void FixPlumed::post_force(int /* vflag */) plmd_virial[1][2]=-virial_lmp[5]; } else { virial_lmp = new double[6]; - for(int i=0;i<6;i++) virial_lmp[i] = 0.; + for (int i=0;i<6;i++) virial_lmp[i] = 0.; } // do the real calculation: p->cmd("performCalc"); From 54c52c3bdfea31eacea8baa2fe111d3a059ca381 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 22:52:36 -0400 Subject: [PATCH 052/273] adjust compilation settings to link in plumed library statically and all its dependencies --- lib/plumed/.gitignore | 1 + lib/plumed/Install.py | 5 ++- lib/plumed/Makefile.lammps.static | 5 +++ src/USER-PLUMED/Install.sh | 72 ++++++++++++++++++++----------- 4 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 lib/plumed/Makefile.lammps.static diff --git a/lib/plumed/.gitignore b/lib/plumed/.gitignore index c17bb18bf0..d79d6d4413 100644 --- a/lib/plumed/.gitignore +++ b/lib/plumed/.gitignore @@ -1,3 +1,4 @@ /plumed2* /includelink /liblink +/plumed-* diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 98827a3fda..29b9136ccf 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -156,7 +156,6 @@ if buildflag: if not checkmd5sum(checksums[version],filename): error("Checksum for plumed2 library does not match") - print("Unpacking plumed2 tarball ...") if os.path.exists("%s/plumed2-%s" % (homepath,version)): cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) @@ -188,3 +187,7 @@ if linkflag: subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'ln -s "%s/plumed2/lib" liblink' % homepath subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + if os.path.isfile("Makefile.lammps.static"): + print("Creating Makefile.lammps") + cmd = 'cat liblink/plumed/src/lib/Plumed.inc.static Makefile.lammps.static > Makefile.lammps' + diff --git a/lib/plumed/Makefile.lammps.static b/lib/plumed/Makefile.lammps.static new file mode 100644 index 0000000000..860202a6f2 --- /dev/null +++ b/lib/plumed/Makefile.lammps.static @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +plumed_SYSINC = +plumed_SYSLIB = $(PLUMED_LOAD) +plumed_SYSPATH = diff --git a/src/USER-PLUMED/Install.sh b/src/USER-PLUMED/Install.sh index 20215e4c99..f879d42feb 100755 --- a/src/USER-PLUMED/Install.sh +++ b/src/USER-PLUMED/Install.sh @@ -1,45 +1,65 @@ # Install/unInstall package files in LAMMPS -# edit 2 Makefile.package files to include/exclude ATC info +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + +# edit 2 Makefile.package files to include/exclude package info if (test $1 = 1) then if (test -e ../Makefile.package) then - sed -i -e 's|^PKG_LIB =[ \t]*|& -lplumedWrapper -ldl |' ../Makefile.package - if ( ! test -e ../../lib/plumed/liblink/plumed/src/lib/Plumed.inc.static ) then - sed -i -e 's|^PKG_SYSINC =[ \t]*|& -D__PLUMED_HAS_DLOPEN |' ../Makefile.package - fi + sed -i -e 's/[^ \t]*plumed[^ \t]* //' ../Makefile.package sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/plumed/includelink |' ../Makefile.package - sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/plumed/liblink |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(plumed_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(plumed_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(plumed_SYSPATH) |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - # This is for statically linking plumed2 - if ( test -e ../../lib/plumed/liblink/src/lib/Plumed.inc.static ) then - fname=../../lib/plumed/liblink/src/lib/Plumed.inc.static - sed -i -e '4 i \ -include '$fname' -' ../Makefile.package.settings - # This is for linking plumed2 as a runtime library -- this is the default behavior - else + sed -i -e '/^include.*plumed.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs - sed -i -e '4 i \ -PLUMED_LOAD=-ldl + sed -i -e '4 i \ +include ..\/..\/lib\/plumed\/Makefile.lammps ' ../Makefile.package.settings - fi fi - cp fix_plumed.cpp .. - cp fix_plumed.h .. - elif (test $1 = 0) then if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*-lplumedWrapper -ldl[^ \t]* //' ../Makefile.package - sed -i -e 's/[^ \t]*-D__PLUMED_HAS_DLOPEN[^ \t]* //' ../Makefile.package - sed -i -e 's|[^ \t]*-I../../lib/plumed/includelink[^ \t]* ||' ../Makefile.package - sed -i -e 's|[^ \t]*-L../../lib/plumed/liblink[^ \t]* ||' ../Makefile.package + sed -i -e 's/[^ \t]*plumed[^ \t]* //' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*plumed.*$/d' ../Makefile.package.settings fi - rm -f ../fix_plumed.cpp - rm -f ../fix_plumed.h fi From 3cb2291a5a70fc982447c04d2d6cc38e61622f93 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 22:52:51 -0400 Subject: [PATCH 053/273] need to include comm.h now --- src/USER-PLUMED/fix_plumed.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index feb12716b8..8ab2decbf8 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -20,6 +20,7 @@ #include #include "atom.h" +#include "comm.h" #include "update.h" #include "force.h" #include "respa.h" From 18216de084461876f02f676008449b55273dba8a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 23:21:09 -0400 Subject: [PATCH 054/273] correctly check for fixes that maintain their own pressure compute --- src/USER-PLUMED/fix_plumed.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 8ab2decbf8..c30fc3d3dc 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -229,16 +229,29 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : delete [] newarg; int ipress = modify->find_compute(id_press); c_press = modify->compute[ipress]; - - // Check if nh type fixes have been called - // See comment in the setup method + for (int i = 0; i < modify->nfix; i++) { - if ( strncmp(modify->fix[i]->style,"nph",3) || - strncmp(modify->fix[i]->style,"nph_sphere",10) || - strncmp(modify->fix[i]->style,"npt",3) || - strncmp(modify->fix[i]->style,"npt_sphere",10) ) - error->all(FLERR,"Fix plumed must be called before fix_nh derived fixes, " - "for instance nph and npt fixes"); + const char * const check_style = modify->fix[i]->style; + + // There must be only one + + if (strcmp(check_style,"plumed") == 0) + error->all(FLERR,"There must be only one instance of fix plumed"); + + // Avoid conflict with fixes that define internal pressure computes. + // See comment in the setup method + + if ((strncmp(check_style,"nph",3) == 0) || + (strncmp(check_style,"npt",3) == 0) || + (strncmp(check_style,"rigid/nph",9) == 0) || + (strncmp(check_style,"rigid/npt",9) == 0) || + (strncmp(check_style,"msst",4) == 0) || + (strncmp(check_style,"nphug",5) == 0) || + (strncmp(check_style,"ipi",3) == 0) || + (strncmp(check_style,"press/berendsen",15) == 0) || + (strncmp(check_style,"qbmsst",6) == 0)) + error->all(FLERR,"Fix plumed must be defined before any other fixes, " + "that compute pressure internally"); } } From ac11d66d5a6eadba1d4cea4bec0f562899118701 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Nov 2018 23:28:09 -0400 Subject: [PATCH 055/273] provide reference logfiles and move generated files to reference folder --- .../plumed/log.24Oct18.peptide-plumed.g++.1 | 162 ++++++++++++++++++ .../plumed/log.24Oct18.peptide-plumed.g++.4 | 162 ++++++++++++++++++ examples/USER/plumed/{ => reference}/colvar | 0 examples/USER/plumed/{ => reference}/p.log | 0 4 files changed, 324 insertions(+) create mode 100644 examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 create mode 100644 examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 rename examples/USER/plumed/{ => reference}/colvar (100%) rename examples/USER/plumed/{ => reference}/p.log (100%) diff --git a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 new file mode 100644 index 0000000000..9bf403fd27 --- /dev/null +++ b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 @@ -0,0 +1,162 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 2 all plumed plumedfile plumed.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +variable step equal step +variable pe equal pe + +run 101 +PPPM initialization ... + using 12-bit tables for long-range coulomb (../kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 10648 3375 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 0 + 10 276.9783 -5234.3057 -6348.6171 1114.3114 -6421.6171 17.024361 0.47785504 + 20 279.08532 -5226.4036 -6349.1917 1122.7881 -6441.0169 20.764378 0.52605302 + 30 282.32141 -5222.3866 -6358.1939 1135.8073 -6448.9785 22.945165 0.65106011 + 40 276.34173 -5218.7623 -6330.5128 1111.7504 -6423.7566 15.655345 0.23795099 + 50 286.12741 -5215.9248 -6367.0439 1151.1192 -6449.2655 17.420975 0.42646205 + 60 273.01449 -5217.7381 -6316.1026 1098.3646 -6406.4709 21.800931 0.92327815 + 70 274.67549 -5221.0246 -6326.0716 1105.047 -6409.7721 19.41235 0.0016975896 + 80 273.74824 -5224.7613 -6326.0778 1101.3165 -6418.5055 19.206793 0.48550348 + 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3467 21.124789 0.5468014 +SHAKE stats (type/ave/delta) on step 100 + 4 1.111 2.06868e-06 + 6 0.996999 2.09521e-06 + 8 1.08 1.10835e-06 + 10 1.111 2.46599e-06 + 12 1.08 8.86314e-07 + 14 0.959999 0 + 18 0.9572 9.14098e-06 + 31 104.52 0.000760401 + 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.0094784372 + 101 270.99811 -5235.8295 -6326.082 1090.2525 -6418.8974 17.285816 0.086681332 +Loop time of 2.12948 on 1 procs for 101 steps with 2004 atoms + +Performance: 8.196 ns/day, 2.928 hours/ns, 47.429 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.757 | 1.757 | 1.757 | 0.0 | 82.51 +Bond | 0.0052233 | 0.0052233 | 0.0052233 | 0.0 | 0.25 +Kspace | 0.14772 | 0.14772 | 0.14772 | 0.0 | 6.94 +Neigh | 0.16455 | 0.16455 | 0.16455 | 0.0 | 7.73 +Comm | 0.0083704 | 0.0083704 | 0.0083704 | 0.0 | 0.39 +Output | 0.00031424 | 0.00031424 | 0.00031424 | 0.0 | 0.01 +Modify | 0.044411 | 0.044411 | 0.044411 | 0.0 | 2.09 +Other | | 0.001851 | | | 0.09 + +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11134 ave 11134 max 11134 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 707961 ave 707961 max 707961 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 707961 +Ave neighs/atom = 353.274 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 8 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 new file mode 100644 index 0000000000..1437524154 --- /dev/null +++ b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 @@ -0,0 +1,162 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 2 all plumed plumedfile plumed.dat outfile p.log +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 +variable step equal step +variable pe equal pe + +run 101 +PPPM initialization ... + using 12-bit tables for long-range coulomb (../kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 6776 1800 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 16.81 | 16.82 | 16.83 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 0 + 10 276.9783 -5234.3057 -6348.6171 1114.3114 -6421.6171 17.024361 0.47785504 + 20 279.08532 -5226.4036 -6349.1917 1122.7881 -6441.0169 20.764378 0.52605302 + 30 282.32141 -5222.3866 -6358.1939 1135.8073 -6448.9785 22.945165 0.65106011 + 40 276.34173 -5218.7623 -6330.5128 1111.7504 -6423.7566 15.655345 0.23795099 + 50 286.12741 -5215.9248 -6367.0439 1151.1192 -6449.2655 17.420975 0.42646205 + 60 273.01449 -5217.7381 -6316.1026 1098.3646 -6406.4709 21.800931 0.92327815 + 70 274.67549 -5221.0246 -6326.0716 1105.047 -6409.7721 19.41235 0.0016975896 + 80 273.74824 -5224.7613 -6326.0778 1101.3165 -6418.5055 19.206793 0.48550348 + 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3467 21.124789 0.5468014 +SHAKE stats (type/ave/delta) on step 100 + 4 1.111 2.06868e-06 + 6 0.996999 2.09521e-06 + 8 1.08 1.10835e-06 + 10 1.111 2.46599e-06 + 12 1.08 8.86314e-07 + 14 0.959999 0 + 18 0.9572 9.14098e-06 + 31 104.52 0.000760401 + 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.0094784372 + 101 270.99811 -5235.8295 -6326.082 1090.2525 -6418.8974 17.285816 0.086681332 +Loop time of 1.23137 on 2 procs for 101 steps with 2004 atoms + +Performance: 14.173 ns/day, 1.693 hours/ns, 82.022 timesteps/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.97985 | 0.98197 | 0.98409 | 0.2 | 79.75 +Bond | 0.0033333 | 0.0035326 | 0.003732 | 0.3 | 0.29 +Kspace | 0.096567 | 0.098457 | 0.10035 | 0.6 | 8.00 +Neigh | 0.088877 | 0.088888 | 0.088898 | 0.0 | 7.22 +Comm | 0.018255 | 0.018347 | 0.01844 | 0.1 | 1.49 +Output | 0.00024843 | 0.00031161 | 0.00037479 | 0.0 | 0.03 +Modify | 0.037596 | 0.037645 | 0.037695 | 0.0 | 3.06 +Other | | 0.00222 | | | 0.18 + +Nlocal: 1002 ave 1010 max 994 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 8639.5 ave 8651 max 8628 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 353980 ave 355907 max 352054 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 707961 +Ave neighs/atom = 353.274 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 8 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/plumed/colvar b/examples/USER/plumed/reference/colvar similarity index 100% rename from examples/USER/plumed/colvar rename to examples/USER/plumed/reference/colvar diff --git a/examples/USER/plumed/p.log b/examples/USER/plumed/reference/p.log similarity index 100% rename from examples/USER/plumed/p.log rename to examples/USER/plumed/reference/p.log From badfdd74332c826b3611fa08741b4eee35e34601 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Nov 2018 00:21:10 -0400 Subject: [PATCH 056/273] download only the plumed-src package and include further tweaks to be compatible with plumed 2.5b --- .../plumed/log.24Oct18.peptide-plumed.g++.4 | 44 +++++++++---------- lib/plumed/Install.py | 33 +++++++++----- src/USER-PLUMED/fix_plumed.cpp | 20 +-------- 3 files changed, 47 insertions(+), 50 deletions(-) diff --git a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 index 1437524154..771a0de1d0 100644 --- a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 +++ b/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 @@ -15,7 +15,7 @@ kspace_style pppm 0.0001 read_data data.peptide orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 2 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 2004 atoms reading velocities ... @@ -85,7 +85,7 @@ PPPM initialization ... estimated absolute RMS force accuracy = 0.0228209 estimated relative force accuracy = 6.87243e-05 using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 + 3d grid and FFT values/proc = 4312 960 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -107,7 +107,7 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Per MPI rank memory allocation (min/avg/max) = 16.81 | 16.82 | 16.83 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes Step Temp TotEng PotEng KinEng E_pair E_bond f_2 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 0 10 276.9783 -5234.3057 -6348.6171 1114.3114 -6421.6171 17.024361 0.47785504 @@ -118,7 +118,7 @@ Step Temp TotEng PotEng KinEng E_pair E_bond f_2 60 273.01449 -5217.7381 -6316.1026 1098.3646 -6406.4709 21.800931 0.92327815 70 274.67549 -5221.0246 -6326.0716 1105.047 -6409.7721 19.41235 0.0016975896 80 273.74824 -5224.7613 -6326.0778 1101.3165 -6418.5055 19.206793 0.48550348 - 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3467 21.124789 0.5468014 + 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3466 21.124789 0.5468014 SHAKE stats (type/ave/delta) on step 100 4 1.111 2.06868e-06 6 0.996999 2.09521e-06 @@ -128,31 +128,31 @@ SHAKE stats (type/ave/delta) on step 100 14 0.959999 0 18 0.9572 9.14098e-06 31 104.52 0.000760401 - 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.0094784372 + 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.009478437 101 270.99811 -5235.8295 -6326.082 1090.2525 -6418.8974 17.285816 0.086681332 -Loop time of 1.23137 on 2 procs for 101 steps with 2004 atoms +Loop time of 1.16767 on 4 procs for 101 steps with 2004 atoms -Performance: 14.173 ns/day, 1.693 hours/ns, 82.022 timesteps/s -99.5% CPU use with 2 MPI tasks x 1 OpenMP threads +Performance: 14.947 ns/day, 1.606 hours/ns, 86.497 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.97985 | 0.98197 | 0.98409 | 0.2 | 79.75 -Bond | 0.0033333 | 0.0035326 | 0.003732 | 0.3 | 0.29 -Kspace | 0.096567 | 0.098457 | 0.10035 | 0.6 | 8.00 -Neigh | 0.088877 | 0.088888 | 0.088898 | 0.0 | 7.22 -Comm | 0.018255 | 0.018347 | 0.01844 | 0.1 | 1.49 -Output | 0.00024843 | 0.00031161 | 0.00037479 | 0.0 | 0.03 -Modify | 0.037596 | 0.037645 | 0.037695 | 0.0 | 3.06 -Other | | 0.00222 | | | 0.18 +Pair | 0.84633 | 0.86651 | 0.88617 | 1.6 | 74.21 +Bond | 0.0010614 | 0.0027132 | 0.004288 | 3.0 | 0.23 +Kspace | 0.095008 | 0.1162 | 0.13491 | 4.3 | 9.95 +Neigh | 0.07834 | 0.078424 | 0.078516 | 0.0 | 6.72 +Comm | 0.03314 | 0.033299 | 0.033426 | 0.1 | 2.85 +Output | 0.00036979 | 0.00076199 | 0.0019338 | 0.0 | 0.07 +Modify | 0.063471 | 0.064011 | 0.065312 | 0.3 | 5.48 +Other | | 0.005751 | | | 0.49 -Nlocal: 1002 ave 1010 max 994 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8639.5 ave 8651 max 8628 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 353980 ave 355907 max 352054 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 501 ave 512 max 492 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Nghost: 6570.25 ave 6604 max 6529 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Neighs: 176990 ave 181122 max 173551 min +Histogram: 1 1 0 0 0 0 1 0 0 1 Total # of neighbors = 707961 Ave neighs/atom = 353.274 diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 29b9136ccf..481cfdcc0e 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -35,10 +35,16 @@ version = "2.4.3" # known checksums for different PLUMED versions. used to validate the download. checksums = { \ - '2.4.2' : '0f66f24b4c763ae8b2f39574113e9935', \ - '2.4.3' : 'dc38de0ffd59d13950d8f1ef1ce05574', \ + '2.4.2' : '88188743a6e03ef076e5377d03ebb0e7', \ + '2.4.3' : 'b1be7c48971627febc11c61b70767fc5', \ + '2.5b' : 'e341bdef469be1da058b8a0b97a3db22', \ } +#checksums = { \ +# '2.4.2' : '0f66f24b4c763ae8b2f39574113e9935', \ +# '2.4.3' : 'dc38de0ffd59d13950d8f1ef1ce05574', \ +# } + # print error message or help def error(str=None): if not str: print(help) @@ -146,8 +152,10 @@ if (not buildflag and not pathflag): # download and unpack plumed2 tarball if buildflag: - url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version - filename = "v%s.tar.gz" %version + url = "https://github.com/plumed/plumed2/releases/download/v%s/plumed-src-%s.tgz" % (version,version) + filename = "plumed-src-%s.tar.gz" %version + #url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version + #filename = "v%s.tar.gz" %version print("Downloading plumed ...") geturl(url,filename) @@ -156,22 +164,26 @@ if buildflag: if not checkmd5sum(checksums[version],filename): error("Checksum for plumed2 library does not match") - print("Unpacking plumed2 tarball ...") - if os.path.exists("%s/plumed2-%s" % (homepath,version)): - cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) + print("Unpacking plumed2 source tarball ...") + if os.path.exists("%s/plumed-%s" % (homepath,version)): + cmd = 'rm -rf "%s/plumed-%s"' % (homepath,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + #if os.path.exists("%s/plumed2-%s" % (homepath,version)): + # cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) + # subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.exists("%s/plumed2" % (homepath)): cmd = 'rm -rf "%s/plumed2"' % (homepath) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - cmd = 'cd "%s"; tar -xzvf v%s.tar.gz' % (homepath,version) + cmd = 'cd "%s"; tar -xzvf %s' % (homepath,filename) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - os.remove("%s/v%s.tar.gz" % (homepath,version)) + os.remove("%s/%s" % (homepath,filename)) # build plumed if buildflag: print("Building plumed ...") - cmd = 'cd %s/plumed2-%s; ./configure --prefix=%s/plumed2 ; make ; make install' % (homepath,version,homepath) + cmd = 'cd %s/plumed-%s; ./configure --prefix=%s/plumed2 --enable-static-patch ; make ; make install' % (homepath,version,homepath) + #cmd = 'cd %s/plumed2-%s; ./configure --prefix=%s/plumed2 --enable-static-patch ; make ; make install' % (homepath,version,homepath) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) print(txt.decode('UTF-8')) # @@ -190,4 +202,5 @@ if linkflag: if os.path.isfile("Makefile.lammps.static"): print("Creating Makefile.lammps") cmd = 'cat liblink/plumed/src/lib/Plumed.inc.static Makefile.lammps.static > Makefile.lammps' + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index c30fc3d3dc..831b7bef6e 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -34,25 +34,9 @@ #include "pair.h" /* - Do not link plumed directly but rather do it at runtime + Use statically linked C++ interface to plumed */ -#define __PLUMED_WRAPPER_LINK_RUNTIME 1 - -/* - Make sure the inline C++ interface is not included here. - Should not be necessary, but it doesn't hurt. -*/ -#define __PLUMED_WRAPPER_CXX 0 - -/* - Tell Plumed.h to emit the whole implementation -*/ -#define __PLUMED_WRAPPER_IMPLEMENTATION 1 - -/* - Emit fortran wrappers -*/ -#define __PLUMED_WRAPPER_FORTRAN 1 +#define __PLUMED_WRAPPER_CXX 1 #include "plumed/wrapper/Plumed.h" From f7aa01d74a0cd7f25b7b24cc04c6531539679353 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sat, 3 Nov 2018 11:57:46 -0600 Subject: [PATCH 057/273] bond/react: convert group-ID to group-ID-prefix enables consistent syntax when using custom groups --- doc/src/fix_bond_react.txt | 34 ++++++++++++++-------------- src/USER-MISC/fix_bond_react.cpp | 38 ++++++++++++++++---------------- src/USER-MISC/fix_bond_react.h | 6 ++--- 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index b5ac87327d..fc08a9b14e 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -24,11 +24,11 @@ common_keyword = {stabilization} :l {stabilization} values = {no} or {yes} {group-ID} {xmax} {no} = no reaction site stabilization {yes} = perform reaction site stabilization - {group-ID} = user-assigned ID for all non-reacting atoms (group created internally) + {group-ID} = user-assigned prefix for the dynamic group of non-reacting atoms {xmax} = xmax value that is used by an internally created "nve/limit"_fix_nve_limit.html integrator :pre react = mandatory argument indicating new reaction specification :l react-ID = user-assigned name for the reaction :l - react-group-ID = only atoms in this group are available for the reaction :l + react-group-ID = only atoms in this group are considered for the reaction :l Nevery = attempt reaction every this many steps :l Rmin = bonding pair atoms must be separated by more than Rmin to initiate reaction (distance units) :l Rmax = bonding pair atoms must be separated by less than Rmax to initiate reaction (distance units) :l @@ -51,7 +51,7 @@ react = mandatory argument indicating new reaction specification :l molecule mol1 pre_reacted_topology.txt molecule mol2 post_reacted_topology.txt -fix 5 all bond/react stabilization no react myrxn1 all 1 0 3.25 mol1 mol2 map_file.txt :pre +fix 5 all bond/react react myrxn1 all 1 0 3.25 mol1 mol2 map_file.txt :pre molecule mol1 pre_reacted_rxn1.txt molecule mol2 post_reacted_rxn1.txt @@ -60,7 +60,7 @@ molecule mol4 post_reacted_rxn2.txt fix 5 all bond/react stabilization yes nvt_grp .03 & react myrxn1 all 1 0 3.25 mol1 mol2 map_file_rxn1.txt prob 0.50 12345 & react myrxn2 all 1 0 2.75 mol3 mol4 map_file_rxn2.txt prob 0.25 12345 -fix 6 nvt_grp nvt temp 300 300 100 # set thermostat after bond/react :pre +fix 6 nvt_grp_REACT nvt temp 300 300 100 # set thermostat after bond/react :pre [Description:] @@ -104,20 +104,22 @@ during the simulation. The group-ID set using the {stabilization} keyword can be an existing static group or a previously-unused group-ID. It cannot be specified -as 'all'. If the group-ID is previously unused, fix bond/react command -creates a "dynamic group"_group.html of this name that is initialized -to include all atoms. If the group-ID is that of an existing static -group, the group is converted into a dynamic group, whose atoms are -limited to those belonging to the original static group. In either -case, this dynamic group-ID should then be used by a subsequent -system-wide time integrator such as nvt, npt, or nve, as shown in the -second example above. The time integration command should be placed -after the fix bond/react command due to the internal dynamic grouping -performed by fix bond/react. By specifying an existing group, you may -thermostat non-reacting parts of your system separately. +as 'all'. If the group-ID is previously unused, the fix bond/react +command creates a "dynamic group"_group.html that is initialized to +include all atoms. If the group-ID is that of an existing static +group, the group is used as the parent group of new, +internally-created dynamic group. In both cases, this new dynamic +group is named by appending '_REACT' to the group-ID, e.g. +nvt_grp_REACT. By specifying an existing group, you may thermostat +constant-topology parts of your system separately. The dynamic group +contains only non-reacting atoms at a given timestep, and therefore +should be used by a subsequent system-wide time integrator such as +nvt, npt, or nve, as shown in the second example above. The time +integration command should be placed after the fix bond/react command +due to the internal dynamic grouping performed by fix bond/react. NOTE: If the group-ID is an existing static group, react-group-IDs -should also be specified as this group, or a subset. +should also be specified as this static group, or a subset. NOTE: If the group-ID is previously unused, the internally created group applies to all atoms in the system, i.e. you should generally diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index abb2f9f7d8..61616f667d 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -78,6 +78,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : fix1 = NULL; fix2 = NULL; + fix3 = NULL; if (narg < 8) error->all(FLERR,"Illegal fix bond/react command: " "too few arguments"); @@ -433,10 +434,8 @@ FixBondReact::~FixBondReact() if (id_fix1 == NULL && modify->nfix) modify->delete_fix(id_fix1); delete [] id_fix1; - if (custom_exclude_flag == 0) { - if (id_fix3 == NULL && modify->nfix) modify->delete_fix(id_fix3); - delete [] id_fix3; - } + if (id_fix3 == NULL && modify->nfix) modify->delete_fix(id_fix3); + delete [] id_fix3; } if (id_fix2 == NULL && modify->nfix) modify->delete_fix(id_fix2); @@ -512,14 +511,14 @@ void FixBondReact::post_constructor() ifix = modify->find_fix(id_fix3); if (ifix == -1) { char **newarg = new char*[6]; - newarg[0] = (char *) "bond_react_stabilization_internal"; + newarg[0] = (char *) id_fix3; newarg[1] = (char *) "all"; // group ID is ignored newarg[2] = (char *) "property/atom"; newarg[3] = (char *) "i_statted_tags"; newarg[4] = (char *) "ghost"; newarg[5] = (char *) "yes"; modify->add_fix(6,newarg); - fix2 = modify->fix[modify->nfix-1]; + fix3 = modify->fix[modify->nfix-1]; delete [] newarg; } @@ -527,17 +526,17 @@ void FixBondReact::post_constructor() statted_id = new char[len]; strcpy(statted_id,"statted_tags"); - // if static group exists, duplicate it, use duplicate as parent group - // original will be converted into dynamic per-atom property group - if (igroup != -1) { - char **newarg; - newarg = new char*[3]; - newarg[0] = (char *) "exclude_PARENT_group"; - newarg[1] = (char *) "union"; - newarg[2] = exclude_group; - group->assign(3,newarg); - delete [] newarg; - } + // if static group exists, use as parent group + // also, rename dynamic exclude_group by appending '_REACT' + char *exclude_PARENT_group; + int n = strlen(exclude_group) + 1; + exclude_PARENT_group = new char[n]; + strcpy(exclude_PARENT_group,exclude_group); + n += strlen("_REACT"); + delete [] exclude_group; + exclude_group = new char[n]; + strcpy(exclude_group,exclude_PARENT_group); + strcat(exclude_group,"_REACT"); group->find_or_create(exclude_group); char **newarg; @@ -545,16 +544,17 @@ void FixBondReact::post_constructor() newarg[0] = exclude_group; newarg[1] = (char *) "dynamic"; if (igroup == -1) newarg[2] = (char *) "all"; - else newarg[2] = (char *) "exclude_PARENT_group"; + else newarg[2] = (char *) exclude_PARENT_group; newarg[3] = (char *) "property"; newarg[4] = (char *) "statted_tags"; group->assign(5,newarg); delete [] newarg; + delete [] exclude_PARENT_group; // on to statted_tags (system-wide thermostat) // intialize per-atom statted_flags to 1 // (only if not already initialized by restart) - if (fix2->restart_reset != 1) { + if (fix3->restart_reset != 1) { int flag; int index = atom->find_custom("statted_tags",flag); int *i_statted_tags = atom->ivector[index]; diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 472a02be1a..ca1f3bd20c 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -78,9 +78,9 @@ class FixBondReact : public Fix { class Molecule *onemol; // pre-reacted molecule template class Molecule *twomol; // post-reacted molecule template Fix *fix1; // nve/limit used to relax reaction sites - Fix *fix2; // properties/atom used to indicate 1) indicate relaxing atoms - // 2) system-wide thermostat - // 3) to which 'react' atom belongs + Fix *fix2; // properties/atom used to indicate 1) relaxing atoms + // 2) to which 'react' atom belongs + Fix *fix3; // property/atom used for system-wide thermostat class RanMars **random; class NeighList *list; From a37d718ed108d4f89afdee63340ec07ff3e52559 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sat, 3 Nov 2018 12:01:00 -0600 Subject: [PATCH 058/273] update bond/react examples --- .../USER/misc/bond_react/nylon,6-6_melt/in.large_nylon_melt | 2 +- examples/USER/misc/bond_react/tiny_nylon/in.tiny_nylon | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/USER/misc/bond_react/nylon,6-6_melt/in.large_nylon_melt b/examples/USER/misc/bond_react/nylon,6-6_melt/in.large_nylon_melt index f2dc506dde..3982da799d 100644 --- a/examples/USER/misc/bond_react/nylon,6-6_melt/in.large_nylon_melt +++ b/examples/USER/misc/bond_react/nylon,6-6_melt/in.large_nylon_melt @@ -36,7 +36,7 @@ fix myrxns all bond/react stabilization yes statted_grp .03 & react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map # stable at 800K -fix 1 statted_grp nvt temp 800 800 100 +fix 1 statted_grp_REACT nvt temp 800 800 100 # in order to customize behavior of reacting atoms, # you can use the internally created 'bond_react_MASTER_group', like so: diff --git a/examples/USER/misc/bond_react/tiny_nylon/in.tiny_nylon b/examples/USER/misc/bond_react/tiny_nylon/in.tiny_nylon index 1f7e9c42b7..73cb2eb270 100644 --- a/examples/USER/misc/bond_react/tiny_nylon/in.tiny_nylon +++ b/examples/USER/misc/bond_react/tiny_nylon/in.tiny_nylon @@ -36,7 +36,7 @@ fix myrxns all bond/react stabilization yes statted_grp .03 & react rxn1 all 1 0.0 2.9 mol1 mol2 rxn1_stp1_map & react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map -fix 1 statted_grp nvt temp 300 300 100 +fix 1 statted_grp_REACT nvt temp 300 300 100 fix 4 bond_react_MASTER_group temp/rescale 1 300 300 10 1 From cb8c51e353ed21b66dba71f906d57b6d72ac3c69 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sat, 3 Nov 2018 18:13:28 +0000 Subject: [PATCH 059/273] Got rid of some of the hard-coded units in the plumed interface --- src/USER-PLUMED/fix_plumed.cpp | 46 +++++++++++++--------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 831b7bef6e..7fa1d4c9a7 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -102,39 +102,27 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : // LAMMPS units wrt kj/mol - nm - ps // Set up units - if (force->boltz == 1.0) { + if(strcmp(update->unit_style,"lj") == 0) { // LAMMPS units lj p->cmd("setNaturalUnits"); } else { + // Conversion factor from LAMMPS energy units to kJ mol-1 (units of PLUMED) double energyUnits=1.0; - double lengthUnits=1.0; - double timeUnits=1.0; - if (force->boltz == 0.0019872067) { - // LAMMPS units real :: kcal/mol; angstrom; fs - energyUnits=4.184; - lengthUnits=0.1; - timeUnits=0.001; - } else if (force->boltz == 8.617343e-5) { - // LAMMPS units metal :: eV; angstrom; ps - energyUnits=96.48530749925792; - lengthUnits=0.1; - timeUnits=1.0; - } else if (force->boltz == 1.3806504e-23) { - // LAMMPS units si :: Joule, m; s - energyUnits=0.001; - lengthUnits=1.e-9; - timeUnits=1.e-12; - } else if (force->boltz == 1.3806504e-16) { - // LAMMPS units cgs :: erg; cms;, s - energyUnits=6.0221418e13; - lengthUnits=1.e-7; - timeUnits=1.e-12; - } else if (force->boltz == 3.16681534e-6) { - // LAMMPS units electron :: Hartree, bohr, fs - energyUnits=2625.5257; - lengthUnits=0.052917725; - timeUnits=0.001; - } else error->all(FLERR,"Odd LAMMPS units, plumed cannot work with that"); + // LAMMPS units real :: kcal/mol; + if (strcmp(update->unit_style,"real") == 0) energyUnits=4.184; + // LAMMPS units metal :: eV; + else if (strcmp(update->unit_style,"metal") == 0) energyUnits=96.48530749925792; + // LAMMPS units si :: Joule; + else if (strcmp(update->unit_style,"si") == 0) energyUnits=0.001; + // LAMMPS units cgs :: erg; + else if (strcmp(update->unit_style,"cgs") == 0) energyUnits=6.0221418e13; + // LAMMPS units electron :: Hartree; + else if (strcmp(update->unit_style,"electron") == 0) energyUnits=2625.5257; + else error->all(FLERR,"Odd LAMMPS units, plumed cannot work with that"); + // Conversion factor from LAMMPS length units to nm (units of PLUMED) + double lengthUnits=0.1/force->angstrom; + // Conversion factor from LAMMPS time unit to ps (units of PLUMED) + double timeUnits=0.001/force->femtosecond; p->cmd("setMDEnergyUnits",&energyUnits); p->cmd("setMDLengthUnits",&lengthUnits); p->cmd("setMDTimeUnits",&timeUnits); From 8cb665f013a4e212f0b79eb0e49c1a4f66fb7988 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 4 Nov 2018 10:21:28 +0000 Subject: [PATCH 060/273] Added functionality to throw error when time step changes and PLUMED is being used --- src/USER-PLUMED/fix_plumed.cpp | 5 +++++ src/USER-PLUMED/fix_plumed.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 7fa1d4c9a7..8569a1dd4a 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -446,6 +446,11 @@ void FixPlumed::min_post_force(int vflag) post_force(vflag); } +void FixPlumed::reset_dt() +{ + error->all(FLERR,"cannot reset_dt within a fix plumed action"); +} + double FixPlumed::compute_scalar() { return bias; diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index bc1d5af034..fda14606bf 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -41,6 +41,7 @@ class FixPlumed : public Fix { void post_force_respa(int, int, int); void min_post_force(int); double compute_scalar(); + void reset_dt(); private: From a051d61e1fe382ff7cead7d4619e38713e1f277e Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 4 Nov 2018 11:24:01 +0000 Subject: [PATCH 061/273] Added functionality to support fix modify for fix plumed --- src/USER-PLUMED/fix_plumed.cpp | 38 ++++++++++++++++++++++++++++++++++ src/USER-PLUMED/fix_plumed.h | 1 + 2 files changed, 39 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 8569a1dd4a..57cd2b0fef 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -456,4 +456,42 @@ double FixPlumed::compute_scalar() return bias; } +int FixPlumed::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"pe") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + modify->delete_compute(id_pe); delete [] id_pe; + int n = strlen(arg[1]) + 1; + id_pe = new char[n]; + strcpy(id_pe,arg[1]); + + int icompute = modify->find_compute(arg[1]); + if (icompute < 0) error->all(FLERR,"Could not find fix_modify potential energy ID"); + c_pe = modify->compute[icompute]; + + if (c_pe->peflag == 0) + error->all(FLERR,"Fix_modify plmd_pe ID does not compute potential energy"); + if (c_pe->igroup != 0 && comm->me == 0) + error->warning(FLERR,"Potential for fix PLUMED is not for group all"); + + return 2; + + } else if (strcmp(arg[0],"press") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + modify->delete_compute(id_press); delete [] id_press; + int n = strlen(arg[1]) + 1; + id_press = new char[n]; + strcpy(id_press,arg[1]); + + int icompute = modify->find_compute(arg[1]); + if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); + c_press = modify->compute[icompute]; + + if (c_press->pressflag == 0) + error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + + return 2; + } + return 0; +} diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index fda14606bf..cd101c3ac5 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -42,6 +42,7 @@ class FixPlumed : public Fix { void min_post_force(int); double compute_scalar(); void reset_dt(); + int modify_param(int narg, char **arg); private: From a3c0fe77267fcdf7c10bbc4b424337148e58790b Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 4 Nov 2018 11:43:07 +0000 Subject: [PATCH 062/273] Added check on fix modify for PLUMED to ensures that virial is calculated for group all --- src/USER-PLUMED/fix_plumed.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 57cd2b0fef..087ec3d900 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -489,6 +489,8 @@ int FixPlumed::modify_param(int narg, char **arg) if (c_press->pressflag == 0) error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + if (c_press->igroup != 0 && comm->me == 0) + error->warning(FLERR,"Virial for fix PLUMED is not for group all"); return 2; } From a3ca177d20c964caba3e1e45959cedf5203a1162 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Nov 2018 19:52:10 -0500 Subject: [PATCH 063/273] various small changes and reformatting - add memory usage estimator - test against varying number of atoms - test against non-consecutive atom tags - test for 32-bit overflow in number of atoms - test for 32-bit overflow in timestep - reduce tail correction error to warning - more LAMMPS style formatting of the source code - remove trailing whitespace - avoid leaking memory from allocated arrays for masses/charges/tags --- src/USER-PLUMED/fix_plumed.cpp | 156 +++++++++++++++++++++++---------- src/USER-PLUMED/fix_plumed.h | 2 + 2 files changed, 110 insertions(+), 48 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 087ec3d900..bb8309cf93 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -12,7 +12,8 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Gareth Tribello (Queens U, Belfast) + Contributing authors: Gareth Tribello (Queens U, Belfast) + Pablo Piaggi (EPFL) ------------------------------------------------------------------------- */ #include @@ -56,11 +57,13 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : if (!atom->tag_enable) error->all(FLERR,"Fix plumed requires atom tags"); + if (atom->tag_consecutive() == 0) + error->all(FLERR,"Fix plumed requires consecutive atom IDs"); + if (igroup != 0 && comm->me == 0) error->warning(FLERR,"Fix group for fix plumed is not 'all'. " "Group will be ignored."); - p=new PLMD::Plumed; // Check API version @@ -106,29 +109,53 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : // LAMMPS units lj p->cmd("setNaturalUnits"); } else { - // Conversion factor from LAMMPS energy units to kJ mol-1 (units of PLUMED) + + // Conversion factor from LAMMPS energy units to kJ/mol (units of PLUMED) + double energyUnits=1.0; - // LAMMPS units real :: kcal/mol; - if (strcmp(update->unit_style,"real") == 0) energyUnits=4.184; - // LAMMPS units metal :: eV; - else if (strcmp(update->unit_style,"metal") == 0) energyUnits=96.48530749925792; - // LAMMPS units si :: Joule; - else if (strcmp(update->unit_style,"si") == 0) energyUnits=0.001; - // LAMMPS units cgs :: erg; - else if (strcmp(update->unit_style,"cgs") == 0) energyUnits=6.0221418e13; - // LAMMPS units electron :: Hartree; - else if (strcmp(update->unit_style,"electron") == 0) energyUnits=2625.5257; - else error->all(FLERR,"Odd LAMMPS units, plumed cannot work with that"); + + // LAMMPS units real :: kcal/mol; + + if (strcmp(update->unit_style,"real") == 0) { + energyUnits=4.184; + + // LAMMPS units metal :: eV; + + } else if (strcmp(update->unit_style,"metal") == 0) { + energyUnits=96.48530749925792; + + // LAMMPS units si :: Joule; + + } else if (strcmp(update->unit_style,"si") == 0) { + energyUnits=0.001; + + // LAMMPS units cgs :: erg; + + } else if (strcmp(update->unit_style,"cgs") == 0) { + energyUnits=6.0221418e13; + + // LAMMPS units electron :: Hartree; + + } else if (strcmp(update->unit_style,"electron") == 0) { + energyUnits=2625.5257; + + } else error->all(FLERR,"Fix plumed cannot handle your choice of units"); + // Conversion factor from LAMMPS length units to nm (units of PLUMED) + double lengthUnits=0.1/force->angstrom; + // Conversion factor from LAMMPS time unit to ps (units of PLUMED) + double timeUnits=0.001/force->femtosecond; + p->cmd("setMDEnergyUnits",&energyUnits); p->cmd("setMDLengthUnits",&lengthUnits); p->cmd("setMDTimeUnits",&timeUnits); } // Read fix parameters: + int next=0; for (int i=3;icmd("setMDEngine","LAMMPS"); - int natoms=int(atom->natoms); + if (atom->natoms > MAXSMALLINT) + error->all(FLERR,"Fix plumed can only handle up to 2.1 billion atoms"); + + natoms=int(atom->natoms); p->cmd("setNatoms",&natoms); double dt=update->dt; @@ -232,6 +262,9 @@ FixPlumed::~FixPlumed() delete p; modify->delete_compute(id_pe); modify->delete_compute(id_press); + delete[] masses; + delete[] charges; + delete[] gatindex; } int FixPlumed::setmask() @@ -249,8 +282,10 @@ void FixPlumed::init() { if (strcmp(update->integrate_style,"respa") == 0) nlevels_respa = ((Respa *) update->integrate)->nlevels; + // This avoids nan pressure if compute_pressure is called // in a setup method + for (int i=0;i<6;i++) virial[i] = 0.; } @@ -258,12 +293,12 @@ void FixPlumed::setup(int vflag) { // Here there is a crucial issue connected to constant pressure // simulations. The fix_nh will call the compute_pressure inside - // the setup method, that is executed once and for all at the - // beginning of the simulation. Since our fix has a contribution + // the setup method, that is executed once and for all at the + // beginning of the simulation. Since our fix has a contribution // to the virial, when this happens the variable virial must have // been calculated. In other words, the setup method of fix_plumed - // has to be executed first. This creates a race condition with the - // setup method of fix_nh. This is why in the constructor I check if + // has to be executed first. This creates a race condition with the + // setup method of fix_nh. This is why in the constructor I check if // nh fixes have already been called. if (strcmp(update->integrate_style,"verlet") == 0) post_force(vflag); @@ -283,21 +318,29 @@ void FixPlumed::min_setup(int vflag) void FixPlumed::post_force(int /* vflag */) { -// Check tag is enabled - if ( !atom->tag_enable ) error->all(FLERR,"to run PLUMED you must have tag_enable==1"); int update_gatindex=0; -// Try to find out if the domain decomposition has been updated: - if (nlocal!=atom->nlocal) { + + if (natoms != int(atom->natoms)) + error->all(FLERR,"Fix plumed does not support simulations with varying " + "numbers of atoms"); + + // Try to find out if the domain decomposition has been updated: + + if (nlocal != atom->nlocal) { + if (charges) delete [] charges; if (masses) delete [] masses; if (gatindex) delete [] gatindex; + nlocal=atom->nlocal; gatindex=new int [nlocal]; masses=new double [nlocal]; charges=new double [nlocal]; update_gatindex=1; + } else { + for (int i=0;itag[i]-1) { update_gatindex=1; @@ -307,11 +350,12 @@ void FixPlumed::post_force(int /* vflag */) } MPI_Allreduce(MPI_IN_PLACE,&update_gatindex,1,MPI_INT,MPI_SUM,world); -// In case it has been updated, rebuild the local mass/charges array -// and tell plumed about the change: + // In case it has been updated, rebuild the local mass/charges array + // and tell plumed about the change: + if (update_gatindex) { for (int i=0;itag[i]-1; - // Get masses + // Get masses if (atom->rmass_flag) { for (int i=0;irmass[i]; } else { @@ -328,7 +372,7 @@ void FixPlumed::post_force(int /* vflag */) } -// set up local virial/box. plumed uses full 3x3 matrices + // set up local virial/box. plumed uses full 3x3 matrices double plmd_virial[3][3]; for (int i=0;i<3;i++) for (int j=0;j<3;j++) plmd_virial[i][j]=0.0; double box[3][3]; @@ -339,21 +383,26 @@ void FixPlumed::post_force(int /* vflag */) box[2][1]=domain->h[3]; box[2][0]=domain->h[4]; box[1][0]=domain->h[5]; + // Make initial of virial of this fix zero - // The following line is very important, otherwise the compute pressure will include + // The following line is very important, otherwise + // the compute pressure will include for (int i=0;i<6;++i) virial[i] = 0.; -// local variable with timestep: - int step=update->ntimestep; + // local variable with timestep: + if (update->ntimestep > MAXSMALLINT) + error->all(FLERR,"Fix plumed can only handle up to 2.1 billion timesteps"); + int step=int(update->ntimestep); -// pass all pointers to plumed: + // pass all pointers to plumed: p->cmd("setStep",&step); p->cmd("setPositions",&atom->x[0][0]); p->cmd("setBox",&box[0][0]); p->cmd("setForces",&atom->f[0][0]); p->cmd("setMasses",&masses[0]); - if (atom->q) p->cmd("setCharges",&charges[0]); + p->cmd("setCharges",&charges[0]); p->cmd("getBias",&bias); + // Pass virial to plumed // If energy is needed virial_plmd is equal to Lammps' virial // If energy is not needed virial_plmd is initialized to zero @@ -369,30 +418,37 @@ void FixPlumed::post_force(int /* vflag */) double *virial_lmp; if (plumedNeedsEnergy) { // Error if tail corrections are included - if (force->pair && force->pair->tail_flag) - error->all(FLERR,"Tail corrections to the pair potential included." - " The energy cannot be biased in this case." - " Remove the tail corrections by removing the" - " command: pair_modify tail yes"); + if (force->pair && force->pair->tail_flag && comm->me == 0) + error->warning(FLERR,"Tail corrections to the pair potential included." + " The energy cannot be biased correctly in this case." + " Remove the tail corrections by removing the" + " command: pair_modify tail yes"); + // compute the potential energy double pot_energy = 0.; c_pe->compute_scalar(); pot_energy = c_pe->scalar; + // Divide energy by number of processes // Plumed wants it this way int nprocs; MPI_Comm_size(world,&nprocs); pot_energy /= nprocs; p->cmd("setEnergy",&pot_energy); + // Compute pressure due to the virial (no kinetic energy term!) c_press->compute_vector(); virial_lmp = c_press->vector; - // Check if pressure is finite - if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1]) || !std::isfinite(virial_lmp[2]) - || !std::isfinite(virial_lmp[3]) || !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5])) + + // Check if pressure is finite + if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1]) + || !std::isfinite(virial_lmp[2]) || !std::isfinite(virial_lmp[3]) + || !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5])) error->all(FLERR,"Non-numeric virial - Plumed cannot work with that"); + // Convert pressure to virial per number of MPI processes // From now on all virials are divided by the number of MPI processes + double nktv2p = force->nktv2p; double inv_volume; if (domain->dimension == 3) { @@ -415,12 +471,12 @@ void FixPlumed::post_force(int /* vflag */) // do the real calculation: p->cmd("performCalc"); -// retransform virial to lammps representation and assign it to this fix's virial. -// Plumed is giving back the full virial and therefore we have to subtract the -// initial virial i.e. virial_lmp. -// The vector virial contains only the contribution added by plumed -// The calculation of the pressure will be done by a compute pressure and will -// include this contribution. + // retransform virial to lammps representation and assign it to this + // fix's virial. Plumed is giving back the full virial and therefore + // we have to subtract the initial virial i.e. virial_lmp. + // The vector virial contains only the contribution added by plumed. + // The calculation of the pressure will be done by a compute pressure + // and will include this contribution. virial[0] = -plmd_virial[0][0]-virial_lmp[0]; virial[1] = -plmd_virial[1][1]-virial_lmp[1]; virial[2] = -plmd_virial[2][2]-virial_lmp[2]; @@ -430,7 +486,7 @@ void FixPlumed::post_force(int /* vflag */) // Ask for the computes in the next time step // such that the virial and energy are tallied. - // This should be changed to something that triggers the + // This should be changed to something that triggers the // calculation only if plumed needs it. c_pe->addstep(update->ntimestep+1); c_press->addstep(update->ntimestep+1); @@ -448,7 +504,7 @@ void FixPlumed::min_post_force(int vflag) void FixPlumed::reset_dt() { - error->all(FLERR,"cannot reset_dt within a fix plumed action"); + error->all(FLERR,"Cannot change the time step when fix plumed is active"); } double FixPlumed::compute_scalar() @@ -497,3 +553,7 @@ int FixPlumed::modify_param(int narg, char **arg) return 0; } +double FixPlumed::memory_usage() +{ + return double((8+8+4)*atom->nlocal); +} diff --git a/src/USER-PLUMED/fix_plumed.h b/src/USER-PLUMED/fix_plumed.h index cd101c3ac5..e20633fadc 100644 --- a/src/USER-PLUMED/fix_plumed.h +++ b/src/USER-PLUMED/fix_plumed.h @@ -43,11 +43,13 @@ class FixPlumed : public Fix { double compute_scalar(); void reset_dt(); int modify_param(int narg, char **arg); + double memory_usage(); private: PLMD::Plumed *p; // pointer to plumed object int nlocal; // number of atoms local to this process + int natoms; // total number of atoms int *gatindex; // array of atom indexes local to this process double *masses; // array of masses for local atoms double *charges; // array of charges for local atoms From 6d1ea2d0b1ff2086b700cc3d6554584fac59b85d Mon Sep 17 00:00:00 2001 From: jrgissing Date: Mon, 5 Nov 2018 00:46:53 -0700 Subject: [PATCH 064/273] broke smooth restarts at some point. fixed --- src/USER-MISC/fix_bond_react.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 61616f667d..a7b85e92d3 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -486,18 +486,16 @@ void FixBondReact::post_constructor() // create master_group if not already existing // NOTE: limit_tags and react_tags automaticaly intitialized to zero (unless read from restart) - if (group->find(master_group) == -1) { - group->find_or_create(master_group); - char **newarg; - newarg = new char*[5]; - newarg[0] = master_group; - newarg[1] = (char *) "dynamic"; - newarg[2] = (char *) "all"; - newarg[3] = (char *) "property"; - newarg[4] = (char *) "limit_tags"; - group->assign(5,newarg); - delete [] newarg; - } + group->find_or_create(master_group); + char **newarg; + newarg = new char*[5]; + newarg[0] = master_group; + newarg[1] = (char *) "dynamic"; + newarg[2] = (char *) "all"; + newarg[3] = (char *) "property"; + newarg[4] = (char *) "limit_tags"; + group->assign(5,newarg); + delete [] newarg; if (stabilization_flag == 1) { int igroup = group->find(exclude_group); From ab7aa9dfdabfb6b3e4adf68a9f9e8aef931c6380 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Mon, 5 Nov 2018 00:49:33 -0700 Subject: [PATCH 065/273] correction to fix group property doc --- doc/src/group.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/group.txt b/doc/src/group.txt index 8472677372..256c4ed7f5 100644 --- a/doc/src/group.txt +++ b/doc/src/group.txt @@ -225,8 +225,7 @@ atomfile-style variable. The variable is evaluated and atoms whose per-atom values are 0.0, are removed from the dynamic group. If the {property} keyword is used, the per-atom property name must be a previously defined per-atom property. The per-atom property is evaluated and atoms whose -values are 0.0 are removed from the dynamic group, otherwise they -are added to the group. +values are 0.0 are removed from the dynamic group. The assignment of atoms to a dynamic group is done at the beginning of each run and on every timestep that is a multiple of {N}, which is the From 58d2f0cc575d2e2cefc722eba7f8b9da39304cb5 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Mon, 5 Nov 2018 05:55:31 -0700 Subject: [PATCH 066/273] cmake: fix linking again plumed --- cmake/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 89eb9df257..2e2e316ee5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -532,19 +532,19 @@ if(PKG_USER-PLUMED) if(DOWNLOAD_PLUMED) include(ExternalProject) ExternalProject_Add(plumed_build - URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-2.4.3.tgz - URL_MD5 bed9c88c8c635b269c1cd4a0598a2934 + URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-src-2.4.3.tgz + URL_MD5 b1be7c48971627febc11c61b70767fc5 BUILD_IN_SOURCE 1 CONFIGURE_COMMAND /configure --prefix= $<$:--with-pic> ) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a ${CMAKE_DL_LIBS}) set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") else() find_package(PkgConfig REQUIRED) - pkg_check_modules(PLUMED plumed REQUIRED) + pkg_check_modules(PLUMED plumedWrapper REQUIRED) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LDFLAGS}) endif() include_directories(${PLUMED_INCLUDE_DIRS}) From ce7f76de1d216156bf390c4a19a431b2129c9309 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Mon, 5 Nov 2018 07:39:23 -0700 Subject: [PATCH 067/273] cmake: switch plumed to full static mode --- cmake/CMakeLists.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2e2e316ee5..9559cb8a41 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -528,6 +528,7 @@ if(PKG_USER-SCAFACOS) endif() if(PKG_USER-PLUMED) + find_package(GSL REQUIRED) option(DOWNLOAD_PLUMED "Download Plumed (instead of using the system's one)" OFF) if(DOWNLOAD_PLUMED) include(ExternalProject) @@ -540,12 +541,14 @@ if(PKG_USER-PLUMED) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a ${CMAKE_DL_LIBS}) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o + ${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o ${GSL_LIBRARIES} ${CMAKE_DL_LIBS}) set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") else() find_package(PkgConfig REQUIRED) - pkg_check_modules(PLUMED plumedWrapper REQUIRED) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LDFLAGS}) + pkg_check_modules(PLUMED plumed REQUIRED) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) endif() include_directories(${PLUMED_INCLUDE_DIRS}) endif() From 7ed6cab04051fc1f0caa62b18068b9df053314cf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Nov 2018 20:35:43 -0500 Subject: [PATCH 068/273] do not generate illegal dihedrals, e.g. from 3-membered rings --- tools/msi2lmp/src/MakeLists.c | 4 ++-- tools/msi2lmp/src/msi2lmp.c | 2 ++ tools/msi2lmp/src/msi2lmp.h | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/msi2lmp/src/MakeLists.c b/tools/msi2lmp/src/MakeLists.c index 19924386de..44b9bdd0af 100644 --- a/tools/msi2lmp/src/MakeLists.c +++ b/tools/msi2lmp/src/MakeLists.c @@ -363,7 +363,7 @@ int count_dihedrals() if (i != k) { for (ll=0; ll < atoms[k].no_connect; ll++) { l = atoms[k].conn_no[ll]; - if (l != j) n++; + if ((l != j) && (i != l)) n++ } } } @@ -391,7 +391,7 @@ void build_dihedrals_list() if (i != k) { for (ll=0; ll < atoms[k].no_connect; ll++) { l = atoms[k].conn_no[ll]; - if (l != j) { + if ((l != j) && (i != l)) { dihedrals[n ].type = 0; dihedrals[n ].members[0] = i; dihedrals[n ].members[1] = j; diff --git a/tools/msi2lmp/src/msi2lmp.c b/tools/msi2lmp/src/msi2lmp.c index b0bc7815ba..efc929639a 100644 --- a/tools/msi2lmp/src/msi2lmp.c +++ b/tools/msi2lmp/src/msi2lmp.c @@ -2,6 +2,8 @@ * * msi2lmp.exe * +* v3.9.9 AK- Teach msi2lmp to not generate dihedrals with identical 1-4 atoms +* * v3.9.8 AK- Improved whitespace handling in parsing topology and force * field files to avoid bogus warnings about type name truncation * diff --git a/tools/msi2lmp/src/msi2lmp.h b/tools/msi2lmp/src/msi2lmp.h index 4716f719d6..c9b1984444 100644 --- a/tools/msi2lmp/src/msi2lmp.h +++ b/tools/msi2lmp/src/msi2lmp.h @@ -36,7 +36,7 @@ # include -#define MSI2LMP_VERSION "v3.9.8 / 06 Oct 2016" +#define MSI2LMP_VERSION "v3.9.9 / 05 Nov 2018" #define PI_180 0.01745329251994329576 From cb828e957989c2d8af5ebc38c37c929aa5440e9c Mon Sep 17 00:00:00 2001 From: araven Date: Tue, 6 Nov 2018 07:48:47 +0100 Subject: [PATCH 069/273] update reference --- src/SPIN/fix_nve_spin.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 898eb95396..7d96aca6d4 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -60,8 +60,11 @@ static const char cite_fix_nve_spin[] = "dynamics and molecular dynamics},\n" "author={Tranchida, J and Plimpton, SJ and Thibaudeau, P and Thompson, AP},\n" "journal={Journal of Computational Physics},\n" + "volume={372},\n" + "pages={406-425},\n" "year={2018},\n" "publisher={Elsevier}\n" + "doi={10.1016/j.jcp.2018.06.042}\n" "}\n\n"; enum{NONE}; From 562296bdb7ae475cfcdb223d9765bc3a19cf8775 Mon Sep 17 00:00:00 2001 From: Oliver Henrich Date: Tue, 6 Nov 2018 19:44:35 +0000 Subject: [PATCH 070/273] Updated link to preprint article --- doc/src/fix_nve_dot.txt | 6 ++++-- doc/src/fix_nve_dotc_langevin.txt | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_nve_dot.txt b/doc/src/fix_nve_dot.txt index 06140c2d37..3112b586d1 100644 --- a/doc/src/fix_nve_dot.txt +++ b/doc/src/fix_nve_dot.txt @@ -36,8 +36,8 @@ The command is equivalent to the "fix nve"_fix_nve.html. The particles are always considered to have a finite size. An example input file can be found in /examples/USER/cgdna/examples/duplex1/. -A technical report with more information on this integrator can be found -"here"_PDF/USER-CGDNA-overview.pdf. +Further details of the implementation and stability of the integrator are contained in "(Henrich)"_#Henrich3. +The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. :line @@ -59,3 +59,5 @@ See the "Build package"_Build_package.html doc page for more info. [(Davidchack)] R.L Davidchack, T.E. Ouldridge, and M.V. Tretyakov. J. Chem. Phys. 142, 144114 (2015). :link(Miller1) [(Miller)] T. F. Miller III, M. Eleftheriou, P. Pattnaik, A. Ndirango, G. J. Martyna, J. Chem. Phys., 116, 8649-8659 (2002). +:link(Henrich3) +[(Henrich)] O. Henrich, Y. A. Gutierrez-Fosado, T. Curk, T. E. Ouldridge, Eur. Phys. J. E 41, 57 (2018). diff --git a/doc/src/fix_nve_dotc_langevin.txt b/doc/src/fix_nve_dotc_langevin.txt index 7339f251ad..bb59a8423c 100644 --- a/doc/src/fix_nve_dotc_langevin.txt +++ b/doc/src/fix_nve_dotc_langevin.txt @@ -114,8 +114,8 @@ The scale factor after the {angmom} keyword gives the ratio of the rotational to the translational friction coefficient. An example input file can be found in /examples/USER/cgdna/examples/duplex2/. -A technical report with more information on this integrator can be found -"here"_PDF/USER-CGDNA-overview.pdf. +Further details of the implementation and stability of the integrators are contained in "(Henrich)"_#Henrich4. +The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. :line @@ -139,3 +139,5 @@ See the "Build package"_Build_package.html doc page for more info. [(Miller)] T. F. Miller III, M. Eleftheriou, P. Pattnaik, A. Ndirango, G. J. Martyna, J. Chem. Phys., 116, 8649-8659 (2002). :link(Dunweg3) [(Dunweg)] B. Dunweg, W. Paul, Int. J. Mod. Phys. C, 2, 817-27 (1991). +:link(Henrich4) +[(Henrich)] O. Henrich, Y. A. Gutierrez-Fosado, T. Curk, T. E. Ouldridge, Eur. Phys. J. E 41, 57 (2018). From 84fcf01bedcdc4f7586aaa1b95988427386d8d2c Mon Sep 17 00:00:00 2001 From: jrgissing Date: Tue, 6 Nov 2018 19:59:22 -0700 Subject: [PATCH 071/273] bond/react: allow custom update of charges near template edges also, fixes a bug introduced in PR #1189, when not using stabilization --- doc/src/fix_bond_react.txt | 32 ++++++++++----- src/USER-MISC/fix_bond_react.cpp | 67 ++++++++++++++++++++++++++------ src/USER-MISC/fix_bond_react.h | 4 +- 3 files changed, 82 insertions(+), 21 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index fc08a9b14e..e88bd198f3 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -44,7 +44,8 @@ react = mandatory argument indicating new reaction specification :l timesteps = number of timesteps to apply internally created nve/limit.html {update_edges} value = {none} or {charges} :l none = do not update topology near the edges of reaction templates - charges = update atomic charges of all atoms in reaction templates :pre + charges = update atomic charges of all atoms in reaction templates + custom = force the update of user-specified atomic charges :pre :ule [Examples:] @@ -201,23 +202,30 @@ A discussion of correctly handling this is also provided on the The map file is a text document with the following format: A map file has a header and a body. The header of map file the -contains one mandatory keyword and one optional keyword. The mandatory -keyword is 'equivalences' and the optional keyword is 'edgeIDs': +contains one mandatory keyword and two optional keywords. The mandatory +keyword is 'equivalences' and the optional keywords are 'edgeIDs' and +'customIDs': N {equivalences} = # of atoms N in the reaction molecule templates -N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template :pre +N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template +N {customIDs} = # of atoms N that are specified for a custom update :pre -The body of the map file contains two mandatory sections and one -optional section. The first mandatory section begins with the keyword +The body of the map file contains two mandatory sections and two +optional sections. The first mandatory section begins with the keyword 'BondingIDs' and lists the atom IDs of the bonding atom pair in the pre-reacted molecule template. The second mandatory section begins with the keyword 'Equivalences' and lists a one-to-one correspondence between atom IDs of the pre- and post-reacted templates. The first column is an atom ID of the pre-reacted molecule template, and the second column is the corresponding atom ID of the post-reacted -molecule template. The optional section begins with the keyword +molecule template. The first optional section begins with the keyword 'EdgeIDs' and lists the atom IDs of edge atoms in the pre-reacted -molecule template. +molecule template. The second optional section begins with the keyword +'Custom Edges' and allows for forcing the update of a specific atom's +atomic charge. The first column is the ID of an atom near the edge of +the pre-reacted molecule template, and the value of the second column +is either 'none' or 'charges.' Further details are provided in the +discussion of the 'update_edges' keyword. A sample map file is given below: @@ -282,7 +290,13 @@ The {update_edges} keyword can increase the number of atoms whose atomic charges are updated, when the pre-reaction template contains edge atoms. When the value is set to 'charges,' all atoms' atomic charges are updated to those specified by the post-reaction template, -including atoms near the edge of reaction templates. +including atoms near the edge of reaction templates. When the value is +set to 'custom,' an additional section must be included in the map +file that specifies whether to update charges, on a per-atom basis. +The format of this section is detailed above. Listing a pre-reaction +atom ID with a value of 'charges' will force the update of the atom's +charge, even if it is near a template edge. Atoms not near a template +edge are unaffected by this setting. In order to produce the most physical behavior, this 'reaction site equilibration time' should be tuned to be as small as possible while diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index a7b85e92d3..394be64460 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -255,7 +255,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"update_edges") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " "'update_edges' has too few arguments"); - if (strcmp(arg[iarg+1],"charges") == 0) update_edges_flag[rxn] = 1; + if (strcmp(arg[iarg+1],"none") == 0) update_edges_flag[rxn] = 0; + else if (strcmp(arg[iarg+1],"charges") == 0) update_edges_flag[rxn] = 1; + else if (strcmp(arg[iarg+1],"custom") == 0) update_edges_flag[rxn] = 2; + else error->all(FLERR,"Illegal value for 'update_edges' keyword'"); iarg += 2; } else error->all(FLERR,"Illegal fix bond/react command: unknown keyword"); } @@ -271,11 +274,16 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(reverse_equiv,max_natoms,2,nreacts,"bond/react:reverse_equiv"); memory->create(edge,max_natoms,nreacts,"bond/react:edge"); memory->create(landlocked_atoms,max_natoms,nreacts,"bond/react:landlocked_atoms"); + memory->create(custom_edges,max_natoms,nreacts,"bond/react:custom_edges"); for (int j = 0; j < nreacts; j++) - for (int i = 0; i < max_natoms; i++) edge[i][j] = 0; + for (int i = 0; i < max_natoms; i++) { + edge[i][j] = 0; + if (update_edges_flag[j] == 1) custom_edges[i][j] = 1; + else custom_edges[i][j] = 0; + } - // read all superimpose files afterward + // read all map files afterward for (int i = 0; i < nreacts; i++) { open(files[i]); onemol = atom->molecules[unreacted_mol[i]]; @@ -384,6 +392,7 @@ FixBondReact::~FixBondReact() memory->destroy(edge); memory->destroy(equivalences); memory->destroy(reverse_equiv); + memory->destroy(custom_edges); memory->destroy(nevery); memory->destroy(cutsq); @@ -1854,8 +1863,11 @@ void FixBondReact::limit_bond(int limit_bond_mode) int index1 = atom->find_custom("limit_tags",flag); int *i_limit_tags = atom->ivector[index1]; - int index2 = atom->find_custom(statted_id,flag); - int *i_statted_tags = atom->ivector[index2]; + int *i_statted_tags; + if (stabilization_flag == 1) { + int index2 = atom->find_custom(statted_id,flag); + i_statted_tags = atom->ivector[index2]; + } int index3 = atom->find_custom("react_tags",flag); int *i_react_tags = atom->ivector[index3]; @@ -1863,7 +1875,7 @@ void FixBondReact::limit_bond(int limit_bond_mode) for (int i = 0; i < temp_limit_num; i++) { // update->ntimestep could be 0. so add 1 throughout i_limit_tags[atom->map(temp_limit_glove[i])] = update->ntimestep + 1; - i_statted_tags[atom->map(temp_limit_glove[i])] = 0; + if (stabilization_flag == 1) i_statted_tags[atom->map(temp_limit_glove[i])] = 0; i_react_tags[atom->map(temp_limit_glove[i])] = rxnID; } @@ -1884,8 +1896,11 @@ void FixBondReact::unlimit_bond() int index1 = atom->find_custom("limit_tags",flag); int *i_limit_tags = atom->ivector[index1]; - int index2 = atom->find_custom(statted_id,flag); - int *i_statted_tags = atom->ivector[index2]; + int *i_statted_tags; + if (stabilization_flag == 1) { + int index2 = atom->find_custom(statted_id,flag); + i_statted_tags = atom->ivector[index2]; + } int index3 = atom->find_custom("react_tags",flag); int *i_react_tags = atom->ivector[index3]; @@ -1895,7 +1910,7 @@ void FixBondReact::unlimit_bond() // first '1': indexing offset, second '1': for next step if (i_limit_tags[i] != 0 && (update->ntimestep + 1 - i_limit_tags[i]) > limit_duration[i_react_tags[i]]) { // + 1 i_limit_tags[i] = 0; - i_statted_tags[i] = 1; + if (stabilization_flag == 1) i_statted_tags[i] = 1; i_react_tags[i] = 0; } } @@ -2077,7 +2092,7 @@ void FixBondReact::update_everything() twomol = atom->molecules[reacted_mol[rxnID]]; for (int j = 0; j < twomol->natoms; j++) { int jj = equivalences[j][1][rxnID]-1; - if ((landlocked_atoms[j][rxnID] == 1 || update_edges_flag[rxnID] == 1) && + if ((landlocked_atoms[j][rxnID] == 1 || custom_edges[jj][rxnID] == 1) && atom->map(update_mega_glove[jj+1][i]) >= 0 && atom->map(update_mega_glove[jj+1][i]) < nlocal) { type[atom->map(update_mega_glove[jj+1][i])] = twomol->type[j]; @@ -2520,6 +2535,7 @@ void FixBondReact::read(int myrxn) if (strstr(line,"edgeIDs")) sscanf(line,"%d",&nedge); else if (strstr(line,"equivalences")) sscanf(line,"%d",&nequivalent); + else if (strstr(line,"customIDs")) sscanf(line,"%d",&ncustom); else break; } @@ -2532,7 +2548,7 @@ void FixBondReact::read(int myrxn) // loop over sections of superimpose file - int equivflag = 0, edgeflag = 0, bondflag = 0; + int equivflag = 0, edgeflag = 0, bondflag = 0, customedgesflag = 0; while (strlen(keyword)) { if (strcmp(keyword,"BondingIDs") == 0) { bondflag = 1; @@ -2546,6 +2562,9 @@ void FixBondReact::read(int myrxn) } else if (strcmp(keyword,"Equivalences") == 0) { equivflag = 1; Equivalences(line, myrxn); + } else if (strcmp(keyword,"Custom Edges") == 0) { + customedgesflag = 1; + CustomEdges(line, myrxn); } else error->one(FLERR,"Unknown section in superimpose file"); parse_keyword(1,line,keyword); @@ -2555,6 +2574,12 @@ void FixBondReact::read(int myrxn) // error check if (bondflag == 0 || equivflag == 0) error->all(FLERR,"Superimpose file missing BondingIDs or Equivalences section\n"); + + if (update_edges_flag[myrxn] == 2 && customedgesflag == 0) + error->all(FLERR,"Map file must have a Custom Edges section when using 'update_edges custom'\n"); + + if (update_edges_flag[myrxn] != 2 && customedgesflag == 1) + error->all(FLERR,"Specify 'update_edges custom' to include Custom Edges section in map file\n"); } void FixBondReact::EdgeIDs(char *line, int myrxn) @@ -2585,6 +2610,26 @@ void FixBondReact::Equivalences(char *line, int myrxn) } } +void FixBondReact::CustomEdges(char *line, int myrxn) +{ + // 0 for 'none', 1 for 'charges' + + int tmp; + int n = MAX(strlen("none"),strlen("charges")) + 1; + char *edgemode = new char[n]; + for (int i = 0; i < ncustom; i++) { + readline(line); + sscanf(line,"%d %s",&tmp,edgemode); + if (strcmp(edgemode,"none") == 0) + custom_edges[tmp-1][myrxn] = 0; + else if (strcmp(edgemode,"charges") == 0) + custom_edges[tmp-1][myrxn] = 1; + else + error->one(FLERR,"Illegal value in 'Custom Edges' section of map file"); + } + delete [] edgemode; +} + void FixBondReact::open(char *file) { fp = fopen(file,"r"); diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index ca1f3bd20c..d54ab7c385 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -101,7 +101,7 @@ class FixBondReact : public Fix { int *ibonding,*jbonding; int *closeneigh; // indicates if bonding atoms of a rxn are 1-2, 1-3, or 1-4 neighbors - int nedge,nequivalent; // number of edge, equivalent atoms in mapping file + int nedge,nequivalent,ncustom; // number of edge, equivalent, custom atoms in mapping file int attempted_rxn; // there was an attempt! int *local_rxn_count; int *ghostly_rxn_count; @@ -115,6 +115,7 @@ class FixBondReact : public Fix { int ***equivalences; // relation between pre- and post-reacted templates int ***reverse_equiv; // re-ordered equivalences int **landlocked_atoms; // all atoms at least three bonds away from edge atoms + int **custom_edges; // atoms in molecule templates with incorrect valences int **nxspecial,**onemol_nxspecial,**twomol_nxspecial; // full number of 1-4 neighbors tagint **xspecial,**onemol_xspecial,**twomol_xspecial; // full 1-4 neighbor list @@ -136,6 +137,7 @@ class FixBondReact : public Fix { void read(int); void EdgeIDs(char *,int); void Equivalences(char *,int); + void CustomEdges(char *,int); void make_a_guess (); void neighbor_loop(); From bdf73f7adb5c449c5e607746e26fe84d5d6e28e9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:07:35 -0500 Subject: [PATCH 072/273] ignore USER-SDPD files when installed --- src/.gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 4f517af3af..f85e8eb86c 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -485,6 +485,8 @@ /fix_load_report.h /fix_meso.cpp /fix_meso.h +/fix_meso_move.cpp +/fix_meso_move.h /fix_meso_stationary.cpp /fix_meso_stationary.h /fix_mscg.cpp @@ -573,6 +575,8 @@ /fix_rhok.h /fix_rigid.cpp /fix_rigid.h +/fix_rigid_meso.cpp +/fix_rigid_meso.h /fix_rigid_nh.cpp /fix_rigid_nh.h /fix_rigid_nph.cpp @@ -901,6 +905,8 @@ /pair_rebo.h /pair_resquared.cpp /pair_resquared.h +/pair_sdpd_taitwater_isothermal.cpp +/pair_sdpd_taitwater_isothermal.h /pair_sph_heatconduction.cpp /pair_sph_heatconduction.h /pair_sph_idealgas.cpp From df232c1cf68353e55fdecacdf727c8f274b35f48 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:09:05 -0500 Subject: [PATCH 073/273] use c++ style include files for c-library functions --- src/USER-SDPD/fix_meso_move.cpp | 4 ++-- src/USER-SDPD/fix_rigid_meso.cpp | 2 +- src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/USER-SDPD/fix_meso_move.cpp b/src/USER-SDPD/fix_meso_move.cpp index 3e2902d0cc..7dd1b5c34d 100644 --- a/src/USER-SDPD/fix_meso_move.cpp +++ b/src/USER-SDPD/fix_meso_move.cpp @@ -16,8 +16,8 @@ Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com ------------------------------------------------------------------------- */ -#include "string.h" -#include "math.h" +#include +#include #include "fix_meso_move.h" #include "atom.h" #include "group.h" diff --git a/src/USER-SDPD/fix_rigid_meso.cpp b/src/USER-SDPD/fix_rigid_meso.cpp index fd881852f7..0abd850fec 100644 --- a/src/USER-SDPD/fix_rigid_meso.cpp +++ b/src/USER-SDPD/fix_rigid_meso.cpp @@ -27,7 +27,7 @@ and all codes relevant to that has been removed ------------------------------------------------------------------------- */ -#include +#include #include "fix_rigid_meso.h" #include "math_extra.h" #include "atom.h" diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp index d8c32e7f6c..5e19ba542c 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -18,8 +18,8 @@ references: Espanol and Revenga, Phys Rev E 67, 026705 (2003) ------------------------------------------------------------------------- */ -#include -#include +#include +#include #include "pair_sdpd_taitwater_isothermal.h" #include "atom.h" #include "force.h" From 31277349c6f95454d6c0fb94c9d29554bb8de52a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:10:27 -0500 Subject: [PATCH 074/273] remove dead code and avoid compiler warnings --- src/USER-SDPD/fix_meso_move.cpp | 3 +-- src/USER-SDPD/fix_rigid_meso.cpp | 10 +++++----- src/USER-SDPD/fix_rigid_meso.h | 2 +- src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp | 3 +-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/USER-SDPD/fix_meso_move.cpp b/src/USER-SDPD/fix_meso_move.cpp index 7dd1b5c34d..4e591c9088 100644 --- a/src/USER-SDPD/fix_meso_move.cpp +++ b/src/USER-SDPD/fix_meso_move.cpp @@ -397,7 +397,6 @@ void FixMesoMove::initial_integrate (int /*vflag*/) { double *e = atom->e; double *de = atom->de; double **f = atom->f; - double **omega = atom->omega; double *rmass = atom->rmass; double *mass = atom->mass; int *type = atom->type; @@ -987,7 +986,7 @@ int FixMesoMove::maxsize_restart () { size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixMesoMove::size_restart (int nlocal) { +int FixMesoMove::size_restart (int /* nlocal */) { return 4; } diff --git a/src/USER-SDPD/fix_rigid_meso.cpp b/src/USER-SDPD/fix_rigid_meso.cpp index 0abd850fec..4889acd0de 100644 --- a/src/USER-SDPD/fix_rigid_meso.cpp +++ b/src/USER-SDPD/fix_rigid_meso.cpp @@ -52,7 +52,7 @@ FixRigid (lmp, narg, arg) { size_array_cols = 28; if ((atom->e_flag != 1) || (atom->rho_flag != 1)) error->all (FLERR, "fix rigid/meso command requires atom_style with" - " both energy and density"); + " both energy and density"); if (langflag || tstat_flag) error->all (FLERR,"Can not use thermostat with fix rigid/meso"); @@ -179,8 +179,8 @@ void FixRigidMeso::initial_integrate (int vflag) { /* ---------------------------------------------------------------------- */ void FixRigidMeso::final_integrate () { - int i,ibody; - double dtfm,xy,xz,yz; + int ibody; + double dtfm; double mbody[3],tbody[3],fquat[4]; double dtf2 = dtf * 2.0; @@ -248,7 +248,7 @@ void FixRigidMeso::set_xv () { int xbox,ybox,zbox; double x0,x1,x2,v0,v1,v2,fc0,fc1,fc2,massone; double xy,xz,yz; - double ione[3],exone[3],eyone[3],ezone[3],vr[6],p[3][3]; + double vr[6]; double **x = atom->x; double **v = atom->v; @@ -379,7 +379,7 @@ void FixRigidMeso::set_v () { int xbox,ybox,zbox; double x0,x1,x2,v0,v1,v2,fc0,fc1,fc2,massone; double xy,xz,yz; - double ione[3],exone[3],eyone[3],ezone[3],delta[3],vr[6]; + double delta[3],vr[6]; double **x = atom->x; double **v = atom->v; diff --git a/src/USER-SDPD/fix_rigid_meso.h b/src/USER-SDPD/fix_rigid_meso.h index ac73a9503b..6945e3c144 100644 --- a/src/USER-SDPD/fix_rigid_meso.h +++ b/src/USER-SDPD/fix_rigid_meso.h @@ -32,7 +32,7 @@ class FixRigidMeso : public FixRigid { void setup (int); void initial_integrate (int); void final_integrate (); - double compute_scalar () {} + double compute_scalar () { return 0.0; } double compute_array (int, int); protected: diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp index 5e19ba542c..3a83e41341 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -67,7 +67,7 @@ void PairSDPDTaitwaterIsothermal::compute (int eflag, int vflag) { int *ilist, *jlist, *numneigh, **firstneigh; double vxtmp, vytmp, vztmp, imass, jmass, fi, fj, fvisc; double h, ih, ihsq, velx, vely, velz; - double rsq, tmp, wfd, delVdotDelR, deltaE; + double rsq, tmp, wfd, delVdotDelR; double prefactor, wiener[3][3], f_random[3]; if (eflag || vflag) ev_setup (eflag, vflag); @@ -78,7 +78,6 @@ void PairSDPDTaitwaterIsothermal::compute (int eflag, int vflag) { double **f = atom->f; double *rho = atom->rho; double *mass = atom->mass; - double *de = atom->de; double *drho = atom->drho; int *type = atom->type; int nlocal = atom->nlocal; From 2d12260ade030bebec70d7ce32dce1e8c3852ef1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:13:05 -0500 Subject: [PATCH 075/273] remove bogus single function and set single_enable = 0 --- src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp | 10 +--------- src/USER-SDPD/pair_sdpd_taitwater_isothermal.h | 3 +-- src/USER-SPH/pair_sph_taitwater.cpp | 10 +--------- src/USER-SPH/pair_sph_taitwater.h | 1 - src/USER-SPH/pair_sph_taitwater_morris.cpp | 9 +-------- src/USER-SPH/pair_sph_taitwater_morris.h | 1 - 6 files changed, 4 insertions(+), 30 deletions(-) diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp index 3a83e41341..9669a2bb13 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -42,6 +42,7 @@ static const double sqrt_2_inv = std::sqrt(0.5); PairSDPDTaitwaterIsothermal::PairSDPDTaitwaterIsothermal (LAMMPS *lmp) : Pair (lmp) { restartinfo = 0; + single_enable =0; } /* ---------------------------------------------------------------------- */ @@ -309,12 +310,3 @@ double PairSDPDTaitwaterIsothermal::init_one (int i, int j) { return cut[i][j]; } -/* ---------------------------------------------------------------------- */ - -double PairSDPDTaitwaterIsothermal::single (int /*i*/, int /*j*/, int /*itype*/, - int /*jtype*/, double /*rsq*/, double /*factor_coul*/, - double /*factor_lj*/, double &fforce) { - fforce = 0.0; - - return 0.0; -} diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h index afa21c4132..caaa0759d0 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.h @@ -36,7 +36,6 @@ class PairSDPDTaitwaterIsothermal : public Pair { void settings (int, char **); void coeff (int, char **); virtual double init_one (int, int); - virtual double single (int, int, int, int, double, double, double, double &); protected: double viscosity, temperature; @@ -44,7 +43,7 @@ class PairSDPDTaitwaterIsothermal : public Pair { double **cut; void allocate (); - + unsigned int seed; #ifdef USE_ZEST std::mt19937_64 generator; diff --git a/src/USER-SPH/pair_sph_taitwater.cpp b/src/USER-SPH/pair_sph_taitwater.cpp index 42b318f2c9..a7a57825b8 100644 --- a/src/USER-SPH/pair_sph_taitwater.cpp +++ b/src/USER-SPH/pair_sph_taitwater.cpp @@ -29,7 +29,7 @@ using namespace LAMMPS_NS; PairSPHTaitwater::PairSPHTaitwater(LAMMPS *lmp) : Pair(lmp) { restartinfo = 0; - + single_enable = 0; first = 1; } @@ -291,11 +291,3 @@ double PairSPHTaitwater::init_one(int i, int j) { return cut[i][j]; } -/* ---------------------------------------------------------------------- */ - -double PairSPHTaitwater::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, - double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { - fforce = 0.0; - - return 0.0; -} diff --git a/src/USER-SPH/pair_sph_taitwater.h b/src/USER-SPH/pair_sph_taitwater.h index adcca80b22..ea4cfd8b26 100644 --- a/src/USER-SPH/pair_sph_taitwater.h +++ b/src/USER-SPH/pair_sph_taitwater.h @@ -32,7 +32,6 @@ class PairSPHTaitwater : public Pair { void settings(int, char **); void coeff(int, char **); virtual double init_one(int, int); - virtual double single(int, int, int, int, double, double, double, double &); protected: double *rho0, *soundspeed, *B; diff --git a/src/USER-SPH/pair_sph_taitwater_morris.cpp b/src/USER-SPH/pair_sph_taitwater_morris.cpp index 8012895af8..f2df992322 100644 --- a/src/USER-SPH/pair_sph_taitwater_morris.cpp +++ b/src/USER-SPH/pair_sph_taitwater_morris.cpp @@ -30,6 +30,7 @@ PairSPHTaitwaterMorris::PairSPHTaitwaterMorris(LAMMPS *lmp) : Pair(lmp) { restartinfo = 0; first = 1; + single_enable = 0; } /* ---------------------------------------------------------------------- */ @@ -287,11 +288,3 @@ double PairSPHTaitwaterMorris::init_one(int i, int j) { return cut[i][j]; } -/* ---------------------------------------------------------------------- */ - -double PairSPHTaitwaterMorris::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, - double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { - fforce = 0.0; - - return 0.0; -} diff --git a/src/USER-SPH/pair_sph_taitwater_morris.h b/src/USER-SPH/pair_sph_taitwater_morris.h index 0a66e0ebaf..2736e347e1 100644 --- a/src/USER-SPH/pair_sph_taitwater_morris.h +++ b/src/USER-SPH/pair_sph_taitwater_morris.h @@ -32,7 +32,6 @@ class PairSPHTaitwaterMorris : public Pair { void settings(int, char **); void coeff(int, char **); virtual double init_one(int, int); - virtual double single(int, int, int, int, double, double, double, double &); protected: double *rho0, *soundspeed, *B; From baa7b705b86c82a2e1727b3ea826b33208e98009 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:13:38 -0500 Subject: [PATCH 076/273] improve logic and grammar of error messages --- src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp | 12 +++++++----- src/USER-SPH/pair_sph_heatconduction.cpp | 2 +- src/USER-SPH/pair_sph_idealgas.cpp | 2 +- src/USER-SPH/pair_sph_lj.cpp | 2 +- src/USER-SPH/pair_sph_rhosum.cpp | 2 +- src/USER-SPH/pair_sph_taitwater.cpp | 4 ++-- src/USER-SPH/pair_sph_taitwater_morris.cpp | 4 ++-- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp index 9669a2bb13..0350843eb7 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -238,8 +238,9 @@ void PairSDPDTaitwaterIsothermal::allocate () { ------------------------------------------------------------------------- */ void PairSDPDTaitwaterIsothermal::settings (int narg, char **arg) { - if (narg != 2 && narg != 3) error->all (FLERR, "Illegal number of setting " - "arguments for pair_style sdpd/taitwater/morris/isothermal"); + if (narg != 2 && narg != 3) + error->all (FLERR, "Illegal number of arguments for " + "pair_style sdpd/taitwater/morris/isothermal"); temperature = force->numeric (FLERR, arg[0]); viscosity = force->numeric (FLERR, arg[1]); @@ -262,8 +263,9 @@ void PairSDPDTaitwaterIsothermal::settings (int narg, char **arg) { ------------------------------------------------------------------------- */ void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { - if (narg != 5) error->all (FLERR, "Incorrect args for pair_style " - "sph/taitwater/morris coefficients"); + if (narg != 5) + error->all (FLERR, "Incorrect args for pair_style " + "sph/taitwater/morris coefficients"); if (!allocated) allocate(); @@ -303,7 +305,7 @@ void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { double PairSDPDTaitwaterIsothermal::init_one (int i, int j) { if (setflag[i][j] == 0) - error->all(FLERR,"Not all pair sph/taitwater/morris coeffs are not set"); + error->all(FLERR,"Not all pair sph/taitwater/morris coeffs are set"); cut[j][i] = cut[i][j]; diff --git a/src/USER-SPH/pair_sph_heatconduction.cpp b/src/USER-SPH/pair_sph_heatconduction.cpp index 4a8990d6fd..c93e8040b2 100644 --- a/src/USER-SPH/pair_sph_heatconduction.cpp +++ b/src/USER-SPH/pair_sph_heatconduction.cpp @@ -158,7 +158,7 @@ void PairSPHHeatConduction::allocate() { void PairSPHHeatConduction::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/heatconduction"); + "Illegal number of arguments for pair_style sph/heatconduction"); } /* ---------------------------------------------------------------------- diff --git a/src/USER-SPH/pair_sph_idealgas.cpp b/src/USER-SPH/pair_sph_idealgas.cpp index 32b3e61233..d12ee06736 100644 --- a/src/USER-SPH/pair_sph_idealgas.cpp +++ b/src/USER-SPH/pair_sph_idealgas.cpp @@ -200,7 +200,7 @@ void PairSPHIdealGas::allocate() { void PairSPHIdealGas::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/idealgas"); + "Illegal number of arguments for pair_style sph/idealgas"); } /* ---------------------------------------------------------------------- diff --git a/src/USER-SPH/pair_sph_lj.cpp b/src/USER-SPH/pair_sph_lj.cpp index c382833baf..3a30ecb5fa 100644 --- a/src/USER-SPH/pair_sph_lj.cpp +++ b/src/USER-SPH/pair_sph_lj.cpp @@ -207,7 +207,7 @@ void PairSPHLJ::allocate() { void PairSPHLJ::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/lj"); + "Illegal number of arguments for pair_style sph/lj"); } /* ---------------------------------------------------------------------- diff --git a/src/USER-SPH/pair_sph_rhosum.cpp b/src/USER-SPH/pair_sph_rhosum.cpp index 7a3c78efd0..896a422782 100644 --- a/src/USER-SPH/pair_sph_rhosum.cpp +++ b/src/USER-SPH/pair_sph_rhosum.cpp @@ -228,7 +228,7 @@ void PairSPHRhoSum::allocate() { void PairSPHRhoSum::settings(int narg, char **arg) { if (narg != 1) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/rhosum"); + "Illegal number of arguments for pair_style sph/rhosum"); nstep = force->inumeric(FLERR,arg[0]); } diff --git a/src/USER-SPH/pair_sph_taitwater.cpp b/src/USER-SPH/pair_sph_taitwater.cpp index a7a57825b8..9d5a417e5b 100644 --- a/src/USER-SPH/pair_sph_taitwater.cpp +++ b/src/USER-SPH/pair_sph_taitwater.cpp @@ -228,7 +228,7 @@ void PairSPHTaitwater::allocate() { void PairSPHTaitwater::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/taitwater"); + "Illegal number of arguments for pair_style sph/taitwater"); } /* ---------------------------------------------------------------------- @@ -282,7 +282,7 @@ void PairSPHTaitwater::coeff(int narg, char **arg) { double PairSPHTaitwater::init_one(int i, int j) { if (setflag[i][j] == 0) { - error->all(FLERR,"Not all pair sph/taitwater coeffs are set"); + error->all(FLERR,"All pair sph/taitwater coeffs are set"); } cut[j][i] = cut[i][j]; diff --git a/src/USER-SPH/pair_sph_taitwater_morris.cpp b/src/USER-SPH/pair_sph_taitwater_morris.cpp index f2df992322..fb745ac7da 100644 --- a/src/USER-SPH/pair_sph_taitwater_morris.cpp +++ b/src/USER-SPH/pair_sph_taitwater_morris.cpp @@ -229,7 +229,7 @@ void PairSPHTaitwaterMorris::allocate() { void PairSPHTaitwaterMorris::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, - "Illegal number of setting arguments for pair_style sph/taitwater/morris"); + "Illegal number of arguments for pair_style sph/taitwater/morris"); } /* ---------------------------------------------------------------------- @@ -279,7 +279,7 @@ void PairSPHTaitwaterMorris::coeff(int narg, char **arg) { double PairSPHTaitwaterMorris::init_one(int i, int j) { if (setflag[i][j] == 0) { - error->all(FLERR,"Not all pair sph/taitwater/morris coeffs are not set"); + error->all(FLERR,"All pair sph/taitwater/morris coeffs are not set"); } cut[j][i] = cut[i][j]; From a1e8992eac98656b66877ec0ad5e2fed90783b11 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:21:19 -0500 Subject: [PATCH 077/273] replace non-ASCII characters --- doc/src/pair_sdpd_taitwater_isothermal.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/pair_sdpd_taitwater_isothermal.txt b/doc/src/pair_sdpd_taitwater_isothermal.txt index 97b68ceba7..fba97e1bc2 100644 --- a/doc/src/pair_sdpd_taitwater_isothermal.txt +++ b/doc/src/pair_sdpd_taitwater_isothermal.txt @@ -26,7 +26,7 @@ pair_coeff * * 1000.0 1430.0 2.4 :pre The sdpd/taitwater/isothermal style computes forces between mesoscopic particles according to the Smoothed Dissipative Particle Dynamics model -described in this paper by "(Español and Revenga)"_#Español_Revenga under +described in this paper by "(Espanol and Revenga)"_#Espanol_Revenga under the following assumptions: :olb @@ -49,7 +49,7 @@ where gamma = 7 and B = c_0^2 rho_0 / gamma, with rho_0 being the reference density and c_0 the reference speed of sound. The laminar viscosity and the random forces will be computed according -to formulas described in "(Español and Revenga)"_#Español_Revenga. +to formulas described in "(Espanol and Revenga)"_#Espanol_Revenga. IMPORTANT NOTE: Similar to "brownian"_pair_brownian.html and "dpd"_pair_dpd.html styles, the "newton"_newton.html setting for @@ -104,5 +104,5 @@ The default seed is 0 (before mixing). :line -:link(Español_Revenga) -[(Español and Revenga)] Español, Revenga, Physical Review E, 67, 026705 (2003). +:link(Espanol_Revenga) +[(Espanol and Revenga)] Espanol, Revenga, Physical Review E, 67, 026705 (2003). From bbb371134dca7ce59f0f9d3a38b308d1e4f92b7b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Nov 2018 22:38:02 -0500 Subject: [PATCH 078/273] include USER-SDPD package in list of user packages in conventional make --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 7d31c81c75..b6aa5e0d92 100644 --- a/src/Makefile +++ b/src/Makefile @@ -63,7 +63,7 @@ PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-mgpt user-misc user-mofff user-molfile \ user-netcdf user-omp user-phonon user-ptm user-qmmm user-qtb \ user-quip user-reaxc user-scafacos user-smd user-smtbq \ - user-sph user-tally user-uef user-vtk + user-sdpd user-sph user-tally user-uef user-vtk PACKLIB = compress gpu kim kokkos latte meam message mpiio mscg poems \ python reax voronoi \ From f2a29880e28a56305313d86014c66b02de5f6970 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Nov 2018 16:48:43 -0500 Subject: [PATCH 079/273] patch 9Nov2018 --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 2777735d6d..b109937034 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -24 Oct 2018 version :c,h2 +9 Nov 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 62ba229b7e..bf3eb42707 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "24 Oct 2018" +#define LAMMPS_VERSION "9 Nov 2018" From adeb0c2b547df69a8ae15f08df5471858a2d26ad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Nov 2018 14:17:51 -0500 Subject: [PATCH 080/273] replace faulty preprocessor logic fixes #1196 --- src/USER-VTK/dump_vtk.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-VTK/dump_vtk.cpp b/src/USER-VTK/dump_vtk.cpp index edbc647a81..88e95dd338 100644 --- a/src/USER-VTK/dump_vtk.cpp +++ b/src/USER-VTK/dump_vtk.cpp @@ -93,10 +93,10 @@ enum{VTK,VTP,VTU,PVTP,PVTU}; // file formats #define ONEFIELD 32 #define DELTA 1048576 -#if VTK_MAJOR_VERSION >= 7 -#define InsertNextTupleValue InsertNextTypedTuple -#elif VTK_MAJOR_VERSION > 8 +#if (VTK_MAJOR_VERSION < 5) || (VTK_MAJOR_VERSION > 8) #error This code has only been tested with VTK 5, 6, 7, and 8 +#elif VTK_MAJOR_VERSION > 6 +#define InsertNextTupleValue InsertNextTypedTuple #endif /* ---------------------------------------------------------------------- */ From 62b11596735682c3fa900ee060ace58c0b96e61c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Nov 2018 17:27:39 -0500 Subject: [PATCH 081/273] update presets for USER-PLUMED package. fix typo. --- cmake/presets/all_off.cmake | 2 +- cmake/presets/all_on.cmake | 2 +- cmake/presets/manual_selection.cmake | 3 ++- cmake/presets/nolib.cmake | 2 +- cmake/presets/user.cmake | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 9021dedc08..b434796d7c 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -13,7 +13,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) + USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index ef17e38914..3a1100f337 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -13,7 +13,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) + USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) diff --git a/cmake/presets/manual_selection.cmake b/cmake/presets/manual_selection.cmake index 35a45a5c87..6db41b708c 100644 --- a/cmake/presets/manual_selection.cmake +++ b/cmake/presets/manual_selection.cmake @@ -56,7 +56,8 @@ set(PKG_USER-MOFFF OFF CACHE BOOL "" FORCE) set(PKG_USER-MOLFILE OFF CACHE BOOL "" FORCE) set(PKG_USER-NETCDF OFF CACHE BOOL "" FORCE) set(PKG_USER-OMP OFF CACHE BOOL "" FORCE) -set(PKG_USER-PHOFFOFF OFF CACHE BOOL "" FORCE) +set(PKG_USER-PHONON OFF CACHE BOOL "" FORCE) +set(PKG_USER-PLUMED OFF CACHE BOOL "" FORCE) set(PKG_USER-QMMM OFF CACHE BOOL "" FORCE) set(PKG_USER-QTB OFF CACHE BOOL "" FORCE) set(PKG_USER-QUIP OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index 54db12a851..4c02fb6210 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -13,7 +13,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) + USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) diff --git a/cmake/presets/user.cmake b/cmake/presets/user.cmake index afb030d3d6..af606203e9 100644 --- a/cmake/presets/user.cmake +++ b/cmake/presets/user.cmake @@ -13,7 +13,7 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) + USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) From fe04147ee0ce4f641ee1f378c198f11f5e9fe19b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 01:09:22 -0500 Subject: [PATCH 082/273] fix typo --- tools/msi2lmp/src/MakeLists.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/msi2lmp/src/MakeLists.c b/tools/msi2lmp/src/MakeLists.c index 44b9bdd0af..18b261a561 100644 --- a/tools/msi2lmp/src/MakeLists.c +++ b/tools/msi2lmp/src/MakeLists.c @@ -363,7 +363,7 @@ int count_dihedrals() if (i != k) { for (ll=0; ll < atoms[k].no_connect; ll++) { l = atoms[k].conn_no[ll]; - if ((l != j) && (i != l)) n++ + if ((l != j) && (i != l)) n++; } } } From ab8215a669750c1f4f7d9da3459847bb2cffe3bb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 01:09:31 -0500 Subject: [PATCH 083/273] remove dead code --- tools/msi2lmp/src/ReadCarFile.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/msi2lmp/src/ReadCarFile.c b/tools/msi2lmp/src/ReadCarFile.c index c6db96cf92..7932f7d6e2 100644 --- a/tools/msi2lmp/src/ReadCarFile.c +++ b/tools/msi2lmp/src/ReadCarFile.c @@ -77,7 +77,6 @@ void ReadCarFile(void) double cos_gamma; double sin_gamma; double cos_beta; - double sin_beta; double A, B, C; double center[3]; double hmat[6]; @@ -265,7 +264,6 @@ void ReadCarFile(void) cos_gamma = cos(pbc[5]*PI_180); sin_gamma = sin(pbc[5]*PI_180); cos_beta = cos(pbc[4]*PI_180); - sin_beta = sin(pbc[4]*PI_180); if (pflag > 2) { printf(" pbc[3] %f pbc[4] %f pbc[5] %f\n", pbc[3] ,pbc[4] ,pbc[5]); printf(" cos_alpha %f cos_beta %f cos_gamma %f\n", cos_alpha ,cos_beta ,cos_gamma); From 729201ab93f7981d5743eec9d93630003210b075 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 08:03:19 -0500 Subject: [PATCH 084/273] fix typo reported in #1199 --- doc/src/Build_basics.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_basics.txt b/doc/src/Build_basics.txt index 4b3a347bf1..b3ff0a55c5 100644 --- a/doc/src/Build_basics.txt +++ b/doc/src/Build_basics.txt @@ -137,9 +137,9 @@ simply loading the appropriate module before building LAMMPS. -D CMAKE_C_COMPILER=name # name of C compiler -D CMAKE_Fortran_COMPILER=name # name of Fortran compiler :pre --D CMAKE_CXX_FlAGS=string # flags to use with C++ compiler --D CMAKE_C_FlAGS=string # flags to use with C compiler --D CMAKE_Fortran_FlAGS=string # flags to use with Fortran compiler :pre +-D CMAKE_CXX_FLAGS=string # flags to use with C++ compiler +-D CMAKE_C_FLAGS=string # flags to use with C compiler +-D CMAKE_Fortran_FLAGS=string # flags to use with Fortran compiler :pre By default CMake will use a compiler it finds and it will add optimization flags appropriate to that compiler and any "accelerator From 7a4f534676d4cf5fbd5f6559fda27dc5b5f704ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 08:03:41 -0500 Subject: [PATCH 085/273] replace non-ASCII character --- doc/src/compute_ptm_atom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_ptm_atom.txt b/doc/src/compute_ptm_atom.txt index 2e22e4e9fb..8f79fe502b 100644 --- a/doc/src/compute_ptm_atom.txt +++ b/doc/src/compute_ptm_atom.txt @@ -117,5 +117,5 @@ package"_Build_package.html doc page for more info. :line :link(Larsen) -[(Larsen)] Larsen, Schmidt, Schiøtz, Modelling Simul Mater Sci Eng, 24, 055007 (2016). +[(Larsen)] Larsen, Schmidt, Schiotz, Modelling Simul Mater Sci Eng, 24, 055007 (2016). From f68d77c7aff34c3f72693862589945afcd45f5ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 08:03:58 -0500 Subject: [PATCH 086/273] correct formatting --- doc/src/fix_bond_react.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index e88bd198f3..55a5785f7f 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -41,7 +41,7 @@ react = mandatory argument indicating new reaction specification :l fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) {stabilize_steps} value = timesteps - timesteps = number of timesteps to apply internally created nve/limit.html + timesteps = number of timesteps to apply internally created nve/limit fix :pre {update_edges} value = {none} or {charges} :l none = do not update topology near the edges of reaction templates charges = update atomic charges of all atoms in reaction templates From 86d1304176c4e6b501a39887e5c5aa76771341eb Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Sat, 10 Nov 2018 18:58:53 -0700 Subject: [PATCH 087/273] cmake: update doc aobut executables --- cmake/README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cmake/README.md b/cmake/README.md index 21e728c1f0..b9020bf4a9 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -1492,6 +1492,11 @@ target API. + + BIN2C (CUDA only) + Path to bin2c executable + 1st in path (if found) + @@ -1647,9 +1652,8 @@ requires `gzip` to be in your `PATH` GZIP_EXECUTABLE - - - + path to gzip executable + 1st in path (if found) @@ -1679,9 +1683,8 @@ requires `ffmpeg` to be in your `PATH` FFMPEG_EXECUTABLE - - - + path to ffmpeg executable + 1st in path (if found) From fbd610b8a9573bc6ed360ec599a4196c84a109eb Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 10 Oct 2018 13:39:44 -0600 Subject: [PATCH 088/273] global/local hyperdynamics src and doc files --- doc/fix_hyper_global.txt | 146 +++ doc/fix_hyper_local.txt | 200 ++++ doc/hyper.txt | 117 +++ src/REPLICA/fix_event_hyper.cpp | 95 ++ src/REPLICA/fix_event_hyper.h | 60 ++ src/REPLICA/fix_hyper.cpp | 35 + src/REPLICA/fix_hyper.h | 43 + src/REPLICA/fix_hyper_global.cpp | 497 +++++++++ src/REPLICA/fix_hyper_global.h | 110 ++ src/REPLICA/fix_hyper_local.cpp | 1610 ++++++++++++++++++++++++++++++ src/REPLICA/fix_hyper_local.h | 175 ++++ src/REPLICA/hyper.cpp | 548 ++++++++++ src/REPLICA/hyper.h | 65 ++ 13 files changed, 3701 insertions(+) create mode 100644 doc/fix_hyper_global.txt create mode 100644 doc/fix_hyper_local.txt create mode 100644 doc/hyper.txt create mode 100644 src/REPLICA/fix_event_hyper.cpp create mode 100644 src/REPLICA/fix_event_hyper.h create mode 100644 src/REPLICA/fix_hyper.cpp create mode 100644 src/REPLICA/fix_hyper.h create mode 100644 src/REPLICA/fix_hyper_global.cpp create mode 100644 src/REPLICA/fix_hyper_global.h create mode 100644 src/REPLICA/fix_hyper_local.cpp create mode 100644 src/REPLICA/fix_hyper_local.h create mode 100644 src/REPLICA/hyper.cpp create mode 100644 src/REPLICA/hyper.h diff --git a/doc/fix_hyper_global.txt b/doc/fix_hyper_global.txt new file mode 100644 index 0000000000..c841f0b891 --- /dev/null +++ b/doc/fix_hyper_global.txt @@ -0,0 +1,146 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +fix hyper/global command :h3 + +[Syntax:] + +fix ID group-ID hyper/global cutbond qfactor Vmax Tequil :pre + +ID, group-ID are documented in "fix"_fix.html command +hyper/global = style name of this fix command +cutbond = max distance at which a pair of atoms is considered bonded (distance units) +qfactor = max strain at which bias potential goes to 0.0 (unitless) +Vmax = height of bias potential (energy units) +Tequil = equilibration temperature (temperature units) :ul + +[Examples:] + +fix 1 all hyper/global 1.0 0.3 0.8 300.0 :pre + +[Description:] + +This fix is meant to be used with the "hyper"_hyper.html command to +perform a bond-boost hyperdynamics simulation. The role of this fix +is a select a single pair of atoms within the system at each timestep +to add a global bias potential to, which will alter their dynamics. +This is in contrast to the "fix hyper/local"_fix_hyper_local.html +command, which can add a local bias potential to multiple pairs of +atoms at each timestep. + +For a system that undergoes rare transition events, where one or more +atoms move across an energy barrier to a new potential energy basin, +the effect of the bias potential is to induce more rapid transitions. +This can lead to a dramatic speed-up in the rate at which events +occurs, without altering their relative frequencies, thus leading to +an overall dramatic speed-up in the effective elapsed time of the +simulation. + +Cite various papers. + +The current strain of a bond IJ is defined as + +Eij = (Rij - R0ij) / R0ij :pre + +Emax = is the max of the absolute value of Eij for all IJ bonds. + +dVij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < q + = 0 otherwise :pre + +Delta Vbias = minimum of dVij for all IJ bonds :pre + +The boost factor B = exp(beta * Delta Vbias) +for a single timestep. + +Thus the accumulated hypertime is simply + +t_hyper = Sum (i = 1 to Nsteps) Bi * dt :pre + +The {cutbond} argument is the cutoff distance for defining bonds +between pairs of nearby atoms. A pair of atoms in their equilibrium, +minimum-energy config, which are a distance Rij < cutbond, are +defined as a bonded pair. + +The {qfactor} argument is the limiting strain at which +the Vbias (the bias potential) goes to 0.0. + +If {qfactor} is too big, then transitions are affected b/c +the bias energy is non-zero at the transitions. If it is +too small than not must boost is achieved for a large system +with many bonds (some bonds Eij always exceeds qfactor). + +The {Vmax} argument is the prefactor on the bias potential. + +The {Tequil} argument is part of the beta term in the +exponential factor that determines how much boost is +achieved as a function of the bias potential. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. + +The "fix_modify"_fix_modify.html {energy} option is supported by this +fix to add the energy of the bias potential to the the system's +potential energy as part of "thermodynamic output"_thermo_style.html. + +This fix computes a global scalar and global vector of length 10, +which can be accessed by various "output +commands"_Section_howto.html#howto_15. The scalar is the magnitude of +the bias potential (energy units) applied on the current timestep. +The vector stores the following quantities: + +1 = boost factor on this step (unitless) +2 = max strain of any bond on this step (unitless) +3 = ID of first atom in the max-strain bond +4 = ID of second atom in the max-strain bond +5 = average # of bonds/atom on this step :ul + +6 = fraction of step with no bias during this run +7 = max drift distance of any atom during this run (distance units) +8 = max bond length during this run (distance units) :ul + +9 = cummulative hyper time since fix created (time units) +10 = cummulative count of event timesteps since fix created +11 = cummulative count of atoms in events since fix created :ul + +The first 5 quantities are for the current timestep. The quantities +6-8 are for the current run. The quantities 9-11 are cummulative +across multiple runs (since the fix was defined in the input script). + +For value 10, events are checked for by the "hyper"_hyper.html command +once every {Nevent} timesteps. This value is the count of the number +of timesteps on which one (or more) events was detected. It is NOT +the number of distinct events, since more than one physical event may +occur in the same {Nevent} time window. + +For value 11, each time the "hyper"_hyper.html command checks for an +event, the event compute it uses will flag zero or more atoms as +participating in an event. E.g. atoms that have displaced more than +some distance from the previous quench state. This value is the count +of the number of atoms participating in any of the events that were +found. + +The scalar and vector values calculated by this fix are all +"intensive". + +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. This fix is not invoked during "energy +minimization"_minimize.html. + +[Restrictions:] + +This fix is part of the REPLICA package. It is only enabled if LAMMPS +was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"fix hyper/local"_fix_hyper_local.html + +[Default:] None diff --git a/doc/fix_hyper_local.txt b/doc/fix_hyper_local.txt new file mode 100644 index 0000000000..ef98637fa5 --- /dev/null +++ b/doc/fix_hyper_local.txt @@ -0,0 +1,200 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +fix hyper/local command :h3 + +[Syntax:] + +fix ID group-ID hyper/local cutbond qfactor Vmax Tequil Dcut alpha boost :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +hyper/local = style name of this fix command :l +cutbond = max distance at which a pair of atoms is considered bonded (distance units) :l +qfactor = max strain at which bias potential goes to 0.0 (unitless) :l +Vmax = estimated height of bias potential (energy units) :l +Tequil = equilibration temperature (temperature units) :l +Dcut = min distance between boosted bonds (distance units) :l +alpha = boostostat relaxation time (time units) :l +boost = desired time boost factor (unitless) :l +zero or more keyword/value pairs may be appended :l +keyword = {histo} or {lost} or {check/bias} or {check/coeff} + {histo} values = Nevery Nbin delta Nout + Nevery = histogram bond bias coefficients every this many timesteps + Nbin = # of histogram bins + delta = width of each histogram bin + Nout = output histogram counts every this many timesteps + {lostbond} value = error/warn/ignore + {check/bias} values = Nevery error/warn/ignore + {check/coeff} values = Nevery error/warn/ignore :pre +:ule + +[Examples:] + +fix 1 all hyper/local 1.0 0.3 0.8 300.0 :pre + +[Description:] + +This fix is meant to be used with the "hyper"_hyper.html command to +perform a bond-boost hyperdynamics simulation. The role of this fix +is a select a multiple pairs of atoms within the system at each +timestep to add a local bias potential to, which will alter their +dynamics. This is in contrast to the "fix +hyper/global"_fix_hyper_global.html command, which adds a global bias +potential to a single pair of atoms at each timestep. + +For a system that undergoes rare transition events, where one or more +atoms move across an energy barrier to a new potential energy basin, +the effect of the bias potential is to induce more rapid transitions. +This can lead to a dramatic speed-up in the rate at which events +occurs, without altering their relative frequencies, thus leading to +an overall dramatic speed-up in the effective wall-clock time of the +simulation. + +Cite various papers. + +The current strain of a bond IJ is defined as + +Eij = (Rij - R0ij) / R0ij + +Emax = is the max of the absolute value of Eij for all IJ bonds. + +dVij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < q + = 0 otherwise + +Delta Vbias = minimum of dVij for all IJ bonds + +The boost factor B = exp(beta * Delta Vbias) +for a single timestep. + +Thus the accumulated hypertime is simply + +t_hyper = Sum (i = 1 to Nsteps) Bi * dt + +NOTE: Add eqs for boostostat and boost coeff. +Explain how many bonds are boosted simultaneously +and how to choose boost factor and initial Vmax. + +The {cutbond} argument is the cutoff distance for defining bonds +between pairs of nearby atoms. A pair of atoms in their equilibrium, +minimum-energy config, which are a distance Rij < cutbond, are +defined as a bonded pair. + +The {qfactor} argument is the limiting strain at which +the Vbias (the bias potential) goes to 0.0. + +If qfactor is too big, then transitions are affected b/c +the bias energy is non-zero at the transitions. If it is +too small than not must boost is achieved for a large system +with many bonds (some bonds Eij always exceeds qfactor). + +The {Vmax} argument is the initial prefactor on the bias potential. +Should be chosen as estimate of final. Will be adjusted by +boost cooeficient + +The {Tequil} argument is part of the beta term in the +exponential factor that determines how much boost is +achieved as a function of the bias potential. + +The {Dcut} argument is the distance required between two bonds for +them to be selected as both being boosted. The distance is between +the center points of each bond. Actually between any pair of atoms in +either bond. + +The {alpha} argument is a pre-factor on the update equation +for each atom's boostostat: + +NOTE: give equation above + +Note that the units for {alpha} are in time units, similar +to other thermostat or barostat damping parameters + +The {boost} argument is the desired boost factor (e.g. 100x) +that all the atoms in the system will experience. + +NOTE: explain how to choose good value for this. If this parameter is +chosen to be too large, then the bias potential applied to pairs of +bonded atoms may become unphysically large, leading to bad dynamics. +If chosen too small, the hyperdynamics run may be inefficient in the +sense that events take a long time to occur. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. + +The "fix_modify"_fix_modify.html {energy} option is supported by this +fix to add the energy of the bias potential to the the system's +potential energy as part of "thermodynamic output"_thermo_style.html. + +This fix computes a global scalar and global vector of length 23, +which can be accessed by various "output +commands"_Section_howto.html#howto_15. The scalar is the magnitude of +the bias potential (energy units) applied on the current timestep, +summed over all biased bonds. The vector stores the following +quantities: + +1 = # of boosted bonds on this step +2 = max strain of any bond on this step (unitless) +3 = average bias potential for all bonds on this step (energy units) +4 = average bonds/atom on this step +5 = average neighbor bonds/bond on this step :ul + +6 = fraction of steps and bonds with no bias during this run +7 = max drift distance of any atom during this run (distance units) +8 = max bond length during this run (distance units) +9 = average # of boosted bonds/step during this run +10 = average bias potential for all bonds during this run (energy units) +11 = max bias potential for any bond during this run (energy units) +12 = min bias potential for any bond during this run (energy units) +13 = max distance from my box of any ghost atom with maxstrain < qfactor during th +is run (distance units) +14 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units) +15 = count of ghost neighbor atoms not found on reneighbor steps during this run +16 = count of lost bond partners during this run +17 = average bias coeff for lost bond partners during this run +18 = count of bias overlaps found during this run +19 = count of non-matching bias coefficients found during this run :ul + +20 = cummulative hyper time since fix created (time units) +21 = cummulative count of event timesteps since fix created +22 = cummulative count of atoms in events since fix created +23 = cummulative # of new bonds since fix created :ul + +The first quantities (1-5) are for the current timestep. The +quantities 6-19 are for the current hyper run. They are reset each +time a new hyper run is performed. The quantities 20-23 are +cummulative across multiple hyper runs, They are only set to initial +values once, when this fix is defined in the input script. + +For value 6, the numerator is a count of all biased bonds on every +timestep whose bias value = 0.0. The denominator is the count of all +biased bonds on all timesteps. + +For values 13 and 14, the maxstrain of a ghost atom is the maxstrain +of any bond it is part of, and it is checked for ghost atoms within +the bond neighbor cutoff. + +The scalar and vector values calculated by this fix are all +"intensive". + +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. This fix is not invoked during "energy +minimization"_minimize.html. + +[Restrictions:] + +This fix is part of the REPLICA package. It is only enabled if LAMMPS +was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"hyper"_hyper.html, "fix hyper/global"_fix_hyper_global.html + +[Default:] None + diff --git a/doc/hyper.txt b/doc/hyper.txt new file mode 100644 index 0000000000..966d33a30f --- /dev/null +++ b/doc/hyper.txt @@ -0,0 +1,117 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +hyper command :h3 + +[Syntax:] + +hyper N Nevent fixID computeID keyword values ... :pre + +N = # of timesteps to run :ulb,l +Nevent = check for events every this many steps :l +fixID = ID of a fix that applies a global or local bias potential :l +computeID = ID of a compute that identifies when an event has occurred :l +zero or more keyword/value pairs may be appended :l +keyword = {min} or {time} :l + {min} values = etol ftol maxiter maxeval + etol = stopping tolerance for energy, used in quenching + ftol = stopping tolerance for force, used in quenching + maxiter = max iterations of minimize, used in quenching + maxeval = max number of force/energy evaluations, used in quenching + {time} value = {steps} or {clock} + {steps} = simulation runs for N timesteps (default) + {clock} = simulation runs until hyper time exceeds N timesteps :pre +:ule + +[Examples:] + +hyper 5000 100 global event :pre + +[Description:] + +Run a bond-boost hyperdynamics (HD) simulation where time is +accelerated by application of a bias potential to a one or more pairs +of atoms in the system. This command can be used to run both global +and local hyperdyamics. In global HD a single bond (nearby pair of +atoms) within the system is biased on a given timestep. In local HD +multiple bonds (separated by a sufficient distance) can be biased +simultaneously at each timestep. + +Make next paragraph more HD-specific. + +Both global and local HD are described in "this paper"_#Voter2013 by +Art Voter and collaborators. They are methods for performing +accelerated dynamics that is suitable for infrequent-event systems +that obey first-order kinetics. A good overview of accelerated +dynamics methods for such systems in given in "this review +paper"_#Voter2002prd from the same group. To quote from the paper: +"The dynamical evolution is characterized by vibrational excursions +within a potential basin, punctuated by occasional transitions between +basins." The transition probability is characterized by p(t) = +k*exp(-kt) where k is the rate constant. Running multiple replicas +gives an effective enhancement in the timescale spanned by the +multiple simulations, while waiting for an event to occur. + +How different than PRD. + +An HD run has several stages, which are repeated each time an "event" +occurs, as defined below. The logic for a HD run is as follows: + +quench +reset list of bonds :pre + +while (time remains): + run dynamics for Nevery steps + quench + check for an event + if event occurred: reset list of bonds + restore pre-quench state :pre + +Explain each of the steps above. Explain what list of bonds is and +how event is detected. + +Explain the specified fix and compute. + +Statistics about the number of events, the number of bonds that a bias +potential is applied to, the accumulated hyper time, etc are stored by +the fix and can be output with thermodynamic output. + +:line + +[Restrictions:] + +This command can only be used if LAMMPS was built with the REPLICA +package. See the "Making LAMMPS"_Section_start.html#start_3 section +for more info on packages. + +NOTE: is this true? +This command cannot be used when any fixes are defined that keep track +of elapsed time to perform time-dependent operations. Examples +include the "ave" fixes such as "fix ave/chunk"_fix_ave_chunk.html. +Also "fix dt/reset"_fix_dt_reset.html and "fix +deposit"_fix_deposit.html. + +[Related commands:] + +"fix hyper/global"_fix_hyper_global.html, "fix +hyper/local"_fix_hyper_local.html, "compute +event/displace"_compute_event_displace.html + +[Default:] + +The option defaults are min = 0.1 0.1 40 50 and time = steps. + +:line + +:link(Voter2013) +[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, +144110 (2013). + +:link(Voter2002prd) +[(Voter2002)] Voter, Montalenti, Germann, Annual Review of Materials +Research 32, 321 (2002). diff --git a/src/REPLICA/fix_event_hyper.cpp b/src/REPLICA/fix_event_hyper.cpp new file mode 100644 index 0000000000..7dd306c735 --- /dev/null +++ b/src/REPLICA/fix_event_hyper.cpp @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "fix_event_hyper.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "neighbor.h" +#include "comm.h" +#include "universe.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixEventHyper::FixEventHyper(LAMMPS *lmp, int narg, char **arg) : + FixEvent(lmp, narg, arg) +{ + if (narg != 3) error->all(FLERR,"Illegal fix event command"); + + restart_global = 1; + + event_number = 0; + event_timestep = update->ntimestep; + clock = 0; +} + +/* ---------------------------------------------------------------------- + save current atom coords as an event (via call to base class) + called when an event occurs in some replica + set event_timestep = when event occurred in a particular replica + update clock = elapsed time since last event, across all replicas +------------------------------------------------------------------------- */ + +void FixEventHyper::store_event_hyper(bigint ntimestep, int delta_clock) +{ + store_event(); + event_timestep = ntimestep; + clock += delta_clock; + event_number++; +} + +/* ---------------------------------------------------------------------- + pack entire state of Fix into one write +------------------------------------------------------------------------- */ + +void FixEventHyper::write_restart(FILE *fp) +{ + int n = 0; + double list[6]; + list[n++] = event_number; + list[n++] = event_timestep; + list[n++] = clock; + list[n++] = replica_number; + list[n++] = correlated_event; + list[n++] = ncoincident; + + if (comm->me == 0) { + int size = n * sizeof(double); + fwrite(&size,sizeof(int),1,fp); + fwrite(list,sizeof(double),n,fp); + } +} + +/* ---------------------------------------------------------------------- + use state info from restart file to restart the Fix +------------------------------------------------------------------------- */ + +void FixEventHyper::restart(char *buf) +{ + int n = 0; + double *list = (double *) buf; + + event_number = static_cast (list[n++]); + event_timestep = static_cast (list[n++]); + clock = static_cast (list[n++]); + replica_number = static_cast (list[n++]); + correlated_event = static_cast (list[n++]); + ncoincident = static_cast (list[n++]); +} diff --git a/src/REPLICA/fix_event_hyper.h b/src/REPLICA/fix_event_hyper.h new file mode 100644 index 0000000000..4c5d4a93ee --- /dev/null +++ b/src/REPLICA/fix_event_hyper.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(EVENT/HYPER,FixEventHyper) + +#else + +#ifndef LMP_FIX_EVENT_HYPER_H +#define LMP_FIX_EVENT_HYPER_H + +#include "fix_event.h" + +namespace LAMMPS_NS { + +class FixEventHyper : public FixEvent { + public: + int event_number; // event counter + bigint event_timestep; // timestep of last event on any replica + bigint clock; // total elapsed timesteps across all replicas + int replica_number; // replica where last event occured + int correlated_event; // 1 if last event was correlated, 0 otherwise + int ncoincident; // # of simultaneous events on different replicas + + FixEventHyper(class LAMMPS *, int, char **); + ~FixEventHyper() {} + + void write_restart(FILE *); + void restart(char *); + + // methods specific to FixEventHyper, invoked by hyper + + void store_event_hyper(bigint, int); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/REPLICA/fix_hyper.cpp b/src/REPLICA/fix_hyper.cpp new file mode 100644 index 0000000000..9f01d9542c --- /dev/null +++ b/src/REPLICA/fix_hyper.cpp @@ -0,0 +1,35 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include "fix_hyper.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +FixHyper::FixHyper(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) {} + +/* ---------------------------------------------------------------------- + extract hyper flag setting for all Fixes that perform hyperdynamics +------------------------------------------------------------------------- */ + +void *FixHyper::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str,"hyperflag") == 0) { + return &hyperflag; + } + return NULL; +} + diff --git a/src/REPLICA/fix_hyper.h b/src/REPLICA/fix_hyper.h new file mode 100644 index 0000000000..7cb6cadf8f --- /dev/null +++ b/src/REPLICA/fix_hyper.h @@ -0,0 +1,43 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef LMP_FIX_HYPER_H +#define LMP_FIX_HYPER_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixHyper : public Fix { + public: + FixHyper(class LAMMPS *, int, char **); + virtual ~FixHyper() {} + void *extract(const char *, int &); + + // must be provided by child class + + virtual void init_hyper() = 0; + virtual void build_bond_list(int) = 0; + virtual double query(int) = 0; + + protected: + int hyperflag; +}; + +} + +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp new file mode 100644 index 0000000000..ba45e47407 --- /dev/null +++ b/src/REPLICA/fix_hyper_global.cpp @@ -0,0 +1,497 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "fix_hyper_global.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "domain.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "modify.h" +#include "math_extra.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define DELTA 16384 +#define VECLEN 5 + +/* ---------------------------------------------------------------------- */ + +FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) : + FixHyper(lmp, narg, arg) +{ + // NOTE: add NULL declarations + // NOTE: count/output # of timesteps on which bias is non-zero + // NOTE: require newton on? + + if (atom->map_style == 0) + error->all(FLERR,"Fix hyper/global command requires atom map"); + + if (narg != 7) error->all(FLERR,"Illegal fix hyper/global command"); + + hyperflag = 1; + scalar_flag = 1; + vector_flag = 1; + size_vector = 11; + global_freq = 1; + extscalar = 0; + extvector = 0; + + cutbond = force->numeric(FLERR,arg[3]); + qfactor = force->numeric(FLERR,arg[4]); + vmax = force->numeric(FLERR,arg[5]); + tequil = force->numeric(FLERR,arg[6]); + + if (cutbond < 0.0 || qfactor <= 0.0 || vmax < 0.0 || tequil <= 0.0) + error->all(FLERR,"Illegal fix hyper/global command"); + + invqfactorsq = 1.0 / (qfactor*qfactor); + cutbondsq = cutbond*cutbond; + beta = 1.0 / (force->boltz * tequil); + + maxbond = 0; + nblocal = 0; + blist = NULL; + + maxold = 0; + xold = NULL; + tagold = NULL; + + me = comm->me; + firstflag = 1; + bcastflag = 0; + for (int i = 0; i < VECLEN; i++) outvec[i] = 0.0; + + nevent = 0; + nevent_atom = 0; + t_hyper = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +FixHyperGlobal::~FixHyperGlobal() +{ + memory->sfree(blist); + memory->destroy(xold); + memory->destroy(tagold); +} + +/* ---------------------------------------------------------------------- */ + +int FixHyperGlobal::setmask() +{ + int mask = 0; + mask |= PRE_NEIGHBOR; + mask |= PRE_FORCE; + mask |= PRE_REVERSE; + mask |= THERMO_ENERGY; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::init_hyper() +{ + maxdriftsq = 0.0; + maxbondlen = 0.0; + nobias = 0; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::init() +{ + dt = update->dt; + + // need an occasional half neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::setup_pre_neighbor() +{ + pre_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag) +{ + // no increment in nobias or hyper time when pre-run forces are calculated + + int nobias_hold = nobias; + double t_hyper_hold = t_hyper; + + pre_reverse(eflag,vflag); + + nobias = nobias_hold; + t_hyper = t_hyper_hold; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::pre_neighbor() +{ + int i,m,jnum,iold,jold,ilocal,jlocal; + double distsq; + + // reset local IDs for owned bond atoms, since atoms have migrated + // uses xold and tagold from when bonds were created + // must be done after ghost atoms are setup via comm->borders() + + double **x = atom->x; + + int flag = 0; + + for (m = 0; m < nblocal; m++) { + iold = blist[m].iold; + jold = blist[m].jold; + ilocal = atom->map(tagold[iold]); + jlocal = atom->map(tagold[jold]); + ilocal = domain->closest_image(xold[iold],ilocal); + jlocal = domain->closest_image(xold[iold],jlocal); + blist[m].i = ilocal; + blist[m].j = jlocal; + + if (ilocal < 0 || jlocal < 0) flag++; + else { + distsq = MathExtra::distsq3(x[ilocal],xold[iold]); + maxdriftsq = MAX(distsq,maxdriftsq); + } + } + + if (flag) error->one(FLERR,"Fix hyper/global bond atom not found"); +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::pre_reverse(int eflag, int vflag) +{ + int i,j,m,imax,jmax; + double xtmp,ytmp,ztmp,delx,dely,delz; + double r,r0,estrain,rmax,r0max,emax,dt_boost; + double vbias,fbias,fbiasr; + + // compute current strain of each owned bond + // emax = maximum strain of any bond I own + // imax,jmax = local indices of my 2 atoms in that bond + + double **x = atom->x; + emax = 0.0; + + for (m = 0; m < nblocal; m++) { + i = blist[m].i; + j = blist[m].j; + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + r = sqrt(delx*delx + dely*dely + delz*delz); + maxbondlen = MAX(r,maxbondlen); + r0 = blist[m].r0; + estrain = fabs(r-r0) / r0; + + if (estrain > emax) { + emax = estrain; + rmax = r; + r0max = r0; + imax = i; + jmax = j; + } + } + + // perform Allreduce() on pairme = double/int pair + // finds max strain and what proc owns it + // owner = proc that owns that bond + + pairme.value = emax; + pairme.proc = me; + MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world); + owner = pairall.proc; + + bcastflag = 1; + + // all procs acquire t_hyper from owner proc + // MPI_Bcast call by owner proc is below + + for (int i = 0; i < VECLEN; i++) outvec[i] = 0.0; + + if (owner != me) { + MPI_Bcast(&t_hyper,1,MPI_DOUBLE,owner,world); + return; + } + + // I own the bond with max strain + // compute Vbias and apply force to atoms imax,jmax + // NOTE: logic would need to be different for newton off + + double **f = atom->f; + + vbias = fbias = 0.0; + dt_boost = 1.0; + + if (emax < qfactor) { + vbias = vmax * (1.0 - emax*emax*invqfactorsq); + fbias = 2.0 * vmax * emax / (qfactor*qfactor * r0max); + dt_boost = exp(beta*vbias); + + delx = x[imax][0] - x[jmax][0]; + dely = x[imax][1] - x[jmax][1]; + delz = x[imax][2] - x[jmax][2]; + + fbiasr = fbias / rmax; + f[imax][0] += delx*fbiasr; + f[imax][1] += dely*fbiasr; + f[imax][2] += delz*fbiasr; + + f[jmax][0] -= delx*fbiasr; + f[jmax][1] -= dely*fbiasr; + f[jmax][2] -= delz*fbiasr; + } else nobias++; + + // NOTE: should there be a virial contribution from boosted bond? + + // output quantities + + outvec[0] = vbias; + outvec[1] = dt_boost; + outvec[2] = emax; + outvec[3] = atom->tag[imax]; + outvec[4] = atom->tag[jmax]; + + t_hyper += dt_boost*dt; + MPI_Bcast(&t_hyper,1,MPI_DOUBLE,owner,world); +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperGlobal::build_bond_list(int natom) +{ + int i,j,n,ii,jj,inum,jnum; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + tagint *bptr; + double *rptr; + + if (natom) { + nevent++; + nevent_atom += natom; + } + + // trigger neighbor list build + + neighbor->build_one(list); + + // identify bonds assigned to each owned atom + // do not create a bond between two non-group atoms + + double **x = atom->x; + int *mask = atom->mask; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + nblocal = 0; + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + // skip if neither atom I or J are in fix group + + if (!(mask[i] & groupbit) && !(mask[j] & groupbit)) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < cutbondsq) { + if (nblocal == maxbond) grow_bond(); + blist[nblocal].i = i; + blist[nblocal].j = j; + blist[nblocal].iold = i; + blist[nblocal].jold = j; + blist[nblocal].r0 = sqrt(rsq); + nblocal++; + } + } + } + + // store IDs and coords for owned+ghost atoms at time of bond creation + // realloc xold and tagold as needed + + if (atom->nmax > maxold) { + memory->destroy(xold); + memory->destroy(tagold); + maxold = atom->nmax; + memory->create(xold,maxold,3,"hyper/global:xold"); + memory->create(tagold,maxold,"hyper/global:tagold"); + } + + tagint *tag = atom->tag; + int nall = atom->nlocal + atom->nghost; + + for (i = 0; i < nall; i++) { + xold[i][0] = x[i][0]; + xold[i][1] = x[i][1]; + xold[i][2] = x[i][2]; + tagold[i] = tag[i]; + } +} + +/* ---------------------------------------------------------------------- + grow bond list by a chunk +------------------------------------------------------------------------- */ + +void FixHyperGlobal::grow_bond() +{ + // NOTE: could add int arg to do initial large alloc: + // maxbond = maxbond/DELTA * DELTA; maxbond += DELTA; + + maxbond += DELTA; + if (maxbond < 0 || maxbond > MAXSMALLINT) + error->one(FLERR,"Fix hyper/local per-processor bond count is too big"); + blist = (OneBond *) + memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/local:blist"); +} + +/* ---------------------------------------------------------------------- */ + +double FixHyperGlobal::compute_scalar() +{ + if (bcastflag) { + MPI_Bcast(outvec,VECLEN,MPI_DOUBLE,owner,world); + bcastflag = 0; + } + return outvec[0]; +} + +/* ---------------------------------------------------------------------- */ + +double FixHyperGlobal::compute_vector(int i) +{ + if (bcastflag) { + MPI_Bcast(outvec,VECLEN,MPI_DOUBLE,owner,world); + bcastflag = 0; + } + + // 11 vector outputs returned for i = 0-10 + + // i = 0 = boost factor on this step + // i = 1 = max strain of any bond on this step + // i = 2 = ID of atom I in max-strain bond on this step + // i = 3 = ID of atom J in max-strain bond on this step + // i = 4 = ave bonds/atom on this step + + // i = 5 = fraction of steps with no bias during this run + // i = 6 = max drift of any atom during this run + // i = 7 = max bond length during this run + + // i = 8 = cummulative hyper time since fix created + // i = 9 = cummulative # of event timesteps since fix created + // i = 10 = cummulative # of atoms in events since fix created + + if (i == 0) return outvec[1]; + if (i == 1) return outvec[2]; + if (i == 2) return outvec[3]; + if (i == 3) return outvec[4]; + + if (i == 4) { + int allbonds; // NOTE: bigint? + MPI_Allreduce(&nblocal,&allbonds,1,MPI_INT,MPI_SUM,world); + return 2.0*allbonds/atom->natoms; + } + + if (i == 5) { + if (update->ntimestep == update->firststep) return 0.0; + int allnobias; + MPI_Allreduce(&nobias,&allnobias,1,MPI_INT,MPI_SUM,world); + return 1.0*allnobias / (update->ntimestep - update->firststep); + } + + if (i == 6) { + double alldriftsq; + MPI_Allreduce(&maxdriftsq,&alldriftsq,1,MPI_DOUBLE,MPI_MAX,world); + return sqrt(alldriftsq); + } + + if (i == 7) { + double allbondlen; + MPI_Allreduce(&maxbondlen,&allbondlen,1,MPI_DOUBLE,MPI_MAX,world); + return allbondlen; + } + + if (i == 8) return t_hyper; + if (i == 9) return (double) nevent; + if (i == 10) return (double) nevent_atom; +} + +/* ---------------------------------------------------------------------- + wrapper on compute_vector() + used by hyper.cpp to call FixHyper +------------------------------------------------------------------------- */ + +double FixHyperGlobal::query(int i) +{ + if (i == 1) return compute_vector(8); // cummulative hyper time + if (i == 2) return compute_vector(9); // nevent + if (i == 3) return compute_vector(10); // nevent_atom + if (i == 4) return compute_vector(4); // ave bonds/atom + if (i == 5) return compute_vector(6); // maxdrift + if (i == 6) return compute_vector(7); // maxbondlen + if (i == 7) return compute_vector(5); // fraction with zero bias + + error->all(FLERR,"Invalid query to fix hyper/global"); +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +double FixHyperGlobal::memory_usage() +{ + double bytes = maxbond * sizeof(OneBond); // blist + return bytes; +} diff --git a/src/REPLICA/fix_hyper_global.h b/src/REPLICA/fix_hyper_global.h new file mode 100644 index 0000000000..d8b1cef425 --- /dev/null +++ b/src/REPLICA/fix_hyper_global.h @@ -0,0 +1,110 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(hyper/global,FixHyperGlobal) + +#else + +#ifndef LMP_FIX_HYPER_GLOBAL_H +#define LMP_FIX_HYPER_GLOBAL_H + +#include "fix_hyper.h" + +namespace LAMMPS_NS { + +class FixHyperGlobal : public FixHyper { + public: + FixHyperGlobal(class LAMMPS *, int, char **); + ~FixHyperGlobal(); + int setmask(); + void init(); + void init_list(int, class NeighList *); + void setup_pre_neighbor(); + void setup_pre_reverse(int, int); + void pre_neighbor(); + void pre_reverse(int, int); + double compute_scalar(); + double compute_vector(int); + double query(int); + + double memory_usage(); + + // extra methods visible to callers + + void init_hyper(); + void build_bond_list(int); + + private: + int me; + double cutbond,qfactor,vmax,tequil; + + int firstflag,bcastflag,owner,nevent,nevent_atom; + double cutbondsq,beta,dt,t_hyper,invqfactorsq; + double outvec[5]; // same as VECLEN in *.cpp + double maxbondlen; // max length of any bond + double maxdriftsq; // max distance any atom drifts from original pos + int nobias; // # of steps when bias = 0, b/c bond too long + + class NeighList *list; + + // list of my owned bonds + // persists on a proc from one event until the next + + int maxbond; // allocated size of blist + + struct OneBond { // single IJ bond, atom I is owner + int i,j; // current local indices of 2 bond atoms + int iold,jold; // local indices when bonds were formed + double r0; // relaxed bond length + }; + + struct OneBond *blist; // list of owned bonds + int nblocal; // # of owned bonds + + // coords and IDs of owned+ghost atoms when bonds were formed + // persists on a proc from one event until the next + + int maxold; // allocated size of old atoms + + double **xold; // coords of atoms when bonds were formed + tagint *tagold; // IDs of atoms when bonds were formed + + // MPI data struct for finding bond with max strain via Allreduce + + struct Two { + double value; + int proc; + }; + Two pairme,pairall; + + // internal methods + + void grow_bond(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp new file mode 100644 index 0000000000..b60ba7339f --- /dev/null +++ b/src/REPLICA/fix_hyper_local.cpp @@ -0,0 +1,1610 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU Gene +#include +#include +#include +#include "fix_hyper_local.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "pair.h" +#include "domain.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "modify.h" +#include "math_extra.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define DELTABOOST 16 +#define BOOSTINIT 1.0 +#define COEFFMAX 1.2 +#define BIG 1.0e20 + +enum{STRAIN,STRAINREGION,BIASFLAG}; +enum{IGNORE,WARN,ERROR}; + +/* ---------------------------------------------------------------------- */ + +FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : + FixHyper(lmp, narg, arg) +{ + // NOTE: add NULL declarations + + // error checks + // solution for tagint != int is to worry about storing + // local index vs global ID in same variable + // maybe need to declare them all tagint, not int + + if (atom->map_style == 0) + error->all(FLERR,"Fix hyper/local command requires atom map"); + + if (sizeof(tagint) != sizeof(int)) + error->all(FLERR,"Fix hyper/local requires tagint = int"); + + // parse args + + if (narg < 10) error->all(FLERR,"Illegal fix hyper/local command"); + + hyperflag = 2; + scalar_flag = 1; + vector_flag = 1; + size_vector = 23; + + global_freq = 1; + extscalar = 0; + extvector = 0; + + cutbond = force->numeric(FLERR,arg[3]); + qfactor = force->numeric(FLERR,arg[4]); + vmax = force->numeric(FLERR,arg[5]); + tequil = force->numeric(FLERR,arg[6]); + dcut = force->numeric(FLERR,arg[7]); + alpha_user = force->numeric(FLERR,arg[8]); + boosttarget = force->numeric(FLERR,arg[9]); + + if (cutbond < 0.0 || qfactor < 0.0 || vmax < 0.0 || + tequil <= 0.0 || dcut <= 0.0 || alpha_user <= 0.0 || boosttarget < 1.0) + error->all(FLERR,"Illegal fix hyper/local command"); + + invqfactorsq = 1.0 / (qfactor*qfactor); + cutbondsq = cutbond*cutbond; + dcutsq = dcut*dcut; + beta = 1.0 / (force->boltz * tequil); + + // optional args + + histoflag = 0; + lostbond = IGNORE; + checkbias = 0; + checkcoeff = 0; + + int iarg = 10; + while (iarg < narg) { + if (strcmp(arg[iarg],"histo") == 0) { + if (iarg+5 > narg) error->all(FLERR,"Illegal fix hyper/local command"); + histoflag = 1; + histo_every = force->inumeric(FLERR,arg[iarg+1]); + histo_count = force->inumeric(FLERR,arg[iarg+2]); + histo_delta = force->numeric(FLERR,arg[iarg+3]); + histo_print = force->inumeric(FLERR,arg[iarg+4]); + if (histo_every <= 0 || histo_count % 2 || + histo_delta <= 0.0 || histo_print <= 0) + error->all(FLERR,"Illegal fix hyper/local command"); + iarg += 5; + + } else if (strcmp(arg[iarg],"lostbond") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix hyper/local command"); + if (strcmp(arg[iarg+1],"error") == 0) lostbond = ERROR; + else if (strcmp(arg[iarg+1],"warn") == 0) lostbond = WARN; + else if (strcmp(arg[iarg+1],"ignore") == 0) lostbond = IGNORE; + else error->all(FLERR,"Illegal fix hyper/local command"); + iarg += 2; + + } else if (strcmp(arg[iarg],"check/bias") == 0) { + if (iarg+3 > narg) error->all(FLERR,"Illegal fix hyper/local command"); + checkbias = 1; + checkbias_every = force->inumeric(FLERR,arg[iarg+1]); + if (strcmp(arg[iarg+2],"error") == 0) checkbias_flag = ERROR; + else if (strcmp(arg[iarg+2],"warn") == 0) checkbias_flag = WARN; + else if (strcmp(arg[iarg+2],"ignore") == 0) checkbias_flag = IGNORE; + else error->all(FLERR,"Illegal fix hyper/local command"); + iarg += 3; + + } else if (strcmp(arg[iarg],"check/coeff") == 0) { + if (iarg+3 > narg) error->all(FLERR,"Illegal fix hyper/local command"); + checkcoeff = 1; + checkcoeff_every = force->inumeric(FLERR,arg[iarg+1]); + if (strcmp(arg[iarg+2],"error") == 0) checkcoeff_flag = ERROR; + else if (strcmp(arg[iarg+2],"warn") == 0) checkcoeff_flag = WARN; + else if (strcmp(arg[iarg+2],"ignore") == 0) checkcoeff_flag = IGNORE; + else error->all(FLERR,"Illegal fix hyper/local command"); + iarg += 3; + + } else error->all(FLERR,"Illegal fix hyper/local command"); + } + + // per-atom data structs + + maxbond = 0; + bonds = NULL; + numbond = NULL; + maxstrain = NULL; + maxstrain_region = NULL; + maxstrain_bondindex = NULL; + biasflag = NULL; + + maxold = old_nall = 0; + old2now = NULL; + xold = NULL; // NOTE: don't really need except to monitor drift + tagold = NULL; + + nboost = maxboost = 0; + boost = NULL; + + // maxbondperatom = max # of bonds any atom is part of + // will be reset in bond_build() + // set comm size needed by this fix + + maxbondperatom = 1; + comm_forward = 1; + comm_reverse = 1; + + // perform initial allocation of atom-based arrays + // register with Atom class + + grow_arrays(atom->nmax); + atom->add_callback(0); + + me = comm->me; + firstflag = 1; + + allbonds = 0; + allboost = 0.0; + + starttime = update->ntimestep; + nostrainyet = 1; + nnewbond = 0; + nevent = 0; + nevent_atom = 0; + mybias = 0.0; + + histo = allhisto = NULL; + if (histoflag) { + invhisto_delta = 1.0 / histo_delta; + histo_lo = 1.0 - (histo_count/2 * histo_delta); + histo = new bigint[histo_count+2]; + allhisto = new bigint[histo_count+2]; + } +} + +/* ---------------------------------------------------------------------- */ + +FixHyperLocal::~FixHyperLocal() +{ + memory->destroy(bonds); + memory->destroy(numbond); + + memory->destroy(maxstrain); + memory->destroy(maxstrain_region); + memory->destroy(maxstrain_bondindex); + memory->destroy(biasflag); + + memory->destroy(old2now); + memory->destroy(xold); + memory->destroy(tagold); + memory->destroy(boost); + delete [] histo; + delete [] allhisto; +} + +/* ---------------------------------------------------------------------- */ + +int FixHyperLocal::setmask() +{ + int mask = 0; + mask |= PRE_NEIGHBOR; + mask |= PRE_REVERSE; + mask |= MIN_PRE_NEIGHBOR; + mask |= THERMO_ENERGY; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::init_hyper() +{ + ghost_toofar = 0; + lostbond_partner = 0; + lostbond_coeff = 0.0; + checkbias_count = 0; + checkcoeff_count = 0; + maxdriftsq = 0.0; + maxbondlen = 0.0; + maxboostcoeff = 0.0; + minboostcoeff = BIG; + sumboostcoeff = 0.0; + nboost_running = 0; + nobias_running = 0; + rmaxever = 0.0; + rmaxeverbig = 0.0; + + nbondbuild = 0; + time_bondbuild = 0.0; + + if (histoflag) histo_steps = 0; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::init() +{ + alpha = update->dt / alpha_user; + + // cutghost = communication cutoff as calculated by Neighbor and Comm + // error if cutghost is smaller than Dcut + // warn if no drift distance added to cutghost + + if (firstflag) { + double cutghost; + if (force->pair) + cutghost = MAX(force->pair->cutforce+neighbor->skin,comm->cutghostuser); + else + cutghost = comm->cutghostuser; + + if (cutghost < dcut) + error->all(FLERR,"Fix hyper/local bond cutoff exceeds ghost atom range - " + "use comm_modify cutoff command"); + if (cutghost < dcut+cutbond && me == 0) + error->warning(FLERR,"Fix hyper/local ghost atom range " + "may not allow for atom drift between events"); + } + + // NOTE: error if not newton, + // since bond force bias will not be applied correctly to straddle bonds? + + // NOTE: if exclusions are enabled, some near-neighbors won't appear + // will be missed in bonds - WARN if molecular system? + + // need an occasional full neighbor list with cutoff = Dcut + // do not need to include neigh skin in cutoff, + // b/c this list will be built every time bond_build() is called + // NOTE: what if pair style list cutoff > Dcut + // or what if neigh skin is huge? + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->cut = 1; + neighbor->requests[irequest]->cutoff = dcut; + neighbor->requests[irequest]->occasional = 1; + + // DEBUG timing output + + timefirst = timesecond = timethird = timefourth = timefifth = + timesixth = timeseventh = timetotal = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::setup_pre_neighbor() +{ + // called for dynamics and minimization NOTE: check if min is needed? + + pre_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::setup_pre_reverse(int eflag, int vflag) +{ + // only called for dynamics, not minimization + // setupflag prevents boostostat update of boost coeffs in setup + // also prevents increments of nboost_running, nbias_running, sumboostcoeff + + setupflag = 1; + pre_reverse(eflag,vflag); + setupflag = 0; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::pre_neighbor() +{ + int i,m,n,ilocal,jlocal; + + // convert global ID bond partners back to local indices + // need to use closest_image() so can calculate bond lengths + // error flag should not happen for a well-behaved system + // b/c are only looking up bond partners inside or near my sub-domain + + double **x = atom->x; + int nlocal = atom->nlocal; + + int missing = 0; + double missing_coeff = 0.0; + + for (i = 0; i < nlocal; i++) { + n = numbond[i]; + for (m = 0; m < n; m++) { + jlocal = atom->map(bonds[i][m].jtag); + if (jlocal >= 0) bonds[i][m].j = domain->closest_image(i,jlocal); + else { + bonds[i][m].j = -1; + missing++; + missing_coeff += bonds[i][m].boostcoeff; + if (lostbond != IGNORE) { + char str[128]; + sprintf(str,"Fix hyper/local bond info missing for bond " + TAGINT_FORMAT "," TAGINT_FORMAT + " with coeff %g at step " BIGINT_FORMAT, + atom->tag[i],bonds[i][m].jtag,bonds[i][m].boostcoeff, + update->ntimestep); + if (lostbond == ERROR) error->one(FLERR,str); + if (lostbond == WARN) error->warning(FLERR,str); + } + } + } + } + + lostbond_partner += missing; + lostbond_coeff += missing_coeff; + + // set old2now to point to current local atom indices + // only necessary for tagold entries > 0 + // because if tagold = 0, atom is not active in Dcut neighbor list + // must be done after atoms migrate and ghost atoms setup via comm->borders() + // does not matter if there are multiple ghost copies of a global ID + // since only need the ghost atom strain, not its coordinates + // NOTE: maybe need not use closest image, b/c old2now only used to access + // maxstrain values, which will be same for any copy of ghost atom ?? + // also need it to compute maxdriftsq correctly when a proc spans a PBC + + double distsq; + + for (i = 0; i < old_nall; i++) { + if (tagold[i] == 0) continue; + ilocal = atom->map(tagold[i]); + ilocal = domain->closest_image(xold[i],ilocal); + old2now[i] = ilocal; + + if (ilocal >= 0) { + distsq = MathExtra::distsq3(x[ilocal],xold[i]); + maxdriftsq = MAX(distsq,maxdriftsq); + } else ghost_toofar++; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::pre_reverse(int eflag, int vflag) +{ + int i,j,m,ii,jj,inum,jnum,iold,jold,nbond,bondindex; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz; + double r,r0,estrain,emax,vbias,fbias,fbiasr,boostcoeff; + int *ilist,*jlist,*numneigh,**firstneigh; + + //double time1,time2,time3,time4,time5,time6,time7,time8; + //time1 = MPI_Wtime(); + + // compute current maxstrain and maxstrain_bond for each owned atom + // use per-atom full bond list + // this is double-calculating for IJ and JI bonds + // could compute once, but would have to find/store index of JI bond + // order two I,J atoms consistently for IJ and JI calcs + // to insure no round-off issue when comparing maxstrain values of I,J + + double **x = atom->x; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + + int mybonds = 0; + nostrainyet = 0; + + for (i = 0; i < nlocal; i++) { + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itag = tag[i]; + emax = 0.0; + bondindex = -1; + jtag = 0; + + nbond = numbond[i]; + mybonds += nbond; + for (m = 0; m < nbond; m++) { + j = bonds[i][m].j; + if (j < 0) continue; + jtag = bonds[i][m].jtag; + r0 = bonds[i][m].r0; + if (itag < jtag) { + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + } else { + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp;; + } + r = sqrt(delx*delx + dely*dely + delz*delz); + maxbondlen = MAX(r,maxbondlen); + estrain = fabs(r-r0) / r0; + if (estrain > emax) { + emax = estrain; + bondindex = m; + } + } + maxstrain[i] = emax; + maxstrain_bondindex[i] = bondindex; + } + + //time2 = MPI_Wtime(); + + // forward comm to acquire maxstrain of all ghost atoms + + commflag = STRAIN; + comm->forward_comm_fix(this); + + //time3 = MPI_Wtime(); + + // use original Dcut neighbor list to check maxstrain of all neighbor atoms + // set maxstrain_region of I atoms = maxstrain of I and all J neighs + // neighbor list has old indices for IJ b/c reneighboring may have occurred + // use old2now[] to convert to current indices + // if neighbor is not currently known (too far away), + // then assume it was part of an event and its strain = qfactor + // this double loop sets maxstrain_region of mostly owned atoms + // but possibly some ghost atoms as well + + int nall = nlocal + atom->nghost; + for (i = 0; i < nall; i++) maxstrain_region[i] = 0.0; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // find largest distance from subbox that a ghost atom is with strain < qfactor + + double rmax = rmaxever; + double rmaxbig = rmaxeverbig; + double *sublo = domain->sublo; + double *subhi = domain->subhi; + + for (ii = 0; ii < inum; ii++) { + iold = ilist[ii]; + jlist = firstneigh[iold]; + jnum = numneigh[iold]; + + // I and J may be ghost atoms + // will always know I b/c atoms do not drift that far + // but may no longer know J if hops outside cutghost + // in that case, assume it performed an event, its strain = qfactor + + i = old2now[iold]; + emax = maxstrain[i]; + + for (jj = 0; jj < jnum; jj++) { + jold = jlist[jj]; + j = old2now[jold]; + if (j >= 0) emax = MAX(emax,maxstrain[j]); + else { + emax = MAX(emax,qfactor); + continue; + } + + // DEBUG - only good for 2 dims x,y + + if (j >= nlocal) { + if (x[j][0] < sublo[0]) rmaxbig = MAX(rmaxbig,sublo[0]-x[j][0]); + if (x[j][1] < sublo[1]) rmaxbig = MAX(rmaxbig,sublo[1]-x[j][1]); + if (x[j][0] > subhi[0]) rmaxbig = MAX(rmaxbig,x[j][0]-subhi[0]); + if (x[j][1] > subhi[1]) rmaxbig = MAX(rmaxbig,x[j][1]-subhi[1]); + if (maxstrain[j] < qfactor) { + if (x[j][0] < sublo[0]) rmax = MAX(rmax,sublo[0]-x[j][0]); + if (x[j][1] < sublo[1]) rmax = MAX(rmax,sublo[1]-x[j][1]); + if (x[j][0] > subhi[0]) rmax = MAX(rmax,x[j][0]-subhi[0]); + if (x[j][1] > subhi[1]) rmax = MAX(rmax,x[j][1]-subhi[1]); + } + } + } + + maxstrain_region[i] = emax; + } + + double rmax2[2],rmax2all[2]; + rmax2[0] = rmax; + rmax2[1] = rmaxbig; + MPI_Allreduce(&rmax2,&rmax2all,2,MPI_DOUBLE,MPI_MAX,world); + rmaxever = rmax2all[0]; + rmaxeverbig = rmax2all[1]; + + MPI_Allreduce(&mybonds,&allbonds,1,MPI_INT,MPI_SUM,world); + + //time4 = MPI_Wtime(); + + // reverse comm to acquire maxstrain_region from ghost atoms + // needed b/c neighbor list referred to old owned atoms, + // so above loop may set maxstrain_region of ghost atoms + // forward comm to acquire maxstrain_region of all ghost atoms + + commflag = STRAINREGION; + comm->reverse_comm_fix(this); + comm->forward_comm_fix(this); + + //time5 = MPI_Wtime(); + + // identify biased bonds and add to boost list + // for each max-strain bond IJ of atom I: + // bias this bond only if all these conditions hold: + // itag < jtag, so bond is only biased once + // maxstrain[i] = maxstrain_region[i] + // maxstrain[j] = maxstrain_region[j] + // NOTE: also need to check that maxstrain[i] = maxstrain[j] ?? + // don't think so, b/c maxstrain_region[i] includes maxstrain[i] + + nboost = 0; + + for (i = 0; i < nlocal; i++) { + if (numbond[i] == 0) continue; + itag = tag[i]; + j = bonds[i][maxstrain_bondindex[i]].j; + jtag = tag[j]; + if (itag > jtag) continue; + + if (maxstrain[i] != maxstrain_region[i]) continue; + if (maxstrain[j] != maxstrain_region[j]) continue; + + if (nboost == maxboost) { + maxboost += DELTABOOST; + memory->grow(boost,maxboost,"hyper/local:boost"); + } + boost[nboost++] = i; + } + + //time6 = MPI_Wtime(); + + // apply boost force to bonds with locally max strain + + double **f = atom->f; + + int nobias = 0; + mybias = 0.0; + + for (int iboost = 0; iboost < nboost; iboost++) { + i = boost[iboost]; + emax = maxstrain[i]; + if (emax >= qfactor) { + nobias++; + continue; + } + + m = maxstrain_bondindex[i]; + j = bonds[i][m].j; + r0 = bonds[i][m].r0; + boostcoeff = bonds[i][m].boostcoeff; + + vbias = boostcoeff * vmax * (1.0 - emax*emax*invqfactorsq); + fbias = boostcoeff * 2.0 * vmax * emax / (qfactor*qfactor * r0); + + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + r = sqrt(delx*delx + dely*dely + delz*delz); + fbiasr = fbias / r; + + f[i][0] += delx*fbiasr; + f[i][1] += dely*fbiasr; + f[i][2] += delz*fbiasr; + + f[j][0] -= delx*fbiasr; + f[j][1] -= dely*fbiasr; + f[j][2] -= delz*fbiasr; + + mybias += vbias; + } + + //time7 = MPI_Wtime(); + + // no boostostat update of boost coeffs when pre_reverse called from setup() + // nboost_running, nobias_running, sumboostcoeff only incremented on run steps + // NOTE: maybe should also not bias any bonds on firststep of this fix + + if (setupflag) return; + nboost_running += nboost; + nobias_running += nobias; + + // apply boostostat to boost coefficients of all bonds of all owned atoms + // use per-atom full bond list + // this is double-calculating for IJ and JI bonds + // should be identical for both, b/c emax is the same + // could compute once, but would have to find/store index of JI bond + // delta in boost coeff is function of maxboost_region vs target boost + // maxboost_region is function of two maxstrain_regions for I,J + // NOTE: if J is lost to I but not vice versa, then biascoeff IJ != JI + + + + + // DEBUG info for Max and Min bias coeffs every step + + // if (update->ntimestep >= 300000) { + if (update->ntimestep >= 0) { + + double emaxi,emaxj,maxboost_region; + double mincoeff = 1.0e20; + double maxcoeff = -1.0e20; + double delta; + double maxcoeffprev,deltamax,eimax,ejmax,emaximax,emaxjmax,mbrmax; + double mincoeffprev,deltamin,eimin,ejmin,emaximin,emaxjmin,mbrmin; + int itagmax,jtagmax,jtagmax2; + int itagmin,jtagmin,jtagmin2; + + for (i = 0; i < nlocal; i++) { + emaxi = maxstrain_region[i]; + nbond = numbond[i]; + for (m = 0; m < nbond; m++) { + j = bonds[i][m].j; + if (j < 0) continue; + emaxj = maxstrain_region[j]; + emax = MAX(emaxi,emaxj); + if (emax < qfactor) vbias = vmax * (1.0 - emax*emax*invqfactorsq); + else vbias = 0.0; + boostcoeff = bonds[i][m].boostcoeff; + maxboost_region = exp(beta * boostcoeff*vbias); + delta = -alpha * (maxboost_region-boosttarget) / boosttarget; + boostcoeff += delta; + + if (boostcoeff > maxcoeff) { + maxcoeffprev = boostcoeff - delta; + maxcoeff = boostcoeff; + itagmax = tag[i]; + jtagmax = tag[j]; + jtagmax2 = bonds[i][m].jtag; + deltamax = delta; + eimax = maxstrain[i]; + ejmax = maxstrain[j]; + emaximax = emaxi; + emaxjmax = emaxj; + mbrmax = maxboost_region; + } + + if (boostcoeff < mincoeff) { + mincoeffprev = boostcoeff - delta; + mincoeff = boostcoeff; + itagmin = tag[i]; + jtagmin = tag[j]; + jtagmin2 = bonds[i][m].jtag; + deltamin = delta; + eimin = maxstrain[i]; + ejmin = maxstrain[j]; + emaximin = emaxi; + emaxjmin = emaxj; + mbrmin = maxboost_region; + } + } + } + + // min/max owner = procs that own the Min and Max bias coeffs + + pairme.value = mincoeff; + pairme.proc = me; + MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MINLOC,world); + int minowner = pairall.proc; + + pairme.value = maxcoeff; + pairme.proc = me; + MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world); + int maxowner = pairall.proc; + + // get info about which atom and bond influenced Max coeff + // querystrain = strain of bond that is influencing the max Cij + // inbondi,inbondj = ID of I,J atoms in the influence bond + // incoeff = bias coeff of influence bond + // inbias = 1/0 if inflence bond is biased or not on this step + // instraddle = 1/0 if influence bond straddles proc boundary or not + + double querystrain; + if (maxowner == me) querystrain = MAX(emaximax,emaxjmax); + MPI_Bcast(&querystrain,1,MPI_DOUBLE,maxowner,world); + + int count = 0; + for (i = 0; i < nlocal; i++) { + m = maxstrain_bondindex[i]; + if (tag[i] > bonds[i][m].jtag) continue; + if (querystrain == maxstrain[i]) count++; + } + + int countall; + MPI_Allreduce(&count,&countall,1,MPI_INT,MPI_SUM,world); + + int inbias = 0; + int instraddle = countall; // output in rare case countall != 1 + tagint inbondi = 0; + tagint inbondj = 0; + double incoeff = 0.0; + + if (countall == 1) { + int procowner; + int proc = 0; + for (i = 0; i < nlocal; i++) { + m = maxstrain_bondindex[i]; + if (tag[i] > bonds[i][m].jtag) continue; + if (querystrain == maxstrain[i]) { + proc = me; + inbondi = tag[i]; + inbondj = bonds[i][m].jtag; + incoeff = bonds[i][m].boostcoeff; + instraddle = 0; + if (bonds[i][m].j >= nlocal) instraddle = 1; + inbias = 0; + for (int iboost = 0; iboost < nboost; iboost++) + if (boost[iboost] == i) inbias = 1; + } + } + + MPI_Allreduce(&proc,&procowner,1,MPI_INT,MPI_MAX,world); + MPI_Bcast(&inbondi,1,MPI_LMP_TAGINT,procowner,world); + MPI_Bcast(&inbondj,1,MPI_LMP_TAGINT,procowner,world); + MPI_Bcast(&incoeff,1,MPI_DOUBLE,procowner,world); + MPI_Bcast(&instraddle,1,MPI_INT,procowner,world); + MPI_Bcast(&inbias,1,MPI_INT,procowner,world); + } + + // output by procs that own the Min and Max bias coeffs + + if (minowner == me) { + printf("MinCoeff %ld %d : %d %d %d : prev/delta/new %g %g %g : " + "Eij %g %g %g %g : BR %g\n", + update->ntimestep,comm->me,itagmin,jtagmin,jtagmin2, + mincoeffprev,deltamin,mincoeff,eimin,ejmin,emaximin,emaxjmin,mbrmin); + } + if (maxowner == me) { + printf("MaxCoeff %ld %d : %d %d %d : prev/delta/new %g %g %g : " + "Eij %g %g %g %g : Bond %d %d %g %d %d : BR %g\n", + update->ntimestep,comm->me,itagmax,jtagmax,jtagmax2, + maxcoeffprev,deltamax,maxcoeff, + eimax,ejmax,emaximax,emaxjmax, + inbondi,inbondj,incoeff,inbias,instraddle,mbrmax); + } + } + + // end of DEBUG + + + + + + double myboost = 0.0; + double emaxi,emaxj,maxboost_region; + + for (i = 0; i < nlocal; i++) { + emaxi = maxstrain_region[i]; + nbond = numbond[i]; + for (m = 0; m < nbond; m++) { + j = bonds[i][m].j; + if (j < 0) continue; + emaxj = maxstrain_region[j]; + emax = MAX(emaxi,emaxj); + if (emax < qfactor) vbias = vmax * (1.0 - emax*emax*invqfactorsq); + else vbias = 0.0; + boostcoeff = bonds[i][m].boostcoeff; + maxboost_region = exp(beta * boostcoeff*vbias); + boostcoeff -= alpha * (maxboost_region-boosttarget) / boosttarget; + // COMMENT OUT for now + //boostcoeff = MIN(boostcoeff,COEFFMAX); + myboost += boostcoeff; + maxboostcoeff = MAX(maxboostcoeff,boostcoeff); + minboostcoeff = MIN(minboostcoeff,boostcoeff); + bonds[i][m].boostcoeff = boostcoeff; + } + } + + // running stats + + MPI_Allreduce(&myboost,&allboost,1,MPI_DOUBLE,MPI_SUM,world); + if (allbonds) sumboostcoeff += allboost/allbonds; + + // histogram the bond coeffs and output as requested + // do not double count each bond + + if (histoflag && update->ntimestep % histo_every == 0) { + if (histo_steps == 0) + for (i = 0; i < histo_count+2; i++) histo[i] = 0; + histo_steps++; + + int ihisto; + for (i = 0; i < nlocal; i++) { + nbond = numbond[i]; + for (m = 0; m < nbond; m++) { + if (tag[i] > bonds[i][m].jtag) continue; + boostcoeff = bonds[i][m].boostcoeff; + if (boostcoeff < histo_lo) ihisto = -1; + else ihisto = static_cast ((boostcoeff-histo_lo) * invhisto_delta); + if (ihisto >= histo_count) ihisto = histo_count; + histo[ihisto+1]++; + } + } + + if (update->ntimestep % histo_print == 0) { + MPI_Allreduce(histo,allhisto,histo_count+2,MPI_LMP_BIGINT,MPI_SUM,world); + + bigint total; + for (i = 0; i < histo_count+2; i++) total += allhisto[i]; + + if (me == 0) { + if (screen) { + fprintf(screen,"Histogram of bias coeffs:\n"); + for (i = 0; i < histo_count+2; i++) + fprintf(screen," %g",1.0*allhisto[i]/total); + fprintf(screen,"\n"); + } + if (logfile) { + fprintf(logfile,"Histogram of bias coeffs:\n"); + for (i = 0; i < histo_count+2; i++) + fprintf(logfile," %g",1.0*allhisto[i]/total); + fprintf(logfile,"\n"); + } + } + } + } + + // check for any biased bonds that are too close to each other + // keep a running count for output + + if (checkbias && update->ntimestep % checkbias_every == 0) { + + // mark each atom in a biased bond with ID of partner + // nboost loop will mark some ghost atoms + + for (i = 0; i < nall; i++) biasflag[i] = 0; + + for (int iboost = 0; iboost < nboost; iboost++) { + i = boost[iboost]; + m = maxstrain_bondindex[i]; + j = bonds[i][m].j; + biasflag[i] = tag[j]; + biasflag[j] = tag[i]; + } + + // reverse comm to acquire biasflag from ghost atoms + // needed b/c above loop may set biasflag of ghost atoms + // forward comm to acquire biasflag of all ghost atoms + + commflag = BIASFLAG; + comm->reverse_comm_fix(this); + comm->forward_comm_fix(this); + + // I and J may be ghost atoms + // only continue if I is a biased atom + // if J is unknonw (drifted ghost) just ignore + // if J is biased and is not bonded to I, then flag as too close + + for (ii = 0; ii < inum; ii++) { + iold = ilist[ii]; + i = old2now[iold]; + if (biasflag[i] == 0) continue; + + jlist = firstneigh[iold]; + jnum = numneigh[iold]; + + for (jj = 0; jj < jnum; jj++) { + jold = jlist[jj]; + j = old2now[jold]; + if (j < 0) continue; + if (biasflag[j] && biasflag[j] != tag[i]) checkbias_count++; + } + } + } + + // check for any bond bias coeffcients that do not match + // cannot check unless both atoms IJ are owned by this proc + // keep a running count for output + + if (checkcoeff && update->ntimestep % checkcoeff_every == 0) { + int jb,jbonds; + double ibias,jbias; + + for (i = 0; i < nlocal; i++) { + nbond = numbond[i]; + for (m = 0; m < nbond; m++) { + if (tag[i] > bonds[i][m].jtag) continue; + j = bonds[i][m].j; + if (j < 0) continue; + if (j >= nlocal) continue; + itag = tag[i]; + jbonds = numbond[j]; + for (jb = 0; jb < jbonds; jb++) + if (bonds[j][jb].jtag == itag) break; + if (jb == jbonds) + error->one(FLERR,"Fix hyper/local could not find duplicate bond"); + if (bonds[i][m].boostcoeff != bonds[j][jb].boostcoeff) + checkcoeff_count++; + } + } + } + + // DEBUG timing output + // examine these timings for new hyper/local before delete this code + // verify that boost cooefs stay in sync for 2 copies of each bond + // before delete this code + + /* + time8 = MPI_Wtime(); + + timefirst += time2-time1; + timesecond += time3-time2; + timethird += time4-time3; + timefourth += time5-time4; + timefifth += time6-time5; + timesixth += time7-time6; + timeseventh += time8-time7; + timetotal += time8-time1; + + double bpera = compute_vector(6); + double nbperb = compute_vector(7); + + if (update->ntimestep == 10000 && me == 0) { + printf("TIME First %g\n",timefirst); + printf("TIME Second %g\n",timesecond); + printf("TIME Third %g\n",timethird); + printf("TIME Fourth %g\n",timefourth); + printf("TIME Fifth %g\n",timefifth); + printf("TIME Sixth %g\n",timesixth); + printf("TIME Seventh %g\n",timeseventh); + printf("TIME Total %g\n",timetotal); + printf("Bonds/atom, neigh-bonds/bond %g %g\n",bpera,nbperb); + also print nbondbuild and tbondbuild + } + */ +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::min_pre_neighbor() +{ + pre_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::build_bond_list(int natom) +{ + int i,j,ii,jj,m,n,inum,jnum,nbond; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq,oldcoeff; + int *ilist,*jlist,*numneigh,**firstneigh; + + double time1,time2; + time1 = MPI_Wtime(); + + if (natom) { + nevent++; + nevent_atom += natom; + } + + // trigger Dcut neighbor list build + // NOTE: turn off special bonds in this Dcut neigh list? + + neighbor->build_one(list); + + // make copy of old bonds to preserve boostcoeffs for bonds that persist + // allocate new numbond + + OneBond **old_bonds = bonds; + int *old_numbond = numbond; + + int nmax = atom->nmax; + memory->create(numbond,nmax,"hyper/local:numbond"); + + // old_nall = value of nall at time bonds are built + // reallocate new xold and tagold if necessary + // initialize xold to current coords + // initialize tagold to zero, so atoms not in neighbor list will remain zero + + old_nall = atom->nlocal + atom->nghost; + + if (old_nall > maxold) { + memory->destroy(xold); + memory->destroy(tagold); + memory->destroy(old2now); + maxold = atom->nmax; + memory->create(xold,maxold,3,"hyper/local:xold"); + memory->create(tagold,maxold,"hyper/local:tagold"); + memory->create(old2now,maxold,"hyper/local:old2now"); + } + + double **x = atom->x; + + memcpy(&xold[0][0],&x[0][0],3*old_nall*sizeof(double)); + for (i = 0; i < old_nall; i++) tagold[i] = 0; + + // create and populate new bonds data struct + // while loop allows maxbondperatom to increase once if necessary + // don't know new maxbondperatom value until end of loop + // in practice maxbondperatom will hardly ever increase + // since there is a physical max value + + tagint *tag = atom->tag; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + while (1) { + bonds = (OneBond **) memory->create(bonds,nmax,maxbondperatom, + "hyper/local:bonds"); + if (bonds) memset(bonds[0],0,nmax*sizeof(OneBond)); + for (i = 0; i < nlocal; i++) numbond[i] = 0; + + // identify bonds assigned to each owned atom + // do not create a bond between two non-group atoms + // set tagold = global ID for all I,J atoms used in neighbor list + // tagold remains 0 for unused atoms, skipped in pre_neighbor + + int nbondmax = 0; + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itag = tag[i]; + tagold[i] = tag[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + nbond = 0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtag = tag[j]; + tagold[j] = jtag; + + // skip if neither atom I or J are in fix group + // order IJ to insure IJ and JI bonds are stored consistently + + if (!(mask[i] & groupbit) && !(mask[j] & groupbit)) continue; + + if (itag < jtag) { + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + } else { + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; + } + + rsq = delx*delx + dely*dely + delz*delz; + + // NOTE: could create two bonds for IJ both owned from one calc? + // have to skip one of 2 bonds in that case + + if (rsq < cutbondsq) { + if (nbond >= maxbondperatom) { + nbond++; + continue; + } + + bonds[i][nbond].r0 = sqrt(rsq); + bonds[i][nbond].jtag = tag[j]; + bonds[i][nbond].j = j; + + if (firstflag) oldcoeff = 0.0; + else { + oldcoeff = 0.0; + jtag = tag[j]; + n = old_numbond[i]; + for (m = 0; m < n; m++) { + if (old_bonds[i][m].jtag == jtag) { + oldcoeff = old_bonds[i][m].boostcoeff; + break; + } + } + } + + if (oldcoeff > 0.0) bonds[i][nbond].boostcoeff = oldcoeff; + else { + bonds[i][nbond].boostcoeff = BOOSTINIT; + nnewbond++; + } + nbond++; + } + } + numbond[i] = nbond; + nbondmax = MAX(nbondmax,nbond); + } + + // maxbondperatom must increase uniformly on all procs + // since bonds are comunicated when atoms migrate + + int allnbondmax; + MPI_Allreduce(&nbondmax,&allnbondmax,1,MPI_INT,MPI_MAX,world); + if (allnbondmax <= maxbondperatom) break; + + maxbondperatom = allnbondmax; + memory->destroy(bonds); + } + + // deallocate old_bonds and old_numbond + + memory->destroy(old_bonds); + memory->destroy(old_numbond); + + time2 = MPI_Wtime(); + if (firstflag) nnewbond = 0; + else { + time_bondbuild += time2-time1; + nbondbuild++; + } + firstflag = 0; +} + +/* ---------------------------------------------------------------------- */ + +int FixHyperLocal::pack_forward_comm(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,k,m,ibond,nbond,start; + + m = 0; + + // STRAIN + // pack maxstrain vector + + if (commflag == STRAIN) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = maxstrain[j]; + } + + // STRAINREGION + // pack maxstrain_region vector + + } else if (commflag == STRAINREGION) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = maxstrain_region[j]; + } + + // BIASFLAG + // pack biasflag vector + + } else if (commflag == BIASFLAG) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(biasflag[j]).d; + } + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::unpack_forward_comm(int n, int first, double *buf) +{ + int i,j,k,m,last,ibond,nbond,jlocal,flag; + + m = 0; + last = first + n; + + // STRAIN + // unpack maxstrain vector + + if (commflag == STRAIN) { + for (i = first; i < last; i++) { + maxstrain[i] = buf[m++]; + } + + // STRAINREGION + // unpack maxstrain_region vector + + } else if (commflag == STRAINREGION) { + for (i = first; i < last; i++) { + maxstrain_region[i] = buf[m++]; + } + + // BIASFLAG + // unpack biasflag vector + + } else if (commflag == BIASFLAG) { + for (i = first; i < last; i++) { + biasflag[i] = (tagint) ubuf(buf[m++]).i; + } + } +} + +/* ---------------------------------------------------------------------- */ + +int FixHyperLocal::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + + // STRAINREGION + // pack maxstrain_region vector + + if (commflag == STRAINREGION) { + for (i = first; i < last; i++) { + buf[m++] = maxstrain_region[i]; + } + + // BIASFLAG + // pack biasflag vector + + } else if (commflag == BIASFLAG) { + for (i = first; i < last; i++) { + buf[m++] = ubuf(biasflag[i]).d; + } + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixHyperLocal::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + + // STRAINREGION + // unpack maxstrain_region vector + + if (commflag == STRAINREGION) { + for (i = 0; i < n; i++) { + j = list[i]; + maxstrain_region[j] += buf[m++]; + } + + // BIASFLAG + // unpack biasflag vector + + } else if (commflag == BIASFLAG) { + for (i = 0; i < n; i++) { + j = list[i]; + biasflag[j] = (tagint) ubuf(buf[m++]).i; + } + } +} + +/* ---------------------------------------------------------------------- + allocate atom-based arrays +------------------------------------------------------------------------- */ + +void FixHyperLocal::grow_arrays(int nmax) +{ + // NOTE: not all of these need to be Nmax in length, could allocate elsewhere + + memory->grow(maxstrain,nmax,"hyper/local:maxstrain"); + memory->grow(maxstrain_bondindex,nmax,"hyper/local:maxstrain_bondindex"); + memory->grow(maxstrain_region,nmax,"hyper/local:maxstrain_region"); + if (checkbias) memory->grow(biasflag,nmax,"hyper/local:biasflag"); + + memory->grow(numbond,nmax,"hyper/local:numbond"); + memory->grow(bonds,nmax,maxbondperatom,"hyper/local:bonds"); + + // zero so valgrind does not complain about memcpy() in copy() + // also so loops in pre_neighbor() are OK before + // bonds are setup for the first time + + if (bonds) { + memset(bonds[maxbond],0,(nmax-maxbond)*maxbondperatom*sizeof(OneBond)); + memset(&numbond[maxbond],0,(nmax-maxbond)*sizeof(int)); + maxbond = nmax; + } +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based arrays +------------------------------------------------------------------------- */ + +void FixHyperLocal::copy_arrays(int i, int j, int delflag) +{ + // avoid valgrind copy-to-self warning + + if (i != j) memcpy(bonds[j],bonds[i],numbond[i]*sizeof(OneBond)); + numbond[j] = numbond[i]; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based array for exchange with another proc +------------------------------------------------------------------------- */ + +int FixHyperLocal::pack_exchange(int i, double *buf) +{ + int m = 1; + int n = numbond[i]; + buf[m++] = ubuf(n).d; + for (int j = 0; j < n; j++) { + buf[m++] = bonds[i][j].r0; + buf[m++] = bonds[i][j].boostcoeff; + buf[m++] = ubuf(bonds[i][j].jtag).d; + buf[m++] = ubuf(bonds[i][j].j).d; + } + + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based array from exchange with another proc +------------------------------------------------------------------------- */ + +int FixHyperLocal::unpack_exchange(int nlocal, double *buf) +{ + int m = 1; + int n = numbond[nlocal] = (int) ubuf(buf[m++]).i; + for (int j = 0; j < n; j++) { + bonds[nlocal][j].r0 = buf[m++]; + bonds[nlocal][j].boostcoeff = buf[m++]; + bonds[nlocal][j].jtag = (tagint) ubuf(buf[m++]).i; + bonds[nlocal][j].j = (int) ubuf(buf[m++]).i; + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +double FixHyperLocal::compute_scalar() +{ + double allbias; + MPI_Allreduce(&mybias,&allbias,1,MPI_DOUBLE,MPI_SUM,world); + return allbias; +} + +/* ---------------------------------------------------------------------- */ + +double FixHyperLocal::compute_vector(int i) +{ + // 23 vector outputs returned for i = 0-22 + + // i = 0 = # of boosted bonds on this step + // i = 1 = max strain of any bond on this step + // i = 2 = average bias potential for all bonds on this step + // i = 3 = ave bonds/atom on this step + // i = 4 = ave neighbor bonds/bond on this step + + // i = 5 = fraction of steps and bonds with no bias during this run + // i = 6 = max drift distance of any atom during this run + // i = 7 = max bond length during this run + // i = 8 = average # of boosted bonds/step during this run + // i = 9 = average bias potential for all bonds during this run + // i = 10 = max bias potential for any bond during this run + // i = 11 = min bias potential for any bond during this run + // i = 12 = max dist from my box of any ghost atom with + // maxstain < qfactor during this run + // i = 13 = max dist from my box of any ghost atom with + // any maxstrain during this run + // i = 14 = count of ghost atoms that could not be found + // by any proc at any reneighbor step during this run + // i = 15 = count of lost bond partners during this run + // i = 16 = average bias coeff for lost bond partners during this run + // i = 17 = count of bias overlaps found during this run + // i = 18 = count of non-matching bias coefficients found during this run + + // i = 19 = cummulative hyper time + // i = 20 = cummulative # of event timesteps since fix created + // i = 21 = cummulative # of atoms in events since fix created + // i = 22 = cummulative # of new bonds formed since fix created + + if (i == 0) { + int nboostall; + MPI_Allreduce(&nboost,&nboostall,1,MPI_INT,MPI_SUM,world); + return (double) nboostall; + } + + if (i == 1) { + if (nostrainyet) return 0.0; + int nlocal = atom->nlocal; + double emax = 0.0; + for (int j = 0; j < nlocal; j++) + emax = MAX(emax,maxstrain[j]); + double eall; + MPI_Allreduce(&emax,&eall,1,MPI_DOUBLE,MPI_MAX,world); + return eall; + } + + if (i == 2) { + if (allboost && allbonds) return allboost/allbonds * vmax; + return 1.0; + } + + if (i == 3) return 1.0*allbonds/atom->natoms; + + if (i == 4) { + int nlocal = atom->nlocal; + int nbonds = 0; // BIGINT? + for (int j = 0; j < nlocal; j++) + nbonds += numbond[j]; + int allbonds; + MPI_Allreduce(&nbonds,&allbonds,1,MPI_INT,MPI_SUM,world); + int allneigh; // BIGINT? + MPI_Allreduce(&list->ipage->ndatum,&allneigh,1,MPI_INT,MPI_SUM,world); + double neighsperatom = allneigh/atom->natoms; + double bondsperatom = 0.5*allbonds/atom->natoms; + return neighsperatom * bondsperatom; + } + + if (i == 5) { + int allboost_running,allnobias_running; + MPI_Allreduce(&nboost_running,&allboost_running,1,MPI_INT,MPI_SUM,world); + MPI_Allreduce(&nobias_running,&allnobias_running,1,MPI_INT,MPI_SUM,world); + if (allboost_running) return 1.0*allnobias_running / allboost_running; + return 0.0; + } + + if (i == 6) { + double alldriftsq; + MPI_Allreduce(&maxdriftsq,&alldriftsq,1,MPI_DOUBLE,MPI_MAX,world); + return (double) sqrt(alldriftsq); + } + + if (i == 7) { + double allbondlen; + MPI_Allreduce(&maxbondlen,&allbondlen,1,MPI_DOUBLE,MPI_MAX,world); + return allbondlen; + } + + if (i == 8) { + if (update->ntimestep == update->firststep) return 0.0; + int allboost_running; + MPI_Allreduce(&nboost_running,&allboost_running,1,MPI_INT,MPI_SUM,world); + return 1.0*allboost_running / (update->ntimestep - update->firststep); + } + + if (i == 9) { + if (update->ntimestep == update->firststep) return 0.0; + return sumboostcoeff * vmax / (update->ntimestep - update->firststep); + } + + if (i == 10) { + double allboostcoeff; + MPI_Allreduce(&maxboostcoeff,&allboostcoeff,1,MPI_DOUBLE,MPI_MAX,world); + return allboostcoeff * vmax; + } + + if (i == 11) { + double allboostcoeff; + MPI_Allreduce(&minboostcoeff,&allboostcoeff,1,MPI_DOUBLE,MPI_MAX,world); + return allboostcoeff * vmax; + } + + if (i == 12) return rmaxever; + if (i == 13) return rmaxeverbig; + + if (i == 14) { + int allghost_toofar; + MPI_Allreduce(&ghost_toofar,&allghost_toofar,1,MPI_INT,MPI_SUM,world); + return 1.0*allghost_toofar; + } + + if (i == 15) { + int alllost; + MPI_Allreduce(&lostbond_partner,&alllost,1,MPI_INT,MPI_SUM,world); + return 1.0*alllost; + } + + if (i == 16) { + int alllost; + MPI_Allreduce(&lostbond_partner,&alllost,1,MPI_INT,MPI_SUM,world); + double allcoeff; + MPI_Allreduce(&lostbond_coeff,&allcoeff,1,MPI_DOUBLE,MPI_SUM,world); + if (alllost == 0) return 0; + return allcoeff/alllost; + } + + if (i == 17) { + int allclose; + MPI_Allreduce(&checkbias_count,&allclose,1,MPI_INT,MPI_SUM,world); + return 1.0*allclose; + } + + if (i == 18) { + int allcoeff; + MPI_Allreduce(&checkcoeff_count,&allcoeff,1,MPI_INT,MPI_SUM,world); + return 1.0*allcoeff; + } + + if (i == 19) { + return boosttarget * update->dt * (update->ntimestep - starttime); + } + + if (i == 20) return (double) nevent; + if (i == 21) return (double) nevent_atom; + + if (i == 22) { + int allnew; + MPI_Allreduce(&nnewbond,&allnew,1,MPI_INT,MPI_SUM,world); + return (double) 0.5*allnew; + } +} + +/* ---------------------------------------------------------------------- + wrapper on compute_vector() + used by hyper.cpp to call FixHyper +------------------------------------------------------------------------- */ + +double FixHyperLocal::query(int i) +{ + if (i == 1) return compute_vector(19); // cummulative hyper time + if (i == 2) return compute_vector(20); // nevent + if (i == 3) return compute_vector(21); // nevent_atom + if (i == 4) return compute_vector(3); // ave bonds/atom + if (i == 5) return compute_vector(6); // maxdrift + if (i == 6) return compute_vector(7); // maxbondlen + if (i == 7) return compute_vector(5); // fraction with zero bias + + // unique to local hyper + + if (i == 8) return compute_vector(22); // number of new bonds + if (i == 9) return 1.0*maxbondperatom; // max bonds/atom + if (i == 10) return compute_vector(8); // ave # of boosted bonds/step + if (i == 11) return compute_vector(9); // ave boost coeff over all bonds + if (i == 12) return compute_vector(10); // max boost cooef for any bond + if (i == 13) return compute_vector(11); // max boost cooef for any bond + if (i == 14) return compute_vector(4); // neighbor bonds/bond + if (i == 15) return compute_vector(2); // ave boost cooef now + if (i == 16) return time_bondbuild; // CPU time for bond_build calls + if (i == 17) return rmaxever; // ghost atom distance for < maxstrain + if (i == 18) return rmaxeverbig; // ghost atom distance for any strain + if (i == 19) return compute_vector(14); // count of ghost atoms not found + if (i == 20) return compute_vector(15); // count of lost bond partners + if (i == 21) return compute_vector(16); // ave bias coeff of long bonds + if (i == 22) return compute_vector(17); // count of bias overlaps + if (i == 23) return compute_vector(18); // count of non-matching bias coeffs + + error->all(FLERR,"Invalid query to fix hyper/local"); +} + +/* ---------------------------------------------------------------------- + memory usage of per-atom and per-bond arrays +------------------------------------------------------------------------- */ + +double FixHyperLocal::memory_usage() +{ + int nmax = atom->nmax; + double bytes = 2*nmax * sizeof(int); // numbond, maxstrain_bondindex + bytes = 2*nmax * sizeof(double); // maxstrain, maxstrain_region + bytes += maxbondperatom*nmax * sizeof(OneBond); // bonds + bytes += 3*maxold * sizeof(double); // xold + bytes += maxold * sizeof(tagint); // tagold + bytes += maxold * sizeof(int); // old2now + return bytes; +} diff --git a/src/REPLICA/fix_hyper_local.h b/src/REPLICA/fix_hyper_local.h new file mode 100644 index 0000000000..5150386929 --- /dev/null +++ b/src/REPLICA/fix_hyper_local.h @@ -0,0 +1,175 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(hyper/local,FixHyperLocal) + +#else + +#ifndef LMP_FIX_HYPER_LOCAL_H +#define LMP_FIX_HYPER_LOCAL_H + +#include "fix_hyper.h" + +namespace LAMMPS_NS { + +class FixHyperLocal : public FixHyper { + public: + FixHyperLocal(class LAMMPS *, int, char **); + ~FixHyperLocal(); + int setmask(); + void init(); + void init_list(int, class NeighList *); + void setup_pre_neighbor(); + void setup_pre_reverse(int, int); + void pre_neighbor(); + void pre_reverse(int, int); + void min_pre_neighbor(); + double compute_scalar(); + double compute_vector(int); + double query(int); + + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + + void grow_arrays(int); + void copy_arrays(int, int, int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); + + double memory_usage(); + + // extra methods visible to callers + + void init_hyper(); + void build_bond_list(int); + + private: + int me; + double cutbond,qfactor,vmax,tequil,dcut; + double alpha_user; // timescale to apply boostostat (time units) + double alpha; // unitless dt/alpha_user + double boosttarget; // target value of boost + int histoflag; + int lostbond,lostbond_partner; + double lostbond_coeff; + int checkbias,checkbias_every,checkbias_flag,checkbias_count; + int checkcoeff,checkcoeff_every,checkcoeff_flag,checkcoeff_count; + + int setupflag; // 1 during setup, 0 during run + int firstflag; // set for first time bond_build takes place + int nostrainyet; // 1 until maxstrain is first computed + + int nboost_running,nobias_running; + int nbondbuild; + double time_bondbuild; + bigint starttime; + double sumboostcoeff; // sum of aveboost at every timestep + int allbonds; // sum of bond count on this step + double allboost; // sum of boostcoeff on all bonds on this step + + int nnewbond; // running tally of number of new bonds created + int maxbondperatom; // max # of bonds any atom ever has + int commflag; // flag for communication mode + int nevent; // # of events that trigger bond rebuild + int nevent_atom; // # of atoms that experienced an event + double cutbondsq,dcutsq; + double beta,t_hyper,invqfactorsq; + double mybias; + double maxbondlen; // cummulative max length of any bond + double maxdriftsq; // max distance any atom drifts from original pos + double maxboostcoeff; // cummulative max boost coeff for any bond + double minboostcoeff; // cummulative min boost coeff for any bond + double rmaxever,rmaxeverbig; + int ghost_toofar; + + double timefirst,timesecond,timethird,timefourth; + double timefifth,timesixth,timeseventh,timetotal; + + // data structs for per-atom and per-bond info + // all of these are for current owned and ghost atoms + // except list and old2now are for atom indices at time of last bond build + + class NeighList *list; // full neigh list up to Dcut distance + // created only when bonds are rebuilt + + int *old2now; // o2n[i] = current local index of old atom i + // stored for old owned and ghost atoms + // I = old index when bonds were last created + // old indices are stored in old neighbor list + + double **xold; // coords of owned+ghost atoms when bonds created + tagint *tagold; // global IDs of owned+ghost atoms when b created + + int maxold; // allocated size of old2now + int maxbond; // allocated size of bonds + int old_nall; // nlocal+nghost when old2now was last setup + + struct OneBond { // single IJ bond, atom I is owner + double r0; // original relaxed bond length + double boostcoeff; // boost coefficient + tagint jtag; // global index of J atom in bond IJ + int j; // local index of J atom in bond IJ + }; + + struct OneBond **bonds; // 2d array of bonds for owned atoms + int *numbond; // number of bonds for each owned atom + + double *maxstrain; // max-strain of any bond atom I is part of + // for owned and ghost atoms + double *maxstrain_region; // max-strain of any neighbor atom J of atom I + // for owned and ghost atoms + int *maxstrain_bondindex; // index of max-strain bond of each atom I + // just for owned atoms + tagint *biasflag; // atoms in biased bonds marked with bond partner + // for owned and ghost atoms + + // list of boosted bonds that this proc will bias + + int maxboost; // allocated size of boost list + int nboost; // # of boosted bonds I own + int *boost; // index of atom I in each boosted bond + + // histogramming of bond boost cooeficients + + int histo_flag,histo_every,histo_count,histo_print,histo_steps; + double histo_delta,invhisto_delta,histo_lo; + bigint *histo,*allhisto; + + // DEBUG: MPI data struct for finding min/max bias coeffs via Allreduce + + struct Two { + double value; + int proc; + }; + Two pairme,pairall; + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp new file mode 100644 index 0000000000..0449943215 --- /dev/null +++ b/src/REPLICA/hyper.cpp @@ -0,0 +1,548 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "hyper.h" +#include "update.h" +#include "atom.h" +#include "domain.h" +#include "region.h" +#include "integrate.h" +#include "min.h" +#include "force.h" +#include "neighbor.h" +#include "modify.h" +#include "compute_event_displace.h" +#include "fix_hyper.h" +#include "fix_event_hyper.h" +#include "output.h" +#include "dump.h" +#include "finish.h" +#include "timer.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +enum{NOHYPER,GLOBAL,LOCAL}; + +/* ---------------------------------------------------------------------- */ + +Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp) {} + +/* ---------------------------------------------------------------------- + perform hyperdynamics simulation +------------------------------------------------------------------------- */ + +void Hyper::command(int narg, char **arg) +{ + MPI_Comm_rank(world,&me); + MPI_Comm_size(world,&nprocs); + + // error checks + + if (domain->box_exist == 0) + error->all(FLERR,"Hyper command before simulation box is defined"); + + if (narg < 4) error->all(FLERR,"Illegal hyper command"); + + int nsteps = force->inumeric(FLERR,arg[0]); + t_event = force->inumeric(FLERR,arg[1]); + + char *id_fix = new char[strlen(arg[2])+1]; + strcpy(id_fix,arg[2]); + + char *id_compute = new char[strlen(arg[3])+1]; + strcpy(id_compute,arg[3]); + + options(narg-4,&arg[4]); + + // total # of timesteps must be multiple of t_event + + if (t_event <= 0) + error->all(FLERR,"Invalid t_event in hyper command"); + if (nsteps % t_event) + error->all(FLERR,"Hyper nsteps must be multiple of t_event"); + if (rebond < 0) + error->all(FLERR,"Invalid rebond in hyper command"); + if (rebond && rebond % t_event) + error->all(FLERR,"Hyper rebond must be multiple of t_event"); + + // FixHyper class performs global or local hyperdynamics + + int hyperenable,hyperstyle; + + if (strcmp(id_fix,"NULL") == 0) { + hyperenable = 0; + hyperstyle = NOHYPER; + } else { + int ifix = modify->find_fix(id_fix); + if (ifix < 0) error->all(FLERR,"Could not find fix ID for hyper"); + fix_hyper = (FixHyper *) modify->fix[ifix]; + int dim; + int *hyperflag = (int *) fix_hyper->extract("hyperflag",dim); + if (hyperflag == NULL || *hyperflag == 0) + error->all(FLERR,"Hyper fix is not a valid hyperdynamics fix"); + if (*hyperflag == 1) hyperstyle = GLOBAL; + if (*hyperflag == 2) hyperstyle = LOCAL; + hyperenable = 1; + } + + // create FixEventHyper class to store event and pre-quench states + + char **args = new char*[3]; + args[0] = (char *) "hyper_event"; + args[1] = (char *) "all"; + args[2] = (char *) "EVENT/HYPER"; + modify->add_fix(3,args); + fix_event = (FixEventHyper *) modify->fix[modify->nfix-1]; + delete [] args; + + // create Finish for timing output + + finish = new Finish(lmp); + + // assign FixEventHyper to event-detection compute + // necessary so it will know atom coords at last event + + int icompute = modify->find_compute(id_compute); + if (icompute < 0) error->all(FLERR,"Could not find compute ID for hyper"); + compute_event = (ComputeEventDisplace *) modify->compute[icompute]; + compute_event->reset_extra_compute_fix("hyper_event"); + + // reset reneighboring criteria since will perform minimizations + + neigh_every = neighbor->every; + neigh_delay = neighbor->delay; + neigh_dist_check = neighbor->dist_check; + + if (neigh_every != 1 || neigh_delay != 0 || neigh_dist_check != 1) { + if (me == 0) + error->warning(FLERR,"Resetting reneighboring criteria during hyper"); + } + + neighbor->every = 1; + neighbor->delay = 0; + neighbor->dist_check = 1; + + // initialize hyper as if one long dynamics run + + update->whichflag = 1; + update->nsteps = nsteps; + update->beginstep = update->firststep = update->ntimestep; + update->endstep = update->laststep = update->firststep + nsteps; + if (update->laststep < 0) + error->all(FLERR,"Too many timesteps"); + + lmp->init(); + + // init minimizer settings and minimizer itself + + update->etol = etol; + update->ftol = ftol; + update->max_eval = maxeval; + + // cannot use hyper with a changing box + // removing this restriction would require saving/restoring box params + + if (domain->box_change) + error->all(FLERR,"Cannot use hyper with a changing box"); + + // cannot use hyper with time-dependent fixes or regions + + for (int i = 0; i < modify->nfix; i++) + if (modify->fix[i]->time_depend) + error->all(FLERR,"Cannot use hyper with a time-dependent fix defined"); + + for (int i = 0; i < domain->nregion; i++) + if (domain->regions[i]->dynamic_check()) + error->all(FLERR,"Cannot use hyper with a time-dependent region defined"); + + // perform hyperdynamics simulation + + timer->init(); + timer->barrier_start(); + time_start = timer->get_wall(Timer::TOTAL); + + nbuild = ndanger = 0; + time_dynamics = time_quench = 0.0; + double clock = 0.0; + + if (hyperenable) fix_hyper->init_hyper(); + + timer->barrier_start(); + time_start = timer->get_wall(Timer::TOTAL); + + // perform initial minimization and bond list creation + + int nevent = 0; + int nevent_atoms = 0; + + fix_event->store_state_quench(); + quench(1); + if (dumpflag) + for (int idump = 0; idump < ndump; idump++) + output->dump[dumplist[idump]]->write(); + fix_event->store_event(); + if (hyperenable) fix_hyper->build_bond_list(0); + fix_event->restore_state_quench(); + + // main loop: dynamics, store state, quench, check event, restore state + + int ecount; + int istep = 0; + + while (istep < nsteps) { + dynamics(t_event,time_dynamics); + fix_event->store_state_quench(); + quench(0); + + ecount = compute_event->all_events(); + + if (ecount) { + nevent++; + nevent_atoms += ecount; + + if (dumpflag) + for (int idump = 0; idump < ndump; idump++) + output->dump[dumplist[idump]]->write(); + fix_event->store_event(); + if (hyperenable) fix_hyper->build_bond_list(ecount); + + } else if (rebond && update->ntimestep % rebond == 0) { + fix_event->store_event(); + if (hyperenable) fix_hyper->build_bond_list(ecount); + } + + fix_event->restore_state_quench(); + + // NOTE: replace clock with hypertime + //clock = clock + t_event*universe->nworlds; + if (stepmode == 0) istep = update->ntimestep - update->beginstep; + else istep = clock; + } + + if (stepmode) nsteps = update->ntimestep - update->beginstep; + + // set total timers and counters so Finish() will process them + + timer->set_wall(Timer::TOTAL,time_start); + timer->barrier_stop(); + + timer->set_wall(Timer::DYNAMICS,time_dynamics); + timer->set_wall(Timer::QUENCH,time_quench); + + neighbor->ncalls = nbuild; + neighbor->ndanger = ndanger; + + update->nsteps = nsteps; + + if (me == 0) { + if (screen) fprintf(screen,"Final hyper stats ...\n\n"); + if (logfile) fprintf(logfile,"Final hyper stats ...\n\n"); + } + + // subset of quantities also available in fix hyper output + + int nevent_running = 0; + int nevent_atoms_running = 0; + double t_hyper = 0.0; + double avebonds = 0.0; + double maxdrift = 0.0; + double maxbondlen = 0.0; + double fraczero = 1.0; + + double nnewbond,avenboost,aveboostcoeff,maxboostcoeff,minboostcoeff; + double maxbondperatom,neighbondperbond,aveboostnow; + double tbondbuild,rmaxever,rmaxeverbig,allghost_toofar; + double lostbond,lostbondcoeff,biasoverlap,nonmatchbiascoeff; + + if (hyperenable) { + t_hyper = fix_hyper->query(1); + nevent_running = fix_hyper->query(2); + nevent_atoms_running = fix_hyper->query(3); + avebonds = fix_hyper->query(4); + maxdrift = fix_hyper->query(5); + maxbondlen = fix_hyper->query(6); + fraczero = fix_hyper->query(7); + + if (hyperstyle == LOCAL) { + nnewbond = fix_hyper->query(8); + maxbondperatom = fix_hyper->query(9); + avenboost = fix_hyper->query(10); + aveboostcoeff = fix_hyper->query(11); + maxboostcoeff = fix_hyper->query(12); + minboostcoeff = fix_hyper->query(13); + neighbondperbond = fix_hyper->query(14); + aveboostnow = fix_hyper->query(15); + tbondbuild = fix_hyper->query(16); + rmaxever = fix_hyper->query(17); + rmaxeverbig = fix_hyper->query(18); + allghost_toofar = fix_hyper->query(19); + lostbond = fix_hyper->query(20); + lostbondcoeff = fix_hyper->query(21); + biasoverlap = fix_hyper->query(22); + nonmatchbiascoeff = fix_hyper->query(23); + } + } + + if (me == 0) { + if (screen) { + fprintf(screen,"Cummulative quantities for fix hyper:\n"); + fprintf(screen," hyper time = %g\n",t_hyper); + fprintf(screen," event timesteps = %d\n",nevent_running); + fprintf(screen," # of atoms in events = %d\n",nevent_atoms_running); + fprintf(screen,"Quantities for this hyper run:\n"); + fprintf(screen," event timesteps = %d\n",nevent); + fprintf(screen," # of atoms in events = %d\n",nevent_atoms); + fprintf(screen," max length of any bond = %g\n",maxbondlen); + fprintf(screen," max drift distance of any atom = %g\n",maxdrift); + fprintf(screen," fraction of steps & bonds with zero bias = %g\n", + fraczero); + fprintf(screen,"Current quantities:\n"); + fprintf(screen," ave bonds/atom = %g\n",avebonds); + + if (hyperstyle == LOCAL) { + fprintf(screen,"Cummulative quantities specific to fix hyper/local:\n"); + fprintf(screen," # of new bonds formed = %g\n",nnewbond); + fprintf(screen," max bonds/atom = %g\n",maxbondperatom); + fprintf(screen,"Quantities for this hyper run specific to " + "fix hyper/local:\n"); + fprintf(screen," ave boosted bonds/step = %g\n",avenboost); + fprintf(screen," ave boost coeff of all bonds = %g\n",aveboostcoeff); + fprintf(screen," max boost coeff of any bond = %g\n",maxboostcoeff); + fprintf(screen," min boost coeff of any bond = %g\n",minboostcoeff); + fprintf(screen," max dist from my box of any " + "non-maxstrain bond ghost atom = %g\n",rmaxever); + fprintf(screen," max dist from my box of any bond ghost atom = %g\n", + rmaxeverbig); + fprintf(screen," count of bond ghost neighbors " + "not found on reneighbor steps = %g\n",allghost_toofar); + fprintf(screen," lost bond partners = %g\n",lostbond); + fprintf(screen," ave bias coeff for lost bond partners = %g\n", + lostbondcoeff); + fprintf(screen," bias overlaps = %g\n",biasoverlap); + fprintf(screen," non-matching bias coeffs = %g\n",nonmatchbiascoeff); + fprintf(screen," CPU time for bond builds = %g\n",tbondbuild); + fprintf(screen,"Current quantities specific to fix hyper/local:\n"); + fprintf(screen," neighbor bonds/bond = %g\n",neighbondperbond); + fprintf(screen," ave boost coeff for all bonds = %g\n",aveboostnow); + } + fprintf(screen,"\n"); + } + + if (logfile) { + fprintf(logfile,"Cummulative quantities for fix hyper:\n"); + fprintf(logfile," hyper time = %g\n",t_hyper); + fprintf(logfile," event timesteps = %d\n",nevent_running); + fprintf(logfile," # of atoms in events = %d\n",nevent_atoms_running); + fprintf(logfile,"Quantities for this hyper run:\n"); + fprintf(logfile," event timesteps = %d\n",nevent); + fprintf(logfile," # of atoms in events = %d\n",nevent_atoms); + fprintf(logfile," max length of any bond = %g\n",maxbondlen); + fprintf(logfile," max drift distance of any atom = %g\n",maxdrift); + fprintf(logfile," fraction of steps & bonds with zero bias = %g\n", + fraczero); + fprintf(logfile,"Current quantities:\n"); + fprintf(logfile," ave bonds/atom = %g\n",avebonds); + + if (hyperstyle == LOCAL) { + fprintf(logfile,"Cummulative quantities specific tofix hyper/local:\n"); + fprintf(logfile," # of new bonds formed = %g\n",nnewbond); + fprintf(logfile," max bonds/atom = %g\n",maxbondperatom); + fprintf(logfile,"Quantities for this hyper run specific to " + "fix hyper/local:\n"); + fprintf(logfile," ave boosted bonds/step = %g\n",avenboost); + fprintf(logfile," ave boost coeff of all bonds = %g\n",aveboostcoeff); + fprintf(logfile," max boost coeff of any bond = %g\n",maxboostcoeff); + fprintf(logfile," min boost coeff of any bond = %g\n",minboostcoeff); + fprintf(logfile," max dist from my box of any " + "non-maxstrain bond ghost atom = %g\n",rmaxever); + fprintf(logfile," max dist from my box of any bond ghost atom = %g\n", + rmaxeverbig); + fprintf(logfile," count of ghost bond neighbors " + "not found on reneighbor steps = %g\n",allghost_toofar); + fprintf(logfile," lost bond partners = %g\n",lostbond); + fprintf(logfile," ave bias coeff for lost bond partners = %g\n", + lostbondcoeff); + fprintf(logfile," bias overlaps = %g\n",biasoverlap); + fprintf(logfile," non-matching bias coeffs = %g\n",nonmatchbiascoeff); + fprintf(logfile," CPU time for bond builds = %g\n",tbondbuild); + fprintf(logfile,"Current quantities specific to fix hyper/local:\n"); + fprintf(logfile," neighbor bonds/bond = %g\n",neighbondperbond); + fprintf(logfile," ave boost coeff for all bonds = %g\n",aveboostnow); + } + fprintf(logfile,"\n"); + } + } + + // timing stats + + finish->end(4); + + update->whichflag = 0; + update->firststep = update->laststep = 0; + update->beginstep = update->endstep = 0; + + // reset reneighboring criteria + + neighbor->every = neigh_every; + neighbor->delay = neigh_delay; + neighbor->dist_check = neigh_dist_check; + + delete [] id_fix; + delete [] id_compute; + memory->destroy(dumplist); + delete finish; + modify->delete_fix("hyper_event"); + + compute_event->reset_extra_compute_fix(NULL); +} + +/* ---------------------------------------------------------------------- + short dynamics run +------------------------------------------------------------------------- */ + +void Hyper::dynamics(int nsteps, double &time_category) +{ + update->whichflag = 1; + update->nsteps = nsteps; + + // full init works + // need to try partial init or setup + + lmp->init(); + update->integrate->setup(0); + // this may be needed if don't do full init + //modify->addstep_compute_all(update->ntimestep); + bigint ncalls = neighbor->ncalls; + + timer->barrier_start(); + update->integrate->run(nsteps); + timer->barrier_stop(); + time_dynamics += timer->get_wall(Timer::TOTAL); + + nbuild += neighbor->ncalls - ncalls; + ndanger += neighbor->ndanger; + + update->integrate->cleanup(); + finish->end(0); +} + +/* ---------------------------------------------------------------------- + quench minimization + flag = 1 to trigger output of memory in setup() call +------------------------------------------------------------------------- */ + +void Hyper::quench(int flag) +{ + bigint ntimestep_hold = update->ntimestep; + bigint endstep_hold = update->endstep; + + // need to change whichflag so that minimize->setup() calling + // modify->setup() will call fix->min_setup() + + update->whichflag = 2; + update->nsteps = maxiter; + update->endstep = update->laststep = update->firststep + maxiter; + if (update->laststep < 0) + error->all(FLERR,"Too many iterations"); + update->restrict_output = 1; + + // full init works + + lmp->init(); + update->minimize->setup(flag); + + // partial init does not work + + //modify->addstep_compute_all(update->ntimestep); + //update->minimize->setup_minimal(1); + + // NOTE: what doing with ncalls? + int ncalls = neighbor->ncalls; + + timer->barrier_start(); + update->minimize->run(maxiter); + timer->barrier_stop(); + time_quench += timer->get_wall(Timer::TOTAL); + + update->minimize->cleanup(); + finish->end(0); + + // reset timestep as if quench did not occur + // clear timestep storage from computes, since now invalid + + update->restrict_output = 0; + update->ntimestep = ntimestep_hold; + update->endstep = update->laststep = endstep_hold; + for (int i = 0; i < modify->ncompute; i++) + if (modify->compute[i]->timeflag) modify->compute[i]->clearstep(); +} + +/* ---------------------------------------------------------------------- + parse optional parameters at end of hyper input line +------------------------------------------------------------------------- */ + +void Hyper::options(int narg, char **arg) +{ + // set defaults + + etol = 1.0e-4; + ftol = 1.0e-4; + maxiter = 40; + maxeval = 50; + stepmode = 0; + dumpflag = 0; + ndump = 0; + dumplist = NULL; + rebond = 0; + + int iarg = 0; + while (iarg < narg) { + if (strcmp(arg[iarg],"min") == 0) { + if (iarg+5 > narg) error->all(FLERR,"Illegal hyper command"); + etol = force->numeric(FLERR,arg[iarg+1]); + ftol = force->numeric(FLERR,arg[iarg+2]); + maxiter = force->inumeric(FLERR,arg[iarg+3]); + maxeval = force->inumeric(FLERR,arg[iarg+4]); + if (maxiter < 0) error->all(FLERR,"Illegal hyper command"); + iarg += 5; + + } else if (strcmp(arg[iarg],"time") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); + if (strcmp(arg[iarg+1],"steps") == 0) stepmode = 0; + else if (strcmp(arg[iarg+1],"clock") == 0) stepmode = 1; + else error->all(FLERR,"Illegal hyper command"); + iarg += 2; + + } else if (strcmp(arg[iarg],"dump") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); + dumpflag = 1; + int idump = output->find_dump(arg[iarg+1]); + if (idump < 0) + error->all(FLERR,"Dump ID in hyper command does not exist"); + memory->grow(dumplist,ndump+1,"hyper:dumplist"); + dumplist[ndump++] = idump; + iarg += 2; + + } else if (strcmp(arg[iarg],"rebond") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); + rebond = force->inumeric(FLERR,arg[iarg+1]); + iarg += 2; + + } else error->all(FLERR,"Illegal hyper command"); + } +} diff --git a/src/REPLICA/hyper.h b/src/REPLICA/hyper.h new file mode 100644 index 0000000000..1b05172bcf --- /dev/null +++ b/src/REPLICA/hyper.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(hyper,Hyper) + +#else + +#ifndef LMP_HYPER_H +#define LMP_HYPER_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Hyper : protected Pointers { + public: + Hyper(class LAMMPS *); + ~Hyper() {} + void command(int, char **); + + private: + int me,nprocs; + int t_event; + double etol,ftol; + int maxiter,maxeval; + int stepmode,dumpflag,ndump,rebond; + int *dumplist; + + int neigh_every,neigh_delay,neigh_dist_check; + int quench_reneighbor; + bigint nbuild,ndanger; + + double time_dynamics,time_quench; + double time_start; + + class FixHyper *fix_hyper; + class FixEventHyper *fix_event; + class ComputeEventDisplace *compute_event; + class Finish *finish; + + void dynamics(int, double &); + void quench(int flag); + void options(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ From d6631266ceb0049a6f9696fa994032c2091b47f7 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 10 Oct 2018 13:47:49 -0600 Subject: [PATCH 089/273] doc files in wrong dir --- doc/{ => src}/fix_hyper_global.txt | 0 doc/{ => src}/fix_hyper_local.txt | 0 doc/{ => src}/hyper.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename doc/{ => src}/fix_hyper_global.txt (100%) rename doc/{ => src}/fix_hyper_local.txt (100%) rename doc/{ => src}/hyper.txt (100%) diff --git a/doc/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt similarity index 100% rename from doc/fix_hyper_global.txt rename to doc/src/fix_hyper_global.txt diff --git a/doc/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt similarity index 100% rename from doc/fix_hyper_local.txt rename to doc/src/fix_hyper_local.txt diff --git a/doc/hyper.txt b/doc/src/hyper.txt similarity index 100% rename from doc/hyper.txt rename to doc/src/hyper.txt From 265c11dca9f8b28ca64b54b2174a0e34f80c810c Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 11 Oct 2018 08:03:03 -0600 Subject: [PATCH 090/273] more edits to hyper docs --- doc/src/fix_hyper_global.txt | 142 ++++++++++++++++++++------- doc/src/hyper.txt | 179 ++++++++++++++++++++++++++--------- 2 files changed, 239 insertions(+), 82 deletions(-) diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index c841f0b891..5893f392d3 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -26,59 +26,122 @@ fix 1 all hyper/global 1.0 0.3 0.8 300.0 :pre [Description:] This fix is meant to be used with the "hyper"_hyper.html command to -perform a bond-boost hyperdynamics simulation. The role of this fix -is a select a single pair of atoms within the system at each timestep -to add a global bias potential to, which will alter their dynamics. +perform a bond-boost global hyperdynamics (GHD) simulation. The role +of this fix is to a select a single pair of atoms in the system at +each timestep to add a global bias potential to, which will alter the +dynamics of the system in a manner that effectively accelerates time. This is in contrast to the "fix hyper/local"_fix_hyper_local.html -command, which can add a local bias potential to multiple pairs of -atoms at each timestep. +command, which can be user to perform a local hyperdynamics (LHD) +simulation, by adding a local bias potential to multiple pairs of +atoms at each timestep. GHD can speed-up a small simulation with up +to a few 100 atoms. For larger systems, LHD is needed to achieve good +speed-ups. For a system that undergoes rare transition events, where one or more -atoms move across an energy barrier to a new potential energy basin, -the effect of the bias potential is to induce more rapid transitions. +atoms move over an energy barrier to a new potential energy basin, the +effect of the bias potential is to induce more rapid transitions. This can lead to a dramatic speed-up in the rate at which events occurs, without altering their relative frequencies, thus leading to -an overall dramatic speed-up in the effective elapsed time of the -simulation. +an overall increase in the elapsed real time of the simulation as +compared to simulating for the same number of timesteps with normal +MD. See the "hyper"_hyper.html doc page for a more general discussion +of hyperdynamics and citations that explain both GHD and LHD. -Cite various papers. +The equations and logic used by this fix to perform GHD are as +follows. This follows the description of GHD given in +"(Voter2013)"_#Voter2013ghd. The bond-boost form of a bias potential +for GHD is due to Miron and Fichthorn as described in +"(Miron)"_#Mironghd. Here we use a simplified version of bond-boost +GHD where a single bond is biased at any one timestep. -The current strain of a bond IJ is defined as +Bonds are defined between every pair of I,J atoms whose R0ij distance +is less than {cutbond}, when the system is in a quenched state +(minimum) energy. Note that these are not "bonds" in a covalent +sense. A bond is simply any pair of atoms that meet the distance +criterion. {Cutbond} is an argument to this fix; it is discussed more +below. + +The current strain of bond IJ (when running dynamics) is defined as Eij = (Rij - R0ij) / R0ij :pre -Emax = is the max of the absolute value of Eij for all IJ bonds. +where Rij is the current distance between atoms I,J, and R0ij is the +equilibrium distance in the quenched state. -dVij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < q - = 0 otherwise :pre +The bias energy Vij of any bond IJ is defined as -Delta Vbias = minimum of dVij for all IJ bonds :pre +Vij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor + = 0 otherwise :pre -The boost factor B = exp(beta * Delta Vbias) -for a single timestep. +where the prefactor {Vmax} and the cutoff {qfactor} are arguments to +this fix; they are discussed more below. This functional form is an +inverse parabola centered at 0.0 with height Vmax and which goes to +0.0 at +/- qfactor. -Thus the accumulated hypertime is simply +Let Emax = the maximum of abs(Eij) for all IJ bonds in the system on a +given timestep. On that step, Vij is added as a bias potential to +only the two atoms IJ in the bond with strain Emax, call it Vij(max). +Note that Vij(max) will be 0.0 if Emax >= qfactor on that timestep. +Also note that Vij(max) is added to the normal interatomic potential +that is computed between all atoms in the system. -t_hyper = Sum (i = 1 to Nsteps) Bi * dt :pre +The derivative of Vij(max) with respect to the position of each atom +in the Emax bond gives a force Fij(max) acting on the bond as + +Fij(max) = - dVij(max)/dEij = 2 Vmax Eij / qfactor^2 for abs(Eij) < qfactor + = 0 otherwise :pre + +which can be decomposed into an equal and opposite force acting (only) +on the two I,J atoms in the Emax bond. + +The boost factor in time for the system is given each timestep I by + +Bi = exp(beta * Vij(max)) :pre + +where beta = 1/kTequil, and {Tequil} is the temperature of the system +and an arguement to this fix. Note that Bi >= 1 at every step. + +NOTE: Must use langevin set to Tequil also. LAMMPS does not +check that you do this. +as maintained by a thermostat for constant NVT dynamics. + +The elapsed system time t_hyper for a GHD simulation running for {N} +timesteps is simply + +t_hyper = Sum (i = 1 to N) Bi * dt :pre + +where dt is the timestep size defined by the "timestep"_timestep.html +command. The effective time acceleration due to GHD is thus t_hyper / +N*dt, where the denominator is elapsed time for a normal MD run. + +Note that in global hyperdynamics, the boost factor varies from +timestep to timestep. Likewise, which bond has Emax strain and thus +which pair of atoms the bias potential is added to, will also vary +from timestep to timestep. + +:line The {cutbond} argument is the cutoff distance for defining bonds between pairs of nearby atoms. A pair of atoms in their equilibrium, -minimum-energy config, which are a distance Rij < cutbond, are -defined as a bonded pair. +minimum-energy config, which are a distance Rij < cutbond, are defined +as a bonded pair. This should normally be roughly ~25% larger than +the nearest-neighbor distance in a crystalline lattice. -The {qfactor} argument is the limiting strain at which -the Vbias (the bias potential) goes to 0.0. +The {qfactor} argument is the limiting strain at which the bias +potential goes to 0.0. -If {qfactor} is too big, then transitions are affected b/c -the bias energy is non-zero at the transitions. If it is -too small than not must boost is achieved for a large system -with many bonds (some bonds Eij always exceeds qfactor). +If {qfactor} is set too large, then transitions from one energy basin +to another are affected because the bias potneial is non-zero at the +transitions. If {qfactor} is set too small than little boost is +achieved because some the Eij strain of some bond is (nearly) always +exceeding {qfactor). Note The {Vmax} argument is the prefactor on the bias potential. +It should be set to a value smaller than -The {Tequil} argument is part of the beta term in the -exponential factor that determines how much boost is -achieved as a function of the bias potential. +The {Tequil} argument is part of the beta term in the exponential +factor that determines how much boost is achieved as a function of the +bias potential. [Restart, fix_modify, output, run start/stop, minimize info:] @@ -96,12 +159,12 @@ the bias potential (energy units) applied on the current timestep. The vector stores the following quantities: 1 = boost factor on this step (unitless) -2 = max strain of any bond on this step (unitless) +2 = max strain Eij of any bond on this step (unitless) 3 = ID of first atom in the max-strain bond 4 = ID of second atom in the max-strain bond 5 = average # of bonds/atom on this step :ul -6 = fraction of step with no bias during this run +6 = fraction of steps with bias = 0.0 during this run 7 = max drift distance of any atom during this run (distance units) 8 = max bond length during this run (distance units) :ul @@ -135,12 +198,19 @@ minimization"_minimize.html. [Restrictions:] -This fix is part of the REPLICA package. It is only enabled if LAMMPS -was built with that package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. +This command can only be used if LAMMPS was built with the REPLICA +package. See the "Build package"_Build_package.html doc +page for more info. [Related commands:] -"fix hyper/local"_fix_hyper_local.html +"hyper"_hyper.html, "fix hyper/local"_fix_hyper_local.html [Default:] None + +:link(Voter2013) +[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, +144110 (2013). + +:link(Miron) +[(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index 966d33a30f..e862af2235 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -10,14 +10,14 @@ hyper command :h3 [Syntax:] -hyper N Nevent fixID computeID keyword values ... :pre +hyper N Nevent fix-ID compute-ID keyword values ... :pre N = # of timesteps to run :ulb,l Nevent = check for events every this many steps :l -fixID = ID of a fix that applies a global or local bias potential :l -computeID = ID of a compute that identifies when an event has occurred :l +fix-ID = ID of a fix that applies a global or local bias potential, can be NULL :l +compute-ID = ID of a compute that identifies when an event has occurred :l zero or more keyword/value pairs may be appended :l -keyword = {min} or {time} :l +keyword = {min} or {time} or {dump} or {rebond} :l {min} values = etol ftol maxiter maxeval etol = stopping tolerance for energy, used in quenching ftol = stopping tolerance for force, used in quenching @@ -25,82 +25,169 @@ keyword = {min} or {time} :l maxeval = max number of force/energy evaluations, used in quenching {time} value = {steps} or {clock} {steps} = simulation runs for N timesteps (default) - {clock} = simulation runs until hyper time exceeds N timesteps :pre + {clock} = simulation runs until hyper time exceeds N timesteps + {dump} value = dump-ID + dump-ID = ID of dump to trigger whenever an event takes place + {rebond} value = Nrebond + Nrebond = frequency at which to reset bonds, even if no event has occurred + :pre :ule [Examples:] -hyper 5000 100 global event :pre +compute event all event/displace 1.0 +fix HG mobile hyper/global 3.0 0.3 0.4 800.0 +hyper 5000 100 HG event min 1.0e-6 1.0e-6 100 100 dump 1 dump 5 :pre [Description:] Run a bond-boost hyperdynamics (HD) simulation where time is -accelerated by application of a bias potential to a one or more pairs -of atoms in the system. This command can be used to run both global -and local hyperdyamics. In global HD a single bond (nearby pair of -atoms) within the system is biased on a given timestep. In local HD -multiple bonds (separated by a sufficient distance) can be biased -simultaneously at each timestep. +accelerated by application of a bias potential to one or more pairs of +nearby atoms in the system. This command can be used to run both +global and local hyperdyamics. In global HD a single bond within the +system is biased on each timestep. In local HD multiple bonds +(separated by a sufficient distance) can be biased simultaneously at +each timestep. In the bond-boost hyperdynamics context, a "bond" is +not a covalent bond between a pair of atoms in a molecule. Rather it +is simply a pair of nearby atoms as discussed below. -Make next paragraph more HD-specific. +Both global and local HD are described in "(Voter2013)"_#Voter2013 by +Art Voter and collaborators. Similar to parallel replica dynamics +(PRD), global and local HD are methods for performing accelerated +dynamics that are suitable for infrequent-event systems that obey +first-order kinetics. A good overview of accelerated dynamics methods +for such systems in given in "(Voter2002)"_#Voter2002hd from the same +group. To quote from the review paper: "The dynamical evolution is +characterized by vibrational excursions within a potential basin, +punctuated by occasional transitions between basins." The transition +probability is characterized by p(t) = k*exp(-kt) where k is the rate +constant. Running multiple replicas gives an effective enhancement in +the timescale spanned by the multiple simulations, while waiting for +an event to occur. -Both global and local HD are described in "this paper"_#Voter2013 by -Art Voter and collaborators. They are methods for performing -accelerated dynamics that is suitable for infrequent-event systems -that obey first-order kinetics. A good overview of accelerated -dynamics methods for such systems in given in "this review -paper"_#Voter2002prd from the same group. To quote from the paper: -"The dynamical evolution is characterized by vibrational excursions -within a potential basin, punctuated by occasional transitions between -basins." The transition probability is characterized by p(t) = -k*exp(-kt) where k is the rate constant. Running multiple replicas -gives an effective enhancement in the timescale spanned by the -multiple simulations, while waiting for an event to occur. - -How different than PRD. +Both HD and PRD produce a time-accurate trajectory that effectively +extends the timescale over which a system can be simulated, but they +do it differently. HD uses a single replica of the system and +accelerates time by biasing the interaction potential in a manner such +that each timestep is effectively longer. PRD creates Nr replicas of +the system and runs dynamics on each independently with a normal +unbiased potential until an event occurs in one of the replicas. The +time between events is reduced by a factor of Nr replicas. For both +methods, per wall-clock second, more physical time elapses and more +events occur. See the "prd"_prd.html doc page for more info about +PRD. An HD run has several stages, which are repeated each time an "event" -occurs, as defined below. The logic for a HD run is as follows: +occurs, as explained below. The logic for an HD run is as follows: quench -reset list of bonds :pre +create initial list of bonds :pre while (time remains): - run dynamics for Nevery steps + run dynamics for Nevent steps quench check for an event if event occurred: reset list of bonds restore pre-quench state :pre -Explain each of the steps above. Explain what list of bonds is and -how event is detected. +The list of bonds is the list of atom pairs of atoms that are within a +short cutoff distance of each other after the system energy is +minimized (quenched). This list is created and reset by a "fix +hyper/global"_fix_hyper_global.html or "fix +hyper/local"_fix_hyper_local.html command specified as {fix-ID}. At +every dynamics timestep, the same fix selects one of more bonds to +apply a bias potential to. -Explain the specified fix and compute. +IMPORTANT NOTE: The style of fix associated with the specified +{fix-ID} determines whether you are running the global versus local +hyperdynamics algorithm. -Statistics about the number of events, the number of bonds that a bias -potential is applied to, the accumulated hyper time, etc are stored by -the fix and can be output with thermodynamic output. +Dynamics (with the bias potential) is run continuously, stopping every +{Nevent} steps to check if a transition event has occurred. The +specified {N} for total steps must be a multiple of {Nevent}. check +is performed by quenching the system and comparing the resulting atom +coordinates to the coordinates from the previous basin. + +A quench is an energy minimization and is performed by whichever +algorithm has been defined by the "min_style"_min_style.html command. +Minimization parameters may be set via the +"min_modify"_min_modify.html command and by the {min} keyword of the +hyper command. The latter are the settings that would be used with +the "minimize"_minimize.html command. Note that typically, you do not +need to perform a highly-converged minimization to detect a transition +event, though you may need to in order to prevent a set of atoms in +the system from relaxing to a saddle point. + +The event check is performed by a compute with the specified +{compute-ID}. Currently there is only one compute that works with the +hyper command, which is the "compute +event/displace"_compute_event_displace.html command. Other +event-checking computes may be added. "Compute +event/displace"_compute_event_displace.html checks whether any atom in +the compute group has moved further than a specified threshold +distance. If so, an "event" has occurred. + +If this happens, the list of bonds is reset, since some bond pairs +are likely now too far apart, and new pairs are likely close enough +to be considered a bond. The pre-quenched state of the +system (coordinates and velocities) is restored, and dynamics continue. + +At the end of the hyper run, a variety of statistics are output to the +screen and logfile. These include info relevant to both global and +local hyperdynamics, such as the number of events and the elapsed +hyper time (acclerated time), And it includes info specific to one or +the other, depending on which style of fix was specified by {fix-ID}. + +:line + +The optional keywords operate as follows. + +As explained above, the {min} keyword can be used to specify +parameters for the quench. Their meaning is the same +as for the "minimize"_minimize.html command + +The {time} keyword determines how the {N} timesteps argument is +interpreted. If {time} is set to {steps}, then hyperdynamics is run +for {N} timesteps. If the time acceleration provided by the bias +potential is 10x, then that is the same as running a normal (unbiased) +MD simulation for 10N steps. If {time} is set to {clock}, then +hyperdynamics would run for N/10 steps, since that would correspond to +an elapsed real time of N*dt. + +The {dump} keyword can be used to trigger a specific dump command with +the specified {dump-ID} to output a snapshot each time an event is +detected. It can be specified multiple times with different {dump-ID} +values, as in the example above. These snapshots will be for the +quenched state of the system on a timestep that is a multiple of +{Nevent}, i.e. a timestep after the event has occurred. Note that any +dump command in the input script will also output snapshots at +whatever timestep interval it defines via its {N} argument; see the +"dump"_dump.html command for details. This means if you only want a +particular dump to output snapshots when events are detected, you +should specify its {N} as a value larger than the length of the +hyperdynamics run. + +As in the code logic above, the bond list is normally only reset when +an event occurs. The {rebond} keyword will force a reset of the bond +list every {Nrebond} steps, even if an event has not occurred. +{Nrebond} must be a multiple of {Nevent}. This can be useful to check +if more frequent resets alter event statistics, perhaps because the +parameters chosen for defining what is a bond and what is an event are +producing bad dynamics in the presence of the bias potential. :line [Restrictions:] This command can only be used if LAMMPS was built with the REPLICA -package. See the "Making LAMMPS"_Section_start.html#start_3 section -for more info on packages. - -NOTE: is this true? -This command cannot be used when any fixes are defined that keep track -of elapsed time to perform time-dependent operations. Examples -include the "ave" fixes such as "fix ave/chunk"_fix_ave_chunk.html. -Also "fix dt/reset"_fix_dt_reset.html and "fix -deposit"_fix_deposit.html. +package. See the "Build package"_Build_package.html doc +page for more info. [Related commands:] "fix hyper/global"_fix_hyper_global.html, "fix hyper/local"_fix_hyper_local.html, "compute -event/displace"_compute_event_displace.html +event/displace"_compute_event_displace.html, "prd"_prd.html [Default:] From 56598fcd0bcd59a5d40328c6414e27da40b75c23 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 11 Oct 2018 08:29:25 -0600 Subject: [PATCH 091/273] changes to prd command doc page --- doc/src/prd.txt | 50 +++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/doc/src/prd.txt b/doc/src/prd.txt index f71f285336..43c0d309c8 100644 --- a/doc/src/prd.txt +++ b/doc/src/prd.txt @@ -48,11 +48,12 @@ replicas of a system. One or more replicas can be used. The total number of steps {N} to run can be interpreted in one of two ways; see discussion of the {time} keyword below. -PRD is described in "this paper"_#Voter1998 by Art Voter. It is a method -for performing accelerated dynamics that is suitable for -infrequent-event systems that obey first-order kinetics. A good -overview of accelerated dynamics methods for such systems in given in -"this review paper"_#Voter2002prd from the same group. To quote from the +PRD is described in "(Voter1998)"_#Voter1998 by Art Voter. Similar to +global or local hyperdynamics (HD), PRD is a method for performing +accelerated dynamics that is suitable for infrequent-event systems +that obey first-order kinetics. A good overview of accelerated +dynamics methods for such systems in given in this review paper +"(Voter2002)"_#Voter2002prd from Art's group. To quote from the paper: "The dynamical evolution is characterized by vibrational excursions within a potential basin, punctuated by occasional transitions between basins." The transition probability is @@ -61,15 +62,27 @@ Running multiple replicas gives an effective enhancement in the timescale spanned by the multiple simulations, while waiting for an event to occur. -Each replica runs on a partition of one or more processors. Processor -partitions are defined at run-time using the "-partition command-line -switch"_Run_options.html. Note that if you have MPI installed, you -can run a multi-replica simulation with more replicas (partitions) -than you have physical processors, e.g you can run a 10-replica -simulation on one or two processors. However for PRD, this makes -little sense, since running a replica on virtual instead of physical -processors,offers no effective parallel speed-up in searching for -infrequent events. See the "Howto replica"_Howto_replica.html doc +Both PRD and HD produce a time-accurate trajectory that effectively +extends the timescale over which a system can be simulated, but they +do it differently. PRD creates Nr replicas of the system and runs +dynamics on each independently with a normal unbiased potential until +an event occurs in one of the replicas. The time between events is +reduced by a factor of Nr replicas. HD uses a single replica of the +system and accelerates time by biasing the interaction potential in a +manner such that each timestep is effectively longer. For both +methods, per wall-clock second, more physical time elapses and more +events occur. See the "hyper"_hyper.html doc page for more info about +HD. + +In PRD, each replica runs on a partition of one or more processors. +Processor partitions are defined at run-time using the "-partition +command-line switch"_Run_options.html. Note that if you have MPI +installed, you can run a multi-replica simulation with more replicas +(partitions) than you have physical processors, e.g you can run a +10-replica simulation on one or two processors. However for PRD, this +makes little sense, since running a replica on virtual instead of +physical processors,offers no effective parallel speed-up in searching +for infrequent events. See the "Howto replica"_Howto_replica.html doc page for further discussion. When a PRD simulation is performed, it is assumed that each replica is @@ -78,8 +91,8 @@ I.e. the simulation domain, the number of atoms, the interaction potentials, etc should be the same for every replica. A PRD run has several stages, which are repeated each time an "event" -occurs in one of the replicas, as defined below. The logic for a PRD -run is as follows: +occurs in one of the replicas, as explained below. The logic for a +PRD run is as follows: while (time remains): dephase for n_dephase*t_dephase steps @@ -129,7 +142,8 @@ Minimization parameters may be set via the PRD command. The latter are the settings that would be used with the "minimize"_minimize.html command. Note that typically, you do not need to perform a highly-converged minimization to detect a transition -event. +event, though you may need to in order to prevent a set of atoms in +the system from relaxing to a saddle point. The event check is performed by a compute with the specified {compute-ID}. Currently there is only one compute that works with the @@ -307,7 +321,7 @@ deposit"_fix_deposit.html. "min_modify"_min_modify.html, "min_style"_min_style.html, "run_style"_run_style.html, "minimize"_minimize.html, "velocity"_velocity.html, "temper"_temper.html, "neb"_neb.html, -"tad"_tad.html +"tad"_tad.html, "hyper"_hyper.html [Default:] From 4a6f088c0bb63c98776c5bc5cb3590073efe954d Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 11 Oct 2018 11:25:19 -0600 Subject: [PATCH 092/273] updates to hyper doc pages --- doc/src/fix_hyper_global.txt | 154 +++++++++++++++++++++-------------- doc/src/fix_hyper_local.txt | 141 ++++++++++++++++++++++---------- 2 files changed, 192 insertions(+), 103 deletions(-) diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index 5893f392d3..cd66f5585d 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -33,9 +33,9 @@ dynamics of the system in a manner that effectively accelerates time. This is in contrast to the "fix hyper/local"_fix_hyper_local.html command, which can be user to perform a local hyperdynamics (LHD) simulation, by adding a local bias potential to multiple pairs of -atoms at each timestep. GHD can speed-up a small simulation with up -to a few 100 atoms. For larger systems, LHD is needed to achieve good -speed-ups. +atoms at each timestep. GHD can time accelerate a small simulation +with up to a few 100 atoms. For larger systems, LHD is needed to +achieve good time acceleration. For a system that undergoes rare transition events, where one or more atoms move over an energy barrier to a new potential energy basin, the @@ -43,23 +43,24 @@ effect of the bias potential is to induce more rapid transitions. This can lead to a dramatic speed-up in the rate at which events occurs, without altering their relative frequencies, thus leading to an overall increase in the elapsed real time of the simulation as -compared to simulating for the same number of timesteps with normal -MD. See the "hyper"_hyper.html doc page for a more general discussion -of hyperdynamics and citations that explain both GHD and LHD. +compared to running for the same number of timesteps with normal MD. +See the "hyper"_hyper.html doc page for a more general discussion of +hyperdynamics and citations that explain both GHD and LHD. -The equations and logic used by this fix to perform GHD are as -follows. This follows the description of GHD given in -"(Voter2013)"_#Voter2013ghd. The bond-boost form of a bias potential -for GHD is due to Miron and Fichthorn as described in -"(Miron)"_#Mironghd. Here we use a simplified version of bond-boost -GHD where a single bond is biased at any one timestep. +The equations and logic used by this fix to perform GHD follow the +description given in "(Voter2013)"_#Voter2013ghd. The bond-boost form +of a bias potential for HD is due to Miron and Fichthorn as described +in "(Miron)"_#Mironghd. In LAMMPS we use a simplified version of +bond-boost GHD where a single bond in the system is biased at any one +timestep. -Bonds are defined between every pair of I,J atoms whose R0ij distance +Bonds are defined between each pair of I,J atoms whose R0ij distance is less than {cutbond}, when the system is in a quenched state (minimum) energy. Note that these are not "bonds" in a covalent sense. A bond is simply any pair of atoms that meet the distance -criterion. {Cutbond} is an argument to this fix; it is discussed more -below. +criterion. {Cutbond} is an argument to this fix; it is discussed +below. A bond is only formed if one or both of the I.J atoms are in +the specified group. The current strain of bond IJ (when running dynamics) is defined as @@ -74,16 +75,16 @@ Vij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor = 0 otherwise :pre where the prefactor {Vmax} and the cutoff {qfactor} are arguments to -this fix; they are discussed more below. This functional form is an +this fix; they are discussed below. This functional form is an inverse parabola centered at 0.0 with height Vmax and which goes to 0.0 at +/- qfactor. Let Emax = the maximum of abs(Eij) for all IJ bonds in the system on a given timestep. On that step, Vij is added as a bias potential to -only the two atoms IJ in the bond with strain Emax, call it Vij(max). -Note that Vij(max) will be 0.0 if Emax >= qfactor on that timestep. -Also note that Vij(max) is added to the normal interatomic potential -that is computed between all atoms in the system. +only the single bond with strain Emax, call it Vij(max). Note that +Vij(max) will be 0.0 if Emax >= qfactor on that timestep. Also note +that Vij(max) is added to the normal interatomic potential that is +computed between all atoms in the system at every step. The derivative of Vij(max) with respect to the position of each atom in the Emax bond gives a force Fij(max) acting on the bond as @@ -91,19 +92,21 @@ in the Emax bond gives a force Fij(max) acting on the bond as Fij(max) = - dVij(max)/dEij = 2 Vmax Eij / qfactor^2 for abs(Eij) < qfactor = 0 otherwise :pre -which can be decomposed into an equal and opposite force acting (only) -on the two I,J atoms in the Emax bond. +which can be decomposed into an equal and opposite force acting on +only the two I,J atoms in the Emax bond. -The boost factor in time for the system is given each timestep I by +The time boost factor for the system is given each timestep I by Bi = exp(beta * Vij(max)) :pre where beta = 1/kTequil, and {Tequil} is the temperature of the system and an arguement to this fix. Note that Bi >= 1 at every step. -NOTE: Must use langevin set to Tequil also. LAMMPS does not -check that you do this. -as maintained by a thermostat for constant NVT dynamics. +NOTE: To run GHD, the input script must also use the "fix +langevin"_fix_langevin.html command to thermostat the atoms at the +same {Tequil} as specified by this fix, so that the system is running +constant-temperature (NVT) dynamics. LAMMPS does not check that this +is done. The elapsed system time t_hyper for a GHD simulation running for {N} timesteps is simply @@ -114,34 +117,59 @@ where dt is the timestep size defined by the "timestep"_timestep.html command. The effective time acceleration due to GHD is thus t_hyper / N*dt, where the denominator is elapsed time for a normal MD run. -Note that in global hyperdynamics, the boost factor varies from -timestep to timestep. Likewise, which bond has Emax strain and thus -which pair of atoms the bias potential is added to, will also vary -from timestep to timestep. +Note that in GHD, the boost factor varies from timestep to timestep. +Likewise, which bond has Emax strain and thus which pair of atoms the +bias potential is added to, will also vary from timestep to timestep. +This in contrast to local hyperdynamics (LHD) where the boost factor +is an input parameter; see the "fix hyper/local"_fix_hyper_local.html +doc page for details. :line +Here is additional information on the input parameters for GHD. + The {cutbond} argument is the cutoff distance for defining bonds -between pairs of nearby atoms. A pair of atoms in their equilibrium, -minimum-energy config, which are a distance Rij < cutbond, are defined -as a bonded pair. This should normally be roughly ~25% larger than -the nearest-neighbor distance in a crystalline lattice. +between pairs of nearby atoms. A pair of I,J atoms in their +equilibrium, minimum-energy configuration, which are separated by a +distance Rij < {cutbond}, are flagged as a bonded pair. Setting +{cubond} to be ~25% larger than the nearest-neighbor distance in a +crystalline lattice is a typical choice for solids, so that bonds +exist only between nearest neighbor pairs. The {qfactor} argument is the limiting strain at which the bias -potential goes to 0.0. +potential goes to 0.0. It is dimensionless, so a value of 0.3 means a +bond distance can be up to 30% larger or 30% smaller than the +equilibrium (quenched) R0ij distance and the two atoms in the bond +could still experience a non-zero bias force. If {qfactor} is set too large, then transitions from one energy basin to another are affected because the bias potneial is non-zero at the -transitions. If {qfactor} is set too small than little boost is -achieved because some the Eij strain of some bond is (nearly) always -exceeding {qfactor). Note +transition state (e.g. saddle point). If {qfactor} is set too small +than little boost is achieved because the Eij strain of some bond in +the system will (nearly) always exceed {qfactor). A value of 0.3 for +{qfactor} is typically a reasonable value. -The {Vmax} argument is the prefactor on the bias potential. -It should be set to a value smaller than +The {Vmax} argument is the prefactor on the bias potential. It should +be set to a value less than the smallest barrier height for an event +to occur. Otherwise the applied bias potential may be large enough +(when added to the interatomic potential) to produce a local energy +basin with a maxima in the center. This can produce artificial energy +minima in the same basin that trap an atom. Or if {Vmax} is even +larger, it may induce an atom(s) to rapidly transition to another +energy basin. Both cases are "bad dynamics" which violate the +assumptions of GHD that guarantee an accelerated time-accurate +trajectory of the system. -The {Tequil} argument is part of the beta term in the exponential -factor that determines how much boost is achieved as a function of the -bias potential. +The {Tequil} argument is the temperature at which the system is +simulated; see the comment above about the "fix +langevin"_fix_langevin.html thermostatting. It is also part of the +beta term in the exponential factor that determines how much boost is +achieved as a function of the bias potential. + +In general, the lower the value of {Tequil} and the higher the value +of {Vmax}, the more boost will be achieved by the GHD algorithm. + +:line [Restart, fix_modify, output, run start/stop, minimize info:] @@ -152,7 +180,7 @@ The "fix_modify"_fix_modify.html {energy} option is supported by this fix to add the energy of the bias potential to the the system's potential energy as part of "thermodynamic output"_thermo_style.html. -This fix computes a global scalar and global vector of length 10, +This fix computes a global scalar and global vector of length 11, which can be accessed by various "output commands"_Section_howto.html#howto_15. The scalar is the magnitude of the bias potential (energy units) applied on the current timestep. @@ -164,30 +192,30 @@ The vector stores the following quantities: 4 = ID of second atom in the max-strain bond 5 = average # of bonds/atom on this step :ul -6 = fraction of steps with bias = 0.0 during this run +6 = fraction of timesteps with bias = 0.0 during this run 7 = max drift distance of any atom during this run (distance units) 8 = max bond length during this run (distance units) :ul -9 = cummulative hyper time since fix created (time units) -10 = cummulative count of event timesteps since fix created -11 = cummulative count of atoms in events since fix created :ul +9 = cummulative hyper time since fix was defined (time units) +10 = cummulative count of event timesteps since fix was defined +11 = cummulative count of atoms in events since fix was defined :ul -The first 5 quantities are for the current timestep. The quantities -6-8 are for the current run. The quantities 9-11 are cummulative -across multiple runs (since the fix was defined in the input script). +The first 5 quantities are for the current timestep. Quantities 6-8 +are for the current hyper run. Quantities 9-11 are cummulative across +multiple runs (since the fix was defined in the input script). For value 10, events are checked for by the "hyper"_hyper.html command -once every {Nevent} timesteps. This value is the count of the number -of timesteps on which one (or more) events was detected. It is NOT -the number of distinct events, since more than one physical event may +once every {Nevent} timesteps. This value is the count of those +timesteps on which one (or more) events was detected. It is NOT the +number of distinct events, since more than one physical event may occur in the same {Nevent} time window. For value 11, each time the "hyper"_hyper.html command checks for an -event, the event compute it uses will flag zero or more atoms as +event, it invokes a compute to flag zero or more atoms as participating in an event. E.g. atoms that have displaced more than -some distance from the previous quench state. This value is the count -of the number of atoms participating in any of the events that were -found. +some distance from the previous quench state. Value 11 is the +cummulative count of the number of atoms participating in any of the +events that were found. The scalar and vector values calculated by this fix are all "intensive". @@ -199,8 +227,8 @@ minimization"_minimize.html. [Restrictions:] This command can only be used if LAMMPS was built with the REPLICA -package. See the "Build package"_Build_package.html doc -page for more info. +package. See the "Build package"_Build_package.html doc page for more +info. [Related commands:] @@ -208,9 +236,11 @@ page for more info. [Default:] None -:link(Voter2013) +:line + +:link(Voter2013ghd) [(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, 144110 (2013). -:link(Miron) +:link(Mironghd) [(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index ef98637fa5..6585167f3b 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -18,7 +18,7 @@ cutbond = max distance at which a pair of atoms is considered bonded (distance u qfactor = max strain at which bias potential goes to 0.0 (unitless) :l Vmax = estimated height of bias potential (energy units) :l Tequil = equilibration temperature (temperature units) :l -Dcut = min distance between boosted bonds (distance units) :l +Dcut = minimum distance between boosted bonds (distance units) :l alpha = boostostat relaxation time (time units) :l boost = desired time boost factor (unitless) :l zero or more keyword/value pairs may be appended :l @@ -40,66 +40,115 @@ fix 1 all hyper/local 1.0 0.3 0.8 300.0 :pre [Description:] This fix is meant to be used with the "hyper"_hyper.html command to -perform a bond-boost hyperdynamics simulation. The role of this fix -is a select a multiple pairs of atoms within the system at each -timestep to add a local bias potential to, which will alter their -dynamics. This is in contrast to the "fix -hyper/global"_fix_hyper_global.html command, which adds a global bias -potential to a single pair of atoms at each timestep. +perform a bond-boost local hyperdynamics (LHD) simulation. The role +of this fix is to a select multiple pairs of atoms in the system at +each timestep to add a local bias potential to, which will alter the +dynamics of the system in a manner that effectively accelerates time. +This is in contrast to the "fix hyper/global"_fix_hyper_global.html +command, which can be user to perform a global hyperdynamics (GHD) +simulation, by adding a global bias potential to a single pair of +atoms at each timestep. GHD can time accelerate a small simulation +with up to a few 100 atoms. For larger systems, LHD is needed to +achieve good time acceleration. For a system that undergoes rare transition events, where one or more -atoms move across an energy barrier to a new potential energy basin, -the effect of the bias potential is to induce more rapid transitions. +atoms move over an energy barrier to a new potential energy basin, the +effect of the bias potential is to induce more rapid transitions. This can lead to a dramatic speed-up in the rate at which events occurs, without altering their relative frequencies, thus leading to -an overall dramatic speed-up in the effective wall-clock time of the -simulation. +an overall increase in the elapsed real time of the simulation as +compared to running for the same number of timesteps with normal MD. +See the "hyper"_hyper.html doc page for a more general discussion of +hyperdynamics and citations that explain both GHD and LHD. -Cite various papers. +The equations and logic used by this fix to perform LHD follow the +description given in "(Voter2013)"_#Voter2013lhd. The bond-boost form +of a bias potential for HD is due to Miron and Fichthorn as described +in "(Miron)"_#Mironlhd. -The current strain of a bond IJ is defined as +To understand this description, you should first read the description +of the GHD algorithm on the "fix hyper/global"_fix_hyper/global.html +doc page. This description of LHD builds on the GHD description. -Eij = (Rij - R0ij) / R0ij +The definition of bonds, Eij, and Emax are the same for GHD and LHD. +The formula for Vij(max) and Fij(max) are also the same except for a +pre-factor Cij, explained below. -Emax = is the max of the absolute value of Eij for all IJ bonds. +The bias energy Vij applied to a bond IJ with maximum strain is -dVij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < q - = 0 otherwise +Vij(max) = Cij * Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor + = 0 otherwise :pre -Delta Vbias = minimum of dVij for all IJ bonds +The derivative of Vij(max) with respect to the position of each atom +in the IJ bond gives a force Fij(max) acting on the bond as -The boost factor B = exp(beta * Delta Vbias) -for a single timestep. +Fij(max) = - dVij(max)/dEij = 2 Cij Vmax Eij / qfactor^2 for abs(Eij) < qfactor + = 0 otherwise :pre -Thus the accumulated hypertime is simply +which can be decomposed into an equal and opposite force acting on +only the two I,J atoms in the IJ bond. + +The key difference is that in GHD this bias energy and force is added +(on a particular timestep) to only one bond (pair of atoms) in the +system, the bond which has maximum strain Emax. + +In LHD, the bias energy and force -t_hyper = Sum (i = 1 to Nsteps) Bi * dt NOTE: Add eqs for boostostat and boost coeff. Explain how many bonds are boosted simultaneously and how to choose boost factor and initial Vmax. + + +:line + +Here is additional information on the input parameters for GHD. + The {cutbond} argument is the cutoff distance for defining bonds -between pairs of nearby atoms. A pair of atoms in their equilibrium, -minimum-energy config, which are a distance Rij < cutbond, are -defined as a bonded pair. +between pairs of nearby atoms. A pair of I,J atoms in their +equilibrium, minimum-energy configuration, which are separated by a +distance Rij < {cutbond}, are flagged as a bonded pair. Setting +{cubond} to be ~25% larger than the nearest-neighbor distance in a +crystalline lattice is a typical choice for solids, so that bonds +exist only between nearest neighbor pairs. -The {qfactor} argument is the limiting strain at which -the Vbias (the bias potential) goes to 0.0. +The {qfactor} argument is the limiting strain at which the bias +potential goes to 0.0. It is dimensionless, so a value of 0.3 means a +bond distance can be up to 30% larger or 30% smaller than the +equilibrium (quenched) R0ij distance and the two atoms in the bond +could still experience a non-zero bias force. -If qfactor is too big, then transitions are affected b/c -the bias energy is non-zero at the transitions. If it is -too small than not must boost is achieved for a large system -with many bonds (some bonds Eij always exceeds qfactor). +If {qfactor} is set too large, then transitions from one energy basin +to another are affected because the bias potneial is non-zero at the +transition state (e.g. saddle point). If {qfactor} is set too small +than little boost can be achieved because the Eij strain of some bond in +the system will (nearly) always exceed {qfactor). A value of 0.3 for +{qfactor} is typically a reasonable value. -The {Vmax} argument is the initial prefactor on the bias potential. -Should be chosen as estimate of final. Will be adjusted by -boost cooeficient +What about requested boost -The {Tequil} argument is part of the beta term in the -exponential factor that determines how much boost is + +The {Vmax} argument is the prefactor on the bias potential. It should +be set to a value less than the smallest barrier height for an event +to occur. Otherwise the applied bias potential may be large enough +(when added to the interatomic potential) to produce a local energy +basin with a maxima in the center. This can produce artificial energy +minima in the same basin that trap an atom. Or if {Vmax} is even +larger, it may induce an atom(s) to rapidly transition to another +energy basin. Both cases are "bad dynamics" which violate the +assumptions of GHD that guarantee an accelerated time-accurate +trajectory of the system. + +The {Tequil} argument is the temperature at which the system is +simulated; see the comment above about the "fix +langevin"_fix_langevin.html thermostatting. It is also part of the +beta term in the exponential factor that determines how much boost is achieved as a function of the bias potential. +In general, the lower the value of {Tequil} and the higher the value +of {Vmax}, the more boost will be achieved by the GHD algorithm. + The {Dcut} argument is the distance required between two bonds for them to be selected as both being boosted. The distance is between the center points of each bond. Actually between any pair of atoms in @@ -122,6 +171,8 @@ bonded atoms may become unphysically large, leading to bad dynamics. If chosen too small, the hyperdynamics run may be inefficient in the sense that events take a long time to occur. +:line + [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart @@ -165,11 +216,10 @@ is run (distance units) 22 = cummulative count of atoms in events since fix created 23 = cummulative # of new bonds since fix created :ul -The first quantities (1-5) are for the current timestep. The -quantities 6-19 are for the current hyper run. They are reset each -time a new hyper run is performed. The quantities 20-23 are -cummulative across multiple hyper runs, They are only set to initial -values once, when this fix is defined in the input script. +The first quantities (1-5) are for the current timestep. Quantities +6-19 are for the current hyper run. They are reset each time a new +hyper run is performed. Quantities 20-23 are cummulative across +multiple runs (since the fix was defined in the input script). For value 6, the numerator is a count of all biased bonds on every timestep whose bias value = 0.0. The denominator is the count of all @@ -198,3 +248,12 @@ LAMMPS"_Section_start.html#start_3 section for more info. [Default:] None +:line + +:link(Voter2013lhd) +[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, +144110 (2013). + +:link(Mironlhd) +[(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). + From 0c8ce199af59a490459f7a7f5e89fa6e2659199c Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 11 Oct 2018 16:32:30 -0600 Subject: [PATCH 093/273] more updates to hyper docs --- doc/src/fix_hyper_global.txt | 77 ++++++---- doc/src/fix_hyper_local.txt | 268 ++++++++++++++++++++++++++--------- 2 files changed, 245 insertions(+), 100 deletions(-) diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index cd66f5585d..655e2655db 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -47,12 +47,12 @@ compared to running for the same number of timesteps with normal MD. See the "hyper"_hyper.html doc page for a more general discussion of hyperdynamics and citations that explain both GHD and LHD. -The equations and logic used by this fix to perform GHD follow the -description given in "(Voter2013)"_#Voter2013ghd. The bond-boost form -of a bias potential for HD is due to Miron and Fichthorn as described -in "(Miron)"_#Mironghd. In LAMMPS we use a simplified version of -bond-boost GHD where a single bond in the system is biased at any one -timestep. +The equations and logic used by this fix and described here to perform +GHD follow the description given in "(Voter2013)"_#Voter2013ghd. The +bond-boost form of a bias potential for HD is due to Miron and +Fichthorn as described in "(Miron)"_#Mironghd. In LAMMPS we use a +simplified version of bond-boost GHD where a single bond in the system +is biased at any one timestep. Bonds are defined between each pair of I,J atoms whose R0ij distance is less than {cutbond}, when the system is in a quenched state @@ -87,7 +87,7 @@ that Vij(max) is added to the normal interatomic potential that is computed between all atoms in the system at every step. The derivative of Vij(max) with respect to the position of each atom -in the Emax bond gives a force Fij(max) acting on the bond as +in the Emax bond gives a bias force Fij(max) acting on the bond as Fij(max) = - dVij(max)/dEij = 2 Vmax Eij / qfactor^2 for abs(Eij) < qfactor = 0 otherwise :pre @@ -100,7 +100,7 @@ The time boost factor for the system is given each timestep I by Bi = exp(beta * Vij(max)) :pre where beta = 1/kTequil, and {Tequil} is the temperature of the system -and an arguement to this fix. Note that Bi >= 1 at every step. +and an argument to this fix. Note that Bi >= 1 at every step. NOTE: To run GHD, the input script must also use the "fix langevin"_fix_langevin.html command to thermostat the atoms at the @@ -108,21 +108,21 @@ same {Tequil} as specified by this fix, so that the system is running constant-temperature (NVT) dynamics. LAMMPS does not check that this is done. -The elapsed system time t_hyper for a GHD simulation running for {N} +The elapsed time t_hyper for a GHD simulation running for {N} timesteps is simply t_hyper = Sum (i = 1 to N) Bi * dt :pre where dt is the timestep size defined by the "timestep"_timestep.html command. The effective time acceleration due to GHD is thus t_hyper / -N*dt, where the denominator is elapsed time for a normal MD run. +N*dt, where N*dt is elapsed time for a normal MD run of N timesteps. Note that in GHD, the boost factor varies from timestep to timestep. Likewise, which bond has Emax strain and thus which pair of atoms the bias potential is added to, will also vary from timestep to timestep. -This in contrast to local hyperdynamics (LHD) where the boost factor -is an input parameter; see the "fix hyper/local"_fix_hyper_local.html -doc page for details. +This is in contrast to local hyperdynamics (LHD) where the boost +factor is an input parameter; see the "fix +hyper/local"_fix_hyper_local.html doc page for details. :line @@ -143,22 +143,32 @@ equilibrium (quenched) R0ij distance and the two atoms in the bond could still experience a non-zero bias force. If {qfactor} is set too large, then transitions from one energy basin -to another are affected because the bias potneial is non-zero at the +to another are affected because the bias potential is non-zero at the transition state (e.g. saddle point). If {qfactor} is set too small than little boost is achieved because the Eij strain of some bond in the system will (nearly) always exceed {qfactor). A value of 0.3 for {qfactor} is typically a reasonable value. -The {Vmax} argument is the prefactor on the bias potential. It should -be set to a value less than the smallest barrier height for an event -to occur. Otherwise the applied bias potential may be large enough -(when added to the interatomic potential) to produce a local energy -basin with a maxima in the center. This can produce artificial energy -minima in the same basin that trap an atom. Or if {Vmax} is even -larger, it may induce an atom(s) to rapidly transition to another -energy basin. Both cases are "bad dynamics" which violate the -assumptions of GHD that guarantee an accelerated time-accurate -trajectory of the system. +The {Vmax} argument is the prefactor on the bias potential. Ideally, +tt should be set to a value slightly less than the smallest barrier +height for an event to occur. Otherwise the applied bias potential +may be large enough (when added to the interatomic potential) to +produce a local energy basin with a maxima in the center. This can +produce artificial energy minima in the same basin that trap an atom. +Or if {Vmax} is even larger, it may induce an atom(s) to rapidly +transition to another energy basin. Both cases are "bad dynamics" +which violate the assumptions of GHD that guarantee an accelerated +time-accurate trajectory of the system. + +Note that if {Vmax} is set too small, the GHD simulation will run +correctly. There will just be fewer events because the hyper time +(t_hyper equation above) will be shorter. + +NOTE: If you have no physical intuition as to the smallest barrier +height in your system, a reasonable strategy to determine the largest +{Vmax} you can use for an LHD model, is to run a sequence of +simulations with smaller and smaller {Vmax} values, until the event +rate does not change. The {Tequil} argument is the temperature at which the system is simulated; see the comment above about the "fix @@ -167,7 +177,7 @@ beta term in the exponential factor that determines how much boost is achieved as a function of the bias potential. In general, the lower the value of {Tequil} and the higher the value -of {Vmax}, the more boost will be achieved by the GHD algorithm. +of {Vmax}, the more boost will be achievable by the GHD algorithm. :line @@ -204,18 +214,23 @@ The first 5 quantities are for the current timestep. Quantities 6-8 are for the current hyper run. Quantities 9-11 are cummulative across multiple runs (since the fix was defined in the input script). +For value 7, drift is the distance an atom moves between timesteps +when the bond list is reset, i.e. between events. Atoms involved in +an event will typically move the greatest distance since others are +typically oscillating around their lattice site. + For value 10, events are checked for by the "hyper"_hyper.html command once every {Nevent} timesteps. This value is the count of those timesteps on which one (or more) events was detected. It is NOT the -number of distinct events, since more than one physical event may -occur in the same {Nevent} time window. +number of distinct events, since more than one event may occur in the +same {Nevent} time window. For value 11, each time the "hyper"_hyper.html command checks for an event, it invokes a compute to flag zero or more atoms as -participating in an event. E.g. atoms that have displaced more than -some distance from the previous quench state. Value 11 is the -cummulative count of the number of atoms participating in any of the -events that were found. +participating in one or more events. E.g. atoms that have displaced +more than some distance from the previous quench state. Value 11 is +the cummulative count of the number of atoms participating in any of +the events that were found. The scalar and vector values calculated by this fix are all "intensive". diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index 6585167f3b..e4cbc42c7f 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -10,7 +10,7 @@ fix hyper/local command :h3 [Syntax:] -fix ID group-ID hyper/local cutbond qfactor Vmax Tequil Dcut alpha boost :pre +fix ID group-ID hyper/local cutbond qfactor Vmax Tequil Dcut alpha Btarget :pre ID, group-ID are documented in "fix"_fix.html command :ulb,l hyper/local = style name of this fix command :l @@ -20,14 +20,9 @@ Vmax = estimated height of bias potential (energy units) :l Tequil = equilibration temperature (temperature units) :l Dcut = minimum distance between boosted bonds (distance units) :l alpha = boostostat relaxation time (time units) :l -boost = desired time boost factor (unitless) :l +Btarget = desired time boost factor (unitless) :l zero or more keyword/value pairs may be appended :l -keyword = {histo} or {lost} or {check/bias} or {check/coeff} - {histo} values = Nevery Nbin delta Nout - Nevery = histogram bond bias coefficients every this many timesteps - Nbin = # of histogram bins - delta = width of each histogram bin - Nout = output histogram counts every this many timesteps +keyword = {lost} or {check/bias} or {check/coeff} {lostbond} value = error/warn/ignore {check/bias} values = Nevery error/warn/ignore {check/coeff} values = Nevery error/warn/ignore :pre @@ -61,26 +56,26 @@ compared to running for the same number of timesteps with normal MD. See the "hyper"_hyper.html doc page for a more general discussion of hyperdynamics and citations that explain both GHD and LHD. -The equations and logic used by this fix to perform LHD follow the -description given in "(Voter2013)"_#Voter2013lhd. The bond-boost form -of a bias potential for HD is due to Miron and Fichthorn as described -in "(Miron)"_#Mironlhd. +The equations and logic used by this fix and described here to perform +LHD follow the description given in "(Voter2013)"_#Voter2013lhd. The +bond-boost form of a bias potential for HD is due to Miron and +Fichthorn as described in "(Miron)"_#Mironlhd. To understand this description, you should first read the description of the GHD algorithm on the "fix hyper/global"_fix_hyper/global.html doc page. This description of LHD builds on the GHD description. The definition of bonds, Eij, and Emax are the same for GHD and LHD. -The formula for Vij(max) and Fij(max) are also the same except for a +The formulas for Vij(max) and Fij(max) are also the same except for a pre-factor Cij, explained below. The bias energy Vij applied to a bond IJ with maximum strain is Vij(max) = Cij * Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor - = 0 otherwise :pre + = 0 otherwise :pre The derivative of Vij(max) with respect to the position of each atom -in the IJ bond gives a force Fij(max) acting on the bond as +in the IJ bond gives a bias force Fij(max) acting on the bond as Fij(max) = - dVij(max)/dEij = 2 Cij Vmax Eij / qfactor^2 for abs(Eij) < qfactor = 0 otherwise :pre @@ -88,22 +83,76 @@ Fij(max) = - dVij(max)/dEij = 2 Cij Vmax Eij / qfactor^2 for abs(Eij) < qfacto which can be decomposed into an equal and opposite force acting on only the two I,J atoms in the IJ bond. -The key difference is that in GHD this bias energy and force is added -(on a particular timestep) to only one bond (pair of atoms) in the -system, the bond which has maximum strain Emax. +The key difference is that in GHD a bias energy and force is added (on +a particular timestep) to only one bond (pair of atoms) in the system, +which is the bond with maximum strain Emax. -In LHD, the bias energy and force +In LHD, a bias energy and force can be added to multiple bonds +separated by the specified {Dcut} distance or more. A bond IJ is +biased if it is the maximum strain bond within its local +"neighborhood", which is defined as the bond IJ plus any neighbor +bonds within a distance {Dcut} from IJ. The "distance" between bond +IJ and bond KL is the minimum distance between any of the IK, IL, JK, +JL pairs of atoms. +For a large system, multiple bonds will typically meet this +requirement, and thus a bias potential Vij(max) will be applied to +many bonds on the same timestep. -NOTE: Add eqs for boostostat and boost coeff. -Explain how many bonds are boosted simultaneously -and how to choose boost factor and initial Vmax. +In LHD, all bonds store a Cij prefactor which appears in the Vij(max) +and Fij(max) equations above. Note that the Cij factor scales the +strength of the bias energy and forces whenever bond IJ is the maximum +strain bond in its neighborhood. +Cij is initialized to 1.0 when a bond between the I,J atoms is first +defined. The specified {Btarget} factor is then used to adjust the +Cij prefactors for each bond every timestep in the following manner. +An instantaneous boost factor Bij is computed each timestep +for each bond, as + +Bij = exp(beta * Vkl(max)) :pre + +where Vkl(max) is the bias energy of the maxstrain bond KL within bond +IJ's neighborhood, beta = 1/kTequil, and {Tequil} is the temperature +of the system and an argument to this fix. + +NOTE: To run LHD, the input script must also use the "fix +langevin"_fix_langevin.html command to thermostat the atoms at the +same {Tequil} as specified by this fix, so that the system is running +constant-temperature (NVT) dynamics. LAMMPS does not check that this +is done. + +Note that if IJ = KL, then bond IJ is a biased bond on that timestep, +otherwise it is not. But regardless, the boost factor Bij can be +thought of an estimate of time boost currently being applied within a +local region centered on bond IJ. For LHD, we want this to be the +specified {Btarget} value everywhere in the simulation domain. + +To accomplish this, if Bij < Btarget, the Cij prefactor for bond IJ is +incremented on the current timestep by an amount proportional to the +inverse of the specified {alpha} and the difference (Bij - Btarget). +Conversely if Bij > Btarget, Cij is decremented by the same amount. +This procedure is termed "boostostatting" in +"(Voter2013)"_#Voter2013lhd. It drives all of the individual Cij to +values such that when Vij{max} is applied as a bias to bond IJ, the +resulting boost factor Bij will be close to {Btarget} on average. +Thus the LHD time acceleration factor for the overall system is +effectively {Btarget}. + +Note that in LHD, the boost factor {Btarget} is specified by the user. +This is in contrast to global hyperdynamics (GHD) where the boost +factor varies each timestep and is computed as a function of {Vmax}, +Emax, and {Tequil}; see the "fix hyper/global"_fix_hyper_global.html +doc page for details. :line -Here is additional information on the input parameters for GHD. +Here is additional information on the input parameters for LHD. + +Note that the {cutbond}, {qfactor}, and {Tequil} arguments have the +same meaning as for GHD. The {Vmax} argument is slightly different. +The {Dcut}, {alpha}, and {Btarget} parameters are unique to LHD. The {cutbond} argument is the cutoff distance for defining bonds between pairs of nearby atoms. A pair of I,J atoms in their @@ -120,56 +169,92 @@ equilibrium (quenched) R0ij distance and the two atoms in the bond could still experience a non-zero bias force. If {qfactor} is set too large, then transitions from one energy basin -to another are affected because the bias potneial is non-zero at the +to another are affected because the bias potential is non-zero at the transition state (e.g. saddle point). If {qfactor} is set too small than little boost can be achieved because the Eij strain of some bond in the system will (nearly) always exceed {qfactor). A value of 0.3 for {qfactor} is typically a reasonable value. -What about requested boost +The {Vmax} argument is a fixed prefactor on the bias potential. There +is a also a dynamic prefactor Cij, driven by the choice of {Btarget} +as discussed above. The product of these should be a value less than +the smallest barrier height for an event to occur. Otherwise the +applied bias potential may be large enough (when added to the +interatomic potential) to produce a local energy basin with a maxima +in the center. This can produce artificial energy minima in the same +basin that trap an atom. Or if Cij*{Vmax} is even larger, it may +induce an atom(s) to rapidly transition to another energy basin. Both +cases are "bad dynamics" which violate the assumptions of LHD that +guarantee an accelerated time-accurate trajectory of the system. - -The {Vmax} argument is the prefactor on the bias potential. It should -be set to a value less than the smallest barrier height for an event -to occur. Otherwise the applied bias potential may be large enough -(when added to the interatomic potential) to produce a local energy -basin with a maxima in the center. This can produce artificial energy -minima in the same basin that trap an atom. Or if {Vmax} is even -larger, it may induce an atom(s) to rapidly transition to another -energy basin. Both cases are "bad dynamics" which violate the -assumptions of GHD that guarantee an accelerated time-accurate -trajectory of the system. +NOTE: It may seem that {Vmax} can be set to any value, and Cij will +compensate to reduce the overall prefactor if necessary. However the +Cij are initialized to 1.0 and the boostostatting procedure typically +operates slowly enough that there can be a time period of bad dynamics +if {Vmax} is set too large. A better strategy is to set {Vmax} to the +smallest barrier height for an event (the same as for GHD), so that +the Cij remain near unity. The {Tequil} argument is the temperature at which the system is simulated; see the comment above about the "fix langevin"_fix_langevin.html thermostatting. It is also part of the beta term in the exponential factor that determines how much boost is -achieved as a function of the bias potential. +achieved as a function of the bias potential. See the discussion of +the {Btarget} argument below. -In general, the lower the value of {Tequil} and the higher the value -of {Vmax}, the more boost will be achieved by the GHD algorithm. +As discussed above, the {Dcut} argument is the distance required +between two locally maxstrain bonds for them to both be selected as +biased bonds on the same timestep. Computationally, the larger {Dcut} +is, the more work (computation and communication) must be done each +timestep within the LHD algorithm. And the fewer bonds can be +simultaneously biased, which may mean the specified {Btarget} time +acceleration cannot be achieved. -The {Dcut} argument is the distance required between two bonds for -them to be selected as both being boosted. The distance is between -the center points of each bond. Actually between any pair of atoms in -either bond. +Physically {Dcut} should be a long enough distance that biasing two +pairs of atoms that close together will not influence the dynamics of +each pair. E.g. something like 2x the cutoff of the interatomic +potential. In practice a {Dcut} value of ~10 Angstroms seems to work +well for many solid-state systems. -The {alpha} argument is a pre-factor on the update equation -for each atom's boostostat: +As described above the {alpha} argument is a pre-factor in the +boostostat update equation for each bond's Cij prefactor. {Alpha} is +specified in time units, similar to other thermostat or barostat +damping parameters. It is roughly the physical time it will take the +boostostat to adjust a Cij value from a too high (or too low) value to +a correct one. An {alpha} setting of a few ps is typically good for +solid-state systems. Note that the {alpha} argument here is the +inverse of the alpha parameter discussed in +"(Voter2013)"_#Voter2013lhd. -NOTE: give equation above +The {Btarget} argument is the desired time boost factor (a value > 1) +that all the atoms in the system will experience. The elapsed time +t_hyper for an LHD simulation running for {N} timesteps is simply -Note that the units for {alpha} are in time units, similar -to other thermostat or barostat damping parameters +t_hyper = Btarget * N*dt :pre -The {boost} argument is the desired boost factor (e.g. 100x) -that all the atoms in the system will experience. +where dt is the timestep size defined by the "timestep"_timestep.html +command. The effective time acceleration due to LHD is thus t_hyper / +N*dt = Btarget, where N*dt is elapsed time for a normal MD run +of N timesteps. -NOTE: explain how to choose good value for this. If this parameter is -chosen to be too large, then the bias potential applied to pairs of -bonded atoms may become unphysically large, leading to bad dynamics. -If chosen too small, the hyperdynamics run may be inefficient in the -sense that events take a long time to occur. +You cannot choose an arbitrarily large setting for {Btarget}. The +maximum value you should choose is + +Btarget = exp(beta * Vsmall) :pre + +where Vsmall is the smallest event barrier height in your system, beta += 1/kTequil, and {Tequil} is the specified temperature of the system +(both by this fix and the Langevin thermostat). + +Note that if {Btarget} is set smaller than this, the LHD simulation +will run correctly. There will just be fewer events because the hyper +time (t_hyper equation above) will be shorter. + +NOTE: If you have no physical intuition as to the smallest barrier +height in your system, a reasonable strategy to determine the largest +{Btarget} you can use for an LHD model, is to run a sequence of +simulations with smaller and smaller {Btarget} values, until the event +rate does not change. :line @@ -189,21 +274,20 @@ the bias potential (energy units) applied on the current timestep, summed over all biased bonds. The vector stores the following quantities: -1 = # of boosted bonds on this step -2 = max strain of any bond on this step (unitless) -3 = average bias potential for all bonds on this step (energy units) -4 = average bonds/atom on this step -5 = average neighbor bonds/bond on this step :ul +1 = # of biased bonds on this step +2 = max strain Eij of any bond on this step (unitless) +3 = average bias potential for all biased bonds on this step (energy units) +4 = average # of bonds/atom on this step +5 = average neighbor bonds/bond on this step within {Dcut} :ul 6 = fraction of steps and bonds with no bias during this run 7 = max drift distance of any atom during this run (distance units) 8 = max bond length during this run (distance units) -9 = average # of boosted bonds/step during this run -10 = average bias potential for all bonds during this run (energy units) -11 = max bias potential for any bond during this run (energy units) -12 = min bias potential for any bond during this run (energy units) -13 = max distance from my box of any ghost atom with maxstrain < qfactor during th -is run (distance units) +9 = average # of biased bonds/step during this run +10 = average bias potential for all biased bonds during this run (energy units) +11 = max bias potential for any biased bond during this run (energy units) +12 = min bias potential for any biased bond during this run (energy units) +13 = max distance from my sub-box of any ghost atom with maxstrain < qfactor during this run (distance units) 14 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units) 15 = count of ghost neighbor atoms not found on reneighbor steps during this run 16 = count of lost bond partners during this run @@ -222,13 +306,60 @@ hyper run is performed. Quantities 20-23 are cummulative across multiple runs (since the fix was defined in the input script). For value 6, the numerator is a count of all biased bonds on every -timestep whose bias value = 0.0. The denominator is the count of all -biased bonds on all timesteps. +timestep whose bias energy = 0.0 due to Eij >= {qfactor}. The +denominator is the count of all biased bonds on all timesteps. + +For value 7, drift is the distance an atom moves between timesteps +when the bond list is reset, i.e. between events. Atoms involved in +an event will typically move the greatest distance since others are +typically oscillating around their lattice site. For values 13 and 14, the maxstrain of a ghost atom is the maxstrain of any bond it is part of, and it is checked for ghost atoms within the bond neighbor cutoff. +Values 15-19 are mostly useful for debugging and diagnositc purposes. + +For values 15-17, it is possible that a ghost atom owned by another +processor will move far enough (e.g. as part of an event-in-progress) +that it will no longer be within the communication cutoff distance for +acquiring ghost atoms. Likewise it may be a ghost atom bond partner +that cannot be found because it has moved too far. These values count +those occurrences. Because they typically involve atoms that are part +of events, they do not usually indicate bad dynamics. Value 16 is the +average bias coefficient for bonds where a partner atom was lost. + +For value 18, no two bonds should be biased if they are within a +{Dcut} distance of each other. This value should be zero, indicating +that no pair of bonds "overlap", meaning they are closer than {Dcut} +from each other. + +For value 19, the same bias coefficient is stored by both atoms in an +IJ bond. This value should be zero, indicating that for all bonds, +each atom in the bond stores the a bias coefficient with the same +value. + +Value 20 is simply the specified {boost} factor times the number of +timestep times the timestep size. + +For value 21, events are checked for by the "hyper"_hyper.html command +once every {Nevent} timesteps. This value is the count of those +timesteps on which one (or more) events was detected. It is NOT the +number of distinct events, since more than one event may occur in the +same {Nevent} time window. + +For value 22, each time the "hyper"_hyper.html command checks for an +event, it invokes a compute to flag zero or more atoms as +participating in one or more events. E.g. atoms that have displaced +more than some distance from the previous quench state. Value 22 is +the cummulative count of the number of atoms participating in any of +the events that were found. + +Value 23 tallies the number of new bonds created by the bond reset +operation. Bonds between a specific I,J pair of atoms may persist for +the entire hyperdynamics simulation if neither I or J are involved in +an event. + The scalar and vector values calculated by this fix are all "intensive". @@ -256,4 +387,3 @@ LAMMPS"_Section_start.html#start_3 section for more info. :link(Mironlhd) [(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). - From d7a479d2f6642d41e0e2c8b2f752d5fec272d07f Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 11 Oct 2018 16:51:01 -0600 Subject: [PATCH 094/273] hyper example dir --- examples/README | 1 + examples/hyper/adatoms.list.37K | 184 +++++ examples/hyper/in.hyper.global | 99 +++ examples/hyper/in.hyper.local | 119 +++ examples/hyper/ptvoterlammps.eam | 1206 ++++++++++++++++++++++++++++++ 5 files changed, 1609 insertions(+) create mode 100644 examples/hyper/adatoms.list.37K create mode 100644 examples/hyper/in.hyper.global create mode 100644 examples/hyper/in.hyper.local create mode 100644 examples/hyper/ptvoterlammps.eam diff --git a/examples/README b/examples/README index 3c9c299819..e03dacec82 100644 --- a/examples/README +++ b/examples/README @@ -78,6 +78,7 @@ friction: frictional contact of spherical asperities between 2d surfaces gcmc: Grand Canonical Monte Carlo (GCMC) via the fix gcmc command granregion: use of fix wall/region/gran as boundary on granular particles hugoniostat: Hugoniostat shock dynamics +hyper: global and local hyperdynamics of diffusion on Pt surface indent: spherical indenter into a 2d solid kim: use of potentials in Knowledge Base for Interatomic Models (KIM) latte: use of LATTE density-functional tight-binding quantum code diff --git a/examples/hyper/adatoms.list.37K b/examples/hyper/adatoms.list.37K new file mode 100644 index 0000000000..520570186c --- /dev/null +++ b/examples/hyper/adatoms.list.37K @@ -0,0 +1,184 @@ +create_atoms 1 single 27.5 9.5 4 +create_atoms 1 single 16 9 4 +create_atoms 1 single 10 12 4 +create_atoms 1 single 31 44 4 +create_atoms 1 single 13 17 4 +create_atoms 1 single 8.5 28.5 4 +create_atoms 1 single 23 26 4 +create_atoms 1 single 38 27 4 +create_atoms 1 single 37.5 4.5 4 +create_atoms 1 single 41.5 47.5 4 +create_atoms 1 single 20.5 37.5 4 +create_atoms 1 single 5 8 4 +create_atoms 1 single 2.5 16.5 4 +create_atoms 1 single 38.5 45.5 4 +create_atoms 1 single 9 0 4 +create_atoms 1 single 39 32 4 +create_atoms 1 single 45.5 11.5 4 +create_atoms 1 single 40 0 4 +create_atoms 1 single 44.5 2.5 4 +create_atoms 1 single 4.5 44.5 4 +create_atoms 1 single 24.5 13.5 4 +create_atoms 1 single 47.5 23.5 4 +create_atoms 1 single 1 20 4 +create_atoms 1 single 38.5 31.5 4 +create_atoms 1 single 12.5 12.5 4 +create_atoms 1 single 2 27 4 +create_atoms 1 single 21 5 4 +create_atoms 1 single 47 12 4 +create_atoms 1 single 32.5 46.5 4 +create_atoms 1 single 9.5 40.5 4 +create_atoms 1 single 8.5 2.5 4 +create_atoms 1 single 41.5 22.5 4 +create_atoms 1 single 29 11 4 +create_atoms 1 single 3.5 3.5 4 +create_atoms 1 single 5 21 4 +create_atoms 1 single 46.5 31.5 4 +create_atoms 1 single 35 46 4 +create_atoms 1 single 40.5 41.5 4 +create_atoms 1 single 10 22 4 +create_atoms 1 single 43.5 14.5 4 +create_atoms 1 single 42 42 4 +create_atoms 1 single 4 26 4 +create_atoms 1 single 19 34 4 +create_atoms 1 single 33 9 4 +create_atoms 1 single 0.5 45.5 4 +create_atoms 1 single 30.5 32.5 4 +create_atoms 1 single 25.5 5.5 4 +create_atoms 1 single 47.5 39.5 4 +create_atoms 1 single 15 13 4 +create_atoms 1 single 21 21 4 +create_atoms 1 single 14 28 4 +create_atoms 1 single 9 34 4 +create_atoms 1 single 7 38 4 +create_atoms 1 single 11 35 4 +create_atoms 1 single 20.5 45.5 4 +create_atoms 1 single 30.5 31.5 4 +create_atoms 1 single 32.5 2.5 4 +create_atoms 1 single 21.5 3.5 4 +create_atoms 1 single 23 12 4 +create_atoms 1 single 4.5 33.5 4 +create_atoms 1 single 46 43 4 +create_atoms 1 single 42.5 45.5 4 +create_atoms 1 single 4.5 10.5 4 +create_atoms 1 single 33.5 15.5 4 +create_atoms 1 single 24 5 4 +create_atoms 1 single 13 16 4 +create_atoms 1 single 16.5 23.5 4 +create_atoms 1 single 45.5 28.5 4 +create_atoms 1 single 44.5 5.5 4 +create_atoms 1 single 27.5 46.5 4 +create_atoms 1 single 44.5 12.5 4 +create_atoms 1 single 12 41 4 +create_atoms 1 single 6 4 4 +create_atoms 1 single 31.5 10.5 4 +create_atoms 1 single 1 44 4 +create_atoms 1 single 31 4 4 +create_atoms 1 single 21 33 4 +create_atoms 1 single 3 33 4 +create_atoms 1 single 15 10 4 +create_atoms 1 single 28.5 22.5 4 +create_atoms 1 single 43 1 4 +create_atoms 1 single 3.5 0.5 4 +create_atoms 1 single 41 37 4 +create_atoms 1 single 18.5 43.5 4 +create_atoms 1 single 17 27 4 +create_atoms 1 single 3 5 4 +create_atoms 1 single 18.5 23.5 4 +create_atoms 1 single 31.5 14.5 4 +create_atoms 1 single 41 31 4 +create_atoms 1 single 22 3 4 +create_atoms 1 single 14.5 40.5 4 +create_atoms 1 single 9 38 4 +create_atoms 1 single 36 42 4 +create_atoms 1 single 33 22 4 +create_atoms 1 single 15.5 47.5 4 +create_atoms 1 single 3 0 4 +create_atoms 1 single 25.5 27.5 4 +create_atoms 1 single 2.5 28.5 4 +create_atoms 1 single 29.5 28.5 4 +create_atoms 1 single 44.5 18.5 4 +create_atoms 1 single 26 40 4 +create_atoms 1 single 41 27 4 +create_atoms 1 single 39.5 5.5 4 +create_atoms 1 single 3 38 4 +create_atoms 1 single 35 29 4 +create_atoms 1 single 11 19 4 +create_atoms 1 single 18 1 4 +create_atoms 1 single 39.5 40.5 4 +create_atoms 1 single 46 17 4 +create_atoms 1 single 1.5 23.5 4 +create_atoms 1 single 28.5 23.5 4 +create_atoms 1 single 10 28 4 +create_atoms 1 single 19 47 4 +create_atoms 1 single 10.5 16.5 4 +create_atoms 1 single 38 45 4 +create_atoms 1 single 42.5 41.5 4 +create_atoms 1 single 47.5 42.5 4 +create_atoms 1 single 38 7 4 +create_atoms 1 single 10 44 4 +create_atoms 1 single 29.5 27.5 4 +create_atoms 1 single 45 30 4 +create_atoms 1 single 3 9 4 +create_atoms 1 single 8.5 35.5 4 +create_atoms 1 single 24 44 4 +create_atoms 1 single 47 4 4 +create_atoms 1 single 7.5 8.5 4 +create_atoms 1 single 32.5 41.5 4 +create_atoms 1 single 0.5 34.5 4 +create_atoms 1 single 11 8 4 +create_atoms 1 single 2 40 4 +create_atoms 1 single 25 24 4 +create_atoms 1 single 47.5 6.5 4 +create_atoms 1 single 39.5 28.5 4 +create_atoms 1 single 17 21 4 +create_atoms 1 single 32 43 4 +create_atoms 1 single 16.5 29.5 4 +create_atoms 1 single 34 34 4 +create_atoms 1 single 11.5 3.5 4 +create_atoms 1 single 39 22 4 +create_atoms 1 single 24.5 36.5 4 +create_atoms 1 single 33 31 4 +create_atoms 1 single 35.5 35.5 4 +create_atoms 1 single 14.5 34.5 4 +create_atoms 1 single 34 28 4 +create_atoms 1 single 37 41 4 +create_atoms 1 single 33 46 4 +create_atoms 1 single 27.5 28.5 4 +create_atoms 1 single 40.5 22.5 4 +create_atoms 1 single 27.5 1.5 4 +create_atoms 1 single 12 2 4 +create_atoms 1 single 36 43 4 +create_atoms 1 single 28.5 9.5 4 +create_atoms 1 single 20.5 25.5 4 +create_atoms 1 single 3 3 4 +create_atoms 1 single 38 33 4 +create_atoms 1 single 3 20 4 +create_atoms 1 single 35 11 4 +create_atoms 1 single 5 25 4 +create_atoms 1 single 36.5 6.5 4 +create_atoms 1 single 19.5 24.5 4 +create_atoms 1 single 27 41 4 +create_atoms 1 single 39.5 11.5 4 +create_atoms 1 single 21.5 2.5 4 +create_atoms 1 single 46.5 15.5 4 +create_atoms 1 single 13 24 4 +create_atoms 1 single 11 37 4 +create_atoms 1 single 11.5 31.5 4 +create_atoms 1 single 47 0 4 +create_atoms 1 single 25.5 17.5 4 +create_atoms 1 single 32 11 4 +create_atoms 1 single 8 17 4 +create_atoms 1 single 27.5 12.5 4 +create_atoms 1 single 25 7 4 +create_atoms 1 single 25.5 37.5 4 +create_atoms 1 single 12 15 4 +create_atoms 1 single 1 7 4 +create_atoms 1 single 18.5 47.5 4 +create_atoms 1 single 5 38 4 +create_atoms 1 single 42 19 4 +create_atoms 1 single 30.5 7.5 4 +create_atoms 1 single 42.5 7.5 4 +create_atoms 1 single 26.5 18.5 4 +create_atoms 1 single 18.5 1.5 4 +create_atoms 1 single 41.5 10.5 4 diff --git a/examples/hyper/in.hyper.global b/examples/hyper/in.hyper.global new file mode 100644 index 0000000000..8d770a1afb --- /dev/null +++ b/examples/hyper/in.hyper.global @@ -0,0 +1,99 @@ +# 3d EAM surface for global HD + +# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92 +# hop event on (100) surface is same distance +# exchange event is 2 atoms moving same distance + +variable Tequil index 800.0 +variable Vmax index 0.3 +variable qfactor index 0.3 +variable cutbond index 3.2 +variable cutevent index 1.1 +variable steps index 1000 +variable zoom index 1.8 + +units metal +atom_style atomic +atom_modify map array +boundary p p p + +lattice fcc 3.92 +region box block 0 6 0 6 0 4 +create_box 3 box +create_atoms 1 box + +mass * 1.0 + +change_box all z final -0.1 5.0 boundary p p f +create_atoms 2 single 3.5 3.5 4 + +# define frozen substrate and mobile atoms + +group adatom type 2 +region base block INF INF INF INF 0 1.8 +set region base type 3 +group base type 3 +group mobile type 1 2 + +# pair style + +pair_style eam/alloy +pair_coeff * * ptvoterlammps.eam Pt Pt Pt + +neighbor 0.5 bin +neigh_modify every 1 delay 5 check yes + +fix 1 mobile nve +fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 4879387 zero yes + +timestep 0.005 + +compute tmobile mobile temp + +thermo 100 +thermo_modify temp tmobile + +# thermal equilibration + +run 1000 +reset_timestep 0 + +# pin base so will not move during quenches + +fix freeze base setforce 0.0 0.0 0.0 + +# event detection + +compute event all event/displace ${cutevent} + +# hyper/global + +fix HG mobile hyper/global ${cutbond} ${qfactor} ${Vmax} ${Tequil} + +# thermo output + +thermo_style custom step temp pe f_HG & + f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] & + f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + +thermo_modify lost ignore +thermo_modify temp tmobile + +thermo 100 + +# dump output options + +region substrate block INF INF INF INF 1.8 3.8 +region adatoms block INF INF INF INF 3.8 INF +variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms) + +dump 1 all custom 10000000 dump.* id type x y z +dump_modify 1 pad 6 + +dump 5 all image 10000000 static.*.ppm v_acolor type & + zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump_modify 5 pad 9 amap 1 3 sa 1 3 blue red green + +# run + +hyper ${steps} 100 HG event min 1.0e-6 1.0e-6 100 100 dump 1 dump 5 diff --git a/examples/hyper/in.hyper.local b/examples/hyper/in.hyper.local new file mode 100644 index 0000000000..02635e634f --- /dev/null +++ b/examples/hyper/in.hyper.local @@ -0,0 +1,119 @@ +# 3d EAM surface for local HD + +# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92 +# hop event on (100) surface is same distance +# exchange event is 2 atoms moving same distance + +variable Tequil index 800.0 +variable Vmax index 0.3 +variable qfactor index 0.3 +variable cutbond index 3.2 +variable Dcut index 10.0 +variable cutevent index 1.1 +variable alpha index 200.0 +variable boost index 100.0 +variable ghostcut index 12.0 +variable steps index 1000 +variable nx index 1 +variable ny index 1 +variable zoom index 1.8 +variable seed index 59830932 +variable tol index 1.0e-15 +variable add index 184 + +units metal +atom_style atomic +atom_modify map array +boundary p p p +comm_modify cutoff ${ghostcut} + +lattice fcc 3.92 +region box block 0 6 0 6 0 4 +create_box 2 box +create_atoms 1 box + +mass * 1.0 + +change_box all z final -0.1 5.0 boundary p p f + +# replicate in xy + +replicate ${nx} ${ny} 1 + +# add adatoms + +include adatoms.list.${add} + +# define frozen substrate and mobile atoms + +region base block INF INF INF INF 0 1.8 +set region base type 2 +group base type 2 +group mobile type 1 + +# pair style + +pair_style eam/alloy +pair_coeff * * ptvoterlammps.eam Pt Pt + +neighbor 0.5 bin +neigh_modify every 1 delay 5 check yes + +fix 1 mobile nve +fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes + +timestep 0.005 + +compute tmobile mobile temp + +thermo 100 +thermo_modify temp tmobile + +# thermal equilibration + +run 1000 +reset_timestep 0 + +# pin base so will not move during quenches + +fix freeze base setforce 0.0 0.0 0.0 + +# event detection + +compute event all event/displace ${cutevent} + +# hyper/local + +fix HL mobile hyper/local ${cutbond} ${qfactor} ${Vmax} ${Tequil} & + ${Dcut} ${alpha} ${boost} + +# thermo output + +thermo_style custom step temp pe f_HL & + f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] & + f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] & + f_HL[14] f_HL[15] f_HL[16] f_HL[17] + +thermo_modify lost ignore +thermo_modify temp tmobile + +thermo 100 + +# dump + +write_dump all custom dump.initial id type x y z + +variable Dhop equal 0.1 +variable check atom "c_dsp[4] > v_Dhop" +compute dsp all displace/atom refresh check + +dump 1 all custom 1000000000 dump.* id type x y z +dump_modify 1 pad 6 thresh c_dsp[4] > ${Dhop} refresh c_dsp + +dump 5 all image 10000000 static.*.ppm v_acolor type & + zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump_modify 5 pad 6 amap 1 3 sa 1 3 blue red green + +# run + +hyper ${steps} 100 HL event min ${tol} ${tol} 1000 1000 dump 1 diff --git a/examples/hyper/ptvoterlammps.eam b/examples/hyper/ptvoterlammps.eam new file mode 100644 index 0000000000..780f76c0da --- /dev/null +++ b/examples/hyper/ptvoterlammps.eam @@ -0,0 +1,1206 @@ +lammps potential file (eam alloy format) generated from Voter potential +lammps potential file (eam alloy format) generated from Voter potential +lammps potential file (eam alloy format) generated from Voter potential + 1 Pt + 2000 4.4701153864882436E-04 2000 2.7893112429014507E-03 5.5758331745599996E+00 + 78 195.100000 3.9200000000E+00 fcc + 0.0000000000000000E+00 -9.3726378237257005E-02 -1.4662876812087147E-01 -1.9347407019915208E-01 -2.3636618878752805E-01 + -2.7644724047124986E-01 -3.1435333587770409E-01 -3.5048959265680196E-01 -3.8513634620198733E-01 -4.1849879865649925E-01 + -4.5073342521979493E-01 -4.8196329692534651E-01 -5.1228758935937202E-01 -5.4178787113806126E-01 -5.7053231810654348E-01 + -5.9857943522197787E-01 -6.2597854370043704E-01 -6.5277186883419602E-01 -6.7899694123453103E-01 -7.0468682804639060E-01 + -7.2987087311243415E-01 -7.5457527088636300E-01 -7.7882352856138171E-01 -8.0263687477682044E-01 -8.2603453431614704E-01 + -8.4903405777178687E-01 -8.7165002801416214E-01 -8.9385220540647714E-01 -9.1561604805012164E-01 -9.3696265603603790E-01 + -9.5791522083198610E-01 -9.7849204352602093E-01 -9.9870983002189262E-01 -1.0185836829573178E+00 -1.0381272638272998E+00 + -1.0573529357206635E+00 -1.0762720270513424E+00 -1.0948948965179912E+00 -1.1132310942413695E+00 -1.1312893591364621E+00 + -1.1490778953611478E+00 -1.1666042948848379E+00 -1.1838755886047883E+00 -1.2008983345443256E+00 -1.2176788724342509E+00 + -1.2342229130270710E+00 -1.2505358671573346E+00 -1.2666228433654478E+00 -1.2824887273263106E+00 -1.2981380914574538E+00 + -1.3135752421307874E+00 -1.3288043328425232E+00 -1.3438292731518049E+00 -1.3586538134484907E+00 -1.3732814919179874E+00 + -1.3877156903481436E+00 -1.4019596852675269E+00 -1.4160165195411898E+00 -1.4298892184938752E+00 -1.4435806245935652E+00 + -1.4570934731127474E+00 -1.4704303157498337E+00 -1.4835937210293269E+00 -1.4965861005543943E+00 -1.5094097763634138E+00 + -1.5220668946168692E+00 -1.5345597844428560E+00 -1.5468904285465384E+00 -1.5590608388617706E+00 -1.5710730238967714E+00 + -1.5829287935901264E+00 -1.5946300239478917E+00 -1.6061784714959348E+00 -1.6175758053312737E+00 -1.6288236803495129E+00 + -1.6399237328328120E+00 -1.6508775658053350E+00 -1.6616864780633585E+00 -1.6723521585867245E+00 -1.6828759298168119E+00 + -1.6932591433668713E+00 -1.7035031469456148E+00 -1.7136092934673612E+00 -1.7235788404216321E+00 -1.7334129925527970E+00 + -1.7431129415525604E+00 -1.7526799118629599E+00 -1.7621150270123394E+00 -1.7714193942410039E+00 -1.7805940695781992E+00 + -1.7896401398323107E+00 -1.7985586680727887E+00 -1.8073505775972039E+00 -1.8160168872573059E+00 -1.8245585986617567E+00 + -1.8329766123728359E+00 -1.8412717487946277E+00 -1.8494450474624169E+00 -1.8574973381639921E+00 -1.8654294796444515E+00 + -1.8732423326875589E+00 -1.8809365751665037E+00 -1.8885131534009967E+00 -1.8959729006831632E+00 -1.9033163629652998E+00 + -1.9105445288673943E+00 -1.9176579902949664E+00 -1.9246574529251665E+00 -1.9315437280249601E+00 -1.9383174597431190E+00 + -1.9449793109628810E+00 -1.9515299486677091E+00 -1.9579700404692790E+00 -1.9643002552280855E+00 -1.9705211806583449E+00 + -1.9766333617405571E+00 -1.9826376027386075E+00 -1.9885342577894889E+00 -1.9943241758785375E+00 -2.0000076194536822E+00 + -2.0055854487720719E+00 -2.0110580672478360E+00 -2.0164259310925137E+00 -2.0216897348658018E+00 -2.0268499570172342E+00 + -2.0319070992763257E+00 -2.0368616660436532E+00 -2.0417141625193631E+00 -2.0464650972204006E+00 -2.0511149792156478E+00 + -2.0556626254641155E+00 -2.0600932062541855E+00 -2.0644029110757671E+00 -2.0685927252091338E+00 -2.0726642405205045E+00 + -2.0766183085015473E+00 -2.0804563084627521E+00 -2.0841789444472600E+00 -2.0877876715975767E+00 -2.0912833087049787E+00 + -2.0946667371754817E+00 -2.0979390461364646E+00 -2.1011011655638017E+00 -2.1041539689908264E+00 -2.1070983231799296E+00 + -2.1099350832445327E+00 -2.1126651052269048E+00 -2.1152891919828996E+00 -2.1178081002315121E+00 -2.1202224086609767E+00 + -2.1225331395390516E+00 -2.1247409727944659E+00 -2.1268464388156634E+00 -2.1288503994083841E+00 -2.1307534549669689E+00 + -2.1325562312248580E+00 -2.1342594040743301E+00 -2.1358635733000813E+00 -2.1373694251012334E+00 -2.1387773840979936E+00 + -2.1400882690849263E+00 -2.1413025681337436E+00 -2.1424205997532089E+00 -2.1434431817712398E+00 -2.1443708051870782E+00 + -2.1452039706239008E+00 -2.1459431731625007E+00 -2.1465889038340724E+00 -2.1471416488460342E+00 -2.1476018892305180E+00 + -2.1479701028306253E+00 -2.1482467654917219E+00 -2.1484323484895125E+00 -2.1485273190235694E+00 -2.1485321403519091E+00 + -2.1484470126563591E+00 -2.1482725478832414E+00 -2.1480092510592486E+00 -2.1476573945273758E+00 -2.1472172776186471E+00 + -2.1466895754411510E+00 -2.1460744063021546E+00 -2.1453723228679569E+00 -2.1445836347777654E+00 -2.1437087028088562E+00 + -2.1427479348394045E+00 -2.1417016141723875E+00 -2.1405702824184050E+00 -2.1393539195776055E+00 -2.1380532461224977E+00 + -2.1366685327320152E+00 -2.1351997870841490E+00 -2.1336477168065300E+00 -2.1320125854350511E+00 -2.1302946140875285E+00 + -2.1284939647118084E+00 -2.1266112022137014E+00 -2.1246465848666309E+00 -2.1226003978007930E+00 -2.1204729315273694E+00 + -2.1182644700383473E+00 -2.1159753039047646E+00 -2.1136057135585435E+00 -2.1111559947046752E+00 -2.1086264260009924E+00 + -2.1060172997588604E+00 -2.1033288899537994E+00 -2.1005614905898651E+00 -2.0977153768416836E+00 -2.0947907756248489E+00 + -2.0917878008182256E+00 -2.0887069013851285E+00 -2.0855483983675080E+00 -2.0823124544060909E+00 -2.0789991822719793E+00 + -2.0756090236745779E+00 -2.0721422672568037E+00 -2.0685988388129202E+00 -2.0649793952896509E+00 -2.0612838733299972E+00 + -2.0575126163591118E+00 -2.0536659818292007E+00 -2.0497438839450974E+00 -2.0457469740596648E+00 -2.0416750125893741E+00 + -2.0375286763573190E+00 -2.0333078083100737E+00 -2.0290129419057399E+00 -2.0246440675858621E+00 -2.0202016369559090E+00 + -2.0156855754611871E+00 -2.0110963702778593E+00 -2.0064341266571577E+00 -2.0016989141897725E+00 -1.9968912606852574E+00 + -1.9920112279851745E+00 -1.9870587421187833E+00 -1.9820344220723491E+00 -1.9769384024112195E+00 -1.9717707649824567E+00 + -1.9665315667050240E+00 -1.9612212607967281E+00 -1.9558400270662160E+00 -1.9503880438033223E+00 -1.9448654878631326E+00 + -1.9392725542582359E+00 -1.9336093325766290E+00 -1.9278760759446676E+00 -1.9220730338277285E+00 -1.9162003844413846E+00 + -1.9102583041383305E+00 -1.9042469924777814E+00 -1.8981666388660647E+00 -1.8920174217314303E+00 -1.8857995289542948E+00 + -1.8795131257938429E+00 -1.8731583274011279E+00 -1.8667353651280862E+00 -1.8602444731266670E+00 -1.8536858396902449E+00 + -1.8470596475781673E+00 -1.8403660873745857E+00 -1.8336053011192051E+00 -1.8267772295273614E+00 -1.8198823541684652E+00 + -1.8129208591254398E+00 -1.8058928763343305E+00 -1.7987983439720816E+00 -1.7916376470504742E+00 -1.7844110874963606E+00 + -1.7771185698738710E+00 -1.7697602401849712E+00 -1.7623366760227746E+00 -1.7548475274913959E+00 -1.7472932291426537E+00 + -1.7396740845471292E+00 -1.7319898389278894E+00 -1.7242412013094410E+00 -1.7164277982551550E+00 -1.7085501828347134E+00 + -1.7006083640294880E+00 -1.6926024734048197E+00 -1.6845328224364085E+00 -1.6763993548439085E+00 -1.6682024481277851E+00 + -1.6599420709883763E+00 -1.6516185230955227E+00 -1.6432318959216066E+00 -1.6347823980820475E+00 -1.6262701056273825E+00 + -1.6176954061756970E+00 -1.6090579833596674E+00 -1.6003585870484209E+00 -1.5915968441967776E+00 -1.5827732529152190E+00 + -1.5738879964921655E+00 -1.5649407514579203E+00 -1.5559323095458162E+00 -1.5468624928865635E+00 -1.5377312590161041E+00 + -1.5285392382898741E+00 -1.5192862957084381E+00 -1.5099723866302082E+00 -1.5005967213739198E+00 -1.4911587331719385E+00 + -1.4816582812824439E+00 -1.4720957140722879E+00 -1.4624713862429182E+00 -1.4527854682386121E+00 -1.4430380792507160E+00 + -1.4332291882010670E+00 -1.4233591939339838E+00 -1.4134283412843427E+00 -1.4034367925165225E+00 -1.3933847216125261E+00 + -1.3832723024089693E+00 -1.3730996761155070E+00 -1.3628669257457069E+00 -1.3525743350816732E+00 -1.3422221243968426E+00 + -1.3318104615196105E+00 -1.3213395166522290E+00 -1.3108094631132874E+00 -1.3002204741555148E+00 -1.2895727231033673E+00 + -1.2788663831419154E+00 -1.2681016277240666E+00 -1.2572786301447159E+00 -1.2463975638205269E+00 -1.2354586020832887E+00 + -1.2244619185519259E+00 -1.2134076866878465E+00 -1.2022960801071922E+00 -1.1911271694252359E+00 -1.1799011168336151E+00 + -1.1686181878604995E+00 -1.1572785561222905E+00 -1.1458823957313820E+00 -1.1344298807335367E+00 -1.1229211853242436E+00 + -1.1113563947673044E+00 -1.0997355078908317E+00 -1.0880588973041296E+00 -1.0763267922468183E+00 -1.0645393559767911E+00 + -1.0526966047430970E+00 -1.0407985722986666E+00 -1.0288456577743961E+00 -1.0168381013642347E+00 -1.0047759306248194E+00 + -9.9265898548758336E-01 -9.8048790851526724E-01 -9.6826279655934266E-01 -9.5598349845928543E-01 -9.4365030366616609E-01 + -9.3126362566484699E-01 -9.1882329657834894E-01 -9.0632944500267687E-01 -8.9378262646714668E-01 -8.8118251874624731E-01 + -8.6852951212633800E-01 -8.5582386666564914E-01 -8.4306536061223991E-01 -8.3025468293365734E-01 -8.1739141480696798E-01 + -8.0447608494390788E-01 -7.9150885377465752E-01 -7.7848947219388465E-01 -7.6541866563585603E-01 -7.5229600174299571E-01 + -7.3912212257148224E-01 -7.2589686467179004E-01 -7.1262055063701923E-01 -6.9929320913134108E-01 -6.8591510649722276E-01 + -6.7248618683331862E-01 -6.5900689854285888E-01 -6.4547697804053650E-01 -6.3189708034172021E-01 -6.1826683526546378E-01 + -6.0458684009462282E-01 -5.9085689942428754E-01 -5.7707737489495647E-01 -5.6324831564153599E-01 -5.4936984719065918E-01 + -5.3544221535350756E-01 -5.2146535035529662E-01 -5.0743967264445500E-01 -4.9336507916396255E-01 -4.7924202909137281E-01 + -4.6507019526361254E-01 -4.5085021401708919E-01 -4.3658183817218754E-01 -4.2226537511572138E-01 -4.0790122197207235E-01 + -3.9348888710768504E-01 -3.7902911057711058E-01 -3.6452190148563079E-01 -3.4996694934863609E-01 -3.3536503801841927E-01 + -3.2071602647173175E-01 -3.0601984413918992E-01 -2.9127702073369299E-01 -2.7648754767100242E-01 -2.6165129895763078E-01 + -2.4676874904049176E-01 -2.3184013284504276E-01 -2.1686516695201799E-01 -2.0184414275263507E-01 -1.8677741304503614E-01 + -1.7166506103517420E-01 -1.5650696008039314E-01 -1.4130335362578991E-01 -1.2605458512786327E-01 -1.1076073962581437E-01 + -9.5421784325569844E-02 -8.0037769568471043E-02 -6.4609086101014526E-02 -4.9135867919925351E-02 -3.3618216095798403E-02 + -1.8056263958055114E-02 -2.4498331768533018E-03 1.3200592339685919E-02 2.8894924586749249E-02 4.4633030655999203E-02 + 6.0414751303124369E-02 7.6239953392470416E-02 9.2108555163040229E-02 1.0802056324675589E-01 1.2397576336762166E-01 + 1.3997389369154420E-01 1.5601484537595034E-01 1.7209852103937251E-01 1.8822479131435854E-01 2.0439349528624218E-01 + 2.2060448901654800E-01 2.3685767571336561E-01 2.5315294999332294E-01 2.6949013147842382E-01 2.8586908164149483E-01 + 3.0228968739624468E-01 3.1875186563100721E-01 3.3525542671650682E-01 3.5180022725879762E-01 3.6838616011493230E-01 + 3.8501312452908165E-01 4.0168095080467575E-01 4.1838948236543605E-01 4.3513862100478418E-01 4.5192826270035608E-01 + 4.6875821812798202E-01 4.8562834483471040E-01 5.0253855896933253E-01 5.1948873614443958E-01 5.3647868524507603E-01 + 5.5350827755155940E-01 5.7057743231721858E-01 5.8768599861706949E-01 6.0483379125370451E-01 6.2202075436250781E-01 + 6.3924690091518499E-01 6.5651197561399777E-01 6.7381573978798859E-01 6.9115813321280439E-01 7.0853900912763812E-01 + 7.2595818116200861E-01 7.4341553974137475E-01 7.6091117634314542E-01 7.7844492852958047E-01 7.9601643067638483E-01 + 8.1362562423852203E-01 8.3127237024222567E-01 8.4895651842572761E-01 8.6667817350834675E-01 8.8443717318919435E-01 + 9.0223310376347066E-01 9.2006587462315603E-01 9.3793549126390219E-01 9.5584208377475821E-01 9.7378511789609046E-01 + 9.9176452406972726E-01 1.0097801622556903E+00 1.0278322047072626E+00 1.0459203271583175E+00 1.0640442555694720E+00 + 1.0822039052743166E+00 1.1003994586468446E+00 1.1186305871875757E+00 1.1368968790245904E+00 1.1551986360515170E+00 + 1.1735357430549394E+00 1.1919076476746078E+00 1.2103144574987208E+00 1.2287563750294439E+00 1.2472327044294611E+00 + 1.2657434116894102E+00 1.2842890603416108E+00 1.3028686512809335E+00 1.3214822950015011E+00 1.3401304168804899E+00 + 1.3588121030478884E+00 1.3775275985022428E+00 1.3962770629841874E+00 1.4150596887332012E+00 1.4338759741729805E+00 + 1.4527255871930560E+00 1.4716081394984446E+00 1.4905240400664848E+00 1.5094725770116466E+00 1.5284540917330347E+00 + 1.5474682483109845E+00 1.5665147816550740E+00 1.5855940621729949E+00 1.6047053781609033E+00 1.6238490538148784E+00 + 1.6430246263651700E+00 1.6622322126105287E+00 1.6814716446866711E+00 1.7007433185388272E+00 1.7200477411777821E+00 + 1.7393846156972781E+00 1.7587539640468350E+00 1.7781554453921806E+00 1.7975891697022677E+00 1.8170546517205248E+00 + 1.8365522715303721E+00 1.8560811469510281E+00 1.8756420823719342E+00 1.8952339849377624E+00 1.9148574649502128E+00 + 1.9345118939421841E+00 1.9541973949102269E+00 1.9739137340310351E+00 1.9936607273823694E+00 2.0134384434407822E+00 + 2.0332463913139565E+00 2.0530849366211910E+00 2.0729533244978335E+00 2.0928520853370305E+00 2.1127803984947091E+00 + 2.1327387807318892E+00 2.1527265895662748E+00 2.1727439402207014E+00 2.1927906947380285E+00 2.2128665502522700E+00 + 2.2329716958331636E+00 2.2531056391662747E+00 2.2732685476091379E+00 2.2934600246049404E+00 2.3136801738277271E+00 + 2.3339285301080688E+00 2.3542055162894790E+00 2.3745104745381691E+00 2.3948434805567067E+00 2.4152044592249351E+00 + 2.4355930656594902E+00 2.4560095487129887E+00 2.4764533684082015E+00 2.4969245658256183E+00 2.5174232171356126E+00 + 2.5379487879669145E+00 2.5585014730425435E+00 2.5790810354832701E+00 2.5996871907418657E+00 2.6203202358822946E+00 + 2.6409795370745628E+00 2.6616652153218512E+00 2.6823773718541233E+00 2.7031153079893557E+00 2.7238793697159962E+00 + 2.7446694373218592E+00 2.7654849781381210E+00 2.7863261744204859E+00 2.8071930887007985E+00 2.8280851589496949E+00 + 2.8490024044822397E+00 2.8699449740201248E+00 2.8909123754755157E+00 2.9119045095198288E+00 2.9329216633817152E+00 + 2.9539633671256524E+00 2.9750294283017151E+00 2.9961197314511963E+00 3.0172347157550141E+00 3.0383735332954402E+00 + 3.0595363131640245E+00 3.0807229522145332E+00 3.1019336159590840E+00 3.1231677593092799E+00 3.1444252781424908E+00 + 3.1657062816137276E+00 3.1870106770394511E+00 3.2083382088171506E+00 3.2296885957356953E+00 3.2510619109216670E+00 + 3.2724581057791657E+00 3.2938771407356970E+00 3.3153185364371800E+00 3.3367823403952981E+00 3.3582684205709765E+00 + 3.3797767826793388E+00 3.4013073809226100E+00 3.4228597882929854E+00 3.4444340439391028E+00 3.4660299267254961E+00 + 3.4876474739113212E+00 3.5092866090972885E+00 3.5309471938205994E+00 3.5526288864523901E+00 3.5743318107821276E+00 + 3.5960555909236533E+00 3.6178003693499021E+00 3.6395658781999010E+00 3.6613522905174625E+00 3.6831592081116140E+00 + 3.7049865235650015E+00 3.7268341857147900E+00 3.7487020048932518E+00 3.7705899603073760E+00 3.7924978630856057E+00 + 3.8144256455443015E+00 3.8363732522912350E+00 3.8583405883275672E+00 3.8803274284018632E+00 3.9023337308378179E+00 + 3.9243592463594541E+00 3.9464040664724505E+00 3.9684678414951149E+00 3.9905507223673160E+00 4.0126523448985330E+00 + 4.0347728156381022E+00 4.0569118535169313E+00 4.0790694767609921E+00 4.1012454834458287E+00 4.1234398298438899E+00 + 4.1456523458155887E+00 4.1678830013175707E+00 4.1901315603727864E+00 4.2123981076334864E+00 4.2346822714171459E+00 + 4.2569842814508112E+00 4.2793036523789416E+00 4.3016406338734914E+00 4.3239947728595816E+00 4.3463662833045413E+00 + 4.3687547793077997E+00 4.3911603552374929E+00 4.4135827764013760E+00 4.4360220279758034E+00 4.4584779480264398E+00 + 4.4809504554260959E+00 4.5034394066770798E+00 4.5259447535273507E+00 4.5484662906777897E+00 4.5710040485352579E+00 + 4.5935577549240767E+00 4.6161274881904228E+00 4.6387129472301920E+00 4.6613142215805841E+00 4.6839310171118367E+00 + 4.7065633951085681E+00 4.7292111171643008E+00 4.7518741689026180E+00 4.7745524045493086E+00 4.7972456826295415E+00 + 4.8199540260440124E+00 4.8426771560303594E+00 4.8654153364317327E+00 4.8881679636507158E+00 4.9109353676786007E+00 + 4.9337170419435958E+00 4.9565132280413238E+00 4.9793235227841510E+00 5.0021480811177392E+00 5.0249865798014417E+00 + 5.0478391551127313E+00 5.0707056201600551E+00 5.0935858915452759E+00 5.1164797858015598E+00 5.1393871589985487E+00 + 5.1623080571754034E+00 5.1852421190762534E+00 5.2081896228459588E+00 5.2311502165250783E+00 5.2541240770684281E+00 + 5.2771106510309664E+00 5.3001102092285661E+00 5.3231223404842520E+00 5.3461472417535001E+00 5.3691846915659411E+00 + 5.3922347311911834E+00 5.4152970213025622E+00 5.4383715419351537E+00 5.4614582086459844E+00 5.4845569478630942E+00 + 5.5076678457857158E+00 5.5307904172453002E+00 5.5539248596376734E+00 5.5770707953058940E+00 5.6002285088674615E+00 + 5.6233976832952628E+00 5.6465782518012109E+00 5.6697699928311209E+00 5.6929729645728129E+00 5.7161871158060018E+00 + 5.7394122852501575E+00 5.7626482598903603E+00 5.7858950212328386E+00 5.8091525961963901E+00 5.8324208821101537E+00 + 5.8556994585175923E+00 5.8789886128933837E+00 5.9022880335845240E+00 5.9255979229557161E+00 5.9489176596202604E+00 + 5.9722476058295708E+00 5.9955875020860514E+00 6.0189373547390703E+00 6.0422967901605871E+00 6.0656660299873382E+00 + 6.0890449158668414E+00 6.1124332312328260E+00 6.1358308744454222E+00 6.1592380171556611E+00 6.1826542300941716E+00 + 6.2060796544689323E+00 6.2295140253289754E+00 6.2529575852384669E+00 6.2764096864441683E+00 6.2998707798745164E+00 + 6.3233404851350414E+00 6.3468187895996930E+00 6.3703054965804968E+00 6.3938008075735180E+00 6.4173042518286385E+00 + 6.4408160006103596E+00 6.4643358901402017E+00 6.4878638299445317E+00 6.5113996219647392E+00 6.5349435679242109E+00 + 6.5584949439390883E+00 6.5820543113279548E+00 6.6056211217587242E+00 6.6291954778591382E+00 6.6527772912990404E+00 + 6.6763664259354494E+00 6.6999627991396542E+00 6.7235663911976102E+00 6.7471770150347465E+00 6.7707946471251832E+00 + 6.7944192643731860E+00 6.8180505982187301E+00 6.8416887565507993E+00 6.8653334830907671E+00 6.8889848449811888E+00 + 6.9126425932957716E+00 6.9363068325644548E+00 6.9599772776424977E+00 6.9836541203695823E+00 7.0073368842610169E+00 + 7.0310259119320984E+00 7.0547207306952870E+00 7.0784215582598708E+00 7.1021280777590112E+00 7.1258404081420794E+00 + 7.1495583185106879E+00 7.1732818625587784E+00 7.1970108626746176E+00 7.2207454007816549E+00 7.2444854309146418E+00 + 7.2682306092284721E+00 7.2919813841105494E+00 7.3157370201396636E+00 7.3394980368737537E+00 7.3632638536021995E+00 + 7.3870347335731870E+00 7.4108103780772634E+00 7.4345908251167474E+00 7.4583759686098858E+00 7.4821657350257231E+00 + 7.5059599989809023E+00 7.5297587278169384E+00 7.5535618084179941E+00 7.5773690726947560E+00 7.6011807263764926E+00 + 7.6249961985945980E+00 7.6488160830215097E+00 7.6726395937346048E+00 7.6964672119532969E+00 7.7202984648144861E+00 + 7.7441335048129512E+00 7.7679721785713145E+00 7.7918143840252263E+00 7.8156601259563256E+00 7.8395091779793091E+00 + 7.8633616489525950E+00 7.8872171505684801E+00 7.9110761506575642E+00 7.9349379025217379E+00 7.9588029197337518E+00 + 7.9826706930210811E+00 8.0065413456454575E+00 8.0304148518347009E+00 8.0542909167104444E+00 8.0781697799844920E+00 + 8.1020510278148450E+00 8.1259348309081076E+00 8.1498209225532197E+00 8.1737094426007193E+00 8.1976001579278730E+00 + 8.2214930501978412E+00 8.2453880274294740E+00 8.2692848718631300E+00 8.2931839337876561E+00 8.3170845655065175E+00 + 8.3409872192351742E+00 8.3648914247895494E+00 8.3887972877339152E+00 8.4127048029783484E+00 8.4366136870275632E+00 + 8.4605241282330557E+00 8.4844357625944262E+00 8.5083487737311483E+00 8.5322628803123344E+00 8.5561782196824847E+00 + 8.5800945547420184E+00 8.6040118026395653E+00 8.6279301240340160E+00 8.6518490154534593E+00 8.6757689707511965E+00 + 8.6996893951015313E+00 8.7236104833863379E+00 8.7475321982360938E+00 8.7714542368197126E+00 8.7953768778165902E+00 + 8.8192996575590321E+00 8.8432228247780778E+00 8.8671461041655864E+00 8.8910695783146405E+00 8.9149930826007733E+00 + 8.9389164509452126E+00 8.9628399743611293E+00 8.9867630576805109E+00 9.0106861650499344E+00 9.0346088250329437E+00 + 9.0585310744476182E+00 9.0824531054343662E+00 9.1063743989039132E+00 9.1302952992988295E+00 9.1542154229516601E+00 + 9.1781349093983540E+00 9.2020536661058188E+00 9.2259714512659823E+00 9.2498885016910037E+00 9.2738043253131242E+00 + 9.2977194058450081E+00 9.3216331880464125E+00 9.3455457235945527E+00 9.3694572838805676E+00 9.3933672450474806E+00 + 9.4172760365992136E+00 9.4411832860082647E+00 9.4650889749002207E+00 9.4889932845443337E+00 9.5128957566809547E+00 + 9.5367966568620997E+00 9.5606956753877874E+00 9.5845929829314773E+00 9.6084883426126204E+00 9.6323815993180535E+00 + 9.6562731650629168E+00 9.6801622784778409E+00 9.7040494168084592E+00 9.7279344048371055E+00 9.7518168578612698E+00 + 9.7756972655772447E+00 9.7995750536870414E+00 9.8234503970684024E+00 9.8473233547104453E+00 9.8711935666041004E+00 + 9.8950612367506601E+00 9.9189259884611758E+00 9.9427881808207648E+00 9.9666474644661651E+00 9.9905036344659877E+00 + 1.0014357202264824E+01 1.0038207480799372E+01 1.0062054691084622E+01 1.0085898869761019E+01 1.0109739662186898E+01 + 1.0133577425656050E+01 1.0157411592722928E+01 1.0181242452192732E+01 1.0205070032759895E+01 1.0228893806484278E+01 + 1.0252714205943379E+01 1.0276530924492912E+01 1.0300343967861075E+01 1.0324153281178305E+01 1.0347958548066551E+01 + 1.0371760323991843E+01 1.0395558000013491E+01 1.0419351473499734E+01 1.0443141269687514E+01 1.0466926715408977E+01 + 1.0490708090490346E+01 1.0514485277828937E+01 1.0538258013530248E+01 1.0562026654097458E+01 1.0585790771200015E+01 + 1.0609550423049955E+01 1.0633305640425879E+01 1.0657056084578578E+01 1.0680802334212579E+01 1.0704543578383859E+01 + 1.0728279979352012E+01 1.0752011964769949E+01 1.0775738836518697E+01 1.0799460905029447E+01 1.0823178061875115E+01 + 1.0846889976266041E+01 1.0870597065900540E+01 1.0894298995749873E+01 1.0917995679350540E+01 1.0941687206157091E+01 + 1.0965373219300238E+01 1.0989054171122483E+01 1.1012729705594728E+01 1.1036399550915537E+01 1.1060064205773816E+01 + 1.1083723032438815E+01 1.1107376250633761E+01 1.1131024119986289E+01 1.1154665986048808E+01 1.1178302125287980E+01 + 1.1201932536310990E+01 1.1225556833508026E+01 1.1249175446501521E+01 1.1272788048716771E+01 1.1296394564302819E+01 + 1.1319995074877289E+01 1.1343589169825929E+01 1.1367177273246208E+01 1.1390759216547343E+01 1.1414334626641180E+01 + 1.1437904014067957E+01 1.1461466887703843E+01 1.1485023009376897E+01 1.1508572973961453E+01 1.1532116197051801E+01 + 1.1555652833720799E+01 1.1579183065173527E+01 1.1602706326971159E+01 1.1626223005000670E+01 1.1649732835216172E+01 + 1.1673235537724677E+01 1.1696731713669102E+01 1.1720220765933313E+01 1.1743702672323703E+01 1.1767177964609317E+01 + 1.1790645863936039E+01 1.1814106535058119E+01 1.1837560328152929E+01 1.1861006472025370E+01 1.1884445433865020E+01 + 1.1907877258653702E+01 1.1931301411902883E+01 1.1954718344039859E+01 1.1978127818965328E+01 1.2001529480208459E+01 + 1.2024924017803437E+01 1.2048310642220766E+01 1.2071689325619246E+01 1.2095060758670174E+01 1.2118424092404545E+01 + 1.2141779576608990E+01 1.2165127531047698E+01 1.2188467270237243E+01 1.2211799107948751E+01 1.2235123189060232E+01 + 1.2258438891249703E+01 1.2281746694016459E+01 1.2305046467841890E+01 1.2328337721770454E+01 1.2351621043384139E+01 + 1.2374895928299036E+01 1.2398162259614274E+01 1.2421420614800283E+01 1.2444670372532588E+01 1.2467911496170862E+01 + 1.2491144486791802E+01 1.2514368726132966E+01 1.2537584270628347E+01 1.2560791460229757E+01 1.2583989781113994E+01 + 1.2607179336100183E+01 1.2630360344974559E+01 1.2653532329980491E+01 1.2676695481802835E+01 1.2699849957465743E+01 + 1.2722995191145134E+01 1.2746131531487920E+01 1.2769259070775231E+01 1.2792377204599338E+01 1.2815486303202414E+01 + 1.2838586523144237E+01 1.2861677150808561E+01 1.2884758656260647E+01 1.2907831167082524E+01 1.2930893918724761E+01 + 1.2953947533859598E+01 1.2976991844317801E+01 1.3000026341480316E+01 1.3023051670088913E+01 1.3046067425656306E+01 + 1.3069073326593918E+01 1.3092069924022399E+01 1.3115056851987479E+01 1.3138033806882374E+01 1.3161001251634758E+01 + 1.3183958994135439E+01 1.3206906589478715E+01 1.3229844525685346E+01 1.3252772701802710E+01 1.3275690543550157E+01 + 1.3298598722563947E+01 1.3321496928871499E+01 1.3344384711459600E+01 1.3367262782889036E+01 1.3390130618798327E+01 + 1.3412988009030187E+01 1.3435835487864120E+01 1.3458672719395535E+01 1.3481499372032049E+01 1.3504315893894859E+01 + 1.3527122177870499E+01 1.3549917734473878E+01 1.3572703019796636E+01 1.3595477968368790E+01 1.3618242061411769E+01 + 1.3640995829176962E+01 1.3663739087327196E+01 1.3686471401434089E+01 1.3709193276525129E+01 1.3731904551911436E+01 + 1.3754604770443112E+01 1.3777294295566083E+01 1.3799973334983582E+01 1.3822640987763661E+01 1.3845297742467581E+01 + 1.3867943998013320E+01 1.3890578876382936E+01 1.3913202862461814E+01 1.3935816403521173E+01 1.3958419161980062E+01 + 1.3981011257901885E+01 1.4003593054711608E+01 1.4026163934001417E+01 1.4048723938583795E+01 1.4071273694816988E+01 + 1.4093812345992218E+01 1.4116339879309161E+01 1.4138856848809793E+01 1.4161362797885694E+01 1.4183857591955833E+01 + 1.4206341663289074E+01 1.4228814821923036E+01 1.4251276622764777E+01 1.4273727590503288E+01 1.4296167562492005E+01 + 1.4318596069626132E+01 1.4341013457720136E+01 1.4363419652972272E+01 1.4385814284014067E+01 1.4408197683398829E+01 + 1.4430570131893729E+01 1.4452930898984029E+01 1.4475280221372708E+01 1.4497618526764731E+01 1.4519945109870742E+01 + 1.4542259850905191E+01 1.4564563247542523E+01 1.4586855114836304E+01 1.4609135109681700E+01 1.4631403809828830E+01 + 1.4653660901872696E+01 1.4675906006175818E+01 1.4698139483880331E+01 1.4720361142455090E+01 1.4742570701684816E+01 + 1.4764768466421023E+01 1.4786954808047131E+01 1.4809128977244834E+01 1.4831291154751645E+01 1.4853441569515311E+01 + 1.4875579598177705E+01 1.4897705441135013E+01 1.4919819551709180E+01 1.4941921689503619E+01 1.4964011425697542E+01 + 1.4986089194007340E+01 1.5008154606644682E+01 1.5030207503542599E+01 1.5052248205611704E+01 1.5074277110174251E+01 + 1.5096293467811712E+01 1.5118297294616047E+01 1.5140288691121754E+01 1.5162267736084303E+01 1.5184234117513382E+01 + 1.5206188322793063E+01 1.5228130306335508E+01 1.5250059157365989E+01 1.5271975298996802E+01 1.5293879280319652E+01 + 1.5315770484184604E+01 1.5337648933709209E+01 1.5359515140172720E+01 1.5381368023539242E+01 1.5403208047616680E+01 + 1.5425035588325528E+01 1.5446850757325855E+01 1.5468652604420615E+01 1.5490441231643524E+01 1.5512217426256806E+01 + 1.5533980617020889E+01 1.5555730740519291E+01 1.5577468130355461E+01 1.5599192250386805E+01 1.5620903069760057E+01 + 1.5642601205872412E+01 1.5664286630348059E+01 1.5685958171928302E+01 1.5707616383811056E+01 1.5729262131270056E+01 + 1.5750894569976911E+01 1.5772513516566342E+01 1.5794118957924798E+01 1.5815711502039807E+01 1.5837290539629691E+01 + 1.5858856380456176E+01 1.5880408804163102E+01 1.5901947532472787E+01 1.5923472861597361E+01 1.5944985382896281E+01 + 1.5966483877689102E+01 1.5987968527833218E+01 1.6009439936198362E+01 1.6030898389811156E+01 1.6052342653994501E+01 + 1.6073772877573987E+01 1.6095190093551967E+01 1.6116593882187704E+01 1.6137983374839507E+01 1.6159358987063506E+01 + 1.6180721486844607E+01 1.6202070176753434E+01 1.6223404397094775E+01 1.6244725238158885E+01 1.6266032378461773E+01 + 1.6287325593949507E+01 1.6308604396226734E+01 1.6329869802642179E+01 1.6351121198920172E+01 1.6372358566733215E+01 + 1.6393581656748530E+01 1.6414791090118413E+01 1.6435986394292854E+01 1.6457167531083940E+01 1.6478334543974061E+01 + 1.6499487581481429E+01 1.6520626322342292E+01 1.6541750954079593E+01 1.6562861466319433E+01 1.6583957794325734E+01 + 1.6605039567186505E+01 1.6626107393986661E+01 1.6647160947185114E+01 1.6668200156858756E+01 1.6689224621961053E+01 + 1.6710235285597150E+01 1.6731231428496343E+01 1.6752212860919723E+01 1.6773180086815785E+01 1.6794133239461697E+01 + 1.6815071258602121E+01 1.6835994886669145E+01 1.6856904592672258E+01 1.6877799407924829E+01 1.6898678999416799E+01 + 1.6919545015296681E+01 1.6940396527091842E+01 1.6961232260516489E+01 1.6982053912983019E+01 1.7002861526552852E+01 + 1.7023653690617373E+01 1.7044431033301155E+01 1.7065194261786623E+01 1.7085942571877954E+01 1.7106675681590332E+01 + 1.7127394419147777E+01 1.7148098190527868E+01 1.7168787105952717E+01 1.7189461377778354E+01 1.7210120135980446E+01 + 1.7230764652237145E+01 1.7251394292315243E+01 1.7272008246637199E+01 1.7292607630359580E+01 1.7313192631149633E+01 + 1.7333761781445052E+01 1.7354315936255578E+01 1.7374855689895071E+01 1.7395379987274513E+01 1.7415889019010734E+01 + 1.7436383219826467E+01 1.7456862186444798E+01 1.7477326208261061E+01 1.7497774737594156E+01 1.7518207888513079E+01 + 1.7538626736646044E+01 1.7559029706503388E+01 1.7579417036539819E+01 1.7599789933419213E+01 1.7620147338008412E+01 + 1.7640489041753142E+01 1.7660815710497488E+01 1.7681126985088667E+01 1.7701423195739590E+01 1.7721703536719133E+01 + 1.7741968353631218E+01 1.7762218869713180E+01 1.7782452792941886E+01 1.7802671396778525E+01 1.7822875243724457E+01 + 1.7843062881921277E+01 1.7863235390039858E+01 1.7883392189060451E+01 1.7903533217115310E+01 1.7923659491571101E+01 + 1.7943769412925104E+01 1.7963863760712627E+01 1.7983942966917908E+01 1.8004006305504859E+01 1.8024054290084141E+01 + 1.8044085661979565E+01 1.8064102339659520E+01 1.8084103253460793E+01 1.8104087562414090E+01 1.8124056878899108E+01 + 1.8144010423170389E+01 1.8163948133481306E+01 1.8183870109321496E+01 1.8203775505665430E+01 1.8223666308039448E+01 + 1.8243540593468925E+01 1.8263398920749665E+01 1.8283241589356386E+01 1.8303068429331379E+01 1.8322879584604852E+01 + 1.8342673815023772E+01 1.8362453253652184E+01 1.8382216325723448E+01 1.8401963263740516E+01 1.8421694482737845E+01 + 1.8441409114415702E+01 1.8461108774927045E+01 1.8480791460986342E+01 1.8500458302716435E+01 1.8520109390507432E+01 + 1.8539744265665064E+01 1.8559362968695261E+01 1.8578965147671759E+01 1.8598552171045728E+01 1.8618122285204919E+01 + 1.8637676670706767E+01 1.8657214030625262E+01 1.8676736178558443E+01 1.8696242147523577E+01 1.8715731056669835E+01 + 1.8735204413103631E+01 1.8754660990912964E+01 1.8774102049705327E+01 1.8793526093564655E+01 1.8812934060807446E+01 + 1.8832325947910714E+01 1.8851701554826551E+01 1.8871060363236595E+01 1.8890402780724251E+01 1.8909729554731271E+01 + 1.8929039388783625E+01 1.8948333341423343E+01 1.8967609612147005E+01 1.8986871074127379E+01 1.9006115128248901E+01 + 1.9025342964323723E+01 1.9044554043054532E+01 1.9063749120000679E+01 1.9082927842373874E+01 1.9102089533386895E+01 + 1.9121234658459912E+01 1.9140363581792148E+01 1.9159476003393753E+01 1.9178571526947952E+01 1.9197650466678130E+01 + 1.9216713038067919E+01 1.9235759637680420E+01 1.9254788330400512E+01 1.9273801341868332E+01 1.9292796876071705E+01 + 1.9311776905133030E+01 1.9330739217852503E+01 1.9349685122857203E+01 1.9368614406836997E+01 1.9387527449464699E+01 + 1.9406423175338428E+01 1.9425302294995795E+01 1.9444164468593858E+01 1.9463011078622074E+01 1.9481839175759724E+01 + 1.9500651621858427E+01 1.9519446309594752E+01 1.9538225549001542E+01 1.9556986885015277E+01 1.9575731670640412E+01 + 1.9594459380063931E+01 1.9613170957195369E+01 1.9631865253863438E+01 1.9650542456495732E+01 1.9669202715421537E+01 + 1.9687846718630393E+01 1.9706473342838191E+01 1.9725083256870519E+01 1.9743675319864384E+01 1.9762252093892929E+01 + 1.9780810517864051E+01 1.9799352943469003E+01 1.9817876961959026E+01 1.9836385596772207E+01 1.9854876253693845E+01 + 1.9873350447848363E+01 1.9891806671762811E+01 1.9910246663046451E+01 1.9928669696862556E+01 1.9947075287807621E+01 + 1.9965463786014364E+01 1.9983834909420075E+01 2.0002190136698488E+01 2.0020526925525356E+01 2.0038847414612320E+01 + 2.0057149717668739E+01 2.0075436463976256E+01 2.0093704907004469E+01 2.0111956723123452E+01 2.0130190532956579E+01 + 2.0148408169093955E+01 2.0166608339073338E+01 2.0184791142818639E+01 2.0202956493524425E+01 2.0221104769381839E+01 + 2.0239236616269448E+01 2.0257349917192887E+01 2.0275447034728405E+01 2.0293525457287149E+01 2.0311588628579663E+01 + 2.0329632807787185E+01 2.0347660623907650E+01 2.0365670100250302E+01 2.0383663556856092E+01 2.0401639035364393E+01 + 2.0419597280037479E+01 2.0437537681116662E+01 2.0455461330472300E+01 2.0473367761252071E+01 2.0491256565546333E+01 + 2.0509127517693180E+01 2.0526981610991211E+01 2.0544818263754827E+01 2.0562637996709132E+01 2.0580438994129175E+01 + 2.0598223716468038E+01 2.0615990155572955E+01 2.0633740391398145E+01 2.0651471757612054E+01 2.0669186381893109E+01 + 2.0686883335493590E+01 2.0704563529893118E+01 2.0722225717326062E+01 2.0739870446969963E+01 2.0757497489781798E+01 + 2.0775108178931767E+01 2.0792700153626736E+01 2.0810275805304318E+01 2.0827832056191202E+01 2.0845372721684083E+01 + 2.0862894965145902E+01 2.0880400046960023E+01 2.0897886979234901E+01 2.0915356745204232E+01 2.0932809459458639E+01 + 2.0950244359758120E+01 2.0967661302452452E+01 2.0985060522599323E+01 2.1002442635421200E+01 2.1019807376788542E+01 + 2.1037154067212693E+01 2.1054482819047088E+01 2.1071794702804951E+01 2.1089088650803639E+01 2.1106365771091149E+01 + 2.1123623441041389E+01 2.1140864638234770E+01 2.1158087916709825E+01 2.1175294108166863E+01 2.1192482042028271E+01 + 2.1209652315401470E+01 2.1226804888173426E+01 2.1243940107735835E+01 2.1261057431571015E+01 2.1278156683654451E+01 + 2.1295238618121612E+01 2.1312302565613539E+01 2.1329350034215061E+01 2.1346377772709243E+01 2.1363388796089826E+01 + 2.1380381665666405E+01 2.1397357513437189E+01 2.1414315516992659E+01 2.1431254831826347E+01 2.1448176875554008E+01 + 2.1465081013872595E+01 2.1481968126588022E+01 2.1498836457869128E+01 2.1515687640476308E+01 2.1532519879039583E+01 + 2.1549335754044556E+01 2.1566133351751347E+01 2.1582912481613281E+01 2.1599674685233182E+01 2.1616417676129434E+01 + 2.1633144493511342E+01 2.1649852466174966E+01 2.1666542641175319E+01 2.1683215011998040E+01 2.1699869260872347E+01 + 2.1716506428302381E+01 2.1733124750548249E+01 2.1749725961875040E+01 2.1766308037940995E+01 2.1782873677035450E+01 + 2.1799420875129226E+01 2.1815949465610885E+01 2.1832461102574289E+01 2.1848953638396218E+01 2.1865429643784601E+01 + 2.1881887028765707E+01 2.1898325915766844E+01 2.1914747439148730E+01 2.1931150685174707E+01 2.1947536879090357E+01 + 2.1963903992252277E+01 2.1980253154774918E+01 2.1996584612860744E+01 2.2012898173734389E+01 2.2029194609156498E+01 + 2.2045471020368424E+01 2.2061730359872634E+01 2.2077972129050412E+01 2.2094195374975470E+01 2.2110401194593688E+01 + 2.2126587920012273E+01 2.2142757086381099E+01 2.2158908697036420E+01 2.2175041620209598E+01 2.2191157114149053E+01 + 2.2207253477571019E+01 2.2223332321693601E+01 2.2239393635371854E+01 2.2255436123657962E+01 2.2271461375523593E+01 + 2.2287467056462209E+01 2.2303455498859620E+01 2.2319426990274199E+01 2.2335378360461789E+01 2.2351312696467584E+01 + 2.2367228516014809E+01 2.2383126010072353E+01 2.2399006497947003E+01 2.2414867835992087E+01 2.2430711239419267E+01 + 2.2446536279640821E+01 2.2462343272073753E+01 2.2478133341839765E+01 2.2493903503701272E+01 2.2509655866800269E+01 + 2.2525390889329689E+01 2.2541106568489315E+01 2.2556805298965813E+01 2.2572485632288398E+01 2.2588146283992042E+01 + 2.2603790141971690E+01 2.2619415794505358E+01 2.2635022799377595E+01 2.2650612137004241E+01 2.2666182172370103E+01 + 2.2681734608865888E+01 2.2697269649883651E+01 2.2712785223195709E+01 2.2728283323208831E+01 2.2743762746087757E+01 + 2.2759223465429258E+01 2.2774667457402352E+01 2.2790092406677797E+01 2.2805498449080002E+01 2.2820886964035836E+01 + 2.2836256804488745E+01 2.2851608828526214E+01 2.2866942945483249E+01 2.2882257658992167E+01 2.2897554358288502E+01 + 2.2912833546800083E+01 2.2928093734584664E+01 2.2943336271278863E+01 2.2958560334967203E+01 2.2973764830293476E+01 + 2.2988952516702096E+01 2.3004122275158615E+01 2.3019272176492056E+01 2.3034404828547711E+01 2.3049518812858942E+01 + 2.3064613764662923E+01 2.3079692154330008E+01 2.3094751202479593E+01 2.3109791161151605E+01 2.3124813829503712E+01 + 2.3139817702567314E+01 2.3154803425266085E+01 2.3169771419908759E+01 2.3184720091726696E+01 2.3199649974416069E+01 + 2.3214562806669178E+01 2.3229457301570175E+01 2.3244332314115404E+01 2.3259189905657376E+01 2.3274028642483660E+01 + 2.3288848370433950E+01 2.3303651411670959E+01 2.3318435229305983E+01 2.3333199847789921E+01 2.3347946879239167E+01 + 2.3362675648266752E+01 2.3377385624956251E+01 2.3392077825390508E+01 2.3406751715700420E+01 2.3421405409366049E+01 + 2.3436042142587308E+01 2.3450661304472355E+01 2.3465260591633729E+01 2.3479841722626240E+01 2.3494404872986586E+01 + 2.3508949044920161E+01 2.3523475162504788E+01 2.3537983837977059E+01 2.3552472545548564E+01 2.3566942613248724E+01 + 2.3581395340992454E+01 2.3595829891588696E+01 2.3610244931456545E+01 2.3624642229264474E+01 2.3639021272548320E+01 + 2.3653380318979416E+01 2.3667722387406720E+01 2.3682046539972941E+01 2.3696351089515154E+01 2.3710636744800215E+01 + 2.3724904996757743E+01 2.3739154674424427E+01 2.3753385468057580E+01 2.3767598284748335E+01 2.3781792764942580E+01 + 2.3795967126958011E+01 2.3810124405286860E+01 2.3824264132269487E+01 2.3838384086017548E+01 2.3852485045684421E+01 + 2.3866568359615172E+01 2.3880633463874513E+01 2.3894679461462331E+01 2.3908707333412877E+01 2.3922717120602336E+01 + 2.3936707265093727E+01 2.3950678880286894E+01 2.3964633536299790E+01 2.3978569357052830E+01 2.3992485262433565E+01 + 2.4006383249966873E+01 2.4020263368192612E+01 2.4034124812789120E+01 2.4047967298420616E+01 2.4061791843547812E+01 + 2.4075597827129318E+01 2.4089384117675696E+01 2.4103152726044485E+01 2.4116903941064425E+01 2.4130635689240577E+01 + 2.4144347910106152E+01 2.4158042230431299E+01 2.4171719250024157E+01 2.4185376550334684E+01 2.4199015273477851E+01 + 2.4212635951906286E+01 2.4226238384458618E+01 2.4239820698328561E+01 2.4253385716202988E+01 2.4266932855232824E+01 + 2.4280461026693025E+01 2.4293969155421482E+01 2.4307459497289617E+01 2.4320932524498250E+01 2.4334386541505129E+01 + 2.4347820975881707E+01 2.4361237288255804E+01 2.4374635655453300E+01 2.4388014775834712E+01 2.4401375555056710E+01 + 2.4414718120505036E+01 2.4428042379228444E+01 2.4441347122862993E+01 2.4454632877448724E+01 2.4467901432326393E+01 + 2.4481151911929555E+01 2.4494382738647019E+01 2.4507594116440352E+01 2.4520787718841923E+01 2.4533963982877520E+01 + 2.4547120710249406E+01 2.4560258273023706E+01 2.4573377754911565E+01 2.4586479111214995E+01 2.4599561047818188E+01 + 2.4612624778209664E+01 2.4625670304930793E+01 2.4638697512534119E+01 2.4651705582843146E+01 2.4664693888738277E+01 + 2.4677664955750615E+01 2.4690618305503197E+01 2.4703552363717986E+01 2.4716466696423321E+01 2.4729362697151807E+01 + 2.4742241111554375E+01 2.4755101733256712E+01 2.4767941866521426E+01 2.4780763692213664E+01 2.4793567331181890E+01 + 2.4806352736076242E+01 2.4819119223024039E+01 2.4831866901599025E+01 2.4844596299721474E+01 2.4857307430252856E+01 + 2.4869999484313883E+01 2.4882672150347407E+01 2.4895327233696182E+01 2.4907964206534754E+01 2.4920582677547802E+01 + 2.4933180859747818E+01 2.4945760550053571E+01 2.4958322821485687E+01 2.4970867187292122E+01 2.4983392373619289E+01 + 2.4995897435935667E+01 2.5008384425183245E+01 2.5020853492428884E+01 2.5033304904734297E+01 2.5045736792357584E+01 + 2.5058149135104884E+01 2.5070543394237237E+01 2.5082919449676950E+01 2.5095277418308367E+01 2.5107615966988771E+01 + 2.5119935768452642E+01 2.5132237273738586E+01 2.5144520459694750E+01 2.5156784844595073E+01 2.5169030040267653E+01 + 2.5181257224444213E+01 2.5193465936150009E+01 2.5205656267142043E+01 2.5217827434626152E+01 2.5229979074111387E+01 + 2.5242113316475876E+01 2.5254229274001791E+01 2.5266326759824221E+01 2.5278404566606184E+01 2.5290463176684778E+01 + 2.5302504122736181E+01 2.5314527222785511E+01 2.5326531765778014E+01 2.5338516870295170E+01 2.5350482303631853E+01 + 2.5362429753926072E+01 2.5374359640720918E+01 2.5386271442285548E+01 2.5398163840417261E+01 2.5410036300257410E+01 + 2.5421890508451881E+01 2.5433726859959823E+01 2.5445545502244123E+01 2.5457345304641038E+01 2.5469124997469738E+01 + 2.5480886144891812E+01 2.5492629010768528E+01 2.5504354143502326E+01 2.5516061266377434E+01 2.5527748528842157E+01 + 2.5539416520542314E+01 2.5551066229056900E+01 2.5562697754636869E+01 2.5574311535915875E+01 2.5585906548966136E+01 + 2.5597481718036306E+01 2.5609038259005601E+01 2.5620576470308951E+01 2.5632096479916676E+01 2.5643598998954733E+01 + 2.5655081626748849E+01 2.5666545112739623E+01 2.5677990149300477E+01 2.5689416794202774E+01 2.5700825339008382E+01 + 2.5712216038986224E+01 2.5723586943648211E+01 2.5734938740131295E+01 2.5746272188169510E+01 2.5757587248149694E+01 + 2.5768884402960037E+01 2.5780163313356155E+01 2.5791422383711026E+01 2.5802662608506111E+01 2.5813884417408879E+01 + 2.5825087855564675E+01 2.5836273442559015E+01 2.5847440956884370E+01 2.5858588200013589E+01 2.5869716769040668E+01 + 2.5880826908331692E+01 2.5891918734948419E+01 2.5902992689970944E+01 2.5914048521340753E+01 2.5925084568455258E+01 + 2.5936101354006979E+01 2.5947099805707737E+01 2.5958079851365856E+01 2.5969042290943506E+01 2.5979986592166835E+01 + 2.5990911378836103E+01 2.6001816510621666E+01 2.6012703238996615E+01 2.6023571683746820E+01 2.6034422347596266E+01 + 2.6045255034249656E+01 2.6056069041277876E+01 2.6066863695336593E+01 2.6077639519287668E+01 2.6088397472716945E+01 + 2.6099137865140968E+01 2.6109860407881445E+01 2.6120564610943493E+01 2.6131250224353661E+01 2.6141916024987697E+01 + 2.6152563834666442E+01 2.6163194114804906E+01 2.6173806614041602E+01 2.6184400655715276E+01 2.6194976387895888E+01 + 2.6205533471833871E+01 2.6216071389083158E+01 2.6226591453981928E+01 2.6237093823579666E+01 2.6247577737413813E+01 + 2.6258043335179977E+01 2.6268490678804902E+01 2.6278919830723325E+01 2.6289330223879002E+01 2.6299722409907446E+01 + 2.6310096177641732E+01 2.6320451612391885E+01 2.6330788793972225E+01 2.6341107898101352E+01 2.6351409374749132E+01 + 2.6361692614328508E+01 2.6371956335521002E+01 2.6382201590750928E+01 2.6392428632867563E+01 2.6402637487895149E+01 + 2.6412828800385110E+01 2.6423002364566280E+01 2.6433157507125603E+01 2.6443293724643613E+01 2.6453410556522787E+01 + 2.6463509287999912E+01 2.6473590305747237E+01 2.6483653710030072E+01 2.6493698736567453E+01 2.6503725365251391E+01 + 2.6513733704498989E+01 2.6523723443233095E+01 2.6533694478311965E+01 2.6543647612272377E+01 2.6553582558995789E+01 + 2.6563499082883212E+01 2.6573397284379340E+01 2.6583277242082897E+01 2.6593139206418513E+01 2.6602983850232594E+01 + 2.6612809648723303E+01 2.6622615954955741E+01 2.6632404046455893E+01 2.6642173888402017E+01 2.6651925752165234E+01 + 2.6661660035201603E+01 2.6671376309862154E+01 2.6681074138391846E+01 2.6690753613491079E+01 2.6700414306846945E+01 + 2.6710055975231995E+01 2.6719680082777362E+01 2.6729286320187573E+01 2.6738874106139843E+01 2.6748443513050287E+01 + 2.6757994617306291E+01 2.6767527531639558E+01 2.6777042682574198E+01 2.6786540281054087E+01 2.6796018791821574E+01 + 2.6805478041559816E+01 2.6814919136744383E+01 2.6824341988206584E+01 2.6833746975287195E+01 2.6843134405227467E+01 + 2.6852503594189123E+01 2.6861854367890619E+01 2.6871186785904534E+01 2.6880500917013226E+01 2.6889796738476836E+01 + 2.6899074000959686E+01 2.6908333351039087E+01 2.6917574189693632E+01 2.6926796666235639E+01 2.6936000857942158E+01 + 2.6945186876120211E+01 2.6954355220651916E+01 2.6963505835661206E+01 2.6972638070578025E+01 2.6981751897065774E+01 + 2.6990847363269296E+01 2.6999923448001876E+01 2.7008981554127690E+01 2.7018022300973012E+01 2.7027044748485213E+01 + 2.7036048749157512E+01 2.7045034397405562E+01 2.7054001771359665E+01 2.7062951106773831E+01 2.7071882816058512E+01 + 2.7080796624097694E+01 2.7089692008863757E+01 2.7098569009945141E+01 2.7107426879802368E+01 2.7116266251380988E+01 + 2.7125087769904550E+01 2.7133891969765045E+01 2.7142677671078779E+01 2.7151444978691256E+01 2.7160193950136573E+01 + 2.7168924655212695E+01 2.7177637362367562E+01 2.7186332521945047E+01 2.7195009680055477E+01 2.7203668397583431E+01 + 2.7212308731757691E+01 2.7220930556847797E+01 2.7229533538878826E+01 2.7238118660536340E+01 2.7246686275697829E+01 + 2.7255235453704337E+01 2.7263766266073908E+01 2.7272278753088354E+01 2.7280772980043775E+01 2.7289249182335478E+01 + 2.7297707899290494E+01 2.7306148644763351E+01 2.7314570920403884E+01 2.7322974833176954E+01 2.7331360460785891E+01 + 2.7339727880208365E+01 2.7348077626231742E+01 2.7356409236629155E+01 2.7364722155081985E+01 2.7373016694003500E+01 + 2.7381292946474101E+01 2.7389550951337768E+01 2.7397790893451980E+01 2.7406013255507808E+01 2.7414217872434619E+01 + 2.7422403988631032E+01 2.7430571747537950E+01 2.7438721221685022E+01 2.7446852488127590E+01 2.7454966014895156E+01 + 2.7463061947766406E+01 2.7471139673843055E+01 2.7479198997939910E+01 2.7487240013735139E+01 2.7495262790787343E+01 + 2.7503267349667603E+01 2.7511253684362210E+01 2.7519222431713359E+01 2.7527172694970410E+01 2.7535104633775934E+01 + 2.7543018286127833E+01 2.7550913717602452E+01 2.7558791193847647E+01 2.7566651207625441E+01 2.7574493276968344E+01 + 2.7582316906294466E+01 2.7590122209477116E+01 2.7597909275272112E+01 2.7605678187078421E+01 2.7613429370041850E+01 + 2.7621162968498417E+01 2.7628878383179163E+01 2.7636575431239635E+01 2.7644254200182161E+01 2.7651914739122844E+01 + 2.7659557126302136E+01 2.7667181948364057E+01 2.7674789255578176E+01 2.7682378136812634E+01 2.7689948664666183E+01 + 2.7697500573577464E+01 2.7705034128299584E+01 2.7712549683421468E+01 2.7720047909459467E+01 2.7727528204934107E+01 + 2.7734990111947337E+01 2.7742433737199597E+01 2.7749859155098775E+01 2.7757266421011817E+01 2.7764655796810565E+01 + 2.7772027695409296E+01 2.7779381713188052E+01 2.7786717309036788E+01 2.7794034632662150E+01 2.7801333746438807E+01 + 2.7808614718013636E+01 2.7815878041206538E+01 2.7823123865541582E+01 2.7830351519325504E+01 2.7837560852487897E+01 + 2.7844751939480233E+01 2.7851924861030383E+01 2.7859079734502430E+01 2.7866216943632796E+01 2.7873336617528057E+01 + 2.7880438119090215E+01 2.7887521303762739E+01 2.7894586269547190E+01 2.7901633064884830E+01 2.7908661755158224E+01 + 2.7915673122248094E+01 2.7922666763316911E+01 2.7929642142793799E+01 2.7936599248605795E+01 2.7943538153369950E+01 + 2.7950458921855880E+01 2.7957361735884195E+01 2.7964247052237482E+01 2.7971114770779074E+01 2.7977964164552144E+01 + 2.7984795307901976E+01 2.7991608283767331E+01 2.7998403137151865E+01 2.8005179924728054E+01 2.8011939590040924E+01 + 2.8018681378990532E+01 2.8025404904056085E+01 2.8032110194538230E+01 2.8038797314742439E+01 2.8045466331236113E+01 + 2.8052117441404445E+01 2.8058751194940921E+01 2.8065367304771918E+01 2.8071965043481519E+01 2.8078544574428872E+01 + 2.8085105979841838E+01 2.8091649311839948E+01 2.8098174608167781E+01 2.8104682876501581E+01 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 2.5594311267786218E-01 2.5495341879195715E-01 2.5395813592853700E-01 2.5295744419580829E-01 2.5195152219934613E-01 + 2.5094054868017845E-01 2.4992469719804516E-01 2.4890414120589480E-01 2.4787905313387734E-01 2.4684960382514973E-01 + 2.4581596251717383E-01 2.4477829866406964E-01 2.4373677572091523E-01 2.4269155792462280E-01 2.4164280798804819E-01 + 2.4059068695437713E-01 2.3953535441888610E-01 2.3847696931893786E-01 2.3741568536881844E-01 2.3635165686797704E-01 + 2.3528503640723569E-01 2.3421597485172990E-01 2.3314462186905888E-01 2.3207112530344362E-01 2.3099562913666860E-01 + 2.2991827732126557E-01 2.2883921206412655E-01 2.2775857382142647E-01 2.2667650205260745E-01 2.2559313345879065E-01 + 2.2450860204040987E-01 2.2342304125421192E-01 2.2233658279483753E-01 2.2124935659702366E-01 2.2016149177019603E-01 + 2.1907311392949008E-01 2.1798434697374774E-01 2.1689531382783531E-01 2.1580613566355195E-01 2.1471693189560245E-01 + 2.1362782125089730E-01 2.1253891842063236E-01 2.1145033718880049E-01 2.1036219001836695E-01 2.0927458764283000E-01 + 2.0818763906355009E-01 2.0710145269280453E-01 2.0601613254688475E-01 2.0493178237050161E-01 2.0384850433172319E-01 + 2.0276639889899872E-01 2.0168556495024850E-01 2.0060610043710742E-01 1.9952809932447221E-01 1.9845165538281448E-01 + 1.9737686072087260E-01 1.9630380579473697E-01 1.9523257969355282E-01 1.9416326992614705E-01 1.9309596099995058E-01 + 1.9203073687648073E-01 1.9096767991115104E-01 1.8990687086092375E-01 1.8884838930058626E-01 1.8779231274537733E-01 + 1.8673871651997928E-01 1.8568767512715023E-01 1.8463926152457397E-01 1.8359354714132811E-01 1.8255060236421231E-01 + 1.8151049520905835E-01 1.8047329213815463E-01 1.7943905859268489E-01 1.7840785853745833E-01 1.7737975447844739E-01 + 1.7635480799590811E-01 1.7533307811910540E-01 1.7431462281870019E-01 1.7329949890427437E-01 1.7228776178656935E-01 + 1.7127946549050049E-01 1.7027466320491466E-01 1.6927340550318506E-01 1.6827574227070480E-01 1.6728172214393805E-01 + 1.6629139244124064E-01 1.6530479920295499E-01 1.6432198758298633E-01 1.6334300033173402E-01 1.6236787964449984E-01 + 1.6139666646707709E-01 1.6042940050708152E-01 1.5946612034996197E-01 1.5850686343703496E-01 1.5755166538088494E-01 + 1.5660056109407589E-01 1.5565358431998927E-01 1.5471076764614358E-01 1.5377214266419023E-01 1.5283773968153574E-01 + 1.5190758761635520E-01 1.5098171459245566E-01 1.5006014764709830E-01 1.4914291274771119E-01 1.4823003495927575E-01 + 1.4732153802437772E-01 1.4641744461799375E-01 1.4551777657063072E-01 1.4462255471466284E-01 1.4373179888784526E-01 + 1.4284552810718584E-01 1.4196376010227141E-01 1.4108651175954415E-01 1.4021379911242612E-01 1.3934563727625482E-01 + 1.3848204045453247E-01 1.3762302208404306E-01 1.3676859442231459E-01 1.3591876901861910E-01 1.3507355659457373E-01 + 1.3423296703188775E-01 1.3339700938472859E-01 1.3256569197102602E-01 1.3173902209597679E-01 1.3091700641973036E-01 + 1.3009965082522112E-01 1.2928696043284116E-01 1.2847893962004006E-01 1.2767559202933762E-01 1.2687692052184346E-01 + 1.2608292730210316E-01 1.2529361387385943E-01 1.2450898105290657E-01 1.2372902897637751E-01 1.2295375710685717E-01 + 1.2218316427971826E-01 1.2141724868906825E-01 1.2065600790104446E-01 1.1989943886481817E-01 1.1914753789759659E-01 + 1.1840030075745137E-01 1.1765772265396607E-01 1.1691979819687870E-01 1.1618652143710602E-01 1.1545788587889250E-01 + 1.1473388442583271E-01 1.1401450957171169E-01 1.1329975328793374E-01 1.1258960700811055E-01 1.1188406166876110E-01 + 1.1118310772812764E-01 1.1048673506473417E-01 1.0979493332195800E-01 1.0910769160511061E-01 1.0842499855240770E-01 + 1.0774684237050433E-01 1.0707321084696948E-01 1.0640409120643493E-01 1.0573947062403663E-01 1.0507933569360804E-01 + 1.0442367262033561E-01 1.0377246723934880E-01 1.0312570499191648E-01 1.0248337088596321E-01 1.0184544989891353E-01 + 1.0121192647321434E-01 1.0058278472252756E-01 9.9958008445816413E-02 9.9337581060276223E-02 9.8721485714172372E-02 + 9.8109705486905452E-02 9.7502222993805662E-02 9.6899020574521044E-02 9.6300080301042867E-02 9.5705383875159852E-02 + 9.5114912903465063E-02 9.4528648856717287E-02 9.3946572821207400E-02 9.3368665655113897E-02 9.2794907996116671E-02 + 9.2225280113177557E-02 9.1659762362750821E-02 9.1098334877234802E-02 9.0540977489152408E-02 8.9987669846548171E-02 + 8.9438391420361862E-02 8.8893121310920281E-02 8.8351838888393930E-02 8.7814523198028127E-02 8.7281153071434567E-02 + 8.6751707195874370E-02 8.6226164121137969E-02 8.5704502022711612E-02 8.5186699522743409E-02 8.4672734811406122E-02 + 8.4162585950759719E-02 8.3656230895122682E-02 8.3153647462780644E-02 8.2654813231833227E-02 8.2159706186902756E-02 + 8.1668303910753887E-02 8.1180583906237627E-02 8.0696523601998082E-02 8.0216100274470570E-02 7.9739291150778172E-02 + 7.9266073727324374E-02 7.8796425187790842E-02 7.8330322666540678E-02 7.7867743253575747E-02 7.7408663869543926E-02 + 7.6953061570069439E-02 7.6500913539333512E-02 7.6052196736311445E-02 7.5606888098534136E-02 7.5164964545510929E-02 + 7.4726402810404727E-02 7.4291179935107046E-02 7.3859272951031577E-02 7.3430658748902033E-02 7.3005314222132703E-02 + 7.2583216270366249E-02 7.2164341590313305E-02 7.1748667348497303E-02 7.1336170566545565E-02 7.0926828205945064E-02 + 7.0520617251981707E-02 7.0117514717731630E-02 6.9717497398380596E-02 6.9320542704661328E-02 6.8926627776851740E-02 + 6.8535729769231293E-02 6.8147825879308316E-02 6.7762893324866305E-02 6.7380909195799560E-02 6.7001851173627072E-02 + 6.6625696656055486E-02 6.6252423097403826E-02 6.5882008012014104E-02 6.5514428903034244E-02 6.5149663325216670E-02 + 6.4787689253396716E-02 6.4428484463681310E-02 6.4072026803787652E-02 6.3718294195110839E-02 6.3367264519775313E-02 + 6.3018915873803455E-02 6.2673226613538940E-02 6.2330174975457259E-02 6.1989739280017692E-02 6.1651897933649877E-02 + 6.1316629277353624E-02 6.0983912012332914E-02 6.0653724952191040E-02 6.0326046863265877E-02 6.0000856606154077E-02 + 5.9678133137540286E-02 5.9357855326426776E-02 5.9040002530106210E-02 5.8724554084407472E-02 5.8411489343181508E-02 + 5.8100787763661198E-02 5.7792428907398642E-02 5.7486392228396438E-02 5.7182657780795738E-02 5.6881205476596308E-02 + 5.6582015305440922E-02 5.6285067366418161E-02 5.5990341856421939E-02 5.5697818903845057E-02 5.5407479248016159E-02 + 5.5119303436662506E-02 5.4833272132198199E-02 5.4549366112795900E-02 5.4267566218629479E-02 5.3987853370806214E-02 + 5.3710208935547656E-02 5.3434614158839620E-02 5.3161050405676868E-02 5.2889499160666813E-02 5.2619941939521568E-02 + 5.2352360469541059E-02 5.2086736774029196E-02 5.1823052819899941E-02 5.1561290695933321E-02 5.1301432613786876E-02 + 5.1043460788741661E-02 5.0787357760706399E-02 5.0533106232769541E-02 5.0280688908325398E-02 5.0030088614534091E-02 + 4.9781288302996010E-02 4.9534270906148502E-02 4.9289019776324869E-02 4.9045518312890272E-02 4.8803749964466528E-02 + 4.8563698304891774E-02 4.8325347032960590E-02 4.8088679808772149E-02 4.7853680792318269E-02 4.7620334088748412E-02 + 4.7388623895824052E-02 4.7158534536252329E-02 4.6930050453745521E-02 4.6703156053970955E-02 4.6477836281463888E-02 + 4.6254075956659355E-02 4.6031860024635496E-02 4.5811173554579351E-02 4.5592001704308077E-02 4.5374329707907231E-02 + 4.5158143198163678E-02 4.4943427737935984E-02 4.4730169013534861E-02 4.4518352834367461E-02 4.4307965069681605E-02 + 4.4098991762789384E-02 4.3891419232113552E-02 4.3685233774063470E-02 4.3480421806363440E-02 4.3276969867912747E-02 + 4.3074864532958980E-02 4.2874092632171630E-02 4.2674641163560581E-02 4.2476497144117421E-02 4.2279647709894674E-02 + 4.2084080115539893E-02 4.1889781630752722E-02 4.1696739848912645E-02 4.1504942438157152E-02 4.1314377120436133E-02 + 4.1125031734331373E-02 4.0936894233834752E-02 4.0749952571100138E-02 4.0564195075966439E-02 4.0379610074233359E-02 + 4.0196185975164056E-02 4.0013911301285551E-02 3.9832774687323665E-02 3.9652764752233442E-02 3.9473870534890522E-02 + 3.9296081003864100E-02 3.9119385235759710E-02 3.8943772416783637E-02 3.8769231820070194E-02 3.8595752778523833E-02 + 3.8423324946830498E-02 3.8251937940883420E-02 3.8081581482902471E-02 3.7912245400901046E-02 3.7743919586881322E-02 + 3.7576594061341437E-02 3.7410259071939927E-02 3.7244904861216406E-02 3.7080521774106354E-02 3.6917100257239266E-02 + 3.6754630801773637E-02 3.6593104083937102E-02 3.6432510925787386E-02 3.6272842172653030E-02 3.6114088768323005E-02 + 3.5956241754127906E-02 3.5799292199297790E-02 3.5643231403675091E-02 3.5488050744102474E-02 3.5333741644143372E-02 + 3.5180295621724263E-02 3.5027704288091058E-02 3.4875959268814191E-02 3.4725052455539938E-02 3.4574975758997095E-02 + 3.4425721155965289E-02 3.4277280713373950E-02 3.4129646587470655E-02 3.3982810937414364E-02 3.3836766215173085E-02 + 3.3691504843876070E-02 3.3547019328181923E-02 3.3403302258916939E-02 3.3260346299971565E-02 3.3118144156236991E-02 + 3.2976688773982799E-02 3.2835973078376816E-02 3.2695990076784115E-02 3.2556732858309734E-02 3.2418194567545432E-02 + 3.2280368436838187E-02 3.2143247871271069E-02 3.2006826277627118E-02 3.1871097140772839E-02 3.1736054022478546E-02 + 3.1601690525846472E-02 3.1468000378858274E-02 3.1334977424348660E-02 3.1202615525521355E-02 3.1070908619283341E-02 + 3.0939850715805281E-02 3.0809435853641910E-02 3.0679658225914903E-02 3.0550512091892478E-02 3.0421991746345318E-02 + 3.0294091553781370E-02 3.0166805947857964E-02 3.0040129380365686E-02 2.9914056479798588E-02 2.9788581900841514E-02 + 2.9663700345479174E-02 2.9539406581619746E-02 2.9415695442282955E-02 2.9292561770133289E-02 2.9170000601016856E-02 + 2.9048006963649470E-02 2.8926575943628432E-02 2.8805702688725336E-02 2.8685382401884615E-02 2.8565610312116234E-02 + 2.8446381818211353E-02 2.8327692307836310E-02 2.8209537227190863E-02 2.8091912080831165E-02 2.7974812415749881E-02 + 2.7858233835290337E-02 2.7742172065707366E-02 2.7626622836577647E-02 2.7511581932225880E-02 2.7397045191665480E-02 + 2.7283008485818622E-02 2.7169467765789424E-02 2.7056419066088053E-02 2.6943858436552479E-02 2.6831781978015560E-02 + 2.6720185842456820E-02 2.6609066204941263E-02 2.6498419339124370E-02 2.6388241569363740E-02 2.6278529244553501E-02 + 2.6169278761330923E-02 2.6060486563969743E-02 2.5952149112559053E-02 2.5844262979341209E-02 2.5736824760518279E-02 + 2.5629831083876564E-02 2.5523278621912848E-02 2.5417164091198256E-02 2.5311484218346912E-02 2.5206235852017551E-02 + 2.5101415842326683E-02 2.4997021076843436E-02 2.4893048484637425E-02 2.4789495033614176E-02 2.4686357705826393E-02 + 2.4583633598034425E-02 2.4481319799865623E-02 2.4379413440076891E-02 2.4277911686329326E-02 2.4176811735929383E-02 + 2.4076110819890643E-02 2.3975806252490219E-02 2.3875895350111396E-02 2.3776375465348932E-02 2.3677243986823259E-02 + 2.3578498325458042E-02 2.3480135940852524E-02 2.3382154349808799E-02 2.3284551078873662E-02 2.3187323687744763E-02 + 2.3090469769062823E-02 2.2993986932522744E-02 2.2897872847151939E-02 2.2802125218296432E-02 2.2706741766075952E-02 + 2.2611720241618675E-02 2.2517058426635005E-02 2.2422754114055029E-02 2.2328805165262280E-02 2.2235209460101268E-02 + 2.2141964897369467E-02 2.2049069404800965E-02 2.1956520937659475E-02 2.1864317459039408E-02 2.1772457005897590E-02 + 2.1680937619237003E-02 2.1589757362742205E-02 2.1498914325986905E-02 2.1408406623979071E-02 2.1318232378038152E-02 + 2.1228389783798134E-02 2.1138877031569778E-02 2.1049692336160955E-02 2.0960833936225338E-02 2.0872300089909184E-02 + 2.0784089073666370E-02 2.0696199218232375E-02 2.0608628854505789E-02 2.0521376335916254E-02 2.0434440037530876E-02 + 2.0347818349203569E-02 2.0261509688157622E-02 2.0175512509590165E-02 2.0089825273068376E-02 2.0004446458513417E-02 + 1.9919374566070774E-02 1.9834608105977126E-02 1.9750145623606358E-02 1.9665985687959728E-02 1.9582126876110908E-02 + 1.9498567783613103E-02 1.9415307024438694E-02 1.9332343219271457E-02 1.9249675029178168E-02 1.9167301127559783E-02 + 1.9085220198408588E-02 1.9003430942648971E-02 1.8921932077651738E-02 1.8840722325102508E-02 1.8759800450504946E-02 + 1.8679165222612953E-02 1.8598815422464093E-02 1.8518749846755705E-02 1.8438967307017690E-02 1.8359466616365464E-02 + 1.8280246634837429E-02 1.8201306217788656E-02 1.8122644234606584E-02 1.8044259568240722E-02 1.7966151113446956E-02 + 1.7888317773303936E-02 1.7810758486097353E-02 1.7733472188055027E-02 1.7656457828031259E-02 1.7579714367689073E-02 + 1.7503240776538889E-02 1.7427036039019458E-02 1.7351099163737883E-02 1.7275429160127052E-02 1.7200025048869045E-02 + 1.7124885862272038E-02 1.7050010637759083E-02 1.6975398432317278E-02 1.6901048318409186E-02 1.6826959370994047E-02 + 1.6753130675631604E-02 1.6679561328110607E-02 1.6606250426729172E-02 1.6533197093792119E-02 1.6460400458778446E-02 + 1.6387859655897154E-02 1.6315573828606673E-02 1.6243542129517664E-02 1.6171763712041556E-02 1.6100237756222817E-02 + 1.6028963442927008E-02 1.5957939959380503E-02 1.5887166500714818E-02 1.5816642270496048E-02 1.5746366471300649E-02 + 1.5676338334443481E-02 1.5606557087114385E-02 1.5537021963301201E-02 1.5467732204671481E-02 1.5398687058670067E-02 + 1.5329885775491657E-02 1.5261327628288133E-02 1.5193011886486685E-02 1.5124937826119390E-02 1.5057104729728750E-02 + 1.4989511883482902E-02 1.4922158581013752E-02 1.4855044131364051E-02 1.4788167841797982E-02 1.4721529025465604E-02 + 1.4655127001220920E-02 1.4588961089708462E-02 1.4523030622488765E-02 1.4457334940584191E-02 1.4391873384600637E-02 + 1.4326645300340692E-02 1.4261650038870916E-02 1.4196886950957967E-02 1.4132355401667915E-02 1.4068054760112129E-02 + 1.4003984396335418E-02 1.3940143684847443E-02 1.3876532004744951E-02 1.3813148733421387E-02 1.3749993265376429E-02 + 1.3687064994246639E-02 1.3624363315666223E-02 1.3561887629320936E-02 1.3499637338911713E-02 1.3437611845216598E-02 + 1.3375810568031025E-02 1.3314232922510641E-02 1.3252878326750603E-02 1.3191746202428098E-02 1.3130835973546452E-02 + 1.3070147063469846E-02 1.3009678911996791E-02 1.2949430953637025E-02 1.2889402625840343E-02 1.2829593369061112E-02 + 1.2770002624805899E-02 1.2710629837404397E-02 1.2651474462299523E-02 1.2592535951076999E-02 1.2533813757986519E-02 + 1.2475307339759109E-02 1.2417016152755473E-02 1.2358939659394897E-02 1.2301077328544095E-02 1.2243428626388565E-02 + 1.2185993021680332E-02 1.2128769984969482E-02 1.2071758985333959E-02 1.2014959500667966E-02 1.1958371011193519E-02 + 1.1901992995731336E-02 1.1845824935038727E-02 1.1789866311575971E-02 1.1734116605104702E-02 1.1678575306820925E-02 + 1.1623241906548556E-02 1.1568115893615040E-02 1.1513196758948199E-02 1.1458483995188395E-02 1.1403977090901983E-02 + 1.1349675548692005E-02 1.1295578866208430E-02 1.1241686541648721E-02 1.1187998074566529E-02 1.1134512965423326E-02 + 1.1081230711521832E-02 1.1028150823895674E-02 1.0975272806876331E-02 1.0922596166174251E-02 1.0870120408351919E-02 + 1.0817845039767442E-02 1.0765769567066940E-02 1.0713893505924482E-02 1.0662216367159623E-02 1.0610737662335872E-02 + 1.0559456904082812E-02 1.0508373603196473E-02 1.0457487274233682E-02 1.0406797436782717E-02 1.0356303606545344E-02 + 1.0306005300150590E-02 1.0255902034884603E-02 1.0205993325349130E-02 1.0156278692418379E-02 1.0106757658766993E-02 + 1.0057429744150687E-02 1.0008294469060510E-02 9.9593513546439114E-03 9.9105999181754532E-03 9.8620396862327507E-03 + 9.8136701834536343E-03 9.7654909329245570E-03 9.7175014581991313E-03 9.6697012832737527E-03 9.6220899276382669E-03 + 9.5746669224514927E-03 9.5274317938006739E-03 9.4803840672725952E-03 9.4335232688125357E-03 9.3868489244878870E-03 + 9.3403605559117496E-03 9.2940576974596349E-03 9.2479398763638219E-03 9.2020066200782721E-03 9.1562574563856802E-03 + 9.1106919120352414E-03 9.0653095127191125E-03 9.0201097929831758E-03 8.9750922815203370E-03 8.9302565072227821E-03 + 8.8856019991794613E-03 8.8411282845051974E-03 8.7968348923701655E-03 8.7527213571143309E-03 8.7087872085288235E-03 + 8.6650319765441720E-03 8.6214551912094147E-03 8.5780563796610948E-03 8.5348350741095928E-03 8.4917908084485762E-03 + 8.4489231132397792E-03 8.4062315191336563E-03 8.3637155568959762E-03 8.3213747534517449E-03 8.2792086436894504E-03 + 8.2372167608717687E-03 8.1953986360869622E-03 8.1537538005301731E-03 8.1122817854460683E-03 8.0709821174449695E-03 + 8.0298543337681393E-03 7.9888979669414176E-03 7.9481125484611448E-03 7.9074976098884309E-03 7.8670526828236494E-03 + 7.8267772934896805E-03 7.7866709812753933E-03 7.7467332779296034E-03 7.7069637152435075E-03 7.6673618250791007E-03 + 7.6279271382771879E-03 7.5886591837959518E-03 7.5495574998752533E-03 7.5106216185456143E-03 7.4718510718876727E-03 + 7.4332453919977119E-03 7.3948041090619709E-03 7.3565267545778823E-03 7.3184128657418955E-03 7.2804619748743950E-03 + 7.2426736143364461E-03 7.2050473165208642E-03 7.1675826110078377E-03 7.1302790318026272E-03 7.0931361151484905E-03 + 7.0561533937022608E-03 7.0193304001599085E-03 6.9826666673165529E-03 6.9461617242468077E-03 6.9098151074349721E-03 + 6.8736263523263199E-03 6.8375949919907489E-03 6.8017205595976953E-03 6.7660025883886765E-03 6.7304406071740418E-03 + 6.6950341548668753E-03 6.6597827662962421E-03 6.6246859751096223E-03 6.5897433150454744E-03 6.5549543199584026E-03 + 6.5203185185657986E-03 6.4858354522646187E-03 6.4515046554722115E-03 6.4173256625466232E-03 6.3832980079844464E-03 + 6.3494212255761759E-03 6.3156948466748346E-03 6.2821184127014196E-03 6.2486914587545194E-03 6.2154135200658822E-03 + 6.1822841320750953E-03 6.1493028285532899E-03 6.1164691441613515E-03 6.0837826200104096E-03 6.0512427922505014E-03 + 6.0188491972180506E-03 5.9866013714604009E-03 5.9544988490418021E-03 5.9225411679858049E-03 5.8907278693587205E-03 + 5.8590584906000436E-03 5.8275325693411756E-03 5.7961496434865735E-03 5.7649092476315276E-03 5.7338109232888557E-03 + 5.7028542117758246E-03 5.6720386520079788E-03 5.6413637831740073E-03 5.6108291447523806E-03 5.5804342721671608E-03 + 5.5501787105286899E-03 5.5200620016803053E-03 5.4900836862786292E-03 5.4602433052866666E-03 5.4305404000051958E-03 + 5.4009745069972239E-03 5.3715451750665100E-03 5.3422519468914083E-03 5.3130943651140258E-03 5.2840719727149802E-03 + 5.2551843124301429E-03 5.2264309241511608E-03 5.1978113586095649E-03 5.1693251602796956E-03 5.1409718740042668E-03 + 5.1127510450465347E-03 5.0846622174786473E-03 5.0567049358449696E-03 5.0288787519160230E-03 5.0011832125906172E-03 + 4.9736178652011733E-03 4.9461822575221056E-03 4.9188759352696140E-03 4.8916984477678400E-03 4.8646493481395549E-03 + 4.8377281859553201E-03 4.8109345112757737E-03 4.7842678746203215E-03 4.7577278237210998E-03 4.7313139127421414E-03 + 4.7050256964783904E-03 4.6788627274395042E-03 4.6528245586522224E-03 4.6269107436390563E-03 4.6011208324282854E-03 + 4.5754543841596091E-03 4.5499109556163247E-03 4.5244901024787771E-03 4.4991913809665773E-03 4.4740143478754308E-03 + 4.4489585558352696E-03 4.4240235690486355E-03 4.3992089465969423E-03 4.3745142475771206E-03 4.3499390316610285E-03 + 4.3254828586996386E-03 4.3011452855017335E-03 4.2769258801663200E-03 4.2528242048241547E-03 4.2288398221754196E-03 + 4.2049722956071841E-03 4.1812211877526317E-03 4.1575860613950241E-03 4.1340664871242511E-03 4.1106620308790235E-03 + 4.0873722592675143E-03 4.0641967395340269E-03 4.0411350374219149E-03 4.0181867217936327E-03 3.9953513659887127E-03 + 3.9726285399957553E-03 3.9500178145007682E-03 3.9275187609002192E-03 3.9051309482813494E-03 3.8828539516458233E-03 + 3.8606873473973915E-03 3.8386307097763124E-03 3.8166836137735315E-03 3.7948456350909371E-03 3.7731163464994966E-03 + 3.7514953291793826E-03 3.7299821628511490E-03 3.7085764262401832E-03 3.6872776988134321E-03 3.6660855608325179E-03 + 3.6449995889407945E-03 3.6240193705921811E-03 3.6031444891039084E-03 3.5823745278413567E-03 3.5617090709722638E-03 + 3.5411477032412679E-03 3.5206900061349839E-03 3.5003355727367641E-03 3.4800839904265356E-03 3.4599348474219213E-03 + 3.4398877327321696E-03 3.4199422351413270E-03 3.4000979431868376E-03 3.3803544536229850E-03 3.3607113588214727E-03 + 3.3411682519847263E-03 3.3217247271921753E-03 3.3023803774585919E-03 3.2831347984030716E-03 3.2639875907103278E-03 + 3.2449383518729901E-03 3.2259866802715823E-03 3.2071321751826042E-03 3.1883744340984979E-03 3.1697130597315259E-03 + 3.1511476568997438E-03 3.1326778283952859E-03 3.1143031779331631E-03 3.0960233101042628E-03 3.0778378271070755E-03 + 3.0597463387524908E-03 3.0417484542143011E-03 3.0238437817066495E-03 3.0060319304063845E-03 2.9883125104058950E-03 + 2.9706851287765496E-03 2.9531494024175884E-03 2.9357049450503404E-03 2.9183513704946142E-03 2.9010882934751717E-03 + 2.8839153296527065E-03 2.8668320913342537E-03 2.8498382023297380E-03 2.8329332811744294E-03 2.8161169473575774E-03 + 2.7993888213126115E-03 2.7827485236131574E-03 2.7661956742895430E-03 2.7497299017105788E-03 2.7333508301758862E-03 + 2.7170580849639778E-03 2.7008512923331089E-03 2.6847300779011952E-03 2.6686940694209400E-03 2.6527428999691531E-03 + 2.6368761997178298E-03 2.6210935998434580E-03 2.6053947325046633E-03 2.5897792285454750E-03 2.5742467233614234E-03 + 2.5587968549256896E-03 2.5434292593688370E-03 2.5281435738296019E-03 2.5129394364689153E-03 2.4978164835120914E-03 + 2.4827743579252360E-03 2.4678127027301226E-03 2.4529311601073321E-03 2.4381293732331504E-03 2.4234069863201778E-03 + 2.4087636411278630E-03 2.3941989881367054E-03 2.3797126755443002E-03 2.3653043516421199E-03 2.3509736657164860E-03 + 2.3367202681109649E-03 2.3225438062432179E-03 2.3084439380042635E-03 2.2944203169226163E-03 2.2804725974430334E-03 + 2.2666004350419388E-03 2.2528034855810665E-03 2.2390814041727642E-03 2.2254338541333012E-03 2.2118604950797267E-03 + 2.1983609876567931E-03 2.1849349935499436E-03 2.1715821741821266E-03 2.1583021925743883E-03 2.1450947172466503E-03 + 2.1319594140465727E-03 2.1188959498761131E-03 2.1059039926788568E-03 2.0929832094952801E-03 2.0801332711899321E-03 + 2.0673538515704063E-03 2.0546446227581961E-03 2.0420052579388152E-03 2.0294354313226746E-03 2.0169348156884375E-03 + 2.0045030896152206E-03 1.9921399323015866E-03 1.9798450221608613E-03 1.9676180386663912E-03 1.9554586623509443E-03 + 1.9433665717844639E-03 1.9313414531386835E-03 1.9193829911060751E-03 1.9074908703944566E-03 1.8956647768011243E-03 + 1.8839043971455611E-03 1.8722094158967499E-03 1.8605795267028352E-03 1.8490144197800861E-03 1.8375137861885353E-03 + 1.8260773180144166E-03 1.8147047079639859E-03 1.8033956477538275E-03 1.7921498370545633E-03 1.7809669721652835E-03 + 1.7698467504383014E-03 1.7587888702703942E-03 1.7477930300585582E-03 1.7368589293827836E-03 1.7259862732580985E-03 + 1.7151747642760533E-03 1.7044241060941677E-03 1.6937340034142098E-03 1.6831041603685970E-03 1.6725342842448881E-03 + 1.6620240854506496E-03 1.6515732728894718E-03 1.6411815564848842E-03 1.6308486472345364E-03 1.6205742550298627E-03 + 1.6103580947166047E-03 1.6001998821829613E-03 1.5900993325603549E-03 1.5800561620645088E-03 1.5700700879268741E-03 + 1.5601408258778520E-03 1.5502680981398940E-03 1.5404516261037923E-03 1.5306911311445833E-03 1.5209863357006164E-03 + 1.5113369632408355E-03 1.5017427353067668E-03 1.4922033813940777E-03 1.4827186284097633E-03 1.4732882039360793E-03 + 1.4639118366040330E-03 1.4545892557871701E-03 1.4453201897261707E-03 1.4361043741672290E-03 1.4269415418429376E-03 + 1.4178314264999814E-03 1.4087737629348083E-03 1.3997682860970762E-03 1.3908147317492228E-03 1.3819128409276317E-03 + 1.3730623524688147E-03 1.3642630062539972E-03 1.3555145431676336E-03 1.3468167037710946E-03 1.3381692311857782E-03 + 1.3295718717170467E-03 1.3210243703030678E-03 1.3125264728556932E-03 1.3040779263374638E-03 1.2956784769224030E-03 + 1.2873278748854562E-03 1.2790258718478038E-03 1.2707722187545402E-03 1.2625666675518776E-03 1.2544089711760725E-03 + 1.2462988814116159E-03 1.2382361555418843E-03 1.2302205504853990E-03 1.2222518231505745E-03 1.2143297314302314E-03 + 1.2064540342149605E-03 1.1986244888557397E-03 1.1908408594900107E-03 1.1831029083175487E-03 1.1754103981631216E-03 + 1.1677630928031138E-03 1.1601607568399069E-03 1.1526031536514276E-03 1.1450900535877478E-03 1.1376212243005130E-03 + 1.1301964344433370E-03 1.1228154535904188E-03 1.1154780516915211E-03 1.1081839991187242E-03 1.1009330712576191E-03 + 1.0937250415376687E-03 1.0865596843345577E-03 1.0794367750217367E-03 1.0723560888049263E-03 1.0653174029164325E-03 + 1.0583204977242353E-03 1.0513651523776917E-03 1.0444511469431955E-03 1.0375782624451226E-03 1.0307462793812032E-03 + 1.0239549816236585E-03 1.0172041545339543E-03 1.0104935828881172E-03 1.0038230523510272E-03 9.9719234955969373E-04 + 9.9060126024622911E-04 9.8404957474493770E-04 9.7753708340652182E-04 9.7106357652747288E-04 9.6462884532518825E-04 + 9.5823268193354267E-04 9.5187487730726298E-04 9.4555522806185775E-04 9.3927352949464671E-04 9.3302957736593462E-04 + 9.2682316834151695E-04 9.2065409995473440E-04 9.1452216843525389E-04 9.0842717640218448E-04 9.0236892410211792E-04 + 8.9634721267759974E-04 8.9036184415870691E-04 8.8441262100160756E-04 8.7849934584227846E-04 8.7262182595460958E-04 + 8.6677986689310713E-04 8.6097327509300665E-04 8.5520185786462850E-04 8.4946542255025790E-04 8.4376377800269914E-04 + 8.3809673611750797E-04 8.3246410767219569E-04 8.2686570430925456E-04 8.2130133853248240E-04 8.1577082252395124E-04 + 8.1027397116850372E-04 8.0481060095132190E-04 7.9938052778472568E-04 7.9398356842880083E-04 7.8861954049163187E-04 + 7.8328826094824114E-04 7.7798955053551581E-04 7.7272323029059639E-04 7.6748912116762389E-04 7.6228704495683443E-04 + 7.5711682428162164E-04 7.5197828085864086E-04 7.4687124109906928E-04 7.4179553054820688E-04 7.3675097511513164E-04 + 7.3173740152724829E-04 7.2675463733067654E-04 7.2180250893465864E-04 7.1688084824612051E-04 7.1198948527566763E-04 + 7.0712825079402531E-04 7.0229697637783474E-04 6.9749549407510571E-04 6.9272363590647105E-04 6.8798123813157603E-04 + 6.8326813550170556E-04 6.7858416355806551E-04 6.7392915862975449E-04 6.6930295717844651E-04 6.6470539678066824E-04 + 6.6013631787511921E-04 6.5559555990466194E-04 6.5108296308807293E-04 6.4659836841624648E-04 6.4214161670738030E-04 + 6.3771255091720164E-04 6.3331101561590007E-04 6.2893685484773608E-04 6.2458991341379484E-04 6.2027003687448255E-04 + 6.1597707034775114E-04 6.1171086199415857E-04 6.0747126046875491E-04 6.0325811431967652E-04 5.9907127284137911E-04 + 5.9491058606888107E-04 5.9077590335855450E-04 5.8666707790902897E-04 5.8258396240704665E-04 5.7852640981444117E-04 + 5.7449427382239514E-04 5.7048740884697022E-04 5.6650566842694316E-04 5.6254891062675386E-04 5.5861699211508492E-04 + 5.5470977017409509E-04 5.5082710279818255E-04 5.4696884847663400E-04 5.4313486551034863E-04 5.3932501602736650E-04 + 5.3553916083511608E-04 5.3177716144226243E-04 5.2803888005602381E-04 5.2432417907743046E-04 5.2063292170272362E-04 + 5.1696497376931406E-04 5.1332020023364254E-04 5.0969846673770312E-04 5.0609963960596225E-04 5.0252358509675777E-04 + 4.9897017113080706E-04 4.9543926720414897E-04 4.9193074233000792E-04 4.8844446619194918E-04 4.8498030913855995E-04 + 4.8153814122117088E-04 4.7811783492945757E-04 4.7471926336036609E-04 4.7134229949402753E-04 4.6798681696148754E-04 + 4.6465269004498580E-04 4.6133979252927469E-04 4.5804800130764878E-04 4.5477719303168852E-04 4.5152724455105401E-04 + 4.4829803335518225E-04 4.4508943757017169E-04 4.4190133464774801E-04 4.3873360573544679E-04 4.3558613097775703E-04 + 4.3245879100775630E-04 4.2935146708356558E-04 4.2626404094846211E-04 4.2319639405494257E-04 4.2014841125896586E-04 + 4.1711997627638279E-04 4.1411097343101752E-04 4.1112128765627767E-04 4.0815080412208280E-04 4.0519940853301169E-04 + 4.0226698899143473E-04 3.9935343283018616E-04 3.9645862797608290E-04 3.9358246295230173E-04 3.9072482628930863E-04 + 3.8788560779503027E-04 3.8506469876393220E-04 3.8226199005786469E-04 3.7947737311944981E-04 3.7671073996992235E-04 + 3.7396198244579298E-04 3.7123099430422750E-04 3.6851766998073767E-04 3.6582190377970034E-04 3.6314359057020425E-04 + 3.6048262578715682E-04 3.5783890450752110E-04 3.5521232429906708E-04 3.5260278268162295E-04 3.5001017731528598E-04 + 3.4743440640992815E-04 3.4487536872943096E-04 3.4233296252788751E-04 3.3980708904449971E-04 3.3729764882964216E-04 + 3.3480454281133729E-04 3.3232767245976684E-04 3.2986693970971716E-04 3.2742224613645238E-04 3.2499349631438546E-04 + 3.2258059383233692E-04 3.2018344280751102E-04 3.1780194788034202E-04 3.1543601394457064E-04 3.1308554623248145E-04 + 3.1075045212229408E-04 3.0843063832109758E-04 3.0612601204922852E-04 3.0383648103774342E-04 3.0156195308162647E-04 + 2.9930233693011813E-04 2.9705754271700332E-04 2.9482748018361260E-04 2.9261205957417435E-04 2.9041119162849955E-04 + 2.8822478698362249E-04 2.8605275777464736E-04 2.8389501683854298E-04 2.8175147687200456E-04 2.7962205106208494E-04 + 2.7750665307553095E-04 2.7540519633435892E-04 2.7331759623537073E-04 2.7124376826150796E-04 2.6918362798825616E-04 + 2.6713709146494426E-04 2.6510407521134296E-04 2.6308449537219017E-04 2.6107827047974514E-04 2.5908531861801933E-04 + 2.5710555815907922E-04 2.5513890793843003E-04 2.5318528722816010E-04 2.5124461490308713E-04 2.4931681245118898E-04 + 2.4740180051948448E-04 2.4549950020632058E-04 2.4360983305424732E-04 2.4173272086703963E-04 2.3986808562945629E-04 + 2.3801585123085832E-04 2.3617594097845011E-04 2.3434827861710386E-04 2.3253278832633851E-04 2.3072939438348195E-04 + 2.2893802176836221E-04 2.2715859671930337E-04 2.2539104513114578E-04 2.2363529332274120E-04 2.2189126803697607E-04 + 2.2015889597314290E-04 2.1843810498605281E-04 2.1672882361808575E-04 2.1503098027892686E-04 2.1334450378948978E-04 + 2.1166932338491034E-04 2.1000536812938565E-04 2.0835256864591288E-04 2.0671085573147410E-04 2.0508016023883133E-04 + 2.0346041342230009E-04 2.0185154693544842E-04 2.0025349215978733E-04 1.9866618237461808E-04 1.9708955058441542E-04 + 1.9552353001759068E-04 1.9396805428918831E-04 1.9242305740693389E-04 1.9088847301511230E-04 1.8936423694490589E-04 + 1.8785028436209207E-04 1.8634655079913394E-04 1.8485297217201989E-04 1.8336948463976786E-04 1.8189602444405731E-04 + 1.8043252948477280E-04 1.7897893716861153E-04 1.7753518526967066E-04 1.7610121193118415E-04 1.7467695541012403E-04 + 1.7326235447349614E-04 1.7185734901358955E-04 1.7046187862166049E-04 1.6907588325032423E-04 1.6769930320625930E-04 + 1.6633207879797760E-04 1.6497415121347880E-04 1.6362546229685716E-04 1.6228595376103456E-04 1.6095556767256415E-04 + 1.5963424644057546E-04 1.5832193237380967E-04 1.5701856898956310E-04 1.5572410003671336E-04 1.5443846929216368E-04 + 1.5316162087098881E-04 1.5189349922589370E-04 1.5063404861781181E-04 1.4938321480184361E-04 1.4814094338795188E-04 + 1.4690718015512955E-04 1.4568187120994944E-04 1.4446496298753381E-04 1.4325640165374306E-04 1.4205613511240653E-04 + 1.4086411079479658E-04 1.3968027642136403E-04 1.3850458003199088E-04 1.3733696990153645E-04 1.3617739430703171E-04 + 1.3502580296352595E-04 1.3388214516508673E-04 1.3274637051834525E-04 1.3161842893860730E-04 1.3049827046484312E-04 + 1.2938584549275381E-04 1.2828110541496842E-04 1.2718400136586149E-04 1.2609448477916399E-04 1.2501250739149370E-04 + 1.2393802096558097E-04 1.2287097792857570E-04 1.2181133131545625E-04 1.2075903404228985E-04 1.1971403931945278E-04 + 1.1867630064821204E-04 1.1764577147387975E-04 1.1662240617598278E-04 1.1560615939069745E-04 1.1459698576559518E-04 + 1.1359484023329578E-04 1.1259967800966399E-04 1.1161145418041203E-04 1.1063012499639391E-04 1.0965564666108207E-04 + 1.0868797550253976E-04 1.0772706812338814E-04 1.0677288140064045E-04 1.0582537202297824E-04 1.0488449803769265E-04 + 1.0395021717936181E-04 1.0302248740310041E-04 1.0210126693441738E-04 1.0118651421442021E-04 1.0027818763822288E-04 + 9.9376246834406069E-05 9.8480651078856050E-05 9.7591359908833050E-05 9.6708333121054866E-05 9.5831530638512037E-05 + 9.4960912628439250E-05 9.4096440127704344E-05 9.3238073953790456E-05 9.2385775177452654E-05 9.1539505121013937E-05 + 9.0699225153916229E-05 8.9864897142062929E-05 8.9036483500216568E-05 8.8213946541168230E-05 8.7397248823259784E-05 + 8.6586353148818945E-05 8.5781222299240048E-05 8.4981819770126515E-05 8.4188109322966560E-05 8.3400054721197267E-05 + 8.2617619966509389E-05 8.1840769297402964E-05 8.1069466872226581E-05 8.0303677751538140E-05 7.9543367012457284E-05 + 7.8788499825958202E-05 7.8039041594114969E-05 7.7294957948728678E-05 7.6556214392007528E-05 7.5822777486693292E-05 + 7.5094613595265251E-05 7.4371689254598962E-05 7.3653971225426452E-05 7.2941426466419286E-05 7.2234021866783950E-05 + 7.1531725355922452E-05 7.0834504577300928E-05 7.0142327392937556E-05 6.9455161882653907E-05 6.8772976250769066E-05 + 6.8095738864647136E-05 6.7423418840389476E-05 6.6755985114204153E-05 6.6093406834678826E-05 6.5435653361727445E-05 + 6.4782694115849099E-05 6.4134498883899381E-05 6.3491037942099596E-05 6.2852281481861475E-05 6.2218199900573843E-05 + 6.1588763800915264E-05 6.0963943790962922E-05 6.0343711020659852E-05 5.9728036901001536E-05 5.9116892841891879E-05 + 5.8510250453383429E-05 5.7908081544787207E-05 5.7310357884137898E-05 5.6717051930713093E-05 5.6128136205137909E-05 + 5.5543583300860223E-05 5.4963366005750456E-05 5.4387457301027930E-05 5.3815830087147381E-05 5.3248458082306620E-05 + 5.2685314892313716E-05 5.2126374260016311E-05 5.1571610117697979E-05 5.1020996576339006E-05 5.0474507669061328E-05 + 4.9932118297892948E-05 4.9393803138773436E-05 4.8859537051963374E-05 4.8329295081403137E-05 4.7803052391941828E-05 + 4.7280784255941968E-05 4.6762466581127186E-05 4.6248075134606139E-05 4.5737585862653441E-05 4.5230974890340783E-05 + 4.4728218412704883E-05 4.4229292893909768E-05 4.3734175226976936E-05 4.3242842239882895E-05 4.2755270935226795E-05 + 4.2271438489243866E-05 4.1791322104978263E-05 4.1314899393323893E-05 4.0842148212223256E-05 4.0373046422053655E-05 + 3.9907572052970995E-05 3.9445703304165475E-05 3.8987418365048786E-05 3.8532695950034482E-05 3.8081514863246699E-05 + 3.7633853969629539E-05 3.7189692299700869E-05 3.6749009048343648E-05 3.6311783370446872E-05 3.5877995043613114E-05 + 3.5447623799360942E-05 3.5020649481173229E-05 3.4597052093749576E-05 3.4176811801865110E-05 3.3759908705445763E-05 + 3.3346323607404812E-05 3.2936037148820910E-05 3.2529030126602168E-05 3.2125283494499429E-05 3.1724778323405004E-05 + 3.1327495757512862E-05 3.0933417470507514E-05 3.0542525035198470E-05 3.0154800178024728E-05 2.9770224778768228E-05 + 2.9388780795149466E-05 2.9010450383317726E-05 2.8635216067756361E-05 2.8263060332150290E-05 2.7893965809928346E-05 + 2.7527915284418640E-05 2.7164891583610004E-05 2.6804877840787897E-05 2.6447857416984129E-05 2.6093813685030472E-05 + 2.5742730164204200E-05 2.5394590519948280E-05 2.5049378435397423E-05 2.4707077987615730E-05 2.4367673360749062E-05 + 2.4031148796636739E-05 2.3697488680020458E-05 2.3366677538664855E-05 2.3038699895991920E-05 2.2713540742105689E-05 + 2.2391185071504901E-05 2.2071617975617076E-05 2.1754824686001609E-05 2.1440790574215452E-05 2.1129500989708378E-05 + 2.0820941806653939E-05 2.0515098818083761E-05 2.0211957947311377E-05 1.9911505254759610E-05 1.9613726914782176E-05 + 1.9318609159767981E-05 1.9026138651507841E-05 1.8736301993313977E-05 1.8449085923570118E-05 1.8164477315335054E-05 + 1.7882463127127176E-05 1.7603030468621381E-05 1.7326166757610477E-05 1.7051859399570134E-05 1.6780095932426830E-05 + 1.6510864026459127E-05 1.6244151414196806E-05 1.5979946056494158E-05 1.5718236118733853E-05 1.5459009794111406E-05 + 1.5202255405696354E-05 1.4947961406965123E-05 1.4696116294807780E-05 1.4446708857422410E-05 1.4199728000211400E-05 + 1.3955162690485633E-05 1.3713002023745994E-05 1.3473235223296680E-05 1.3235851541899337E-05 1.3000840573183775E-05 + 1.2768191955603704E-05 1.2537895418525268E-05 1.2309940817799511E-05 1.2084318134779030E-05 1.1861017370533018E-05 + 1.1640028903862023E-05 1.1421343100066381E-05 1.1204950439949809E-05 1.0990841528489818E-05 1.0779007083502077E-05 + 1.0569437881923910E-05 1.0362125034633866E-05 1.0157059640393157E-05 9.9542329212201784E-06 9.7536362222522629E-06 + 9.5552609827806518E-06 9.3590987652799964E-06 9.1651413806963258E-06 8.9733806620257285E-06 8.7838085641804204E-06 + 8.5964171637831507E-06 8.4111986175941034E-06 8.2281452563641859E-06 8.0472495886795539E-06 7.8685041741708536E-06 + 7.6919016932311520E-06 7.5174349468682627E-06 7.3450968060899480E-06 7.1748803544440327E-06 7.0067787965831476E-06 + 6.8407854124087610E-06 6.6768936016577257E-06 6.5150968837331785E-06 6.3553888415628490E-06 6.1977632979110292E-06 + 6.0422141527675618E-06 5.8887354011624889E-06 5.7373211571966985E-06 5.5879656539589619E-06 5.4406631848875268E-06 + 5.2954083001431386E-06 5.1521955952710054E-06 5.0110197764761500E-06 4.8718756685143753E-06 4.7347582103773801E-06 + 4.5996624182472447E-06 4.4665835470109922E-06 4.3355168930994802E-06 4.2064578711800449E-06 4.0794020141595778E-06 + 3.9543449604480745E-06 3.8312824620901245E-06 3.7102104578383303E-06 3.5911249512968709E-06 3.4740220641312847E-06 + 3.3588980361173452E-06 3.2457492075093251E-06 3.1345720572677033E-06 3.0253632120179230E-06 2.9181193820693130E-06 + 2.8128373958807527E-06 2.7095142000599741E-06 2.6081468401488327E-06 2.5087325148657285E-06 2.4112685436671541E-06 + 2.3157523443791496E-06 2.2221814532936109E-06 2.1305535251220797E-06 2.0408663150974894E-06 1.9531177363756853E-06 + 1.8673058071552822E-06 1.7834286549266451E-06 1.7014845260846086E-06 1.6214717860211688E-06 1.5433889050964955E-06 + 1.4672345073628105E-06 1.3930073167167920E-06 1.3207061737136239E-06 1.2503300385051756E-06 1.1818779905884912E-06 + 1.1153492230561063E-06 1.0507430680260568E-06 9.8805896349977339E-07 9.2729646779407697E-07 8.6845525971273560E-07 + 8.1153513860511003E-07 7.5653602627359874E-07 7.0345796452646941E-07 6.5230111405359654E-07 6.0306575697210114E-07 + 5.5575229702980064E-07 5.1036126297865710E-07 4.6689330482026230E-07 4.2534918510898311E-07 3.8572979439765676E-07 + 3.4803614599398123E-07 3.1226937620679805E-07 2.7843075391534082E-07 2.4652165860478284E-07 2.1654358577854651E-07 + 1.8849816439302362E-07 1.6238714771865175E-07 1.3821241363224033E-07 1.1597598302703102E-07 9.5679967979399388E-08 + 7.7326610321206874E-08 6.0918287349453169E-08 4.6457502479425140E-08 3.3946885568115651E-08 2.3389222608041433E-08 + 1.4787363212879796E-08 8.1443101296552468E-09 3.4632003676553971E-09 7.4729909408923743E-10 -1.7026714163125078E-19 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 1.0000000000000000E+20 + 3.3484312211186324E+02 3.3185422449762558E+02 3.2888834091361184E+02 3.2594533724941260E+02 3.2302507950002177E+02 + 3.2012742914663505E+02 3.1725225798690889E+02 3.1439943391754008E+02 3.1156882345368416E+02 3.0876029329501654E+02 + 3.0597371033070681E+02 3.0320893650696405E+02 3.0046584623282524E+02 2.9774430734877160E+02 2.9504418757313806E+02 + 2.9236535487628743E+02 2.8970767683900692E+02 2.8707101839102000E+02 2.8445525474429286E+02 2.8186025492031445E+02 + 2.7928588824977408E+02 2.7673202437500061E+02 2.7419853174894098E+02 2.7168527939420733E+02 2.6919214281255347E+02 + 2.6671899293515941E+02 2.6426570105248226E+02 2.6183213882121834E+02 2.5941817603778242E+02 2.5702368581783270E+02 + 2.5464854446043353E+02 2.5229262511038175E+02 2.4995580131753397E+02 2.4763794704353126E+02 2.4533893383597635E+02 + 2.4305863888409809E+02 2.4079693972447592E+02 2.3855371197446834E+02 2.3632883169539795E+02 2.3412217539730182E+02 + 2.3193361672814885E+02 2.2976303691689529E+02 2.2761031511662779E+02 2.2547532963464658E+02 2.2335795925228453E+02 + 2.2125808323111104E+02 2.1917557761708090E+02 2.1711032762819463E+02 2.1506221436260648E+02 2.1303111899416899E+02 + 2.1101692319667072E+02 2.0901950880524717E+02 2.0703875554196117E+02 2.0507455152598314E+02 2.0312678042155085E+02 + 2.0119532641176886E+02 1.9928007420001029E+02 1.9738090802383590E+02 1.9549771240447814E+02 1.9363037737537394E+02 + 1.9177878970708053E+02 1.8994283670480274E+02 1.8812240620988831E+02 1.8631738506975171E+02 1.8452766245736808E+02 + 1.8275313056022054E+02 1.8099367934451598E+02 1.7924919932255096E+02 1.7751958155489214E+02 1.7580471566981524E+02 + 1.7410449534358489E+02 1.7241881511823198E+02 1.7074756821973520E+02 1.6909064842908651E+02 1.6744795008257242E+02 + 1.6581936572883171E+02 1.6420479339654923E+02 1.6260413014839497E+02 1.6101727251332269E+02 1.5944411758024125E+02 + 1.5788456299803883E+02 1.5633850434358669E+02 1.5480584384881516E+02 1.5328648123098807E+02 1.5178031634623798E+02 + 1.5028724961208201E+02 1.4880718185941996E+02 1.4734001222006231E+02 1.4588564653527615E+02 1.4444398743331291E+02 + 1.4301493810291541E+02 1.4159840229500034E+02 1.4019428368710521E+02 1.3880248603277917E+02 1.3742291762851008E+02 + 1.3605548442978818E+02 1.3470009295110751E+02 1.3335665026481888E+02 1.3202506296297580E+02 1.3070523922078445E+02 + 1.2939708988144818E+02 1.2810052420873419E+02 1.2681545202153340E+02 1.2554178369097791E+02 1.2427942876865950E+02 + 1.2302829965794874E+02 1.2178830981908558E+02 1.2055937179374838E+02 1.1934139867223084E+02 1.1813430409054936E+02 + 1.1693800058634777E+02 1.1575240460555430E+02 1.1457743227442070E+02 1.1341299937289443E+02 1.1225902221972406E+02 + 1.1111541767164988E+02 1.0998210126457300E+02 1.0885899330544503E+02 1.0774601262118647E+02 1.0664307817828319E+02 + 1.0555010947514704E+02 1.0446702650461172E+02 1.0339374789528229E+02 1.0233019754337232E+02 1.0127629702583711E+02 + 1.0023196844081035E+02 9.9197134406696023E+01 9.8171717668907391E+01 9.7155640911255333E+01 9.6148830473788422E+01 + 9.5151211012752952E+01 9.4162707694846290E+01 9.3183246196658388E+01 9.2212752008291034E+01 9.1251151668413058E+01 + 9.0298373974199563E+01 8.9354346595038578E+01 8.8418997698794442E+01 8.7492255950548639E+01 8.6574049570033310E+01 + 8.5664308755286086E+01 8.4762964765862108E+01 8.3869948211648520E+01 8.2985190190064699E+01 8.2108622282295741E+01 + 8.1240175410690384E+01 8.0379783250406774E+01 7.9527379512644814E+01 7.8682897675449809E+01 7.7846271688667855E+01 + 7.7017435975832100E+01 7.6196324125737647E+01 7.5382873114991199E+01 7.4577019090962906E+01 7.3778698320451042E+01 + 7.2987847529436038E+01 7.2204403903534612E+01 7.1428303658739878E+01 7.0659486904222476E+01 6.9897892198596409E+01 + 6.9143458517643509E+01 6.8396125284306962E+01 6.7655832132567866E+01 6.6922518557352205E+01 6.6196126942369148E+01 + 6.5476598456874882E+01 6.4763874705537205E+01 6.4057897726820144E+01 6.3358609534234837E+01 6.2665952812376744E+01 + 6.1979872103953404E+01 6.1300311138634584E+01 6.0627214068266404E+01 5.9960525463877758E+01 5.9300189675222761E+01 + 5.8646152404607136E+01 5.7998360324247543E+01 5.7356759642852616E+01 5.6721296976634221E+01 5.6091919347633706E+01 + 5.5468573392927688E+01 5.4851207668289653E+01 5.4239770943059042E+01 5.3634211821467829E+01 5.3034479302621342E+01 + 5.2440522775326855E+01 5.1852291113870749E+01 5.1269735572710267E+01 5.0692806978589772E+01 5.0121456249802861E+01 + 4.9555634685178433E+01 4.8995293960660938E+01 4.8440385130734725E+01 4.7890862001125257E+01 4.7346677415537116E+01 + 4.6807784524029628E+01 4.6274136843866465E+01 4.5745688123282527E+01 4.5222391936576322E+01 4.4704204106723161E+01 + 4.4191079579233175E+01 4.3682973656513049E+01 4.3179841991626823E+01 4.2681640296187553E+01 4.2188324695586346E+01 + 4.1699852806509213E+01 4.1216181659914142E+01 4.0737268628536931E+01 4.0263071424841208E+01 3.9793547669602084E+01 + 3.9328655895068145E+01 3.8868355472469503E+01 3.8412605438723240E+01 3.7961365159413617E+01 3.7514594326747293E+01 + 3.7072252419021368E+01 3.6634300237157966E+01 3.6200698865345160E+01 3.5771409269097845E+01 3.5346392729761327E+01 + 3.4925610842401625E+01 3.4509024888544090E+01 3.4096597808243608E+01 3.3688292354904291E+01 3.3284071346754445E+01 + 3.2883897905368244E+01 3.2487735453389561E+01 3.2095547020307187E+01 3.1707297563448304E+01 3.1322951459725363E+01 + 3.0942473306011532E+01 3.0565827990255947E+01 3.0192980620728239E+01 2.9823896124472270E+01 2.9458541155591075E+01 + 2.9096881736225257E+01 2.8738884169587159E+01 2.8384515037963553E+01 2.8033741013456265E+01 2.7686529014584792E+01 + 2.7342847133872830E+01 2.7002663041036524E+01 2.6665944675118020E+01 2.6332660242625284E+01 2.6002777930168318E+01 + 2.5676266529825494E+01 2.5353095532286446E+01 2.5033234185976447E+01 2.4716651997188915E+01 2.4403318728460579E+01 + 2.4093204031317988E+01 2.3786278460408251E+01 2.3482512863560107E+01 2.3181878000878925E+01 2.2884344879452488E+01 + 2.2589884751453006E+01 2.2298468683705416E+01 2.2010068889289219E+01 2.1724657531190843E+01 2.1442206816399398E+01 + 2.1162689188095491E+01 2.0886077324068477E+01 2.0612343656538656E+01 2.0341461959373010E+01 2.0073405668363932E+01 + 1.9808148374495545E+01 1.9545663894641990E+01 1.9285926239417769E+01 1.9028909248295005E+01 1.8774588072938993E+01 + 1.8522937409961248E+01 1.8273932173285825E+01 1.8027547492971816E+01 1.7783758596766457E+01 1.7542540849602201E+01 + 1.7303870527439020E+01 1.7067723600782145E+01 1.6834076248067916E+01 1.6602904853829827E+01 1.6374185819681660E+01 + 1.6147895943305151E+01 1.5924012588257744E+01 1.5702512942104608E+01 1.5483374390626176E+01 1.5266574516715956E+01 + 1.5052090852793699E+01 1.4839901542170402E+01 1.4629984999580783E+01 1.4422319574283719E+01 1.4216883804914600E+01 + 1.4013656418040087E+01 1.3812616034692041E+01 1.3613742061959977E+01 1.3417013929274184E+01 1.3222411094603265E+01 + 1.3029913196487053E+01 1.2839500052842213E+01 1.2651151331285389E+01 1.2464847626369984E+01 1.2280569345746986E+01 + 1.2098297004945632E+01 1.1918011291708789E+01 1.1739693056351767E+01 1.1563322996974886E+01 1.1388882798847648E+01 + 1.1216353820215771E+01 1.1045717584863963E+01 1.0876955780810405E+01 1.0710050188553520E+01 1.0544982657733946E+01 + 1.0381735735522504E+01 1.0220291748998742E+01 1.0060633183008839E+01 9.9027426787986172E+00 9.7466029109996342E+00 + 9.5921968092594003E+00 9.4395077516757873E+00 9.2885189884160937E+00 9.1392139199291282E+00 8.9915760955705757E+00 + 8.8455890488748299E+00 8.7012367221950520E+00 8.5585032941221257E+00 8.4173728939147274E+00 8.2778297939791763E+00 + 8.1398584084802810E+00 8.0034430951097537E+00 7.8685687463801930E+00 7.7352203108933288E+00 7.6033827549466171E+00 + 7.4730411810349144E+00 7.3441808266408861E+00 7.2167868397007995E+00 7.0908450040815367E+00 6.9663410086582287E+00 + 6.8432606162891796E+00 6.7215897195004528E+00 6.6013143391500293E+00 6.4824203805235650E+00 6.3648944636161469E+00 + 6.2487229884819948E+00 6.1338924758086009E+00 6.0203895695689900E+00 5.9082009948949521E+00 5.7973135054171125E+00 + 5.6877143826086645E+00 5.5793907498185549E+00 5.4723298486914489E+00 5.3665190378830063E+00 5.2619457143002499E+00 + 5.1585974360691376E+00 5.0564621105007790E+00 4.9555275521213380E+00 4.8557816878098157E+00 4.7572125558304892E+00 + 4.6598081967402250E+00 4.5635569222118546E+00 4.4684472407026377E+00 4.3744676237062494E+00 4.2816066494762559E+00 + 4.1898530021076601E+00 4.0991953383989639E+00 4.0096226760525013E+00 3.9211241004298518E+00 3.8336887072924726E+00 + 3.7473056938170894E+00 3.6619643577450147E+00 3.5776539454101179E+00 3.4943641361067206E+00 3.4120845684101626E+00 + 3.3308049310963028E+00 3.2505150092615684E+00 3.1712046835095680E+00 3.0928637638122156E+00 3.0154825495028987E+00 + 2.9390512092332997E+00 2.8635599949483344E+00 2.7889992500485596E+00 2.7153593857626248E+00 2.6426308191103285E+00 + 2.5708043620863803E+00 2.4998707137149734E+00 2.4298206606176884E+00 2.3606450762198912E+00 2.2923348708222933E+00 + 2.2248810546502433E+00 2.1582749055579606E+00 2.0925076345053704E+00 2.0275705355864972E+00 1.9634549852779990E+00 + 1.9001523710250570E+00 1.8376542581849857E+00 1.7759523710477501E+00 1.7150384063688655E+00 1.6549041397798649E+00 + 1.5955414250454674E+00 1.5369421055045964E+00 1.4790982660937455E+00 1.4220020586157414E+00 1.3656456406781636E+00 + 1.3100212446988020E+00 1.2551211772152455E+00 1.2009377168635933E+00 1.1474634349362689E+00 1.0946908923344170E+00 + 1.0426126837581262E+00 9.9122147482968026E-01 9.4051000145187558E-01 8.9047095765095130E-01 8.4109737007010144E-01 + 7.9238219081152006E-01 7.4431842901032075E-01 6.9689916101977345E-01 6.5011751809864482E-01 6.0396662562514025E-01 + 5.5843990142543265E-01 5.1353068317221584E-01 4.6923237285061015E-01 4.2553843616418369E-01 3.8244237154943922E-01 + 3.3993773797415577E-01 2.9801829659505696E-01 2.5667776077195964E-01 2.1590990479431788E-01 1.7570856333172355E-01 + 1.3606758523737009E-01 9.6980934844854746E-02 5.8442701701815147E-02 2.0446955127393411E-02 -1.7012177836318625E-02 + -5.3940512949931213E-02 -9.0343867151623319E-02 -1.2622789705901194E-01 -1.6159819925227409E-01 -1.9646036721460866E-01 + -2.3081993976220808E-01 -2.6468240153770872E-01 -2.9805325091499113E-01 -3.3093779002057744E-01 -3.6334131563155647E-01 + -3.9526910188707853E-01 -4.2672637115961343E-01 -4.5771829452924118E-01 -4.8825006688901673E-01 -5.1832665878489848E-01 + -5.4795308081543670E-01 -5.7713430475073557E-01 -6.0587525335359094E-01 -6.3418080606947436E-01 -6.6205585312587090E-01 + -6.8950507057797139E-01 -7.1653319079013633E-01 -7.4314489928916971E-01 -7.6934483523855435E-01 -7.9513761020721974E-01 + -8.2052780006791748E-01 -8.4551982999678577E-01 -8.7011815896046873E-01 -8.9432720159339552E-01 -9.1815132864981019E-01 + -9.4159489648419237E-01 -9.6466218731951037E-01 -9.8735738682637308E-01 -1.0096846952362328E+00 -1.0316482708818466E+00 + -1.0532522305643213E+00 -1.0745006875990892E+00 -1.0953976498998876E+00 -1.1159470745575979E+00 -1.1361529170830347E+00 + -1.1560190933198364E+00 -1.1755494798483430E+00 -1.1947479586975316E+00 -1.2136182814360592E+00 -1.2321641872250408E+00 + -1.2503894000811118E+00 -1.2682976065226386E+00 -1.2858924559324763E+00 -1.3031776103480115E+00 -1.3201565817759806E+00 + -1.3368329016789766E+00 -1.3532100751687286E+00 -1.3692915719297205E+00 -1.3850808281389584E+00 -1.4005812918118226E+00 + -1.4157962559121928E+00 -1.4307290524536977E+00 -1.4453829795984867E+00 -1.4597613020344089E+00 -1.4738672619917983E+00 + -1.4877040813292484E+00 -1.5012748711125705E+00 -1.5145827658813051E+00 -1.5276308682196076E+00 -1.5404222490190278E+00 + -1.5529599660430269E+00 -1.5652470300553700E+00 -1.5772863787298073E+00 -1.5890809600003304E+00 -1.6006336915991879E+00 + -1.6119474613307432E+00 -1.6230251515347083E+00 -1.6338695759293249E+00 -1.6444835070234927E+00 -1.6548697164328421E+00 + -1.6650309472351355E+00 -1.6749699142536616E+00 -1.6846893331304569E+00 -1.6941918336397896E+00 -1.7034800310132610E+00 + -1.7125565303174684E+00 -1.7214239096618811E+00 -1.7300847204566061E+00 -1.7385415200374921E+00 -1.7467967664078650E+00 + -1.7548529251441287E+00 -1.7627124440219324E+00 -1.7703777453444420E+00 -1.7778512262200652E+00 -1.7851352936766318E+00 + -1.7922322453102324E+00 -1.7991444043866280E+00 -1.8058740701360636E+00 -1.8124235177678978E+00 -1.8187950047645138E+00 + -1.8249907773341352E+00 -1.8310130014530939E+00 -1.8368638590301827E+00 -1.8425455090918268E+00 -1.8480600879815035E+00 + -1.8534097207586100E+00 -1.8585965030244476E+00 -1.8636224761449702E+00 -1.8684896884051556E+00 -1.8732001664756806E+00 + -1.8777559156505899E+00 -1.8821589352592858E+00 -1.8864111804596750E+00 -1.8905145740744806E+00 -1.8944710382836465E+00 + -1.8982824748836211E+00 -1.9019507654866710E+00 -1.9054777901312674E+00 -1.9088653729697562E+00 -1.9121153241253404E+00 + -1.9152294468049520E+00 -1.9182095249989881E+00 -1.9210573236254680E+00 -1.9237746096053692E+00 -1.9263630848498656E+00 + -1.9288244524221914E+00 -1.9311604032982714E+00 -1.9333726103432023E+00 -1.9354627284325341E+00 -1.9374324172202992E+00 + -1.9392832645849680E+00 -1.9410168719139105E+00 -1.9426348243573810E+00 -1.9441386899729585E+00 -1.9455300230928254E+00 + -1.9468103720567718E+00 -1.9479812280155950E+00 -1.9490440926316608E+00 -1.9500004512601483E+00 -1.9508517731472494E+00 + -1.9515995182703056E+00 -1.9522451283247320E+00 -1.9527900055266749E+00 -1.9532355565341706E+00 -1.9535831726438828E+00 + -1.9538342299596827E+00 -1.9539900989847325E+00 -1.9540521220773777E+00 -1.9540216169757685E+00 -1.9538999007946161E+00 + -1.9536882761943211E+00 -1.9533880314887588E+00 -1.9530004524224205E+00 -1.9525267887579716E+00 -1.9519682780587178E+00 + -1.9513261530758035E+00 -1.9506016329207043E+00 -1.9497959232343438E+00 -1.9489102294475986E+00 -1.9479457150604389E+00 + -1.9469035415493425E+00 -1.9457848621919418E+00 -1.9445908174273430E+00 -1.9433225349699692E+00 -1.9419811442666257E+00 + -1.9405677283928309E+00 -1.9390833766938147E+00 -1.9375291675865278E+00 -1.9359061673972007E+00 -1.9342154320652467E+00 + -1.9324580144037560E+00 -1.9306349272210983E+00 -1.9287471899564472E+00 -1.9267958105255694E+00 -1.9247817854868035E+00 + -1.9227061039945372E+00 -1.9205697439679172E+00 -1.9183736552135262E+00 -1.9161187901178003E+00 -1.9138060902542680E+00 + -1.9114364864772908E+00 -1.9090109047439370E+00 -1.9065302532743564E+00 -1.9039954221038751E+00 -1.9014073005343044E+00 + -1.8987667676819799E+00 -1.8960746925780381E+00 -1.8933319413618852E+00 -1.8905393574131264E+00 -1.8876977740915364E+00 + -1.8848080213459693E+00 -1.8818709195204761E+00 -1.8788872794818712E+00 -1.8758579108239939E+00 -1.8727835965157318E+00 + -1.8696651162828501E+00 -1.8665032442062772E+00 -1.8632987453572434E+00 -1.8600523758840590E+00 -1.8567648919304298E+00 + -1.8534370202407513E+00 -1.8500694897421432E+00 -1.8466630219960414E+00 -1.8432183300697778E+00 -1.8397361193323787E+00 + -1.8362170934337112E+00 -1.8326619287607928E+00 -1.8290713055189984E+00 -1.8254458958721878E+00 -1.8217863640158181E+00 + -1.8180933684082727E+00 -1.8143675606017495E+00 -1.8106095726539078E+00 -1.8068200378561012E+00 -1.8029995819370537E+00 + -1.7991488231447506E+00 -1.7952683756137320E+00 -1.7913588424745837E+00 -1.7874208137975929E+00 -1.7834548787987210E+00 + -1.7794616195676241E+00 -1.7754416111688829E+00 -1.7713954258813494E+00 -1.7673236218112394E+00 -1.7632267493158436E+00 + -1.7591053561805869E+00 -1.7549599835078400E+00 -1.7507911657996142E+00 -1.7465994358088419E+00 -1.7423853097856266E+00 + -1.7381493005407203E+00 -1.7338919169460669E+00 -1.7296136616117306E+00 -1.7253150309102114E+00 -1.7209965203532442E+00 + -1.7166586072341536E+00 -1.7123017688988182E+00 -1.7079264776839163E+00 -1.7035332000278698E+00 -1.6991223967519271E+00 + -1.6946945275938636E+00 -1.6902500342718716E+00 -1.6857893604091387E+00 -1.6813129440396182E+00 -1.6768212176787776E+00 + -1.6723146094722823E+00 -1.6677935433020832E+00 -1.6632584299463982E+00 -1.6587096805006925E+00 -1.6541477008025298E+00 + -1.6495728915282011E+00 -1.6449856500147269E+00 -1.6403863668398704E+00 -1.6357754235781496E+00 -1.6311532007817700E+00 + -1.6265200740998942E+00 -1.6218764143263422E+00 -1.6172225897504879E+00 -1.6125589600750361E+00 -1.6078858792457003E+00 + -1.6032036992006988E+00 -1.5985127672708632E+00 -1.5938134262191528E+00 -1.5891060170015014E+00 -1.5843908706025747E+00 + -1.5796683149427786E+00 -1.5749386751106500E+00 -1.5702022718912547E+00 -1.5654594217796189E+00 -1.5607104399637908E+00 + -1.5559556308129268E+00 -1.5511952976741117E+00 -1.5464297404915932E+00 -1.5416592551524173E+00 -1.5368841335496422E+00 + -1.5321046666248110E+00 -1.5273211340224440E+00 -1.5225338159463138E+00 -1.5177429887678915E+00 -1.5129489250673072E+00 + -1.5081518941946701E+00 -1.5033521627375608E+00 -1.4985499889482834E+00 -1.4937456307102657E+00 -1.4889393423230770E+00 + -1.4841313745274809E+00 -1.4793219754666413E+00 -1.4745113891644626E+00 -1.4696998537046384E+00 -1.4648876060734279E+00 + -1.4600748798995999E+00 -1.4552619054892324E+00 -1.4504489110421070E+00 -1.4456361196670027E+00 -1.4408237504483035E+00 + -1.4360120208160239E+00 -1.4312011450529614E+00 -1.4263913343564949E+00 -1.4215827981705611E+00 -1.4167757402201131E+00 + -1.4119703617153923E+00 -1.4071668617836544E+00 -1.4023654366309206E+00 -1.3975662795461807E+00 -1.3927695823774722E+00 + -1.3879755309040445E+00 -1.3831843094937208E+00 -1.3783961001930549E+00 -1.3736110822644068E+00 -1.3688294322765624E+00 + -1.3640513255799300E+00 -1.3592769312853248E+00 -1.3545064179665514E+00 -1.3497399516759467E+00 -1.3449776958633215E+00 + -1.3402198116823205E+00 -1.3354664583672340E+00 -1.3307177902229730E+00 -1.3259739607814718E+00 -1.3212351211375184E+00 + -1.3165014200034326E+00 -1.3117730040766067E+00 -1.3070500175451878E+00 -1.3023326009855409E+00 -1.2976208938075013E+00 + -1.2929150331464019E+00 -1.2882151539203495E+00 -1.2835213893232205E+00 -1.2788338696200339E+00 -1.2741527224609299E+00 + -1.2694780740920193E+00 -1.2648100486339682E+00 -1.2601487681394923E+00 -1.2554943531076772E+00 -1.2508469209677622E+00 + -1.2462065872357799E+00 -1.2415734658693574E+00 -1.2369476688598910E+00 -1.2323293062322769E+00 -1.2277184866421873E+00 + -1.2231153156184515E+00 -1.2185198973302687E+00 -1.2139323342651911E+00 -1.2093527270890290E+00 -1.2047811746357655E+00 + -1.2002177744819342E+00 -1.1956626211711046E+00 -1.1911158082031201E+00 -1.1865774274100334E+00 -1.1820475688991681E+00 + -1.1775263211407925E+00 -1.1730137711819055E+00 -1.1685100035572735E+00 -1.1640151017732498E+00 -1.1595291477117715E+00 + -1.1550522216515922E+00 -1.1505844024172218E+00 -1.1461257672136180E+00 -1.1416763913668879E+00 -1.1372363489943038E+00 + -1.1328057127349909E+00 -1.1283845537370736E+00 -1.1239729417681621E+00 -1.1195709450296472E+00 -1.1151786301762439E+00 + -1.1107960626240090E+00 -1.1064233063984199E+00 -1.1020604241524872E+00 -1.0977074772377062E+00 -1.0933645255245257E+00 + -1.0890316275796259E+00 -1.0847088407255845E+00 -1.0803962209904134E+00 -1.0760938231250234E+00 -1.0718017006371012E+00 + -1.0675199057232425E+00 -1.0632484893983662E+00 -1.0589875014587093E+00 -1.0547369905276516E+00 -1.0504970040166943E+00 + -1.0462675881088255E+00 -1.0420487879554079E+00 -1.0378406475162356E+00 -1.0336432096199286E+00 -1.0294565159956601E+00 + -1.0252806072381657E+00 -1.0211155227750943E+00 -1.0169613012087126E+00 -1.0128179799536603E+00 -1.0086855953820342E+00 + -1.0045641828222205E+00 -1.0004537765319113E+00 -9.9635440973710010E-01 -9.9226611494051320E-01 -9.8818892349698295E-01 + -9.8412286577190633E-01 -9.8006797119863498E-01 -9.7602426811927612E-01 -9.7199178407895492E-01 -9.6797054591438048E-01 + -9.6396057934677259E-01 -9.5996190921814417E-01 -9.5597455946118992E-01 -9.5199855296870073E-01 -9.4803391207730558E-01 + -9.4408065832842392E-01 -9.4013881225818763E-01 -9.3620839357086638E-01 -9.3228942116336178E-01 -9.2838191283648341E-01 + -9.2448588616075877E-01 -9.2060135777668173E-01 -9.1672834342524112E-01 -9.1286685807366041E-01 -9.0901691595407985E-01 + -9.0517853016225458E-01 -9.0135171390797386E-01 -8.9753647928359737E-01 -8.9373283760304079E-01 -8.8994079947509130E-01 + -8.8616037479764476E-01 -8.8239157239095678E-01 -8.7863440141350446E-01 -8.7488886976272695E-01 -8.7115498467760044E-01 + -8.6743275274713316E-01 -8.6372217981158295E-01 -8.6002327096252762E-01 -8.5633603143488501E-01 -8.5266046532153517E-01 + -8.4899657611271140E-01 -8.4534436670109647E-01 -8.4170383918239500E-01 -8.3807499525687867E-01 -8.3445783652717620E-01 + -8.3085236359507653E-01 -8.2725857650433687E-01 -8.2367647475424211E-01 -8.2010605698870920E-01 -8.1654732182903644E-01 + -8.1300026752523236E-01 -8.0946489147290779E-01 -8.0594119055977720E-01 -8.0242916116895580E-01 -7.9892879877511425E-01 + -7.9544009920223946E-01 -7.9196305761330577E-01 -7.8849766846794977E-01 -7.8504392576100890E-01 -7.8160182302993553E-01 + -7.7817135283612515E-01 -7.7475250847174271E-01 -7.7134528225927301E-01 -7.6794966597610126E-01 -7.6456565097508000E-01 + -7.6119322818493818E-01 -7.5783238752267656E-01 -7.5448311996874717E-01 -7.5114541524683931E-01 -7.4781926268819254E-01 + -7.4450465123510468E-01 -7.4120156932676318E-01 -7.3791000480920821E-01 -7.3462994622800726E-01 -7.3136138104577952E-01 + -7.2810429636581686E-01 -7.2485867894077283E-01 -7.2162451493475199E-01 -7.1840179033603058E-01 -7.1519049146487490E-01 + -7.1199060372898149E-01 -7.0880211220903933E-01 -7.0562500167204500E-01 -7.0245925620718064E-01 -6.9930486014879778E-01 + -6.9616179778106124E-01 -6.9303005264989603E-01 -6.8990960800916146E-01 -6.8680044682489105E-01 -6.8370255130975588E-01 + -6.8061590431826768E-01 -6.7754048828264080E-01 -6.7447628507099655E-01 -6.7142327628569987E-01 -6.6838144327134807E-01 + -6.6535076654288527E-01 -6.6233122763842123E-01 -6.5932280731445336E-01 -6.5632548592466133E-01 -6.5333924359037154E-01 + -6.5036406019961690E-01 -6.4739991473753222E-01 -6.4444678757691043E-01 -6.4150465795814160E-01 -6.3857350488230924E-01 + -6.3565330714337021E-01 -6.3274404321142119E-01 -6.2984569103922361E-01 -6.2695822963605297E-01 -6.2408163698949792E-01 + -6.2121589089462559E-01 -6.1836096896055670E-01 -6.1551684837329712E-01 -6.1268350624132550E-01 -6.0986092029145544E-01 + -6.0704906741924614E-01 -6.0424792434926666E-01 -6.0145746764013930E-01 -5.9867767333118371E-01 -5.9590851780961396E-01 + -5.9314997765214916E-01 -5.9040202878979453E-01 -5.8766464700274057E-01 -5.8493780792648553E-01 -5.8222148658562123E-01 + -5.7951565874879607E-01 -5.7682029997413653E-01 -5.7413538534566411E-01 -5.7146088981594123E-01 -5.6879678821316992E-01 + -5.6614305467024872E-01 -5.6349966443909782E-01 -5.6086659217214840E-01 -5.5824381221846386E-01 -5.5563129881561080E-01 + -5.5302902608940541E-01 -5.5043696739704084E-01 -5.4785509755968054E-01 -5.4528339043953356E-01 -5.4272181975180211E-01 + -5.4017035911787692E-01 -5.3762898197801345E-01 -5.3509766127979475E-01 -5.3257637123440116E-01 -5.3006508510236139E-01 + -5.2756377606388749E-01 -5.2507241721635389E-01 -5.2259098136778814E-01 -5.2011944127379584E-01 -5.1765777049038131E-01 + -5.1520594181606172E-01 -5.1276392798039439E-01 -5.1033170164517028E-01 -5.0790923508089014E-01 -5.0549650091915277E-01 + -5.0309347215255196E-01 -5.0070012119746576E-01 -4.9831642041734381E-01 -4.9594234211901811E-01 -4.9357785812326749E-01 + -4.9122294099514702E-01 -4.8887756325347209E-01 -4.8654169700834721E-01 -4.8421531433107051E-01 -4.8189838724730549E-01 + -4.7959088721270376E-01 -4.7729278678005194E-01 -4.7500405807113766E-01 -4.7272467296394227E-01 -4.7045460330461336E-01 + -4.6819382090921896E-01 -4.6594229694333694E-01 -4.6370000399449773E-01 -4.6146691386522376E-01 -4.5924299826378512E-01 + -4.5702822887886235E-01 -4.5482257731620679E-01 -4.5262601470443253E-01 -4.5043851352905934E-01 -4.4826004540233477E-01 + -4.4609058192472506E-01 -4.4393009468273886E-01 -4.4177855507493141E-01 -4.3963593443946619E-01 -4.3750220501215076E-01 + -4.3537733834550180E-01 -4.3326130598417295E-01 -4.3115407947080919E-01 -4.2905563005622754E-01 -4.2696592931959126E-01 + -4.2488494931487170E-01 -4.2281266158203690E-01 -4.2074903766202509E-01 -4.1869404910199320E-01 -4.1664766706613404E-01 + -4.1460986340197964E-01 -4.1258061003982233E-01 -4.1055987855394077E-01 -4.0854764052886239E-01 -4.0654386756013139E-01 + -4.0454853078196773E-01 -4.0256160233509586E-01 -4.0058305407672967E-01 -3.9861285766143417E-01 -3.9665098475924460E-01 + -3.9469740705843126E-01 -3.9275209570994252E-01 -3.9081502316981248E-01 -3.8888616127438813E-01 -3.8696548179599999E-01 + -3.8505295652905902E-01 -3.8314855726153135E-01 -3.8125225530478885E-01 -3.7936402334985958E-01 -3.7748383329234703E-01 + -3.7561165705871258E-01 -3.7374746660197783E-01 -3.7189123376543265E-01 -3.7004293030338170E-01 -3.6820252891828514E-01 + -3.6637000168657896E-01 -3.6454532072093060E-01 -3.6272845816924715E-01 -3.6091938596729517E-01 -3.5911807632574566E-01 + -3.5732450199713939E-01 -3.5553863527223023E-01 -3.5376044847967658E-01 -3.5198991398698909E-01 -3.5022700386736111E-01 + -3.4847169079053358E-01 -3.4672394760065084E-01 -3.4498374682800353E-01 -3.4325106104545583E-01 -3.4152586286805020E-01 + -3.3980812453851478E-01 -3.3809781919259252E-01 -3.3639491980381997E-01 -3.3469939916518598E-01 -3.3301123011633210E-01 + -3.3133038554672545E-01 -3.2965683790184169E-01 -3.2799056078554967E-01 -3.2633152733159632E-01 -3.2467971062086798E-01 + -3.2303508378275281E-01 -3.2139761999024807E-01 -3.1976729194818654E-01 -3.1814407370620296E-01 -3.1652793859755968E-01 + -3.1491886000940045E-01 -3.1331681138241896E-01 -3.1172176609789315E-01 -3.1013369742834251E-01 -3.0855257958758231E-01 + -3.0697838623112961E-01 -3.0541109107071474E-01 -3.0385066787179088E-01 -3.0229709025771223E-01 -3.0075033205981844E-01 + -2.9921036768484427E-01 -2.9767717112767533E-01 -2.9615071643918395E-01 -2.9463097772722818E-01 -2.9311792887943172E-01 + -2.9161154428033093E-01 -2.9011179855937769E-01 -2.8861866605998421E-01 -2.8713212118900944E-01 -2.8565213841097820E-01 + -2.8417869189712058E-01 -2.8271175658414077E-01 -2.8125130734137960E-01 -2.7979731887864001E-01 -2.7834976596749128E-01 + -2.7690862344259987E-01 -2.7547386577992478E-01 -2.7404546845837485E-01 -2.7262340661172496E-01 -2.7120765532546132E-01 + -2.6979818974885605E-01 -2.6839498509357734E-01 -2.6699801616218205E-01 -2.6560725896577825E-01 -2.6422268892375300E-01 + -2.6284428150351308E-01 -2.6147201224355598E-01 -2.6010585666279334E-01 -2.5874579014377902E-01 -2.5739178898594917E-01 + -2.5604382898565248E-01 -2.5470188600792448E-01 -2.5336593598120366E-01 -2.5203595474262086E-01 -2.5071191827354727E-01 + -2.4939380314423382E-01 -2.4808158555172358E-01 -2.4677524175836335E-01 -2.4547474809788064E-01 -2.4418008073039199E-01 + -2.4289121623235768E-01 -2.4160813145800264E-01 -2.4033080300825335E-01 -2.3905920755413654E-01 -2.3779332183265040E-01 + -2.3653312234943696E-01 -2.3527858625475764E-01 -2.3402969070589036E-01 -2.3278641271388381E-01 -2.3154872935842927E-01 + -2.3031661778883078E-01 -2.2909005486329481E-01 -2.2786901829898193E-01 -2.2665348556541129E-01 -2.2544343408622250E-01 + -2.2423884135618222E-01 -2.2303968493936224E-01 -2.2184594205939323E-01 -2.2065759098250901E-01 -2.1947460950519695E-01 + -2.1829697546815333E-01 -2.1712466678191070E-01 -2.1595766137196820E-01 -2.1479593700270924E-01 -2.1363947231188346E-01 + -2.1248824548788783E-01 -2.1134223478980246E-01 -2.1020141854665439E-01 -2.0906577502825577E-01 -2.0793528260408209E-01 + -2.0680992021346900E-01 -2.0568966646444142E-01 -2.0457450003697863E-01 -2.0346439967871191E-01 -2.0235934401487152E-01 + -2.0125931199779679E-01 -2.0016428288391877E-01 -1.9907423570207711E-01 -1.9798914954910554E-01 -1.9690900359378022E-01 + -1.9583377682378650E-01 -1.9476344876142074E-01 -1.9369799898600240E-01 -1.9263740694462814E-01 -1.9158165215664547E-01 + -1.9053071420788062E-01 -1.8948457245672701E-01 -1.8844320697633121E-01 -1.8740659767951642E-01 -1.8637472443335448E-01 + -1.8534756717179868E-01 -1.8432510590479104E-01 -1.8330732036179292E-01 -1.8229419115319989E-01 -1.8128569853156168E-01 + -1.8028182278026447E-01 -1.7928254425401499E-01 -1.7828784334044290E-01 -1.7729770025598079E-01 -1.7631209602768114E-01 + -1.7533101128751602E-01 -1.7435442673419149E-01 -1.7338232313894206E-01 -1.7241468124045481E-01 -1.7145148182878003E-01 + -1.7049270624785245E-01 -1.6953833554118186E-01 -1.6858835082406101E-01 -1.6764273327759871E-01 -1.6670146399782881E-01 + -1.6576452433471336E-01 -1.6483189594933439E-01 -1.6390356029769149E-01 -1.6297949890430591E-01 -1.6205969336406323E-01 + -1.6114412513204485E-01 -1.6023277609609474E-01 -1.5932562824428481E-01 -1.5842266344047232E-01 -1.5752386361864842E-01 + -1.5662921078023018E-01 -1.5573868674193644E-01 -1.5485227391699036E-01 -1.5396995462166493E-01 -1.5309171112697270E-01 + -1.5221752576863826E-01 -1.5134738095501887E-01 -1.5048125886688435E-01 -1.4961914242416199E-01 -1.4876101427693253E-01 + -1.4790685709770243E-01 -1.4705665362331416E-01 -1.4621038664349165E-01 -1.4536803876382329E-01 -1.4452959333741877E-01 + -1.4369503336926856E-01 -1.4286434193116726E-01 -1.4203750215692038E-01 -1.4121449717547385E-01 -1.4039531012854486E-01 + -1.3957992467999608E-01 -1.3876832422803201E-01 -1.3796049223462623E-01 -1.3715641223159844E-01 -1.3635606768912359E-01 + -1.3555944226698191E-01 -1.3476651994031533E-01 -1.3397728449626781E-01 -1.3319171979027020E-01 -1.3240980973897315E-01 + -1.3163153815816356E-01 -1.3085688920992919E-01 -1.3008584718224350E-01 -1.2931839624835084E-01 -1.2855452064937123E-01 + -1.2779420468601149E-01 -1.2703743251970501E-01 -1.2628418879783579E-01 -1.2553445812242575E-01 -1.2478822505099740E-01 + -1.2404547420168774E-01 -1.2330619025893340E-01 -1.2257035772865559E-01 -1.2183796172672648E-01 -1.2110898717394616E-01 + -1.2038341900224292E-01 -1.1966124220853844E-01 -1.1894244184519277E-01 -1.1822700278202440E-01 -1.1751491057175945E-01 + -1.1680615045804943E-01 -1.1610070774675869E-01 -1.1539856780539609E-01 -1.1469971600859927E-01 -1.1400413771800863E-01 + -1.1331181877884040E-01 -1.1262274480314495E-01 -1.1193690146398402E-01 -1.1125427449596371E-01 -1.1057484959616476E-01 + -1.0989861260133274E-01 -1.0922554965097063E-01 -1.0855564672078037E-01 -1.0788888984652083E-01 -1.0722526512442433E-01 + -1.0656475857445387E-01 -1.0590735649289376E-01 -1.0525304531455926E-01 -1.0460181137378710E-01 -1.0395364106439957E-01 + -1.0330852083966428E-01 -1.0266643704226709E-01 -1.0202737641209329E-01 -1.0139132568087654E-01 -1.0075827153672490E-01 + -1.0012820072645631E-01 -9.9501100055540873E-02 -9.8876956189032972E-02 -9.8255756295795582E-02 -9.7637487405079409E-02 + -9.7022136553914506E-02 -9.6409690837322842E-02 -9.5800137408182606E-02 -9.5193463253455332E-02 -9.4589655956600183E-02 + -9.3988702844727628E-02 -9.3390591299341283E-02 -9.2795308758596359E-02 -9.2202842679450142E-02 -9.1613180485941581E-02 + -9.1026310046308262E-02 -9.0442219024736176E-02 -8.9860895142103520E-02 -8.9282326175263396E-02 -8.8706499881681763E-02 + -8.8133404117484285E-02 -8.7563027026809931E-02 -8.6995356609410851E-02 -8.6430380920904479E-02 -8.5868088072132712E-02 + -8.5308466120902204E-02 -8.4751503340884729E-02 -8.4197188152974778E-02 -8.3645508887874420E-02 -8.3096453931158942E-02 + -8.2550011723424202E-02 -8.2006170622127131E-02 -8.1464919304815503E-02 -8.0926246469643928E-02 -8.0390140773800731E-02 + -7.9856590928354024E-02 -7.9325585698912141E-02 -7.8797113742230501E-02 -7.8271164126555187E-02 -7.7747725827591666E-02 + -7.7226787824545909E-02 -7.6708339149958144E-02 -7.6192368889533582E-02 -7.5678865999076167E-02 -7.5167819924593940E-02 + -7.4659219919908773E-02 -7.4153055281734007E-02 -7.3649315359717624E-02 -7.3147989530026769E-02 -7.2649067123787464E-02 + -7.2152537875277672E-02 -7.1658391342536848E-02 -7.1166617135884513E-02 -7.0677204917578659E-02 -7.0190144343883959E-02 + -6.9705425138930216E-02 -6.9223037295687628E-02 -6.8742970682458424E-02 -6.8265215218897737E-02 -6.7789760876020649E-02 + -6.7316597590363750E-02 -6.6845715466063813E-02 -6.6377104755795974E-02 -6.5910755634225410E-02 -6.5446658326371449E-02 + -6.4984803108456446E-02 -6.4525180196861931E-02 -6.4067780063549018E-02 -6.3612593222201266E-02 -6.3159610149760681E-02 + -6.2708821373298959E-02 -6.2260217469789603E-02 -6.1813788935566216E-02 -6.1369526599739210E-02 -6.0927421236982776E-02 + -6.0487463623087823E-02 -6.0049644583372128E-02 -5.9613954992836789E-02 -5.9180385627000509E-02 -5.8748927661238376E-02 + -5.8319572132179275E-02 -5.7892310111110505E-02 -5.7467132718282049E-02 -5.7044031107233120E-02 -5.6622996380219497E-02 + -5.6204020001408096E-02 -5.5787093285573949E-02 -5.5372207596236046E-02 -5.4959354345811617E-02 -5.4548524951861591E-02 + -5.4139710876317103E-02 -5.3732903829629010E-02 -5.3328095416487968E-02 -5.2925277289845418E-02 -5.2524441150566738E-02 + -5.2125578681445732E-02 -5.1728681693580664E-02 -5.1333742144974770E-02 -5.0940751927361264E-02 -5.0549702980333108E-02 + -5.0160587290948744E-02 -4.9773396807166741E-02 -4.9388123679747833E-02 -4.9004760115623255E-02 -4.8623298290986432E-02 + -4.8243730429601610E-02 -4.7866048802251281E-02 -4.7490245622452569E-02 -4.7116313371760643E-02 -4.6744244507424489E-02 + -4.6374031487561369E-02 -4.6005666817935609E-02 -4.5639143050773809E-02 -4.5274452665836649E-02 -4.4911588467068067E-02 + -4.4550543163134060E-02 -4.4191309492596663E-02 -4.3833880240739476E-02 -4.3478248230792792E-02 -4.3124406235263320E-02 + -4.2772347346822726E-02 -4.2422064535830119E-02 -4.2073550819314159E-02 -4.1726799260214234E-02 -4.1381802937504659E-02 + -4.1038554958419633E-02 -4.0697048655890564E-02 -4.0357277277411771E-02 -4.0019234116561199E-02 -3.9682912513290404E-02 + -3.9348305802860327E-02 -3.9015407419899055E-02 -3.8684210939841229E-02 -3.8354709885817510E-02 -3.8026897826945065E-02 + -3.7700768378596497E-02 -3.7376315134481836E-02 -3.7053531849123987E-02 -3.6732412342673958E-02 -3.6412950413271181E-02 + -3.6095139904475798E-02 -3.5778974706035874E-02 -3.5464448671935461E-02 -3.5151555870088232E-02 -3.4840290368046485E-02 + -3.4530646237801763E-02 -3.4222617597006150E-02 -3.3916198609377828E-02 -3.3611383390982803E-02 -3.3308166316949134E-02 + -3.3006541704991003E-02 -3.2706503900671813E-02 -3.2408047295575143E-02 -3.2111166323809497E-02 -3.1815855374831919E-02 + -3.1522109116706151E-02 -3.1229922122949720E-02 -3.0939289013058376E-02 -3.0650204451993603E-02 -3.0362663129660149E-02 + -3.0076659756208133E-02 -2.9792189242944564E-02 -2.9509246437339008E-02 -2.9227826232840207E-02 -2.8947923568524617E-02 + -2.8669533392846575E-02 -2.8392650731565834E-02 -2.8117270742866875E-02 -2.7843388548803614E-02 -2.7570999317411193E-02 + -2.7300098262839259E-02 -2.7030680595166775E-02 -2.6762741651172352E-02 -2.6496276840071345E-02 -2.6231281559264824E-02 + -2.5967751252711627E-02 -2.5705681410215571E-02 -2.5445067507448453E-02 -2.5185905188319334E-02 -2.4928190116955327E-02 + -2.4671917967812696E-02 -2.4417084461909065E-02 -2.4163685366600740E-02 -2.3911716426633766E-02 -2.3661173589759978E-02 + -2.3412052779700654E-02 -2.3164349949490792E-02 -2.2918061099166425E-02 -2.2673182275841121E-02 -2.2429709496704236E-02 + -2.2187639011527618E-02 -2.1946967007797264E-02 -2.1707689719796731E-02 -2.1469803428679511E-02 -2.1233304449889655E-02 + -2.0998189118151833E-02 -2.0764453942763068E-02 -2.0532095393939871E-02 -2.0301109989053216E-02 -2.0071494293765080E-02 + -1.9843244896215344E-02 -1.9616358447959958E-02 -1.9390831722139016E-02 -1.9166661474658991E-02 -1.8943844510025797E-02 + -1.8722377680733433E-02 -1.8502257853339397E-02 -1.8283481994983333E-02 -1.8066047148033729E-02 -1.7849950358571679E-02 + -1.7635188720834308E-02 -1.7421759378571884E-02 -1.7209659482009265E-02 -1.6998886313021207E-02 -1.6789437190248065E-02 + -1.6581309453163266E-02 -1.6374500490453775E-02 -1.6169007740634418E-02 -1.5964828644207837E-02 -1.5761960797516163E-02 + -1.5560401802473074E-02 -1.5360149296190836E-02 -1.5161200966411673E-02 -1.4963554551453482E-02 -1.4767207787907509E-02 + -1.4572158587982269E-02 -1.4378404843355636E-02 -1.4185944494502559E-02 -1.3994775533085866E-02 -1.3804895994554469E-02 + -1.3616303941425937E-02 -1.3428997580541684E-02 -1.3242975108882395E-02 -1.3058234775428749E-02 -1.2874774881292107E-02 + -1.2692593764889229E-02 -1.2511689822716486E-02 -1.2332061557657148E-02 -1.2153707480326997E-02 -1.1976626154367953E-02 + -1.1800816196687870E-02 -1.1626276256746483E-02 -1.1453005067080777E-02 -1.1281001435576239E-02 -1.1110264193067957E-02 + -1.0940792224592304E-02 -1.0772584469603779E-02 -1.0605639897401075E-02 -1.0439957579345219E-02 -1.0275536637788359E-02 + -1.0112376230997621E-02 -9.9504755727341798E-03 -9.7898339324186123E-03 -9.6304506084414869E-03 -9.4723250146463121E-03 + -9.3154565978326963E-03 -9.1598448515589591E-03 -9.0054893262243620E-03 -8.8523896293496145E-03 -8.7005453981748720E-03 + -8.5499563935692979E-03 -8.4006223972803388E-03 -8.2525432466976547E-03 -8.1057188375082759E-03 -7.9601491211852594E-03 + -7.8158340927520237E-03 -7.6727738569419696E-03 -7.5309685444547711E-03 -7.3904183456807993E-03 -7.2511235109169805E-03 + -7.1130843444745162E-03 -6.9763012118330709E-03 -6.8407745662110381E-03 -6.7065048995480882E-03 -6.5734927651568574E-03 + -6.4417387779950198E-03 -6.3112436072082752E-03 -6.1820079948583916E-03 -6.0540327553789365E-03 -5.9273187524826682E-03 + -5.8018669130804152E-03 -5.6776782276271934E-03 -5.5547537427336870E-03 -5.4330945840824589E-03 -5.3127019407898301E-03 + -5.1935770596443004E-03 -5.0757212526259072E-03 -4.9591358972348011E-03 -4.8438224309071088E-03 -4.7297823710457185E-03 + -4.6170172955175082E-03 -4.5055288463474522E-03 -4.3953187328392967E-03 -4.2863887319423283E-03 -4.1787406860400089E-03 + -4.0723765132689039E-03 -3.9672981951394256E-03 -3.8635077819016883E-03 -3.7610073932663490E-03 -3.6597992190057602E-03 + -3.5598855209908542E-03 -3.4612686285161332E-03 -3.3639509423058957E-03 -3.2679349346204437E-03 -3.1732231496653619E-03 + -3.0798182055559696E-03 -2.9877227950413795E-03 -2.8969396740164896E-03 -2.8074716774907668E-03 -2.7193217145391846E-03 + -2.6324927687015201E-03 -2.5469879033560290E-03 -2.4628102532559936E-03 -2.3799630185649795E-03 -2.2984494841227277E-03 + -2.2182730115208014E-03 -2.1394370395889152E-03 -2.0619450946281971E-03 -1.9858007656984133E-03 -1.9110077157872534E-03 + -1.8375696961361525E-03 -1.7654905375815498E-03 -1.6947741510671120E-03 -1.6254245445518915E-03 -1.5574457747856839E-03 + -1.4908419871572812E-03 -1.4256174168409731E-03 -1.3617763816940150E-03 -1.2993232827254663E-03 -1.2382626291110701E-03 + -1.1785989600311189E-03 -1.1203369237339556E-03 -1.0634812580326339E-03 -1.0080367866066684E-03 -9.5400842076401131E-04 + -9.0140118793710210E-04 -8.5022012924092000E-04 -8.0047041617514855E-04 -7.5215730894083140E-04 -7.0528615703063216E-04 + -6.5986240833289570E-04 -6.1589161180824158E-04 -5.7337934617433719E-04 -5.3233132268808961E-04 -4.9275334489641825E-04 + -4.5465130924078601E-04 -4.1803122336462527E-04 -3.8289917505971571E-04 -3.4926130474767855E-04 -3.1712388540632973E-04 + -2.8649328609160160E-04 -2.5737597258467665E-04 -2.2977853658448654E-04 -2.0370762342668324E-04 -1.7916996052592366E-04 + -1.5617240581148456E-04 -1.3472191728999613E-04 -1.1482555374110526E-04 -9.6490516451555139E-05 -7.9724028435615066E-05 + -6.4533430652102954E-05 -5.0926190526629250E-05 -3.8909879791844062E-05 -2.8492175228713986E-05 -1.9680914484799163E-05 + -1.2483919917062078E-05 -6.9091738703023757E-06 -2.9647791926142165E-06 -6.5894750892967649E-07 1.1936520306921770E-16 From 3b7ebbb8dfe808265ab29fc30c04fe79b5ca0926 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 12 Oct 2018 13:26:40 -0600 Subject: [PATCH 095/273] new hyper examples --- doc/src/fix_hyper_local.txt | 15 + doc/src/hyper.txt | 18 +- doc/src/prd.txt | 5 +- examples/hyper/global.000000.jpg | Bin 0 -> 72470 bytes examples/hyper/global.003000.jpg | Bin 0 -> 71795 bytes examples/hyper/global.038000.jpg | Bin 0 -> 70395 bytes examples/hyper/global.059000.jpg | Bin 0 -> 71492 bytes examples/hyper/in.hyper.global | 24 +- examples/hyper/in.hyper.local | 41 +- examples/hyper/local.000000.jpg | Bin 0 -> 493761 bytes examples/hyper/local.000700.jpg | Bin 0 -> 490185 bytes examples/hyper/local.000800.jpg | Bin 0 -> 488885 bytes examples/hyper/local.001100.jpg | Bin 0 -> 490525 bytes examples/hyper/log.hyper.global.g++.4 | 1243 +++++++++++++++++++++++++ examples/hyper/log.hyper.local.g++.16 | 993 ++++++++++++++++++++ src/REPLICA/fix_hyper_local.cpp | 8 +- src/REPLICA/hyper.cpp | 18 +- 17 files changed, 2292 insertions(+), 73 deletions(-) create mode 100644 examples/hyper/global.000000.jpg create mode 100644 examples/hyper/global.003000.jpg create mode 100644 examples/hyper/global.038000.jpg create mode 100644 examples/hyper/global.059000.jpg create mode 100644 examples/hyper/local.000000.jpg create mode 100644 examples/hyper/local.000700.jpg create mode 100644 examples/hyper/local.000800.jpg create mode 100644 examples/hyper/local.001100.jpg create mode 100644 examples/hyper/log.hyper.global.g++.4 create mode 100644 examples/hyper/log.hyper.local.g++.16 diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index e4cbc42c7f..b8e5cf07da 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -216,6 +216,21 @@ each pair. E.g. something like 2x the cutoff of the interatomic potential. In practice a {Dcut} value of ~10 Angstroms seems to work well for many solid-state systems. +NOTE: You must also insure that ghost atom communication is performed +for a distance of at least {Dcut} + {cutevent} where {cutevent} = the +distance one or more atoms move (between quenched states) to be +considered an "event". It is an argument to the "compute +event/displace" command used to detect events. By default the ghost +communication distance is set by the pair_style cutoff, which will +typically be < {Dcut}. The "comm_modify cutoff"_comm_modify.html +command can be used to set the ghost cutoff explicitly, e.g. + +comm_modify cutoff 12.0 :pre + +This fix does not know the {cutevent} parameter, but uses half the +bond length as an estimate to warn if the ghost cutoff is not long +enough. + As described above the {alpha} argument is a pre-factor in the boostostat update equation for each bond's Cij prefactor. {Alpha} is specified in time units, similar to other thermostat or barostat diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index e862af2235..936fb665d3 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -17,15 +17,12 @@ Nevent = check for events every this many steps :l fix-ID = ID of a fix that applies a global or local bias potential, can be NULL :l compute-ID = ID of a compute that identifies when an event has occurred :l zero or more keyword/value pairs may be appended :l -keyword = {min} or {time} or {dump} or {rebond} :l +keyword = {min} or {dump} or {rebond} :l {min} values = etol ftol maxiter maxeval etol = stopping tolerance for energy, used in quenching ftol = stopping tolerance for force, used in quenching maxiter = max iterations of minimize, used in quenching maxeval = max number of force/energy evaluations, used in quenching - {time} value = {steps} or {clock} - {steps} = simulation runs for N timesteps (default) - {clock} = simulation runs until hyper time exceeds N timesteps {dump} value = dump-ID dump-ID = ID of dump to trigger whenever an event takes place {rebond} value = Nrebond @@ -73,9 +70,8 @@ that each timestep is effectively longer. PRD creates Nr replicas of the system and runs dynamics on each independently with a normal unbiased potential until an event occurs in one of the replicas. The time between events is reduced by a factor of Nr replicas. For both -methods, per wall-clock second, more physical time elapses and more -events occur. See the "prd"_prd.html doc page for more info about -PRD. +methods, per CPU second, more physical time elapses and more events +occur. See the "prd"_prd.html doc page for more info about PRD. An HD run has several stages, which are repeated each time an "event" occurs, as explained below. The logic for an HD run is as follows: @@ -146,14 +142,6 @@ As explained above, the {min} keyword can be used to specify parameters for the quench. Their meaning is the same as for the "minimize"_minimize.html command -The {time} keyword determines how the {N} timesteps argument is -interpreted. If {time} is set to {steps}, then hyperdynamics is run -for {N} timesteps. If the time acceleration provided by the bias -potential is 10x, then that is the same as running a normal (unbiased) -MD simulation for 10N steps. If {time} is set to {clock}, then -hyperdynamics would run for N/10 steps, since that would correspond to -an elapsed real time of N*dt. - The {dump} keyword can be used to trigger a specific dump command with the specified {dump-ID} to output a snapshot each time an event is detected. It can be specified multiple times with different {dump-ID} diff --git a/doc/src/prd.txt b/doc/src/prd.txt index 43c0d309c8..e1d6fc1b4e 100644 --- a/doc/src/prd.txt +++ b/doc/src/prd.txt @@ -70,9 +70,8 @@ an event occurs in one of the replicas. The time between events is reduced by a factor of Nr replicas. HD uses a single replica of the system and accelerates time by biasing the interaction potential in a manner such that each timestep is effectively longer. For both -methods, per wall-clock second, more physical time elapses and more -events occur. See the "hyper"_hyper.html doc page for more info about -HD. +methods, per CPU second, more physical time elapses and more events +occur. See the "hyper"_hyper.html doc page for more info about HD. In PRD, each replica runs on a partition of one or more processors. Processor partitions are defined at run-time using the "-partition diff --git a/examples/hyper/global.000000.jpg b/examples/hyper/global.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b462983f6a950954a8606f3cf4dfdbcc0ca6ff96 GIT binary patch literal 72470 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

    75>Wp#HNxV{P z56)@4$DBl&yLp+jPLo)zJ%tGW@k3qsd<5BBoD5mTC}%jswic!;_eKoH78|mivMGH; zgA`(1MqWr0GE32+?9Pxh-l9vV*IHYUun;)~-$0%?ku|JFsItj}CzjuprSR}aUhw7z zuLpZjH17Dt!Zfxn!aMJ4sZ&&e(Z#sZTkLTecbWmU7|D_JgCYQ6uz^<^qwuyV={{2P zM-=C|{evd+nev-JIZWF{r}CeZ!gXU7)rxY1d-MFIV^9AMi&m3hff0@HB&|6r$s!ih)f0*YYuTmSv0?L|D*fU>+#v9LMJYdyZX~od0U!rfnb1h#Qz^& zM~t1SXX77sk;f1H)7+v@rNGypNKg5VQVN&iXg1x#olY1|&6=v70O)5n|CQbmCegGj zatVlB{-b2&#JMO$T+;enCH5Zi*%Tv_|c6_{1A`_efvZ%v`r+ z;b)XE{*E=4QxF$qFS^QF;B;cezH=|NdhvJM(R?NvSG;;_Sdrb4pRJs5SFa&Zl;q)a z#yg_DBha_-z;I37zYo^1A(kyhpFA_L^YtmF(z4UNmyisW&>u-Uv%fBz4EIcmulr8g z$RKkjQT6=4lIoX`f8HzC{pz&73x&%_3KnzXxL1yXKzvCXUv43)2X9D>j=ocAI)MfeXqec>QxgW z?dJq*EY7}|b&C19jBi7eI16I;pMn=?@_T9{0OAAuDJ+^0&%^mCi5rtgE^|JoZVJD8KNm@F5# zWw3=9#9PvU*|5y+^)n~a#M_%D&USEUI(2+Uz9(ixfqeP1qs3ohh%iv}^mE#$A=BU= zbm4F2qq%89%=rcoN6hOR&g3eQ2zNE~-TOguOEnZ|WzgE-#NJ({lJ|SMwIzb-_x{N> z8LT9JO@gN`tfcEaJ-p96uA_l#nNyu~Zp)v;GU-FN8Ta_Ao|=3jM0U4AAZ*E-bTDzo z(BYWDnaT4oTJXmO|?hE-8{W@>3ZhRcKVhQC2R($EP2|Ut-(4<=u`1A9|#{lmq0*;Fw)zfvmU|J(&5;EPim}gtVFVEM)wHNOdJ* zKWd+E;&{a<;Dgh@bALzO|1Z$PU4VcPtNM++cSBusGz;HOA&OwR8Xhx-JAPuAof}ed zD}k-Zhq8=3pA(dKO`sQ7i-8@bJRCBCVej8OQdl;1T^N21eO+h+2gNkW#q@;nYI&r7=|icr@mp1I!f z6$}wVSGX_1dg%LV$6;un6Nrsl8aQM>Lvls{e}_=IeRKHTuLcv$t4oz{rCB(U9#4q+=*MoleAbL3%4s z;p?~w$fIBf-$Es(!R{%I#}as7Pd8`DG)7`uvMTIY&4i7zipdozx`r6TU$YjrYsozJ zrJoGt_=OP^ZyuH#XX`NK;n_+^fE=9!V$$k7%*UT!7!XG|d>tVf?Jxe4MOiap!RSSN zNK7YH#@PipxtdLXMp)EkVLpTim)|i-CtVq$#Bo-d3Ft9~*nZiBGrkx8z^E`NQqN^3&8O(0qT>Ddb z1MOrKvXzcaM3*X-Ovq7Os_9g9jH~k&PXia&vd1#qC4-(jT9N#RH>c64z>KKNgSSO` z-e+O1=~@s>TOvMW1kc4W#|5b2>6k_zy2=ZzNT)TJa0hDDVKv7U~!D^6+k$M9>pb|Bt^I zxjjngd8Zz6|3hY(zW@WJl4!@3y7tg1>@^YO87fbI+)wf*hY#i^aM4NhoV7Ey6O?)U zAKrHHWo1xlx9zo1JbRl2g@;C#!nyML5$EX{QW;ZFaQt#BE)tRaG4DH%e)zn|lzZdk z$3wWl69&)K-WFGu6^5TO>G<7j;&%b)qa#&-BPl< zRRRP9mbq`4{X-RLAQ_2VjQ5uBxosyvibj4-LtdGOf?R@j2Ut)Cn`12+Jq(0n4k*a+ z&HK2tdTO5Pb=!BBeJci@3?zAq32H!tV&5SnHuZ=69zwjd29qfI%!a&mTWCujZv9DK z!=6F1mF6%xiYxJTbG;%TwW|JL|BL;jl>%w3GfNHvkm#OCr9pfQNF2s%V$r=rX@o6ZZYW5ORDW24+QT9CL5QX1j5$7y{#(*|A^NUq&d=NWKlGz8HT_YL);dS-KT?ZvEn$YbyIf0%-Z?Y8Tkff}P zT(a45ft?fJ>HqLZcXG?apg}@+t`R3r2grn5R-nLqU-4()W>cWdg&dQ$2B>RD;6J=H zX;-64+UB{XEw$>T%*mK3&UJ?o#>pK4euux^&ph{DEn;WJ8q!W2O!4)~81#et8)u2A zdIFhGFFEeC$=RPv)mQQ8+qI5mcT`tQ_<=M5^pl56TrtZ5G8aT?)J}LPimmY*S&Yhi z%_jdy6vuMg0!N0Nj>GEKQCRJ+nssfa2XQ(%YJzVW0=z&ApV2%GEa>qnNAM}I(BoyX z?Ga>mX~^6Qq-;44P(aGod*N-RND7%Nkh0C*1ZMdT zf{FZJK4I_QxR_+Di{G?*yu<-6Al$5;Ugh96nOe&#@qc)Uz#I(Zhv6XQ{fOZ#s(%_e z4$#FY-1KQ&_uYp4t*F!0*XOPO{v8(J+6y3r?f!(FAMh+1y-J{&i?%ltj`RNyFV7d6 zi!EfYnOe)rsyU_!-J_oY-Y*}8na8*Lh%dn^(-YC(j>*;`X6%}31sM(EB<%0SEDh|^ z>+=4?TN-Zax?GrMioFJctrEFz^@(Yb+aG`^j|KE!p;mwF$4rwvU#B>rjb)RNA$v5- zGr&N3Z8F(%zJ!d(9Ulcb^R5{S><>J1`-3t61si+ugLpXu%OfrwPivPXO2SfJFoN(? z#r~?VKSbWU;3BlBnuxQ zq<{u$TC2mJ-R>zM54L=NO#wraswT5YXPPHlje$~bzRNkeA+E*JRU7K(m`blJW(4r2 z7KalTcMT3P5h0syZE>aEnBY_M{Ef#m`Q7~AX$yLmQBSkAqscn*C&Uro z7+cK4k%-9db(s5g|Mos^St8wN+GzKFsx=v1_32N3e#>;La#CdOJ z$dWUqnx`K$dw{-NSeBv8Mr#*&(KUk1J(vH-pAu-ZEq+Zb76@c(-`plySL$OD<xy=MqsO{I2=V<^fGjDO}PA)PCL#H7v!~=wp(p%1#^&@zq9fr zLMQsYDSPE?nUZfzabZRXl!`K(28@cT8a&+lcyeG7Z~k)}xtp!a*d zO?`AO&4wX}-s(RB)ryz@eIS<<))XNS?|%%JLR&SG_8Wh}u&_i`$;X0?sVk>B{&(b;(!1ceeo**sPSa_1?B z3K43P%VXA{({U3zy7AR_hazS4rJ+4CX!g8eaF;p|J+GhB{7h8q0b3CM3&7QKB$gFn zsibQ2>kV0E*qvE*)FN?YS+g*5~zt_BX&!?z^DsoH%3mQVmeQpizrGpefw_1|6rWD zDusy}M!8@$eVaqCeS9+#&}pe}j6z44czN`_th}(t-oEdOPvz5>%5s>hM=Mx^O0+l-9_awoRCAAXSE60T84GGmi`P+&ZFEjc2^GHa_1p#k9)1#}%GCcKhriLeRL^ zZ>`xH+DOLwabmix@i_SS^t{aO^4Ntft?yVjTU2&&WA!4?l1OV}rB`lTj>&nlmAfk0 zILR{jBbL>6@m5M9M5{5~m)SetcFcalJke9a;`ZBZ&8A{zVa7?(P;M z|NrLYn%UNIzYY*H`4-0sHy%Ph03I=ywW(?!AG4RvZiyy#*V2c-^x7UYOIkNu@jssg zwSFx?Mw&&>&M7&TR`>qp1jas}kjBj1U%LUxby?%z2u)?B!egAHwyJ0nLU)tF|Eg_! z@G^Tz@rSsqe8380On=+Orov>a#>IDz1u8pUVA%rvVJCt+6>z6!mSwt#VS(EJ@K%Ix z#g9$88=Bkb7RmxwbAY;b=)ibkCb$i-Pm2<8eY}V*iXF%dT&a+nQ-3kVTr=Pup_C94 z`x>k8xwI+5t3tYj?6GPhtO*XoVU%_%uiB3u_`kE4lce1Nj>L&}=4 z{=dD$_j`Ph_BZtlR#6YFX@PI)(V#YoAsa61zcyvS2Q||_B&uvCe6p=9wq!9rS}c1C z(r;**cP7^Y?g!G?1nH>y!v zuoM6jXrynLvDGd7dJt^tOT3|i7d72MA(r$>8rt~ zlUs>AF@D%7N%Jj`uK|Qc1TGou{v7BAlA)Ve9yQ}PSMMbseLOgF&a~Pe+tz3rIj&R9 zlJ_z7ORr6~WRj&cpsecXQpwY3fjbtOuCDVMk}{ti0G2@3L`I-IEb zBIQ%Rm*#DHX>*ChY8(WQRnNS6_L6(7CHOb=j>9XeK*4CZ9xAf=9v}aJkN58rB;8o4 z)bUQ-sA=4Q5L%C6IraN-=~>dZk6H~wD#NON)jm%>k(!63;UQBlWA#H?PhT!)F_3fh z4@Pfu<>;kW=a&qdXrPmmNWLl>#Fw|NNi%Myyn%=h#3(l8a{d4UfvBNiZIkctKve zZ^jTDc;C-~5$gH<2_)m~Cw!x~9Ks3j%xLJap_~XNmo2G38M{@$6-RU_$56D>^ya70 zp&DYK5!UR5wo7Xi&i`lB(f*$fC(mt>g#i+XnhZaT-*zFtRnu%=a(L$eJ5#mX`&_30 z&2Z`6Pdv$Kd{URdK|UlrGMCHilb<@j6YU$7^q$DMDV7NKS~2p{hnmaOi7#k?oA4Qn ziP2f%`X7EoLlBvuYw?|~EQ6QpY;fS1cFIC@;jo`37W}qVJxeW6NY)n$(p8wONCg)wK|}fcq!>UZ+7!OJGM+nyjGsPkGU?dM65- z(4i?hm&oJ%?aul5GktwaZ$Ro$EEfvA-xByLg`G;xYJc!M>T&ib?vAw(Xn(r%J93SK z*SzqpH>=)XXV)K@h%%sXL2L9X%}!;#cfCQjQzyD$B;MF~`V5Rwz0H9E8?Cis(t^YD z;-cycU6?KyulwDBIYKg zcUUF4mfqpoyb?aGkT-LKG8kbhF*4g}GVm-a!EM+j z4kaeo4*c*=9C_TAWA~w9_JONmv()fLwWr)B~oGjOupqmJbY+KuD9aanu5@qK@GO}3=EaM@d}o9_R_v8 zY{FKt1ztweGMVCEin+dG9sCck3i)7lmivsZWP4k-t8XbOfDlu*HP4WOR==pY0J9fP zePJUvI_OpxIgj5lb0v|7OXf-3T4z=d5e7dECC+oSZH&cxRwQpVNILk#u}8);Z`6<7 ztH5>u6e5&npDjXUPx^NleIk9jxGsIC<-SVtJ5GMG*qqla!Cn1Nz#=MV+m=%v$M5E% zz+VOAI&l+{GKo^F#R(0~jpdEL@~`H7WxpM^(qV-gSMG=);=jJUq&K%SY^0AX5F3s= zt)z%S7S?(B04CD})%pZAElFu&#W({LWPQ;wqQ64B5_1b<7%jkJXIWt#sDTl5W~UUYnf;<}W1V zds4-Et+a@`L3e; ziHaiCS~uXI@8; zcv9Bb-+%P+VNmPul}YPQ)dSqkZw_fI+!wz^uo8OV1^QkRjAvZ!hhF2$qstTj{W=cO ziOK2^n`3X!7#UgxhvuCPQzUF5y;J$K#P3HwbQE`6hkVd-(RP znb3-P-MsiIvYqr52xmB8G6 zfg_t+Yf~B6>VXX&NHq}{l8PlZKPp}-OJmPOX2O{wZeUwvUji6|j`Xj)30(kqkE~^w z>gTEfS>fx$8{Un$&{o#iPIJdQ^;LW-r7=beBwCR;r}Mr(+=l)GiEbZTEbi-PRmR?<^lTK4SV;KUU+Dhx^phOO+ZXdF_s@ z`7IQp7+?2CP>~a%b!qV)eR?o@kXbnk{UJ}R(t{Sj=W~O!K5o%>OiF~F^R6^0SnKAT zhUWeS#LXt5e7`D`;=xjdt!y@vdS@dQ;5=6l$zjnHgvaNT%eJncEmp9$t8;KzsT7_y z9hqagD z{fna}R)-Z~uon|@-*wwd?YghTd@kruCM5#w7QUYecI>M6Ot%wI5kK)$p4?@xbq;}p zgEv5e-p}wYQOwnIPTeuiU&I=&VNS?^?F3X>y+L!}q*1lVwXt&y-xn|O-&^V+yU9s$ zO3{irqn>}k)H2AE**v#}!9(XfrFi-1rd01e!au#Ez0q_`>JQ?3pPq?dQZB}DzMYWc zwkrg!*25} zvh4xv5~dIOg5GWsEv#M{6KWEzZFRqh;p2A$R8z&6Tj>-- z<4|otz`WhnxG+rzOwkOn!kQ(el>JMCp=HLBTE)_(rtJWBG^-S-aF#0mufhpcZW-cZ zqn~Jf)~)!{1@!giYYnfmJDr07WMQzf(L#rK{qJArLD9LWPu?to704fQ#sz-^t*BlB z4j-Cp(uoB{f0Z4TqN-{eBAl}+evtwFC+^?cpIFLzO1*&$!ckdXe|feaP2ph1rN2GsQrL=pEv zfaWRpVN|zPP^Y|H$VG1c^b3}OhfsoLaa~VTDcm~dTKjAl7tngT0^i*La^TAihgvZz zS)1D{I(AD!o+YQ!L)wJ&Ko-wBDm-ynN5*I=8uG=y=uVJa*WGruBceap*cE>z&cgRX zingt!&8ZrP`B6TEV{Z-@I#Uz@tqy*ulG%MiFT%+EPSmVzHg7uGiIPqmzHmH#3fekU z>QunH$bO}8@bw~4qcy3kA}Tb_eyeCEsH8YdGvk2Pn$4Y4LG1eNh3Mjtf>xG;fP?z* zbHy3&Jp#pVc+SQK4gbRUC(A7^*8x4Kfn$Kwn0C=-a;4oQx-ND|yZw^KvByC2L4z5) zoc)tzASm(fXeN%tX4*yf9mMPX^)YC9YDBZ+{G?EfD$iE{M<)lDrPB%H@`5v{}7M97n44GqY4r&*4ADla69$S2;cqJ9-ZasFN-JfEeyuZjuQCmzZS zPz;ci+a@+%vPWvpjWNT^>agI8WP!Ni#tu_JiuPXKgtQwt>hJ9T5@nG?hHf6%+AvsoVx$k1G^-ON@98yXD<1y(YIxV60#$159o4Po zTH0uIE50D->fS&BdQIAK`Yg^nLRB^6Jks(tE4HDGMcXA9atY|6GIrdIhI2r!_+{_q zC05-wME#7OsV2*RIq1HIn?zL)DH=3?d)D|`c4sa;qVq5~JE`tvwmR&DvOQQW>YdRJ zV1U}xhpa90T3G5OcW|5kX2WLNT_(Oi9E^t$QUHX@Q)6$<1XmCRogS-5o|G1xBYP<8 zd}%#o&!dV+0;fEVSx3gTJ`-YoHW3zB-Qv%GAgk?QsE8^1UiWw_`(iJ!)UV-C!bz|j z9%+4RD0~B3EJsdTdxthI94j))t1Z@ty016uU~W|@qtUb_GbWa;HbV@3NF z0)3e#o~eEf7H*bos`GDbi=(4m$06Qo@+GJX0i5~g-M&uVJ(kzdu-xs07r8J@w85-= z$u^(A5+OWtt3=$=k`}%o+#!>A7KOZ)+=vyRSl0j3St73FXiS4R8TrxrXdCH!DEp$8 z|0@RC8mVzoc7E0sC?G3&q6rkv!C?Wzn4eBD%ye;{ZmtWL{KZrM;W#nI219MUpM!m8ykac`V?ls>#Jh-68CcD-{O!kZ&0RDBF%y)Qa zz7J+?R~Fr{Jrw7DwV9q;*L|d_$G+Ng_LRO*d@}&QXjh1U4Wr8^$-QKL40z(0!IS!Vw(rR}yE|R$gUKJsnwq0z#ysOIZh8U4X}T|6ehP zyPq#HOq?oL*-GEEQN9urfs_=>4m)b>dFRPbU!kdUNNT%QDCF&;y_~6G%4D2t!*CWS z_$gLRUB)hMgxB0U47m?7@HyY{n4JFpKeXbGxrrfb?3Uudmrg!~7m74z?CTGmp!~<6>VK9)9XwYUi*JtN! z%k=v0GqOW+)PH!;x=^MUN89TZT~!(?I@y|WgZMwA_nj4AqF(sA`ogVR9te`ZXGML7 zI^{$~71z~PGt|27ct6}s+`ol`oh);DbwnM_V^7;-SG82$Uk+29p}G2X%yZ$bX||U0 z3*WA8OxK3jIm(evqFFGwKP}Hua#X=)RPd*lWp*NYZc~E==E)MHac4gh_D6^#r^_e$ zKi6!hq8}O*i+$RqV){POR@L*PHld}kZ$4Y%k7&Y+75w17ByscGMLVRJKCcnaGIAzp2!${)b1>qMrDo>5Bh{u9Ovf zdKOS4ERCG-*PZ$|Wu`F`v`n|maB%*0YO;h?5Z;iX-*l)}t<@D(J-w$8udrmKpQf|K z+qdTrQj6_g<|=aMuFcK6^uJO_?pV8$9?&zwSoGeLC$%-+a4O$Tc`<+Syh5;KkN+i` zljbJosJOF8Ym5&io&rj#c{+AA9Hl%FZ9!$X>2R&YgNiv_sfGVGh)fLGaht5oK~tsf zYntG54VbR_8K~sRx-r$<*0B9v-F|R(48S_&(!x>mMG15Nl(5{3)3Xb7U7Bgt26k%> zJ3h$1x?6aSWw>hJLn2Yyeqz+dzTiH|yFE3% z=CR*|kKcM9Ci7N9NI8nx$9WRlQS*NeF^)A-4b>2<#=1bZ0{-WI{TZJ_ zSwHzOqbkI@(K>N$my?1-c_ki7d5_pqSk86FqnqSeur~pjZ|8rQNZX;Bo94cfTFK)A zLVt?J{+gUPXhvj4kKDAzTSi#mQK)$_-Rn z1*hL~mxawFyhgFTR2Lcu3LGg_7vX+2^cNGx+wYCwQuqCrm52|AgUEyul@8Cb@7h6WE8?-1-Y4^S}rHmiI!S$EU zHUFU=9)C_X7h69vnR$b#cecCDK{FOdQ5YpO`e%+`WyS{WoiJXbzw>qXv7rgv>Q~b; z2#=K3*c^cW`9Q`1=9*?ME@mjJL<;w2VW6tZ&5wjy3DmKx=!nzdHE(H{e!LFe`Y}?z zCdFre5~C54|MiX`A)fGTA_~{-LGPJZs7k#V{^iW1Igrss-<irGt+T^P>}zp&0iHCeI?d1e$?=WD zd)uVJVhT#hzjPj6tgP;#JBL1j=dI>98qDqI9B3DE>s1?<0C@vB^vT3eGOJ-PKjpTV~NiK0JO93q1Y9nv;3}+cxwfz1<1Xqx{}{x_R8Nid>Y$9hra2Z9LVi&N?&J>VEh>Vhtn@V>G56 z%lrwKll?Z?vy@Ss`x(8cr$?v_I8-0bX&}1q{3@9@HO;8s92r+Ys@H&ibrMxw3%b?@ z2#xKfSpffMf+D43!(@L1PlyU-hU6$!A@R_DXHo@7`Id zyVJB!S?LoO2U%eZc5g+uEB=~5`u@EfL=lH&ir>A<41@Lw_ObrB@L&3N_SS*$HC><7 zYI+m>xiRHZg}}s0le0 z2R0U5COkVfVguZeiL15v32*)%QEwU7P2UrSby=1SCfe6%g3y z?kU~f3=nAso5bkuMsjqAG$Tj)T>kI-d7c-%_aeqmAb9u zs;YK=LLKvS6KbiaqFUJv@g~LBFrgWd#p#2#*JyY(#`9y){`(Z#y(Q``aDydDd4veVitt97NTTn&oQ44-FD%3}L*s2-r*5o6FAIOOTV zS&Q5@xjWZx^S|WWxVbfhZ*aiog-KVVNvE!XGtj#Q&auTbiXjmQZ8tlU2CTrf(oK43 z&?AyZ3Zly0J+BwyY^D>F?}45b%_3>Y!L_UFp|-ixQTYwkx@=ycEXrlgo=YID;C@gb zf{=)$qo-GYqR89#U-+xuO^NO#AD{c4z^aQF^Hcp$^2$KKDc?vnzgFTC+c6s(eA)4V zR8%k?Y2wDrFXAawEzBZ4T-9r7BN$=arMp}@AehR2Os5b!!@3@_-6`f}+of)BR`kv( z4sLE?dd%RRf$qSwQ+o^){8(hHD^ zvT24CBx}mrrR4SxHk0j7tVDv zw_Y~`xK%BjgZXDCaj|ndY9`I=?Bpmn2JgAcJJFuK@&A>To6L8Oir-3*svF(NJ_Bd3 z>;zbuv7CyuK!8m1cr~6}I#*_KF%r+-9vlF1I&*+q(%IO5!%-9Np>-2K^UstR zF3e=IlXQySdJR_pJOB;`Zsgvg?@vZvhU0v=`>&zdyb(y?+vmjPAapk<{+Hm*%%Mq0 zT>^-rM>`6Q6is{~H!pQdGay8)@carobwmPYLAF!%LV7eh$}*4+|4t<#OhTtMY(?rWJ}K?{O@9nw850_@BI}pQ{H<|3 z?Oo01hH!}+bjH{~(4b=K#+q(vR-MMqCGPfwP-5GWO-;IH8#*h)ZZvfh z`%kp(+0OORF(B$%iXz9fZO6l+|X?!wDkOWf7RL)-BDz70lcp@=UER)lLEVV&bk z#6+v?m>gW!`+-raZi8j^cH=t-U`>RWWYv6hbCF-WB5}4F{PW=S^9xptzm%XDe-!^P zw|Nhv58-c^7C6g%i8}|veiTA;Qglmhb#^q@x$!-UdyDGV*q4!@yB0PspAVb$8ka$2(obuW|3_2IUO#X z-WQyufQoHmkCD0Z(Xo8FODp9Mz>&t%&+2gE-_EEi)1VF|Kc6#Wf~)AUg};r z795ZntfHRrt7%CvYF~z(keCqYf!L6pA&G5pgv$xxb=VE_9i3?o4=Lks!NSGzkkHDP z-i1G90{-H?2D&wOaJ?tvAInXdPM0s8XWvF-2D4W2qL^eNpqJc16;h(yJOv8*MeI#` zWc}Q4yKHi{n}dDDlMQi^Kc{HSZ- zy_o9%D0A&+Ym(0I)vsRu#mgb^W$fM#V(u_18X0+I2K*&?a-(hY%bYOTUS^Ih$5oxc z(0y1eO7$=ab*4|f0o*n;IVe$KieuzmUW4sjnPlG`l%xe!lDq#$s6e~)RJ%b z@{o=CBjx<3KE^j%O1{A(2C&HWsBxC`>QbjB4y-`koWTd+0;7-7-~$1%$Ci@x+Ned) zHT3u;SEPQ$DV<>JSaM|nqe>e3AO*ZF(pql zq3EE;x|!Po^>}CHay6*rkFQAF!Z_>T>|~S67@GL8n4@^&^6uT`X)v8ElhRtruh*UD+ySfFl)Nv#TYE`lGnB_2<>sri z(K`W6tk^5kY8lI_3UGO~1GZHT70!>IeM*o!hgvGwt(}Q z+Xm;lYZ;2>`C5Zu)RAUSXYXB`PBuJk*XXAIB@f{!oONibNThB3*~tiSFMqm{n6BoUD~a58WqvFT2EnFj^3&{nWnAJ)~{UiI5r9&!7{q6{!BF zwt>UP(+GYmC=M&g4%PPmZ*r@h=Che}<+R9Jmq~x_Dn;ipnpRZqd1IttomzpIyXG_ujo&hIi=dB~TFORAh)-ZLxL%z?G-ySla7R}QQ z7xoI8ed0e_HHy|qWIGgD(o*^ct^AFa5WeAfB=1U3%}xP-;t11(R#mR6G3{>-n5TG( z&uO_dQKF8$dkdrTV@pMk~DT$`; z^Km{PQ6pMDe`0k`En{l$UL4nC|KmuFdo%~=SktC%FfFKN4j&>q;;g_=D$olfiN~a5 z474=1j4I!T z%uKql3B}jdX1rTvIo6mrA!bgiFo)NhrOgB}%~T8yIt6MtcBav(b|apXQYsLvw5E`0PovBe5i>Ko6KzRCOB~A6^-=xf5OeB?q9#V z++=-aRlGRoTgvJwDqJE;d`(kxR7ZK6#+=3YG(6bG&rn}+HcN^aJ+?MRhR@$=?|FiD zykEATLO(%Fi*?T&W?qB$Y!{PNMdnW`uKOCbbAKidz@}Y40TIsii`pIMzj&7~fn;O0 zWVIceb*A+Xm5N$=`U)iHTEXv2$MP-e@B-na|*hnqUI80i3QPuF?d$`qC_ zErPGOF~LCbU=n;(jOSX>Q)@St^O-gk2-ub6P~EZZAvS& zD!esVJN2R<=VivPq1pnod^dHa>W1_XrRgb;MwFO5ULS{yI;v>J|Ee0dJ)m1yxI1g_ zJ+S;PzDxaNXELw0u6_(D(+_*pD*C(CutvI-f&An|Wa^qX0POy~GKl-?w^_(jd>(-q zLPtf}Lkg33GuK>I zm*UKwDlQCCN+oscfA+j~nB|jiqG0Fp(w+tE-5>iiyRc|kDF&}&**?q-DU(-RtWe-r z{NFmwL%UXH;L~AJ_uR^O4 zb<2Ln)>h-ccrFQ-tKw4F3ubG{t%H;P9IGOOVW{|~b$CQXY>X#)j0Xb)sPcADx9ajX z&uMw988eHTc}8EOJcd=Xf{D9J1WNcQ!-FA1WCh*%lLs_tHHyg{L2OcIz zbwbT(`wwo;TyKC!gO!On(QvhKo?S~k%Pdos4J0sB5nO3~Gqg)Rc~ zdT_$J)pyn$M3clW17~LCXrrYXBE;WrE24h<#lr_jX1nW~e&{CuDsA*lFZvzqj&1{W zZV86yyYI2t4Rnk7j<;;kN~^hhx4Lqd3)jkeFUb>WBN=M^_DbKf(DQATX8E;dvF3hQ z2GW@$)Yr1-nw#w7*n}f3@T(zUO200#nQvbjWIJ?s=zpDvbZWx?s10VR`gMIiHj+&E z;*nJPdEI=4<_zh$v0=%VbLS!97_KRCVLRl3NMPR9Z!pwBPSi8*8>!xEzL!H*U*kYi zBga^WSpP(xn{AbW@tLg13UOKqqS#&0N-4LFd-3qLK4E$MdEn!LI0aNjMBf{0mo7-p z1Z8w1xOaK+jvR94kxKfD&436S^Q|sHX;Lzcp5j}!o2+Nm-}A>#>H8J<46Tcw%Y%JC z%4lu%nvOLa^obPe+8UK|Z}~WHdAS^nm5oL9I}tZ&z zlVM@|GcZTh+hER{Y&xUw@ZF6%8@@+7J(@bku{HOeZYvftuZGnw+mR~r{lI*E1<#5h zA6vY>@!_6yCc8H`*FyUlsK%*DlFJ`;lXyr%T`G3#FB++BOHLe#qZ(;c$Wz8O!abkY z8_#ZSoi_z1GIDq`9ti+*oUh<5w}-U>>5X@&b}ttL^UJlGgu2lVuS-)RV#AJeLW>?6 zD2`!z`SpsW# z4Q2?>utl7QrO12l1fQWe3U-gHfRmOJ@!`z_a739=U+5JbPrXhCQtd~#G> zimo$g-1oTLZVe_Bj&wIET4_o`<2ZA6_<1KbVrjjTcxf%eDaOm*i7_L+01VQKU4Sp+ z=sCd{qXS^1d-4}xa>MlUXpVup7eha1*Cg^!JNZMyA(g|5>tT}6+>GlQHY?^41&4hf z0?9?YjFbxF&1r|k>V)0ZlU$F5E(NB(Ji_o zD)e|~XkSJv%Ij(+x4Eh+>PP~~+wmJ=J~j@^oWBG$T=N_bc=j0%K3=3OMwUjHk;g#m zs<@QNBcCJYn|m(2>)G0s(U6+0t6$0^ss*Jt8-MW#?6TxG>CYyFd+!+}Mh@l(m}_x8 zMuL!IBf)I3nLiOXmCd@SM!Q=kIh*{0qb^rK5a8b2YCsS$6l<9V!Gi@&5S}24LbY|a z<$&q9pW~+^{jVYn{3!_30VnJ_ap#<^)u!PpiQA6iy`qsbv(|6tLfg;dleaHef(O2e z-|+y5GSE@9Udva?Oorc++oxXz_G3;~_ct#mfo}peqXLAX-=>5@SjmA`Rb@HY;1>4X zKiAR|XnuD06X3<%Wr)YXZxye(H7Zp@gNW6OI2yBnix#qdKAZnCHM*p^WjmTEeWXO! zx}*_dc^~A?XUb*L2?F}8WD#9PqsE4{E1p4d?avv5t0C=a+<`Hj>rcgj(mWdoOL&HIJqey+@#3h@NWZS^liX;DPE|8ys zrzujzYNB{)Wg;4m_};n1&)+eIqJ3$in4^5Dzq_dD1#x38y9Wq8a1JXVLh4?TjrtMuttsY70vK@$pL z74AhklWl6Qqu1|80yx)}E8uQYS#}Uy1HpTZVJz<+Y9kt-r|pXq&)9TZpY7iKR(TVq zx#vhSsa6!lqalPRF1~al4TZDE0Sw;pw39u}d*r)1M8*7gG?FHok><=$a3m2_H?5 z^ut@1EhY-ASrt*X8F#ejZFK*yU)^TH_P<@vLF=~`8}Z4!y3=P1c}P7lZ|K09~{W{KRhm&XReOb9xUZ46$Xn6sZ_6JTJ# zgv=OufJT%s8{M0oZU#>aC-;faKC{_E9a?2id>^n&)vNoB??HuqbMUe@eg>Vnt1d!|*zE)ba676x_ z(@QuflAw+TMFGMPWa64N-6~o_fdt&#xS+)G%Z_tlYEX?XzHzXkq)iH5IEHg_5lQZ_ zBQtupOta13)om%uR-?#pi6F;e{*VL}6)5Hq^jX;Wdf;R~W4~sw2e!5H!xMM4HjJ)p z@q9&2?)i!)?`GedGo5UF_$86hV(Nm6mgK`|IvgBkl3yT?eRsKFWi}=69@Na5s)uh( z7;^p2_7Me#5|UoCexYNdp{UxRK;V4Jz@h(F=3t|;{P#w=KTyDPwjh5GTTkAKdKR}z zt?bkyg;Dtd8MJN*Dus+WRK{*D2{>=pCFGvV^!;uyw;@fS@bs^0z^urIm^N6`82U}HP{gc zy?|))E-62G9 zaQBaE+1e=X+^^mDKw~nbSQj)hrKs`ktO_tMpW&%~<12!cl{BZ|2F zRW^JiEPm$Saqw*KS36x5e^$pCew!C3?(f)V!v2 zY>=%8f3d9@K{qgxARFSmI(bXHHo7}5kqxYUrb$cF1{udN)SJde&!#d#|6Y+M4^H zhdqy%sb7lv1aXyE{*DwK0wy982~NgcG{j~^m-Q`|GVru_6rAhtpTA zD`+D--f5fEeZE%no9Bq{$1g%rV?;ygspfF)|0=lDL(oCAVd;LiNT)_IP-iV{?b7@3 zBv7&FJ7Ng|9F%%**{`Ii>&!gvb%-_YqiWLyVml#R#OmE3OE+frlJ%w~n`%Z8;WOuNKR2`!i1oe%9$K(EqxFZ*T2(l?!W$^r>BH zbp0Px9r$G5!zpj>W^$I-49@|=njicq=vc!S>}((fd3UMnF!?SQcs6JK*M;Puy&A(J zan>JTwzy430`7*%poRaVB4@<{$2yVMh}%e0h~TeYVxX|#KWBbuhT~s=;s>cmw(@T zKKx02ebClq7>I8>Cg8mAT)6rB>zxCB2M5dT6)tQk?IKjRH$|7i`Z<|Xtii82V36_M zxH-U^Tl$awK{bK+OS-HEY4z&SX0_g$qIJEmJI#*LKCVhGUbFpP&z+7Mn%O!waEZZf zT}LoSm_C3c^pzj!BFnEKl}<%6GXWjT^mMg+8+=YBO=-)A2D z!o~j>W_U!$JE=B-XI8|B7==MouBUlSyBwP*o0(Vkd6S@>HBw!|7d~l`@ovrB@H)>d zjnHLU^OQP$>+Pb~RrM;iR*t8hGk}Ud%d=LADmM6I`+aof;Ky%Nvm1;)J4F+fQ@NT< zBGwEM5tH|mm$lpwer66fw7qZPWhcW0DA+LDUWLr_b_<%XSaJuri!mr|-!s8oMYz{t zB#P8%TW!9{E6-9G37<*s?2!g29@HE!OjN?p=)dCd=AM z3E_zMM}HxlmtF)6ZO(F=c>FP28JZ@jD;=Q*P5ErG%dHugoC95(7~`1(?=R669(@y3 zCAacyuT|fj&1JDTFH7m(n4Uva<3&NOHQhHqW99pj z;*VAd=~0|mHS^nBSe_lS_{yRA6v_5q#rOfh)1{HT)2|YpsEE6QsX<4bn@RA#g-j0{ z5B4HII2NdR);F{LsWEULFejUDPa?N5-g29qzi}1VX!5u-TiXPm)S2IKCrsPt6V{?x z7r^N<<>hDJ6C~@awZ!CS7M=?+AZWSVBE}>n*teC6N?*+g;y)4keL3z~nr;}^ALn1V zqkY0Hxd*Y*6>l>{eCqLHe!J~3e7pm0W`C|Ucr86VoMElQU}k@^GOt)}?0qA3$;jZD z+<(4RzD)~k@)mH09j*|ws^Goffjl3)#qnUynd(M&G83cS&aR}h?9esn#f+bpsbZ!` zL5Xc{I(JVUk$`wftVfq5q5BsrWfC{FMPCF~WdGG8IKB?kM?#LAsD3S1E*@LT?^zi{ zWCJVNO;z=w`U=DRq!O!#=cUUJIL$`ZR~+-(STGM& zt)y*y5@lOjjqe7Zs<(itYg3q+bL$r-A}Rs(>4Nf|<2~QmOKXpYL*p2C<_yz?yfy*Bmo57M1X7i%^oW)pnmk@I zexCr!C63hB&uJFyNi;Az*_iGzT=WpM;f$IRjZbDi#j;n$ z^jk21Y*+|#l<>IW=bZOU8T`jDoxlm%3J#h!+~+bJQJezp6B%^Q>oPiS=3d;hn@7TH zkf$Fjto8YLGevm)>>uF?eRDr6Div=0y7u3f(E}po z`Z$G6GeQ_GL0;vfe;g`s-BLNj9YJA|n$MHTT2dG3OcmG^kvU2K^ok7#%S47g% z+q+E6Y2w%Y8}v9<5efXL&Du+cZqK%H;hi4zi@~^tl1@KFvVRKr(`VE6Wax47`?RcUbFC zTn0Z^8q@SH-rTB@lHqfXFMa;>(nWl>zS??CY+VmSEuY15A~FM^v;W|S9)L{Z6U2N9 z+iKUzpD%Hrp2VkClj;L;jEOJ?Jf1=ZErJuZ?#f+Y;4OB(Q@>knj~?d@Ex0qnhCM6p zmz3meQjLM|eKb~=+|#GKlk(F`y{pS+!H|O&lJKmqGP_s6T@mdmi{e7@u(Q#Tdr^Tu z)Ugb%P|Pi#w3+T@AzY_jFG86jD)mbp!$y@kMiKKP?!FpVS7JUSIeDE`K8mVqi{^YE zZy$(Eb~ftr9(0kVP8}AmKqfodr{50FTf35P?^6KG=Z{8^4;THq`5DWDW&UL;r~Qr) zXa@5ac)=E!yGTiz{L+kHZ)@y4H-4|S$9Ta)YC@b(S+yn;U0<{nTcrf{fhJ63*H-tn z(<^r@zoBKn;T~&u)H(m+t?OLoPU~fmmN$DH)vhvOz(Uj{OE<&Bl9CUMk1?5pOgXu7 zw&#EF5)}tZW9WZhGLIpJ{53fWflY40Aq0HlqUb`(mdHF0QWMmz^OV*Zsyf%Ua;mM+ zORmoFD5-T}IHW^}w3^02ww5K_Bm^4X6(i)6%;P0E@<;X?f@7;q9q^ge|Kb^&tFsT1 zUrDKQpWwO4PF7W_KLq!%c_FHFKc}+EUlokGI-IUvLw^?M5!uZscgKHoAJFCX(M*pw zs4fSMxgC!fp9;%XhBA91j7%b!)9S)uq>4m$e|=Mwi-Nr_h2>@&Dbak!#HJmsf|EtN z=XLs=2$lCCo6OJ0gn|I>psJY0Y=j7C!udz7Ws}z4=&!xiae9rXlfR`pBGwp88J#i# z9#wH86_HD}^KevAXqS0SB5h~Yd}V!ezf*I#{{K7GP8XN(T&2*N8DvOR)YM4~dcao5 z3ZF?@ZXGl|y`R~geTyDTuo!iH&ha<24EAe=HbUcTVvn%Xrf1qEpH|Uf}{u@oAe41OQt77h(F?UI3 zr*+}wnVG!o_H?_f&9$(F25Ho$y*0iDK34o~kEEv!X}_{US=^sT)gM>e?F^h}O<~ty zcW@y+4`i+X;>|!!#J$Z^e_|VPc&iQ)fAPN4U51~TltY;x;QXE%=g!^lzQ%(EdM{#? z=f7fYe{@)!mjHZUs>DH_?aDOZvHPLcwP5T0&OA#XOr0J#I zhV@dNShU-blDu2t?}x{x9UcVB>(Y|q_0nDs`p_RDw1bB9GD7xLLd>mId4zDLG|eF4 z+{KmTTy^wP$?JAAp^g!ghIBU{>vSdWlEr~DRr*%@t^4g7+IMnlg9(|CIhUB1R~kR! zwZb&kd%QL7|KPFK_-;`f9Gx2m%dJ$`aoZ2yiX6!?)^nat(Xa^`=DHap~z7GT4scEq=3#S0MW;p~!yT zJ|YXPU6`TocwoA9fafmSd(!D958Rh*HgQ<$Rux`RDR6ZMNjWiAWtLrh`{aq?UR|Ur z{o^ezagH)5RpyFJ+T5IC;4tUu9kKzoxUx_FE8Hb4bx4cbfBvSI^KM=A7eS5>m9g&%u?({v~v6S8jVQxA*+)e7OG$;5GN*B@yYYC= zuzYJHpizQ<<s&7QIHH{@98&CByYjl>4kI8OzhZEs3;6P%u8w4gG|*H= zrW+@Ihzx71j(PMG8swkwW!Fc|ib#j6Q`O4Z^Pp{zl)FF0zmO$1?NW5MO_bbn`5(F# zG{j7T21@gb_B5Sd44Ja(y9Ye)UwdL)?>lD`4%QxBYXx_&2s}O`n-_l-YT*3z`2Axd zY@>~inKdZaeHBa{C;4=E6|9e#3wD)2(p4oIc3hSaWisE*(b;zLZ1XDxqpt*K8wW`m)Rmq)tBMp{ewWn*7Xa!|u#} zcS^b(h+qR)x2|qPWZ0-e5yXb>ZYA;2rGN33a(1LuT6J|Vb(j9Fu$P&n$9`7T*nhK! zPNAC_<@qvApO9vvSC~X6CO7n%UCg5sIqBb=h^r;Zh!~ZTOdXdRzj37^47S#V4o=-G z>t0qW9->XzK)EZM8`kuL?$+h|XlJ}msa%v>kfC;w;e5l6CizOP^eAbi%glmOx28LXxLWtm@)vK2#F0uV^x0{r(Se}HZyg@V za7Sq-D$?|3DJn!t@jxcBDbsXy4Vf~2UW;nwhZ@K(pCGBb!E`G3KT*@5e9EvQ37+C_ z`ZLh0FbWZOTl4tO_v_2FE!(o{yu0L5zlvZ{GYc3g75xCVYN{USM+Dnl?q8UE-Nawe z*a?Qm(C~*YY+LTZan5NL=7$w(>J*0Q9)82DzT3{;qU&saZ-?G8IF0)oBN12p`V0Cu zsP_|g!bOknYK#qsyfAuv=UKTLsS4AzbN90=K{Xa!xL_~a1B1@gc(*>i_bKe2-wcms z&}UvdNe^=Z37o1Lt))fO93i^3hqObY`J#bzE-zn-Z~4}F93Yc1KI%c<@`omRBQ8|o zSCAR#n`Wu}r%L!vEgxbO)!ax6q9i)(9vDtjoFR(%^e9^BDI?ry0hjyFrss?8Qb&}m z4Hia;A4*hs z^evOS2%0sE#&#OcKkCo`qM~PG!;>8nj>A!cnbdrpdmGkLjj(vzO zG3}j|WecWzTVVN>NFIZ}t*FEkKuzua*6h-YtNa87mvV4pNPfc4)(DnK6!#_+d$>U} zr@Fv$tg6QHh!`YjX2@v3U0$N|aE==Jfb9~aTKxWzh~s4}@yTJ>_V8ClawP@jT$vY@ zm||&EyUC-IVX6{Sjj>Umnsz^pD{Sq1@ii=5XHe_Ra>V({MC?l4ke&FL$K=`;XxziJ zzh6`34LX-`7t{R8!GF+6dAvv@bO0_`jf8ZboN059)?2%#3CeLcBQpD>P@Co><)=G);M7&G zl(m}Jgs9Vv^HDM>hI15$4n!>SvgH7Kn46 zn!>>fy7Tkv?P%`UM|O_{pP=HJSPNx1#?^1c0LKpKT6i3!U5!C%uaO`wDQ=)^!=Zu% zScRX>C-c!eCiFoSLs*6;Segtpm|?j?=&b$-2rqHOYL7r~bPxfPr5#!iDL=^?k)FvJ(<1nEvg%Q= zIErG-Hf_?r1-nppBde{MLuQ=1P8gElK)yqn6(3f;5(nK-C$KndU%o|%RltPj|Kdqz z$zO9~DNL^4{VshJ$F$~<^#+&<*Pk`U_lXKR|ML`JWvBPghj6{ih36JxihuFs(O%Sh zd7O!+*0*7@z*0E%tMJTFq5K7GuhRn8=QL!0n*GzLIUrrea-6UFelHbYY!OY0AlfN@ zo)(xc-f_2?W4O+5TK=~Wo&ykD7A7+$aucOes$2@xupJ#25>KV?7dr`KtPS;{W;!n- z1Rw6pB>tE&>-7Cp#+p@GKytbJ*2}9NKonkq080EJiE-1|S0dLQ zrvp6@^m+Z~)=P{n)8n{ui-E5=xGL>S?QkW=&0rT(;06J?G1j^N%jRE(<{p$)M0$T8 z3YLDqcLfX+KWjY_SCJcQ-E{Yse?I)x^FDfo1I`SGW0(sU4%p-MDm^&IWfr+@Ee zfdQT4JU3-h;rZyqoX|*XGlqra`U{B9LjcNK5;SX(1*D5{*!xYkkGwB9Y7k!28#K`l zOpQgO-Ofw#v0&|l%s7k1k44JdnSlazkqawIB9Uhq)e^&0($~~)7>Fl@cY9-&{EaJL z%9oNQ50;(gXdbER?Fri$FSUX??Eo2o>dWYV*w>?U>5nh*YS_w7ODV^{GkfMEiIg&E z_&D-3)9PREDS|vIl90ZafQ6-G8jS~>I~|RZB{;*1^;953-mu3nk$UAGd2>o4zrAG| zukM|Ted5^cfJ|L{V~EX?OT0!z*VJmiQ^6xFwX($6u$GAS4JnERITG=^7o zM<#uxoRs0MM~~He!cw;@+WM5bEvgXh13DY;kXOjdV=c?`1^suV4@wNjGevLytj-kYZN^;;Gw%G>GZ)uqW|P`* z7LYm>K9zz!u!zgu3CNi8ixTmfmSoR!| z(Of&E0BP*J{h#Yrf}_rIxz@!ZJk+`d6<2UqM*K-tmyYj?qRvDm`*hLIO!8B2;~F zi>5rk*q#{Nwcw@QD;XwHa(c_&KNI-xA^PsYcP@oha&p&;0bqhi!X24Vrdz{N9E1rinvc?8N?4tM->)8xtF>*bH}%aowffzzxw{X#=%|#~N>Wwio0uY|)0Gip8WV}7$L$u3mZR&6T^ka?)rrHVIIR`V(Q6?q zyM`{1N9(HJuHrEgp^Nn&en=t;DETOVjo;H?RhZJjyOTL#b1KS~j3kOJT)Q4FY13`( zO5lrkP%;@|d|F$4vAZZn)wgJLy|kHKXlqxIl~#`ABMvz3w2~t|aCQ9ZF<|8JWvKhz z#LS#usj(6G{{mY*NE$DKR3m(YCo8oy34Bkf_~X?6xXZBQi8~HE`@~=IfdNJ916+`! zQ+Q1C1u-nrdjk8_?o}6P2e6o^Z$lSlzic)9#S3m?_ui!LfUP}8!DU31wYo8dWR5WG z1}eU<$V3W7Jq_$dOi(W@CZNcM#jxlLhK%vqsbf7EmgL7JpNx;70hqE zV3~wQSR*A~LDA;M(Ib*E2uE$u`opkKIi2;gRt-lHYLB?y?h<^G&Ux zZRkS=I1BUnAt*nZP~UPUKhcc{*d>M2oPUxn_1N6|kzG>y{r|{x53SF++9pu_6g)_ePjD9!grf*=(8NX(w)!k^qc4w=P?Y(_@3j2%ik-e74 z`MTXxneK0YR3tmqns~t(>=|_uwy1e_lucFbgu6+r7rEV!&_{*q7Xu@yRw(lwjsg*&%9l7xQLRs zf-pV8mIiGG%h!+FR0l*s-(R;))86~J9$d>tyYDFUDqz1eI>LEtL2o4xsrhn7Va8AN z6HQsq5`L!pJ^Yy_?4e?iFg6!aj&#M;(@qxY?#+vgUsp9UG?RR<)Xvrv^em|JEM=TX z?wcPTdR9n%%T@NZTFhE^@*xMyw@%8K+O7ECz9Q#@os5E`c(-~6hs@+Z5mnOAEb_=R z!S#>V>V_Q4$thYo1tG3~@kpD!VA<=ATOjhzCby4MSN?DxRmnC3-u0WEUa6ejZCu-_ z)7I{5SSHj<8_y4~7r=87szv69@euP7;?tgrq<1R|r=jO6!C)As=+83Ff`rG}Y<8^x z0m5aeT)145n2_O=y+X!w*&|%3oU{%bCd=ZmrvF&>^zM+Bt-^go209iisZ#F8NnU)i zr`P`q&F4BaV+78NyewfetCTUC;PEbZN2(i^DUkNhVr5grzO<@-|djVzBE)$AIG*rLo}Fc(s8!t z-RqWUw&ZNCNzW-AB)+4Hqb=;r_Xdv;w8YGs%srw_B-g7>dshJdrt~XLqD9)1x%yi1 z=hp8nMF`-8DO01;N|cwr+V-^x@BGB67WE|W9^ARX2V=fbf2wx5Fq@Szh7;?Y%ngrx z787k45`6@5_N8ysp7#)xZ;_E1ht6W{J=_}4#l$x_$%K8U9@xs}FuYdfw zNQ&Bts_87?d$jWUsSi(!9#tz9@LClvY$HR$zo$JkbJ5;y-;peMuUkw1%ONCaV1Id^ zH3>44;4BrbjnP`ib@_1Qpt8#Kx#u_wGkbMi$I3!G2C z)WXPdpspqc{YB%$g#zVrt~EdpSy^L z>+O=CILl;0nP!oOmX!z&J{=^lNci2o*oA?8{$#=s-AteFt$&kmWN($f>Gm7}1RKoP zgg9LT8+q?ncEm?_Vr`^;DFCIgNCwuE-TP`vYiWnWkKMW3W`xHSO>Mru~yM)F( z#CK-u1gMHWPZna!t(zI)vaUZ>>i@|Gv9ppYh>1ly%J5rHesO@Q3_ktR-44Pe3rRP& z%Fl+hM+DjZ0n)e(mzflT5XPOt!}|%zVgmUKLSf6dBZX)`gRQyC8Sm!-8&#}o%CD<3 zns%(4Zi8c?y07;G{fnklDS2i!mxwzy;dt|c@8bOdNqpujfTI-FEGI>=gy0yRRQ#8^ z9-~4R$-Fsjq&r&<&tfcMr`KYpyKAT5Nu0FonNHx~%C&-F@tf|h8y&zUK^BPIgH@vJ z(iZm>yC?IZMgQpn`o=#w;*5emgwl}pu2d(gS`R&*lx0QnOHAQT(&21j7|p2oZyR}y zZ$F&zfDOWSF;Uubl*D-A&ywgOR9nJf0zM}2IJ!0tlq-2VLD3{WmZ=b|_*krmIoz5)lE91L1 z+mmY^dDW?yMqgOw@HCMAdDzQBlCllmv3r7}ZugA(_6t&H9C-cWzi`HZM_h<+Z$8mH zCVfbIE;6g6rUo98jT*g~>@Lf&AKenf9qmNq73G0`Eli9r!Uu0`=PgE|K)5j9lMG zH%G)d7w{(5U7?MK`?ogTcX_uayez$KZTpW5V&=>o;*CL}4bpjA$(p>Szdj1`4-Eom z3JRmK4zPTf2<;cDH>-cR=d+h1wlvRheOvNS%YyP_R~2<$0-5IsjU%ndHQ)pvlg1J2 zgM_f$w=6Z4m5g4KRzJESQ*k>y=p?$A_L}4!hxn8pdpHKULixR0f{-)M6-IjE{uj@| zTH@jNEUmd)m(y23`;)CgqrrEGxx%t?h%c^#mxf3IJ{JUyj zA6Gc4P5LBl_uHTs%Q|m6JberDy``}7`TtK(*BQ`cwzT72R8)jTmrIf2D#`*v1Z6=) zvSOhLNJmXfetrV$=bc9uE5~_f7klsNd5b2#z1VSJXAPL_=_kKU$Kj)p9 zXUeJ1YHC)rI2+iQ$N?H9%6bzRkBu%8^e%^q)6aQWVnI$HNr=%&5FL?!BgQ~lK;IP`=#>| z?t!ePjqdo(QT$U5EpoBqL~hz`XBR>q_XQ(Q(=SDo55;$pgQTGU;#Fz%d;U#GnH1jc ze{Btpjho6)I7jJw!%)AB^S^FA9(s;G{8C5vyU}`ny5_HbH4<`{JD!DZ2k9jV9-KF$ z8f73&h9N>dl1$Dyypcfs%tp4s{D-)aoInE;diLOEfYh(wnF7DMT5Jg$HwjimdRN}( z`xTk9w)t!VDr%2w($22)=6NLeyFUKKmF}tb>oRN1rQyk|`6rAnVDt&B0q2%r6|Kg+ zG#_Ogtq2z$XwzbUVyfs4majp+iDZ(ArzTwPbJtUjATBNDB!Z5MQX;qNy{dbPTIwR7 zow*fdqg}3Z8t@-?QMtRhNP!?Y*bPAEgorYC1A?|o0;FVu(b0WomEb*d=BMIO#GGG$ z%I5qGO7jZ`r_N3bDU%8==vGnMeoNXgN<@{~V0wFL{g0UlCQZ&tE~SIq-^@{0aKkd4 zkrTszuq)kN9gT;VuW-?a-lwxp-sQ1JkQH$YOH!@W#;EbxK;)aWJ&30=Zp}6_r zC$Q@eCOM(`1ph-Y&pdDdeI7K6h$Khy&$aE|vR7U00+)#wWT;d)e~sWsa?crXBAUN_ zn1RTUsrP)2!m_4eTPNbc#3nyVQAPe$_waBb7+!#@l6t-{du1DatN^wIOlGU*D9*Gh z$IXnhqq{;IXuobD9KcSGX9qj7FmH>TCB0j9e!3X0sAa zmg`V^t(aqJoXAz1p?LB+&OMfS@R^PEvb$*+I~(XyA;YZ!j8aoX$|SpkG=<5y=GVoyWc>x!ND3tZy!xpYMThB;({hm$SU-uV?05!h1NlRv5vuO;z}j z<_uLINM(XsGf(o)HY^|Z_kk@>?m?PA?m;XIOC-yFYB0udTRL(~`vjhmT-&;{#yuHu z5_L>l^fZmDr3@Z>pm9bl44q)~coVOEir;&43)V%Rl0{>+eLJ%4KxZqvBsPK>LDYy} zhbs1Ps$i@E{A3u)((mWsEjNxQQL?AS4U)L*61G6i1%X#?X9TU0WHJ6RKUg;z;iGw! zQYSoA-zo4z5!Q!et$J*R-N`)&90mSvMi_00#3M8IAf-eYi_|sax0$mBY|vJ_eU_x5 zkl1YBt1=zP?ycqGv7Tu9`sBH<=l##3a0{Fk1|kg#P{sd1RqzL@(H`g{aaTPRTYkvt zG*t7x^2kpmhS`V(diRy(H*s78FuI5XJ)uhl5f9e-!;C%1+3!iX7kdyM_mvM7rKSfP z6{SP1N?gBwt!s7uox!W|T)w7)P`_oo?Y*?Put3Y^ns2XXEhfGldZ|>C=0CgA!DW_% zWjA=WvuY=Af1@-+5!emzu&_v^WLUiE*J6@UOGbJ%|wetSwxvyMz4xM;wGdv|TKHQxCTT z(%Ox)k!p_z{xrH{Tg&j|>MS+hzeEx&F0}Tc#cfMHv_{$cUjQSFz?=d4ImyBs8yuQ;J(7;gRZzVc~kK z+&zdYYk)o(h8t|w#ZAE3(X$Q(+ZjVdIM9f|{<;h5S4afcq&ZV(8u>q=^!7`9m?+)ebk4^(`*t5X;g}x2#NCCV$5}a;Egr=7rWzKoUbEyOp1+EcDK1Z%0LL;$5Fu+i&#a#r3j3} zOzpmDXwCQ66Q7zjj&sKe9D!o?HG0d$co36}b4s8{DOPDDLdrG{DmW@Yg=Cvpe7;W3ew ziqL>-UcxcZ;245POJdp%=$rsvH0S-(ln*sA0nE>t7rD1HDa~;yv}di7Zp1bP!JhK-T5>|u7tyI-B87E z6m-TrBje4#YdeItIWGD3kb2B8k>8KA8v*;p#3+Acddt^W54W^m_G|S!0?tgevk-oX z_p;954P?|q(l-Ye#^(ag%Sh-6IUi|B$Rd9o*;U`2w5-F>pic^0TZr7RZ*ej}E1L?;3i5*KE(IO}$Gy*)YWn05zBt{iUIubAe=ITJ?vB$A3&)bJxZs)^f!R zRW1>A?=39LRnBh|VSTovwMBzyh8K$}s0J$5?9y#1|Am?ZETb$n%oWFwpwpc4o^`~M zn__^fBX20R@rW3|(j1ZNP{Uh5aYAWyRAx#s8Phuhv(^34M#-Zmmp0o#5oM?C{vx5f z@aA7bZj3X1Ra=_WS`2p=sD*_msR_QI_pW zoz%*r`gDN*5GovCao1}@WzP)aN z>KyG-yCc6K^r=@JNnfx@09!11 zG($1d_r_)~inLAL$wU!_7p8w^@=lVYctT@j(5rBn3w)=ljIz@jS+6ATy*o7;x9FFh zQEqNauo_3Yp*eD*GA^q&rk}4PO{{&aYZ;gFQ`_}NEdw8R#b%#<_jZl&gFpA}19A}Y zgzL$b!kje`J+#xTkmu>oUgu?wmOHIP3>e&WTs7DA=nTpi>eluH$F(}1-D-!*r=KAm zdx?!>{g}>giIc{rEjc)N^mKm@ z5@Rm+RN5zYhxC!N7!4@Qt8Mk#7f~Xig%X2O{$#ur@7O$Ze$ClZ@}7ir>FXPHQ~%)6 z=F(A+97pW478Pqu$oa_#;odwE(^SFK%%stGhu#sj@;cK!G+b)rbrAQ#cz;PhQ6oB* zML#Wsg{#Mlw2hv8ITgC$*!p!qKigwMEU%A-M;`Iik&yjpU&#mkZSvX1?U=FRe#_rhV8zXv z%=R<=nxTUGs?6~m;jhaK^nY9aeKO_KQ-LDC+}yQB1rM78X~`LUOw zaueBRF$)Wz;C5E23QjF(#~RY^Y&GqOh2#Mq=Ypob0|RNXljC8@W;r~LYq~Za7D&_J zbLTLBcHJPlm(`~nhCl5u>VF&NF;{-{v5!QTo!hme1;)ljc9@;*?c{HFz!E1Ydlr+` zSNeWLLPv0mR7IUFJ5>H?B^m92FvdRnk~p;!q}Wo-$}~4m|L$>lv@LT85lj$ipb0%w znd#;Gr5J-IO+=yi<;`CjSZk-61|zf(W)%_}*75RNL?_Atsi$Rrd2^BBGob}>+q*N= zOC7x~g+^iL)CT9DnA(e~9U^zA?IXQ<@9^EbYHcK6Rg<1NHTZSw2Hx%q7C6vO_WS&k zF2i#VOLBRe zis9y(!yP9l`oV`C*-9d}*ajxPF7Dk;k=1D9hCkY_CkCfzZU~VKI?WF~>dN{@%v1q?*T>Rh@p~7FH3zhs9lf_f78hTpVfp zrq*)%#*W2z^?139{hujob_P<~(v~z<=Vc`!XJdK0v6gSM0S55H2Bs-QiOwGc*xqAt z(!bdD!U<#`OG#z&& literal 0 HcmV?d00001 diff --git a/examples/hyper/global.003000.jpg b/examples/hyper/global.003000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef28d78d78a6bfa8e46804ed1a0d4634a7866ea6 GIT binary patch literal 71795 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

    +OsMow4BOCnPLKH|Jq!r^woykPR%U_40@zpa& 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 k6-b8kSJEv=v-^6Mi}9DiVhU!c;@mtb9(Cpcd9- z>OSlVy?ASV7dai~B?=uI%L>nGHZ8t&;U!t^t!3TCB8--?f3>oIkAHT3-BSkr2fS?Y zCR1&KlVQ&opakiI60goqZK12k<02SP}gl#p|&#l7EfsgN}m^G;ApId zzXFox%l)ri{C+*8!_>VvNz)rGe^Hi3>8()I5mEjNnPpdNmc29<6*a7@=LQJo zpUSKPx?pGe{MM>Zf8^NvN`Bd#)KGf*u=9?mSs3|WwUG&C&Nk2)8$mJ!S7oO=9j?D# zGaw#LA;N%#l3Zl!(6xcpZ)(Lo_f*G<1M8<7@(Ro^_>9^d8lhNX?j!X@gO}{;`{cL>J zOS=kOVZ0HQ@d8S(zRxkwcdKEHXA>p~+bTSg{|FWQyu+s-jpzHNrk#CUN@vI@Am$^8 z`I>ZVF-h2V_Z%E!nndV#>(cXMv+KuwU~EmkG!W0`{rPnFT+7!+W&P1%^2gfgnHIG6 zo^0V^v;`3UIMOs#GGo`LDgY(2SR9!JSzB&S7L7EFrHFX;J?b;PdC36_W&)F~9)B<| z-+X`6sqbum1zOUNiQKu{Vnt||^21bq*NODGo5}Pp^s6k9&&0O!rP$%MY;0j_n+pA$ z0;>`|g|@2*ok0Q=?|)hWsXzE=$c9^B(e|L1Z!N5pZ{|%Oy3%RMDy~jw zDi%x3=AolAm^GA`oUf#^?7appFUn30r3$lM;TqlB==)7;Lo3T-6td4IBIwn!Wp*P+D6Ag;5T449D8V567vXd}jXc*JudlDp@ z0HPKKW$3~>5Va6*PQG9IMgP>(%*P$XEiae`Yn!`4@+F@u$0d4Ymt~#nvS!7&G>^Yl{&@JQ>OMljG~C@@i~b>cu3? zmZOaTE$fI5jGhbnNa3h@;Y(ytwRu4-TChxbk+b;x*)silmxW311`bsOT%Oeh!&A`^R;hp}F%z*?}Bt1k(Y8rt7@5q3v3}q|3CDWtAt=zJ)}; zRVa4QSeK9G!U^NaRqDf*g(|LP@#9kkzGa~&O^LNYOxg|f3wZOGi6f zhu}^Ml@zD}xxqOlty-;W=BNwZp?F%Yay2F~5>iAhuni&2* zq6&I1|IxCr|7Xhr^Z(kiQ2ZZT77b({JJXy$^!w4`&xuU6&_X9@4D z<=D3+2IEs)ou@aHV#GscTuvM(D;9*#PSY7#F|sMUsa0$wbdw9sH4Pn5j$j2ris{^9 z*|<~oov+Z691ViRS;CMav{Q?RQAI(oOU5{BhRSF-^Q?UqyCoa-xC*#NIi}MNPu^Sj zjg|e9f;4WWsWm34s{D0}QY}I6Bb2V@cj@0#vQV)Qe`lsFx(yZ=Q57SBqb?Ldt+%NB!_#oE87EO1c&-%}RJ-E`y5YqJThlDSg&$aHEN&N?qx2(zYKgH!~LdY+sA15v! zG5u74=`Um8z%l(*e`ors*_it(+waC(PbJtZ`7pgm9Lx*|y9^GAyw1VuX=HVIsCGZD zNQHsVlLd*{HJDu1&*Ap^dYt$B{+a=k=BHkp1(+p3Wk=!zLoON)L4OvIayqn0zV zGu{hQTiL9gL-s{J_4>YAjI_})I*O$sb9$`yj=Q@_Uq>c=gPKt(t?tggr;H(XS58M9 z;hCVpy0qS0FHk$|{0*n{o0hXzIGkSbOLYC7p5ifrVhX~tf-i`nZ2EmG+jJf4662P3 z%w%6lo_oFDlBk%s^7Tu;fhvEIyCh5to-EwvaZLZMGwsy-z?D6;$aQ4P@fLaAs@Y$S z7r^v0N`v)jM3eypF8;g~=$XARGq1boC`_qV?3(#quI9~%ugQs8St&@RbN0a=cF-Mb zOB-YjnZQL0lUA%!yO#w+$tg(w7`z4{jZsF_3_5#?lW-cir_<#IrbaI46-Z`i2+dm>b!UI7TQ>@}omWQ7AxZO*rsb6lWjEa)=5d3}idf zQOe0Na}u#axj~)Tj2OwK-Zmymh?{Y}fj1}qj^tn;Y)c$OXhjMvtR+kCOlQ9<(nkWy7 zC)qD$Nu^*lr8(<^C|pwSrprwl8QM;E#mpiqYt?ts>ui}&H+vOKDWvBfdOoRWO#W)} z)V^pRdmECDRb=_in~1$uORrn#y7_#h0FLax{*JJG?qjZmWIjf#9eGK3!!mX`yC5Nc zO5kik)nY488`*`Y)on$BJ>gcd&u)HxnrOSPvB<51yG=>TE~#necV@V+qFD-{_D)ZSL5#ymWr)p-gR(>OnMN7`M49(FO> zT~B+Y$d{`j{}f~Nj{@NJJ05!dJ0;fe5e%Ls*NKuv+3p5jJ?~d(KLwt^3)aE&cMW*{ zF5EW6J%9fP*DrkmqeylP$MvUgj#^>mptV9HKQMk%rYsK z&r;zcFQ8fMO8bBt($!o&_fN4ONcnp9{$sK!E~%D(U9GTfHw#xR z4%b%?m2g)ppL*FCi-#JSDv_KvMdmTNOWXbHIDq*LRs>|E7mY~aWpw8r3s8+*(@j#x z>*W4&AU$bwKr##?3T9RSnXsl?{I9lgp_g6|dI4DH{mOxv*aJjK>6=b(j>FIk8}0-F zp%<%Pp%?#-znvf+ix?VZF`cJPBnll%1yFJ5VMdQJff+P+pr4t}J5Tzw-KuzIu=nZ2 z<6W1D8r3`y`f(a7!+Or@kAq){X4T~C?Wr5>cW8}BeATPdU;?gG_i=P!d3Km zasILv@RyZ=znp#OFWdHKc-d~Xa>4o*L z(#wX`fg<=k&mX}PvT;Z--?_lh?6Z5>uG<33i|(EdthIH^TP!XZ;s4TMUuq{WYsT^? z!E6Kg@h};lC#Qq~o}3~%-Oa&$e(Y!L<-{{bAomLcxgTS4Yk2!ylIo${|8qZ8+4{W# zSDNe#w?eDrhlaYr-nwu?z0J(}Iq} zhe;3Ds$1JiZbx0ceO?BqFslpthHOq_XuF#2z@~Qzzv&gl-UdIQ#Xo*H!iNRCh5mZ{ z=sA4+7*k1cdB4~T9zRHOs4sTkTsNUzYrAz;ZnoE8AVe!FW_rm|%Y{PG`P)W5$7tqL ztHS}Ah(xrvkjN>bTw$p?`e#z>tN89C4t;VB+!af8X43eslcimdMv7g z;5^X>Box%-m_Y3XOb7S{?csC;-+Oz$#!;U}!eI-_VBc0xm4axEcw>>-OtEt7ot<=W zZ&ju!w^q8h=k~_<{s+`hMqZO9zAxz+*HF8Dt$rCR%j9>!(Up$j``+wu`kosJ9_~*- zHMeUUF`%JS`Ps6i2C62k<=r(w+GZ@X2ZSS2Ff0*L`poSa25SZQmbj$s1`a64+5LpT z?w2Iv+DidzXtt1AuJ=~e;ceNO`jf#|ZZ;LXKLLPp4%u0JB#elYS^vU`!|kn6W=v55 zbky25If1&`IMN*avNmFNgf&?0NGPwrb|jSlN+Fpcl}<~sT2>d0LNiN4RwVkAk|L?l zJPhbW*H1LLwTAf^6=Nz^_?xsZi({TDxc!ud0pUlGVV%QeSf{27+r9+q)#-f*m(RgU ztXi9oR71I3a4n>`dNx4kV;|bvJNcTLM4Wy}Hn|E`RJveARrI33OETyLWfy26T`Tf3 zL>+4nRj0! zB&#MAc^9XlM&N6fa61>Ki-lD==N6NtLk?`Yzbv9Z>92fyq4E8Z z_sP4U!V+&@RM_R2KGtqc^Rv9#m|Jp~LD~_TPof?MOR9wf)0i^riBhj#>n$U*qTq&0 zbggiB{*61y_pSI5`cyH8(`D~J(QV)7nhp9mT^MAQvOL8@gJQ-e&t}~*b$H9?pzT8r ziE9#LJ;;`VW;VLu9zEng;$CW${f~XgFYUOQh`Wn_)54brTM z3Y)qa0rs~x&ff`n?XR8IBrsT@C(FF2fqOjPtynIubJxmOD=<;JAx$Pe)t%jyQSVkV z4my+TL9`Vi(A71bf>BE9mpp4bVP`|tF);4T86{~_bEZ;#TtW|&!s>ZZ^A*7DAH%!- zH0qcj2CIVP>!{X|rX(swPzpmA=mdhS$A#mV$&J@4@~n5FB4#TT$+hgj%4$X|DkpCc z6!h4^sj+6YT^&e9+@_Wnk`|dFb7UQ4^c5Nb5qs?*s&3K05FPy=5+Yw=|4TQxoE` z##E4?k+Mit{1(H zIvbXe?oy^bS~{=lTDV%cQ?=m3T&a|#ka35s>s6#de0N&NKIZnF8yu;75gZpdl`XYm zH{8x%Ps{oE^J{+G-#LsM%i$G1*9T|nY|B@9`547WJ$H~L9NJAX#A@0c01?XIcs-hz^aNs$$!Mw%vx?gy$V4SRmCN$0dp zD(o94X$as5G!BIFG?VbOzQ(}h#_nds^4%i-yHqTt;%6|c{%&l*mkXx1zME2L28*Rl z*I?fi7S#n7cpf?iSvP6FqZQgg<#h}%7E8eZg^bg{o4QTj_3IvL;I|k=c10^tzV}hb zt@JVuE>FC8%wb1S;xt5@;-qw_fu95#IG)E^c`-fj`<{ALM~VO?AjN^!%FeipWKJ&= zQg)#)c@K$bd(e5Prw;8jF4g2p>ElVqWckOu2g8E~Bk*o^nXyF~yggUvRx+vs(bm8u zWQ{F-EqpyFlJpw!(#FouS@fHy#*}cs#2FLh_A8kP*#YbvV89(U=mF-)esB`weyVi# zQ<*i?`=QB%X{F6oVFQmhdw&x6YoL4mRxc@W*y*|HY)qZ^%sbB2C#cV-1at`E9D3&4ua%_s zc^%_vvgLUYOQm`tl`t+h-;--3%%2 zr1w^(P;WjsK4^}Svq!qSRL;Na2pW&QvT=r_-R8U;0yEU)TN4%OtK?yAvQX(3f-+DI z*>QMf)UC^2Hc_}$qo|zUz*1K8r2;jgiaNn~Zg>qQ^f>R+=ySsMKMC^3KGZW>7?6GPM%k ziv!dMK_~Mj;`!wzQJO<0Yk{ZdhqD;RU)IRnlu(p1m#dObwVj>UL%fs4aTB4H{EMKQ zDTdn0DWgaNn@J=rOG>R09Qc^3iGI1M98VGda8t#9xv4VMVFj_arwmyRo#HlL4+|Dr z+MjOf`Dos#j1ODupUW&W<_ZckAyBa`J)Wx|Z9#|tv62_t`Q4t~hI$-X`v2*s%AqbU zivixzgjNnfS)$@qI2GLYxfK1VF@);j$QmrC|6d5YBDI0bxUhwc>Bz&b8-YQ7zktX6 zN0XBZV?Uj&YyZZk23z95eGgOGLvTODiD>%t$HKLA0`fDGw@yS@tp|Z<$@N+{isXcO zlFL1Oz5JqMr0yMp>Pk zS{;1{vtE&2h8r4nUz+#^>l<7_-sXEJPRbI(Lffq~=6tk@eAefx`n=3wC>!BWTSV@; zvFL|YD0wMZMS*1s@z%PZ*rNf~Nhk%Q<5z5bS`|-l3JD9U?1LTJKrBs}5%uQo%Xi;0 zE6&T$CX&6+74-END+j8nbc-6~?M0GKlTX)aHpG&tA9*@$=OkS(8xe%&Pj%TZ=kBdD zJX^D9u_sX{VRGe&aZ;2RaGTDYjGBTQWlp~u^L=65JoW=#J!QBdO8M9~bk3-1bwvbO zQcGqs6Mh#-ypzmckyJLi%6b-j_|2}MP3-^2`OaEC^iavGb{UjhbIgbrS-y22B*Su3 z$B;VyOuF`_Y@g4A(~>mqEL+SBOZI*Zq_b$D8cz~<75zE;bL4BTr`jc)QdG7}%Pc-8 z*9nh|s4w%?NWYMAVMj}85?G@&vJb|1H`ElH25!DKu_2U952x3m-(*sbQ;8Lw|> zH73J~4o*#CIa$5Yg!~Hpyb~S>g^!FM9rX6Q7oH<9*4g8hvEN-Zji<|H#hwwY>P%DB z{(qF+c|6o>ANYUTR79ISOA#St&t3^h$ToHovW$J57+bdNA!M&ClWf_u%Njz~k$qpo zjCC-a-!(&>&bjaV`}=|uGl$6 zyw^H+tE5ERxgO*B4ldR!b}3gMfsG-=Utmw;NxGa;~pcUfT7oz6yB& zoUG-ia^iPdwk7At8R`rO7Y0`YoJLf(wa>f1xR);lp15R>GrT4cx9f0)czTPSGoMVM zF<2nZqr1xVDQ1G@DYXzA!7)Ts(vK$Dhx1YPDV!S%KXw;gg*}+aRJr{{UQ2N53@Xnm z4(G+LRp)tp*R7vO=zKY7EY#mF@oM|MaGkJ>W&-=S({nQd zugqC&`ItMVKL{UO1N6QRmXJPu3d65cZ>Rfe#imM)BdLG zB%MfSVS&8NK{#*E0hxKex!6*IC!80y*={d+@qnh(&)DaHeZWa`_K@2*w#BbB*5eW{ z5a7wCK)5&m>iHC^#v4g@V%l0yJqk+`Tp^^IBBIa8aD3mR+h39cwN62*uCLsl814+D zr-8xt^0zhkG@`8b+82JTLb-J)CC+QZs9+8a8X{A?V{u9YeM$^Yu6w2evE!VQU$j#i zh=V;Zf8j8<*M8tq`-PfWTS2uq?N zGSO$J&!?JGiyf2OL!b&#Q4^arFDn(CY~1pg&z!g)>lv*X=23}mf@+v`#)-Q=-(7T9 zR1L^c;z)myLoub;s#0#QCAzkk^K-Mnb#s|4ph)RN%FB{2J?rp?VO9-s)M4V!CE^fp zLjw|NFv*VHEV28{bLNyoxb{2ui5&52M)TcUy(}*{vZjmq8tTvLz3>;U@x92m+$qim zH$@#NP&Q0S$2OoB8NY&N6T#hHhc=-qQ(6J)4ud3+xNsBDoe=q~D~|Ub1-GqO;`O&$ zY>-kelL(Nw7)Z~;7<4$p>J_^cr-{UE`MiKkm-)ebl<<$lMZk);ngj=oSOL}Umu8Cx zv(6C9O#ftd%r?fryRo-=#I(qQ)!fs>>@`~mcsWuF^1mATU58P1h^~9_FS0pQ=%9wI zWDq3RAIg&{CB&Ka$hB$dJw$68=m$$r2iK4lkp;vaoatZLoM2z<(z{itIqOJLp*HjB z`J9)ChpC{%d2{+>?l@1Cx%sl)g;S)8&;Jfw97@H1_ANBQZwMJ>P^HcXGZZFxkM4aT z^vz84@y4}JBx%MM6(_>n-EaNQTi{5#|3VeJ$6JZ9xu97e`KX1NcGEAlz4@};V0m_> zLx!M3ZjpdlJ>`m-1W_^CReS!P(tl{GG>Z~qrCnSC<3#aNy5rZT#`5UgdH^|QpoH2g z*n;c^e|z=$6pWTR_jwbn{a#FjuL;7la#YPmCHGn}c_(zO!ZPs>sMx-zb}NSB6U^jW z#18T7O7m#*?d&)F+yN@^8$ALyCPCa{2p6{~yPF?$jDV5E?_5ufM=?V~o__&MJ!gIL zaJ8ug(WM^(`%Q|c+)n~bRrpi4$8SuPiw49ku>WA`$Zw08Sg2+xjXdnKFSK`YR_q#* z?PhOzeoZOBRmqDHMT&57=Lppsy2bS~yjj2-H719W$(hQ+h-qfW!}6aS!P1N!ct4%x zO|z9Mk^Quh`o(}W4eM4&3ImakH0IB#wJ?R>WkjzmMe1-eKr%^^+Prnpe_q8 zd7MR%@765$$n^pw_1*b)`rsF>l?H%Irr znv*{EN=51OkY+l*7O^9bE)IBf@xMK~t<8^~sL%zZhASLMt*s1!7utfeA`NJ*Z$;X)daZaIn z3P`?GmaOYq9Wy8GocX^c)!rjXH8Q6|=9CPN4=7oD?*abz7FKZRvF|&dr0f0&4}8VK z#0eA&k?*^nQ&cm|OOkP8FXW6u>(u++mmB_Pk!k+mn7a)QDFy+bmp)MAmAT`ri{^h3 zkR4nZ7=ux&fE{9ytiMzN5u9)CJBf2P11O&bH+tOcb%eq1J38YV7HVV{25NaD4$Ei% zs>T@Zr~bPdvnjWwbXE`hu!phlTHHoJ`P$qqcQoy>ioyslzDQTEGvr21Aj!5|`6Q;C z;SGQNA4u^BG464mOxV`g{m;l+dh>I3he+|f`4~Bt8-a1tcH?lDo_(NuT>~Sy9#c0(i z5uzqSS)VC!+1&NDZO4BFz=J0>>b1l;m;G1U7(wcTzA7wCo)XTdsE zO3}vlIf#LHO=JIOAv-|;*8jq|%9@AT{@HmFE*fQkdX|$XHTijC!qD;ie!N*js8DP6 z+40dS?pIbrg$zdH-qvwQ@lzmtDr{7 z;k@`Wp<=8^;{129OF|81S9|HkyQf~2tn$2>LbGIHHGS$KgL~($N_3f!w0=GF#p%Qq z(=l>whOg?+&nREb;9@+VQS+jL4rJ5Wgcv+Mfbab z0RHZDmFrsjsw%BE-|HIDU02$E2T&V)Cv9*P8-x~YR3{|VT!sswRv%GhO+e!HzI$^h zh}L|Q6}xC*1+CRTUVwR?Vc}fsZ!cRW;R9l=%! z2`^39Ds&-kihM{)bPTrdTi`Ow;#eFk34~hFg&)Hh)oRCj3A7X^RAedW(}K#44cm!~ zUgpGU`l*PX+tahzSlaLK3qmism0nt>g^g0#Q8V-L5!kvHCfliC#V}T+nd9wB`sMvo zN{r~^65VtAuY@<2;+rs@UR@-KY>NlLN z>euldw7i|Om)V}ovsbsXv6?>1JID3feN?YPZ)A0lV^4`h9!>e^#Tp;W>+Lp@Mh2tP zi9b0bMx;!^hOzg64~2ZO0iJdx=us>#PAR(Ov~FKqVUO$RbfVvpNb8lLM={3-gfAD# z6>kj986tjsGD2idW?%{@bjV1TxQ$Mw_1xsbg<}|TD^EVYE5wLXG%q>e{)hGctd}{` z4%+x^jG~5I)_hD}Rm}E$HK!){utK5Gr(Pva`lD+Tlv$P02zi-Dd zXz=88BO$?g;j^>|k9`ZtK*@6^sJtI-m;$i+rq)l`Nfl+dvVkC)Xd+mBedV}h6BZuz{6%2++{o{%NZeDe@vR}V zf=lNbTpz70>C(BQ8FyOU`O5zDjm|lB)I%)N%Kf1HjnHO1efxhS!g=0du2%yh+`U|! zUD(AGpBt0|`hIx5@)Azp=lr+6F9`Jgr1vdZ;vtkSPjN)J%D-}ha`@aJ_(1F*xxuER z+@NcRU6L;6S@vbiL^T)4(bb2`Feo*32GCeK`_%bQtY6&8Ib>GpIdoKdu!M%FW<@<- z87o!%ZR1A<3OG>)>}ki~4FOPSdVnu9MT$V~*N|Pt@^x3LTTR`Vrc{oOY0p_(xc0|j z>;6rIPuzGiCuf*B_V;$tX}(Bbx`x0E47N(L9KEGB_C@s3ZZTbL#>@JU2ygzf&sxig zBf@>(OdSnuz0D;nm>|Nl+k%7(Ycmt13%b&8udAP9bZ<;I6eb| z?P-kK#rw{`_lruFw7;$wABltgqLVuAda-{txERSXQ!|Ur9L+D$BT|o z&8#)LeFhQ%!^<+&OJOVIQ<(pkuJSl!JCqbA_1y^GIzTBsF;Fma0REP}K}(yzgW z%b{893%GBrc475PQR2l(+4NM`C(qxAIyA!T-@}DtCuCwj$l8d&{7SF4x@WeY3weB= zkihtFd|!ehhVUS~8Tb4sd5$>V>e(fF{Y{LL#EDl-O zAAnwzm_}T5v z>D^~3Xg@d~eIfh&>4G0k;|;h>Dw22C7DdKfVB)t{1a*rBrGO>_e;U)^t7wbxqJS`YYQ|I2j?NHE ze<~FX?~tjQ+b4e)2YV-cGvy2y)*XH~ndEUX&j`1P10U4dUj$!7Mn)^I<1QB|pjSG) zV=WR($i$|N5VHUm;V&13aeGG#CGb#-)RMdMTqYE$-OW@t-F%cB z#2?AXg0MOt=Ksf$?2jdei!y=R#qwV{&zWC2&z}E>1C$m&S17g#-HjL?Gtb%Vtg`qwTWSJ|nZq@svXu=Y*Fa zf32|L`2(&&7=3qBKN(3`q~z8675TX689N>EL~qJj{;G$!5lZI;r^~{Zxj$Jx_3}D> z{Hm1W>R65}nqwk6nH&lSTStg6u6g!Ph9BukYRRAC?@aS;ciP28h}a)&9X$!V6FfS2 zm0dy3vl-h62!8E<5&RoL1^N#_^(<=qv>0LL$k@Xv4d-thxa!#xxL`N@LKbZHfQ*78 zBV`L8j*(f9_EL^!dO=qp9+1xZqMA-_l8ne=@TUYvxFU^voAlOECzs<_CwHz+DIjL_ zT7O>ms=kg{&fDQfzBin&pvQ1ZxWS1$w-VgyQgl8jysPTCW8S1)k@d&6vDk)q-s6nt z%M!E!Ww3mh-VpBIK5lw51CE`4#k1oeG#EtS^D8tcEWcj!u1l+f54Ua9%ZUmKTkJMZ&jptqihDJeD}_*V3i66;cf6&fy7O}D!IQe z?eDt$kJ#Br4#uh^)%Tt6e?OC9+;B-Ir;2@-4!x(M?_Ex?1Zit?!9jnWoi5o*qL7)*_xV&` zZ$BR65;jWet+{wWE9qzAt%QqE#|eFGB<()B#K&DN7U$t!y#{5H{ip8sq7@0gM-l4R zLr0rJ*Gp#&^s*j0neSzSo}ds*g89SNt*(uSEe83l^~(&kx3H4EdE5xQtcuyo9WvtU zy5P6EiuMZ)GFSl0eObJ*xNt!1m9CC_ez*GV$D#~1$@UV;ugu|>P%C<#U*bzDD1)YY zno=CUC;WSHjnx?hlpHQDz5lkjN-?`{N{@Dhlv(9Pj)jj4Y7#&<#%=K4PYYseVMnVZAv zgtm;y14TiH$pBnYFry21?ZFlbN5)JHtgQBhT3`^5P^1Z{J^65{*Hzom2d{Fz)3jqs z!F_Dq_b((O1^S|OS1Ro<6-9IxN>1ogVC>Q{pJ1)jlND5MSFP`VXm$R4Q`7UjCA>Px z^>xpOwAn4JxWJX`N@rAF+u|RLrMH(`xCA*b^_WaM84x>m`a^&=vKid|ROVnLBGB93 zT|(E*Gr9O1mc0lS+Sw2n5O}N^u^&C=8lK?#>N44*72(~pQS}UGS2hg@^)X=#7t`Oq zFxcevnn5NLP%)JXi!TP$GaS=_r8EqNMcGaIq_>@nQo5Y&l~sVU7hTf`txeoqRX+=j ztA>^?jb-i#s@DnU>Ls=Do)b*5Lm7)42)-CfmnFSMb(qViy*FSjNw+h`@66la? za|%xD^^TGt?CspxyR0!PF;)c3Mm4gjQ+ZD#QijFvVEcRG0W4Fc$OwM{(lfCCOfB&v z=)R|wEjv+~zAqlK;B>GocHa;>;M9T9AaTdAn|dA{@2v**2Ik0%$1!kjhM&mH7KF^x zDl_k)7hOdN#OtLG0=1)wL{=52IB6<6(CQ z_8_L-HmgrDY-kzbwDofz7w(cN(oFwF@NnkaE$oKy)4rXB?e6uU@2GY7(BfjK#jD7$ z7@O#_8=VQG1yx1P5RHNbqc*G@$$5(~&fc4rLMM-V4~4fDTF3{cC95*$#7L&g8W<^Z z-I7arJ;h#Ea?Ob`JHd+aeGq%cllMV42!8#^VIXOAlc+K!P5fw`tdQ@2n@)J2PpdC| zA|WAI!J}icTQJh;)#*OPGpylDT73$257}3~{cKBw@J1z=JIE~Cln-_0Z!k2Zkibf% zFmmrSF}}62-HS*Ub_$5ybP>f{`#W=tXe|bmH!Pzbh*~-B!eLEM;BNzFI#qGtz7<@y z3N1ZXr$9QV9i|Kukgp29x>Ff(GFMU;$>1`XM>Prq(khPK|0UMp*nLm!9rm-TA-#~q z&eE6z*`LDj1;dXW>S@DeX(>%T+Hk==9h)Bu1E^+yxO*l>R=sb->|J>e_&PB&+8Qr} zbKfH~KnA5u)V!$F$b$+sKXO`U^xbKvy|TRc{PvVzYVCG4Z*aXxbOw&CYdd7?4gsLN z35JW9Qkh=vR9p(@(_cI^$nZAob5#X~W)Bc-&$r*(w z&Wp7!S1?6B{?yD`W8ob85f%YAH*z;MftA1bHmb=JZF2nqv(MKh4Xj=!EKW@7(2`oTXJM5%~FG6(3xOt)A?X*-aHHR&3Sq8Ud9X-fkRbH0HywnsR<+mTPF}%#y z9u<5kW?%UwMw*e~wfo9`?ZQTu&G;&V`6xlp=DRBw&5*uSajZ;){*yC0SB#V6#BXl| zHy=nM#qNq|L5c0TCPFn@VgxnRha%P@Qp)e{I;bve>)(g?0z zu;Kh|giy=5r;!T>mgoX5y0(JdWs~I*M91XxMom3!`b>4XMA{g5EHT-xdZ*7R!D!}3 zgPkZ7{hbbwF;5;@4Db~bpWHWS5Zcx7e>gnaXt~XDi8aPpdg7B3!Sq{doLj)>RC5TH*5sUNRi?HBi+aJ2+EJGBQ zXnI@RGg=1|`xcsfrB9o7DR1MeuFX0vqidp-`e6d4kuXNTfEPS${W;(|@wha0X z7GnTl$U*)EmQ;tUK>`u2GhWPVgg?(cMoR`@p%ev*kTH6@Ks59Z5v71*ZNn`o8|vpl#(K*{b!}5ZvJC1Xss)m;4V`L*TC|#J_Wz=rAaO}Z4Cw8@KVNmH9aHI!Q`~^5we#G(5 z>&88#KQnGTx1a{6oEW28+#N+2PQ-*wu8a;3^RpbKEN+X+-e$PfLe3o^raZ;LKs-D! zu(10&9v*T(^aSTMV^7esIJn(uk%a=TQll~~er5H3ae3HGjy4->e7)($XHg?Z{1nDbzyyWhB13X2E$?LhH%T-)eDZ zc#(o<{qDev*#*d!@I4`LCn(2gT>6BqBz`Wi$c9?l0eWK1f>h@T&Z%SeB4Qq=Cz?So^ghYJT87yNX>*%#LXZ+o+D4Dcq)Lpq z$WIfzQd>td8i@-xYN2NlQ?zZGTuz_UTi-`(of$qUor}GLrfc@&Z|8U%v?eNiY5%kw z?a3(bZ8Dj?wnWGF3)aw)pi+ezhHvP?T)I~DTE@B%>x~~J!!e;%OsPv|KXz(f27ehP zMYsP&;IpaVCcAetMzElK`0Z!*AulRAo=DLvPDEm8p?ZUpn8F5q#wrCtX)>ELyp=Y6 zt`SioM#tCFP~xj08uc{M)d?r-%)7rCze)6aR!ekyVcV_G^E7l6sF3Gm#A!Nq&5r?s z|8W^8#ss%4ENmiJ+i?aza);iZj98w?FV*xq74{517$fiQ)W?tgpzPC`~*DFDxf>`!pz|F4;DooBzD#yi>8gzU@u-vV+fO@uXCG z&C6nL>VY;J#0V{BcymXjOctqPP z1sw4COr#?MorJL!)V-FEM|j0~-Db;bXn=^>n8TgMFwS?H zvY|162_of_dm!#y0;jk)TzKqxC7$qn-$g64s|#Dv+RQkN-(KhIFk+Yd!DX?K*?JaY zB~G4byj+v@y%2@`GRlT@)O)(BltKZqzhw6*`8HLD+tjDd{*N%Bx&zMsN)4w}j5RE+ zLi5qjf(NSG7Pifd^uBp?>&uT}lDcS*@U%sqg?NvTTd|h#tpIF6jLxpa1C~g zR(#iJv?#!T((y39E*lcu5LQ`sOF0)o*y3dAg4A!w$H#(&gru@=7)Pz;kZbzM? z<}#*rwGL8JxDa2~qfQvuUijvd4D5;EHoh72Aq@!Od}iffVnsi1Re?fw4kuR0fvd9^ zC(c_k#{pIa z3AvD{L~PnP+rlr(*bq?0zOJ0n8*4i_%9xif`@wu=a&n@}$Eew;Ao)%!_dmha_|Pa! zPF{+%aplS<3=Ujf0VZUw`hS3{nRsxu?GRiI+p!jlpw+d;r(@Pq@ZxGN_O8M!86}|5wR^ffW`xf=lpl`9xZs&i!FKHIf z@7w$`A@4)svM7T6 zq~id7k6!?Pql1f$wKWaJ8<{o6j-RF>b7phLXQ{8nf*&n(XsQ27_RX6DY}rE5Z~mjn zbO`V-{Q~$!|L&dr|2CQEi0TfG{C%TfWpkyk->#${Z&u_>q_1hs!ODLZs5!Tob8Z>A zYfLJ%6Z%SA@ea#d1%rlNrQpfrLE>NS7*IPqT3kH6m2%k@ocoB3ML8!X0?47iPha#t zot4_$COTWBF!dg}8A6D4L_Q%w{%DR_z*g&O&hyKuj5WlVlh}YF)0i1)!7;*G1{l5F zS30s1r?FZOwojPnCRt|)}!GnGvch_p7Iz~<1Yq|TT=h~xP^ED?%^2D>u0=K z1pK~<D{f(irtK8JFz5su$~B||c1d~Xi$ z``oMu1l{8FDl1j`T=Ceu&WH3JuQ}B4{QeXzD_Tc?^?iZ9i@YbG!l#;@%ekWL^F9n$ z{7r>#bm~W|HjaXLOmZ1ZbhggD*fzWAmxJzKcACazU=kRKy0=9Y$Q7)ip&dm64B6($ z9H>RDWo+<<=gNf_L~C0)O4OsUkDRU?RWj7{+Z_h6k`j})B2)d5N1(C8-=Oizj#Hry zH}j_JhD>Qg$|+cEeLuK;8PedKlRqCpc-XhV3Qu*7TX7hyO_X=#z4lEOjczcprQ(fB zrnQ}7odKZndo=Q;n862MT;9USg+roXjA2_T0$gx4KGjvoYM#i6y!!k=EQM zeHk-Q%6gQysQ#6=NZ4@hEgY9Tjsf4AeA$i3zmg0|A}MnZe+6q&^oULvuOY=WYxO&U z;2Af0dmk=%_OHAJ!c2l0os{Q?C@APDmgAp&c9H*lQD6kpPInn=m)u8IpH)MS2;^D; zRCq%<6cQ$LR%80v37;{{-M-luEiE~$r(6MwO9>AC&>j&A zuTQ2%J7-OC$e%XS6kxFzeC{1b#+3gB`xikS0u%8bnoQd_DBAXJ>+=<&^)t1?OA%4c z-+LcJC0M$!hUAUelouB-@>x=h<7$HV^);IbYgR$i=VuCSB`17H?+rPA6UEB|wD21M z3pZW{>r36@^#@f@JhRq^4-XG&&F4TpxWD&w2AY36kbnu45m* zcy{wV8Of>9{m@@nxI&aaX#xJUrIUGRg~wFA86$ytPM&%uxD^wIA7-A!mIz} z!l8f*cT%|PsKc?4J^MU_Ej}Kj6xSrEG+8ja zvJ0wb5%cs+vCYo$T+z4P@6AF2kMl6xQgIDOXlG6_oWu0@=p{Vpw_*y~e75#lpw{pz zh@SDn*b0vH@86DO!VbBbo!67OI*y96Tle zigeB(gDD%38rpQ}gSy38vP_mtU}1$DOl%yy-qE&JeK^MHPLibAkt9O(Tux4$p$3+b zw3FOEy80f7#`E+Pfb*Q96~85QMLYPRhs={1DtZyS#PQ7o5Sr8X&Vkven{itQ3|+OW z{QBc~FW3;C=&J-wZZ+HT+t0C&ovnhciG>*{Zqv!tik(fLItLba_4|6&9sy?1WWrYj zZ_f{G{yKbpfjFAo%Q-PSz4zx0M)*tm3+NS}>y`A^{7-7-^s7a131#AQXRE+5&f@lh zDnPZZ@R>#z4VX?hcTSLUvr)dZYrLAX(^E9{*$+_a1FseI@yL~{xVe3YYpvZ zA07K&ijht8N&6gp|4KB3=l3(OuZ?}14`(6$=rqSBm!mUlj&NtPE-k14J$G<{0b*y8 zM2qDep;ssmFEIWQJJZA!V=iNY4XX46%^F_adz2mG5Qc~fyRGfwozfIIp(n#B0XAPh zShKc36x1S9UX$n>U^l*&je-23;<6fL;QOR9Wv-W5akL9geb}`*@ z7hSZ3E1;BK!iCJO%iEXu*X}VZSKv-s@uTO_-;xRP(Hz4A5)qD{0~_lveYUMPJ3(@b zDbIR@JvL-Bg=&!`0;>Hii}vF(#z6P(gtWHzFq5`NU$Y($I%SmQ>!Keg}ueS zdSv~h!ZHzK*6o7hYc5M6Q&g*J*fUO(S(22)e-S+WB5ELB7C6Y%)FjN*yZ=Q|a4squ z5Fb-2oomB-4@@v3+gX&xvAnNUl;Y$os)hzf93S!5oQ1{zMbIo5|G>?;iqGgq!+7{3 z?+&}pDex|#5~{y=B1t)CHBYkVs^RAf@Im$!KpAHv^*MUrh9_dS)>=NaTvgLdm>qfH zHq~8-HO$1sLTYT5^@LQyW(JOx-r~2EVsPtJn};_`7NG#}Vr=&6%Y~DTiw?F`G@1HkiDK z3JFITG;G*bgIsM^IsbC9 zehNvPCnrYCh*k38Hxy{q0dZJ6CS@WZXcl)%SoG_b@F;kz0%8WEJSC{Uc0WJ=bitI$ z?2JK{2tum8A&1frdjp*o!4o56!I%CRR96RNzkb6L;eXf7sQxy>f7i`GOBz1$U5tCO z%BV@u)uR4rP|XVdeb*lScF6;G*FN-a>nqp*9^SP}(dSLNGc}@>j_PJQwpuN}%ABAc zs1NFaEWhf3U{Zz1{W+-`)ssN)7TmQc))74?z40pN$!|G>_P5dCZyU>sj zE$QM9j<&itGl=h5q)jm`AeWHo>S!f@xFK}%RJYUTYv7yOo$K)NJ%77Oqx>sgw(fo! zpHdoxMsF2-4p69o&gVij`+8HeGEWGSlAZI>_TZ~PtBGJWTtj%pQE^8l>2Ph3lEzIc zKDm2T0gzM&T${5Gx2{Izb*fxJh6zhOsYE(>M<5|%efs5txA>b2uJw8kaeDASu?}*k z0&A~ushF3!$4{v^d>OvovZH7V`%r0@i>X)Ppa&VI2++R$N8;>zpqL3!{g9|!&a4mc zR?a>cVYhaQp{YY2n5D(vaGzcREU%K(LXnVir?Wo0Y;VXi@3v8GTE^Y7;v^?$^TG#bhaYY z8aI9_*DTYVb3rBHu+C}TRbQ8LVtQuwA9YUm2?K`t(la)b^7jL2u1B(Y{Hk+`;U8r! zj)Gc@wuaYDCr%kd^7OiAx+CJWU*o~z8;7!E13S$r*r{``%sT(xX9UJ60XguL}K67h<%X;H(lM^mtLobujJZOF~mx2+DvG?fXh#MUeJ>^6?0yfCFH%pa+>Y| zE5dN;fb|6z*3@)@PKNe0Yp_DH{raU>*#lrl$e!YD4S%}3KU3`uwO{}F&7bi>GlC9= z5SAU4;{efRujiX+wSr-Oo;QmfJT>Jr9-8yZ?S(dN3O9LI@ARuSZNA7Q-^(a*y#No8e=aHI3q7$Yw;PT?F8f6r8>wxFe zt1ld5>D?{oL$G!CMFR|+at!E(F}dQ(PUrMl_8!w5CD@cl{|TecRvZ zTnfl!dwj6uTE(?FUs|%8wP0j0$?yU$_s$#=xun5aJ$ZroNeM`tW$B+r(G7bRf~uHX z+Y1yd(DIw2kJ+iwInq>#kO!S`4}ou(PTc8=(Vr8l*!TF_PZ<#9w7os?@(cY`&@hT2 z*feFFEHpdWbj{JP;6f^TCN8(da0f{*LT=>0Et#BRGZ*$30bjUio_C%~RKt%!WQ~Y| z1IJp%_Dol)M}@f3>E55ypDNwVPd`QY(>3QnvdY^BDy#Uo9~nsi;yOnquOMT3ysT96 zMw85IyGv>w#1*b5FDpYFz<=)i{$qi8xX)j6;fFy>=%?zb6?jlHOu8zgCnY=H$i+$=+X_3p5;t2oRzHCIY-m{@CET#jqND!HjNgQ*b4sg z7VK7!(dN(hQR?YzMP(-9FB<-iNkt!5Mk}NjA!8&|0A|+UCe!t(29v+F8qn`SqvrjjbVln= zi-61IT!@%Zj*fOlF!1&x?p%l_8fA3KUeCoSE=@d(LyVbe!v{BxNyi*KP);}7&X*nu z^M0`J&?3O|u-m?7XL*G35HhpJLuOiSI!*d+9IMk1jMdb#>H}1NRq7A!K~8})>PaW= z>{y>VGlFEcqFOE;?#7B@V!3^svUXC#uG-o9oqk2)1zXigK8E)6bL=Es6mja0B^mVl z!XiBM(Vc^AqV%PhkkRD6jKKwSiul|(JL47{-1NPb?jg@taS5BXliC)l61^Vv5Bs?CJcAZEDRL|~1{!^uE_v4BIc45qJg2-KJBa7SPcS@%YBY}uRrbOa z<5$vcW`yFIEpsU{P$gv`0MLv!XiFdRG)?n6`1X>Vtc2*h8Uv-6Y&z8S+qQ_pNA3H| zZ>GXStKVdHgCj1EQ^u*WGb&u^)y#Og$z{F!Ys#c)BQ^Y=oO0oBPC4eEoN_5$epsKw zB>0S&He12UCDjawm^axY+kT6fQ{m}mPzhdCcFMVIe&{*&)7*>(ql!eFiuU15%2i`i zGyBdIG||%9z*BzxOKyVf<*st8UaIpXpYFnv190D$mi4!YDU2&p*a+xJT>q~kChQ>@ z!IHLO>3gk3p{P-6yr&%br>Bgl8ze;lPdOfV%8{3@u&d!g%#10bmC?TlV#gio{`(3^ zgKZg*!Pdm>HI-TMDn z+4YX*U`%WnrbE=2q<56756j9O9JBNQm`%o1q4)JHDDDKB=zHe8XSszxs~pS0Mu z7?-5LJdX!U#7SFwsXEZS%yTlJ;ha*V;MTTKzYMcKqt69En(=7>(hT8!vr_csNqmwb zN~4+!(_9}vOwpEV{^Xti|ns6yJmtOZkc7vs{ehb4NN3G&47BuM&FyT^WD3ZidXQP-JmJeS46r%- zWr?haSWn4C#* zZU{2HvTNC>IOHq+jlR2Q?|vQMJX#-lM$nEB3uN^DIcy7u8M5rz>RftkoatnE!yMYn zUoP@8&wZxHUW8t3{Rd*bxf0~&)if8X+S8NQqO4kkpE}Qd)?KEr%f_lA#V%wjoIGUB zvd=&7Bw^2EVyJBJj#LsBK;*$X>w2&vpSmp_zZzEgUgE6X>u{e>jE)c8#KKDsvZ*Xo z)vvO5a71fe2cF&YQOI5%nkxA+CU;l%g$-Qb;+L6@u`1?swf&xTtF-zswXN!c-D-ikJ`&JS;clRrFQ0Ye zP1J?y^X?VvK98}cXqoU_Or+aBX@}@->UwFK5948&1ua$QL=EoEVeD!kW{KLn!@^`^ zg1Y|xjOn+@pM#L@mi<))Ax^kFCg206yrX||_S?(%fy!rPz0^o+lw4!hCyQKCNSDR< zUkzp7vZqtCW?j;#zJV#MD^CtKw0Uoyul45188-dgfh8@wrE0Rz7}bmgr0b~^mI|9$ zjxn*b#yqP}gA*Ok%C4`fMOr9=AcZ8S@~(-T8hGt2mc5`V9^#jS?Q~67dBII_$%!FXj8ot+MAoC!Jk>4W>t@Km}^A zvHDUE_@^;2YHp|GX{!{==M=u6nL;WiHBrGpWpN1>AY0Vu*zz;(Tvfxvc@vU!suzGA zz1!X&keyh_oCCPH^k}{5Wo> zB&iX$c>2VJ;Y)+X9*nTjZ51@{QP;@1b;3gF95k7#r_%G>M!epqo^DVAdKP-@9sL`I zyUJL7G)q*@5})n@MW*?s5~DB)!F?RZpN_CW=HmuP@uA0W@~o;&$lYc69XB9jRWQ|~ z14`53*RIl7f~t{<7HnH1Wdf2ik$S1q)XbQtttj&D(>pDT1dL>ljEZ%@I+Q%M#BJr2 zYDV!dQW-ZuERy+9g;@SiT{nw9Fjn|_tT|mN7H$>Gk=fl`ohjXXQm-1Hbw=GzH}eMv zATg`55z=o0Glk{5Y{V33u?np_lL&Tu%u=( z#V~|=V`If&>n4tjwQkezR0y$>Y<9qSHrqj??niW7DL+GSi1M@IQU10glph6)ZyKAF zNys8T1Y^yZ_d+j7-Wm^|XrUjsbyW|if=XOUXv_kCQ86@DK991kmfxxAk|q+Wo}_Bx zM0kv4mRwWM>d!je8x%I&4mGuL(pt*R16!;rw9w?KoXG?o^VRIQi>GnuU+DYyeG+(* zzwSX4?{2>d6 zP?4l}oqetL9M?43vCz}%#g!_4ll&5$_w#DL{Zos5`)@6_6Q{+(A_eduzc8-a0zWq; z2{=l^UjDWut}}Tnv~0px5Z(D6l$exz-Ia!!!%$a~>Quyt`P#iF@wdL}z9JN+_iGZl z(xbmIt|C3S{=ho>rE$_~W>}Ivkc~OZ{0f4n}EO3%2#oPqXNFZzt|`!>)kEN%8tr3!OakDKq)_6@DNX_AN{8`ejPT9$pSf}nJGwI!Q5N& zRDi`2dj@LbHGZpW|I+v^Y$%rKFU2;txTKkth&U(rWF@%4)G6^Xqkx-66g|~j`_6(5 zB7GnGLM)_Zt)CSaLPsDm<*V8h%Zch8IfHZJK>WJOM&kG9a$sO{IM z$0b~JS-$fDXB-2Z@t=bAvOR_c4<^*ueOAwl^qoRe`g3_uEl_C0U-ymQ|6scte9!-x z5>JScGhbZ(J1l>P+Ek0uKM zUs#e`M8SL>6!bZ^B~XM64L9T_n>pPWU@C1txbqS6dMLWvAYj}?`C$wN|H4|Uifcyn zVG?ghqsJ;D0s-q@9GfIf$kY5vu}GXEOb{Y*P!VgssT;D@;RZ(*C zO@ck8ix$Hlnu<-8h5sVpeK;rpM9iHH9SVu-*vAP?JUaWSt>2VSe`lm4$g~o3%27h) zDWcl$GWW+M3<{r(d{{_vob}TQ!U4iYZ6NU*5G^?jjm+ zY-&MUq&ZAXK(gMAj;2Tc1;^LByt-tSe-WtOADpoeLe>~?FMUE4O&?jxGNY3&+et$j z8#N7v82QPDav`6*N+HTfrX!0Vykc-5T!GpKF+4p%0Z=xg1~I&rv!HB*b=k}@AjHJh z*}{mmyPc{?+mtJk*V{`XCwW+Zms~b+DVM@}dIp>{F8@zyeC?Mst`5bm4$jejx!!`} z&FEO^JkyLO!IY`84KljMT!o9Wx9#VduUrC4^%C6vpD8>%#{Y8H`WMEZGmV=Yw|~tI zwS!wnEj(FJ`#NmleaD|X{wu~W@JGxAhw;Cp$qTZw%BU{jNy8_O@F$Nv(BAa6tQ1_j zc-Q*vTjCe?d?^hyRcMDMeL5s(j)qLn)dJ18r(1EWq~8_hQ&)iH>UP{qB2sjB{Vr1S z_K6aIb5#hmf|`JhAza+yA)7Y9_%qYN@L*F-ZOsN0|GO-tEbjCHIf_QYM76(XUK~s}Bp?N7OhaGr?grk{^jH zer@)kct8A~r$=ITEaczQqaQsNnwM9p7{8Tn{nUp4!B8x5d`jIY$bKbE&2!K8aCW2+ zN0zj{Q#~<9bw%AX*yDPSK>IVd9QGfaOwQlT|2;jj7g+`WK9;vVH3*cv%!&@WV@;wJ z1X_{6ixsa4b4m#Ji?{LrrmAFOM*Tke^|b%fTH{TeG)`_aSsI9C%GQ+vr*eokJmYfM z^J_1OVhPCNyjsRV2M>_?nAQ4NPqLzY`ZoC&#BV6U&DFZ_HornH)k%fVJoUSxH_a4o8{F*uatORNV~;H2g=&rzR{*^h7zbQt0trgdARn{gcx z)42TRWC!^VMNf2VKgM%1h2#fT47`DBBwJGbxvG4OxWl{d#@Rar=xuLY_RA)`sD^lP zFuJ`d#m2d(N%@4=`7%0bog%$dx9y+yJ*qh;**my|YB(bu%(a(Gx)-X;t@1-nrsVgJ zH=&mz?-opGmapiBgegs*@;uvtiJmG&LsA9bxm=?J=`Y5!H3&>{i^p~I_=b{_!ohlH z=6GuF8(oS1S6l`aMNO$Eb1_2(sFCduj}gRzbBVLc$n!O+%Z7KEr=!Bsb~iI$JXW^m z+OJWySj&8w3AvR;PFEJM(LcIasAoMI(`BKJi9;XPK;L&py7XHIpRmY!xrJf}ID}S; z0V>BooJo3mP`2dOTS!V{CpFAP7o?6D{zx6EJwY@0(@uCq8wv(KaoSUlpjBQ|?cj;E z3jRzo&USpgles%cx4^z)ZxeSgFFHJ!TX6qaNq{)_iAQhKjfaQ0=+mP(!S9n*|5#g@ z(JUWXk{p#lC$Lyvj9x;wE%h&-NgS$VXCU%toZHB)_)?DW0#8f!#G$e;wpAjwYu7#) zQqR32^H7@81bcu=sflIE#@&$krf8^VdMBdAX3N~@q|n7<=rC`25=Y^!kBFbW337-X z=)8xE-}q^ho$xJRi_B4t5N%A^>x4bXOlA3x)eK}~ubAbwgm6#s=0MMv4^sBQKaz|| zPKmB@Xfz)PSM`ZKh~G-Jerm)RQOa_X+kZ2KL=(14`-8vDsV7opc98$9uW1I+ch%}! zuqc^+r@&lCH?>0VFr)i;RM{S1RNbZf|0sL!aH{`5{$Hu6j8gV2N)fWxK?@-}dsQ|e zgkx8-R|wfZ}FZ2sW_oHm}wA6N?HZzma#_fRWXL|mY{{nJ-bI6o$cE=ePQC}hCQManw?+N+E> z@Ms|REv(RZkDxq?mDQ%o|EUA>)Dzw`+8N7ceO`wr@{9aQqVh}V(({+lWgKr)-S@fh{N;1W{<&f~-w^)KA(Axt z0VgwAQTicWcb3BFh~G0?Nt9)TYDnqj^^ZE}W|+OK)jAe4KDT}&MuPNYw;93!H>s*XqUFKs8HF6h_V;EDW8p9acY zH?>l$=GT;zJHW)M@y*3%4-b1TTns-KbbfEeYM4vP1l7D931*1c0>gFtC$CQih|_nY z$W5@7lYA5laT|FVbD+agJ7Ru)Gl59LV!FH zjFG>NknuCpmpUd%@7czX{&;Y@pn-_!MB+%B$ESaYPOPnvL#ULkEo(DgHsDQIM1&r;`?2e8?^RHrkoMdu^9!>LBtt6hwn;B#r+yWgVnvB z?qmq=^UVdqeXbFmcYNUAN61-h5jaAs$H`@+?^dsi zxI#>tYus8LN7yW~F>=L7QA~)jwf=>GG+07^XKf8v@DnKA;cQ4zm=Ru?*FS30pWAXb zB;Z>o_fW}}R$Ae$(0_=|LcH^^iHx4`8=V=trdlR3ARTqJm~1oc^4=v^g|RRg=rTzl}Cl)sd07Fs(~yb10~%@Y_@q* zta|lLz9nQmO188zwA>@s@;Zv)T4J*uN9A6M9rQmr*$oh-p z%gl{U{geTCUY_1u-uDM1(ALSlGfSd|r3rEKV;Fli`DnwOZ#u+p+1Yl^=0@{9R$+Cru~w~{ zG;zlFBh*fs(LOllIl)}96sENjvUeV6Bpvb3J!nLz@(H2*){YOtnIe@U z0~3AX?`O-BFLLk9wdqK&5llxWZQwX>49F1H213(HO$CnHj`17NzjmFEMDn$`p+$1u8XDYm;3$uxK5vZZyPJA=(2JSm>3S%+8)8Eu;tfx) zR7%Syt|fbaopS1ww01E;>!B;OODT@p@s3-vXo|TQv3rb zc@%gt1mlm3-;}$$Twzy1bRtH%e~p|SC7ts2dX~Y5>=w5w1FdG8FHwHU6poE;-s$<+ zO+9qMn@PbO>qOa<@S5JOh!?GAQ=OdT4O6XQN9l%u{`n5pE$~7Va{m5ht%&VTnBBul z(-o6Jm83qgC~1y=b|V(I%+A;7!#H zIdGQrgu8*_#0cqapz=QSR_}x2Qw^uVa~Vcc_@g@V(~*9xG|f=p%%X}&t+x^1wPh$+ zOY&Up9o$3Rnx54Cq4tKfnj@_`Yap`N)@VFu`mDOFx8v3;b=k8-fBtCK`@!J_ICa>_ zn8=9hD_Y27rp=`mGws6X`34%83;zcNLXPua3WUP2GUGGvvG-q(K<#hxM2_%=`9A?1 znyC@{He|@8-5M*PqjG{5cS9ayi0zev_Ih@RzFB*UiOjcD^7z$l~*Rk@nr%ofR zl3ks%P>{g9vRp_ox)1{I)}W1qEKXZYEtkY*ltrd%D}DAw)N(eQf}Yf@u1{z!Sb9b4 zDnFUnfVIoSa%yAxaV*?qiN0Trb%!t0GkwfI9G1g$YVr04%S$LHvM==1Q1P zOCjI2h%EjuBo7%t=>sIs=dt+6-$?La=c+FY$};pKFsUT#YoiCbS0G4I+6M5Ep)>v7bXC5RNp5M?^1;P7fg=8(H}>o z2ykEjlcPW17BbK$G*0vt(5_mOxJ3Z%>fBDQ6jxwN&eUd*v0P6DvEiy&FBmDI1T7%)M%%8@X!L*)y7ja z_%9AvS2MLU1$orHJc(_Bug!;HJbvBagW0X*ZnU2~nkjMl4POvl3!XmQ8-2U$*gj7V z&q-y}7%ccj(%*YU%$#=;2@ZS|#w65*nT7SVuW1RM*$8|Ub#jMZhCNgG#^0T@nuCG5KGWita!f|hH9*!RFaOtn7T8i2IKktR-WI}aZ~@v zNo`{QoK!F4xGLI&-NXYZ&-GbH=~xqlG%-VDq}`fQIP}mAvViDxfrOLzWTD4T*p=}g zuq(jQr_a&oxf)iovblGxC&MGQi27}Tr%CLH87iqZu`aHEv)4HTTWLArDaoh{5j+aN> z4-MNV25RuEMlZp41D4=3zRC)dL;`_Wb#>rhz$@+lH{jJ70`Q7DKpCQ2Q&giNAey`% zuBE6&sY_@bL?z_<#FB|oXp7?IvJz zV4Q=;tD(1D8n~73kF}k{=8;zFfG3B_s47Xcwta7~-dnfQ!bc7``Wj!n0E>s1YO8P` z)yM!ub}K{xVo6ql%vS8oec0UY^PM?Q2G#atZJbPRM3w^1yzqhaMTtX7W<+d^D5AlK ze$E)YGZ&_Dvf|?hi_hjgvKI`J!^px+NwS@;XW}8mOAZLTQl<-JOmkO+C0Bo;D zLfgwH$VmvAiqgDJw@*gK++}!8g{;}nbhTA>rafm6eUdpKe7WY@497mLk!-?jS6N|# zFHpjJ_Ng%IDZ>S;LbB(X6kjd259zW})|>`xZ@nDr)6mczrWS&wf+TG5m!%^0tEiiX zc3s>S-Y7!nbn|$i7PD}trwF{0*0w;W!>-yyr*{2zTpe{4*hjDD$_vg>8M$k|BG4K~ z<%rrjHi)8n@}VQw@ysiY-dh6XLS3&R(ZwmRXH%ND@3PRK>H2V<4(W!r4U|Fw6%Dd& z^~MsLS=d5kxC~;ucgSF#Pv9mSp6>k?G6}JyKA|snIxb~z)m@`jaoFk*CZ#iB3^ z0C)gO?th6_&LJNoZ(!Xyo5Hy@LN523JeqT%uXOS=J$r=c8a;u7YMlmnR|-hId)gQ? ziA?8<>$-1-HKop$O-6%gb-xBK5@btUB)V6%e->n`qCz#14Qt-^Zf?(`*I}qtkBzNEJ|DH0~PelEi@S`Md6D5GLtRER`Bumwn@WH zL<(c0M0d!#E#=wTmeRZfmCoiN~Q0aqm!{S_TnA7p~P6ZfNU6?PZ%$T*L|7cWo6pEH?=ytot%~Ku` z5@s$7S~#PLa3w{I;P=7ArIeu^^$>A*BNt{iV0O8Px$d5n@+E~IIpTAx^+v~ACLXOe zE1qs@)jFT3FPoKb$6b=Lp&+t7=Q-|+st=H6wO%#&27R!+EbIB`V)%@-?u+C&;hLw(u2{I3D z$|qiw0PSexn}I;_E#m2^riuIXRMK{i6a>?DnyFz|W~Bpcb|ELQ2=+XEL5$aSX!xVL ztKB8fvZ1x=>i%)7Wq6ISGlua_z>iT_PwM)Ev<|2Ia}Kdd>^pBleVFC-%O~LgpIXPO zWOqbiH_>7rLPwZ)wEkYl$^RjWTv{_2bysxHlxl^Pwy7j=_N}jFpt=LrI#23He;ib^ z&Iq_hhCZcWxEh8@^glp@1Ge(V@OiD~0RYDG(XrJN%N{8<94o9#*_H{_PCZuA3ui-j zB%E2Czc3nE8{w#@y-kZq0Ce!GkedXEYLj=?2GR4^;M#9j^Ke@kNXN#YzhVs*m+%l( z{e0)P8B&y=btFh8>Nu0xgym;#1P;>kc*TFiqpu2OWYk4!b<*pj48<=HosZ=1RIgvF zR+dD`Zr{&TGVXKt&y7v;5j+@I)uRU}+w62+31UY5V1_CHJIS|%p` z3CEWjH6cAORhD$JXEM@shbb~r^=jwYEi%MAK=>#U|5z&Rpu@^SrGTS4S6PeEM2u5B z)b7Xe%t}J;XImz;k9ka35_wW^YpM|-#Rye~hhZ*86$z@N#654lbkH;j$RtMHzx+(P z9cXL^8li+Sljc$1c!Bv~%0bj#5b?3|1>%Gvnm^fXmIzNNb}dJi4MzwDP-R^RgmwNl zH1QS6rvH!~58S3ifCBHxf}00A*2Svem0rHH#4)2>r>~IJsED+L&PaUJ(hU17Fvt1Z zm~LG!nIaJQ_bICR2Ncy|cEmXlwN)8BfuApMk0h|ghX+sKm)(u{qF4IK>Elz>mhLf) zeHb{bjC`~Y=wooK1u&W7fHRa!M#7!mcJ@})Mox7GcEj7XE4kLC=&bSP6ajLL%W3kS zg}lJgbow24wKyHIIOkiUC~b(t8z{p_%be|-;9s~$LefYAAjhgABYD7P>2+x4#ULGN z#pXhraX<>jv}xNduoU*bywBLozd^8J=)(0``bn{$n`M$>_`G(rHo+Y8H-W$Oe+m3| zeiHb@{tpCxOJKGrMCz22w7i>->ck71{^AttuOd4GV$j{H1DyMNW$M1!g7G&1{OklK zHb(_6|kfa=dJ>oH{@yLz%2~scOTw{}Vgl^R4jn|kx@4Qs3Ll%@>3)A(6 z1TR6`IoZJ|%PzO)^tan$yqN`{E*2BYE#V$_s7AXg=epz>_CCRQ)(! zZc#i#BQ|9jZJkEPj_&jLl=p_K!;rDX)@6_Ldb;J09$Iec4^A! zYFCB8oi5jBlmGypja6#Y_wJ5_3&Ayw&Qre#w!cbkQ0Dl7$rC)A;%g;8Dcd7#4Hrs6 zIFhM|DAN;4SBWBFr*sXUv32N%jZ4{x~I3`QClBq=$JtL(D2WTLMy*d?>j9eG`@ zF0$yo=p52g^0|(szR6BhjsG@8uJgPhS2tT2mn7Gz>Z0h}%+#qE1&kyz7piUG%iR*1 zgAn3E35VI=(0TK4Vs)>5Z4(|W%`zw9&@{sQzz%R!KRl(Rc+|1=ID5P}?4@z7T`y*Q z<$Q{07+g^+XD3IP_F|e~^?TRwrP_k@{P<{A^r|Y>*I`0gdw%zoEmht3YY^Y<+PpM8 z?vqsu(}|Pjk!SGznhFXL2GL)TV#x`QyFR379#~Kff1$~BRQKXSEw9zRLeUp6d zqr%L>>V`it;Iv;Lr^Z3N>c&}O@$nL5auWO?y*3_p9QpQN1FX$KAMSwk24Cf(q|@Gr z6z--S?QHZf@M`#1z9dwG>x(X61m-2Pbz45EJvX#WJ?^l&fG9%bQSj{!46kOo0zIRM?u;$b z-Y#(~RNa6pCs@nIa=cP7*nBbs-I@|VfzL6cP@X;Fs8Je93K{(WUoUFCD;}{ zhB;nT{+MvxO8b6HikqZCn$(Xl!h&jKcf$xHtol z?T|ido2&DQi=aRw(Dp$+LS{Y2I$+#7qQ1W@GDTO?w?ez5Z0_b~0FdgQN7Bbgp?TB+ z4*VCjn3=X^!Gsu)JsOb#e6%mpl?f2l7gel4Btva25q4FTHHc2Yh;umk_16|+qMtNy zK_HURLFd1_jCqL1?f=gSr->|04F$hu`)3CxYbq)uXTnX$>YvQr{7nP@@SH^eez_mE zoZ07|Xs>F(X|+^af*)h$$WECCk@1r=74D=1V>fP4R)@gRqKa5IXB4^iYRhs^&gmT) z&J|x3*g_%#ZHXvGu^yTCm@>Yi44K;`KVzUw>MVLF;M3IxqRnpUSJU+rKJ??*a*g`3 zqQU6)k()Igml)|HYk#2Km%3+fW)|ApnH1E)IvjmS=u@Vt5ce}aW^jzy8OY|Fn&sE) zSbQ9G-J`F-#=_?iQlg%1=^w@a@8=UEG7oWu_~ zy=n`8x=SsqR#gkwGmTqv_hZc0uTp1piu$@G@^EZvICO#6Sqp}T>}{|M@>nk+Wp*_* z?#xYRH_Nk|>a`seAv$WGGG1Ig-gZswJGYzGmm1=1pz#?|N^*U>u(Q@i93fqrhPjEH zPV+D6;NLBXf8Tky(kuo9ZO5Vrh4qHila&C0N?~X^w@a;b6Q~qxZ-l7_pWCLr!cg_^%nCRMk zHh%EM&b%Q?ggAhVv{iSF2rUj=dL)nej;Nwe4q&K11s_pEoxg2yl5Wvm#cG$fF8rZ5SXd=l0sI@`q={v(zxS{ND;0;ZO5Q zaoavVRj;^&&@a7<18Y4cg`r?+9241z=?DIp1rsu5;ExH|VCRhn{+Q{%{4xD$Oi<58 zn$)X1(t#W+*`-af0-sE5!W_HR8zHkfOHaz`KPxDu@Gzh=i(@D$4p3E z400?My*J*VpVCiI$29$=j&Yd4{9n{DY0WH@{p;;sIxNXTJ8}DqJv83@03BW86#l!>n4`l)vrH4`tEGBR&j~da;kG^&U>X5W1n_?3c{s zN^qiCmjfr-5{mK8ZIO}Df_GEzcm2`qrBBS+ z*`nRZoaa69+T0)Gs*T(8_ZN}R5j*nA&L##1iM)e`g>fUUb%mbuF^l{17%7@M59~2-yztqIf7?bj zhdTBxo_{y%f9)~8Cq58K^8{)|SZzKJVa|rEX^aGMIL16pyKX?6cA&Os-d9_!HZ%Tf zm^CG{2$bT7S(a6$UZrF;r`6c7G@*?2lJ3DBqI}|_)UiePOC94pPQF%n#HLQHj}7yn z>X(+uSNyk{S{-ze4k*fF^TUhAKyE=p%R@Vq9dx^wJh!3X#8T_+S@Dg$wByn&`hc)n zZ}96u+MBP=Q3rC1f|L;x-vXGVuYShjv})WhbqxL}vtL>muJ;#`IU>_+09_{sZNH+y zLAYcw-VjliQm*f}-w(C1Sv^mlA|`|@540W&DBhHGg*>U}2VSN>uxKe6m!dic(fm zOaqtekh8(p1XR>#YNr~e2wd#sBTgC3KQR0kHJkJZ82*OD z0p+&H(6k^AyPEdG%(^#BnoKWl@s1ciBW3e{aDDNbuuS+GE3rPdmgn&~w%$AQ#0tPt zO$u4&?8(7;Hq;OMh?jky9i%Q6A#Xj*dx-gZcfCgus6gUa7{T($tdOmXmk?G&r2-Y2 zMwV48X#f8qf)#D|<%nw$WN3QAGy@+$lx^wH%;l}T`HVAukCsXS9zq7^D?T^2lAhoh z{2>rY^qy}318*T&`8(TOj)>*2h8CAaqC=WZ*^q8t71I%J8aM^4%^r=d_ZSa&z6Skw z=JYrJrIQIf(82d)9|%6JD}_cBwRP}Mt`&FB_&yO*B|@M#HR@_BT>6Jr zPgt@=I@u;+yv6odv6;zs2x*PFY>{tuFBpP zr;e^ij9wX5McP&m#V_Vwh|ufcOz3;prQ+$*R_auDJm@A`2i0feM6w|#!?~gkej>f1PJH^s|TA$5=?KTHvyi5bK z}$!9%Cy`?Ba|=nr)r-h`!Fc>+!L4HyJ*ZQt7}qcxhE6UdVOarEGiS^R^%= z(tmxI1S#!rp5N8{=e=4t$!F=Mh3mQyf7dwLsBoLI=o)RmG(uo2TY3SElPZ z9WWm2G%2la*kxfPjmP8{zEXH;c|<**s-1HdTjkD!Q*W>Jk9+g#p-GAXg(ohpYT>P2iejRhVXt z49bLV80$3O)P>Y^c-=FHz!7|_l-f^==%}aR3|=k(tjCf{JnM1z7wLx^ z7MndS1phJkdCtXD;_>(U(*Q=|nt}pIa8FUsx{!f$pKA_CKUR1YN&K=P$t48rUl`S+ zc#JCVzcH#6WzSGX*N4h@Dy~dD(VcMNBtmngg}LxiEii=oTF+HQ8{KZ8PCXVL%*o97 zo1?0w_vOur63wKTdi44p!V>%y zg}!1Dt>(L*BmKKI+Xf;14yX<*5w|cYtWIR5Q=~4bQr908rKZ4Nx8Nsv3gF zM|;$Iup6M{{UFN79Y$wBdQ8;46?D8C@aSS)koBy-P2^b%dv`@8gukET1Sz98JVur| z>sR5JR^{y1BG@MVC!IKCpHBQtj&zfR+NsNgj`9HXc=`W@P8>;uWyRBpg{6!yLu#ez z59q|HIBf?%FVRVIOM^ae@RC7vL|r##rr%gUcQ{YB+zMUzll167ZltRVNRQS#A3xcp zTc7$vR*{Z%b3wIWg!=~qtzF}JY`(PrlvQl|Dtf_1FK0Q#)di^JTdJgxK>$KEa=b=U z1=nq{;`Rkk+Gjn9E!4$?rzW0@;E~OeVZZ9k_#b@Y&pT!m#6S7OkvbUZC=?d<@?BK1(&_jRe)=>$V>@wyhVzn)rKL*=RxXpbOVC)76XzR}O0uCMm7q#Ke6 z=5ehzxAhw6MeLog#EcdMXBy_&(DHt1We(~%%1O_vQg2+#l@?kfJjt!>q|B{T=Fb;5 z`QdcQj^Ao{Lm1i{?VT&dt9oi)n*V(wv-HB!7sKP}IvQaG&jrdP&|m){5{I)gj6&1N zeYoLrmszlP>Un*07eV)aM5j>o( zwZ*x{;ygcWUtvKYX!S4E%iAfj5Tivy`EblRw)`K@_r7@&&N7zL-}|SMhz3s2Z@DWyvCEft!HjbaT~4zH)gchHy}lbL#^q^zRXMKinP zKJxxaAzhgzvalT&5HChqj(QWxq!xJ+EtQ(-%ffkX)-C0k?jDN;E5*#n$dlL=O>`VQ z?|amR{(uyjSPAz=Iy8(O!a^4lEyld9l@?%3f>8}}S@;4|Wl#X>iYorDu}m`%u33v zAD5d+Ab^+E1xj6#c>KmVKMO?6BExKtqjY#THhQ&+k`f!>%dBrzbql4mlfb}1@pbE2 zOdtNigoG*`RHh}-wN5D9M(Mh%8R?CWU57X<-z_D=vP6SQS!sv9U56R%meDu2GoKKs zO8MwGSRm77GaDhydM3r1SNMoqt-#apaS_xb60yvr$SYcvb;hQ--#-c$Q5*JC!)vF9 zS4@iQx4u74I}16P54CR^+0j&AHA_5w{t(;4!x9Y5flaAmX~^}oV6PpKF9o6;D&~(` zUdB3>J6MnjraC5?Ft$wkE-tvQ?-&H#iaHiBVU2>Z$nhu>b_193Mv=! zxxaPY$#AWmsc17NG$ebtcu+Yd;?6PWXWjgl@8zxjDD*}onCO_r%lE8!O4{gQoxv|$ zn>vR6(jeyZB~R-;+P}SH7L4llk=mUPe1_vkbvn0*dWZ(V{FkGNA9Y*_O9)q?nIgWxh4lWd(EsxysM$zTxX|)TRKaK3%b|W{UsTZ-_InW& z&H;VegWceMX5i>d-^9{G474*0L?Ik-@m8Y0R5ui_yHv zFih^_)sG#6lI48#(<+W?*x6>5t9{yd-nX_uUXi}1+lgzFKi5E2!26EVhC4V?yi7{u zNMbwuNq3`7!`fh|aTG79pxPSaJ58;k(IdSRDNvi#Bf8M*6EPg;b#%gk#)gHmuQX`- zv^BZ|Kc>RWX6vaFCdSFJ2>pRlK+&fp->2y7J2JNWNfxCFreq{jzA_6jB5tlDP*lVH z17IR)wQ-sbXKp_U^IobP>GNK+ER{vi&$jqAySeEzr=X040q*-K*WurT>X)S=vh?{} z@0-AvFJr#!Y=&5mCoGN<2<=ekrm-viUUud%+3B{og1Ce6eixKVQj zsy`ht0G9~}#Vdhj`ekp#BD!3pHQJhHb0z^tzrI;Al3vMJO1EfG&^U z{4z`KCV09Mpqg1{x4vLZ8@KEIg%yN$<)+OlgTi-`xc$c2EQ;5BPeFmCN5~^KHuViP z+O*`#9gZVpsbHuDqY@^iY?~7|(tB;nJf2o1Jdv>qj(QbMwDWa6=Q&qSOSPT{YaB*J zH0VN#qS#T*`K9dGEX(xT6~>jB{Ct-&aWr3WiTAOt9sMeYwYN3xm3u7Tv<-czFwJ8` zC78>poh9xa9QJ<-C0~aT~QolP_Ib;6Pl!@yVWE z&*t}2M0%mDZ2(N{=%(~>Lq<5F79hkrLnz7aQKBOgrDnANH#CrYO;xq`WGMS+e*BhBeHt zM%>x-{{0-~`}%;R)+QZaMioF^X;=(4TEVJF)NSJ-; zeK@Qb3Il~R9K5|`o2j0%i+-X_Rb_s}RW(0$v8Tp}sqBTJvM>8p+47^wFHSO1WD@jc zUYhPGBNKIpB_2L?gLoHh1r&d~f^=kvdRXQpCs_O*_k-hV4s!Lf6>WPE%uSVC#FRM%PKWpq7NK91HEK;ugQX zo+--_xJv06bp^iYon?HWZhtJn?|oi9%0_c6Mk$M>i)%}q0T7C5?l-qY_4L=xg z0e&>71C&ZePJ6S`kuQ3Dl2K5+Sm{Ua%^prF8(IM&h1#Okqo(_tUk+-84BORh7^67A z^LoFxaIBCK`$pPLGEVaKE{&V?xoV96bBuL)z%G7VozwmUqp#WO=ED_e9I~PwAYXTe zuOltZQH^#V8vs z`V3;?iDZ`73&+7lE>rA=zfd9S7F(MO$(RV|Y#rPl%YZ?(`8}P zCP}N|Et`&MPTpMQk$g3l?xqfo@U~0M*IF+CYuQMtMimfk7T_+}+WvbL^wn2cCyZ!4Q z%{oQa1?jryF3N{*7i!aswOt>MZz%T>j6`^(lqEReJ)6d^-R%ZMuH8Tfs7kt!dbOui zN>&K0g46q}pxrNLnf(vP5MxiHZ92`s;;a+>oIJZD1RJ1&?d%sl-uS8(@b%Vd)yZlj zM#Y~<{oDJ+MP0%IcmmXh@DVN@uKayFF?A|g!;J`D+^ZaK)Q@Z7rx^4FWrCY zU-nBuXHW`K5?gyj`%Y4mbe-w2_%2sX#}7W+tjN4u=L`0~jI-%Rl8T|1V`3qzYq&k^0|C za2B?fJ8fO5%|?(h$sBEX_`X?Cs6U;A(RWdrOl$95 zz~Yar+9sl>e{8*pkNg| zIf6i4x_1|^1N?gxG(*#dfLHheRTT8iOXnPEpP+>8A?eq56w%9xnx?Hk0v{VDp4a8=PYw zsxJVedtjtDW)tnnYdiX5!J^DqVSfF4xI?h?Neo|LzFk-8M<2U1(SuEIRvb{1%uf+41M$hGz+8Vb*&Z?`{~p^R38RPjEGmAcl#ka zlgu}p0CDACQ2mniMH`o&m3uVo`F`a-fE$K+pX(Ud(BJUBg|3UioB$6lb;^f%{EV$d zVuVEh1=Yvq_|QW|TYNYM9gZahO+O>=d0#I!-;uo0u%6>Z?l^hdi#_K$tkIDr>B@}4 zDn4bmMXCl{V*`RU{;{U z=t$hCp3ADT*9X=LQ5Hz)m&Zvj?QYD-Mewtqjys_uAWbkV-NnQQdRbc+Dree?6t#K8 zxGPmn2(jJ_K-@D5MX+TpE`n3A*Ox>BD zR5+JD?RK&PMTVZUuSu}hWyGo6zL~@<@7U#y>f*szcb>8A!e)mf*cimNOMYVih#KQ~tV44lO)5kI%RwzXU4atAXuXV0=!ld4vr6vhm2Oj6+OcG;Bxy|aX z8HU$BRH^MMA@kk#(?j7wiNk2QMCrtq!6qlx*nrATa zAL4a5S8AJaQeisbH1wh9XqV!l=tHA@58|(5D8t}2k}l@=Ve`&k9k>MzZuO)`Mb?%} zdPLTSZDe8{_(GGK<8}0@Q&5IU77_9%ywjk?J;UTcp1F zfwO|ER8b77{W>|h=Ff)Epv?!bgn>N5Mt@-oM&gw)=LTfim=0|Q8ak2OTuM$OrdMs0 z36=9*Ps3d5lJIRCDu_oN8564PeVt^e$3Go;<+h6AWSB)|A@Rpvud~=v_RAW+@5R`U z_+~}v4MfM1Qz@m!?T16rFvg@n7b+3-u!+W(d2rIx$)RX9i1;JTbj{r z>Hu(&Dp4Dkr|nITF>Te443Va>(l1@gkq_0VF4a0-KBa4STMVb{%n;a8>B4$w2!GwSLkIo68nU{+F**KtKIPIN`~&(p*<#vlMJ9EawP0daUF-4pAFaJH#R_lr3O(jF z9Av$B^>mQsk)=|cO~W(c_rj&h-iT~nyQW2ViG+my!z5cOg2*`zCyh;z@pB2kar*%8 zdh8Kk=Z_u5r1`IPAF`3K>xw@zxJhz=ccp{w<6R8_-nA?PW;pjRyzAhN&Fqn$@xTdJ zWeG8>rX&p~k38-hWL)>9icjnNrseL-Jcrg&#ij`9$2{K3b^+ zk5=lmwEm4&YB+M}`>~@20AZ<0Vyih~L_k<}0EA^5)gK5;hVk$kei=j(IZL9s z>~T_)wzWFS;TDxZFX5f!bVKkm=RZWuyS6$FsT}C6`X|CEoQ9tl*BPrr5yHRp67nP$ zsyq_YkgOp%e&nu>dPQGJo@WuqK3}P!tp{H56Ji-|gHg%D3nrpn@a$vrFSbB15uT0x z;Y*2~=W()%7DvQiXPZdu!X{1nq2P+%H>NWvFL#&{X@{o;Kjhitn5!xuf@hV4EJ8jj zr9{$V_?R)tuI=RTvH2O^>zS9U{>jw?T+8eKkk0t9=E+wE`pRy#65Oj#rhpB!fx8^@*yFDZ_H+^1M-Lw+%k?F7Efp)0u`=28=J ziZ!6}ybLfG;|pvBN3FF#9KgZ1AH+pFhL->sTsap%+^CPhSo%`v)H&X*#1p*tACT7? zxBPB&p)$G`0U)oQzaX#C01keS=obRn_74QI+K*G!P6qT4$2B;!bL$vg8u(T+(mV@6 zKE;+`Pcr5UKNDT7URO)V2h>JmpPz3POMoodne>3m*bnItdd8aNL=C!6?ljZV&bO!4 z!Z(p_;SM!2lZ>M#cLKW-ZD~vI7rXYmYNk0<>en5`u==xMee>rS#_#~-ZV!vnIMmg> z+h0jKqS_?u1-0wWK-&<;%$0qq{}3sbSFJwaZ_2NcZ#{JQS2ju}wQDr@F2^;Ea>(u!dP6{aZe1^ndhoz6-E)zqdzg1S8t9Bthrk>`7-bjM2T|iuS-0Ec@iX zgn1A8j2E=7k1F=t6xvdg1At}eV0C?xr@@WQ7CuJXx(m<7ycJub?gyPmUSpKi>X*J^ zI1Xj$MrgR(I@rHXf9lr`$YbJpX*53Ptm`-fMi%2}HXdBMScw-tObQw)AP*<%fz!9e|J7 zx;01(qX%LpjFj$F^t?{on2Iib*TLz-&4`Q-e#|V`svkR6o{a$XvAOpnTT}(#JBoRa zGgC4KN@wQ)GT-Qhg*RbaIrmLZ*bBT&&HYlcTbX|CWJ`sU#mv;AJTGzfp_0thk7#@dyEK`l1cQ!fI`}90`kyPcEG`vLEI8ll)n>Uc zzM{R^I?e($ZH^lN(xXa56;&PagUgk`>3ECysMk$PS^*Y_c+sy^aw=b{%_XpJN`J^nD)HYrNm@&*l5W@ejD% zpZELy_INz5*A3HianrQHBP_K3<+L=d^H;`FCIZMj@8hj!yNYP={TuoNeaBj&M}M?L zgqQd4OUh0i<_<`2a{c6GFH*P;QhzQ&}85SN2gp z#^4ss%|_XF6YonNE4nbW9yVq&B+8FdrDQ;2pU*&a^iFXO$(%>)Ep2T>@W2k=b@bq8 zu2;>6YB`!RvZKcG5dPlGQ49vyMv8D=i|taoX-kf?7jX{vnPyk?CCr1}jR~TG%^X%b zH(6`edyHebsdlF5l+F(0Q8_Rgtg#8qS+%14&5b;Xnp1m@l^srXG9NZ!am{fJXFS3< zHqaQ?q5PM@PVsccPOCJ=+}5`i*)?_a23d%%iN<{n=BXv@kpMmZPl1qwNe|KSTk9jl8srZKgBaojGl(JwGM_VQXmj*rdxAz}PZ2|=&{-8Fu^&2*O+^Qf%K_Jf=zHADpCs6nW1v3j7f?THUTdb3{U*taRZS@D zCrR5#bwp6K>0kjNYwJ!}l}ouufaE0QQVQLb20#9MF`vno7E8j8H=DKe{dO(QL9_F6_KaETLN9L*{iz;J_9$5Q^7j!1zw?h z`I{KN5uhkn1GtKuc8I|68DD0h3dgZqHP`q!u^ja~MaP~ABJ9=R{|9>&_Eg}XSTj4% zcC}M9(KRB|*!9JpGqMXSJIyjQm1M|xaRVxF3=FRkas*hGteUvFBTn2HWUi0fJy7`h z%_hktoOt`cJQD?!&gUPD!qo;mEo{kmBh3Uf$x~d@_!imD^|`55vT?*Hg-S-8>7E&? z>DxA@mIm7mg#jeX5P)P!qSvG%7GgJvT86%gvETX7EO{jzB@X#EI&R>zlGi6BEke-3 z9p%j=K#xTeOhnN{=-G$|_+rJ>DX0jIT+3_Yt5;7P$Kymt$4`v@I<5Wg)%{SVktQ5vO!@(gQ+|O)O=O@_E0u z5df$kkpUa_b$;dJ)L_%TrftG(si)l=0G=>Z!F@SaQ;CmB#&*yWcws_Kw+pWF4r^9wH` zTe;sPK8i*;4-V_ZFzFZY2lej%Dv|LuM93rOAmjyM(4#9+OS3|3HyNEoNf_K{S)eG+ zv)jEiW#VAV$N7DC(NWAHq|sl=o~@qZ?`=iW<8MEx3f{Q$CBJO{o&a0FG99fj38%Ov z-+O|;F^;0el;v=GEx_L~YxE{hHDQ21tOuN%=7h7qwu0YBn!cc>VELHzMA@x?zGMz^ zh^a`}G{mE>gM@GpKh7radgjnO#XaBN&`H~rBA8&y8|Y-onjw#`!_arDRu$J!u4h*> z5|NEQhr6*rvRRA|+ChA-Jr(Y1Rlvo{6xu zuS>(c+VHoR^+??lT@?K9=vgvVB<-P=Jq%+YL-x($5hCcG5tWge^wJ%aW>>@cqs#Wm z*UBp54?efOZaJqG@fbtlqp=a9iJYPY1JApJ*0#!Wn0d<(g7_LVOI=u^4{riPR4a)p zB|()PDhQpRug2?VE}?u*CGl1{aI1?XkAvDGKL7C+-O)3#nn%W&3u!O+8|>;o^K2fgv9qB+;Q#p z@Mj~=UdYBHF>FP`6!mS*s{ZK&?MjD?Ur=O=V<@syp46{WnfP5QUDO$KNRP_)+wu1O z3CLxMFq<-bSk}sLPRSTrT%E;IKFEMw ziKS}xCkdO`B<$_4>FW-0`WgbROcJNBt+hRfW?AgHfX%h%CvQe4k_gDR)?eu>BG@q; zK<-o^?dX|QHLI3%{tRETe-B^5Zkjx{&czK<%X^rXlyh+43^%!-c}K=(l+EHoiRD?D zB^?0NJY+s?lQR9l(R8(dDk^;+*86sK5g71&Q1#OIJ+v8bK(~hiufXZ)mzU4JcT)1# z?FTugwPOQDZ&nUWJKneQidubE7w3vO^OMAzb0l89W5C-KzN0Aptg`f6iX{)5DG!J8 zdS%8N{T;;CxOrO5h^2V5Im5b#$k|D}8y5>t(~r%M`yb-aoa|ut!fvgpld z)VX)+ij&?uK!QdK2d936Ik&Qym1i1Fw&q9(IWFEQn6F-+c)~2(;^*TyTW5~HKTAvf z9nzEeqFai*i4=jLAj5`kfTNdyTJIRDcz3Z zV8;yt%_QHOH0082Dgca3U+VtnT(F!D$XKW?;fWAvfk;M+{rU2Fc8Znt|mn3-EV2p7ktX> zxMd4=)MWXhLkQK~keBV9{Op!9gVjaPR%=1&G$A%1XEnaiz2jxM1d3~cknsp z2W`@TbOK4>HUl=pfQW3<#}IdDti|B+De|p*2una(B>wat8~b2&IX}SG|8gw7Q?jkD zw%f2R0q!A*HPC>NxpoMuVGmYH3m~{uF-qih@ycmK(!_A0Cxc4y;s%2p++l!sBK-`7 zj1puF3l6K5%z`U6^xO2mk3EYKs$v-yHB-oKoXs8?|5Ec`Cze%a`sWb4??Vm>n&c%R7(hI2|Sf(5iWPZUK=U4YJrGw+nFRXrM8E&{-skvJTEkqs-fjB>&=U2b{_9L^x z4RX>^vfy%@c}qRba3(NmZU33H82*XXPnN>Aq)-b=XaFdC${dPbxo}8OdFP;W5u)CF zT&ooUbK-EVi@(Rw!xEI{3(1YGi>lN1tYIvDoP9({5wX0iUWxQhf%o)-o&=bLxX zw?&Vo-r{DPB3ivp&Vs3y%*Y4Jy21dfSD}`U7qityt0i0vr{bRpYuBk9-tKZ#1y_BH zI#1pgaBJ@AnNLg4|CMRU_oG$l?6tu9k1@y2yI-CDoB@Po3MVmG-3F21KO1%trs2830 zEBCF`d&ft%Kuopfff;M0A$D>oFd&mh=lnmc6G~O)MoeZG@x@Y+M5g{7i{D}|Jw-;? z@K2H(xR~{#O!T6rPzdJZnHu|=YrUwk0`n92=;jKbgX|=68UG4>2Z*6B1<@&N5-uw= zFgVoUZzhR7dWQS}&RP0sR)%{Ms&<_&d8VKouzLMCL{Lb|3>J~E$W%@cDu~{q@p(?K8uRJ@kIW#-q~&V`AIlVPH?Y$QZkYTMGJFCwcl5K?#d zgXEP|?3QFfg4ucm6kuvS1{RQo(wPurXviTD_VOt2i)}{OhZx|CU6H^BLR}f=xHfo! z)J03h9sdHtc@gfO3f=Vz%3S(rBq)0NQ>djYS%D4^X{Dg!IL}HrUfED7jyC*w{hUwV zwb$3&bSc;@Zqdl@t31gKHgGaTBC=xmHTAN!A_N_ZY|;h=Cs1IbZQ{rp2`Ez~g+!V# zJuk9H_ldP(hPqC=m6mIn}Z8t|p8hs0|teFQW0T zo)MpZY`p6QbQ74rbQ72V(oN{qEmdrz3R9kiZv4?rq}#_C6ATUd><=7E#5^`w#zqN1 z<2YnKF@Dp1@zS}#$&r5uQ-KXcq*j+GOx@R9Jj3cX?XHX0{cqpI!#`&tJ~pTV@bQ_5 z(_wnJqSQYEUpcV?qyGqe>-pf?acyTP$DZ&%dZkiBLPEm-xYj+d7h4JhzRH5TvG(0; z`GMTxfYpn*qCd?;UIY=9cQX@PDqjR0cpk*?#LB#pfBje9>kZ_+0Mgtd!^rM$OLg1ZOPU)Q_xsFA4S$fLfz_P!pAmhP3GV_LM=n7C*ONKjd(nK^ z=aEF)O!xaJ(KAdo~*7cb&;v`NraJwPM;GieZ zf_*&WPRiA7*`Fkr29=oM#+kr{veIQa;RO^gf;-DRV3=X{3X9mk94H;AqV`(|8iYU~*> zo;ZzLc$NvH)b8i$Uz@L~atQjSGIwCW*9>&p?-1M2a@KKoP1Il+kY+h{*EU`k7c-&H zE@BOw@v|SwJeE%ch%aRNhskLj=fA)XQe#LwJsjv`ibsZIE73`G+YHSg>PbI>z2u|% zTnju%ye0o!*#UkFhsZ_FNRCKq7z7cTxU5`t9&-rxc_2APmtTNUP&L*)ufrQRD3r;v zWR~<10sz9TCI0is@M~4a1*v(p0I45hx=yxCIW>SD(&WcWsD8`?;1c=uisgxU0Hy4l zCJ4WS&vu_VG`6aQ^+p2chnDZz3}~Ov8`V?7A(4tpN1xh{PO_{i3c*U7F&Ip5`uE{j zomTsg;%U^Y6f%5;;ynT(So1jGbsI3>#q7CfAdpbmANJ7AYH36K5_EDeQjsrIA^&k- z=$K*adM5Pop;Y-$jkoHXK4pfTz{ShT7qm(L`GeG-D=)7DOa|pE45%ka*v)p5^FIXm z%R$$yFcGiv^JBf9cJYE*mu2`49+ejGvAEe`x)AMNMjUWQrp+z0`vdiP;CI_`t=)`G zQk+yCtVpVN9IfT@Rr4ZTY$k6VUsxue65HI~{a|?D{nSB`acNd7GC_Yd==F~;{CllM zCr4qH)8N4E;@pCbcYdB;)~Y@1sTC%iz->vN8Qtj>0Bm}X2sYIgzTLK~bAu}Q`)d9- zD$$H0GUj%Ki{jnTC$qZmF#SlOa>&MBO5uFD0gLn3fd#k3`~meYeOM>XY;F9gv+oHb zg7do)tq9?K!T3tE{!m)Ag-!A2@62AgT@SZOXg>|wg6RPHe%xl>-1w&vNn?}&mf@73pKjWow0={>$ms%1t0Pr9k&|Ceq`BkJV$@$FfElBtk$32sePhdCjV`jQs8y?wf-HZ_er1|O;PiT{qx7r{HND1NNfE# z7(~+7v!MK~o*}1&0g{f@1pQU7w_AN0PM0Fvv`+b*bTEg@4R}NZ_#ld;s@Uhpo8h=q zXpt#7?LQ300rM>e8IZO8Z>~qFo41!%UtO8s6#&7=gQX69dKr(*8JjF-L04FuC1F}D zDsXS0-fkdUPL>(GjB{|3_(}4ywzy13!g*1EB%NQCT;9sNaXT9(Fg*i3q8OI^M9`5~ zauA`?aOOV)n#Zutli6{?+@rr7;M}Jf(Q8U(Lp$elR#pITKKV0VlE^@$Ia(=6$E?Q? zYyc1#2itUD)%=OMm_+L*@>%Jb@xk{S5=wmP_R5tgzt^8}epP{+q=>j1Z2E1BIb4># zBLm-@%%W+d|K+}QY50x4GqOE2E`D|PbrJr8p5{SPEN7RUt*JkEvziDzy>OC`?-H(k ziai7 zAQ?c^X?W**Wg40g`NepW^-nFUkK_!P@IKsl>nvEwWNV{ehMc;kAZdo7sx_aBg+I58 zSfYEf3nc)lS|2`)9krK~vEbJ^s8h7%NjK1fbS@hP_aAISM6N8N$H}JW_nz;Jb|ZU^ zhQn7wc*1RzM~mgwxIl|VJ9$c{B~nN#YH~DZ*xHYc6tTTB%u2dCfV$2*YZAt(JL0rc zrheIdzHyDn4L(M6pQ8u?ndU4Jq4~^drO>wvkz_4iAE}NJ-AsxAH+V}fdcHp8#m?a3 zt{(R7Uq*`ZKc%%A@E?_B`EPD;H+a?$Ky*)tXqcW>lNgYD+W!Y|ngbG>k{pBs_%{>i z6s(pw1&Yg~r z!447lcc<_b>^idP#L{}xt1MLcT$Nddd7GiY7dwMi$J=JFoL`9?9~%?trgOMH`_&`0 z!It@IozH0Y?9roaiqO2fo_2@15Mcu+t@RF!bVWple$?ij2HNcglG{_%TAK$3EG-dl z^*EGz0XCRaf9;tM_;y_s&Os-{yqNiY6m$G_9)m{nIP&Lg$qnc)ySC4d*gJ}VKx8Bh zXX4}XvHG!QSzi!~bIb#VCez9>qLIP`55_KVo?C`QR*o1<2t1JH6srid7_&_F6W<>) zjxy9*D^l?D6mvTmqP1Dt90)D<4olDaAP`gIO{7$PJ0k4^odOn4a!BRoc4d&YV{3xK z#|J5QdvSHy0Zt%m>he5GtwU|JYtqxjl+L^d_`3?=8HSWVM^EREKMGYt)&xhRu3vcl znf8ABy@;GFJi1Z*@dV!y@G#0$MfZBz*lngTwO$1cJ?=!kv7aRJYy0Qo`-@(s26bTv zqu!(qhg~h~|EB1uGqJnsHOZP^&;Ir6*HM^4OJs-(?{*J=M8GP6D&^GLdWq$TMhWQ2 zNv~Xf+QC_+FiW^P-ZB@j{7`!0asbXI3zK~k7kqJH*}zbru{!-~y-mj9 zL|@+|bZ1p*dN*Q<9juHKfIVl9)~4~3?MiOl7V_yr`)360&XZ7{3GbC&^8%+@ydfqS^`b|HJnp=`pubh z8NZltIj|!Y(r3)%(Uq1d=BYJRT`>wmi?%C8JC@rFr!5{=mt<8{mD`VfaWuVpSTR~Y zKCzMtd`1A6@Vo49_VaOSQC{b3ojx_4h!WKcpQ3Hc#GwLf&(ns|ciotf*iE`s3m7V@ zdI6kpPOZ??sUf)UsX*T9s;$$pK zUx;l*Mcv>r0#m+-L~}gdYaFe_L!AN8X7PxVXU@7!;=>kBDg~^ZzLrifVz=I~&u@{J z;$(n(*3uX45DYH#$-FmovvsM#I&B2ngOjxm{w4=619-v{QsJ@oQidaiVdEQ^hL>>Zsa!Y`YMax`w`--jrNOmsGt2sFDZ1Ce zeIQd6=QE0~z>MXkGQ5oz5$Y zR$J@T7Zr83zF84cjSSfP$5HrLh1=I(5%3nL<#w2D_Hx4FL+3?$j*?#Ui4@1 zbx3^T{THXo*-s=WnGP!z{zYTD+gY#Ph-;GD`+BY#K-4%pefyzT2Vb~)!BUwyDZneC zbjU2Nx(=mMf@e@!vj5P$k1v`Ml1E>Z>O%v>s?BC@A=c=Rk^LoC@Q6)<$NSnNu6gQw+-20jW@#h`zd*!g<=rd6s%T%=I{p#Em6bd z<><=R|2|42=IKL~o80S6i-WsOg|@P8$7sffIcQ4d;TXUaBQM#_&T3M>R^cbSzT=Hy zT|rWTap&&^9Q;r8=_LDO#Z%=tH^}!Z;MIZae|NnP$(&feQGzctO|z&FL{Mn^5^R{A z+rFqnFvFHd1bP}d8m0Z3S6pLaOBq<(EL9u+Vh z=dG%?Km6{2ytoFUw#&xc1jvkh-v%{)S(qMvsb>Q$O!o$Lm$2IGlY<%RiQ!;ejXOf79~i zTwtAL*#;@qF=<4<*=iEtH#_cmDKy(ffREw?aIIn9HLu2o;n+u^$hxF>8t_pd{{hSA zdKdHbehk-h_7a7_OpY^nkE2U}1ZRD}1ZS83EjWV%f-~sfg0rW^e+$m?rsAX}e{&g) zQdg4{A+E87%Y6g-Cp*WhYk1f9*38jzoX?GCgvtyv)BDroyfy$CMb;DE1YCd;wQ_!E z_1XLi*H0{$`DB}bn)4Y_!mE_6q`ZnpygDfT+T`ga6xNyOFX)nih4GP9h)2OBfPs?U zj^i2&cRg=}_Nn`vDHlj7%xX)02iv-jp^Ue)N)v4jDQ^YW81pf(4`mE!m_|(&ChaL+ z#XC>8C9uE8=2k|FiNyDh$rFAY6wj2G3&}SUH@oR9weAm&L2MG(8*y5v0HJajsa+Iu9ziR^O(HJ znx*0|aO-lcgLH`FbS@?4&HXB@nqoPsV9A_XV&f&`VL$I=0RxBI;`%}GTs<#ABD#6t z25YO!a*%}Y(3QZG;=eaDiZ6Qc?afKXT3FtcnQI`8GXe8ra~G)g*}+tz3RMS#T5n88 zBn$E;x|~;X_cz#G)@@tB)VkE1UIH=h>h9{3h&V5>uaQq2g3d1aR5Tj$W1-?m|3J;4 z+Yn!`4_ZVGg!2cY*SH!F8p4Yl2|6qaAfwtGoIKY%{in*Ekxf+JIGWS3O6bT!JeT3f zL!8>cd~vmy#CesXg|PR8_jEoCbII-DJ0d_si^M0G*F9e}2|tPQ5Av2LvrI8r%=Y<) z5nlkCC9JIE?o^qc{nEK)A$E58;$qB9e~I_}p0l6+ctV4Y67^#Ee0jq z7fF%bNNR^VCiDg8G$WM|kb6l<(PB;8jW3Msn| z^V;qDG+Fme*!;)zm=Z`h&ls9s@xIFLgN0EM00duIIjMb6+!mM0Wm+(|IgCJ*!k z2&W2L$#Q!@eZg$H(DAcCeSz}G-%EU~nCSutr*b+(dtg${{*Q&yw4}S`D}51Cgo2`g zC24Fq0@&49IT;A-Q$i<&;?UkY<2H2t@}JiN+7&dpF(PR7`ipif{u$@n3*UbBzG`iy ztryuG(9}Wx{0SHH2OtMwx97MRe>xkdADheekt^W&l?<_-c`nyBMH9BfIjmSu_Z~Wg zoo_lTB_CX<>h12*00IP^c$$>O0@s{FO+2rpJpiHc?3UCfgj7yGnO!krW3iFfI;wA4sxi2ors)zhNJ)Hd_V4Pu;b(k zbGX72-V~gFt*GQXm1p$oR^co>(TTIg`73K=_o@LI_G8>KJ!W*=oF@-_QPFg*OstoQ z{JCGL#w;xf@)17z@S^j1;q-Up%n@hB`6i+?XpI{FQaw! zTJ}NuO2HGS`asgz5T4`$_N^`wZ>vXMV(bFs1V#TNU=$DtY|S_LeqA%Wu1{e3Qv^gWcCUeADzOiOJ1Gk*Lh%X(xai0lrU_lTdO|{aD<)HMDVm~cyHvC zrrE6dv!5gtm#eKyHZvciFYC)XW;o5g7XNa#9P5K_JZB%Dcy!4?`{SFZ0`%^KRME@G z7$a=pGms2|)f9@7>-LSb~yDMAg zb}N|9wS%52T8x0EhIo&O_&|Lz>juy~|FAS+SPE5F9@SFq8r2lZ^Vwmyvz^ui&)6h5 z=RKG3de<_~3U&B8e)_wQyAEtt87o;7Vla6#{ASj>H)Mj{mq!z~DpT%;G%KF{SdIIU z6_c~lP-S#Fc9v9cw?|f{y#cR#B>I>|DlAXaF4HXGRhnzb<4-385P|!8xpv1a{GTLb zPwwyKJ%aX`9B$S~T6YZ(FDy0q$!{YsT4IIj-`P?GxOEB*Y93F8#f}o3fkoH^%|R-+ zh;#C4ac4_Eah(nCd?~zY^&yw9in|}Kg}1L~h??xeLF`?+&sK(UvA&M^ZY%@(Nm8Pq zuwn)dj5kZbR(C;COv2YUT>}HXnEkMFy8o~TzN355W{}Abc*^2KqQUQeS(Gr#{2fmK z@kl%peTXDojx$_EKZx18MLJ73Gz4l(1FM)vtSw0B|Be}R2N@xX2-5PRg*u_AP+k1Y(FvcR#7d!F>{PkVzpXl`c< zpW8YDK7Ju<(+z9yRQy>wY@$vDSuI{-o0>%x+_asR7c!nv4tU0q1=!eo`pTOtNpI-5 zxzVyA$|f1`)E=A+ypgUmdV^1s7}w4z&*w5PhP4+Br%9FBUPGpsD$oRfNXsQoh=zUN z3XRPaw=|Ej-HfKa!PSgtU!IES=3FtGe@2c}1_iAs^dYBzh1k+zLwRG%`;<3l^Kj5+ zGv+UXj#v82B^yLel!eOWS!O=sLx1JQn`hulXfISkV^|-S_Jn=bz zj+;n}lOJ8Ehr}>a@!Zv*)mqn3sr#m23b-e-4NH!_R|^r?t^3&aSJpUkX-oa*F1z=l zuHWhGB;^#KZei#kcdfL{%}Y5gQACo2)Q)SpbR0XTOpfr4(k1ln{Mo)|&3_P{4%ySMF%a?CCt6Q1q(Wim_r%F={XET8oo@EbqQi6B{8F z1-Jq4JGUJGvX@#w_CojCF2IvC<6Yt!IfwW8C4GV<5IhpS6DH7E4kwm5QkK~4^Q6EppWUdt!<-Es}jL4p^{_f0D_0beI^30tb_gPRhaWnuXo%$D4UTS4BI z8@YxsME2 zO$Nl9Ka+H3UN$%q4!&=pCoQRbq605=}WPi5iJ_-ex#1V*Uq$Uc84cvfx!!Y_9CIu z$?R1_i*i%~>{*1Cf`B%~Iy*S$lrNZ`aJQn5Rrg|S&u0!5g#1sEXEzTdBs3L{eJ6BD#z7Eo7?N)*4nEdw~di@#LG?W$Wu1gDKVfkU5iKyYh+Qnu?Hh ziFyGTa=JC*+hlXzwLd;3ty3K1n~v}|GT;4HPH_e%+oDaSTk~eh^{ec-qQQ^Rccs)ija|4%{K=`anV0P` zo)@a-Q3UGpvBT4yGV1*Yb@EjX1L`PmPk~l5>7ms!Um8KN0UO@nI&<1dC6}Sc z!HDk~>oxsP%^&&5Z6hNRLbpOvD7I5blAyrZne4HKq9D2^(G8K6h2=zd^DZ{Zg*SK? zUX7QfjdNPt65S+`CfgI63DfkTcEAydT8k7CVI*Z ztWA0)A2xXlD~Sr}AGu}pZ#$rQ^ASbxUVFuXLix9hB3GFxqo9ftONjfAoSztZ{K@%e|MLh9Isupc*bkVo4q6VzyuGC< z1Ac??|28YNYSA+P(oWm|mGg&Vl#N8VHKsH<8^z!t;JO{3^{`d6hkCNuk*@&-T0x+( zIy=-;-ua>`|F<7uSpjM`k3Yp2lOjx9h}Gu13qDBz#hGJm3JP0ia<*~V;}S|lulqeI zqSw8Qy2U;5P`|;SlZFe&o0-eJ(}D^frf&cIF!j^ASnqU7&oA|Ka((q%>796fnq$)o z3?pZszK(J_koIl>OaR#S=jBSAs@co*tOJJnvs2hK)LTK3UlD( z05`xcqLXADCz~hS<3c4qZ^@GOnh3j4e4HuI1_$n%QwlyDNVmv)b~piRwSt>qsZsv% z@-pRjYGTq2XxUyqRa@$|Up7CpD&hPR;~gX{IagC%eZQLSE0@x3BfVUY{YldrqV5(} zwZZUE2BK$@TjieD+B_0f(;zwMQG@B+H7#3IAqIZ6h$S`P3o1<3%9-Xu4Q1;L; z`Nuao!Rn$`G8FSe8SW4PqQtG^_p2| zUM=8pvP#r*C?pi+jidY|@&So>u*f98WVvC=HX^J<+k30ep0Itmw9)FfIA$x`J~YGPZs#|{=}bOS*;kuD&|L`oLinLD8Z7-Mb7=erW6Wp9vH*m13GyW�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 literal 0 HcmV?d00001 diff --git a/examples/hyper/local.000800.jpg b/examples/hyper/local.000800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1e2fbc66a0ac986543bdedbaed05b9afd748091 GIT binary patch literal 488885 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≈l`#h73pyf; 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̨w9e$-DK?mwx6 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

    nIg?JoE0pHHyEV$Owh&P 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

    3jm=pl8|Y;DEgg4Xx#ri1kQ~>RbwhDYX3lJ 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 TQtfPp4RpVE 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∓dS+-*+}P9s8_G(%^26IztcvUa1Z0m&pynhM5< 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

    ~hW_{Ij+8ClOzb3%-2 z$6cSL*PflQ8{u*Tr!%<1?t9~sZq*FWy|Mg7<~X@-3hG|)VXpe=ZvG^HmYZz?`nZRE zQr!4}Dv^!(s-!wqj{0>ak5#K{2J8`C97~q4-Zb3}Os!k}7FaPrV|7oN4~GsW`V~MGjfOpJDys)P_UiIqnL9m$t~CnIyujq5ne4Ek zK}5Y-)pL{Wx#qXynyFb$IbOtM+04aI=-~FJ+t#t11_ui4Vdc%&e0o&$pHk|oB*bG8 zCawFHxdAo&soR||DP2o1dX4F-eA|oFeJXe?RU&h5RV2u2MF|h3q&2MX!DFHiI{c>m zr7F8^zoJU!B9*yy>%*)p^md?K{Z2=$vR5O~Z!3@Z2&>030*(5%|7D!IM4`p2%Us4S zk%R6XZweQvq@c#U;nEQE%bk;n5reu zMbxU+e+sCTtJ_(}PEq=-`3IU?g+|o}!bD;CCbqV0cq(G|No7m#DMDy-qSu^hy(r+R z{8ox=y0L*=>Ez44dk0ecqTgjYUshj;egpf`iBYT+XI;>BGpe&iK%4K4a-nioN)jvz zFy|!l$@{{ZIGzHKx!FBaX#X^}^^HNhl*09iuc7khB_b1BD|%XBgUA|7GezH#@`Y$5 zx1FG{xKFWtzG*#g_t5 iaxsO(6NCF8zt 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 N|NMXc9uWT=|6jmwVA}uy literal 0 HcmV?d00001 diff --git a/examples/hyper/log.hyper.global.g++.4 b/examples/hyper/log.hyper.global.g++.4 new file mode 100644 index 0000000000..de08541583 --- /dev/null +++ b/examples/hyper/log.hyper.global.g++.4 @@ -0,0 +1,1243 @@ +LAMMPS (10 Oct 2018) +# 3d EAM surface for global HD + +# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92 +# hop event on (100) surface is same distance +# exchange event is 2 atoms moving same distance + +variable Tequil index 500.0 +variable Vmax index 0.5 +variable qfactor index 0.3 +variable cutbond index 3.2 +variable cutevent index 1.1 +variable steps index 100000 +variable nevent index 1000 +variable zoom index 1.8 + +units metal +atom_style atomic +atom_modify map array +boundary p p p + +lattice fcc 3.92 +Lattice spacing in x,y,z = 3.92 3.92 3.92 +region box block 0 6 0 6 0 4 +create_box 3 box +Created orthogonal box = (0 0 0) to (23.52 23.52 15.68) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 576 atoms + Time spent = 0.000782013 secs + +mass * 1.0 + +change_box all z final -0.1 5.0 boundary p p f + orthogonal box = (0 0 -0.392) to (23.52 23.52 19.6) +create_atoms 2 single 3.5 3.5 4 +Created 1 atoms + Time spent = 4.69685e-05 secs + +# define frozen substrate and mobile atoms + +group adatom type 2 +1 atoms in group adatom +region base block INF INF INF INF 0 1.8 +set region base type 3 + 288 settings made for type +group base type 3 +288 atoms in group base +group mobile type 1 2 +289 atoms in group mobile + +# pair style + +pair_style eam/alloy +pair_coeff * * ptvoterlammps.eam Pt Pt Pt + +neighbor 0.5 bin +neigh_modify every 1 delay 5 check yes + +fix 1 mobile nve +fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 858872873 zero yes +fix 2 mobile langevin 500.0 ${Tequil} 1.0 858872873 zero yes +fix 2 mobile langevin 500.0 500.0 1.0 858872873 zero yes + +timestep 0.005 + +compute tmobile mobile temp + +thermo 100 +thermo_modify temp tmobile +WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488) + +# thermal equilibration + +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.07583 + ghost atom cutoff = 6.07583 + binsize = 3.03792, bins = 8 8 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam/alloy, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.327 | 3.327 | 3.327 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -3213.9136 0 -3213.9136 -51843.125 + 100 211.06271 -3209.3285 0 -3201.4713 -27323.825 + 200 320.80707 -3205.3715 0 -3193.4289 -39370.402 + 300 393.66139 -3202.607 0 -3187.9522 -32163.403 + 400 401.11987 -3200.2795 0 -3185.347 -35961.543 + 500 472.27798 -3200.7267 0 -3183.1452 -33044.974 + 600 485.16253 -3199.818 0 -3181.7569 -34242.615 + 700 464.85129 -3199.865 0 -3182.56 -35327.179 + 800 518.91236 -3199.4098 0 -3180.0923 -32088.2 + 900 502.76061 -3199.3972 0 -3180.681 -36944.263 + 1000 522.64479 -3200.0627 0 -3180.6063 -32801.856 +Loop time of 0.333434 on 4 procs for 1000 steps with 577 atoms + +Performance: 1295.607 ns/day, 0.019 hours/ns, 2999.091 timesteps/s +99.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.25639 | 0.2636 | 0.2708 | 1.0 | 79.06 +Neigh | 0.017381 | 0.017991 | 0.018988 | 0.4 | 5.40 +Comm | 0.026086 | 0.034315 | 0.042505 | 3.2 | 10.29 +Output | 0.00022078 | 0.00023323 | 0.00026107 | 0.0 | 0.07 +Modify | 0.013295 | 0.013709 | 0.014107 | 0.2 | 4.11 +Other | | 0.003584 | | | 1.07 + +Nlocal: 144.25 ave 149 max 139 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Nghost: 530.5 ave 536 max 526 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 3471.75 ave 3626 max 3292 min +Histogram: 1 0 0 0 1 0 1 0 0 1 + +Total # of neighbors = 13887 +Ave neighs/atom = 24.0676 +Neighbor list builds = 88 +Dangerous builds = 0 +reset_timestep 0 + +# pin base so will not move during quenches + +fix freeze base setforce 0.0 0.0 0.0 + +# event detection + +compute event all event/displace ${cutevent} +compute event all event/displace 1.1 + +# hyper/global + +fix HG mobile hyper/global ${cutbond} ${qfactor} ${Vmax} ${Tequil} +fix HG mobile hyper/global 3.2 ${qfactor} ${Vmax} ${Tequil} +fix HG mobile hyper/global 3.2 0.3 ${Vmax} ${Tequil} +fix HG mobile hyper/global 3.2 0.3 0.5 ${Tequil} +fix HG mobile hyper/global 3.2 0.3 0.5 500.0 + +# thermo output + +thermo_style custom step temp pe f_HG f_HG[*] +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:705) + +thermo_modify lost ignore +thermo_modify temp tmobile +WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488) + +thermo ${nevent} +thermo 1000 + +# dump output options + +region substrate block INF INF INF INF 1.8 3.8 +region adatoms block INF INF INF INF 3.8 INF +variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms) + +dump 1 all image 1000000 global.*.jpg v_acolor type zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump 1 all image 1000000 global.*.jpg v_acolor type zoom 1.8 adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green + +# run + +hyper ${steps} ${nevent} HG event min 1.0e-6 1.0e-6 100 100 dump 1 +hyper 100000 ${nevent} HG event min 1.0e-6 1.0e-6 100 100 dump 1 +hyper 100000 1000 HG event min 1.0e-6 1.0e-6 100 100 dump 1 +WARNING: Resetting reneighboring criteria during hyper (../hyper.cpp:133) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.07583 + ghost atom cutoff = 6.07583 + binsize = 3.03792, bins = 8 8 7 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair eam/alloy, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix hyper/global, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 6.015 | 6.015 | 6.015 Mbytes +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 0 522.64479 -3200.0627 0 0 0 0 0 0 0 0 0 0 0 0 + 13 522.64479 -3217.9151 0 0 0 0 0 0 0 0 0 0 0 0 +Loop time of 0.0106812 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 0 522.64479 -3200.0627 0.39402008 9365.7631 0.13811729 429 426 6.0069324 0 0.36151295 3.1652084 0 0 0 + 1000 512.35059 -3198.5556 0.32845525 2044.9347 0.17572153 257 259 6.0069324 0.137 0.77425934 3.8913771 5302.7599 0 0 +Loop time of 0.314234 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 1000 512.35059 -3198.5556 0.32845525 2044.9347 0.17572153 257 259 6.0069324 0.137 0.77425934 3.8913771 5302.7599 0 0 + 1014 512.35059 -3217.9161 0.32845525 2044.9347 0.17572153 257 259 6.0069324 0.13510848 0.77425934 3.8913771 5302.7599 0 0 +Loop time of 0.0071606 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 1000 512.35059 -3198.5556 0.32845525 2044.9347 0.17572153 257 259 6.0069324 0.137 0.77425934 3.8913771 5302.7599 0 0 + 2000 502.60215 -3197.7892 0.01351505 1.3684394 0.29591771 116 127 6.0069324 0.103 0.77425934 3.8913771 11603.458 0 0 +Loop time of 0.33185 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 2000 502.60215 -3197.7892 0.01351505 1.3684394 0.29591771 116 127 6.0069324 0.103 0.77425934 3.8913771 11603.458 0 0 + 2015 502.60215 -3217.9155 0.01351505 1.3684394 0.29591771 116 127 6.0069324 0.10223325 0.77425934 3.8913771 11603.458 0 0 +Loop time of 0.00889879 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 2000 502.60215 -3197.7892 0.01351505 1.3684394 0.29591771 116 127 6.0069324 0.103 0.77425934 3.8913771 11603.458 0 0 + 3000 481.01481 -3199.1324 0 1 1.0289113 542 544 6.0069324 0.212 2.8308749 5.5814852 12488.613 0 0 +Loop time of 0.334598 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 3000 481.01481 -3199.1324 0 1 1.0289113 542 544 6.0069324 0.212 2.8308749 5.5814852 12488.613 0 0 + 3014 481.01481 -3217.916 0 1 1.0289113 542 544 6.0069324 0.21101526 2.8308749 5.5814852 12488.613 0 0 +Loop time of 0.0103227 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 3000 481.01481 -3199.1324 0.25134819 341.56656 0.21155927 277 539 6.0069324 0.212 2.8308749 5.5814852 12488.613 1 2 + 4000 474.51721 -3197.9082 0.26384891 456.53799 0.20617274 361 83 6.0069324 0.18325 2.8308749 5.5814852 22776.39 1 2 +Loop time of 0.302547 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 4000 474.51721 -3197.9082 0.26384891 456.53799 0.20617274 361 83 6.0069324 0.18325 2.8308749 5.5814852 22776.39 1 2 + 4014 474.51721 -3217.9172 0.26384891 456.53799 0.20617274 361 83 6.0069324 0.18261086 2.8308749 5.5814852 22776.39 1 2 +Loop time of 0.00868511 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 4000 474.51721 -3197.9082 0.26384891 456.53799 0.20617274 361 83 6.0069324 0.18325 2.8308749 5.5814852 22776.39 1 2 + 5000 478.08772 -3199.6792 0.043886568 2.7692147 0.2865317 275 577 6.0069324 0.1586 2.8308749 5.5814852 35085.309 1 2 +Loop time of 0.300419 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 5000 478.08772 -3199.6792 0.043886568 2.7692147 0.2865317 275 577 6.0069324 0.1586 2.8308749 5.5814852 35085.309 1 2 + 5015 478.08772 -3217.9131 0.043886568 2.7692147 0.2865317 275 577 6.0069324 0.15812562 2.8308749 5.5814852 35085.309 1 2 +Loop time of 0.00705171 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 5000 478.08772 -3199.6792 0.043886568 2.7692147 0.2865317 275 577 6.0069324 0.1586 2.8308749 5.5814852 35085.309 1 2 + 6000 458.77612 -3197.8588 0.27710376 620.98321 0.20030308 511 546 6.0069324 0.171 2.8308749 5.5814852 38747.284 1 2 +Loop time of 0.287999 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 6000 458.77612 -3197.8588 0.27710376 620.98321 0.20030308 511 546 6.0069324 0.171 2.8308749 5.5814852 38747.284 1 2 + 6015 458.77612 -3217.9165 0.27710376 620.98321 0.20030308 511 546 6.0069324 0.17057357 2.8308749 5.5814852 38747.284 1 2 +Loop time of 0.00888014 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 6000 458.77612 -3197.8588 0.27710376 620.98321 0.20030308 511 546 6.0069324 0.171 2.8308749 5.5814852 38747.284 1 2 + 7000 476.88452 -3198.3269 0.0828164 6.8352063 0.27403111 264 275 6.0069324 0.17714286 2.8308749 5.5814852 45612.389 1 2 +Loop time of 0.29168 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 7000 476.88452 -3198.3269 0.0828164 6.8352063 0.27403111 264 275 6.0069324 0.17714286 2.8308749 5.5814852 45612.389 1 2 + 7015 476.88452 -3217.9146 0.0828164 6.8352063 0.27403111 264 275 6.0069324 0.17676408 2.8308749 5.5814852 45612.389 1 2 +Loop time of 0.00871038 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 7000 476.88452 -3198.3269 0.0828164 6.8352063 0.27403111 264 275 6.0069324 0.17714286 2.8308749 5.5814852 45612.389 1 2 + 8000 521.60584 -3199.0138 0.22715857 194.82964 0.22161105 419 124 6.0069324 0.191875 2.8308749 5.5814852 46748.053 1 2 +Loop time of 0.284021 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 8000 521.60584 -3199.0138 0.22715857 194.82964 0.22161105 419 124 6.0069324 0.191875 2.8308749 5.5814852 46748.053 1 2 + 8015 521.60584 -3217.9163 0.22715857 194.82964 0.22161105 419 124 6.0069324 0.19151591 2.8308749 5.5814852 46748.053 1 2 +Loop time of 0.00697637 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 8000 521.60584 -3199.0138 0.22715857 194.82964 0.22161105 419 124 6.0069324 0.191875 2.8308749 5.5814852 46748.053 1 2 + 9000 496.87475 -3198.4928 0.13677449 23.912479 0.25569629 264 275 6.0069324 0.18388889 2.8308749 5.5814852 49596.596 1 2 +Loop time of 0.238759 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 9000 496.87475 -3198.4928 0.13677449 23.912479 0.25569629 264 275 6.0069324 0.18388889 2.8308749 5.5814852 49596.596 1 2 + 9014 496.87475 -3217.9149 0.13677449 23.912479 0.25569629 264 275 6.0069324 0.18360328 2.8308749 5.5814852 49596.596 1 2 +Loop time of 0.00677681 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 9000 496.87475 -3198.4928 0.13677449 23.912479 0.25569629 264 275 6.0069324 0.18388889 2.8308749 5.5814852 49596.596 1 2 + 10000 478.6826 -3199.6673 0.37406677 5894.1727 0.1505589 127 132 6.0069324 0.1982 2.8308749 5.5814852 54170.476 1 2 +Loop time of 0.23881 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 10000 478.6826 -3199.6673 0.37406677 5894.1727 0.1505589 127 132 6.0069324 0.1982 2.8308749 5.5814852 54170.476 1 2 + 10013 478.6826 -3217.9144 0.37406677 5894.1727 0.1505589 127 132 6.0069324 0.19794267 2.8308749 5.5814852 54170.476 1 2 +Loop time of 0.00627023 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 10000 478.6826 -3199.6673 0.37406677 5894.1727 0.1505589 127 132 6.0069324 0.1982 2.8308749 5.5814852 54170.476 1 2 + 11000 518.40222 -3199.3332 0.34753231 3183.9595 0.16566286 383 418 6.0069324 0.18809091 2.8308749 5.5814852 58304.709 1 2 +Loop time of 0.238288 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 11000 518.40222 -3199.3332 0.34753231 3183.9595 0.16566286 383 418 6.0069324 0.18809091 2.8308749 5.5814852 58304.709 1 2 + 11013 518.40222 -3217.915 0.34753231 3183.9595 0.16566286 383 418 6.0069324 0.18786888 2.8308749 5.5814852 58304.709 1 2 +Loop time of 0.00599569 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 11000 518.40222 -3199.3332 0.34753231 3183.9595 0.16566286 383 418 6.0069324 0.18809091 2.8308749 5.5814852 58304.709 1 2 + 12000 552.07348 -3197.6675 0.0063435549 1.1586177 0.29809086 144 143 6.0069324 0.18016667 2.8308749 5.5814852 66990.451 1 2 +Loop time of 0.23842 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 12000 552.07348 -3197.6675 0.0063435549 1.1586177 0.29809086 144 143 6.0069324 0.18016667 2.8308749 5.5814852 66990.451 1 2 + 12013 552.07348 -3217.9165 0.0063435549 1.1586177 0.29809086 144 143 6.0069324 0.1799717 2.8308749 5.5814852 66990.451 1 2 +Loop time of 0.00602174 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 12000 552.07348 -3197.6675 0.0063435549 1.1586177 0.29809086 144 143 6.0069324 0.18016667 2.8308749 5.5814852 66990.451 1 2 + 13000 471.13412 -3198.1314 0.30918747 1307.5821 0.18532743 116 123 6.0069324 0.17338462 2.8308749 5.5814852 74345.114 1 2 +Loop time of 0.237671 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 13000 471.13412 -3198.1314 0.30918747 1307.5821 0.18532743 116 123 6.0069324 0.17338462 2.8308749 5.5814852 74345.114 1 2 + 13014 471.13412 -3217.9158 0.30918747 1307.5821 0.18532743 116 123 6.0069324 0.17319809 2.8308749 5.5814852 74345.114 1 2 +Loop time of 0.00647223 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 13000 471.13412 -3198.1314 0.30918747 1307.5821 0.18532743 116 123 6.0069324 0.17338462 2.8308749 5.5814852 74345.114 1 2 + 14000 470.81692 -3198.8871 0.10763953 12.160669 0.26575343 275 577 6.0069324 0.18235714 2.8308749 5.5814852 76252.748 1 2 +Loop time of 0.238789 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 14000 470.81692 -3198.8871 0.10763953 12.160669 0.26575343 275 577 6.0069324 0.18235714 2.8308749 5.5814852 76252.748 1 2 + 14015 470.81692 -3217.9147 0.10763953 12.160669 0.26575343 275 577 6.0069324 0.18216197 2.8308749 5.5814852 76252.748 1 2 +Loop time of 0.00651169 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 14000 470.81692 -3198.8871 0.10763953 12.160669 0.26575343 275 577 6.0069324 0.18235714 2.8308749 5.5814852 76252.748 1 2 + 15000 473.2435 -3199.0907 0.20712247 122.37713 0.22960391 569 570 6.0069324 0.18553333 2.8308749 5.5814852 81659.641 1 2 +Loop time of 0.23755 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 15000 473.2435 -3199.0907 0.20712247 122.37713 0.22960391 569 570 6.0069324 0.18553333 2.8308749 5.5814852 81659.641 1 2 + 15014 473.2435 -3217.9161 0.20712247 122.37713 0.22960391 569 570 6.0069324 0.18536033 2.8308749 5.5814852 81659.641 1 2 +Loop time of 0.00644851 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 15000 473.2435 -3199.0907 0.20712247 122.37713 0.22960391 569 570 6.0069324 0.18553333 2.8308749 5.5814852 81659.641 1 2 + 16000 504.33627 -3199.1713 0.036898146 2.3545967 0.28871843 264 275 6.0069324 0.199875 2.8308749 5.5814852 82224.366 1 2 +Loop time of 0.240195 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 16000 504.33627 -3199.1713 0.036898146 2.3545967 0.28871843 264 275 6.0069324 0.199875 2.8308749 5.5814852 82224.366 1 2 + 16015 504.33627 -3217.9137 0.036898146 2.3545967 0.28871843 264 275 6.0069324 0.19968779 2.8308749 5.5814852 82224.366 1 2 +Loop time of 0.00684911 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 16000 504.33627 -3199.1713 0.036898146 2.3545967 0.28871843 264 275 6.0069324 0.199875 2.8308749 5.5814852 82224.366 1 2 + 17000 497.60607 -3198.212 0.0067178767 1.1687272 0.29797782 264 275 6.0069324 0.217 2.8308749 5.5814852 82242.51 1 2 +Loop time of 0.240567 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 17000 497.60607 -3198.212 0.0067178767 1.1687272 0.29797782 264 275 6.0069324 0.217 2.8308749 5.5814852 82242.51 1 2 + 17016 497.60607 -3217.9161 0.0067178767 1.1687272 0.29797782 264 275 6.0069324 0.21679596 2.8308749 5.5814852 82242.51 1 2 +Loop time of 0.00708336 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 17000 497.60607 -3198.212 0.0067178767 1.1687272 0.29797782 264 275 6.0069324 0.217 2.8308749 5.5814852 82242.51 1 2 + 18000 523.92168 -3199.831 0.21046671 132.25396 0.22828927 264 275 6.0069324 0.22444444 2.8308749 5.5814852 82304.143 1 2 +Loop time of 0.240636 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 18000 523.92168 -3199.831 0.21046671 132.25396 0.22828927 264 275 6.0069324 0.22444444 2.8308749 5.5814852 82304.143 1 2 + 18014 523.92168 -3217.9153 0.21046671 132.25396 0.22828927 264 275 6.0069324 0.22427001 2.8308749 5.5814852 82304.143 1 2 +Loop time of 0.00646216 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 18000 523.92168 -3199.831 0.21046671 132.25396 0.22828927 264 275 6.0069324 0.22444444 2.8308749 5.5814852 82304.143 1 2 + 19000 538.76557 -3198.7203 0.036295998 2.3219194 0.28890608 397 400 6.0069324 0.228 2.8308749 5.5814852 83487.232 1 2 +Loop time of 0.239259 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 19000 538.76557 -3198.7203 0.036295998 2.3219194 0.28890608 397 400 6.0069324 0.228 2.8308749 5.5814852 83487.232 1 2 + 19014 538.76557 -3217.9141 0.036295998 2.3219194 0.28890608 397 400 6.0069324 0.22783212 2.8308749 5.5814852 83487.232 1 2 +Loop time of 0.0061307 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 19000 538.76557 -3198.7203 0.036295998 2.3219194 0.28890608 397 400 6.0069324 0.228 2.8308749 5.5814852 83487.232 1 2 + 20000 483.9598 -3198.1166 0.13750177 24.319538 0.25544017 400 131 6.0069324 0.2187 2.8308749 5.5814852 91177.618 1 2 +Loop time of 0.241751 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 20000 483.9598 -3198.1166 0.13750177 24.319538 0.25544017 400 131 6.0069324 0.2187 2.8308749 5.5814852 91177.618 1 2 + 20014 483.9598 -3217.9137 0.13750177 24.319538 0.25544017 400 131 6.0069324 0.21854702 2.8308749 5.5814852 91177.618 1 2 +Loop time of 0.00646776 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 20000 483.9598 -3198.1166 0.13750177 24.319538 0.25544017 400 131 6.0069324 0.2187 2.8308749 5.5814852 91177.618 1 2 + 21000 518.44073 -3199.7932 0.30241436 1117.3756 0.18858795 553 577 6.0069324 0.21271429 2.8308749 5.5814852 99740.17 1 2 +Loop time of 0.239403 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 21000 518.44073 -3199.7932 0.30241436 1117.3756 0.18858795 553 577 6.0069324 0.21271429 2.8308749 5.5814852 99740.17 1 2 + 21014 518.44073 -3217.9126 0.30241436 1117.3756 0.18858795 553 577 6.0069324 0.21257257 2.8308749 5.5814852 99740.17 1 2 +Loop time of 0.00643963 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 21000 518.44073 -3199.7932 0.30241436 1117.3756 0.18858795 553 577 6.0069324 0.21271429 2.8308749 5.5814852 99740.17 1 2 + 22000 518.95823 -3198.6693 0 1 0.4887755 262 263 6.0069324 0.22327273 2.8308749 5.5814852 103304.87 1 2 +Loop time of 0.241227 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 22000 518.95823 -3198.6693 0 1 0.4887755 262 263 6.0069324 0.22327273 2.8308749 5.5814852 103304.87 1 2 + 22033 518.95823 -3217.916 0 1 0.4887755 262 263 6.0069324 0.22293832 2.8308749 5.5814852 103304.87 1 2 +Loop time of 0.015579 on 4 procs for 33 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 22000 518.95823 -3198.6693 0 1 0.4887755 262 263 6.0069324 0.22327273 2.8308749 5.5814852 103304.87 1 2 + 23000 534.01428 -3197.6551 0.10264812 10.830446 0.26743848 136 431 6.0069324 0.22469565 2.8308749 5.5814852 108159.84 1 2 +Loop time of 0.240257 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 23000 534.01428 -3197.6551 0.10264812 10.830446 0.26743848 136 431 6.0069324 0.22469565 2.8308749 5.5814852 108159.84 1 2 + 23015 534.01428 -3217.9147 0.10264812 10.830446 0.26743848 136 431 6.0069324 0.22454921 2.8308749 5.5814852 108159.84 1 2 +Loop time of 0.0067718 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 23000 534.01428 -3197.6551 0.10264812 10.830446 0.26743848 136 431 6.0069324 0.22469565 2.8308749 5.5814852 108159.84 1 2 + 24000 502.61915 -3198.9796 0.22019457 165.75289 0.22442143 132 143 6.0069324 0.21883333 2.8308749 5.5814852 115124.63 1 2 +Loop time of 0.241014 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 24000 502.61915 -3198.9796 0.22019457 165.75289 0.22442143 132 143 6.0069324 0.21883333 2.8308749 5.5814852 115124.63 1 2 + 24014 502.61915 -3217.9149 0.22019457 165.75289 0.22442143 132 143 6.0069324 0.21870575 2.8308749 5.5814852 115124.63 1 2 +Loop time of 0.006706 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 24000 502.61915 -3198.9796 0.22019457 165.75289 0.22442143 132 143 6.0069324 0.21883333 2.8308749 5.5814852 115124.63 1 2 + 25000 510.27664 -3200.7431 0.34609419 3079.4414 0.16644232 120 119 6.0069324 0.21512 2.8308749 5.5814852 118042.99 1 2 +Loop time of 0.239452 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 25000 510.27664 -3200.7431 0.34609419 3079.4414 0.16644232 120 119 6.0069324 0.21512 2.8308749 5.5814852 118042.99 1 2 + 25013 510.27664 -3217.9127 0.34609419 3079.4414 0.16644232 120 119 6.0069324 0.2150082 2.8308749 5.5814852 118042.99 1 2 +Loop time of 0.00622821 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 25000 510.27664 -3200.7431 0.34609419 3079.4414 0.16644232 120 119 6.0069324 0.21512 2.8308749 5.5814852 118042.99 1 2 + 26000 511.79717 -3198.2999 0.19492582 92.206933 0.23433598 263 577 6.0069324 0.21273077 2.8308749 5.5814852 124902.88 1 2 +Loop time of 0.271219 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 26000 511.79717 -3198.2999 0.19492582 92.206933 0.23433598 263 577 6.0069324 0.21273077 2.8308749 5.5814852 124902.88 1 2 + 26015 511.79717 -3217.9147 0.19492582 92.206933 0.23433598 263 577 6.0069324 0.21260811 2.8308749 5.5814852 124902.88 1 2 +Loop time of 0.0105773 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 26000 511.79717 -3198.2999 0.19492582 92.206933 0.23433598 263 577 6.0069324 0.21273077 2.8308749 5.5814852 124902.88 1 2 + 27000 487.73368 -3197.4904 0.19560731 93.67693 0.2340741 401 572 6.0069324 0.20814815 2.8308749 5.5814852 130713.79 1 2 +Loop time of 0.293879 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 27000 487.73368 -3197.4904 0.19560731 93.67693 0.2340741 401 572 6.0069324 0.20814815 2.8308749 5.5814852 130713.79 1 2 + 27015 487.73368 -3217.9161 0.19560731 93.67693 0.2340741 401 572 6.0069324 0.20803257 2.8308749 5.5814852 130713.79 1 2 +Loop time of 0.00895333 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 27000 487.73368 -3197.4904 0.19560731 93.67693 0.2340741 401 572 6.0069324 0.20814815 2.8308749 5.5814852 130713.79 1 2 + 28000 468.95408 -3198.4177 0.3457758 3056.7694 0.1666144 549 515 6.0069324 0.204 2.8308749 5.5814852 135376.2 1 2 +Loop time of 0.286141 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 28000 468.95408 -3198.4177 0.3457758 3056.7694 0.1666144 549 515 6.0069324 0.204 2.8308749 5.5814852 135376.2 1 2 + 28014 468.95408 -3217.9167 0.3457758 3056.7694 0.1666144 549 515 6.0069324 0.20389805 2.8308749 5.5814852 135376.2 1 2 +Loop time of 0.00648469 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 28000 468.95408 -3198.4177 0.3457758 3056.7694 0.1666144 549 515 6.0069324 0.204 2.8308749 5.5814852 135376.2 1 2 + 29000 518.03534 -3198.1622 0.029706116 1.9926184 0.29095171 267 260 6.0069324 0.20031034 2.8308749 5.5814852 143604.35 1 2 +Loop time of 0.24066 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 29000 518.03534 -3198.1622 0.029706116 1.9926184 0.29095171 267 260 6.0069324 0.20031034 2.8308749 5.5814852 143604.35 1 2 + 29014 518.03534 -3217.9137 0.029706116 1.9926184 0.29095171 267 260 6.0069324 0.20021369 2.8308749 5.5814852 143604.35 1 2 +Loop time of 0.0063417 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 29000 518.03534 -3198.1622 0.029706116 1.9926184 0.29095171 267 260 6.0069324 0.20031034 2.8308749 5.5814852 143604.35 1 2 + 30000 535.78782 -3198.3125 0.33831746 2570.9054 0.17059559 122 124 6.0069324 0.19596667 2.8308749 5.5814852 150106.09 1 2 +Loop time of 0.259515 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 30000 535.78782 -3198.3125 0.33831746 2570.9054 0.17059559 122 124 6.0069324 0.19596667 2.8308749 5.5814852 150106.09 1 2 + 30014 535.78782 -3217.9119 0.33831746 2570.9054 0.17059559 122 124 6.0069324 0.19587526 2.8308749 5.5814852 150106.09 1 2 +Loop time of 0.0123347 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 30000 535.78782 -3198.3125 0.33831746 2570.9054 0.17059559 122 124 6.0069324 0.19596667 2.8308749 5.5814852 150106.09 1 2 + 31000 547.06872 -3198.3217 0.21707776 154.18603 0.22566791 275 577 6.0069324 0.19987097 2.8308749 5.5814852 151076.53 1 2 +Loop time of 0.321976 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 31000 547.06872 -3198.3217 0.21707776 154.18603 0.22566791 275 577 6.0069324 0.19987097 2.8308749 5.5814852 151076.53 1 2 + 31014 547.06872 -3217.9165 0.21707776 154.18603 0.22566791 275 577 6.0069324 0.19978074 2.8308749 5.5814852 151076.53 1 2 +Loop time of 0.00811768 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 31000 547.06872 -3198.3217 0.21707776 154.18603 0.22566791 275 577 6.0069324 0.19987097 2.8308749 5.5814852 151076.53 1 2 + 32000 469.53603 -3199.325 0.35776457 4037.4217 0.16000743 563 268 6.0069324 0.20171875 2.8308749 5.5814852 152526.06 1 2 +Loop time of 0.290834 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 32000 469.53603 -3199.325 0.35776457 4037.4217 0.16000743 563 268 6.0069324 0.20171875 2.8308749 5.5814852 152526.06 1 2 + 32013 469.53603 -3217.9147 0.35776457 4037.4217 0.16000743 563 268 6.0069324 0.20163684 2.8308749 5.5814852 152526.06 1 2 +Loop time of 0.00746775 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 32000 469.53603 -3199.325 0.35776457 4037.4217 0.16000743 563 268 6.0069324 0.20171875 2.8308749 5.5814852 152526.06 1 2 + 33000 491.33889 -3199.1986 0.32620326 1940.7983 0.17687118 258 228 6.0069324 0.19833333 2.8308749 5.5814852 156385.66 1 2 +Loop time of 0.243351 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 33000 491.33889 -3199.1986 0.32620326 1940.7983 0.17687118 258 228 6.0069324 0.19833333 2.8308749 5.5814852 156385.66 1 2 + 33014 491.33889 -3217.9155 0.32620326 1940.7983 0.17687118 258 228 6.0069324 0.19824923 2.8308749 5.5814852 156385.66 1 2 +Loop time of 0.00658584 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 33000 491.33889 -3199.1986 0.32620326 1940.7983 0.17687118 258 228 6.0069324 0.19833333 2.8308749 5.5814852 156385.66 1 2 + 34000 503.19322 -3198.8767 0.050333006 3.2161315 0.28449966 275 577 6.0069324 0.19794118 2.8308749 5.5814852 161964.99 1 2 +Loop time of 0.238415 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 34000 503.19322 -3198.8767 0.050333006 3.2161315 0.28449966 275 577 6.0069324 0.19794118 2.8308749 5.5814852 161964.99 1 2 + 34016 503.19322 -3217.9158 0.050333006 3.2161315 0.28449966 275 577 6.0069324 0.19784807 2.8308749 5.5814852 161964.99 1 2 +Loop time of 0.00771642 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 34000 503.19322 -3198.8767 0.050333006 3.2161315 0.28449966 275 577 6.0069324 0.19794118 2.8308749 5.5814852 161964.99 1 2 + 35000 513.68037 -3197.8169 0.26004762 417.98593 0.20782548 264 275 6.0069324 0.199 2.8308749 5.5814852 164995.25 1 2 +Loop time of 0.240164 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 35000 513.68037 -3197.8169 0.26004762 417.98593 0.20782548 264 275 6.0069324 0.199 2.8308749 5.5814852 164995.25 1 2 + 35015 513.68037 -3217.9147 0.26004762 417.98593 0.20782548 264 275 6.0069324 0.19891475 2.8308749 5.5814852 164995.25 1 2 +Loop time of 0.00711012 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 35000 513.68037 -3197.8169 0.26004762 417.98593 0.20782548 264 275 6.0069324 0.199 2.8308749 5.5814852 164995.25 1 2 + 36000 508.23462 -3199.0337 0.009260286 1.2397653 0.29720893 563 564 6.0069324 0.20069444 2.8308749 5.5814852 167465.14 1 2 +Loop time of 0.240289 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 36000 508.23462 -3199.0337 0.009260286 1.2397653 0.29720893 563 564 6.0069324 0.20069444 2.8308749 5.5814852 167465.14 1 2 + 36014 508.23462 -3217.9163 0.009260286 1.2397653 0.29720893 563 564 6.0069324 0.20061643 2.8308749 5.5814852 167465.14 1 2 +Loop time of 0.00642586 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 36000 508.23462 -3199.0337 0.009260286 1.2397653 0.29720893 563 564 6.0069324 0.20069444 2.8308749 5.5814852 167465.14 1 2 + 37000 500.95069 -3199.7129 0.024475083 1.764809 0.29256535 275 577 6.0069324 0.19783784 2.8308749 5.5814852 169290.01 1 2 +Loop time of 0.239462 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 37000 500.95069 -3199.7129 0.024475083 1.764809 0.29256535 275 577 6.0069324 0.19783784 2.8308749 5.5814852 169290.01 1 2 + 37015 500.95069 -3217.916 0.024475083 1.764809 0.29256535 275 577 6.0069324 0.19775767 2.8308749 5.5814852 169290.01 1 2 +Loop time of 0.00713468 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 37000 500.95069 -3199.7129 0.024475083 1.764809 0.29256535 275 577 6.0069324 0.19783784 2.8308749 5.5814852 169290.01 1 2 + 38000 495.41803 -3199.6385 0 1 1.0152866 262 275 6.0069324 0.21794737 2.8308749 5.5814852 169297.9 1 2 +Loop time of 0.239667 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 38000 495.41803 -3199.6385 0 1 1.0152866 262 275 6.0069324 0.21794737 2.8308749 5.5814852 169297.9 1 2 + 38013 495.41803 -3217.9157 0 1 1.0152866 262 275 6.0069324 0.21787283 2.8308749 5.5814852 169297.9 1 2 +Loop time of 0.00627661 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 38000 495.41803 -3199.6385 0.39298625 9143.7129 0.13878932 430 431 6.0069324 0.21794737 2.8308749 5.5814852 169297.9 2 4 + 39000 469.05202 -3196.0515 0.10638057 11.810485 0.26617945 408 415 6.0069324 0.21410256 2.8308749 5.5814852 175842.05 2 4 +Loop time of 0.238329 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 39000 469.05202 -3196.0515 0.10638057 11.810485 0.26617945 408 415 6.0069324 0.21410256 2.8308749 5.5814852 175842.05 2 4 + 39015 469.05202 -3217.917 0.10638057 11.810485 0.26617945 408 415 6.0069324 0.21402025 2.8308749 5.5814852 175842.05 2 4 +Loop time of 0.00683451 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 39000 469.05202 -3196.0515 0.10638057 11.810485 0.26617945 408 415 6.0069324 0.21410256 2.8308749 5.5814852 175842.05 2 4 + 40000 542.78328 -3198.4918 0.18612218 75.166934 0.2376931 567 560 6.0069324 0.214275 2.8308749 5.5814852 179412.45 2 4 +Loop time of 0.23954 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 40000 542.78328 -3198.4918 0.18612218 75.166934 0.2376931 567 560 6.0069324 0.214275 2.8308749 5.5814852 179412.45 2 4 + 40014 542.78328 -3217.9148 0.18612218 75.166934 0.2376931 567 560 6.0069324 0.21420003 2.8308749 5.5814852 179412.45 2 4 +Loop time of 0.00652599 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 40000 542.78328 -3198.4918 0.18612218 75.166934 0.2376931 567 560 6.0069324 0.214275 2.8308749 5.5814852 179412.45 2 4 + 41000 548.99015 -3197.5893 0.30318345 1137.4995 0.18822056 124 135 6.0069324 0.21114634 2.8308749 5.5814852 184564.49 2 4 +Loop time of 0.239863 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 41000 548.99015 -3197.5893 0.30318345 1137.4995 0.18822056 124 135 6.0069324 0.21114634 2.8308749 5.5814852 184564.49 2 4 + 41014 548.99015 -3217.9174 0.30318345 1137.4995 0.18822056 124 135 6.0069324 0.21107427 2.8308749 5.5814852 184564.49 2 4 +Loop time of 0.00668764 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 41000 548.99015 -3197.5893 0.30318345 1137.4995 0.18822056 124 135 6.0069324 0.21114634 2.8308749 5.5814852 184564.49 2 4 + 42000 492.4929 -3198.0535 0.31406773 1464.4003 0.18294209 262 264 6.0069324 0.20954762 2.8308749 5.5814852 187620.86 2 4 +Loop time of 0.238458 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 42000 492.4929 -3198.0535 0.31406773 1464.4003 0.18294209 262 264 6.0069324 0.20954762 2.8308749 5.5814852 187620.86 2 4 + 42014 492.4929 -3217.9154 0.31406773 1464.4003 0.18294209 262 264 6.0069324 0.20947779 2.8308749 5.5814852 187620.86 2 4 +Loop time of 0.00658375 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 42000 492.4929 -3198.0535 0.31406773 1464.4003 0.18294209 262 264 6.0069324 0.20954762 2.8308749 5.5814852 187620.86 2 4 + 43000 524.32334 -3199.9723 0.171134 53.082676 0.24330204 287 276 6.0069324 0.20893023 2.8308749 5.5814852 189618.98 2 4 +Loop time of 0.240476 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 43000 524.32334 -3199.9723 0.171134 53.082676 0.24330204 287 276 6.0069324 0.20893023 2.8308749 5.5814852 189618.98 2 4 + 43015 524.32334 -3217.9151 0.171134 53.082676 0.24330204 287 276 6.0069324 0.20885738 2.8308749 5.5814852 189618.98 2 4 +Loop time of 0.00655174 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 43000 524.32334 -3199.9723 0.171134 53.082676 0.24330204 287 276 6.0069324 0.20893023 2.8308749 5.5814852 189618.98 2 4 + 44000 490.60365 -3198.9839 0.12604882 18.642955 0.25944404 544 276 6.0069324 0.21018182 2.8308749 5.5814852 193452.76 2 4 +Loop time of 0.240179 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 44000 490.60365 -3198.9839 0.12604882 18.642955 0.25944404 544 276 6.0069324 0.21018182 2.8308749 5.5814852 193452.76 2 4 + 44015 490.60365 -3217.9148 0.12604882 18.642955 0.25944404 544 276 6.0069324 0.21011019 2.8308749 5.5814852 193452.76 2 4 +Loop time of 0.00717342 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 44000 490.60365 -3198.9839 0.12604882 18.642955 0.25944404 544 276 6.0069324 0.21018182 2.8308749 5.5814852 193452.76 2 4 + 45000 516.91704 -3198.746 0.30358614 1148.1804 0.18802791 114 120 6.0069324 0.2092 2.8308749 5.5814852 194591.87 2 4 +Loop time of 0.24121 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 45000 516.91704 -3198.746 0.30358614 1148.1804 0.18802791 114 120 6.0069324 0.2092 2.8308749 5.5814852 194591.87 2 4 + 45013 516.91704 -3217.9155 0.30358614 1148.1804 0.18802791 114 120 6.0069324 0.20913958 2.8308749 5.5814852 194591.87 2 4 +Loop time of 0.00649601 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 45000 516.91704 -3198.746 0.30358614 1148.1804 0.18802791 114 120 6.0069324 0.2092 2.8308749 5.5814852 194591.87 2 4 + 46000 511.1774 -3196.9369 0.25070338 336.49294 0.21183341 138 259 6.0069324 0.20769565 2.8308749 5.5814852 199937.52 2 4 +Loop time of 0.239441 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 46000 511.1774 -3196.9369 0.25070338 336.49294 0.21183341 138 259 6.0069324 0.20769565 2.8308749 5.5814852 199937.52 2 4 + 46015 511.1774 -3217.9159 0.25070338 336.49294 0.21183341 138 259 6.0069324 0.20762795 2.8308749 5.5814852 199937.52 2 4 +Loop time of 0.00681973 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 46000 511.1774 -3196.9369 0.25070338 336.49294 0.21183341 138 259 6.0069324 0.20769565 2.8308749 5.5814852 199937.52 2 4 + 47000 480.5069 -3198.8501 0.071646863 5.2743358 0.27767529 544 556 6.0069324 0.20602128 2.8308749 5.5814852 202107.88 2 4 +Loop time of 0.24022 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 47000 480.5069 -3198.8501 0.071646863 5.2743358 0.27767529 544 556 6.0069324 0.20602128 2.8308749 5.5814852 202107.88 2 4 + 47016 480.5069 -3217.9167 0.071646863 5.2743358 0.27767529 544 556 6.0069324 0.20595117 2.8308749 5.5814852 202107.88 2 4 +Loop time of 0.007438 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 47000 480.5069 -3198.8501 0.071646863 5.2743358 0.27767529 544 556 6.0069324 0.20602128 2.8308749 5.5814852 202107.88 2 4 + 48000 540.51895 -3198.5792 0.04754734 3.0147795 0.28537953 544 556 6.0069324 0.2085 2.8308749 5.5814852 202899.91 2 4 +Loop time of 0.241529 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 48000 540.51895 -3198.5792 0.04754734 3.0147795 0.28537953 544 556 6.0069324 0.2085 2.8308749 5.5814852 202899.91 2 4 + 48015 540.51895 -3217.9148 0.04754734 3.0147795 0.28537953 544 556 6.0069324 0.20843486 2.8308749 5.5814852 202899.91 2 4 +Loop time of 0.00695753 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 48000 540.51895 -3198.5792 0.04754734 3.0147795 0.28537953 544 556 6.0069324 0.2085 2.8308749 5.5814852 202899.91 2 4 + 49000 527.63013 -3199.0384 0.28400417 728.84104 0.19717822 544 577 6.0069324 0.20961224 2.8308749 5.5814852 210926.93 2 4 +Loop time of 0.241009 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 49000 527.63013 -3199.0384 0.28400417 728.84104 0.19717822 544 577 6.0069324 0.20961224 2.8308749 5.5814852 210926.93 2 4 + 49013 527.63013 -3217.9157 0.28400417 728.84104 0.19717822 544 577 6.0069324 0.20955665 2.8308749 5.5814852 210926.93 2 4 +Loop time of 0.00608408 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 49000 527.63013 -3199.0384 0.28400417 728.84104 0.19717822 544 577 6.0069324 0.20961224 2.8308749 5.5814852 210926.93 2 4 + 50000 516.69962 -3198.3346 0.35295929 3611.3455 0.16268782 266 243 6.0069324 0.20898 2.8308749 5.5814852 215664.98 2 4 +Loop time of 0.239941 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 50000 516.69962 -3198.3346 0.35295929 3611.3455 0.16268782 266 243 6.0069324 0.20898 2.8308749 5.5814852 215664.98 2 4 + 50013 516.69962 -3217.9156 0.35295929 3611.3455 0.16268782 266 243 6.0069324 0.20892568 2.8308749 5.5814852 215664.98 2 4 +Loop time of 0.00602353 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 50000 516.69962 -3198.3346 0.35295929 3611.3455 0.16268782 266 243 6.0069324 0.20898 2.8308749 5.5814852 215664.98 2 4 + 51000 533.05598 -3198.0432 0.17474232 57.719563 0.2419636 123 128 6.0069324 0.2065098 2.8308749 5.5814852 221609.1 2 4 +Loop time of 0.240274 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 51000 533.05598 -3198.0432 0.17474232 57.719563 0.2419636 123 128 6.0069324 0.2065098 2.8308749 5.5814852 221609.1 2 4 + 51015 533.05598 -3217.9143 0.17474232 57.719563 0.2419636 123 128 6.0069324 0.20644908 2.8308749 5.5814852 221609.1 2 4 +Loop time of 0.00743866 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 51000 533.05598 -3198.0432 0.17474232 57.719563 0.2419636 123 128 6.0069324 0.2065098 2.8308749 5.5814852 221609.1 2 4 + 52000 545.98999 -3198.2633 0 1 0.30964409 287 276 6.0069324 0.20332692 2.8308749 5.5814852 230246.21 2 4 +Loop time of 0.239709 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 52000 545.98999 -3198.2633 0 1 0.30964409 287 276 6.0069324 0.20332692 2.8308749 5.5814852 230246.21 2 4 + 52017 545.98999 -3217.9153 0 1 0.30964409 287 276 6.0069324 0.20326047 2.8308749 5.5814852 230246.21 2 4 +Loop time of 0.00786757 on 4 procs for 17 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 52000 545.98999 -3198.2633 0 1 0.30964409 287 276 6.0069324 0.20332692 2.8308749 5.5814852 230246.21 2 4 + 53000 453.58658 -3199.3577 0.23959479 260.0198 0.21650159 278 279 6.0069324 0.20366038 2.8308749 5.5814852 233492.88 2 4 +Loop time of 0.240351 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 53000 453.58658 -3199.3577 0.23959479 260.0198 0.21650159 278 279 6.0069324 0.20366038 2.8308749 5.5814852 233492.88 2 4 + 53014 453.58658 -3217.9131 0.23959479 260.0198 0.21650159 278 279 6.0069324 0.20360659 2.8308749 5.5814852 233492.88 2 4 +Loop time of 0.0067966 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 53000 453.58658 -3199.3577 0.23959479 260.0198 0.21650159 278 279 6.0069324 0.20366038 2.8308749 5.5814852 233492.88 2 4 + 54000 502.12681 -3199.1712 0.28827435 804.7747 0.19521941 550 563 6.0069324 0.20264815 2.8308749 5.5814852 239627.25 2 4 +Loop time of 0.238634 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 54000 502.12681 -3199.1712 0.28827435 804.7747 0.19521941 550 563 6.0069324 0.20264815 2.8308749 5.5814852 239627.25 2 4 + 54014 502.12681 -3217.9165 0.28827435 804.7747 0.19521941 550 563 6.0069324 0.20259562 2.8308749 5.5814852 239627.25 2 4 +Loop time of 0.00671387 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 54000 502.12681 -3199.1712 0.28827435 804.7747 0.19521941 550 563 6.0069324 0.20264815 2.8308749 5.5814852 239627.25 2 4 + 55000 470.7967 -3197.4136 0.31075641 1356.0734 0.18456394 285 283 6.0069324 0.20041818 2.8308749 5.5814852 246248.56 2 4 +Loop time of 0.240888 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 55000 470.7967 -3197.4136 0.31075641 1356.0734 0.18456394 285 283 6.0069324 0.20041818 2.8308749 5.5814852 246248.56 2 4 + 55013 470.7967 -3217.9136 0.31075641 1356.0734 0.18456394 285 283 6.0069324 0.20037082 2.8308749 5.5814852 246248.56 2 4 +Loop time of 0.00596166 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 55000 470.7967 -3197.4136 0.31075641 1356.0734 0.18456394 285 283 6.0069324 0.20041818 2.8308749 5.5814852 246248.56 2 4 + 56000 533.34641 -3198.1323 0.16761369 48.918113 0.24460077 287 276 6.0069324 0.19926786 2.8308749 5.5814852 252499.61 2 4 +Loop time of 0.239487 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 56000 533.34641 -3198.1323 0.16761369 48.918113 0.24460077 287 276 6.0069324 0.19926786 2.8308749 5.5814852 252499.61 2 4 + 56014 533.34641 -3217.9162 0.16761369 48.918113 0.24460077 287 276 6.0069324 0.19921805 2.8308749 5.5814852 252499.61 2 4 +Loop time of 0.00619745 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 56000 533.34641 -3198.1323 0.16761369 48.918113 0.24460077 287 276 6.0069324 0.19926786 2.8308749 5.5814852 252499.61 2 4 + 57000 516.06876 -3197.7671 0 1 0.33139119 287 276 6.0069324 0.19807018 2.8308749 5.5814852 255923.67 2 4 +Loop time of 0.241093 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 57000 516.06876 -3197.7671 0 1 0.33139119 287 276 6.0069324 0.19807018 2.8308749 5.5814852 255923.67 2 4 + 57016 516.06876 -3217.9146 0 1 0.33139119 287 276 6.0069324 0.19801459 2.8308749 5.5814852 255923.67 2 4 +Loop time of 0.00772929 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 57000 516.06876 -3197.7671 0 1 0.33139119 287 276 6.0069324 0.19807018 2.8308749 5.5814852 255923.67 2 4 + 58000 489.18902 -3198.6347 0.20937806 128.95422 0.22871806 544 276 6.0069324 0.20094828 2.8308749 5.5814852 256132.07 2 4 +Loop time of 0.239761 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 58000 489.18902 -3198.6347 0.20937806 128.95422 0.22871806 544 276 6.0069324 0.20094828 2.8308749 5.5814852 256132.07 2 4 + 58014 489.18902 -3217.9165 0.20937806 128.95422 0.22871806 544 276 6.0069324 0.20089978 2.8308749 5.5814852 256132.07 2 4 +Loop time of 0.00660753 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 58000 489.18902 -3198.6347 0.20937806 128.95422 0.22871806 544 276 6.0069324 0.20094828 2.8308749 5.5814852 256132.07 2 4 + 59000 522.75445 -3197.4454 0 1 0.91317104 274 556 6.0069324 0.20305085 2.8308749 5.5814852 259828.37 2 4 +Loop time of 0.241627 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 59000 522.75445 -3197.4454 0 1 0.91317104 274 556 6.0069324 0.20305085 2.8308749 5.5814852 259828.37 2 4 + 59013 522.75445 -3217.9138 0 1 0.91317104 274 556 6.0069324 0.20300612 2.8308749 5.5814852 259828.37 2 4 +Loop time of 0.00618345 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 59000 522.75445 -3197.4454 0.40114631 11050.253 0.1333929 547 548 6.0069324 0.20305085 2.8308749 5.5814852 259828.37 3 6 + 60000 552.18712 -3197.1906 0.21473769 146.03543 0.22659924 559 564 6.0069324 0.20126667 2.8308749 5.5814852 263208.58 3 6 +Loop time of 0.239681 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 60000 552.18712 -3197.1906 0.21473769 146.03543 0.22659924 559 564 6.0069324 0.20126667 2.8308749 5.5814852 263208.58 3 6 + 60015 552.18712 -3217.9157 0.21473769 146.03543 0.22659924 559 564 6.0069324 0.20121636 2.8308749 5.5814852 263208.58 3 6 +Loop time of 0.00685382 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 60000 552.18712 -3197.1906 0.21473769 146.03543 0.22659924 559 564 6.0069324 0.20126667 2.8308749 5.5814852 263208.58 3 6 + 61000 450.24979 -3197.259 0.20870055 126.94235 0.2289845 412 411 6.0069324 0.20103279 2.8308749 5.5814852 267126.63 3 6 +Loop time of 0.239598 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 61000 450.24979 -3197.259 0.20870055 126.94235 0.2289845 412 411 6.0069324 0.20103279 2.8308749 5.5814852 267126.63 3 6 + 61014 450.24979 -3217.9146 0.20870055 126.94235 0.2289845 412 411 6.0069324 0.20098666 2.8308749 5.5814852 267126.63 3 6 +Loop time of 0.00683248 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 61000 450.24979 -3197.259 0.20870055 126.94235 0.2289845 412 411 6.0069324 0.20103279 2.8308749 5.5814852 267126.63 3 6 + 62000 506.89399 -3197.4659 0.20762728 123.81933 0.22940595 256 267 6.0069324 0.20074194 2.8308749 5.5814852 270687.24 3 6 +Loop time of 0.238224 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 62000 506.89399 -3197.4659 0.20762728 123.81933 0.22940595 256 267 6.0069324 0.20074194 2.8308749 5.5814852 270687.24 3 6 + 62014 506.89399 -3217.9156 0.20762728 123.81933 0.22940595 256 267 6.0069324 0.20069662 2.8308749 5.5814852 270687.24 3 6 +Loop time of 0.00685287 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 62000 506.89399 -3197.4659 0.20762728 123.81933 0.22940595 256 267 6.0069324 0.20074194 2.8308749 5.5814852 270687.24 3 6 + 63000 510.04068 -3196.8255 0.063053561 4.320671 0.28044671 112 123 6.0069324 0.19930159 2.8308749 5.5814852 274694.1 3 6 +Loop time of 0.238676 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 63000 510.04068 -3196.8255 0.063053561 4.320671 0.28044671 112 123 6.0069324 0.19930159 2.8308749 5.5814852 274694.1 3 6 + 63014 510.04068 -3217.9141 0.063053561 4.320671 0.28044671 112 123 6.0069324 0.19925731 2.8308749 5.5814852 274694.1 3 6 +Loop time of 0.00670481 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 63000 510.04068 -3196.8255 0.063053561 4.320671 0.28044671 112 123 6.0069324 0.19930159 2.8308749 5.5814852 274694.1 3 6 + 64000 501.25574 -3197.7101 0.083024533 6.8683042 0.27396274 286 119 6.0069324 0.2 2.8308749 5.5814852 276114.67 3 6 +Loop time of 0.238342 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 64000 501.25574 -3197.7101 0.083024533 6.8683042 0.27396274 286 119 6.0069324 0.2 2.8308749 5.5814852 276114.67 3 6 + 64014 501.25574 -3217.9141 0.083024533 6.8683042 0.27396274 286 119 6.0069324 0.19995626 2.8308749 5.5814852 276114.67 3 6 +Loop time of 0.00604939 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 64000 501.25574 -3197.7101 0.083024533 6.8683042 0.27396274 286 119 6.0069324 0.2 2.8308749 5.5814852 276114.67 3 6 + 65000 476.31749 -3199.3383 0.15323867 35.04097 0.24983402 267 260 6.0069324 0.19838462 2.8308749 5.5814852 282281.34 3 6 +Loop time of 0.239458 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 65000 476.31749 -3199.3383 0.15323867 35.04097 0.24983402 267 260 6.0069324 0.19838462 2.8308749 5.5814852 282281.34 3 6 + 65014 476.31749 -3217.913 0.15323867 35.04097 0.24983402 267 260 6.0069324 0.1983419 2.8308749 5.5814852 282281.34 3 6 +Loop time of 0.00661784 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 65000 476.31749 -3199.3383 0.15323867 35.04097 0.24983402 267 260 6.0069324 0.19838462 2.8308749 5.5814852 282281.34 3 6 + 66000 515.81365 -3198.7056 0.21680106 153.19903 0.22577823 416 415 6.0069324 0.19919697 2.8308749 5.5814852 284618.61 3 6 +Loop time of 0.239712 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 66000 515.81365 -3198.7056 0.21680106 153.19903 0.22577823 416 415 6.0069324 0.19919697 2.8308749 5.5814852 284618.61 3 6 + 66014 515.81365 -3217.9165 0.21680106 153.19903 0.22577823 416 415 6.0069324 0.19915472 2.8308749 5.5814852 284618.61 3 6 +Loop time of 0.00680089 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 66000 515.81365 -3198.7056 0.21680106 153.19903 0.22577823 416 415 6.0069324 0.19919697 2.8308749 5.5814852 284618.61 3 6 + 67000 484.31519 -3197.7852 0.13298902 21.901246 0.25702524 275 567 6.0069324 0.19846269 2.8308749 5.5814852 289586.09 3 6 +Loop time of 0.239938 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 67000 484.31519 -3197.7852 0.13298902 21.901246 0.25702524 275 567 6.0069324 0.19846269 2.8308749 5.5814852 289586.09 3 6 + 67014 484.31519 -3217.9146 0.13298902 21.901246 0.25702524 275 567 6.0069324 0.19842123 2.8308749 5.5814852 289586.09 3 6 +Loop time of 0.00659657 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 67000 484.31519 -3197.7852 0.13298902 21.901246 0.25702524 275 567 6.0069324 0.19846269 2.8308749 5.5814852 289586.09 3 6 + 68000 484.02912 -3199.084 0.23443259 230.66083 0.21863699 412 423 6.0069324 0.19722059 2.8308749 5.5814852 298036.66 3 6 +Loop time of 0.240483 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 68000 484.02912 -3199.084 0.23443259 230.66083 0.21863699 412 423 6.0069324 0.19722059 2.8308749 5.5814852 298036.66 3 6 + 68014 484.02912 -3217.9156 0.23443259 230.66083 0.21863699 412 423 6.0069324 0.19717999 2.8308749 5.5814852 298036.66 3 6 +Loop time of 0.00666052 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 68000 484.02912 -3199.084 0.23443259 230.66083 0.21863699 412 423 6.0069324 0.19722059 2.8308749 5.5814852 298036.66 3 6 + 69000 516.84151 -3198.3447 0.20394137 113.66746 0.23084747 119 400 6.0069324 0.19605797 2.8308749 5.5814852 302894.58 3 6 +Loop time of 0.23984 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 69000 516.84151 -3198.3447 0.20394137 113.66746 0.23084747 119 400 6.0069324 0.19605797 2.8308749 5.5814852 302894.58 3 6 + 69015 516.84151 -3217.9163 0.20394137 113.66746 0.23084747 119 400 6.0069324 0.19601536 2.8308749 5.5814852 302894.58 3 6 +Loop time of 0.0070501 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 69000 516.84151 -3198.3447 0.20394137 113.66746 0.23084747 119 400 6.0069324 0.19605797 2.8308749 5.5814852 302894.58 3 6 + 70000 521.52008 -3198.1925 0.26533657 472.57625 0.2055223 128 139 6.0069324 0.19471429 2.8308749 5.5814852 308489.53 3 6 +Loop time of 0.240016 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 70000 521.52008 -3198.1925 0.26533657 472.57625 0.2055223 128 139 6.0069324 0.19471429 2.8308749 5.5814852 308489.53 3 6 + 70014 521.52008 -3217.9145 0.26533657 472.57625 0.2055223 128 139 6.0069324 0.19467535 2.8308749 5.5814852 308489.53 3 6 +Loop time of 0.00656152 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 70000 521.52008 -3198.1925 0.26533657 472.57625 0.2055223 128 139 6.0069324 0.19471429 2.8308749 5.5814852 308489.53 3 6 + 71000 456.91639 -3199.2364 0.030609593 2.0348424 0.29067211 555 275 6.0069324 0.19753521 2.8308749 5.5814852 308872.53 3 6 +Loop time of 0.238921 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 71000 456.91639 -3199.2364 0.030609593 2.0348424 0.29067211 555 275 6.0069324 0.19753521 2.8308749 5.5814852 308872.53 3 6 + 71016 456.91639 -3217.9154 0.030609593 2.0348424 0.29067211 555 275 6.0069324 0.19749071 2.8308749 5.5814852 308872.53 3 6 +Loop time of 0.00665921 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 71000 456.91639 -3199.2364 0.030609593 2.0348424 0.29067211 555 275 6.0069324 0.19753521 2.8308749 5.5814852 308872.53 3 6 + 72000 505.77427 -3198.8053 0.011213996 1.2972748 0.29661672 275 567 6.0069324 0.20022222 2.8308749 5.5814852 308922.44 3 6 +Loop time of 0.238494 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 72000 505.77427 -3198.8053 0.011213996 1.2972748 0.29661672 275 567 6.0069324 0.20022222 2.8308749 5.5814852 308922.44 3 6 + 72014 505.77427 -3217.9154 0.011213996 1.2972748 0.29661672 275 567 6.0069324 0.2001833 2.8308749 5.5814852 308922.44 3 6 +Loop time of 0.00666285 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 72000 505.77427 -3198.8053 0.011213996 1.2972748 0.29661672 275 567 6.0069324 0.20022222 2.8308749 5.5814852 308922.44 3 6 + 73000 505.42011 -3198.5745 0.241922 274.45031 0.21553199 262 544 6.0069324 0.19989041 2.8308749 5.5814852 312318.94 3 6 +Loop time of 0.240884 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 73000 505.42011 -3198.5745 0.241922 274.45031 0.21553199 262 544 6.0069324 0.19989041 2.8308749 5.5814852 312318.94 3 6 + 73014 505.42011 -3217.9145 0.241922 274.45031 0.21553199 262 544 6.0069324 0.19985208 2.8308749 5.5814852 312318.94 3 6 +Loop time of 0.00641418 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 73000 505.42011 -3198.5745 0.241922 274.45031 0.21553199 262 544 6.0069324 0.19989041 2.8308749 5.5814852 312318.94 3 6 + 74000 525.14325 -3197.1366 0.091100202 8.2841621 0.27129682 403 404 6.0069324 0.19893243 2.8308749 5.5814852 316054.12 3 6 +Loop time of 0.239838 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 74000 525.14325 -3197.1366 0.091100202 8.2841621 0.27129682 403 404 6.0069324 0.19893243 2.8308749 5.5814852 316054.12 3 6 + 74014 525.14325 -3217.9164 0.091100202 8.2841621 0.27129682 403 404 6.0069324 0.1988948 2.8308749 5.5814852 316054.12 3 6 +Loop time of 0.00640178 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 74000 525.14325 -3197.1366 0.091100202 8.2841621 0.27129682 403 404 6.0069324 0.19893243 2.8308749 5.5814852 316054.12 3 6 + 75000 529.75357 -3196.8628 0.27468673 587.107 0.20138617 262 553 6.0069324 0.1974 2.8308749 5.5814852 320757.39 3 6 +Loop time of 0.241485 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 75000 529.75357 -3196.8628 0.27468673 587.107 0.20138617 262 553 6.0069324 0.1974 2.8308749 5.5814852 320757.39 3 6 + 75015 529.75357 -3217.9131 0.27468673 587.107 0.20138617 262 553 6.0069324 0.19736053 2.8308749 5.5814852 320757.39 3 6 +Loop time of 0.00727272 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 75000 529.75357 -3196.8628 0.27468673 587.107 0.20138617 262 553 6.0069324 0.1974 2.8308749 5.5814852 320757.39 3 6 + 76000 494.67435 -3197.324 0.026840032 1.8643837 0.29183693 555 275 6.0069324 0.19744737 2.8308749 5.5814852 321584.51 3 6 +Loop time of 0.246189 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 76000 494.67435 -3197.324 0.026840032 1.8643837 0.29183693 555 275 6.0069324 0.19744737 2.8308749 5.5814852 321584.51 3 6 + 76015 494.67435 -3217.9124 0.026840032 1.8643837 0.29183693 555 275 6.0069324 0.19740841 2.8308749 5.5814852 321584.51 3 6 +Loop time of 0.00856209 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 76000 494.67435 -3197.324 0.026840032 1.8643837 0.29183693 555 275 6.0069324 0.19744737 2.8308749 5.5814852 321584.51 3 6 + 77000 478.4265 -3198.3778 0.099536255 10.075814 0.26848366 283 272 6.0069324 0.19802597 2.8308749 5.5814852 323214.67 3 6 +Loop time of 0.244489 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 77000 478.4265 -3198.3778 0.099536255 10.075814 0.26848366 283 272 6.0069324 0.19802597 2.8308749 5.5814852 323214.67 3 6 + 77014 478.4265 -3217.9158 0.099536255 10.075814 0.26848366 283 272 6.0069324 0.19798998 2.8308749 5.5814852 323214.67 3 6 +Loop time of 0.00662231 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 77000 478.4265 -3198.3778 0.099536255 10.075814 0.26848366 283 272 6.0069324 0.19802597 2.8308749 5.5814852 323214.67 3 6 + 78000 501.53059 -3199.1386 0.013408722 1.3650665 0.29595005 420 431 6.0069324 0.19646154 2.8308749 5.5814852 328321.34 3 6 +Loop time of 0.238902 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 78000 501.53059 -3199.1386 0.013408722 1.3650665 0.29595005 420 431 6.0069324 0.19646154 2.8308749 5.5814852 328321.34 3 6 + 78014 501.53059 -3217.9148 0.013408722 1.3650665 0.29595005 420 431 6.0069324 0.19642628 2.8308749 5.5814852 328321.34 3 6 +Loop time of 0.00632596 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 78000 501.53059 -3199.1386 0.013408722 1.3650665 0.29595005 420 431 6.0069324 0.19646154 2.8308749 5.5814852 328321.34 3 6 + 79000 500.93975 -3198.0923 0.116093 14.796691 0.26287499 428 543 6.0069324 0.19506329 2.8308749 5.5814852 333018.93 3 6 +Loop time of 0.238987 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 79000 500.93975 -3198.0923 0.116093 14.796691 0.26287499 428 543 6.0069324 0.19506329 2.8308749 5.5814852 333018.93 3 6 + 79014 500.93975 -3217.9148 0.116093 14.796691 0.26287499 428 543 6.0069324 0.19502873 2.8308749 5.5814852 333018.93 3 6 +Loop time of 0.00644779 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 79000 500.93975 -3198.0923 0.116093 14.796691 0.26287499 428 543 6.0069324 0.19506329 2.8308749 5.5814852 333018.93 3 6 + 80000 521.43512 -3199.0487 0.15540998 36.852069 0.2490506 253 136 6.0069324 0.193625 2.8308749 5.5814852 337716.24 3 6 +Loop time of 0.238806 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 80000 521.43512 -3199.0487 0.15540998 36.852069 0.2490506 253 136 6.0069324 0.193625 2.8308749 5.5814852 337716.24 3 6 + 80014 521.43512 -3217.9164 0.15540998 36.852069 0.2490506 253 136 6.0069324 0.19359112 2.8308749 5.5814852 337716.24 3 6 +Loop time of 0.00644064 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 80000 521.43512 -3199.0487 0.15540998 36.852069 0.2490506 253 136 6.0069324 0.193625 2.8308749 5.5814852 337716.24 3 6 + 81000 533.69561 -3197.1168 0.24520241 296.1616 0.21415781 575 280 6.0069324 0.19222222 2.8308749 5.5814852 343062.81 3 6 +Loop time of 0.240714 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 81000 533.69561 -3197.1168 0.24520241 296.1616 0.21415781 575 280 6.0069324 0.19222222 2.8308749 5.5814852 343062.81 3 6 + 81015 533.69561 -3217.9142 0.24520241 296.1616 0.21415781 575 280 6.0069324 0.19218663 2.8308749 5.5814852 343062.81 3 6 +Loop time of 0.00675607 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 81000 533.69561 -3197.1168 0.24520241 296.1616 0.21415781 575 280 6.0069324 0.19222222 2.8308749 5.5814852 343062.81 3 6 + 82000 522.58314 -3197.6951 0.34607713 3078.2225 0.16645154 569 570 6.0069324 0.19130488 2.8308749 5.5814852 347897.31 3 6 +Loop time of 0.239094 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 82000 522.58314 -3197.6951 0.34607713 3078.2225 0.16645154 569 570 6.0069324 0.19130488 2.8308749 5.5814852 347897.31 3 6 + 82014 522.58314 -3217.917 0.34607713 3078.2225 0.16645154 569 570 6.0069324 0.19127222 2.8308749 5.5814852 347897.31 3 6 +Loop time of 0.00662041 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 82000 522.58314 -3197.6951 0.34607713 3078.2225 0.16645154 569 570 6.0069324 0.19130488 2.8308749 5.5814852 347897.31 3 6 + 83000 518.24081 -3196.6457 0.27556929 599.25687 0.20099136 512 523 6.0069324 0.18978313 2.8308749 5.5814852 355870.51 3 6 +Loop time of 0.240335 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 83000 518.24081 -3196.6457 0.27556929 599.25687 0.20099136 512 523 6.0069324 0.18978313 2.8308749 5.5814852 355870.51 3 6 + 83015 518.24081 -3217.9151 0.27556929 599.25687 0.20099136 512 523 6.0069324 0.18974884 2.8308749 5.5814852 355870.51 3 6 +Loop time of 0.00710487 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 83000 518.24081 -3196.6457 0.27556929 599.25687 0.20099136 512 523 6.0069324 0.18978313 2.8308749 5.5814852 355870.51 3 6 + 84000 524.77376 -3198.1195 0.32714869 1983.8549 0.17638944 275 567 6.0069324 0.189 2.8308749 5.5814852 358623.76 3 6 +Loop time of 0.239069 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 84000 524.77376 -3198.1195 0.32714869 1983.8549 0.17638944 275 567 6.0069324 0.189 2.8308749 5.5814852 358623.76 3 6 + 84014 524.77376 -3217.9145 0.32714869 1983.8549 0.17638944 275 567 6.0069324 0.18896851 2.8308749 5.5814852 358623.76 3 6 +Loop time of 0.00662088 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 84000 524.77376 -3198.1195 0.32714869 1983.8549 0.17638944 275 567 6.0069324 0.189 2.8308749 5.5814852 358623.76 3 6 + 85000 485.77334 -3199.2545 0.0027767134 1.0665667 0.29916583 275 567 6.0069324 0.19102353 2.8308749 5.5814852 362933.93 3 6 +Loop time of 0.240117 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 85000 485.77334 -3199.2545 0.0027767134 1.0665667 0.29916583 275 567 6.0069324 0.19102353 2.8308749 5.5814852 362933.93 3 6 + 85014 485.77334 -3217.9148 0.0027767134 1.0665667 0.29916583 275 567 6.0069324 0.19099207 2.8308749 5.5814852 362933.93 3 6 +Loop time of 0.00642967 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 85000 485.77334 -3199.2545 0.0027767134 1.0665667 0.29916583 275 567 6.0069324 0.19102353 2.8308749 5.5814852 362933.93 3 6 + 86000 520.32504 -3197.8586 0.34074416 2719.857 0.16931052 572 403 6.0069324 0.19181395 2.8308749 5.5814852 366756.98 3 6 +Loop time of 0.23899 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 86000 520.32504 -3197.8586 0.34074416 2719.857 0.16931052 572 403 6.0069324 0.19181395 2.8308749 5.5814852 366756.98 3 6 + 86014 520.32504 -3217.9156 0.34074416 2719.857 0.16931052 572 403 6.0069324 0.19178273 2.8308749 5.5814852 366756.98 3 6 +Loop time of 0.00667548 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 86000 520.32504 -3197.8586 0.34074416 2719.857 0.16931052 572 403 6.0069324 0.19181395 2.8308749 5.5814852 366756.98 3 6 + 87000 492.06505 -3198.9245 0.35508545 3794.0215 0.16150733 282 284 6.0069324 0.19096552 2.8308749 5.5814852 370757.69 3 6 +Loop time of 0.241176 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 87000 492.06505 -3198.9245 0.35508545 3794.0215 0.16150733 282 284 6.0069324 0.19096552 2.8308749 5.5814852 370757.69 3 6 + 87014 492.06505 -3217.9141 0.35508545 3794.0215 0.16150733 282 284 6.0069324 0.19093479 2.8308749 5.5814852 370757.69 3 6 +Loop time of 0.00634283 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 87000 492.06505 -3198.9245 0.35508545 3794.0215 0.16150733 282 284 6.0069324 0.19096552 2.8308749 5.5814852 370757.69 3 6 + 88000 519.1972 -3199.3527 0.27684477 617.26171 0.20041941 411 416 6.0069324 0.19025 2.8308749 5.5814852 375119.46 3 6 +Loop time of 0.239888 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 88000 519.1972 -3199.3527 0.27684477 617.26171 0.20041941 411 416 6.0069324 0.19025 2.8308749 5.5814852 375119.46 3 6 + 88014 519.1972 -3217.9152 0.27684477 617.26171 0.20041941 411 416 6.0069324 0.19021974 2.8308749 5.5814852 375119.46 3 6 +Loop time of 0.00669366 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 88000 519.1972 -3199.3527 0.27684477 617.26171 0.20041941 411 416 6.0069324 0.19025 2.8308749 5.5814852 375119.46 3 6 + 89000 524.26014 -3198.5355 0.3001416 1059.9631 0.18966948 432 431 6.0069324 0.19220225 2.8308749 5.5814852 375708.76 3 6 +Loop time of 0.241238 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 89000 524.26014 -3198.5355 0.3001416 1059.9631 0.18966948 432 431 6.0069324 0.19220225 2.8308749 5.5814852 375708.76 3 6 + 89014 524.26014 -3217.9158 0.3001416 1059.9631 0.18966948 432 431 6.0069324 0.19217202 2.8308749 5.5814852 375708.76 3 6 +Loop time of 0.00632095 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 89000 524.26014 -3198.5355 0.3001416 1059.9631 0.18966948 432 431 6.0069324 0.19220225 2.8308749 5.5814852 375708.76 3 6 + 90000 498.11952 -3200.0434 0.2737435 574.39407 0.20180726 96 141 6.0069324 0.19212222 2.8308749 5.5814852 380021.68 3 6 +Loop time of 0.240092 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 90000 498.11952 -3200.0434 0.2737435 574.39407 0.20180726 96 141 6.0069324 0.19212222 2.8308749 5.5814852 380021.68 3 6 + 90013 498.11952 -3217.9105 0.2737435 574.39407 0.20180726 96 141 6.0069324 0.19209448 2.8308749 5.5814852 380021.68 3 6 +Loop time of 0.00614023 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 90000 498.11952 -3200.0434 0.2737435 574.39407 0.20180726 96 141 6.0069324 0.19212222 2.8308749 5.5814852 380021.68 3 6 + 91000 518.719 -3198.4974 0 1 0.38452588 128 139 6.0069324 0.19137363 2.8308749 5.5814852 386325.64 3 6 +Loop time of 0.240887 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 91000 518.719 -3198.4974 0 1 0.38452588 128 139 6.0069324 0.19137363 2.8308749 5.5814852 386325.64 3 6 + 91015 518.719 -3217.9166 0 1 0.38452588 128 139 6.0069324 0.19134209 2.8308749 5.5814852 386325.64 3 6 +Loop time of 0.00709724 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 91000 518.719 -3198.4974 0 1 0.38452588 128 139 6.0069324 0.19137363 2.8308749 5.5814852 386325.64 3 6 + 92000 489.88256 -3197.3306 0.22381505 180.28261 0.22296478 554 556 6.0069324 0.19186957 2.8308749 5.5814852 387621.28 3 6 +Loop time of 0.241415 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 92000 489.88256 -3197.3306 0.22381505 180.28261 0.22296478 554 556 6.0069324 0.19186957 2.8308749 5.5814852 387621.28 3 6 + 92014 489.88256 -3217.9165 0.22381505 180.28261 0.22296478 554 556 6.0069324 0.19184037 2.8308749 5.5814852 387621.28 3 6 +Loop time of 0.00761282 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 92000 489.88256 -3197.3306 0.22381505 180.28261 0.22296478 554 556 6.0069324 0.19186957 2.8308749 5.5814852 387621.28 3 6 + 93000 470.86218 -3199.1842 0 1 0.35506745 275 567 6.0069324 0.19339785 2.8308749 5.5814852 388253.6 3 6 +Loop time of 0.242326 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 93000 470.86218 -3199.1842 0 1 0.35506745 275 567 6.0069324 0.19339785 2.8308749 5.5814852 388253.6 3 6 + 93015 470.86218 -3217.9141 0 1 0.35506745 275 567 6.0069324 0.19336666 2.8308749 5.5814852 388253.6 3 6 +Loop time of 0.006814 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 93000 470.86218 -3199.1842 0 1 0.35506745 275 567 6.0069324 0.19339785 2.8308749 5.5814852 388253.6 3 6 + 94000 500.15102 -3200.7696 0.21997392 164.90621 0.2245099 547 552 6.0069324 0.19425532 2.8308749 5.5814852 390879.44 3 6 +Loop time of 0.239427 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 94000 500.15102 -3200.7696 0.21997392 164.90621 0.2245099 547 552 6.0069324 0.19425532 2.8308749 5.5814852 390879.44 3 6 + 94014 500.15102 -3217.9143 0.21997392 164.90621 0.2245099 547 552 6.0069324 0.19422639 2.8308749 5.5814852 390879.44 3 6 +Loop time of 0.00671053 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 94000 500.15102 -3200.7696 0.21997392 164.90621 0.2245099 547 552 6.0069324 0.19425532 2.8308749 5.5814852 390879.44 3 6 + 95000 490.13908 -3196.2455 0.24009629 263.06397 0.21629301 404 411 6.0069324 0.19329474 2.8308749 5.5814852 393723.55 3 6 +Loop time of 0.240334 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 95000 490.13908 -3196.2455 0.24009629 263.06397 0.21629301 404 411 6.0069324 0.19329474 2.8308749 5.5814852 393723.55 3 6 + 95014 490.13908 -3217.9156 0.24009629 263.06397 0.21629301 404 411 6.0069324 0.19326626 2.8308749 5.5814852 393723.55 3 6 +Loop time of 0.00659347 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 95000 490.13908 -3196.2455 0.24009629 263.06397 0.21629301 404 411 6.0069324 0.19329474 2.8308749 5.5814852 393723.55 3 6 + 96000 487.33226 -3198.9357 0 1 0.37635306 275 567 6.0069324 0.19283333 2.8308749 5.5814852 397503.57 3 6 +Loop time of 0.239501 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 96000 487.33226 -3198.9357 0 1 0.37635306 275 567 6.0069324 0.19283333 2.8308749 5.5814852 397503.57 3 6 + 96016 487.33226 -3217.9155 0 1 0.37635306 275 567 6.0069324 0.1928012 2.8308749 5.5814852 397503.57 3 6 +Loop time of 0.00752759 on 4 procs for 16 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 96000 487.33226 -3198.9357 0 1 0.37635306 275 567 6.0069324 0.19283333 2.8308749 5.5814852 397503.57 3 6 + 97000 474.12539 -3199.8196 0.35035926 3399.8667 0.16411988 543 577 6.0069324 0.19291753 2.8308749 5.5814852 402607.83 3 6 +Loop time of 0.241445 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 97000 474.12539 -3199.8196 0.35035926 3399.8667 0.16411988 543 577 6.0069324 0.19291753 2.8308749 5.5814852 402607.83 3 6 + 97014 474.12539 -3217.9109 0.35035926 3399.8667 0.16411988 543 577 6.0069324 0.19288969 2.8308749 5.5814852 402607.83 3 6 +Loop time of 0.00657606 on 4 procs for 14 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 97000 474.12539 -3199.8196 0.35035926 3399.8667 0.16411988 543 577 6.0069324 0.19291753 2.8308749 5.5814852 402607.83 3 6 + 98000 529.81368 -3198.9595 0.31966379 1667.4989 0.18016803 219 257 6.0069324 0.19226531 2.8308749 5.5814852 408103.05 3 6 +Loop time of 0.239002 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 98000 529.81368 -3198.9595 0.31966379 1667.4989 0.18016803 219 257 6.0069324 0.19226531 2.8308749 5.5814852 408103.05 3 6 + 98013 529.81368 -3217.9152 0.31966379 1667.4989 0.18016803 219 257 6.0069324 0.1922398 2.8308749 5.5814852 408103.05 3 6 +Loop time of 0.00612688 on 4 procs for 13 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 98000 529.81368 -3198.9595 0.31966379 1667.4989 0.18016803 219 257 6.0069324 0.19226531 2.8308749 5.5814852 408103.05 3 6 + 99000 521.70465 -3199.4429 0.069318452 4.9968747 0.27842895 404 399 6.0069324 0.19121212 2.8308749 5.5814852 410506.47 3 6 +Loop time of 0.239787 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 99000 521.70465 -3199.4429 0.069318452 4.9968747 0.27842895 404 399 6.0069324 0.19121212 2.8308749 5.5814852 410506.47 3 6 + 99015 521.70465 -3217.9162 0.069318452 4.9968747 0.27842895 404 399 6.0069324 0.19118315 2.8308749 5.5814852 410506.47 3 6 +Loop time of 0.00708294 on 4 procs for 15 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 99000 521.70465 -3199.4429 0.069318452 4.9968747 0.27842895 404 399 6.0069324 0.19121212 2.8308749 5.5814852 410506.47 3 6 + 100000 513.67972 -3199.6382 0.37912459 6628.3181 0.14750449 554 556 6.0069324 0.19018 2.8308749 5.5814852 415873.98 3 6 +Loop time of 0.239291 on 4 procs for 1000 steps with 577 atoms + +Step Temp PotEng f_HG f_HG[1] f_HG[2] f_HG[3] f_HG[4] f_HG[5] f_HG[6] f_HG[7] f_HG[8] f_HG[9] f_HG[10] f_HG[11] + 100000 513.67972 -3199.6382 0.37912459 6628.3181 0.14750449 554 556 6.0069324 0.19018 2.8308749 5.5814852 415873.98 3 6 + 100015 513.67972 -3217.9139 0.37912459 6628.3181 0.14750449 554 556 6.0069324 0.19015148 2.8308749 5.5814852 415873.98 3 6 +Loop time of 0.00685054 on 4 procs for 15 steps with 577 atoms + +Final hyper stats ... + +Cummulative quantities for fix hyper: + hyper time = 415874 + event timesteps = 3 + # of atoms in events = 6 +Quantities for this hyper run: + event timesteps = 3 + # of atoms in events = 6 + max length of any bond = 5.58149 + max drift distance of any atom = 2.83087 + fraction of steps & bonds with zero bias = 0.19018 +Current quantities: + ave bonds/atom = 6.00693 + +Loop time of 25.9832 on 4 procs for 100000 steps with 577 atoms + +Performance: 1662.613 ns/day, 0.014 hours/ns, 3848.641 timesteps/s +100.4% CPU use with 4 MPI tasks x no OpenMP threads + +Hyper stats: + Dynamics time (%) = 24.8121 (95.4928) + Quench time (%) = 0.715868 (2.75512) + Other time (%) = 0.879782 (3.38596) + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 17.954 | 18.433 | 18.794 | 8.4 | 70.94 +Neigh | 1.4147 | 1.4662 | 1.5092 | 2.9 | 5.64 +Comm | 2.0975 | 2.2026 | 2.3076 | 5.6 | 8.48 +Output | 0.0030999 | 0.0031937 | 0.003444 | 0.3 | 0.01 +Modify | 2.6366 | 2.9984 | 3.4835 | 19.3 | 11.54 +Other | | 0.8798 | | | 3.39 + +Nlocal: 144.25 ave 150 max 139 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 533.25 ave 538 max 527 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Neighs: 3359.25 ave 3495 max 3245 min +Histogram: 1 0 1 0 0 1 0 0 0 1 + +Total # of neighbors = 13437 +Ave neighs/atom = 23.2877 +Neighbor list builds = 10069 +Dangerous builds = 0 +Total wall time: 0:00:26 diff --git a/examples/hyper/log.hyper.local.g++.16 b/examples/hyper/log.hyper.local.g++.16 new file mode 100644 index 0000000000..480fcf0248 --- /dev/null +++ b/examples/hyper/log.hyper.local.g++.16 @@ -0,0 +1,993 @@ +LAMMPS (10 Oct 2018) +# 3d EAM surface for local HD + +# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92 +# hop event on (100) surface is same distance +# exchange event is 2 atoms moving same distance + +variable Tequil index 400.0 +variable Vmax index 0.4 +variable qfactor index 0.3 +variable cutbond index 3.2 +variable Dcut index 10.0 +variable cutevent index 1.1 +variable alpha index 200.0 +variable boost index 4000.0 +variable ghostcut index 12.0 +variable steps index 1500 +variable nevent index 100 +variable nx index 8 +variable ny index 8 +variable zoom index 1.8 +variable seed index 826626413 +variable tol index 1.0e-15 +variable add index 37K + +units metal +atom_style atomic +atom_modify map array +boundary p p p +comm_modify cutoff ${ghostcut} +comm_modify cutoff 12.0 + +lattice fcc 3.92 +Lattice spacing in x,y,z = 3.92 3.92 3.92 +region box block 0 6 0 6 0 4 +create_box 2 box +Created orthogonal box = (0 0 0) to (23.52 23.52 15.68) + 2 by 4 by 2 MPI processor grid +create_atoms 1 box +Created 576 atoms + Time spent = 0.00108504 secs + +mass * 1.0 + +change_box all z final -0.1 5.0 boundary p p f + orthogonal box = (0 0 -0.392) to (23.52 23.52 19.6) + +# replicate in xy + +replicate ${nx} ${ny} 1 +replicate 8 ${ny} 1 +replicate 8 8 1 + orthogonal box = (0 0 -0.392) to (188.16 188.16 19.6) + 4 by 4 by 1 MPI processor grid + 36864 atoms + Time spent = 0.0028758 secs + +# add adatoms + +include adatoms.list.${add} +include adatoms.list.37K +create_atoms 1 single 27.5 9.5 4 +Created 1 atoms + Time spent = 0.000183105 secs +create_atoms 1 single 16 9 4 +Created 1 atoms + Time spent = 0.000178099 secs +create_atoms 1 single 10 12 4 +Created 1 atoms + Time spent = 0.000179768 secs +create_atoms 1 single 31 44 4 +Created 1 atoms + Time spent = 0.000184059 secs +create_atoms 1 single 13 17 4 +Created 1 atoms + Time spent = 0.000173807 secs +create_atoms 1 single 8.5 28.5 4 +Created 1 atoms + Time spent = 0.000167847 secs +create_atoms 1 single 23 26 4 +Created 1 atoms + Time spent = 0.000179052 secs +create_atoms 1 single 38 27 4 +Created 1 atoms + Time spent = 0.000169992 secs +create_atoms 1 single 37.5 4.5 4 +Created 1 atoms + Time spent = 0.000166178 secs +create_atoms 1 single 41.5 47.5 4 +Created 1 atoms + Time spent = 0.000172138 secs +create_atoms 1 single 20.5 37.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 5 8 4 +Created 1 atoms + Time spent = 0.00018096 secs +create_atoms 1 single 2.5 16.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 38.5 45.5 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 9 0 4 +Created 1 atoms + Time spent = 0.000168085 secs +create_atoms 1 single 39 32 4 +Created 1 atoms + Time spent = 0.000170946 secs +create_atoms 1 single 45.5 11.5 4 +Created 1 atoms + Time spent = 0.00018096 secs +create_atoms 1 single 40 0 4 +Created 1 atoms + Time spent = 0.000168085 secs +create_atoms 1 single 44.5 2.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 4.5 44.5 4 +Created 1 atoms + Time spent = 0.000168085 secs +create_atoms 1 single 24.5 13.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 47.5 23.5 4 +Created 1 atoms + Time spent = 0.00018096 secs +create_atoms 1 single 1 20 4 +Created 1 atoms + Time spent = 0.000166893 secs +create_atoms 1 single 38.5 31.5 4 +Created 1 atoms + Time spent = 0.000168085 secs +create_atoms 1 single 12.5 12.5 4 +Created 1 atoms + Time spent = 0.000169992 secs +create_atoms 1 single 2 27 4 +Created 1 atoms + Time spent = 0.000188828 secs +create_atoms 1 single 21 5 4 +Created 1 atoms + Time spent = 0.000174999 secs +create_atoms 1 single 47 12 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 32.5 46.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 9.5 40.5 4 +Created 1 atoms + Time spent = 0.000166893 secs +create_atoms 1 single 8.5 2.5 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 41.5 22.5 4 +Created 1 atoms + Time spent = 0.000174046 secs +create_atoms 1 single 29 11 4 +Created 1 atoms + Time spent = 0.000166893 secs +create_atoms 1 single 3.5 3.5 4 +Created 1 atoms + Time spent = 0.000165224 secs +create_atoms 1 single 5 21 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 46.5 31.5 4 +Created 1 atoms + Time spent = 0.000166178 secs +create_atoms 1 single 35 46 4 +Created 1 atoms + Time spent = 0.000183105 secs +create_atoms 1 single 40.5 41.5 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 10 22 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 43.5 14.5 4 +Created 1 atoms + Time spent = 0.000169992 secs +create_atoms 1 single 42 42 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 4 26 4 +Created 1 atoms + Time spent = 0.000174999 secs +create_atoms 1 single 19 34 4 +Created 1 atoms + Time spent = 0.000163078 secs +create_atoms 1 single 33 9 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 0.5 45.5 4 +Created 1 atoms + Time spent = 0.000163078 secs +create_atoms 1 single 30.5 32.5 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 25.5 5.5 4 +Created 1 atoms + Time spent = 0.000178099 secs +create_atoms 1 single 47.5 39.5 4 +Created 1 atoms + Time spent = 0.000165939 secs +create_atoms 1 single 15 13 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 21 21 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 14 28 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 9 34 4 +Created 1 atoms + Time spent = 0.000174999 secs +create_atoms 1 single 7 38 4 +Created 1 atoms + Time spent = 0.000175953 secs +create_atoms 1 single 11 35 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 20.5 45.5 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 30.5 31.5 4 +Created 1 atoms + Time spent = 0.000159979 secs +create_atoms 1 single 32.5 2.5 4 +Created 1 atoms + Time spent = 0.000166178 secs +create_atoms 1 single 21.5 3.5 4 +Created 1 atoms + Time spent = 0.000157833 secs +create_atoms 1 single 23 12 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 4.5 33.5 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 46 43 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 42.5 45.5 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 4.5 10.5 4 +Created 1 atoms + Time spent = 0.000158072 secs +create_atoms 1 single 33.5 15.5 4 +Created 1 atoms + Time spent = 0.000157833 secs +create_atoms 1 single 24 5 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 13 16 4 +Created 1 atoms + Time spent = 0.000158072 secs +create_atoms 1 single 16.5 23.5 4 +Created 1 atoms + Time spent = 0.000156164 secs +create_atoms 1 single 45.5 28.5 4 +Created 1 atoms + Time spent = 0.000247002 secs +create_atoms 1 single 44.5 5.5 4 +Created 1 atoms + Time spent = 0.000156164 secs +create_atoms 1 single 27.5 46.5 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 44.5 12.5 4 +Created 1 atoms + Time spent = 0.000157833 secs +create_atoms 1 single 12 41 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 6 4 4 +Created 1 atoms + Time spent = 0.0001688 secs +create_atoms 1 single 31.5 10.5 4 +Created 1 atoms + Time spent = 0.00015521 secs +create_atoms 1 single 1 44 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 31 4 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 21 33 4 +Created 1 atoms + Time spent = 0.000156879 secs +create_atoms 1 single 3 33 4 +Created 1 atoms + Time spent = 0.000164032 secs +create_atoms 1 single 15 10 4 +Created 1 atoms + Time spent = 0.0001719 secs +create_atoms 1 single 28.5 22.5 4 +Created 1 atoms + Time spent = 0.000153065 secs +create_atoms 1 single 43 1 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 3.5 0.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 41 37 4 +Created 1 atoms + Time spent = 0.000153065 secs +create_atoms 1 single 18.5 43.5 4 +Created 1 atoms + Time spent = 0.000213146 secs +create_atoms 1 single 17 27 4 +Created 1 atoms + Time spent = 0.000159979 secs +create_atoms 1 single 3 5 4 +Created 1 atoms + Time spent = 0.000153065 secs +create_atoms 1 single 18.5 23.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 31.5 14.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 41 31 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 22 3 4 +Created 1 atoms + Time spent = 0.00015521 secs +create_atoms 1 single 14.5 40.5 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 9 38 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 36 42 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 33 22 4 +Created 1 atoms + Time spent = 0.000163078 secs +create_atoms 1 single 15.5 47.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 3 0 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 25.5 27.5 4 +Created 1 atoms + Time spent = 0.000176907 secs +create_atoms 1 single 2.5 28.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 29.5 28.5 4 +Created 1 atoms + Time spent = 0.000162125 secs +create_atoms 1 single 44.5 18.5 4 +Created 1 atoms + Time spent = 0.000152826 secs +create_atoms 1 single 26 40 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 41 27 4 +Created 1 atoms + Time spent = 0.000158072 secs +create_atoms 1 single 39.5 5.5 4 +Created 1 atoms + Time spent = 0.000155926 secs +create_atoms 1 single 3 38 4 +Created 1 atoms + Time spent = 0.000152826 secs +create_atoms 1 single 35 29 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 11 19 4 +Created 1 atoms + Time spent = 0.000164986 secs +create_atoms 1 single 18 1 4 +Created 1 atoms + Time spent = 0.000146866 secs +create_atoms 1 single 39.5 40.5 4 +Created 1 atoms + Time spent = 0.000146866 secs +create_atoms 1 single 46 17 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 1.5 23.5 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 28.5 23.5 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 10 28 4 +Created 1 atoms + Time spent = 0.000159979 secs +create_atoms 1 single 19 47 4 +Created 1 atoms + Time spent = 0.000148058 secs +create_atoms 1 single 10.5 16.5 4 +Created 1 atoms + Time spent = 0.000147104 secs +create_atoms 1 single 38 45 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 42.5 41.5 4 +Created 1 atoms + Time spent = 0.000161886 secs +create_atoms 1 single 47.5 42.5 4 +Created 1 atoms + Time spent = 0.000147104 secs +create_atoms 1 single 38 7 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 10 44 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 29.5 27.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 45 30 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 3 9 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 8.5 35.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 24 44 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 47 4 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 7.5 8.5 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 32.5 41.5 4 +Created 1 atoms + Time spent = 0.000157833 secs +create_atoms 1 single 0.5 34.5 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 11 8 4 +Created 1 atoms + Time spent = 0.000147104 secs +create_atoms 1 single 2 40 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 25 24 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 47.5 6.5 4 +Created 1 atoms + Time spent = 0.000147104 secs +create_atoms 1 single 39.5 28.5 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 17 21 4 +Created 1 atoms + Time spent = 0.000164032 secs +create_atoms 1 single 32 43 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 16.5 29.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 34 34 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 11.5 3.5 4 +Created 1 atoms + Time spent = 0.000154018 secs +create_atoms 1 single 39 22 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 24.5 36.5 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 33 31 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 35.5 35.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 14.5 34.5 4 +Created 1 atoms + Time spent = 0.000146866 secs +create_atoms 1 single 34 28 4 +Created 1 atoms + Time spent = 0.000153065 secs +create_atoms 1 single 37 41 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 33 46 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 27.5 28.5 4 +Created 1 atoms + Time spent = 0.000145197 secs +create_atoms 1 single 40.5 22.5 4 +Created 1 atoms + Time spent = 0.000150919 secs +create_atoms 1 single 27.5 1.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 12 2 4 +Created 1 atoms + Time spent = 0.000151873 secs +create_atoms 1 single 36 43 4 +Created 1 atoms + Time spent = 0.000144005 secs +create_atoms 1 single 28.5 9.5 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 20.5 25.5 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 3 3 4 +Created 1 atoms + Time spent = 0.000144005 secs +create_atoms 1 single 38 33 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 3 20 4 +Created 1 atoms + Time spent = 0.000154972 secs +create_atoms 1 single 35 11 4 +Created 1 atoms + Time spent = 0.000145912 secs +create_atoms 1 single 5 25 4 +Created 1 atoms + Time spent = 0.000144005 secs +create_atoms 1 single 36.5 6.5 4 +Created 1 atoms + Time spent = 0.000144005 secs +create_atoms 1 single 19.5 24.5 4 +Created 1 atoms + Time spent = 0.000236988 secs +create_atoms 1 single 27 41 4 +Created 1 atoms + Time spent = 0.000169992 secs +create_atoms 1 single 39.5 11.5 4 +Created 1 atoms + Time spent = 0.000138998 secs +create_atoms 1 single 21.5 2.5 4 +Created 1 atoms + Time spent = 0.000136852 secs +create_atoms 1 single 46.5 15.5 4 +Created 1 atoms + Time spent = 0.000138998 secs +create_atoms 1 single 13 24 4 +Created 1 atoms + Time spent = 0.000137091 secs +create_atoms 1 single 11 37 4 +Created 1 atoms + Time spent = 0.000144005 secs +create_atoms 1 single 11.5 31.5 4 +Created 1 atoms + Time spent = 0.000144958 secs +create_atoms 1 single 47 0 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 25.5 17.5 4 +Created 1 atoms + Time spent = 0.00014019 secs +create_atoms 1 single 32 11 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 8 17 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 27.5 12.5 4 +Created 1 atoms + Time spent = 0.000137806 secs +create_atoms 1 single 25 7 4 +Created 1 atoms + Time spent = 0.000146151 secs +create_atoms 1 single 25.5 37.5 4 +Created 1 atoms + Time spent = 0.000139952 secs +create_atoms 1 single 12 15 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 1 7 4 +Created 1 atoms + Time spent = 0.000138998 secs +create_atoms 1 single 18.5 47.5 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 5 38 4 +Created 1 atoms + Time spent = 0.000136852 secs +create_atoms 1 single 42 19 4 +Created 1 atoms + Time spent = 0.000149012 secs +create_atoms 1 single 30.5 7.5 4 +Created 1 atoms + Time spent = 0.000138044 secs +create_atoms 1 single 42.5 7.5 4 +Created 1 atoms + Time spent = 0.000138998 secs +create_atoms 1 single 26.5 18.5 4 +Created 1 atoms + Time spent = 0.000153065 secs +create_atoms 1 single 18.5 1.5 4 +Created 1 atoms + Time spent = 0.000137091 secs +create_atoms 1 single 41.5 10.5 4 +Created 1 atoms + Time spent = 0.000140905 secs + +# define frozen substrate and mobile atoms + +region base block INF INF INF INF 0 1.8 +set region base type 2 + 18432 settings made for type +group base type 2 +18432 atoms in group base +group mobile type 1 +18616 atoms in group mobile + +# pair style + +pair_style eam/alloy +pair_coeff * * ptvoterlammps.eam Pt Pt + +neighbor 0.5 bin +neigh_modify every 1 delay 5 check yes + +fix 1 mobile nve +fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes +fix 2 mobile langevin 400.0 ${Tequil} 1.0 ${seed} zero yes +fix 2 mobile langevin 400.0 400.0 1.0 ${seed} zero yes +fix 2 mobile langevin 400.0 400.0 1.0 826626413 zero yes + +timestep 0.005 + +compute tmobile mobile temp + +thermo 100 +thermo_modify temp tmobile +WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488) + +# thermal equilibration + +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.07583 + ghost atom cutoff = 12 + binsize = 3.03792, bins = 62 62 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam/alloy, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.359 | 3.359 | 3.36 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -206220.22 0 -206220.22 -52155.664 + 100 188.18127 -206044.43 0 -205591.63 -25068.83 + 200 274.34464 -205860.78 0 -205200.66 -40191.797 + 300 325.66286 -205750.01 0 -204966.4 -31510.222 + 400 352.48242 -205675.42 0 -204827.28 -35058.064 + 500 370.88571 -205619.66 0 -204727.25 -32735.022 + 600 388.62129 -205592.87 0 -204657.78 -33904.556 + 700 389.54874 -205579.73 0 -204642.4 -32769.852 + 800 395.56074 -205576.82 0 -204625.03 -33755.948 + 900 398.03458 -205564.48 0 -204606.74 -32777.103 + 1000 401.24089 -205562.85 0 -204597.4 -33785.341 +Loop time of 4.3687 on 16 procs for 1000 steps with 37048 atoms + +Performance: 98.885 ns/day, 0.243 hours/ns, 228.901 timesteps/s +98.4% CPU use with 16 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.2988 | 3.3828 | 3.4667 | 2.3 | 77.43 +Neigh | 0.20856 | 0.23127 | 0.24382 | 1.9 | 5.29 +Comm | 0.33313 | 0.45075 | 0.55485 | 9.2 | 10.32 +Output | 0.00042987 | 0.00044042 | 0.00049591 | 0.0 | 0.01 +Modify | 0.18811 | 0.28363 | 0.36798 | 9.7 | 6.49 +Other | | 0.01983 | | | 0.45 + +Nlocal: 2315.5 ave 2332 max 2297 min +Histogram: 2 0 0 3 4 0 2 1 2 2 +Nghost: 3186.31 ave 3205 max 3170 min +Histogram: 2 1 3 0 2 3 2 1 0 2 +Neighs: 55590.9 ave 56174 max 55103 min +Histogram: 2 2 1 1 4 1 3 0 0 2 + +Total # of neighbors = 889454 +Ave neighs/atom = 24.0082 +Neighbor list builds = 105 +Dangerous builds = 0 +reset_timestep 0 + +# pin base so will not move during quenches + +fix freeze base setforce 0.0 0.0 0.0 + +# event detection + +compute event all event/displace ${cutevent} +compute event all event/displace 1.1 + +# hyper/local + +fix HL mobile hyper/local ${cutbond} ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost} +fix HL mobile hyper/local 3.2 ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost} +fix HL mobile hyper/local 3.2 0.3 ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost} +fix HL mobile hyper/local 3.2 0.3 0.4 ${Tequil} ${Dcut} ${alpha} ${boost} +fix HL mobile hyper/local 3.2 0.3 0.4 400.0 ${Dcut} ${alpha} ${boost} +fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 ${alpha} ${boost} +fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 ${boost} +fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 4000.0 + +# thermo output + +thermo_style custom step temp pe f_HL f_HL[*] +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:705) + +thermo_modify lost ignore +thermo_modify temp tmobile +WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488) + +thermo ${nevent} +thermo 100 + +# dump + +region substrate block INF INF INF INF 1.8 3.8 +region adatoms block INF INF INF INF 3.8 INF +variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms) + +dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom 1.8 adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 +dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green + +# run + +hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1 +hyper 1500 ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1 +hyper 1500 100 HL event min ${tol} ${tol} 1000 1000 dump 1 +hyper 1500 100 HL event min 1.0e-15 ${tol} 1000 1000 dump 1 +hyper 1500 100 HL event min 1.0e-15 1.0e-15 1000 1000 dump 1 +WARNING: Resetting reneighboring criteria during hyper (../hyper.cpp:133) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.07583 + ghost atom cutoff = 12 + binsize = 3.03792, bins = 62 62 7 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair eam/alloy, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix hyper/local, occasional + attributes: full, newton on, cut 10 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.566 | 7.567 | 7.567 Mbytes +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 0 401.24089 -205562.85 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 0 0 0 0 + 77 401.24089 -206534.96 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 1540 0 0 0 +Loop time of 0.540347 on 16 procs for 77 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 0 401.24089 -205562.85 23.271302 74 0.18753621 1 6.0138739 703.62325 0 0.55802338 3.5350432 0 0 0 4e+19 10.115141 10.115141 0 0 0 0 0 0 0 0 0 + 100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0 +Loop time of 0.579085 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0 + 184 399.15639 -206534.96 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 49.934783 0.21714886 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 3680 0 0 0 +Loop time of 0.556056 on 16 procs for 84 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 100 399.15639 -205546.21 22.903938 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0 + 200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0 +Loop time of 0.581214 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0 + 275 403.01717 -206534.96 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 66.145455 0.29040418 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 5500 0 0 0 +Loop time of 0.481812 on 16 procs for 75 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 200 403.01717 -205543.17 21.115577 91 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0 + 300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0 +Loop time of 0.5757 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0 + 377 399.01963 -206534.96 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 73.225464 0.31760598 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 7540 0 0 0 +Loop time of 0.514907 on 16 procs for 77 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 300 399.01963 -205541.46 19.137003 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0 + 400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0 +Loop time of 0.577371 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0 + 471 398.15351 -206534.96 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 78.163482 0.33881076 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 9420 0 0 0 +Loop time of 0.465473 on 16 procs for 71 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 400 398.15351 -205544.87 20.470689 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0 + 500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0 +Loop time of 0.579188 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0 + 577 400.29399 -206534.96 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 79.710572 0.3455768 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 11540 0 0 0 +Loop time of 0.502193 on 16 procs for 77 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 500 400.29399 -205544.98 17.051107 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0 + 600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0 +Loop time of 0.694955 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0 + 680 400.96099 -206534.96 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 81.188235 0.35174818 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 13600 0 0 0 +Loop time of 0.529041 on 16 procs for 80 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 600 400.96099 -205544.56 20.904088 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0 + 700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.1853748 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0 +Loop time of 0.590093 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.2139704 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0 + 790 397.78618 -206534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.1995704 81.625316 0.35310868 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 15800 0 0 0 +Loop time of 0.594281 on 16 procs for 90 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 700 397.78618 -205534.96 20.236364 94 0.51088027 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.205089 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 1 2 6 + 800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6 +Loop time of 0.583824 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6 + 872 399.66919 -206535.54 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 84.739679 0.36548679 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 17440 1 2 6 +Loop time of 0.46886 on 16 procs for 72 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 800 399.66919 -205547.44 21.2852 94 0.44964213 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 2 4 13 + 900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13 +Loop time of 0.585137 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13 + 975 401.5853 -206535.54 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 84.939487 0.36762438 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 19500 2 4 13 +Loop time of 0.502012 on 16 procs for 75 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 900 401.5853 -205544.22 19.307938 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13 + 1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13 +Loop time of 0.588597 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13 + 1083 395.06218 -206535.54 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 85.421053 0.36763584 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 21660 2 4 13 +Loop time of 0.543222 on 16 procs for 83 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1000 395.06218 -205526.35 17.514191 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13 + 1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13 +Loop time of 0.590075 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13 + 1177 400.04484 -206535.53 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 86.464741 0.37201529 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 23540 2 4 13 +Loop time of 0.500839 on 16 procs for 77 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1100 400.04484 -205545.92 19.518413 89 0.429675 0.39705701 6.0137119 703.6043 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 3 6 19 + 1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19 +Loop time of 0.583971 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19 + 1277 400.7462 -206535.53 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 86.806578 0.37396584 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 25540 3 6 19 +Loop time of 0.509118 on 16 procs for 77 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1200 400.7462 -205543.2 21.169281 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19 + 1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19 +Loop time of 0.587306 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19 + 1375 398.53702 -206535.53 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 87.455273 0.37616341 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 27500 3 6 19 +Loop time of 0.483781 on 16 procs for 75 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1300 398.53702 -205539.33 21.35787 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19 + 1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19 +Loop time of 0.586411 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19 + 1471 402.80537 -206535.53 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 88.193746 0.37856948 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 29420 3 6 19 +Loop time of 0.473799 on 16 procs for 71 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1400 402.80537 -205549.3 19.481632 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19 + 1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19 +Loop time of 0.587342 on 16 procs for 100 steps with 37048 atoms + +Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23] + 1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19 + 1574 402.0803 -206535.53 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 88.491741 0.37898213 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 31480 3 6 19 +Loop time of 0.493982 on 16 procs for 74 steps with 37048 atoms + +Final hyper stats ... + +Cummulative quantities for fix hyper: + hyper time = 30000 + event timesteps = 3 + # of atoms in events = 6 +Quantities for this hyper run: + event timesteps = 3 + # of atoms in events = 6 + max length of any bond = 4.4266 + max drift distance of any atom = 2.31777 + fraction of steps & bonds with zero bias = 0.0704091 +Current quantities: + ave bonds/atom = 6.01371 +Cummulative quantities specific tofix hyper/local: + # of new bonds formed = 19 + max bonds/atom = 13 +Quantities for this hyper run specific to fix hyper/local: + ave boosted bonds/step = 92.8573 + ave boost coeff of all bonds = 0.397679 + max boost coeff of any bond = 0.414894 + min boost coeff of any bond = 0.383728 + max dist from my box of any non-maxstrain bond ghost atom = 10.333 + max dist from my box of any bond ghost atom = 10.3858 + count of ghost bond neighbors not found on reneighbor steps = 0 + lost bond partners = 0 + ave bias coeff for lost bond partners = 0 + bias overlaps = 0 + non-matching bias coeffs = 0 + CPU time for bond builds = 0.044807 +Current quantities specific to fix hyper/local: + neighbor bonds/bond = 703.604 + ave boost coeff for all bonds = 0.396356 + +Loop time of 17.9972 on 16 procs for 1500 steps with 37048 atoms + +Performance: 36.006 ns/day, 0.667 hours/ns, 83.346 timesteps/s +120.7% CPU use with 16 MPI tasks x no OpenMP threads + +Hyper stats: + Dynamics time (%) = 8.87027 (49.2869) + Quench time (%) = 8.15972 (45.3388) + Other time (%) = 1.2212 (6.78552) + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.6 | 11.848 | 12.043 | 3.9 | 65.83 +Neigh | 0.50025 | 0.52638 | 0.55163 | 2.1 | 2.92 +Comm | 0.34528 | 0.49905 | 0.66742 | 13.3 | 2.77 +Output | 0.0021305 | 0.0021461 | 0.0022686 | 0.1 | 0.01 +Modify | 3.7498 | 3.9009 | 3.9786 | 2.8 | 21.67 +Other | | 1.221 | | | 6.79 + +Nlocal: 2315.5 ave 2361 max 2267 min +Histogram: 1 1 0 4 2 1 3 3 0 1 +Nghost: 3187.88 ave 3236 max 3141 min +Histogram: 1 0 3 2 2 1 4 1 1 1 +Neighs: 53950.6 ave 54989 max 53049 min +Histogram: 2 0 3 2 1 2 4 1 0 1 +FullNghs: 542951 ave 554654 max 533224 min +Histogram: 1 2 3 1 2 2 2 2 0 1 + +Total # of neighbors = 8687214 +Ave neighs/atom = 234.485 +Neighbor list builds = 165 +Dangerous builds = 0 +Total wall time: 0:00:22 diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index b60ba7339f..4a275a23f7 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -98,6 +98,7 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : int iarg = 10; while (iarg < narg) { + /* if (strcmp(arg[iarg],"histo") == 0) { if (iarg+5 > narg) error->all(FLERR,"Illegal fix hyper/local command"); histoflag = 1; @@ -109,8 +110,9 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : histo_delta <= 0.0 || histo_print <= 0) error->all(FLERR,"Illegal fix hyper/local command"); iarg += 5; + */ - } else if (strcmp(arg[iarg],"lostbond") == 0) { + if (strcmp(arg[iarg],"lostbond") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix hyper/local command"); if (strcmp(arg[iarg+1],"error") == 0) lostbond = ERROR; else if (strcmp(arg[iarg+1],"warn") == 0) lostbond = WARN; @@ -272,7 +274,7 @@ void FixHyperLocal::init() if (cutghost < dcut) error->all(FLERR,"Fix hyper/local bond cutoff exceeds ghost atom range - " "use comm_modify cutoff command"); - if (cutghost < dcut+cutbond && me == 0) + if (cutghost < dcut+cutbond/2.0 && me == 0) error->warning(FLERR,"Fix hyper/local ghost atom range " "may not allow for atom drift between events"); } @@ -655,6 +657,7 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) // DEBUG info for Max and Min bias coeffs every step + /* // if (update->ntimestep >= 300000) { if (update->ntimestep >= 0) { @@ -795,6 +798,7 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) inbondi,inbondj,incoeff,inbias,instraddle,mbrmax); } } + */ // end of DEBUG diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 0449943215..cd8e66447a 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -178,7 +178,6 @@ void Hyper::command(int narg, char **arg) nbuild = ndanger = 0; time_dynamics = time_quench = 0.0; - double clock = 0.0; if (hyperenable) fix_hyper->init_hyper(); @@ -227,14 +226,10 @@ void Hyper::command(int narg, char **arg) } fix_event->restore_state_quench(); - - // NOTE: replace clock with hypertime - //clock = clock + t_event*universe->nworlds; - if (stepmode == 0) istep = update->ntimestep - update->beginstep; - else istep = clock; + istep = update->ntimestep - update->beginstep; } - if (stepmode) nsteps = update->ntimestep - update->beginstep; + nsteps = update->ntimestep - update->beginstep; // set total timers and counters so Finish() will process them @@ -302,6 +297,7 @@ void Hyper::command(int narg, char **arg) if (screen) { fprintf(screen,"Cummulative quantities for fix hyper:\n"); fprintf(screen," hyper time = %g\n",t_hyper); + fprintf(screen," time boost factor = %g\n",t_hyper/(nsteps*update->dt)); fprintf(screen," event timesteps = %d\n",nevent_running); fprintf(screen," # of atoms in events = %d\n",nevent_atoms_running); fprintf(screen,"Quantities for this hyper run:\n"); @@ -504,7 +500,6 @@ void Hyper::options(int narg, char **arg) ftol = 1.0e-4; maxiter = 40; maxeval = 50; - stepmode = 0; dumpflag = 0; ndump = 0; dumplist = NULL; @@ -521,13 +516,6 @@ void Hyper::options(int narg, char **arg) if (maxiter < 0) error->all(FLERR,"Illegal hyper command"); iarg += 5; - } else if (strcmp(arg[iarg],"time") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); - if (strcmp(arg[iarg+1],"steps") == 0) stepmode = 0; - else if (strcmp(arg[iarg+1],"clock") == 0) stepmode = 1; - else error->all(FLERR,"Illegal hyper command"); - iarg += 2; - } else if (strcmp(arg[iarg],"dump") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); dumpflag = 1; From 90caf0019ce517cc85e03d5385c5c97690e114b0 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 12 Oct 2018 13:37:03 -0600 Subject: [PATCH 096/273] fix doc page errors --- doc/src/fix_hyper_global.txt | 4 ++-- doc/src/fix_hyper_local.txt | 2 +- doc/src/hyper.txt | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index 655e2655db..55c63547af 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -146,8 +146,8 @@ If {qfactor} is set too large, then transitions from one energy basin to another are affected because the bias potential is non-zero at the transition state (e.g. saddle point). If {qfactor} is set too small than little boost is achieved because the Eij strain of some bond in -the system will (nearly) always exceed {qfactor). A value of 0.3 for -{qfactor} is typically a reasonable value. +the system will (nearly) always exceed {qfactor}. A value of 0.3 for +{qfactor} is typically reasonable. The {Vmax} argument is the prefactor on the bias potential. Ideally, tt should be set to a value slightly less than the smallest barrier diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index b8e5cf07da..dfdd22251a 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -172,7 +172,7 @@ If {qfactor} is set too large, then transitions from one energy basin to another are affected because the bias potential is non-zero at the transition state (e.g. saddle point). If {qfactor} is set too small than little boost can be achieved because the Eij strain of some bond in -the system will (nearly) always exceed {qfactor). A value of 0.3 for +the system will (nearly) always exceed {qfactor}. A value of 0.3 for {qfactor} is typically a reasonable value. The {Vmax} argument is a fixed prefactor on the bias potential. There diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index 936fb665d3..b6fe27b9c7 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -73,7 +73,7 @@ time between events is reduced by a factor of Nr replicas. For both methods, per CPU second, more physical time elapses and more events occur. See the "prd"_prd.html doc page for more info about PRD. -An HD run has several stages, which are repeated each time an "event" +An HD run has several stages, which are repeated each time an event occurs, as explained below. The logic for an HD run is as follows: quench @@ -121,7 +121,7 @@ event/displace"_compute_event_displace.html command. Other event-checking computes may be added. "Compute event/displace"_compute_event_displace.html checks whether any atom in the compute group has moved further than a specified threshold -distance. If so, an "event" has occurred. +distance. If so, an event has occurred. If this happens, the list of bonds is reset, since some bond pairs are likely now too far apart, and new pairs are likely close enough From 5062c43aea6b267bacd2dadcd66825e737af068e Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 12 Oct 2018 14:03:49 -0600 Subject: [PATCH 097/273] rename example outputs --- ...{global.000000.jpg => global.10Oct18.000000.jpg} | Bin ...{global.003000.jpg => global.10Oct18.003000.jpg} | Bin ...{global.038000.jpg => global.10Oct18.038000.jpg} | Bin ...{global.059000.jpg => global.10Oct18.059000.jpg} | Bin .../{local.000000.jpg => local.10Oct18.000000.jpg} | Bin .../{local.000700.jpg => local.10Oct18.000700.jpg} | Bin .../{local.000800.jpg => local.10Oct18.000800.jpg} | Bin .../{local.001100.jpg => local.10Oct18.001100.jpg} | Bin ....global.g++.4 => log.10Oct18.hyper.global.g++.4} | 0 ....local.g++.16 => log.10Oct18.hyper.local.g++.16} | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename examples/hyper/{global.000000.jpg => global.10Oct18.000000.jpg} (100%) rename examples/hyper/{global.003000.jpg => global.10Oct18.003000.jpg} (100%) rename examples/hyper/{global.038000.jpg => global.10Oct18.038000.jpg} (100%) rename examples/hyper/{global.059000.jpg => global.10Oct18.059000.jpg} (100%) rename examples/hyper/{local.000000.jpg => local.10Oct18.000000.jpg} (100%) rename examples/hyper/{local.000700.jpg => local.10Oct18.000700.jpg} (100%) rename examples/hyper/{local.000800.jpg => local.10Oct18.000800.jpg} (100%) rename examples/hyper/{local.001100.jpg => local.10Oct18.001100.jpg} (100%) rename examples/hyper/{log.hyper.global.g++.4 => log.10Oct18.hyper.global.g++.4} (100%) rename examples/hyper/{log.hyper.local.g++.16 => log.10Oct18.hyper.local.g++.16} (100%) diff --git a/examples/hyper/global.000000.jpg b/examples/hyper/global.10Oct18.000000.jpg similarity index 100% rename from examples/hyper/global.000000.jpg rename to examples/hyper/global.10Oct18.000000.jpg diff --git a/examples/hyper/global.003000.jpg b/examples/hyper/global.10Oct18.003000.jpg similarity index 100% rename from examples/hyper/global.003000.jpg rename to examples/hyper/global.10Oct18.003000.jpg diff --git a/examples/hyper/global.038000.jpg b/examples/hyper/global.10Oct18.038000.jpg similarity index 100% rename from examples/hyper/global.038000.jpg rename to examples/hyper/global.10Oct18.038000.jpg diff --git a/examples/hyper/global.059000.jpg b/examples/hyper/global.10Oct18.059000.jpg similarity index 100% rename from examples/hyper/global.059000.jpg rename to examples/hyper/global.10Oct18.059000.jpg diff --git a/examples/hyper/local.000000.jpg b/examples/hyper/local.10Oct18.000000.jpg similarity index 100% rename from examples/hyper/local.000000.jpg rename to examples/hyper/local.10Oct18.000000.jpg diff --git a/examples/hyper/local.000700.jpg b/examples/hyper/local.10Oct18.000700.jpg similarity index 100% rename from examples/hyper/local.000700.jpg rename to examples/hyper/local.10Oct18.000700.jpg diff --git a/examples/hyper/local.000800.jpg b/examples/hyper/local.10Oct18.000800.jpg similarity index 100% rename from examples/hyper/local.000800.jpg rename to examples/hyper/local.10Oct18.000800.jpg diff --git a/examples/hyper/local.001100.jpg b/examples/hyper/local.10Oct18.001100.jpg similarity index 100% rename from examples/hyper/local.001100.jpg rename to examples/hyper/local.10Oct18.001100.jpg diff --git a/examples/hyper/log.hyper.global.g++.4 b/examples/hyper/log.10Oct18.hyper.global.g++.4 similarity index 100% rename from examples/hyper/log.hyper.global.g++.4 rename to examples/hyper/log.10Oct18.hyper.global.g++.4 diff --git a/examples/hyper/log.hyper.local.g++.16 b/examples/hyper/log.10Oct18.hyper.local.g++.16 similarity index 100% rename from examples/hyper/log.hyper.local.g++.16 rename to examples/hyper/log.10Oct18.hyper.local.g++.16 From fe07ad279db17ee517a4336de8f337e4a95d8b55 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 12 Nov 2018 10:57:43 -0700 Subject: [PATCH 098/273] added NULL declations to constructor, removed debug code --- src/REPLICA/fix_hyper_global.cpp | 15 ++- src/REPLICA/fix_hyper_local.cpp | 214 +++---------------------------- src/REPLICA/hyper.cpp | 4 +- 3 files changed, 28 insertions(+), 205 deletions(-) diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index ba45e47407..8508b23440 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -35,15 +35,15 @@ using namespace FixConst; #define DELTA 16384 #define VECLEN 5 +// NOTE: count/output # of timesteps on which bias is non-zero +// NOTE: should there be a virial contribution from boosted bond? +// NOTE: allow newton off? see Note in pre_reverse() + /* ---------------------------------------------------------------------- */ FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) : - FixHyper(lmp, narg, arg) + FixHyper(lmp, narg, arg), blist(NULL), xold(NULL), tagold(NULL) { - // NOTE: add NULL declarations - // NOTE: count/output # of timesteps on which bias is non-zero - // NOTE: require newton on? - if (atom->map_style == 0) error->all(FLERR,"Fix hyper/global command requires atom map"); @@ -121,6 +121,9 @@ void FixHyperGlobal::init_hyper() void FixHyperGlobal::init() { + if (force->newton_pair == 0) + error->all(FLERR,"Hyper global requires newton pair on"); + dt = update->dt; // need an occasional half neighbor list @@ -280,8 +283,6 @@ void FixHyperGlobal::pre_reverse(int eflag, int vflag) f[jmax][2] -= delz*fbiasr; } else nobias++; - // NOTE: should there be a virial contribution from boosted bond? - // output quantities outvec[0] = vbias; diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 4a275a23f7..7072197a28 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -44,10 +44,11 @@ enum{IGNORE,WARN,ERROR}; /* ---------------------------------------------------------------------- */ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : - FixHyper(lmp, narg, arg) + FixHyper(lmp, narg, arg), old2now(NULL), xold(NULL), tagold(NULL), + bonds(NULL), numbond(NULL), maxstrain(NULL), maxstrain_region(NULL), + maxstrain_bondindex(NULL), biasflag(NULL), boost(NULL), + histo(NULL), allhisto(NULL) { - // NOTE: add NULL declarations - // error checks // solution for tagint != int is to worry about storing // local index vs global ID in same variable @@ -258,7 +259,17 @@ void FixHyperLocal::init_hyper() void FixHyperLocal::init() { - alpha = update->dt / alpha_user; + // for newton off, bond force bias will not be applied correctly + // bonds that straddle 2 procs + // warn if molecular system, since near-neighbors may not appear in neigh list + // user should not be including bonded atoms as hyper "bonds" + + if (force->newton_pair == 0) + error->all(FLERR,"Hyper local requires newton pair on"); + + if (atom->molecular && me == 0) + error->warning(FLERR,"Hyper local for molecular systems " + "requires care in defining hyperdynamics bonds"); // cutghost = communication cutoff as calculated by Neighbor and Comm // error if cutghost is smaller than Dcut @@ -279,11 +290,8 @@ void FixHyperLocal::init() "may not allow for atom drift between events"); } - // NOTE: error if not newton, - // since bond force bias will not be applied correctly to straddle bonds? - // NOTE: if exclusions are enabled, some near-neighbors won't appear - // will be missed in bonds - WARN if molecular system? + alpha = update->dt / alpha_user; // need an occasional full neighbor list with cutoff = Dcut // do not need to include neigh skin in cutoff, @@ -652,160 +660,6 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) // maxboost_region is function of two maxstrain_regions for I,J // NOTE: if J is lost to I but not vice versa, then biascoeff IJ != JI - - - - // DEBUG info for Max and Min bias coeffs every step - - /* - // if (update->ntimestep >= 300000) { - if (update->ntimestep >= 0) { - - double emaxi,emaxj,maxboost_region; - double mincoeff = 1.0e20; - double maxcoeff = -1.0e20; - double delta; - double maxcoeffprev,deltamax,eimax,ejmax,emaximax,emaxjmax,mbrmax; - double mincoeffprev,deltamin,eimin,ejmin,emaximin,emaxjmin,mbrmin; - int itagmax,jtagmax,jtagmax2; - int itagmin,jtagmin,jtagmin2; - - for (i = 0; i < nlocal; i++) { - emaxi = maxstrain_region[i]; - nbond = numbond[i]; - for (m = 0; m < nbond; m++) { - j = bonds[i][m].j; - if (j < 0) continue; - emaxj = maxstrain_region[j]; - emax = MAX(emaxi,emaxj); - if (emax < qfactor) vbias = vmax * (1.0 - emax*emax*invqfactorsq); - else vbias = 0.0; - boostcoeff = bonds[i][m].boostcoeff; - maxboost_region = exp(beta * boostcoeff*vbias); - delta = -alpha * (maxboost_region-boosttarget) / boosttarget; - boostcoeff += delta; - - if (boostcoeff > maxcoeff) { - maxcoeffprev = boostcoeff - delta; - maxcoeff = boostcoeff; - itagmax = tag[i]; - jtagmax = tag[j]; - jtagmax2 = bonds[i][m].jtag; - deltamax = delta; - eimax = maxstrain[i]; - ejmax = maxstrain[j]; - emaximax = emaxi; - emaxjmax = emaxj; - mbrmax = maxboost_region; - } - - if (boostcoeff < mincoeff) { - mincoeffprev = boostcoeff - delta; - mincoeff = boostcoeff; - itagmin = tag[i]; - jtagmin = tag[j]; - jtagmin2 = bonds[i][m].jtag; - deltamin = delta; - eimin = maxstrain[i]; - ejmin = maxstrain[j]; - emaximin = emaxi; - emaxjmin = emaxj; - mbrmin = maxboost_region; - } - } - } - - // min/max owner = procs that own the Min and Max bias coeffs - - pairme.value = mincoeff; - pairme.proc = me; - MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MINLOC,world); - int minowner = pairall.proc; - - pairme.value = maxcoeff; - pairme.proc = me; - MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world); - int maxowner = pairall.proc; - - // get info about which atom and bond influenced Max coeff - // querystrain = strain of bond that is influencing the max Cij - // inbondi,inbondj = ID of I,J atoms in the influence bond - // incoeff = bias coeff of influence bond - // inbias = 1/0 if inflence bond is biased or not on this step - // instraddle = 1/0 if influence bond straddles proc boundary or not - - double querystrain; - if (maxowner == me) querystrain = MAX(emaximax,emaxjmax); - MPI_Bcast(&querystrain,1,MPI_DOUBLE,maxowner,world); - - int count = 0; - for (i = 0; i < nlocal; i++) { - m = maxstrain_bondindex[i]; - if (tag[i] > bonds[i][m].jtag) continue; - if (querystrain == maxstrain[i]) count++; - } - - int countall; - MPI_Allreduce(&count,&countall,1,MPI_INT,MPI_SUM,world); - - int inbias = 0; - int instraddle = countall; // output in rare case countall != 1 - tagint inbondi = 0; - tagint inbondj = 0; - double incoeff = 0.0; - - if (countall == 1) { - int procowner; - int proc = 0; - for (i = 0; i < nlocal; i++) { - m = maxstrain_bondindex[i]; - if (tag[i] > bonds[i][m].jtag) continue; - if (querystrain == maxstrain[i]) { - proc = me; - inbondi = tag[i]; - inbondj = bonds[i][m].jtag; - incoeff = bonds[i][m].boostcoeff; - instraddle = 0; - if (bonds[i][m].j >= nlocal) instraddle = 1; - inbias = 0; - for (int iboost = 0; iboost < nboost; iboost++) - if (boost[iboost] == i) inbias = 1; - } - } - - MPI_Allreduce(&proc,&procowner,1,MPI_INT,MPI_MAX,world); - MPI_Bcast(&inbondi,1,MPI_LMP_TAGINT,procowner,world); - MPI_Bcast(&inbondj,1,MPI_LMP_TAGINT,procowner,world); - MPI_Bcast(&incoeff,1,MPI_DOUBLE,procowner,world); - MPI_Bcast(&instraddle,1,MPI_INT,procowner,world); - MPI_Bcast(&inbias,1,MPI_INT,procowner,world); - } - - // output by procs that own the Min and Max bias coeffs - - if (minowner == me) { - printf("MinCoeff %ld %d : %d %d %d : prev/delta/new %g %g %g : " - "Eij %g %g %g %g : BR %g\n", - update->ntimestep,comm->me,itagmin,jtagmin,jtagmin2, - mincoeffprev,deltamin,mincoeff,eimin,ejmin,emaximin,emaxjmin,mbrmin); - } - if (maxowner == me) { - printf("MaxCoeff %ld %d : %d %d %d : prev/delta/new %g %g %g : " - "Eij %g %g %g %g : Bond %d %d %g %d %d : BR %g\n", - update->ntimestep,comm->me,itagmax,jtagmax,jtagmax2, - maxcoeffprev,deltamax,maxcoeff, - eimax,ejmax,emaximax,emaxjmax, - inbondi,inbondj,incoeff,inbias,instraddle,mbrmax); - } - } - */ - - // end of DEBUG - - - - - double myboost = 0.0; double emaxi,emaxj,maxboost_region; @@ -822,7 +676,7 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) boostcoeff = bonds[i][m].boostcoeff; maxboost_region = exp(beta * boostcoeff*vbias); boostcoeff -= alpha * (maxboost_region-boosttarget) / boosttarget; - // COMMENT OUT for now + // COMMENT OUT for now - need better way to bound boostcoeff //boostcoeff = MIN(boostcoeff,COEFFMAX); myboost += boostcoeff; maxboostcoeff = MAX(maxboostcoeff,boostcoeff); @@ -954,40 +808,6 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) } } } - - // DEBUG timing output - // examine these timings for new hyper/local before delete this code - // verify that boost cooefs stay in sync for 2 copies of each bond - // before delete this code - - /* - time8 = MPI_Wtime(); - - timefirst += time2-time1; - timesecond += time3-time2; - timethird += time4-time3; - timefourth += time5-time4; - timefifth += time6-time5; - timesixth += time7-time6; - timeseventh += time8-time7; - timetotal += time8-time1; - - double bpera = compute_vector(6); - double nbperb = compute_vector(7); - - if (update->ntimestep == 10000 && me == 0) { - printf("TIME First %g\n",timefirst); - printf("TIME Second %g\n",timesecond); - printf("TIME Third %g\n",timethird); - printf("TIME Fourth %g\n",timefourth); - printf("TIME Fifth %g\n",timefifth); - printf("TIME Sixth %g\n",timesixth); - printf("TIME Seventh %g\n",timeseventh); - printf("TIME Total %g\n",timetotal); - printf("Bonds/atom, neigh-bonds/bond %g %g\n",bpera,nbperb); - also print nbondbuild and tbondbuild - } - */ } /* ---------------------------------------------------------------------- */ diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index cd8e66447a..9e7dc34b13 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -40,7 +40,9 @@ enum{NOHYPER,GLOBAL,LOCAL}; /* ---------------------------------------------------------------------- */ -Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp) {} +Hyper::Hyper(LAMMPS *lmp) : + Pointers(lmp), dumplist(NULL) +{} /* ---------------------------------------------------------------------- perform hyperdynamics simulation From 8e9d4f5bce04ad937fe3fa1250d1906a79b4bd45 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 16:06:55 -0500 Subject: [PATCH 099/273] modify bond style hybrid, so it can handle bond style quartic as a sub-style --- src/bond_hybrid.cpp | 20 ++++++++++++++++++++ src/bond_hybrid.h | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index c3a71ee71c..1b150b8b34 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -33,6 +33,7 @@ BondHybrid::BondHybrid(LAMMPS *lmp) : Bond(lmp) { writedata = 0; nstyles = 0; + has_quartic = -1; } /* ---------------------------------------------------------------------- */ @@ -171,6 +172,7 @@ void BondHybrid::settings(int narg, char **arg) delete [] styles; for (int i = 0; i < nstyles; i++) delete [] keywords[i]; delete [] keywords; + has_quartic = -1; } if (allocated) { @@ -214,14 +216,26 @@ void BondHybrid::settings(int narg, char **arg) i = 0; while (i < narg) { + for (m = 0; m < nstyles; m++) if (strcmp(arg[i],keywords[m]) == 0) error->all(FLERR,"Bond style hybrid cannot use same bond style twice"); + if (strcmp(arg[i],"hybrid") == 0) error->all(FLERR,"Bond style hybrid cannot have hybrid as an argument"); + if (strcmp(arg[i],"none") == 0) error->all(FLERR,"Bond style hybrid cannot have none as an argument"); + if (strcmp(arg[i],"none") == 0) + error->all(FLERR,"Bond style hybrid cannot have none as an argument"); + + // register index of quartic bond type, + // so that bond type 0 can be mapped to it + + if (strncmp(arg[i],"quartic",7) == 0) + has_quartic = m; + styles[nstyles] = force->new_bond(arg[i],1,dummy); force->store_style(keywords[nstyles],arg[i],0); @@ -283,6 +297,12 @@ void BondHybrid::init_style() { for (int m = 0; m < nstyles; m++) if (styles[m]) styles[m]->init_style(); + + // bond style quartic will set broken bonds to bond type 0, so we need + // to create an entry for it in the bond type to sub-style map + + if (has_quartic >= 0) + map[0] = has_quartic; } /* ---------------------------------------------------------------------- diff --git a/src/bond_hybrid.h b/src/bond_hybrid.h index a385a2e3f8..e51d467ac1 100644 --- a/src/bond_hybrid.h +++ b/src/bond_hybrid.h @@ -47,7 +47,7 @@ class BondHybrid : public Bond { private: int *map; // which style each bond type points to - + int has_quartic; // which style, if any is a quartic bond style int *nbondlist; // # of bonds in sub-style bondlists int *maxbond; // max # of bonds sub-style lists can store int ***bondlist; // bondlist for each sub-style From b3f08b38a23b8250326e1d4f72d350f2609a817f Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 12 Nov 2018 15:16:26 -0700 Subject: [PATCH 100/273] Update Kokkos library in LAMMPS to v2.7.24 --- lib/kokkos/CHANGELOG.md | 63 + lib/kokkos/CMakeLists.txt | 7 +- lib/kokkos/Makefile.kokkos | 99 +- lib/kokkos/README | 33 +- lib/kokkos/algorithms/src/Kokkos_Random.hpp | 6 + lib/kokkos/algorithms/src/Kokkos_Sort.hpp | 10 +- lib/kokkos/benchmarks/gups/Makefile | 41 + lib/kokkos/benchmarks/gups/gups-kokkos.cc | 199 + lib/kokkos/benchmarks/stream/Makefile | 41 + lib/kokkos/benchmarks/stream/stream-kokkos.cc | 265 + lib/kokkos/bin/hpcbind | 66 +- lib/kokkos/bin/nvcc_wrapper | 111 +- lib/kokkos/cmake/kokkos_build.cmake | 4 + lib/kokkos/cmake/kokkos_functions.cmake | 2 +- lib/kokkos/cmake/kokkos_options.cmake | 13 +- lib/kokkos/cmake/kokkos_settings.cmake | 9 +- lib/kokkos/config/test_all_sandia | 11 +- lib/kokkos/containers/src/Kokkos_DualView.hpp | 329 +- .../containers/src/Kokkos_DynRankView.hpp | 96 +- .../containers/src/Kokkos_OffsetView.hpp | 1895 ++ .../containers/src/Kokkos_StaticCrsGraph.hpp | 4 +- lib/kokkos/containers/src/Kokkos_Vector.hpp | 16 +- .../containers/unit_tests/CMakeLists.txt | 4 + lib/kokkos/containers/unit_tests/Makefile | 5 + .../containers/unit_tests/TestDynViewAPI.hpp | 64 + .../containers/unit_tests/TestOffsetView.hpp | 426 + .../containers/unit_tests/TestScatterView.hpp | 27 +- .../unit_tests/TestStaticCrsGraph.hpp | 1 + .../unit_tests/cuda/TestCuda_OffsetView.cpp | 47 + .../openmp/TestOpenMP_OffsetView.cpp | 47 + .../unit_tests/rocm/TestROCm_Category.hpp | 2 +- .../serial/TestSerial_OffsetView.cpp | 46 + .../threads/TestThreads_OffsetView.cpp | 47 + lib/kokkos/core/src/CMakeLists.txt | 4 + lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp | 8 +- lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp | 7 + lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp | 6 +- .../core/src/Cuda/Kokkos_Cuda_Internal.hpp | 223 +- .../core/src/Cuda/Kokkos_Cuda_Locks.hpp | 3 + .../core/src/Cuda/Kokkos_Cuda_Parallel.hpp | 238 +- .../core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp | 319 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp | 124 +- .../Kokkos_Cuda_Version_9_8_Compatibility.hpp | 13 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp | 5 +- .../core/src/KokkosExp_MDRangePolicy.hpp | 6 +- lib/kokkos/core/src/Kokkos_Array.hpp | 8 +- lib/kokkos/core/src/Kokkos_Concepts.hpp | 5 +- lib/kokkos/core/src/Kokkos_CopyViews.hpp | 252 +- lib/kokkos/core/src/Kokkos_ExecPolicy.hpp | 8 + lib/kokkos/core/src/Kokkos_Layout.hpp | 146 + lib/kokkos/core/src/Kokkos_Macros.hpp | 7 +- .../core/src/Kokkos_Parallel_Reduce.hpp | 17 +- lib/kokkos/core/src/Kokkos_ScratchSpace.hpp | 49 + lib/kokkos/core/src/Kokkos_Serial.hpp | 22 +- lib/kokkos/core/src/Kokkos_TaskScheduler.hpp | 2 - lib/kokkos/core/src/Kokkos_View.hpp | 1105 +- lib/kokkos/core/src/Makefile | 36 +- .../core/src/Makefile.generate_build_files | 34 +- .../core/src/OpenMP/Kokkos_OpenMP_Task.cpp | 4 - .../core/src/OpenMP/Kokkos_OpenMP_Team.hpp | 65 +- .../OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp | 3 +- .../core/src/ROCm/Kokkos_ROCm_Config.hpp | 4 +- lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp | 25 +- lib/kokkos/core/src/ROCm/Kokkos_ROCm_Impl.cpp | 21 +- .../core/src/ROCm/Kokkos_ROCm_Parallel.hpp | 387 +- .../core/src/ROCm/Kokkos_ROCm_Reduce.hpp | 9 +- .../core/src/ROCm/Kokkos_ROCm_ReduceScan.hpp | 222 +- lib/kokkos/core/src/ROCm/Kokkos_ROCm_Scan.hpp | 120 +- .../core/src/ROCm/Kokkos_ROCm_Space.cpp | 4 + lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp | 5 +- .../core/src/Threads/Kokkos_ThreadsTeam.hpp | 105 +- ...IInst_int64_t_double_LayoutLeft_Rank1.cpp} | 0 ...IInst_int64_t_double_LayoutLeft_Rank2.cpp} | 0 ...IInst_int64_t_double_LayoutLeft_Rank3.cpp} | 0 ...IInst_int64_t_double_LayoutLeft_Rank4.cpp} | 0 ...IInst_int64_t_double_LayoutLeft_Rank5.cpp} | 0 ...IInst_int64_t_double_LayoutLeft_Rank8.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank1.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank2.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank3.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank4.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank5.cpp} | 0 ...Inst_int64_t_double_LayoutRight_Rank8.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank1.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank2.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank3.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank4.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank5.cpp} | 0 ...nst_int64_t_double_LayoutStride_Rank8.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank1.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank2.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank3.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank4.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank5.cpp} | 0 ...TIInst_int64_t_float_LayoutLeft_Rank8.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank1.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank2.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank3.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank4.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank5.cpp} | 0 ...IInst_int64_t_float_LayoutRight_Rank8.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank1.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank2.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank3.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank4.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank5.cpp} | 0 ...Inst_int64_t_float_LayoutStride_Rank8.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank1.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank2.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank3.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank4.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank5.cpp} | 0 ...Inst_int64_t_int64_t_LayoutLeft_Rank8.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank1.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank2.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank3.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank4.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank5.cpp} | 0 ...nst_int64_t_int64_t_LayoutRight_Rank8.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank1.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank2.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank3.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank4.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank5.cpp} | 0 ...st_int64_t_int64_t_LayoutStride_Rank8.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank1.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank2.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank3.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank4.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank5.cpp} | 0 ...yETIInst_int64_t_int_LayoutLeft_Rank8.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank1.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank2.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank3.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank4.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank5.cpp} | 0 ...ETIInst_int64_t_int_LayoutRight_Rank8.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank1.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank2.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank3.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank4.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank5.cpp} | 0 ...TIInst_int64_t_int_LayoutStride_Rank8.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank1.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank2.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank3.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank4.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank5.cpp} | 0 ...pyETIInst_int_double_LayoutLeft_Rank8.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank1.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank2.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank3.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank4.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank5.cpp} | 0 ...yETIInst_int_double_LayoutRight_Rank8.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank1.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank2.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank3.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank4.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank5.cpp} | 0 ...ETIInst_int_double_LayoutStride_Rank8.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank1.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank2.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank3.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank4.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank5.cpp} | 0 ...opyETIInst_int_float_LayoutLeft_Rank8.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank1.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank2.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank3.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank4.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank5.cpp} | 0 ...pyETIInst_int_float_LayoutRight_Rank8.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank1.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank2.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank3.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank4.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank5.cpp} | 0 ...yETIInst_int_float_LayoutStride_Rank8.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank1.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank2.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank3.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank4.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank5.cpp} | 0 ...yETIInst_int_int64_t_LayoutLeft_Rank8.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank1.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank2.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank3.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank4.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank5.cpp} | 0 ...ETIInst_int_int64_t_LayoutRight_Rank8.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank1.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank2.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank3.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank4.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank5.cpp} | 0 ...TIInst_int_int64_t_LayoutStride_Rank8.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank1.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank2.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank3.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank4.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank5.cpp} | 0 ...wCopyETIInst_int_int_LayoutLeft_Rank8.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank1.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank2.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank3.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank4.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank5.cpp} | 0 ...CopyETIInst_int_int_LayoutRight_Rank8.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank1.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank2.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank3.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank4.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank5.cpp} | 0 ...opyETIInst_int_int_LayoutStride_Rank8.cpp} | 0 .../eti/ROCm/Makefile.eti_Experimental::ROCm | 288 - .../core/src/eti/ROCm/Makefile.eti_ROCm | 288 + .../Kokkos_Atomic_Compare_Exchange_Strong.hpp | 13 +- .../core/src/impl/Kokkos_Atomic_Exchange.hpp | 13 +- .../core/src/impl/Kokkos_Atomic_Fetch_Add.hpp | 14 +- .../core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp | 13 +- .../core/src/impl/Kokkos_Atomic_Generic.hpp | 26 +- .../core/src/impl/Kokkos_Atomic_Windows.hpp | 12 +- lib/kokkos/core/src/impl/Kokkos_Core.cpp | 16 +- lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp | 2 + lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp | 2 + .../core/src/impl/Kokkos_HostThreadTeam.hpp | 33 +- lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp | 15 +- .../core/src/impl/Kokkos_Serial_Task.cpp | 20 +- lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp | 114 +- .../core/src/impl/Kokkos_ViewLayoutTiled.hpp | 945 + .../core/src/impl/Kokkos_ViewMapping.hpp | 303 +- lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp | 4 +- lib/kokkos/core/src/impl/Kokkos_hwloc.cpp | 26 +- lib/kokkos/core/src/kokkos.pc.in | 71 + lib/kokkos/core/unit_test/CMakeLists.txt | 2 + lib/kokkos/core/unit_test/Makefile | 52 +- lib/kokkos/core/unit_test/TestAtomic.hpp | 11 +- lib/kokkos/core/unit_test/TestCXX11.hpp | 16 +- lib/kokkos/core/unit_test/TestComplex.hpp | 2 +- lib/kokkos/core/unit_test/TestMDRange.hpp | 212 + lib/kokkos/core/unit_test/TestMDRange_a.hpp | 4 + lib/kokkos/core/unit_test/TestMDRange_b.hpp | 3 +- lib/kokkos/core/unit_test/TestMDRange_c.hpp | 4 +- lib/kokkos/core/unit_test/TestMDRange_d.hpp | 4 + lib/kokkos/core/unit_test/TestMDRange_e.hpp | 4 + lib/kokkos/core/unit_test/TestMemoryPool.hpp | 2 + lib/kokkos/core/unit_test/TestReduce.hpp | 3 + .../core/unit_test/TestReduceDeviceView.hpp | 131 + lib/kokkos/core/unit_test/TestReducers.hpp | 14 +- lib/kokkos/core/unit_test/TestScan.hpp | 12 +- lib/kokkos/core/unit_test/TestTeam.hpp | 169 +- .../core/unit_test/TestTeamTeamSize.hpp | 146 + lib/kokkos/core/unit_test/TestTeamVector.hpp | 68 +- lib/kokkos/core/unit_test/TestViewAPI_a.hpp | 2 - lib/kokkos/core/unit_test/TestViewAPI_b.hpp | 2 - lib/kokkos/core/unit_test/TestViewAPI_c.hpp | 2 - lib/kokkos/core/unit_test/TestViewAPI_d.hpp | 2 - lib/kokkos/core/unit_test/TestViewCopy.hpp | 155 + .../TestViewLayoutStrideAssignment.hpp | 740 + .../core/unit_test/TestViewLayoutTiled.hpp | 1215 + .../cuda/TestCudaHostPinned_ViewCopy.cpp | 45 + .../unit_test/cuda/TestCudaUVM_ViewCopy.cpp | 45 + .../core/unit_test/cuda/TestCuda_Other.cpp | 1 + .../cuda/TestCuda_Reductions_DeviceView.cpp | 45 + .../core/unit_test/cuda/TestCuda_Team.cpp | 16 + .../unit_test/cuda/TestCuda_TeamScratch.cpp | 4 + .../unit_test/cuda/TestCuda_TeamTeamSize.cpp | 45 + .../TestCuda_ViewLayoutStrideAssignment.cpp | 46 + .../unit_test/openmp/TestOpenMP_Other.cpp | 1 + .../TestOpenMP_Reductions_DeviceView.cpp | 45 + .../core/unit_test/openmp/TestOpenMP_Team.cpp | 15 + .../openmp/TestOpenMP_TeamScratch.cpp | 3 + .../openmp/TestOpenMP_TeamTeamSize.cpp | 46 + .../TestOpenMP_ViewLayoutStrideAssignment.cpp | 46 + .../rocm/TestROCmHostPinned_ViewCopy.cpp | 45 + .../core/unit_test/rocm/TestROCm_Crs.cpp | 47 + .../rocm/TestROCm_MDRangeReduce_a.cpp | 54 + .../rocm/TestROCm_MDRangeReduce_b.cpp | 54 + .../rocm/TestROCm_MDRangeReduce_c.cpp | 54 + .../rocm/TestROCm_MDRangeReduce_d.cpp | 54 + .../rocm/TestROCm_MDRangeReduce_e.cpp | 54 + .../unit_test/rocm/TestROCm_SubView_c13.cpp | 54 + .../rocm/TestROCm_TeamReductionScan.cpp | 2 - .../unit_test/rocm/TestROCm_TeamScratch.cpp | 4 + .../unit_test/rocm/TestROCm_TeamTeamSize.cpp | 49 + .../unit_test/serial/TestSerial_Other.cpp | 1 + .../TestSerial_Reductions_DeviceView.cpp | 45 + .../core/unit_test/serial/TestSerial_Team.cpp | 15 + .../serial/TestSerial_TeamScratch.cpp | 4 + .../serial/TestSerial_TeamTeamSize.cpp | 45 + .../TestSerial_ViewLayoutStrideAssignment.cpp | 46 + lib/kokkos/core/unit_test/standalone/Makefile | 55 + .../unit_test/standalone/UnitTestMainInit.cpp | 71 + .../unit_test/threads/TestThreads_Other.cpp | 1 + .../TestThreads_Reductions_DeviceView.cpp | 45 + .../unit_test/threads/TestThreads_Team.cpp | 15 + .../threads/TestThreads_TeamScratch.cpp | 4 + .../threads/TestThreads_TeamTeamSize.cpp | 47 + ...TestThreads_ViewLayoutStrideAssignment.cpp | 46 + lib/kokkos/doc/kokkos-promotion.txt | 24 +- .../01_thread_teams/thread_teams.cpp | 21 +- .../nested_parallel_for.cpp | 3 +- lib/kokkos/example/virtual_functions/Makefile | 55 + .../example/virtual_functions/classes.cpp | 26 + .../example/virtual_functions/classes.hpp | 39 + lib/kokkos/example/virtual_functions/main.cpp | 36 + lib/kokkos/generate_makefile.bash | 23 +- lib/kokkos/master_history.txt | 1 + .../eti/generate_view_copy_cpp_files_write | 8 +- .../scripts/testing_scripts/test_all_sandia | 790 + ...=> blake_jenkins_run_script_pthread_intel} | 11 +- ... => blake_jenkins_run_script_serial_intel} | 11 +- .../white_run_jenkins_script_cuda | 6 +- .../white_run_jenkins_script_omp | 6 +- lib/kokkos/tpls/gtest/gtest/LICENSE | 28 + lib/kokkos/tpls/gtest/gtest/README | 13 + lib/kokkos/tpls/gtest/gtest/gtest-all.cc | 9594 ++++++++ lib/kokkos/tpls/gtest/gtest/gtest-test-part.h | 1 + lib/kokkos/tpls/gtest/gtest/gtest.h | 20065 ++++++++++++++++ 320 files changed, 42934 insertions(+), 1993 deletions(-) create mode 100644 lib/kokkos/benchmarks/gups/Makefile create mode 100644 lib/kokkos/benchmarks/gups/gups-kokkos.cc create mode 100644 lib/kokkos/benchmarks/stream/Makefile create mode 100644 lib/kokkos/benchmarks/stream/stream-kokkos.cc create mode 100644 lib/kokkos/containers/src/Kokkos_OffsetView.hpp create mode 100644 lib/kokkos/containers/unit_tests/TestOffsetView.hpp create mode 100644 lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp create mode 100644 lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp create mode 100644 lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp create mode 100644 lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp} (100%) rename lib/kokkos/core/src/eti/ROCm/{Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp => Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp} (100%) delete mode 100644 lib/kokkos/core/src/eti/ROCm/Makefile.eti_Experimental::ROCm create mode 100644 lib/kokkos/core/src/eti/ROCm/Makefile.eti_ROCm create mode 100644 lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp create mode 100644 lib/kokkos/core/src/kokkos.pc.in create mode 100644 lib/kokkos/core/unit_test/TestReduceDeviceView.hpp create mode 100644 lib/kokkos/core/unit_test/TestTeamTeamSize.hpp create mode 100644 lib/kokkos/core/unit_test/TestViewCopy.hpp create mode 100644 lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp create mode 100644 lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_Reductions_DeviceView.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_TeamTeamSize.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_ViewLayoutStrideAssignment.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_Reductions_DeviceView.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamTeamSize.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_ViewLayoutStrideAssignment.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCmHostPinned_ViewCopy.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_Crs.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_a.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_b.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_c.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_d.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_e.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_SubView_c13.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_TeamTeamSize.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_Reductions_DeviceView.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_TeamTeamSize.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_ViewLayoutStrideAssignment.cpp create mode 100644 lib/kokkos/core/unit_test/standalone/Makefile create mode 100644 lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_Reductions_DeviceView.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_TeamTeamSize.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_ViewLayoutStrideAssignment.cpp create mode 100644 lib/kokkos/example/virtual_functions/Makefile create mode 100644 lib/kokkos/example/virtual_functions/classes.cpp create mode 100644 lib/kokkos/example/virtual_functions/classes.hpp create mode 100644 lib/kokkos/example/virtual_functions/main.cpp create mode 100755 lib/kokkos/scripts/testing_scripts/test_all_sandia rename lib/kokkos/scripts/trilinos-integration/{shepard_jenkins_run_script_pthread_intel => blake_jenkins_run_script_pthread_intel} (82%) rename lib/kokkos/scripts/trilinos-integration/{shepard_jenkins_run_script_serial_intel => blake_jenkins_run_script_serial_intel} (82%) create mode 100644 lib/kokkos/tpls/gtest/gtest/LICENSE create mode 100644 lib/kokkos/tpls/gtest/gtest/README create mode 100644 lib/kokkos/tpls/gtest/gtest/gtest-all.cc create mode 120000 lib/kokkos/tpls/gtest/gtest/gtest-test-part.h create mode 100644 lib/kokkos/tpls/gtest/gtest/gtest.h diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 145cc62706..5564096ea1 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,5 +1,68 @@ # Change Log +## [2.7.24](https://github.com/kokkos/kokkos/tree/2.7.24) (2018-11-04) +[Full Changelog](https://github.com/kokkos/kokkos/compare/2.7.00...2.7.24) + +**Implemented enhancements:** + +- DualView: Add non-templated functions for sync, need\_sync, view, modify [\#1858](https://github.com/kokkos/kokkos/issues/1858) +- DualView: Avoid needlessly allocates and initializes modify\_host and modify\_device flag views [\#1831](https://github.com/kokkos/kokkos/issues/1831) +- DualView: Incorrect deduction of "not device type" [\#1659](https://github.com/kokkos/kokkos/issues/1659) +- BuildSystem: Add KOKKOS\_ENABLE\_CXX14 and KOKKOS\_ENABLE\_CXX17 [\#1602](https://github.com/kokkos/kokkos/issues/1602) +- BuildSystem: Installed kokkos\_generated\_settings.cmake contains build directories instead of install directories [\#1838](https://github.com/kokkos/kokkos/issues/1838) +- BuildSystem: KOKKOS\_ARCH: add ticks to printout of improper arch setting [\#1649](https://github.com/kokkos/kokkos/issues/1649) +- BuildSystem: Make core/src/Makefile for Cuda use needed nvcc\_wrapper [\#1296](https://github.com/kokkos/kokkos/issues/1296) +- Build: Support PGI as host compiler for NVCC [\#1828](https://github.com/kokkos/kokkos/issues/1828) +- Build: Many Warnings Fixed e.g.[\#1786](https://github.com/kokkos/kokkos/issues/1786) +- Capability: OffsetView with non-zero begin index [\#567](https://github.com/kokkos/kokkos/issues/567) +- Capability: Reductions into device side view [\#1788](https://github.com/kokkos/kokkos/issues/1788) +- Capability: Add max\_size to Kokkos::Array [\#1760](https://github.com/kokkos/kokkos/issues/1760) +- Capability: View Assignment: LayoutStride -\> LayoutLeft and LayoutStride -\> LayoutRight [\#1594](https://github.com/kokkos/kokkos/issues/1594) +- Capability: Atomic function allow implicit conversion of update argument [\#1571](https://github.com/kokkos/kokkos/issues/1571) +- Capability: Add team\_size\_max with tagged functors [\#663](https://github.com/kokkos/kokkos/issues/663) +- Capability: Fix allignment of views from Kokkos\_ScratchSpace should use different alignment [\#1700](https://github.com/kokkos/kokkos/issues/1700) +- Capabilitiy: create\_mirror\_view\_and\_copy for DynRankView [\#1651](https://github.com/kokkos/kokkos/issues/1651) +- Capability: DeepCopy HBWSpace / HostSpace [\#548](https://github.com/kokkos/kokkos/issues/548) +- ROCm: support team vector scan [\#1645](https://github.com/kokkos/kokkos/issues/1645) +- ROCm: Merge from rocm-hackathon2 [\#1636](https://github.com/kokkos/kokkos/issues/1636) +- ROCm: Add ParallelScanWithTotal [\#1611](https://github.com/kokkos/kokkos/issues/1611) +- ROCm: Implement MDRange in ROCm [\#1314](https://github.com/kokkos/kokkos/issues/1314) +- ROCm: Implement Reducers for Nested Parallelism Levels [\#963](https://github.com/kokkos/kokkos/issues/963) +- ROCm: Add asynchronous deep copy [\#959](https://github.com/kokkos/kokkos/issues/959) +- Tests: Memory pool test seems to allocate 8GB [\#1830](https://github.com/kokkos/kokkos/issues/1830) +- Tests: Add unit\_test for team\_broadcast [\#734](https://github.com/kokkos/kokkos/issues/734) + +**Fixed bugs:** + +- BuildSystem: Makefile.kokkos gets gcc-toolchain wrong if gcc is cached [\#1841](https://github.com/kokkos/kokkos/issues/1841) +- BuildSystem: kokkos\_generated\_settings.cmake placement is inconsistent [\#1771](https://github.com/kokkos/kokkos/issues/1771) +- BuildSystem: Invalid escape sequence \. in kokkos\_functions.cmake [\#1661](https://github.com/kokkos/kokkos/issues/1661) +- BuildSystem: Problem in Kokkos generated cmake file [\#1770](https://github.com/kokkos/kokkos/issues/1770) +- BuildSystem: invalid file names on windows [\#1671](https://github.com/kokkos/kokkos/issues/1671) +- Tests: reducers min/max\_loc test fails randomly due to multiple min values and thus multiple valid locations [\#1681](https://github.com/kokkos/kokkos/issues/1681) +- Tests: cuda.scatterview unit test causes "Bus error" when force\_uvm and enable\_lambda are enabled [\#1852](https://github.com/kokkos/kokkos/issues/1852) +- Tests: cuda.cxx11 unit test fails when force\_uvm and enable\_lambda are enabled [\#1850](https://github.com/kokkos/kokkos/issues/1850) +- Tests: threads.reduce\_device\_view\_range\_policy failing with Cuda/8.0.44 and RDC [\#1836](https://github.com/kokkos/kokkos/issues/1836) +- Build: compile error when compiling Kokkos with hwloc 2.0.1 \(on OSX 10.12.6, with g++ 7.2.0\) [\#1506](https://github.com/kokkos/kokkos/issues/1506) +- Build: dual\_view.view broken with UVM [\#1834](https://github.com/kokkos/kokkos/issues/1834) +- Build: White cuda/9.2 + gcc/7.2 warnings triggering errors [\#1833](https://github.com/kokkos/kokkos/issues/1833) +- Build: warning: enum constant in boolean context [\#1813](https://github.com/kokkos/kokkos/issues/1813) +- Capability: Fix overly conservative max\_team\_size thingy [\#1808](https://github.com/kokkos/kokkos/issues/1808) +- DynRankView: Ctors taking ViewAllocateWithoutInitializing broken [\#1783](https://github.com/kokkos/kokkos/issues/1783) +- Cuda: Apollo cuda.team\_broadcast test fail with clang-6.0 [\#1762](https://github.com/kokkos/kokkos/issues/1762) +- Cuda: Clang spurious test failure in impl\_view\_accessible [\#1753](https://github.com/kokkos/kokkos/issues/1753) +- Cuda: Kokkos::complex\ atomic deadlocks with Clang 6 Cuda build with -O0 [\#1752](https://github.com/kokkos/kokkos/issues/1752) +- Cuda: LayoutStride Test fails for UVM as default memory space [\#1688](https://github.com/kokkos/kokkos/issues/1688) +- Cuda: Scan wrong values on Volta [\#1676](https://github.com/kokkos/kokkos/issues/1676) +- Cuda: Kokkos::deep\_copy error with CudaUVM and Kokkos::Serial spaces [\#1652](https://github.com/kokkos/kokkos/issues/1652) +- Cuda: cudaErrorInvalidConfiguration with debug build [\#1647](https://github.com/kokkos/kokkos/issues/1647) +- Cuda: parallel\_for with TeamPolicy::team\_size\_recommended with launch bounds not working -- reported by Daniel Holladay [\#1283](https://github.com/kokkos/kokkos/issues/1283) +- Cuda: Using KOKKOS\_CLASS\_LAMBDA in a class with Kokkos::Random\_XorShift64\_Pool member data [\#1696](https://github.com/kokkos/kokkos/issues/1696) +- Long Build Times on Darwin [\#1721](https://github.com/kokkos/kokkos/issues/1721) +- Capability: Typo in Kokkos\_Sort.hpp - BinOp3D - wrong comparison [\#1720](https://github.com/kokkos/kokkos/issues/1720) +- Buffer overflow in SharedAllocationRecord in Kokkos\_HostSpace.cpp [\#1673](https://github.com/kokkos/kokkos/issues/1673) +- Serial unit test failure [\#1632](https://github.com/kokkos/kokkos/issues/1632) + ## [2.7.00](https://github.com/kokkos/kokkos/tree/2.7.00) (2018-05-24) [Full Changelog](https://github.com/kokkos/kokkos/compare/2.6.00...2.7.00) diff --git a/lib/kokkos/CMakeLists.txt b/lib/kokkos/CMakeLists.txt index 9e5308f1c3..236f523aec 100644 --- a/lib/kokkos/CMakeLists.txt +++ b/lib/kokkos/CMakeLists.txt @@ -11,7 +11,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) # Define Project Name if this is a standalone build IF(NOT DEFINED ${PROJECT_NAME}) - project(Kokkos CXX) + project(Kokkos CXX) ENDIF() # Basic initialization (Used in KOKKOS_SETTINGS) @@ -22,7 +22,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) include(${KOKKOS_SRC_PATH}/cmake/kokkos_functions.cmake) set_kokkos_cxx_compiler() set_kokkos_cxx_standard() - + #------------ GET OPTIONS AND KOKKOS_SETTINGS -------------------------------- # Add Kokkos' modules to CMake's module path. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${Kokkos_SOURCE_DIR}/cmake/Modules/") @@ -34,7 +34,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) #------------ GENERATE HEADER AND SOURCE FILES ------------------------------- execute_process( - COMMAND ${KOKKOS_SETTINGS} make -f ${KOKKOS_SRC_PATH}/cmake/Makefile.generate_cmake_settings CXX=${CMAKE_CXX_COMPILER} generate_build_settings + COMMAND ${KOKKOS_SETTINGS} make -f ${KOKKOS_SRC_PATH}/cmake/Makefile.generate_cmake_settings CXX=${CMAKE_CXX_COMPILER} PREFIX=${CMAKE_INSTALL_PREFIX} generate_build_settings WORKING_DIRECTORY "${Kokkos_BINARY_DIR}" OUTPUT_FILE ${Kokkos_BINARY_DIR}/core_src_make.out RESULT_VARIABLE GEN_SETTINGS_RESULT @@ -45,6 +45,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) endif() include(${Kokkos_BINARY_DIR}/kokkos_generated_settings.cmake) install(FILES ${Kokkos_BINARY_DIR}/kokkos_generated_settings.cmake DESTINATION lib/cmake/Kokkos) + install(FILES ${Kokkos_BINARY_DIR}/kokkos_generated_settings.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}) string(REPLACE " " ";" KOKKOS_TPL_INCLUDE_DIRS "${KOKKOS_GMAKE_TPL_INCLUDE_DIRS}") string(REPLACE " " ";" KOKKOS_TPL_LIBRARY_DIRS "${KOKKOS_GMAKE_TPL_LIBRARY_DIRS}") string(REPLACE " " ";" KOKKOS_TPL_LIBRARY_NAMES "${KOKKOS_GMAKE_TPL_LIBRARY_NAMES}") diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index 52cd3969f9..05f3cf7811 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -1,14 +1,8 @@ # Default settings common options. -#LAMMPS specific settings: -ifndef KOKKOS_PATH - KOKKOS_PATH=../../lib/kokkos -endif -CXXFLAGS=$(CCFLAGS) - -# Options: Cuda,ROCm,OpenMP,Pthreads,Qthreads,Serial -KOKKOS_DEVICES ?= "OpenMP" -#KOKKOS_DEVICES ?= "Pthreads" +# Options: Cuda,ROCm,OpenMP,Pthread,Qthreads,Serial +#KOKKOS_DEVICES ?= "OpenMP" +KOKKOS_DEVICES ?= "Pthread" # Options: # Intel: KNC,KNL,SNB,HSW,BDW,SKX # NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72 @@ -21,16 +15,17 @@ KOKKOS_ARCH ?= "" KOKKOS_DEBUG ?= "no" # Options: hwloc,librt,experimental_memkind KOKKOS_USE_TPLS ?= "" -# Options: c++11,c++1z +# Options: c++11,c++14,c++1y,c++17,c++1z,c++2a KOKKOS_CXX_STANDARD ?= "c++11" # Options: aggressive_vectorization,disable_profiling,disable_deprecated_code,enable_large_mem_tests KOKKOS_OPTIONS ?= "" # Option for setting ETI path KOKKOS_ETI_PATH ?= ${KOKKOS_PATH}/core/src/eti +KOKKOS_CMAKE ?= "no" # Default settings specific options. # Options: force_uvm,use_ldg,rdc,enable_lambda -KOKKOS_CUDA_OPTIONS ?= "enable_lambda" +KOKKOS_CUDA_OPTIONS ?= "" # Return a 1 if a string contains a substring and 0 if not # Note the search string should be without '"' @@ -41,7 +36,11 @@ kokkos_has_string=$(if $(findstring $2,$1),1,0) # Check for general settings. KOKKOS_INTERNAL_ENABLE_DEBUG := $(call kokkos_has_string,$(KOKKOS_DEBUG),yes) KOKKOS_INTERNAL_ENABLE_CXX11 := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++11) +KOKKOS_INTERNAL_ENABLE_CXX14 := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++14) +KOKKOS_INTERNAL_ENABLE_CXX1Y := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++1y) +KOKKOS_INTERNAL_ENABLE_CXX17 := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++17) KOKKOS_INTERNAL_ENABLE_CXX1Z := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++1z) +KOKKOS_INTERNAL_ENABLE_CXX2A := $(call kokkos_has_string,$(KOKKOS_CXX_STANDARD),c++2a) # Check for external libraries. KOKKOS_INTERNAL_USE_HWLOC := $(call kokkos_has_string,$(KOKKOS_USE_TPLS),hwloc) @@ -110,6 +109,18 @@ KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VE KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),apple-darwin) KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC) +# Check Host Compiler if using NVCC through nvcc_wrapper +ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) + KOKKOS_INTERNAL_COMPILER_NVCC_WRAPPER := $(strip $(shell echo $(CXX) | grep nvcc_wrapper | wc -l)) + ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC_WRAPPER), 1) + + KOKKOS_CXX_HOST_VERSION := $(strip $(shell $(CXX) $(CXXFLAGS) --host-version 2>&1)) + KOKKOS_INTERNAL_COMPILER_PGI := $(call kokkos_has_string,$(KOKKOS_CXX_HOST_VERSION),PGI) + KOKKOS_INTERNAL_COMPILER_INTEL := $(call kokkos_has_string,$(KOKKOS_CXX_HOST_VERSION),Intel Corporation) + KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_HOST_VERSION),clang) + endif +endif + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 2) KOKKOS_INTERNAL_COMPILER_CLANG = 1 endif @@ -202,18 +213,34 @@ endif # Set C++11 flags. ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1) KOKKOS_INTERNAL_CXX11_FLAG := --c++11 + KOKKOS_INTERNAL_CXX14_FLAG := --c++14 + #KOKKOS_INTERNAL_CXX17_FLAG := --c++17 else ifeq ($(KOKKOS_INTERNAL_COMPILER_XL), 1) KOKKOS_INTERNAL_CXX11_FLAG := -std=c++11 + #KOKKOS_INTERNAL_CXX14_FLAG := -std=c++14 + KOKKOS_INTERNAL_CXX1Y_FLAG := -std=c++1y + #KOKKOS_INTERNAL_CXX17_FLAG := -std=c++17 + #KOKKOS_INTERNAL_CXX1Z_FLAG := -std=c++1Z + #KOKKOS_INTERNAL_CXX2A_FLAG := -std=c++2a else ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) KOKKOS_INTERNAL_CXX11_FLAG := -hstd=c++11 + KOKKOS_INTERNAL_CXX14_FLAG := -hstd=c++14 + #KOKKOS_INTERNAL_CXX1Y_FLAG := -hstd=c++1y + #KOKKOS_INTERNAL_CXX17_FLAG := -hstd=c++17 + #KOKKOS_INTERNAL_CXX1Z_FLAG := -hstd=c++1z + #KOKKOS_INTERNAL_CXX2A_FLAG := -hstd=c++2a else ifeq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) KOKKOS_INTERNAL_CXX11_FLAG := else KOKKOS_INTERNAL_CXX11_FLAG := --std=c++11 + KOKKOS_INTERNAL_CXX14_FLAG := --std=c++14 + KOKKOS_INTERNAL_CXX1Y_FLAG := --std=c++1y + KOKKOS_INTERNAL_CXX17_FLAG := --std=c++17 KOKKOS_INTERNAL_CXX1Z_FLAG := --std=c++1z + KOKKOS_INTERNAL_CXX2A_FLAG := --std=c++2a endif endif endif @@ -336,7 +363,9 @@ endif #CPPFLAGS is now unused KOKKOS_CPPFLAGS = -KOKKOS_CXXFLAGS = -I./ -I$(KOKKOS_PATH)/core/src -I$(KOKKOS_PATH)/containers/src -I$(KOKKOS_PATH)/algorithms/src -I$(KOKKOS_ETI_PATH) +ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_CXXFLAGS = -I./ -I$(KOKKOS_PATH)/core/src -I$(KOKKOS_PATH)/containers/src -I$(KOKKOS_PATH)/algorithms/src -I$(KOKKOS_ETI_PATH) +endif KOKKOS_TPL_INCLUDE_DIRS = KOKKOS_TPL_LIBRARY_DIRS = KOKKOS_TPL_LIBRARY_NAMES = @@ -347,9 +376,11 @@ endif KOKKOS_LIBS = -ldl KOKKOS_TPL_LIBRARY_NAMES += dl -KOKKOS_LDFLAGS = -L$(shell pwd) -# CXXLDFLAGS is used together with CXXFLAGS in a combined compile/link command -KOKKOS_CXXLDFLAGS = -L$(shell pwd) +ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_LDFLAGS = -L$(shell pwd) + # CXXLDFLAGS is used together with CXXFLAGS in a combined compile/link command + KOKKOS_CXXLDFLAGS = -L$(shell pwd) +endif KOKKOS_LINK_FLAGS = KOKKOS_SRC = KOKKOS_HEADERS = @@ -377,10 +408,12 @@ tmp := $(call kokkos_append_header,"/* Execution Spaces */") ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CUDA") + tmp := $(call kokkos_append_header,"\#define KOKKOS_COMPILER_CUDA_VERSION $(KOKKOS_INTERNAL_COMPILER_NVCC_VERSION)") endif ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) tmp := $(call kokkos_append_header,'\#define KOKKOS_ENABLE_ROCM') + tmp := $(call kokkos_append_header,'\#define KOKKOS_IMPL_ROCM_CLANG_WORKAROUND 1') endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) @@ -438,11 +471,25 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX11), 1) KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX11_FLAG) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX11") endif - +ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX14), 1) + KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX14_FLAG) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX14") +endif +ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX1Y), 1) + KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX1Y_FLAG) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX14") +endif +ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX17), 1) + KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX17_FLAG) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX17") +endif ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX1Z), 1) KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX1Z_FLAG) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX11") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX1Z") + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX17") +endif +ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX2A), 1) + KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX2A_FLAG) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CXX20") endif ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1) @@ -465,7 +512,9 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_HWLOC), 1) ifneq ($(HWLOC_PATH),) - KOKKOS_CXXFLAGS += -I$(HWLOC_PATH)/include + ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_CXXFLAGS += -I$(HWLOC_PATH)/include + endif KOKKOS_LDFLAGS += -L$(HWLOC_PATH)/lib KOKKOS_CXXLDFLAGS += -L$(HWLOC_PATH)/lib KOKKOS_TPL_INCLUDE_DIRS += $(HWLOC_PATH)/include @@ -484,7 +533,9 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_MEMKIND), 1) ifneq ($(MEMKIND_PATH),) - KOKKOS_CXXFLAGS += -I$(MEMKIND_PATH)/include + ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_CXXFLAGS += -I$(MEMKIND_PATH)/include + endif KOKKOS_LDFLAGS += -L$(MEMKIND_PATH)/lib KOKKOS_CXXLDFLAGS += -L$(MEMKIND_PATH)/lib KOKKOS_TPL_INCLUDE_DIRS += $(MEMKIND_PATH)/include @@ -977,7 +1028,9 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) endif KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Cuda/*.hpp) ifneq ($(CUDA_PATH),) - KOKKOS_CXXFLAGS += -I$(CUDA_PATH)/include + ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_CXXFLAGS += -I$(CUDA_PATH)/include + endif KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64 KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib64 KOKKOS_TPL_INCLUDE_DIRS += $(CUDA_PATH)/include @@ -1032,7 +1085,9 @@ ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Qthreads/*.cpp) KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Qthreads/*.hpp) ifneq ($(QTHREADS_PATH),) - KOKKOS_CXXFLAGS += -I$(QTHREADS_PATH)/include + ifneq ($(KOKKOS_CMAKE), yes) + KOKKOS_CXXFLAGS += -I$(QTHREADS_PATH)/include + endif KOKKOS_LDFLAGS += -L$(QTHREADS_PATH)/lib KOKKOS_CXXLDFLAGS += -L$(QTHREADS_PATH)/lib KOKKOS_TPL_INCLUDE_DIRS += $(QTHREADS_PATH)/include diff --git a/lib/kokkos/README b/lib/kokkos/README index 31d134bf0a..4b6d4170e0 100644 --- a/lib/kokkos/README +++ b/lib/kokkos/README @@ -52,44 +52,47 @@ For specifics see the LICENSE file contained in the repository or distribution. * GCC 4.8.4 * GCC 4.9.3 * GCC 5.1.0 - * GCC 5.3.0 + * GCC 5.5.0 * GCC 6.1.0 + * GCC 7.2.0 + * GCC 7.3.0 + * GCC 8.1.0 * Intel 15.0.2 * Intel 16.0.1 - * Intel 17.1.043 + * Intel 17.0.1 * Intel 17.4.196 - * Intel 18.0.128 + * Intel 18.2.128 * Clang 3.6.1 * Clang 3.7.1 * Clang 3.8.1 * Clang 3.9.0 * Clang 4.0.0 - * Clang 4.0.0 for CUDA (CUDA Toolkit 8.0.44) - * Clang 6.0.0 for CUDA (CUDA Toolkit 9.1) - * PGI 17.10 - * NVCC 7.0 for CUDA (with gcc 4.8.4) + * Clang 6.0.0 for CUDA (CUDA Toolkit 9.0) + * Clang 7.0.0 for CUDA (CUDA Toolkit 9.1) + * PGI 18.7 * NVCC 7.5 for CUDA (with gcc 4.8.4) * NVCC 8.0.44 for CUDA (with gcc 5.3.0) * NVCC 9.1 for CUDA (with gcc 6.1.0) ### Primary tested compilers on Power 8 are: - * GCC 5.4.0 (OpenMP,Serial) - * IBM XL 13.1.6 (OpenMP, Serial) - * NVCC 8.0.44 for CUDA (with gcc 5.4.0) - * NVCC 9.0.103 for CUDA (with gcc 6.3.0 and XL 13.1.6) + * GCC 6.4.0 (OpenMP,Serial) + * GCC 7.2.0 (OpenMP,Serial) + * IBM XL 16.1.0 (OpenMP, Serial) + * NVCC 9.2.88 for CUDA (with gcc 7.2.0 and XL 16.1.0) ### Primary tested compilers on Intel KNL are: - * GCC 6.2.0 * Intel 16.4.258 (with gcc 4.7.2) * Intel 17.2.174 (with gcc 4.9.3) - * Intel 18.0.128 (with gcc 4.9.3) + * Intel 18.2.199 (with gcc 4.9.3) -### Primary tested compilers on ARM - * GCC 6.1.0 +### Primary tested compilers on ARM (Cavium ThunderX2) + * GCC 7.2.0 + * ARM/Clang 18.4.0 ### Other compilers working: * X86: - Cygwin 2.1.0 64bit with gcc 4.9.3 + - GCC 8.1.0 (not warning free) ### Known non-working combinations: * Power8: diff --git a/lib/kokkos/algorithms/src/Kokkos_Random.hpp b/lib/kokkos/algorithms/src/Kokkos_Random.hpp index 5f1d88bfff..e14471a48a 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Random.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Random.hpp @@ -697,6 +697,7 @@ namespace Kokkos { typedef Random_XorShift64 generator_type; typedef DeviceType device_type; + KOKKOS_INLINE_FUNCTION Random_XorShift64_Pool() { num_states_ = 0; } @@ -709,12 +710,14 @@ namespace Kokkos { #endif } + KOKKOS_INLINE_FUNCTION Random_XorShift64_Pool(const Random_XorShift64_Pool& src): locks_(src.locks_), state_(src.state_), num_states_(src.num_states_) {} + KOKKOS_INLINE_FUNCTION Random_XorShift64_Pool operator = (const Random_XorShift64_Pool& src) { locks_ = src.locks_; state_ = src.state_; @@ -958,6 +961,7 @@ namespace Kokkos { typedef DeviceType device_type; + KOKKOS_INLINE_FUNCTION Random_XorShift1024_Pool() { num_states_ = 0; } @@ -972,6 +976,7 @@ namespace Kokkos { #endif } + KOKKOS_INLINE_FUNCTION Random_XorShift1024_Pool(const Random_XorShift1024_Pool& src): locks_(src.locks_), state_(src.state_), @@ -979,6 +984,7 @@ namespace Kokkos { num_states_(src.num_states_) {} + KOKKOS_INLINE_FUNCTION Random_XorShift1024_Pool operator = (const Random_XorShift1024_Pool& src) { locks_ = src.locks_; state_ = src.state_; diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index c952b1e541..8bdd876723 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -246,8 +246,8 @@ public: { bin_count_atomic = Kokkos::View("Kokkos::SortImpl::BinSortFunctor::bin_count",bin_op.max_bins()); bin_count_const = bin_count_atomic; - bin_offsets = offset_type("Kokkos::SortImpl::BinSortFunctor::bin_offsets",bin_op.max_bins()); - sort_order = offset_type("PermutationVector",range_end-range_begin); + bin_offsets = offset_type(ViewAllocateWithoutInitializing("Kokkos::SortImpl::BinSortFunctor::bin_offsets"),bin_op.max_bins()); + sort_order = offset_type(ViewAllocateWithoutInitializing("Kokkos::SortImpl::BinSortFunctor::sort_order"),range_end-range_begin); } BinSort( const_key_view_type keys_ @@ -290,7 +290,7 @@ public: #ifdef KOKKOS_ENABLE_DEPRECATED_CODE scratch_view_type - sorted_values("Scratch", + sorted_values(ViewAllocateWithoutInitializing("Kokkos::SortImpl::BinSortFunctor::sorted_values"), len, values.extent(1), values.extent(2), @@ -301,7 +301,7 @@ public: values.extent(7)); #else scratch_view_type - sorted_values("Scratch", + sorted_values(ViewAllocateWithoutInitializing("Kokkos::SortImpl::BinSortFunctor::sorted_values"), values.rank_dynamic > 0 ? len : KOKKOS_IMPL_CTOR_DEFAULT_ARG, values.rank_dynamic > 1 ? values.extent(1) : KOKKOS_IMPL_CTOR_DEFAULT_ARG , values.rank_dynamic > 2 ? values.extent(2) : KOKKOS_IMPL_CTOR_DEFAULT_ARG, @@ -483,7 +483,7 @@ struct BinOp3D { if (keys(i1,0)>keys(i2,0)) return true; else if (keys(i1,0)==keys(i2,0)) { if (keys(i1,1)>keys(i2,1)) return true; - else if (keys(i1,1)==keys(i2,2)) { + else if (keys(i1,1)==keys(i2,1)) { if (keys(i1,2)>keys(i2,2)) return true; } } diff --git a/lib/kokkos/benchmarks/gups/Makefile b/lib/kokkos/benchmarks/gups/Makefile new file mode 100644 index 0000000000..7176111664 --- /dev/null +++ b/lib/kokkos/benchmarks/gups/Makefile @@ -0,0 +1,41 @@ +#Set your Kokkos path to something appropriate +KOKKOS_PATH = ${HOME}/git/kokkos-github-repo +KOKKOS_DEVICES = "Cuda" +KOKKOS_ARCH = "Pascal60" +KOKKOS_CUDA_OPTIONS = enable_lambda +#KOKKOS_DEVICES = "OpenMP" +#KOKKOS_ARCH = "Power8" + +SRC = gups-kokkos.cc + +default: build + echo "Start Build" + +CXXFLAGS = -O3 +CXX = ${HOME}/git/kokkos-github-repo/bin/nvcc_wrapper +#CXX = g++ + +LINK = ${CXX} + +LINKFLAGS = +EXE = gups-kokkos + +DEPFLAGS = -M + +OBJ = $(SRC:.cc=.o) +LIB = + +include $(KOKKOS_PATH)/Makefile.kokkos + +build: $(EXE) + +$(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -o $(EXE) + +clean: kokkos-clean + rm -f *.o $(EXE) + +# Compilation rules + +%.o:%.cc $(KOKKOS_CPP_DEPENDS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< diff --git a/lib/kokkos/benchmarks/gups/gups-kokkos.cc b/lib/kokkos/benchmarks/gups/gups-kokkos.cc new file mode 100644 index 0000000000..4602adda79 --- /dev/null +++ b/lib/kokkos/benchmarks/gups/gups-kokkos.cc @@ -0,0 +1,199 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// ************************************************************************ +//@HEADER +*/ + +#include "Kokkos_Core.hpp" +#include +#include +#include + +#include + +#define HLINE "-------------------------------------------------------------\n" + +#if defined(KOKKOS_ENABLE_CUDA) +typedef Kokkos::View::HostMirror GUPSHostArray; +typedef Kokkos::View GUPSDeviceArray; +#else +typedef Kokkos::View::HostMirror GUPSHostArray; +typedef Kokkos::View GUPSDeviceArray; +#endif + +typedef int GUPSIndex; + +double now() { + struct timeval now; + gettimeofday(&now, NULL); + + return (double) now.tv_sec + ((double) now.tv_usec * 1.0e-6); +} + +void randomize_indices(GUPSHostArray& indices, GUPSDeviceArray& dev_indices, const int64_t dataCount) { + for( GUPSIndex i = 0; i < indices.extent(0); ++i ) { + indices[i] = lrand48() % dataCount; + } + + Kokkos::deep_copy(dev_indices, indices); +} + +void run_gups(GUPSDeviceArray& indices, GUPSDeviceArray& data, const int64_t datum, + const bool performAtomics) { + + if( performAtomics ) { + Kokkos::parallel_for("bench-gups-atomic", indices.extent(0), KOKKOS_LAMBDA(const GUPSIndex i) { + Kokkos::atomic_fetch_xor( &data[indices[i]], datum ); + }); + } else { + Kokkos::parallel_for("bench-gups-non-atomic", indices.extent(0), KOKKOS_LAMBDA(const GUPSIndex i) { + data[indices[i]] ^= datum; + }); + } + + Kokkos::fence(); +} + +int run_benchmark(const GUPSIndex indicesCount, const GUPSIndex dataCount, const int repeats, + const bool useAtomics) { + + printf("Reports fastest timing per kernel\n"); + printf("Creating Views...\n"); + + printf("Memory Sizes:\n"); + printf("- Elements: %15" PRIu64 " (%12.4f MB)\n", static_cast(dataCount), + 1.0e-6 * ((double) dataCount * (double) sizeof(int64_t))); + printf("- Indices: %15" PRIu64 " (%12.4f MB)\n", static_cast(indicesCount), + 1.0e-6 * ((double) indicesCount * (double) sizeof(int64_t))); + printf(" - Atomics: %15s\n", (useAtomics ? "Yes" : "No") ); + printf("Benchmark kernels will be performed for %d iterations.\n", repeats); + + printf(HLINE); + + GUPSDeviceArray dev_indices("indices", indicesCount); + GUPSDeviceArray dev_data("data", dataCount); + int64_t datum = -1; + + GUPSHostArray indices = Kokkos::create_mirror_view(dev_indices); + GUPSHostArray data = Kokkos::create_mirror_view(dev_data); + + double gupsTime = 0.0; + + printf("Initializing Views...\n"); + +#if defined(KOKKOS_HAVE_OPENMP) + Kokkos::parallel_for("init-data", Kokkos::RangePolicy(0, dataCount), +#else + Kokkos::parallel_for("init-data", Kokkos::RangePolicy(0, dataCount), +#endif + KOKKOS_LAMBDA(const int i) { + + data[i] = 10101010101; + }); + +#if defined(KOKKOS_HAVE_OPENMP) + Kokkos::parallel_for("init-indices", Kokkos::RangePolicy(0, indicesCount), +#else + Kokkos::parallel_for("init-indices", Kokkos::RangePolicy(0, indicesCount), +#endif + KOKKOS_LAMBDA(const int i) { + + indices[i] = 0; + }); + + Kokkos::deep_copy(dev_data, data); + Kokkos::deep_copy(dev_indices, indices); + double start; + + printf("Starting benchmarking...\n"); + + for( GUPSIndex k = 0; k < repeats; ++k ) { + randomize_indices(indices, dev_indices, data.extent(0)); + + start = now(); + run_gups(dev_indices, dev_data, datum, useAtomics); + gupsTime += now() - start; + } + + Kokkos::deep_copy(indices, dev_indices); + Kokkos::deep_copy(data, dev_data); + + printf(HLINE); + printf("GUP/s Random: %18.6f\n", + (1.0e-9 * ((double) repeats) * (double) dev_indices.extent(0)) / gupsTime); + printf(HLINE); + + return 0; +} + +int main(int argc, char* argv[]) { + + printf(HLINE); + printf("Kokkos GUPS Benchmark\n"); + printf(HLINE); + + srand48(1010101); + + Kokkos::initialize(argc, argv); + + int64_t indices = 8192; + int64_t data = 33554432; + int64_t repeats = 10; + bool useAtomics = false; + + for( int i = 1; i < argc; ++i ) { + if( strcmp( argv[i], "--indices" ) == 0 ) { + indices = std::atoll(argv[i+1]); + ++i; + } else if( strcmp( argv[i], "--data" ) == 0 ) { + data = std::atoll(argv[i+1]); + ++i; + } else if( strcmp( argv[i], "--repeats" ) == 0 ) { + repeats = std::atoll(argv[i+1]); + ++i; + } else if( strcmp( argv[i], "--atomics" ) == 0 ) { + useAtomics = true; + } + } + + const int rc = run_benchmark(indices, data, repeats, useAtomics); + + Kokkos::finalize(); + + return rc; +} diff --git a/lib/kokkos/benchmarks/stream/Makefile b/lib/kokkos/benchmarks/stream/Makefile new file mode 100644 index 0000000000..04566b322d --- /dev/null +++ b/lib/kokkos/benchmarks/stream/Makefile @@ -0,0 +1,41 @@ +#Set your Kokkos path to something appropriate +KOKKOS_PATH = ${HOME}/git/kokkos-github-repo +#KOKKOS_DEVICES = "Cuda" +#KOKKOS_ARCH = "Pascal60" +#KOKKOS_CUDA_OPTIONS = enable_lambda +KOKKOS_DEVICES = "OpenMP" +KOKKOS_ARCH = "Power8" + +SRC = stream-kokkos.cc + +default: build + echo "Start Build" + +CXXFLAGS = -O3 +#CXX = ${HOME}/git/kokkos-github-repo/bin/nvcc_wrapper +CXX = g++ + +LINK = ${CXX} + +LINKFLAGS = +EXE = stream-kokkos + +DEPFLAGS = -M + +OBJ = $(SRC:.cc=.o) +LIB = + +include $(KOKKOS_PATH)/Makefile.kokkos + +build: $(EXE) + +$(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -o $(EXE) + +clean: kokkos-clean + rm -f *.o $(EXE) + +# Compilation rules + +%.o:%.cc $(KOKKOS_CPP_DEPENDS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< diff --git a/lib/kokkos/benchmarks/stream/stream-kokkos.cc b/lib/kokkos/benchmarks/stream/stream-kokkos.cc new file mode 100644 index 0000000000..370995432e --- /dev/null +++ b/lib/kokkos/benchmarks/stream/stream-kokkos.cc @@ -0,0 +1,265 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// ************************************************************************ +//@HEADER +*/ + +#include "Kokkos_Core.hpp" +#include +#include +#include + +#include + +#define STREAM_ARRAY_SIZE 100000000 +#define STREAM_NTIMES 20 + +#define HLINE "-------------------------------------------------------------\n" + +#if defined(KOKKOS_ENABLE_CUDA) +typedef Kokkos::View::HostMirror StreamHostArray; +typedef Kokkos::View StreamDeviceArray; +#else +typedef Kokkos::View::HostMirror StreamHostArray; +typedef Kokkos::View StreamDeviceArray; +#endif + +typedef int StreamIndex; + +double now() { + struct timeval now; + gettimeofday(&now, NULL); + + return (double) now.tv_sec + ((double) now.tv_usec * 1.0e-6); +} + +void perform_copy(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c) { + + Kokkos::parallel_for("copy", a.extent(0), KOKKOS_LAMBDA(const StreamIndex i) { + c[i] = a[i]; + }); + + Kokkos::fence(); +} + +void perform_scale(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c, + const double scalar) { + + Kokkos::parallel_for("copy", a.extent(0), KOKKOS_LAMBDA(const StreamIndex i) { + b[i] = scalar * c[i]; + }); + + Kokkos::fence(); +} + +void perform_add(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c) { + Kokkos::parallel_for("add", a.extent(0), KOKKOS_LAMBDA(const StreamIndex i) { + c[i] = a[i] + b[i]; + }); + + Kokkos::fence(); +} + +void perform_triad(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c, + const double scalar) { + + Kokkos::parallel_for("triad", a.extent(0), KOKKOS_LAMBDA(const StreamIndex i) { + a[i] = b[i] + scalar * c[i]; + }); + + Kokkos::fence(); +} + +int perform_validation(StreamHostArray& a, StreamHostArray& b, StreamHostArray& c, + const StreamIndex arraySize, const double scalar) { + + double ai = 1.0; + double bi = 2.0; + double ci = 0.0; + + for( StreamIndex i = 0; i < arraySize; ++i ) { + ci = ai; + bi = scalar * ci; + ci = ai + bi; + ai = bi + scalar * ci; + }; + + double aError = 0.0; + double bError = 0.0; + double cError = 0.0; + + for( StreamIndex i = 0; i < arraySize; ++i ) { + aError = std::abs( a[i] - ai ); + bError = std::abs( b[i] - bi ); + cError = std::abs( c[i] - ci ); + } + + double aAvgError = aError / (double) arraySize; + double bAvgError = bError / (double) arraySize; + double cAvgError = cError / (double) arraySize; + + const double epsilon = 1.0e-13; + int errorCount = 0; + + if( std::abs( aAvgError / ai ) > epsilon ) { + fprintf(stderr, "Error: validation check on View a failed.\n"); + errorCount++; + } + + if( std::abs( bAvgError / bi ) > epsilon ) { + fprintf(stderr, "Error: validation check on View b failed.\n"); + errorCount++; + } + + if( std::abs( cAvgError / ci ) > epsilon ) { + fprintf(stderr, "Error: validation check on View c failed.\n"); + errorCount++; + } + + if( errorCount == 0 ) { + printf("All solutions checked and verified.\n"); + } + + return errorCount; +} + +int run_benchmark() { + + printf("Reports fastest timing per kernel\n"); + printf("Creating Views...\n"); + + printf("Memory Sizes:\n"); + printf("- Array Size: %" PRIu64 "\n", static_cast(STREAM_ARRAY_SIZE)); + printf("- Per Array: %12.2f MB\n", 1.0e-6 * (double) STREAM_ARRAY_SIZE * (double) sizeof(double)); + printf("- Total: %12.2f MB\n", 3.0e-6 * (double) STREAM_ARRAY_SIZE * (double) sizeof(double)); + + printf("Benchmark kernels will be performed for %d iterations.\n", STREAM_NTIMES); + + printf(HLINE); + + StreamDeviceArray dev_a("a", STREAM_ARRAY_SIZE); + StreamDeviceArray dev_b("b", STREAM_ARRAY_SIZE); + StreamDeviceArray dev_c("c", STREAM_ARRAY_SIZE); + + StreamHostArray a = Kokkos::create_mirror_view(dev_a); + StreamHostArray b = Kokkos::create_mirror_view(dev_b); + StreamHostArray c = Kokkos::create_mirror_view(dev_c); + + const double scalar = 3.0; + + double copyTime = std::numeric_limits::max(); + double scaleTime = std::numeric_limits::max(); + double addTime = std::numeric_limits::max(); + double triadTime = std::numeric_limits::max(); + + printf("Initializing Views...\n"); + +#if defined(KOKKOS_HAVE_OPENMP) + Kokkos::parallel_for("init", Kokkos::RangePolicy(0, STREAM_ARRAY_SIZE), +#else + Kokkos::parallel_for("init", Kokkos::RangePolicy(0, STREAM_ARRAY_SIZE), +#endif + KOKKOS_LAMBDA(const int i) { + + a[i] = 1.0; + b[i] = 2.0; + c[i] = 0.0; + }); + + // Copy contents of a (from the host) to the dev_a (device) + Kokkos::deep_copy(dev_a, a); + Kokkos::deep_copy(dev_b, b); + Kokkos::deep_copy(dev_c, c); + + double start; + + printf("Starting benchmarking...\n"); + + for( StreamIndex k = 0; k < STREAM_NTIMES; ++k ) { + start = now(); + perform_copy(dev_a, dev_b, dev_c); + copyTime = std::min( copyTime, (now() - start) ); + + start = now(); + perform_scale(dev_a, dev_b, dev_c, scalar); + scaleTime = std::min( scaleTime, (now() - start) ); + + start = now(); + perform_add(dev_a, dev_b, dev_c); + addTime = std::min( addTime, (now() - start) ); + + start = now(); + perform_triad(dev_a, dev_b, dev_c, scalar); + triadTime = std::min( triadTime, (now() - start) ); + } + + Kokkos::deep_copy(a, dev_a); + Kokkos::deep_copy(b, dev_b); + Kokkos::deep_copy(c, dev_c); + + printf("Performing validation...\n"); + int rc = perform_validation(a, b, c, STREAM_ARRAY_SIZE, scalar); + + printf(HLINE); + + printf("Copy %11.2f MB/s\n", + ( 1.0e-06 * 2.0 * (double) sizeof(double) * (double) STREAM_ARRAY_SIZE) / copyTime ); + printf("Scale %11.2f MB/s\n", + ( 1.0e-06 * 2.0 * (double) sizeof(double) * (double) STREAM_ARRAY_SIZE) / scaleTime ); + printf("Add %11.2f MB/s\n", + ( 1.0e-06 * 3.0 * (double) sizeof(double) * (double) STREAM_ARRAY_SIZE) / addTime ); + printf("Triad %11.2f MB/s\n", + ( 1.0e-06 * 3.0 * (double) sizeof(double) * (double) STREAM_ARRAY_SIZE) / triadTime ); + + printf(HLINE); + + return rc; +} + +int main(int argc, char* argv[]) { + + printf(HLINE); + printf("Kokkos STREAM Benchmark\n"); + printf(HLINE); + + Kokkos::initialize(argc, argv); + const int rc = run_benchmark(); + Kokkos::finalize(); + + return rc; +} diff --git a/lib/kokkos/bin/hpcbind b/lib/kokkos/bin/hpcbind index 92f9f81ac9..b185a92821 100755 --- a/lib/kokkos/bin/hpcbind +++ b/lib/kokkos/bin/hpcbind @@ -125,18 +125,20 @@ function show_help { echo " --openmp-ratio=N/D Ratio of the cpuset to use for OpenMP" echo " Default: 1" echo " --openmp-places= Op=threads|cores|sockets. Default: threads" - echo " --no-openmp-proc-bind Set OMP_PROC_BIND to false and unset OMP_PLACES" - echo " --force-openmp-num-threads=N" + echo " --openmp-num-threads=N" echo " Override logic for selecting OMP_NUM_THREADS" - echo " --force-openmp-proc-bind=" + echo " --openmp-proc-bind=" echo " Override logic for selecting OMP_PROC_BIND" - echo " --no-openmp-nested Set OMP_NESTED to false" + echo " --openmp-nested Set OMP_NESTED to true" + echo " --no-openmp-proc-bind Set OMP_PROC_BIND to false and unset OMP_PLACES" echo " --output-prefix=

    Save the output to files of the form" echo " P.hpcbind.N, P.stdout.N and P.stderr.N where P is " echo " the prefix and N is the rank (no spaces)" echo " --output-mode= How console output should be handled." echo " Options are all, rank0, and none. Default: rank0" echo " --lstopo Show bindings in lstopo" + echo " --save-topology= Save the topology to the given xml file" + echo " --load-topology= Load a previously saved topology from an xml file" echo " -v|--verbose Print bindings and relevant environment variables" echo " -h|--help Show this message" echo "" @@ -189,7 +191,7 @@ HPCBIND_OPENMP_PLACES=${OMP_PLACES:-threads} declare -i HPCBIND_OPENMP_PROC_BIND=1 HPCBIND_OPENMP_FORCE_NUM_THREADS="" HPCBIND_OPENMP_FORCE_PROC_BIND="" -declare -i HPCBIND_OPENMP_NESTED=1 +declare -i HPCBIND_OPENMP_NESTED=0 declare -i HPCBIND_VERBOSE=0 declare -i HPCBIND_LSTOPO=0 @@ -197,6 +199,9 @@ declare -i HPCBIND_LSTOPO=0 HPCBIND_OUTPUT_PREFIX="" HPCBIND_OUTPUT_MODE="rank0" +HPCBIND_OUTPUT_TOPOLOGY="" +HPCBIND_INPUT_TOPOLOGY="" + declare -i HPCBIND_HAS_COMMAND=0 for i in "$@"; do @@ -276,10 +281,22 @@ for i in "$@"; do HPCBIND_OPENMP_NESTED=0 shift ;; + --openmp-nested) + HPCBIND_OPENMP_NESTED=1 + shift + ;; --output-prefix=*) HPCBIND_OUTPUT_PREFIX="${i#*=}" shift ;; + --save-topology=*) + HPCBIND_OUTPUT_TOPOLOGY="${i#*=}" + shift + ;; + --load-topology=*) + HPCBIND_INPUT_TOPOLOGY="${i#*=}" + shift + ;; --output-mode=*) HPCBIND_OUTPUT_MODE="${i#*=}" #convert to lower case @@ -327,24 +344,37 @@ elif [[ ${HPCBIND_QUEUE_RANK} -eq 0 ]]; then HPCBIND_TEE=1 fi +# Save the topology to the given xml file +if [[ "${HPCBIND_OUTPUT_TOPOLOGY}" != "" ]]; then + if [[ ${HPCBIND_QUEUE_RANK} -eq 0 ]]; then + lstopo-no-graphics "${HPCBIND_OUTPUT_TOPOLOGY}" + else + lstopo-no-graphics >/dev/null 2>&1 + fi +fi + +# Load the topology to the given xml file +if [[ "${HPCBIND_INPUT_TOPOLOGY}" != "" ]]; then + if [ -f ${HPCBIND_INPUT_TOPOLOGY} ]; then + export HWLOC_XMLFILE="${HPCBIND_INPUT_TOPOLOGY}" + export HWLOC_THISSYSTEM=1 + fi +fi if [[ "${HPCBIND_OUTPUT_PREFIX}" == "" ]]; then HPCBIND_LOG=/dev/null HPCBIND_ERR=/dev/null HPCBIND_OUT=/dev/null else - if [[ ${HPCBIND_QUEUE_SIZE} -gt 0 ]]; then - HPCBIND_STR_QUEUE_SIZE="${HPCBIND_QUEUE_SIZE}" - HPCBIND_STR_QUEUE_RANK=$(printf %0*d ${#HPCBIND_STR_QUEUE_SIZE} ${HPCBIND_QUEUE_RANK}) - - HPCBIND_LOG="${HPCBIND_OUTPUT_PREFIX}.hpcbind.${HPCBIND_STR_QUEUE_RANK}" - HPCBIND_ERR="${HPCBIND_OUTPUT_PREFIX}.stderr.${HPCBIND_STR_QUEUE_RANK}" - HPCBIND_OUT="${HPCBIND_OUTPUT_PREFIX}.stdout.${HPCBIND_STR_QUEUE_RANK}" - else - HPCBIND_LOG="${HPCBIND_OUTPUT_PREFIX}.hpcbind.${HPCBIND_QUEUE_RANK}" - HPCBIND_ERR="${HPCBIND_OUTPUT_PREFIX}.stderr.${HPCBIND_QUEUE_RANK}" - HPCBIND_OUT="${HPCBIND_OUTPUT_PREFIX}.stdout.${HPCBIND_QUEUE_RANK}" + if [[ ${HPCBIND_QUEUE_SIZE} -le 0 ]]; then + HPCBIND_QUEUE_SIZE=1 fi + HPCBIND_STR_QUEUE_SIZE="${HPCBIND_QUEUE_SIZE}" + HPCBIND_STR_QUEUE_RANK=$(printf %0*d ${#HPCBIND_STR_QUEUE_SIZE} ${HPCBIND_QUEUE_RANK}) + + HPCBIND_LOG="${HPCBIND_OUTPUT_PREFIX}.hpcbind.${HPCBIND_STR_QUEUE_RANK}" + HPCBIND_ERR="${HPCBIND_OUTPUT_PREFIX}.stderr.${HPCBIND_STR_QUEUE_RANK}" + HPCBIND_OUT="${HPCBIND_OUTPUT_PREFIX}.stdout.${HPCBIND_STR_QUEUE_RANK}" > ${HPCBIND_LOG} fi @@ -546,6 +576,8 @@ if [[ ${HPCBIND_TEE} -eq 0 || ${HPCBIND_VERBOSE} -eq 0 ]]; then hostname -s >> ${HPCBIND_LOG} echo "[HPCBIND]" >> ${HPCBIND_LOG} echo "${TMP_ENV}" | grep -E "^HPCBIND_" >> ${HPCBIND_LOG} + echo "[HWLOC]" >> ${HPCBIND_LOG} + echo "${TMP_ENV}" | grep -E "^HWLOC_" >> ${HPCBIND_LOG} echo "[CUDA]" >> ${HPCBIND_LOG} echo "${TMP_ENV}" | grep -E "^CUDA_" >> ${HPCBIND_LOG} echo "[OPENMP]" >> ${HPCBIND_LOG} @@ -568,6 +600,8 @@ else hostname -s > >(tee -a ${HPCBIND_LOG}) echo "[HPCBIND]" > >(tee -a ${HPCBIND_LOG}) echo "${TMP_ENV}" | grep -E "^HPCBIND_" > >(tee -a ${HPCBIND_LOG}) + echo "[HWLOC]" > >(tee -a ${HPCBIND_LOG}) + echo "${TMP_ENV}" | grep -E "^HWLOC_" > >(tee -a ${HPCBIND_LOG}) echo "[CUDA]" > >(tee -a ${HPCBIND_LOG}) echo "${TMP_ENV}" | grep -E "^CUDA_" > >(tee -a ${HPCBIND_LOG}) echo "[OPENMP]" > >(tee -a ${HPCBIND_LOG}) diff --git a/lib/kokkos/bin/nvcc_wrapper b/lib/kokkos/bin/nvcc_wrapper index d339da4fcd..f926ae024c 100755 --- a/lib/kokkos/bin/nvcc_wrapper +++ b/lib/kokkos/bin/nvcc_wrapper @@ -74,6 +74,9 @@ dry_run=0 host_only=0 host_only_args="" +# Just run version on host compiler +get_host_version=0 + # Enable workaround for CUDA 6.5 for pragma ident replace_pragma_ident=0 @@ -93,6 +96,9 @@ depfile_separate=0 depfile_output_arg="" depfile_target_arg="" +# Option to remove duplicate libraries and object files +remove_duplicate_link_files=0 + #echo "Arguments: $# $@" while [ $# -gt 0 ] @@ -106,10 +112,18 @@ do --host-only) host_only=1 ;; + #get the host version only + --host-version) + get_host_version=1 + ;; #replace '#pragma ident' with '#ident' this is needed to compile OpenMPI due to a configure script bug and a non standardized behaviour of pragma with macros --replace-pragma-ident) replace_pragma_ident=1 ;; + #remove duplicate link files + --remove-duplicate-link-files) + remove_duplicate_link_files=1 + ;; #handle source files to be compiled as cuda files *.cpp|*.cxx|*.cc|*.C|*.c++|*.cu) cpp_files="$cpp_files $1" @@ -124,7 +138,12 @@ do fi ;; #Handle shared args (valid for both nvcc and the host compiler) - -D*|-I*|-L*|-l*|-g|--help|--version|-E|-M|-shared) + -D*) + unescape_commas=`echo "$1" | sed -e 's/\\\,/,/g'` + arg=`printf "%q" $unescape_commas` + shared_args="$shared_args $arg" + ;; + -I*|-L*|-l*|-g|--help|--version|-E|-M|-shared|-w) shared_args="$shared_args $1" ;; #Handle compilation argument @@ -152,7 +171,7 @@ do shift ;; #Handle known nvcc args - -gencode*|--dryrun|--verbose|--keep|--keep-dir*|-G|--relocatable-device-code*|-lineinfo|-expt-extended-lambda|--resource-usage|-Xptxas*) + --dryrun|--verbose|--keep|--keep-dir*|-G|--relocatable-device-code*|-lineinfo|-expt-extended-lambda|--resource-usage|-Xptxas*) cuda_args="$cuda_args $1" ;; #Handle more known nvcc args @@ -164,8 +183,11 @@ do cuda_args="$cuda_args $1 $2" shift ;; + -rdc=*|-maxrregcount*|--maxrregcount*) + cuda_args="$cuda_args $1" + ;; #Handle c++11 - --std=c++11|-std=c++11|--std=c++14|-std=c++14|--std=c++1z|-std=c++1z) + --std=c++11|-std=c++11|--std=c++14|-std=c++14|--std=c++1y|-std=c++1y|--std=c++17|-std=c++17|--std=c++1z|-std=c++1z) if [ $stdcxx_applied -eq 1 ]; then echo "nvcc_wrapper - *warning* you have set multiple optimization flags (-std=c++1* or --std=c++1*), only the first is used because nvcc can only accept a single std setting" else @@ -205,6 +227,15 @@ do fi shift ;; + #Handle -+ (same as -x c++, specifically used for xl compilers, but mutually exclusive with -x. So replace it with -x c++) + -+) + if [ $first_xcompiler_arg -eq 1 ]; then + xcompiler_args="-x,c++" + first_xcompiler_arg=0 + else + xcompiler_args="$xcompiler_args,-x,c++" + fi + ;; #Handle -ccbin (if its not set we can set it to a default value) -ccbin) cuda_args="$cuda_args $1 $2" @@ -212,18 +243,39 @@ do host_compiler=$2 shift ;; - #Handle -arch argument (if its not set use a default - -arch*) + + #Handle -arch argument (if its not set use a default) this is the version with = sign + -arch*|-gencode*) cuda_args="$cuda_args $1" arch_set=1 ;; + #Handle -code argument (if its not set use a default) this is the version with = sign + -code*) + cuda_args="$cuda_args $1" + ;; + #Handle -arch argument (if its not set use a default) this is the version without = sign + -arch|-gencode) + cuda_args="$cuda_args $1 $2" + arch_set=1 + shift + ;; + #Handle -code argument (if its not set use a default) this is the version without = sign + -code) + cuda_args="$cuda_args $1 $2" + shift + ;; #Handle -Xcudafe argument -Xcudafe) cuda_args="$cuda_args -Xcudafe $2" shift ;; + #Handle -Xlinker argument + -Xlinker) + xlinker_args="$xlinker_args -Xlinker $2" + shift + ;; #Handle args that should be sent to the linker - -Wl*) + -Wl,*) xlinker_args="$xlinker_args -Xlinker ${1:4:${#1}}" host_linker_args="$host_linker_args ${1:4:${#1}}" ;; @@ -256,6 +308,44 @@ do shift done +# Only print host compiler version +if [ $get_host_version -eq 1 ]; then + $host_compiler --version + exit +fi + +#Remove duplicate object files +if [ $remove_duplicate_link_files -eq 1 ]; then +for obj in $object_files +do + object_files_reverse="$obj $object_files_reverse" +done + +object_files_reverse_clean="" +for obj in $object_files_reverse +do + exists=false + for obj2 in $object_files_reverse_clean + do + if [ "$obj" == "$obj2" ] + then + exists=true + echo "Exists: $obj" + fi + done + if [ "$exists" == "false" ] + then + object_files_reverse_clean="$object_files_reverse_clean $obj" + fi +done + +object_files="" +for obj in $object_files_reverse_clean +do + object_files="$obj $object_files" +done +fi + #Add default host compiler if necessary if [ $ccbin_set -ne 1 ]; then cuda_args="$cuda_args -ccbin $host_compiler" @@ -328,10 +418,19 @@ fi #Run compilation command if [ $host_only -eq 1 ]; then + if [ "$NVCC_WRAPPER_SHOW_COMMANDS_BEING_RUN" == "1" ] ; then + echo "$host_command" + fi $host_command elif [ -n "$nvcc_depfile_command" ]; then + if [ "$NVCC_WRAPPER_SHOW_COMMANDS_BEING_RUN" == "1" ] ; then + echo "$nvcc_command && $nvcc_depfile_command" + fi $nvcc_command && $nvcc_depfile_command else + if [ "$NVCC_WRAPPER_SHOW_COMMANDS_BEING_RUN" == "1" ] ; then + echo "$nvcc_command" + fi $nvcc_command fi error_code=$? diff --git a/lib/kokkos/cmake/kokkos_build.cmake b/lib/kokkos/cmake/kokkos_build.cmake index 94dd733ca3..8178483d01 100644 --- a/lib/kokkos/cmake/kokkos_build.cmake +++ b/lib/kokkos/cmake/kokkos_build.cmake @@ -235,3 +235,7 @@ install(FILES # Install the export set for use with the install-tree INSTALL(EXPORT KokkosTargets DESTINATION "${INSTALL_CMAKE_DIR}") + +# build and install pkgconfig file +CONFIGURE_FILE(core/src/kokkos.pc.in kokkos.pc @ONLY) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/kokkos.pc DESTINATION lib/pkgconfig) diff --git a/lib/kokkos/cmake/kokkos_functions.cmake b/lib/kokkos/cmake/kokkos_functions.cmake index c0c62ccb6a..bc490115af 100644 --- a/lib/kokkos/cmake/kokkos_functions.cmake +++ b/lib/kokkos/cmake/kokkos_functions.cmake @@ -47,7 +47,7 @@ function(set_kokkos_cxx_compiler) OUTPUT_VARIABLE INTERNAL_CXX_COMPILER_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+$" + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+$" INTERNAL_CXX_COMPILER_VERSION ${INTERNAL_CXX_COMPILER_VERSION}) endif() diff --git a/lib/kokkos/cmake/kokkos_options.cmake b/lib/kokkos/cmake/kokkos_options.cmake index 80a091bb98..580d1d322b 100644 --- a/lib/kokkos/cmake/kokkos_options.cmake +++ b/lib/kokkos/cmake/kokkos_options.cmake @@ -41,7 +41,6 @@ list(APPEND KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST foreach(opt ${KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST}) string(TOUPPER ${opt} OPT ) IF(DEFINED Kokkos_ENABLE_${opt}) - MESSAGE("Kokkos_ENABLE_${opt} is defined!") IF(DEFINED KOKKOS_ENABLE_${OPT}) IF(NOT ("${KOKKOS_ENABLE_${OPT}}" STREQUAL "${Kokkos_ENABLE_${opt}}")) IF(DEFINED KOKKOS_ENABLE_${OPT}_INTERNAL) @@ -59,7 +58,6 @@ foreach(opt ${KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST}) ENDIF() ELSE() SET(KOKKOS_INTERNAL_ENABLE_${OPT}_DEFAULT ${Kokkos_ENABLE_${opt}}) - MESSAGE("set KOKKOS_INTERNAL_ENABLE_${OPT}_DEFAULT!") ENDIF() ENDIF() endforeach() @@ -81,6 +79,7 @@ list(APPEND KOKKOS_ARCH_LIST ARMv80 # (HOST) ARMv8.0 Compatible CPU ARMv81 # (HOST) ARMv8.1 Compatible CPU ARMv8-ThunderX # (HOST) ARMv8 Cavium ThunderX CPU + ARMv8-TX2 # (HOST) ARMv8 Cavium ThunderX2 CPU WSM # (HOST) Intel Westmere CPU SNB # (HOST) Intel Sandy/Ivy Bridge CPUs HSW # (HOST) Intel Haswell CPUs @@ -123,11 +122,18 @@ list(APPEND KOKKOS_DEVICES_LIST # List of possible TPLs for Kokkos # From Makefile.kokkos: Options: hwloc,librt,experimental_memkind set(KOKKOS_USE_TPLS_LIST) +if(APPLE) +list(APPEND KOKKOS_USE_TPLS_LIST + HWLOC # hwloc + MEMKIND # experimental_memkind + ) +else() list(APPEND KOKKOS_USE_TPLS_LIST HWLOC # hwloc LIBRT # librt MEMKIND # experimental_memkind ) +endif() # Map of cmake variables to Makefile variables set(KOKKOS_INTERNAL_HWLOC hwloc) set(KOKKOS_INTERNAL_LIBRT librt) @@ -172,6 +178,7 @@ set(KOKKOS_INTERNAL_LAMBDA enable_lambda) set(tmpr "\n ") string(REPLACE ";" ${tmpr} KOKKOS_INTERNAL_ARCH_DOCSTR "${KOKKOS_ARCH_LIST}") +set(KOKKOS_INTERNAL_ARCH_DOCSTR "${tmpr}${KOKKOS_INTERNAL_ARCH_DOCSTR}") # This would be useful, but we use Foo_ENABLE mechanisms #string(REPLACE ";" ${tmpr} KOKKOS_INTERNAL_DEVICES_DOCSTR "${KOKKOS_DEVICES_LIST}") #string(REPLACE ";" ${tmpr} KOKKOS_INTERNAL_USE_TPLS_DOCSTR "${KOKKOS_USE_TPLS_LIST}") @@ -269,7 +276,7 @@ set(KOKKOS_ENABLE_PROFILING_LOAD_PRINT ${KOKKOS_INTERNAL_ENABLE_PROFILING_LOAD_P set_kokkos_default_default(DEPRECATED_CODE ON) set(KOKKOS_ENABLE_DEPRECATED_CODE ${KOKKOS_INTERNAL_ENABLE_DEPRECATED_CODE_DEFAULT} CACHE BOOL "Enable deprecated code.") -set_kokkos_default_default(EXPLICIT_INSTANTIATION ON) +set_kokkos_default_default(EXPLICIT_INSTANTIATION OFF) set(KOKKOS_ENABLE_EXPLICIT_INSTANTIATION ${KOKKOS_INTERNAL_ENABLE_EXPLICIT_INSTANTIATION_DEFAULT} CACHE BOOL "Enable explicit template instantiation.") #------------------------------------------------------------------------------- diff --git a/lib/kokkos/cmake/kokkos_settings.cmake b/lib/kokkos/cmake/kokkos_settings.cmake index 58b30ba24d..387ced6d52 100644 --- a/lib/kokkos/cmake/kokkos_settings.cmake +++ b/lib/kokkos/cmake/kokkos_settings.cmake @@ -15,16 +15,16 @@ # Ensure that KOKKOS_ARCH is in the ARCH_LIST if (KOKKOS_ARCH MATCHES ",") - message("-- Detected a comma in: KOKKOS_ARCH=${KOKKOS_ARCH}") + message("-- Detected a comma in: KOKKOS_ARCH=`${KOKKOS_ARCH}`") message("-- Although we prefer KOKKOS_ARCH to be semicolon-delimited, we do allow") message("-- comma-delimited values for compatibility with scripts (see github.com/trilinos/Trilinos/issues/2330)") string(REPLACE "," ";" KOKKOS_ARCH "${KOKKOS_ARCH}") - message("-- Commas were changed to semicolons, now KOKKOS_ARCH=${KOKKOS_ARCH}") + message("-- Commas were changed to semicolons, now KOKKOS_ARCH=`${KOKKOS_ARCH}`") endif() foreach(arch ${KOKKOS_ARCH}) list(FIND KOKKOS_ARCH_LIST ${arch} indx) if (indx EQUAL -1) - message(FATAL_ERROR "${arch} is not an accepted value for KOKKOS_ARCH." + message(FATAL_ERROR "`${arch}` is not an accepted value in KOKKOS_ARCH=`${KOKKOS_ARCH}`." " Please pick from these choices: ${KOKKOS_INTERNAL_ARCH_DOCSTR}") endif () endforeach() @@ -130,7 +130,8 @@ string(REPLACE ";" ":" KOKKOS_INTERNAL_ADDTOPATH "${addpathl}") # Set the KOKKOS_SETTINGS String -- this is the primary communication with the # makefile configuration. See Makefile.kokkos -set(KOKKOS_SETTINGS KOKKOS_SRC_PATH=${KOKKOS_SRC_PATH}) +set(KOKKOS_SETTINGS KOKKOS_CMAKE=yes) +set(KOKKOS_SETTINGS ${KOKKOS_SETTINGS} KOKKOS_SRC_PATH=${KOKKOS_SRC_PATH}) set(KOKKOS_SETTINGS ${KOKKOS_SETTINGS} KOKKOS_PATH=${KOKKOS_PATH}) set(KOKKOS_SETTINGS ${KOKKOS_SETTINGS} KOKKOS_INSTALL_PATH=${CMAKE_INSTALL_PREFIX}) diff --git a/lib/kokkos/config/test_all_sandia b/lib/kokkos/config/test_all_sandia index 15e6049afb..d94c38cbc6 100755 --- a/lib/kokkos/config/test_all_sandia +++ b/lib/kokkos/config/test_all_sandia @@ -241,17 +241,16 @@ elif [ "$MACHINE" = "white" ]; then BASE_MODULE_LIST="/" IBM_MODULE_LIST="/xl/" - CUDA_MODULE_LIST="/,gcc/5.4.0" - CUDA_MODULE_LIST2="/,gcc/6.3.0,ibm/xl/13.1.6" + CUDA_MODULE_LIST="/,gcc/6.4.0,ibm/xl/16.1.0" # Don't do pthread on white. GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" # Format: (compiler module-list build-list exe-name warning-flag) COMPILERS=("gcc/5.4.0 $BASE_MODULE_LIST $IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "ibm/13.1.6 $IBM_MODULE_LIST $IBM_BUILD_LIST xlC $IBM_WARNING_FLAGS" - "cuda/8.0.44 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/9.0.103 $CUDA_MODULE_LIST2 $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "gcc/6.4.0 $BASE_MODULE_LIST $IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "ibm/16.1.0 $IBM_MODULE_LIST $IBM_BUILD_LIST xlC $IBM_WARNING_FLAGS" + "cuda/9.0.103 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) if [ -z "$ARCH_FLAG" ]; then @@ -362,7 +361,7 @@ elif [ "$MACHINE" = "apollo" ]; then "gcc/5.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" "intel/16.0.1 $BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" "clang/3.9.0 $BASE_MODULE_LIST "Pthread_Serial" clang++ $CLANG_WARNING_FLAGS" - "clang/6.0 $CLANG_MODULE_LIST "Cuda_Pthread" clang++ $CUDA_WARNING_FLAGS" + "clang/6.0 $CLANG_MODULE_LIST "Cuda_Pthread,OpenMP" clang++ $CUDA_WARNING_FLAGS" "cuda/9.1 $CUDA_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) else diff --git a/lib/kokkos/containers/src/Kokkos_DualView.hpp b/lib/kokkos/containers/src/Kokkos_DualView.hpp index 548e96d251..adba0c4158 100644 --- a/lib/kokkos/containers/src/Kokkos_DualView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DualView.hpp @@ -96,6 +96,7 @@ template< class DataType , class Arg3Type = void> class DualView : public ViewTraits< DataType , Arg1Type , Arg2Type, Arg3Type > { +template< class , class , class , class > friend class DualView ; public: //! \name Typedefs for device types and various Kokkos::View specializations. //@{ @@ -182,8 +183,20 @@ public: //! \name Counters to keep track of changes ("modified" flags) //@{ - View modified_device; - View modified_host; +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +protected: + // modified_flags[0] -> host + // modified_flags[1] -> device + typedef View t_modified_flags; + t_modified_flags modified_flags; + +public: +#else + typedef View t_modified_flags; + typedef View t_modified_flag; + t_modified_flags modified_flags; + t_modified_flag modified_host,modified_device; +#endif //@} //! \name Constructors @@ -194,10 +207,14 @@ public: /// Both device and host View objects are constructed using their /// default constructors. The "modified" flags are both initialized /// to "unmodified." - DualView () : - modified_device (View ("DualView::modified_device")), - modified_host (View ("DualView::modified_host")) - {} +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE + DualView () = default; +#else + DualView ():modified_flags (t_modified_flags("DualView::modified_flags")) { + modified_host = t_modified_flag(modified_flags,0); + modified_device = t_modified_flag(modified_flags,1); + } +#endif /// \brief Constructor that allocates View objects on both host and device. /// @@ -219,17 +236,24 @@ public: const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) : d_view (label, n0, n1, n2, n3, n4, n5, n6, n7) , h_view (create_mirror_view (d_view)) // without UVM, host View mirrors - , modified_device (View ("DualView::modified_device")) - , modified_host (View ("DualView::modified_host")) - {} + , modified_flags (t_modified_flags("DualView::modified_flags")) + { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + modified_host = t_modified_flag(modified_flags,0); + modified_device = t_modified_flag(modified_flags,1); +#endif + } //! Copy constructor (shallow copy) template DualView (const DualView& src) : d_view (src.d_view), h_view (src.h_view), - modified_device (src.modified_device), - modified_host (src.modified_host) + modified_flags (src.modified_flags) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + , modified_host(src.modified_host) + , modified_device(src.modified_device) +#endif {} //! Subview constructor @@ -241,8 +265,11 @@ public: ) : d_view( Kokkos::subview( src.d_view , arg0 , args ... ) ) , h_view( Kokkos::subview( src.h_view , arg0 , args ... ) ) - , modified_device (src.modified_device) - , modified_host (src.modified_host) + , modified_flags (src.modified_flags) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + , modified_host(src.modified_host) + , modified_device(src.modified_device) +#endif {} /// \brief Create DualView from existing device and host View objects. @@ -258,8 +285,7 @@ public: DualView (const t_dev& d_view_, const t_host& h_view_) : d_view (d_view_), h_view (h_view_), - modified_device (View ("DualView::modified_device")), - modified_host (View ("DualView::modified_host")) + modified_flags (t_modified_flags("DualView::modified_flags")) { if ( int(d_view.rank) != int(h_view.rank) || d_view.extent(0) != h_view.extent(0) || @@ -281,6 +307,10 @@ public: d_view.span() != h_view.span() ) { Kokkos::Impl::throw_runtime_exception("DualView constructed with incompatible views"); } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + modified_host = t_modified_flag(modified_flags,0); + modified_device = t_modified_flag(modified_flags,1); +#endif } //@} @@ -316,6 +346,30 @@ public: t_dev, t_host>::type& view () const { + #ifndef KOKKOS_ENABLE_DEPRECATED_CODE + constexpr bool device_is_memspace = std::is_same::value; + constexpr bool device_is_execspace = std::is_same::value; + constexpr bool device_exec_is_t_dev_exec = std::is_same::value; + constexpr bool device_mem_is_t_dev_mem = std::is_same::value; + constexpr bool device_exec_is_t_host_exec = std::is_same::value; + constexpr bool device_mem_is_t_host_mem = std::is_same::value; + constexpr bool device_is_t_host_device = std::is_same::value; + constexpr bool device_is_t_dev_device = std::is_same::value; + + static_assert( + device_is_t_dev_device || device_is_t_host_device || + (device_is_memspace && (device_mem_is_t_dev_mem || device_mem_is_t_host_mem) ) || + (device_is_execspace && (device_exec_is_t_dev_exec || device_exec_is_t_host_exec) ) || + ( + (!device_is_execspace && !device_is_memspace) && ( + (device_mem_is_t_dev_mem || device_mem_is_t_host_mem) || + (device_exec_is_t_dev_exec || device_exec_is_t_host_exec) + ) + ) + , + "Template parameter to .view() must exactly match one of the DualView's device types or one of the execution or memory spaces"); + #endif + return Impl::if_c< std::is_same< typename t_dev::memory_space, @@ -324,6 +378,72 @@ public: t_host >::select (d_view , h_view); } + KOKKOS_INLINE_FUNCTION + t_host view_host() const { + return h_view; + } + + KOKKOS_INLINE_FUNCTION + t_dev view_device() const { + return d_view; + } + + template + static int get_device_side() { + constexpr bool device_is_memspace = std::is_same::value; + constexpr bool device_is_execspace = std::is_same::value; + constexpr bool device_exec_is_t_dev_exec = std::is_same::value; + constexpr bool device_mem_is_t_dev_mem = std::is_same::value; + constexpr bool device_exec_is_t_host_exec = std::is_same::value; + constexpr bool device_mem_is_t_host_mem = std::is_same::value; + constexpr bool device_is_t_host_device = std::is_same::value; + constexpr bool device_is_t_dev_device = std::is_same::value; + + #ifndef KOKKOS_ENABLE_DEPRECATED_CODE + static_assert( + device_is_t_dev_device || device_is_t_host_device || + (device_is_memspace && (device_mem_is_t_dev_mem || device_mem_is_t_host_mem) ) || + (device_is_execspace && (device_exec_is_t_dev_exec || device_exec_is_t_host_exec) ) || + ( + (!device_is_execspace && !device_is_memspace) && ( + (device_mem_is_t_dev_mem || device_mem_is_t_host_mem) || + (device_exec_is_t_dev_exec || device_exec_is_t_host_exec) + ) + ) + , + "Template parameter to .sync() must exactly match one of the DualView's device types or one of the execution or memory spaces"); + #endif + + #ifndef KOKKOS_ENABLE_DEPRECATED_CODE + int dev = -1; + #else + int dev = 0; + #endif + if(device_is_t_dev_device) dev = 1; + else if(device_is_t_host_device) dev = 0; + else { + if(device_is_memspace) { + if(device_mem_is_t_dev_mem) dev = 1; + if(device_mem_is_t_host_mem) dev = 0; + if(device_mem_is_t_host_mem && device_mem_is_t_dev_mem) dev = -1; + } + if(device_is_execspace) { + if(device_exec_is_t_dev_exec) dev = 1; + if(device_exec_is_t_host_exec) dev = 0; + if(device_exec_is_t_host_exec && device_exec_is_t_dev_exec) dev = -1; + } + if(!device_is_execspace && !device_is_memspace) { + if(device_mem_is_t_dev_mem) dev = 1; + if(device_mem_is_t_host_mem) dev = 0; + if(device_mem_is_t_host_mem && device_mem_is_t_dev_mem) dev = -1; + if(device_exec_is_t_dev_exec) dev = 1; + if(device_exec_is_t_host_exec) dev = 0; + if(device_exec_is_t_host_exec && device_exec_is_t_dev_exec) dev = -1; + } + } + return dev; + } + /// \brief Update data on device or host only if data in the other /// space has been marked as modified. /// @@ -347,23 +467,20 @@ public: ( std::is_same< Device , int>::value) , int >::type& = 0) { - const unsigned int dev = - Impl::if_c< - std::is_same< - typename t_dev::memory_space, - typename Device::memory_space>::value , - unsigned int, - unsigned int>::select (1, 0); + if(modified_flags.data()==NULL) return; - if (dev) { // if Device is the same as DualView's device type - if ((modified_host () > 0) && (modified_host () >= modified_device ())) { + int dev = get_device_side(); + + if (dev == 1) { // if Device is the same as DualView's device type + if ((modified_flags(0) > 0) && (modified_flags(0) >= modified_flags(1))) { deep_copy (d_view, h_view); - modified_host() = modified_device() = 0; + modified_flags(0) = modified_flags(1) = 0; } - } else { // hopefully Device is the same as DualView's host type - if ((modified_device () > 0) && (modified_device () >= modified_host ())) { + } + if (dev == 0) { // hopefully Device is the same as DualView's host type + if ((modified_flags(1) > 0) && (modified_flags(1) >= modified_flags(0))) { deep_copy (h_view, d_view); - modified_host() = modified_device() = 0; + modified_flags(0) = modified_flags(1) = 0; } } if(std::is_same::value) { @@ -378,46 +495,71 @@ public: ( std::is_same< Device , int>::value) , int >::type& = 0 ) { - const unsigned int dev = - Impl::if_c< - std::is_same< - typename t_dev::memory_space, - typename Device::memory_space>::value, - unsigned int, - unsigned int>::select (1, 0); - if (dev) { // if Device is the same as DualView's device type - if ((modified_host () > 0) && (modified_host () >= modified_device ())) { + if(modified_flags.data()==NULL) return; + + int dev = get_device_side(); + + if (dev == 1) { // if Device is the same as DualView's device type + if ((modified_flags(0) > 0) && (modified_flags(0) >= modified_flags(1))) { Impl::throw_runtime_exception("Calling sync on a DualView with a const datatype."); } - } else { // hopefully Device is the same as DualView's host type - if ((modified_device () > 0) && (modified_device () >= modified_host ())) { + } + if (dev == 0){ // hopefully Device is the same as DualView's host type + if ((modified_flags(1) > 0) && (modified_flags(1) >= modified_flags(0))) { Impl::throw_runtime_exception("Calling sync on a DualView with a const datatype."); } } } + void sync_host() { + if( ! std::is_same< typename traits::data_type , typename traits::non_const_data_type>::value ) + Impl::throw_runtime_exception("Calling sync_host on a DualView with a const datatype."); + if(modified_flags.data()==NULL) return; + if(modified_flags(1) > modified_flags(0)) { + deep_copy (h_view, d_view); + modified_flags(1) = modified_flags(0) = 0; + } + } + + void sync_device() { + if( ! std::is_same< typename traits::data_type , typename traits::non_const_data_type>::value ) + Impl::throw_runtime_exception("Calling sync_device on a DualView with a const datatype."); + if(modified_flags.data()==NULL) return; + if(modified_flags(0) > modified_flags(1)) { + deep_copy (d_view, h_view); + modified_flags(1) = modified_flags(0) = 0; + } + } + template bool need_sync() const { - const unsigned int dev = - Impl::if_c< - std::is_same< - typename t_dev::memory_space, - typename Device::memory_space>::value , - unsigned int, - unsigned int>::select (1, 0); + if(modified_flags.data()==NULL) return false; + int dev = get_device_side(); - if (dev) { // if Device is the same as DualView's device type - if ((modified_host () > 0) && (modified_host () >= modified_device ())) { + if (dev == 1) { // if Device is the same as DualView's device type + if ((modified_flags(0) > 0) && (modified_flags(0) >= modified_flags(1))) { return true; } - } else { // hopefully Device is the same as DualView's host type - if ((modified_device () > 0) && (modified_device () >= modified_host ())) { + } + if (dev == 0){ // hopefully Device is the same as DualView's host type + if ((modified_flags(1) > 0) && (modified_flags(1) >= modified_flags(0))) { return true; } } return false; } + + inline bool need_sync_host() const { + if(modified_flags.data()==NULL) return false; + return modified_flags(0) void modify () { - const unsigned int dev = - Impl::if_c< - std::is_same< - typename t_dev::memory_space, - typename Device::memory_space>::value, - unsigned int, - unsigned int>::select (1, 0); + if(modified_flags.data()==NULL) return; + int dev = get_device_side(); - if (dev) { // if Device is the same as DualView's device type + if (dev == 1) { // if Device is the same as DualView's device type // Increment the device's modified count. - modified_device () = (modified_device () > modified_host () ? - modified_device () : modified_host ()) + 1; - } else { // hopefully Device is the same as DualView's host type + modified_flags(1) = (modified_flags(1) > modified_flags(0) ? + modified_flags(1) : modified_flags(0)) + 1; + } + if (dev == 0) { // hopefully Device is the same as DualView's host type // Increment the host's modified count. - modified_host () = (modified_device () > modified_host () ? - modified_device () : modified_host ()) + 1; + modified_flags(0) = (modified_flags(1) > modified_flags(0) ? + modified_flags(1) : modified_flags(0)) + 1; } #ifdef KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK - if (modified_host() && modified_device()) { + if (modified_flags(0) && modified_flags(1)) { std::string msg = "Kokkos::DualView::modify ERROR: "; msg += "Concurrent modification of host and device views "; msg += "in DualView \""; @@ -455,6 +593,45 @@ public: #endif } + inline void modify_host() { + if(modified_flags.data()!=NULL) { + modified_flags(0) = (modified_flags(1) > modified_flags(0) ? + modified_flags(1) : modified_flags(0)) + 1; + #ifdef KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK + if (modified_flags(0) && modified_flags(1)) { + std::string msg = "Kokkos::DualView::modify_host ERROR: "; + msg += "Concurrent modification of host and device views "; + msg += "in DualView \""; + msg += d_view.label(); + msg += "\"\n"; + Kokkos::abort(msg.c_str()); + } + #endif + } + } + + inline void modify_device() { + if(modified_flags.data()!=NULL) { + modified_flags(1) = (modified_flags(1) > modified_flags(0) ? + modified_flags(1) : modified_flags(0)) + 1; + #ifdef KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK + if (modified_flags(0) && modified_flags(1)) { + std::string msg = "Kokkos::DualView::modify_device ERROR: "; + msg += "Concurrent modification of host and device views "; + msg += "in DualView \""; + msg += d_view.label(); + msg += "\"\n"; + Kokkos::abort(msg.c_str()); + } + #endif + } + } + + inline void clear_sync_state() { + if(modified_flags.data()!=NULL) + modified_flags(1) = modified_flags(0) = 0; + } + //@} //! \name Methods for reallocating or resizing the View objects. //@{ @@ -476,7 +653,10 @@ public: h_view = create_mirror_view( d_view ); /* Reset dirty flags */ - modified_device() = modified_host() = 0; + if(modified_flags.data()==NULL) { + modified_flags = t_modified_flags("DualView::modified_flags"); + } else + modified_flags(1) = modified_flags(0) = 0; } /// \brief Resize both views, copying old contents into new if necessary. @@ -491,13 +671,16 @@ public: const size_t n5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG , const size_t n6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG , const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG ) { - if(modified_device() >= modified_host()) { + if(modified_flags.data()==NULL) { + modified_flags = t_modified_flags("DualView::modified_flags"); + } + if(modified_flags(1) >= modified_flags(0)) { /* Resize on Device */ ::Kokkos::resize(d_view,n0,n1,n2,n3,n4,n5,n6,n7); h_view = create_mirror_view( d_view ); /* Mark Device copy as modified */ - modified_device() = modified_device()+1; + modified_flags(1) = modified_flags(1)+1; } else { /* Realloc on Device */ @@ -525,7 +708,7 @@ public: d_view = create_mirror_view( typename t_dev::execution_space(), h_view ); /* Mark Host copy as modified */ - modified_host() = modified_host()+1; + modified_flags(0) = modified_flags(0)+1; } } @@ -649,7 +832,10 @@ void deep_copy (DualView dst, // trust me, this must not be a reference const DualView& src ) { - if (src.modified_device () >= src.modified_host ()) { + if(src.modified_flags.data()==NULL || dst.modified_flags.data()==NULL) { + return deep_copy(dst.d_view, src.d_view); + } + if (src.modified_flags(1) >= src.modified_flags(0)) { deep_copy (dst.d_view, src.d_view); dst.template modify::device_type> (); } else { @@ -666,7 +852,10 @@ deep_copy (const ExecutionSpace& exec , DualView dst, // trust me, this must not be a reference const DualView& src ) { - if (src.modified_device () >= src.modified_host ()) { + if(src.modified_flags.data()==NULL || dst.modified_flags.data()==NULL) { + return deep_copy(exec, dst.d_view, src.d_view); + } + if (src.modified_flags(1) >= src.modified_flags(0)) { deep_copy (exec, dst.d_view, src.d_view); dst.template modify::device_type> (); } else { diff --git a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp index b30009a999..8be2c49a31 100644 --- a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp @@ -64,7 +64,7 @@ namespace Impl { template struct DynRankDimTraits { - enum : size_t{unspecified =KOKKOS_INVALID_INDEX}; + enum : size_t{unspecified = KOKKOS_INVALID_INDEX}; // Compute the rank of the view from the nonzero dimension arguments. KOKKOS_INLINE_FUNCTION @@ -384,8 +384,8 @@ public: // Removed dimension checks... typedef typename DstType::offset_type dst_offset_type ; - dst.m_map.m_offset = dst_offset_type(std::integral_constant() , src.layout() ); //Check this for integer input1 for padding, etc - dst.m_map.m_handle = Kokkos::Impl::ViewDataHandle< DstTraits >::assign( src.m_map.m_handle , src.m_track ); + dst.m_map.m_impl_offset = dst_offset_type(std::integral_constant() , src.layout() ); //Check this for integer input1 for padding, etc + dst.m_map.m_impl_handle = Kokkos::Impl::ViewDataHandle< DstTraits >::assign( src.m_map.m_impl_handle , src.m_track ); dst.m_track.assign( src.m_track , DstTraits::is_managed ); dst.m_rank = src.Rank ; } @@ -565,10 +565,14 @@ public: //---------------------------------------- // Allow specializations to query their specialized map - +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION const Kokkos::Impl::ViewMapping< traits , void > & implementation_map() const { return m_map ; } +#endif + KOKKOS_INLINE_FUNCTION + const Kokkos::Impl::ViewMapping< traits , void > & + impl_map() const { return m_map ; } //---------------------------------------- @@ -624,7 +628,7 @@ public: reference_type operator()() const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (0 , this->rank(), m_track, m_map) ) - return implementation_map().reference(); + return impl_map().reference(); //return m_map.reference(0,0,0,0,0,0,0); } @@ -647,7 +651,7 @@ public: typename std::enable_if< !std::is_same::value && std::is_integral::value, reference_type>::type operator[](const iType & i0) const { -// auto map = implementation_map(); +// auto map = impl_map(); const size_t dim_scalar = m_map.dimension_scalar(); const size_t bytes = this->span() / dim_scalar; @@ -785,7 +789,7 @@ public: reference_type access() const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (0 , this->rank(), m_track, m_map) ) - return implementation_map().reference(); + return impl_map().reference(); //return m_map.reference(0,0,0,0,0,0,0); } @@ -1004,7 +1008,7 @@ public: //---------------------------------------- // Allocation according to allocation properties and array layout - // unused arg_layout dimensions must be set toKOKKOS_INVALID_INDEX so that rank deduction can properly take place + // unused arg_layout dimensions must be set to KOKKOS_INVALID_INDEX so that rank deduction can properly take place template< class ... P > explicit inline DynRankView( const Kokkos::Impl::ViewCtorProp< P ... > & arg_prop @@ -1179,7 +1183,7 @@ public: : DynRankView( Kokkos::Impl::ViewCtorProp< std::string >( arg_label ) , typename traits::array_layout ( arg_N0 , arg_N1 , arg_N2 , arg_N3 , arg_N4 , arg_N5 , arg_N6 , arg_N7 ) - ) + ) {} // For backward compatibility @@ -1189,8 +1193,7 @@ public: , const typename traits::array_layout & arg_layout ) : DynRankView( Kokkos::Impl::ViewCtorProp< std::string , Kokkos::Impl::WithoutInitializing_t >( arg_prop.label , Kokkos::WithoutInitializing ) - - , Impl::DynRankDimTraits::createLayout(arg_layout) + , arg_layout ) {} @@ -1205,7 +1208,9 @@ public: , const size_t arg_N6 =KOKKOS_INVALID_INDEX , const size_t arg_N7 =KOKKOS_INVALID_INDEX ) - : DynRankView(Kokkos::Impl::ViewCtorProp< std::string , Kokkos::Impl::WithoutInitializing_t >( arg_prop.label , Kokkos::WithoutInitializing ), arg_N0, arg_N1, arg_N2, arg_N3, arg_N4, arg_N5, arg_N6, arg_N7 ) + : DynRankView(Kokkos::Impl::ViewCtorProp< std::string , Kokkos::Impl::WithoutInitializing_t >( arg_prop.label , Kokkos::WithoutInitializing ) + , typename traits::array_layout(arg_N0, arg_N1, arg_N2, arg_N3, arg_N4, arg_N5, arg_N6, arg_N7) + ) {} //---------------------------------------- @@ -1445,30 +1450,30 @@ public: ret_type dst ; const SubviewExtents< 7 , rank > extents = - ExtentGenerator< Args ... >::generator( src.m_map.m_offset.m_dim , args... ) ; + ExtentGenerator< Args ... >::generator( src.m_map.m_impl_offset.m_dim , args... ) ; - dst_offset_type tempdst( src.m_map.m_offset , extents ) ; + dst_offset_type tempdst( src.m_map.m_impl_offset , extents ) ; dst.m_track = src.m_track ; - dst.m_map.m_offset.m_dim.N0 = tempdst.m_dim.N0 ; - dst.m_map.m_offset.m_dim.N1 = tempdst.m_dim.N1 ; - dst.m_map.m_offset.m_dim.N2 = tempdst.m_dim.N2 ; - dst.m_map.m_offset.m_dim.N3 = tempdst.m_dim.N3 ; - dst.m_map.m_offset.m_dim.N4 = tempdst.m_dim.N4 ; - dst.m_map.m_offset.m_dim.N5 = tempdst.m_dim.N5 ; - dst.m_map.m_offset.m_dim.N6 = tempdst.m_dim.N6 ; + dst.m_map.m_impl_offset.m_dim.N0 = tempdst.m_dim.N0 ; + dst.m_map.m_impl_offset.m_dim.N1 = tempdst.m_dim.N1 ; + dst.m_map.m_impl_offset.m_dim.N2 = tempdst.m_dim.N2 ; + dst.m_map.m_impl_offset.m_dim.N3 = tempdst.m_dim.N3 ; + dst.m_map.m_impl_offset.m_dim.N4 = tempdst.m_dim.N4 ; + dst.m_map.m_impl_offset.m_dim.N5 = tempdst.m_dim.N5 ; + dst.m_map.m_impl_offset.m_dim.N6 = tempdst.m_dim.N6 ; - dst.m_map.m_offset.m_stride.S0 = tempdst.m_stride.S0 ; - dst.m_map.m_offset.m_stride.S1 = tempdst.m_stride.S1 ; - dst.m_map.m_offset.m_stride.S2 = tempdst.m_stride.S2 ; - dst.m_map.m_offset.m_stride.S3 = tempdst.m_stride.S3 ; - dst.m_map.m_offset.m_stride.S4 = tempdst.m_stride.S4 ; - dst.m_map.m_offset.m_stride.S5 = tempdst.m_stride.S5 ; - dst.m_map.m_offset.m_stride.S6 = tempdst.m_stride.S6 ; + dst.m_map.m_impl_offset.m_stride.S0 = tempdst.m_stride.S0 ; + dst.m_map.m_impl_offset.m_stride.S1 = tempdst.m_stride.S1 ; + dst.m_map.m_impl_offset.m_stride.S2 = tempdst.m_stride.S2 ; + dst.m_map.m_impl_offset.m_stride.S3 = tempdst.m_stride.S3 ; + dst.m_map.m_impl_offset.m_stride.S4 = tempdst.m_stride.S4 ; + dst.m_map.m_impl_offset.m_stride.S5 = tempdst.m_stride.S5 ; + dst.m_map.m_impl_offset.m_stride.S6 = tempdst.m_stride.S6 ; - dst.m_map.m_handle = dst_handle_type( src.m_map.m_handle + - src.m_map.m_offset( extents.domain_offset(0) + dst.m_map.m_impl_handle = dst_handle_type( src.m_map.m_impl_handle + + src.m_map.m_impl_offset( extents.domain_offset(0) , extents.domain_offset(1) , extents.domain_offset(2) , extents.domain_offset(3) @@ -1896,6 +1901,7 @@ inline typename DynRankView::HostMirror create_mirror( const DynRankView & src , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value && ! std::is_same< typename Kokkos::ViewTraits::array_layout , Kokkos::LayoutStride >::value >::type * = 0 @@ -1914,6 +1920,7 @@ inline typename DynRankView::HostMirror create_mirror( const DynRankView & src , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value && std::is_same< typename Kokkos::ViewTraits::array_layout , Kokkos::LayoutStride >::value >::type * = 0 @@ -1929,7 +1936,11 @@ create_mirror( const DynRankView & src // Create a mirror in a new space (specialization for different space) template -typename Impl::MirrorDRVType::view_type create_mirror(const Space& , const Kokkos::DynRankView & src) { +typename Impl::MirrorDRVType::view_type +create_mirror(const Space& , const Kokkos::DynRankView & src + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0) { return typename Impl::MirrorDRVType::view_type(src.label(), Impl::reconstructLayout(src.layout(), src.rank()) ); } @@ -1985,6 +1996,29 @@ create_mirror_view(const Space& , const Kokkos::DynRankView & src return typename Impl::MirrorDRViewType::view_type(src.label(), Impl::reconstructLayout(src.layout(), src.rank()) ); } +// Create a mirror view and deep_copy in a new space (specialization for same space) +template +typename Impl::MirrorDRViewType::view_type +create_mirror_view_and_copy(const Space& , const Kokkos::DynRankView & src + , std::string const& name = "" + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + (void)name; + return src; +} + +// Create a mirror view and deep_copy in a new space (specialization for different space) +template +typename Impl::MirrorDRViewType::view_type +create_mirror_view_and_copy(const Space& , const Kokkos::DynRankView & src + , std::string const& name = "" + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + using Mirror = typename Impl::MirrorDRViewType::view_type; + std::string label = name.empty() ? src.label() : name; + auto mirror = Mirror( Kokkos::ViewAllocateWithoutInitializing(label), Impl::reconstructLayout(src.layout(), src.rank()) ); + deep_copy(mirror, src); + return mirror; +} + } //end Kokkos diff --git a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp new file mode 100644 index 0000000000..b614764ee7 --- /dev/null +++ b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp @@ -0,0 +1,1895 @@ +/* + * Kokkos_OffsetView.hpp + * + * Created on: Apr 23, 2018 + * Author: swbova + */ + +#ifndef KOKKOS_OFFSETVIEW_HPP_ +#define KOKKOS_OFFSETVIEW_HPP_ + + +#include + +#include + +namespace Kokkos { + + namespace Experimental { + //---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- + + template< class DataType , class ... Properties > + class OffsetView ; + + template< class > struct is_offset_view : public std::false_type {}; + + template< class D, class ... P > + struct is_offset_view< OffsetView > : public std::true_type {}; + + template< class D, class ... P > + struct is_offset_view< const OffsetView > : public std::true_type {}; + +#define KOKKOS_INVALID_OFFSET int64_t(0) +#define KOKKOS_INVALID_INDEX_RANGE {KOKKOS_INVALID_OFFSET, KOKKOS_INVALID_OFFSET} + + template ::value && + std::is_signed::value, iType >::type = 0> + using IndexRange = Kokkos::Array; + + + using index_list_type = std::initializer_list; + + + // template ::value && + // std::is_signed::value, iType >::type = 0> using min_index_type = std::initializer_list; + + namespace Impl { + + template + struct GetOffsetViewTypeFromViewType { + + typedef OffsetView type; + + }; + + template< unsigned , class MapType, class BeginsType > + KOKKOS_INLINE_FUNCTION + bool offsetview_verify_operator_bounds( const MapType &, const BeginsType & ) + { return true ; } + + template< unsigned R , class MapType , class BeginsType, class iType , class ... Args > + KOKKOS_INLINE_FUNCTION + bool offsetview_verify_operator_bounds + ( const MapType & map + , const BeginsType & begins + , const iType & i + , Args ... args + ) + { + + const bool legalIndex = ( int64_t(i) >= begins[R] ) && + ( int64_t(i) <= int64_t(begins[R] + map.extent(R) - 1) ); + return legalIndex + && offsetview_verify_operator_bounds( map , begins, args ... ); + } + template< unsigned , class MapType, class BeginsType > + inline + void offsetview_error_operator_bounds( char * , int , const MapType & , const BeginsType &) + {} + + template< unsigned R , class MapType , class BeginsType , class iType , class ... Args > + inline + void offsetview_error_operator_bounds + ( char * buf + , int len + , const MapType & map + , const BeginsType begins + , const iType & i + , Args ... args + ) + { + const int64_t b = begins[R]; + const int64_t e = b + map.extent(R) - 1; + const int n = + snprintf(buf,len," %ld <= %ld <= %ld %c" + , static_cast(b) + , static_cast(i) + , static_cast(e) + , ( sizeof...(Args) ? ',' : ')' ) + ); + offsetview_error_operator_bounds(buf+n,len-n,map,begins,args...); + } + + template< class MemorySpace , class MapType , class BeginsType, class ... Args > + KOKKOS_INLINE_FUNCTION + void offsetview_verify_operator_bounds + ( Kokkos::Impl::SharedAllocationTracker const & tracker + , const MapType & map , const BeginsType & begins, Args ... args ) + { + if ( ! offsetview_verify_operator_bounds<0>( map , begins, args ... ) ) { +#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) + enum { LEN = 1024 }; + char buffer[ LEN ]; + const std::string label = tracker.template get_label(); + int n = snprintf(buffer,LEN,"OffsetView bounds error of view labeled %s (",label.c_str()); + offsetview_error_operator_bounds<0>( buffer + n , LEN - n , map ,begins, args ... ); + Kokkos::Impl::throw_runtime_exception(std::string(buffer)); +#else + /* Check #1: is there a SharedAllocationRecord? + (we won't use it, but if its not there then there isn't + a corresponding SharedAllocationHeader containing a label). + This check should cover the case of Views that don't + have the Unmanaged trait but were initialized by pointer. */ + if (tracker.has_record()) { + Kokkos::Impl::operator_bounds_error_on_device( + map, Kokkos::Impl::has_printable_label_typedef()); + } else { + Kokkos::abort("OffsetView bounds error"); + } +#endif + } + } + +#ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST + KOKKOS_INLINE_FUNCTION + void runtime_check_rank_host(const size_t rank_dynamic, const size_t rank, + const index_list_type minIndices, const std::string & label) + { + bool isBad = false; + std::string message = "Kokkos::Experimental::OffsetView ERROR: for OffsetView labeled '" + label + "':"; + if (rank_dynamic != rank) { + message += "The full rank must be the same as the dynamic rank. full rank = "; + message += std::to_string(rank) + " dynamic rank = " + std::to_string(rank_dynamic) + "\n"; + isBad = true; + } + + size_t numOffsets = 0; + for(size_t i = 0; i < minIndices.size(); ++i ){ + if( minIndices.begin()[i] != -KOKKOS_INVALID_OFFSET) numOffsets++; + } + if (numOffsets != rank_dynamic) { + message += "The number of offsets provided ( " + std::to_string(numOffsets) + + " ) must equal the dynamic rank ( " + std::to_string(rank_dynamic) + " )."; + isBad = true; + } + + if(isBad) Kokkos::abort(message.c_str()); + } +#endif + + KOKKOS_INLINE_FUNCTION + void runtime_check_rank_device(const size_t rank_dynamic, const size_t rank, + const index_list_type minIndices) + { + if (rank_dynamic != rank) { + Kokkos::abort("The full rank of an OffsetView must be the same as the dynamic rank."); + } + size_t numOffsets = 0; + for(size_t i = 0; i < minIndices.size(); ++i ){ + if( minIndices.begin()[i] != -KOKKOS_INVALID_OFFSET) numOffsets++; + } + if (numOffsets != rank) { + Kokkos::abort("The number of offsets provided to an OffsetView constructor must equal the dynamic rank."); + } + + } + } + + template< class DataType , class ... Properties > + class OffsetView : public ViewTraits< DataType , Properties ... > { + public: + + typedef ViewTraits< DataType , Properties ... > traits ; + + + + private: + + template< class , class ... > friend class OffsetView ; + template< class , class ... > friend class View ; //FIXME delete this line + template< class , class ... > friend class Kokkos::Impl::ViewMapping ; + + + typedef Kokkos::Impl::ViewMapping< traits , void > map_type ; + typedef Kokkos::Impl::SharedAllocationTracker track_type ; + public: + enum { Rank = map_type::Rank }; + typedef Kokkos::Array begins_type ; + + + template ::value, iType>::type = 0> + KOKKOS_INLINE_FUNCTION + int64_t begin(const iType dimension) const { + return dimension < Rank ? m_begins[dimension] : 0; + } + + KOKKOS_INLINE_FUNCTION + begins_type begins() const { return m_begins;} + + template ::value, iType>::type = 0> + KOKKOS_INLINE_FUNCTION + int64_t end(const iType dimension) const {return begin(dimension) + m_map.extent(dimension);} + + + private: + track_type m_track ; + map_type m_map ; + begins_type m_begins; + + public: + //---------------------------------------- + /** \brief Compatible view of array of scalar types */ + typedef OffsetView< typename traits::scalar_array_type , + typename traits::array_layout , + typename traits::device_type , + typename traits::memory_traits > + array_type ; + + /** \brief Compatible view of const data type */ + typedef OffsetView< typename traits::const_data_type , + typename traits::array_layout , + typename traits::device_type , + typename traits::memory_traits > + const_type ; + + /** \brief Compatible view of non-const data type */ + typedef OffsetView< typename traits::non_const_data_type , + typename traits::array_layout , + typename traits::device_type , + typename traits::memory_traits > + non_const_type ; + + /** \brief Compatible HostMirror view */ + typedef OffsetView< typename traits::non_const_data_type , + typename traits::array_layout , + typename traits::host_mirror_space > + HostMirror ; + + //---------------------------------------- + // Domain rank and extents + + /** \brief rank() to be implemented + */ + //KOKKOS_INLINE_FUNCTION + //static + //constexpr unsigned rank() { return map_type::Rank; } + + template< typename iType > + KOKKOS_INLINE_FUNCTION constexpr + typename std::enable_if< std::is_integral::value , size_t >::type + extent( const iType & r ) const + { return m_map.extent(r); } + + template< typename iType > + KOKKOS_INLINE_FUNCTION constexpr + typename std::enable_if< std::is_integral::value , int >::type + extent_int( const iType & r ) const + { return static_cast(m_map.extent(r)); } + + KOKKOS_INLINE_FUNCTION constexpr + typename traits::array_layout layout() const + { return m_map.layout(); } + + + KOKKOS_INLINE_FUNCTION constexpr size_t size() const { return m_map.dimension_0() * + m_map.dimension_1() * + m_map.dimension_2() * + m_map.dimension_3() * + m_map.dimension_4() * + m_map.dimension_5() * + m_map.dimension_6() * + m_map.dimension_7(); } + + KOKKOS_INLINE_FUNCTION constexpr size_t stride_0() const { return m_map.stride_0(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_1() const { return m_map.stride_1(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_2() const { return m_map.stride_2(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_3() const { return m_map.stride_3(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_4() const { return m_map.stride_4(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_5() const { return m_map.stride_5(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_6() const { return m_map.stride_6(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_7() const { return m_map.stride_7(); } + + template< typename iType > + KOKKOS_INLINE_FUNCTION constexpr + typename std::enable_if< std::is_integral::value , size_t >::type + stride(iType r) const { + return (r == 0 ? m_map.stride_0() : + (r == 1 ? m_map.stride_1() : + (r == 2 ? m_map.stride_2() : + (r == 3 ? m_map.stride_3() : + (r == 4 ? m_map.stride_4() : + (r == 5 ? m_map.stride_5() : + (r == 6 ? m_map.stride_6() : + m_map.stride_7()))))))); + } + + template< typename iType > + KOKKOS_INLINE_FUNCTION void stride( iType * const s ) const { m_map.stride(s); } + + //---------------------------------------- + // Range span is the span which contains all members. + + typedef typename map_type::reference_type reference_type ; + typedef typename map_type::pointer_type pointer_type ; + + enum { reference_type_is_lvalue_reference = std::is_lvalue_reference< reference_type >::value }; + + KOKKOS_INLINE_FUNCTION constexpr size_t span() const { return m_map.span(); } + KOKKOS_INLINE_FUNCTION bool span_is_contiguous() const { return m_map.span_is_contiguous(); } + KOKKOS_INLINE_FUNCTION constexpr pointer_type data() const { return m_map.data(); } + + //---------------------------------------- + // Allow specializations to query their specialized map + + KOKKOS_INLINE_FUNCTION + const Kokkos::Impl::ViewMapping< traits , void > & + implementation_map() const { return m_map ; } + + //---------------------------------------- + + private: + + enum { + is_layout_left = std::is_same< typename traits::array_layout + , Kokkos::LayoutLeft >::value , + + is_layout_right = std::is_same< typename traits::array_layout + , Kokkos::LayoutRight >::value , + + is_layout_stride = std::is_same< typename traits::array_layout + , Kokkos::LayoutStride >::value , + + is_default_map = + std::is_same< typename traits::specialize , void >::value && + ( is_layout_left || is_layout_right || is_layout_stride ) + }; + + template< class Space , bool = Kokkos::Impl::MemorySpaceAccess< Space , typename traits::memory_space >::accessible > struct verify_space + { KOKKOS_FORCEINLINE_FUNCTION static void check() {} }; + + template< class Space > struct verify_space + { KOKKOS_FORCEINLINE_FUNCTION static void check() + { Kokkos::abort("Kokkos::View ERROR: attempt to access inaccessible memory space"); + }; + }; + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + +#define KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( ARG ) \ + OffsetView::template verify_space< Kokkos::Impl::ActiveExecutionMemorySpace >::check(); \ + Kokkos::Experimental::Impl::offsetview_verify_operator_bounds< typename traits::memory_space > ARG ; + +#else + +#define KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( ARG ) \ + OffsetView::template verify_space< Kokkos::Impl::ActiveExecutionMemorySpace >::check(); + +#endif + public: + + //------------------------------ + // Rank 0 operator() + + KOKKOS_FORCEINLINE_FUNCTION + reference_type + operator()() const + { + return m_map.reference(); + } + //------------------------------ + // Rank 1 operator() + + + template< typename I0> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0) const + { + + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.reference(j0); + } + + template< typename I0> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && ! is_layout_stride + ), reference_type >::type + operator()( const I0 & i0 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.m_impl_handle[ j0 ]; + } + + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator()( const I0 & i0) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * j0 ]; + } + //------------------------------ + // Rank 1 operator[] + + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && ! is_default_map + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.reference(j0); + } + + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && ! is_layout_stride + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.m_impl_handle[ j0 ]; + } + + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0) ) + const size_t j0 = i0 - m_begins[0]; + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * j0 ]; + } + + + //------------------------------ + // Rank 2 + + template< typename I0 , typename I1 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.reference(j0,j1); + } + + template< typename I0 , typename I1 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_left && ( traits::rank_dynamic == 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.m_impl_handle[ j0 + m_map.m_impl_offset.m_dim.N0 * j1 ]; + } + + template< typename I0 , typename I1> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_left && ( traits::rank_dynamic != 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.m_impl_handle[ j0 + m_map.m_impl_offset.m_stride * j1 ]; + } + + template< typename I0 , typename I1 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_right && ( traits::rank_dynamic == 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.m_impl_handle[ j1 + m_map.m_impl_offset.m_dim.N1 * j0 ]; + } + + template< typename I0 , typename I1 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_right && ( traits::rank_dynamic != 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.m_impl_handle[ j1 + m_map.m_impl_offset.m_stride * j0 ]; + } + + template< typename I0 , typename I1> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + return m_map.m_impl_handle[ j0 * m_map.m_impl_offset.m_stride.S0 + + j1 * m_map.m_impl_offset.m_stride.S1 ]; + } + + //------------------------------ + // Rank 3 + + template< typename I0 , typename I1 , typename I2 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 3 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1, i2) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0, j1, j2) ]; + } + + template< typename I0 , typename I1 , typename I2> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 3 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + return m_map.reference(j0, j1, j2); + } + + //------------------------------ + // Rank 4 + + template< typename I0 , typename I1 , typename I2 , typename I3> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 4 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1, i2, i3) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0,j1,j2,j3) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 4 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1, i2, i3) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + return m_map.reference(j0,j1,j2,j3); + } + + //------------------------------ + // Rank 5 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 5 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1, i2, i3, i4) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0, j1,j2, j3, j4) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 5 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map, m_begins, i0,i1, i2, i3, i4) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + return m_map.reference(j0,j1,j2,j3,j4); + } + + //------------------------------ + // Rank 6 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 6 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0,j1,j2,j3,j4,j5) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 6 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + return m_map.reference(j0,j1,j2,j3,j4,j5); + } + + //------------------------------ + // Rank 7 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 7 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5, i6) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + const size_t j6 = i6 - m_begins[6]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0,j1,j2,j3,j4,j5,j6) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 7 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5, i6) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + const size_t j6 = i6 - m_begins[6]; + return m_map.reference(j0,j1,j2,j3,j4,j5,j6); + } + + //------------------------------ + // Rank 8 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 , typename I7 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 8 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5, i6, i7) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + const size_t j6 = i6 - m_begins[6]; + const size_t j7 = i7 - m_begins[7]; + return m_map.m_impl_handle[ m_map.m_impl_offset(j0,j1,j2,j3,j4,j5,j6,j7) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 , typename I7> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 8 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 ) const + { + KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY( (m_track,m_map,m_begins, i0,i1, i2, i3, i4, i5, i6, i7) ) + const size_t j0 = i0 - m_begins[0]; + const size_t j1 = i1 - m_begins[1]; + const size_t j2 = i2 - m_begins[2]; + const size_t j3 = i3 - m_begins[3]; + const size_t j4 = i4 - m_begins[4]; + const size_t j5 = i5 - m_begins[5]; + const size_t j6 = i6 - m_begins[6]; + const size_t j7 = i7 - m_begins[7]; + return m_map.reference(j0,j1,j2,j3,j4,j5,j6,j7); + } + + +#undef KOKKOS_IMPL_OFFSETVIEW_OPERATOR_VERIFY + + //---------------------------------------- + // Standard destructor, constructors, and assignment operators + + KOKKOS_INLINE_FUNCTION + ~OffsetView() {} + + KOKKOS_INLINE_FUNCTION + OffsetView() : m_track(), m_map() { + + for(size_t i = 0; i < Rank; ++i) m_begins[i] = KOKKOS_INVALID_INDEX; + } + + KOKKOS_INLINE_FUNCTION + OffsetView( const OffsetView & rhs ) : m_track( rhs.m_track, traits::is_managed ), m_map( rhs.m_map ), + m_begins(rhs.m_begins) {} + + KOKKOS_INLINE_FUNCTION + OffsetView( OffsetView && rhs ) : m_track( std::move(rhs.m_track) ), + m_map( std::move(rhs.m_map)), m_begins(std::move(rhs.m_begins)) {} + + KOKKOS_INLINE_FUNCTION + OffsetView & operator = ( const OffsetView & rhs ) { + m_track = rhs.m_track ; + m_map = rhs.m_map ; + m_begins = rhs.m_begins; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + OffsetView & operator = ( OffsetView && rhs ) { + m_track = std::move(rhs.m_track) ; + m_map = std::move(rhs.m_map) ; + m_begins = std::move(rhs.m_begins) ; + return *this ; + } + + //interoperability with View + private: + typedef View< typename traits::scalar_array_type , + typename traits::array_layout , + typename traits::device_type , + typename traits::memory_traits > view_type; + public: + + KOKKOS_INLINE_FUNCTION + view_type view() const { + + view_type v(m_track, m_map); + return v ; + } + + template + KOKKOS_INLINE_FUNCTION + OffsetView( const View & aview) : + m_track(aview.impl_track()), m_map(){ + + typedef typename OffsetView::traits SrcTraits ; + typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , void > Mapping ; + static_assert( Mapping::is_assignable , "Incompatible OffsetView copy construction" ); + Mapping::assign( m_map , aview.impl_map() , m_track ); + + for (int i = 0; i < aview.Rank; ++i) { + m_begins[i] = 0; + } + } + + template + KOKKOS_INLINE_FUNCTION + OffsetView( const View & aview + ,const index_list_type & minIndices) : + m_track(aview.impl_track()), m_map(){ + + typedef typename OffsetView::traits SrcTraits ; + typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , void > Mapping ; + static_assert( Mapping::is_assignable , "Incompatible OffsetView copy construction" ); + Mapping::assign( m_map , aview.impl_map() , m_track ); + +#ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST + Kokkos::Experimental::Impl::runtime_check_rank_host(traits::rank_dynamic, Rank, minIndices, label()); +#else + Kokkos::Experimental::Impl::runtime_check_rank_device(traits::rank_dynamic, Rank, minIndices); + +#endif + + for (size_t i = 0; i < minIndices.size(); ++i) { + m_begins[i] = minIndices.begin()[i]; + } + } + template + KOKKOS_INLINE_FUNCTION + OffsetView( const View & aview + ,const begins_type & beg) : + m_track(aview.impl_track()), m_map(), m_begins(beg){ + + typedef typename OffsetView::traits SrcTraits ; + typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , void > Mapping ; + static_assert( Mapping::is_assignable , "Incompatible OffsetView copy construction" ); + Mapping::assign( m_map , aview.impl_map() , m_track ); + + + //#ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST + // Kokkos::Experimental::Impl::runtime_check_rank_host(traits::rank_dynamic, Rank, minIndices, label()); + //#else + // Kokkos::Experimental::Impl::runtime_check_rank_device(traits::rank_dynamic, Rank, minIndices); + // + //#endif + + } + + // may assign unmanaged from managed. + + + template< class RT , class ... RP > + KOKKOS_INLINE_FUNCTION + OffsetView( const OffsetView & rhs ) + : m_track( rhs.m_track , traits::is_managed ) + , m_map() + , m_begins(rhs.m_begins) + { + typedef typename OffsetView::traits SrcTraits ; + typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , void > Mapping ; + static_assert( Mapping::is_assignable , "Incompatible OffsetView copy construction" ); + Mapping::assign( m_map , rhs.m_map , rhs.m_track ); //swb what about assign? + } + + + //---------------------------------------- + // Allocation tracking properties + KOKKOS_INLINE_FUNCTION + int use_count() const + { return m_track.use_count(); } + + inline + const std::string label() const + { return m_track.template get_label< typename traits::memory_space >(); } + + + template< typename Label> + explicit inline + OffsetView( const Label & arg_label + ,typename std::enable_if::value , const index_list_type >::type + range0 + ,const index_list_type range1 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range2 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range3 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range4 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range5 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range6 = KOKKOS_INVALID_INDEX_RANGE + ,const index_list_type range7 = KOKKOS_INVALID_INDEX_RANGE + + ) : OffsetView( Kokkos::Impl::ViewCtorProp< std::string >( arg_label ), + typename traits::array_layout + ( range0.begin()[1] - range0.begin()[0] + 1, range1.begin()[1] - range1.begin()[0] + 1 , + range2.begin()[1] - range2.begin()[0] + 1, range3.begin()[1] - range3.begin()[0] + 1, + range4.begin()[1] - range4.begin()[0] + 1, range5.begin()[1] - range5.begin()[0] + 1 , + range6.begin()[1] - range6.begin()[0] + 1, range7.begin()[1] - range7.begin()[0] + 1 ), + {range0.begin()[0], range1.begin()[0], range2.begin()[0], range3.begin()[0], range4.begin()[0], + range5.begin()[0], range6.begin()[0], range7.begin()[0] }) + { + + } + + + + template + explicit KOKKOS_INLINE_FUNCTION + OffsetView( const Kokkos::Impl::ViewCtorProp< P ... > & arg_prop + ,typename std::enable_if< Kokkos::Impl::ViewCtorProp< P... >::has_pointer , typename traits::array_layout >::type const & arg_layout + ,const index_list_type minIndices + ) + : m_track() // No memory tracking + , m_map( arg_prop , arg_layout ) + { + + + for (size_t i = 0; i < minIndices.size(); ++i) { + m_begins[i] = minIndices.begin()[i]; + } + static_assert( + std::is_same< pointer_type + , typename Kokkos::Impl::ViewCtorProp< P... >::pointer_type + >::value , + "When constructing OffsetView to wrap user memory, you must supply matching pointer type" ); + } + + template + explicit inline + OffsetView( const Kokkos::Impl::ViewCtorProp< P ... > & arg_prop + , typename std::enable_if< ! Kokkos::Impl::ViewCtorProp< P... >::has_pointer , typename traits::array_layout>::type const & arg_layout + ,const index_list_type minIndices + ) + : m_track() + , m_map() + + { + + for(size_t i = 0; i < Rank; ++i) + m_begins[i] = minIndices.begin()[i]; + + // Append layout and spaces if not input + typedef Kokkos::Impl::ViewCtorProp< P ... > alloc_prop_input ; + + // use 'std::integral_constant' for non-types + // to avoid duplicate class error. + typedef Kokkos::Impl::ViewCtorProp + < P ..., typename std::conditional < alloc_prop_input::has_label + , std::integral_constant, typename std::string >::type + , typename std::conditional + < alloc_prop_input::has_memory_space + , std::integral_constant + , typename traits::device_type::memory_space + >::type + , typename std::conditional + < alloc_prop_input::has_execution_space + , std::integral_constant + , typename traits::device_type::execution_space + >::type + > alloc_prop ; + + static_assert( traits::is_managed + , "OffsetView allocation constructor requires managed memory" ); + + if ( alloc_prop::initialize && +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + ! alloc_prop::execution_space::is_initialized() +#else + ! alloc_prop::execution_space::impl_is_initialized() +#endif + ) { + // If initializing view data then + // the execution space must be initialized. + Kokkos::Impl::throw_runtime_exception("Constructing OffsetView and initializing data with uninitialized execution space"); + } + + // Copy the input allocation properties with possibly defaulted properties + alloc_prop prop( arg_prop ); + + //------------------------------------------------------------ +#if defined( KOKKOS_ENABLE_CUDA ) + // If allocating in CudaUVMSpace must fence before and after + // the allocation to protect against possible concurrent access + // on the CPU and the GPU. + // Fence using the trait's executon space (which will be Kokkos::Cuda) + // to avoid incomplete type errors from usng Kokkos::Cuda directly. + if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { + traits::device_type::memory_space::execution_space::fence(); + } +#endif + //------------------------------------------------------------ + + Kokkos::Impl::SharedAllocationRecord<> * + record = m_map.allocate_shared( prop , arg_layout ); + + //------------------------------------------------------------ +#if defined( KOKKOS_ENABLE_CUDA ) + if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { + traits::device_type::memory_space::execution_space::fence(); + } +#endif + //------------------------------------------------------------ + + // Setup and initialization complete, start tracking + m_track.assign_allocated_record_to_uninitialized( record ); + +#ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST + Kokkos::Experimental::Impl::runtime_check_rank_host(traits::rank_dynamic, Rank, minIndices, label()); +#else + Kokkos::Experimental::Impl::runtime_check_rank_device(traits::rank_dynamic, Rank, minIndices); + +#endif + + } + + + }; + + + + /** \brief Temporary free function rank() + * until rank() is implemented + * in the View + */ + template < typename D , class ... P > + KOKKOS_INLINE_FUNCTION + constexpr unsigned rank( const OffsetView & V ) { return V.Rank; } //Temporary until added to view + + //---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- + namespace Impl { + + template< class T > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< std::is_integral::value, T>::type + shift_input(const T arg, const int64_t offset) + { + return arg - offset; + } + + KOKKOS_INLINE_FUNCTION + Kokkos::Impl::ALL_t + shift_input(const Kokkos::Impl::ALL_t arg, const int64_t offset) + { + return arg; + } + + template< class T > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< std::is_integral::value, Kokkos::pair >::type + shift_input(const Kokkos::pair arg, const int64_t offset) + { + + return Kokkos::make_pair(arg.first - offset, arg.second - offset); + + } + template< class T > + inline + typename std::enable_if< std::is_integral::value, std::pair >::type + shift_input(const std::pair arg, const int64_t offset) + { + + return std::make_pair(arg.first - offset, arg.second - offset); + + } + + template + KOKKOS_INLINE_FUNCTION + void + map_arg_to_new_begin(const size_t i, + Kokkos::Array &subviewBegins, typename std::enable_if< N != 0, const Arg>::type shiftedArg, + const Arg arg, const A viewBegins, size_t & counter) { + + if( !std::is_integral::value) { + subviewBegins[counter] = shiftedArg == arg ? viewBegins[i] : 0; + counter++; + } + } + + template + KOKKOS_INLINE_FUNCTION + void + map_arg_to_new_begin(const size_t i, + Kokkos::Array &subviewBegins, typename std::enable_if< N == 0, const Arg>::type shiftedArg, + const Arg arg, const A viewBegins, size_t & counter) { + + } + + + template< class D, class ... P , class T > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T arg) { + + auto theView = src.view(); + auto begins = src.begins(); + + T shiftedArg = shift_input(arg, begins[0]); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T>::type::Rank; + + auto theSubview = Kokkos::subview( theView , shiftedArg); + + Kokkos::Array subviewBegins; + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg, arg, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + + } + + template< class D, class ... P , class T0, class T1 > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1 + >::type >::type + subview_offset(const Kokkos::Experimental::OffsetView< D, P... > & src, T0 arg0, T1 arg1) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + + auto theSubview = Kokkos::subview(theView , shiftedArg0, shiftedArg1); + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1>::type::Rank; + + Kokkos::Array subviewBegins; + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + + } + + template< class D, class ... P , class T0, class T1, class T2 > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2>::type::Rank; + + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + + template< class D, class ... P , class T0, class T1, class T2, class T3 > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2, T3 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2, T3 arg3) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + T3 shiftedArg3 = shift_input(arg3, begins[3]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2, shiftedArg3); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2, T3>::type::Rank; + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(3, subviewBegins, shiftedArg3, arg3, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2, T3 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + + template< class D, class ... P , class T0, class T1, class T2, class T3, class T4 > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2, T3, T4 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + T3 shiftedArg3 = shift_input(arg3, begins[3]); + T4 shiftedArg4 = shift_input(arg4, begins[4]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2, shiftedArg3, shiftedArg4); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2, T3, T4>::type::Rank; + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(3, subviewBegins, shiftedArg3, arg3, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(4, subviewBegins, shiftedArg4, arg4, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2, T3, T4 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + + template< class D, class ... P , class T0, class T1, class T2, class T3, class T4, + class T5 > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2, T3, T4, T5 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + T3 shiftedArg3 = shift_input(arg3, begins[3]); + T4 shiftedArg4 = shift_input(arg4, begins[4]); + T5 shiftedArg5 = shift_input(arg5, begins[5]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2, shiftedArg3, shiftedArg4, shiftedArg5); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2, T3, T4, T5>::type::Rank; + + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(3, subviewBegins, shiftedArg3, arg3, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(4, subviewBegins, shiftedArg4, arg4, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(5, subviewBegins, shiftedArg5, arg5, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2, T3, T4, T5 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + template< class D, class ... P , class T0, class T1, class T2, class T3, class T4, + class T5, class T6> + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2, T3, T4, T5, T6 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + T3 shiftedArg3 = shift_input(arg3, begins[3]); + T4 shiftedArg4 = shift_input(arg4, begins[4]); + T5 shiftedArg5 = shift_input(arg5, begins[5]); + T6 shiftedArg6 = shift_input(arg6, begins[6]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2, shiftedArg3, shiftedArg4, shiftedArg5, + shiftedArg6); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2, T3, T4, T5, T6>::type::Rank; + + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(3, subviewBegins, shiftedArg3, arg3, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(4, subviewBegins, shiftedArg4, arg4, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(5, subviewBegins, shiftedArg5, arg5, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(6, subviewBegins, shiftedArg6, arg6, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2, T3, T4, T5, + T6 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + + template< class D, class ... P , class T0, class T1, class T2, class T3, class T4, + class T5, class T6, class T7> + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , T0, T1, T2, T3, T4, T5, T6, T7 + >::type >::type + subview_offset(const OffsetView< D, P... > & src, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7) { + + auto theView = src.view(); + auto begins = src.begins(); + + T0 shiftedArg0 = shift_input(arg0, begins[0]); + T1 shiftedArg1 = shift_input(arg1, begins[1]); + T2 shiftedArg2 = shift_input(arg2, begins[2]); + T3 shiftedArg3 = shift_input(arg3, begins[3]); + T4 shiftedArg4 = shift_input(arg4, begins[4]); + T5 shiftedArg5 = shift_input(arg5, begins[5]); + T6 shiftedArg6 = shift_input(arg6, begins[6]); + T7 shiftedArg7 = shift_input(arg7, begins[7]); + + auto theSubview = Kokkos::subview( theView , shiftedArg0, shiftedArg1, shiftedArg2, shiftedArg3, shiftedArg4, shiftedArg5, + shiftedArg6, shiftedArg7); + + constexpr size_t rank = Kokkos::Impl::ViewMapping + < void /* deduce subview type from source view traits */ + , ViewTraits< D , P... > + , T0, T1, T2, T3, T4, T5, T6, T7>::type::Rank; + + Kokkos::Array subviewBegins; + + size_t counter = 0; + Kokkos::Experimental::Impl::map_arg_to_new_begin(0, subviewBegins, shiftedArg0, arg0, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(1, subviewBegins, shiftedArg1, arg1, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(2, subviewBegins, shiftedArg2, arg2, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(3, subviewBegins, shiftedArg3, arg3, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(4, subviewBegins, shiftedArg4, arg4, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(5, subviewBegins, shiftedArg5, arg5, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(6, subviewBegins, shiftedArg6, arg6, begins, counter); + Kokkos::Experimental::Impl::map_arg_to_new_begin(7, subviewBegins, shiftedArg7, arg7, begins, counter); + + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType , T0, T1, T2, T3, T4, T5, + T6, T7 >::type >::type offsetView(theSubview, subviewBegins); + + return offsetView; + } + } + + template< class D, class ... P , class ... Args > + KOKKOS_INLINE_FUNCTION + typename Kokkos::Experimental::Impl::GetOffsetViewTypeFromViewType + , Args ... + >::type >::type + subview( const OffsetView< D, P... > & src , Args ... args ) + { + static_assert( OffsetView< D , P... >::Rank == sizeof...(Args) , + "subview requires one argument for each source OffsetView rank" ); + + + return Kokkos::Experimental::Impl::subview_offset(src, args...); + + + } + + } +} +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + namespace Experimental { + template< class LT , class ... LP , class RT , class ... RP > + KOKKOS_INLINE_FUNCTION + bool operator == ( const OffsetView & lhs , + const OffsetView & rhs ) + { + // Same data, layout, dimensions + typedef ViewTraits lhs_traits ; + typedef ViewTraits rhs_traits ; + + return + std::is_same< typename lhs_traits::const_value_type , + typename rhs_traits::const_value_type >::value && + std::is_same< typename lhs_traits::array_layout , + typename rhs_traits::array_layout >::value && + std::is_same< typename lhs_traits::memory_space , + typename rhs_traits::memory_space >::value && + unsigned(lhs_traits::rank) == unsigned(rhs_traits::rank) && + lhs.data() == rhs.data() && + lhs.span() == rhs.span() && + lhs.extent(0) == rhs.extent(0) && + lhs.extent(1) == rhs.extent(1) && + lhs.extent(2) == rhs.extent(2) && + lhs.extent(3) == rhs.extent(3) && + lhs.extent(4) == rhs.extent(4) && + lhs.extent(5) == rhs.extent(5) && + lhs.extent(6) == rhs.extent(6) && + lhs.extent(7) == rhs.extent(7) && + lhs.begin(0) == rhs.begin(0) && + lhs.begin(1) == rhs.begin(1) && + lhs.begin(2) == rhs.begin(2) && + lhs.begin(3) == rhs.begin(3) && + lhs.begin(4) == rhs.begin(4) && + lhs.begin(5) == rhs.begin(5) && + lhs.begin(6) == rhs.begin(6) && + lhs.begin(7) == rhs.begin(7) + ; + } + + template< class LT , class ... LP , class RT , class ... RP > + KOKKOS_INLINE_FUNCTION + bool operator != ( const OffsetView & lhs , + const OffsetView & rhs ) + { + return ! ( operator==(lhs,rhs) ); + } + + template< class LT , class ... LP , class RT , class ... RP > + KOKKOS_INLINE_FUNCTION + bool operator == ( const View & lhs , + const OffsetView & rhs ) + { + // Same data, layout, dimensions + typedef ViewTraits lhs_traits ; + typedef ViewTraits rhs_traits ; + + return + std::is_same< typename lhs_traits::const_value_type , + typename rhs_traits::const_value_type >::value && + std::is_same< typename lhs_traits::array_layout , + typename rhs_traits::array_layout >::value && + std::is_same< typename lhs_traits::memory_space , + typename rhs_traits::memory_space >::value && + unsigned(lhs_traits::rank) == unsigned(rhs_traits::rank) && + lhs.data() == rhs.data() && + lhs.span() == rhs.span() && + lhs.extent(0) == rhs.extent(0) && + lhs.extent(1) == rhs.extent(1) && + lhs.extent(2) == rhs.extent(2) && + lhs.extent(3) == rhs.extent(3) && + lhs.extent(4) == rhs.extent(4) && + lhs.extent(5) == rhs.extent(5) && + lhs.extent(6) == rhs.extent(6) && + lhs.extent(7) == rhs.extent(7) + ; + } + + template< class LT , class ... LP , class RT , class ... RP > + KOKKOS_INLINE_FUNCTION + bool operator == ( const OffsetView & lhs , + const View & rhs ) + { return rhs == lhs;} + + } +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +namespace Kokkos { + namespace Experimental { + template< class DT , class ... DP > + inline + void deep_copy + ( const OffsetView & dst + , typename ViewTraits::const_value_type & value + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0 ) + { + static_assert( + std::is_same< typename ViewTraits::non_const_value_type , + typename ViewTraits::value_type >::value + , "deep_copy requires non-const type" ); + + auto dstView = dst.view(); + Kokkos::deep_copy( dstView , value ); + + } + + template< class DT , class ... DP , class ST , class ... SP > + inline + void deep_copy + ( const OffsetView & dst + , const OffsetView & value + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0 ) + { + static_assert( + std::is_same< typename ViewTraits::value_type , + typename ViewTraits::non_const_value_type >::value + , "deep_copy requires matching non-const destination type" ); + + auto dstView = dst.view(); + Kokkos::deep_copy( dstView , value.view() ); + + } + template< class DT , class ... DP , class ST , class ... SP > + inline + void deep_copy + ( const OffsetView & dst + , const View & value + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0 ) + { + static_assert( + std::is_same< typename ViewTraits::value_type , + typename ViewTraits::non_const_value_type >::value + , "deep_copy requires matching non-const destination type" ); + + auto dstView = dst.view(); + Kokkos::deep_copy( dstView , value); + + } + + template< class DT , class ... DP , class ST , class ... SP > + inline + void deep_copy + ( const View & dst + , const OffsetView & value + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0 ) + { + static_assert( + std::is_same< typename ViewTraits::value_type , + typename ViewTraits::non_const_value_type >::value + , "deep_copy requires matching non-const destination type" ); + + Kokkos::deep_copy( dst , value.view() ); + + } + namespace Impl { + + // Deduce Mirror Types + template + struct MirrorOffsetViewType { + // The incoming view_type + typedef typename Kokkos::Experimental::OffsetView src_view_type; + // The memory space for the mirror view + typedef typename Space::memory_space memory_space; + // Check whether it is the same memory space + enum { is_same_memspace = std::is_same::value }; + // The array_layout + typedef typename src_view_type::array_layout array_layout; + // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. + typedef typename src_view_type::non_const_data_type data_type; + // The destination view type if it is not the same memory space + typedef Kokkos::Experimental::OffsetView dest_view_type; + // If it is the same memory_space return the existsing view_type + // This will also keep the unmanaged trait if necessary + typedef typename std::conditional::type view_type; + }; + + template + struct MirrorOffsetType { + // The incoming view_type + typedef typename Kokkos::Experimental::OffsetView src_view_type; + // The memory space for the mirror view + typedef typename Space::memory_space memory_space; + // Check whether it is the same memory space + enum { is_same_memspace = std::is_same::value }; + // The array_layout + typedef typename src_view_type::array_layout array_layout; + // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. + typedef typename src_view_type::non_const_data_type data_type; + // The destination view type if it is not the same memory space + typedef Kokkos::Experimental::OffsetView view_type; + }; + + } + + template< class T , class ... P > + inline + typename Kokkos::Experimental::OffsetView::HostMirror + create_mirror( const Kokkos::Experimental::OffsetView & src + , typename std::enable_if< + ! std::is_same< typename Kokkos::ViewTraits::array_layout + , Kokkos::LayoutStride >::value + >::type * = 0 + ) + { + typedef OffsetView src_type ; + typedef typename src_type::HostMirror dst_type ; + + return dst_type( Kokkos::Impl::ViewCtorProp< std::string >(std::string( src.label() ).append("_mirror") ), + typename Kokkos::ViewTraits::array_layout + ( src.extent(0), src.extent(1), src.extent(2), src.extent(3), src.extent(4), + src.extent(5), src.extent(6), src.extent(7) ), + { src.begin(0), src.begin(1), src.begin(2), src.begin(3), src.begin(4), + src.begin(5), src.begin(6), src.begin(7) }); + } + + template< class T , class ... P > + inline + typename Kokkos::Experimental::OffsetView::HostMirror + create_mirror( const Kokkos::Experimental::OffsetView & src + , typename std::enable_if< + std::is_same< typename Kokkos::ViewTraits::array_layout + , Kokkos::LayoutStride >::value + >::type * = 0 + ) + { + typedef OffsetView src_type ; + typedef typename src_type::HostMirror dst_type ; + + Kokkos::LayoutStride layout ; + + layout.dimension[0] = src.extent(0); + layout.dimension[1] = src.extent(1); + layout.dimension[2] = src.extent(2); + layout.dimension[3] = src.extent(3); + layout.dimension[4] = src.extent(4); + layout.dimension[5] = src.extent(5); + layout.dimension[6] = src.extent(6); + layout.dimension[7] = src.extent(7); + + layout.stride[0] = src.stride_0(); + layout.stride[1] = src.stride_1(); + layout.stride[2] = src.stride_2(); + layout.stride[3] = src.stride_3(); + layout.stride[4] = src.stride_4(); + layout.stride[5] = src.stride_5(); + layout.stride[6] = src.stride_6(); + layout.stride[7] = src.stride_7(); + + return dst_type( std::string( src.label() ).append("_mirror") , layout, + { src.begin(0), src.begin(1), src.begin(2), src.begin(3), src.begin(4), + src.begin(5), src.begin(6), src.begin(7) } ); + } + + + // Create a mirror in a new space (specialization for different space) + template + typename Kokkos::Experimental::Impl::MirrorOffsetType::view_type + create_mirror(const Space& , const Kokkos::Experimental::OffsetView & src) { + return typename Kokkos::Experimental::Impl::MirrorOffsetType::view_type(src.label(),src.layout(), + { src.begin(0), src.begin(1), src.begin(2), src.begin(3), src.begin(4), + src.begin(5), src.begin(6), src.begin(7) } ); + } + + + template< class T , class ... P > + inline + typename Kokkos::Experimental::OffsetView< T, P... >::HostMirror + create_mirror_view( const typename Kokkos::Experimental::OffsetView< T,P... > & src + , typename std::enable_if<( + std::is_same< typename Kokkos::Experimental::OffsetView::memory_space + , typename Kokkos::Experimental::OffsetView::HostMirror::memory_space + >::value + && + std::is_same< typename Kokkos::Experimental::OffsetView::data_type + , typename Kokkos::Experimental::OffsetView::HostMirror::data_type + >::value + )>::type * = 0 + ) + { + return src ; + } + + template< class T , class ... P > + inline + typename Kokkos::Experimental::OffsetView::HostMirror + create_mirror_view( const Kokkos::Experimental::OffsetView & src + , typename std::enable_if< ! ( + std::is_same< typename Kokkos::Experimental::OffsetView::memory_space + , typename Kokkos::Experimental::OffsetView::HostMirror::memory_space + >::value + && + std::is_same< typename Kokkos::Experimental::OffsetView::data_type + , typename Kokkos::Experimental::OffsetView::HostMirror::data_type + >::value + )>::type * = 0 + ) + { + return Kokkos::Experimental::create_mirror( src ); + } + + // Create a mirror view in a new space (specialization for same space) + template + typename Kokkos::Experimental::Impl::MirrorOffsetViewType::view_type + create_mirror_view(const Space& , const Kokkos::Experimental::OffsetView & src + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return src; + } + + // Create a mirror view in a new space (specialization for different space) + template + typename Kokkos::Experimental::Impl::MirrorOffsetViewType::view_type + create_mirror_view(const Space& , const Kokkos::Experimental::OffsetView & src + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return typename Kokkos::Experimental::Impl::MirrorOffsetViewType::view_type(src.label(),src.layout(), + { src.begin(0), src.begin(1), src.begin(2), src.begin(3), src.begin(4), + src.begin(5), src.begin(6), src.begin(7) } ); + } + // + // // Create a mirror view and deep_copy in a new space (specialization for same space) + // template + // typename Kokkos::Experimental::Impl::MirrorViewType::view_type + // create_mirror_view_and_copy(const Space& , const Kokkos::Experimental::OffsetView & src + // , std::string const& name = "" + // , typename std::enable_if::is_same_memspace>::type* = 0 ) { + // (void)name; + // return src; + // } + // + // // Create a mirror view and deep_copy in a new space (specialization for different space) + // template + // typename Kokkos::Experimental::Impl::MirrorViewType::view_type + // create_mirror_view_and_copy(const Space& , const Kokkos::Experimental::OffsetView & src + // , std::string const& name = "" + // , typename std::enable_if::is_same_memspace>::type* = 0 ) { + // using Mirror = typename Kokkos::Experimental::Impl::MirrorViewType::view_type; + // std::string label = name.empty() ? src.label() : name; + // auto mirror = Mirror(ViewAllocateWithoutInitializing(label), src.layout(), + // { src.begin(0), src.begin(1), src.begin(2), src.begin(3), src.begin(4), + // src.begin(5), src.begin(6), src.begin(7) }); + // deep_copy(mirror, src); + // return mirror; + // } + + } +} /* namespace Kokkos */ + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +#endif /* KOKKOS_OFFSETVIEW_HPP_ */ diff --git a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp index c522d85c5b..f63ce4b880 100644 --- a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp +++ b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp @@ -47,7 +47,9 @@ #include #include -#include +#include +#include +#include namespace Kokkos { diff --git a/lib/kokkos/containers/src/Kokkos_Vector.hpp b/lib/kokkos/containers/src/Kokkos_Vector.hpp index 8204ba776e..76c515941e 100644 --- a/lib/kokkos/containers/src/Kokkos_Vector.hpp +++ b/lib/kokkos/containers/src/Kokkos_Vector.hpp @@ -86,14 +86,13 @@ public: vector():DV() { _size = 0; _extra_storage = 1.1; - DV::modified_host() = 1; } vector(int n, Scalar val=Scalar()):DualView("Vector",size_t(n*(1.1))) { _size = n; _extra_storage = 1.1; - DV::modified_host() = 1; + DV::modified_flags(0) = 1; assign(n,val); } @@ -119,16 +118,16 @@ public: /* Assign value either on host or on device */ - if( DV::modified_host() >= DV::modified_device() ) { + if( DV::template need_sync() ) { set_functor_host f(DV::h_view,val); parallel_for(n,f); DV::t_host::execution_space::fence(); - DV::modified_host()++; + DV::template modify(); } else { set_functor f(DV::d_view,val); parallel_for(n,f); DV::t_dev::execution_space::fence(); - DV::modified_device()++; + DV::template modify(); } } @@ -137,7 +136,8 @@ public: } void push_back(Scalar val) { - DV::modified_host()++; + DV::template sync(); + DV::template modify(); if(_size == span()) { size_t new_size = _size*_extra_storage; if(new_size == _size) new_size++; @@ -247,10 +247,10 @@ public: } void on_host() { - DV::modified_host() = DV::modified_device() + 1; + DV::template modify(); } void on_device() { - DV::modified_device() = DV::modified_host() + 1; + DV::template modify(); } void set_overallocation(float extra) { diff --git a/lib/kokkos/containers/unit_tests/CMakeLists.txt b/lib/kokkos/containers/unit_tests/CMakeLists.txt index 3dbe79183a..0f94afec8c 100644 --- a/lib/kokkos/containers/unit_tests/CMakeLists.txt +++ b/lib/kokkos/containers/unit_tests/CMakeLists.txt @@ -23,6 +23,7 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( threads/TestThreads_DynRankViewAPI_rank12345.cpp threads/TestThreads_DynRankViewAPI_rank67.cpp threads/TestThreads_ErrorReporter.cpp + threads/TestThreads_OffsetView.cpp threads/TestThreads_ScatterView.cpp threads/TestThreads_StaticCrsGraph.cpp threads/TestThreads_UnorderedMap.cpp @@ -47,6 +48,7 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( serial/TestSerial_DynRankViewAPI_rank12345.cpp serial/TestSerial_DynRankViewAPI_rank67.cpp serial/TestSerial_ErrorReporter.cpp + serial/TestSerial_OffsetView.cpp serial/TestSerial_ScatterView.cpp serial/TestSerial_StaticCrsGraph.cpp serial/TestSerial_UnorderedMap.cpp @@ -71,6 +73,7 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( openmp/TestOpenMP_DynRankViewAPI_rank12345.cpp openmp/TestOpenMP_DynRankViewAPI_rank67.cpp openmp/TestOpenMP_ErrorReporter.cpp + openmp/TestOpenMP_OffsetView.cpp openmp/TestOpenMP_ScatterView.cpp openmp/TestOpenMP_StaticCrsGraph.cpp openmp/TestOpenMP_UnorderedMap.cpp @@ -95,6 +98,7 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( cuda/TestCuda_DynRankViewAPI_rank12345.cpp cuda/TestCuda_DynRankViewAPI_rank67.cpp cuda/TestCuda_ErrorReporter.cpp + cuda/TestCuda_OffsetView.cpp cuda/TestCuda_ScatterView.cpp cuda/TestCuda_StaticCrsGraph.cpp cuda/TestCuda_UnorderedMap.cpp diff --git a/lib/kokkos/containers/unit_tests/Makefile b/lib/kokkos/containers/unit_tests/Makefile index 52d5d61aa9..c0e5d2820c 100644 --- a/lib/kokkos/containers/unit_tests/Makefile +++ b/lib/kokkos/containers/unit_tests/Makefile @@ -39,6 +39,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA += TestCuda_DynRankViewAPI_rank12345.o OBJ_CUDA += TestCuda_DynRankViewAPI_rank67.o OBJ_CUDA += TestCuda_ErrorReporter.o + OBJ_CUDA += TestCuda_OffsetView.o OBJ_CUDA += TestCuda_ScatterView.o OBJ_CUDA += TestCuda_StaticCrsGraph.o OBJ_CUDA += TestCuda_UnorderedMap.o @@ -57,6 +58,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) OBJ_ROCM += TestROCm_DynRankViewAPI_rank12345.o OBJ_ROCM += TestROCm_DynRankViewAPI_rank67.o OBJ_ROCM += TestROCm_ErrorReporter.o + OBJ_ROCM += TestROCm_OffsetView.o OBJ_ROCM += TestROCm_ScatterView.o OBJ_ROCM += TestROCm_StaticCrsGraph.o OBJ_ROCM += TestROCm_UnorderedMap.o @@ -75,6 +77,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) OBJ_THREADS += TestThreads_DynRankViewAPI_rank12345.o OBJ_THREADS += TestThreads_DynRankViewAPI_rank67.o OBJ_THREADS += TestThreads_ErrorReporter.o + OBJ_THREADS += TestThreads_OffsetView.o OBJ_THREADS += TestThreads_ScatterView.o OBJ_THREADS += TestThreads_StaticCrsGraph.o OBJ_THREADS += TestThreads_UnorderedMap.o @@ -93,6 +96,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) OBJ_OPENMP += TestOpenMP_DynRankViewAPI_rank12345.o OBJ_OPENMP += TestOpenMP_DynRankViewAPI_rank67.o OBJ_OPENMP += TestOpenMP_ErrorReporter.o + OBJ_OPENMP += TestOpenMP_OffsetView.o OBJ_OPENMP += TestOpenMP_ScatterView.o OBJ_OPENMP += TestOpenMP_StaticCrsGraph.o OBJ_OPENMP += TestOpenMP_UnorderedMap.o @@ -111,6 +115,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL += TestSerial_DynRankViewAPI_rank12345.o OBJ_SERIAL += TestSerial_DynRankViewAPI_rank67.o OBJ_SERIAL += TestSerial_ErrorReporter.o + OBJ_SERIAL += TestSerial_OffsetView.o OBJ_SERIAL += TestSerial_ScatterView.o OBJ_SERIAL += TestSerial_StaticCrsGraph.o OBJ_SERIAL += TestSerial_UnorderedMap.o diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp index 8c073710e2..6684a55452 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp @@ -729,6 +729,7 @@ public: static void run_tests() { run_test_resize_realloc(); run_test_mirror(); + run_test_mirror_and_copy(); run_test_scalar(); run_test(); run_test_const(); @@ -885,6 +886,69 @@ public: } } + static void run_test_mirror_and_copy() + { + // LayoutLeft + { + Kokkos::DynRankView< double, Kokkos::LayoutLeft, Kokkos::HostSpace > a_org( "A", 10 ); + a_org(5) = 42.0; + Kokkos::DynRankView< double, Kokkos::LayoutLeft, Kokkos::HostSpace > a_h = a_org; + auto a_h2 = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), a_h ); + auto a_d = Kokkos::create_mirror_view_and_copy( DeviceType(), a_h ); + auto a_h3 = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), a_d ); + + int equal_ptr_h_h2 = a_h.data() == a_h2.data() ? 1 : 0; + int equal_ptr_h_d = a_h.data() == a_d.data() ? 1 : 0; + int equal_ptr_h2_d = a_h2.data() == a_d.data() ? 1 : 0; + int equal_ptr_h3_d = a_h3.data() == a_d.data() ? 1 : 0; + + int is_same_memspace = std::is_same< Kokkos::HostSpace, typename DeviceType::memory_space >::value ? 1 : 0; + ASSERT_EQ( equal_ptr_h_h2, 1 ); + ASSERT_EQ( equal_ptr_h_d, is_same_memspace ); + ASSERT_EQ( equal_ptr_h2_d, is_same_memspace ); + ASSERT_EQ( equal_ptr_h3_d, is_same_memspace ); + + ASSERT_EQ( a_h.extent(0), a_h3.extent(0) ); + ASSERT_EQ( a_h.extent(0), a_h2.extent(0) ); + ASSERT_EQ( a_h.extent(0), a_d .extent(0) ); + ASSERT_EQ( a_h.extent(0), a_h3.extent(0) ); + ASSERT_EQ( a_h.rank(), a_org.rank() ); + ASSERT_EQ( a_h.rank(), a_h2.rank() ); + ASSERT_EQ( a_h.rank(), a_h3.rank() ); + ASSERT_EQ( a_h.rank(), a_d.rank() ); + ASSERT_EQ( a_org(5), a_h3(5) ); + } + // LayoutRight + { + Kokkos::DynRankView< double, Kokkos::LayoutRight, Kokkos::HostSpace > a_org( "A", 10 ); + a_org(5) = 42.0; + Kokkos::DynRankView< double, Kokkos::LayoutRight, Kokkos::HostSpace > a_h = a_org; + auto a_h2 = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), a_h ); + auto a_d = Kokkos::create_mirror_view_and_copy( DeviceType(), a_h ); + auto a_h3 = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), a_d ); + + int equal_ptr_h_h2 = a_h.data() == a_h2.data() ? 1 : 0; + int equal_ptr_h_d = a_h.data() == a_d.data() ? 1 : 0; + int equal_ptr_h2_d = a_h2.data() == a_d.data() ? 1 : 0; + int equal_ptr_h3_d = a_h3.data() == a_d.data() ? 1 : 0; + + int is_same_memspace = std::is_same< Kokkos::HostSpace, typename DeviceType::memory_space >::value ? 1 : 0; + ASSERT_EQ( equal_ptr_h_h2, 1 ); + ASSERT_EQ( equal_ptr_h_d, is_same_memspace ); + ASSERT_EQ( equal_ptr_h2_d, is_same_memspace ); + ASSERT_EQ( equal_ptr_h3_d, is_same_memspace ); + + ASSERT_EQ( a_h.extent(0), a_h3.extent(0) ); + ASSERT_EQ( a_h.extent(0), a_h2.extent(0) ); + ASSERT_EQ( a_h.extent(0), a_d .extent(0) ); + ASSERT_EQ( a_h.rank(), a_org.rank() ); + ASSERT_EQ( a_h.rank(), a_h2.rank() ); + ASSERT_EQ( a_h.rank(), a_h3.rank() ); + ASSERT_EQ( a_h.rank(), a_d.rank() ); + ASSERT_EQ( a_org(5), a_h3(5) ); + } + } + static void run_test_scalar() { typedef typename dView0::HostMirror hView0 ; //HostMirror of DynRankView is a DynRankView diff --git a/lib/kokkos/containers/unit_tests/TestOffsetView.hpp b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp new file mode 100644 index 0000000000..6965199d45 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp @@ -0,0 +1,426 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +/* + * FIXME the OffsetView class is really not very well tested. + */ +#ifndef CONTAINERS_UNIT_TESTS_TESTOFFSETVIEW_HPP_ +#define CONTAINERS_UNIT_TESTS_TESTOFFSETVIEW_HPP_ + + + +#include +#include +#include +#include +#include +#include +#include + +using std::endl; +using std::cout; + +namespace Test{ + + template + void test_offsetview_construction(unsigned int size) + { + + typedef Kokkos::Experimental::OffsetView offset_view_type; + typedef Kokkos::View view_type; + + Kokkos::Experimental::index_list_type range0 = {-1, 3}; + Kokkos::Experimental::index_list_type range1 = {-2, 2}; + + offset_view_type ov("firstOV", range0, range1); + + ASSERT_EQ("firstOV", ov.label()); + ASSERT_EQ(2, ov.Rank); + + ASSERT_EQ(ov.begin(0), -1); + ASSERT_EQ(ov.end(0), 4); + + ASSERT_EQ(ov.begin(1), -2); + ASSERT_EQ(ov.end(1), 3); + + ASSERT_EQ(ov.extent(0), 5); + ASSERT_EQ(ov.extent(1), 5); + + const int ovmin0 = ov.begin(0); + const int ovend0 = ov.end(0); + const int ovmin1 = ov.begin(1); + const int ovend1 = ov.end(1); + +#if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) + { + Kokkos::Experimental::OffsetView offsetV1("OneDOffsetView", range0); + + Kokkos::RangePolicy rangePolicy1(offsetV1.begin(0), offsetV1.end(0)); + Kokkos::parallel_for(rangePolicy1, KOKKOS_LAMBDA (const int i){ + offsetV1(i) = 1; + } + ); + Kokkos::fence(); + + int OVResult = 0; + Kokkos::parallel_reduce(rangePolicy1, KOKKOS_LAMBDA(const int i, int & updateMe){ + updateMe += offsetV1(i); + }, OVResult); + + Kokkos::fence(); + ASSERT_EQ(OVResult, offsetV1.end(0) - offsetV1.begin(0)) << "found wrong number of elements in OffsetView that was summed."; + + } + { //test deep copy of scalar const value into mirro + const int constVal = 6; + typename offset_view_type::HostMirror hostOffsetView = + Kokkos::Experimental::create_mirror_view(ov); + + Kokkos::Experimental::deep_copy(hostOffsetView, constVal); + + for(int i = hostOffsetView.begin(0); i < hostOffsetView.end(0); ++i) { + for(int j = hostOffsetView.begin(1); j < hostOffsetView.end(1); ++j) { + ASSERT_EQ(hostOffsetView(i,j), constVal) << "Bad data found in OffsetView"; + } + } + } + + typedef Kokkos::MDRangePolicy, Kokkos::IndexType > range_type; + typedef typename range_type::point_type point_type; + + range_type rangePolicy2D(point_type{ {ovmin0, ovmin1 } }, + point_type{ { ovend0, ovend1 } }); + + const int constValue = 9; + Kokkos::parallel_for(rangePolicy2D, KOKKOS_LAMBDA (const int i, const int j) { + ov(i,j) = constValue; + } + ); + + //test offsetview to offsetviewmirror deep copy + typename offset_view_type::HostMirror hostOffsetView = + Kokkos::Experimental::create_mirror_view(ov); + + Kokkos::Experimental::deep_copy(hostOffsetView, ov); + + for(int i = hostOffsetView.begin(0); i < hostOffsetView.end(0); ++i) { + for(int j = hostOffsetView.begin(1); j < hostOffsetView.end(1); ++j) { + ASSERT_EQ(hostOffsetView(i,j), constValue) << "Bad data found in OffsetView"; + } + } + + int OVResult = 0; + Kokkos::parallel_reduce(rangePolicy2D, KOKKOS_LAMBDA(const int i, const int j, int & updateMe){ + updateMe += ov(i, j); + }, OVResult); + + int answer = 0; + for(int i = ov.begin(0); i < ov.end(0); ++i) { + for(int j = ov.begin(1); j < ov.end(1); ++j) { + answer += constValue; + } + } + + ASSERT_EQ(OVResult, answer) << "Bad data found in OffsetView"; +#endif + + { + offset_view_type ovCopy(ov); + ASSERT_EQ(ovCopy==ov, true) << + "Copy constructor or equivalence operator broken"; + } + + { + offset_view_type ovAssigned = ov; + ASSERT_EQ(ovAssigned==ov, true) << + "Assignment operator or equivalence operator broken"; + } + + { //construct OffsetView from a View plus begins array + const int extent0 = 100; + const int extent1 = 200; + const int extent2 = 300; + Kokkos::View view3D("view3D", extent0, extent1, extent2); + + Kokkos::deep_copy(view3D, 1); + + Kokkos::Array begins = {{-10, -20, -30}}; + Kokkos::Experimental::OffsetView offsetView3D(view3D, begins); + + typedef Kokkos::MDRangePolicy, Kokkos::IndexType > range3_type; + typedef typename range3_type::point_type point3_type; + + range3_type rangePolicy3DZero(point3_type{ {0, 0, 0 } }, + point3_type{ { extent0, extent1, extent2 } }); + +#if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) + int view3DSum = 0; + Kokkos::parallel_reduce(rangePolicy3DZero, KOKKOS_LAMBDA(const int i, const int j, int k, int & updateMe){ + updateMe += view3D(i, j, k); + }, view3DSum); + + range3_type rangePolicy3D(point3_type{ {begins[0], begins[1], begins[2] } }, + point3_type{ { begins[0] + extent0, begins[1] + extent1, begins[2] + extent2 } }); + int offsetView3DSum = 0; + + Kokkos::parallel_reduce(rangePolicy3D, KOKKOS_LAMBDA(const int i, const int j, int k, int & updateMe){ + updateMe += offsetView3D(i, j, k); + }, offsetView3DSum); + + ASSERT_EQ(view3DSum, offsetView3DSum) << "construction of OffsetView from View and begins array broken."; +#endif + } + view_type viewFromOV = ov.view(); + + ASSERT_EQ(viewFromOV == ov, true) << + "OffsetView::view() or equivalence operator View == OffsetView broken"; + + { + offset_view_type ovFromV(viewFromOV, {-1, -2}); + + ASSERT_EQ(ovFromV == viewFromOV , true) << + "Construction of OffsetView from View or equivalence operator OffsetView == View broken"; + } + { + offset_view_type ovFromV = viewFromOV; + ASSERT_EQ(ovFromV == viewFromOV , true) << + "Construction of OffsetView from View by assignment (implicit conversion) or equivalence operator OffsetView == View broken"; + } + + {// test offsetview to view deep copy + view_type aView("aView", ov.extent(0), ov.extent(1)); + Kokkos::Experimental::deep_copy(aView, ov); + +#if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) + int sum = 0; + Kokkos::parallel_reduce(rangePolicy2D, KOKKOS_LAMBDA(const int i, const int j, int & updateMe){ + updateMe += ov(i, j) - aView(i- ov.begin(0), j-ov.begin(1)); + }, sum); + + ASSERT_EQ(sum, 0) << "deep_copy(view, offsetView) broken."; +#endif + } + + {// test view to offsetview deep copy + view_type aView("aView", ov.extent(0), ov.extent(1)); + + Kokkos::deep_copy(aView, 99); + Kokkos::Experimental::deep_copy(ov, aView); + + +#if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) + int sum = 0; + Kokkos::parallel_reduce(rangePolicy2D, KOKKOS_LAMBDA(const int i, const int j, int & updateMe){ + updateMe += ov(i, j) - aView(i- ov.begin(0), j-ov.begin(1)); + }, sum); + + ASSERT_EQ(sum, 0) << "deep_copy(offsetView, view) broken."; +#endif + } + } + template + void test_offsetview_subview(unsigned int size) + { + {//test subview 1 + Kokkos::Experimental::OffsetView sliceMe("offsetToSlice", {-10, 20}); + { + auto offsetSubviewa = Kokkos::Experimental::subview(sliceMe, 0); + ASSERT_EQ(offsetSubviewa.Rank, 0) << "subview of offset is broken."; + } + + } + {//test subview 2 + Kokkos::Experimental::OffsetView sliceMe("offsetToSlice", {-10,20}, {-20,30}); + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(),-2); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + } + + + {//test subview rank 3 + + Kokkos::Experimental::OffsetView sliceMe("offsetToSlice", {-10,20}, {-20,30}, {-30,40}); + + //slice 1 + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe,Kokkos::ALL(),Kokkos::ALL(), 0); + ASSERT_EQ(offsetSubview.Rank, 2) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe,Kokkos::ALL(), 0,Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 2) << "subview of offset is broken."; + } + + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe,0, Kokkos::ALL(),Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 2) << "subview of offset is broken."; + + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe,0, Kokkos::ALL(), Kokkos::make_pair(-30, -21)); + ASSERT_EQ(offsetSubview.Rank, 2) << "subview of offset is broken."; + + ASSERT_EQ(offsetSubview.begin(0) , -20); + ASSERT_EQ(offsetSubview.end(0) , 31); + ASSERT_EQ(offsetSubview.begin(1) , 0); + ASSERT_EQ(offsetSubview.end(1) , 9); + +#if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) + typedef Kokkos::MDRangePolicy, Kokkos::IndexType > range_type; + typedef typename range_type::point_type point_type; + + const int b0 = offsetSubview.begin(0); + const int b1 = offsetSubview.begin(1); + + const int e0 = offsetSubview.end(0); + const int e1 = offsetSubview.end(1); + + range_type rangeP2D(point_type{ {b0, b1 } }, point_type{ { e0, e1} }); + + Kokkos::parallel_for(rangeP2D, KOKKOS_LAMBDA(const int i, const int j) { + offsetSubview(i,j) = 6; + } + ); + + int sum = 0; + Kokkos::parallel_reduce(rangeP2D, KOKKOS_LAMBDA(const int i, const int j, int & updateMe){ + updateMe += offsetSubview(i, j); + }, sum); + + ASSERT_EQ(sum, 6*(e0-b0)*(e1-b1)); +#endif + } + + // slice 2 + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), 0, 0); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, Kokkos::ALL(), 0); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + } + + {//test subview rank 4 + + Kokkos::Experimental::OffsetView sliceMe("offsetToSlice", {-10,20}, {-20,30}, {-30,40}, {-40, 50}); + + //slice 1 + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(),Kokkos::ALL(), Kokkos::ALL(), 0); + ASSERT_EQ(offsetSubview.Rank, 3) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), Kokkos::ALL(), 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 3) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe ,Kokkos::ALL(), 0, Kokkos::ALL(),Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 3) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe , 0, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL() ); + ASSERT_EQ(offsetSubview.Rank, 3) << "subview of offset is broken."; + } + + // slice 2 + auto offsetSubview2a = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), Kokkos::ALL(), 0, 0); + ASSERT_EQ(offsetSubview2a.Rank, 2) << "subview of offset is broken."; + { + auto offsetSubview2b = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), 0, Kokkos::ALL(), 0); + ASSERT_EQ(offsetSubview2b.Rank, 2) << "subview of offset is broken."; + } + { + auto offsetSubview2b = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), 0, 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview2b.Rank, 2) << "subview of offset is broken."; + } + { + auto offsetSubview2b = Kokkos::Experimental::subview(sliceMe, 0, Kokkos::ALL(), 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview2b.Rank, 2) << "subview of offset is broken."; + } + { + auto offsetSubview2b = Kokkos::Experimental::subview(sliceMe, 0, 0, Kokkos::ALL(), Kokkos::ALL()); + ASSERT_EQ(offsetSubview2b.Rank, 2) << "subview of offset is broken."; + } + // slice 3 + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, Kokkos::ALL(), 0, 0, 0); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, Kokkos::ALL(), 0, 0); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, 0, Kokkos::ALL(), 0); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + { + auto offsetSubview = Kokkos::Experimental::subview(sliceMe, 0, 0, 0, Kokkos::ALL()); + ASSERT_EQ(offsetSubview.Rank, 1) << "subview of offset is broken."; + } + + } + + } + + TEST_F( TEST_CATEGORY, offsetview_construction) { + test_offsetview_construction(10); + } + TEST_F( TEST_CATEGORY, offsetview_subview) { + test_offsetview_subview(10); + } + +} // namespace Test + +#endif /* CONTAINERS_UNIT_TESTS_TESTOFFSETVIEW_HPP_ */ diff --git a/lib/kokkos/containers/unit_tests/TestScatterView.hpp b/lib/kokkos/containers/unit_tests/TestScatterView.hpp index 106d2cf98d..d402a91b9f 100644 --- a/lib/kokkos/containers/unit_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/unit_tests/TestScatterView.hpp @@ -80,7 +80,9 @@ void test_scatter_view_config(int n) Kokkos::Experimental::contribute(original_view, scatter_view); } #if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) + Kokkos::fence(); auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), original_view); + Kokkos::fence(); for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { auto val0 = host_view(i, 0); auto val1 = host_view(i, 1); @@ -111,9 +113,6 @@ struct TestDuplicatedScatterView { test_scatter_view_config(n); - test_scatter_view_config(n); } }; @@ -127,6 +126,16 @@ struct TestDuplicatedScatterView { }; #endif +#ifdef KOKKOS_ENABLE_ROCM +// disable duplicated instantiation with ROCm until +// UniqueToken can support it +template <> +struct TestDuplicatedScatterView { + TestDuplicatedScatterView(int) { + } +}; +#endif + template void test_scatter_view(int n) { @@ -142,16 +151,28 @@ void test_scatter_view(int n) Kokkos::Experimental::ScatterNonDuplicated, Kokkos::Experimental::ScatterNonAtomic>(n); } +#ifdef KOKKOS_ENABLE_SERIAL + if (!std::is_same::value) { +#endif test_scatter_view_config(n); +#ifdef KOKKOS_ENABLE_SERIAL + } +#endif TestDuplicatedScatterView duptest(n); } TEST_F( TEST_CATEGORY, scatterview) { +#ifndef KOKKOS_ENABLE_ROCM test_scatter_view(10); +#ifdef KOKKOS_ENABLE_DEBUG + test_scatter_view(100000); +#else test_scatter_view(10000000); +#endif +#endif } } // namespace Test diff --git a/lib/kokkos/containers/unit_tests/TestStaticCrsGraph.hpp b/lib/kokkos/containers/unit_tests/TestStaticCrsGraph.hpp index 06d7ed8246..7ba307079f 100644 --- a/lib/kokkos/containers/unit_tests/TestStaticCrsGraph.hpp +++ b/lib/kokkos/containers/unit_tests/TestStaticCrsGraph.hpp @@ -46,6 +46,7 @@ #include #include +#include /*--------------------------------------------------------------------------*/ namespace Test { diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp new file mode 100644 index 0000000000..546f6d603a --- /dev/null +++ b/lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp new file mode 100644 index 0000000000..169dae3212 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp index 555ddd6bdf..d520bbc5a7 100644 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp +++ b/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp @@ -60,6 +60,6 @@ protected: } // namespace Test #define TEST_CATEGORY rocm -#define TEST_EXECSPACE Kokkos::ROCm +#define TEST_EXECSPACE Kokkos::Experimental::ROCm #endif diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp new file mode 100644 index 0000000000..fadd748efb --- /dev/null +++ b/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp new file mode 100644 index 0000000000..d1eaa265e3 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/src/CMakeLists.txt b/lib/kokkos/core/src/CMakeLists.txt index eb02616703..ab7f3f55c7 100644 --- a/lib/kokkos/core/src/CMakeLists.txt +++ b/lib/kokkos/core/src/CMakeLists.txt @@ -108,3 +108,7 @@ else() endif() #----------------------------------------------------------------------------- + +# build and install pkgconfig file +CONFIGURE_FILE(kokkos.pc.in kokkos.pc @ONLY) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/kokkos.pc DESTINATION lib/pkgconfig) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp index ada3f64fe1..c31b7f5b5d 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp @@ -208,7 +208,7 @@ struct CudaParallelLaunch< DriverType , const int shmem , const cudaStream_t stream = 0 ) { - if ( grid.x && ( block.x * block.y * block.z ) ) { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < sizeof( DriverType ) ) { @@ -264,7 +264,7 @@ struct CudaParallelLaunch< DriverType , const int shmem , const cudaStream_t stream = 0 ) { - if ( grid.x && ( block.x * block.y * block.z ) ) { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < sizeof( DriverType ) ) { @@ -321,7 +321,7 @@ struct CudaParallelLaunch< DriverType , const int shmem , const cudaStream_t stream = 0 ) { - if ( grid.x && ( block.x * block.y * block.z ) ) { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < sizeof( DriverType ) ) { @@ -370,7 +370,7 @@ struct CudaParallelLaunch< DriverType , const int shmem , const cudaStream_t stream = 0 ) { - if ( grid.x && ( block.x * block.y * block.z ) ) { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < sizeof( DriverType ) ) { diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp index 302cf13d47..4fa4609968 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp @@ -453,6 +453,8 @@ SharedAllocationRecord( const Kokkos::CudaSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + header.m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; // Copy to device memory Kokkos::Impl::DeepCopy( RecordBase::m_alloc_ptr , & header , sizeof(SharedAllocationHeader) ); @@ -491,6 +493,9 @@ SharedAllocationRecord( const Kokkos::CudaUVMSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; } SharedAllocationRecord< Kokkos::CudaHostPinnedSpace , void >:: @@ -525,6 +530,8 @@ SharedAllocationRecord( const Kokkos::CudaHostPinnedSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; } //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp index 8249da6a80..16952a3ae4 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp @@ -689,9 +689,13 @@ Cuda::size_type cuda_internal_multiprocessor_count() CudaSpace::size_type cuda_internal_maximum_concurrent_block_count() { + #if defined(KOKKOS_ARCH_KEPLER) + // Compute capability 3.0 through 3.7 + enum : int { max_resident_blocks_per_multiprocessor = 16 }; + #else // Compute capability 5.0 through 6.2 enum : int { max_resident_blocks_per_multiprocessor = 32 }; - + #endif return CudaInternal::singleton().m_multiProcCount * max_resident_blocks_per_multiprocessor ; }; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp index 31f405dd84..145d93ed76 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp @@ -52,22 +52,22 @@ namespace Kokkos { namespace Impl { -template +template struct CudaGetMaxBlockSize; -template +template int cuda_get_max_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); + return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); } template -struct CudaGetMaxBlockSize { +struct CudaGetMaxBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int numBlocks; - int blockSize=32; + int blockSize=1024; int sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); cudaOccupancyMaxActiveBlocksPerMultiprocessor( @@ -76,8 +76,9 @@ struct CudaGetMaxBlockSize { blockSize, sharedmem); - while (blockSize<1024 && numBlocks>0) { - blockSize*=2; + if(numBlocks>0) return blockSize; + while (blockSize>32 && numBlocks==0) { + blockSize/=2; sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); @@ -87,19 +88,30 @@ struct CudaGetMaxBlockSize { blockSize, sharedmem); } - if(numBlocks>0) return blockSize; - else return blockSize/2; + int blockSizeUpperBound = blockSize*2; + while (blockSize0) { + blockSize+=32; + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_constant_memory, + blockSize, + sharedmem); + } + return blockSize - 32; } }; template -struct CudaGetMaxBlockSize { +struct CudaGetMaxBlockSize,false> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int numBlocks; - int blockSize=32; - int sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + unsigned int blockSize=1024; + unsigned int sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); cudaOccupancyMaxActiveBlocksPerMultiprocessor( &numBlocks, @@ -107,8 +119,9 @@ struct CudaGetMaxBlockSize { blockSize, sharedmem); - while (blockSize<1024 && numBlocks>0) { - blockSize*=2; + if(numBlocks>0) return blockSize; + while (blockSize>32 && numBlocks==0) { + blockSize/=2; sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); @@ -118,24 +131,121 @@ struct CudaGetMaxBlockSize { blockSize, sharedmem); } - if(numBlocks>0) return blockSize; - else return blockSize/2; + unsigned int blockSizeUpperBound = blockSize*2; + while (blockSize0) { + blockSize+=32; + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_local_memory, + blockSize, + sharedmem); + } + return blockSize - 32; + } +}; + +template +struct CudaGetMaxBlockSize,true> { + static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, + const size_t shmem_extra_block, const size_t shmem_extra_thread) { + int numBlocks = 0, oldNumBlocks = 0; + unsigned int blockSize=MaxThreadsPerBlock; + unsigned int sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_constant_memory, + blockSize, + sharedmem); + + if(static_cast(numBlocks)>=MinBlocksPerSM) return blockSize; + + while (blockSize>32 && static_cast(numBlocks)::value( f , blockSize/vector_length ); + + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_constant_memory, + blockSize, + sharedmem); + } + unsigned int blockSizeUpperBound = (blockSize*2(numBlocks)>MinBlocksPerSM) { + blockSize+=32; + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + oldNumBlocks = numBlocks; + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_constant_memory, + blockSize, + sharedmem); + } + if(static_cast(oldNumBlocks)>=MinBlocksPerSM) return blockSize - 32; + return -1; + } +}; + +template +struct CudaGetMaxBlockSize,false> { + static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, + const size_t shmem_extra_block, const size_t shmem_extra_thread) { + int numBlocks = 0, oldNumBlocks = 0; + unsigned int blockSize=MaxThreadsPerBlock; + int sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_local_memory, + blockSize, + sharedmem); + if(static_cast(numBlocks)>=MinBlocksPerSM) return blockSize; + + while (blockSize>32 && static_cast(numBlocks)::value( f , blockSize/vector_length ); + + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_local_memory, + blockSize, + sharedmem); + } + unsigned int blockSizeUpperBound = (blockSize*2(numBlocks)>=MinBlocksPerSM) { + blockSize+=32; + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + oldNumBlocks = numBlocks; + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_local_memory, + blockSize, + sharedmem); + } + if(static_cast(oldNumBlocks)>=MinBlocksPerSM) return blockSize - 32; + return -1; } }; - -template +template struct CudaGetOptBlockSize; -template +template int cuda_get_opt_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); + return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); } template -struct CudaGetOptBlockSize { +struct CudaGetOptBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -165,7 +275,7 @@ struct CudaGetOptBlockSize { }; template -struct CudaGetOptBlockSize { +struct CudaGetOptBlockSize,false> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -194,6 +304,75 @@ struct CudaGetOptBlockSize { } }; +template +struct CudaGetOptBlockSize,true> { + static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, + const size_t shmem_extra_block, const size_t shmem_extra_thread) { + int blockSize=16; + int numBlocks; + int sharedmem; + int maxOccupancy=0; + int bestBlockSize=0; + int max_threads_per_block = std::min(MaxThreadsPerBlock,cuda_internal_maximum_warp_count()*CudaTraits::WarpSize); + + while(blockSize < max_threads_per_block ) { + blockSize*=2; + + //calculate the occupancy with that optBlockSize and check whether its larger than the largest one found so far + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_constant_memory, + blockSize, + sharedmem); + if(numBlocks >= int(MinBlocksPerSM) && blockSize<=int(MaxThreadsPerBlock)) { + if(maxOccupancy < numBlocks*blockSize) { + maxOccupancy = numBlocks*blockSize; + bestBlockSize = blockSize; + } + } + } + if(maxOccupancy > 0) + return bestBlockSize; + return -1; + } +}; + +template +struct CudaGetOptBlockSize,false> { + static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, + const size_t shmem_extra_block, const size_t shmem_extra_thread) { + int blockSize=16; + int numBlocks; + int sharedmem; + int maxOccupancy=0; + int bestBlockSize=0; + int max_threads_per_block = std::min(MaxThreadsPerBlock,cuda_internal_maximum_warp_count()*CudaTraits::WarpSize); + + while(blockSize < max_threads_per_block ) { + blockSize*=2; + sharedmem = shmem_extra_block + shmem_extra_thread*(blockSize/vector_length) + + FunctorTeamShmemSize< typename DriverType::functor_type >::value( f , blockSize/vector_length ); + + cudaOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + cuda_parallel_launch_local_memory, + blockSize, + sharedmem); + if(numBlocks >= int(MinBlocksPerSM) && blockSize<=int(MaxThreadsPerBlock)) { + if(maxOccupancy < numBlocks*blockSize) { + maxOccupancy = numBlocks*blockSize; + bestBlockSize = blockSize; + } + } + } + if(maxOccupancy > 0) + return bestBlockSize; + return -1; + } +}; + }} // namespace Kokkos::Impl #endif // KOKKOS_ENABLE_CUDA diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp index 80192bf338..8363a45662 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp @@ -148,6 +148,9 @@ namespace Kokkos { namespace Impl { namespace { static int lock_array_copied = 0; + inline int eliminate_warning_for_lock_array() { + return lock_array_copied; + } } } } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp index eac4abac1b..2ae1cc0ddd 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp @@ -60,6 +60,7 @@ #include #include #include +#include #if defined(KOKKOS_ENABLE_PROFILING) #include @@ -114,6 +115,7 @@ public: //---------------------------------------- +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > inline static int team_size_max( const FunctorType & functor ) @@ -131,7 +133,35 @@ public: return n ; } +#endif + template + int team_size_max( const FunctorType& f, const ParallelForTag& ) const { + typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; + int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) ); + return block_size/vector_length(); + } + + template + int team_size_max( const FunctorType& f, const ParallelReduceTag& ) const { + typedef Impl::FunctorAnalysis functor_analysis_type; + typedef typename Impl::ParallelReduceReturnValue::reducer_type reducer_type; + typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; + typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; + + int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); + + // Currently we require Power-of-2 team size for reductions. + int p2 = 1; + while(p2<=block_size) p2*=2; + p2/=2; + return p2/vector_length(); + } + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > static int team_size_recommended( const FunctorType & functor ) { return team_size_max( functor ); } @@ -143,11 +173,41 @@ public: if(max<1) max = 1; return max; } +#endif + + template + int team_size_recommended( const FunctorType& f, const ParallelForTag& ) const { + typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; + int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double)); + return block_size/vector_length(); + } + + template + int team_size_recommended( const FunctorType& f, const ParallelReduceTag& ) const { + typedef Impl::FunctorAnalysis functor_analysis_type; + typedef typename Impl::ParallelReduceReturnValue::reducer_type reducer_type; + typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; + typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; + + int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); + return block_size/vector_length(); + } + inline static int vector_length_max() { return Impl::CudaTraits::WarpSize; } + inline static + int scratch_size_max(int level) + { return (level==0? + 1024*40: // 48kB is the max for CUDA, but we need some for team_member.reduce etc. + 20*1024*1024); // arbitrarily setting this to 20MB, for a Volta V100 that would give us about 3.2GB for 2 teams per SM + } + //---------------------------------------- inline int vector_length() const { return m_vector_length ; } @@ -419,7 +479,7 @@ public: void execute() const { const typename Policy::index_type nwork = m_policy.end() - m_policy.begin(); - const int block_size = Kokkos::Impl::cuda_get_opt_block_size< ParallelFor >( m_functor , 1, 0 , 0 ); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds>( m_functor , 1, 0 , 0 ); const dim3 block( 1 , block_size , 1); const dim3 grid( std::min( typename Policy::index_type(( nwork + block.y - 1 ) / block.y) , typename Policy::index_type(cuda_internal_maximum_grid_count()) ) , 1 , 1); @@ -654,7 +714,7 @@ public: : m_functor( arg_functor ) , m_league_size( arg_policy.league_size() ) , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelFor >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) + Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) , m_vector_size( arg_policy.vector_length() ) , m_shmem_begin( sizeof(double) * ( m_team_size + 2 ) ) , m_shmem_size( arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( m_functor , m_team_size ) ) @@ -670,7 +730,7 @@ public: } if ( int(m_team_size) > - int(Kokkos::Impl::cuda_get_max_block_size< ParallelFor > + int(Kokkos::Impl::cuda_get_max_block_size< ParallelFor, LaunchBounds > ( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelFor< Cuda > requested too large team size.")); } @@ -725,12 +785,13 @@ public: const Policy m_policy ; const ReducerType m_reducer ; const pointer_type m_result_ptr ; + const bool m_result_ptr_device_accessible ; size_type * m_scratch_space ; size_type * m_scratch_flags ; size_type * m_unified_space ; - // Shall we use the shfl based reduction or not (only use it for static sized types of more than 128bit - enum { UseShflReduction = ((sizeof(value_type)>2*sizeof(double)) && ValueTraits::StaticValueSize) }; + // Shall we use the shfl based reduction or not (only use it for static sized types of more than 128bit) + enum { UseShflReduction = false };//((sizeof(value_type)>2*sizeof(double)) && ValueTraits::StaticValueSize) }; // Some crutch to do function overloading private: typedef double DummyShflReductionType; @@ -752,12 +813,12 @@ public: __device__ inline void operator() () const { - run(Kokkos::Impl::if_c::select(1,1.0) ); +/* run(Kokkos::Impl::if_c::select(1,1.0) ); } __device__ inline void run(const DummySHMEMReductionType& ) const - { + {*/ const integral_nonzero_constant< size_type , ValueTraits::StaticValueSize / sizeof(size_type) > word_count( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) / sizeof(size_type) ); @@ -786,7 +847,8 @@ public: // This is the final block with the final result at the final threads' location size_type * const shared = kokkos_impl_cuda_shared_memory() + ( blockDim.y - 1 ) * word_count.value ; - size_type * const global = m_unified_space ? m_unified_space : m_scratch_space ; + size_type * const global = m_result_ptr_device_accessible? reinterpret_cast(m_result_ptr) : + ( m_unified_space ? m_unified_space : m_scratch_space ); if ( threadIdx.y == 0 ) { Kokkos::Impl::FunctorFinal< ReducerTypeFwd , WorkTagFwd >::final( ReducerConditional::select(m_functor , m_reducer) , shared ); @@ -798,10 +860,9 @@ public: } } - __device__ inline +/* __device__ inline void run(const DummyShflReductionType&) const { - value_type value; ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , &value); // Number of blocks is bounded so that the reduction can be limited to two passes. @@ -832,7 +893,7 @@ public: *result = value; } } - } + }*/ // Determine block size constrained by shared memory: static inline @@ -863,16 +924,18 @@ public: CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute - Cuda::fence(); + if(!m_result_ptr_device_accessible) { + Cuda::fence(); - if ( m_result_ptr ) { - if ( m_unified_space ) { - const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); - for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } - } - else { - const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); - DeepCopy( m_result_ptr , m_scratch_space , size ); + if ( m_result_ptr ) { + if ( m_unified_space ) { + const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); + for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } + } + else { + const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); + DeepCopy( m_result_ptr , m_scratch_space , size ); + } } } } @@ -883,17 +946,18 @@ public: } } - template< class HostViewType > + template< class ViewType > ParallelReduce( const FunctorType & arg_functor , const Policy & arg_policy - , const HostViewType & arg_result + , const ViewType & arg_result , typename std::enable_if< - Kokkos::is_view< HostViewType >::value + Kokkos::is_view< ViewType >::value ,void*>::type = NULL) : m_functor( arg_functor ) , m_policy( arg_policy ) , m_reducer( InvalidType() ) , m_result_ptr( arg_result.data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ViewType::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -906,6 +970,7 @@ public: , m_policy( arg_policy ) , m_reducer( reducer ) , m_result_ptr( reducer.view().data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ReducerType::result_view_type::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -953,6 +1018,7 @@ public: const Policy m_policy ; // used for workrange and nwork const ReducerType m_reducer ; const pointer_type m_result_ptr ; + const bool m_result_ptr_device_accessible ; size_type * m_scratch_space ; size_type * m_scratch_flags ; size_type * m_unified_space ; @@ -960,7 +1026,7 @@ public: typedef typename Kokkos::Impl::Reduce::DeviceIterateTile DeviceIteratePattern; // Shall we use the shfl based reduction or not (only use it for static sized types of more than 128bit - enum { UseShflReduction = ((sizeof(value_type)>2*sizeof(double)) && ValueTraits::StaticValueSize) }; + enum { UseShflReduction = ((sizeof(value_type)>2*sizeof(double)) && (ValueTraits::StaticValueSize!=0)) }; // Some crutch to do function overloading private: typedef double DummyShflReductionType; @@ -978,12 +1044,12 @@ public: inline __device__ void operator() (void) const { - run(Kokkos::Impl::if_c::select(1,1.0) ); +/* run(Kokkos::Impl::if_c::select(1,1.0) ); } __device__ inline void run(const DummySHMEMReductionType& ) const - { + {*/ const integral_nonzero_constant< size_type , ValueTraits::StaticValueSize / sizeof(size_type) > word_count( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) / sizeof(size_type) ); @@ -1007,7 +1073,8 @@ public: // This is the final block with the final result at the final threads' location size_type * const shared = kokkos_impl_cuda_shared_memory() + ( blockDim.y - 1 ) * word_count.value ; - size_type * const global = m_unified_space ? m_unified_space : m_scratch_space ; + size_type * const global = m_result_ptr_device_accessible? reinterpret_cast(m_result_ptr) : + ( m_unified_space ? m_unified_space : m_scratch_space ); if ( threadIdx.y == 0 ) { Kokkos::Impl::FunctorFinal< ReducerTypeFwd , WorkTagFwd >::final( ReducerConditional::select(m_functor , m_reducer) , shared ); @@ -1019,7 +1086,7 @@ public: } } - __device__ inline +/* __device__ inline void run(const DummyShflReductionType&) const { @@ -1051,7 +1118,7 @@ public: } } } - +*/ // Determine block size constrained by shared memory: static inline unsigned local_block_size( const FunctorType & f ) @@ -1089,16 +1156,18 @@ public: CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute - Cuda::fence(); + if(!m_result_ptr_device_accessible) { + Cuda::fence(); - if ( m_result_ptr ) { - if ( m_unified_space ) { - const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); - for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } - } - else { - const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); - DeepCopy( m_result_ptr , m_scratch_space , size ); + if ( m_result_ptr ) { + if ( m_unified_space ) { + const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); + for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } + } + else { + const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); + DeepCopy( m_result_ptr , m_scratch_space , size ); + } } } } @@ -1109,17 +1178,18 @@ public: } } - template< class HostViewType > + template< class ViewType > ParallelReduce( const FunctorType & arg_functor , const Policy & arg_policy - , const HostViewType & arg_result + , const ViewType & arg_result , typename std::enable_if< - Kokkos::is_view< HostViewType >::value + Kokkos::is_view< ViewType >::value ,void*>::type = NULL) : m_functor( arg_functor ) , m_policy( arg_policy ) , m_reducer( InvalidType() ) , m_result_ptr( arg_result.data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ViewType::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -1132,6 +1202,7 @@ public: , m_policy( arg_policy ) , m_reducer( reducer ) , m_result_ptr( reducer.view().data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ReducerType::result_view_type::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -1174,7 +1245,7 @@ public: typedef FunctorType functor_type ; typedef Cuda::size_type size_type ; - enum { UseShflReduction = (true && ValueTraits::StaticValueSize) }; + enum { UseShflReduction = (true && (ValueTraits::StaticValueSize!=0)) }; private: typedef double DummyShflReductionType; @@ -1191,6 +1262,7 @@ private: const FunctorType m_functor ; const ReducerType m_reducer ; const pointer_type m_result_ptr ; + const bool m_result_ptr_device_accessible ; size_type * m_scratch_space ; size_type * m_scratch_flags ; size_type * m_unified_space ; @@ -1279,7 +1351,8 @@ public: // This is the final block with the final result at the final threads' location size_type * const shared = kokkos_impl_cuda_shared_memory() + ( blockDim.y - 1 ) * word_count.value ; - size_type * const global = m_unified_space ? m_unified_space : m_scratch_space ; + size_type * const global = m_result_ptr_device_accessible? reinterpret_cast(m_result_ptr) : + ( m_unified_space ? m_unified_space : m_scratch_space ); if ( threadIdx.y == 0 ) { Kokkos::Impl::FunctorFinal< ReducerTypeFwd , WorkTagFwd >::final( ReducerConditional::select(m_functor , m_reducer) , shared ); @@ -1312,12 +1385,18 @@ public: , value ); } - pointer_type const result = (pointer_type) (m_unified_space ? m_unified_space : m_scratch_space) ; + pointer_type const result = m_result_ptr_device_accessible? m_result_ptr : + (pointer_type) ( m_unified_space ? m_unified_space : m_scratch_space ); value_type init; ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , &init); - if(Impl::cuda_inter_block_reduction - (value,init,ValueJoin(ReducerConditional::select(m_functor , m_reducer)),m_scratch_space,result,m_scratch_flags,blockDim.y)) { + if( + Impl::cuda_inter_block_reduction + (value,init,ValueJoin(ReducerConditional::select(m_functor , m_reducer)),m_scratch_space,result,m_scratch_flags,blockDim.y) + //This breaks a test + // Kokkos::Impl::CudaReductionsFunctor::scalar_inter_block_reduction(ReducerConditional::select(m_functor , m_reducer) , blockIdx.x , gridDim.x , + // kokkos_impl_cuda_shared_memory() , m_scratch_space , m_scratch_flags) + ) { const unsigned id = threadIdx.y*blockDim.x + threadIdx.x; if(id==0) { Kokkos::Impl::FunctorFinal< ReducerTypeFwd , WorkTagFwd >::final( ReducerConditional::select(m_functor , m_reducer) , (void*) &value ); @@ -1331,7 +1410,7 @@ public: { const int nwork = m_league_size * m_team_size ; if ( nwork ) { - const int block_count = UseShflReduction? std::min( m_league_size , size_type(1024) ) + const int block_count = UseShflReduction? std::min( m_league_size , size_type(1024*32) ) :std::min( m_league_size , m_team_size ); m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_count ); @@ -1344,16 +1423,18 @@ public: CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem_size_total ); // copy to device and execute - Cuda::fence(); + if(!m_result_ptr_device_accessible) { + Cuda::fence(); - if ( m_result_ptr ) { - if ( m_unified_space ) { - const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); - for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } - } - else { - const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); - DeepCopy( m_result_ptr, m_scratch_space, size ); + if ( m_result_ptr ) { + if ( m_unified_space ) { + const int count = ValueTraits::value_count( ReducerConditional::select(m_functor , m_reducer) ); + for ( int i = 0 ; i < count ; ++i ) { m_result_ptr[i] = pointer_type(m_unified_space)[i] ; } + } + else { + const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); + DeepCopy( m_result_ptr, m_scratch_space, size ); + } } } } @@ -1364,16 +1445,17 @@ public: } } - template< class HostViewType > + template< class ViewType > ParallelReduce( const FunctorType & arg_functor , const Policy & arg_policy - , const HostViewType & arg_result + , const ViewType & arg_result , typename std::enable_if< - Kokkos::is_view< HostViewType >::value + Kokkos::is_view< ViewType >::value ,void*>::type = NULL) : m_functor( arg_functor ) , m_reducer( InvalidType() ) , m_result_ptr( arg_result.data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ViewType::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -1383,17 +1465,17 @@ public: , m_scratch_ptr{NULL,NULL} , m_scratch_size{ arg_policy.scratch_size(0,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce >( arg_functor , arg_policy.vector_length(), + Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) ), arg_policy.scratch_size(1,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce >( arg_functor , arg_policy.vector_length(), + Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) )} , m_league_size( arg_policy.league_size() ) , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce >( arg_functor , arg_policy.vector_length(), + Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) , m_vector_size( arg_policy.vector_length() ) @@ -1430,9 +1512,7 @@ public: Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too much L0 scratch memory")); } - if ( unsigned(m_team_size) > - unsigned(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce > - ( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { + if ( int(m_team_size) > arg_policy.team_size_max(m_functor,ParallelReduceTag()) ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too large team size.")); } @@ -1444,6 +1524,7 @@ public: : m_functor( arg_functor ) , m_reducer( reducer ) , m_result_ptr( reducer.view().data() ) + , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ReducerType::result_view_type::memory_space>::accessible ) , m_scratch_space( 0 ) , m_scratch_flags( 0 ) , m_unified_space( 0 ) @@ -1453,7 +1534,7 @@ public: , m_scratch_ptr{NULL,NULL} , m_league_size( arg_policy.league_size() ) , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce >( arg_functor , arg_policy.vector_length(), + Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) , m_vector_size( arg_policy.vector_length() ) @@ -1486,10 +1567,7 @@ public: CudaTraits::SharedMemoryCapacity < shmem_size_total ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } - - if ( int(m_team_size) > - int(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce > - ( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { + if ( int(m_team_size) > arg_policy.team_size_max(m_functor,ParallelReduceTag()) ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too large team size.")); } @@ -1753,7 +1831,7 @@ public: // Occupancy calculator assumes whole block. m_team_size = - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce > + Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds > ( arg_functor , arg_policy.vector_length() , arg_policy.team_scratch_size(0) @@ -1970,7 +2048,9 @@ private: const WorkRange range( m_policy , blockIdx.x , gridDim.x ); for ( typename Policy::member_type iwork_base = range.begin(); iwork_base < range.end() ; iwork_base += blockDim.y ) { - + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned MASK=KOKKOS_IMPL_CUDA_ACTIVEMASK; + #endif const typename Policy::member_type iwork = iwork_base + threadIdx.y ; __syncthreads(); // Don't overwrite previous iteration values until they are used @@ -1981,7 +2061,11 @@ private: for ( unsigned i = threadIdx.y ; i < word_count.value ; ++i ) { shared_data[i + word_count.value] = shared_data[i] = shared_accum[i] ; } - + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + KOKKOS_IMPL_CUDA_SYNCWARP_MASK(MASK); + #else + KOKKOS_IMPL_CUDA_SYNCWARP_MASK; + #endif if ( CudaTraits::WarpSize < word_count.value ) { __syncthreads(); } // Protect against large scan values. // Call functor to accumulate inclusive scan value for this work item @@ -2189,6 +2273,9 @@ private: const WorkRange range( m_policy , blockIdx.x , gridDim.x ); for ( typename Policy::member_type iwork_base = range.begin(); iwork_base < range.end() ; iwork_base += blockDim.y ) { + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned MASK=KOKKOS_IMPL_CUDA_ACTIVEMASK; + #endif const typename Policy::member_type iwork = iwork_base + threadIdx.y ; @@ -2201,6 +2288,11 @@ private: shared_data[i + word_count.value] = shared_data[i] = shared_accum[i] ; } + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + KOKKOS_IMPL_CUDA_SYNCWARP_MASK(MASK); + #else + KOKKOS_IMPL_CUDA_SYNCWARP_MASK; + #endif if ( CudaTraits::WarpSize < word_count.value ) { __syncthreads(); } // Protect against large scan values. // Call functor to accumulate inclusive scan value for this work item diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp index 676ba38c6e..82d691f7d4 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp @@ -194,8 +194,9 @@ void cuda_shfl_up( T & out , T const & in , int delta , */ template< class ValueType , class JoinOp> -__device__ -inline void cuda_intra_warp_reduction( ValueType& result, +__device__ inline +typename std::enable_if< !Kokkos::is_reducer::value >::type +cuda_intra_warp_reduction( ValueType& result, const JoinOp& join, const uint32_t max_active_thread = blockDim.y) { @@ -214,8 +215,9 @@ inline void cuda_intra_warp_reduction( ValueType& result, } template< class ValueType , class JoinOp> -__device__ -inline void cuda_inter_warp_reduction( ValueType& value, +__device__ inline +typename std::enable_if< !Kokkos::is_reducer::value >::type +cuda_inter_warp_reduction( ValueType& value, const JoinOp& join, const int max_active_thread = blockDim.y) { @@ -247,8 +249,9 @@ inline void cuda_inter_warp_reduction( ValueType& value, } template< class ValueType , class JoinOp> -__device__ -inline void cuda_intra_block_reduction( ValueType& value, +__device__ inline +typename std::enable_if< !Kokkos::is_reducer::value >::type +cuda_intra_block_reduction( ValueType& value, const JoinOp& join, const int max_active_thread = blockDim.y) { cuda_intra_warp_reduction(value,join,max_active_thread); @@ -314,31 +317,52 @@ bool cuda_inter_block_reduction( typename FunctorValueTraits< FunctorType , ArgT if( id + 1 < int(gridDim.x) ) join(value, tmp); } - int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 2) { value_type tmp = Kokkos::shfl_down(value, 2,32); if( id + 2 < int(gridDim.x) ) join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 4) { value_type tmp = Kokkos::shfl_down(value, 4,32); if( id + 4 < int(gridDim.x) ) join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 8) { value_type tmp = Kokkos::shfl_down(value, 8,32); if( id + 8 < int(gridDim.x) ) join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 16) { value_type tmp = Kokkos::shfl_down(value, 16,32); if( id + 16 < int(gridDim.x) ) join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif } } //The last block has in its thread=0 the global reduction value through "value" @@ -478,31 +502,52 @@ cuda_inter_block_reduction( const ReducerType& reducer, if( id + 1 < int(gridDim.x) ) reducer.join(value, tmp); } - int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 2) { value_type tmp = Kokkos::shfl_down(value, 2,32); if( id + 2 < int(gridDim.x) ) reducer.join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 4) { value_type tmp = Kokkos::shfl_down(value, 4,32); if( id + 4 < int(gridDim.x) ) reducer.join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 8) { value_type tmp = Kokkos::shfl_down(value, 8,32); if( id + 8 < int(gridDim.x) ) reducer.join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif if (int(blockDim.x*blockDim.y) > 16) { value_type tmp = Kokkos::shfl_down(value, 16,32); if( id + 16 < int(gridDim.x) ) reducer.join(value, tmp); } - active += KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + active += KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif } } @@ -513,6 +558,213 @@ cuda_inter_block_reduction( const ReducerType& reducer, #endif } +template +struct CudaReductionsFunctor; + +template +struct CudaReductionsFunctor { + typedef FunctorValueTraits< FunctorType , ArgTag > ValueTraits ; + typedef FunctorValueJoin< FunctorType , ArgTag > ValueJoin ; + typedef FunctorValueInit< FunctorType , ArgTag > ValueInit ; + typedef FunctorValueOps< FunctorType , ArgTag > ValueOps ; + typedef typename ValueTraits::pointer_type pointer_type ; + typedef typename ValueTraits::value_type Scalar; + + __device__ + static inline void scalar_intra_warp_reduction( + const FunctorType& functor, + Scalar value, // Contribution + const bool skip_vector, // Skip threads if Kokkos vector lanes are not part of the reduction + const int width, // How much of the warp participates + Scalar& result) + { + unsigned mask = width==32?0xffffffff:((1<=w && warp_id +struct CudaReductionsFunctor { + typedef FunctorValueTraits< FunctorType , ArgTag > ValueTraits ; + typedef FunctorValueJoin< FunctorType , ArgTag > ValueJoin ; + typedef FunctorValueInit< FunctorType , ArgTag > ValueInit ; + typedef FunctorValueOps< FunctorType , ArgTag > ValueOps ; + typedef typename ValueTraits::pointer_type pointer_type ; + typedef typename ValueTraits::value_type Scalar; + + __device__ + static inline void scalar_intra_warp_reduction( + const FunctorType& functor, + Scalar* value, // Contribution + const bool skip_vector, // Skip threads if Kokkos vector lanes are not part of the reduction + const int width) // How much of the warp participates + { +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned mask = width==32?0xffffffff:((1< __device__ -bool cuda_single_inter_block_reduce_scan( const FunctorType & functor , - const Cuda::size_type block_id , - const Cuda::size_type block_count , - Cuda::size_type * const shared_data , - Cuda::size_type * const global_data , - Cuda::size_type * const global_flags ) +bool cuda_single_inter_block_reduce_scan2( const FunctorType & functor , + const Cuda::size_type block_id , + const Cuda::size_type block_count , + Cuda::size_type * const shared_data , + Cuda::size_type * const global_data , + Cuda::size_type * const global_flags ) { typedef Cuda::size_type size_type ; typedef FunctorValueTraits< FunctorType , ArgTag > ValueTraits ; @@ -655,7 +908,6 @@ bool cuda_single_inter_block_reduce_scan( const FunctorType & functor , typedef FunctorValueOps< FunctorType , ArgTag > ValueOps ; typedef typename ValueTraits::pointer_type pointer_type ; - //typedef typename ValueTraits::reference_type reference_type ; // '__ffs' = position of the least significant bit set to 1. // 'blockDim.y' is guaranteed to be a power of two so this @@ -678,12 +930,7 @@ bool cuda_single_inter_block_reduce_scan( const FunctorType & functor , size_type * const shared = shared_data + word_count.value * BlockSizeMask ; size_type * const global = global_data + word_count.value * block_id ; -//#if (__CUDA_ARCH__ < 500) for ( int i = int(threadIdx.y) ; i < int(word_count.value) ; i += int(blockDim.y) ) { global[i] = shared[i] ; } -//#else -// for ( size_type i = 0 ; i < word_count.value ; i += 1 ) { global[i] = shared[i] ; } -//#endif - } // Contributing blocks note that their contribution has been completed via an atomic-increment flag @@ -725,6 +972,22 @@ bool cuda_single_inter_block_reduce_scan( const FunctorType & functor , return is_last_block ; } +template< bool DoScan , class FunctorType , class ArgTag > +__device__ +bool cuda_single_inter_block_reduce_scan( const FunctorType & functor , + const Cuda::size_type block_id , + const Cuda::size_type block_count , + Cuda::size_type * const shared_data , + Cuda::size_type * const global_data , + Cuda::size_type * const global_flags ) +{ + typedef FunctorValueTraits< FunctorType , ArgTag > ValueTraits ; + if(!DoScan && ValueTraits::StaticValueSize) + return Kokkos::Impl::CudaReductionsFunctor16)>::scalar_inter_block_reduction(functor,block_id,block_count,shared_data,global_data,global_flags); + else + return cuda_single_inter_block_reduce_scan2(functor, block_id, block_count, shared_data, global_data, global_flags); +} + // Size in bytes required for inter block reduce or scan template< bool DoScan , class FunctorType , class ArgTag > inline diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp index 73ec409b29..9eb32f07c7 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp @@ -160,7 +160,7 @@ public: template KOKKOS_INLINE_FUNCTION - void team_broadcast( ValueType & val, const int& thread_id) const + void team_broadcast( ValueType & val, const int& thread_id ) const { #ifdef __CUDA_ARCH__ if ( 1 == blockDim.z ) { // team == block @@ -178,6 +178,29 @@ public: } #endif } + + template + KOKKOS_INLINE_FUNCTION + void team_broadcast( Closure const & f, ValueType & val, const int& thread_id ) const + { + #ifdef __CUDA_ARCH__ + f( val ); + + if ( 1 == blockDim.z ) { // team == block + __syncthreads(); + // Wait for shared data write until all threads arrive here + if ( threadIdx.x == 0u && threadIdx.y == (uint32_t)thread_id ) { + *((ValueType*) m_team_reduce) = val ; + } + __syncthreads(); // Wait for shared data read until root thread writes + val = *((ValueType*) m_team_reduce); + } + else { // team <= warp + ValueType tmp( val ); // input might not be a register variable + cuda_shfl( val, tmp, blockDim.x * thread_id, blockDim.x * blockDim.y ); + } + #endif + } //-------------------------------------------------------------------------- /**\brief Reduction across a team @@ -200,92 +223,7 @@ public: team_reduce( ReducerType const & reducer ) const noexcept { #ifdef __CUDA_ARCH__ - - typedef typename ReducerType::value_type value_type ; - - value_type tmp( reducer.reference() ); - - // reduce within the warp using shuffle - - const int wx = - ( threadIdx.x + blockDim.x * threadIdx.y ) & CudaTraits::WarpIndexMask ; - - for ( int i = CudaTraits::WarpSize ; (int)blockDim.x <= ( i >>= 1 ) ; ) { - - cuda_shfl_down( reducer.reference() , tmp , i , CudaTraits::WarpSize ); - - // Root of each vector lane reduces: - if ( 0 == threadIdx.x && wx < i ) { - reducer.join( tmp , reducer.reference() ); - } - } - - if ( 1 < blockDim.z ) { // team <= warp - // broadcast result from root vector lange of root thread - - cuda_shfl( reducer.reference() , tmp - , blockDim.x * threadIdx.y , CudaTraits::WarpSize ); - - } - else { // team == block - // Reduce across warps using shared memory - // Broadcast result within block - - // Number of warps, blockDim.y may not be power of two: - const int nw = ( blockDim.x * blockDim.y + CudaTraits::WarpIndexMask ) >> CudaTraits::WarpIndexShift ; - - // Warp index: - const int wy = ( blockDim.x * threadIdx.y ) >> CudaTraits::WarpIndexShift ; - - // Number of shared memory entries for the reduction: - int nsh = m_team_reduce_size / sizeof(value_type); - - // Using at most one entry per warp: - if ( nw < nsh ) nsh = nw ; - - __syncthreads(); // Wait before shared data write - - if ( 0 == wx && wy < nsh ) { - ((value_type*) m_team_reduce)[wy] = tmp ; - } - - // When more warps than shared entries: - for ( int i = nsh ; i < nw ; i += nsh ) { - - __syncthreads(); - - if ( 0 == wx && i <= wy ) { - const int k = wy - i ; - if ( k < nsh ) { - reducer.join( *((value_type*) m_team_reduce + k) , tmp ); - } - } - } - - __syncthreads(); - - // One warp performs the inter-warp reduction: - - if ( 0 == wy ) { - - // Start at power of two covering nsh - - for ( int i = 1 << ( 32 - __clz(nsh-1) ) ; ( i >>= 1 ) ; ) { - const int k = wx + i ; - if ( wx < i && k < nsh ) { - reducer.join( ((value_type*)m_team_reduce)[wx] - , ((value_type*)m_team_reduce)[k] ); - __threadfence_block(); - } - } - } - - __syncthreads(); // Wait for reduction - - // Broadcast result to all threads - reducer.reference() = *((value_type*)m_team_reduce); - } - + cuda_intra_block_reduction(reducer,blockDim.y); #endif /* #ifdef __CUDA_ARCH__ */ } @@ -801,7 +739,11 @@ void parallel_for ; i += blockDim.x ) { closure(i); } + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK KOKKOS_IMPL_CUDA_SYNCWARP_MASK(blockDim.x==32?0xffffffff:((1<& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0) lambda(); + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK KOKKOS_IMPL_CUDA_SYNCWARP_MASK(blockDim.x==32?0xffffffff:((1<& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0 && threadIdx.y == 0) lambda(); + #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK KOKKOS_IMPL_CUDA_SYNCWARP_MASK(blockDim.x==32?0xffffffff:((1<= 9000 ) && (!defined(KOKKOS_COMPILER_CLANG)) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp index 11aa695f08..af2aff8b35 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp @@ -279,6 +279,8 @@ public: KOKKOS_INLINE_FUNCTION static handle_type assign( value_type * arg_data_ptr, track_type const & arg_tracker ) { + if(arg_data_ptr == NULL) return handle_type(); + #if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) // Assignment of texture = non-texture requires creation of a texture object // which can only occur on the host. In addition, 'get_record' is only valid @@ -292,8 +294,7 @@ public: #if ! defined( KOKKOS_ENABLE_CUDA_LDG_INTRINSIC ) if ( 0 == r ) { - //Kokkos::abort("Cuda const random access View using Cuda texture memory requires Kokkos to allocate the View's memory"); - return handle_type(); + Kokkos::abort("Cuda const random access View using Cuda texture memory requires Kokkos to allocate the View's memory"); } #endif diff --git a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp index 976bdf05d3..fb0d6cde84 100644 --- a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp +++ b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp @@ -46,6 +46,8 @@ #include +#include + #include #include #include @@ -63,13 +65,15 @@ namespace Kokkos { // ------------------------------------------------------------------ // - +// Moved to Kokkos_Layout.hpp for more general accessibility +/* enum class Iterate { Default, // Default for the device Left, // Left indices stride fastest Right, // Right indices stride fastest }; +*/ template struct default_outer_direction diff --git a/lib/kokkos/core/src/Kokkos_Array.hpp b/lib/kokkos/core/src/Kokkos_Array.hpp index c602b03538..8e5862fe9c 100644 --- a/lib/kokkos/core/src/Kokkos_Array.hpp +++ b/lib/kokkos/core/src/Kokkos_Array.hpp @@ -45,11 +45,13 @@ #define KOKKOS_ARRAY_HPP #include +#include #include #include #include #include +#include namespace Kokkos { @@ -132,6 +134,7 @@ public: KOKKOS_INLINE_FUNCTION static constexpr size_type size() { return N ; } KOKKOS_INLINE_FUNCTION static constexpr bool empty(){ return false ; } + KOKKOS_INLINE_FUNCTION constexpr size_type max_size() const { return N ; } template< typename iType > KOKKOS_INLINE_FUNCTION @@ -160,7 +163,7 @@ public: return & m_internal_implementation_private_member_data[0]; } - #ifdef KOKKOS_ROCM_CLANG_WORKAROUND + #ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND // Do not default unless move and move-assignment are also defined KOKKOS_INLINE_FUNCTION ~Array() = default ; @@ -197,6 +200,7 @@ public: KOKKOS_INLINE_FUNCTION static constexpr size_type size() { return 0 ; } KOKKOS_INLINE_FUNCTION static constexpr bool empty() { return true ; } + KOKKOS_INLINE_FUNCTION constexpr size_type max_size() const { return 0 ; } template< typename iType > KOKKOS_INLINE_FUNCTION @@ -261,6 +265,7 @@ public: KOKKOS_INLINE_FUNCTION constexpr size_type size() const { return m_size ; } KOKKOS_INLINE_FUNCTION constexpr bool empty() const { return 0 != m_size ; } + KOKKOS_INLINE_FUNCTION constexpr size_type max_size() const { return m_size ; } template< typename iType > KOKKOS_INLINE_FUNCTION @@ -336,6 +341,7 @@ public: KOKKOS_INLINE_FUNCTION constexpr size_type size() const { return m_size ; } KOKKOS_INLINE_FUNCTION constexpr bool empty() const { return 0 != m_size ; } + KOKKOS_INLINE_FUNCTION constexpr size_type max_size() const { return m_size ; } template< typename iType > KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/Kokkos_Concepts.hpp b/lib/kokkos/core/src/Kokkos_Concepts.hpp index 2e2507b27d..117469b0a2 100644 --- a/lib/kokkos/core/src/Kokkos_Concepts.hpp +++ b/lib/kokkos/core/src/Kokkos_Concepts.hpp @@ -105,7 +105,10 @@ namespace Kokkos { template< typename T > struct is_ ## CONCEPT { \ private: \ template< typename , typename = std::true_type > struct have : std::false_type {}; \ - template< typename U > struct have::type> : std::true_type {}; \ + template< typename U > struct have::type, \ + typename std::remove_cv::type \ + >::type> : std::true_type {}; \ public: \ enum { value = is_ ## CONCEPT::template have::value }; \ }; diff --git a/lib/kokkos/core/src/Kokkos_CopyViews.hpp b/lib/kokkos/core/src/Kokkos_CopyViews.hpp index 31281bc315..86547420ef 100644 --- a/lib/kokkos/core/src/Kokkos_CopyViews.hpp +++ b/lib/kokkos/core/src/Kokkos_CopyViews.hpp @@ -453,8 +453,9 @@ template { ViewTypeA a; ViewTypeB b; - - typedef Kokkos::Rank<2,ViewFillLayoutSelector::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<2,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -475,7 +476,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<3,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -496,7 +499,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<4,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -519,7 +524,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<5,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -542,7 +549,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<6,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -566,7 +575,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<6,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -590,7 +601,9 @@ struct ViewCopy::iterate,ViewFillLayoutSelector::iterate> iterate_type; + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::layout_iterate_type_selector::inner_iteration_pattern; + typedef Kokkos::Rank<6,outer_iteration_pattern,inner_iteration_pattern> iterate_type; typedef Kokkos::MDRangePolicy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { @@ -642,7 +655,9 @@ void view_copy(const DstType& dst, const SrcType& src) { int64_t strides[DstType::Rank+1]; dst.stride(strides); Kokkos::Iterate iterate; - if ( std::is_same::value ) { + if ( Kokkos::is_layouttiled::value ) { + iterate = Kokkos::layout_iterate_type_selector::outer_iteration_pattern; + } else if ( std::is_same::value ) { iterate = Kokkos::Iterate::Right; } else if ( std::is_same::value ) { iterate = Kokkos::Iterate::Left; @@ -1243,9 +1258,9 @@ void deep_copy ViewTypeFlat; ViewTypeFlat dst_flat(dst.data(),dst.size()); - if(dst.span() < std::numeric_limits::max()) + if(dst.span() < std::numeric_limits::max()) { Kokkos::Impl::ViewFill< ViewTypeFlat , Kokkos::LayoutRight, typename ViewType::execution_space, ViewTypeFlat::Rank, int >( dst_flat , value ); - else + } else Kokkos::Impl::ViewFill< ViewTypeFlat , Kokkos::LayoutRight, typename ViewType::execution_space, ViewTypeFlat::Rank, int64_t >( dst_flat , value ); Kokkos::fence(); return; @@ -1397,7 +1412,6 @@ void deep_copy enum { SrcExecCanAccessDst = Kokkos::Impl::SpaceAccessibility< src_execution_space , dst_memory_space >::accessible }; - // Checking for Overlapping Views. dst_value_type* dst_start = dst.data(); dst_value_type* dst_end = dst.data() + dst.span(); @@ -1493,7 +1507,7 @@ void deep_copy Kokkos::fence(); } else { Kokkos::fence(); - Impl::view_copy(typename dst_type::uniform_runtime_nomemspace_type(dst),typename src_type::uniform_runtime_const_nomemspace_type(src)); + Impl::view_copy(dst, src); Kokkos::fence(); } } @@ -1739,8 +1753,7 @@ void deep_copy exec_space.fence(); } else { exec_space.fence(); - Impl::view_copy(typename dst_type::uniform_runtime_nomemspace_type(dst), - typename src_type::uniform_runtime_const_nomemspace_type(src)); + Impl::view_copy(dst, src); exec_space.fence(); } } @@ -1917,4 +1930,213 @@ void realloc( Kokkos::View & v , } } /* namespace Kokkos */ +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +// Deduce Mirror Types +template +struct MirrorViewType { + // The incoming view_type + typedef typename Kokkos::View src_view_type; + // The memory space for the mirror view + typedef typename Space::memory_space memory_space; + // Check whether it is the same memory space + enum { is_same_memspace = std::is_same::value }; + // The array_layout + typedef typename src_view_type::array_layout array_layout; + // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. + typedef typename src_view_type::non_const_data_type data_type; + // The destination view type if it is not the same memory space + typedef Kokkos::View dest_view_type; + // If it is the same memory_space return the existsing view_type + // This will also keep the unmanaged trait if necessary + typedef typename std::conditional::type view_type; +}; + +template +struct MirrorType { + // The incoming view_type + typedef typename Kokkos::View src_view_type; + // The memory space for the mirror view + typedef typename Space::memory_space memory_space; + // Check whether it is the same memory space + enum { is_same_memspace = std::is_same::value }; + // The array_layout + typedef typename src_view_type::array_layout array_layout; + // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. + typedef typename src_view_type::non_const_data_type data_type; + // The destination view type if it is not the same memory space + typedef Kokkos::View view_type; +}; + +} + +template< class T , class ... P > +inline +typename Kokkos::View::HostMirror +create_mirror( const Kokkos::View & src + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value && + ! std::is_same< typename Kokkos::ViewTraits::array_layout + , Kokkos::LayoutStride >::value + >::type * = 0 + ) +{ + typedef View src_type ; + typedef typename src_type::HostMirror dst_type ; + + return dst_type( std::string( src.label() ).append("_mirror") +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + , src.extent(0) + , src.extent(1) + , src.extent(2) + , src.extent(3) + , src.extent(4) + , src.extent(5) + , src.extent(6) + , src.extent(7) ); +#else + , src.rank_dynamic > 0 ? src.extent(0): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 1 ? src.extent(1): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 2 ? src.extent(2): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 3 ? src.extent(3): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 4 ? src.extent(4): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 5 ? src.extent(5): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 6 ? src.extent(6): KOKKOS_IMPL_CTOR_DEFAULT_ARG + , src.rank_dynamic > 7 ? src.extent(7): KOKKOS_IMPL_CTOR_DEFAULT_ARG ); +#endif +} + +template< class T , class ... P > +inline +typename Kokkos::View::HostMirror +create_mirror( const Kokkos::View & src + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value && + std::is_same< typename Kokkos::ViewTraits::array_layout + , Kokkos::LayoutStride >::value + >::type * = 0 + ) +{ + typedef View src_type ; + typedef typename src_type::HostMirror dst_type ; + + Kokkos::LayoutStride layout ; + + layout.dimension[0] = src.extent(0); + layout.dimension[1] = src.extent(1); + layout.dimension[2] = src.extent(2); + layout.dimension[3] = src.extent(3); + layout.dimension[4] = src.extent(4); + layout.dimension[5] = src.extent(5); + layout.dimension[6] = src.extent(6); + layout.dimension[7] = src.extent(7); + + layout.stride[0] = src.stride_0(); + layout.stride[1] = src.stride_1(); + layout.stride[2] = src.stride_2(); + layout.stride[3] = src.stride_3(); + layout.stride[4] = src.stride_4(); + layout.stride[5] = src.stride_5(); + layout.stride[6] = src.stride_6(); + layout.stride[7] = src.stride_7(); + + return dst_type( std::string( src.label() ).append("_mirror") , layout ); +} + + +// Create a mirror in a new space (specialization for different space) +template +typename Impl::MirrorType::view_type +create_mirror(const Space& , const Kokkos::View & src + , typename std::enable_if< + std::is_same< typename ViewTraits::specialize , void >::value + >::type * = 0) { + return typename Impl::MirrorType::view_type(src.label(),src.layout()); +} + +template< class T , class ... P > +inline +typename Kokkos::View::HostMirror +create_mirror_view( const Kokkos::View & src + , typename std::enable_if<( + std::is_same< typename Kokkos::View::memory_space + , typename Kokkos::View::HostMirror::memory_space + >::value + && + std::is_same< typename Kokkos::View::data_type + , typename Kokkos::View::HostMirror::data_type + >::value + )>::type * = 0 + ) +{ + return src ; +} + +template< class T , class ... P > +inline +typename Kokkos::View::HostMirror +create_mirror_view( const Kokkos::View & src + , typename std::enable_if< ! ( + std::is_same< typename Kokkos::View::memory_space + , typename Kokkos::View::HostMirror::memory_space + >::value + && + std::is_same< typename Kokkos::View::data_type + , typename Kokkos::View::HostMirror::data_type + >::value + )>::type * = 0 + ) +{ + return Kokkos::create_mirror( src ); +} + +// Create a mirror view in a new space (specialization for same space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return src; +} + +// Create a mirror view in a new space (specialization for different space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return typename Impl::MirrorViewType::view_type(src.label(),src.layout()); +} + +// Create a mirror view and deep_copy in a new space (specialization for same space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view_and_copy(const Space& , const Kokkos::View & src + , std::string const& name = "" + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + (void)name; + return src; +} + +// Create a mirror view and deep_copy in a new space (specialization for different space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view_and_copy(const Space& , const Kokkos::View & src + , std::string const& name = "" + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + using Mirror = typename Impl::MirrorViewType::view_type; + std::string label = name.empty() ? src.label() : name; + auto mirror = Mirror(ViewAllocateWithoutInitializing(label), src.layout()); + deep_copy(mirror, src); + return mirror; +} + +} /* namespace Kokkos */ + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + #endif diff --git a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp index a33e28fcd4..d4693b43c1 100644 --- a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp @@ -57,6 +57,10 @@ namespace Kokkos { +struct ParallelForTag {}; +struct ParallelScanTag {}; +struct ParallelReduceTag {}; + struct ChunkSize { int value; ChunkSize(int value_):value(value_) {} @@ -320,6 +324,10 @@ public: template< class FunctorType > static int team_size_recommended( const FunctorType & , const int&); + + template + int team_size_recommended( const FunctorType & functor , const int vector_length); + //---------------------------------------- /** \brief Construct policy with the given instance of the execution space */ TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , int team_size_request , int vector_length_request = 1 ); diff --git a/lib/kokkos/core/src/Kokkos_Layout.hpp b/lib/kokkos/core/src/Kokkos_Layout.hpp index b0f92d8cf1..43e117783b 100644 --- a/lib/kokkos/core/src/Kokkos_Layout.hpp +++ b/lib/kokkos/core/src/Kokkos_Layout.hpp @@ -76,6 +76,8 @@ struct LayoutLeft { size_t dimension[ ARRAY_LAYOUT_MAX_RANK ]; + enum { is_extent_constructible = true }; + LayoutLeft( LayoutLeft const & ) = default ; LayoutLeft( LayoutLeft && ) = default ; LayoutLeft & operator = ( LayoutLeft const & ) = default ; @@ -108,6 +110,8 @@ struct LayoutRight { size_t dimension[ ARRAY_LAYOUT_MAX_RANK ]; + enum { is_extent_constructible = true }; + LayoutRight( LayoutRight const & ) = default ; LayoutRight( LayoutRight && ) = default ; LayoutRight & operator = ( LayoutRight const & ) = default ; @@ -132,6 +136,8 @@ struct LayoutStride { size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ; size_t stride[ ARRAY_LAYOUT_MAX_RANK ] ; + enum { is_extent_constructible = false }; + LayoutStride( LayoutStride const & ) = default ; LayoutStride( LayoutStride && ) = default ; LayoutStride & operator = ( LayoutStride const & ) = default ; @@ -222,6 +228,8 @@ struct LayoutTileLeft { size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ; + enum { is_extent_constructible = true }; + LayoutTileLeft( LayoutTileLeft const & ) = default ; LayoutTileLeft( LayoutTileLeft && ) = default ; LayoutTileLeft & operator = ( LayoutTileLeft const & ) = default ; @@ -235,6 +243,144 @@ struct LayoutTileLeft { : dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {} }; + +////////////////////////////////////////////////////////////////////////////////////// + +enum class Iterate +{ + Default, + Left, // Left indices stride fastest + Right // Right indices stride fastest +}; + +// To check for LayoutTiled +// This is to hide extra compile-time 'identifier' info within the LayoutTiled class by not relying on template specialization to include the ArgN*'s +template < typename LayoutTiledCheck, class Enable = void > +struct is_layouttiled : std::false_type {}; + +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +template < typename LayoutTiledCheck > +struct is_layouttiled< LayoutTiledCheck, typename std::enable_if::type > : std::true_type {}; + +namespace Experimental { + +/// LayoutTiled +// Must have Rank >= 2 +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, + unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 = 0, unsigned ArgN3 = 0, unsigned ArgN4 = 0, unsigned ArgN5 = 0, unsigned ArgN6 = 0, unsigned ArgN7 = 0, + bool IsPowerOfTwo = + ( Impl::is_integral_power_of_two(ArgN0) && + Impl::is_integral_power_of_two(ArgN1) && + (Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && + (Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && + (Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && + (Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && + (Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && + (Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) + ) + > +struct LayoutTiled { + + static_assert( IsPowerOfTwo + , "LayoutTiled must be given power-of-two tile dimensions" ); + +#if 0 + static_assert( (Impl::is_integral_power_of_two(ArgN0) ) && + (Impl::is_integral_power_of_two(ArgN1) ) && + (Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && + (Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && + (Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && + (Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && + (Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && + (Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) + , "LayoutTiled must be given power-of-two tile dimensions" ); +#endif + + typedef LayoutTiled array_layout ; + static constexpr Iterate outer_pattern = OuterP; + static constexpr Iterate inner_pattern = InnerP; + + enum { N0 = ArgN0 }; + enum { N1 = ArgN1 }; + enum { N2 = ArgN2 }; + enum { N3 = ArgN3 }; + enum { N4 = ArgN4 }; + enum { N5 = ArgN5 }; + enum { N6 = ArgN6 }; + enum { N7 = ArgN7 }; + + size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ; + + enum { is_extent_constructible = true }; + + LayoutTiled( LayoutTiled const & ) = default ; + LayoutTiled( LayoutTiled && ) = default ; + LayoutTiled & operator = ( LayoutTiled const & ) = default ; + LayoutTiled & operator = ( LayoutTiled && ) = default ; + + KOKKOS_INLINE_FUNCTION + explicit constexpr + LayoutTiled( size_t argN0 = 0 , size_t argN1 = 0 , size_t argN2 = 0 , size_t argN3 = 0 + , size_t argN4 = 0 , size_t argN5 = 0 , size_t argN6 = 0 , size_t argN7 = 0 + ) + : dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {} +}; + +} // namespace Experimental +#endif + + +// For use with view_copy +template < typename ... Layout > +struct layout_iterate_type_selector { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Default ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Default ; +}; + +template <> +struct layout_iterate_type_selector< Kokkos::LayoutRight > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ; +}; + +template <> +struct layout_iterate_type_selector< Kokkos::LayoutLeft > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ; +}; + +template <> +struct layout_iterate_type_selector< Kokkos::LayoutStride > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Default ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Default ; +}; + +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 > +struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ; +}; + +template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 > +struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ; +}; + +template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 > +struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ; +}; + +template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 > +struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled > { + static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ; + static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ; +}; +#endif + } // namespace Kokkos #endif // #ifndef KOKKOS_LAYOUT_HPP diff --git a/lib/kokkos/core/src/Kokkos_Macros.hpp b/lib/kokkos/core/src/Kokkos_Macros.hpp index 0cd19d2237..96bd23e220 100644 --- a/lib/kokkos/core/src/Kokkos_Macros.hpp +++ b/lib/kokkos/core/src/Kokkos_Macros.hpp @@ -153,7 +153,7 @@ #else #define KOKKOS_LAMBDA [=]__host__ __device__ - #if defined( KOKKOS_ENABLE_CXX1Z ) + #if defined( KOKKOS_ENABLE_CXX17 ) || defined( KOKKOS_ENABLE_CXX20 ) #define KOKKOS_CLASS_LAMBDA [=,*this] __host__ __device__ #endif #endif @@ -213,7 +213,7 @@ #define KOKKOS_LAMBDA [=] #endif -#if defined( KOKKOS_ENABLE_CXX1Z ) && !defined( KOKKOS_CLASS_LAMBDA ) +#if (defined( KOKKOS_ENABLE_CXX17 ) || defined( KOKKOS_ENABLE_CXX20) )&& !defined( KOKKOS_CLASS_LAMBDA ) #define KOKKOS_CLASS_LAMBDA [=,*this] #endif @@ -521,6 +521,9 @@ #if defined ( KOKKOS_ENABLE_CUDA ) #if ( 9000 <= CUDA_VERSION ) #define KOKKOS_IMPL_CUDA_VERSION_9_WORKAROUND + #if ( __CUDA_ARCH__ ) + #define KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + #endif #endif #endif diff --git a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp index 7bed7aa3dc..1900794514 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp @@ -793,7 +793,7 @@ struct ParallelReduceReturnValue::value ) @@ -1002,7 +1002,8 @@ void parallel_reduce(const std::string& label, typename Impl::enable_if< Kokkos::Impl::is_execution_policy::value >::type * = 0) { - Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value); + ReturnType return_value_impl = return_value; + Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value_impl); } template< class PolicyType, class FunctorType, class ReturnType > @@ -1054,6 +1055,9 @@ void parallel_reduce(const std::string& label, , typename ValueTraits::pointer_type >::type value_type ; + static_assert(Impl::FunctorAnalysis:: + has_final_member_function,"Calling parallel_reduce without either return value or final function."); + typedef Kokkos::View< value_type , Kokkos::HostSpace , Kokkos::MemoryUnmanaged @@ -1076,6 +1080,9 @@ void parallel_reduce(const PolicyType& policy, , typename ValueTraits::pointer_type >::type value_type ; + static_assert(Impl::FunctorAnalysis:: + has_final_member_function,"Calling parallel_reduce without either return value or final function."); + typedef Kokkos::View< value_type , Kokkos::HostSpace , Kokkos::MemoryUnmanaged @@ -1096,6 +1103,9 @@ void parallel_reduce(const size_t& policy, , typename ValueTraits::pointer_type >::type value_type ; + static_assert(Impl::FunctorAnalysis,FunctorType>:: + has_final_member_function,"Calling parallel_reduce without either return value or final function."); + typedef Kokkos::View< value_type , Kokkos::HostSpace , Kokkos::MemoryUnmanaged @@ -1117,6 +1127,9 @@ void parallel_reduce(const std::string& label, , typename ValueTraits::pointer_type >::type value_type ; + static_assert(Impl::FunctorAnalysis,FunctorType>:: + has_final_member_function,"Calling parallel_reduce without either return value or final function."); + typedef Kokkos::View< value_type , Kokkos::HostSpace , Kokkos::MemoryUnmanaged diff --git a/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp b/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp index 4527dd4c14..86d803ccc9 100644 --- a/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp @@ -136,6 +136,55 @@ public: } } + + KOKKOS_INLINE_FUNCTION + void* get_shmem_aligned (const ptrdiff_t size, const ptrdiff_t alignment, int level = -1) const { + if(level == -1) + level = m_default_level; + if(level == 0) { + + char* previous = m_iter_L0; + const ptrdiff_t missalign = size_t(m_iter_L0)%alignment; + if(missalign) m_iter_L0 += alignment-missalign; + + void* tmp = m_iter_L0 + m_offset * size; + if (m_end_L0 < (m_iter_L0 += size * m_multiplier)) { + m_iter_L0 = previous; // put it back like it was + #ifdef KOKKOS_DEBUG + // mfh 23 Jun 2015: printf call consumes 25 registers + // in a CUDA build, so only print in debug mode. The + // function still returns NULL if not enough memory. + printf ("ScratchMemorySpace<...>::get_shmem: Failed to allocate " + "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), + long(m_end_L0-m_iter_L0)); + #endif // KOKKOS_DEBUG + tmp = 0; + } + return tmp; + } else { + + char* previous = m_iter_L1; + const ptrdiff_t missalign = size_t(m_iter_L1)%alignment; + if(missalign) m_iter_L1 += alignment-missalign; + + void* tmp = m_iter_L1 + m_offset * size; + if (m_end_L1 < (m_iter_L1 += size * m_multiplier)) { + m_iter_L1 = previous; // put it back like it was + #ifdef KOKKOS_DEBUG + // mfh 23 Jun 2015: printf call consumes 25 registers + // in a CUDA build, so only print in debug mode. The + // function still returns NULL if not enough memory. + printf ("ScratchMemorySpace<...>::get_shmem: Failed to allocate " + "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), + long(m_end_L1-m_iter_L1)); + #endif // KOKKOS_DEBUG + tmp = 0; + } + return tmp; + + } + } + template< typename IntType > KOKKOS_INLINE_FUNCTION ScratchMemorySpace( void * ptr_L0 , const IntType & size_L0 , void * ptr_L1 = NULL , const IntType & size_L1 = 0) diff --git a/lib/kokkos/core/src/Kokkos_Serial.hpp b/lib/kokkos/core/src/Kokkos_Serial.hpp index 911aba8922..01701e53a2 100644 --- a/lib/kokkos/core/src/Kokkos_Serial.hpp +++ b/lib/kokkos/core/src/Kokkos_Serial.hpp @@ -262,7 +262,7 @@ public: } //---------------------------------------- - +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > static int team_size_max( const FunctorType & ) { return 1 ; } @@ -274,6 +274,16 @@ public: template< class FunctorType > static int team_size_recommended( const FunctorType & , const int& ) { return 1 ; } +#endif + + template + int team_size_max( const FunctorType&, const ParallelForTag& ) const { return 1 ; } + template + int team_size_max( const FunctorType&, const ParallelReduceTag& ) const { return 1 ; } + template + int team_size_recommended( const FunctorType&, const ParallelForTag& ) const { return 1 ; } + template + int team_size_recommended( const FunctorType&, const ParallelReduceTag& ) const { return 1 ; } //---------------------------------------- @@ -281,6 +291,16 @@ public: inline int league_size() const { return m_league_size ; } inline size_t scratch_size(const int& level, int = 0) const { return m_team_scratch_size[level] + m_thread_scratch_size[level]; } + inline static + int vector_length_max() + { return 1024; } // Use arbitrary large number, is meant as a vectorizable length + + inline static + int scratch_size_max(int level) + { return (level==0? + 1024*32: + 20*1024*1024); + } /** \brief Specify league size, request team size */ TeamPolicyInternal( execution_space & , int league_size_request diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp index c3185853dc..5045e9cbbc 100644 --- a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp @@ -624,7 +624,6 @@ public: when_all( Future< A1 , A2 > const arg[] , int narg ) { using future_type = Future< execution_space > ; - using task_base = Kokkos::Impl::TaskBase< void , void , void > ; future_type f ; @@ -692,7 +691,6 @@ public: { using input_type = decltype( func(0) ); using future_type = Future< execution_space > ; - using task_base = Kokkos::Impl::TaskBase< void , void , void > ; static_assert( is_future< input_type >::value , "Functor must return a Kokkos::Future" ); diff --git a/lib/kokkos/core/src/Kokkos_View.hpp b/lib/kokkos/core/src/Kokkos_View.hpp index 70301884c3..da49aff222 100644 --- a/lib/kokkos/core/src/Kokkos_View.hpp +++ b/lib/kokkos/core/src/Kokkos_View.hpp @@ -707,10 +707,17 @@ public: //---------------------------------------- // Allow specializations to query their specialized map +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION const Kokkos::Impl::ViewMapping< traits , void > & implementation_map() const { return m_map ; } - +#endif + KOKKOS_INLINE_FUNCTION + const Kokkos::Impl::ViewMapping< traits , void > & + impl_map() const { return m_map ; } + KOKKOS_INLINE_FUNCTION + const Kokkos::Impl::SharedAllocationTracker & + impl_track() const { return m_track ; } //---------------------------------------- private: @@ -752,423 +759,421 @@ private: #endif public: - #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - template< class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if<( Kokkos::Impl::are_integral::value - && ( 0 == Rank ) - ), reference_type >::type - operator()( Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,args...) ) - return m_map.reference(); - } + template< class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if<( Kokkos::Impl::are_integral::value + && ( 0 == Rank ) + ), reference_type >::type + operator()( Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,args...) ) + return m_map.reference(); + } - template< typename I0 - , class ... Args> - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0, - Args ... args) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) - return m_map.reference(i0); - } + template< typename I0 + , class ... Args> + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0, + Args ... args) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) + return m_map.reference(i0); + } - template< typename I0 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && is_default_map - && ! is_layout_stride - ), reference_type >::type - operator()( const I0 & i0 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) - return m_map.m_handle[ i0 ]; - } + template< typename I0 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && ! is_layout_stride + ), reference_type >::type + operator()( const I0 & i0 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) + return m_map.m_impl_handle[ i0 ]; + } - template< typename I0 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && is_default_map - && is_layout_stride - ), reference_type >::type - operator()( const I0 & i0 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) - return m_map.m_handle[ m_map.m_offset.m_stride.S0 * i0 ]; - } + template< typename I0 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator()( const I0 & i0 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * i0 ]; + } - //------------------------------ - // Rank 1 operator[] + //------------------------------ + // Rank 1 operator[] + + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && ! is_default_map + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) + return m_map.reference(i0); + } template< typename I0 > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && ! is_default_map - ), reference_type >::type - operator[]( const I0 & i0 ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.reference(i0); - } + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && ! is_layout_stride + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) + return m_map.m_impl_handle[ i0 ]; + } - template< typename I0 > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && is_default_map - && ! is_layout_stride - ), reference_type >::type - operator[]( const I0 & i0 ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ i0 ]; - } + template< typename I0 > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 1 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator[]( const I0 & i0 ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * i0 ]; + } - template< typename I0 > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 1 == Rank ) - && is_default_map - && is_layout_stride - ), reference_type >::type - operator[]( const I0 & i0 ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ m_map.m_offset.m_stride.S0 * i0 ]; - } + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.reference(i0,i1); + } + + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_left && ( traits::rank_dynamic == 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_dim.N0 * i1 ]; + } + + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_left && ( traits::rank_dynamic != 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_stride * i1 ]; + } + + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_right && ( traits::rank_dynamic == 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_dim.N1 * i0 ]; + } + + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_right && ( traits::rank_dynamic != 0 ) + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_stride * i0 ]; + } + + template< typename I0 , typename I1 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 2 == Rank ) + && is_default_map + && is_layout_stride + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) + return m_map.m_impl_handle[ i0 * m_map.m_impl_offset.m_stride.S0 + + i1 * m_map.m_impl_offset.m_stride.S1 ]; + } + + //------------------------------ + // Rank 3 + + template< typename I0 , typename I1 , typename I2 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 3 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2) ]; + } + + template< typename I0 , typename I1 , typename I2 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 3 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,args...) ) + return m_map.reference(i0,i1,i2); + } + + //------------------------------ + // Rank 4 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 4 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 4 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,args...) ) + return m_map.reference(i0,i1,i2,i3); + } + + //------------------------------ + // Rank 5 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 5 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 5 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,args...) ) + return m_map.reference(i0,i1,i2,i3,i4); + } + + //------------------------------ + // Rank 6 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 6 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 6 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,args...) ) + return m_map.reference(i0,i1,i2,i3,i4,i5); + } + + //------------------------------ + // Rank 7 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 7 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 7 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,args...) ) + return m_map.reference(i0,i1,i2,i3,i4,i5,i6); + } + + //------------------------------ + // Rank 8 + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 , typename I7 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 8 == Rank ) + && is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7,args...) ) + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; + } + + template< typename I0 , typename I1 , typename I2 , typename I3 + , typename I4 , typename I5 , typename I6 , typename I7 + , class ... Args > + KOKKOS_FORCEINLINE_FUNCTION + typename std::enable_if< + ( Kokkos::Impl::are_integral::value + && ( 8 == Rank ) + && ! is_default_map + ), reference_type >::type + operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 + , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 + , Args ... args ) const + { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7,args...) ) + return m_map.reference(i0,i1,i2,i3,i4,i5,i6,i7); + } - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.reference(i0,i1); - } - - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && is_default_map - && is_layout_left && ( traits::rank_dynamic == 0 ) - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_dim.N0 * i1 ]; - } - - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && is_default_map - && is_layout_left && ( traits::rank_dynamic != 0 ) - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_stride * i1 ]; - } - - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && is_default_map - && is_layout_right && ( traits::rank_dynamic == 0 ) - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_dim.N1 * i0 ]; - } - - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && is_default_map - && is_layout_right && ( traits::rank_dynamic != 0 ) - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_stride * i0 ]; - } - - template< typename I0 , typename I1 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 2 == Rank ) - && is_default_map - && is_layout_stride - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 * m_map.m_offset.m_stride.S0 + - i1 * m_map.m_offset.m_stride.S1 ]; - } - - //------------------------------ - // Rank 3 - - template< typename I0 , typename I1 , typename I2 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 3 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2) ]; - } - - template< typename I0 , typename I1 , typename I2 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 3 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,args...) ) - return m_map.reference(i0,i1,i2); - } - - //------------------------------ - // Rank 4 - - template< typename I0 , typename I1 , typename I2 , typename I3 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 4 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3) ]; - } - - template< typename I0 , typename I1 , typename I2 , typename I3 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 4 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,args...) ) - return m_map.reference(i0,i1,i2,i3); - } - - //------------------------------ - // Rank 5 - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 5 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4) ]; - } - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 5 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,args...) ) - return m_map.reference(i0,i1,i2,i3,i4); - } - - //------------------------------ - // Rank 6 - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 6 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5) ]; - } - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 6 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,args...) ) - return m_map.reference(i0,i1,i2,i3,i4,i5); - } - - //------------------------------ - // Rank 7 - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 , typename I6 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 7 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 , const I6 & i6 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6) ]; - } - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 , typename I6 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 7 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 , const I6 & i6 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,args...) ) - return m_map.reference(i0,i1,i2,i3,i4,i5,i6); - } - - //------------------------------ - // Rank 8 - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 , typename I6 , typename I7 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 8 == Rank ) - && is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; - } - - template< typename I0 , typename I1 , typename I2 , typename I3 - , typename I4 , typename I5 , typename I6 , typename I7 - , class ... Args > - KOKKOS_FORCEINLINE_FUNCTION - typename std::enable_if< - ( Kokkos::Impl::are_integral::value - && ( 8 == Rank ) - && ! is_default_map - ), reference_type >::type - operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 - , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 - , Args ... args ) const - { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7,args...) ) - return m_map.reference(i0,i1,i2,i3,i4,i5,i6,i7); - } - - - #else + #else //------------------------------ // Rank 0 operator() @@ -1206,7 +1211,7 @@ public: operator()( const I0 & i0 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ i0 ]; + return m_map.m_impl_handle[ i0 ]; } template< typename I0 > @@ -1220,7 +1225,7 @@ public: operator()( const I0 & i0) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ m_map.m_offset.m_stride.S0 * i0 ]; + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * i0 ]; } //------------------------------ // Rank 1 operator[] @@ -1249,7 +1254,7 @@ public: operator[]( const I0 & i0 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ i0 ]; + return m_map.m_impl_handle[ i0 ]; } template< typename I0 > @@ -1263,7 +1268,7 @@ public: operator[]( const I0 & i0 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0) ) - return m_map.m_handle[ m_map.m_offset.m_stride.S0 * i0 ]; + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * i0 ]; } @@ -1294,7 +1299,7 @@ public: operator()( const I0 & i0 , const I1 & i1) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_dim.N0 * i1 ]; + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_dim.N0 * i1 ]; } template< typename I0 , typename I1> @@ -1308,7 +1313,7 @@ public: operator()( const I0 & i0 , const I1 & i1) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_stride * i1 ]; + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_stride * i1 ]; } template< typename I0 , typename I1 > @@ -1322,7 +1327,7 @@ public: operator()( const I0 & i0 , const I1 & i1 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_dim.N1 * i0 ]; + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_dim.N1 * i0 ]; } template< typename I0 , typename I1 > @@ -1336,7 +1341,7 @@ public: operator()( const I0 & i0 , const I1 & i1 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_stride * i0 ]; + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_stride * i0 ]; } template< typename I0 , typename I1> @@ -1350,8 +1355,8 @@ public: operator()( const I0 & i0 , const I1 & i1 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1) ) - return m_map.m_handle[ i0 * m_map.m_offset.m_stride.S0 + - i1 * m_map.m_offset.m_stride.S1 ]; + return m_map.m_impl_handle[ i0 * m_map.m_impl_offset.m_stride.S0 + + i1 * m_map.m_impl_offset.m_stride.S1 ]; } //------------------------------ @@ -1367,7 +1372,7 @@ public: operator()( const I0 & i0 , const I1 & i1 , const I2 & i2) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2) ]; } template< typename I0 , typename I1 , typename I2> @@ -1396,7 +1401,7 @@ public: operator()( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 > @@ -1427,7 +1432,7 @@ public: , const I4 & i4 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1460,7 +1465,7 @@ public: , const I4 & i4 , const I5 & i5 ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1493,7 +1498,7 @@ public: , const I4 & i4 , const I5 & i5 , const I6 & i6) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1526,7 +1531,7 @@ public: , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1545,7 +1550,6 @@ public: } #endif - template< class ... Args > KOKKOS_FORCEINLINE_FUNCTION typename std::enable_if<( Kokkos::Impl::are_integral::value @@ -1585,7 +1589,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) - return m_map.m_handle[ i0 ]; + return m_map.m_impl_handle[ i0 ]; } template< typename I0 @@ -1601,7 +1605,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,args...) ) - return m_map.m_handle[ m_map.m_offset.m_stride.S0 * i0 ]; + return m_map.m_impl_handle[ m_map.m_impl_offset.m_stride.S0 * i0 ]; } template< typename I0 , typename I1 @@ -1632,7 +1636,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_dim.N0 * i1 ]; + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_dim.N0 * i1 ]; } template< typename I0 , typename I1 @@ -1648,7 +1652,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 + m_map.m_offset.m_stride * i1 ]; + return m_map.m_impl_handle[ i0 + m_map.m_impl_offset.m_stride * i1 ]; } template< typename I0 , typename I1 @@ -1664,7 +1668,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_dim.N1 * i0 ]; + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_dim.N1 * i0 ]; } template< typename I0 , typename I1 @@ -1680,7 +1684,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i1 + m_map.m_offset.m_stride * i0 ]; + return m_map.m_impl_handle[ i1 + m_map.m_impl_offset.m_stride * i0 ]; } template< typename I0 , typename I1 @@ -1696,8 +1700,8 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,args...) ) - return m_map.m_handle[ i0 * m_map.m_offset.m_stride.S0 + - i1 * m_map.m_offset.m_stride.S1 ]; + return m_map.m_impl_handle[ i0 * m_map.m_impl_offset.m_stride.S0 + + i1 * m_map.m_impl_offset.m_stride.S1 ]; } //------------------------------ @@ -1715,7 +1719,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2) ]; } template< typename I0 , typename I1 , typename I2 @@ -1748,7 +1752,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1783,7 +1787,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1820,7 +1824,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1857,7 +1861,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1894,7 +1898,7 @@ public: , Args ... args ) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( (m_track,m_map,i0,i1,i2,i3,i4,i5,i6,i7,args...) ) - return m_map.m_handle[ m_map.m_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; + return m_map.m_impl_handle[ m_map.m_impl_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 @@ -1938,6 +1942,8 @@ public: KOKKOS_INLINE_FUNCTION View & operator = ( View && rhs ) { m_track = std::move(rhs.m_track) ; m_map = std::move(rhs.m_map) ; return *this ; } + + //---------------------------------------- // Compatible view copy constructor and assignment // may assign unmanaged from managed. @@ -2206,7 +2212,8 @@ public: , arg_N4 , arg_N5 , arg_N6 , arg_N7 ) ) { - + static_assert ( traits::array_layout::is_extent_constructible , "Layout is not extent constructible. A layout object should be passed too.\n" ); + #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST Impl::runtime_check_rank_host(traits::rank_dynamic, std::is_same::value, arg_N0, arg_N1, arg_N2, arg_N3, arg_N4, arg_N5, arg_N6, arg_N7, label()); @@ -2257,6 +2264,15 @@ public: #endif } + template + KOKKOS_INLINE_FUNCTION + View( const track_type & track, const Kokkos::Impl::ViewMapping< Traits , void > &map ) : + m_track(track), m_map() + { + typedef Kokkos::Impl::ViewMapping< traits , Traits , void > Mapping ; + static_assert( Mapping::is_assignable , "Incompatible View copy construction" ); + Mapping::assign( m_map , map , track ); + } //---------------------------------------- // Memory span required to wrap these dimensions. @@ -2346,7 +2362,7 @@ public: static inline size_t shmem_size( typename traits::array_layout const& arg_layout ) { - return map_type::memory_span( arg_layout ); + return map_type::memory_span( arg_layout )+sizeof(typename traits::value_type); } explicit KOKKOS_INLINE_FUNCTION @@ -2354,7 +2370,7 @@ public: , const typename traits::array_layout & arg_layout ) : View( Impl::ViewCtorProp( reinterpret_cast( - arg_space.get_shmem( map_type::memory_span( arg_layout ) ) ) ) + arg_space.get_shmem_aligned( map_type::memory_span( arg_layout ), sizeof(typename traits::value_type) ) ) ) , arg_layout ) {} @@ -2370,11 +2386,11 @@ public: , const size_t arg_N7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG ) : View( Impl::ViewCtorProp( reinterpret_cast( - arg_space.get_shmem( + arg_space.get_shmem_aligned( map_type::memory_span( typename traits::array_layout ( arg_N0 , arg_N1 , arg_N2 , arg_N3 - , arg_N4 , arg_N5 , arg_N6 , arg_N7 ) ) ) ) ) + , arg_N4 , arg_N5 , arg_N6 , arg_N7 ) ), sizeof(typename traits::value_type) ) ) ) , typename traits::array_layout ( arg_N0 , arg_N1 , arg_N2 , arg_N3 , arg_N4 , arg_N5 , arg_N6 , arg_N7 ) @@ -2515,209 +2531,6 @@ void shared_allocation_tracking_enable() } /* namespace Impl */ } /* namespace Kokkos */ -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -// Deduce Mirror Types -template -struct MirrorViewType { - // The incoming view_type - typedef typename Kokkos::View src_view_type; - // The memory space for the mirror view - typedef typename Space::memory_space memory_space; - // Check whether it is the same memory space - enum { is_same_memspace = std::is_same::value }; - // The array_layout - typedef typename src_view_type::array_layout array_layout; - // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. - typedef typename src_view_type::non_const_data_type data_type; - // The destination view type if it is not the same memory space - typedef Kokkos::View dest_view_type; - // If it is the same memory_space return the existsing view_type - // This will also keep the unmanaged trait if necessary - typedef typename std::conditional::type view_type; -}; - -template -struct MirrorType { - // The incoming view_type - typedef typename Kokkos::View src_view_type; - // The memory space for the mirror view - typedef typename Space::memory_space memory_space; - // Check whether it is the same memory space - enum { is_same_memspace = std::is_same::value }; - // The array_layout - typedef typename src_view_type::array_layout array_layout; - // The data type (we probably want it non-const since otherwise we can't even deep_copy to it. - typedef typename src_view_type::non_const_data_type data_type; - // The destination view type if it is not the same memory space - typedef Kokkos::View view_type; -}; - -} - -template< class T , class ... P > -inline -typename Kokkos::View::HostMirror -create_mirror( const Kokkos::View & src - , typename std::enable_if< - ! std::is_same< typename Kokkos::ViewTraits::array_layout - , Kokkos::LayoutStride >::value - >::type * = 0 - ) -{ - typedef View src_type ; - typedef typename src_type::HostMirror dst_type ; - - return dst_type( std::string( src.label() ).append("_mirror") -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - , src.extent(0) - , src.extent(1) - , src.extent(2) - , src.extent(3) - , src.extent(4) - , src.extent(5) - , src.extent(6) - , src.extent(7) ); -#else - , src.rank_dynamic > 0 ? src.extent(0): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 1 ? src.extent(1): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 2 ? src.extent(2): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 3 ? src.extent(3): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 4 ? src.extent(4): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 5 ? src.extent(5): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 6 ? src.extent(6): KOKKOS_IMPL_CTOR_DEFAULT_ARG - , src.rank_dynamic > 7 ? src.extent(7): KOKKOS_IMPL_CTOR_DEFAULT_ARG ); -#endif -} - -template< class T , class ... P > -inline -typename Kokkos::View::HostMirror -create_mirror( const Kokkos::View & src - , typename std::enable_if< - std::is_same< typename Kokkos::ViewTraits::array_layout - , Kokkos::LayoutStride >::value - >::type * = 0 - ) -{ - typedef View src_type ; - typedef typename src_type::HostMirror dst_type ; - - Kokkos::LayoutStride layout ; - - layout.dimension[0] = src.extent(0); - layout.dimension[1] = src.extent(1); - layout.dimension[2] = src.extent(2); - layout.dimension[3] = src.extent(3); - layout.dimension[4] = src.extent(4); - layout.dimension[5] = src.extent(5); - layout.dimension[6] = src.extent(6); - layout.dimension[7] = src.extent(7); - - layout.stride[0] = src.stride_0(); - layout.stride[1] = src.stride_1(); - layout.stride[2] = src.stride_2(); - layout.stride[3] = src.stride_3(); - layout.stride[4] = src.stride_4(); - layout.stride[5] = src.stride_5(); - layout.stride[6] = src.stride_6(); - layout.stride[7] = src.stride_7(); - - return dst_type( std::string( src.label() ).append("_mirror") , layout ); -} - - -// Create a mirror in a new space (specialization for different space) -template -typename Impl::MirrorType::view_type create_mirror(const Space& , const Kokkos::View & src) { - return typename Impl::MirrorType::view_type(src.label(),src.layout()); -} - -template< class T , class ... P > -inline -typename Kokkos::View::HostMirror -create_mirror_view( const Kokkos::View & src - , typename std::enable_if<( - std::is_same< typename Kokkos::View::memory_space - , typename Kokkos::View::HostMirror::memory_space - >::value - && - std::is_same< typename Kokkos::View::data_type - , typename Kokkos::View::HostMirror::data_type - >::value - )>::type * = 0 - ) -{ - return src ; -} - -template< class T , class ... P > -inline -typename Kokkos::View::HostMirror -create_mirror_view( const Kokkos::View & src - , typename std::enable_if< ! ( - std::is_same< typename Kokkos::View::memory_space - , typename Kokkos::View::HostMirror::memory_space - >::value - && - std::is_same< typename Kokkos::View::data_type - , typename Kokkos::View::HostMirror::data_type - >::value - )>::type * = 0 - ) -{ - return Kokkos::create_mirror( src ); -} - -// Create a mirror view in a new space (specialization for same space) -template -typename Impl::MirrorViewType::view_type -create_mirror_view(const Space& , const Kokkos::View & src - , typename std::enable_if::is_same_memspace>::type* = 0 ) { - return src; -} - -// Create a mirror view in a new space (specialization for different space) -template -typename Impl::MirrorViewType::view_type -create_mirror_view(const Space& , const Kokkos::View & src - , typename std::enable_if::is_same_memspace>::type* = 0 ) { - return typename Impl::MirrorViewType::view_type(src.label(),src.layout()); -} - -// Create a mirror view and deep_copy in a new space (specialization for same space) -template -typename Impl::MirrorViewType::view_type -create_mirror_view_and_copy(const Space& , const Kokkos::View & src - , std::string const& name = "" - , typename std::enable_if::is_same_memspace>::type* = 0 ) { - (void)name; - return src; -} - -// Create a mirror view and deep_copy in a new space (specialization for different space) -template -typename Impl::MirrorViewType::view_type -create_mirror_view_and_copy(const Space& , const Kokkos::View & src - , std::string const& name = "" - , typename std::enable_if::is_same_memspace>::type* = 0 ) { - using Mirror = typename Impl::MirrorViewType::view_type; - std::string label = name.empty() ? src.label() : name; - auto mirror = Mirror(ViewAllocateWithoutInitializing(label), src.layout()); - deep_copy(mirror, src); - return mirror; -} - -} /* namespace Kokkos */ - - //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/Makefile b/lib/kokkos/core/src/Makefile index 6ee5fec716..c2dbddf45e 100644 --- a/lib/kokkos/core/src/Makefile +++ b/lib/kokkos/core/src/Makefile @@ -16,6 +16,7 @@ endif CXXFLAGS ?= -O3 LINK ?= $(CXX) LDFLAGS ?= +CP = cp include $(KOKKOS_PATH)/Makefile.kokkos include $(KOKKOS_PATH)/core/src/Makefile.generate_header_lists @@ -50,7 +51,12 @@ ifeq ($(KOKKOS_OS),Linux) COPY_FLAG = -u endif ifeq ($(KOKKOS_OS),Darwin) - COPY_FLAG = + COPY_FLAG = + # If Homebrew coreutils is installed, its cp will have the -u option + ifneq ("$(wildcard /usr/local/opt/coreutils/libexec/gnubin/cp)","") + CP = /usr/local/opt/coreutils/libexec/gnubin/cp + COPY_FLAG = -u + endif endif ifeq ($(KOKKOS_DEBUG),"no") @@ -66,36 +72,38 @@ mkdir: mkdir -p $(PREFIX)/bin mkdir -p $(PREFIX)/include mkdir -p $(PREFIX)/lib + mkdir -p $(PREFIX)/lib/pkgconfig mkdir -p $(PREFIX)/include/impl copy-cuda: mkdir mkdir -p $(PREFIX)/include/Cuda - cp $(COPY_FLAG) $(KOKKOS_HEADERS_CUDA) $(PREFIX)/include/Cuda + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_CUDA) $(PREFIX)/include/Cuda copy-threads: mkdir mkdir -p $(PREFIX)/include/Threads - cp $(COPY_FLAG) $(KOKKOS_HEADERS_THREADS) $(PREFIX)/include/Threads + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_THREADS) $(PREFIX)/include/Threads copy-qthreads: mkdir mkdir -p $(PREFIX)/include/Qthreads - cp $(COPY_FLAG) $(KOKKOS_HEADERS_QTHREADS) $(PREFIX)/include/Qthreads + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_QTHREADS) $(PREFIX)/include/Qthreads copy-openmp: mkdir mkdir -p $(PREFIX)/include/OpenMP - cp $(COPY_FLAG) $(KOKKOS_HEADERS_OPENMP) $(PREFIX)/include/OpenMP + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_OPENMP) $(PREFIX)/include/OpenMP copy-rocm: mkdir mkdir -p $(PREFIX)/include/ROCm - cp $(COPY_FLAG) $(KOKKOS_HEADERS_ROCM) $(PREFIX)/include/ROCm + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_ROCM) $(PREFIX)/include/ROCm install: mkdir $(CONDITIONAL_COPIES) build-lib generate_build_settings - cp $(COPY_FLAG) $(NVCC_WRAPPER) $(PREFIX)/bin - cp $(COPY_FLAG) $(KOKKOS_HEADERS_INCLUDE) $(PREFIX)/include - cp $(COPY_FLAG) $(KOKKOS_HEADERS_INCLUDE_IMPL) $(PREFIX)/include/impl - cp $(COPY_FLAG) $(KOKKOS_MAKEFILE) $(PREFIX) - cp $(COPY_FLAG) $(KOKKOS_CMAKEFILE) $(PREFIX) - cp $(COPY_FLAG) libkokkos.a $(PREFIX)/lib - cp $(COPY_FLAG) $(KOKKOS_CONFIG_HEADER) $(PREFIX)/include + $(CP) $(COPY_FLAG) $(NVCC_WRAPPER) $(PREFIX)/bin + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_INCLUDE) $(PREFIX)/include + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_INCLUDE_IMPL) $(PREFIX)/include/impl + $(CP) $(COPY_FLAG) $(KOKKOS_MAKEFILE) $(PREFIX) + $(CP) $(COPY_FLAG) $(KOKKOS_CMAKEFILE) $(PREFIX) + $(CP) $(COPY_FLAG) $(KOKKOS_PKGCONFIG) $(PREFIX)/lib/pkgconfig + $(CP) $(COPY_FLAG) libkokkos.a $(PREFIX)/lib + $(CP) $(COPY_FLAG) $(KOKKOS_CONFIG_HEADER) $(PREFIX)/include clean: kokkos-clean - rm -f $(KOKKOS_MAKEFILE) $(KOKKOS_CMAKEFILE) + rm -f $(KOKKOS_MAKEFILE) $(KOKKOS_CMAKEFILE) $(KOKKOS_PKGCONFIG) diff --git a/lib/kokkos/core/src/Makefile.generate_build_files b/lib/kokkos/core/src/Makefile.generate_build_files index 7e0c6351fe..cc856ee9a3 100644 --- a/lib/kokkos/core/src/Makefile.generate_build_files +++ b/lib/kokkos/core/src/Makefile.generate_build_files @@ -5,6 +5,7 @@ # These files are generated by this makefile KOKKOS_MAKEFILE=Makefile.kokkos KOKKOS_CMAKEFILE=kokkos_generated_settings.cmake +KOKKOS_PKGCONFIG=kokkos.pc ifeq ($(KOKKOS_DEBUG),"no") KOKKOS_DEBUG_CMAKE = OFF @@ -33,11 +34,29 @@ kokkos_append_var = $(call kokkos_appendvar_makefile,$1); $(call kokkos_appendva kokkos_append_var2 = $(call kokkos_appendvar2_makefile,$1); $(call kokkos_appendvar_cmakefile,$1,$2) kokkos_append_varval = $(call kokkos_appendval_makefile,$1,$2); $(call kokkos_appendval_cmakefile,$1,$2,$3) +kokkos_fixup_sed_impl = sed \ + -e 's|$(KOKKOS_PATH)/core/src|$(PREFIX)/include|g' \ + -e 's|$(KOKKOS_PATH)/containers/src|$(PREFIX)/include|g' \ + -e 's|$(KOKKOS_PATH)/algorithms/src|$(PREFIX)/include|g' \ + -e 's|-L$(PWD)|-L$(PREFIX)/lib|g' \ + -e 's|= libkokkos.a|= $(PREFIX)/lib/libkokkos.a|g' \ + -e 's|= $(KOKKOS_CONFIG_HEADER)|= $(PREFIX)/include/$(KOKKOS_CONFIG_HEADER)|g' $1 \ + > $1.tmp && mv -f $1.tmp $1 + +$(KOKKOS_PKGCONFIG): $(KOKKOS_PATH)/core/src/$(KOKKOS_PKGCONFIG).in + @sed -e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|g' \ + -e 's|@KOKKOS_CXXFLAGS@|$(patsubst -I%,,$(KOKKOS_CXXFLAGS))|g' \ + -e 's|@KOKKOS_EXTRA_LIBS_LIST@|$(KOKKOS_EXTRA_LIBS)|g' \ + -e 's|@KOKKOS_LINK_FLAGS@|$(KOKKOS_LINK_FLAGS)|g' \ + $< > $@ + +kokkos_fixup_sed = $(call kokkos_fixup_sed_impl,$(KOKKOS_MAKEFILE)); $(call kokkos_fixup_sed_impl,$(KOKKOS_CMAKEFILE)) + #This function should be used for variables whose values are different in GNU Make versus CMake, #especially lists which are delimited by commas in one case and semicolons in another kokkos_append_gmakevar = $(call kokkos_appendvar_makefile,$1); $(call kokkos_append_gmakevar_cmakefile,$1,$2) -generate_build_settings: $(KOKKOS_CONFIG_HEADER) +generate_build_settings: $(KOKKOS_CONFIG_HEADER) $(KOKKOS_PKGCONFIG) @rm -f $(KOKKOS_MAKEFILE) @rm -f $(KOKKOS_CMAKEFILE) @$(call kokkos_append_string, "#Global Settings used to generate this library") @@ -68,7 +87,6 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) @$(call kokkos_append_var,KOKKOS_HEADERS_ROCM,'STRING "Kokkos headers ROCm list"') @$(call kokkos_append_var,KOKKOS_HEADERS_THREADS,'STRING "Kokkos headers Threads list"') @$(call kokkos_append_var,KOKKOS_HEADERS_QTHREADS,'STRING "Kokkos headers QThreads list"') - @$(call kokkos_append_var,KOKKOS_SRC,'STRING "Kokkos source list"') @$(call kokkos_append_string,"") @$(call kokkos_append_string,"#Variables used in application Makefiles") @$(call kokkos_append_var,KOKKOS_OS,'STRING ""') # This was not in original cmake gen @@ -94,19 +112,11 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) @$(call kokkos_append_makefile,"#Fake kokkos-clean target") @$(call kokkos_append_makefile,"kokkos-clean:") @$(call kokkos_append_makefile,"") - @sed \ - -e 's|$(KOKKOS_PATH)/core/src|$(PREFIX)/include|g' \ - -e 's|$(KOKKOS_PATH)/containers/src|$(PREFIX)/include|g' \ - -e 's|$(KOKKOS_PATH)/algorithms/src|$(PREFIX)/include|g' \ - -e 's|-L$(PWD)|-L$(PREFIX)/lib|g' \ - -e 's|= libkokkos.a|= $(PREFIX)/lib/libkokkos.a|g' \ - -e 's|= $(KOKKOS_CONFIG_HEADER)|= $(PREFIX)/include/$(KOKKOS_CONFIG_HEADER)|g' $(KOKKOS_MAKEFILE) \ - > $(KOKKOS_MAKEFILE).tmp - @mv -f $(KOKKOS_MAKEFILE).tmp $(KOKKOS_MAKEFILE) + @$(call kokkos_fixup_sed) + @$(call kokkos_append_var,KOKKOS_SRC,'STRING "Kokkos source list"') @$(call kokkos_setvar_cmakefile,KOKKOS_CXX_FLAGS,$(KOKKOS_CXXFLAGS)) @$(call kokkos_setvar_cmakefile,KOKKOS_CPP_FLAGS,$(KOKKOS_CPPFLAGS)) @$(call kokkos_setvar_cmakefile,KOKKOS_LD_FLAGS,$(KOKKOS_LDFLAGS)) @$(call kokkos_setlist_cmakefile,KOKKOS_LIBS_LIST,$(KOKKOS_LIBS)) @$(call kokkos_setlist_cmakefile,KOKKOS_EXTRA_LIBS_LIST,$(KOKKOS_EXTRA_LIBS)) @$(call kokkos_setvar_cmakefile,KOKKOS_LINK_FLAGS,$(KOKKOS_LINK_FLAGS)) - diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp index 351f5f1ec2..2f2c768460 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp @@ -103,8 +103,6 @@ public: void TaskQueueSpecialization< Kokkos::OpenMP >::execute ( TaskQueue< Kokkos::OpenMP > * const queue ) { - using execution_space = Kokkos::OpenMP ; - using queue_type = TaskQueue< execution_space > ; using task_root_type = TaskBase< void , void , void > ; using Member = Impl::HostThreadTeamMember< execution_space > ; @@ -213,8 +211,6 @@ void TaskQueueSpecialization< Kokkos::OpenMP >:: iff_single_thread_recursive_execute ( TaskQueue< Kokkos::OpenMP > * const queue ) { - using execution_space = Kokkos::OpenMP ; - using queue_type = TaskQueue< execution_space > ; using task_root_type = TaskBase< void , void , void > ; using Member = Impl::HostThreadTeamMember< execution_space > ; diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp index b530dca10f..e8fbc467e0 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp @@ -76,14 +76,11 @@ public: //---------------------------------------- +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > inline static int team_size_max( const FunctorType & ) { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE int pool_size = traits::execution_space::thread_pool_size(1); -#else - int pool_size = traits::execution_space::impl_thread_pool_size(1); -#endif int max_host_team_size = Impl::HostThreadTeamData::max_team_members; return pool_size + inline static + int team_size_recommended( const FunctorType &, const int& ) + { + return traits::execution_space::thread_pool_size(2); + } +#endif + + template + int team_size_max( const FunctorType&, const ParallelForTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = traits::execution_space::thread_pool_size(1); +#else + int pool_size = traits::execution_space::impl_thread_pool_size(1); +#endif + int max_host_team_size = Impl::HostThreadTeamData::max_team_members; + return pool_size + int team_size_max( const FunctorType&, const ParallelReduceTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = traits::execution_space::thread_pool_size(1); +#else + int pool_size = traits::execution_space::impl_thread_pool_size(1); +#endif + int max_host_team_size = Impl::HostThreadTeamData::max_team_members; + return pool_size + int team_size_recommended( const FunctorType&, const ParallelForTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + return traits::execution_space::thread_pool_size(2); +#else + return traits::execution_space::impl_thread_pool_size(2); +#endif + } + template + int team_size_recommended( const FunctorType&, const ParallelReduceTag& ) const { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE return traits::execution_space::thread_pool_size(2); #else @@ -99,16 +137,17 @@ public: #endif } - template< class FunctorType > + inline static - int team_size_recommended( const FunctorType &, const int& ) - { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - return traits::execution_space::thread_pool_size(2); -#else - return traits::execution_space::impl_thread_pool_size(2); -#endif - } + int vector_length_max() + { return 1024; } // Use arbitrary large number, is meant as a vectorizable length + + inline static + int scratch_size_max(int level) + { return (level==0? + 1024*32: // Roughly L1 size + 20*1024*1024); // Limit to keep compatibility with CUDA + } //---------------------------------------- diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp index 2d53670c8d..c7d4defad2 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp @@ -160,7 +160,8 @@ SharedAllocationRecord( const Kokkos::Experimental::OpenMPTargetSpace & arg_spac , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); - + // Set last element zero, in case c_str is too long + header.m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; //TODO DeepCopy // DeepCopy diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Config.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Config.hpp index 71643458b4..87840bb37b 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Config.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Config.hpp @@ -44,8 +44,8 @@ #ifndef GUARD_CORE_KOKKOS_ROCM_CONFIG_HPP #define GUARD_CORE_KOKKOS_ROCM_CONFIG_HPP -#ifndef KOKKOS_ROCM_HAS_WORKAROUNDS -#define KOKKOS_ROCM_HAS_WORKAROUNDS 1 +#ifndef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND +#define KOKKOS_IMPL_ROCM_CLANG_WORKAROUND 1 #endif #endif diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp index 1c2bf303cf..205e6a2955 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp @@ -55,14 +55,14 @@ namespace Impl { struct ROCmTraits { // TODO: determine if needed - enum { WavefrontSize = 64 /* 64 */ }; - enum { WorkgroupSize = 64 /* 64 */ }; - enum { WavefrontIndexMask = 0x001f /* Mask for warpindex */ }; - enum { WavefrontIndexShift = 5 /* WarpSize == 1 << WarpShift */ }; + enum { WavefrontSize = 64 /* 64 */ }; + enum { WorkgroupSize = 256 /* 256 */ }; + enum { WavefrontIndexMask = 0x003f /* Mask for wavefrontindex */ }; + enum { WavefrontIndexShift = 6 /* WavefrontSize == 1 << WavefrontShift */ }; - enum { SharedMemoryBanks = 32 /* Compute device 2.0 */ }; - enum { SharedMemoryCapacity = 0x0C000 /* 48k shared / 16k L1 Cache */ }; - enum { SharedMemoryUsage = 0x04000 /* 16k shared / 48k L1 Cache */ }; + enum { SharedMemoryBanks = 64 /* GCN */ }; + enum { SharedMemoryCapacity = 0x10000 /* 64k shared / 16k L1 Cache */ }; + enum { SharedMemoryUsage = 0x04000 /* 64k shared / 16k L1 Cache */ }; enum { UpperBoundExtentCount = 4294967295 /* Hard upper bound */ }; #if 0 @@ -84,6 +84,16 @@ size_t rocm_internal_maximum_workgroup_count(); size_t * rocm_internal_scratch_flags( const size_t size ); size_t * rocm_internal_scratch_space( const size_t size ); +// This pointer is the start of dynamic shared memory (LDS). +// Dynamic is at the end of LDS and it's size must be specified +// in a tile_block specification at kernel launch time. +template< typename T > +KOKKOS_INLINE_FUNCTION +T * kokkos_impl_rocm_shared_memory() +//{ return (T*) hc::get_group_segment_base_pointer() ; } +{ return (T*) hc::get_dynamic_group_segment_base_pointer() ; } + + } } // namespace Kokkos #define ROCM_SPACE_ATOMIC_MASK 0x1FFFF @@ -249,7 +259,6 @@ struct ROCmParallelLaunch< DriverType size_t bx = (grid.x > block.x)? block.x : grid.x; size_t by = (grid.y > block.y)? block.y : grid.y; size_t bz = (grid.z > block.z)? block.z : grid.z; - hc::parallel_for_each(ext.tile_with_dynamic(bz,by,bx,shmem), [=](const hc::index<3> & idx) [[hc]] diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Impl.cpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Impl.cpp index 3ae312647e..236042ccc2 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Impl.cpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Impl.cpp @@ -543,20 +543,13 @@ enum { sizeScratchGrain = sizeof(ScratchGrain) }; void rocmMemset( Kokkos::Experimental::ROCm::size_type * ptr , Kokkos::Experimental::ROCm::size_type value , Kokkos::Experimental::ROCm::size_type size) { char * mptr = (char * ) ptr; -#if 0 - parallel_for_each(hc::extent<1>(size), +/* parallel_for_each(hc::extent<1>(size), [=, &ptr] (hc::index<1> idx) __HC__ { int i = idx[0]; ptr[i] = value; - }).wait(); -#else - for (int i= 0; i Record ; + typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::ROCmSpace , void > Record ; - Record * const r = Record::allocate( Kokkos::HostSpace() + Record * const r = Record::allocate( Kokkos::Experimental::ROCmSpace() , "InternalScratchFlags" , ( sizeScratchGrain * m_scratchFlagsCount ) ); @@ -590,9 +583,9 @@ ROCmInternal::scratch_space( const Kokkos::Experimental::ROCm::size_type size ) m_scratchSpaceCount = ( size + sizeScratchGrain - 1 ) / sizeScratchGrain ; - typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::HostSpace , void > Record ; + typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::ROCmSpace , void > Record ; - Record * const r = Record::allocate( Kokkos::HostSpace() + static Record * const r = Record::allocate( Kokkos::Experimental::ROCmSpace() , "InternalScratchSpace" , ( sizeScratchGrain * m_scratchSpaceCount ) ); @@ -616,7 +609,7 @@ void ROCmInternal::finalize() // scratch_lock_array_rocm_space_ptr(false); // threadid_lock_array_rocm_space_ptr(false); - typedef Kokkos::Impl::SharedAllocationRecord< HostSpace > RecordROCm ; + typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::ROCmSpace > RecordROCm ; typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::ROCmHostPinnedSpace > RecordHost ; RecordROCm::decrement( RecordROCm::get_record( m_scratchFlags ) ); diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp index 2978ae8f5f..edd1c12e45 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp @@ -243,6 +243,15 @@ public: return(max); } + template< class FunctorType , class PatternTypeTag> + int team_size_max( const FunctorType& functor, PatternTypeTag) { + return 256/vector_length(); + } + template< class FunctorType , class PatternTypeTag> + int team_size_recommended( const FunctorType& functor, PatternTypeTag) { + return 128/vector_length(); + } + template KOKKOS_INLINE_FUNCTION int team_size(const F& f) const { return (m_team_size > 0) ? m_team_size : team_size_recommended(f); } KOKKOS_INLINE_FUNCTION int team_size() const { return (m_team_size > 0) ? m_team_size : Impl::get_max_tile_thread(); ; } @@ -261,6 +270,11 @@ public: return m_thread_scratch_size[level]; } + static int scratch_size_max(int level) { + return level==0 ? + 1024*40 : 1024*1204*20; + } + typedef Impl::ROCmTeamMember member_type; }; @@ -487,6 +501,7 @@ public: #endif } m_idx.barrier.wait(); + reducer.reference() = buffer[0]; } /** \brief Intra-team vector reduce @@ -541,19 +556,19 @@ public: } template< typename ReducerType > - KOKKOS_INLINE_FUNCTION static + KOKKOS_INLINE_FUNCTION typename std::enable_if< is_reducer< ReducerType >::value >::type - vector_reduce( ReducerType const & reducer ) + vector_reduce( ReducerType const & reducer ) const { #ifdef __HCC_ACCELERATOR__ - if(blockDim_x == 1) return; + if(m_vector_length == 1) return; // Intra vector lane shuffle reduction: typename ReducerType::value_type tmp ( reducer.reference() ); - for ( int i = blockDim_x ; ( i >>= 1 ) ; ) { - shfl_down( reducer.reference() , i , blockDim_x ); - if ( (int)threadIdx_x < i ) { reducer.join( tmp , reducer.reference() ); } + for ( int i = m_vector_length ; ( i >>= 1 ) ; ) { + reducer.reference() = shfl_down( tmp , i , m_vector_length ); + if ( (int)vector_rank() < i ) { reducer.join( tmp , reducer.reference() ); } } // Broadcast from root lane to all other lanes. @@ -561,7 +576,7 @@ public: // because floating point summation is not associative // and thus different threads could have different results. - shfl( reducer.reference() , 0 , blockDim_x ); + reducer.reference() = shfl( tmp , 0 , m_vector_length ); #endif } @@ -847,7 +862,7 @@ public: hc::extent< 1 > flat_extent( total_size ); - hc::tiled_extent< 1 > team_extent = flat_extent.tile(team_size*vector_length); + hc::tiled_extent< 1 > team_extent = flat_extent.tile(vector_length*team_size); hc::parallel_for_each( team_extent , [=](hc::tiled_index<1> idx) [[hc]] { rocm_invoke(f, typename Policy::member_type(idx, league_size, team_size, shared, shared_size, scratch_size0, scratch, scratch_size1,vector_length)); @@ -958,6 +973,176 @@ public: }; +//---------------------------------------------------------------------------- + +template< class FunctorType , class ReducerType, class... Traits > +class ParallelReduce< + FunctorType , Kokkos::MDRangePolicy< Traits... >, ReducerType, Kokkos::Experimental::ROCm > +{ +private: + typedef Kokkos::MDRangePolicy< Traits ... > Policy ; + using RP = Policy; + typedef typename Policy::array_index_type array_index_type; + typedef typename Policy::index_type index_type; + typedef typename Policy::work_tag WorkTag ; + typedef typename Policy::member_type Member ; + typedef typename Policy::launch_bounds LaunchBounds; + + typedef Kokkos::Impl::if_c< std::is_same::value, FunctorType, ReducerType> ReducerConditional; + typedef typename ReducerConditional::type ReducerTypeFwd; + typedef typename Kokkos::Impl::if_c< std::is_same::value, WorkTag, void>::type WorkTagFwd; + + typedef Kokkos::Impl::FunctorValueTraits< ReducerTypeFwd, WorkTagFwd > ValueTraits ; + typedef Kokkos::Impl::FunctorValueInit< ReducerTypeFwd, WorkTagFwd > ValueInit ; + typedef Kokkos::Impl::FunctorValueJoin< ReducerTypeFwd, WorkTagFwd > ValueJoin ; + + +public: + + typedef typename ValueTraits::pointer_type pointer_type ; + typedef typename ValueTraits::value_type value_type ; + typedef typename ValueTraits::reference_type reference_type ; + typedef FunctorType functor_type ; + typedef Kokkos::Experimental::ROCm::size_type size_type ; + + // Algorithmic constraints: blockSize is a power of two AND blockDim.y == blockDim.z == 1 + + const FunctorType m_functor ; + const Policy m_policy ; // used for workrange and nwork + const ReducerType m_reducer ; + const pointer_type m_result_ptr ; + value_type * m_scratch_space ; + size_type * m_scratch_flags ; + + typedef typename Kokkos::Impl::Reduce::DeviceIterateTile DeviceIteratePattern; + + KOKKOS_INLINE_FUNCTION + void exec_range( reference_type update ) const + { + Kokkos::Impl::Reduce::DeviceIterateTile(m_policy, m_functor, update).exec_range(); + } + + + KOKKOS_INLINE_FUNCTION + void operator()(void) const + { + run(); + } + + KOKKOS_INLINE_FUNCTION + void run( ) const + { + const integral_nonzero_constant< size_type , ValueTraits::StaticValueSize / sizeof(value_type) > + word_count( (ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) )) / sizeof(value_type) ); + // pointer to shared data accounts for the reserved space at the start + value_type * const shared = kokkos_impl_rocm_shared_memory() + + 2*sizeof(uint64_t); + + { + reference_type value = + ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , shared + threadIdx_y * word_count.value ); + // Number of blocks is bounded so that the reduction can be limited to two passes. + // Each thread block is given an approximately equal amount of work to perform. + // Accumulate the values for this block. + // The accumulation ordering does not match the final pass, but is arithmatically equivalent. + + this-> exec_range( value ); + } + + // Reduce with final value at blockDim.y - 1 location. + // Problem: non power-of-two blockDim + + if ( rocm_single_inter_block_reduce_scan( + ReducerConditional::select(m_functor , m_reducer) , blockIdx_x , + gridDim_x , shared , m_scratch_space , m_scratch_flags ) ) { + + // This is the final block with the final result at the final threads' location + value_type * const tshared = shared + ( blockDim_y - 1 ) * word_count.value ; + value_type * const global = m_scratch_space ; + + if ( threadIdx_y == 0 ) { + Kokkos::Impl::FunctorFinal< ReducerTypeFwd , WorkTagFwd >::final( ReducerConditional::select(m_functor , m_reducer) , tshared ); +// for ( unsigned i = 0 ; i < word_count.value ; i+=blockDim_y ) { global[i] = tshared[i]; } + for ( unsigned i = 0 ; i < word_count.value ; i++ ) { global[i] = tshared[i]; } + } + } + } + + + + // Determine block size constrained by shared memory: + static inline + unsigned local_block_size( const FunctorType & f ) + { + unsigned n = ROCmTraits::WavefrontSize * 8 ; + while ( n && ROCmTraits::SharedMemoryCapacity < rocm_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + return n ; + } + + inline + void execute() + { + const int nwork = m_policy.m_num_tiles; + if ( nwork ) { + int block_size = m_policy.m_prod_tile_dims; + // CONSTRAINT: Algorithm requires block_size >= product of tile dimensions + // Nearest power of two + int exponent_pow_two = std::ceil( std::log2((float)block_size) ); + block_size = 1<<(exponent_pow_two); + + m_scratch_space = (value_type*)rocm_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size*nwork /* block_size == max block_count */ ); + m_scratch_flags = rocm_internal_scratch_flags( sizeof(size_type) ); + const dim3 block( 1 , block_size , 1 ); + // Required grid.x <= block.y + const dim3 grid( nwork, block_size , 1 ); + const int shmem = rocm_single_inter_block_reduce_scan_shmem( m_functor , block.y ); + + ROCmParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + + ROCM::fence(); + + if ( m_result_ptr ) { + const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); + DeepCopy( m_result_ptr , m_scratch_space , size ); + } + } + else { + if (m_result_ptr) { + ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , m_result_ptr ); + } + } + } + + + template< class HostViewType > + ParallelReduce( const FunctorType & arg_functor + , const Policy & arg_policy + , const HostViewType & arg_result + , typename std::enable_if< + Kokkos::is_view< HostViewType >::value + ,void*>::type = NULL) + : m_functor( arg_functor ) + , m_policy( arg_policy ) + , m_reducer( InvalidType() ) + , m_result_ptr( arg_result.data() ) + , m_scratch_space( 0 ) + , m_scratch_flags( 0 ) + {} + + ParallelReduce( const FunctorType & arg_functor + , const Policy & arg_policy + , const ReducerType & reducer) + : m_functor( arg_functor ) + , m_policy( arg_policy ) + , m_reducer( reducer ) + , m_result_ptr( reducer.view().data() ) + , m_scratch_space( 0 ) + , m_scratch_flags( 0 ) + {} + +}; +//---------------------------------------------------------------------------- + template< class FunctorType, class ReducerType, class... Traits > class ParallelReduce< FunctorType , Kokkos::TeamPolicy< Traits... >, ReducerType, Kokkos::Experimental::ROCm > @@ -992,8 +1177,14 @@ public: const int scratch_size0 = policy.scratch_size(0,team_size); const int scratch_size1 = policy.scratch_size(1,team_size); const int total_size = league_size * team_size ; - - if(total_size == 0) return; + + typedef Kokkos::Impl::FunctorValueInit< FunctorType, typename Policy::work_tag > ValueInit ; + if(total_size==0) { + if (result_view.data()) { + ValueInit::init( f , result_view.data() ); + } + return; + } const int reduce_size = ValueTraits::value_size( f ); const int shared_size = FunctorTeamShmemSize< FunctorType >::value( f , team_size ); @@ -1042,7 +1233,16 @@ public: const int vector_length = policy.vector_length(); const int total_size = league_size * team_size; - if(total_size == 0) return; + typedef Kokkos::Impl::FunctorValueInit< ReducerType, typename Policy::work_tag > ValueInit ; + typedef Kokkos::Impl::if_c< std::is_same::value, + FunctorType, ReducerType> ReducerConditional; + if(total_size==0) { + if (reducer.view().data()) { + ValueInit::init( ReducerConditional::select(f,reducer), + reducer.view().data() ); + } + return; + } const int reduce_size = ValueTraits::value_size( f ); const int shared_size = FunctorTeamShmemSize< FunctorType >::value( f , team_size ); @@ -1113,6 +1313,39 @@ public: //---------------------------------------- }; +template< class FunctorType , class ReturnType , class... Traits > +class ParallelScanWithTotal< FunctorType , Kokkos::RangePolicy< Traits... >, + ReturnType, Kokkos::Experimental::ROCm > +{ +private: + + typedef Kokkos::RangePolicy< Traits... > Policy; + typedef typename Policy::work_tag Tag; + typedef Kokkos::Impl::FunctorValueTraits< FunctorType, Tag> ValueTraits; + +public: + + //---------------------------------------- + + inline + ParallelScanWithTotal( const FunctorType & f + , const Policy & policy + , ReturnType & arg_returnvalue) + { + const auto len = policy.end()-policy.begin(); + + + if(len==0) return; + + scan_enqueue(len, f, arg_returnvalue, [](hc::tiled_index<1> idx, int, int) { return idx.global[0]; }); + } + + KOKKOS_INLINE_FUNCTION + void execute() const {} + + //---------------------------------------- +}; + template< class FunctorType , class... Traits> class ParallelScan< FunctorType , Kokkos::TeamPolicy< Traits... >, Kokkos::Experimental::ROCm > { @@ -1350,22 +1583,17 @@ void parallel_for(const Impl::TeamThreadRangeBoundariesStruct KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, +typename std::enable_if< ! Kokkos::is_reducer< ValueType >::value >::type +parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { - result = ValueType(); + Kokkos::Sum reducer(result); + reducer.init( reducer.reference() ); for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i,tmp); - result+=tmp; + lambda(i,reducer.reference()); } - result = loop_boundaries.thread.team_reduce(result, - Impl::JoinAdd()); -// Impl::rocm_intra_workgroup_reduction( loop_boundaries.thread, result, -// Impl::JoinAdd()); -// Impl::rocm_inter_workgroup_reduction( loop_boundaries.thread, result, -// Impl::JoinAdd()); + loop_boundaries.thread.team_reduce(reducer); } /** \brief Inter-thread thread range parallel_reduce. Executes lambda(iType i, ValueType & val) for each i=0..N-1. @@ -1374,7 +1602,8 @@ void parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, +typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ReducerType const & reducer) { reducer.init( reducer.reference() ); @@ -1439,7 +1668,8 @@ void parallel_for(const Impl::ThreadVectorRangeBoundariesStruct KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& +typename std::enable_if< !Kokkos::is_reducer< ValueType >::value >::type +parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { result = ValueType(); @@ -1477,7 +1707,8 @@ void parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& +typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ReducerType const & reducer) { reducer.init( reducer.reference() ); @@ -1523,86 +1754,46 @@ void parallel_scan(const Impl::ThreadVectorRangeBoundariesStruct ValueTraits ; typedef typename ValueTraits::value_type value_type ; - value_type scan_val = value_type(); -#if (__ROCM_ARCH__ >= 800) -// adopt the cuda vector shuffle method - const int VectorLength = loop_boundaries.increment; - int lid = loop_boundaries.thread.lindex(); - int vector_rank = lid%VectorLength; + value_type val = value_type(); + const int vector_length = loop_boundaries.thread.vector_length(); + const int vector_rank = loop_boundaries.thread.vector_rank(); - iType loop_bound = ((loop_boundaries.end+VectorLength-1)/VectorLength) * VectorLength; - value_type val ; - for(int _i = vector_rank; _i < loop_bound; _i += VectorLength) { - val = value_type(); - if(_i 1) { - const value_type tmp2 = shfl_up(tmp, 1,VectorLength); - if(vector_rank > 0) - tmp+=tmp2; - } - if(vector_rank == 1) - result_i = tmp; - if (VectorLength > 3) { - const value_type tmp2 = shfl_up(tmp, 2,VectorLength); - if(vector_rank > 1) - tmp+=tmp2; - } - if ((vector_rank >= 2) && - (vector_rank < 4)) - result_i = tmp; - if (VectorLength > 7) { - const value_type tmp2 = shfl_up(tmp, 4,VectorLength); - if(vector_rank > 3) - tmp+=tmp2; - } - if ((vector_rank >= 4) && - (vector_rank < 8)) - result_i = tmp; - if (VectorLength > 15) { - const value_type tmp2 = shfl_up(tmp, 8,VectorLength); - if(vector_rank > 7) - tmp+=tmp2; - } - if ((vector_rank >= 8) && - (vector_rank < 16)) - result_i = tmp; - if (VectorLength > 31) { - const value_type tmp2 = shfl_up(tmp, 16,VectorLength); - if(vector_rank > 15) - tmp+=tmp2; - } - if ((vector_rank >=16) && - (vector_rank < 32)) - result_i = tmp; - if (VectorLength > 63) { - const value_type tmp2 = shfl_up(tmp, 32,VectorLength); - if(vector_rank > 31) - tmp+=tmp2; + value_type val = 0 ; + + // First acquire per-lane contributions: + if ( i < loop_boundaries.end ) lambda( i , val , false ); + + value_type sval = val ; + + // Bottom up inclusive scan in triangular pattern + // where each thread is the root of a reduction tree + // from the zeroth "lane" to itself. + // [t] += [t-1] if t >= 1 + // [t] += [t-2] if t >= 2 + // [t] += [t-4] if t >= 4 + // ... + + for ( int j = 1 ; j < vector_length ; j <<= 1 ) { + value_type tmp = 0 ; + tmp = shfl_up(sval , j , vector_length ); + if ( j <= vector_rank ) { sval += tmp ; } } - if (vector_rank >= 32) - result_i = tmp; + // Include accumulation and remove value for exclusive scan: + val = accum + sval - val ; - val = scan_val + result_i - val; - scan_val += shfl(tmp,VectorLength-1,VectorLength); - if(_i #include #include - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// namespace Kokkos { @@ -75,7 +74,7 @@ T& reduce_value(T* x, std::false_type) [[hc]] return *x; } -#if KOKKOS_ROCM_HAS_WORKAROUNDS +#ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND struct always_true { template @@ -149,7 +148,7 @@ void reduce_enqueue( // Store the tile result in the global memory. if (local == 0) { -#if KOKKOS_ROCM_HAS_WORKAROUNDS +#ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND // Workaround for assigning from LDS memory: std::copy should work // directly buffer.action_at(0, [&](T* x) @@ -158,7 +157,7 @@ void reduce_enqueue( // new ROCM 15 address space changes aren't implemented in std algorithms yet auto * src = reinterpret_cast(x); auto * dest = reinterpret_cast(result.data()+tile*output_length); - for(int i=0; i + KOKKOS_INLINE_FUNCTION + unsigned long operator () (volatile unsigned long * dest, OP &&op){ + unsigned long read,compare,val; + compare = *dest; + read = compare; + do { + compare = read; + val = op(compare); +#if __KALMAR_ACCELERATOR__ == 1 + hc::atomic_compare_exchange((uint64_t *)dest,&read,val); +#endif + } while (read != compare); + return val; + } +}; + + template + KOKKOS_INLINE_FUNCTION + unsigned long atomic_cas_op (volatile unsigned long * dest, OP &&op) { + ROCm_atomic_CAS cas_op; + return cas_op(dest, std::forward(op)); + } + + KOKKOS_INLINE_FUNCTION + unsigned long atomicInc (volatile unsigned long * dest, const unsigned long& val) { + return atomic_cas_op(dest, [=](unsigned long old){return ((old>=val)?0:(old+1));}); + } + + //---------------------------------------------------------------------------- template< typename T > @@ -375,18 +445,7 @@ bool rocm_inter_block_reduction( ROCmTeamMember& team, #endif } #endif -#if 0 -//---------------------------------------------------------------------------- -// See section B.17 of ROCm C Programming Guide Version 3.2 -// for discussion of -// __launch_bounds__(maxThreadsPerBlock,minBlocksPerMultiprocessor) -// function qualifier which could be used to improve performance. -//---------------------------------------------------------------------------- -// Maximize shared memory and minimize L1 cache: -// rocmFuncSetCacheConfig(MyKernel, rocmFuncCachePreferShared ); -// For 2.0 capability: 48 KB shared and 16 KB L1 -//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- /* * Algorithmic constraints: @@ -406,87 +465,105 @@ void rocm_intra_block_reduce_scan( const FunctorType & functor , typedef typename ValueTraits::pointer_type pointer_type ; const unsigned value_count = ValueTraits::value_count( functor ); - const unsigned BlockSizeMask = team.team_size() - 1 ; + const unsigned BlockSizeMask = blockDim_y - 1 ; // Must have power of two thread count - if ( BlockSizeMask & team.team_size() ) { Kokkos::abort("ROCm::rocm_intra_block_scan requires power-of-two blockDim"); } + if ( BlockSizeMask & blockDim_y ) { Kokkos::abort("ROCm::rocm_intra_block_scan requires power-of-two blockDim"); } #define BLOCK_REDUCE_STEP( R , TD , S ) \ - if ( ! ( R & ((1<<(S+1))-1) ) ) { ValueJoin::join( functor , TD , (TD - (value_count<0; i-= 64) + ValueJoin::join( functor , base_data + (blockDim_y-1)*value_count + threadIdx_y , base_data + i*value_count + threadIdx_y ); + } + __syncthreads(); +#if 0 + const unsigned rtid_inter = ( threadIdx_y ^ BlockSizeMask ) << ROCmTraits::WavefrontIndexShift ; + + if ( rtid_inter < blockDim_y ) { - if ( rtid_inter < team.team_size() ) { const pointer_type tdata_inter = base_data + value_count * ( rtid_inter ^ BlockSizeMask ); +// +// remove these comments +// for rocm, we start with a block size of 64, so the 5 step is already done. +// The remaining steps are only done if block size is > 64, so we leave them +// in place until we tune blocksize for performance, then remove the ones +// that will never be used. +// if ( (1<<6) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,6) } +// if ( (1<<7) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,7) } +// if ( (1<<8) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,8) } +// if ( (1<<9) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,9) } - if ( (1<<5) < BlockSizeMask ) { BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,5) } - if ( (1<<6) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,6) } - if ( (1<<7) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,7) } - if ( (1<<8) < BlockSizeMask ) { __threadfence_block(); BLOCK_REDUCE_STEP(rtid_inter,tdata_inter,8) } if ( DoScan ) { - int n = ( rtid_inter & 32 ) ? 32 : ( - ( rtid_inter & 64 ) ? 64 : ( + int n = ( rtid_inter & 64 ) ? 64 : ( ( rtid_inter & 128 ) ? 128 : ( - ( rtid_inter & 256 ) ? 256 : 0 ))); + ( rtid_inter & 256 ) ? 256 : 0 )); - if ( ! ( rtid_inter + n < team.team_size() ) ) n = 0 ; + if ( ! ( rtid_inter + n < blockDim_y ) ) n = 0 ; __threadfence_block(); BLOCK_SCAN_STEP(tdata_inter,n,8) __threadfence_block(); BLOCK_SCAN_STEP(tdata_inter,n,7) __threadfence_block(); BLOCK_SCAN_STEP(tdata_inter,n,6) - __threadfence_block(); BLOCK_SCAN_STEP(tdata_inter,n,5) +// __threadfence_block(); BLOCK_SCAN_STEP(tdata_inter,n,5) } } +#endif } - team.team_barrier(); // Wait for inter-workgroup reduce-scan to complete + __syncthreads(); // Wait for inter-workgroup reduce-scan to complete if ( DoScan ) { int n = ( rtid_intra & 1 ) ? 1 : ( ( rtid_intra & 2 ) ? 2 : ( ( rtid_intra & 4 ) ? 4 : ( ( rtid_intra & 8 ) ? 8 : ( - ( rtid_intra & 16 ) ? 16 : 0 )))); + ( rtid_intra & 16 ) ? 16 : ( + ( rtid_intra & 32 ) ? 32 : 0 ))))); - if ( ! ( rtid_intra + n < team.team_size() ) ) n = 0 ; - #ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND - BLOCK_SCAN_STEP(tdata_intra,n,4) team.team_barrier();//__threadfence_block(); - BLOCK_SCAN_STEP(tdata_intra,n,3) team.team_barrier();//__threadfence_block(); - BLOCK_SCAN_STEP(tdata_intra,n,2) team.team_barrier();//__threadfence_block(); - BLOCK_SCAN_STEP(tdata_intra,n,1) team.team_barrier();//__threadfence_block(); - BLOCK_SCAN_STEP(tdata_intra,n,0) team.team_barrier(); - #else - BLOCK_SCAN_STEP(tdata_intra,n,4) __threadfence_block(); + if ( ! ( rtid_intra + n < blockDim_y ) ) n = 0 ; + +// BLOCK_SCAN_STEP(tdata_intra,n,5) __threadfence_block(); +// BLOCK_SCAN_STEP(tdata_intra,n,4) __threadfence_block(); BLOCK_SCAN_STEP(tdata_intra,n,3) __threadfence_block(); BLOCK_SCAN_STEP(tdata_intra,n,2) __threadfence_block(); BLOCK_SCAN_STEP(tdata_intra,n,1) __threadfence_block(); BLOCK_SCAN_STEP(tdata_intra,n,0) __threadfence_block(); - #endif } #undef BLOCK_SCAN_STEP #undef BLOCK_REDUCE_STEP +#undef KOKKOS_IMPL_ROCM_SYNCWF } //---------------------------------------------------------------------------- @@ -497,16 +574,18 @@ void rocm_intra_block_reduce_scan( const FunctorType & functor , * * Global reduce result is in the last threads' 'shared_data' location. */ +using ROCM = Kokkos::Experimental::ROCm ; + template< bool DoScan , class FunctorType , class ArgTag > KOKKOS_INLINE_FUNCTION bool rocm_single_inter_block_reduce_scan( const FunctorType & functor , - const ROCm::size_type block_id , - const ROCm::size_type block_count , - ROCm::size_type * const shared_data , - ROCm::size_type * const global_data , - ROCm::size_type * const global_flags ) + const ROCM::size_type block_id , + const ROCM::size_type block_count , + typename FunctorValueTraits::value_type * const shared_data , + typename FunctorValueTraits::value_type * const global_data , + ROCM::size_type * const global_flags ) { - typedef ROCm::size_type size_type ; + typedef ROCM::size_type size_type ; typedef FunctorValueTraits< FunctorType , ArgTag > ValueTraits ; typedef FunctorValueJoin< FunctorType , ArgTag > ValueJoin ; typedef FunctorValueInit< FunctorType , ArgTag > ValueInit ; @@ -517,16 +596,17 @@ bool rocm_single_inter_block_reduce_scan( const FunctorType & functor , typedef typename ValueTraits::value_type value_type ; // '__ffs' = position of the least significant bit set to 1. - // 'team.team_size()' is guaranteed to be a power of two so this + // blockDim_y is guaranteed to be a power of two so this // is the integral shift value that can replace an integral divide. - const unsigned BlockSizeShift = __ffs( team.team_size() ) - 1 ; - const unsigned BlockSizeMask = team.team_size() - 1 ; + // const unsigned long BlockSizeShift = __ffs( blockDim_y ) - 1 ; + const unsigned long BlockSizeShift = __lastbit_u32_u32( blockDim_y ) ; + const unsigned long BlockSizeMask = blockDim_y - 1 ; // Must have power of two thread count - if ( BlockSizeMask & team.team_size() ) { Kokkos::abort("ROCm::rocm_single_inter_block_reduce_scan requires power-of-two blockDim"); } + if ( BlockSizeMask & blockDim_y ) { Kokkos::abort("ROCm::rocm_single_inter_block_reduce_scan requires power-of-two blockDim"); } - const integral_nonzero_constant< size_type , ValueTraits::StaticValueSize / sizeof(size_type) > - word_count( ValueTraits::value_size( functor ) / sizeof(size_type) ); + const integral_nonzero_constant< size_type , ValueTraits::StaticValueSize / sizeof(value_type) > + word_count( ValueTraits::value_size( functor )/ sizeof(value_type) ); // Reduce the accumulation for the entire block. rocm_intra_block_reduce_scan( functor , pointer_type(shared_data) ); @@ -534,54 +614,47 @@ bool rocm_single_inter_block_reduce_scan( const FunctorType & functor , { // Write accumulation total to global scratch space. // Accumulation total is the last thread's data. - size_type * const shared = shared_data + word_count.value * BlockSizeMask ; - size_type * const global = global_data + word_count.value * block_id ; - -#if (__ROCM_ARCH__ < 500) - for ( size_type i = team.team_rank() ; i < word_count.value ; i += team.team_size() ) { global[i] = shared[i] ; } -#else - for ( size_type i = 0 ; i < word_count.value ; i += 1 ) { global[i] = shared[i] ; } -#endif + value_type * const shared = shared_data + + word_count.value * BlockSizeMask ; + value_type * const global = global_data + word_count.value * block_id ; + for ( int i = int(threadIdx_y) ; i < word_count.value ; i += blockDim_y ) { global[i] = shared[i] ; } } // Contributing blocks note that their contribution has been completed via an atomic-increment flag // If this block is not the last block to contribute to this group then the block is done. - team.team_barrier(); + const bool is_last_block = - ! team.team_reduce( team.team_rank() ? 0 : ( 1 + atomicInc( global_flags , block_count - 1 ) < block_count ) ,Impl::JoinAdd()); - + ! __syncthreads_or( threadIdx_y ? 0 : ( 1 + atomicInc( global_flags , block_count - 1 ) < block_count ) ); if ( is_last_block ) { - const size_type b = ( long(block_count) * long(team.team_rank()) ) >> BlockSizeShift ; - const size_type e = ( long(block_count) * long( team.team_rank() + 1 ) ) >> BlockSizeShift ; + const size_type b = ( long(block_count) * long(threadIdx_y )) >> BlockSizeShift ; + const size_type e = ( long(block_count) * long(threadIdx_y + 1 ) ) >> BlockSizeShift ; { - void * const shared_ptr = shared_data + word_count.value * team.team_rank() ; - reference_type shared_value = ValueInit::init( functor , shared_ptr ); + value_type * const shared_ptr = shared_data + word_count.value * threadIdx_y ; + ValueInit::init( functor , shared_ptr ); + for ( size_type i = b ; i < e ; ++i ) { ValueJoin::join( functor , shared_ptr , global_data + word_count.value * i ); } } - rocm_intra_block_reduce_scan( functor , pointer_type(shared_data) ); if ( DoScan ) { + value_type * const shared_value = shared_data + word_count.value * ( threadIdx_y ? threadIdx_y - 1 : blockDim_y ); - size_type * const shared_value = shared_data + word_count.value * ( team.team_rank() ? team.team_rank() - 1 : team.team_size() ); - - if ( ! team.team_rank() ) { ValueInit::init( functor , shared_value ); } + if ( ! threadIdx_y ) { ValueInit::init( functor , shared_value ); } // Join previous inclusive scan value to each member for ( size_type i = b ; i < e ; ++i ) { - size_type * const global_value = global_data + word_count.value * i ; + value_type * const global_value = global_data + word_count.value * i ; ValueJoin::join( functor , shared_value , global_value ); ValueOps ::copy( functor , global_value , shared_value ); } } } - return is_last_block ; } @@ -592,7 +665,6 @@ unsigned rocm_single_inter_block_reduce_scan_shmem( const FunctorType & functor { return ( BlockSize + 2 ) * Impl::FunctorValueTraits< FunctorType , ArgTag >::value_size( functor ); } -#endif } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Scan.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Scan.hpp index 9890598bc9..f24db42cee 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Scan.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Scan.hpp @@ -98,7 +98,7 @@ void scan_enqueue( { auto j = i + d - 1; auto k = i + d2 - 1; -// join(k, j); // no longer needed with ROCm 1.6 + ValueJoin::join(f, &buffer[k], &buffer[j]); } } @@ -116,7 +116,7 @@ void scan_enqueue( auto j = i + d - 1; auto k = i + d2 - 1; auto t = buffer[k]; -// join(k, j); // no longer needed with ROCm 1.6 + ValueJoin::join(f, &buffer[k], &buffer[j]); buffer[j] = t; } @@ -127,17 +127,13 @@ void scan_enqueue( }).wait(); copy(result,result_cpu.data()); -// The std::partial_sum was segfaulting, despite that this is cpu code. -// if(td.num_tiles>1) -// std::partial_sum(result_cpu.data(), result_cpu.data()+(td.num_tiles-1)*sizeof(value_type), result_cpu.data(), make_join_operator(f)); -// use this implementation instead. for(int i=1; i(len).tile(td.tile_size), [&,f,len,td](hc::tiled_index<1> t_idx) [[hc]] + size_t launch_len = (((len - 1) / td.tile_size) + 1) * td.tile_size; + hc::parallel_for_each(hc::extent<1>(launch_len).tile(td.tile_size), [&,f,len,td](hc::tiled_index<1> t_idx) [[hc]] { -// const auto local = t_idx.local[0]; const auto global = t_idx.global[0]; const auto tile = t_idx.tile[0]; @@ -145,13 +141,115 @@ void scan_enqueue( { auto final_state = scratch[global]; -// the join is locking up, at least with 1.6 - if (tile != 0) final_state += result[tile-1]; -// if (tile != 0) ValueJoin::join(f, &final_state, &result[tile-1]); + if (tile != 0) ValueJoin::join(f, &final_state, &result[tile-1]); rocm_invoke(f, transform_index(t_idx, td.tile_size, td.num_tiles), final_state, true); } }).wait(); } +template< class Tag, class ReturnType, class F, class TransformIndex> +void scan_enqueue( + const int len, + const F & f, + ReturnType & return_val, + TransformIndex transform_index) +{ + typedef Kokkos::Impl::FunctorValueTraits< F, Tag> ValueTraits; + typedef Kokkos::Impl::FunctorValueInit< F, Tag> ValueInit; + typedef Kokkos::Impl::FunctorValueJoin< F, Tag> ValueJoin; + typedef Kokkos::Impl::FunctorValueOps< F, Tag> ValueOps; + + typedef typename ValueTraits::value_type value_type; + typedef typename ValueTraits::pointer_type pointer_type; + typedef typename ValueTraits::reference_type reference_type; + + const auto td = get_tile_desc(len); + std::vector result_cpu(td.num_tiles); + hc::array result(td.num_tiles); + hc::array scratch(len); + std::vector total_cpu(1); + hc::array total(1); + + tile_for(td, [&,f,len,td](hc::tiled_index<1> t_idx, tile_buffer buffer) [[hc]] + { + const auto local = t_idx.local[0]; + const auto global = t_idx.global[0]; + const auto tile = t_idx.tile[0]; + + // Join tile buffer elements + const auto join = [&](std::size_t i, std::size_t j) + { + buffer.action_at(i, j, [&](value_type& x, const value_type& y) + { + ValueJoin::join(f, &x, &y); + }); + }; + + // Copy into tile + buffer.action_at(local, [&](value_type& state) + { + ValueInit::init(f, &state); + if (global < len) rocm_invoke(f, transform_index(t_idx, td.tile_size, td.num_tiles), state, false); + }); + t_idx.barrier.wait(); + // Up sweep phase + for(std::size_t d=1;d0;d/=2) + { + auto d2 = 2*d; + auto i = local*d2; + if(i(launch_len).tile(td.tile_size), [&,f,len,td](hc::tiled_index<1> t_idx) [[hc]] + { + const auto global = t_idx.global[0]; + const auto tile = t_idx.tile[0]; + + if (global < len) + { + auto final_state = scratch[global]; + + if (tile != 0) ValueJoin::join(f, &final_state, &result[tile-1]); + rocm_invoke(f, transform_index(t_idx, td.tile_size, td.num_tiles), final_state, true); + if(global==(len-1)) total[0] = final_state; + } + }).wait(); + copy(total,total_cpu.data()); + return_val = total_cpu[0]; +} + } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp index 12f34373ce..2fe0c4192d 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp @@ -362,6 +362,8 @@ SharedAllocationRecord( const Kokkos::Experimental::ROCmSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + header.m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; // Copy to device memory Kokkos::Impl::DeepCopy( RecordBase::m_alloc_ptr , & header , sizeof(SharedAllocationHeader) ); @@ -399,6 +401,8 @@ SharedAllocationRecord( const Kokkos::Experimental::ROCmHostPinnedSpace & arg_sp , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; } //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp index db16db3f91..b4436ae156 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp @@ -278,7 +278,7 @@ struct single_action void action_at(std::size_t i, Action a) [[hc]] { auto& value = static_cast(*this)[i]; -#if KOKKOS_ROCM_HAS_WORKAROUNDS +#ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND T state = value; a(state); value = state; @@ -347,7 +347,7 @@ struct tile_buffer #if defined (ROCM15) a(value); #else -#if KOKKOS_ROCM_HAS_WORKAROUNDS +#ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND if (m > get_max_tile_array_size()) return; T state[get_max_tile_array_size()]; // std::copy(value, value+m, state); @@ -372,7 +372,6 @@ struct tile_buffer #if defined (ROCM15) a(value); #else -//#if KOKKOS_ROCM_HAS_WORKAROUNDS if (m > get_max_tile_array_size()) return; T state[get_max_tile_array_size()]; // std::copy(value, value+m, state); diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp index e63f868c59..e88abdba50 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp @@ -175,6 +175,27 @@ public: #endif } + template + KOKKOS_INLINE_FUNCTION + void team_broadcast(Closure const & f, ValueType& value, const int& thread_id) const + { +#if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) + { } +#else + // Make sure there is enough scratch space: + typedef typename if_c< sizeof(ValueType) < TEAM_REDUCE_SIZE + , ValueType , void >::type type ; + f( value ); + if ( m_team_base ) { + type * const local_value = ((type*) m_team_base[0]->scratch_memory()); + if(team_rank() == thread_id) *local_value = value; + memory_fence(); + team_barrier(); + value = *local_value; + } +#endif + } + template< typename Type > KOKKOS_INLINE_FUNCTION typename std::enable_if< !Kokkos::is_reducer< Type >::value , Type>::type @@ -626,39 +647,77 @@ public: //---------------------------------------- +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > inline static int team_size_max( const FunctorType & ) { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - int pool_size = traits::execution_space::thread_pool_size(1); -#else - int pool_size = traits::execution_space::impl_thread_pool_size(1); -#endif - int max_host_team_size = Impl::HostThreadTeamData::max_team_members; - return pool_size - static int team_size_recommended( const FunctorType & ) - { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - return traits::execution_space::thread_pool_size(2); -#else - return traits::execution_space::impl_thread_pool_size(2); -#endif - } - + inline static + int team_size_recommended( const FunctorType & ) + { + return traits::execution_space::thread_pool_size(2); + } template< class FunctorType > inline static int team_size_recommended( const FunctorType &, const int& ) - { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - return traits::execution_space::thread_pool_size(2); -#else - return traits::execution_space::impl_thread_pool_size(2); + { + return traits::execution_space::thread_pool_size(2); + } #endif + + template + int team_size_max( const FunctorType&, const ParallelForTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = traits::execution_space::thread_pool_size(1); +#else + int pool_size = traits::execution_space::impl_thread_pool_size(1); +#endif + int max_host_team_size = Impl::HostThreadTeamData::max_team_members; + return pool_size + int team_size_max( const FunctorType&, const ParallelReduceTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = traits::execution_space::thread_pool_size(1); +#else + int pool_size = traits::execution_space::impl_thread_pool_size(1); +#endif + int max_host_team_size = Impl::HostThreadTeamData::max_team_members; + return pool_size + int team_size_recommended( const FunctorType&, const ParallelForTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + return traits::execution_space::thread_pool_size(2); +#else + return traits::execution_space::impl_thread_pool_size(2); +#endif + } + template + int team_size_recommended( const FunctorType&, const ParallelReduceTag& ) const { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + return traits::execution_space::thread_pool_size(2); +#else + return traits::execution_space::impl_thread_pool_size(2); +#endif + } + + + inline static + int vector_length_max() + { return 1024; } // Use arbitrary large number, is meant as a vectorizable length + + inline static + int scratch_size_max(int level) + { return (level==0? + 1024*32: // Roughly L1 size + 20*1024*1024); // Limit to keep compatibility with CUDA } //---------------------------------------- diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp similarity index 100% rename from lib/kokkos/core/src/eti/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp rename to lib/kokkos/core/src/eti/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Makefile.eti_Experimental::ROCm b/lib/kokkos/core/src/eti/ROCm/Makefile.eti_Experimental::ROCm deleted file mode 100644 index 054360fd17..0000000000 --- a/lib/kokkos/core/src/eti/ROCm/Makefile.eti_Experimental::ROCm +++ /dev/null @@ -1,288 +0,0 @@ -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp -Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_Experimental::ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/eti/ROCm/Makefile.eti_ROCm b/lib/kokkos/core/src/eti/ROCm/Makefile.eti_ROCm new file mode 100644 index 0000000000..0423c6feb6 --- /dev/null +++ b/lib/kokkos/core/src/eti/ROCm/Makefile.eti_ROCm @@ -0,0 +1,288 @@ +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp +Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/ROCm/Kokkos_ROCm_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp index ad115dd8ff..e2028db8c8 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp @@ -107,7 +107,12 @@ T atomic_compare_exchange( volatile T * const dest , const T & compare , T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -119,7 +124,11 @@ T atomic_compare_exchange( volatile T * const dest , const T & compare , done = 1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; } diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp index 801a8091dd..4e41cb1258 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp @@ -130,7 +130,12 @@ T atomic_exchange( volatile T * const dest , #endif int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -141,7 +146,11 @@ T atomic_exchange( volatile T * const dest , done = 1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; } diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp index 8249e709da..e2e23bb5fd 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp @@ -143,7 +143,12 @@ T atomic_fetch_add( volatile T * const dest , T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -155,7 +160,12 @@ T atomic_fetch_add( volatile T * const dest , done = 1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); + +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; } diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp index 3f58c55396..dd69c967c5 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp @@ -135,7 +135,12 @@ T atomic_fetch_sub( volatile T * const dest , T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -146,7 +151,11 @@ T atomic_fetch_sub( volatile T * const dest , done = 1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; } diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp index 6140d45896..74e9db303d 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp @@ -246,7 +246,12 @@ T atomic_fetch_oper( const Oper& op, volatile T * const dest , // This is a way to (hopefully) avoid dead lock in a warp T return_val; int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -257,7 +262,11 @@ T atomic_fetch_oper( const Oper& op, volatile T * const dest , done=1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; #endif @@ -285,7 +294,12 @@ T atomic_oper_fetch( const Oper& op, volatile T * const dest , T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; - unsigned int active = KOKKOS_IMPL_CUDA_BALLOT(1); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,1); +#else + unsigned int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(1); +#endif unsigned int done_active = 0; while (active!=done_active) { if(!done) { @@ -296,7 +310,11 @@ T atomic_oper_fetch( const Oper& op, volatile T * const dest , done=1; } } - done_active = KOKKOS_IMPL_CUDA_BALLOT(done); +#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask,done); +#else + done_active = KOKKOS_IMPL_CUDA_BALLOT_MASK(done); +#endif } return return_val; #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp index eeec2d1f4b..b18134f40c 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp @@ -45,13 +45,17 @@ #ifdef _WIN32 +#ifndef NOMINMAX #define NOMINMAX +#endif #include -#include +#include namespace Kokkos { namespace Impl { +#ifdef _MSC_VER _declspec(align(16)) +#endif struct cas128_t { LONGLONG lower; @@ -60,7 +64,11 @@ namespace Kokkos { bool operator != (const cas128_t& a) const { return (lower != a.lower) || upper != a.upper; } - }; + } +#ifdef __GNUC__ + __attribute__ ((aligned (16))) +#endif + ; } template < typename T > diff --git a/lib/kokkos/core/src/impl/Kokkos_Core.cpp b/lib/kokkos/core/src/impl/Kokkos_Core.cpp index 8184dad3ec..628e070a0d 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Core.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Core.cpp @@ -780,8 +780,20 @@ void print_configuration( std::ostream & out , const bool detail ) #else msg << "no" << std::endl; #endif - msg << " KOKKOS_ENABLE_CXX1Z: "; -#ifdef KOKKOS_ENABLE_CXX1Z + msg << " KOKKOS_ENABLE_CXX14: "; +#ifdef KOKKOS_ENABLE_CXX14 + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; +#endif + msg << " KOKKOS_ENABLE_CXX17: "; +#ifdef KOKKOS_ENABLE_CXX17 + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; +#endif + msg << " KOKKOS_ENABLE_CXX20: "; +#ifdef KOKKOS_ENABLE_CXX20 msg << "yes" << std::endl; #else msg << "no" << std::endl; diff --git a/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp index 699902e320..680e937db4 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp @@ -235,6 +235,8 @@ SharedAllocationRecord( const Kokkos::Experimental::HBWSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; } //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp index da9ce6b9fb..d8cb7593bf 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp @@ -356,6 +356,8 @@ SharedAllocationRecord( const Kokkos::HostSpace & arg_space , arg_label.c_str() , SharedAllocationHeader::maximum_label_length ); + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char) 0; } //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp index 558eef9e4a..fff48e87f6 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp @@ -144,6 +144,30 @@ public: return m_team_rank == 0; } + + inline + bool team_rendezvous(const int source_team_rank) const noexcept + { + int * ptr = (int *)(m_team_scratch + m_team_rendezvous); + HostBarrier::split_arrive( ptr + , m_team_size + , m_team_rendezvous_step + ); + if (m_team_rank != source_team_rank) { + HostBarrier::wait( ptr + , m_team_size + , m_team_rendezvous_step + ); + } + else { + HostBarrier::split_master_wait( ptr + , m_team_size + , m_team_rendezvous_step + ); + } + + return (m_team_rank == source_team_rank); + } inline void team_rendezvous_release() const noexcept @@ -540,15 +564,16 @@ public: { if ( 1 < m_data.m_team_size ) { T volatile * const shared_value = (T*) m_data.team_reduce(); - + // Don't overwrite shared memory until all threads arrive - if ( m_data.team_rendezvous() ) { + if ( m_data.team_rendezvous(source_team_rank) ) { + // All threads have entered 'team_rendezvous' // only this thread returned from 'team_rendezvous' // with a return value of 'true' - *shared_value = value ; + *shared_value = value; m_data.team_rendezvous_release(); // This thread released all other threads from 'team_rendezvous' @@ -574,7 +599,7 @@ public: // Don't overwrite shared memory until all threads arrive - if ( m_data.team_rendezvous() ) { + if ( m_data.team_rendezvous(source_team_rank) ) { // All threads have entered 'team_rendezvous' // only this thread returned from 'team_rendezvous' diff --git a/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp b/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp index bad158c291..c3198c0f13 100644 --- a/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp @@ -142,18 +142,13 @@ #endif #endif -#ifdef KOKKOS_HAVE_CXX1Z + +#if defined(KOKKOS_HAVE_CXX1Z) || defined(KOKKOS_ENABLE_CXX17) #ifndef KOKKOS_ENABLE_CXX1Z #define KOKKOS_ENABLE_CXX1Z KOKKOS_HAVE_CXX1Z #endif #endif -#ifdef KOKKOS_HAVE_DEBUG -#ifndef KOKKOS_DEBUG -#define KOKKOS_DEBUG KOKKOS_HAVE_DEBUG -#endif -#endif - #ifdef KOKKOS_HAVE_DEFAULT_DEVICE_TYPE_CUDA #ifndef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA KOKKOS_HAVE_DEFAULT_DEVICE_TYPE_CUDA @@ -482,6 +477,12 @@ #define KOKKOS_HAVE_DEBUG 1 #endif +#ifdef KOKKOS_HAVE_DEBUG +#ifndef KOKKOS_DEBUG +#define KOKKOS_DEBUG KOKKOS_HAVE_DEBUG +#endif +#endif + #if (!defined(KOKKOS_HAVE_HWLOC)) && defined(KOKKOS_ENABLE_HWLOC) #define KOKKOS_HAVE_HWLOC 1 #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp index 7b85909ed5..d84a854622 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp @@ -60,10 +60,10 @@ template class TaskQueue< Kokkos::Serial > ; void TaskQueueSpecialization< Kokkos::Serial >::execute ( TaskQueue< Kokkos::Serial > * const queue ) { - using execution_space = Kokkos::Serial ; - using queue_type = TaskQueue< execution_space > ; + using exec_space = Kokkos::Serial ; + using tqs_queue_type = TaskQueue< exec_space > ; using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; + using Member = Impl::HostThreadTeamMember< exec_space > ; task_root_type * const end = (task_root_type *) task_root_type::EndTag ; @@ -83,9 +83,9 @@ void TaskQueueSpecialization< Kokkos::Serial >::execute task_root_type * task = end ; - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); } } @@ -120,10 +120,10 @@ void TaskQueueSpecialization< Kokkos::Serial > :: iff_single_thread_recursive_execute( TaskQueue< Kokkos::Serial > * const queue ) { - using execution_space = Kokkos::Serial ; - using queue_type = TaskQueue< execution_space > ; + using exec_space = Kokkos::Serial ; + using tqs_queue_type = TaskQueue< exec_space > ; using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; + using Member = Impl::HostThreadTeamMember< exec_space > ; task_root_type * const end = (task_root_type *) task_root_type::EndTag ; @@ -139,9 +139,9 @@ void TaskQueueSpecialization< Kokkos::Serial > :: task = end ; - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); } } diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp index 3c306ec94b..d4e3a03d38 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp @@ -123,8 +123,8 @@ private: typedef typename Traits::value_type::pointer handle_type ; - handle_type m_handle ; - offset_type m_offset ; + handle_type m_impl_handle ; + offset_type m_impl_offset ; size_t m_stride ; typedef typename Traits::value_type::value_type scalar_type ; @@ -140,8 +140,8 @@ private: KOKKOS_INLINE_FUNCTION ViewMapping( const handle_type & arg_handle , const offset_type & arg_offset ) - : m_handle( arg_handle ) - , m_offset( arg_offset ) + : m_impl_handle( arg_handle ) + , m_impl_offset( arg_offset ) , m_stride( is_contiguous_reference ? 0 : arg_offset.span() ) {} @@ -154,44 +154,44 @@ public: template< typename iType > KOKKOS_INLINE_FUNCTION constexpr size_t extent( const iType & r ) const - { return m_offset.m_dim.extent(r); } + { return m_impl_offset.m_dim.extent(r); } KOKKOS_INLINE_FUNCTION constexpr typename Traits::array_layout layout() const - { return m_offset.layout(); } + { return m_impl_offset.layout(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_0() const { return m_offset.dimension_0(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_1() const { return m_offset.dimension_1(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_2() const { return m_offset.dimension_2(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_3() const { return m_offset.dimension_3(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_4() const { return m_offset.dimension_4(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_5() const { return m_offset.dimension_5(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_6() const { return m_offset.dimension_6(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_7() const { return m_offset.dimension_7(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_0() const { return m_impl_offset.dimension_0(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_1() const { return m_impl_offset.dimension_1(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_2() const { return m_impl_offset.dimension_2(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_3() const { return m_impl_offset.dimension_3(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_4() const { return m_impl_offset.dimension_4(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_5() const { return m_impl_offset.dimension_5(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_6() const { return m_impl_offset.dimension_6(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_7() const { return m_impl_offset.dimension_7(); } // Is a regular layout with uniform striding for each index. using is_regular = typename offset_type::is_regular ; - KOKKOS_INLINE_FUNCTION constexpr size_t stride_0() const { return m_offset.stride_0(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_1() const { return m_offset.stride_1(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_2() const { return m_offset.stride_2(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_3() const { return m_offset.stride_3(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_4() const { return m_offset.stride_4(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_5() const { return m_offset.stride_5(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_6() const { return m_offset.stride_6(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_7() const { return m_offset.stride_7(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_0() const { return m_impl_offset.stride_0(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_1() const { return m_impl_offset.stride_1(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_2() const { return m_impl_offset.stride_2(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_3() const { return m_impl_offset.stride_3(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_4() const { return m_impl_offset.stride_4(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_5() const { return m_impl_offset.stride_5(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_6() const { return m_impl_offset.stride_6(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_7() const { return m_impl_offset.stride_7(); } //---------------------------------------- // Range span /** \brief Span of the mapped range */ KOKKOS_INLINE_FUNCTION constexpr size_t span() const - { return m_offset.span() * Array_N ; } + { return m_impl_offset.span() * Array_N ; } /** \brief Is the mapped range span contiguous */ KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const - { return m_offset.span_is_contiguous(); } + { return m_impl_offset.span_is_contiguous(); } typedef typename std::conditional< is_contiguous_reference , contiguous_reference , strided_reference >::type reference_type ; @@ -199,63 +199,63 @@ public: /** \brief If data references are lvalue_reference than can query pointer to memory */ KOKKOS_INLINE_FUNCTION constexpr pointer_type data() const - { return m_handle ; } + { return m_impl_handle ; } //---------------------------------------- // The View class performs all rank and bounds checking before // calling these element reference methods. KOKKOS_FORCEINLINE_FUNCTION - reference_type reference() const { return reference_type( m_handle + 0 , Array_N , 0 ); } + reference_type reference() const { return reference_type( m_impl_handle + 0 , Array_N , 0 ); } template< typename I0 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 ) const - { return reference_type( m_handle + m_offset(i0) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 ) const - { return reference_type( m_handle + m_offset(i0,i1) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 , typename I3 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2,i3) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2,i3) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2,i3,i4) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2,i3,i4) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2,i3,i4,i5) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2,i3,i4,i5) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 , typename I6 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 , const I6 & i6 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2,i3,i4,i5,i6) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2,i3,i4,i5,i6) * Array_S , Array_N , m_stride ); } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 , typename I6 , typename I7 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 ) const - { return reference_type( m_handle + m_offset(i0,i1,i2,i3,i4,i5,i6,i7) * Array_S , Array_N , m_stride ); } + { return reference_type( m_impl_handle + m_impl_offset(i0,i1,i2,i3,i4,i5,i6,i7) * Array_S , Array_N , m_stride ); } //---------------------------------------- @@ -269,31 +269,31 @@ public: /** \brief Span, in bytes, of the referenced memory */ KOKKOS_INLINE_FUNCTION constexpr size_t memory_span() const { - return ( m_offset.span() * Array_N * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); + return ( m_impl_offset.span() * Array_N * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); } //---------------------------------------- KOKKOS_INLINE_FUNCTION ~ViewMapping() {} - KOKKOS_INLINE_FUNCTION ViewMapping() : m_handle(), m_offset(), m_stride(0) {} + KOKKOS_INLINE_FUNCTION ViewMapping() : m_impl_handle(), m_impl_offset(), m_stride(0) {} KOKKOS_INLINE_FUNCTION ViewMapping( const ViewMapping & rhs ) - : m_handle( rhs.m_handle ), m_offset( rhs.m_offset ), m_stride( rhs.m_stride ) {} + : m_impl_handle( rhs.m_impl_handle ), m_impl_offset( rhs.m_impl_offset ), m_stride( rhs.m_stride ) {} KOKKOS_INLINE_FUNCTION ViewMapping & operator = ( const ViewMapping & rhs ) - { m_handle = rhs.m_handle ; m_offset = rhs.m_offset ; m_stride = rhs.m_stride ; ; return *this ; } + { m_impl_handle = rhs.m_impl_handle ; m_impl_offset = rhs.m_impl_offset ; m_stride = rhs.m_stride ; ; return *this ; } KOKKOS_INLINE_FUNCTION ViewMapping( ViewMapping && rhs ) - : m_handle( rhs.m_handle ), m_offset( rhs.m_offset ), m_stride( rhs.m_stride ) {} + : m_impl_handle( rhs.m_impl_handle ), m_impl_offset( rhs.m_impl_offset ), m_stride( rhs.m_stride ) {} KOKKOS_INLINE_FUNCTION ViewMapping & operator = ( ViewMapping && rhs ) - { m_handle = rhs.m_handle ; m_offset = rhs.m_offset ; m_stride = rhs.m_stride ; return *this ; } + { m_impl_handle = rhs.m_impl_handle ; m_impl_offset = rhs.m_impl_offset ; m_stride = rhs.m_stride ; return *this ; } //---------------------------------------- template< class ... Args > KOKKOS_INLINE_FUNCTION ViewMapping( pointer_type ptr , Args ... args ) - : m_handle( ptr ) - , m_offset( std::integral_constant< unsigned , 0 >() , args... ) - , m_stride( m_offset.span() ) + : m_impl_handle( ptr ) + , m_impl_offset( std::integral_constant< unsigned , 0 >() , args... ) + , m_stride( m_impl_offset.span() ) {} //---------------------------------------- @@ -315,10 +315,10 @@ public: typedef std::integral_constant< unsigned , alloc_prop::allow_padding ? sizeof(scalar_type) : 0 > padding ; - m_offset = offset_type( padding(), arg_layout ); + m_impl_offset = offset_type( padding(), arg_layout ); const size_t alloc_size = - ( m_offset.span() * Array_N * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); + ( m_impl_offset.span() * Array_N * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); // Allocate memory from the memory space and create tracking record. record_type * const record = @@ -327,14 +327,14 @@ public: , alloc_size ); if ( alloc_size ) { - m_handle = + m_impl_handle = handle_type( reinterpret_cast< pointer_type >( record->data() ) ); if ( alloc_prop::initialize ) { // The functor constructs and destroys record->m_destroy = functor_type( ((Kokkos::Impl::ViewCtorProp const & )arg_prop).value - , (pointer_type) m_handle - , m_offset.span() * Array_N + , (pointer_type) m_impl_handle + , m_impl_offset.span() * Array_N ); record->m_destroy.construct_shared_allocation(); @@ -397,8 +397,8 @@ public: typedef typename DstType::offset_type dst_offset_type ; - dst.m_offset = dst_offset_type( src.m_offset ); - dst.m_handle = src.m_handle ; + dst.m_impl_offset = dst_offset_type( src.m_impl_offset ); + dst.m_impl_handle = src.m_impl_handle ; dst.m_stride = src.m_stride ; } }; @@ -448,7 +448,7 @@ public: // Array dimension becomes the last dimension. // Arguments beyond the destination rank are ignored. if ( src.span_is_contiguous() ) { // not padded - dst.m_offset = dst_offset_type( std::integral_constant() , + dst.m_impl_offset = dst_offset_type( std::integral_constant() , typename DstTraits::array_layout ( ( 0 < SrcType::Rank ? src.dimension_0() : SrcTraits::value_type::size() ) , ( 1 < SrcType::Rank ? src.dimension_1() : SrcTraits::value_type::size() ) @@ -463,7 +463,7 @@ public: else { // is padded typedef std::integral_constant padded ; - dst.m_offset = dst_offset_type( padded() , + dst.m_impl_offset = dst_offset_type( padded() , typename DstTraits::array_layout ( ( 0 < SrcType::Rank ? src.dimension_0() : SrcTraits::value_type::size() ) , ( 1 < SrcType::Rank ? src.dimension_1() : SrcTraits::value_type::size() ) @@ -476,7 +476,7 @@ public: ) ); } - dst.m_handle = src.m_handle ; + dst.m_impl_handle = src.m_impl_handle ; } }; @@ -579,11 +579,11 @@ public: typedef typename DstType::handle_type dst_handle_type ; const SubviewExtents< SrcTraits::rank , rank > - extents( src.m_offset.m_dim , args... ); + extents( src.m_impl_offset.m_dim , args... ); - dst.m_offset = dst_offset_type( src.m_offset , extents ); - dst.m_handle = dst_handle_type( src.m_handle + - src.m_offset( extents.domain_offset(0) + dst.m_impl_offset = dst_offset_type( src.m_impl_offset , extents ); + dst.m_impl_handle = dst_handle_type( src.m_impl_handle + + src.m_impl_offset( extents.domain_offset(0) , extents.domain_offset(1) , extents.domain_offset(2) , extents.domain_offset(3) diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp new file mode 100644 index 0000000000..a64101110f --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp @@ -0,0 +1,945 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_EXPERIMENTAL_VIEWLAYOUTTILE_HPP +#define KOKKOS_EXPERIMENTAL_VIEWLAYOUTTILE_HPP + +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// View offset and mapping for tiled view's + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 > +struct is_array_layout < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; + + +template< class L > +struct is_array_layout_tiled : public std::false_type {}; + +template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 , bool IsPowerTwo > +struct is_array_layout_tiled < Kokkos::Experimental::LayoutTiled > : public std::true_type {}; // Last template parameter "true" meaning this currently only supports powers-of-two + + +namespace Impl { + +template< class Dimension , class Layout > +struct ViewOffset< Dimension , Layout , + typename std::enable_if<( + ( Dimension::rank <= 8 ) + && + ( Dimension::rank >= 2 ) + && + is_array_layout< Layout >::value + && + is_array_layout_tiled< Layout >::value + )>::type > +{ +public: + +// enum { outer_pattern = Layout::outer_pattern }; +// enum { inner_pattern = Layout::inner_pattern }; + static constexpr Kokkos::Iterate outer_pattern = Layout::outer_pattern; + static constexpr Kokkos::Iterate inner_pattern = Layout::inner_pattern; + + enum { VORank = Dimension::rank }; + + enum { SHIFT_0 = Kokkos::Impl::integral_power_of_two(Layout::N0) }; + enum { SHIFT_1 = Kokkos::Impl::integral_power_of_two(Layout::N1) }; + enum { SHIFT_2 = Kokkos::Impl::integral_power_of_two(Layout::N2) }; + enum { SHIFT_3 = Kokkos::Impl::integral_power_of_two(Layout::N3) }; + enum { SHIFT_4 = Kokkos::Impl::integral_power_of_two(Layout::N4) }; + enum { SHIFT_5 = Kokkos::Impl::integral_power_of_two(Layout::N5) }; + enum { SHIFT_6 = Kokkos::Impl::integral_power_of_two(Layout::N6) }; + enum { SHIFT_7 = Kokkos::Impl::integral_power_of_two(Layout::N7) }; + enum { MASK_0 = Layout::N0 - 1 }; + enum { MASK_1 = Layout::N1 - 1 }; + enum { MASK_2 = Layout::N2 - 1 }; + enum { MASK_3 = Layout::N3 - 1 }; + enum { MASK_4 = Layout::N4 - 1 }; + enum { MASK_5 = Layout::N5 - 1 }; + enum { MASK_6 = Layout::N6 - 1 }; + enum { MASK_7 = Layout::N7 - 1 }; + + enum { SHIFT_2T = SHIFT_0 + SHIFT_1 }; + enum { SHIFT_3T = SHIFT_0 + SHIFT_1 + SHIFT_2 }; + enum { SHIFT_4T = SHIFT_0 + SHIFT_1 + SHIFT_2 + SHIFT_3 }; + enum { SHIFT_5T = SHIFT_0 + SHIFT_1 + SHIFT_2 + SHIFT_3 + SHIFT_4 }; + enum { SHIFT_6T = SHIFT_0 + SHIFT_1 + SHIFT_2 + SHIFT_3 + SHIFT_4 + SHIFT_5 }; + enum { SHIFT_7T = SHIFT_0 + SHIFT_1 + SHIFT_2 + SHIFT_3 + SHIFT_4 + SHIFT_5 + SHIFT_6 }; + enum { SHIFT_8T = SHIFT_0 + SHIFT_1 + SHIFT_2 + SHIFT_3 + SHIFT_4 + SHIFT_5 + SHIFT_6 + SHIFT_7 }; + + // Is an irregular layout that does not have uniform striding for each index. + using is_mapping_plugin = std::true_type ; + using is_regular = std::false_type ; + + typedef size_t size_type ; + typedef Dimension dimension_type ; + typedef Layout array_layout ; + + dimension_type m_dim ; + size_type m_tile_N0 ; // Num tiles dim 0 + size_type m_tile_N1 ; + size_type m_tile_N2 ; + size_type m_tile_N3 ; + size_type m_tile_N4 ; + size_type m_tile_N5 ; + size_type m_tile_N6 ; + size_type m_tile_N7 ; + + //---------------------------------------- + +#define DEBUG_OUTPUT_CHECK 0 + + // Rank 2 + template< typename I0 , typename I1 > + KOKKOS_INLINE_FUNCTION + size_type operator()( I0 const & i0 , I1 const & i1 ) const { + auto tile_offset = (outer_pattern == (Kokkos::Iterate::Left)) + ? ( ( (i0>>SHIFT_0) + m_tile_N0*((i1>>SHIFT_1)) ) << SHIFT_2T) + : ( ( (m_tile_N1*(i0>>SHIFT_0) + (i1>>SHIFT_1)) ) << SHIFT_2T) ; + // ( num_tiles[1] * ti0 + ti1 ) * FTD + + auto local_offset = (inner_pattern == (Kokkos::Iterate::Left)) + ? ( (i0 & MASK_0) + ((i1 & MASK_1)< + KOKKOS_INLINE_FUNCTION + ViewOffset( const ViewOffset< DimRHS , Kokkos::LayoutStride , void > & rhs ) + : m_dim( rhs.m_dim.N0 , rhs.m_dim.N1 , rhs.m_dim.N2 , rhs.m_dim.N3 + , rhs.m_dim.N4 , rhs.m_dim.N5 , rhs.m_dim.N6 , rhs.m_dim.N7 ) + , m_stride( rhs.stride_1() ) + { + if ( rhs.m_stride.S0 != 1 ) { + Kokkos::abort("Kokkos::Impl::ViewOffset assignment of LayoutLeft from LayoutStride requires stride == 1" ); + } + } + //---------------------------------------- // Subview construction // This subview must be 2 == rank and 2 == rank_dynamic @@ -1518,16 +1526,7 @@ struct ViewOffset< Dimension , Kokkos::LayoutRight ViewOffset( const ViewOffset< DimRHS , Kokkos::LayoutStride , void > & rhs ) : m_dim( rhs.m_dim.N0, 0, 0, 0, 0, 0, 0, 0 ) { - static_assert( - ( DimRHS::rank == 0 && - dimension_type::rank == 0 ) || - ( DimRHS::rank == 1 && - dimension_type::rank == 1 && - dimension_type::rank_dynamic == 1 ) - , "ViewOffset LayoutRight and LayoutString are only compatible when rank <= 1" ); - if ( rhs.m_stride.S0 != 1 ) { - Kokkos::abort("Kokkos::Impl::ViewOffset assignment of LayoutLeft/Right from LayoutStride requires stride == 1" ); - } + } //---------------------------------------- @@ -1771,6 +1770,23 @@ public: // Also requires equal static dimensions ... } + template< class DimRHS > + KOKKOS_INLINE_FUNCTION + ViewOffset( const ViewOffset< DimRHS , Kokkos::LayoutStride , void > & rhs ) + : m_dim( rhs.m_dim.N0 , rhs.m_dim.N1 , rhs.m_dim.N2 , rhs.m_dim.N3 + , rhs.m_dim.N4 , rhs.m_dim.N5 , rhs.m_dim.N6 , rhs.m_dim.N7 ) + , m_stride( rhs.stride_0() ) + { + if ( ((dimension_type::rank == 2)?rhs.m_stride.S1: + ((dimension_type::rank == 3)?rhs.m_stride.S2: + ((dimension_type::rank == 4)?rhs.m_stride.S3: + ((dimension_type::rank == 5)?rhs.m_stride.S4: + ((dimension_type::rank == 6)?rhs.m_stride.S5: + ((dimension_type::rank == 7)?rhs.m_stride.S6:rhs.m_stride.S7)))))) != 1 ){ + Kokkos::abort("Kokkos::Impl::ViewOffset assignment of LayoutRight from LayoutStride requires right-most stride == 1" ); + } + } + //---------------------------------------- // Subview construction // Last dimension must be non-zero @@ -2498,7 +2514,7 @@ struct ViewValueFunctor< ExecSpace , ValueType , false /* is_scalar */ > #if defined(KOKKOS_ENABLE_PROFILING) uint64_t kpID = 0; if(Kokkos::Profiling::profileLibraryLoaded()) { - Kokkos::Profiling::beginParallelFor("Kokkos::View::initialization", 0, &kpID); + Kokkos::Profiling::beginParallelFor((destroy ? "Kokkos::View::destruction" : "Kokkos::View::initialization"), 0, &kpID); } #endif const Kokkos::Impl::ParallelFor< ViewValueFunctor , PolicyType > @@ -2588,11 +2604,8 @@ class ViewMapping< Traits , , void >::is_mapping_plugin::value )>::type > { -private: - - template< class , class ... > friend class ViewMapping ; - template< class , class ... > friend class Kokkos::View ; +public: typedef ViewOffset< typename Traits::dimension , typename Traits::array_layout , void @@ -2600,13 +2613,17 @@ private: typedef typename ViewDataHandle< Traits >::handle_type handle_type ; - handle_type m_handle ; - offset_type m_offset ; + handle_type m_impl_handle ; + offset_type m_impl_offset ; + +private: + + template < class , class ...> friend class ViewMapping; KOKKOS_INLINE_FUNCTION ViewMapping( const handle_type & arg_handle , const offset_type & arg_offset ) - : m_handle( arg_handle ) - , m_offset( arg_offset ) + : m_impl_handle( arg_handle ) + , m_impl_offset( arg_offset ) {} public: @@ -2621,44 +2638,44 @@ public: template< typename iType > KOKKOS_INLINE_FUNCTION constexpr size_t extent( const iType & r ) const - { return m_offset.m_dim.extent(r); } + { return m_impl_offset.m_dim.extent(r); } KOKKOS_INLINE_FUNCTION constexpr typename Traits::array_layout layout() const - { return m_offset.layout(); } + { return m_impl_offset.layout(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_0() const { return m_offset.dimension_0(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_1() const { return m_offset.dimension_1(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_2() const { return m_offset.dimension_2(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_3() const { return m_offset.dimension_3(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_4() const { return m_offset.dimension_4(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_5() const { return m_offset.dimension_5(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_6() const { return m_offset.dimension_6(); } - KOKKOS_INLINE_FUNCTION constexpr size_t dimension_7() const { return m_offset.dimension_7(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_0() const { return m_impl_offset.dimension_0(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_1() const { return m_impl_offset.dimension_1(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_2() const { return m_impl_offset.dimension_2(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_3() const { return m_impl_offset.dimension_3(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_4() const { return m_impl_offset.dimension_4(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_5() const { return m_impl_offset.dimension_5(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_6() const { return m_impl_offset.dimension_6(); } + KOKKOS_INLINE_FUNCTION constexpr size_t dimension_7() const { return m_impl_offset.dimension_7(); } // Is a regular layout with uniform striding for each index. using is_regular = typename offset_type::is_regular ; - KOKKOS_INLINE_FUNCTION constexpr size_t stride_0() const { return m_offset.stride_0(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_1() const { return m_offset.stride_1(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_2() const { return m_offset.stride_2(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_3() const { return m_offset.stride_3(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_4() const { return m_offset.stride_4(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_5() const { return m_offset.stride_5(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_6() const { return m_offset.stride_6(); } - KOKKOS_INLINE_FUNCTION constexpr size_t stride_7() const { return m_offset.stride_7(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_0() const { return m_impl_offset.stride_0(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_1() const { return m_impl_offset.stride_1(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_2() const { return m_impl_offset.stride_2(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_3() const { return m_impl_offset.stride_3(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_4() const { return m_impl_offset.stride_4(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_5() const { return m_impl_offset.stride_5(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_6() const { return m_impl_offset.stride_6(); } + KOKKOS_INLINE_FUNCTION constexpr size_t stride_7() const { return m_impl_offset.stride_7(); } template< typename iType > - KOKKOS_INLINE_FUNCTION void stride( iType * const s ) const { m_offset.stride(s); } + KOKKOS_INLINE_FUNCTION void stride( iType * const s ) const { m_impl_offset.stride(s); } //---------------------------------------- // Range span /** \brief Span of the mapped range */ - KOKKOS_INLINE_FUNCTION constexpr size_t span() const { return m_offset.span(); } + KOKKOS_INLINE_FUNCTION constexpr size_t span() const { return m_impl_offset.span(); } /** \brief Is the mapped range span contiguous */ - KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const { return m_offset.span_is_contiguous(); } + KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const { return m_impl_offset.span_is_contiguous(); } typedef typename ViewDataHandle< Traits >::return_type reference_type ; typedef typename Traits::value_type * pointer_type ; @@ -2666,7 +2683,7 @@ public: /** \brief Query raw pointer to memory */ KOKKOS_INLINE_FUNCTION constexpr pointer_type data() const { - return m_handle; + return m_impl_handle; } //---------------------------------------- @@ -2674,7 +2691,7 @@ public: // calling these element reference methods. KOKKOS_FORCEINLINE_FUNCTION - reference_type reference() const { return m_handle[0]; } + reference_type reference() const { return m_impl_handle[0]; } template< typename I0 > KOKKOS_FORCEINLINE_FUNCTION @@ -2682,7 +2699,7 @@ public: std::enable_if< std::is_integral::value && ! std::is_same< typename Traits::array_layout , Kokkos::LayoutStride >::value , reference_type >::type - reference( const I0 & i0 ) const { return m_handle[i0]; } + reference( const I0 & i0 ) const { return m_impl_handle[i0]; } template< typename I0 > KOKKOS_FORCEINLINE_FUNCTION @@ -2690,50 +2707,50 @@ public: std::enable_if< std::is_integral::value && std::is_same< typename Traits::array_layout , Kokkos::LayoutStride >::value , reference_type >::type - reference( const I0 & i0 ) const { return m_handle[ m_offset(i0) ]; } + reference( const I0 & i0 ) const { return m_impl_handle[ m_impl_offset(i0) ]; } template< typename I0 , typename I1 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 ) const - { return m_handle[ m_offset(i0,i1) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1) ]; } template< typename I0 , typename I1 , typename I2 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 ) const - { return m_handle[ m_offset(i0,i1,i2) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 ) const - { return m_handle[ m_offset(i0,i1,i2,i3) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2,i3) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 ) const - { return m_handle[ m_offset(i0,i1,i2,i3,i4) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2,i3,i4) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 ) const - { return m_handle[ m_offset(i0,i1,i2,i3,i4,i5) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2,i3,i4,i5) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 , typename I6 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 , const I6 & i6 ) const - { return m_handle[ m_offset(i0,i1,i2,i3,i4,i5,i6) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2,i3,i4,i5,i6) ]; } template< typename I0 , typename I1 , typename I2 , typename I3 , typename I4 , typename I5 , typename I6 , typename I7 > KOKKOS_FORCEINLINE_FUNCTION reference_type reference( const I0 & i0 , const I1 & i1 , const I2 & i2 , const I3 & i3 , const I4 & i4 , const I5 & i5 , const I6 & i6 , const I7 & i7 ) const - { return m_handle[ m_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; } + { return m_impl_handle[ m_impl_offset(i0,i1,i2,i3,i4,i5,i6,i7) ]; } //---------------------------------------- @@ -2747,22 +2764,22 @@ public: /** \brief Span, in bytes, of the referenced memory */ KOKKOS_INLINE_FUNCTION constexpr size_t memory_span() const { - return ( m_offset.span() * sizeof(typename Traits::value_type) + MemorySpanMask ) & ~size_t(MemorySpanMask); + return ( m_impl_offset.span() * sizeof(typename Traits::value_type) + MemorySpanMask ) & ~size_t(MemorySpanMask); } //---------------------------------------- KOKKOS_INLINE_FUNCTION ~ViewMapping() {} - KOKKOS_INLINE_FUNCTION ViewMapping() : m_handle(), m_offset() {} + KOKKOS_INLINE_FUNCTION ViewMapping() : m_impl_handle(), m_impl_offset() {} KOKKOS_INLINE_FUNCTION ViewMapping( const ViewMapping & rhs ) - : m_handle( rhs.m_handle ), m_offset( rhs.m_offset ) {} + : m_impl_handle( rhs.m_impl_handle ), m_impl_offset( rhs.m_impl_offset ) {} KOKKOS_INLINE_FUNCTION ViewMapping & operator = ( const ViewMapping & rhs ) - { m_handle = rhs.m_handle ; m_offset = rhs.m_offset ; return *this ; } + { m_impl_handle = rhs.m_impl_handle ; m_impl_offset = rhs.m_impl_offset ; return *this ; } KOKKOS_INLINE_FUNCTION ViewMapping( ViewMapping && rhs ) - : m_handle( rhs.m_handle ), m_offset( rhs.m_offset ) {} + : m_impl_handle( rhs.m_impl_handle ), m_impl_offset( rhs.m_impl_offset ) {} KOKKOS_INLINE_FUNCTION ViewMapping & operator = ( ViewMapping && rhs ) - { m_handle = rhs.m_handle ; m_offset = rhs.m_offset ; return *this ; } + { m_impl_handle = rhs.m_impl_handle ; m_impl_offset = rhs.m_impl_offset ; return *this ; } //---------------------------------------- @@ -2780,14 +2797,14 @@ public: ViewMapping( Kokkos::Impl::ViewCtorProp< P ... > const & arg_prop , typename Traits::array_layout const & arg_layout ) - : m_handle( ( (Kokkos::Impl::ViewCtorProp const &) arg_prop ).value ) - , m_offset( std::integral_constant< unsigned , 0 >() , arg_layout ) + : m_impl_handle( ( (Kokkos::Impl::ViewCtorProp const &) arg_prop ).value ) + , m_impl_offset( std::integral_constant< unsigned , 0 >() , arg_layout ) {} /**\brief Assign data */ KOKKOS_INLINE_FUNCTION void assign_data( pointer_type arg_ptr ) - { m_handle = handle_type( arg_ptr ); } + { m_impl_handle = handle_type( arg_ptr ); } //---------------------------------------- /* Allocate and construct mapped array. @@ -2815,10 +2832,10 @@ public: , alloc_prop::allow_padding ? sizeof(value_type) : 0 > padding ; - m_offset = offset_type( padding(), arg_layout ); + m_impl_offset = offset_type( padding(), arg_layout ); const size_t alloc_size = - ( m_offset.span() * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); + ( m_impl_offset.span() * MemorySpanSize + MemorySpanMask ) & ~size_t(MemorySpanMask); // Create shared memory tracking record with allocate memory from the memory space record_type * const record = @@ -2829,7 +2846,7 @@ public: #ifdef KOKKOS_ENABLE_DEPRECATED_CODE if ( alloc_size ) { #endif - m_handle = handle_type( reinterpret_cast< pointer_type >( record->data() ) ); + m_impl_handle = handle_type( reinterpret_cast< pointer_type >( record->data() ) ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE } #endif @@ -2840,8 +2857,8 @@ public: // Assume destruction is only required when construction is requested. // The ViewValueFunctor has both value construction and destruction operators. record->m_destroy = functor_type( ( (Kokkos::Impl::ViewCtorProp const &) arg_prop).value - , (value_type *) m_handle - , m_offset.span() + , (value_type *) m_impl_handle + , m_impl_offset.span() ); // Construct values @@ -2859,16 +2876,17 @@ public: template< class DstTraits , class SrcTraits > class ViewMapping< DstTraits , SrcTraits , typename std::enable_if<( - /* default mappings */ + !(std::is_same::value) && //Added to have a new specialization for SrcType of LayoutStride + // default mappings std::is_same< typename DstTraits::specialize , void >::value && std::is_same< typename SrcTraits::specialize , void >::value && ( - /* same layout */ + // same layout std::is_same< typename DstTraits::array_layout , typename SrcTraits::array_layout >::value || - /* known layout */ + // known layout ( ( std::is_same< typename DstTraits::array_layout , Kokkos::LayoutLeft >::value || @@ -2968,8 +2986,127 @@ public: if(!assignable) Kokkos::abort("View Assignment: trying to assign runtime dimension to non matching compile time dimension."); } - dst.m_offset = dst_offset_type( src.m_offset ); - dst.m_handle = Kokkos::Impl::ViewDataHandle< DstTraits >::assign( src.m_handle , src_track ); + dst.m_impl_offset = dst_offset_type( src.m_impl_offset ); + dst.m_impl_handle = Kokkos::Impl::ViewDataHandle< DstTraits >::assign( src.m_impl_handle , src_track ); + } +}; + +//---------------------------------------------------------------------------- +//Create new specialization for SrcType of LayoutStride. Runtime check for compatible layout +template< class DstTraits , class SrcTraits > +class ViewMapping< DstTraits , SrcTraits , + typename std::enable_if<( + std::is_same< typename SrcTraits::array_layout, Kokkos::LayoutStride >::value + && + std::is_same< typename DstTraits::specialize , void >::value + && + std::is_same< typename SrcTraits::specialize , void >::value + && + ( + // same layout + std::is_same< typename DstTraits::array_layout , typename SrcTraits::array_layout >::value + || + // known layout + ( + std::is_same< typename DstTraits::array_layout , Kokkos::LayoutLeft >::value || + std::is_same< typename DstTraits::array_layout , Kokkos::LayoutRight >::value || + std::is_same< typename DstTraits::array_layout , Kokkos::LayoutStride >::value + ) + ) + )>::type > +{ +private: + + enum { is_assignable_space = + Kokkos::Impl::MemorySpaceAccess + < typename DstTraits::memory_space + , typename SrcTraits::memory_space >::assignable }; + + enum { is_assignable_value_type = + std::is_same< typename DstTraits::value_type + , typename SrcTraits::value_type >::value || + std::is_same< typename DstTraits::value_type + , typename SrcTraits::const_value_type >::value }; + + enum { is_assignable_dimension = + ViewDimensionAssignable< typename DstTraits::dimension + , typename SrcTraits::dimension >::value }; + +public: + + enum { is_assignable = is_assignable_space && + is_assignable_value_type && + is_assignable_dimension }; + + typedef Kokkos::Impl::SharedAllocationTracker TrackType ; + typedef ViewMapping< DstTraits , void > DstType ; + typedef ViewMapping< SrcTraits , void > SrcType ; + + KOKKOS_INLINE_FUNCTION + static bool assignable_layout_check(DstType & dst, const SrcType & src) //Runtime check + { + size_t strides[9]; + bool assignable = true; + src.stride(strides); + size_t exp_stride = 1; + if (std::is_same< typename DstTraits::array_layout, Kokkos::LayoutLeft >::value) { + for(int i=0; i0) exp_stride *= src.extent(i-1); + if (strides[i] != exp_stride){assignable=false;break;} + } + } + else if (std::is_same< typename DstTraits::array_layout, Kokkos::LayoutRight >::value) { + for(int i=src.Rank-1; i>=0; i--) { + if (i DstTraits::dimension::rank_dynamic && 1 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN0 == src.dimension_0() : true ) && + ( ( 2 > DstTraits::dimension::rank_dynamic && 2 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN1 == src.dimension_1() : true ) && + ( ( 3 > DstTraits::dimension::rank_dynamic && 3 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN2 == src.dimension_2() : true ) && + ( ( 4 > DstTraits::dimension::rank_dynamic && 4 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN3 == src.dimension_3() : true ) && + ( ( 5 > DstTraits::dimension::rank_dynamic && 5 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN4 == src.dimension_4() : true ) && + ( ( 6 > DstTraits::dimension::rank_dynamic && 6 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN5 == src.dimension_5() : true ) && + ( ( 7 > DstTraits::dimension::rank_dynamic && 7 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN6 == src.dimension_6() : true ) && + ( ( 8 > DstTraits::dimension::rank_dynamic && 8 <= SrcTraits::dimension::rank_dynamic ) ? + dst_dim::ArgN7 == src.dimension_7() : true ) + ; + if(!assignable) + Kokkos::abort("View Assignment: trying to assign runtime dimension to non matching compile time dimension."); + } + dst.m_impl_offset = dst_offset_type( src.m_impl_offset ); + dst.m_impl_handle = Kokkos::Impl::ViewDataHandle< DstTraits >::assign( src.m_impl_handle , src_track ); } }; @@ -3106,12 +3243,12 @@ public: typedef typename DstType::offset_type dst_offset_type ; const SubviewExtents< SrcTraits::rank , rank > - extents( src.m_offset.m_dim , args... ); + extents( src.m_impl_offset.m_dim , args... ); - dst.m_offset = dst_offset_type( src.m_offset , extents ); + dst.m_impl_offset = dst_offset_type( src.m_impl_offset , extents ); - dst.m_handle = ViewDataHandle< DstTraits >::assign(src.m_handle, - src.m_offset( extents.domain_offset(0) + dst.m_impl_handle = ViewDataHandle< DstTraits >::assign(src.m_impl_handle, + src.m_impl_offset( extents.domain_offset(0) , extents.domain_offset(1) , extents.domain_offset(2) , extents.domain_offset(3) @@ -3152,6 +3289,7 @@ bool view_verify_operator_bounds && view_verify_operator_bounds( map , args ... ); } + template< unsigned , class MapType > inline void view_error_operator_bounds( char * , int , const MapType & ) @@ -3176,6 +3314,7 @@ void view_error_operator_bounds view_error_operator_bounds(buf+n,len-n,map,args...); } + #if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) /* Check #3: is the View managed as determined by the MemoryTraits? */ @@ -3275,6 +3414,8 @@ void view_verify_operator_bounds } } + + } /* namespace Impl */ } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp index 42bc8c2308..716b9ceca5 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp @@ -202,8 +202,8 @@ struct ViewMapping typedef typename src_map_type::offset_type src_offset_type ; dst = dst_map_type( - dst_handle_type( src.m_handle + - ( ( i_tile0 + src.m_offset.m_tile_N0 * i_tile1 ) << src_offset_type::SHIFT_T ) ) , + dst_handle_type( src.m_impl_handle + + ( ( i_tile0 + src.m_impl_offset.m_tile_N0 * i_tile1 ) << src_offset_type::SHIFT_T ) ) , dst_offset_type() ); } }; diff --git a/lib/kokkos/core/src/impl/Kokkos_hwloc.cpp b/lib/kokkos/core/src/impl/Kokkos_hwloc.cpp index 7dc8a53566..423944962b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_hwloc.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_hwloc.cpp @@ -336,11 +336,11 @@ Sentinel::Sentinel() const hwloc_obj_t core = hwloc_get_obj_by_type( s_hwloc_topology , HWLOC_OBJ_CORE , 0 ); - if ( hwloc_bitmap_intersects( s_process_binding , core->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( s_process_binding , core->cpuset ) ) { hwloc_bitmap_t s_process_no_core_zero = hwloc_bitmap_alloc(); - hwloc_bitmap_andnot( s_process_no_core_zero , s_process_binding , core->allowed_cpuset ); + hwloc_bitmap_andnot( s_process_no_core_zero , s_process_binding , core->cpuset ); bool ok = 0 == hwloc_set_cpubind( s_hwloc_topology , s_process_no_core_zero , @@ -402,14 +402,14 @@ Sentinel::Sentinel() const hwloc_obj_t root = hwloc_get_obj_by_type( s_hwloc_topology , root_type , i ); - if ( hwloc_bitmap_intersects( s_process_binding , root->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( s_process_binding , root->cpuset ) ) { ++root_count ; // Remember which root (NUMA) object the master thread is running on. // This will be logical NUMA rank #0 for this process. - if ( hwloc_bitmap_intersects( proc_cpuset_location, root->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( proc_cpuset_location, root->cpuset ) ) { root_base = i ; } @@ -417,7 +417,7 @@ Sentinel::Sentinel() const unsigned max_core = hwloc_get_nbobjs_inside_cpuset_by_type( s_hwloc_topology , - root->allowed_cpuset , + root->cpuset , HWLOC_OBJ_CORE ); unsigned core_count = 0 ; @@ -426,7 +426,7 @@ Sentinel::Sentinel() const hwloc_obj_t core = hwloc_get_obj_inside_cpuset_by_type( s_hwloc_topology , - root->allowed_cpuset , + root->cpuset , HWLOC_OBJ_CORE , j ); // If process' cpuset intersects core's cpuset then process can access this core. @@ -438,13 +438,13 @@ Sentinel::Sentinel() // This assumes that it would be performance-detrimental // to spawn more than one MPI process per core and use nested threading. - if ( hwloc_bitmap_intersects( s_process_binding , core->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( s_process_binding , core->cpuset ) ) { ++core_count ; const unsigned pu_count = hwloc_get_nbobjs_inside_cpuset_by_type( s_hwloc_topology , - core->allowed_cpuset , + core->cpuset , HWLOC_OBJ_PU ); if ( pu_per_core == 0 ) pu_per_core = pu_count ; @@ -480,11 +480,11 @@ Sentinel::Sentinel() const hwloc_obj_t root = hwloc_get_obj_by_type( s_hwloc_topology , root_type , root_rank ); - if ( hwloc_bitmap_intersects( s_process_binding , root->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( s_process_binding , root->cpuset ) ) { const unsigned max_core = hwloc_get_nbobjs_inside_cpuset_by_type( s_hwloc_topology , - root->allowed_cpuset , + root->cpuset , HWLOC_OBJ_CORE ); unsigned core_count = 0 ; @@ -493,12 +493,12 @@ Sentinel::Sentinel() const hwloc_obj_t core = hwloc_get_obj_inside_cpuset_by_type( s_hwloc_topology , - root->allowed_cpuset , + root->cpuset , HWLOC_OBJ_CORE , j ); - if ( hwloc_bitmap_intersects( s_process_binding , core->allowed_cpuset ) ) { + if ( hwloc_bitmap_intersects( s_process_binding , core->cpuset ) ) { - s_core[ core_count + core_per_root * i ] = core->allowed_cpuset ; + s_core[ core_count + core_per_root * i ] = core->cpuset ; ++core_count ; } diff --git a/lib/kokkos/core/src/kokkos.pc.in b/lib/kokkos/core/src/kokkos.pc.in new file mode 100644 index 0000000000..f27b57c960 --- /dev/null +++ b/lib/kokkos/core/src/kokkos.pc.in @@ -0,0 +1,71 @@ +# +# Kokkos v. 2.0 +# Copyright (2014) Sandia Corporation +# +# Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +# the U.S. Government retains certain rights in this software. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Christian R. Trott (crtrott@sandia.gov) +# + +# Add the directory where kokkos.pc got installed to your PKG_CONFIG_PATH + +# Use this on commandline with: +# c++ `pkg-config --cflags --libs kokkos` -o myapp myapp.cpp + +# Use this in a Makefile: +# myapp: myapp.cpp +# $(CC) `pkg-config --cflags --libs kokkos` -o $@ $< + +# Use this in autotools: +# configure.ac: +# PKG_CHECK_MODULES([KOKKOS], [kokkos]) +# Makefile.am: +# myapp_CFLAGS = $(KOKKOS_CFLAGS) +# myapp_LDADD = $(KOKKOS_LIBS) + +# Use this in CMake: +# CMakeLists.txt: +# find_package(PkgConfig) +# pkg_check_modules(KOKKOS IMPORTED_TARGET kokkos) +# target_link_libraries( PkgConfig::KOKKOS) + +prefix=@CMAKE_INSTALL_PREFIX@ +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: kokkos +Description: Kokkos C++ Performance Portability Programming EcoSystem +URL: https://github.com/kokkos +Version: +Requires: +Libs: -L${libdir} -lkokkos @KOKKOS_EXTRA_LIBS_LIST@ @KOKKOS_LINK_FLAGS@ +Libs.private: -lm +Cflags: -I${includedir} @KOKKOS_CXXFLAGS@ diff --git a/lib/kokkos/core/unit_test/CMakeLists.txt b/lib/kokkos/core/unit_test/CMakeLists.txt index 651abf04dd..fad4e1d45e 100644 --- a/lib/kokkos/core/unit_test/CMakeLists.txt +++ b/lib/kokkos/core/unit_test/CMakeLists.txt @@ -284,6 +284,7 @@ IF(Kokkos_ENABLE_Cuda) SOURCES UnitTestMainInit.cpp cuda/TestCudaHostPinned_SharedAlloc.cpp + cuda/TestCudaHostPinned_ViewCopy.cpp cuda/TestCudaHostPinned_ViewAPI_a.cpp cuda/TestCudaHostPinned_ViewAPI_b.cpp cuda/TestCudaHostPinned_ViewAPI_c.cpp @@ -293,6 +294,7 @@ IF(Kokkos_ENABLE_Cuda) cuda/TestCudaHostPinned_ViewMapping_b.cpp cuda/TestCudaHostPinned_ViewMapping_subview.cpp cuda/TestCudaUVM_SharedAlloc.cpp + cuda/TestCudaUVM_ViewCopy.cpp cuda/TestCudaUVM_ViewAPI_a.cpp cuda/TestCudaUVM_ViewAPI_b.cpp cuda/TestCudaUVM_ViewAPI_c.cpp diff --git a/lib/kokkos/core/unit_test/Makefile b/lib/kokkos/core/unit_test/Makefile index b50222e376..72832271c8 100644 --- a/lib/kokkos/core/unit_test/Makefile +++ b/lib/kokkos/core/unit_test/Makefile @@ -43,12 +43,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o OBJ_CUDA += TestCuda_RangePolicy.o OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o - OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o - OBJ_CUDA += TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o + OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewLayoutStrideAssignment.o + OBJ_CUDA += TestCudaUVM_ViewCopy.o TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o OBJ_CUDA += TestCudaUVM_ViewMapping_a.o TestCudaUVM_ViewMapping_b.o TestCudaUVM_ViewMapping_subview.o - OBJ_CUDA += TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o + OBJ_CUDA += TestCudaHostPinned_ViewCopy.o TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o OBJ_CUDA += TestCudaHostPinned_ViewMapping_a.o TestCudaHostPinned_ViewMapping_b.o TestCudaHostPinned_ViewMapping_subview.o - OBJ_CUDA += TestCuda_View_64bit.o + OBJ_CUDA += TestCuda_View_64bit.o OBJ_CUDA += TestCuda_ViewOfClass.o OBJ_CUDA += TestCuda_SubView_a.o TestCuda_SubView_b.o OBJ_CUDA += TestCuda_SubView_c01.o TestCuda_SubView_c02.o TestCuda_SubView_c03.o @@ -57,13 +57,14 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA += TestCuda_SubView_c10.o TestCuda_SubView_c11.o TestCuda_SubView_c12.o OBJ_CUDA += TestCuda_SubView_c13.o OBJ_CUDA += TestCuda_Reductions.o TestCuda_Scan.o + OBJ_CUDA += TestCuda_Reductions_DeviceView.o OBJ_CUDA += TestCuda_Reducers_a.o TestCuda_Reducers_b.o TestCuda_Reducers_c.o TestCuda_Reducers_d.o OBJ_CUDA += TestCuda_Complex.o OBJ_CUDA += TestCuda_AtomicOperations_int.o TestCuda_AtomicOperations_unsignedint.o TestCuda_AtomicOperations_longint.o OBJ_CUDA += TestCuda_AtomicOperations_unsignedlongint.o TestCuda_AtomicOperations_longlongint.o TestCuda_AtomicOperations_double.o TestCuda_AtomicOperations_float.o OBJ_CUDA += TestCuda_AtomicViews.o TestCuda_Atomics.o OBJ_CUDA += TestCuda_Team.o TestCuda_TeamScratch.o - OBJ_CUDA += TestCuda_TeamReductionScan.o + OBJ_CUDA += TestCuda_TeamReductionScan.o TestCuda_TeamTeamSize.o OBJ_CUDA += TestCuda_Other.o OBJ_CUDA += TestCuda_MDRange_a.o TestCuda_MDRange_b.o TestCuda_MDRange_c.o TestCuda_MDRange_d.o TestCuda_MDRange_e.o OBJ_CUDA += TestCuda_Crs.o @@ -84,13 +85,11 @@ ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) OBJ_ROCM += TestROCm_AtomicOperations_int.o TestROCm_AtomicOperations_unsignedint.o TestROCm_AtomicOperations_longint.o OBJ_ROCM += TestROCm_AtomicOperations_unsignedlongint.o TestROCm_AtomicOperations_longlongint.o TestROCm_AtomicOperations_double.o TestROCm_AtomicOperations_float.o OBJ_ROCM += TestROCm_Atomics.o -# complex failing OBJ_ROCM += TestROCm_AtomicViews.o OBJ_ROCM += TestROCm_Other.o -# Compiles but runtime Segfaults: -# OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o -# rocm.memory_pool - OBJ_ROCM += TestROCm_Reductions.o + OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o + OBJ_ROCM += TestROCm_MDRangeReduce_a.o TestROCm_MDRangeReduce_b.o TestROCm_MDRangeReduce_c.o TestROCm_MDRangeReduce_d.o TestROCm_MDRangeReduce_e.o + OBJ_ROCM += TestROCm_Reductions.o OBJ_ROCM += TestROCm_Reducers_a.o TestROCm_Reducers_b.o TestROCm_Reducers_c.o TestROCm_Reducers_d.o OBJ_ROCM += TestROCm_Scan.o OBJ_ROCM += TestROCm_SharedAlloc.o @@ -108,22 +107,22 @@ ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) OBJ_ROCM += TestROCm_SubView_c10.o OBJ_ROCM += TestROCm_SubView_c11.o OBJ_ROCM += TestROCm_SubView_c12.o + OBJ_ROCM += TestROCm_SubView_c13.o OBJ_ROCM += TestROCm_Team.o -# compile fails / compiler segfaults - #OBJ_ROCM += TestROCm_TeamReductionScan.o -# compile fails - OBJ_ROCM += TestROCm_TeamScratch.o + OBJ_ROCM += TestROCm_TeamReductionScan.o + OBJ_ROCM += TestROCm_TeamScratch.o TestROCm_TeamTeamSize.o OBJ_ROCM += TestROCm_ViewAPI_a.o TestROCm_ViewAPI_b.o TestROCm_ViewAPI_c.o TestROCm_ViewAPI_d.o TestROCm_ViewAPI_e.o OBJ_ROCM += TestROCm_ViewMapping_a.o OBJ_ROCM += TestROCm_ViewMapping_b.o OBJ_ROCM += TestROCm_ViewMapping_subview.o - OBJ_ROCM += TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o + OBJ_ROCM += TestROCmHostPinned_ViewCopy.o TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o OBJ_ROCM += TestROCmHostPinned_View_64bit.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o OBJ_ROCM += TestROCm_ViewOfClass.o - OBJ_ROCM += TestROCm_Spaces.o + OBJ_ROCM += TestROCm_Spaces.o + OBJ_ROCM += TestROCm_Crs.o TARGETS += KokkosCore_UnitTest_ROCm TEST_TARGETS += test-rocm @@ -137,7 +136,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) OBJ_THREADS += TestThreads_RangePolicy.o OBJ_THREADS += TestThreads_View_64bit.o OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o - OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o + OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o TestThreads_ViewLayoutStrideAssignment.o OBJ_THREADS += TestThreads_ViewOfClass.o OBJ_THREADS += TestThreads_SubView_a.o TestThreads_SubView_b.o OBJ_THREADS += TestThreads_SubView_c01.o TestThreads_SubView_c02.o TestThreads_SubView_c03.o @@ -145,12 +144,13 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) OBJ_THREADS += TestThreads_SubView_c07.o TestThreads_SubView_c08.o TestThreads_SubView_c09.o OBJ_THREADS += TestThreads_SubView_c10.o TestThreads_SubView_c11.o TestThreads_SubView_c12.o OBJ_THREADS += TestThreads_Reductions.o TestThreads_Scan.o + OBJ_THREADS += TestThreads_Reductions_DeviceView.o OBJ_THREADS += TestThreads_Reducers_a.o TestThreads_Reducers_b.o TestThreads_Reducers_c.o TestThreads_Reducers_d.o OBJ_THREADS += TestThreads_Complex.o OBJ_THREADS += TestThreads_AtomicOperations_int.o TestThreads_AtomicOperations_unsignedint.o TestThreads_AtomicOperations_longint.o OBJ_THREADS += TestThreads_AtomicOperations_unsignedlongint.o TestThreads_AtomicOperations_longlongint.o TestThreads_AtomicOperations_double.o TestThreads_AtomicOperations_float.o OBJ_THREADS += TestThreads_AtomicViews.o TestThreads_Atomics.o - OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o + OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o TestThreads_TeamTeamSize.o OBJ_THREADS += TestThreads_TeamReductionScan.o OBJ_THREADS += TestThreads_Other.o OBJ_THREADS += TestThreads_MDRange_a.o TestThreads_MDRange_b.o TestThreads_MDRange_c.o TestThreads_MDRange_d.o TestThreads_MDRange_e.o @@ -167,7 +167,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) OBJ_OPENMP += TestOpenMP_RangePolicy.o OBJ_OPENMP += TestOpenMP_View_64bit.o OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o - OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o + OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o TestOpenMP_ViewLayoutStrideAssignment.o OBJ_OPENMP += TestOpenMP_ViewOfClass.o OBJ_OPENMP += TestOpenMP_SubView_a.o TestOpenMP_SubView_b.o OBJ_OPENMP += TestOpenMP_SubView_c01.o TestOpenMP_SubView_c02.o TestOpenMP_SubView_c03.o @@ -176,13 +176,14 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) OBJ_OPENMP += TestOpenMP_SubView_c10.o TestOpenMP_SubView_c11.o TestOpenMP_SubView_c12.o OBJ_OPENMP += TestOpenMP_SubView_c13.o OBJ_OPENMP += TestOpenMP_Reductions.o TestOpenMP_Scan.o + OBJ_OPENMP += TestOpenMP_Reductions_DeviceView.o OBJ_OPENMP += TestOpenMP_Reducers_a.o TestOpenMP_Reducers_b.o TestOpenMP_Reducers_c.o TestOpenMP_Reducers_d.o OBJ_OPENMP += TestOpenMP_Complex.o OBJ_OPENMP += TestOpenMP_AtomicOperations_int.o TestOpenMP_AtomicOperations_unsignedint.o TestOpenMP_AtomicOperations_longint.o OBJ_OPENMP += TestOpenMP_AtomicOperations_unsignedlongint.o TestOpenMP_AtomicOperations_longlongint.o TestOpenMP_AtomicOperations_double.o TestOpenMP_AtomicOperations_float.o OBJ_OPENMP += TestOpenMP_AtomicViews.o TestOpenMP_Atomics.o OBJ_OPENMP += TestOpenMP_Team.o TestOpenMP_TeamScratch.o - OBJ_OPENMP += TestOpenMP_TeamReductionScan.o + OBJ_OPENMP += TestOpenMP_TeamReductionScan.o TestOpenMP_TeamTeamSize.o OBJ_OPENMP += TestOpenMP_Other.o OBJ_OPENMP += TestOpenMP_MDRange_a.o TestOpenMP_MDRange_b.o TestOpenMP_MDRange_c.o TestOpenMP_MDRange_d.o TestOpenMP_MDRange_e.o OBJ_OPENMP += TestOpenMP_Crs.o @@ -256,7 +257,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL += TestSerial_RangePolicy.o OBJ_SERIAL += TestSerial_View_64bit.o OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o - OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o + OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o TestSerial_ViewLayoutStrideAssignment.o OBJ_SERIAL += TestSerial_ViewOfClass.o OBJ_SERIAL += TestSerial_SubView_a.o TestSerial_SubView_b.o OBJ_SERIAL += TestSerial_SubView_c01.o TestSerial_SubView_c02.o TestSerial_SubView_c03.o @@ -265,13 +266,14 @@ ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL += TestSerial_SubView_c10.o TestSerial_SubView_c11.o TestSerial_SubView_c12.o OBJ_SERIAL += TestSerial_SubView_c13.o OBJ_SERIAL += TestSerial_Reductions.o TestSerial_Scan.o + OBJ_SERIAL += TestSerial_Reductions_DeviceView.o OBJ_SERIAL += TestSerial_Reducers_a.o TestSerial_Reducers_b.o TestSerial_Reducers_c.o TestSerial_Reducers_d.o OBJ_SERIAL += TestSerial_Complex.o OBJ_SERIAL += TestSerial_AtomicOperations_int.o TestSerial_AtomicOperations_unsignedint.o TestSerial_AtomicOperations_longint.o OBJ_SERIAL += TestSerial_AtomicOperations_unsignedlongint.o TestSerial_AtomicOperations_longlongint.o TestSerial_AtomicOperations_double.o TestSerial_AtomicOperations_float.o OBJ_SERIAL += TestSerial_AtomicViews.o TestSerial_Atomics.o OBJ_SERIAL += TestSerial_Team.o TestSerial_TeamScratch.o - OBJ_SERIAL += TestSerial_TeamReductionScan.o + OBJ_SERIAL += TestSerial_TeamReductionScan.o TestSerial_TeamTeamSize.o OBJ_SERIAL += TestSerial_Other.o #HCC_WORKAROUND ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) diff --git a/lib/kokkos/core/unit_test/TestAtomic.hpp b/lib/kokkos/core/unit_test/TestAtomic.hpp index cf4bae5844..58b6325115 100644 --- a/lib/kokkos/core/unit_test/TestAtomic.hpp +++ b/lib/kokkos/core/unit_test/TestAtomic.hpp @@ -224,7 +224,8 @@ T AddLoop( int loop ) { struct AddFunctorReduce< T, execution_space > f_add_red; f_add_red.data = data; - Kokkos::parallel_reduce( loop, f_add_red ); + int dummy_result; + Kokkos::parallel_reduce( loop, f_add_red , dummy_result ); execution_space::fence(); return val; @@ -309,7 +310,8 @@ T CASLoop( int loop ) { struct CASFunctorReduce< T, execution_space > f_cas_red; f_cas_red.data = data; - Kokkos::parallel_reduce( loop, f_cas_red ); + int dummy_result; + Kokkos::parallel_reduce( loop, f_cas_red , dummy_result ); execution_space::fence(); return val; @@ -401,7 +403,8 @@ T ExchLoop( int loop ) { struct ExchFunctorReduce< T, execution_space > f_exch_red; f_exch_red.data = data; f_exch_red.data2 = data2; - Kokkos::parallel_reduce( loop, f_exch_red ); + int dummy_result; + Kokkos::parallel_reduce( loop, f_exch_red , dummy_result ); execution_space::fence(); return val; @@ -529,7 +532,7 @@ TEST_F( TEST_CATEGORY, atomics ) ASSERT_TRUE( ( TestAtomic::Loop< float, TEST_EXECSPACE >( 100, 3 ) ) ); #ifndef KOKKOS_ENABLE_OPENMPTARGET -#ifndef KOKKOS_ENABLE_ROCM +#ifndef KOKKOS_ENABLE_ROCM // ROCM doesn't yet support atomics for >64bit types ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, TEST_EXECSPACE >( 1, 1 ) ) ); ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, TEST_EXECSPACE >( 1, 2 ) ) ); ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, TEST_EXECSPACE >( 1, 3 ) ) ); diff --git a/lib/kokkos/core/unit_test/TestCXX11.hpp b/lib/kokkos/core/unit_test/TestCXX11.hpp index b6c34d2d4b..8a158e2667 100644 --- a/lib/kokkos/core/unit_test/TestCXX11.hpp +++ b/lib/kokkos/core/unit_test/TestCXX11.hpp @@ -216,7 +216,7 @@ template< class DeviceType, bool PWRTest > double ReduceTestFunctor() { typedef Kokkos::TeamPolicy< DeviceType > policy_type; typedef Kokkos::View< double**, DeviceType > view_type; - typedef Kokkos::View< double, typename view_type::host_mirror_space, Kokkos::MemoryUnmanaged > unmanaged_result; + typedef Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryUnmanaged > unmanaged_result; view_type a( "A", 100, 5 ); typename view_type::HostMirror h_a = Kokkos::create_mirror_view( a ); @@ -244,7 +244,7 @@ template< class DeviceType, bool PWRTest > double ReduceTestLambda() { typedef Kokkos::TeamPolicy< DeviceType > policy_type; typedef Kokkos::View< double**, DeviceType > view_type; - typedef Kokkos::View< double, typename view_type::host_mirror_space, Kokkos::MemoryUnmanaged > unmanaged_result; + typedef Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryUnmanaged > unmanaged_result; view_type a( "A", 100, 5 ); typename view_type::HostMirror h_a = Kokkos::create_mirror_view( a ); @@ -327,12 +327,18 @@ bool Test( int test ) { }; bool passed = true; - if ( res_functor != res_lambda ) { + auto a = res_functor; + auto b = res_lambda; + // use a tolerant comparison because functors and lambdas vectorize differently + // https://github.com/trilinos/Trilinos/issues/3233 + auto rel_err = (std::abs(b - a) / std::max(std::abs(a), std::abs(b))); + auto tol = 1e-14; + if (rel_err > tol) { passed = false; std::cout << "CXX11 ( test = '" - << testnames[test] << "' FAILED : " - << res_functor << " != " << res_lambda + << testnames[test] << "' FAILED : relative error " + << rel_err << " > tolerance " << tol << std::endl; } diff --git a/lib/kokkos/core/unit_test/TestComplex.hpp b/lib/kokkos/core/unit_test/TestComplex.hpp index fcaebe3c6e..f4343df0ce 100644 --- a/lib/kokkos/core/unit_test/TestComplex.hpp +++ b/lib/kokkos/core/unit_test/TestComplex.hpp @@ -71,7 +71,7 @@ struct TestComplexConstruction { ASSERT_FLOAT_EQ(h_results(7).real(),7.5); ASSERT_FLOAT_EQ(h_results(7).imag(),0.0); ASSERT_FLOAT_EQ(h_results(8).real(),double(8)); ASSERT_FLOAT_EQ(h_results(8).imag(),0.0); -#ifndef KOKKOS_ENABLE_ROCM +#ifndef KOKKOS_ENABLE_ROCM // Copy construction conversion between Kokkos::complex and std::complex doesn't compile Kokkos::complex a(1.5,2.5),b(3.25,5.25),r_kk; std::complex sa(a),sb(3.25,5.25),r; r = a; r_kk = a; ASSERT_FLOAT_EQ(r.real(),r_kk.real()); ASSERT_FLOAT_EQ(r.imag(),r_kk.imag()); diff --git a/lib/kokkos/core/unit_test/TestMDRange.hpp b/lib/kokkos/core/unit_test/TestMDRange.hpp index 9298983aa8..88b3a9b0c6 100644 --- a/lib/kokkos/core/unit_test/TestMDRange.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange.hpp @@ -318,6 +318,24 @@ struct TestMDRange_2D { ASSERT_EQ( sum, 2 * (N0 - s0) * (N1 - s1) ); } + // Test with reducers - scalar + label + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType > range_type; + int s0 = 1; + int s1 = 1; + range_type range( {{ s0, s1 }}, {{ N0, N1 }}, {{ 3, 3 }} ); + + TestMDRange_2D functor( N0, N1 ); + + parallel_for( "rank2-parfor-label", range, functor ); + + value_type sum = 0.0; + Kokkos::Sum< value_type > reducer_scalar( sum ); + + parallel_reduce( "rank2-reducer-label", range, functor, reducer_scalar ); + + ASSERT_EQ( sum, 2 * (N0 - s0) * (N1 - s1) ); + } // Test with reducers - scalar view { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType > range_type; @@ -337,7 +355,31 @@ struct TestMDRange_2D { ASSERT_EQ( sum, 2 * N0 * N1 ); } + // Test Min reducer with lambda +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType > range_type; + range_type range( {{ 1, 1 }}, {{ N0, N1 }}, {{ 3, 3 }} ); + Kokkos::View< double**, ExecSpace > v_in("v_in", N0, N1 ); + + parallel_for( "rank2-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j ) { + v_in( i , j ) = (i+1) * (j+1) ; + }); + + double min; + Kokkos::Min< double > reducer_scalar( min ); + + parallel_reduce( "rank2-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, double& min_val ) { + min_val = fmin( v_in(i,j), min_val ); + } + , reducer_scalar); + + ASSERT_EQ( min, 4.0 ); + } +#endif +#endif // Tagged operator test { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2, Iterate::Default, Iterate::Default >, Kokkos::IndexType, InitTag > range_type; @@ -858,6 +900,22 @@ struct TestMDRange_3D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 ); } + // Test with reducers - scalar + label + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType > range_type; + range_type range( {{ 0, 0, 0 }}, {{ N0, N1, N2 }}, {{ 3, 3, 3 }} ); + + TestMDRange_3D functor( N0, N1, N2 ); + + parallel_for( "rank3-parfor-label", range, functor ); + + value_type sum = 0.0; + Kokkos::Sum< value_type > reducer_scalar( sum ); + + parallel_reduce( "rank3-reducer-label", range, functor, reducer_scalar ); + + ASSERT_EQ( sum, 2 * N0 * N1 * N2 ); + } // Test with reducers - scalar view { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType > range_type; @@ -877,6 +935,31 @@ struct TestMDRange_3D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 ); } + // Test Min reducer with lambda +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType > range_type; + + range_type range( {{ 1, 1, 1 }}, {{ N0, N1, N2 }}, {{ 3, 3, 3 }} ); + + Kokkos::View< double***, ExecSpace > v_in("v_in", N0, N1, N2 ); + + parallel_for( "rank3-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k ) { + v_in( i, j, k ) = (i+1) * (j+1) * (k+1) ; + }); + + double min; + + parallel_reduce("rank3-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, double& min_val ) { + min_val = (v_in(i,j,k) < min_val) ? v_in(i,j,k) : min_val; + } + , Kokkos::Min(min) ); + + ASSERT_EQ( min, 8.0 ); + } +#endif +#endif // Tagged operator test { @@ -1382,6 +1465,23 @@ struct TestMDRange_4D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 ); } + // Test with reducers - scalar + label + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType > range_type; + range_type range( {{ 0, 0, 0, 0 }}, {{ N0, N1, N2, N3 }}, {{ 3, 3, 3, 3 }} ); + + TestMDRange_4D functor( N0, N1, N2, N3 ); + + parallel_for( "rank4-parfor-label", range, functor ); + + value_type sum = 0.0; + Kokkos::Sum< value_type > reducer_scalar( sum ); + + parallel_reduce( "rank4-reducer-label", range, functor, reducer_scalar ); + + ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 ); + } + // Test with reducers - scalar view { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType > range_type; @@ -1402,6 +1502,32 @@ struct TestMDRange_4D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 ); } + // Test Min reducer with lambda +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType > range_type; + + range_type range( {{ 1, 1, 1, 1 }}, {{ N0, N1, N2, N3 }}, {{ 3, 3, 3, 3 }} ); + + Kokkos::View< double****, ExecSpace > v_in("v_in", N0, N1, N2, N3 ); + + parallel_for( "rank4-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l ) { + v_in( i, j, k, l ) = (i+1) * (j+1) * (k+1) * (l+1) ; + }); + + double min; + + parallel_reduce("rank4-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, double& min_val ) { + min_val = (v_in(i,j,k,l) < min_val) ? v_in(i,j,k,l) : min_val; + } + , Kokkos::Min(min) ); + + ASSERT_EQ( min, 16.0 ); + } +#endif +#endif + // Tagged operator test { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4, Iterate::Default, Iterate::Default >, Kokkos::IndexType, InitTag > range_type; @@ -1926,6 +2052,23 @@ struct TestMDRange_5D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 ); } + // Test with reducers - scalar + label + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType > range_type; + range_type range( {{ 0, 0, 0, 0, 0 }}, {{ N0, N1, N2, N3, N4 }}, {{ 3, 3, 3, 3, 3 }} ); + + TestMDRange_5D functor( N0, N1, N2, N3, N4 ); + + parallel_for( "rank5-parfor-label", range, functor ); + + value_type sum = 0.0; + Kokkos::Sum< value_type > reducer_scalar( sum ); + + parallel_reduce( "rank5-reducer-label", range, functor, reducer_scalar ); + + ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 ); + } + // Test with reducers - scalar view { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType > range_type; @@ -1946,6 +2089,32 @@ struct TestMDRange_5D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 ); } + // Test Min reducer with lambda +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType > range_type; + + range_type range( {{ 1, 1, 1, 1, 1 }}, {{ N0, N1, N2, N3, N4 }}, {{ 3, 3, 3, 2, 2 }} ); + + Kokkos::View< double*****, ExecSpace > v_in("v_in", N0, N1, N2, N3, N4 ); + + parallel_for( "rank5-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m ) { + v_in( i, j, k, l, m ) = (i+1) * (j+1) * (k+1) * (l+1) * (m+1) ; + }); + + double min; + + parallel_reduce("rank5-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, double& min_val ) { + min_val = (v_in(i,j,k,l,m) < min_val) ? v_in(i,j,k,l,m) : min_val; + } + , Kokkos::Min(min) ); + + ASSERT_EQ( min, 32.0 ); + } +#endif +#endif + // Tagged operator test { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5, Iterate::Default, Iterate::Default >, Kokkos::IndexType, InitTag > range_type; @@ -2401,6 +2570,23 @@ struct TestMDRange_6D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 ); } + // Test with reducers - scalar + label + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType > range_type; + range_type range( {{ 0, 0, 0, 0, 0, 0 }}, {{ N0, N1, N2, N3, N4, N5 }}, {{ 3, 3, 3, 3, 3, 2 }} ); + + TestMDRange_6D functor( N0, N1, N2, N3, N4, N5 ); + + parallel_for( "rank6-parfor-label", range, functor ); + + value_type sum = 0.0; + Kokkos::Sum< value_type > reducer_scalar( sum ); + + parallel_reduce( "rank6-reducer-label", range, functor, reducer_scalar ); + + ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 ); + } + // Test with reducers - scalar view { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType > range_type; @@ -2421,6 +2607,32 @@ struct TestMDRange_6D { ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 ); } + // Test Min reducer with lambda +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + { + typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType > range_type; + + range_type range( {{ 1, 1, 1, 1, 1, 1 }}, {{ N0, N1, N2, N3, N4, N5 }}, {{ 3, 3, 3, 2, 2, 1 }} ); + + Kokkos::View< double******, ExecSpace > v_in("v_in", N0, N1, N2, N3, N4, N5 ); + + parallel_for( "rank6-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, const int n ) { + v_in( i, j, k, l, m, n ) = (i+1) * (j+1) * (k+1) * (l+1) * (m+1) * (n+1) ; + }); + + double min; + + parallel_reduce("rank6-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, const int n, double& min_val ) { + min_val = (v_in(i,j,k,l,m,n) < min_val) ? v_in(i,j,k,l,m,n) : min_val; + } + , Kokkos::Min(min) ); + + ASSERT_EQ( min, 64.0 ); + } +#endif +#endif + // Tagged operator test { typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6, Iterate::Default, Iterate::Default >, Kokkos::IndexType, InitTag > range_type; diff --git a/lib/kokkos/core/unit_test/TestMDRange_a.hpp b/lib/kokkos/core/unit_test/TestMDRange_a.hpp index 5de5225eb8..308b3a3029 100644 --- a/lib/kokkos/core/unit_test/TestMDRange_a.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange_a.hpp @@ -44,8 +44,12 @@ #include namespace Test { + TEST_F( TEST_CATEGORY , mdrange_5d ) { +#if !defined ( KOKKOS_ENABLE_ROCM ) // MDRange Reduce explicitly handled in its own cpp file TestMDRange_5D< TEST_EXECSPACE >::test_reduce5( 100, 10, 10, 10, 5 ); +#endif TestMDRange_5D< TEST_EXECSPACE >::test_for5( 100, 10, 10, 10, 5 ); } + } diff --git a/lib/kokkos/core/unit_test/TestMDRange_b.hpp b/lib/kokkos/core/unit_test/TestMDRange_b.hpp index 60ece56aab..e714f18395 100644 --- a/lib/kokkos/core/unit_test/TestMDRange_b.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange_b.hpp @@ -45,10 +45,11 @@ namespace Test { - TEST_F( TEST_CATEGORY , mdrange_6d ) { TestMDRange_6D< TEST_EXECSPACE >::test_for6( 10, 10, 10, 10, 5, 5 ); +#if !defined( KOKKOS_ENABLE_ROCM ) // MDRange Reduce explicitly handled in its own cpp file TestMDRange_6D< TEST_EXECSPACE >::test_reduce6( 100, 10, 10, 10, 5, 5 ); +#endif } } diff --git a/lib/kokkos/core/unit_test/TestMDRange_c.hpp b/lib/kokkos/core/unit_test/TestMDRange_c.hpp index 029b1e2b1c..810e1d82bc 100644 --- a/lib/kokkos/core/unit_test/TestMDRange_c.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange_c.hpp @@ -46,8 +46,10 @@ namespace Test { TEST_F( TEST_CATEGORY , mdrange_2d) { - TestMDRange_2D< TEST_EXECSPACE >::test_for2( 100, 100 ); +#if !defined( KOKKOS_ENABLE_ROCM ) // MDRange Reduce explicitly handled in its own cpp file TestMDRange_2D< TEST_EXECSPACE >::test_reduce2( 100, 100 ); +#endif + TestMDRange_2D< TEST_EXECSPACE >::test_for2( 100, 100 ); } TEST_F( TEST_CATEGORY , mdrange_array_reduce ) { diff --git a/lib/kokkos/core/unit_test/TestMDRange_d.hpp b/lib/kokkos/core/unit_test/TestMDRange_d.hpp index 240df9aec0..1a477a228f 100644 --- a/lib/kokkos/core/unit_test/TestMDRange_d.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange_d.hpp @@ -44,9 +44,12 @@ #include namespace Test { + TEST_F( TEST_CATEGORY , mdrange_3d) { TestMDRange_3D< TEST_EXECSPACE >::test_for3( 100, 10, 100 ); +#if !defined( KOKKOS_ENABLE_ROCM ) // MDRange Reduced explicitly handled in its own cpp file TestMDRange_3D< TEST_EXECSPACE >::test_reduce3( 100, 10, 100 ); +#endif } TEST_F( TEST_CATEGORY , mdrange_neg_idx ) { @@ -56,4 +59,5 @@ TEST_F( TEST_CATEGORY , mdrange_neg_idx ) { TestMDRange_5D_NegIdx< TEST_EXECSPACE >::test_5D_negidx( 128, 32, 8, 8, 4 ); TestMDRange_6D_NegIdx< TEST_EXECSPACE >::test_6D_negidx( 128, 32, 8, 8, 4, 2 ); } + } diff --git a/lib/kokkos/core/unit_test/TestMDRange_e.hpp b/lib/kokkos/core/unit_test/TestMDRange_e.hpp index 8162184c9b..a626725352 100644 --- a/lib/kokkos/core/unit_test/TestMDRange_e.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange_e.hpp @@ -44,8 +44,12 @@ #include namespace Test { + TEST_F( TEST_CATEGORY , mdrange_4d ) { +#if !defined( KOKKOS_ENABLE_ROCM ) // MDRange Reduce explicitly handled in its own cpp file TestMDRange_4D< TEST_EXECSPACE >::test_reduce4( 100, 10, 10, 10 ); +#endif TestMDRange_4D< TEST_EXECSPACE >::test_for4( 100, 10, 10, 10 ); } + } diff --git a/lib/kokkos/core/unit_test/TestMemoryPool.hpp b/lib/kokkos/core/unit_test/TestMemoryPool.hpp index 9fb1d900f7..00079e02ee 100644 --- a/lib/kokkos/core/unit_test/TestMemoryPool.hpp +++ b/lib/kokkos/core/unit_test/TestMemoryPool.hpp @@ -626,7 +626,9 @@ TEST_F( TEST_CATEGORY, memory_pool ) TestMemoryPool::test_host_memory_pool_stats<>(); TestMemoryPool::test_memory_pool_v2< TEST_EXECSPACE >(false,false); TestMemoryPool::test_memory_pool_corners< TEST_EXECSPACE >(false,false); +#ifdef KOKKOS_ENABLE_LARGE_MEM_TESTS TestMemoryPool::test_memory_pool_huge< TEST_EXECSPACE >(); +#endif } } diff --git a/lib/kokkos/core/unit_test/TestReduce.hpp b/lib/kokkos/core/unit_test/TestReduce.hpp index 5748df1f17..924d8eb45f 100644 --- a/lib/kokkos/core/unit_test/TestReduce.hpp +++ b/lib/kokkos/core/unit_test/TestReduce.hpp @@ -63,9 +63,11 @@ public: const size_type nwork; + KOKKOS_INLINE_FUNCTION ReduceFunctor( const size_type & arg_nwork ) : nwork( arg_nwork ) {} + KOKKOS_INLINE_FUNCTION ReduceFunctor( const ReduceFunctor & rhs ) : nwork( rhs.nwork ) {} @@ -102,6 +104,7 @@ class ReduceFunctorFinal : public ReduceFunctor< long, DeviceType > { public: typedef typename ReduceFunctor< long, DeviceType >::value_type value_type; + KOKKOS_INLINE_FUNCTION ReduceFunctorFinal( const size_t n ) : ReduceFunctor< long, DeviceType >( n ) {} diff --git a/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp new file mode 100644 index 0000000000..4f65166e37 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp @@ -0,0 +1,131 @@ +#include + +namespace Test { +namespace { + +struct TestIsAsynchFunctor { + Kokkos::View atomic_test; + TestIsAsynchFunctor(Kokkos::View atomic_test_):atomic_test(atomic_test_){} + + KOKKOS_INLINE_FUNCTION + void operator()(const int) const { + Kokkos::atomic_add(&atomic_test(),1.0); + } +}; + +template +void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor) { + + using ExecSpace = TEST_EXECSPACE; + + Kokkos::View result("Result"); + Kokkos::View atomic_test("Atomic"); + int64_t reducer_result, view_result, scalar_result; + + + Kokkos::Timer timer; + + // Establish whether execspace is asynchronous + Kokkos::parallel_for("Test::ReduceDeviceView::TestIsAsynch",Kokkos::RangePolicy(0,1000000), + TestIsAsynchFunctor(atomic_test)); + double time0 = timer.seconds(); + timer.reset(); + ExecSpace::execution_space::fence(); + double time_fence0 = timer.seconds(); + Kokkos::deep_copy(result,0); + timer.reset(); + bool is_async = time0(result)); + double time1 = timer.seconds(); + // Check whether it was asyncronous + timer.reset(); + ExecSpace::execution_space::fence(); + double time_fence1 = timer.seconds(); + Kokkos::deep_copy(reducer_result,result); + Kokkos::deep_copy(result,0); + ASSERT_EQ(N,reducer_result); + timer.reset(); + + + // Test View + Kokkos::parallel_reduce("Test::ReduceDeviceView::TestView",policy, functor, result); + double time2 = timer.seconds(); + // Check whether it was asyncronous + timer.reset(); + ExecSpace::execution_space::fence(); + double time_fence2 = timer.seconds(); + Kokkos::deep_copy(view_result,result); + Kokkos::deep_copy(result,0); + ASSERT_EQ(N,view_result); + timer.reset(); + + + // Test Scalar + Kokkos::parallel_reduce("Test::ReduceDeviceView::TestScalar",policy, functor, scalar_result); + double time3 = timer.seconds(); + + // Check whether it was asyncronous + timer.reset(); + ExecSpace::execution_space::fence(); + double time_fence3 = timer.seconds(); + + ASSERT_EQ(N,scalar_result); + if(is_async) { + ASSERT_TRUE(time1time_fence3); + } + } + +struct RangePolicyFunctor { + KOKKOS_INLINE_FUNCTION + void operator() (const int, int64_t& lsum) const { + lsum += 1; + } +}; + +struct MDRangePolicyFunctor { + KOKKOS_INLINE_FUNCTION + void operator() (const int, const int, const int, int64_t& lsum) const { + lsum += 1; + } +}; + +struct TeamPolicyFunctor { + int M; + TeamPolicyFunctor(int M_):M(M_){} + + KOKKOS_INLINE_FUNCTION + void operator() (const Kokkos::TeamPolicy::member_type& team, int64_t& lsum) const { + for(int i=team.team_rank(); i(0,N),RangePolicyFunctor()); +} + +TEST_F( TEST_CATEGORY, reduce_device_view_mdrange_policy ) +{ + int N=1000*1024*1024; + test_reduce_device_view(N,Kokkos::MDRangePolicy>({0,0,0},{1000,1024,1024}),MDRangePolicyFunctor()); +} + +TEST_F( TEST_CATEGORY, reduce_device_view_team_policy ) +{ + int N=1000*1024*1024; + test_reduce_device_view(N,Kokkos::TeamPolicy(1000*1024,Kokkos::AUTO),TeamPolicyFunctor(1024)); +} + +} // namespace Test + diff --git a/lib/kokkos/core/unit_test/TestReducers.hpp b/lib/kokkos/core/unit_test/TestReducers.hpp index 519e3a80f7..7270ea3375 100644 --- a/lib/kokkos/core/unit_test/TestReducers.hpp +++ b/lib/kokkos/core/unit_test/TestReducers.hpp @@ -477,7 +477,7 @@ struct TestReducers { int reference_loc = -1; for ( int i = 0; i < N; i++ ) { - h_values( i ) = (Scalar) ( rand() % 100000 ); + h_values( i ) = (Scalar) ( rand() % 100000 + 2 ); if ( h_values( i ) < reference_min ) { reference_min = h_values( i ); @@ -485,7 +485,7 @@ struct TestReducers { } else if ( h_values( i ) == reference_min ) { // Make min unique. - h_values( i ) += std::numeric_limits< Scalar >::epsilon(); + h_values( i ) += Scalar(1); } } Kokkos::deep_copy( values, h_values ); @@ -537,7 +537,7 @@ struct TestReducers { int reference_loc = -1; for ( int i = 0; i < N; i++ ) { - h_values( i ) = (Scalar) ( rand() % 100000 ); + h_values( i ) = (Scalar) ( rand() % 100000 + 2 ); if ( h_values( i ) > reference_max ) { reference_max = h_values( i ); @@ -545,7 +545,7 @@ struct TestReducers { } else if ( h_values( i ) == reference_max ) { // Make max unique. - h_values( i ) -= std::numeric_limits< Scalar >::epsilon(); + h_values( i ) -= Scalar(1); } } Kokkos::deep_copy( values, h_values ); @@ -599,7 +599,7 @@ struct TestReducers { int reference_maxloc = -1; for ( int i = 0; i < N; i++ ) { - h_values( i ) = (Scalar) ( rand() % 100000 ); + h_values( i ) = (Scalar) ( rand() % 100000 + 2); } for ( int i = 0; i < N; i++ ) { @@ -609,7 +609,7 @@ struct TestReducers { } else if ( h_values( i ) == reference_max ) { // Make max unique. - h_values( i ) -= std::numeric_limits< Scalar >::epsilon(); + h_values( i ) -= Scalar(1); } } @@ -620,7 +620,7 @@ struct TestReducers { } else if ( h_values( i ) == reference_min ) { // Make min unique. - h_values( i ) += std::numeric_limits< Scalar >::epsilon(); + h_values( i ) += Scalar(1); } } diff --git a/lib/kokkos/core/unit_test/TestScan.hpp b/lib/kokkos/core/unit_test/TestScan.hpp index 5700c21dc6..e021ed09f5 100644 --- a/lib/kokkos/core/unit_test/TestScan.hpp +++ b/lib/kokkos/core/unit_test/TestScan.hpp @@ -69,9 +69,9 @@ struct TestScan { const value_type answer = n & 1 ? ( n * ( ( n + 1 ) / 2 ) ) : ( ( n / 2 ) * ( n + 1 ) ); if ( answer != update ) { - errors()++; + int fail = errors()++; - if ( errors() < 20 ) { + if ( fail < 20 ) { printf( "TestScan(%d,%ld) != %ld\n", iwork, update, answer ); } } @@ -97,6 +97,7 @@ struct TestScan { long long int total = 0; Kokkos::parallel_scan( N, *this, total ); run_check( size_t( ( N+1 )*N/2 ), size_t( total ) ); + check_error(); } TestScan( const WorkSpec & Start , const WorkSpec & N ) @@ -108,6 +109,13 @@ struct TestScan { errors = errors_a; Kokkos::parallel_scan( exec_policy( Start , N ) , *this ); + check_error(); + } + + void check_error() { + int total_errors; + Kokkos::deep_copy(total_errors, errors); + ASSERT_EQ(total_errors,0); } static void test_range( const WorkSpec & begin, const WorkSpec & end ) diff --git a/lib/kokkos/core/unit_test/TestTeam.hpp b/lib/kokkos/core/unit_test/TestTeam.hpp index 2fe615a75a..487a4d581c 100644 --- a/lib/kokkos/core/unit_test/TestTeam.hpp +++ b/lib/kokkos/core/unit_test/TestTeam.hpp @@ -61,7 +61,7 @@ struct TestTeamPolicy { TestTeamPolicy( const size_t league_size ) : m_flags( Kokkos::ViewAllocateWithoutInitializing( "flags" ), - Kokkos::TeamPolicy< ScheduleType, ExecSpace >::team_size_max( *this ), + Kokkos::TeamPolicy< ScheduleType, ExecSpace >(1,1).team_size_max( *this, Kokkos::ParallelReduceTag() ), league_size ) {} struct VerifyInitTag {}; @@ -113,11 +113,14 @@ struct TestTeamPolicy { static void test_for( const size_t league_size ) { TestTeamPolicy functor( league_size ); + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace > policy_type; + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace, VerifyInitTag > policy_type_init; - const int team_size = Kokkos::TeamPolicy< ScheduleType, ExecSpace >::team_size_max( functor ); + const int team_size = policy_type(league_size,1).team_size_max( functor, Kokkos::ParallelForTag() ); + const int team_size_init = policy_type_init(league_size,1).team_size_max( functor, Kokkos::ParallelForTag() ); - Kokkos::parallel_for( Kokkos::TeamPolicy< ScheduleType, ExecSpace >( league_size, team_size ), functor ); - Kokkos::parallel_for( Kokkos::TeamPolicy< ScheduleType, ExecSpace, VerifyInitTag >( league_size, team_size ), functor ); + Kokkos::parallel_for( policy_type( league_size, team_size ), functor ); + Kokkos::parallel_for( policy_type_init( league_size, team_size_init ), functor ); test_small_league_size(); } @@ -142,15 +145,19 @@ struct TestTeamPolicy { { TestTeamPolicy functor( league_size ); - const int team_size = Kokkos::TeamPolicy< ScheduleType, ExecSpace >::team_size_max( functor ); + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace > policy_type; + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace, ReduceTag > policy_type_reduce; + + const int team_size = policy_type_reduce(league_size,1).team_size_max( functor, Kokkos::ParallelReduceTag() ); + const long N = team_size * league_size; long total = 0; - Kokkos::parallel_reduce( Kokkos::TeamPolicy< ScheduleType, ExecSpace >( league_size, team_size ), functor, total ); + Kokkos::parallel_reduce( policy_type( league_size, team_size ), functor, total ); ASSERT_EQ( size_t( ( N - 1 ) * ( N ) ) / 2, size_t( total ) ); - Kokkos::parallel_reduce( Kokkos::TeamPolicy< ScheduleType, ExecSpace, ReduceTag >( league_size, team_size ), functor, total ); + Kokkos::parallel_reduce( policy_type_reduce( league_size, team_size ), functor, total ); ASSERT_EQ( ( size_t( N ) * size_t( N + 1 ) ) / 2, size_t( total ) ); } }; @@ -177,8 +184,10 @@ public: const size_type nwork; + KOKKOS_INLINE_FUNCTION ReduceTeamFunctor( const size_type & arg_nwork ) : nwork( arg_nwork ) {} + KOKKOS_INLINE_FUNCTION ReduceTeamFunctor( const ReduceTeamFunctor & rhs ) : nwork( rhs.nwork ) {} KOKKOS_INLINE_FUNCTION @@ -244,10 +253,12 @@ public: const unsigned long nsum = nw % 2 ? nw * ( ( nw + 1 ) / 2 ) : ( nw / 2 ) * ( nw + 1 ); - const unsigned team_size = policy_type::team_size_recommended( functor_type( nwork ) ); + policy_type team_exec( nw, 1 ); + + const unsigned team_size = team_exec.team_size_recommended( functor_type( nwork ), Kokkos::ParallelReduceTag() ); const unsigned league_size = ( nwork + team_size - 1 ) / team_size; - policy_type team_exec( league_size, team_size ); + team_exec = policy_type( league_size, team_size ); for ( unsigned i = 0; i < Repeat; ++i ) { result_type tmp( & result[i] ); @@ -370,7 +381,8 @@ public: functor_type functor; - policy_type team_exec( nteam, policy_type::team_size_max( functor ) ); + policy_type team_exec( nteam, 1); + team_exec = policy_type(nteam, team_exec.team_size_max(functor, Kokkos::ParallelReduceTag())); for ( unsigned i = 0; i < Repeat; ++i ) { long int accum = 0; @@ -475,7 +487,8 @@ struct TestSharedTeam { typedef Test::SharedTeamFunctor Functor; typedef Kokkos::View< typename Functor::value_type, Kokkos::HostSpace, Kokkos::MemoryUnmanaged > result_type; - const size_t team_size = Kokkos::TeamPolicy< ScheduleType, ExecSpace >::team_size_max( Functor() ); + const size_t team_size = Kokkos::TeamPolicy< ScheduleType, ExecSpace >(8192, 1).team_size_max( Functor(), + Kokkos::ParallelReduceTag() ); Kokkos::TeamPolicy< ScheduleType, ExecSpace > team_exec( 8192 / team_size, team_size ); @@ -648,16 +661,20 @@ struct TestScratchTeam { typedef Kokkos::View< typename Functor::value_type, Kokkos::HostSpace, Kokkos::MemoryUnmanaged > result_type; typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace > p_type; - const size_t team_size = p_type::team_size_max( Functor() ); - - p_type team_exec( 8192 / team_size, team_size ); typename Functor::value_type error_count = 0; + int thread_scratch_size = Functor::shared_int_array_type::shmem_size( Functor::SHARED_THREAD_COUNT ); + + p_type team_exec = p_type(8192,1).set_scratch_size( 1, Kokkos::PerTeam( Functor::shared_int_array_type::shmem_size( Functor::SHARED_TEAM_COUNT ) ), + Kokkos::PerThread( thread_scratch_size + 3*sizeof(int))); + + const size_t team_size = team_exec.team_size_max( Functor(), Kokkos::ParallelReduceTag() ); + int team_scratch_size = Functor::shared_int_array_type::shmem_size( Functor::SHARED_TEAM_COUNT ) + Functor::shared_int_array_type::shmem_size( 3 * team_size ); - int thread_scratch_size = Functor::shared_int_array_type::shmem_size( Functor::SHARED_THREAD_COUNT ); + team_exec = p_type(8192 / team_size, team_size ); Kokkos::parallel_reduce( team_exec.set_scratch_size( 1, Kokkos::PerTeam( team_scratch_size ), Kokkos::PerThread( thread_scratch_size ) ), @@ -956,7 +973,7 @@ struct TestShmemSize { size_t size = view_type::shmem_size( d1, d2, d3 ); - ASSERT_EQ( size, d1 * d2 * d3 * sizeof( long ) ); + ASSERT_EQ( size, (d1 * d2 * d3 + 1)* sizeof( long ) ); test_layout_stride(); } @@ -973,3 +990,123 @@ struct TestShmemSize { }; } // namespace Test + +/*--------------------------------------------------------------------------*/ + +namespace Test { + +namespace { + +template< class ExecSpace, class ScheduleType > +struct TestTeamBroadcast { + typedef typename Kokkos::TeamPolicy< ScheduleType, ExecSpace >::member_type team_member; + + TestTeamBroadcast( const size_t league_size ) {} + + struct BroadcastTag {}; + + typedef long value_type; + + KOKKOS_INLINE_FUNCTION + void operator()( const team_member &teamMember, value_type &update ) const + { + int lid = teamMember.league_rank(); + int tid = teamMember.team_rank(); + int ts = teamMember.team_size(); + + value_type parUpdate = 0; + value_type value = tid * 3 + 1; + + teamMember.team_broadcast(value, lid%ts); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( teamMember, ts ), [&] ( const int j, value_type &teamUpdate ) { + teamUpdate += value; + }, parUpdate ); + + if ( teamMember.team_rank() == 0 ) update += parUpdate; + } + + KOKKOS_INLINE_FUNCTION + void operator()( const BroadcastTag &, const team_member &teamMember, value_type &update ) const + { + int lid = teamMember.league_rank(); + int tid = teamMember.team_rank(); + int ts = teamMember.team_size(); + + value_type parUpdate = 0; + value_type value = tid * 3 + 1; + + teamMember.team_broadcast([&] (value_type & var) { var*=2; }, value, lid%ts); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( teamMember, ts ), [&] ( const int j, value_type &teamUpdate ) { + teamUpdate += value; + }, parUpdate ); + + if ( teamMember.team_rank() == 0 ) update += parUpdate; + } + + static void test_teambroadcast( const size_t league_size ) + { + TestTeamBroadcast functor( league_size ); + + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace > policy_type; + typedef Kokkos::TeamPolicy< ScheduleType, ExecSpace, BroadcastTag > policy_type_f; + + const int team_size = policy_type_f(league_size,1).team_size_max( functor, Kokkos::ParallelReduceTag() ); //printf("team_size=%d\n",team_size); + + //team_broadcast with value + long total = 0; + + Kokkos::parallel_reduce( policy_type( league_size, team_size ), functor, total ); + + value_type expected_result = 0; + for (unsigned int i=0; i +struct TestScratchAlignment { + struct TestScalar { + double x,y,z; + }; + TestScratchAlignment() { + test(true); + test(false); + } + typedef Kokkos::View ScratchView; + typedef Kokkos::View ScratchViewInt; + void test(bool allocate_small) { + int shmem_size = ScratchView::shmem_size(11); + if(allocate_small) shmem_size += ScratchViewInt::shmem_size(1); + Kokkos::parallel_for(Kokkos::TeamPolicy(1,1).set_scratch_size(0,Kokkos::PerTeam(shmem_size)), + KOKKOS_LAMBDA (const typename Kokkos::TeamPolicy::member_type& team) { + if(allocate_small) ScratchViewInt p(team.team_scratch(0),1); + ScratchView a(team.team_scratch(0),11); + if(ptrdiff_t(a.data())%sizeof(TestScalar)!=0) + Kokkos::abort("Error: invalid scratch view alignment\n"); + }); + Kokkos::fence(); + } +}; + +} // namespace + +} // namespace Test + +/*--------------------------------------------------------------------------*/ diff --git a/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp b/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp new file mode 100644 index 0000000000..f9d5add5d0 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp @@ -0,0 +1,146 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include +#include + +#include + +namespace Test { + +namespace { + template + class MyArray { + public: + T values[N]; + KOKKOS_INLINE_FUNCTION + void operator+= (const MyArray& src) { for(int i=0; i + struct FunctorFor { + double static_array[S]; + KOKKOS_INLINE_FUNCTION + void operator() (const typename PolicyType::member_type& team) const { + } + }; + template + struct FunctorReduce { + double static_array[S]; + KOKKOS_INLINE_FUNCTION + void operator() (const typename PolicyType::member_type& team, MyArray& lval) const { + for(int j=0; j policy_type; +typedef Kokkos::TeamPolicy > policy_type_128_8; +typedef Kokkos::TeamPolicy > policy_type_1024_2; + +template +void test_team_policy_max_recommended_static_size(int scratch_size) { + PolicyType p = PolicyType(10000, Kokkos::AUTO, 4).set_scratch_size(0,Kokkos::PerTeam(scratch_size)); + int team_size_max_for = p.team_size_max(FunctorFor(),Kokkos::ParallelForTag()); + int team_size_rec_for = p.team_size_recommended(FunctorFor(),Kokkos::ParallelForTag()); + int team_size_max_reduce = p.team_size_max(FunctorReduce(),Kokkos::ParallelReduceTag()); + int team_size_rec_reduce = p.team_size_recommended(FunctorReduce(),Kokkos::ParallelReduceTag()); + + ASSERT_TRUE( team_size_max_for >= team_size_rec_for ); + ASSERT_TRUE( team_size_max_reduce >= team_size_rec_reduce ); + ASSERT_TRUE( team_size_max_for >= team_size_max_reduce ); + + Kokkos::parallel_for(PolicyType(10000, team_size_max_for, 4).set_scratch_size(0,Kokkos::PerTeam(scratch_size)), + FunctorFor()); + Kokkos::parallel_for(PolicyType(10000, team_size_rec_for, 4).set_scratch_size(0,Kokkos::PerTeam(scratch_size)), + FunctorFor()); + MyArray val; + Kokkos::parallel_reduce(PolicyType(10000, team_size_max_reduce, 4).set_scratch_size(0,Kokkos::PerTeam(scratch_size)), + FunctorReduce(),val); + Kokkos::parallel_reduce(PolicyType(10000, team_size_rec_reduce, 4).set_scratch_size(0,Kokkos::PerTeam(scratch_size)), + FunctorReduce(),val); + Kokkos::fence(); +} + +template +void test_team_policy_max_recommended(int scratch_size) { + test_team_policy_max_recommended_static_size(scratch_size); + test_team_policy_max_recommended_static_size(scratch_size); +} + +TEST_F( TEST_CATEGORY, team_policy_max_recommended ) +{ + int max_scratch_size = policy_type::scratch_size_max(0); + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3); + test_team_policy_max_recommended(max_scratch_size); + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3/8); + test_team_policy_max_recommended(max_scratch_size/8); + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3/2); + test_team_policy_max_recommended(max_scratch_size/2); + + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3); + test_team_policy_max_recommended(max_scratch_size); + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3/8); + test_team_policy_max_recommended(max_scratch_size/8); + test_team_policy_max_recommended(0); + test_team_policy_max_recommended(max_scratch_size/3/2); + test_team_policy_max_recommended(max_scratch_size/2); +} + + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/TestTeamVector.hpp b/lib/kokkos/core/unit_test/TestTeamVector.hpp index 783fde600b..294247a78d 100644 --- a/lib/kokkos/core/unit_test/TestTeamVector.hpp +++ b/lib/kokkos/core/unit_test/TestTeamVector.hpp @@ -227,14 +227,13 @@ struct functor_team_for { functor_team_for( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { - typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; - typedef typename shared_int::size_type size_type; - + typedef typename shmem_space::size_type size_type; const size_type shmemSize = team.team_size() * 13; shared_int values = shared_int( team.team_shmem(), shmemSize ); @@ -290,7 +289,9 @@ struct functor_team_reduce { functor_team_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { @@ -333,7 +334,9 @@ struct functor_team_reduce_reducer { functor_team_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { @@ -376,12 +379,12 @@ struct functor_team_vector_for { functor_team_vector_for( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { - typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; typedef typename shared_int::size_type size_type; const size_type shmemSize = team.team_size() * 13; @@ -442,7 +445,9 @@ struct functor_team_vector_reduce { Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; functor_team_vector_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { @@ -485,7 +490,9 @@ struct functor_team_vector_reduce_reducer { functor_team_vector_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { @@ -568,12 +575,12 @@ struct functor_vec_for { functor_vec_for( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} - unsigned team_shmem_size( int team_size ) const { return team_size * 13 * sizeof( Scalar ) + 8; } + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { - typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; shared_int values = shared_int( team.team_shmem(), team.team_size() * 13 ); @@ -739,23 +746,16 @@ bool test_scalar( int nteams, int team_size, int test ) { functor_vec_red< Scalar, ExecutionSpace >( d_flag ) ); } else if ( test == 1 ) { - // WORKAROUND ROCM/CUDA + // WORKAROUND CUDA #if defined(KOKKOS_ENABLE_CUDA) #if defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) || defined(KOKKOS_ARCH_PASCAL) if(!std::is_same::value) #endif #endif - #if defined(KOKKOS_ENABLE_ROCM) - if(!std::is_same::value) - #endif Kokkos::parallel_for( Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), functor_vec_red_reducer< Scalar, ExecutionSpace >( d_flag ) ); } else if ( test == 2 ) { - // WORKAROUND ROCM - #if defined(KOKKOS_ENABLE_ROCM) - if(!std::is_same::value) - #endif Kokkos::parallel_for( Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), functor_vec_scan< Scalar, ExecutionSpace >( d_flag ) ); } @@ -776,10 +776,6 @@ bool test_scalar( int nteams, int team_size, int test ) { functor_team_reduce< Scalar, ExecutionSpace >( d_flag ) ); } else if ( test == 7 ) { - // WORKAROUND ROCM - #if defined(KOKKOS_ENABLE_ROCM) - if(!std::is_same::value) - #endif Kokkos::parallel_for( Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size ), functor_team_reduce_reducer< Scalar, ExecutionSpace >( d_flag ) ); } @@ -792,10 +788,6 @@ bool test_scalar( int nteams, int team_size, int test ) { functor_team_vector_reduce< Scalar, ExecutionSpace >( d_flag ) ); } else if ( test == 10 ) { - // WORKAROUND ROCM - #if defined(KOKKOS_ENABLE_ROCM) - if(!std::is_same::value) - #endif Kokkos::parallel_for( Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), functor_team_vector_reduce_reducer< Scalar, ExecutionSpace >( d_flag ) ); } @@ -955,28 +947,22 @@ TEST_F( TEST_CATEGORY, triple_nested_parallelism ) // With KOKKOS_DEBUG enabled, the functor uses too many registers to run // with a team size of 32 on GPUs, 16 is the max possible (at least on a K80 GPU) // See https://github.com/kokkos/kokkos/issues/1513 -#if defined(KOKKOS_DEBUG) && defined(KOKKOS_ENABLE_CUDA) +#if defined(KOKKOS_ENABLE_DEBUG) && defined(KOKKOS_ENABLE_CUDA) if (!std::is_same::value) { #endif #ifdef KOKKOS_ENABLE_ROCM // ROCm doesn't support TeamSize 32x32 - if (!std::is_same::value) { + if (!std::is_same::value) #endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 32, 32 ); -#ifdef KOKKOS_ENABLE_ROCM - } -#endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 32, 16 ); -#if defined(KOKKOS_DEBUG) && defined(KOKKOS_ENABLE_CUDA) +#if defined(KOKKOS_ENABLE_DEBUG) && defined(KOKKOS_ENABLE_CUDA) } #endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 16 ); #ifdef KOKKOS_ENABLE_ROCM // ROCm doesn't support team sizes not powers of two - if (!std::is_same::value) { + if (!std::is_same::value) #endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 7, 16 ); -#ifdef KOKKOS_ENABLE_ROCM - } -#endif } #endif diff --git a/lib/kokkos/core/unit_test/TestViewAPI_a.hpp b/lib/kokkos/core/unit_test/TestViewAPI_a.hpp index efc9ab27b6..ba74331c51 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_a.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_a.hpp @@ -45,11 +45,9 @@ namespace Test { -#if !defined(KOKKOS_ENABLE_ROCM) TEST_F( TEST_CATEGORY, view_api_a ) { TestViewAPI< double, TEST_EXECSPACE >::run_test(); } -#endif } diff --git a/lib/kokkos/core/unit_test/TestViewAPI_b.hpp b/lib/kokkos/core/unit_test/TestViewAPI_b.hpp index e006dd9b60..03b41db516 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_b.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_b.hpp @@ -45,13 +45,11 @@ namespace Test { -#if !defined(KOKKOS_ENABLE_ROCM) TEST_F( TEST_CATEGORY, view_api_b ) { TestViewAPI< double, TEST_EXECSPACE >::run_test_view_operator_a(); TestViewAPI< double, TEST_EXECSPACE >::run_test_mirror(); TestViewAPI< double, TEST_EXECSPACE >::run_test_scalar(); } -#endif } diff --git a/lib/kokkos/core/unit_test/TestViewAPI_c.hpp b/lib/kokkos/core/unit_test/TestViewAPI_c.hpp index a0f03ff181..d34ae6340e 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_c.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_c.hpp @@ -45,12 +45,10 @@ namespace Test { -#if !defined(KOKKOS_ENABLE_ROCM) TEST_F( TEST_CATEGORY, view_api_c ) { TestViewAPI< double, TEST_EXECSPACE >::run_test_deep_copy_empty(); TestViewAPI< double, TEST_EXECSPACE >::run_test_view_operator_b(); } -#endif } diff --git a/lib/kokkos/core/unit_test/TestViewAPI_d.hpp b/lib/kokkos/core/unit_test/TestViewAPI_d.hpp index b984df98b4..38e10381f2 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_d.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_d.hpp @@ -45,7 +45,6 @@ namespace Test { -#if !defined(KOKKOS_ENABLE_ROCM) TEST_F( TEST_CATEGORY, view_api_d ) { TestViewAPI< double, TEST_EXECSPACE >::run_test_const(); @@ -54,6 +53,5 @@ TEST_F( TEST_CATEGORY, view_api_d ) TestViewAPI< double, TEST_EXECSPACE >::run_test_vector(); TestViewAPI< double, TEST_EXECSPACE >::run_test_view_operator_c(); } -#endif } diff --git a/lib/kokkos/core/unit_test/TestViewCopy.hpp b/lib/kokkos/core/unit_test/TestViewCopy.hpp new file mode 100644 index 0000000000..7eab9daa11 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestViewCopy.hpp @@ -0,0 +1,155 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include + +#include + +namespace Test { + +namespace { + +template < typename ExecSpace > +struct TestViewCopy { + + using InExecSpace = ExecSpace; + + static void test_view_copy() + { +#if defined( KOKKOS_ENABLE_CUDA ) || defined( KOKKOS_ENABLE_ROCM ) + // ExecSpace = CudaUVM, CudaHostPinned + // This test will fail at runtime with an illegal memory access if something goes wrong + // Test 1: deep_copy from host_mirror_space to ExecSpace and ExecSpace back to host_mirror_space + { + const int dim0 = 4; + const int dim1 = 2; + const int dim2 = 3; + + typedef Kokkos::View Rank4ViewType; + Rank4ViewType view_4; + view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); + + typedef typename Kokkos::Impl::is_space::host_mirror_space::execution_space host_space_type; + Kokkos::View srcView("srcView", dim2, dim2); + + // Strided dst view + auto dstView = Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); + + // host_mirror_space to ExecSpace + Kokkos::deep_copy( dstView, srcView ); + Kokkos::fence(); + + // ExecSpace to host_mirror_space + Kokkos::deep_copy( srcView, dstView ); + Kokkos::fence(); + } + + // Test 2: deep_copy from Cuda to ExecSpace and ExecSpace back to Cuda + { + const int dim0 = 4; + const int dim1 = 2; + const int dim2 = 3; + + typedef Kokkos::View Rank4ViewType; + Rank4ViewType view_4; + view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); + +#if defined( KOKKOS_ENABLE_CUDA ) + typedef Kokkos::Cuda space_type; +#endif +#if defined( KOKKOS_ENABLE_ROCM ) + typedef Kokkos::Experimental::ROCm space_type; +#endif + Kokkos::View srcView("srcView", dim2, dim2); + + // Strided dst view + auto dstView = Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); + + // Cuda to ExecSpace + Kokkos::deep_copy( dstView, srcView ); + Kokkos::fence(); + + // ExecSpace to Cuda + Kokkos::deep_copy( srcView, dstView ); + Kokkos::fence(); + } + + // Test 3: deep_copy from host_space to ExecSpace and ExecSpace back to host_space + { + const int dim0 = 4; + const int dim1 = 2; + const int dim2 = 3; + + typedef Kokkos::View Rank4ViewType; + Rank4ViewType view_4; + view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); + + typedef Kokkos::HostSpace host_space_type; + Kokkos::View srcView("srcView", dim2, dim2); + + // Strided dst view + auto dstView = Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); + + // host_space to ExecSpace + Kokkos::deep_copy( dstView, srcView ); + Kokkos::fence(); + + // ExecSpace to host_space + Kokkos::deep_copy( srcView, dstView ); + Kokkos::fence(); + } +#endif + } // end test_view_copy + +}; // end struct + +} // namespace + +TEST_F( TEST_CATEGORY , view_copy_tests ) { + //Only include this file to be compiled with CudaUVM and CudaHostPinned + TestViewCopy< TEST_EXECSPACE >::test_view_copy(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp b/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp new file mode 100644 index 0000000000..3185fa5473 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp @@ -0,0 +1,740 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include +#include + +#include + +namespace Test { + +TEST_F( TEST_CATEGORY , view_layoutstride_left_to_layoutleft_assignment ) +{ + typedef TEST_EXECSPACE exec_space ; + + auto t = time(0); + srand(t);// Use current time as seed for random generator + printf("view_layoutstride_left_to_layoutleft_assignment: srand(%lu)\n",size_t(t)); + + { // Assignment of rank-1 LayoutLeft = LayoutStride + int ndims = 1; + int dims [] = {10}; + int order [] = {0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double**, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double**, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double***, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double***, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double****, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double****, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*****, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*****, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double******, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double******, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*******, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*******, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double********, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double********, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double**, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double**, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double***, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double***, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double****, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double****, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*****, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*****, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double******, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double******, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*******, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double*******, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double********, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst = src; + + Kokkos::View< double********, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double*, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst; + + dst = src; + + Kokkos::View< double*, Kokkos::LayoutLeft, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double**, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-3 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 3; + int dims [] = {10,9,8}; + int order [] = {2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double***, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double***, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-4 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 4; + int dims [] = {10,9,8,7}; + int order [] = {3,2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double****, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double****, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-5 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 5; + int dims [] = {10,9,8,7,6}; + int order [] = {4,3,2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*****, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*****, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-6 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 6; + int dims [] = {10,9,8,7,6,5}; + int order [] = {5,4,3,2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double******, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double******, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-7 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 7; + int dims [] = {10,9,8,7,6,5,4}; + int order [] = {6,5,4,3,2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*******, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*******, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-8 LayoutLeft = LayoutStride (LayoutRight compatible) + int ndims = 8; + int dims [] = {10,9,8,7,6,5,4,3}; + int order [] = {7,6,5,4,3,2,1,0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double********, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double********, Kokkos::LayoutLeft, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + +} + +TEST_F( TEST_CATEGORY , view_layoutstride_left_to_layoutright_assignment ) +{ + typedef TEST_EXECSPACE exec_space ; + + auto t = time(0); + srand(t);// Use current time as seed for random generator + printf("view_layoutstride_left_to_layoutright_assignment: srand(%lu)\n",size_t(t)); + + { // Assignment of rank-1 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 1; + int dims [] = {10}; + int order [] = {0}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*, Kokkos::LayoutStride, exec_space >::HostMirror h_src = Kokkos::create_mirror_view( src ); + + for(size_t i=0; i dst; + + dst = src; + + Kokkos::View< double*, Kokkos::LayoutRight, exec_space >::HostMirror h_dst = Kokkos::create_mirror_view( dst ); + + Kokkos::deep_copy( h_dst, dst ); + + bool test = true; + for(size_t i=0; i src("LayoutStride", layout); + + Kokkos::View< double**, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-3 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 3; + int dims [] = {10,9,8}; + int order [] = {0,1,2}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double***, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double***, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-4 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 4; + int dims [] = {10,9,8,7}; + int order [] = {0,1,2,3}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double****, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double****, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-5 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 5; + int dims [] = {10,9,8,7,6}; + int order [] = {0,1,2,3,4}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*****, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*****, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-6 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 6; + int dims [] = {10,9,8,7,6,5}; + int order [] = {0,1,2,3,4,5}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double******, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double******, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-7 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 7; + int dims [] = {10,9,8,7,6,5,4}; + int order [] = {0,1,2,3,4,5,6}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double*******, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double*******, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + { // Assignment of rank-8 LayoutRight = LayoutStride (LayoutLeft compatible) + int ndims = 8; + int dims [] = {10,9,8,7,6,5,4,3}; + int order [] = {0,1,2,3,4,5,6,7}; + Kokkos::LayoutStride layout = Kokkos::LayoutStride::order_dimensions(ndims, order, dims); + Kokkos::View< double********, Kokkos::LayoutStride, exec_space > src("LayoutStride", layout); + + Kokkos::View< double********, Kokkos::LayoutRight, exec_space > dst; + + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + ASSERT_DEATH({dst=src;}, "View assignment must have compatible layouts"); + } + +} + +} + diff --git a/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp b/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp new file mode 100644 index 0000000000..e765e8b06d --- /dev/null +++ b/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp @@ -0,0 +1,1215 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include + +#include +#include + +#include +#include + +namespace Test { + +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +namespace { + +template +struct TestViewLayoutTiled { + + typedef double Scalar; + + static constexpr int T0 = 2; + static constexpr int T1 = 4; + static constexpr int T2 = 4; + static constexpr int T3 = 2; + static constexpr int T4 = 2; + static constexpr int T5 = 2; + static constexpr int T6 = 2; + static constexpr int T7 = 2; + + // Rank 2 + typedef Kokkos::Experimental::LayoutTiled LayoutLL_2D_2x4; + typedef Kokkos::Experimental::LayoutTiled LayoutRL_2D_2x4; + typedef Kokkos::Experimental::LayoutTiled LayoutLR_2D_2x4; + typedef Kokkos::Experimental::LayoutTiled LayoutRR_2D_2x4; + + // Rank 3 + typedef Kokkos::Experimental::LayoutTiled LayoutLL_3D_2x4x4; + typedef Kokkos::Experimental::LayoutTiled LayoutRL_3D_2x4x4; + typedef Kokkos::Experimental::LayoutTiled LayoutLR_3D_2x4x4; + typedef Kokkos::Experimental::LayoutTiled LayoutRR_3D_2x4x4; + + // Rank 4 + typedef Kokkos::Experimental::LayoutTiled LayoutLL_4D_2x4x4x2; + typedef Kokkos::Experimental::LayoutTiled LayoutRL_4D_2x4x4x2; + typedef Kokkos::Experimental::LayoutTiled LayoutLR_4D_2x4x4x2; + typedef Kokkos::Experimental::LayoutTiled LayoutRR_4D_2x4x4x2; + + + static void test_view_layout_tiled_2d( const int N0, const int N1 ) + { +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + const int FT = T0*T1; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + // Test create_mirror_view, deep_copy + // Create LL View + { + typedef typename Kokkos::View< Scalar**, LayoutLL_2D_2x4, ExecSpace > ViewType; + ViewType v("v", N0, N1); + + typename ViewType::HostMirror hv = Kokkos::create_mirror_view(v); + + // Initialize host-view + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + hv(ti*T0 + i, tj*T1+j) = ( ti + tj*NT0 )*FT + ( i + j*T0 ); + } } + } } + + // copy to device + Kokkos::deep_copy(v, hv); + + Kokkos::MDRangePolicy< Kokkos::Rank<2, Kokkos::Iterate::Left, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0}, {NT0, NT1}, {T0,T1} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 2 LL", mdrangepolicy, + KOKKOS_LAMBDA (const int ti, const int tj) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( (ti*T0 + i < N0) && (tj*T1 + j < N1) ) { v(ti*T0 + i, tj*T1+j) += 1; } + } } + }); + + Kokkos::deep_copy(hv, v); + + long counter_subview = 0; + long counter_inc = 0; + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( hv, ti, tj ); + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j) != hv(ti*T0+i, tj*T1+j) ) { ++counter_subview; } + if ( tile_subview(i,j) != (( ti + tj*NT0 )*FT + ( i + j*T0 ) + 1 )) { ++counter_inc; } + } } + } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } + + // Create RL View + { + typedef typename Kokkos::View< Scalar**, LayoutRL_2D_2x4, ExecSpace > ViewType; + Kokkos::View< Scalar**, LayoutRL_2D_2x4, ExecSpace > v("v", N0, N1); + + typename ViewType::HostMirror hv = Kokkos::create_mirror_view(v); + + // Initialize host-view + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + hv(ti*T0 + i, tj*T1+j) = ( ti*NT1 + tj )*FT + ( i + j*T0 ); + } } + } } + + // copy to device + Kokkos::deep_copy(v, hv); + + Kokkos::MDRangePolicy< Kokkos::Rank<2, Kokkos::Iterate::Right, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0}, {NT0, NT1}, {T0,T1} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 2 RL", mdrangepolicy, + KOKKOS_LAMBDA (const int ti, const int tj) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( (ti*T0 + i < N0) && (tj*T1 + j < N1) ) { v(ti*T0 + i, tj*T1+j) += 1; } + } } + }); + + Kokkos::deep_copy(hv, v); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + auto tile_subview = Kokkos::tile_subview( hv, ti, tj ); + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j) != hv(ti*T0+i, tj*T1+j) ) { ++counter_subview; } + if ( tile_subview(i,j) != (( ti*NT1 + tj )*FT + ( i + j*T0 ) + 1 )) { ++counter_inc; } + } } + } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create LR View + { + typedef typename Kokkos::View< Scalar**, LayoutLR_2D_2x4, ExecSpace > ViewType; + Kokkos::View< Scalar**, LayoutLR_2D_2x4, ExecSpace > v("v", N0, N1); + + typename ViewType::HostMirror hv = Kokkos::create_mirror_view(v); + + // Initialize host-view + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + hv(ti*T0 + i, tj*T1+j) = ( ti + tj*NT0 )*FT + ( i*T1 + j ); + } } + } } + + // copy to device + Kokkos::deep_copy(v, hv); + + Kokkos::MDRangePolicy< Kokkos::Rank<2, Kokkos::Iterate::Left, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0}, {NT0, NT1}, {T0,T1} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 2 LR", mdrangepolicy, + KOKKOS_LAMBDA (const int ti, const int tj) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( (ti*T0 + i < N0) && (tj*T1 + j < N1) ) { v(ti*T0 + i, tj*T1+j) += 1; } + } } + }); + + Kokkos::deep_copy(hv, v); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( hv, ti, tj ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + if ( tile_subview(i,j) != hv(ti*T0+i, tj*T1+j) ) { ++counter_subview; } + if ( tile_subview(i,j) != ( ( ti + tj*NT0 )*FT + ( i*T1 + j ) + 1 ) ) { ++counter_inc; } + } } + } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create RR View + { + typedef typename Kokkos::View< Scalar**, LayoutRR_2D_2x4, ExecSpace > ViewType; + Kokkos::View< Scalar**, LayoutRR_2D_2x4, ExecSpace > v("v", N0, N1); + + typename ViewType::HostMirror hv = Kokkos::create_mirror_view(v); + + // Initialize host-view + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + hv(ti*T0 + i, tj*T1+j) = ( ti*NT1 + tj )*FT + ( i*T1 + j ); + } } + } } + + // copy to device + Kokkos::deep_copy(v, hv); + + Kokkos::MDRangePolicy< Kokkos::Rank<2, Kokkos::Iterate::Left, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0}, {NT0, NT1}, {T0,T1} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 2 LR", mdrangepolicy, + KOKKOS_LAMBDA (const int ti, const int tj) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( (ti*T0 + i < N0) && (tj*T1 + j < N1) ) { v(ti*T0 + i, tj*T1+j) += 1; } + } } + }); + + Kokkos::deep_copy(hv, v); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + auto tile_subview = Kokkos::tile_subview( hv, ti, tj ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + if ( tile_subview(i,j) != hv(ti*T0+i, tj*T1+j) ) { ++counter_subview; } + if ( tile_subview(i,j) != ( ( ti*NT1 + tj )*FT + ( i*T1 + j ) + 1 ) ) { ++counter_inc; } + } } + } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope +#endif +#endif + } // end test_view_layout_tiled_2d + + + static void test_view_layout_tiled_3d( const int N0, const int N1, const int N2 ) + { +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + + const int FT = T0*T1*T2; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + const int NT2 = int( std::ceil( N2 / T2 ) ); + + // Create LL View + { + typedef Kokkos::View< Scalar***, LayoutLL_3D_2x4x4, ExecSpace > ViewType; + Kokkos::View< Scalar***, LayoutLL_3D_2x4x4, ExecSpace > dv("dv", N0, N1, N2); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti + tj*NT0 + tk*N0*N1 )*FT + ( i + j*T0 + k*T0*T1 ); + } } } + } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<3, Kokkos::Iterate::Left, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0,0}, {N0,N1,N2}, {T0,T1,T2} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 3 LL", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k) { + dv(i,j,k) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter_subview; } + if ( tile_subview(i,j,k) != ( ( ti + tj*NT0 + tk*N0*N1 )*FT + ( i + j*T0 + k*T0*T1 ) + 1 ) ) { ++counter_inc; } + } } } + } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create RL View + { + typedef Kokkos::View< Scalar***, LayoutRL_3D_2x4x4, ExecSpace > ViewType; + Kokkos::View< Scalar***, LayoutRL_3D_2x4x4, ExecSpace > dv("dv", N0, N1, N2); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i + j*T0 + k*T0*T1 ); + } } } + } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<3, Kokkos::Iterate::Right, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0,0}, {N0,N1,N2}, {T0,T1,T2} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 3 RL", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k) { + dv(i,j,k) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter_subview; } + if ( tile_subview(i,j,k) != ( ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i + j*T0 + k*T0*T1 ) + 1 ) ) { ++counter_inc; } + } } } + } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create LR View + { + typedef Kokkos::View< Scalar***, LayoutLR_3D_2x4x4, ExecSpace > ViewType; + Kokkos::View< Scalar***, LayoutLR_3D_2x4x4, ExecSpace > dv("dv", N0, N1, N2); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti + tj*NT0 + tk*NT0*NT1 )*FT + ( i*T1*T2 + j*T2 + k ); + } } } + } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<3, Kokkos::Iterate::Left, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0,0}, {N0,N1,N2}, {T0,T1,T2} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 3 LR", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k) { + dv(i,j,k) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter_subview; } + if ( tile_subview(i,j,k) != ( ( ti + tj*NT0 + tk*NT0*NT1 )*FT + ( i*T1*T2 + j*T2 + k ) + 1 ) ) { ++counter_inc; } + } } } + } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create RR View + { + typedef Kokkos::View< Scalar***, LayoutRR_3D_2x4x4, ExecSpace > ViewType; + Kokkos::View< Scalar***, LayoutRR_3D_2x4x4, ExecSpace > dv("dv", N0, N1, N2); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i*T1*T2 + j*T2 + k ); + } } } + } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<3, Kokkos::Iterate::Right, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0,0}, {N0,N1,N2}, {T0,T1,T2} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 3 RR", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k) { + dv(i,j,k) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter_subview; } + if ( tile_subview(i,j,k) != ( ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i*T1*T2 + j*T2 + k ) + 1 ) ) { ++counter_inc; } + } } } + } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope +#endif +#endif + } // end test_view_layout_tiled_3d + + + static void test_view_layout_tiled_4d( const int N0, const int N1, const int N2, const int N3 ) + { +#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) +#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION ) + const int FT = T0*T1*T2*T3; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + const int NT2 = int( std::ceil( N2 / T2 ) ); + const int NT3 = int( std::ceil( N3 / T3 ) ); + + // Create LL View + { + typedef Kokkos::View< Scalar****, LayoutLL_4D_2x4x4x2, ExecSpace > ViewType; + Kokkos::View< Scalar****, LayoutLL_4D_2x4x4x2, ExecSpace > dv("dv", N0, N1, N2, N3); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti + tj*NT0 + tk*N0*N1 + tl*N0*N1*N2 )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ); + } } } } + } } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<4, Kokkos::Iterate::Left, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0,0,0}, {N0,N1,N2,N3}, {T0,T1,T2,T3} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 4 LL", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k, const int l) { + dv(i,j,k,l) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter_subview; } + if ( tile_subview(i,j,k,l) != ( ( ti + tj*NT0 + tk*N0*N1 + tl*N0*N1*N2 )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ) + 1 ) ) { ++counter_inc; } + } } } } + } } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create RL View + { + typedef Kokkos::View< Scalar****, LayoutRL_4D_2x4x4x2, ExecSpace > ViewType; + Kokkos::View< Scalar****, LayoutRL_4D_2x4x4x2, ExecSpace > dv("dv", N0, N1, N2, N3); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti*NT1*NT2*N3 + tj*NT2*N3 + tk*N3 + tl )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ); + } } } } + } } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<4, Kokkos::Iterate::Right, Kokkos::Iterate::Left>, ExecSpace > mdrangepolicy( {0,0,0,0}, {N0,N1,N2,N3}, {T0,T1,T2,T3} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 4 RL", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k, const int l) { + dv(i,j,k,l) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter_subview; } + if ( tile_subview(i,j,k,l) != ( ( ti*NT1*NT2*N3 + tj*NT2*N3 + tk*N3 + tl )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ) + 1 ) ) { ++counter_inc; } + } } } } + } } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create LR View + { + typedef Kokkos::View< Scalar****, LayoutLR_4D_2x4x4x2, ExecSpace > ViewType; + Kokkos::View< Scalar****, LayoutLR_4D_2x4x4x2, ExecSpace > dv("dv", N0, N1, N2, N3); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti + tj*NT0 + tk*NT0*NT1 + tl*NT0*NT1*NT2 )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ); + } } } } + } } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<4, Kokkos::Iterate::Left, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0,0,0}, {N0,N1,N2,N3}, {T0,T1,T2,T3} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 4 LR", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k, const int l) { + dv(i,j,k,l) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter_subview; } + if ( tile_subview(i,j,k,l) != ( ( ti + tj*NT0 + tk*NT0*NT1 + tl*NT0*NT1*NT2 )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ) + 1 ) ) { ++counter_inc; } + } } } } + } } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope + + // Create RR View + { + typedef Kokkos::View< Scalar****, LayoutRR_4D_2x4x4x2, ExecSpace > ViewType; + Kokkos::View< Scalar****, LayoutRR_4D_2x4x4x2, ExecSpace > dv("dv", N0, N1, N2, N3); + + typename ViewType::HostMirror v = Kokkos::create_mirror_view(dv); + + // Initialize on host + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti*NT1*NT2*NT3 + tj*NT2*NT3 + tk*NT3 + tl )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ); + } } } } + } } } } + + // copy to device + Kokkos::deep_copy(dv, v); + + Kokkos::MDRangePolicy< Kokkos::Rank<4, Kokkos::Iterate::Right, Kokkos::Iterate::Right>, ExecSpace > mdrangepolicy( {0,0,0,0}, {N0,N1,N2,N3}, {T0,T1,T2,T3} ); + + // iterate by tile + Kokkos::parallel_for( "ViewTile rank 4 RR", mdrangepolicy, + KOKKOS_LAMBDA (const int i, const int j, const int k, const int l) { + dv(i,j,k,l) += 1; + }); + + Kokkos::deep_copy(v, dv); + + long counter_subview = 0; + long counter_inc = 0; + + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter_subview; } + if ( tile_subview(i,j,k,l) != ( ( ti*NT1*NT2*NT3 + tj*NT2*NT3 + tk*NT3 + tl )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ) + 1 ) ) { ++counter_inc; } + } } } } + } } } } + ASSERT_EQ(counter_subview, long(0)); + ASSERT_EQ(counter_inc, long(0)); + } // end scope +#endif +#endif + } // end test_view_layout_tiled_4d + + + static void test_view_layout_tiled_subtile_2d( const int N0, const int N1 ) + { + const int FT = T0*T1; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + + // Counter to check for errors at the end + long counter[4] = {0}; + + // Create LL View + { + Kokkos::View< Scalar**, LayoutLL_2D_2x4, Kokkos::HostSpace > v("v", N0, N1); + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j) = ( ti + tj*NT0 )*FT + ( i + j*T0 ); + } } + } } + + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj ); + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j) != v(ti*T0+i, tj*T1+j) ) { ++counter[0]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1 = " << ti*T0 + i << "," << tj*T1 + j << std::endl; + std::cout << "ti,tj,i,j: " << ti << "," << tj << "," << i << "," << j << " v = " << v(ti*T0 + i, tj*T1+j) << " flat idx = " << ( ti + tj*NT0 )*FT + ( i + j*T0 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j) << std::endl; +#endif + } } + } } + } // end scope + + // Create RL View + { + Kokkos::View< Scalar**, LayoutRL_2D_2x4, Kokkos::HostSpace > v("v", N0, N1); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j) = ( ti*NT1 + tj )*FT + ( i + j*T0 ); + } } + } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj ); + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j) != v(ti*T0+i, tj*T1+j) ) { ++counter[1]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1 = " << ti*T0 + i << "," << tj*T1 + j << std::endl; + std::cout << "ti,tj,i,j: " << ti << "," << tj << "," << i << "," << j << " v = " << v(ti*T0 + i, tj*T1+j) << " flat idx = " << ( ti*NT1 + tj )*FT + ( i + j*T0 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j) << std::endl; +#endif + } } + } } + } // end scope + + // Create LR View + { + Kokkos::View< Scalar**, LayoutLR_2D_2x4, Kokkos::HostSpace > v("v", N0, N1); + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + v(ti*T0 + i, tj*T1+j) = ( ti + tj*NT0 )*FT + ( i*T1 + j ); + } } + } } + + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + if ( tile_subview(i,j) != v(ti*T0+i, tj*T1+j) ) { ++counter[2]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1 = " << ti*T0 + i << "," << tj*T1 + j << std::endl; + std::cout << "ti,tj,i,j: " << ti << "," << tj << "," << i << "," << j << " v = " << v(ti*T0 + i, tj*T1+j) << " flat idx = " << ( ti + tj*NT0 )*FT + ( i*T1 + j ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j) << std::endl; +#endif + } } + } } + } // end scope + + // Create RR View + { + Kokkos::View< Scalar**, LayoutRR_2D_2x4, Kokkos::HostSpace > v("v", N0, N1); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + v(ti*T0 + i, tj*T1+j) = ( ti*NT1 + tj )*FT + ( i*T1 + j ); + } } + } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + if ( tile_subview(i,j) != v(ti*T0+i, tj*T1+j) ) { ++counter[3]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1 = " << ti*T0 + i << "," << tj*T1 + j << std::endl; + std::cout << "ti,tj,i,j: " << ti << "," << tj << "," << i << "," << j << " v = " << v(ti*T0 + i, tj*T1+j) << " flat idx = " << ( ti*NT1 + tj )*FT + ( i*T1 + j ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } + } } + } // end scope + +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "subview_tile vs view errors:\n" + << " LL: " << counter[0] + << " RL: " << counter[1] + << " LR: " << counter[2] + << " RR: " << counter[3] + << std::endl; +#endif + + ASSERT_EQ(counter[0], long(0)); + ASSERT_EQ(counter[1], long(0)); + ASSERT_EQ(counter[2], long(0)); + ASSERT_EQ(counter[3], long(0)); + } // end test_view_layout_tiled_subtile_2d + + + static void test_view_layout_tiled_subtile_3d( const int N0, const int N1, const int N2 ) + { + + const int FT = T0*T1*T2; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + const int NT2 = int( std::ceil( N2 / T2 ) ); + + // Counter to check for errors at the end + long counter[4] = {0}; + // Create LL View + { + Kokkos::View< Scalar***, LayoutLL_3D_2x4x4, Kokkos::HostSpace > v("v", N0, N1, N2); + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti + tj*NT0 + tk*N0*N1 )*FT + ( i + j*T0 + k*T0*T1 ); + } } } + } } } + + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter[0]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << std::endl; + std::cout << "ti,tj,tk,i,j,k: " << ti << "," << tj << "," << tk << "," << i << "," << j << "," << k << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k) << " flat idx = " << ( ti + tj*NT0 + tk*N0*N1 )*FT + ( i + j*T0 + k*T0*T1 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } + } } } + } // end scope + + // Create RL View + { + Kokkos::View< Scalar***, LayoutRL_3D_2x4x4, Kokkos::HostSpace > v("v", N0, N1, N2); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i + j*T0 + k*T0*T1 ); + } } } + } } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter[1]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << std::endl; + std::cout << "ti,tj,tk,i,j,k: " << ti << "," << tj << "," << tk << "," << i << "," << j << "," << k << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k) << " flat idx = " << ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i + j*T0 + k*T0*T1 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k) << std::endl; +#endif + } } } + } } } + } // end scope + + // Create LR View + { + Kokkos::View< Scalar***, LayoutLR_3D_2x4x4, Kokkos::HostSpace > v("v", N0, N1, N2); + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti + tj*NT0 + tk*NT0*NT1 )*FT + ( i*T1*T2 + j*T2 + k ); + } } } + } } } + + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter[2]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << std::endl; + std::cout << "ti,tj,tk,i,j,k: " << ti << "," << tj << "," << tk << "," << i << "," << j << "," << k << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k) << " flat idx = " << ( ti + tj*NT0 + tk*NT0*NT1 )*FT + ( i*T1*T2 + j*T2 + k ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } + } } } + } // end scope + + // Create RR View + { + Kokkos::View< Scalar***, LayoutRR_3D_2x4x4, Kokkos::HostSpace > v("v", N0, N1, N2); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k) = ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i*T1*T2 + j*T2 + k ); + } } } + } } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + if ( tile_subview(i,j,k) != v(ti*T0+i, tj*T1+j, tk*T2+k) ) { ++counter[3]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << std::endl; + std::cout << "ti,tj,tk,i,j,k: " << ti << "," << tj << "," << tk << "," << i << "," << j << "," << k << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k) << " flat idx = " << ( ti*NT1*NT2 + tj*NT2 + tk )*FT + ( i*T1*T2 + j*T2 + k ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } + } } } + } // end scope + +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "subview_tile vs view errors:\n" + << " LL: " << counter[0] + << " RL: " << counter[1] + << " LR: " << counter[2] + << " RR: " << counter[3] + << std::endl; +#endif + + ASSERT_EQ(counter[0], long(0)); + ASSERT_EQ(counter[1], long(0)); + ASSERT_EQ(counter[2], long(0)); + ASSERT_EQ(counter[3], long(0)); + + } // end test_view_layout_tiled_subtile_3d + + + static void test_view_layout_tiled_subtile_4d( const int N0, const int N1, const int N2, const int N3 ) + { + const int FT = T0*T1*T2*T3; + + const int NT0 = int( std::ceil( N0 / T0 ) ); + const int NT1 = int( std::ceil( N1 / T1 ) ); + const int NT2 = int( std::ceil( N2 / T2 ) ); + const int NT3 = int( std::ceil( N3 / T3 ) ); + + // Counter to check for errors at the end + long counter[4] = {0}; + // Create LL View + { + Kokkos::View< Scalar****, LayoutLL_4D_2x4x4x2, Kokkos::HostSpace > v("v", N0, N1, N2, N3); + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti + tj*NT0 + tk*N0*N1 + tl*N0*N1*N2 )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ); + } } } } + } } } } + + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter[0]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2,idx3 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << "," << tl*T3 + l<< std::endl; + std::cout << "ti,tj,tk,tl: " << ti << "," << tj << "," << tk << "," << tl << "," + << " i,j,k,l: " << i << "," << j << "," << k << "," << l + << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) + << " flat idx = " << ( ti + tj*NT0 + tk*N0*N1 + tl*N0*N1*N2 )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k,l) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } } + } } } } + } // end scope + + // Create RL View + { + Kokkos::View< Scalar****, LayoutRL_4D_2x4x4x2, Kokkos::HostSpace > v("v", N0, N1, N2, N3); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti*NT1*NT2*N3 + tj*NT2*N3 + tk*N3 + tl )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ); + } } } } + } } } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int l = 0; l < T3; ++l ) { + for ( int k = 0; k < T2; ++k ) { + for ( int j = 0; j < T1; ++j ) { + for ( int i = 0; i < T0; ++i ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter[1]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2,idx3 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << "," << tl*T3 + l<< std::endl; + std::cout << "ti,tj,tk,tl: " << ti << "," << tj << "," << tk << "," << tl << "," + << " i,j,k,l: " << i << "," << j << "," << k << "," << l + << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) + << " flat idx = " << ( ti*NT1*NT2*N3 + tj*NT2*N3 + tk*N3 + tl )*FT + ( i + j*T0 + k*T0*T1 + l*T0*T1*T2 ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k,l) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } } + } } } } + } // end scope + + // Create LR View + { + Kokkos::View< Scalar****, LayoutLR_4D_2x4x4x2, Kokkos::HostSpace > v("v", N0, N1, N2, N3); + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti + tj*NT0 + tk*NT0*NT1 + tl*NT0*NT1*NT2 )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ); + } } } } + } } } } + + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int ti = 0; ti < NT0; ++ti ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter[2]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2,idx3 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << "," << tl*T3 + l<< std::endl; + std::cout << "ti,tj,tk,tl: " << ti << "," << tj << "," << tk << "," << tl << "," + << " i,j,k,l: " << i << "," << j << "," << k << "," << l + << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) + << " flat idx = " << ( ti + tj*NT0 + tk*NT0*NT1 + tl*NT0*NT1*NT2 )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k,l) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } } + } } } } + } // end scope + + // Create RR View + { + Kokkos::View< Scalar****, LayoutRR_4D_2x4x4x2, Kokkos::HostSpace > v("v", N0, N1, N2, N3); + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) = ( ti*NT1*NT2*NT3 + tj*NT2*NT3 + tk*NT3 + tl )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ); + } } } } + } } } } + + for ( int ti = 0; ti < NT0; ++ti ) { + for ( int tj = 0; tj < NT1; ++tj ) { + for ( int tk = 0; tk < NT2; ++tk ) { + for ( int tl = 0; tl < NT3; ++tl ) { + auto tile_subview = Kokkos::tile_subview( v, ti, tj, tk, tl ); + for ( int i = 0; i < T0; ++i ) { + for ( int j = 0; j < T1; ++j ) { + for ( int k = 0; k < T2; ++k ) { + for ( int l = 0; l < T3; ++l ) { + if ( tile_subview(i,j,k,l) != v(ti*T0+i, tj*T1+j, tk*T2+k, tl*T3 + l) ) { ++counter[3]; } +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "idx0,idx1,idx2,idx3 = " << ti*T0 + i << "," << tj*T1 + j << "," << tk*T2 + k << "," << tl*T3 + l<< std::endl; + std::cout << "ti,tj,tk,tl: " << ti << "," << tj << "," << tk << "," << tl << "," + << " i,j,k,l: " << i << "," << j << "," << k << "," << l + << " v = " << v(ti*T0 + i, tj*T1+j, tk*T2 + k, tl*T3 + l) + << " flat idx = " << ( ti*NT1*NT2*NT3 + tj*NT2*NT3 + tk*NT3 + tl )*FT + ( i*T1*T2*T3 + j*T2*T3 + k*T3 + l ) << std::endl; + std::cout << "subview_tile output = " << tile_subview(i,j,k,l) << std::endl; + std::cout << "subview tile rank = " << Kokkos::rank(tile_subview) << std::endl; +#endif + } } } } + } } } } + } // end scope + +#ifdef KOKKOS_VERBOSE_LAYOUTTILED_OUTPUT + std::cout << "subview_tile vs view errors:\n" + << " LL: " << counter[0] + << " RL: " << counter[1] + << " LR: " << counter[2] + << " RR: " << counter[3] + << std::endl; +#endif + + ASSERT_EQ(counter[0], long(0)); + ASSERT_EQ(counter[1], long(0)); + ASSERT_EQ(counter[2], long(0)); + ASSERT_EQ(counter[3], long(0)); + + } // end test_view_layout_tiled_subtile_4d + +}; // end TestViewLayoutTiled struct + +} // namespace + +TEST_F( TEST_CATEGORY , view_layouttiled) { + // These two examples are iterating by tile, then within a tile - not by extents + // If N# is not a power of two, but want to iterate by tile then within a tile, need to check that mapped index is within extent + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_2d( 4, 12 ); + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_3d( 4, 12, 16 ); + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_4d( 4, 12, 16, 12 ); +} +TEST_F( TEST_CATEGORY , view_layouttiled_subtile) { + // These two examples are iterating by tile, then within a tile - not by extents + // If N# is not a power of two, but want to iterate by tile then within a tile, need to check that mapped index is within extent + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_subtile_2d( 4, 12 ); + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_subtile_3d( 4, 12, 16 ); + TestViewLayoutTiled< TEST_EXECSPACE >::test_view_layout_tiled_subtile_4d( 4, 12, 16, 12 ); +} +#endif +} // namespace Test diff --git a/lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy.cpp b/lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy.cpp new file mode 100644 index 0000000000..3748592355 --- /dev/null +++ b/lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy.cpp b/lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy.cpp new file mode 100644 index 0000000000..b0ea67a1b5 --- /dev/null +++ b/lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_Other.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Other.cpp index f63409da29..788e458eea 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_Other.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Other.cpp @@ -50,3 +50,4 @@ #include #include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_Reductions_DeviceView.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Reductions_DeviceView.cpp new file mode 100644 index 0000000000..5b34090149 --- /dev/null +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Reductions_DeviceView.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp index c633585096..3740683450 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp @@ -68,6 +68,22 @@ TEST_F( TEST_CATEGORY, team_reduce ) TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); } + +TEST_F( TEST_CATEGORY, team_broadcast ) +{ + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); +} + } #include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp index 879633b0c8..dcb6896b8f 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp @@ -65,6 +65,10 @@ TEST_F( TEST_CATEGORY, team_lambda_shared_request ) TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); } + +TEST_F( TEST_CATEGORY, scratch_align) { + TestScratchAlignment< TEST_EXECSPACE >(); +} #endif #endif diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_TeamTeamSize.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamTeamSize.cpp new file mode 100644 index 0000000000..7e61e0810b --- /dev/null +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamTeamSize.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_ViewLayoutStrideAssignment.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_ViewLayoutStrideAssignment.cpp new file mode 100644 index 0000000000..2732cd4baa --- /dev/null +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_ViewLayoutStrideAssignment.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp index 566891bb35..0ddd67acf9 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp @@ -50,6 +50,7 @@ #include #include +#include #include diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Reductions_DeviceView.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Reductions_DeviceView.cpp new file mode 100644 index 0000000000..99fe5842cb --- /dev/null +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Reductions_DeviceView.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp index 790ea9e6da..e5b900ac58 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp @@ -68,6 +68,21 @@ TEST_F( TEST_CATEGORY, team_reduce ) TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); } + +TEST_F( TEST_CATEGORY, team_broadcast ) +{ + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); +} } #include diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp index f57da139a6..64d7575339 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp @@ -65,6 +65,9 @@ TEST_F( TEST_CATEGORY, team_lambda_shared_request ) TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); } +TEST_F( TEST_CATEGORY, scratch_align) { + TestScratchAlignment< TEST_EXECSPACE >(); +} #endif #endif diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamTeamSize.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamTeamSize.cpp new file mode 100644 index 0000000000..a98728f02c --- /dev/null +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamTeamSize.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_ViewLayoutStrideAssignment.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_ViewLayoutStrideAssignment.cpp new file mode 100644 index 0000000000..81b296d15d --- /dev/null +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_ViewLayoutStrideAssignment.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCmHostPinned_ViewCopy.cpp b/lib/kokkos/core/unit_test/rocm/TestROCmHostPinned_ViewCopy.cpp new file mode 100644 index 0000000000..4636691d99 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCmHostPinned_ViewCopy.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_Crs.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_Crs.cpp new file mode 100644 index 0000000000..05a90da83b --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_Crs.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_a.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_a.cpp new file mode 100644 index 0000000000..23edcbcc31 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_a.cpp @@ -0,0 +1,54 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +namespace Test { + +TEST_F( TEST_CATEGORY , mdrange_5d_reduce ) { + TestMDRange_5D< TEST_EXECSPACE >::test_reduce5( 100, 10, 10, 10, 5 ); +} + +} + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_b.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_b.cpp new file mode 100644 index 0000000000..5f02e893a9 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_b.cpp @@ -0,0 +1,54 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +namespace Test { + +TEST_F( TEST_CATEGORY , mdrange_6d_reduce ) { + TestMDRange_6D< TEST_EXECSPACE >::test_reduce6( 10, 10, 10, 10, 10, 5 ); +} + +} + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_c.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_c.cpp new file mode 100644 index 0000000000..6a84962d16 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_c.cpp @@ -0,0 +1,54 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +namespace Test { + +TEST_F( TEST_CATEGORY , mdrange_2d_reduce ) { + TestMDRange_2D< TEST_EXECSPACE >::test_reduce2( 100, 100 ); +} + +} + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_d.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_d.cpp new file mode 100644 index 0000000000..c6c6ba2918 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_d.cpp @@ -0,0 +1,54 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +namespace Test { + +TEST_F( TEST_CATEGORY , mdrange_3d_reduce ) { + TestMDRange_3D< TEST_EXECSPACE >::test_reduce3( 100, 100, 5 ); +} + +} + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_e.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_e.cpp new file mode 100644 index 0000000000..6afd8b8ece --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_MDRangeReduce_e.cpp @@ -0,0 +1,54 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +namespace Test { + +TEST_F( TEST_CATEGORY , mdrange_4d_reduce ) { + TestMDRange_4D< TEST_EXECSPACE >::test_reduce4( 100, 100, 10, 5 ); +} + +} + diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_SubView_c13.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_SubView_c13.cpp new file mode 100644 index 0000000000..03b39972a3 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_SubView_c13.cpp @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST_F( TEST_CATEGORY, view_test_unmanaged_subview_reset ) +{ + TestViewSubview::test_unmanaged_subview_reset< TEST_EXECSPACE >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_TeamReductionScan.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamReductionScan.cpp index e1025f1baa..57887450e2 100644 --- a/lib/kokkos/core/unit_test/rocm/TestROCm_TeamReductionScan.cpp +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamReductionScan.cpp @@ -46,7 +46,6 @@ namespace Test { -#if !defined(KOKKOS_ROCM_CLANG_WORKAROUND) TEST_F( TEST_CATEGORY, team_scan ) { TestScanTeam< TEST_EXECSPACE, Kokkos::Schedule >( 0 ); @@ -56,7 +55,6 @@ TEST_F( TEST_CATEGORY, team_scan ) TestScanTeam< TEST_EXECSPACE, Kokkos::Schedule >( 10000 ); TestScanTeam< TEST_EXECSPACE, Kokkos::Schedule >( 10000 ); } -#endif TEST_F( TEST_CATEGORY, team_long_reduce ) { diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_TeamScratch.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamScratch.cpp index 1968ab31ea..c7255919d9 100644 --- a/lib/kokkos/core/unit_test/rocm/TestROCm_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamScratch.cpp @@ -65,6 +65,10 @@ TEST_F( TEST_CATEGORY, team_lambda_shared_request ) TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); } + +TEST_F( TEST_CATEGORY, scratch_align) { + TestScratchAlignment< TEST_EXECSPACE >(); +} #endif #endif diff --git a/lib/kokkos/core/unit_test/rocm/TestROCm_TeamTeamSize.cpp b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamTeamSize.cpp new file mode 100644 index 0000000000..583e01fcb6 --- /dev/null +++ b/lib/kokkos/core/unit_test/rocm/TestROCm_TeamTeamSize.cpp @@ -0,0 +1,49 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Doesn't work right now due to bug with static sized array member + +//#include +//#ifndef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND +//#include +//#endif diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_Other.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_Other.cpp index 0c3bae3774..26a218c5c1 100644 --- a/lib/kokkos/core/unit_test/serial/TestSerial_Other.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_Other.cpp @@ -50,3 +50,4 @@ #include #include +#include diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_Reductions_DeviceView.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_Reductions_DeviceView.cpp new file mode 100644 index 0000000000..1c20670c28 --- /dev/null +++ b/lib/kokkos/core/unit_test/serial/TestSerial_Reductions_DeviceView.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp index 619cb727ac..47d02f7001 100644 --- a/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp @@ -68,6 +68,21 @@ TEST_F( TEST_CATEGORY, team_reduce ) TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); } + +TEST_F( TEST_CATEGORY, team_broadcast ) +{ + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); +} } #include diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp index 963908c92d..029999ab72 100644 --- a/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp @@ -65,6 +65,10 @@ TEST_F( TEST_CATEGORY, team_lambda_shared_request ) TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); } + +TEST_F( TEST_CATEGORY, scratch_align) { + TestScratchAlignment< TEST_EXECSPACE >(); +} #endif #endif diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_TeamTeamSize.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_TeamTeamSize.cpp new file mode 100644 index 0000000000..53451b30c9 --- /dev/null +++ b/lib/kokkos/core/unit_test/serial/TestSerial_TeamTeamSize.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_ViewLayoutStrideAssignment.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_ViewLayoutStrideAssignment.cpp new file mode 100644 index 0000000000..64c5b642d8 --- /dev/null +++ b/lib/kokkos/core/unit_test/serial/TestSerial_ViewLayoutStrideAssignment.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/unit_test/standalone/Makefile b/lib/kokkos/core/unit_test/standalone/Makefile new file mode 100644 index 0000000000..f8a75616c5 --- /dev/null +++ b/lib/kokkos/core/unit_test/standalone/Makefile @@ -0,0 +1,55 @@ +KOKKOS_DEVICES=Cuda +KOKKOS_CUDA_OPTIONS=enable_lambda +KOKKOS_ARCH = "SNB,Kepler35" + +MAKEFILE_PATH := $(subst Makefile,,$(abspath $(lastword $(MAKEFILE_LIST)))) + +ifndef KOKKOS_PATH + KOKKOS_PATH = $(MAKEFILE_PATH)../../../ +endif + +SRC = $(wildcard $(MAKEFILE_PATH)*.cpp) +HEADERS = $(wildcard $(MAKEFILE_PATH)*.hpp) +HEADERS = $(wildcard $(MAKEFILE_PATH)/../*.hpp) + +vpath %.cpp $(sort $(dir $(SRC))) + +default: build + echo "Start Build" + +ifneq (,$(findstring Cuda,$(KOKKOS_DEVICES))) +CXX = ${KOKKOS_PATH}/bin/nvcc_wrapper +EXE = test.cuda +else +CXX = g++ +EXE = test.host +endif + +CXXFLAGS ?= -O3 -g +override CXXFLAGS += -I$(MAKEFILE_PATH) -I$(KOKKOS_PATH)/core/unit_test -I$(KOKKOS_PATH)/tpls/gtest -DTESTFILE=$(TESTFILE) +#SRC += $(KOKKOS_PATH)/tpls/gtest/gtest/gtest-all.cc + +DEPFLAGS = -M +LINK = ${CXX} +LINKFLAGS = + +OBJ = $(notdir $(SRC:.cpp=.o)) +LIB = + +include $(KOKKOS_PATH)/Makefile.kokkos + +build: $(EXE) + +$(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS) gtest-all.o + $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) gtest-all.o -o $(EXE) + +clean: kokkos-clean + rm -f *.o *.cuda *.host + +# Compilation rules + +%.o:%.cpp $(KOKKOS_CPP_DEPENDS) $(HEADERS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< -o $(notdir $@) + +gtest-all.o:$(KOKKOS_PATH)/tpls/gtest/gtest/gtest-all.cc + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $(KOKKOS_PATH)/tpls/gtest/gtest/gtest-all.cc diff --git a/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp b/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp new file mode 100644 index 0000000000..2db51658cd --- /dev/null +++ b/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp @@ -0,0 +1,71 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +#include + +#ifdef KOKKOS_ENABLE_ROCM +#include +#endif +#ifdef KOKKOS_ENABLE_CUDA +#include +#endif +#ifdef KOKKOS_ENABLE_OPENMP +#include +#endif +#ifdef KOKKOS_ENABLE_THREADS +#include +#endif + +#include + +int main( int argc, char *argv[] ) { + Kokkos::initialize(argc,argv); + ::testing::InitGoogleTest( &argc, argv ); + + int result = RUN_ALL_TESTS(); + Kokkos::finalize(); + return result; +} diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_Other.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_Other.cpp index a0c8b41597..13786aa4a6 100644 --- a/lib/kokkos/core/unit_test/threads/TestThreads_Other.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_Other.cpp @@ -50,3 +50,4 @@ #include #include +#include diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_Reductions_DeviceView.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_Reductions_DeviceView.cpp new file mode 100644 index 0000000000..28f4b7d579 --- /dev/null +++ b/lib/kokkos/core/unit_test/threads/TestThreads_Reductions_DeviceView.cpp @@ -0,0 +1,45 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp index b87c1f77d3..63d2509355 100644 --- a/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp @@ -68,6 +68,21 @@ TEST_F( TEST_CATEGORY, team_reduce ) TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); TestTeamPolicy< TEST_EXECSPACE, Kokkos::Schedule >::test_reduce( 1000 ); } + +TEST_F( TEST_CATEGORY, team_broadcast ) +{ + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 0 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 2 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 16 ); + + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); + TestTeamBroadcast< TEST_EXECSPACE, Kokkos::Schedule >::test_teambroadcast( 1000 ); +} } #include diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp index c07fae77c3..d171195798 100644 --- a/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp @@ -65,6 +65,10 @@ TEST_F( TEST_CATEGORY, team_lambda_shared_request ) TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); TestLambdaSharedTeam< Kokkos::HostSpace, TEST_EXECSPACE, Kokkos::Schedule >(); } + +TEST_F( TEST_CATEGORY, scratch_align) { + TestScratchAlignment< TEST_EXECSPACE >(); +} #endif #endif diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_TeamTeamSize.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_TeamTeamSize.cpp new file mode 100644 index 0000000000..b1cf4ec875 --- /dev/null +++ b/lib/kokkos/core/unit_test/threads/TestThreads_TeamTeamSize.cpp @@ -0,0 +1,47 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + + diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_ViewLayoutStrideAssignment.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_ViewLayoutStrideAssignment.cpp new file mode 100644 index 0000000000..5ddd07108b --- /dev/null +++ b/lib/kokkos/core/unit_test/threads/TestThreads_ViewLayoutStrideAssignment.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/doc/kokkos-promotion.txt b/lib/kokkos/doc/kokkos-promotion.txt index 5a1306eccf..0aede5f328 100644 --- a/lib/kokkos/doc/kokkos-promotion.txt +++ b/lib/kokkos/doc/kokkos-promotion.txt @@ -149,7 +149,9 @@ Step 5: This step can be done on any SEMS machine (e.g. kokkos-dev). Actually, t git clone -b kokkos-develop git@github.com:trilinos/Trilinos.git TRILINOS_PATH=$PWD/Trilinos - 5.2. Snapshot Kokkos into Trilinos - this requires python/2.7.9 and that both Trilinos and Kokkos be clean - no untracked or modified files. Run the following outside of the Kokkos and Trilinos source trees. + 5.2. Snapshot Kokkos into Trilinos - this requires python/2.7.9 and that both Trilinos and Kokkos be clean - no untracked or modified files. Run the following outside of the Kokkos and Trilinos source trees. + + * Use the master branch of Kokkos for this. module load sems-python/2.7.9 python $KOKKOS_PATH/scripts/snapshot.py $KOKKOS_PATH $TRILINOS_PATH/packages @@ -173,20 +175,22 @@ Step 5: This step can be done on any SEMS machine (e.g. kokkos-dev). Actually, t ## KokkosKernels Changelog - 5.4. Run checkin-test to push to trilinos using the CI build modules (gcc/4.9.3) - - cd $TRILINOS_PATH - mkdir CHECKIN - cd CHECKIN - nohup ../cmake/std/sems/checkin-test-sems.sh --do-all --push & - - Although Trilinos has experimental Pull Request testing, it is not good enough to replace the checkin script yet. + 5.4. Wait for Trilinos Autotester results 5.5. If there are failures, fix and backtrack. Otherwise, go to next step // -------------------------------------------------------------------------------- // -Step 6: Push Kokkos master to GitHub (requires Owner permission). +Step 6: Push Kokkos master and develop to GitHub (requires Owner permission). + 6.1. Master branch: cd KOKKOS_PATH + git checkout master git push --follow-tags origin master + + 6.2. Develop branch: First merge (--no-ff) master back into develop + cd KOKKOS_PATH + git checkout develop + git merge --no-ff maseter + git push origin develop + diff --git a/lib/kokkos/example/tutorial/Hierarchical_Parallelism/01_thread_teams/thread_teams.cpp b/lib/kokkos/example/tutorial/Hierarchical_Parallelism/01_thread_teams/thread_teams.cpp index ff3002e645..e8c1550fc6 100644 --- a/lib/kokkos/example/tutorial/Hierarchical_Parallelism/01_thread_teams/thread_teams.cpp +++ b/lib/kokkos/example/tutorial/Hierarchical_Parallelism/01_thread_teams/thread_teams.cpp @@ -81,13 +81,22 @@ int main(int narg, char* args[]) { Kokkos::initialize(narg,args); // Launch 12 teams of the maximum number of threads per team - const team_policy policy( 12 , team_policy::team_size_max( hello_world() ) ); - - int sum = 0; - Kokkos::parallel_reduce( policy , hello_world() , sum ); + const int team_size_max = team_policy(1,1).team_size_max(hello_world(), Kokkos::ParallelReduceTag()); + const team_policy policy_a( 12 , team_size_max ); - // The result will be 12*team_policy::team_size_max( hello_world()) - printf("Result %i\n",sum); + int sum = 0; + Kokkos::parallel_reduce( policy_a , hello_world() , sum ); + + // The result will be 12*team_size_max + printf("Result A: %i == %i\n",sum, team_size_max*12); + + // In practice it is often better to let Kokkos decide on the team_size + const team_policy policy_b( 12 , Kokkos::AUTO ); + + Kokkos::parallel_reduce( policy_b , hello_world() , sum ); + // The result will be 12*policy_b.team_size_recommended( hello_world(), Kokkos::ParallelReduceTag()) + const int team_size_recommended = policy_b.team_size_recommended( hello_world(), Kokkos::ParallelReduceTag()); + printf("Result B: %i %i\n",sum, team_size_recommended*12); Kokkos::finalize(); } diff --git a/lib/kokkos/example/tutorial/Hierarchical_Parallelism/02_nested_parallel_for/nested_parallel_for.cpp b/lib/kokkos/example/tutorial/Hierarchical_Parallelism/02_nested_parallel_for/nested_parallel_for.cpp index 721aab2d3e..bbb1000e90 100644 --- a/lib/kokkos/example/tutorial/Hierarchical_Parallelism/02_nested_parallel_for/nested_parallel_for.cpp +++ b/lib/kokkos/example/tutorial/Hierarchical_Parallelism/02_nested_parallel_for/nested_parallel_for.cpp @@ -79,7 +79,8 @@ int main(int narg, char* args[]) { Kokkos::initialize(narg,args); // Launch 3 teams of the maximum number of threads per team - const team_policy policy( 3 , team_policy::team_size_max( hello_world() ) ); + const int team_size_max = team_policy(3,1).team_size_max( hello_world(), Kokkos::ParallelReduceTag()); + const team_policy policy( 3 , team_size_max ); int sum = 0; Kokkos::parallel_reduce( policy , hello_world() , sum ); diff --git a/lib/kokkos/example/virtual_functions/Makefile b/lib/kokkos/example/virtual_functions/Makefile new file mode 100644 index 0000000000..06186786c2 --- /dev/null +++ b/lib/kokkos/example/virtual_functions/Makefile @@ -0,0 +1,55 @@ +KOKKOS_DEVICES=Cuda +KOKKOS_CUDA_OPTIONS=enable_lambda +KOKKOS_ARCH = "SNB,Kepler35" + +#KOKKOS_DEVICES=OpenMP +#KOKKOS_CUDA_OPTIONS=enable_lambda +#KOKKOS_ARCH = "SNB" + +MAKEFILE_PATH := $(subst Makefile,,$(abspath $(lastword $(MAKEFILE_LIST)))) + +ifndef KOKKOS_PATH + KOKKOS_PATH = $(MAKEFILE_PATH)../.. +endif + +SRC = $(wildcard $(MAKEFILE_PATH)*.cpp) +HEADERS = $(wildcard $(MAKEFILE_PATH)*.hpp) + +vpath %.cpp $(sort $(dir $(SRC))) + +default: build + echo "Start Build" + +LINKFLAGS = +ifneq (,$(findstring Cuda,$(KOKKOS_DEVICES))) +CXX = ${KOKKOS_PATH}/bin/nvcc_wrapper +EXE = virtual.cuda +override LINKFLAGS += --remove-duplicate-link-files +else +CXX = g++ +EXE = virtual.host +endif + +CXXFLAGS ?= -O3 -g +override CXXFLAGS += -I$(MAKEFILE_PATH) + +DEPFLAGS = -M +LINK = ${CXX} + +OBJ = $(notdir $(SRC:.cpp=.o)) +LIB = + +include $(KOKKOS_PATH)/Makefile.kokkos + +build: $(EXE) + +$(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -o $(EXE) + +clean: kokkos-clean + rm -f *.o *.cuda *.host + +# Compilation rules + +%.o:%.cpp $(KOKKOS_CPP_DEPENDS) $(HEADERS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< -o $(notdir $@) diff --git a/lib/kokkos/example/virtual_functions/classes.cpp b/lib/kokkos/example/virtual_functions/classes.cpp new file mode 100644 index 0000000000..1b9d7cb385 --- /dev/null +++ b/lib/kokkos/example/virtual_functions/classes.cpp @@ -0,0 +1,26 @@ +#include + +KOKKOS_FUNCTION +Foo::Foo() { + val = 0; +} + +KOKKOS_FUNCTION +Foo_1::Foo_1() { + val = 1; +} + +KOKKOS_FUNCTION +int Foo_1::value() { + return val; +} + +KOKKOS_FUNCTION +Foo_2::Foo_2() { + val = 2; +} + +KOKKOS_FUNCTION +int Foo_2::value() { + return val; +} diff --git a/lib/kokkos/example/virtual_functions/classes.hpp b/lib/kokkos/example/virtual_functions/classes.hpp new file mode 100644 index 0000000000..362c473ce6 --- /dev/null +++ b/lib/kokkos/example/virtual_functions/classes.hpp @@ -0,0 +1,39 @@ +#ifndef KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP +#define KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP + +#include + +class Foo { + protected: + int val; + public: + KOKKOS_FUNCTION + Foo(); + + KOKKOS_FUNCTION + virtual int value() { return 0; }; + + KOKKOS_FUNCTION + virtual ~Foo() {} +}; + +class Foo_1: public Foo { + public: + KOKKOS_FUNCTION + Foo_1(); + + KOKKOS_FUNCTION + int value(); +}; + +class Foo_2: public Foo { + public: + KOKKOS_FUNCTION + Foo_2(); + + KOKKOS_FUNCTION + int value(); +}; + +#endif //KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP + diff --git a/lib/kokkos/example/virtual_functions/main.cpp b/lib/kokkos/example/virtual_functions/main.cpp new file mode 100644 index 0000000000..a16e0cf73f --- /dev/null +++ b/lib/kokkos/example/virtual_functions/main.cpp @@ -0,0 +1,36 @@ +#include + +int main(int argc, char* argv[]) { + Kokkos::initialize(argc,argv); + + { + Foo* f_1 = (Foo*) Kokkos::kokkos_malloc(sizeof(Foo_1)); + Foo* f_2 = (Foo*) Kokkos::kokkos_malloc(sizeof(Foo_2)); + + Kokkos::parallel_for("CreateObjects",1, KOKKOS_LAMBDA (const int&) { + new ((Foo_1*)f_1) Foo_1(); + new ((Foo_2*)f_2) Foo_2(); + }); + + int value_1,value_2; + Kokkos::parallel_reduce("CheckValues",1, KOKKOS_LAMBDA (const int&, int& lsum) { + lsum = f_1->value(); + },value_1); + + Kokkos::parallel_reduce("CheckValues",1, KOKKOS_LAMBDA (const int&, int& lsum) { + lsum = f_2->value(); + },value_2); + + printf("Values: %i %i\n",value_1,value_2); + + Kokkos::parallel_for("DestroyObjects",1, KOKKOS_LAMBDA (const int&) { + f_1->~Foo(); + f_2->~Foo(); + }); + + Kokkos::kokkos_free(f_1); + Kokkos::kokkos_free(f_2); + } + + Kokkos::finalize(); +} diff --git a/lib/kokkos/generate_makefile.bash b/lib/kokkos/generate_makefile.bash index 4225e5b2de..34be03f980 100755 --- a/lib/kokkos/generate_makefile.bash +++ b/lib/kokkos/generate_makefile.bash @@ -97,12 +97,21 @@ do echo "Invalid compiler by --compiler command: '${COMPILER}'" exit fi + # ... valid compiler, ensure absolute path set + WCOMPATH=`which $COMPILER` + COMPDIR=`dirname $WCOMPATH` + COMPNAME=`basename $WCOMPATH` + COMPILER=${COMPDIR}/${COMPNAME} ;; --with-options*) KOKKOS_OPT="${key#*=}" ;; + --gcc-toolchain*) + KOKKOS_GCC_TOOLCHAIN="${key#*=}" + ;; --help) echo "Kokkos configure options:" + echo "" echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory." echo "--qthreads-path=/Path/To/Qthreads: Path to Qthreads install directory." echo " Overrides path given by --with-qthreads." @@ -171,6 +180,7 @@ do echo " " echo "--with-cuda-options=[OPT]: Additional options to CUDA:" echo " force_uvm, use_ldg, enable_lambda, rdc" + echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" echo "--make-j=[NUM]: DEPRECATED: call make with appropriate" echo " -j flag" exit 0 @@ -195,7 +205,7 @@ else fi if [ "${KOKKOS_PATH}" = "${PWD}" ] || [ "${KOKKOS_PATH}" = "${PWD}/" ]; then - echo "Running generate_makefile.sh in the Kokkos root directory is not allowed" + echo "Running generate_makefile.bash in the Kokkos root directory is not allowed" exit fi @@ -204,8 +214,13 @@ KOKKOS_SRC_PATH=${KOKKOS_PATH} KOKKOS_SETTINGS="KOKKOS_SRC_PATH=${KOKKOS_SRC_PATH}" #KOKKOS_SETTINGS="KOKKOS_PATH=${KOKKOS_PATH}" +# The double [[ ]] in the elif branch is not a typo if [ ${#COMPILER} -gt 0 ]; then KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" +elif + [ ${#COMPILER} -eq 0 ] && [[ ${KOKKOS_DEVICES} =~ .*Cuda.* ]]; then + COMPILER="${KOKKOS_PATH}/bin/nvcc_wrapper" + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" fi if [ ${#KOKKOS_DEVICES} -gt 0 ]; then @@ -265,6 +280,10 @@ if [ ${#KOKKOS_CUDA_OPT} -gt 0 ]; then KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_CUDA_OPTIONS=${KOKKOS_CUDA_OPT}" fi +if [ ${#KOKKOS_GCC_TOOLCHAIN} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_INTERNAL_GCC_TOOLCHAIN=${KOKKOS_GCC_TOOLCHAIN}" +fi + KOKKOS_SETTINGS_NO_KOKKOS_PATH="${KOKKOS_SETTINGS}" KOKKOS_TEST_INSTALL_PATH="${PWD}/install" @@ -276,7 +295,7 @@ fi mkdir -p install gen_makefile=Makefile.kokkos -echo "#Makefile to satisfy existens of target kokkos-clean before installing the library" > install/${gen_makefile} +echo "#Makefile to satisfy existence of target kokkos-clean before installing the library" > install/${gen_makefile} echo "kokkos-clean:" >> install/${gen_makefile} echo "" >> install/${gen_makefile} mkdir -p core diff --git a/lib/kokkos/master_history.txt b/lib/kokkos/master_history.txt index fe90cc2960..08453309da 100644 --- a/lib/kokkos/master_history.txt +++ b/lib/kokkos/master_history.txt @@ -14,3 +14,4 @@ tag: 2.04.11 date: 10:28:2017 master: 54a1330a develop: ed36c017 tag: 2.5.00 date: 12:15:2017 master: dfe685f4 develop: ec7ad6d8 tag: 2.6.00 date: 03:07:2018 master: 62e760fa develop: d1ba7d71 tag: 2.7.00 date: 05:24:2018 master: e01945d0 develop: 2d13f608 +tag: 2.7.24 date: 11:04:2018 master: d3a94192 develop: 7a06fc81 diff --git a/lib/kokkos/scripts/eti/generate_view_copy_cpp_files_write b/lib/kokkos/scripts/eti/generate_view_copy_cpp_files_write index ffe2a593b9..45208e76b0 100755 --- a/lib/kokkos/scripts/eti/generate_view_copy_cpp_files_write +++ b/lib/kokkos/scripts/eti/generate_view_copy_cpp_files_write @@ -19,8 +19,8 @@ echo "KOKKOS_IMPL_VIEWCOPY_ETI_DECL(${SCALAR_TYPE}${RANK_STARS},${LAYOUT_TYPE},L echo "KOKKOS_IMPL_VIEWFILL_ETI_DECL(${SCALAR_TYPE}${RANK_STARS},${LAYOUT_TYPE},KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE,${INDEX_TYPE})" >> common/Kokkos_ViewFillCopyETIDecl_Macros.hpp -FileName=${EXECUTION_SPACE_DIR}/Kokkos_${EXECUTION_SPACE}_ViewCopyETIInst_${INDEX_TYPE}_${SCALAR_TYPE}_${LAYOUT_TYPE}_Rank${RANK}.cpp -ObjectName=Kokkos_${EXECUTION_SPACE}_ViewCopyETIInst_${INDEX_TYPE}_${SCALAR_TYPE}_${LAYOUT_TYPE}_Rank${RANK}.o +FileName=${EXECUTION_SPACE_DIR}/Kokkos_${EXECUTION_SPACE_DIR}_ViewCopyETIInst_${INDEX_TYPE}_${SCALAR_TYPE}_${LAYOUT_TYPE}_Rank${RANK}.cpp +ObjectName=Kokkos_${EXECUTION_SPACE_DIR}_ViewCopyETIInst_${INDEX_TYPE}_${SCALAR_TYPE}_${LAYOUT_TYPE}_Rank${RANK}.o cp ${SCRIPT_PATH}/../../LICENSE ${FileName} @@ -37,5 +37,5 @@ echo "" >> ${FileName} echo "}" >> ${FileName} echo "}" >> ${FileName} -echo "${ObjectName}: \$(KOKKOS_CPP_DEPENDS) \$(KOKKOS_ETI_PATH)/${FileName}" >> ${EXECUTION_SPACE_DIR}/Makefile.eti_${EXECUTION_SPACE} -echo -e "\t\$(CXX) \$(KOKKOS_CPPFLAGS) \$(KOKKOS_CXXFLAGS) \$(CXXFLAGS) -c \$(KOKKOS_ETI_PATH)/${FileName}" >> ${EXECUTION_SPACE_DIR}/Makefile.eti_${EXECUTION_SPACE} +echo "${ObjectName}: \$(KOKKOS_CPP_DEPENDS) \$(KOKKOS_ETI_PATH)/${FileName}" >> ${EXECUTION_SPACE_DIR}/Makefile.eti_${EXECUTION_SPACE_DIR} +echo -e "\t\$(CXX) \$(KOKKOS_CPPFLAGS) \$(KOKKOS_CXXFLAGS) \$(CXXFLAGS) -c \$(KOKKOS_ETI_PATH)/${FileName}" >> ${EXECUTION_SPACE_DIR}/Makefile.eti_${EXECUTION_SPACE_DIR} diff --git a/lib/kokkos/scripts/testing_scripts/test_all_sandia b/lib/kokkos/scripts/testing_scripts/test_all_sandia new file mode 100755 index 0000000000..d1424ade81 --- /dev/null +++ b/lib/kokkos/scripts/testing_scripts/test_all_sandia @@ -0,0 +1,790 @@ +#!/bin/bash -e + +# +# Global config +# + +set -o pipefail + +# Determine current machine. + +MACHINE="" +HOSTNAME=$(hostname) +PROCESSOR=`uname -p` + +if [[ "$HOSTNAME" =~ (white|ride).* ]]; then + MACHINE=white + module load git +fi + +if [[ "$HOSTNAME" =~ .*bowman.* ]]; then + MACHINE=bowman + module load git +fi + +if [[ "$HOSTNAME" == *blake* ]]; then # Warning: very generic name + MACHINE=blake + module load git +fi + +if [[ "$HOSTNAME" == apollo\.* ]]; then + MACHINE=apollo + module load git +fi + +if [[ "$HOSTNAME" == mayer\.* ]]; then + MACHINE=mayer +# module load git +fi +if [[ "$HOSTNAME" == cn* ]]; then # Warning: very generic name + MACHINE=mayer +fi + +if [ ! -z "$SEMS_MODULEFILES_ROOT" ]; then + if [[ "$MACHINE" = "" ]]; then + MACHINE=sems + module load sems-git + fi +fi + +if [[ "$MACHINE" = "" ]]; then + echo "Unrecognized machine" >&2 + exit 1 +fi + +echo "Running on machine: $MACHINE" + +GCC_BUILD_LIST="OpenMP,Pthread,Serial,OpenMP_Serial,Pthread_Serial" +IBM_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" +ARM_GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" +INTEL_BUILD_LIST="OpenMP,Pthread,Serial,OpenMP_Serial,Pthread_Serial" +CLANG_BUILD_LIST="Pthread,Serial,Pthread_Serial" +CUDA_BUILD_LIST="Cuda_OpenMP,Cuda_Pthread,Cuda_Serial" +CUDA_IBM_BUILD_LIST="Cuda_OpenMP,Cuda_Serial" + +GCC_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wignored-qualifiers,-Wempty-body,-Wclobbered,-Wuninitialized" +IBM_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" +CLANG_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +INTEL_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +CUDA_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +#CUDA_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" +PGI_WARNING_FLAGS="" + +# Default. Machine specific can override. +DEBUG=False +ARGS="" +CUSTOM_BUILD_LIST="" +QTHREADS_PATH="" +DRYRUN=False +BUILD_ONLY=False +declare -i NUM_JOBS_TO_RUN_IN_PARALLEL=1 +TEST_SCRIPT=False +SKIP_HWLOC=False +SPOT_CHECK=False + +PRINT_HELP=False +OPT_FLAG="" +CXX_FLAGS_EXTRA="" +LD_FLAGS_EXTRA="" +KOKKOS_OPTIONS="" + +# +# Handle arguments. +# + +while [[ $# > 0 ]] +do + key="$1" + + case $key in + --kokkos-path*) + KOKKOS_PATH="${key#*=}" + ;; + --qthreads-path*) + QTHREADS_PATH="${key#*=}" + ;; + --build-list*) + CUSTOM_BUILD_LIST="${key#*=}" + ;; + --debug*) + DEBUG=True + ;; + --build-only*) + BUILD_ONLY=True + ;; + --test-script*) + TEST_SCRIPT=True + ;; + --skip-hwloc*) + SKIP_HWLOC=True + ;; + --num*) + NUM_JOBS_TO_RUN_IN_PARALLEL="${key#*=}" + ;; + --dry-run*) + DRYRUN=True + ;; + --spot-check*) + SPOT_CHECK=True + ;; + --arch*) + ARCH_FLAG="--arch=${key#*=}" + ;; + --opt-flag*) + OPT_FLAG="${key#*=}" + ;; + --with-cuda-options*) + KOKKOS_CUDA_OPTIONS="--with-cuda-options=${key#*=}" + ;; + --with-options*) + KOKKOS_OPTIONS="--with-options=${key#*=}" + ;; + --cxxflags-extra*) + CXX_FLAGS_EXTRA="${key#*=}" + ;; + --ldflags-extra*) + LD_FLAGS_EXTRA="${key#*=}" + ;; + --help*) + PRINT_HELP=True + ;; + *) + # args, just append + ARGS="$ARGS $1" + ;; + esac + + shift +done + +SCRIPT_KOKKOS_ROOT=$( cd "$( dirname "$0" )" && cd ../.. && pwd ) + +# Set kokkos path. +if [ -z "$KOKKOS_PATH" ]; then + KOKKOS_PATH=$SCRIPT_KOKKOS_ROOT +else + # Ensure KOKKOS_PATH is abs path. + KOKKOS_PATH=$( cd $KOKKOS_PATH && pwd ) +fi + +UNCOMMITTED=`cd ${KOKKOS_PATH}; git status --porcelain 2>/dev/null` +if ! [ -z "$UNCOMMITTED" ]; then + echo "WARNING!! THE FOLLOWING CHANGES ARE UNCOMMITTED!! :" + echo "$UNCOMMITTED" + echo "" +fi + +GITSTATUS=`cd ${KOKKOS_PATH}; git log -n 1 --format=oneline` +echo "Repository Status: " ${GITSTATUS} +echo "" +echo "" + +# +# Machine specific config. +# + +if [ "$MACHINE" = "sems" ]; then + source /projects/sems/modulefiles/utils/sems-modules-init.sh + + BASE_MODULE_LIST="sems-env,kokkos-env,kokkos-hwloc/1.10.1/base,sems-/" + CUDA_MODULE_LIST="sems-env,kokkos-env,kokkos-/,sems-gcc/4.8.4,kokkos-hwloc/1.10.1/base" + CUDA8_MODULE_LIST="sems-env,kokkos-env,kokkos-/,sems-gcc/5.3.0,kokkos-hwloc/1.10.1/base" + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="" + fi + + if [ "$SPOT_CHECK" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" + "gcc/7.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" + "intel/17.0.1 $BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" + "clang/4.0.1 $BASE_MODULE_LIST "Pthread_Serial" clang++ $CLANG_WARNING_FLAGS" + "cuda/8.0.44 $CUDA8_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + else + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/4.8.4 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/4.9.3 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "intel/15.0.2 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/16.0.3 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/17.0.1 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "clang/3.6.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/3.7.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/3.8.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/3.9.0 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/4.0.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "cuda/7.5.18 $CUDA_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/8.0.44 $CUDA8_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + fi +elif [ "$MACHINE" = "white" ]; then + source /etc/profile.d/modules.sh + SKIP_HWLOC=True + export SLURM_TASKS_PER_NODE=32 + + BASE_MODULE_LIST="/" + IBM_MODULE_LIST="/xl/" + CUDA_MODULE_LIST="/,gcc/7.2.0,ibm/xl/16.1.0" + + # Don't do pthread on white. + GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" + + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/6.4.0 $BASE_MODULE_LIST $IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.2.0 $BASE_MODULE_LIST $IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "ibm/16.1.0 $IBM_MODULE_LIST $IBM_BUILD_LIST xlC $IBM_WARNING_FLAGS" + "cuda/9.2.88 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=Power8,Kepler37" + fi + +elif [ "$MACHINE" = "bowman" ]; then + source /etc/profile.d/modules.sh + SKIP_HWLOC=True + export SLURM_TASKS_PER_NODE=32 + + BASE_MODULE_LIST="/compilers/" + + OLD_INTEL_BUILD_LIST="Pthread,Serial,Pthread_Serial" + + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("intel/16.4.258 $BASE_MODULE_LIST $OLD_INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/17.2.174 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/18.2.199 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + ) + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=KNL" + fi + +elif [ "$MACHINE" = "mayer" ]; then + SKIP_HWLOC=True + export SLURM_TASKS_PER_NODE=96 + + BASE_MODULE_LIST="/" + ARM_MODULE_LIST="/compilers/" + + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/7.2.0 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "arm/18.4.0 $ARM_MODULE_LIST $ARM_GCC_BUILD_LIST armclang++ $CLANG_WARNING_FLAGS") + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=ARMv8-TX2" + fi + +elif [ "$MACHINE" = "blake" ]; then + source /etc/profile.d/modules.sh + SKIP_HWLOC=True + export SLURM_TASKS_PER_NODE=32 + + BASE_MODULE_LIST="/" + BASE_MODULE_LIST_INTEL="/compilers/" + + if [ "$SPOT_CHECK" = "True" ]; then + + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("intel/18.1.163 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "pgi/17.10.0 $BASE_MODULE_LIST $GCC_BUILD_LIST pgc++ $PGI_WARNING_FLAGS" + ) + else + COMPILERS=("intel/18.1.163 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "gcc/4.9.3 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/5.5.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/8.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "pgi/17.10.0 $BASE_MODULE_LIST $GCC_BUILD_LIST pgc++ $PGI_WARNING_FLAGS" + ) + + fi + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=SKX" + fi + +elif [ "$MACHINE" = "apollo" ]; then + source /projects/sems/modulefiles/utils/sems-modules-init.sh + module use /home/projects/modulefiles/local/x86-64 + module load kokkos-env + + module load sems-git + module load sems-tex + module load sems-cmake/3.5.2 + module load sems-gdb + + SKIP_HWLOC=True + + BASE_MODULE_LIST="sems-env,kokkos-env,sems-/,kokkos-hwloc/1.10.1/base" + CUDA_MODULE_LIST="sems-env,kokkos-env,kokkos-/,sems-gcc/4.8.4,kokkos-hwloc/1.10.1/base" + CUDA8_MODULE_LIST="sems-env,kokkos-env,kokkos-/,sems-gcc/5.3.0,kokkos-hwloc/1.10.1/base" + + CLANG_MODULE_LIST="sems-env,kokkos-env,sems-git,sems-cmake/3.5.2,/,cuda/9.0.69" + CLANG7_MODULE_LIST="sems-env,kokkos-env,sems-git,sems-cmake/3.5.2,/,cuda/9.1" + NVCC_MODULE_LIST="sems-env,kokkos-env,sems-git,sems-cmake/3.5.2,/,sems-gcc/5.3.0" + + BUILD_LIST_CUDA_NVCC="Cuda_Serial,Cuda_OpenMP" + BUILD_LIST_CUDA_CLANG="Cuda_Serial,Cuda_Pthread" + BUILD_LIST_CLANG="Serial,Pthread,OpenMP" + + if [ "$SPOT_CHECK" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/4.8.4 $BASE_MODULE_LIST "OpenMP,Pthread" g++ $GCC_WARNING_FLAGS" + "gcc/5.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" + "intel/16.0.1 $BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" + "clang/3.9.0 $BASE_MODULE_LIST "Pthread_Serial" clang++ $CLANG_WARNING_FLAGS" + "clang/6.0 $CLANG_MODULE_LIST "Cuda_Pthread,OpenMP" clang++ $CUDA_WARNING_FLAGS" + "cuda/9.1 $CUDA_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + else + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("cuda/9.1 $CUDA8_MODULE_LIST $BUILD_LIST_CUDA_NVCC $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "clang/6.0 $CLANG_MODULE_LIST $BUILD_LIST_CUDA_CLANG clang++ $CUDA_WARNING_FLAGS" + "clang/7.0 $CLANG7_MODULE_LIST $BUILD_LIST_CUDA_CLANG clang++ $CUDA_WARNING_FLAGS" + "clang/3.9.0 $CLANG_MODULE_LIST $BUILD_LIST_CLANG clang++ $CLANG_WARNING_FLAGS" + "gcc/4.8.4 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/4.9.3 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "intel/15.0.2 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/16.0.1 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/17.0.1 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "clang/3.5.2 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/3.6.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + ) + fi + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=SNB,Volta70" + fi + +else + echo "Unhandled machine $MACHINE" >&2 + exit 1 +fi + +export OMP_NUM_THREADS=8 +export OMP_PROC_BIND=spread +export OMP_PLACES=cores + +declare -i NUM_RESULTS_TO_KEEP=7 + +RESULT_ROOT_PREFIX=TestAll + +if [ "$PRINT_HELP" = "True" ]; then + echo "test_all_sandia :" + echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory" + echo " Defaults to root repo containing this script" + echo "--debug: Run tests in debug. Defaults to False" + echo "--test-script: Test this script, not Kokkos" + echo "--skip-hwloc: Do not do hwloc tests" + echo "--num=N: Number of jobs to run in parallel" + echo "--spot-check: Minimal test set to issue pull request" + echo "--dry-run: Just print what would be executed" + echo "--build-only: Just do builds, don't run anything" + echo "--opt-flag=FLAG: Optimization flag (default: -O3)" + echo "--cxxflags-extra=FLAGS: Extra flags to be added to CXX_FLAGS" + echo "--ldflags-extra=FLAGS: Extra flags to be added to LD_FLAGS" + echo "--arch=ARCHITECTURE: overwrite architecture flags" + echo "--with-cuda-options=OPT: set KOKKOS_CUDA_OPTIONS" + echo "--build-list=BUILD,BUILD,BUILD..." + echo " Provide a comma-separated list of builds instead of running all builds" + echo " Valid items:" + echo " OpenMP, Pthread, Qthreads, Serial, OpenMP_Serial, Pthread_Serial" + echo " Qthreads_Serial, Cuda_OpenMP, Cuda_Pthread, Cuda_Serial" + echo "" + + echo "ARGS: list of expressions matching compilers to test" + echo " supported compilers sems" + for COMPILER_DATA in "${COMPILERS[@]}"; do + ARR=($COMPILER_DATA) + COMPILER=${ARR[0]} + echo " $COMPILER" + done + echo "" + + echo "Examples:" + echo " Run all tests" + echo " % test_all_sandia" + echo "" + echo " Run all gcc tests" + echo " % test_all_sandia gcc" + echo "" + echo " Run all gcc/4.8.4 and all intel tests" + echo " % test_all_sandia gcc/4.8.4 intel" + echo "" + echo " Run all tests in debug" + echo " % test_all_sandia --debug" + echo "" + echo " Run gcc/4.8.4 and only do OpenMP and OpenMP_Serial builds" + echo " % test_all_sandia gcc/4.8.4 --build-list=OpenMP,OpenMP_Serial" + echo "" + echo "If you want to kill the tests, do:" + echo " hit ctrl-z" + echo " % kill -9 %1" + echo + exit 0 +fi + +# Set build type. +if [ "$DEBUG" = "True" ]; then + BUILD_TYPE=debug +else + BUILD_TYPE=release +fi + +# If no args provided, do all compilers. +if [ -z "$ARGS" ]; then + ARGS='?' +fi + +# Process args to figure out which compilers to test. +COMPILERS_TO_TEST="" + +for ARG in $ARGS; do + for COMPILER_DATA in "${COMPILERS[@]}"; do + ARR=($COMPILER_DATA) + COMPILER=${ARR[0]} + + if [[ "$COMPILER" = $ARG* ]]; then + if [[ "$COMPILERS_TO_TEST" != *${COMPILER}* ]]; then + COMPILERS_TO_TEST="$COMPILERS_TO_TEST $COMPILER" + else + echo "Tried to add $COMPILER twice" + fi + fi + done +done + +# Check if Qthreads build requested. +HAVE_QTHREADS_BUILD="False" +if [ -n "$CUSTOM_BUILD_LIST" ]; then + if [[ "$CUSTOM_BUILD_LIST" = *Qthreads* ]]; then + HAVE_QTHREADS_BUILD="True" + fi +else + for COMPILER_DATA in "${COMPILERS[@]}"; do + ARR=($COMPILER_DATA) + BUILD_LIST=${ARR[2]} + if [[ "$BUILD_LIST" = *Qthreads* ]]; then + HAVE_QTHREADS_BUILD="True" + fi + done +fi + +# Ensure Qthreads path is set if Qthreads build is requested. +if [ "$HAVE_QTHREADS_BUILD" = "True" ]; then + if [ -z "$QTHREADS_PATH" ]; then + echo "Need to supply Qthreads path (--qthreads-path) when testing Qthreads backend." >&2 + exit 1 + else + # Strip trailing slashes from path. + QTHREADS_PATH=$(echo $QTHREADS_PATH | sed 's/\/*$//') + fi +fi + +# +# Functions. +# + +# get_compiler_name +get_compiler_name() { + echo $1 | cut -d/ -f1 +} + +# get_compiler_version +get_compiler_version() { + echo $1 | cut -d/ -f2 +} + +# Do not call directly. +get_compiler_data() { + local compiler=$1 + local item=$2 + local compiler_name=$(get_compiler_name $compiler) + local compiler_vers=$(get_compiler_version $compiler) + + local compiler_data + for compiler_data in "${COMPILERS[@]}" ; do + local arr=($compiler_data) + + if [ "$compiler" = "${arr[0]}" ]; then + echo "${arr[$item]}" | tr , ' ' | sed -e "s//$compiler_name/g" -e "s//$compiler_vers/g" + return 0 + fi + done + + # Not found. + echo "Unreconized compiler $compiler" >&2 + exit 1 +} + +# +# For all getters, usage: +# + +get_compiler_modules() { + get_compiler_data $1 1 +} + +get_compiler_build_list() { + get_compiler_data $1 2 +} + +get_compiler_exe_name() { + get_compiler_data $1 3 +} + +get_compiler_warning_flags() { + get_compiler_data $1 4 +} + +run_cmd() { + echo "RUNNING: $*" + if [ "$DRYRUN" != "True" ]; then + eval "$* 2>&1" + fi +} + +# report_and_log_test_results +report_and_log_test_result() { + # Use sane var names. + local success=$1; local desc=$2; local comment=$3; + + if [ "$success" = "0" ]; then + echo " PASSED $desc" + echo $comment > $PASSED_DIR/$desc + else + # For failures, comment should be the name of the phase that failed. + echo " FAILED $desc" >&2 + echo $comment > $FAILED_DIR/$desc + cat ${desc}.${comment}.log + fi +} + +setup_env() { + local compiler=$1 + local compiler_modules=$(get_compiler_modules $compiler) + + module purge + + local mod + for mod in $compiler_modules; do + echo "Loading module $mod" + module load $mod 2>&1 + # It is ridiculously hard to check for the success of a loaded + # module. Module does not return error codes and piping to grep + # causes module to run in a subshell. + module list 2>&1 | grep "$mod" >& /dev/null || return 1 + done + + return 0 +} + +# single_build_and_test +single_build_and_test() { + # Use sane var names. + local compiler=$1; local build=$2; local build_type=$3; + + # Set up env. + mkdir -p $ROOT_DIR/$compiler/"${build}-$build_type" + cd $ROOT_DIR/$compiler/"${build}-$build_type" + local desc=$(echo "${compiler}-${build}-${build_type}" | sed 's:/:-:g') + setup_env $compiler >& ${desc}.configure.log || { report_and_log_test_result 1 ${desc} configure && return 0; } + + # Set up flags. + local compiler_warning_flags=$(get_compiler_warning_flags $compiler) + local compiler_exe=$(get_compiler_exe_name $compiler) + + if [[ "$build_type" = hwloc* ]]; then + local extra_args=--with-hwloc=$(dirname $(dirname $(which hwloc-info))) + fi + + if [[ "$build" = *Qthreads* ]]; then + if [[ "$build_type" = hwloc* ]]; then + local extra_args="$extra_args --qthreads-path=${QTHREADS_PATH}_hwloc" + else + local extra_args="$extra_args --qthreads-path=$QTHREADS_PATH" + fi + fi + + if [[ "$OPT_FLAG" = "" ]]; then + OPT_FLAG="-O3" + fi + + if [[ "$build_type" = *debug* ]]; then + local extra_args="$extra_args --debug" + local cxxflags="-g $compiler_warning_flags" + local ldflags="-g" + else + local cxxflags="$OPT_FLAG $compiler_warning_flags" + local ldflags="${OPT_FLAG}" + fi + + local cxxflags="${cxxflags} ${CXX_FLAGS_EXTRA}" + local ldflags="${ldflags} ${LD_FLAGS_EXTRA}" + + if [[ "$KOKKOS_CUDA_OPTIONS" != "" ]]; then + local extra_args="$extra_args $KOKKOS_CUDA_OPTIONS" + fi + if [[ "$KOKKOS_OPTIONS" != "" ]]; then + local extra_args="$extra_args $KOKKOS_OPTIONS" + else + local extra_args="$extra_args --with-options=enable_large_mem_tests" + fi + + echo " Starting job $desc" + + local comment="no_comment" + + if [ "$TEST_SCRIPT" = "True" ]; then + local rand=$[ 1 + $[ RANDOM % 10 ]] + sleep $rand + + if [ $rand -gt 5 ]; then + run_cmd ls fake_problem >& ${desc}.configure.log || { report_and_log_test_result 1 $desc configure && return 0; } + fi + else + run_cmd ${KOKKOS_PATH}/generate_makefile.bash --with-devices=$build $ARCH_FLAG --compiler=$(which $compiler_exe) --cxxflags=\"$cxxflags\" --ldflags=\"$ldflags\" $extra_args &>> ${desc}.configure.log || { report_and_log_test_result 1 ${desc} configure && return 0; } + local -i build_start_time=$(date +%s) + run_cmd make -j 48 build-test >& ${desc}.build.log || { report_and_log_test_result 1 ${desc} build && return 0; } + local -i build_end_time=$(date +%s) + comment="build_time=$(($build_end_time-$build_start_time))" + + if [[ "$BUILD_ONLY" == False ]]; then + run_cmd make test >& ${desc}.test.log || { report_and_log_test_result 1 ${desc} test && return 0; } + local -i run_end_time=$(date +%s) + comment="$comment run_time=$(($run_end_time-$build_end_time))" + fi + fi + + report_and_log_test_result 0 $desc "$comment" + + return 0 +} + +# wait_for_jobs +wait_for_jobs() { + local -i max_jobs=$1 + local -i num_active_jobs=$(jobs | wc -l) + while [ $num_active_jobs -ge $max_jobs ] + do + sleep 1 + num_active_jobs=$(jobs | wc -l) + jobs >& /dev/null + done +} + +# run_in_background +run_in_background() { + local compiler=$1 + + local -i num_jobs=$NUM_JOBS_TO_RUN_IN_PARALLEL + # Don't override command line input. + # if [[ "$BUILD_ONLY" == True ]]; then + # num_jobs=8 + # else + if [[ "$compiler" == cuda* ]]; then + num_jobs=1 + fi + if [[ "$compiler" == clang ]]; then + num_jobs=1 + fi + # fi + wait_for_jobs $num_jobs + + single_build_and_test $* & +} + +# build_and_test_all +build_and_test_all() { + # Get compiler data. + local compiler=$1 + if [ -z "$CUSTOM_BUILD_LIST" ]; then + local compiler_build_list=$(get_compiler_build_list $compiler) + else + local compiler_build_list=$(echo "$CUSTOM_BUILD_LIST" | tr , ' ') + fi + + # Do builds. + local build + for build in $compiler_build_list + do + run_in_background $compiler $build $BUILD_TYPE + + # If not cuda, do a hwloc test too. + if [[ "$compiler" != cuda* && "$SKIP_HWLOC" == False ]]; then + run_in_background $compiler $build "hwloc-$BUILD_TYPE" + fi + done + + return 0 +} + +get_test_root_dir() { + local existing_results=$(find . -maxdepth 1 -name "$RESULT_ROOT_PREFIX*" | sort) + local -i num_existing_results=$(echo $existing_results | tr ' ' '\n' | wc -l) + local -i num_to_delete=${num_existing_results}-${NUM_RESULTS_TO_KEEP} + + if [ $num_to_delete -gt 0 ]; then + /bin/rm -rf $(echo $existing_results | tr ' ' '\n' | head -n $num_to_delete) + fi + + echo $(pwd)/${RESULT_ROOT_PREFIX}_$(date +"%Y-%m-%d_%H.%M.%S") +} + +wait_summarize_and_exit() { + wait_for_jobs 1 + + echo "#######################################################" + echo "PASSED TESTS" + echo "#######################################################" + + local passed_test + for passed_test in $(\ls -1 $PASSED_DIR | sort) + do + echo $passed_test $(cat $PASSED_DIR/$passed_test) + done + + local -i rv=0 + if [ "$(ls -A $FAILED_DIR)" ]; then + echo "#######################################################" + echo "FAILED TESTS" + echo "#######################################################" + + local failed_test + for failed_test in $(\ls -1 $FAILED_DIR | sort) + do + echo $failed_test "("$(cat $FAILED_DIR/$failed_test)" failed)" + rv=$rv+1 + done + fi + + exit $rv +} + +# +# Main. +# + +ROOT_DIR=$(get_test_root_dir) +mkdir -p $ROOT_DIR +cd $ROOT_DIR + +PASSED_DIR=$ROOT_DIR/results/passed +FAILED_DIR=$ROOT_DIR/results/failed +mkdir -p $PASSED_DIR +mkdir -p $FAILED_DIR + +echo "Going to test compilers: " $COMPILERS_TO_TEST +for COMPILER in $COMPILERS_TO_TEST; do + echo "Testing compiler $COMPILER" + build_and_test_all $COMPILER +done + +wait_summarize_and_exit diff --git a/lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_pthread_intel b/lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_pthread_intel similarity index 82% rename from lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_pthread_intel rename to lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_pthread_intel index 3b2c725517..df370509a7 100755 --- a/lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_pthread_intel +++ b/lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_pthread_intel @@ -1,6 +1,8 @@ #!/bin/bash -el ulimit -c 0 -module load devpack/openmpi/2.1.1/intel/17.4.196/cuda/none +module load devpack/20171203/openmpi/2.1.2/intel/18.1.163 +# Trilinos now requires cmake version >= 3.10.0 +module swap cmake/3.9.0 cmake/3.10.2 KOKKOS_BRANCH=$1 TRILINOS_UPDATE_BRANCH=$2 @@ -28,8 +30,9 @@ export JENKINS_DO_PTHREAD=ON export JENKINS_DO_SERIAL=OFF export JENKINS_DO_COMPLEX=OFF -export JENKINS_ARCH_CXX_FLAG="-xCORE-AVX2 -mkl" -export JENKINS_ARCH_C_FLAG="-xCORE-AVX2 -mkl" +export JENKINS_ARCH=SKX +export JENKINS_ARCH_CXX_FLAG="-xCORE-AVX512 -mkl" +export JENKINS_ARCH_C_FLAG="-xCORE-AVX512 -mkl" export BLAS_LIBRARIES="-mkl;${MKLROOT}/lib/intel64/libmkl_intel_lp64.a;${MKLROOT}/lib/intel64/libmkl_intel_thread.a;${MKLROOT}/lib/intel64/libmkl_core.a" export LAPACK_LIBRARIES=${BLAS_LIBRARIES} @@ -37,7 +40,7 @@ export JENKINS_DO_TESTS=ON export JENKINS_DO_EXAMPLES=ON export JENKINS_DO_SHARED=ON -export QUEUE=haswell +export QUEUE=blake module load python diff --git a/lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_serial_intel b/lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_serial_intel similarity index 82% rename from lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_serial_intel rename to lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_serial_intel index 9ce936ae26..04f1378cec 100755 --- a/lib/kokkos/scripts/trilinos-integration/shepard_jenkins_run_script_serial_intel +++ b/lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_serial_intel @@ -1,6 +1,8 @@ #!/bin/bash -el ulimit -c 0 -module load devpack/openmpi/2.1.1/intel/17.4.196/cuda/none +module load devpack/20171203/openmpi/2.1.2/intel/18.1.163 +# Trilinos now requires cmake version >= 3.10.0 +module swap cmake/3.9.0 cmake/3.10.2 KOKKOS_BRANCH=$1 TRILINOS_UPDATE_BRANCH=$2 @@ -28,8 +30,9 @@ export JENKINS_DO_PTHREAD=OFF export JENKINS_DO_SERIAL=ON export JENKINS_DO_COMPLEX=ON -export JENKINS_ARCH_CXX_FLAG="-xCORE-AVX2 -mkl" -export JENKINS_ARCH_C_FLAG="-xCORE-AVX2 -mkl" +export JENKINS_ARCH=SKX +export JENKINS_ARCH_CXX_FLAG="-xCORE-AVX512 -mkl" +export JENKINS_ARCH_C_FLAG="-xCORE-AVX512 -mkl" export BLAS_LIBRARIES="-mkl;${MKLROOT}/lib/intel64/libmkl_intel_lp64.a;${MKLROOT}/lib/intel64/libmkl_intel_thread.a;${MKLROOT}/lib/intel64/libmkl_core.a" export LAPACK_LIBRARIES=${BLAS_LIBRARIES} @@ -37,7 +40,7 @@ export JENKINS_DO_TESTS=ON export JENKINS_DO_EXAMPLES=ON export JENKINS_DO_SHARED=ON -export QUEUE=haswell +export QUEUE=blake module load python diff --git a/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_cuda b/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_cuda index 2716767fe5..98900c3c9b 100755 --- a/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_cuda +++ b/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_cuda @@ -20,7 +20,10 @@ then TRILINOS_PRISTINE_BRANCH=develop fi -module load devpack/openmpi/1.10.4/gcc/5.4.0/cuda/8.0.44 +module load devpack/20180521/openmpi/2.1.2/gcc/7.2.0/cuda/9.2.88 +module swap openblas/0.2.20/gcc/7.2.0 netlib/3.8.0/gcc/7.2.0 +# Trilinos now requires cmake version >= 3.10.0 +module swap cmake/3.9.6 cmake/3.12.3 export OMP_NUM_THREADS=8 export JENKINS_DO_CUDA=ON export JENKINS_DO_OPENMP=OFF @@ -28,6 +31,7 @@ export JENKINS_DO_PTHREAD=OFF export JENKINS_DO_SERIAL=ON export JENKINS_DO_COMPLEX=OFF +export JENKINS_ARCH="Power8,Kepler37" export JENKINS_ARCH_CXX_FLAG="-mcpu=power8 -arch=sm_37" export JENKINS_ARCH_C_FLAG="-mcpu=power8" export BLAS_LIBRARIES="${BLAS_ROOT}/lib/libblas.a;gfortran;gomp" diff --git a/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_omp b/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_omp index ff1086507c..9c5244cd35 100755 --- a/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_omp +++ b/lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_omp @@ -20,7 +20,10 @@ then TRILINOS_PRISTINE_BRANCH=develop fi -module load devpack/openmpi/1.10.4/gcc/5.4.0/cuda/8.0.44 +module load devpack/20180521/openmpi/2.1.2/gcc/7.2.0/cuda/9.2.88 +module swap openblas/0.2.20/gcc/7.2.0 netlib/3.8.0/gcc/7.2.0 +# Trilinos now requires cmake version >= 3.10.0 +module swap cmake/3.9.6 cmake/3.12.3 export OMP_NUM_THREADS=8 export JENKINS_DO_CUDA=OFF export JENKINS_DO_OPENMP=ON @@ -28,6 +31,7 @@ export JENKINS_DO_PTHREAD=OFF export JENKINS_DO_SERIAL=OFF export JENKINS_DO_COMPLEX=OFF +export JENKINS_ARCH="Power8" export JENKINS_ARCH_CXX_FLAG="-mcpu=power8" export JENKINS_ARCH_C_FLAG="-mcpu=power8" export BLAS_LIBRARIES="${BLAS_ROOT}/lib/libblas.a;gfortran;gomp" diff --git a/lib/kokkos/tpls/gtest/gtest/LICENSE b/lib/kokkos/tpls/gtest/gtest/LICENSE new file mode 100644 index 0000000000..1941a11f8c --- /dev/null +++ b/lib/kokkos/tpls/gtest/gtest/LICENSE @@ -0,0 +1,28 @@ +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/kokkos/tpls/gtest/gtest/README b/lib/kokkos/tpls/gtest/gtest/README new file mode 100644 index 0000000000..82964ecc32 --- /dev/null +++ b/lib/kokkos/tpls/gtest/gtest/README @@ -0,0 +1,13 @@ +This is a fused source version of gtest 1.7.0. All that should be necessary to +start using gtest in your package is to declare the dependency and include +gtest/gtest.h. + +However, because some of the packages that are developed in Sierra do not use a +fused source version of gtest we need to make it possible for them to build with +this version as well as with their native build. To facilitate this we have +created symlinks for the other gtest headers that they use to the fused source +gtest.h. This will make it possible for them find the headers while still using +the fuse source version. This should not have any ill effects since the header is +protected and allows for only using the non-gtest.h headers in their files. + + diff --git a/lib/kokkos/tpls/gtest/gtest/gtest-all.cc b/lib/kokkos/tpls/gtest/gtest/gtest-all.cc new file mode 100644 index 0000000000..735f581c95 --- /dev/null +++ b/lib/kokkos/tpls/gtest/gtest/gtest-all.cc @@ -0,0 +1,9594 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// Google C++ Testing Framework (Google Test) +// +// Sometimes it's desirable to build Google Test by compiling a single file. +// This file serves this purpose. + +// This line ensures that gtest.h can be compiled on its own, even +// when it's fused. +#include "gtest/gtest.h" + +// The following lines pull in the real gtest *.cc files. +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Utilities for testing Google Test itself and code that uses Google Test +// (e.g. frameworks built on top of Google Test). + +#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + + +namespace testing { + +// This helper class can be used to mock out Google Test failure reporting +// so that we can test Google Test or code that builds on Google Test. +// +// An object of this class appends a TestPartResult object to the +// TestPartResultArray object given in the constructor whenever a Google Test +// failure is reported. It can either intercept only failures that are +// generated in the same thread that created this object or it can intercept +// all generated failures. The scope of this mock object can be controlled with +// the second argument to the two arguments constructor. +class GTEST_API_ ScopedFakeTestPartResultReporter + : public TestPartResultReporterInterface { + public: + // The two possible mocking modes of this object. + enum InterceptMode { + INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. + INTERCEPT_ALL_THREADS // Intercepts all failures. + }; + + // The c'tor sets this object as the test part result reporter used + // by Google Test. The 'result' parameter specifies where to report the + // results. This reporter will only catch failures generated in the current + // thread. DEPRECATED + explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); + + // Same as above, but you can choose the interception scope of this object. + ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, + TestPartResultArray* result); + + // The d'tor restores the previous test part result reporter. + virtual ~ScopedFakeTestPartResultReporter(); + + // Appends the TestPartResult object to the TestPartResultArray + // received in the constructor. + // + // This method is from the TestPartResultReporterInterface + // interface. + virtual void ReportTestPartResult(const TestPartResult& result); + private: + void Init(); + + const InterceptMode intercept_mode_; + TestPartResultReporterInterface* old_reporter_; + TestPartResultArray* const result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); +}; + +namespace internal { + +// A helper class for implementing EXPECT_FATAL_FAILURE() and +// EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +class GTEST_API_ SingleFailureChecker { + public: + // The constructor remembers the arguments. + SingleFailureChecker(const TestPartResultArray* results, + TestPartResult::Type type, + const string& substr); + ~SingleFailureChecker(); + private: + const TestPartResultArray* const results_; + const TestPartResult::Type type_; + const string substr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); +}; + +} // namespace internal + +} // namespace testing + +// A set of macros for testing Google Test assertions or code that's expected +// to generate Google Test fatal failures. It verifies that the given +// statement will cause exactly one fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_FATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - 'statement' cannot reference local non-static variables or +// non-static members of the current object. +// - 'statement' cannot return a value. +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. The AcceptsMacroThatExpandsToUnprotectedComma test in +// gtest_unittest.cc will fail to compile if we do that. +#define EXPECT_FATAL_FAILURE(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ALL_THREADS, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +// A macro for testing Google Test assertions or code that's expected to +// generate Google Test non-fatal failures. It asserts that the given +// statement will cause exactly one non-fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// 'statement' is allowed to reference local variables and members of +// the current object. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. If we do that, the code won't compile when the user gives +// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that +// expands to code containing an unprotected comma. The +// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc +// catches that. +// +// For the same reason, we have to write +// if (::testing::internal::AlwaysTrue()) { statement; } +// instead of +// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) +// to avoid an MSVC warning on unreachable code. +#define EXPECT_NONFATAL_FAILURE(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ + >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include // NOLINT +#include +#include + +#if GTEST_OS_LINUX + +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +# define GTEST_HAS_GETTIMEOFDAY_ 1 + +# include // NOLINT +# include // NOLINT +# include // NOLINT +// Declares vsnprintf(). This header is not available on Windows. +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include + +#elif GTEST_OS_SYMBIAN +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT + +#elif GTEST_OS_ZOS +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT + +// On z/OS we additionally need strings.h for strcasecmp. +# include // NOLINT + +#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. + +# include // NOLINT + +#elif GTEST_OS_WINDOWS // We are on Windows proper. + +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include // NOLINT + +# if GTEST_OS_WINDOWS_MINGW +// MinGW has gettimeofday() but not _ftime64(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +// TODO(kenton@google.com): There are other ways to get the time on +// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW +// supports these. consider using them instead. +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT +# endif // GTEST_OS_WINDOWS_MINGW + +// cpplint thinks that the header is already included, so we want to +// silence it. +# include // NOLINT + +#else + +// Assume other platforms have gettimeofday(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +# define GTEST_HAS_GETTIMEOFDAY_ 1 + +// cpplint thinks that the header is already included, so we want to +// silence it. +# include // NOLINT +# include // NOLINT + +#endif // GTEST_OS_LINUX + +#if GTEST_HAS_EXCEPTIONS +# include +#endif + +#if GTEST_CAN_STREAM_RESULTS_ +# include // NOLINT +# include // NOLINT +#endif + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utility functions and classes used by the Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This file contains purely Google Test's internal implementation. Please +// DO NOT #INCLUDE IT IN A USER PROGRAM. + +#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ +#define GTEST_SRC_GTEST_INTERNAL_INL_H_ + +// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is +// part of Google Test's implementation; otherwise it's undefined. +#if !GTEST_IMPLEMENTATION_ +// A user is trying to include this from his code - just say no. +# error "gtest-internal-inl.h is part of Google Test's internal implementation." +# error "It must not be included except by Google Test itself." +#endif // GTEST_IMPLEMENTATION_ + +#ifndef _WIN32_WCE +# include +#endif // !_WIN32_WCE +#include +#include // For strtoll/_strtoul64/malloc/free. +#include // For memmove. + +#include +#include +#include + + +#if GTEST_CAN_STREAM_RESULTS_ +# include // NOLINT +# include // NOLINT +#endif + +#if GTEST_OS_WINDOWS +# include // NOLINT +#endif // GTEST_OS_WINDOWS + + +namespace testing { + +// Declares the flags. +// +// We don't want the users to modify this flag in the code, but want +// Google Test's own unit tests to be able to access it. Therefore we +// declare it here as opposed to in gtest.h. +GTEST_DECLARE_bool_(death_test_use_fork); + +namespace internal { + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; + +// Names of the flags (needed for parsing Google Test flags). +const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; +const char kBreakOnFailureFlag[] = "break_on_failure"; +const char kCatchExceptionsFlag[] = "catch_exceptions"; +const char kColorFlag[] = "color"; +const char kFilterFlag[] = "filter"; +const char kListTestsFlag[] = "list_tests"; +const char kOutputFlag[] = "output"; +const char kPrintTimeFlag[] = "print_time"; +const char kRandomSeedFlag[] = "random_seed"; +const char kRepeatFlag[] = "repeat"; +const char kShuffleFlag[] = "shuffle"; +const char kStackTraceDepthFlag[] = "stack_trace_depth"; +const char kStreamResultToFlag[] = "stream_result_to"; +const char kThrowOnFailureFlag[] = "throw_on_failure"; + +// A valid random seed must be in [1, kMaxRandomSeed]. +const int kMaxRandomSeed = 99999; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +GTEST_API_ extern bool g_help_flag; + +// Returns the current time in milliseconds. +GTEST_API_ TimeInMillis GetTimeInMillis(); + +// Returns true iff Google Test should use colors in the output. +GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); + +// Formats the given time in milliseconds as seconds. +GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); + +// Converts the given time in milliseconds to a date string in the ISO 8601 +// format, without the timezone information. N.B.: due to the use the +// non-reentrant localtime() function, this function is not thread safe. Do +// not use it in any code that can be called from multiple threads. +GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); + +// Parses a string for an Int32 flag, in the form of "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +GTEST_API_ bool ParseInt32Flag( + const char* str, const char* flag, Int32* value); + +// Returns a random seed in range [1, kMaxRandomSeed] based on the +// given --gtest_random_seed flag value. +inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { + const unsigned int raw_seed = (random_seed_flag == 0) ? + static_cast(GetTimeInMillis()) : + static_cast(random_seed_flag); + + // Normalizes the actual seed to range [1, kMaxRandomSeed] such that + // it's easy to type. + const int normalized_seed = + static_cast((raw_seed - 1U) % + static_cast(kMaxRandomSeed)) + 1; + return normalized_seed; +} + +// Returns the first valid random seed after 'seed'. The behavior is +// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is +// considered to be 1. +inline int GetNextRandomSeed(int seed) { + GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) + << "Invalid random seed " << seed << " - must be in [1, " + << kMaxRandomSeed << "]."; + const int next_seed = seed + 1; + return (next_seed > kMaxRandomSeed) ? 1 : next_seed; +} + +// This class saves the values of all Google Test flags in its c'tor, and +// restores them in its d'tor. +class GTestFlagSaver { + public: + // The c'tor. + GTestFlagSaver() { + also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); + break_on_failure_ = GTEST_FLAG(break_on_failure); + catch_exceptions_ = GTEST_FLAG(catch_exceptions); + color_ = GTEST_FLAG(color); + death_test_style_ = GTEST_FLAG(death_test_style); + death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); + filter_ = GTEST_FLAG(filter); + internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); + list_tests_ = GTEST_FLAG(list_tests); + output_ = GTEST_FLAG(output); + print_time_ = GTEST_FLAG(print_time); + random_seed_ = GTEST_FLAG(random_seed); + repeat_ = GTEST_FLAG(repeat); + shuffle_ = GTEST_FLAG(shuffle); + stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); + stream_result_to_ = GTEST_FLAG(stream_result_to); + throw_on_failure_ = GTEST_FLAG(throw_on_failure); + } + + // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. + ~GTestFlagSaver() { + GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; + GTEST_FLAG(break_on_failure) = break_on_failure_; + GTEST_FLAG(catch_exceptions) = catch_exceptions_; + GTEST_FLAG(color) = color_; + GTEST_FLAG(death_test_style) = death_test_style_; + GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; + GTEST_FLAG(filter) = filter_; + GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; + GTEST_FLAG(list_tests) = list_tests_; + GTEST_FLAG(output) = output_; + GTEST_FLAG(print_time) = print_time_; + GTEST_FLAG(random_seed) = random_seed_; + GTEST_FLAG(repeat) = repeat_; + GTEST_FLAG(shuffle) = shuffle_; + GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; + GTEST_FLAG(stream_result_to) = stream_result_to_; + GTEST_FLAG(throw_on_failure) = throw_on_failure_; + } + + private: + // Fields for saving the original values of flags. + bool also_run_disabled_tests_; + bool break_on_failure_; + bool catch_exceptions_; + std::string color_; + std::string death_test_style_; + bool death_test_use_fork_; + std::string filter_; + std::string internal_run_death_test_; + bool list_tests_; + std::string output_; + bool print_time_; + internal::Int32 random_seed_; + internal::Int32 repeat_; + bool shuffle_; + internal::Int32 stack_trace_depth_; + std::string stream_result_to_; + bool throw_on_failure_; +} GTEST_ATTRIBUTE_UNUSED_; + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted +// to "(Invalid Unicode 0xXXXXXXXX)". +GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +GTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars); + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded(); + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (e.g., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +GTEST_API_ bool ShouldShard(const char* total_shards_str, + const char* shard_index_str, + bool in_subprocess_for_death_test); + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error and +// and aborts. +GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +GTEST_API_ bool ShouldRunTestOnShard( + int total_shards, int shard_index, int test_id); + +// STL container utilities. + +// Returns the number of elements in the given container that satisfy +// the given predicate. +template +inline int CountIf(const Container& c, Predicate predicate) { + // Implemented as an explicit loop since std::count_if() in libCstd on + // Solaris has a non-standard signature. + int count = 0; + for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { + if (predicate(*it)) + ++count; + } + return count; +} + +// Applies a function/functor to each element in the container. +template +void ForEach(const Container& c, Functor functor) { + std::for_each(c.begin(), c.end(), functor); +} + +// Returns the i-th element of the vector, or default_value if i is not +// in range [0, v.size()). +template +inline E GetElementOr(const std::vector& v, int i, E default_value) { + return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; +} + +// Performs an in-place shuffle of a range of the vector's elements. +// 'begin' and 'end' are element indices as an STL-style range; +// i.e. [begin, end) are shuffled, where 'end' == size() means to +// shuffle to the end of the vector. +template +void ShuffleRange(internal::Random* random, int begin, int end, + std::vector* v) { + const int size = static_cast(v->size()); + GTEST_CHECK_(0 <= begin && begin <= size) + << "Invalid shuffle range start " << begin << ": must be in range [0, " + << size << "]."; + GTEST_CHECK_(begin <= end && end <= size) + << "Invalid shuffle range finish " << end << ": must be in range [" + << begin << ", " << size << "]."; + + // Fisher-Yates shuffle, from + // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle + for (int range_width = end - begin; range_width >= 2; range_width--) { + const int last_in_range = begin + range_width - 1; + const int selected = begin + random->Generate(range_width); + std::swap((*v)[selected], (*v)[last_in_range]); + } +} + +// Performs an in-place shuffle of the vector's elements. +template +inline void Shuffle(internal::Random* random, std::vector* v) { + ShuffleRange(random, 0, static_cast(v->size()), v); +} + +// A function for deleting an object. Handy for being used as a +// functor. +template +static void Delete(T* x) { + delete x; +} + +// A predicate that checks the key of a TestProperty against a known key. +// +// TestPropertyKeyIs is copyable. +class TestPropertyKeyIs { + public: + // Constructor. + // + // TestPropertyKeyIs has NO default constructor. + explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} + + // Returns true iff the test name of test property matches on key_. + bool operator()(const TestProperty& test_property) const { + return test_property.key() == key_; + } + + private: + std::string key_; +}; + +// Class UnitTestOptions. +// +// This class contains functions for processing options the user +// specifies when running the tests. It has only static members. +// +// In most cases, the user can specify an option using either an +// environment variable or a command line flag. E.g. you can set the +// test filter using either GTEST_FILTER or --gtest_filter. If both +// the variable and the flag are present, the latter overrides the +// former. +class GTEST_API_ UnitTestOptions { + public: + // Functions for processing the gtest_output flag. + + // Returns the output format, or "" for normal printed output. + static std::string GetOutputFormat(); + + // Returns the absolute path of the requested output file, or the + // default (test_detail.xml in the original working directory) if + // none was explicitly specified. + static std::string GetAbsolutePathToOutputFile(); + + // Functions for processing the gtest_filter flag. + + // Returns true iff the wildcard pattern matches the string. The + // first ':' or '\0' character in pattern marks the end of it. + // + // This recursive algorithm isn't very efficient, but is clear and + // works well enough for matching test names, which are short. + static bool PatternMatchesString(const char *pattern, const char *str); + + // Returns true iff the user-specified filter matches the test case + // name and the test name. + static bool FilterMatchesTest(const std::string &test_case_name, + const std::string &test_name); + +#if GTEST_OS_WINDOWS + // Function for supporting the gtest_catch_exception flag. + + // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the + // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. + // This function is useful as an __except condition. + static int GTestShouldProcessSEH(DWORD exception_code); +#endif // GTEST_OS_WINDOWS + + // Returns true if "name" matches the ':' separated list of glob-style + // filters in "filter". + static bool MatchesFilter(const std::string& name, const char* filter); +}; + +// Returns the current application's name, removing directory path if that +// is present. Used by UnitTestOptions::GetOutputFile. +GTEST_API_ FilePath GetCurrentExecutableName(); + +// The role interface for getting the OS stack trace as a string. +class OsStackTraceGetterInterface { + public: + OsStackTraceGetterInterface() {} + virtual ~OsStackTraceGetterInterface() {} + + // Returns the current OS stack trace as an std::string. Parameters: + // + // max_depth - the maximum number of stack frames to be included + // in the trace. + // skip_count - the number of top frames to be skipped; doesn't count + // against max_depth. + virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; + + // UponLeavingGTest() should be called immediately before Google Test calls + // user code. It saves some information about the current stack that + // CurrentStackTrace() will use to find and hide Google Test stack frames. + virtual void UponLeavingGTest() = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); +}; + +// A working implementation of the OsStackTraceGetterInterface interface. +class OsStackTraceGetter : public OsStackTraceGetterInterface { + public: + OsStackTraceGetter() : caller_frame_(NULL) {} + + virtual string CurrentStackTrace(int max_depth, int skip_count) + GTEST_LOCK_EXCLUDED_(mutex_); + + virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_); + + // This string is inserted in place of stack frames that are part of + // Google Test's implementation. + static const char* const kElidedFramesMarker; + + private: + Mutex mutex_; // protects all internal state + + // We save the stack frame below the frame that calls user code. + // We do this because the address of the frame immediately below + // the user code changes between the call to UponLeavingGTest() + // and any calls to CurrentStackTrace() from within the user code. + void* caller_frame_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); +}; + +// Information about a Google Test trace point. +struct TraceInfo { + const char* file; + int line; + std::string message; +}; + +// This is the default global test part result reporter used in UnitTestImpl. +// This class should only be used by UnitTestImpl. +class DefaultGlobalTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. Reports the test part + // result in the current test. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); +}; + +// This is the default per thread test part result reporter used in +// UnitTestImpl. This class should only be used by UnitTestImpl. +class DefaultPerThreadTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. The implementation just + // delegates to the current global test part result reporter of *unit_test_. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); +}; + +// The private implementation of the UnitTest class. We don't protect +// the methods under a mutex, as this class is not accessible by a +// user and the UnitTest class that delegates work to this class does +// proper locking. +class GTEST_API_ UnitTestImpl { + public: + explicit UnitTestImpl(UnitTest* parent); + virtual ~UnitTestImpl(); + + // There are two different ways to register your own TestPartResultReporter. + // You can register your own repoter to listen either only for test results + // from the current thread or for results from all threads. + // By default, each per-thread test result repoter just passes a new + // TestPartResult to the global test result reporter, which registers the + // test part result for the currently running test. + + // Returns the global test part result reporter. + TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); + + // Sets the global test part result reporter. + void SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter); + + // Returns the test part result reporter for the current thread. + TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); + + // Sets the test part result reporter for the current thread. + void SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter); + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests that will be reported in the XML report. + int reportable_disabled_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of tests to be printed in the XML report. + int reportable_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the time of the test program start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp() const { return start_timestamp_; } + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const { return !Failed(); } + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const { + return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[i]; + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i) { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[index]; + } + + // Provides access to the event listener list. + TestEventListeners* listeners() { return &listeners_; } + + // Returns the TestResult for the test that's currently running, or + // the TestResult for the ad hoc test if no test is running. + TestResult* current_test_result(); + + // Returns the TestResult for the ad hoc test. + const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } + + // Sets the OS stack trace getter. + // + // Does nothing if the input and the current OS stack trace getter + // are the same; otherwise, deletes the old getter and makes the + // input the current getter. + void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); + + // Returns the current OS stack trace getter if it is not NULL; + // otherwise, creates an OsStackTraceGetter, makes it the current + // getter, and returns it. + OsStackTraceGetterInterface* os_stack_trace_getter(); + + // Returns the current OS stack trace as an std::string. + // + // The maximum number of stack frames to be included is specified by + // the gtest_stack_trace_depth flag. The skip_count parameter + // specifies the number of top frames to be skipped, which doesn't + // count against the number of frames to be included. + // + // For example, if Foo() calls Bar(), which in turn calls + // CurrentOsStackTraceExceptTop(1), Foo() will be included in the + // trace but Bar() and CurrentOsStackTraceExceptTop() won't. + std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; + + // Finds and returns a TestCase with the given name. If one doesn't + // exist, creates one and returns it. + // + // Arguments: + // + // test_case_name: name of the test case + // type_param: the name of the test's type parameter, or NULL if + // this is not a typed or a type-parameterized test. + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase* GetTestCase(const char* test_case_name, + const char* type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Adds a TestInfo to the unit test. + // + // Arguments: + // + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + // test_info: the TestInfo object + void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + TestInfo* test_info) { + // In order to support thread-safe death tests, we need to + // remember the original working directory when the test program + // was first invoked. We cannot do this in RUN_ALL_TESTS(), as + // the user may have changed the current directory before calling + // RUN_ALL_TESTS(). Therefore we capture the current directory in + // AddTestInfo(), which is called to register a TEST or TEST_F + // before main() is reached. + if (original_working_dir_.IsEmpty()) { + original_working_dir_.Set(FilePath::GetCurrentDir()); + GTEST_CHECK_(!original_working_dir_.IsEmpty()) + << "Failed to get the current working directory."; + } + + GetTestCase(test_info->test_case_name(), + test_info->type_param(), + set_up_tc, + tear_down_tc)->AddTestInfo(test_info); + } + +#if GTEST_HAS_PARAM_TEST + // Returns ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { + return parameterized_test_registry_; + } +#endif // GTEST_HAS_PARAM_TEST + + // Sets the TestCase object for the test that's currently running. + void set_current_test_case(TestCase* a_current_test_case) { + current_test_case_ = a_current_test_case; + } + + // Sets the TestInfo object for the test that's currently running. If + // current_test_info is NULL, the assertion results will be stored in + // ad_hoc_test_result_. + void set_current_test_info(TestInfo* a_current_test_info) { + current_test_info_ = a_current_test_info; + } + + // Registers all parameterized tests defined using TEST_P and + // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter + // combination. This method can be called more then once; it has guards + // protecting from registering the tests more then once. If + // value-parameterized tests are disabled, RegisterParameterizedTests is + // present but does nothing. + void RegisterParameterizedTests(); + + // Runs all tests in this UnitTest object, prints the result, and + // returns true if all tests are successful. If any exception is + // thrown during a test, this test is considered to be failed, but + // the rest of the tests will still be run. + bool RunAllTests(); + + // Clears the results of all tests, except the ad hoc tests. + void ClearNonAdHocTestResult() { + ForEach(test_cases_, TestCase::ClearTestCaseResult); + } + + // Clears the results of ad-hoc test assertions. + void ClearAdHocTestResult() { + ad_hoc_test_result_.Clear(); + } + + // Adds a TestProperty to the current TestResult object when invoked in a + // context of a test or a test case, or to the global property set. If the + // result already contains a property with the same key, the value will be + // updated. + void RecordProperty(const TestProperty& test_property); + + enum ReactionToSharding { + HONOR_SHARDING_PROTOCOL, + IGNORE_SHARDING_PROTOCOL + }; + + // Matches the full name of each test against the user-specified + // filter to decide whether the test should run, then records the + // result in each TestCase and TestInfo object. + // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests + // based on sharding variables in the environment. + // Returns the number of tests that should run. + int FilterTests(ReactionToSharding shard_tests); + + // Prints the names of the tests matching the user-specified filter flag. + void ListTestsMatchingFilter(); + + const TestCase* current_test_case() const { return current_test_case_; } + TestInfo* current_test_info() { return current_test_info_; } + const TestInfo* current_test_info() const { return current_test_info_; } + + // Returns the vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector& environments() { return environments_; } + + // Getters for the per-thread Google Test trace stack. + std::vector& gtest_trace_stack() { + return *(gtest_trace_stack_.pointer()); + } + const std::vector& gtest_trace_stack() const { + return gtest_trace_stack_.get(); + } + +#if GTEST_HAS_DEATH_TEST + void InitDeathTestSubprocessControlInfo() { + internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); + } + // Returns a pointer to the parsed --gtest_internal_run_death_test + // flag, or NULL if that flag was not specified. + // This information is useful only in a death test child process. + // Must not be called before a call to InitGoogleTest. + const InternalRunDeathTestFlag* internal_run_death_test_flag() const { + return internal_run_death_test_flag_.get(); + } + + // Returns a pointer to the current death test factory. + internal::DeathTestFactory* death_test_factory() { + return death_test_factory_.get(); + } + + void SuppressTestEventsIfInSubprocess(); + + friend class ReplaceDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + + // Initializes the event listener performing XML output as specified by + // UnitTestOptions. Must not be called before InitGoogleTest. + void ConfigureXmlOutput(); + +#if GTEST_CAN_STREAM_RESULTS_ + // Initializes the event listener for streaming test results to a socket. + // Must not be called before InitGoogleTest. + void ConfigureStreamingOutput(); +#endif + + // Performs initialization dependent upon flag values obtained in + // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to + // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest + // this function is also called from RunAllTests. Since this function can be + // called more than once, it has to be idempotent. + void PostFlagParsingInit(); + + // Gets the random seed used at the start of the current test iteration. + int random_seed() const { return random_seed_; } + + // Gets the random number generator. + internal::Random* random() { return &random_; } + + // Shuffles all test cases, and the tests within each test case, + // making sure that death tests are still run first. + void ShuffleTests(); + + // Restores the test cases and tests to their order before the first shuffle. + void UnshuffleTests(); + + // Returns the value of GTEST_FLAG(catch_exceptions) at the moment + // UnitTest::Run() starts. + bool catch_exceptions() const { return catch_exceptions_; } + + private: + friend class ::testing::UnitTest; + + // Used by UnitTest::Run() to capture the state of + // GTEST_FLAG(catch_exceptions) at the moment it starts. + void set_catch_exceptions(bool value) { catch_exceptions_ = value; } + + // The UnitTest object that owns this implementation object. + UnitTest* const parent_; + + // The working directory when the first TEST() or TEST_F() was + // executed. + internal::FilePath original_working_dir_; + + // The default test part result reporters. + DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; + DefaultPerThreadTestPartResultReporter + default_per_thread_test_part_result_reporter_; + + // Points to (but doesn't own) the global test part result reporter. + TestPartResultReporterInterface* global_test_part_result_repoter_; + + // Protects read and write access to global_test_part_result_reporter_. + internal::Mutex global_test_part_result_reporter_mutex_; + + // Points to (but doesn't own) the per-thread test part result reporter. + internal::ThreadLocal + per_thread_test_part_result_reporter_; + + // The vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector environments_; + + // The vector of TestCases in their original order. It owns the + // elements in the vector. + std::vector test_cases_; + + // Provides a level of indirection for the test case list to allow + // easy shuffling and restoring the test case order. The i-th + // element of this vector is the index of the i-th test case in the + // shuffled order. + std::vector test_case_indices_; + +#if GTEST_HAS_PARAM_TEST + // ParameterizedTestRegistry object used to register value-parameterized + // tests. + internal::ParameterizedTestCaseRegistry parameterized_test_registry_; + + // Indicates whether RegisterParameterizedTests() has been called already. + bool parameterized_tests_registered_; +#endif // GTEST_HAS_PARAM_TEST + + // Index of the last death test case registered. Initially -1. + int last_death_test_case_; + + // This points to the TestCase for the currently running test. It + // changes as Google Test goes through one test case after another. + // When no test is running, this is set to NULL and Google Test + // stores assertion results in ad_hoc_test_result_. Initially NULL. + TestCase* current_test_case_; + + // This points to the TestInfo for the currently running test. It + // changes as Google Test goes through one test after another. When + // no test is running, this is set to NULL and Google Test stores + // assertion results in ad_hoc_test_result_. Initially NULL. + TestInfo* current_test_info_; + + // Normally, a user only writes assertions inside a TEST or TEST_F, + // or inside a function called by a TEST or TEST_F. Since Google + // Test keeps track of which test is current running, it can + // associate such an assertion with the test it belongs to. + // + // If an assertion is encountered when no TEST or TEST_F is running, + // Google Test attributes the assertion result to an imaginary "ad hoc" + // test, and records the result in ad_hoc_test_result_. + TestResult ad_hoc_test_result_; + + // The list of event listeners that can be used to track events inside + // Google Test. + TestEventListeners listeners_; + + // The OS stack trace getter. Will be deleted when the UnitTest + // object is destructed. By default, an OsStackTraceGetter is used, + // but the user can set this field to use a custom getter if that is + // desired. + OsStackTraceGetterInterface* os_stack_trace_getter_; + + // True iff PostFlagParsingInit() has been called. + bool post_flag_parse_init_performed_; + + // The random number seed used at the beginning of the test run. + int random_seed_; + + // Our random number generator. + internal::Random random_; + + // The time of the test program start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp_; + + // How long the test took to run, in milliseconds. + TimeInMillis elapsed_time_; + +#if GTEST_HAS_DEATH_TEST + // The decomposed components of the gtest_internal_run_death_test flag, + // parsed when RUN_ALL_TESTS is called. + internal::scoped_ptr internal_run_death_test_flag_; + internal::scoped_ptr death_test_factory_; +#endif // GTEST_HAS_DEATH_TEST + + // A per-thread stack of traces created by the SCOPED_TRACE() macro. + internal::ThreadLocal > gtest_trace_stack_; + + // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() + // starts. + bool catch_exceptions_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); +}; // class UnitTestImpl + +// Convenience function for accessing the global UnitTest +// implementation object. +inline UnitTestImpl* GetUnitTestImpl() { + return UnitTest::GetInstance()->impl(); +} + +#if GTEST_USES_SIMPLE_RE + +// Internal helper functions for implementing the simple regular +// expression matcher. +GTEST_API_ bool IsInSet(char ch, const char* str); +GTEST_API_ bool IsAsciiDigit(char ch); +GTEST_API_ bool IsAsciiPunct(char ch); +GTEST_API_ bool IsRepeat(char ch); +GTEST_API_ bool IsAsciiWhiteSpace(char ch); +GTEST_API_ bool IsAsciiWordChar(char ch); +GTEST_API_ bool IsValidEscape(char ch); +GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); +GTEST_API_ bool ValidateRegex(const char* regex); +GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); +GTEST_API_ bool MatchRepetitionAndRegexAtHead( + bool escaped, char ch, char repeat, const char* regex, const char* str); +GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); + +#endif // GTEST_USES_SIMPLE_RE + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); + +#if GTEST_HAS_DEATH_TEST + +// Returns the message describing the last system error, regardless of the +// platform. +GTEST_API_ std::string GetLastErrnoDescription(); + +# if GTEST_OS_WINDOWS +// Provides leak-safe Windows kernel handle ownership. +class AutoHandle { + public: + AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} + explicit AutoHandle(HANDLE handle) : handle_(handle) {} + + ~AutoHandle() { Reset(); } + + HANDLE Get() const { return handle_; } + void Reset() { Reset(INVALID_HANDLE_VALUE); } + void Reset(HANDLE handle) { + if (handle != handle_) { + if (handle_ != INVALID_HANDLE_VALUE) + ::CloseHandle(handle_); + handle_ = handle; + } + } + + private: + HANDLE handle_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); +}; +# endif // GTEST_OS_WINDOWS + +// Attempts to parse a string into a positive integer pointed to by the +// number parameter. Returns true if that is possible. +// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use +// it here. +template +bool ParseNaturalNumber(const ::std::string& str, Integer* number) { + // Fail fast if the given string does not begin with a digit; + // this bypasses strtoXXX's "optional leading whitespace and plus + // or minus sign" semantics, which are undesirable here. + if (str.empty() || !IsDigit(str[0])) { + return false; + } + errno = 0; + + char* end; + // BiggestConvertible is the largest integer type that system-provided + // string-to-number conversion routines can return. + +# if GTEST_OS_WINDOWS && !defined(__GNUC__) + + // MSVC and C++ Builder define __int64 instead of the standard long long. + typedef unsigned __int64 BiggestConvertible; + const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); + +# else + + typedef unsigned long long BiggestConvertible; // NOLINT + const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); + +# endif // GTEST_OS_WINDOWS && !defined(__GNUC__) + + const bool parse_success = *end == '\0' && errno == 0; + + // TODO(vladl@google.com): Convert this to compile time assertion when it is + // available. + GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); + + const Integer result = static_cast(parsed); + if (parse_success && static_cast(result) == parsed) { + *number = result; + return true; + } + return false; +} +#endif // GTEST_HAS_DEATH_TEST + +// TestResult contains some private methods that should be hidden from +// Google Test user but are required for testing. This class allow our tests +// to access them. +// +// This class is supplied only for the purpose of testing Google Test's own +// constructs. Do not use it in user tests, either directly or indirectly. +class TestResultAccessor { + public: + static void RecordProperty(TestResult* test_result, + const std::string& xml_element, + const TestProperty& property) { + test_result->RecordProperty(xml_element, property); + } + + static void ClearTestPartResults(TestResult* test_result) { + test_result->ClearTestPartResults(); + } + + static const std::vector& test_part_results( + const TestResult& test_result) { + return test_result.test_part_results(); + } +}; + +#if GTEST_CAN_STREAM_RESULTS_ + +// Streams test results to the given port on the given host machine. +class StreamingListener : public EmptyTestEventListener { + public: + // Abstract base class for writing strings to a socket. + class AbstractSocketWriter { + public: + virtual ~AbstractSocketWriter() {} + + // Sends a string to the socket. + virtual void Send(const string& message) = 0; + + // Closes the socket. + virtual void CloseConnection() {} + + // Sends a string and a newline to the socket. + void SendLn(const string& message) { + Send(message + "\n"); + } + }; + + // Concrete class for actually writing strings to a socket. + class SocketWriter : public AbstractSocketWriter { + public: + SocketWriter(const string& host, const string& port) + : sockfd_(-1), host_name_(host), port_num_(port) { + MakeConnection(); + } + + virtual ~SocketWriter() { + if (sockfd_ != -1) + CloseConnection(); + } + + // Sends a string to the socket. + virtual void Send(const string& message) { + GTEST_CHECK_(sockfd_ != -1) + << "Send() can be called only when there is a connection."; + + const int len = static_cast(message.length()); + if (write(sockfd_, message.c_str(), len) != len) { + GTEST_LOG_(WARNING) + << "stream_result_to: failed to stream to " + << host_name_ << ":" << port_num_; + } + } + + private: + // Creates a client socket and connects to the server. + void MakeConnection(); + + // Closes the socket. + void CloseConnection() { + GTEST_CHECK_(sockfd_ != -1) + << "CloseConnection() can be called only when there is a connection."; + + close(sockfd_); + sockfd_ = -1; + } + + int sockfd_; // socket file descriptor + const string host_name_; + const string port_num_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); + }; // class SocketWriter + + // Escapes '=', '&', '%', and '\n' characters in str as "%xx". + static string UrlEncode(const char* str); + + StreamingListener(const string& host, const string& port) + : socket_writer_(new SocketWriter(host, port)) { Start(); } + + explicit StreamingListener(AbstractSocketWriter* socket_writer) + : socket_writer_(socket_writer) { Start(); } + + void OnTestProgramStart(const UnitTest& /* unit_test */) { + SendLn("event=TestProgramStart"); + } + + void OnTestProgramEnd(const UnitTest& unit_test) { + // Note that Google Test current only report elapsed time for each + // test iteration, not for the entire test program. + SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); + + // Notify the streaming server to stop. + socket_writer_->CloseConnection(); + } + + void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { + SendLn("event=TestIterationStart&iteration=" + + StreamableToString(iteration)); + } + + void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { + SendLn("event=TestIterationEnd&passed=" + + FormatBool(unit_test.Passed()) + "&elapsed_time=" + + StreamableToString(unit_test.elapsed_time()) + "ms"); + } + + void OnTestCaseStart(const TestCase& test_case) { + SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); + } + + void OnTestCaseEnd(const TestCase& test_case) { + SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + + "ms"); + } + + void OnTestStart(const TestInfo& test_info) { + SendLn(std::string("event=TestStart&name=") + test_info.name()); + } + + void OnTestEnd(const TestInfo& test_info) { + SendLn("event=TestEnd&passed=" + + FormatBool((test_info.result())->Passed()) + + "&elapsed_time=" + + StreamableToString((test_info.result())->elapsed_time()) + "ms"); + } + + void OnTestPartResult(const TestPartResult& test_part_result) { + const char* file_name = test_part_result.file_name(); + if (file_name == NULL) + file_name = ""; + SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + + "&line=" + StreamableToString(test_part_result.line_number()) + + "&message=" + UrlEncode(test_part_result.message())); + } + + private: + // Sends the given message and a newline to the socket. + void SendLn(const string& message) { socket_writer_->SendLn(message); } + + // Called at the start of streaming to notify the receiver what + // protocol we are using. + void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } + + string FormatBool(bool value) { return value ? "1" : "0"; } + + const scoped_ptr socket_writer_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); +}; // class StreamingListener + +#endif // GTEST_CAN_STREAM_RESULTS_ + +} // namespace internal +} // namespace testing + +#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_OS_WINDOWS +# define vsnprintf _vsnprintf +#endif // GTEST_OS_WINDOWS + +namespace testing { + +using internal::CountIf; +using internal::ForEach; +using internal::GetElementOr; +using internal::Shuffle; + +// Constants. + +// A test whose test case name or test name matches this filter is +// disabled and not run. +static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; + +// A test case whose name matches this filter is considered a death +// test case and will be run before test cases whose name doesn't +// match this filter. +static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; + +// A test filter that matches everything. +static const char kUniversalFilter[] = "*"; + +// The default output file for XML output. +static const char kDefaultOutputFile[] = "test_detail.xml"; + +// The environment variable name for the test shard index. +static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; +// The environment variable name for the total number of test shards. +static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; +// The environment variable name for the test shard status file. +static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; + +namespace internal { + +// The text used in failure messages to indicate the start of the +// stack trace. +const char kStackTraceMarker[] = "\nStack trace:\n"; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +bool g_help_flag = false; + +} // namespace internal + +static const char* GetDefaultFilter() { + return kUniversalFilter; +} + +GTEST_DEFINE_bool_( + also_run_disabled_tests, + internal::BoolFromGTestEnv("also_run_disabled_tests", false), + "Run disabled tests too, in addition to the tests normally being run."); + +GTEST_DEFINE_bool_( + break_on_failure, + internal::BoolFromGTestEnv("break_on_failure", false), + "True iff a failed assertion should be a debugger break-point."); + +GTEST_DEFINE_bool_( + catch_exceptions, + internal::BoolFromGTestEnv("catch_exceptions", true), + "True iff " GTEST_NAME_ + " should catch exceptions and treat them as test failures."); + +GTEST_DEFINE_string_( + color, + internal::StringFromGTestEnv("color", "auto"), + "Whether to use colors in the output. Valid values: yes, no, " + "and auto. 'auto' means to use colors if the output is " + "being sent to a terminal and the TERM environment variable " + "is set to a terminal type that supports colors."); + +GTEST_DEFINE_string_( + filter, + internal::StringFromGTestEnv("filter", GetDefaultFilter()), + "A colon-separated list of glob (not regex) patterns " + "for filtering the tests to run, optionally followed by a " + "'-' and a : separated list of negative patterns (tests to " + "exclude). A test is run if it matches one of the positive " + "patterns and does not match any of the negative patterns."); + +GTEST_DEFINE_bool_(list_tests, false, + "List all tests without running them."); + +GTEST_DEFINE_string_( + output, + internal::StringFromGTestEnv("output", ""), + "A format (currently must be \"xml\"), optionally followed " + "by a colon and an output file name or directory. A directory " + "is indicated by a trailing pathname separator. " + "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " + "If a directory is specified, output files will be created " + "within that directory, with file-names based on the test " + "executable's name and, if necessary, made unique by adding " + "digits."); + +GTEST_DEFINE_bool_( + print_time, + internal::BoolFromGTestEnv("print_time", true), + "True iff " GTEST_NAME_ + " should display elapsed time in text output."); + +GTEST_DEFINE_int32_( + random_seed, + internal::Int32FromGTestEnv("random_seed", 0), + "Random number seed to use when shuffling test orders. Must be in range " + "[1, 99999], or 0 to use a seed based on the current time."); + +GTEST_DEFINE_int32_( + repeat, + internal::Int32FromGTestEnv("repeat", 1), + "How many times to repeat each test. Specify a negative number " + "for repeating forever. Useful for shaking out flaky tests."); + +GTEST_DEFINE_bool_( + show_internal_stack_frames, false, + "True iff " GTEST_NAME_ " should include internal stack frames when " + "printing test failure stack traces."); + +GTEST_DEFINE_bool_( + shuffle, + internal::BoolFromGTestEnv("shuffle", false), + "True iff " GTEST_NAME_ + " should randomize tests' order on every run."); + +GTEST_DEFINE_int32_( + stack_trace_depth, + internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), + "The maximum number of stack frames to print when an " + "assertion fails. The valid range is 0 through 100, inclusive."); + +GTEST_DEFINE_string_( + stream_result_to, + internal::StringFromGTestEnv("stream_result_to", ""), + "This flag specifies the host name and the port number on which to stream " + "test results. Example: \"localhost:555\". The flag is effective only on " + "Linux."); + +GTEST_DEFINE_bool_( + throw_on_failure, + internal::BoolFromGTestEnv("throw_on_failure", false), + "When this flag is specified, a failed assertion will throw an exception " + "if exceptions are enabled or exit the program with a non-zero code " + "otherwise."); + +namespace internal { + +// Generates a random number from [0, range), using a Linear +// Congruential Generator (LCG). Crashes if 'range' is 0 or greater +// than kMaxRange. +UInt32 Random::Generate(UInt32 range) { + // These constants are the same as are used in glibc's rand(3). + state_ = (1103515245U*state_ + 12345U) % kMaxRange; + + GTEST_CHECK_(range > 0) + << "Cannot generate a number in the range [0, 0)."; + GTEST_CHECK_(range <= kMaxRange) + << "Generation of a number in [0, " << range << ") was requested, " + << "but this can only generate numbers in [0, " << kMaxRange << ")."; + + // Converting via modulus introduces a bit of downward bias, but + // it's simple, and a linear congruential generator isn't too good + // to begin with. + return state_ % range; +} + +// GTestIsInitialized() returns true iff the user has initialized +// Google Test. Useful for catching the user mistake of not initializing +// Google Test before calling RUN_ALL_TESTS(). +// +// A user must call testing::InitGoogleTest() to initialize Google +// Test. g_init_gtest_count is set to the number of times +// InitGoogleTest() has been called. We don't protect this variable +// under a mutex as it is only accessed in the main thread. +GTEST_API_ int g_init_gtest_count = 0; +static bool GTestIsInitialized() { return g_init_gtest_count != 0; } + +// Iterates over a vector of TestCases, keeping a running sum of the +// results of calling a given int-returning method on each. +// Returns the sum. +static int SumOverTestCaseList(const std::vector& case_list, + int (TestCase::*method)() const) { + int sum = 0; + for (size_t i = 0; i < case_list.size(); i++) { + sum += (case_list[i]->*method)(); + } + return sum; +} + +// Returns true iff the test case passed. +static bool TestCasePassed(const TestCase* test_case) { + return test_case->should_run() && test_case->Passed(); +} + +// Returns true iff the test case failed. +static bool TestCaseFailed(const TestCase* test_case) { + return test_case->should_run() && test_case->Failed(); +} + +// Returns true iff test_case contains at least one test that should +// run. +static bool ShouldRunTestCase(const TestCase* test_case) { + return test_case->should_run(); +} + +// AssertHelper constructor. +AssertHelper::AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message) + : data_(new AssertHelperData(type, file, line, message)) { +} + +AssertHelper::~AssertHelper() { + delete data_; +} + +// Message assignment, for assertion streaming support. +void AssertHelper::operator=(const Message& message) const { + UnitTest::GetInstance()-> + AddTestPartResult(data_->type, data_->file, data_->line, + AppendUserMessage(data_->message, message), + UnitTest::GetInstance()->impl() + ->CurrentOsStackTraceExceptTop(1) + // Skips the stack frame for this function itself. + ); // NOLINT +} + +// Mutex for linked pointers. +GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// Application pathname gotten in InitGoogleTest. +std::string g_executable_path; + +// Returns the current application's name, removing directory path if that +// is present. +FilePath GetCurrentExecutableName() { + FilePath result; + +#if GTEST_OS_WINDOWS + result.Set(FilePath(g_executable_path).RemoveExtension("exe")); +#else + result.Set(FilePath(g_executable_path)); +#endif // GTEST_OS_WINDOWS + + return result.RemoveDirectoryName(); +} + +// Functions for processing the gtest_output flag. + +// Returns the output format, or "" for normal printed output. +std::string UnitTestOptions::GetOutputFormat() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) return std::string(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + return (colon == NULL) ? + std::string(gtest_output_flag) : + std::string(gtest_output_flag, colon - gtest_output_flag); +} + +// Returns the name of the requested output file, or the default if none +// was explicitly specified. +std::string UnitTestOptions::GetAbsolutePathToOutputFile() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) + return ""; + + const char* const colon = strchr(gtest_output_flag, ':'); + if (colon == NULL) + return internal::FilePath::ConcatPaths( + internal::FilePath( + UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(kDefaultOutputFile)).string(); + + internal::FilePath output_name(colon + 1); + if (!output_name.IsAbsolutePath()) + // TODO(wan@google.com): on Windows \some\path is not an absolute + // path (as its meaning depends on the current drive), yet the + // following logic for turning it into an absolute path is wrong. + // Fix it. + output_name = internal::FilePath::ConcatPaths( + internal::FilePath(UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(colon + 1)); + + if (!output_name.IsDirectory()) + return output_name.string(); + + internal::FilePath result(internal::FilePath::GenerateUniqueFileName( + output_name, internal::GetCurrentExecutableName(), + GetOutputFormat().c_str())); + return result.string(); +} + +// Returns true iff the wildcard pattern matches the string. The +// first ':' or '\0' character in pattern marks the end of it. +// +// This recursive algorithm isn't very efficient, but is clear and +// works well enough for matching test names, which are short. +bool UnitTestOptions::PatternMatchesString(const char *pattern, + const char *str) { + switch (*pattern) { + case '\0': + case ':': // Either ':' or '\0' marks the end of the pattern. + return *str == '\0'; + case '?': // Matches any single character. + return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); + case '*': // Matches any string (possibly empty) of characters. + return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || + PatternMatchesString(pattern + 1, str); + default: // Non-special character. Matches itself. + return *pattern == *str && + PatternMatchesString(pattern + 1, str + 1); + } +} + +bool UnitTestOptions::MatchesFilter( + const std::string& name, const char* filter) { + const char *cur_pattern = filter; + for (;;) { + if (PatternMatchesString(cur_pattern, name.c_str())) { + return true; + } + + // Finds the next pattern in the filter. + cur_pattern = strchr(cur_pattern, ':'); + + // Returns if no more pattern can be found. + if (cur_pattern == NULL) { + return false; + } + + // Skips the pattern separater (the ':' character). + cur_pattern++; + } +} + +// Returns true iff the user-specified filter matches the test case +// name and the test name. +bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, + const std::string &test_name) { + const std::string& full_name = test_case_name + "." + test_name.c_str(); + + // Split --gtest_filter at '-', if there is one, to separate into + // positive filter and negative filter portions + const char* const p = GTEST_FLAG(filter).c_str(); + const char* const dash = strchr(p, '-'); + std::string positive; + std::string negative; + if (dash == NULL) { + positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter + negative = ""; + } else { + positive = std::string(p, dash); // Everything up to the dash + negative = std::string(dash + 1); // Everything after the dash + if (positive.empty()) { + // Treat '-test1' as the same as '*-test1' + positive = kUniversalFilter; + } + } + + // A filter is a colon-separated list of patterns. It matches a + // test if any pattern in it matches the test. + return (MatchesFilter(full_name, positive.c_str()) && + !MatchesFilter(full_name, negative.c_str())); +} + +#if GTEST_HAS_SEH +// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the +// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. +// This function is useful as an __except condition. +int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { + // Google Test should handle a SEH exception if: + // 1. the user wants it to, AND + // 2. this is not a breakpoint exception, AND + // 3. this is not a C++ exception (VC++ implements them via SEH, + // apparently). + // + // SEH exception code for C++ exceptions. + // (see http://support.microsoft.com/kb/185294 for more information). + const DWORD kCxxExceptionCode = 0xe06d7363; + + bool should_handle = true; + + if (!GTEST_FLAG(catch_exceptions)) + should_handle = false; + else if (exception_code == EXCEPTION_BREAKPOINT) + should_handle = false; + else if (exception_code == kCxxExceptionCode) + should_handle = false; + + return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; +} +#endif // GTEST_HAS_SEH + +} // namespace internal + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. Intercepts only failures from the current thread. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + TestPartResultArray* result) + : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), + result_(result) { + Init(); +} + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + InterceptMode intercept_mode, TestPartResultArray* result) + : intercept_mode_(intercept_mode), + result_(result) { + Init(); +} + +void ScopedFakeTestPartResultReporter::Init() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + old_reporter_ = impl->GetGlobalTestPartResultReporter(); + impl->SetGlobalTestPartResultReporter(this); + } else { + old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); + impl->SetTestPartResultReporterForCurrentThread(this); + } +} + +// The d'tor restores the test part result reporter used by Google Test +// before. +ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + impl->SetGlobalTestPartResultReporter(old_reporter_); + } else { + impl->SetTestPartResultReporterForCurrentThread(old_reporter_); + } +} + +// Increments the test part result count and remembers the result. +// This method is from the TestPartResultReporterInterface interface. +void ScopedFakeTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + result_->Append(result); +} + +namespace internal { + +// Returns the type ID of ::testing::Test. We should always call this +// instead of GetTypeId< ::testing::Test>() to get the type ID of +// testing::Test. This is to work around a suspected linker bug when +// using Google Test as a framework on Mac OS X. The bug causes +// GetTypeId< ::testing::Test>() to return different values depending +// on whether the call is from the Google Test framework itself or +// from user test code. GetTestTypeId() is guaranteed to always +// return the same value, as it always calls GetTypeId<>() from the +// gtest.cc, which is within the Google Test framework. +TypeId GetTestTypeId() { + return GetTypeId(); +} + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); + +// This predicate-formatter checks that 'results' contains a test part +// failure of the given type and that the failure message contains the +// given substring. +AssertionResult HasOneFailure(const char* /* results_expr */, + const char* /* type_expr */, + const char* /* substr_expr */, + const TestPartResultArray& results, + TestPartResult::Type type, + const string& substr) { + const std::string expected(type == TestPartResult::kFatalFailure ? + "1 fatal failure" : + "1 non-fatal failure"); + Message msg; + if (results.size() != 1) { + msg << "Expected: " << expected << "\n" + << " Actual: " << results.size() << " failures"; + for (int i = 0; i < results.size(); i++) { + msg << "\n" << results.GetTestPartResult(i); + } + return AssertionFailure() << msg; + } + + const TestPartResult& r = results.GetTestPartResult(0); + if (r.type() != type) { + return AssertionFailure() << "Expected: " << expected << "\n" + << " Actual:\n" + << r; + } + + if (strstr(r.message(), substr.c_str()) == NULL) { + return AssertionFailure() << "Expected: " << expected << " containing \"" + << substr << "\"\n" + << " Actual:\n" + << r; + } + + return AssertionSuccess(); +} + +// The constructor of SingleFailureChecker remembers where to look up +// test part results, what type of failure we expect, and what +// substring the failure message should contain. +SingleFailureChecker:: SingleFailureChecker( + const TestPartResultArray* results, + TestPartResult::Type type, + const string& substr) + : results_(results), + type_(type), + substr_(substr) {} + +// The destructor of SingleFailureChecker verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +SingleFailureChecker::~SingleFailureChecker() { + EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); +} + +DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultGlobalTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->current_test_result()->AddTestPartResult(result); + unit_test_->listeners()->repeater()->OnTestPartResult(result); +} + +DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); +} + +// Returns the global test part result reporter. +TestPartResultReporterInterface* +UnitTestImpl::GetGlobalTestPartResultReporter() { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + return global_test_part_result_repoter_; +} + +// Sets the global test part result reporter. +void UnitTestImpl::SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter) { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + global_test_part_result_repoter_ = reporter; +} + +// Returns the test part result reporter for the current thread. +TestPartResultReporterInterface* +UnitTestImpl::GetTestPartResultReporterForCurrentThread() { + return per_thread_test_part_result_reporter_.get(); +} + +// Sets the test part result reporter for the current thread. +void UnitTestImpl::SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter) { + per_thread_test_part_result_reporter_.set(reporter); +} + +// Gets the number of successful test cases. +int UnitTestImpl::successful_test_case_count() const { + return CountIf(test_cases_, TestCasePassed); +} + +// Gets the number of failed test cases. +int UnitTestImpl::failed_test_case_count() const { + return CountIf(test_cases_, TestCaseFailed); +} + +// Gets the number of all test cases. +int UnitTestImpl::total_test_case_count() const { + return static_cast(test_cases_.size()); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTestImpl::test_case_to_run_count() const { + return CountIf(test_cases_, ShouldRunTestCase); +} + +// Gets the number of successful tests. +int UnitTestImpl::successful_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); +} + +// Gets the number of failed tests. +int UnitTestImpl::failed_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); +} + +// Gets the number of disabled tests that will be reported in the XML report. +int UnitTestImpl::reportable_disabled_test_count() const { + return SumOverTestCaseList(test_cases_, + &TestCase::reportable_disabled_test_count); +} + +// Gets the number of disabled tests. +int UnitTestImpl::disabled_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); +} + +// Gets the number of tests to be printed in the XML report. +int UnitTestImpl::reportable_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); +} + +// Gets the number of all tests. +int UnitTestImpl::total_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); +} + +// Gets the number of tests that should run. +int UnitTestImpl::test_to_run_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); +} + +// Returns the current OS stack trace as an std::string. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// CurrentOsStackTraceExceptTop(1), Foo() will be included in the +// trace but Bar() and CurrentOsStackTraceExceptTop() won't. +std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { + (void)skip_count; + return ""; +} + +// Returns the current time in milliseconds. +TimeInMillis GetTimeInMillis() { +#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) + // Difference between 1970-01-01 and 1601-01-01 in milliseconds. + // http://analogous.blogspot.com/2005/04/epoch.html + const TimeInMillis kJavaEpochToWinFileTimeDelta = + static_cast(116444736UL) * 100000UL; + const DWORD kTenthMicrosInMilliSecond = 10000; + + SYSTEMTIME now_systime; + FILETIME now_filetime; + ULARGE_INTEGER now_int64; + // TODO(kenton@google.com): Shouldn't this just use + // GetSystemTimeAsFileTime()? + GetSystemTime(&now_systime); + if (SystemTimeToFileTime(&now_systime, &now_filetime)) { + now_int64.LowPart = now_filetime.dwLowDateTime; + now_int64.HighPart = now_filetime.dwHighDateTime; + now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - + kJavaEpochToWinFileTimeDelta; + return now_int64.QuadPart; + } + return 0; +#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ + __timeb64 now; + +# ifdef _MSC_VER + + // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 + // (deprecated function) there. + // TODO(kenton@google.com): Use GetTickCount()? Or use + // SystemTimeToFileTime() +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4996) // Temporarily disables warning 4996. + _ftime64(&now); +# pragma warning(pop) // Restores the warning state. +# else + + _ftime64(&now); + +# endif // _MSC_VER + + return static_cast(now.time) * 1000 + now.millitm; +#elif GTEST_HAS_GETTIMEOFDAY_ + struct timeval now; + gettimeofday(&now, NULL); + return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; +#else +# error "Don't know how to get the current time on your system." +#endif +} + +// Utilities + +// class String. + +#if GTEST_OS_WINDOWS_MOBILE +// Creates a UTF-16 wide string from the given ANSI string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the wide string, or NULL if the +// input is NULL. +LPCWSTR String::AnsiToUtf16(const char* ansi) { + if (!ansi) return NULL; + const int length = strlen(ansi); + const int unicode_length = + MultiByteToWideChar(CP_ACP, 0, ansi, length, + NULL, 0); + WCHAR* unicode = new WCHAR[unicode_length + 1]; + MultiByteToWideChar(CP_ACP, 0, ansi, length, + unicode, unicode_length); + unicode[unicode_length] = 0; + return unicode; +} + +// Creates an ANSI string from the given wide string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the ANSI string, or NULL if the +// input is NULL. +const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { + if (!utf16_str) return NULL; + const int ansi_length = + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + NULL, 0, NULL, NULL); + char* ansi = new char[ansi_length + 1]; + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + ansi, ansi_length, NULL, NULL); + ansi[ansi_length] = 0; + return ansi; +} + +#endif // GTEST_OS_WINDOWS_MOBILE + +// Compares two C strings. Returns true iff they have the same content. +// +// Unlike strcmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CStringEquals(const char * lhs, const char * rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + + return strcmp(lhs, rhs) == 0; +} + +#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +// Converts an array of wide chars to a narrow string using the UTF-8 +// encoding, and streams the result to the given Message object. +static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, + Message* msg) { + for (size_t i = 0; i != length; ) { // NOLINT + if (wstr[i] != L'\0') { + *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); + while (i != length && wstr[i] != L'\0') + i++; + } else { + *msg << '\0'; + i++; + } + } +} + +#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +} // namespace internal + +// Constructs an empty Message. +// We allocate the stringstream separately because otherwise each use of +// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's +// stack frame leading to huge stack frames in some cases; gcc does not reuse +// the stack space. +Message::Message() : ss_(new ::std::stringstream) { + // By default, we want there to be enough precision when printing + // a double to a Message. + *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); +} + +// These two overloads allow streaming a wide C string to a Message +// using the UTF-8 encoding. +Message& Message::operator <<(const wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); +} +Message& Message::operator <<(wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); +} + +#if GTEST_HAS_STD_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::std::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Gets the text streamed to this object so far as an std::string. +// Each '\0' character in the buffer is replaced with "\\0". +std::string Message::GetString() const { + return internal::StringStreamToString(ss_.get()); +} + +// AssertionResult constructors. +// Used in EXPECT_TRUE/FALSE(assertion_result). +AssertionResult::AssertionResult(const AssertionResult& other) + : success_(other.success_), + message_(other.message_.get() != NULL ? + new ::std::string(*other.message_) : + static_cast< ::std::string*>(NULL)) { +} + +// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. +AssertionResult AssertionResult::operator!() const { + AssertionResult negation(!success_); + if (message_.get() != NULL) + negation << *message_; + return negation; +} + +// Makes a successful assertion result. +AssertionResult AssertionSuccess() { + return AssertionResult(true); +} + +// Makes a failed assertion result. +AssertionResult AssertionFailure() { + return AssertionResult(false); +} + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << message. +AssertionResult AssertionFailure(const Message& message) { + return AssertionFailure() << message; +} + +namespace internal { + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const std::string& expected_value, + const std::string& actual_value, + bool ignoring_case) { + Message msg; + msg << "Value of: " << actual_expression; + if (actual_value != actual_expression) { + msg << "\n Actual: " << actual_value; + } + + msg << "\nExpected: " << expected_expression; + if (ignoring_case) { + msg << " (ignoring case)"; + } + if (expected_value != expected_expression) { + msg << "\nWhich is: " << expected_value; + } + + return AssertionFailure() << msg; +} + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +std::string GetBoolAssertionFailureMessage( + const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value) { + const char* actual_message = assertion_result.message(); + Message msg; + msg << "Value of: " << expression_text + << "\n Actual: " << actual_predicate_value; + if (actual_message[0] != '\0') + msg << " (" << actual_message << ")"; + msg << "\nExpected: " << expected_predicate_value; + return msg.GetString(); +} + +// Helper function for implementing ASSERT_NEAR. +AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error) { + const double diff = fabs(val1 - val2); + if (diff <= abs_error) return AssertionSuccess(); + + // TODO(wan): do not print the value of an expression if it's + // already a literal. + return AssertionFailure() + << "The difference between " << expr1 << " and " << expr2 + << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ", and\n" + << abs_error_expr << " evaluates to " << abs_error << "."; +} + + +// Helper template for implementing FloatLE() and DoubleLE(). +template +AssertionResult FloatingPointLE(const char* expr1, + const char* expr2, + RawType val1, + RawType val2) { + // Returns success if val1 is less than val2, + if (val1 < val2) { + return AssertionSuccess(); + } + + // or if val1 is almost equal to val2. + const FloatingPoint lhs(val1), rhs(val2); + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + // Note that the above two checks will both fail if either val1 or + // val2 is NaN, as the IEEE floating-point standard requires that + // any predicate involving a NaN must return false. + + ::std::stringstream val1_ss; + val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val1; + + ::std::stringstream val2_ss; + val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val2; + + return AssertionFailure() + << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" + << " Actual: " << StringStreamToString(&val1_ss) << " vs " + << StringStreamToString(&val2_ss); +} + +} // namespace internal + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +namespace internal { + +// The helper function for {ASSERT|EXPECT}_EQ with int or enum +// arguments. +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + if (expected == actual) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here +// just to avoid copy-and-paste of similar code. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + BiggestInt val1, BiggestInt val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + return AssertionFailure() \ + << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + }\ +} + +// Implements the helper function for {ASSERT|EXPECT}_NE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(NE, !=) +// Implements the helper function for {ASSERT|EXPECT}_LE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LE, <=) +// Implements the helper function for {ASSERT|EXPECT}_LT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LT, < ) +// Implements the helper function for {ASSERT|EXPECT}_GE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GE, >=) +// Implements the helper function for {ASSERT|EXPECT}_GT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GT, > ) + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + false); +} + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CaseInsensitiveCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + true); +} + +// The helper function for {ASSERT|EXPECT}_STRNE. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + return AssertionFailure() << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + } +} + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CaseInsensitiveCStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + return AssertionFailure() + << "Expected: (" << s1_expression << ") != (" + << s2_expression << ") (ignoring case), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + } +} + +} // namespace internal + +namespace { + +// Helper functions for implementing IsSubString() and IsNotSubstring(). + +// This group of overloaded functions return true iff needle is a +// substring of haystack. NULL is considered a substring of itself +// only. + +bool IsSubstringPred(const char* needle, const char* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return strstr(haystack, needle) != NULL; +} + +bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return wcsstr(haystack, needle) != NULL; +} + +// StringType here can be either ::std::string or ::std::wstring. +template +bool IsSubstringPred(const StringType& needle, + const StringType& haystack) { + return haystack.find(needle) != StringType::npos; +} + +// This function implements either IsSubstring() or IsNotSubstring(), +// depending on the value of the expected_to_be_substring parameter. +// StringType here can be const char*, const wchar_t*, ::std::string, +// or ::std::wstring. +template +AssertionResult IsSubstringImpl( + bool expected_to_be_substring, + const char* needle_expr, const char* haystack_expr, + const StringType& needle, const StringType& haystack) { + if (IsSubstringPred(needle, haystack) == expected_to_be_substring) + return AssertionSuccess(); + + const bool is_wide_string = sizeof(needle[0]) > 1; + const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; + return AssertionFailure() + << "Value of: " << needle_expr << "\n" + << " Actual: " << begin_string_quote << needle << "\"\n" + << "Expected: " << (expected_to_be_substring ? "" : "not ") + << "a substring of " << haystack_expr << "\n" + << "Which is: " << begin_string_quote << haystack << "\""; +} + +} // namespace + +// IsSubstring() and IsNotSubstring() check whether needle is a +// substring of haystack (NULL is considered a substring of itself +// only), and return an appropriate error message when they fail. + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +#if GTEST_HAS_STD_WSTRING +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +#if GTEST_OS_WINDOWS + +namespace { + +// Helper function for IsHRESULT{SuccessFailure} predicates +AssertionResult HRESULTFailureHelper(const char* expr, + const char* expected, + long hr) { // NOLINT +# if GTEST_OS_WINDOWS_MOBILE + + // Windows CE doesn't support FormatMessage. + const char error_text[] = ""; + +# else + + // Looks up the human-readable system message for the HRESULT code + // and since we're not passing any params to FormatMessage, we don't + // want inserts expanded. + const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS; + const DWORD kBufSize = 4096; + // Gets the system's human readable message string for this HRESULT. + char error_text[kBufSize] = { '\0' }; + DWORD message_length = ::FormatMessageA(kFlags, + 0, // no source, we're asking system + hr, // the error + 0, // no line width restrictions + error_text, // output buffer + kBufSize, // buf size + NULL); // no arguments for inserts + // Trims tailing white space (FormatMessage leaves a trailing CR-LF) + for (; message_length && IsSpace(error_text[message_length - 1]); + --message_length) { + error_text[message_length - 1] = '\0'; + } + +# endif // GTEST_OS_WINDOWS_MOBILE + + const std::string error_hex("0x" + String::FormatHexInt(hr)); + return ::testing::AssertionFailure() + << "Expected: " << expr << " " << expected << ".\n" + << " Actual: " << error_hex << " " << error_text << "\n"; +} + +} // namespace + +AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT + if (SUCCEEDED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "succeeds", hr); +} + +AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT + if (FAILED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "fails", hr); +} + +#endif // GTEST_OS_WINDOWS + +// Utility functions for encoding Unicode text (wide strings) in +// UTF-8. + +// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 +// like this: +// +// Code-point length Encoding +// 0 - 7 bits 0xxxxxxx +// 8 - 11 bits 110xxxxx 10xxxxxx +// 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx +// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +// The maximum code-point a one-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; + +// The maximum code-point a two-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; + +// The maximum code-point a three-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; + +// The maximum code-point a four-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; + +// Chops off the n lowest bits from a bit pattern. Returns the n +// lowest bits. As a side effect, the original bit pattern will be +// shifted to the right by n bits. +inline UInt32 ChopLowBits(UInt32* bits, int n) { + const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); + *bits >>= n; + return low_bits; +} + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted +// to "(Invalid Unicode 0xXXXXXXXX)". +std::string CodePointToUtf8(UInt32 code_point) { + if (code_point > kMaxCodePoint4) { + return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; + } + + char str[5]; // Big enough for the largest valid code point. + if (code_point <= kMaxCodePoint1) { + str[1] = '\0'; + str[0] = static_cast(code_point); // 0xxxxxxx + } else if (code_point <= kMaxCodePoint2) { + str[2] = '\0'; + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xC0 | code_point); // 110xxxxx + } else if (code_point <= kMaxCodePoint3) { + str[3] = '\0'; + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xE0 | code_point); // 1110xxxx + } else { // code_point <= kMaxCodePoint4 + str[4] = '\0'; + str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xF0 | code_point); // 11110xxx + } + return str; +} + +// The following two functions only make sense if the the system +// uses UTF-16 for wide string encoding. All supported systems +// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. + +// Determines if the arguments constitute UTF-16 surrogate pair +// and thus should be combined into a single Unicode code point +// using CreateCodePointFromUtf16SurrogatePair. +inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { + return sizeof(wchar_t) == 2 && + (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; +} + +// Creates a Unicode code point from UTF16 surrogate pair. +inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, + wchar_t second) { + const UInt32 mask = (1 << 10) - 1; + return (sizeof(wchar_t) == 2) ? + (((first & mask) << 10) | (second & mask)) + 0x10000 : + // This function should not be called when the condition is + // false, but we provide a sensible default in case it is. + static_cast(first); +} + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +std::string WideStringToUtf8(const wchar_t* str, int num_chars) { + if (num_chars == -1) + num_chars = static_cast(wcslen(str)); + + ::std::stringstream stream; + for (int i = 0; i < num_chars; ++i) { + UInt32 unicode_code_point; + + if (str[i] == L'\0') { + break; + } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { + unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], + str[i + 1]); + i++; + } else { + unicode_code_point = static_cast(str[i]); + } + + stream << CodePointToUtf8(unicode_code_point); + } + return StringStreamToString(&stream); +} + +// Converts a wide C string to an std::string using the UTF-8 encoding. +// NULL will be converted to "(null)". +std::string String::ShowWideCString(const wchar_t * wide_c_str) { + if (wide_c_str == NULL) return "(null)"; + + return internal::WideStringToUtf8(wide_c_str, -1); +} + +// Compares two wide C strings. Returns true iff they have the same +// content. +// +// Unlike wcscmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + + return wcscmp(lhs, rhs) == 0; +} + +// Helper function for *_STREQ on wide strings. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual) { + if (String::WideCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + false); +} + +// Helper function for *_STRNE on wide strings. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2) { + if (!String::WideCStringEquals(s1, s2)) { + return AssertionSuccess(); + } + + return AssertionFailure() << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: " + << PrintToString(s1) + << " vs " << PrintToString(s2); +} + +// Compares two C strings, ignoring case. Returns true iff they have +// the same content. +// +// Unlike strcasecmp(), this function can handle NULL argument(s). A +// NULL C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { + if (lhs == NULL) + return rhs == NULL; + if (rhs == NULL) + return false; + return posix::StrCaseCmp(lhs, rhs) == 0; +} + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. +bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + +#if GTEST_OS_WINDOWS + return _wcsicmp(lhs, rhs) == 0; +#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID + return wcscasecmp(lhs, rhs) == 0; +#else + // Android, Mac OS X and Cygwin don't define wcscasecmp. + // Other unknown OSes may not define it either. + wint_t left, right; + do { + left = towlower(*lhs++); + right = towlower(*rhs++); + } while (left && left == right); + return left == right; +#endif // OS selector +} + +// Returns true iff str ends with the given suffix, ignoring case. +// Any string is considered to end with an empty suffix. +bool String::EndsWithCaseInsensitive( + const std::string& str, const std::string& suffix) { + const size_t str_len = str.length(); + const size_t suffix_len = suffix.length(); + return (str_len >= suffix_len) && + CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len, + suffix.c_str()); +} + +// Formats an int value as "%02d". +std::string String::FormatIntWidth2(int value) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(2) << value; + return ss.str(); +} + +// Formats an int value as "%X". +std::string String::FormatHexInt(int value) { + std::stringstream ss; + ss << std::hex << std::uppercase << value; + return ss.str(); +} + +// Formats a byte as "%02X". +std::string String::FormatByte(unsigned char value) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase + << static_cast(value); + return ss.str(); +} + +// Converts the buffer in a stringstream to an std::string, converting NUL +// bytes to "\\0" along the way. +std::string StringStreamToString(::std::stringstream* ss) { + const ::std::string& str = ss->str(); + const char* const start = str.c_str(); + const char* const end = start + str.length(); + + std::string result; + result.reserve(2 * (end - start)); + for (const char* ch = start; ch != end; ++ch) { + if (*ch == '\0') { + result += "\\0"; // Replaces NUL with "\\0"; + } else { + result += *ch; + } + } + + return result; +} + +// Appends the user-supplied message to the Google-Test-generated message. +std::string AppendUserMessage(const std::string& gtest_msg, + const Message& user_msg) { + // Appends the user message if it's non-empty. + const std::string user_msg_string = user_msg.GetString(); + if (user_msg_string.empty()) { + return gtest_msg; + } + + return gtest_msg + "\n" + user_msg_string; +} + +} // namespace internal + +// class TestResult + +// Creates an empty TestResult. +TestResult::TestResult() + : death_test_count_(0), + elapsed_time_(0) { +} + +// D'tor. +TestResult::~TestResult() { +} + +// Returns the i-th test part result among all the results. i can +// range from 0 to total_part_count() - 1. If i is not in that range, +// aborts the program. +const TestPartResult& TestResult::GetTestPartResult(int i) const { + if (i < 0 || i >= total_part_count()) + internal::posix::Abort(); + return test_part_results_.at(i); +} + +// Returns the i-th test property. i can range from 0 to +// test_property_count() - 1. If i is not in that range, aborts the +// program. +const TestProperty& TestResult::GetTestProperty(int i) const { + if (i < 0 || i >= test_property_count()) + internal::posix::Abort(); + return test_properties_.at(i); +} + +// Clears the test part results. +void TestResult::ClearTestPartResults() { + test_part_results_.clear(); +} + +// Adds a test part result to the list. +void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { + test_part_results_.push_back(test_part_result); +} + +// Adds a test property to the list. If a property with the same key as the +// supplied property is already represented, the value of this test_property +// replaces the old value for that key. +void TestResult::RecordProperty(const std::string& xml_element, + const TestProperty& test_property) { + if (!ValidateTestProperty(xml_element, test_property)) { + return; + } + internal::MutexLock lock(&test_properites_mutex_); + const std::vector::iterator property_with_matching_key = + std::find_if(test_properties_.begin(), test_properties_.end(), + internal::TestPropertyKeyIs(test_property.key())); + if (property_with_matching_key == test_properties_.end()) { + test_properties_.push_back(test_property); + return; + } + property_with_matching_key->SetValue(test_property.value()); +} + +// The list of reserved attributes used in the element of XML +// output. +static const char* const kReservedTestSuitesAttributes[] = { + "disabled", + "errors", + "failures", + "name", + "random_seed", + "tests", + "time", + "timestamp" +}; + +// The list of reserved attributes used in the element of XML +// output. +static const char* const kReservedTestSuiteAttributes[] = { + "disabled", + "errors", + "failures", + "name", + "tests", + "time" +}; + +// The list of reserved attributes used in the element of XML output. +static const char* const kReservedTestCaseAttributes[] = { + "classname", + "name", + "status", + "time", + "type_param", + "value_param" +}; + +template +std::vector ArrayAsVector(const char* const (&array)[kSize]) { + return std::vector(array, array + kSize); +} + +static std::vector GetReservedAttributesForElement( + const std::string& xml_element) { + if (xml_element == "testsuites") { + return ArrayAsVector(kReservedTestSuitesAttributes); + } else if (xml_element == "testsuite") { + return ArrayAsVector(kReservedTestSuiteAttributes); + } else if (xml_element == "testcase") { + return ArrayAsVector(kReservedTestCaseAttributes); + } else { + GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; + } + // This code is unreachable but some compilers may not realizes that. + return std::vector(); +} + +static std::string FormatWordList(const std::vector& words) { + Message word_list; + for (size_t i = 0; i < words.size(); ++i) { + if (i > 0 && words.size() > 2) { + word_list << ", "; + } + if (i == words.size() - 1) { + word_list << "and "; + } + word_list << "'" << words[i] << "'"; + } + return word_list.GetString(); +} + +bool ValidateTestPropertyName(const std::string& property_name, + const std::vector& reserved_names) { + if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != + reserved_names.end()) { + ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name + << " (" << FormatWordList(reserved_names) + << " are reserved by " << GTEST_NAME_ << ")"; + return false; + } + return true; +} + +// Adds a failure if the key is a reserved attribute of the element named +// xml_element. Returns true if the property is valid. +bool TestResult::ValidateTestProperty(const std::string& xml_element, + const TestProperty& test_property) { + return ValidateTestPropertyName(test_property.key(), + GetReservedAttributesForElement(xml_element)); +} + +// Clears the object. +void TestResult::Clear() { + test_part_results_.clear(); + test_properties_.clear(); + death_test_count_ = 0; + elapsed_time_ = 0; +} + +// Returns true iff the test failed. +bool TestResult::Failed() const { + for (int i = 0; i < total_part_count(); ++i) { + if (GetTestPartResult(i).failed()) + return true; + } + return false; +} + +// Returns true iff the test part fatally failed. +static bool TestPartFatallyFailed(const TestPartResult& result) { + return result.fatally_failed(); +} + +// Returns true iff the test fatally failed. +bool TestResult::HasFatalFailure() const { + return CountIf(test_part_results_, TestPartFatallyFailed) > 0; +} + +// Returns true iff the test part non-fatally failed. +static bool TestPartNonfatallyFailed(const TestPartResult& result) { + return result.nonfatally_failed(); +} + +// Returns true iff the test has a non-fatal failure. +bool TestResult::HasNonfatalFailure() const { + return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; +} + +// Gets the number of all test parts. This is the sum of the number +// of successful test parts and the number of failed test parts. +int TestResult::total_part_count() const { + return static_cast(test_part_results_.size()); +} + +// Returns the number of the test properties. +int TestResult::test_property_count() const { + return static_cast(test_properties_.size()); +} + +// class Test + +// Creates a Test object. + +// The c'tor saves the values of all Google Test flags. +Test::Test() + : gtest_flag_saver_(new internal::GTestFlagSaver) { +} + +// The d'tor restores the values of all Google Test flags. +Test::~Test() { + delete gtest_flag_saver_; +} + +// Sets up the test fixture. +// +// A sub-class may override this. +void Test::SetUp() { +} + +// Tears down the test fixture. +// +// A sub-class may override this. +void Test::TearDown() { +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const std::string& key, const std::string& value) { + UnitTest::GetInstance()->RecordProperty(key, value); +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const std::string& key, int value) { + Message value_message; + value_message << value; + RecordProperty(key, value_message.GetString().c_str()); +} + +namespace internal { + +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const std::string& message) { + // This function is a friend of UnitTest and as such has access to + // AddTestPartResult. + UnitTest::GetInstance()->AddTestPartResult( + result_type, + NULL, // No info about the source file where the exception occurred. + -1, // We have no info on which line caused the exception. + message, + ""); // No stack trace, either. +} + +} // namespace internal + +// Google Test requires all tests in the same test case to use the same test +// fixture class. This function checks if the current test has the +// same fixture class as the first test in the current test case. If +// yes, it returns true; otherwise it generates a Google Test failure and +// returns false. +bool Test::HasSameFixtureClass() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + const TestCase* const test_case = impl->current_test_case(); + + // Info about the first test in the current test case. + const TestInfo* const first_test_info = test_case->test_info_list()[0]; + const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; + const char* const first_test_name = first_test_info->name(); + + // Info about the current test. + const TestInfo* const this_test_info = impl->current_test_info(); + const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; + const char* const this_test_name = this_test_info->name(); + + if (this_fixture_id != first_fixture_id) { + // Is the first test defined using TEST? + const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); + // Is this test defined using TEST? + const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); + + if (first_is_TEST || this_is_TEST) { + // The user mixed TEST and TEST_F in this test case - we'll tell + // him/her how to fix it. + + // Gets the name of the TEST and the name of the TEST_F. Note + // that first_is_TEST and this_is_TEST cannot both be true, as + // the fixture IDs are different for the two tests. + const char* const TEST_name = + first_is_TEST ? first_test_name : this_test_name; + const char* const TEST_F_name = + first_is_TEST ? this_test_name : first_test_name; + + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class, so mixing TEST_F and TEST in the same test case is\n" + << "illegal. In test case " << this_test_info->test_case_name() + << ",\n" + << "test " << TEST_F_name << " is defined using TEST_F but\n" + << "test " << TEST_name << " is defined using TEST. You probably\n" + << "want to change the TEST to TEST_F or move it to another test\n" + << "case."; + } else { + // The user defined two fixture classes with the same name in + // two namespaces - we'll tell him/her how to fix it. + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " + << this_test_info->test_case_name() << ",\n" + << "you defined test " << first_test_name + << " and test " << this_test_name << "\n" + << "using two different test fixture classes. This can happen if\n" + << "the two classes are from different namespaces or translation\n" + << "units and have the same name. You should probably rename one\n" + << "of the classes to put the tests into different test cases."; + } + return false; + } + + return true; +} + +#if GTEST_HAS_SEH + +// Adds an "exception thrown" fatal failure to the current test. This +// function returns its result via an output parameter pointer because VC++ +// prohibits creation of objects with destructors on stack in functions +// using __try (see error C2712). +static std::string* FormatSehExceptionMessage(DWORD exception_code, + const char* location) { + Message message; + message << "SEH exception with code 0x" << std::setbase(16) << + exception_code << std::setbase(10) << " thrown in " << location << "."; + + return new std::string(message.GetString()); +} + +#endif // GTEST_HAS_SEH + +namespace internal { + +#if GTEST_HAS_EXCEPTIONS + +// Adds an "exception thrown" fatal failure to the current test. +static std::string FormatCxxExceptionMessage(const char* description, + const char* location) { + Message message; + if (description != NULL) { + message << "C++ exception with description \"" << description << "\""; + } else { + message << "Unknown C++ exception"; + } + message << " thrown in " << location << "."; + + return message.GetString(); +} + +static std::string PrintTestPartResultToString( + const TestPartResult& test_part_result); + +GoogleTestFailureException::GoogleTestFailureException( + const TestPartResult& failure) + : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} + +#endif // GTEST_HAS_EXCEPTIONS + +// We put these helper functions in the internal namespace as IBM's xlC +// compiler rejects the code if they were declared static. + +// Runs the given method and handles SEH exceptions it throws, when +// SEH is supported; returns the 0-value for type Result in case of an +// SEH exception. (Microsoft compilers cannot handle SEH and C++ +// exceptions in the same function. Therefore, we provide a separate +// wrapper function for handling SEH exceptions.) +template +Result HandleSehExceptionsInMethodIfSupported( + T* object, Result (T::*method)(), const char* location) { +#if GTEST_HAS_SEH + __try { + return (object->*method)(); + } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT + GetExceptionCode())) { + // We create the exception message on the heap because VC++ prohibits + // creation of objects with destructors on stack in functions using __try + // (see error C2712). + std::string* exception_message = FormatSehExceptionMessage( + GetExceptionCode(), location); + internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, + *exception_message); + delete exception_message; + return static_cast(0); + } +#else + (void)location; + return (object->*method)(); +#endif // GTEST_HAS_SEH +} + +// Runs the given method and catches and reports C++ and/or SEH-style +// exceptions, if they are supported; returns the 0-value for type +// Result in case of an SEH exception. +template +Result HandleExceptionsInMethodIfSupported( + T* object, Result (T::*method)(), const char* location) { + // NOTE: The user code can affect the way in which Google Test handles + // exceptions by setting GTEST_FLAG(catch_exceptions), but only before + // RUN_ALL_TESTS() starts. It is technically possible to check the flag + // after the exception is caught and either report or re-throw the + // exception based on the flag's value: + // + // try { + // // Perform the test method. + // } catch (...) { + // if (GTEST_FLAG(catch_exceptions)) + // // Report the exception as failure. + // else + // throw; // Re-throws the original exception. + // } + // + // However, the purpose of this flag is to allow the program to drop into + // the debugger when the exception is thrown. On most platforms, once the + // control enters the catch block, the exception origin information is + // lost and the debugger will stop the program at the point of the + // re-throw in this function -- instead of at the point of the original + // throw statement in the code under test. For this reason, we perform + // the check early, sacrificing the ability to affect Google Test's + // exception handling in the method where the exception is thrown. + if (internal::GetUnitTestImpl()->catch_exceptions()) { +#if GTEST_HAS_EXCEPTIONS + try { + return HandleSehExceptionsInMethodIfSupported(object, method, location); + } catch (const internal::GoogleTestFailureException&) { // NOLINT + // This exception type can only be thrown by a failed Google + // Test assertion with the intention of letting another testing + // framework catch it. Therefore we just re-throw it. + throw; + } catch (const std::exception& e) { // NOLINT + internal::ReportFailureInUnknownLocation( + TestPartResult::kFatalFailure, + FormatCxxExceptionMessage(e.what(), location)); + } catch (...) { // NOLINT + internal::ReportFailureInUnknownLocation( + TestPartResult::kFatalFailure, + FormatCxxExceptionMessage(NULL, location)); + } + return static_cast(0); +#else + return HandleSehExceptionsInMethodIfSupported(object, method, location); +#endif // GTEST_HAS_EXCEPTIONS + } else { + return (object->*method)(); + } +} + +} // namespace internal + +// Runs the test and updates the test result. +void Test::Run() { + if (!HasSameFixtureClass()) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); + // We will run the test only if SetUp() was successful. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &Test::TestBody, "the test body"); + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &Test::TearDown, "TearDown()"); +} + +// Returns true iff the current test has a fatal failure. +bool Test::HasFatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); +} + +// Returns true iff the current test has a non-fatal failure. +bool Test::HasNonfatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()-> + HasNonfatalFailure(); +} + +// class TestInfo + +// Constructs a TestInfo object. It assumes ownership of the test factory +// object. +TestInfo::TestInfo(const std::string& a_test_case_name, + const std::string& a_name, + const char* a_type_param, + const char* a_value_param, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory) + : test_case_name_(a_test_case_name), + name_(a_name), + type_param_(a_type_param ? new std::string(a_type_param) : NULL), + value_param_(a_value_param ? new std::string(a_value_param) : NULL), + fixture_class_id_(fixture_class_id), + should_run_(false), + is_disabled_(false), + matches_filter_(false), + factory_(factory), + result_() {} + +// Destructs a TestInfo object. +TestInfo::~TestInfo() { delete factory_; } + +namespace internal { + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// type_param: the name of the test's type parameter, or NULL if +// this is not a typed or a type-parameterized test. +// value_param: text representation of the test's value parameter, +// or NULL if this is not a value-parameterized test. +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, + const char* name, + const char* type_param, + const char* value_param, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory) { + TestInfo* const test_info = + new TestInfo(test_case_name, name, type_param, value_param, + fixture_class_id, factory); + GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); + return test_info; +} + +#if GTEST_HAS_PARAM_TEST +void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line) { + Message errors; + errors + << "Attempted redefinition of test case " << test_case_name << ".\n" + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " << test_case_name << ", you tried\n" + << "to define a test using a fixture class different from the one\n" + << "used earlier. This can happen if the two fixture classes are\n" + << "from different namespaces and have the same name. You should\n" + << "probably rename one of the classes to put the tests into different\n" + << "test cases."; + + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors.GetString().c_str()); +} +#endif // GTEST_HAS_PARAM_TEST + +} // namespace internal + +namespace { + +// A predicate that checks the test name of a TestInfo against a known +// value. +// +// This is used for implementation of the TestCase class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestNameIs is copyable. + +//Commenting out this class since its not used and wherefor produces warnings +// class TestNameIs { +// public: +// // Constructor. +// // +// // TestNameIs has NO default constructor. +// explicit TestNameIs(const char* name) +// : name_(name) {} +// +// // Returns true iff the test name of test_info matches name_. +// bool operator()(const TestInfo * test_info) const { +// return test_info && test_info->name() == name_; +// } +// +// private: +// std::string name_; +//}; + +} // namespace + +namespace internal { + +// This method expands all parameterized tests registered with macros TEST_P +// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. +// This will be done just once during the program runtime. +void UnitTestImpl::RegisterParameterizedTests() { +#if GTEST_HAS_PARAM_TEST + if (!parameterized_tests_registered_) { + parameterized_test_registry_.RegisterTests(); + parameterized_tests_registered_ = true; + } +#endif +} + +} // namespace internal + +// Creates the test object, runs it, records its result, and then +// deletes it. +void TestInfo::Run() { + if (!should_run_) return; + + // Tells UnitTest where to store test result. + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_info(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Notifies the unit test event listeners that a test is about to start. + repeater->OnTestStart(*this); + + const TimeInMillis start = internal::GetTimeInMillis(); + + impl->os_stack_trace_getter()->UponLeavingGTest(); + + // Creates the test object. + Test* const test = internal::HandleExceptionsInMethodIfSupported( + factory_, &internal::TestFactoryBase::CreateTest, + "the test fixture's constructor"); + + // Runs the test only if the test object was created and its + // constructor didn't generate a fatal failure. + if ((test != NULL) && !Test::HasFatalFailure()) { + // This doesn't throw as all user code that can throw are wrapped into + // exception handling code. + test->Run(); + } + + // Deletes the test object. + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + test, &Test::DeleteSelf_, "the test fixture's destructor"); + + result_.set_elapsed_time(internal::GetTimeInMillis() - start); + + // Notifies the unit test event listener that a test has just finished. + repeater->OnTestEnd(*this); + + // Tells UnitTest to stop associating assertion results to this + // test. + impl->set_current_test_info(NULL); +} + +// class TestCase + +// Gets the number of successful tests in this test case. +int TestCase::successful_test_count() const { + return CountIf(test_info_list_, TestPassed); +} + +// Gets the number of failed tests in this test case. +int TestCase::failed_test_count() const { + return CountIf(test_info_list_, TestFailed); +} + +// Gets the number of disabled tests that will be reported in the XML report. +int TestCase::reportable_disabled_test_count() const { + return CountIf(test_info_list_, TestReportableDisabled); +} + +// Gets the number of disabled tests in this test case. +int TestCase::disabled_test_count() const { + return CountIf(test_info_list_, TestDisabled); +} + +// Gets the number of tests to be printed in the XML report. +int TestCase::reportable_test_count() const { + return CountIf(test_info_list_, TestReportable); +} + +// Get the number of tests in this test case that should run. +int TestCase::test_to_run_count() const { + return CountIf(test_info_list_, ShouldRunTest); +} + +// Gets the number of all tests. +int TestCase::total_test_count() const { + return static_cast(test_info_list_.size()); +} + +// Creates a TestCase with the given name. +// +// Arguments: +// +// name: name of the test case +// a_type_param: the name of the test case's type parameter, or NULL if +// this is not a typed or a type-parameterized test case. +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase::TestCase(const char* a_name, const char* a_type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) + : name_(a_name), + type_param_(a_type_param ? new std::string(a_type_param) : NULL), + set_up_tc_(set_up_tc), + tear_down_tc_(tear_down_tc), + should_run_(false), + elapsed_time_(0) { +} + +// Destructor of TestCase. +TestCase::~TestCase() { + // Deletes every Test in the collection. + ForEach(test_info_list_, internal::Delete); +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +const TestInfo* TestCase::GetTestInfo(int i) const { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +TestInfo* TestCase::GetMutableTestInfo(int i) { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Adds a test to this test case. Will delete the test upon +// destruction of the TestCase object. +void TestCase::AddTestInfo(TestInfo * test_info) { + test_info_list_.push_back(test_info); + test_indices_.push_back(static_cast(test_indices_.size())); +} + +// Runs every test in this TestCase. +void TestCase::Run() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_case(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + repeater->OnTestCaseStart(*this); + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); + + const internal::TimeInMillis start = internal::GetTimeInMillis(); + for (int i = 0; i < total_test_count(); i++) { + GetMutableTestInfo(i)->Run(); + } + elapsed_time_ = internal::GetTimeInMillis() - start; + + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); + + repeater->OnTestCaseEnd(*this); + impl->set_current_test_case(NULL); +} + +// Clears the results of all tests in this test case. +void TestCase::ClearResult() { + ad_hoc_test_result_.Clear(); + ForEach(test_info_list_, TestInfo::ClearTestResult); +} + +// Shuffles the tests in this test case. +void TestCase::ShuffleTests(internal::Random* random) { + Shuffle(random, &test_indices_); +} + +// Restores the test order to before the first shuffle. +void TestCase::UnshuffleTests() { + for (size_t i = 0; i < test_indices_.size(); i++) { + test_indices_[i] = static_cast(i); + } +} + +// Formats a countable noun. Depending on its quantity, either the +// singular form or the plural form is used. e.g. +// +// FormatCountableNoun(1, "formula", "formuli") returns "1 formula". +// FormatCountableNoun(5, "book", "books") returns "5 books". +static std::string FormatCountableNoun(int count, + const char * singular_form, + const char * plural_form) { + return internal::StreamableToString(count) + " " + + (count == 1 ? singular_form : plural_form); +} + +// Formats the count of tests. +static std::string FormatTestCount(int test_count) { + return FormatCountableNoun(test_count, "test", "tests"); +} + +// Formats the count of test cases. +static std::string FormatTestCaseCount(int test_case_count) { + return FormatCountableNoun(test_case_count, "test case", "test cases"); +} + +// Converts a TestPartResult::Type enum to human-friendly string +// representation. Both kNonFatalFailure and kFatalFailure are translated +// to "Failure", as the user usually doesn't care about the difference +// between the two when viewing the test result. +static const char * TestPartResultTypeToString(TestPartResult::Type type) { + switch (type) { + case TestPartResult::kSuccess: + return "Success"; + + case TestPartResult::kNonFatalFailure: + case TestPartResult::kFatalFailure: +#ifdef _MSC_VER + return "error: "; +#else + return "Failure\n"; +#endif + default: + return "Unknown result type"; + } +} + +namespace internal { + +// Prints a TestPartResult to an std::string. +static std::string PrintTestPartResultToString( + const TestPartResult& test_part_result) { + return (Message() + << internal::FormatFileLocation(test_part_result.file_name(), + test_part_result.line_number()) + << " " << TestPartResultTypeToString(test_part_result.type()) + << test_part_result.message()).GetString(); +} + +// Prints a TestPartResult. +static void PrintTestPartResult(const TestPartResult& test_part_result) { + const std::string& result = + PrintTestPartResultToString(test_part_result); + printf("%s\n", result.c_str()); + fflush(stdout); + // If the test program runs in Visual Studio or a debugger, the + // following statements add the test part result message to the Output + // window such that the user can double-click on it to jump to the + // corresponding source code location; otherwise they do nothing. +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + // We don't call OutputDebugString*() on Windows Mobile, as printing + // to stdout is done by OutputDebugString() there already - we don't + // want the same message printed twice. + ::OutputDebugStringA(result.c_str()); + ::OutputDebugStringA("\n"); +#endif +} + +// class PrettyUnitTestResultPrinter + +enum GTestColor { + COLOR_DEFAULT, + COLOR_RED, + COLOR_GREEN, + COLOR_YELLOW +}; + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns the character attribute for the given color. +WORD GetColorAttribute(GTestColor color) { + switch (color) { + case COLOR_RED: return FOREGROUND_RED; + case COLOR_GREEN: return FOREGROUND_GREEN; + case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; + default: return 0; + } +} + +#else + +// Returns the ANSI color code for the given color. COLOR_DEFAULT is +// an invalid input. +const char* GetAnsiColorCode(GTestColor color) { + switch (color) { + case COLOR_RED: return "1"; + case COLOR_GREEN: return "2"; + case COLOR_YELLOW: return "3"; + default: return NULL; + }; +} + +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns true iff Google Test should use colors in the output. +bool ShouldUseColor(bool stdout_is_tty) { + const char* const gtest_color = GTEST_FLAG(color).c_str(); + + if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { +#if GTEST_OS_WINDOWS + // On Windows the TERM variable is usually not set, but the + // console there does support colors. + return stdout_is_tty; +#else + // On non-Windows platforms, we rely on the TERM variable. + const char* const term = posix::GetEnv("TERM"); + const bool term_supports_color = + String::CStringEquals(term, "xterm") || + String::CStringEquals(term, "xterm-color") || + String::CStringEquals(term, "xterm-256color") || + String::CStringEquals(term, "screen") || + String::CStringEquals(term, "screen-256color") || + String::CStringEquals(term, "linux") || + String::CStringEquals(term, "cygwin"); + return stdout_is_tty && term_supports_color; +#endif // GTEST_OS_WINDOWS + } + + return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || + String::CaseInsensitiveCStringEquals(gtest_color, "true") || + String::CaseInsensitiveCStringEquals(gtest_color, "t") || + String::CStringEquals(gtest_color, "1"); + // We take "yes", "true", "t", and "1" as meaning "yes". If the + // value is neither one of these nor "auto", we treat it as "no" to + // be conservative. +} + +// Helpers for printing colored strings to stdout. Note that on Windows, we +// cannot simply emit special characters and have the terminal change colors. +// This routine must actually emit the characters rather than return a string +// that would be colored when printed, as can be done on Linux. +void ColoredPrintf(GTestColor color, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS + const bool use_color = false; +#else + static const bool in_color_mode = + ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); + const bool use_color = in_color_mode && (color != COLOR_DEFAULT); +#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + // The '!= 0' comparison is necessary to satisfy MSVC 7.1. + + if (!use_color) { + vprintf(fmt, args); + va_end(args); + return; + } + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); + + // Gets the current text color. + CONSOLE_SCREEN_BUFFER_INFO buffer_info; + GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); + const WORD old_color_attrs = buffer_info.wAttributes; + + // We need to flush the stream buffers into the console before each + // SetConsoleTextAttribute call lest it affect the text that is already + // printed but has not yet reached the console. + fflush(stdout); + SetConsoleTextAttribute(stdout_handle, + GetColorAttribute(color) | FOREGROUND_INTENSITY); + vprintf(fmt, args); + + fflush(stdout); + // Restores the text color. + SetConsoleTextAttribute(stdout_handle, old_color_attrs); +#else + printf("\033[0;3%sm", GetAnsiColorCode(color)); + vprintf(fmt, args); + printf("\033[m"); // Resets the terminal to default. +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + va_end(args); +} + +// Text printed in Google Test's text output and --gunit_list_tests +// output to label the type parameter and value parameter for a test. +static const char kTypeParamLabel[] = "TypeParam"; +static const char kValueParamLabel[] = "GetParam()"; + +void PrintFullTestCommentIfPresent(const TestInfo& test_info) { + const char* const type_param = test_info.type_param(); + const char* const value_param = test_info.value_param(); + + if (type_param != NULL || value_param != NULL) { + printf(", where "); + if (type_param != NULL) { + printf("%s = %s", kTypeParamLabel, type_param); + if (value_param != NULL) + printf(" and "); + } + if (value_param != NULL) { + printf("%s = %s", kValueParamLabel, value_param); + } + } +} + +// This class implements the TestEventListener interface. +// +// Class PrettyUnitTestResultPrinter is copyable. +class PrettyUnitTestResultPrinter : public TestEventListener { + public: + PrettyUnitTestResultPrinter() {} + static void PrintTestName(const char * test_case, const char * test) { + printf("%s.%s", test_case, test); + } + + // The following methods override what's in the TestEventListener class. + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + + private: + static void PrintFailedTests(const UnitTest& unit_test); +}; + + // Fired before each iteration of tests starts. +void PrettyUnitTestResultPrinter::OnTestIterationStart( + const UnitTest& unit_test, int iteration) { + if (GTEST_FLAG(repeat) != 1) + printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); + + const char* const filter = GTEST_FLAG(filter).c_str(); + + // Prints the filter if it's not *. This reminds the user that some + // tests may be skipped. + if (!String::CStringEquals(filter, kUniversalFilter)) { + ColoredPrintf(COLOR_YELLOW, + "Note: %s filter = %s\n", GTEST_NAME_, filter); + } + + if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { + const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); + ColoredPrintf(COLOR_YELLOW, + "Note: This is test shard %d of %s.\n", + static_cast(shard_index) + 1, + internal::posix::GetEnv(kTestTotalShards)); + } + + if (GTEST_FLAG(shuffle)) { + ColoredPrintf(COLOR_YELLOW, + "Note: Randomizing tests' orders with a seed of %d .\n", + unit_test.random_seed()); + } + + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("Running %s from %s.\n", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment set-up.\n"); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { + const std::string counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s", counts.c_str(), test_case.name()); + if (test_case.type_param() == NULL) { + printf("\n"); + } else { + printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { + ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + PrintTestName(test_info.test_case_name(), test_info.name()); + printf("\n"); + fflush(stdout); +} + +// Called after an assertion failure. +void PrettyUnitTestResultPrinter::OnTestPartResult( + const TestPartResult& result) { + // If the test part succeeded, we don't need to do anything. + if (result.type() == TestPartResult::kSuccess) + return; + + // Print failure message from the assertion (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { + if (test_info.result()->Passed()) { + ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else { + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + } + PrintTestName(test_info.test_case_name(), test_info.name()); + if (test_info.result()->Failed()) + PrintFullTestCommentIfPresent(test_info); + + if (GTEST_FLAG(print_time)) { + printf(" (%s ms)\n", internal::StreamableToString( + test_info.result()->elapsed_time()).c_str()); + } else { + printf("\n"); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { + if (!GTEST_FLAG(print_time)) return; + + const std::string counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s (%s ms total)\n\n", + counts.c_str(), test_case.name(), + internal::StreamableToString(test_case.elapsed_time()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment tear-down\n"); + fflush(stdout); +} + +// Internal helper for printing the list of failed tests. +void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { + const int failed_test_count = unit_test.failed_test_count(); + if (failed_test_count == 0) { + return; + } + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase& test_case = *unit_test.GetTestCase(i); + if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { + continue; + } + for (int j = 0; j < test_case.total_test_count(); ++j) { + const TestInfo& test_info = *test_case.GetTestInfo(j); + if (!test_info.should_run() || test_info.result()->Passed()) { + continue; + } + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s.%s", test_case.name(), test_info.name()); + PrintFullTestCommentIfPresent(test_info); + printf("\n"); + } + } +} + +void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("%s from %s ran.", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms total)", + internal::StreamableToString(unit_test.elapsed_time()).c_str()); + } + printf("\n"); + ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); + printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + + int num_failures = unit_test.failed_test_count(); + if (!unit_test.Passed()) { + const int failed_test_count = unit_test.failed_test_count(); + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); + PrintFailedTests(unit_test); + printf("\n%2d FAILED %s\n", num_failures, + num_failures == 1 ? "TEST" : "TESTS"); + } + + int num_disabled = unit_test.reportable_disabled_test_count(); + if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { + if (!num_failures) { + printf("\n"); // Add a spacer if no FAILURE banner is displayed. + } + ColoredPrintf(COLOR_YELLOW, + " YOU HAVE %d DISABLED %s\n\n", + num_disabled, + num_disabled == 1 ? "TEST" : "TESTS"); + } + // Ensure that Google Test output is printed before, e.g., heapchecker output. + fflush(stdout); +} + +// End PrettyUnitTestResultPrinter + +// class TestEventRepeater +// +// This class forwards events to other event listeners. +class TestEventRepeater : public TestEventListener { + public: + TestEventRepeater() : forwarding_enabled_(true) {} + virtual ~TestEventRepeater(); + void Append(TestEventListener *listener); + TestEventListener* Release(TestEventListener* listener); + + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled() const { return forwarding_enabled_; } + void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } + + virtual void OnTestProgramStart(const UnitTest& unit_test); + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& unit_test); + + private: + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled_; + // The list of listeners that receive events. + std::vector listeners_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); +}; + +TestEventRepeater::~TestEventRepeater() { + ForEach(listeners_, Delete); +} + +void TestEventRepeater::Append(TestEventListener *listener) { + listeners_.push_back(listener); +} + +// TODO(vladl@google.com): Factor the search functionality into Vector::Find. +TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { + for (size_t i = 0; i < listeners_.size(); ++i) { + if (listeners_[i] == listener) { + listeners_.erase(listeners_.begin() + i); + return listener; + } + } + + return NULL; +} + +// Since most methods are very similar, use macros to reduce boilerplate. +// This defines a member that forwards the call to all listeners. +#define GTEST_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = 0; i < listeners_.size(); i++) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} +// This defines a member that forwards the call to all listeners in reverse +// order. +#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} + +GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) +GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) +GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) +GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) +GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) +GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) +GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) +GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) + +#undef GTEST_REPEATER_METHOD_ +#undef GTEST_REVERSE_REPEATER_METHOD_ + +void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (size_t i = 0; i < listeners_.size(); i++) { + listeners_[i]->OnTestIterationStart(unit_test, iteration); + } + } +} + +void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { + listeners_[i]->OnTestIterationEnd(unit_test, iteration); + } + } +} + +// End TestEventRepeater + +// This class generates an XML output file. +class XmlUnitTestResultPrinter : public EmptyTestEventListener { + public: + explicit XmlUnitTestResultPrinter(const char* output_file); + + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + + private: + // Is c a whitespace character that is normalized to a space character + // when it appears in an XML attribute value? + static bool IsNormalizableWhitespace(char c) { + return c == 0x9 || c == 0xA || c == 0xD; + } + + // May c appear in a well-formed XML document? + static bool IsValidXmlCharacter(char c) { + return IsNormalizableWhitespace(c) || c >= 0x20; + } + + // Returns an XML-escaped copy of the input string str. If + // is_attribute is true, the text is meant to appear as an attribute + // value, and normalizable whitespace is preserved by replacing it + // with character references. + static std::string EscapeXml(const std::string& str, bool is_attribute); + + // Returns the given string with all characters invalid in XML removed. + static std::string RemoveInvalidXmlCharacters(const std::string& str); + + // Convenience wrapper around EscapeXml when str is an attribute value. + static std::string EscapeXmlAttribute(const std::string& str) { + return EscapeXml(str, true); + } + + // Convenience wrapper around EscapeXml when str is not an attribute value. + static std::string EscapeXmlText(const char* str) { + return EscapeXml(str, false); + } + + // Verifies that the given attribute belongs to the given element and + // streams the attribute as XML. + static void OutputXmlAttribute(std::ostream* stream, + const std::string& element_name, + const std::string& name, + const std::string& value); + + // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. + static void OutputXmlCDataSection(::std::ostream* stream, const char* data); + + // Streams an XML representation of a TestInfo object. + static void OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info); + + // Prints an XML representation of a TestCase object + static void PrintXmlTestCase(::std::ostream* stream, + const TestCase& test_case); + + // Prints an XML summary of unit_test to output stream out. + static void PrintXmlUnitTest(::std::ostream* stream, + const UnitTest& unit_test); + + // Produces a string representing the test properties in a result as space + // delimited XML attributes based on the property key="value" pairs. + // When the std::string is not empty, it includes a space at the beginning, + // to delimit this attribute from prior attributes. + static std::string TestPropertiesAsXmlAttributes(const TestResult& result); + + // The output file. + const std::string output_file_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); +}; + +// Creates a new XmlUnitTestResultPrinter. +XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) + : output_file_(output_file) { + if (output_file_.c_str() == NULL || output_file_.empty()) { + fprintf(stderr, "XML output file may not be null\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } +} + +// Called after the unit test ends. +void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + FILE* xmlout = NULL; + FilePath output_file(output_file_); + FilePath output_dir(output_file.RemoveFileName()); + + if (output_dir.CreateDirectoriesRecursively()) { + xmlout = posix::FOpen(output_file_.c_str(), "w"); + } + if (xmlout == NULL) { + // TODO(wan): report the reason of the failure. + // + // We don't do it for now as: + // + // 1. There is no urgent need for it. + // 2. It's a bit involved to make the errno variable thread-safe on + // all three operating systems (Linux, Windows, and Mac OS). + // 3. To interpret the meaning of errno in a thread-safe way, + // we need the strerror_r() function, which is not available on + // Windows. + fprintf(stderr, + "Unable to open file \"%s\"\n", + output_file_.c_str()); + fflush(stderr); + exit(EXIT_FAILURE); + } + std::stringstream stream; + PrintXmlUnitTest(&stream, unit_test); + fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); + fclose(xmlout); +} + +// Returns an XML-escaped copy of the input string str. If is_attribute +// is true, the text is meant to appear as an attribute value, and +// normalizable whitespace is preserved by replacing it with character +// references. +// +// Invalid XML characters in str, if any, are stripped from the output. +// It is expected that most, if not all, of the text processed by this +// module will consist of ordinary English text. +// If this module is ever modified to produce version 1.1 XML output, +// most invalid characters can be retained using character references. +// TODO(wan): It might be nice to have a minimally invasive, human-readable +// escaping scheme for invalid characters, rather than dropping them. +std::string XmlUnitTestResultPrinter::EscapeXml( + const std::string& str, bool is_attribute) { + Message m; + + for (size_t i = 0; i < str.size(); ++i) { + const char ch = str[i]; + switch (ch) { + case '<': + m << "<"; + break; + case '>': + m << ">"; + break; + case '&': + m << "&"; + break; + case '\'': + if (is_attribute) + m << "'"; + else + m << '\''; + break; + case '"': + if (is_attribute) + m << """; + else + m << '"'; + break; + default: + if (IsValidXmlCharacter(ch)) { + if (is_attribute && IsNormalizableWhitespace(ch)) + m << "&#x" << String::FormatByte(static_cast(ch)) + << ";"; + else + m << ch; + } + break; + } + } + + return m.GetString(); +} + +// Returns the given string with all characters invalid in XML removed. +// Currently invalid characters are dropped from the string. An +// alternative is to replace them with certain characters such as . or ?. +std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( + const std::string& str) { + std::string output; + output.reserve(str.size()); + for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) + if (IsValidXmlCharacter(*it)) + output.push_back(*it); + + return output; +} + +// The following routines generate an XML representation of a UnitTest +// object. +// +// This is how Google Test concepts map to the DTD: +// +// <-- corresponds to a UnitTest object +// <-- corresponds to a TestCase object +// <-- corresponds to a TestInfo object +// ... +// ... +// ... +// <-- individual assertion failures +// +// +// + +// Formats the given time in milliseconds as seconds. +std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { + ::std::stringstream ss; + ss << ms/1000.0; + return ss.str(); +} + +// Converts the given epoch time in milliseconds to a date string in the ISO +// 8601 format, without the timezone information. +std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { + // Using non-reentrant version as localtime_r is not portable. + time_t seconds = static_cast(ms / 1000); +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4996) // Temporarily disables warning 4996 + // (function or variable may be unsafe). + const struct tm* const time_struct = localtime(&seconds); // NOLINT +# pragma warning(pop) // Restores the warning state again. +#else + const struct tm* const time_struct = localtime(&seconds); // NOLINT +#endif + if (time_struct == NULL) + return ""; // Invalid ms value + + // YYYY-MM-DDThh:mm:ss + return StreamableToString(time_struct->tm_year + 1900) + "-" + + String::FormatIntWidth2(time_struct->tm_mon + 1) + "-" + + String::FormatIntWidth2(time_struct->tm_mday) + "T" + + String::FormatIntWidth2(time_struct->tm_hour) + ":" + + String::FormatIntWidth2(time_struct->tm_min) + ":" + + String::FormatIntWidth2(time_struct->tm_sec); +} + +// Streams an XML CDATA section, escaping invalid CDATA sequences as needed. +void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, + const char* data) { + const char* segment = data; + *stream << ""); + if (next_segment != NULL) { + stream->write( + segment, static_cast(next_segment - segment)); + *stream << "]]>]]>"); + } else { + *stream << segment; + break; + } + } + *stream << "]]>"; +} + +void XmlUnitTestResultPrinter::OutputXmlAttribute( + std::ostream* stream, + const std::string& element_name, + const std::string& name, + const std::string& value) { + const std::vector& allowed_names = + GetReservedAttributesForElement(element_name); + + GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != + allowed_names.end()) + << "Attribute " << name << " is not allowed for element <" << element_name + << ">."; + + *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; +} + +// Prints an XML representation of a TestInfo object. +// TODO(wan): There is also value in printing properties with the plain printer. +void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info) { + const TestResult& result = *test_info.result(); + const std::string kTestcase = "testcase"; + + *stream << " \n"; + } + const string location = internal::FormatCompilerIndependentFileLocation( + part.file_name(), part.line_number()); + const string summary = location + "\n" + part.summary(); + *stream << " "; + const string detail = location + "\n" + part.message(); + OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); + *stream << "\n"; + } + } + + if (failures == 0) + *stream << " />\n"; + else + *stream << " \n"; +} + +// Prints an XML representation of a TestCase object +void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, + const TestCase& test_case) { + const std::string kTestsuite = "testsuite"; + *stream << " <" << kTestsuite; + OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); + OutputXmlAttribute(stream, kTestsuite, "tests", + StreamableToString(test_case.reportable_test_count())); + OutputXmlAttribute(stream, kTestsuite, "failures", + StreamableToString(test_case.failed_test_count())); + OutputXmlAttribute( + stream, kTestsuite, "disabled", + StreamableToString(test_case.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuite, "errors", "0"); + OutputXmlAttribute(stream, kTestsuite, "time", + FormatTimeInMillisAsSeconds(test_case.elapsed_time())); + *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) + << ">\n"; + + for (int i = 0; i < test_case.total_test_count(); ++i) { + if (test_case.GetTestInfo(i)->is_reportable()) + OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); + } + *stream << " \n"; +} + +// Prints an XML summary of unit_test to output stream out. +void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, + const UnitTest& unit_test) { + const std::string kTestsuites = "testsuites"; + + *stream << "\n"; + *stream << "<" << kTestsuites; + + OutputXmlAttribute(stream, kTestsuites, "tests", + StreamableToString(unit_test.reportable_test_count())); + OutputXmlAttribute(stream, kTestsuites, "failures", + StreamableToString(unit_test.failed_test_count())); + OutputXmlAttribute( + stream, kTestsuites, "disabled", + StreamableToString(unit_test.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuites, "errors", "0"); + OutputXmlAttribute( + stream, kTestsuites, "timestamp", + FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); + OutputXmlAttribute(stream, kTestsuites, "time", + FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); + + if (GTEST_FLAG(shuffle)) { + OutputXmlAttribute(stream, kTestsuites, "random_seed", + StreamableToString(unit_test.random_seed())); + } + + *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result()); + + OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); + *stream << ">\n"; + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + if (unit_test.GetTestCase(i)->reportable_test_count() > 0) + PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); + } + *stream << "\n"; +} + +// Produces a string representing the test properties in a result as space +// delimited XML attributes based on the property key="value" pairs. +std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( + const TestResult& result) { + Message attributes; + for (int i = 0; i < result.test_property_count(); ++i) { + const TestProperty& property = result.GetTestProperty(i); + attributes << " " << property.key() << "=" + << "\"" << EscapeXmlAttribute(property.value()) << "\""; + } + return attributes.GetString(); +} + +// End XmlUnitTestResultPrinter + +#if GTEST_CAN_STREAM_RESULTS_ + +// Checks if str contains '=', '&', '%' or '\n' characters. If yes, +// replaces them by "%xx" where xx is their hexadecimal value. For +// example, replaces "=" with "%3D". This algorithm is O(strlen(str)) +// in both time and space -- important as the input str may contain an +// arbitrarily long test failure message and stack trace. +string StreamingListener::UrlEncode(const char* str) { + string result; + result.reserve(strlen(str) + 1); + for (char ch = *str; ch != '\0'; ch = *++str) { + switch (ch) { + case '%': + case '=': + case '&': + case '\n': + result.append("%" + String::FormatByte(static_cast(ch))); + break; + default: + result.push_back(ch); + break; + } + } + return result; +} + +void StreamingListener::SocketWriter::MakeConnection() { + GTEST_CHECK_(sockfd_ == -1) + << "MakeConnection() can't be called when there is already a connection."; + + addrinfo hints; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. + hints.ai_socktype = SOCK_STREAM; + addrinfo* servinfo = NULL; + + // Use the getaddrinfo() to get a linked list of IP addresses for + // the given host name. + const int error_num = getaddrinfo( + host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); + if (error_num != 0) { + GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " + << gai_strerror(error_num); + } + + // Loop through all the results and connect to the first we can. + for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; + cur_addr = cur_addr->ai_next) { + sockfd_ = socket( + cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); + if (sockfd_ != -1) { + // Connect the client socket to the server socket. + if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { + close(sockfd_); + sockfd_ = -1; + } + } + } + + freeaddrinfo(servinfo); // all done with this structure + + if (sockfd_ == -1) { + GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " + << host_name_ << ":" << port_num_; + } +} + +// End of class Streaming Listener +#endif // GTEST_CAN_STREAM_RESULTS__ + +// Class ScopedTrace + +// Pushes the given source file location and message onto a per-thread +// trace stack maintained by Google Test. +ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) + GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { + TraceInfo trace; + trace.file = file; + trace.line = line; + trace.message = message.GetString(); + + UnitTest::GetInstance()->PushGTestTrace(trace); +} + +// Pops the info pushed by the c'tor. +ScopedTrace::~ScopedTrace() + GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { + UnitTest::GetInstance()->PopGTestTrace(); +} + + +// class OsStackTraceGetter + +// Returns the current OS stack trace as an std::string. Parameters: +// +// max_depth - the maximum number of stack frames to be included +// in the trace. +// skip_count - the number of top frames to be skipped; doesn't count +// against max_depth. +// +string OsStackTraceGetter::CurrentStackTrace(int /* max_depth */, + int /* skip_count */) + GTEST_LOCK_EXCLUDED_(mutex_) { + return ""; +} + +void OsStackTraceGetter::UponLeavingGTest() + GTEST_LOCK_EXCLUDED_(mutex_) { +} + +const char* const +OsStackTraceGetter::kElidedFramesMarker = + "... " GTEST_NAME_ " internal frames ..."; + +// A helper class that creates the premature-exit file in its +// constructor and deletes the file in its destructor. +class ScopedPrematureExitFile { + public: + explicit ScopedPrematureExitFile(const char* premature_exit_filepath) + : premature_exit_filepath_(premature_exit_filepath) { + // If a path to the premature-exit file is specified... + if (premature_exit_filepath != NULL && *premature_exit_filepath != '\0') { + // create the file with a single "0" character in it. I/O + // errors are ignored as there's nothing better we can do and we + // don't want to fail the test because of this. + FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); + fwrite("0", 1, 1, pfile); + fclose(pfile); + } + } + + ~ScopedPrematureExitFile() { + if (premature_exit_filepath_ != NULL && *premature_exit_filepath_ != '\0') { + remove(premature_exit_filepath_); + } + } + + private: + const char* const premature_exit_filepath_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); +}; + +} // namespace internal + +// class TestEventListeners + +TestEventListeners::TestEventListeners() + : repeater_(new internal::TestEventRepeater()), + default_result_printer_(NULL), + default_xml_generator_(NULL) { +} + +TestEventListeners::~TestEventListeners() { delete repeater_; } + +// Returns the standard listener responsible for the default console +// output. Can be removed from the listeners list to shut down default +// console output. Note that removing this object from the listener list +// with Release transfers its ownership to the user. +void TestEventListeners::Append(TestEventListener* listener) { + repeater_->Append(listener); +} + +// Removes the given event listener from the list and returns it. It then +// becomes the caller's responsibility to delete the listener. Returns +// NULL if the listener is not found in the list. +TestEventListener* TestEventListeners::Release(TestEventListener* listener) { + if (listener == default_result_printer_) + default_result_printer_ = NULL; + else if (listener == default_xml_generator_) + default_xml_generator_ = NULL; + return repeater_->Release(listener); +} + +// Returns repeater that broadcasts the TestEventListener events to all +// subscribers. +TestEventListener* TestEventListeners::repeater() { return repeater_; } + +// Sets the default_result_printer attribute to the provided listener. +// The listener is also added to the listener list and previous +// default_result_printer is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { + if (default_result_printer_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_result_printer_); + default_result_printer_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Sets the default_xml_generator attribute to the provided listener. The +// listener is also added to the listener list and previous +// default_xml_generator is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { + if (default_xml_generator_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_xml_generator_); + default_xml_generator_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Controls whether events will be forwarded by the repeater to the +// listeners in the list. +bool TestEventListeners::EventForwardingEnabled() const { + return repeater_->forwarding_enabled(); +} + +void TestEventListeners::SuppressEventForwarding() { + repeater_->set_forwarding_enabled(false); +} + +// class UnitTest + +// Gets the singleton UnitTest object. The first time this method is +// called, a UnitTest object is constructed and returned. Consecutive +// calls will return the same object. +// +// We don't protect this under mutex_ as a user is not supposed to +// call this before main() starts, from which point on the return +// value will never change. +UnitTest* UnitTest::GetInstance() { + // When compiled with MSVC 7.1 in optimized mode, destroying the + // UnitTest object upon exiting the program messes up the exit code, + // causing successful tests to appear failed. We have to use a + // different implementation in this case to bypass the compiler bug. + // This implementation makes the compiler happy, at the cost of + // leaking the UnitTest object. + + // CodeGear C++Builder insists on a public destructor for the + // default implementation. Use this implementation to keep good OO + // design with private destructor. + +#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) + static UnitTest* const instance = new UnitTest; + return instance; +#else + static UnitTest instance; + return &instance; +#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +} + +// Gets the number of successful test cases. +int UnitTest::successful_test_case_count() const { + return impl()->successful_test_case_count(); +} + +// Gets the number of failed test cases. +int UnitTest::failed_test_case_count() const { + return impl()->failed_test_case_count(); +} + +// Gets the number of all test cases. +int UnitTest::total_test_case_count() const { + return impl()->total_test_case_count(); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTest::test_case_to_run_count() const { + return impl()->test_case_to_run_count(); +} + +// Gets the number of successful tests. +int UnitTest::successful_test_count() const { + return impl()->successful_test_count(); +} + +// Gets the number of failed tests. +int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } + +// Gets the number of disabled tests that will be reported in the XML report. +int UnitTest::reportable_disabled_test_count() const { + return impl()->reportable_disabled_test_count(); +} + +// Gets the number of disabled tests. +int UnitTest::disabled_test_count() const { + return impl()->disabled_test_count(); +} + +// Gets the number of tests to be printed in the XML report. +int UnitTest::reportable_test_count() const { + return impl()->reportable_test_count(); +} + +// Gets the number of all tests. +int UnitTest::total_test_count() const { return impl()->total_test_count(); } + +// Gets the number of tests that should run. +int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } + +// Gets the time of the test program start, in ms from the start of the +// UNIX epoch. +internal::TimeInMillis UnitTest::start_timestamp() const { + return impl()->start_timestamp(); +} + +// Gets the elapsed time, in milliseconds. +internal::TimeInMillis UnitTest::elapsed_time() const { + return impl()->elapsed_time(); +} + +// Returns true iff the unit test passed (i.e. all test cases passed). +bool UnitTest::Passed() const { return impl()->Passed(); } + +// Returns true iff the unit test failed (i.e. some test case failed +// or something outside of all tests failed). +bool UnitTest::Failed() const { return impl()->Failed(); } + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +const TestCase* UnitTest::GetTestCase(int i) const { + return impl()->GetTestCase(i); +} + +// Returns the TestResult containing information on test failures and +// properties logged outside of individual test cases. +const TestResult& UnitTest::ad_hoc_test_result() const { + return *impl()->ad_hoc_test_result(); +} + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +TestCase* UnitTest::GetMutableTestCase(int i) { + return impl()->GetMutableTestCase(i); +} + +// Returns the list of event listeners that can be used to track events +// inside Google Test. +TestEventListeners& UnitTest::listeners() { + return *impl()->listeners(); +} + +// Registers and returns a global test environment. When a test +// program is run, all global test environments will be set-up in the +// order they were registered. After all tests in the program have +// finished, all global test environments will be torn-down in the +// *reverse* order they were registered. +// +// The UnitTest object takes ownership of the given environment. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +Environment* UnitTest::AddEnvironment(Environment* env) { + if (env == NULL) { + return NULL; + } + + impl_->environments().push_back(env); + return env; +} + +// Adds a TestPartResult to the current TestResult object. All Google Test +// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call +// this to report their results. The user code should use the +// assertion macros instead of calling this directly. +void UnitTest::AddTestPartResult( + TestPartResult::Type result_type, + const char* file_name, + int line_number, + const std::string& message, + const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { + Message msg; + msg << message; + + internal::MutexLock lock(&mutex_); + if (impl_->gtest_trace_stack().size() > 0) { + msg << "\n" << GTEST_NAME_ << " trace:"; + + for (int i = static_cast(impl_->gtest_trace_stack().size()); + i > 0; --i) { + const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; + msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) + << " " << trace.message; + } + } + + if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { + msg << internal::kStackTraceMarker << os_stack_trace; + } + + const TestPartResult result = + TestPartResult(result_type, file_name, line_number, + msg.GetString().c_str()); + impl_->GetTestPartResultReporterForCurrentThread()-> + ReportTestPartResult(result); + + if (result_type != TestPartResult::kSuccess) { + // gtest_break_on_failure takes precedence over + // gtest_throw_on_failure. This allows a user to set the latter + // in the code (perhaps in order to use Google Test assertions + // with another testing framework) and specify the former on the + // command line for debugging. + if (GTEST_FLAG(break_on_failure)) { +#if GTEST_OS_WINDOWS + // Using DebugBreak on Windows allows gtest to still break into a debugger + // when a failure happens and both the --gtest_break_on_failure and + // the --gtest_catch_exceptions flags are specified. + DebugBreak(); +#else + // Dereference NULL through a volatile pointer to prevent the compiler + // from removing. We use this rather than abort() or __builtin_trap() for + // portability: Symbian doesn't implement abort() well, and some debuggers + // don't correctly trap abort(). + *static_cast(NULL) = 1; +#endif // GTEST_OS_WINDOWS + } else if (GTEST_FLAG(throw_on_failure)) { +#if GTEST_HAS_EXCEPTIONS + throw internal::GoogleTestFailureException(result); +#else + // We cannot call abort() as it generates a pop-up in debug mode + // that cannot be suppressed in VC 7.1 or below. + exit(1); +#endif + } + } +} + +// Adds a TestProperty to the current TestResult object when invoked from +// inside a test, to current TestCase's ad_hoc_test_result_ when invoked +// from SetUpTestCase or TearDownTestCase, or to the global property set +// when invoked elsewhere. If the result already contains a property with +// the same key, the value will be updated. +void UnitTest::RecordProperty(const std::string& key, + const std::string& value) { + impl_->RecordProperty(TestProperty(key, value)); +} + +// Runs all tests in this UnitTest object and prints the result. +// Returns 0 if successful, or 1 otherwise. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +int UnitTest::Run() { + const bool in_death_test_child_process = + internal::GTEST_FLAG(internal_run_death_test).length() > 0; + + // Google Test implements this protocol for catching that a test + // program exits before returning control to Google Test: + // + // 1. Upon start, Google Test creates a file whose absolute path + // is specified by the environment variable + // TEST_PREMATURE_EXIT_FILE. + // 2. When Google Test has finished its work, it deletes the file. + // + // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before + // running a Google-Test-based test program and check the existence + // of the file at the end of the test execution to see if it has + // exited prematurely. + + // If we are in the child process of a death test, don't + // create/delete the premature exit file, as doing so is unnecessary + // and will confuse the parent process. Otherwise, create/delete + // the file upon entering/leaving this function. If the program + // somehow exits before this function has a chance to return, the + // premature-exit file will be left undeleted, causing a test runner + // that understands the premature-exit-file protocol to report the + // test as having failed. + const internal::ScopedPrematureExitFile premature_exit_file( + in_death_test_child_process ? + NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); + + // Captures the value of GTEST_FLAG(catch_exceptions). This value will be + // used for the duration of the program. + impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); + +#if GTEST_HAS_SEH + // Either the user wants Google Test to catch exceptions thrown by the + // tests or this is executing in the context of death test child + // process. In either case the user does not want to see pop-up dialogs + // about crashes - they are expected. + if (impl()->catch_exceptions() || in_death_test_child_process) { +# if !GTEST_OS_WINDOWS_MOBILE + // SetErrorMode doesn't exist on CE. + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | + SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); +# endif // !GTEST_OS_WINDOWS_MOBILE + +# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE + // Death test children can be terminated with _abort(). On Windows, + // _abort() can show a dialog with a warning message. This forces the + // abort message to go to stderr instead. + _set_error_mode(_OUT_TO_STDERR); +# endif + +# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE + // In the debug version, Visual Studio pops up a separate dialog + // offering a choice to debug the aborted program. We need to suppress + // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement + // executed. Google Test will notify the user of any unexpected + // failure via stderr. + // + // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. + // Users of prior VC versions shall suffer the agony and pain of + // clicking through the countless debug dialogs. + // TODO(vladl@google.com): find a way to suppress the abort dialog() in the + // debug mode when compiled with VC 7.1 or lower. + if (!GTEST_FLAG(break_on_failure)) + _set_abort_behavior( + 0x0, // Clear the following flags: + _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. +# endif + } +#endif // GTEST_HAS_SEH + + return internal::HandleExceptionsInMethodIfSupported( + impl(), + &internal::UnitTestImpl::RunAllTests, + "auxiliary test code (environments or event listeners)") ? 0 : 1; +} + +// Returns the working directory when the first TEST() or TEST_F() was +// executed. +const char* UnitTest::original_working_dir() const { + return impl_->original_working_dir_.c_str(); +} + +// Returns the TestCase object for the test that's currently running, +// or NULL if no test is running. +const TestCase* UnitTest::current_test_case() const + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + return impl_->current_test_case(); +} + +// Returns the TestInfo object for the test that's currently running, +// or NULL if no test is running. +const TestInfo* UnitTest::current_test_info() const + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + return impl_->current_test_info(); +} + +// Returns the random seed used at the start of the current test run. +int UnitTest::random_seed() const { return impl_->random_seed(); } + +#if GTEST_HAS_PARAM_TEST +// Returns ParameterizedTestCaseRegistry object used to keep track of +// value-parameterized tests and instantiate and register them. +internal::ParameterizedTestCaseRegistry& + UnitTest::parameterized_test_registry() + GTEST_LOCK_EXCLUDED_(mutex_) { + return impl_->parameterized_test_registry(); +} +#endif // GTEST_HAS_PARAM_TEST + +// Creates an empty UnitTest. +UnitTest::UnitTest() { + impl_ = new internal::UnitTestImpl(this); +} + +// Destructor of UnitTest. +UnitTest::~UnitTest() { + delete impl_; +} + +// Pushes a trace defined by SCOPED_TRACE() on to the per-thread +// Google Test trace stack. +void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().push_back(trace); +} + +// Pops a trace from the per-thread Google Test trace stack. +void UnitTest::PopGTestTrace() + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().pop_back(); +} + +namespace internal { + +UnitTestImpl::UnitTestImpl(UnitTest* parent) + : parent_(parent), +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4355) // Temporarily disables warning 4355 + // (using this in initializer). + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +# pragma warning(pop) // Restores the warning state again. +#else + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#endif // _MSC_VER + global_test_part_result_repoter_( + &default_global_test_part_result_reporter_), + per_thread_test_part_result_reporter_( + &default_per_thread_test_part_result_reporter_), +#if GTEST_HAS_PARAM_TEST + parameterized_test_registry_(), + parameterized_tests_registered_(false), +#endif // GTEST_HAS_PARAM_TEST + last_death_test_case_(-1), + current_test_case_(NULL), + current_test_info_(NULL), + ad_hoc_test_result_(), + os_stack_trace_getter_(NULL), + post_flag_parse_init_performed_(false), + random_seed_(0), // Will be overridden by the flag before first use. + random_(0), // Will be reseeded before first use. + start_timestamp_(0), + elapsed_time_(0), +#if GTEST_HAS_DEATH_TEST + death_test_factory_(new DefaultDeathTestFactory), +#endif + // Will be overridden by the flag before first use. + catch_exceptions_(false) { + listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); +} + +UnitTestImpl::~UnitTestImpl() { + // Deletes every TestCase. + ForEach(test_cases_, internal::Delete); + + // Deletes every Environment. + ForEach(environments_, internal::Delete); + + delete os_stack_trace_getter_; +} + +// Adds a TestProperty to the current TestResult object when invoked in a +// context of a test, to current test case's ad_hoc_test_result when invoke +// from SetUpTestCase/TearDownTestCase, or to the global property set +// otherwise. If the result already contains a property with the same key, +// the value will be updated. +void UnitTestImpl::RecordProperty(const TestProperty& test_property) { + std::string xml_element; + TestResult* test_result; // TestResult appropriate for property recording. + + if (current_test_info_ != NULL) { + xml_element = "testcase"; + test_result = &(current_test_info_->result_); + } else if (current_test_case_ != NULL) { + xml_element = "testsuite"; + test_result = &(current_test_case_->ad_hoc_test_result_); + } else { + xml_element = "testsuites"; + test_result = &ad_hoc_test_result_; + } + test_result->RecordProperty(xml_element, test_property); +} + +#if GTEST_HAS_DEATH_TEST +// Disables event forwarding if the control is currently in a death test +// subprocess. Must not be called before InitGoogleTest. +void UnitTestImpl::SuppressTestEventsIfInSubprocess() { + if (internal_run_death_test_flag_.get() != NULL) + listeners()->SuppressEventForwarding(); +} +#endif // GTEST_HAS_DEATH_TEST + +// Initializes event listeners performing XML output as specified by +// UnitTestOptions. Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureXmlOutput() { + const std::string& output_format = UnitTestOptions::GetOutputFormat(); + if (output_format == "xml") { + listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); + } else if (output_format != "") { + printf("WARNING: unrecognized output format \"%s\" ignored.\n", + output_format.c_str()); + fflush(stdout); + } +} + +#if GTEST_CAN_STREAM_RESULTS_ +// Initializes event listeners for streaming test results in string form. +// Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureStreamingOutput() { + const std::string& target = GTEST_FLAG(stream_result_to); + if (!target.empty()) { + const size_t pos = target.find(':'); + if (pos != std::string::npos) { + listeners()->Append(new StreamingListener(target.substr(0, pos), + target.substr(pos+1))); + } else { + printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", + target.c_str()); + fflush(stdout); + } + } +} +#endif // GTEST_CAN_STREAM_RESULTS_ + +// Performs initialization dependent upon flag values obtained in +// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to +// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest +// this function is also called from RunAllTests. Since this function can be +// called more than once, it has to be idempotent. +void UnitTestImpl::PostFlagParsingInit() { + // Ensures that this function does not execute more than once. + if (!post_flag_parse_init_performed_) { + post_flag_parse_init_performed_ = true; + +#if GTEST_HAS_DEATH_TEST + InitDeathTestSubprocessControlInfo(); + SuppressTestEventsIfInSubprocess(); +#endif // GTEST_HAS_DEATH_TEST + + // Registers parameterized tests. This makes parameterized tests + // available to the UnitTest reflection API without running + // RUN_ALL_TESTS. + RegisterParameterizedTests(); + + // Configures listeners for XML output. This makes it possible for users + // to shut down the default XML output before invoking RUN_ALL_TESTS. + ConfigureXmlOutput(); + +#if GTEST_CAN_STREAM_RESULTS_ + // Configures listeners for streaming test results to the specified server. + ConfigureStreamingOutput(); +#endif // GTEST_CAN_STREAM_RESULTS_ + } +} + +// A predicate that checks the name of a TestCase against a known +// value. +// +// This is used for implementation of the UnitTest class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestCaseNameIs is copyable. +class TestCaseNameIs { + public: + // Constructor. + explicit TestCaseNameIs(const std::string& name) + : name_(name) {} + + // Returns true iff the name of test_case matches name_. + bool operator()(const TestCase* test_case) const { + return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; + } + + private: + std::string name_; +}; + +// Finds and returns a TestCase with the given name. If one doesn't +// exist, creates one and returns it. It's the CALLER'S +// RESPONSIBILITY to ensure that this function is only called WHEN THE +// TESTS ARE NOT SHUFFLED. +// +// Arguments: +// +// test_case_name: name of the test case +// type_param: the name of the test case's type parameter, or NULL if +// this is not a typed or a type-parameterized test case. +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, + const char* type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) { + // Can we find a TestCase with the given name? + const std::vector::const_iterator test_case = + std::find_if(test_cases_.begin(), test_cases_.end(), + TestCaseNameIs(test_case_name)); + + if (test_case != test_cases_.end()) + return *test_case; + + // No. Let's create one. + TestCase* const new_test_case = + new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); + + // Is this a death test case? + if (internal::UnitTestOptions::MatchesFilter(test_case_name, + kDeathTestCaseFilter)) { + // Yes. Inserts the test case after the last death test case + // defined so far. This only works when the test cases haven't + // been shuffled. Otherwise we may end up running a death test + // after a non-death test. + ++last_death_test_case_; + test_cases_.insert(test_cases_.begin() + last_death_test_case_, + new_test_case); + } else { + // No. Appends to the end of the list. + test_cases_.push_back(new_test_case); + } + + test_case_indices_.push_back(static_cast(test_case_indices_.size())); + return new_test_case; +} + +// Helpers for setting up / tearing down the given environment. They +// are for use in the ForEach() function. +static void SetUpEnvironment(Environment* env) { env->SetUp(); } +static void TearDownEnvironment(Environment* env) { env->TearDown(); } + +// Runs all tests in this UnitTest object, prints the result, and +// returns true if all tests are successful. If any exception is +// thrown during a test, the test is considered to be failed, but the +// rest of the tests will still be run. +// +// When parameterized tests are enabled, it expands and registers +// parameterized tests first in RegisterParameterizedTests(). +// All other functions called from RunAllTests() may safely assume that +// parameterized tests are ready to be counted and run. +bool UnitTestImpl::RunAllTests() { + // Makes sure InitGoogleTest() was called. + if (!GTestIsInitialized()) { + printf("%s", + "\nThis test program did NOT call ::testing::InitGoogleTest " + "before calling RUN_ALL_TESTS(). Please fix it.\n"); + return false; + } + + // Do not run any test if the --help flag was specified. + if (g_help_flag) + return true; + + // Repeats the call to the post-flag parsing initialization in case the + // user didn't call InitGoogleTest. + PostFlagParsingInit(); + + // Even if sharding is not on, test runners may want to use the + // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding + // protocol. + internal::WriteToShardStatusFileIfNeeded(); + + // True iff we are in a subprocess for running a thread-safe-style + // death test. + bool in_subprocess_for_death_test = false; + +#if GTEST_HAS_DEATH_TEST + in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); +#endif // GTEST_HAS_DEATH_TEST + + const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, + in_subprocess_for_death_test); + + // Compares the full test names with the filter to decide which + // tests to run. + const bool has_tests_to_run = FilterTests(should_shard + ? HONOR_SHARDING_PROTOCOL + : IGNORE_SHARDING_PROTOCOL) > 0; + + // Lists the tests and exits if the --gtest_list_tests flag was specified. + if (GTEST_FLAG(list_tests)) { + // This must be called *after* FilterTests() has been called. + ListTestsMatchingFilter(); + return true; + } + + random_seed_ = GTEST_FLAG(shuffle) ? + GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; + + // True iff at least one test has failed. + bool failed = false; + + TestEventListener* repeater = listeners()->repeater(); + + start_timestamp_ = GetTimeInMillis(); + repeater->OnTestProgramStart(*parent_); + + // How many times to repeat the tests? We don't want to repeat them + // when we are inside the subprocess of a death test. + const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); + // Repeats forever if the repeat count is negative. + const bool forever = repeat < 0; + for (int i = 0; forever || i != repeat; i++) { + // We want to preserve failures generated by ad-hoc test + // assertions executed before RUN_ALL_TESTS(). + ClearNonAdHocTestResult(); + + const TimeInMillis start = GetTimeInMillis(); + + // Shuffles test cases and tests if requested. + if (has_tests_to_run && GTEST_FLAG(shuffle)) { + random()->Reseed(random_seed_); + // This should be done before calling OnTestIterationStart(), + // such that a test event listener can see the actual test order + // in the event. + ShuffleTests(); + } + + // Tells the unit test event listeners that the tests are about to start. + repeater->OnTestIterationStart(*parent_, i); + + // Runs each test case if there is at least one test to run. + if (has_tests_to_run) { + // Sets up all environments beforehand. + repeater->OnEnvironmentsSetUpStart(*parent_); + ForEach(environments_, SetUpEnvironment); + repeater->OnEnvironmentsSetUpEnd(*parent_); + + // Runs the tests only if there was no fatal failure during global + // set-up. + if (!Test::HasFatalFailure()) { + for (int test_index = 0; test_index < total_test_case_count(); + test_index++) { + GetMutableTestCase(test_index)->Run(); + } + } + + // Tears down all environments in reverse order afterwards. + repeater->OnEnvironmentsTearDownStart(*parent_); + std::for_each(environments_.rbegin(), environments_.rend(), + TearDownEnvironment); + repeater->OnEnvironmentsTearDownEnd(*parent_); + } + + elapsed_time_ = GetTimeInMillis() - start; + + // Tells the unit test event listener that the tests have just finished. + repeater->OnTestIterationEnd(*parent_, i); + + // Gets the result and clears it. + if (!Passed()) { + failed = true; + } + + // Restores the original test order after the iteration. This + // allows the user to quickly repro a failure that happens in the + // N-th iteration without repeating the first (N - 1) iterations. + // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in + // case the user somehow changes the value of the flag somewhere + // (it's always safe to unshuffle the tests). + UnshuffleTests(); + + if (GTEST_FLAG(shuffle)) { + // Picks a new random seed for each iteration. + random_seed_ = GetNextRandomSeed(random_seed_); + } + } + + repeater->OnTestProgramEnd(*parent_); + + return !failed; +} + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded() { + const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); + if (test_shard_file != NULL) { + FILE* const file = posix::FOpen(test_shard_file, "w"); + if (file == NULL) { + ColoredPrintf(COLOR_RED, + "Could not write to the test shard status file \"%s\" " + "specified by the %s environment variable.\n", + test_shard_file, kTestShardStatusFile); + fflush(stdout); + exit(EXIT_FAILURE); + } + fclose(file); + } +} + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (i.e., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +bool ShouldShard(const char* total_shards_env, + const char* shard_index_env, + bool in_subprocess_for_death_test) { + if (in_subprocess_for_death_test) { + return false; + } + + const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); + const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); + + if (total_shards == -1 && shard_index == -1) { + return false; + } else if (total_shards == -1 && shard_index != -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestShardIndex << " = " << shard_index + << ", but have left " << kTestTotalShards << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (total_shards != -1 && shard_index == -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestTotalShards << " = " << total_shards + << ", but have left " << kTestShardIndex << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (shard_index < 0 || shard_index >= total_shards) { + const Message msg = Message() + << "Invalid environment variables: we require 0 <= " + << kTestShardIndex << " < " << kTestTotalShards + << ", but you have " << kTestShardIndex << "=" << shard_index + << ", " << kTestTotalShards << "=" << total_shards << ".\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } + + return total_shards > 1; +} + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error +// and aborts. +Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { + const char* str_val = posix::GetEnv(var); + if (str_val == NULL) { + return default_val; + } + + Int32 result; + if (!ParseInt32(Message() << "The value of environment variable " << var, + str_val, &result)) { + exit(EXIT_FAILURE); + } + return result; +} + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { + return (test_id % total_shards) == shard_index; +} + +// Compares the name of each test with the user-specified filter to +// decide whether the test should be run, then records the result in +// each TestCase and TestInfo object. +// If shard_tests == true, further filters tests based on sharding +// variables in the environment - see +// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. +// Returns the number of tests that should run. +int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { + const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestTotalShards, -1) : -1; + const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestShardIndex, -1) : -1; + + // num_runnable_tests are the number of tests that will + // run across all shards (i.e., match filter and are not disabled). + // num_selected_tests are the number of tests to be run on + // this shard. + int num_runnable_tests = 0; + int num_selected_tests = 0; + for (size_t i = 0; i < test_cases_.size(); i++) { + TestCase* const test_case = test_cases_[i]; + const std::string &test_case_name = test_case->name(); + test_case->set_should_run(false); + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + TestInfo* const test_info = test_case->test_info_list()[j]; + const std::string test_name(test_info->name()); + // A test is disabled if test case name or test name matches + // kDisableTestFilter. + const bool is_disabled = + internal::UnitTestOptions::MatchesFilter(test_case_name, + kDisableTestFilter) || + internal::UnitTestOptions::MatchesFilter(test_name, + kDisableTestFilter); + test_info->is_disabled_ = is_disabled; + + const bool matches_filter = + internal::UnitTestOptions::FilterMatchesTest(test_case_name, + test_name); + test_info->matches_filter_ = matches_filter; + + const bool is_runnable = + (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && + matches_filter; + + const bool is_selected = is_runnable && + (shard_tests == IGNORE_SHARDING_PROTOCOL || + ShouldRunTestOnShard(total_shards, shard_index, + num_runnable_tests)); + + num_runnable_tests += is_runnable; + num_selected_tests += is_selected; + + test_info->should_run_ = is_selected; + test_case->set_should_run(test_case->should_run() || is_selected); + } + } + return num_selected_tests; +} + +// Prints the given C-string on a single line by replacing all '\n' +// characters with string "\\n". If the output takes more than +// max_length characters, only prints the first max_length characters +// and "...". +static void PrintOnOneLine(const char* str, int max_length) { + if (str != NULL) { + for (int i = 0; *str != '\0'; ++str) { + if (i >= max_length) { + printf("..."); + break; + } + if (*str == '\n') { + printf("\\n"); + i += 2; + } else { + printf("%c", *str); + ++i; + } + } + } +} + +// Prints the names of the tests matching the user-specified filter flag. +void UnitTestImpl::ListTestsMatchingFilter() { + // Print at most this many characters for each type/value parameter. + const int kMaxParamLength = 250; + + for (size_t i = 0; i < test_cases_.size(); i++) { + const TestCase* const test_case = test_cases_[i]; + bool printed_test_case_name = false; + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + const TestInfo* const test_info = + test_case->test_info_list()[j]; + if (test_info->matches_filter_) { + if (!printed_test_case_name) { + printed_test_case_name = true; + printf("%s.", test_case->name()); + if (test_case->type_param() != NULL) { + printf(" # %s = ", kTypeParamLabel); + // We print the type parameter on a single line to make + // the output easy to parse by a program. + PrintOnOneLine(test_case->type_param(), kMaxParamLength); + } + printf("\n"); + } + printf(" %s", test_info->name()); + if (test_info->value_param() != NULL) { + printf(" # %s = ", kValueParamLabel); + // We print the value parameter on a single line to make the + // output easy to parse by a program. + PrintOnOneLine(test_info->value_param(), kMaxParamLength); + } + printf("\n"); + } + } + } + fflush(stdout); +} + +// Sets the OS stack trace getter. +// +// Does nothing if the input and the current OS stack trace getter are +// the same; otherwise, deletes the old getter and makes the input the +// current getter. +void UnitTestImpl::set_os_stack_trace_getter( + OsStackTraceGetterInterface* getter) { + if (os_stack_trace_getter_ != getter) { + delete os_stack_trace_getter_; + os_stack_trace_getter_ = getter; + } +} + +// Returns the current OS stack trace getter if it is not NULL; +// otherwise, creates an OsStackTraceGetter, makes it the current +// getter, and returns it. +OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { + if (os_stack_trace_getter_ == NULL) { + os_stack_trace_getter_ = new OsStackTraceGetter; + } + + return os_stack_trace_getter_; +} + +// Returns the TestResult for the test that's currently running, or +// the TestResult for the ad hoc test if no test is running. +TestResult* UnitTestImpl::current_test_result() { + return current_test_info_ ? + &(current_test_info_->result_) : &ad_hoc_test_result_; +} + +// Shuffles all test cases, and the tests within each test case, +// making sure that death tests are still run first. +void UnitTestImpl::ShuffleTests() { + // Shuffles the death test cases. + ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); + + // Shuffles the non-death test cases. + ShuffleRange(random(), last_death_test_case_ + 1, + static_cast(test_cases_.size()), &test_case_indices_); + + // Shuffles the tests inside each test case. + for (size_t i = 0; i < test_cases_.size(); i++) { + test_cases_[i]->ShuffleTests(random()); + } +} + +// Restores the test cases and tests to their order before the first shuffle. +void UnitTestImpl::UnshuffleTests() { + for (size_t i = 0; i < test_cases_.size(); i++) { + // Unshuffles the tests in each test case. + test_cases_[i]->UnshuffleTests(); + // Resets the index of each test case. + test_case_indices_[i] = static_cast(i); + } +} + +// Returns the current OS stack trace as an std::string. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, + int skip_count) { + // We pass skip_count + 1 to skip this wrapper function in addition + // to what the user really wants to skip. + return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); +} + +// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to +// suppress unreachable code warnings. +namespace { +class ClassUniqueToAlwaysTrue {}; +} + +bool IsTrue(bool condition) { return condition; } + +bool AlwaysTrue() { +#if GTEST_HAS_EXCEPTIONS + // This condition is always false so AlwaysTrue() never actually throws, + // but it makes the compiler think that it may throw. + if (IsTrue(false)) + throw ClassUniqueToAlwaysTrue(); +#endif // GTEST_HAS_EXCEPTIONS + return true; +} + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr) { + const size_t prefix_len = strlen(prefix); + if (strncmp(*pstr, prefix, prefix_len) == 0) { + *pstr += prefix_len; + return true; + } + return false; +} + +// Parses a string as a command line flag. The string should have +// the format "--flag=value". When def_optional is true, the "=value" +// part can be omitted. +// +// Returns the value of the flag, or NULL if the parsing failed. +const char* ParseFlagValue(const char* str, + const char* flag, + bool def_optional) { + // str and flag must not be NULL. + if (str == NULL || flag == NULL) return NULL; + + // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. + const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; + const size_t flag_len = flag_str.length(); + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + + // Skips the flag name. + const char* flag_end = str + flag_len; + + // When def_optional is true, it's OK to not have a "=value" part. + if (def_optional && (flag_end[0] == '\0')) { + return flag_end; + } + + // If def_optional is true and there are more characters after the + // flag name, or if def_optional is false, there must be a '=' after + // the flag name. + if (flag_end[0] != '=') return NULL; + + // Returns the string after "=". + return flag_end + 1; +} + +// Parses a string for a bool flag, in the form of either +// "--flag=value" or "--flag". +// +// In the former case, the value is taken as true as long as it does +// not start with '0', 'f', or 'F'. +// +// In the latter case, the value is taken as true. +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseBoolFlag(const char* str, const char* flag, bool* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, true); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Converts the string value to a bool. + *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); + return true; +} + +// Parses a string for an Int32 flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + return ParseInt32(Message() << "The value of flag --" << flag, + value_str, value); +} + +// Parses a string for a string flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseStringFlag(const char* str, const char* flag, std::string* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + *value = value_str; + return true; +} + +// Determines whether a string has a prefix that Google Test uses for its +// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. +// If Google Test detects that a command line flag has its prefix but is not +// recognized, it will print its help message. Flags starting with +// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test +// internal flags and do not trigger the help message. +static bool HasGoogleTestFlagPrefix(const char* str) { + return (SkipPrefix("--", &str) || + SkipPrefix("-", &str) || + SkipPrefix("/", &str)) && + !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && + (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || + SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); +} + +// Prints a string containing code-encoded text. The following escape +// sequences can be used in the string to control the text color: +// +// @@ prints a single '@' character. +// @R changes the color to red. +// @G changes the color to green. +// @Y changes the color to yellow. +// @D changes to the default terminal text color. +// +// TODO(wan@google.com): Write tests for this once we add stdout +// capturing to Google Test. +static void PrintColorEncoded(const char* str) { + GTestColor color = COLOR_DEFAULT; // The current color. + + // Conceptually, we split the string into segments divided by escape + // sequences. Then we print one segment at a time. At the end of + // each iteration, the str pointer advances to the beginning of the + // next segment. + for (;;) { + const char* p = strchr(str, '@'); + if (p == NULL) { + ColoredPrintf(color, "%s", str); + return; + } + + ColoredPrintf(color, "%s", std::string(str, p).c_str()); + + const char ch = p[1]; + str = p + 2; + if (ch == '@') { + ColoredPrintf(color, "@"); + } else if (ch == 'D') { + color = COLOR_DEFAULT; + } else if (ch == 'R') { + color = COLOR_RED; + } else if (ch == 'G') { + color = COLOR_GREEN; + } else if (ch == 'Y') { + color = COLOR_YELLOW; + } else { + --str; + } + } +} + +static const char kColorEncodedHelpMessage[] = +"This program contains tests written using " GTEST_NAME_ ". You can use the\n" +"following command line flags to control its behavior:\n" +"\n" +"Test Selection:\n" +" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" +" List the names of all tests instead of running them. The name of\n" +" TEST(Foo, Bar) is \"Foo.Bar\".\n" +" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" + "[@G-@YNEGATIVE_PATTERNS]@D\n" +" Run only the tests whose name matches one of the positive patterns but\n" +" none of the negative patterns. '?' matches any single character; '*'\n" +" matches any substring; ':' separates two patterns.\n" +" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" +" Run all disabled tests too.\n" +"\n" +"Test Execution:\n" +" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" +" Run the tests repeatedly; use a negative count to repeat forever.\n" +" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" +" Randomize tests' orders on every iteration.\n" +" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" +" Random number seed to use for shuffling test orders (between 1 and\n" +" 99999, or 0 to use a seed based on the current time).\n" +"\n" +"Test Output:\n" +" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" +" Enable/disable colored output. The default is @Gauto@D.\n" +" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" +" Don't print the elapsed time of each test.\n" +" @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" + GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" +" Generate an XML report in the given directory or with the given file\n" +" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +#if GTEST_CAN_STREAM_RESULTS_ +" @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" +" Stream test results to the given server.\n" +#endif // GTEST_CAN_STREAM_RESULTS_ +"\n" +"Assertion Behavior:\n" +#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" +" Set the default death test style.\n" +#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" +" Turn assertion failures into debugger break-points.\n" +" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" +" Turn assertion failures into C++ exceptions.\n" +" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" +" Do not report exceptions as test failures. Instead, allow them\n" +" to crash the program or throw a pop-up (on Windows).\n" +"\n" +"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " + "the corresponding\n" +"environment variable of a flag (all letters in upper-case). For example, to\n" +"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ + "color=no@D or set\n" +"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" +"\n" +"For more information, please read the " GTEST_NAME_ " documentation at\n" +"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" +"(not one in your own code or tests), please report it to\n" +"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. The type parameter CharType can be +// instantiated to either char or wchar_t. +template +void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { + for (int i = 1; i < *argc; i++) { + const std::string arg_string = StreamableToString(argv[i]); + const char* const arg = arg_string.c_str(); + + using internal::ParseBoolFlag; + using internal::ParseInt32Flag; + using internal::ParseStringFlag; + + // Do we see a Google Test flag? + if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, + >EST_FLAG(also_run_disabled_tests)) || + ParseBoolFlag(arg, kBreakOnFailureFlag, + >EST_FLAG(break_on_failure)) || + ParseBoolFlag(arg, kCatchExceptionsFlag, + >EST_FLAG(catch_exceptions)) || + ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || + ParseStringFlag(arg, kDeathTestStyleFlag, + >EST_FLAG(death_test_style)) || + ParseBoolFlag(arg, kDeathTestUseFork, + >EST_FLAG(death_test_use_fork)) || + ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || + ParseStringFlag(arg, kInternalRunDeathTestFlag, + >EST_FLAG(internal_run_death_test)) || + ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || + ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || + ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || + ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || + ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || + ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || + ParseInt32Flag(arg, kStackTraceDepthFlag, + >EST_FLAG(stack_trace_depth)) || + ParseStringFlag(arg, kStreamResultToFlag, + >EST_FLAG(stream_result_to)) || + ParseBoolFlag(arg, kThrowOnFailureFlag, + >EST_FLAG(throw_on_failure)) + ) { + // Yes. Shift the remainder of the argv list left by one. Note + // that argv has (*argc + 1) elements, the last one always being + // NULL. The following loop moves the trailing NULL element as + // well. + for (int j = i; j != *argc; j++) { + argv[j] = argv[j + 1]; + } + + // Decrements the argument count. + (*argc)--; + + // We also need to decrement the iterator as we just removed + // an element. + i--; + } else if (arg_string == "--help" || arg_string == "-h" || + arg_string == "-?" || arg_string == "/?" || + HasGoogleTestFlagPrefix(arg)) { + // Both help flag and unrecognized Google Test flags (excluding + // internal ones) trigger help display. + g_help_flag = true; + } + } + + if (g_help_flag) { + // We print the help here instead of in RUN_ALL_TESTS(), as the + // latter may not be called at all if the user is using Google + // Test with another testing framework. + PrintColorEncoded(kColorEncodedHelpMessage); + } +} + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +void ParseGoogleTestFlagsOnly(int* argc, char** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} +void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} + +// The internal implementation of InitGoogleTest(). +// +// The type parameter CharType can be instantiated to either char or +// wchar_t. +template +void InitGoogleTestImpl(int* argc, CharType** argv) { + g_init_gtest_count++; + + // We don't want to run the initialization code twice. + if (g_init_gtest_count != 1) return; + + if (*argc <= 0) return; + + internal::g_executable_path = internal::StreamableToString(argv[0]); + +#if GTEST_HAS_DEATH_TEST + + g_argvs.clear(); + for (int i = 0; i != *argc; i++) { + g_argvs.push_back(StreamableToString(argv[i])); + } + +#endif // GTEST_HAS_DEATH_TEST + + ParseGoogleTestFlagsOnly(argc, argv); + GetUnitTestImpl()->PostFlagParsingInit(); +} + +} // namespace internal + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +void InitGoogleTest(int* argc, char** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +void InitGoogleTest(int* argc, wchar_t** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +} // namespace testing +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) +// +// This file implements death tests. + + +#if GTEST_HAS_DEATH_TEST + +# if GTEST_OS_MAC +# include +# endif // GTEST_OS_MAC + +# include +# include +# include + +# if GTEST_OS_LINUX +# include +# endif // GTEST_OS_LINUX + +# include + +# if GTEST_OS_WINDOWS +# include +# else +# include +# include +# endif // GTEST_OS_WINDOWS + +# if GTEST_OS_QNX +# include +# endif // GTEST_OS_QNX + +#endif // GTEST_HAS_DEATH_TEST + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +// Constants. + +// The default death test style. +static const char kDefaultDeathTestStyle[] = "fast"; + +GTEST_DEFINE_string_( + death_test_style, + internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), + "Indicates how to run a death test in a forked child process: " + "\"threadsafe\" (child process re-executes the test binary " + "from the beginning, running only the specific death test) or " + "\"fast\" (child process runs the death test immediately " + "after forking)."); + +GTEST_DEFINE_bool_( + death_test_use_fork, + internal::BoolFromGTestEnv("death_test_use_fork", false), + "Instructs to use fork()/_exit() instead of clone() in death tests. " + "Ignored and always uses fork() on POSIX systems where clone() is not " + "implemented. Useful when running under valgrind or similar tools if " + "those do not support clone(). Valgrind 3.3.1 will just fail if " + "it sees an unsupported combination of clone() flags. " + "It is not recommended to use this flag w/o valgrind though it will " + "work in 99% of the cases. Once valgrind is fixed, this flag will " + "most likely be removed."); + +namespace internal { +GTEST_DEFINE_string_( + internal_run_death_test, "", + "Indicates the file, line number, temporal index of " + "the single death test to run, and a file descriptor to " + "which a success code may be sent, all separated by " + "the '|' characters. This flag is specified if and only if the current " + "process is a sub-process launched for running a thread-safe " + "death test. FOR INTERNAL USE ONLY."); +} // namespace internal + +#if GTEST_HAS_DEATH_TEST + +namespace internal { + +// Valid only for fast death tests. Indicates the code is running in the +// child process of a fast style death test. +static bool g_in_fast_death_test_child = false; + +// Returns a Boolean value indicating whether the caller is currently +// executing in the context of the death test child process. Tools such as +// Valgrind heap checkers may need this to modify their behavior in death +// tests. IMPORTANT: This is an internal utility. Using it may break the +// implementation of death tests. User code MUST NOT use it. +bool InDeathTestChild() { +# if GTEST_OS_WINDOWS + + // On Windows, death tests are thread-safe regardless of the value of the + // death_test_style flag. + return !GTEST_FLAG(internal_run_death_test).empty(); + +# else + + if (GTEST_FLAG(death_test_style) == "threadsafe") + return !GTEST_FLAG(internal_run_death_test).empty(); + else + return g_in_fast_death_test_child; +#endif +} + +} // namespace internal + +// ExitedWithCode constructor. +ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { +} + +// ExitedWithCode function-call operator. +bool ExitedWithCode::operator()(int exit_status) const { +# if GTEST_OS_WINDOWS + + return exit_status == exit_code_; + +# else + + return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; + +# endif // GTEST_OS_WINDOWS +} + +# if !GTEST_OS_WINDOWS +// KilledBySignal constructor. +KilledBySignal::KilledBySignal(int signum) : signum_(signum) { +} + +// KilledBySignal function-call operator. +bool KilledBySignal::operator()(int exit_status) const { + return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; +} +# endif // !GTEST_OS_WINDOWS + +namespace internal { + +// Utilities needed for death tests. + +// Generates a textual description of a given exit code, in the format +// specified by wait(2). +static std::string ExitSummary(int exit_code) { + Message m; + +# if GTEST_OS_WINDOWS + + m << "Exited with exit status " << exit_code; + +# else + + if (WIFEXITED(exit_code)) { + m << "Exited with exit status " << WEXITSTATUS(exit_code); + } else if (WIFSIGNALED(exit_code)) { + m << "Terminated by signal " << WTERMSIG(exit_code); + } +# ifdef WCOREDUMP + if (WCOREDUMP(exit_code)) { + m << " (core dumped)"; + } +# endif +# endif // GTEST_OS_WINDOWS + + return m.GetString(); +} + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +bool ExitedUnsuccessfully(int exit_status) { + return !ExitedWithCode(0)(exit_status); +} + +# if !GTEST_OS_WINDOWS +// Generates a textual failure message when a death test finds more than +// one thread running, or cannot determine the number of threads, prior +// to executing the given statement. It is the responsibility of the +// caller not to pass a thread_count of 1. +static std::string DeathTestThreadWarning(size_t thread_count) { + Message msg; + msg << "Death tests use fork(), which is unsafe particularly" + << " in a threaded context. For this test, " << GTEST_NAME_ << " "; + if (thread_count == 0) + msg << "couldn't detect the number of threads."; + else + msg << "detected " << thread_count << " threads."; + return msg.GetString(); +} +# endif // !GTEST_OS_WINDOWS + +// Flag characters for reporting a death test that did not die. +static const char kDeathTestLived = 'L'; +static const char kDeathTestReturned = 'R'; +static const char kDeathTestThrew = 'T'; +static const char kDeathTestInternalError = 'I'; + +// An enumeration describing all of the possible ways that a death test can +// conclude. DIED means that the process died while executing the test +// code; LIVED means that process lived beyond the end of the test code; +// RETURNED means that the test statement attempted to execute a return +// statement, which is not allowed; THREW means that the test statement +// returned control by throwing an exception. IN_PROGRESS means the test +// has not yet concluded. +// TODO(vladl@google.com): Unify names and possibly values for +// AbortReason, DeathTestOutcome, and flag characters above. +enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; + +// Routine for aborting the program which is safe to call from an +// exec-style death test child process, in which case the error +// message is propagated back to the parent process. Otherwise, the +// message is simply printed to stderr. In either case, the program +// then exits with status 1. +void DeathTestAbort(const std::string& message) { + // On a POSIX system, this function may be called from a threadsafe-style + // death test child process, which operates on a very small stack. Use + // the heap for any additional non-minuscule memory requirements. + const InternalRunDeathTestFlag* const flag = + GetUnitTestImpl()->internal_run_death_test_flag(); + if (flag != NULL) { + FILE* parent = posix::FDOpen(flag->write_fd(), "w"); + fputc(kDeathTestInternalError, parent); + fprintf(parent, "%s", message.c_str()); + fflush(parent); + _exit(1); + } else { + fprintf(stderr, "%s", message.c_str()); + fflush(stderr); + posix::Abort(); + } +} + +// A replacement for CHECK that calls DeathTestAbort if the assertion +// fails. +# define GTEST_DEATH_TEST_CHECK_(expression) \ + do { \ + if (!::testing::internal::IsTrue(expression)) { \ + DeathTestAbort( \ + ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + + ::testing::internal::StreamableToString(__LINE__) + ": " \ + + #expression); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for +// evaluating any system call that fulfills two conditions: it must return +// -1 on failure, and set errno to EINTR when it is interrupted and +// should be tried again. The macro expands to a loop that repeatedly +// evaluates the expression as long as it evaluates to -1 and sets +// errno to EINTR. If the expression evaluates to -1 but errno is +// something other than EINTR, DeathTestAbort is called. +# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ + do { \ + int gtest_retval; \ + do { \ + gtest_retval = (expression); \ + } while (gtest_retval == -1 && errno == EINTR); \ + if (gtest_retval == -1) { \ + DeathTestAbort( \ + ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + + ::testing::internal::StreamableToString(__LINE__) + ": " \ + + #expression + " != -1"); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// Returns the message describing the last system error in errno. +std::string GetLastErrnoDescription() { + return errno == 0 ? "" : posix::StrError(errno); +} + +// This is called from a death test parent process to read a failure +// message from the death test child process and log it with the FATAL +// severity. On Windows, the message is read from a pipe handle. On other +// platforms, it is read from a file descriptor. +static void FailFromInternalError(int fd) { + Message error; + char buffer[256]; + int num_read; + + do { + while ((num_read = posix::Read(fd, buffer, 255)) > 0) { + buffer[num_read] = '\0'; + error << buffer; + } + } while (num_read == -1 && errno == EINTR); + + if (num_read == 0) { + GTEST_LOG_(FATAL) << error.GetString(); + } else { + const int last_error = errno; + GTEST_LOG_(FATAL) << "Error while reading death test internal: " + << GetLastErrnoDescription() << " [" << last_error << "]"; + } +} + +// Death test constructor. Increments the running death test count +// for the current test. +DeathTest::DeathTest() { + TestInfo* const info = GetUnitTestImpl()->current_test_info(); + if (info == NULL) { + DeathTestAbort("Cannot run a death test outside of a TEST or " + "TEST_F construct"); + } +} + +// Creates and returns a death test by dispatching to the current +// death test factory. +bool DeathTest::Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) { + return GetUnitTestImpl()->death_test_factory()->Create( + statement, regex, file, line, test); +} + +const char* DeathTest::LastMessage() { + return last_death_test_message_.c_str(); +} + +void DeathTest::set_last_death_test_message(const std::string& message) { + last_death_test_message_ = message; +} + +std::string DeathTest::last_death_test_message_; + +// Provides cross platform implementation for some death functionality. +class DeathTestImpl : public DeathTest { + protected: + DeathTestImpl(const char* a_statement, const RE* a_regex) + : statement_(a_statement), + regex_(a_regex), + spawned_(false), + status_(-1), + outcome_(IN_PROGRESS), + read_fd_(-1), + write_fd_(-1) {} + + // read_fd_ is expected to be closed and cleared by a derived class. + ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } + + void Abort(AbortReason reason); + virtual bool Passed(bool status_ok); + + const char* statement() const { return statement_; } + const RE* regex() const { return regex_; } + bool spawned() const { return spawned_; } + void set_spawned(bool is_spawned) { spawned_ = is_spawned; } + int status() const { return status_; } + void set_status(int a_status) { status_ = a_status; } + DeathTestOutcome outcome() const { return outcome_; } + void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } + int read_fd() const { return read_fd_; } + void set_read_fd(int fd) { read_fd_ = fd; } + int write_fd() const { return write_fd_; } + void set_write_fd(int fd) { write_fd_ = fd; } + + // Called in the parent process only. Reads the result code of the death + // test child process via a pipe, interprets it to set the outcome_ + // member, and closes read_fd_. Outputs diagnostics and terminates in + // case of unexpected codes. + void ReadAndInterpretStatusByte(); + + private: + // The textual content of the code this object is testing. This class + // doesn't own this string and should not attempt to delete it. + const char* const statement_; + // The regular expression which test output must match. DeathTestImpl + // doesn't own this object and should not attempt to delete it. + const RE* const regex_; + // True if the death test child process has been successfully spawned. + bool spawned_; + // The exit status of the child process. + int status_; + // How the death test concluded. + DeathTestOutcome outcome_; + // Descriptor to the read end of the pipe to the child process. It is + // always -1 in the child process. The child keeps its write end of the + // pipe in write_fd_. + int read_fd_; + // Descriptor to the child's write end of the pipe to the parent process. + // It is always -1 in the parent process. The parent keeps its end of the + // pipe in read_fd_. + int write_fd_; +}; + +// Called in the parent process only. Reads the result code of the death +// test child process via a pipe, interprets it to set the outcome_ +// member, and closes read_fd_. Outputs diagnostics and terminates in +// case of unexpected codes. +void DeathTestImpl::ReadAndInterpretStatusByte() { + char flag; + int bytes_read; + + // The read() here blocks until data is available (signifying the + // failure of the death test) or until the pipe is closed (signifying + // its success), so it's okay to call this in the parent before + // the child process has exited. + do { + bytes_read = posix::Read(read_fd(), &flag, 1); + } while (bytes_read == -1 && errno == EINTR); + + if (bytes_read == 0) { + set_outcome(DIED); + } else if (bytes_read == 1) { + switch (flag) { + case kDeathTestReturned: + set_outcome(RETURNED); + break; + case kDeathTestThrew: + set_outcome(THREW); + break; + case kDeathTestLived: + set_outcome(LIVED); + break; + case kDeathTestInternalError: + FailFromInternalError(read_fd()); // Does not return. + break; + default: + GTEST_LOG_(FATAL) << "Death test child process reported " + << "unexpected status byte (" + << static_cast(flag) << ")"; + } + } else { + GTEST_LOG_(FATAL) << "Read from death test child process failed: " + << GetLastErrnoDescription(); + } + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); + set_read_fd(-1); +} + +// Signals that the death test code which should have exited, didn't. +// Should be called only in a death test child process. +// Writes a status byte to the child's status file descriptor, then +// calls _exit(1). +void DeathTestImpl::Abort(AbortReason reason) { + // The parent process considers the death test to be a failure if + // it finds any data in our pipe. So, here we write a single flag byte + // to the pipe, then exit. + const char status_ch = + reason == TEST_DID_NOT_DIE ? kDeathTestLived : + reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; + + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); + // We are leaking the descriptor here because on some platforms (i.e., + // when built as Windows DLL), destructors of global objects will still + // run after calling _exit(). On such systems, write_fd_ will be + // indirectly closed from the destructor of UnitTestImpl, causing double + // close if it is also closed here. On debug configurations, double close + // may assert. As there are no in-process buffers to flush here, we are + // relying on the OS to close the descriptor after the process terminates + // when the destructors are not run. + _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) +} + +// Returns an indented copy of stderr output for a death test. +// This makes distinguishing death test output lines from regular log lines +// much easier. +static ::std::string FormatDeathTestOutput(const ::std::string& output) { + ::std::string ret; + for (size_t at = 0; ; ) { + const size_t line_end = output.find('\n', at); + ret += "[ DEATH ] "; + if (line_end == ::std::string::npos) { + ret += output.substr(at); + break; + } + ret += output.substr(at, line_end + 1 - at); + at = line_end + 1; + } + return ret; +} + +// Assesses the success or failure of a death test, using both private +// members which have previously been set, and one argument: +// +// Private data members: +// outcome: An enumeration describing how the death test +// concluded: DIED, LIVED, THREW, or RETURNED. The death test +// fails in the latter three cases. +// status: The exit status of the child process. On *nix, it is in the +// in the format specified by wait(2). On Windows, this is the +// value supplied to the ExitProcess() API or a numeric code +// of the exception that terminated the program. +// regex: A regular expression object to be applied to +// the test's captured standard error output; the death test +// fails if it does not match. +// +// Argument: +// status_ok: true if exit_status is acceptable in the context of +// this particular death test, which fails if it is false +// +// Returns true iff all of the above conditions are met. Otherwise, the +// first failing condition, in the order given above, is the one that is +// reported. Also sets the last death test message string. +bool DeathTestImpl::Passed(bool status_ok) { + if (!spawned()) + return false; + + const std::string error_message = GetCapturedStderr(); + + bool success = false; + Message buffer; + + buffer << "Death test: " << statement() << "\n"; + switch (outcome()) { + case LIVED: + buffer << " Result: failed to die.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case THREW: + buffer << " Result: threw an exception.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case RETURNED: + buffer << " Result: illegal return in test statement.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case DIED: + if (status_ok) { + const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); + if (matched) { + success = true; + } else { + buffer << " Result: died but not with expected error.\n" + << " Expected: " << regex()->pattern() << "\n" + << "Actual msg:\n" << FormatDeathTestOutput(error_message); + } + } else { + buffer << " Result: died but not with expected exit code:\n" + << " " << ExitSummary(status()) << "\n" + << "Actual msg:\n" << FormatDeathTestOutput(error_message); + } + break; + case IN_PROGRESS: + default: + GTEST_LOG_(FATAL) + << "DeathTest::Passed somehow called before conclusion of test"; + } + + DeathTest::set_last_death_test_message(buffer.GetString()); + return success; +} + +# if GTEST_OS_WINDOWS +// WindowsDeathTest implements death tests on Windows. Due to the +// specifics of starting new processes on Windows, death tests there are +// always threadsafe, and Google Test considers the +// --gtest_death_test_style=fast setting to be equivalent to +// --gtest_death_test_style=threadsafe there. +// +// A few implementation notes: Like the Linux version, the Windows +// implementation uses pipes for child-to-parent communication. But due to +// the specifics of pipes on Windows, some extra steps are required: +// +// 1. The parent creates a communication pipe and stores handles to both +// ends of it. +// 2. The parent starts the child and provides it with the information +// necessary to acquire the handle to the write end of the pipe. +// 3. The child acquires the write end of the pipe and signals the parent +// using a Windows event. +// 4. Now the parent can release the write end of the pipe on its side. If +// this is done before step 3, the object's reference count goes down to +// 0 and it is destroyed, preventing the child from acquiring it. The +// parent now has to release it, or read operations on the read end of +// the pipe will not return when the child terminates. +// 5. The parent reads child's output through the pipe (outcome code and +// any possible error messages) from the pipe, and its stderr and then +// determines whether to fail the test. +// +// Note: to distinguish Win32 API calls from the local method and function +// calls, the former are explicitly resolved in the global namespace. +// +class WindowsDeathTest : public DeathTestImpl { + public: + WindowsDeathTest(const char* a_statement, + const RE* a_regex, + const char* file, + int line) + : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + virtual TestRole AssumeRole(); + + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; + // Handle to the write end of the pipe to the child process. + AutoHandle write_handle_; + // Child process handle. + AutoHandle child_handle_; + // Event the child process uses to signal the parent that it has + // acquired the handle to the write end of the pipe. After seeing this + // event the parent can release its own handles to make sure its + // ReadFile() calls return when the child terminates. + AutoHandle event_handle_; +}; + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int WindowsDeathTest::Wait() { + if (!spawned()) + return 0; + + // Wait until the child either signals that it has acquired the write end + // of the pipe or it dies. + const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; + switch (::WaitForMultipleObjects(2, + wait_handles, + FALSE, // Waits for any of the handles. + INFINITE)) { + case WAIT_OBJECT_0: + case WAIT_OBJECT_0 + 1: + break; + default: + GTEST_DEATH_TEST_CHECK_(false); // Should not get here. + } + + // The child has acquired the write end of the pipe or exited. + // We release the handle on our side and continue. + write_handle_.Reset(); + event_handle_.Reset(); + + ReadAndInterpretStatusByte(); + + // Waits for the child process to exit if it haven't already. This + // returns immediately if the child has already exited, regardless of + // whether previous calls to WaitForMultipleObjects synchronized on this + // handle or not. + GTEST_DEATH_TEST_CHECK_( + WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), + INFINITE)); + DWORD status_code; + GTEST_DEATH_TEST_CHECK_( + ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); + child_handle_.Reset(); + set_status(static_cast(status_code)); + return status(); +} + +// The AssumeRole process for a Windows death test. It creates a child +// process with the same executable as the current process to run the +// death test. The child process is given the --gtest_filter and +// --gtest_internal_run_death_test flags such that it knows to run the +// current death test only. +DeathTest::TestRole WindowsDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + // ParseInternalRunDeathTestFlag() has performed all the necessary + // processing. + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + // WindowsDeathTest uses an anonymous pipe to communicate results of + // a death test. + SECURITY_ATTRIBUTES handles_are_inheritable = { + sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + HANDLE read_handle, write_handle; + GTEST_DEATH_TEST_CHECK_( + ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, + 0) // Default buffer size. + != FALSE); + set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), + O_RDONLY)); + write_handle_.Reset(write_handle); + event_handle_.Reset(::CreateEvent( + &handles_are_inheritable, + TRUE, // The event will automatically reset to non-signaled state. + FALSE, // The initial state is non-signalled. + NULL)); // The even is unnamed. + GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); + const std::string filter_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + + info->test_case_name() + "." + info->name(); + const std::string internal_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + + "=" + file_ + "|" + StreamableToString(line_) + "|" + + StreamableToString(death_test_index) + "|" + + StreamableToString(static_cast(::GetCurrentProcessId())) + + // size_t has the same width as pointers on both 32-bit and 64-bit + // Windows platforms. + // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. + "|" + StreamableToString(reinterpret_cast(write_handle)) + + "|" + StreamableToString(reinterpret_cast(event_handle_.Get())); + + char executable_path[_MAX_PATH + 1]; // NOLINT + GTEST_DEATH_TEST_CHECK_( + _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, + executable_path, + _MAX_PATH)); + + std::string command_line = + std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + + internal_flag + "\""; + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // Flush the log buffers since the log streams are shared with the child. + FlushInfoLog(); + + // The child process will share the standard handles with the parent. + STARTUPINFOA startup_info; + memset(&startup_info, 0, sizeof(STARTUPINFO)); + startup_info.dwFlags = STARTF_USESTDHANDLES; + startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); + startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); + startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); + + PROCESS_INFORMATION process_info; + GTEST_DEATH_TEST_CHECK_(::CreateProcessA( + executable_path, + const_cast(command_line.c_str()), + NULL, // Retuned process handle is not inheritable. + NULL, // Retuned thread handle is not inheritable. + TRUE, // Child inherits all inheritable handles (for write_handle_). + 0x0, // Default creation flags. + NULL, // Inherit the parent's environment. + UnitTest::GetInstance()->original_working_dir(), + &startup_info, + &process_info) != FALSE); + child_handle_.Reset(process_info.hProcess); + ::CloseHandle(process_info.hThread); + set_spawned(true); + return OVERSEE_TEST; +} +# else // We are not on Windows. + +// ForkingDeathTest provides implementations for most of the abstract +// methods of the DeathTest interface. Only the AssumeRole method is +// left undefined. +class ForkingDeathTest : public DeathTestImpl { + public: + ForkingDeathTest(const char* statement, const RE* regex); + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + + protected: + void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } + + private: + // PID of child process during death test; 0 in the child process itself. + pid_t child_pid_; +}; + +// Constructs a ForkingDeathTest. +ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) + : DeathTestImpl(a_statement, a_regex), + child_pid_(-1) {} + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int ForkingDeathTest::Wait() { + if (!spawned()) + return 0; + + ReadAndInterpretStatusByte(); + + int status_value; + GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); + set_status(status_value); + return status_value; +} + +// A concrete death test class that forks, then immediately runs the test +// in the child process. +class NoExecDeathTest : public ForkingDeathTest { + public: + NoExecDeathTest(const char* a_statement, const RE* a_regex) : + ForkingDeathTest(a_statement, a_regex) { } + virtual TestRole AssumeRole(); +}; + +// The AssumeRole process for a fork-and-run death test. It implements a +// straightforward fork, with a simple pipe to transmit the status byte. +DeathTest::TestRole NoExecDeathTest::AssumeRole() { + const size_t thread_count = GetThreadCount(); + if (thread_count != 1) { + GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + + DeathTest::set_last_death_test_message(""); + CaptureStderr(); + // When we fork the process below, the log file buffers are copied, but the + // file descriptors are shared. We flush all log files here so that closing + // the file descriptors in the child process doesn't throw off the + // synchronization between descriptors and buffers in the parent process. + // This is as close to the fork as possible to avoid a race condition in case + // there are multiple threads running before the death test, and another + // thread writes to the log file. + FlushInfoLog(); + + const pid_t child_pid = fork(); + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + set_child_pid(child_pid); + if (child_pid == 0) { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); + set_write_fd(pipe_fd[1]); + // Redirects all logging to stderr in the child process to prevent + // concurrent writes to the log files. We capture stderr in the parent + // process and append the child process' output to a log. + LogToStderr(); + // Event forwarding to the listeners of event listener API mush be shut + // down in death test subprocesses. + GetUnitTestImpl()->listeners()->SuppressEventForwarding(); + g_in_fast_death_test_child = true; + return EXECUTE_TEST; + } else { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; + } +} + +// A concrete death test class that forks and re-executes the main +// program from the beginning, with command-line flags set that cause +// only this specific death test to be run. +class ExecDeathTest : public ForkingDeathTest { + public: + ExecDeathTest(const char* a_statement, const RE* a_regex, + const char* file, int line) : + ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } + virtual TestRole AssumeRole(); + private: + static ::std::vector + GetArgvsForDeathTestChildProcess() { + ::std::vector args = GetInjectableArgvs(); + return args; + } + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; +}; + +// Utility class for accumulating command-line arguments. +class Arguments { + public: + Arguments() { + args_.push_back(NULL); + } + + ~Arguments() { + for (std::vector::iterator i = args_.begin(); i != args_.end(); + ++i) { + free(*i); + } + } + void AddArgument(const char* argument) { + args_.insert(args_.end() - 1, posix::StrDup(argument)); + } + + template + void AddArguments(const ::std::vector& arguments) { + for (typename ::std::vector::const_iterator i = arguments.begin(); + i != arguments.end(); + ++i) { + args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); + } + } + char* const* Argv() { + return &args_[0]; + } + + private: + std::vector args_; +}; + +// A struct that encompasses the arguments to the child process of a +// threadsafe-style death test process. +struct ExecDeathTestArgs { + char* const* argv; // Command-line arguments for the child's call to exec + int close_fd; // File descriptor to close; the read end of a pipe +}; + +# if GTEST_OS_MAC +inline char** GetEnviron() { + // When Google Test is built as a framework on MacOS X, the environ variable + // is unavailable. Apple's documentation (man environ) recommends using + // _NSGetEnviron() instead. + return *_NSGetEnviron(); +} +# else +// Some POSIX platforms expect you to declare environ. extern "C" makes +// it reside in the global namespace. +extern "C" char** environ; +inline char** GetEnviron() { return environ; } +# endif // GTEST_OS_MAC + +# if !GTEST_OS_QNX +// The main function for a threadsafe-style death test child process. +// This function is called in a clone()-ed process and thus must avoid +// any potentially unsafe operations like malloc or libc functions. +static int ExecDeathTestChildMain(void* child_arg) { + ExecDeathTestArgs* const args = static_cast(child_arg); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); + + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; + } + + // We can safely call execve() as it's a direct system call. We + // cannot use execvp() as it's a libc function and thus potentially + // unsafe. Since execve() doesn't search the PATH, the user must + // invoke the test program via a valid path that contains at least + // one path separator. + execve(args->argv[0], args->argv, GetEnviron()); + DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + + original_dir + " failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; +} +# endif // !GTEST_OS_QNX + +// Two utility routines that together determine the direction the stack +// grows. +// This could be accomplished more elegantly by a single recursive +// function, but we want to guard against the unlikely possibility of +// a smart compiler optimizing the recursion away. +// +// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining +// StackLowerThanAddress into StackGrowsDown, which then doesn't give +// correct answer. +void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; +void StackLowerThanAddress(const void* ptr, bool* result) { + int dummy; + *result = (&dummy < ptr); +} + +bool StackGrowsDown() { + int dummy; + bool result; + StackLowerThanAddress(&dummy, &result); + return result; +} + +// Spawns a child process with the same executable as the current process in +// a thread-safe manner and instructs it to run the death test. The +// implementation uses fork(2) + exec. On systems where clone(2) is +// available, it is used instead, being slightly more thread-safe. On QNX, +// fork supports only single-threaded environments, so this function uses +// spawn(2) there instead. The function dies with an error message if +// anything goes wrong. +static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { + ExecDeathTestArgs args = { argv, close_fd }; + pid_t child_pid = -1; + +# if GTEST_OS_QNX + // Obtains the current directory and sets it to be closed in the child + // process. + const int cwd_fd = open(".", O_RDONLY); + GTEST_DEATH_TEST_CHECK_(cwd_fd != -1); + GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC)); + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; + } + + int fd_flags; + // Set close_fd to be closed after spawn. + GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); + GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, + fd_flags | FD_CLOEXEC)); + struct inheritance inherit = {0}; + // spawn is a system call. + child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); + // Restores the current working directory. + GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); + +# else // GTEST_OS_QNX +# if GTEST_OS_LINUX + // When a SIGPROF signal is received while fork() or clone() are executing, + // the process may hang. To avoid this, we ignore SIGPROF here and re-enable + // it after the call to fork()/clone() is complete. + struct sigaction saved_sigprof_action; + struct sigaction ignore_sigprof_action; + memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); + sigemptyset(&ignore_sigprof_action.sa_mask); + ignore_sigprof_action.sa_handler = SIG_IGN; + GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( + SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); +# endif // GTEST_OS_LINUX + +# if GTEST_HAS_CLONE + const bool use_fork = GTEST_FLAG(death_test_use_fork); + + if (!use_fork) { + static const bool stack_grows_down = StackGrowsDown(); + const size_t stack_size = getpagesize(); + // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. + void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_PRIVATE, -1, 0); + GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); + + // Maximum stack alignment in bytes: For a downward-growing stack, this + // amount is subtracted from size of the stack space to get an address + // that is within the stack space and is aligned on all systems we care + // about. As far as I know there is no ABI with stack alignment greater + // than 64. We assume stack and stack_size already have alignment of + // kMaxStackAlignment. + const size_t kMaxStackAlignment = 64; + void* const stack_top = + static_cast(stack) + + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); + GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && + reinterpret_cast(stack_top) % kMaxStackAlignment == 0); + + child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); + + GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); + } +# else + const bool use_fork = true; +# endif // GTEST_HAS_CLONE + + if (use_fork && (child_pid = fork()) == 0) { + ExecDeathTestChildMain(&args); + _exit(0); + } +# endif // GTEST_OS_QNX +# if GTEST_OS_LINUX + GTEST_DEATH_TEST_CHECK_SYSCALL_( + sigaction(SIGPROF, &saved_sigprof_action, NULL)); +# endif // GTEST_OS_LINUX + + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + return child_pid; +} + +// The AssumeRole process for a fork-and-exec death test. It re-executes the +// main program from the beginning, setting the --gtest_filter +// and --gtest_internal_run_death_test flags to cause only the current +// death test to be re-run. +DeathTest::TestRole ExecDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + // Clear the close-on-exec flag on the write end of the pipe, lest + // it be closed when the child process does an exec: + GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); + + const std::string filter_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + + info->test_case_name() + "." + info->name(); + const std::string internal_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + + file_ + "|" + StreamableToString(line_) + "|" + + StreamableToString(death_test_index) + "|" + + StreamableToString(pipe_fd[1]); + Arguments args; + args.AddArguments(GetArgvsForDeathTestChildProcess()); + args.AddArgument(filter_flag.c_str()); + args.AddArgument(internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // See the comment in NoExecDeathTest::AssumeRole for why the next line + // is necessary. + FlushInfoLog(); + + const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_child_pid(child_pid); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; +} + +# endif // !GTEST_OS_WINDOWS + +// Creates a concrete DeathTest-derived class that depends on the +// --gtest_death_test_style flag, and sets the pointer pointed to +// by the "test" argument to its address. If the test should be +// skipped, sets that pointer to NULL. Returns true, unless the +// flag is set to an invalid value. +bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, + const char* file, int line, + DeathTest** test) { + UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const int death_test_index = impl->current_test_info() + ->increment_death_test_count(); + + if (flag != NULL) { + if (death_test_index > flag->index()) { + DeathTest::set_last_death_test_message( + "Death test count (" + StreamableToString(death_test_index) + + ") somehow exceeded expected maximum (" + + StreamableToString(flag->index()) + ")"); + return false; + } + + if (!(flag->file() == file && flag->line() == line && + flag->index() == death_test_index)) { + *test = NULL; + return true; + } + } + +# if GTEST_OS_WINDOWS + + if (GTEST_FLAG(death_test_style) == "threadsafe" || + GTEST_FLAG(death_test_style) == "fast") { + *test = new WindowsDeathTest(statement, regex, file, line); + } + +# else + + if (GTEST_FLAG(death_test_style) == "threadsafe") { + *test = new ExecDeathTest(statement, regex, file, line); + } else if (GTEST_FLAG(death_test_style) == "fast") { + *test = new NoExecDeathTest(statement, regex); + } + +# endif // GTEST_OS_WINDOWS + + else { // NOLINT - this is more readable than unbalanced brackets inside #if. + DeathTest::set_last_death_test_message( + "Unknown death test style \"" + GTEST_FLAG(death_test_style) + + "\" encountered"); + return false; + } + + return true; +} + +// Splits a given string on a given delimiter, populating a given +// vector with the fields. GTEST_HAS_DEATH_TEST implies that we have +// ::std::string, so we can use it here. +static void SplitString(const ::std::string& str, char delimiter, + ::std::vector< ::std::string>* dest) { + ::std::vector< ::std::string> parsed; + ::std::string::size_type pos = 0; + while (::testing::internal::AlwaysTrue()) { + const ::std::string::size_type colon = str.find(delimiter, pos); + if (colon == ::std::string::npos) { + parsed.push_back(str.substr(pos)); + break; + } else { + parsed.push_back(str.substr(pos, colon - pos)); + pos = colon + 1; + } + } + dest->swap(parsed); +} + +# if GTEST_OS_WINDOWS +// Recreates the pipe and event handles from the provided parameters, +// signals the event, and returns a file descriptor wrapped around the pipe +// handle. This function is called in the child process only. +int GetStatusFileDescriptor(unsigned int parent_process_id, + size_t write_handle_as_size_t, + size_t event_handle_as_size_t) { + AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, + FALSE, // Non-inheritable. + parent_process_id)); + if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { + DeathTestAbort("Unable to open parent process " + + StreamableToString(parent_process_id)); + } + + // TODO(vladl@google.com): Replace the following check with a + // compile-time assertion when available. + GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); + + const HANDLE write_handle = + reinterpret_cast(write_handle_as_size_t); + HANDLE dup_write_handle; + + // The newly initialized handle is accessible only in in the parent + // process. To obtain one accessible within the child, we need to use + // DuplicateHandle. + if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, + ::GetCurrentProcess(), &dup_write_handle, + 0x0, // Requested privileges ignored since + // DUPLICATE_SAME_ACCESS is used. + FALSE, // Request non-inheritable handler. + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort("Unable to duplicate the pipe handle " + + StreamableToString(write_handle_as_size_t) + + " from the parent process " + + StreamableToString(parent_process_id)); + } + + const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); + HANDLE dup_event_handle; + + if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, + ::GetCurrentProcess(), &dup_event_handle, + 0x0, + FALSE, + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort("Unable to duplicate the event handle " + + StreamableToString(event_handle_as_size_t) + + " from the parent process " + + StreamableToString(parent_process_id)); + } + + const int write_fd = + ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); + if (write_fd == -1) { + DeathTestAbort("Unable to convert pipe handle " + + StreamableToString(write_handle_as_size_t) + + " to a file descriptor"); + } + + // Signals the parent that the write end of the pipe has been acquired + // so the parent can release its own write end. + ::SetEvent(dup_event_handle); + + return write_fd; +} +# endif // GTEST_OS_WINDOWS + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { + if (GTEST_FLAG(internal_run_death_test) == "") return NULL; + + // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we + // can use it here. + int line = -1; + int index = -1; + ::std::vector< ::std::string> fields; + SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); + int write_fd = -1; + +# if GTEST_OS_WINDOWS + + unsigned int parent_process_id = 0; + size_t write_handle_as_size_t = 0; + size_t event_handle_as_size_t = 0; + + if (fields.size() != 6 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &parent_process_id) + || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) + || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG(internal_run_death_test)); + } + write_fd = GetStatusFileDescriptor(parent_process_id, + write_handle_as_size_t, + event_handle_as_size_t); +# else + + if (fields.size() != 4 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &write_fd)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG(internal_run_death_test)); + } + +# endif // GTEST_OS_WINDOWS + + return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); +} + +} // namespace internal + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) + + +#include + +#if GTEST_OS_WINDOWS_MOBILE +# include +#elif GTEST_OS_WINDOWS +# include +# include +#elif GTEST_OS_SYMBIAN +// Symbian OpenC has PATH_MAX in sys/syslimits.h +# include +#else +# include +# include // Some Linux distributions define PATH_MAX here. +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_WINDOWS +# define GTEST_PATH_MAX_ _MAX_PATH +#elif defined(PATH_MAX) +# define GTEST_PATH_MAX_ PATH_MAX +#elif defined(_XOPEN_PATH_MAX) +# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX +#else +# define GTEST_PATH_MAX_ _POSIX_PATH_MAX +#endif // GTEST_OS_WINDOWS + + +namespace testing { +namespace internal { + +#if GTEST_OS_WINDOWS +// On Windows, '\\' is the standard path separator, but many tools and the +// Windows API also accept '/' as an alternate path separator. Unless otherwise +// noted, a file path can contain either kind of path separators, or a mixture +// of them. +const char kPathSeparator = '\\'; +const char kAlternatePathSeparator = '/'; +//const char kPathSeparatorString[] = "\\"; +const char kAlternatePathSeparatorString[] = "/"; +# if GTEST_OS_WINDOWS_MOBILE +// Windows CE doesn't have a current directory. You should not use +// the current directory in tests on Windows CE, but this at least +// provides a reasonable fallback. +const char kCurrentDirectoryString[] = "\\"; +// Windows CE doesn't define INVALID_FILE_ATTRIBUTES +const DWORD kInvalidFileAttributes = 0xffffffff; +# else +const char kCurrentDirectoryString[] = ".\\"; +# endif // GTEST_OS_WINDOWS_MOBILE +#else +const char kPathSeparator = '/'; +//const char kPathSeparatorString[] = "/"; +const char kCurrentDirectoryString[] = "./"; +#endif // GTEST_OS_WINDOWS + +// Returns whether the given character is a valid path separator. +static bool IsPathSeparator(char c) { +#if GTEST_HAS_ALT_PATH_SEP_ + return (c == kPathSeparator) || (c == kAlternatePathSeparator); +#else + return c == kPathSeparator; +#endif +} + +// Returns the current working directory, or "" if unsuccessful. +FilePath FilePath::GetCurrentDir() { +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't have a current directory, so we just return + // something reasonable. + return FilePath(kCurrentDirectoryString); +#elif GTEST_OS_WINDOWS + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#else + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns a copy of the FilePath with the case-insensitive extension removed. +// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns +// FilePath("dir/file"). If a case-insensitive extension is not +// found, returns a copy of the original FilePath. +FilePath FilePath::RemoveExtension(const char* extension) const { + const std::string dot_extension = std::string(".") + extension; + if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { + return FilePath(pathname_.substr( + 0, pathname_.length() - dot_extension.length())); + } + return *this; +} + +// Returns a pointer to the last occurrence of a valid path separator in +// the FilePath. On Windows, for example, both '/' and '\' are valid path +// separators. Returns NULL if no path separator was found. +const char* FilePath::FindLastPathSeparator() const { + const char* const last_sep = strrchr(c_str(), kPathSeparator); +#if GTEST_HAS_ALT_PATH_SEP_ + const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); + // Comparing two pointers of which only one is NULL is undefined. + if (last_alt_sep != NULL && + (last_sep == NULL || last_alt_sep > last_sep)) { + return last_alt_sep; + } +#endif + return last_sep; +} + +// Returns a copy of the FilePath with the directory part removed. +// Example: FilePath("path/to/file").RemoveDirectoryName() returns +// FilePath("file"). If there is no directory part ("just_a_file"), it returns +// the FilePath unmodified. If there is no file part ("just_a_dir/") it +// returns an empty FilePath (""). +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveDirectoryName() const { + const char* const last_sep = FindLastPathSeparator(); + return last_sep ? FilePath(last_sep + 1) : *this; +} + +// RemoveFileName returns the directory path with the filename removed. +// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". +// If the FilePath is "a_file" or "/a_file", RemoveFileName returns +// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does +// not have a file, like "just/a/dir/", it returns the FilePath unmodified. +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveFileName() const { + const char* const last_sep = FindLastPathSeparator(); + std::string dir; + if (last_sep) { + dir = std::string(c_str(), last_sep + 1 - c_str()); + } else { + dir = kCurrentDirectoryString; + } + return FilePath(dir); +} + +// Helper functions for naming files in a directory for xml output. + +// Given directory = "dir", base_name = "test", number = 0, +// extension = "xml", returns "dir/test.xml". If number is greater +// than zero (e.g., 12), returns "dir/test_12.xml". +// On Windows platform, uses \ as the separator rather than /. +FilePath FilePath::MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension) { + std::string file; + if (number == 0) { + file = base_name.string() + "." + extension; + } else { + file = base_name.string() + "_" + StreamableToString(number) + + "." + extension; + } + return ConcatPaths(directory, FilePath(file)); +} + +// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". +// On Windows, uses \ as the separator rather than /. +FilePath FilePath::ConcatPaths(const FilePath& directory, + const FilePath& relative_path) { + if (directory.IsEmpty()) + return relative_path; + const FilePath dir(directory.RemoveTrailingPathSeparator()); + return FilePath(dir.string() + kPathSeparator + relative_path.string()); +} + +// Returns true if pathname describes something findable in the file-system, +// either a file, directory, or whatever. +bool FilePath::FileOrDirectoryExists() const { +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + return attributes != kInvalidFileAttributes; +#else + posix::StatStruct file_stat; + return posix::Stat(pathname_.c_str(), &file_stat) == 0; +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns true if pathname describes a directory in the file-system +// that exists. +bool FilePath::DirectoryExists() const { + bool result = false; +#if GTEST_OS_WINDOWS + // Don't strip off trailing separator if path is a root directory on + // Windows (like "C:\\"). + const FilePath& path(IsRootDirectory() ? *this : + RemoveTrailingPathSeparator()); +#else + const FilePath& path(*this); +#endif + +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + if ((attributes != kInvalidFileAttributes) && + (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = true; + } +#else + posix::StatStruct file_stat; + result = posix::Stat(path.c_str(), &file_stat) == 0 && + posix::IsDir(file_stat); +#endif // GTEST_OS_WINDOWS_MOBILE + + return result; +} + +// Returns true if pathname describes a root directory. (Windows has one +// root directory per disk drive.) +bool FilePath::IsRootDirectory() const { +#if GTEST_OS_WINDOWS + // TODO(wan@google.com): on Windows a network share like + // \\server\share can be a root directory, although it cannot be the + // current directory. Handle this properly. + return pathname_.length() == 3 && IsAbsolutePath(); +#else + return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); +#endif +} + +// Returns true if pathname describes an absolute path. +bool FilePath::IsAbsolutePath() const { + const char* const name = pathname_.c_str(); +#if GTEST_OS_WINDOWS + return pathname_.length() >= 3 && + ((name[0] >= 'a' && name[0] <= 'z') || + (name[0] >= 'A' && name[0] <= 'Z')) && + name[1] == ':' && + IsPathSeparator(name[2]); +#else + return IsPathSeparator(name[0]); +#endif +} + +// Returns a pathname for a file that does not currently exist. The pathname +// will be directory/base_name.extension or +// directory/base_name_.extension if directory/base_name.extension +// already exists. The number will be incremented until a pathname is found +// that does not already exist. +// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. +// There could be a race condition if two or more processes are calling this +// function at the same time -- they could both pick the same filename. +FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension) { + FilePath full_pathname; + int number = 0; + do { + full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); + } while (full_pathname.FileOrDirectoryExists()); + return full_pathname; +} + +// Returns true if FilePath ends with a path separator, which indicates that +// it is intended to represent a directory. Returns false otherwise. +// This does NOT check that a directory (or file) actually exists. +bool FilePath::IsDirectory() const { + return !pathname_.empty() && + IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); +} + +// Create directories so that path exists. Returns true if successful or if +// the directories already exist; returns false if unable to create directories +// for any reason. +bool FilePath::CreateDirectoriesRecursively() const { + if (!this->IsDirectory()) { + return false; + } + + if (pathname_.length() == 0 || this->DirectoryExists()) { + return true; + } + + const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); + return parent.CreateDirectoriesRecursively() && this->CreateFolder(); +} + +// Create the directory so that path exists. Returns true if successful or +// if the directory already exists; returns false if unable to create the +// directory for any reason, including if the parent directory does not +// exist. Not named "CreateDirectory" because that's a macro on Windows. +bool FilePath::CreateFolder() const { +#if GTEST_OS_WINDOWS_MOBILE + FilePath removed_sep(this->RemoveTrailingPathSeparator()); + LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); + int result = CreateDirectory(unicode, NULL) ? 0 : -1; + delete [] unicode; +#elif GTEST_OS_WINDOWS + int result = _mkdir(pathname_.c_str()); +#else + int result = mkdir(pathname_.c_str(), 0777); +#endif // GTEST_OS_WINDOWS_MOBILE + + if (result == -1) { + return this->DirectoryExists(); // An error is OK if the directory exists. + } + return true; // No error. +} + +// If input name has a trailing separator character, remove it and return the +// name, otherwise return the name string unmodified. +// On Windows platform, uses \ as the separator, other platforms use /. +FilePath FilePath::RemoveTrailingPathSeparator() const { + return IsDirectory() + ? FilePath(pathname_.substr(0, pathname_.length() - 1)) + : *this; +} + +// Removes any redundant separators that might be in the pathname. +// For example, "bar///foo" becomes "bar/foo". Does not eliminate other +// redundancies that might be in a pathname involving "." or "..". +// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). +void FilePath::Normalize() { + if (pathname_.c_str() == NULL) { + pathname_ = ""; + return; + } + const char* src = pathname_.c_str(); + char* const dest = new char[pathname_.length() + 1]; + char* dest_ptr = dest; + memset(dest_ptr, 0, pathname_.length() + 1); + + while (*src != '\0') { + *dest_ptr = *src; + if (!IsPathSeparator(*src)) { + src++; + } else { +#if GTEST_HAS_ALT_PATH_SEP_ + if (*dest_ptr == kAlternatePathSeparator) { + *dest_ptr = kPathSeparator; + } +#endif + while (IsPathSeparator(*src)) + src++; + } + dest_ptr++; + } + *dest_ptr = '\0'; + pathname_ = dest; + delete[] dest; +} + +} // namespace internal +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +#include +#include +#include +#include + +#if GTEST_OS_WINDOWS_MOBILE +# include // For TerminateProcess() +#elif GTEST_OS_WINDOWS +# include +# include +#else +# include +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_MAC +# include +# include +# include +#endif // GTEST_OS_MAC + +#if GTEST_OS_QNX +# include +# include +#endif // GTEST_OS_QNX + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { +namespace internal { + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC and C++Builder do not provide a definition of STDERR_FILENO. +const int kStdOutFileno = 1; +const int kStdErrFileno = 2; +#else +const int kStdOutFileno = STDOUT_FILENO; +const int kStdErrFileno = STDERR_FILENO; +#endif // _MSC_VER + +#if GTEST_OS_MAC + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const task_t task = mach_task_self(); + mach_msg_type_number_t thread_count; + thread_act_array_t thread_list; + const kern_return_t status = task_threads(task, &thread_list, &thread_count); + if (status == KERN_SUCCESS) { + // task_threads allocates resources in thread_list and we need to free them + // to avoid leaks. + vm_deallocate(task, + reinterpret_cast(thread_list), + sizeof(thread_t) * thread_count); + return static_cast(thread_count); + } else { + return 0; + } +} + +#elif GTEST_OS_QNX + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const int fd = open("/proc/self/as", O_RDONLY); + if (fd < 0) { + return 0; + } + procfs_info process_info; + const int status = + devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); + close(fd); + if (status == EOK) { + return static_cast(process_info.num_threads); + } else { + return 0; + } +} + +#else + +size_t GetThreadCount() { + // There's no portable way to detect the number of threads, so we just + // return 0 to indicate that we cannot detect it. + return 0; +} + +#endif // GTEST_OS_MAC + +#if GTEST_USES_POSIX_RE + +// Implements RE. Currently only needed for death tests. + +RE::~RE() { + if (is_valid_) { + // regfree'ing an invalid regex might crash because the content + // of the regex is undefined. Since the regex's are essentially + // the same, one cannot be valid (or invalid) without the other + // being so too. + regfree(&partial_regex_); + regfree(&full_regex_); + } + free(const_cast(pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.full_regex_, str, 1, &match, 0) == 0; +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = posix::StrDup(regex); + + // Reserves enough bytes to hold the regular expression used for a + // full match. + const size_t full_regex_len = strlen(regex) + 10; + char* const full_pattern = new char[full_regex_len]; + + snprintf(full_pattern, full_regex_len, "^(%s)$", regex); + is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; + // We want to call regcomp(&partial_regex_, ...) even if the + // previous expression returns false. Otherwise partial_regex_ may + // not be properly initialized can may cause trouble when it's + // freed. + // + // Some implementation of POSIX regex (e.g. on at least some + // versions of Cygwin) doesn't accept the empty string as a valid + // regex. We change it to an equivalent form "()" to be safe. + if (is_valid_) { + const char* const partial_regex = (*regex == '\0') ? "()" : regex; + is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; + } + EXPECT_TRUE(is_valid_) + << "Regular expression \"" << regex + << "\" is not a valid POSIX Extended regular expression."; + + delete[] full_pattern; +} + +#elif GTEST_USES_SIMPLE_RE + +// Returns true iff ch appears anywhere in str (excluding the +// terminating '\0' character). +bool IsInSet(char ch, const char* str) { + return ch != '\0' && strchr(str, ch) != NULL; +} + +// Returns true iff ch belongs to the given classification. Unlike +// similar functions in , these aren't affected by the +// current locale. +bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } +bool IsAsciiPunct(char ch) { + return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); +} +bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } +bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } +bool IsAsciiWordChar(char ch) { + return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || + ('0' <= ch && ch <= '9') || ch == '_'; +} + +// Returns true iff "\\c" is a supported escape sequence. +bool IsValidEscape(char c) { + return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); +} + +// Returns true iff the given atom (specified by escaped and pattern) +// matches ch. The result is undefined if the atom is invalid. +bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { + if (escaped) { // "\\p" where p is pattern_char. + switch (pattern_char) { + case 'd': return IsAsciiDigit(ch); + case 'D': return !IsAsciiDigit(ch); + case 'f': return ch == '\f'; + case 'n': return ch == '\n'; + case 'r': return ch == '\r'; + case 's': return IsAsciiWhiteSpace(ch); + case 'S': return !IsAsciiWhiteSpace(ch); + case 't': return ch == '\t'; + case 'v': return ch == '\v'; + case 'w': return IsAsciiWordChar(ch); + case 'W': return !IsAsciiWordChar(ch); + } + return IsAsciiPunct(pattern_char) && pattern_char == ch; + } + + return (pattern_char == '.' && ch != '\n') || pattern_char == ch; +} + +// Helper function used by ValidateRegex() to format error messages. +std::string FormatRegexSyntaxError(const char* regex, int index) { + return (Message() << "Syntax error at index " << index + << " in simple regular expression \"" << regex << "\": ").GetString(); +} + +// Generates non-fatal failures and returns false if regex is invalid; +// otherwise returns true. +bool ValidateRegex(const char* regex) { + if (regex == NULL) { + // TODO(wan@google.com): fix the source file location in the + // assertion failures to match where the regex is used in user + // code. + ADD_FAILURE() << "NULL is not a valid simple regular expression."; + return false; + } + + bool is_valid = true; + + // True iff ?, *, or + can follow the previous atom. + bool prev_repeatable = false; + for (int i = 0; regex[i]; i++) { + if (regex[i] == '\\') { // An escape sequence + i++; + if (regex[i] == '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "'\\' cannot appear at the end."; + return false; + } + + if (!IsValidEscape(regex[i])) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "invalid escape sequence \"\\" << regex[i] << "\"."; + is_valid = false; + } + prev_repeatable = true; + } else { // Not an escape sequence. + const char ch = regex[i]; + + if (ch == '^' && i > 0) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'^' can only appear at the beginning."; + is_valid = false; + } else if (ch == '$' && regex[i + 1] != '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'$' can only appear at the end."; + is_valid = false; + } else if (IsInSet(ch, "()[]{}|")) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' is unsupported."; + is_valid = false; + } else if (IsRepeat(ch) && !prev_repeatable) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' can only follow a repeatable token."; + is_valid = false; + } + + prev_repeatable = !IsInSet(ch, "^$?*+"); + } + } + + return is_valid; +} + +// Matches a repeated regex atom followed by a valid simple regular +// expression. The regex atom is defined as c if escaped is false, +// or \c otherwise. repeat is the repetition meta character (?, *, +// or +). The behavior is undefined if str contains too many +// characters to be indexable by size_t, in which case the test will +// probably time out anyway. We are fine with this limitation as +// std::string has it too. +bool MatchRepetitionAndRegexAtHead( + bool escaped, char c, char repeat, const char* regex, + const char* str) { + const size_t min_count = (repeat == '+') ? 1 : 0; + const size_t max_count = (repeat == '?') ? 1 : + static_cast(-1) - 1; + // We cannot call numeric_limits::max() as it conflicts with the + // max() macro on Windows. + + for (size_t i = 0; i <= max_count; ++i) { + // We know that the atom matches each of the first i characters in str. + if (i >= min_count && MatchRegexAtHead(regex, str + i)) { + // We have enough matches at the head, and the tail matches too. + // Since we only care about *whether* the pattern matches str + // (as opposed to *how* it matches), there is no need to find a + // greedy match. + return true; + } + if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) + return false; + } + return false; +} + +// Returns true iff regex matches a prefix of str. regex must be a +// valid simple regular expression and not start with "^", or the +// result is undefined. +bool MatchRegexAtHead(const char* regex, const char* str) { + if (*regex == '\0') // An empty regex matches a prefix of anything. + return true; + + // "$" only matches the end of a string. Note that regex being + // valid guarantees that there's nothing after "$" in it. + if (*regex == '$') + return *str == '\0'; + + // Is the first thing in regex an escape sequence? + const bool escaped = *regex == '\\'; + if (escaped) + ++regex; + if (IsRepeat(regex[1])) { + // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so + // here's an indirect recursion. It terminates as the regex gets + // shorter in each recursion. + return MatchRepetitionAndRegexAtHead( + escaped, regex[0], regex[1], regex + 2, str); + } else { + // regex isn't empty, isn't "$", and doesn't start with a + // repetition. We match the first atom of regex with the first + // character of str and recurse. + return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && + MatchRegexAtHead(regex + 1, str + 1); + } +} + +// Returns true iff regex matches any substring of str. regex must be +// a valid simple regular expression, or the result is undefined. +// +// The algorithm is recursive, but the recursion depth doesn't exceed +// the regex length, so we won't need to worry about running out of +// stack space normally. In rare cases the time complexity can be +// exponential with respect to the regex length + the string length, +// but usually it's must faster (often close to linear). +bool MatchRegexAnywhere(const char* regex, const char* str) { + if (regex == NULL || str == NULL) + return false; + + if (*regex == '^') + return MatchRegexAtHead(regex + 1, str); + + // A successful match can be anywhere in str. + do { + if (MatchRegexAtHead(regex, str)) + return true; + } while (*str++ != '\0'); + return false; +} + +// Implements the RE class. + +RE::~RE() { + free(const_cast(pattern_)); + free(const_cast(full_pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = full_pattern_ = NULL; + if (regex != NULL) { + pattern_ = posix::StrDup(regex); + } + + is_valid_ = ValidateRegex(regex); + if (!is_valid_) { + // No need to calculate the full pattern when the regex is invalid. + return; + } + + const size_t len = strlen(regex); + // Reserves enough bytes to hold the regular expression used for a + // full match: we need space to prepend a '^', append a '$', and + // terminate the string with '\0'. + char* buffer = static_cast(malloc(len + 3)); + full_pattern_ = buffer; + + if (*regex != '^') + *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. + + // We don't use snprintf or strncpy, as they trigger a warning when + // compiled with VC++ 8.0. + memcpy(buffer, regex, len); + buffer += len; + + if (len == 0 || regex[len - 1] != '$') + *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. + + *buffer = '\0'; +} + +#endif // GTEST_USES_POSIX_RE + +const char kUnknownFile[] = "unknown file"; + +// Formats a source file path and a line number as they would appear +// in an error message from the compiler used to compile this code. +GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { + const std::string file_name(file == NULL ? kUnknownFile : file); + + if (line < 0) { + return file_name + ":"; + } +#ifdef _MSC_VER + return file_name + "(" + StreamableToString(line) + "):"; +#else + return file_name + ":" + StreamableToString(line) + ":"; +#endif // _MSC_VER +} + +// Formats a file location for compiler-independent XML output. +// Although this function is not platform dependent, we put it next to +// FormatFileLocation in order to contrast the two functions. +// Note that FormatCompilerIndependentFileLocation() does NOT append colon +// to the file location it produces, unlike FormatFileLocation(). +GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( + const char* file, int line) { + const std::string file_name(file == NULL ? kUnknownFile : file); + + if (line < 0) + return file_name; + else + return file_name + ":" + StreamableToString(line); +} + + +GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) + : severity_(severity) { + const char* const marker = + severity == GTEST_INFO ? "[ INFO ]" : + severity == GTEST_WARNING ? "[WARNING]" : + severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; + GetStream() << ::std::endl << marker << " " + << FormatFileLocation(file, line).c_str() << ": "; +} + +// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. +GTestLog::~GTestLog() { + GetStream() << ::std::endl; + if (severity_ == GTEST_FATAL) { + fflush(stderr); + posix::Abort(); + } +} +// Disable Microsoft deprecation warnings for POSIX functions called from +// this class (creat, dup, dup2, and close) +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4996) +#endif // _MSC_VER + +#if GTEST_HAS_STREAM_REDIRECTION + +// Object that captures an output stream (stdout/stderr). +class CapturedStream { + public: + // The ctor redirects the stream to a temporary file. + explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { +# if GTEST_OS_WINDOWS + char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT + char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT + + ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); + const UINT success = ::GetTempFileNameA(temp_dir_path, + "gtest_redir", + 0, // Generate unique file name. + temp_file_path); + GTEST_CHECK_(success != 0) + << "Unable to create a temporary file in " << temp_dir_path; + const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); + GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " + << temp_file_path; + filename_ = temp_file_path; +# else + // There's no guarantee that a test has write access to the current + // directory, so we create the temporary file in the /tmp directory + // instead. We use /tmp on most systems, and /sdcard on Android. + // That's because Android doesn't have /tmp. +# if GTEST_OS_LINUX_ANDROID + // Note: Android applications are expected to call the framework's + // Context.getExternalStorageDirectory() method through JNI to get + // the location of the world-writable SD Card directory. However, + // this requires a Context handle, which cannot be retrieved + // globally from native code. Doing so also precludes running the + // code as part of a regular standalone executable, which doesn't + // run in a Dalvik process (e.g. when running it through 'adb shell'). + // + // The location /sdcard is directly accessible from native code + // and is the only location (unofficially) supported by the Android + // team. It's generally a symlink to the real SD Card mount point + // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or + // other OEM-customized locations. Never rely on these, and always + // use /sdcard. + char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; +# else + char name_template[] = "/tmp/captured_stream.XXXXXX"; +# endif // GTEST_OS_LINUX_ANDROID + const int captured_fd = mkstemp(name_template); + filename_ = name_template; +# endif // GTEST_OS_WINDOWS + fflush(NULL); + dup2(captured_fd, fd_); + close(captured_fd); + } + + ~CapturedStream() { + remove(filename_.c_str()); + } + + std::string GetCapturedString() { + if (uncaptured_fd_ != -1) { + // Restores the original stream. + fflush(NULL); + dup2(uncaptured_fd_, fd_); + close(uncaptured_fd_); + uncaptured_fd_ = -1; + } + + FILE* const file = posix::FOpen(filename_.c_str(), "r"); + const std::string content = ReadEntireFile(file); + posix::FClose(file); + return content; + } + + private: + // Reads the entire content of a file as an std::string. + static std::string ReadEntireFile(FILE* file); + + // Returns the size (in bytes) of a file. + static size_t GetFileSize(FILE* file); + + const int fd_; // A stream to capture. + int uncaptured_fd_; + // Name of the temporary file holding the stderr output. + ::std::string filename_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); +}; + +// Returns the size (in bytes) of a file. +size_t CapturedStream::GetFileSize(FILE* file) { + fseek(file, 0, SEEK_END); + return static_cast(ftell(file)); +} + +// Reads the entire content of a file as a string. +std::string CapturedStream::ReadEntireFile(FILE* file) { + const size_t file_size = GetFileSize(file); + char* const buffer = new char[file_size]; + + size_t bytes_last_read = 0; // # of bytes read in the last fread() + size_t bytes_read = 0; // # of bytes read so far + + fseek(file, 0, SEEK_SET); + + // Keeps reading the file until we cannot read further or the + // pre-determined file size is reached. + do { + bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); + bytes_read += bytes_last_read; + } while (bytes_last_read > 0 && bytes_read < file_size); + + const std::string content(buffer, bytes_read); + delete[] buffer; + + return content; +} + +# ifdef _MSC_VER +# pragma warning(pop) +# endif // _MSC_VER + +static CapturedStream* g_captured_stderr = NULL; +static CapturedStream* g_captured_stdout = NULL; + +// Starts capturing an output stream (stdout/stderr). +void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { + if (*stream != NULL) { + GTEST_LOG_(FATAL) << "Only one " << stream_name + << " capturer can exist at a time."; + } + *stream = new CapturedStream(fd); +} + +// Stops capturing the output stream and returns the captured string. +std::string GetCapturedStream(CapturedStream** captured_stream) { + const std::string content = (*captured_stream)->GetCapturedString(); + + delete *captured_stream; + *captured_stream = NULL; + + return content; +} + +// Starts capturing stdout. +void CaptureStdout() { + CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); +} + +// Starts capturing stderr. +void CaptureStderr() { + CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); +} + +// Stops capturing stdout and returns the captured string. +std::string GetCapturedStdout() { + return GetCapturedStream(&g_captured_stdout); +} + +// Stops capturing stderr and returns the captured string. +std::string GetCapturedStderr() { + return GetCapturedStream(&g_captured_stderr); +} + +#endif // GTEST_HAS_STREAM_REDIRECTION + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +::std::vector g_argvs; + +static const ::std::vector* g_injected_test_argvs = + NULL; // Owned. + +void SetInjectableArgvs(const ::std::vector* argvs) { + if (g_injected_test_argvs != argvs) + delete g_injected_test_argvs; + g_injected_test_argvs = argvs; +} + +const ::std::vector& GetInjectableArgvs() { + if (g_injected_test_argvs != NULL) { + return *g_injected_test_argvs; + } + return g_argvs; +} +#endif // GTEST_HAS_DEATH_TEST + +#if GTEST_OS_WINDOWS_MOBILE +namespace posix { +void Abort() { + DebugBreak(); + TerminateProcess(GetCurrentProcess(), 1); +} +} // namespace posix +#endif // GTEST_OS_WINDOWS_MOBILE + +// Returns the name of the environment variable corresponding to the +// given flag. For example, FlagToEnvVar("foo") will return +// "GTEST_FOO" in the open-source version. +static std::string FlagToEnvVar(const char* flag) { + const std::string full_flag = + (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); + + Message env_var; + for (size_t i = 0; i != full_flag.length(); i++) { + env_var << ToUpper(full_flag.c_str()[i]); + } + + return env_var.GetString(); +} + +// Parses 'str' for a 32-bit signed integer. If successful, writes +// the result to *value and returns true; otherwise leaves *value +// unchanged and returns false. +bool ParseInt32(const Message& src_text, const char* str, Int32* value) { + // Parses the environment variable as a decimal integer. + char* end = NULL; + const long long_value = strtol(str, &end, 10); // NOLINT + + // Has strtol() consumed all characters in the string? + if (*end != '\0') { + // No - an invalid character was encountered. + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value \"" << str << "\".\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + // Is the parsed value in the range of an Int32? + const Int32 result = static_cast(long_value); + if (long_value == LONG_MAX || long_value == LONG_MIN || + // The parsed value overflows as a long. (strtol() returns + // LONG_MAX or LONG_MIN when the input overflows.) + result != long_value + // The parsed value overflows as an Int32. + ) { + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value " << str << ", which overflows.\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + *value = result; + return true; +} + +// Reads and returns the Boolean environment variable corresponding to +// the given flag; if it's not set, returns default_value. +// +// The value is considered true iff it's not "0". +bool BoolFromGTestEnv(const char* flag, bool default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + return string_value == NULL ? + default_value : strcmp(string_value, "0") != 0; +} + +// Reads and returns a 32-bit integer stored in the environment +// variable corresponding to the given flag; if it isn't set or +// doesn't represent a valid 32-bit integer, returns default_value. +Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + if (string_value == NULL) { + // The environment variable is not set. + return default_value; + } + + Int32 result = default_value; + if (!ParseInt32(Message() << "Environment variable " << env_var, + string_value, &result)) { + printf("The default value %s is used.\n", + (Message() << default_value).GetString().c_str()); + fflush(stdout); + return default_value; + } + + return result; +} + +// Reads and returns the string environment variable corresponding to +// the given flag; if it's not set, returns default_value. +const char* StringFromGTestEnv(const char* flag, const char* default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const value = posix::GetEnv(env_var.c_str()); + return value == NULL ? default_value : value; +} + +} // namespace internal +} // namespace testing +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Test - The Google C++ Testing Framework +// +// This file implements a universal value printer that can print a +// value of any type T: +// +// void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); +// +// It uses the << operator when possible, and prints the bytes in the +// object otherwise. A user can override its behavior for a class +// type Foo by defining either operator<<(::std::ostream&, const Foo&) +// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that +// defines Foo. + +#include +#include +#include // NOLINT +#include + +namespace testing { + +namespace { + +using ::std::ostream; + +// Prints a segment of bytes in the given object. +void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, + size_t count, ostream* os) { + char text[5] = ""; + for (size_t i = 0; i != count; i++) { + const size_t j = start + i; + if (i != 0) { + // Organizes the bytes into groups of 2 for easy parsing by + // human. + if ((j % 2) == 0) + *os << ' '; + else + *os << '-'; + } + GTEST_SNPRINTF_(text, sizeof(text), "%02X", obj_bytes[j]); + *os << text; + } +} + +// Prints the bytes in the given value to the given ostream. +void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, + ostream* os) { + // Tells the user how big the object is. + *os << count << "-byte object <"; + + const size_t kThreshold = 132; + const size_t kChunkSize = 64; + // If the object size is bigger than kThreshold, we'll have to omit + // some details by printing only the first and the last kChunkSize + // bytes. + // TODO(wan): let the user control the threshold using a flag. + if (count < kThreshold) { + PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); + } else { + PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); + *os << " ... "; + // Rounds up to 2-byte boundary. + const size_t resume_pos = (count - kChunkSize + 1)/2*2; + PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); + } + *os << ">"; +} + +} // namespace + +namespace internal2 { + +// Delegates to PrintBytesInObjectToImpl() to print the bytes in the +// given object. The delegation simplifies the implementation, which +// uses the << operator and thus is easier done outside of the +// ::testing::internal namespace, which contains a << operator that +// sometimes conflicts with the one in STL. +void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, + ostream* os) { + PrintBytesInObjectToImpl(obj_bytes, count, os); +} + +} // namespace internal2 + +namespace internal { + +// Depending on the value of a char (or wchar_t), we print it in one +// of three formats: +// - as is if it's a printable ASCII (e.g. 'a', '2', ' '), +// - as a hexidecimal escape sequence (e.g. '\x7F'), or +// - as a special escape sequence (e.g. '\r', '\n'). +enum CharFormat { + kAsIs, + kHexEscape, + kSpecialEscape +}; + +// Returns true if c is a printable ASCII character. We test the +// value of c directly instead of calling isprint(), which is buggy on +// Windows Mobile. +inline bool IsPrintableAscii(wchar_t c) { + return 0x20 <= c && c <= 0x7E; +} + +// Prints a wide or narrow char c as a character literal without the +// quotes, escaping it when necessary; returns how c was formatted. +// The template argument UnsignedChar is the unsigned version of Char, +// which is the type of c. +template +static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { + switch (static_cast(c)) { + case L'\0': + *os << "\\0"; + break; + case L'\'': + *os << "\\'"; + break; + case L'\\': + *os << "\\\\"; + break; + case L'\a': + *os << "\\a"; + break; + case L'\b': + *os << "\\b"; + break; + case L'\f': + *os << "\\f"; + break; + case L'\n': + *os << "\\n"; + break; + case L'\r': + *os << "\\r"; + break; + case L'\t': + *os << "\\t"; + break; + case L'\v': + *os << "\\v"; + break; + default: + if (IsPrintableAscii(c)) { + *os << static_cast(c); + return kAsIs; + } else { + *os << "\\x" + String::FormatHexInt(static_cast(c)); + return kHexEscape; + } + } + return kSpecialEscape; +} + +// Prints a wchar_t c as if it's part of a string literal, escaping it when +// necessary; returns how c was formatted. +static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { + switch (c) { + case L'\'': + *os << "'"; + return kAsIs; + case L'"': + *os << "\\\""; + return kSpecialEscape; + default: + return PrintAsCharLiteralTo(c, os); + } +} + +// Prints a char c as if it's part of a string literal, escaping it when +// necessary; returns how c was formatted. +static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { + return PrintAsStringLiteralTo( + static_cast(static_cast(c)), os); +} + +// Prints a wide or narrow character c and its code. '\0' is printed +// as "'\\0'", other unprintable characters are also properly escaped +// using the standard C++ escape sequence. The template argument +// UnsignedChar is the unsigned version of Char, which is the type of c. +template +void PrintCharAndCodeTo(Char c, ostream* os) { + // First, print c as a literal in the most readable form we can find. + *os << ((sizeof(c) > 1) ? "L'" : "'"); + const CharFormat format = PrintAsCharLiteralTo(c, os); + *os << "'"; + + // To aid user debugging, we also print c's code in decimal, unless + // it's 0 (in which case c was printed as '\\0', making the code + // obvious). + if (c == 0) + return; + *os << " (" << static_cast(c); + + // For more convenience, we print c's code again in hexidecimal, + // unless c was already printed in the form '\x##' or the code is in + // [1, 9]. + if (format == kHexEscape || (1 <= c && c <= 9)) { + // Do nothing. + } else { + *os << ", 0x" << String::FormatHexInt(static_cast(c)); + } + *os << ")"; +} + +void PrintTo(unsigned char c, ::std::ostream* os) { + PrintCharAndCodeTo(c, os); +} +void PrintTo(signed char c, ::std::ostream* os) { + PrintCharAndCodeTo(c, os); +} + +// Prints a wchar_t as a symbol if it is printable or as its internal +// code otherwise and also as its code. L'\0' is printed as "L'\\0'". +void PrintTo(wchar_t wc, ostream* os) { + PrintCharAndCodeTo(wc, os); +} + +// Prints the given array of characters to the ostream. CharType must be either +// char or wchar_t. +// The array starts at begin, the length is len, it may include '\0' characters +// and may not be NUL-terminated. +template +static void PrintCharsAsStringTo( + const CharType* begin, size_t len, ostream* os) { + const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; + *os << kQuoteBegin; + bool is_previous_hex = false; + for (size_t index = 0; index < len; ++index) { + const CharType cur = begin[index]; + if (is_previous_hex && IsXDigit(cur)) { + // Previous character is of '\x..' form and this character can be + // interpreted as another hexadecimal digit in its number. Break string to + // disambiguate. + *os << "\" " << kQuoteBegin; + } + is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; + } + *os << "\""; +} + +// Prints a (const) char/wchar_t array of 'len' elements, starting at address +// 'begin'. CharType must be either char or wchar_t. +template +static void UniversalPrintCharArray( + const CharType* begin, size_t len, ostream* os) { + // The code + // const char kFoo[] = "foo"; + // generates an array of 4, not 3, elements, with the last one being '\0'. + // + // Therefore when printing a char array, we don't print the last element if + // it's '\0', such that the output matches the string literal as it's + // written in the source code. + if (len > 0 && begin[len - 1] == '\0') { + PrintCharsAsStringTo(begin, len - 1, os); + return; + } + + // If, however, the last element in the array is not '\0', e.g. + // const char kFoo[] = { 'f', 'o', 'o' }; + // we must print the entire array. We also print a message to indicate + // that the array is not NUL-terminated. + PrintCharsAsStringTo(begin, len, os); + *os << " (no terminating NUL)"; +} + +// Prints a (const) char array of 'len' elements, starting at address 'begin'. +void UniversalPrintArray(const char* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + +// Prints a (const) wchar_t array of 'len' elements, starting at address +// 'begin'. +void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + +// Prints the given C string to the ostream. +void PrintTo(const char* s, ostream* os) { + if (s == NULL) { + *os << "NULL"; + } else { + *os << ImplicitCast_(s) << " pointing to "; + PrintCharsAsStringTo(s, strlen(s), os); + } +} + +// MSVC compiler can be configured to define whar_t as a typedef +// of unsigned short. Defining an overload for const wchar_t* in that case +// would cause pointers to unsigned shorts be printed as wide strings, +// possibly accessing more memory than intended and causing invalid +// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when +// wchar_t is implemented as a native type. +#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) +// Prints the given wide C string to the ostream. +void PrintTo(const wchar_t* s, ostream* os) { + if (s == NULL) { + *os << "NULL"; + } else { + *os << ImplicitCast_(s) << " pointing to "; + PrintCharsAsStringTo(s, wcslen(s), os); + } +} +#endif // wchar_t is native + +// Prints a ::string object. +#if GTEST_HAS_GLOBAL_STRING +void PrintStringTo(const ::string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_GLOBAL_STRING + +void PrintStringTo(const ::std::string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} + +// Prints a ::wstring object. +#if GTEST_HAS_GLOBAL_WSTRING +void PrintWideStringTo(const ::wstring& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +#if GTEST_HAS_STD_WSTRING +void PrintWideStringTo(const ::std::wstring& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_STD_WSTRING + +} // namespace internal + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// The Google C++ Testing Framework (Google Test) + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +using internal::GetUnitTestImpl; + +// Gets the summary of the failure message by omitting the stack trace +// in it. +std::string TestPartResult::ExtractSummary(const char* message) { + const char* const stack_trace = strstr(message, internal::kStackTraceMarker); + return stack_trace == NULL ? message : + std::string(message, stack_trace); +} + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { + return os + << result.file_name() << ":" << result.line_number() << ": " + << (result.type() == TestPartResult::kSuccess ? "Success" : + result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : + "Non-fatal failure") << ":\n" + << result.message() << std::endl; +} + +// Appends a TestPartResult to the array. +void TestPartResultArray::Append(const TestPartResult& result) { + array_.push_back(result); +} + +// Returns the TestPartResult at the given index (0-based). +const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { + if (index < 0 || index >= size()) { + printf("\nInvalid index (%d) into TestPartResultArray.\n", index); + internal::posix::Abort(); + } + + return array_[index]; +} + +// Returns the number of TestPartResult objects in the array. +int TestPartResultArray::size() const { + return static_cast(array_.size()); +} + +namespace internal { + +HasNewFatalFailureHelper::HasNewFatalFailureHelper() + : has_new_fatal_failure_(false), + original_reporter_(GetUnitTestImpl()-> + GetTestPartResultReporterForCurrentThread()) { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); +} + +HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( + original_reporter_); +} + +void HasNewFatalFailureHelper::ReportTestPartResult( + const TestPartResult& result) { + if (result.fatally_failed()) + has_new_fatal_failure_ = true; + original_reporter_->ReportTestPartResult(result); +} + +} // namespace internal + +} // namespace testing +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +namespace testing { +namespace internal { + +#if GTEST_HAS_TYPED_TEST_P + +// Skips to the first non-space char in str. Returns an empty string if str +// contains only whitespace characters. +static const char* SkipSpaces(const char* str) { + while (IsSpace(*str)) + str++; + return str; +} + +// Verifies that registered_tests match the test names in +// defined_test_names_; returns registered_tests if successful, or +// aborts the program otherwise. +const char* TypedTestCasePState::VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests) { + typedef ::std::set::const_iterator DefinedTestIter; + registered_ = true; + + // Skip initial whitespace in registered_tests since some + // preprocessors prefix stringizied literals with whitespace. + registered_tests = SkipSpaces(registered_tests); + + Message errors; + ::std::set tests; + for (const char* names = registered_tests; names != NULL; + names = SkipComma(names)) { + const std::string name = GetPrefixUntilComma(names); + if (tests.count(name) != 0) { + errors << "Test " << name << " is listed more than once.\n"; + continue; + } + + bool found = false; + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (name == *it) { + found = true; + break; + } + } + + if (found) { + tests.insert(name); + } else { + errors << "No test named " << name + << " can be found in this test case.\n"; + } + } + + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (tests.count(*it) == 0) { + errors << "You forgot to list test " << *it << ".\n"; + } + } + + const std::string& errors_str = errors.GetString(); + if (errors_str != "") { + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors_str.c_str()); + fflush(stderr); + posix::Abort(); + } + + return registered_tests; +} + +#endif // GTEST_HAS_TYPED_TEST_P + +} // namespace internal +} // namespace testing diff --git a/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h b/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h new file mode 120000 index 0000000000..48d39090f1 --- /dev/null +++ b/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h @@ -0,0 +1 @@ +gtest.h \ No newline at end of file diff --git a/lib/kokkos/tpls/gtest/gtest/gtest.h b/lib/kokkos/tpls/gtest/gtest/gtest.h new file mode 100644 index 0000000000..8f98f330ed --- /dev/null +++ b/lib/kokkos/tpls/gtest/gtest/gtest.h @@ -0,0 +1,20065 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for Google Test. It should be +// included by any test program that uses Google Test. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! +// +// Acknowledgment: Google Test borrowed the idea of automatic test +// registration from Barthelemy Dagenais' (barthelemy@prologique.com) +// easyUnit framework. + +#ifdef __GNUC__ +#pragma GCC system_header +#endif + +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_H_ + +#include +#include +#include + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares functions and macros used internally by +// Google Test. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan) +// +// Low-level types and utilities for porting Google Test to various +// platforms. They are subject to change without notice. DO NOT USE +// THEM IN USER CODE. +// +// This file is fundamental to Google Test. All other Google Test source +// files are expected to #include this. Therefore, it cannot #include +// any other Google Test header. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ + +// The user can define the following macros in the build script to +// control Google Test's behavior. If the user doesn't define a macro +// in this list, Google Test will define it. +// +// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) +// is/isn't available. +// GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions +// are enabled. +// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::string, which is different to std::string). +// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string +// is/isn't available (some systems define +// ::wstring, which is different to std::wstring). +// GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular +// expressions are/aren't available. +// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that +// is/isn't available. +// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't +// enabled. +// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that +// std::wstring does/doesn't work (Google Test can +// be used where std::wstring is unavailable). +// GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple +// is/isn't available. +// GTEST_HAS_SEH - Define it to 1/0 to indicate whether the +// compiler supports Microsoft's "Structured +// Exception Handling". +// GTEST_HAS_STREAM_REDIRECTION +// - Define it to 1/0 to indicate whether the +// platform supports I/O stream redirection using +// dup() and dup2(). +// GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google +// Test's own tr1 tuple implementation should be +// used. Unused when the user sets +// GTEST_HAS_TR1_TUPLE to 0. +// GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test +// is building in C++11/C++98 mode. +// GTEST_LINKED_AS_SHARED_LIBRARY +// - Define to 1 when compiling tests that use +// Google Test as a shared library (known as +// DLL on Windows). +// GTEST_CREATE_SHARED_LIBRARY +// - Define to 1 when compiling Google Test itself +// as a shared library. + +// This header defines the following utilities: +// +// Macros indicating the current platform (defined to 1 if compiled on +// the given platform; otherwise undefined): +// GTEST_OS_AIX - IBM AIX +// GTEST_OS_CYGWIN - Cygwin +// GTEST_OS_HPUX - HP-UX +// GTEST_OS_LINUX - Linux +// GTEST_OS_LINUX_ANDROID - Google Android +// GTEST_OS_MAC - Mac OS X +// GTEST_OS_IOS - iOS +// GTEST_OS_IOS_SIMULATOR - iOS simulator +// GTEST_OS_NACL - Google Native Client (NaCl) +// GTEST_OS_OPENBSD - OpenBSD +// GTEST_OS_QNX - QNX +// GTEST_OS_SOLARIS - Sun Solaris +// GTEST_OS_SYMBIAN - Symbian +// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) +// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop +// GTEST_OS_WINDOWS_MINGW - MinGW +// GTEST_OS_WINDOWS_MOBILE - Windows Mobile +// GTEST_OS_ZOS - z/OS +// +// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the +// most stable support. Since core members of the Google Test project +// don't have access to other platforms, support for them may be less +// stable. If you notice any problems on your platform, please notify +// googletestframework@googlegroups.com (patches for fixing them are +// even more welcome!). +// +// Note that it is possible that none of the GTEST_OS_* macros are defined. +// +// Macros indicating available Google Test features (defined to 1 if +// the corresponding feature is supported; otherwise undefined): +// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized +// tests) +// GTEST_HAS_DEATH_TEST - death tests +// GTEST_HAS_PARAM_TEST - value-parameterized tests +// GTEST_HAS_TYPED_TEST - typed tests +// GTEST_HAS_TYPED_TEST_P - type-parameterized tests +// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with +// GTEST_HAS_POSIX_RE (see above) which users can +// define themselves. +// GTEST_USES_SIMPLE_RE - our own simple regex is used; +// the above two are mutually exclusive. +// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). +// +// Macros for basic C++ coding: +// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. +// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a +// variable don't have to be used. +// GTEST_DISALLOW_ASSIGN_ - disables operator=. +// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. +// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. +// +// Synchronization: +// Mutex, MutexLock, ThreadLocal, GetThreadCount() +// - synchronization primitives. +// GTEST_IS_THREADSAFE - defined to 1 to indicate that the above +// synchronization primitives have real implementations +// and Google Test is thread-safe; or 0 otherwise. +// +// Template meta programming: +// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. +// IteratorTraits - partial implementation of std::iterator_traits, which +// is not available in libCstd when compiled with Sun C++. +// +// Smart pointers: +// scoped_ptr - as in TR2. +// +// Regular expressions: +// RE - a simple regular expression class using the POSIX +// Extended Regular Expression syntax on UNIX-like +// platforms, or a reduced regular exception syntax on +// other platforms, including Windows. +// +// Logging: +// GTEST_LOG_() - logs messages at the specified severity level. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. +// +// Stdout and stderr capturing: +// CaptureStdout() - starts capturing stdout. +// GetCapturedStdout() - stops capturing stdout and returns the captured +// string. +// CaptureStderr() - starts capturing stderr. +// GetCapturedStderr() - stops capturing stderr and returns the captured +// string. +// +// Integer types: +// TypeWithSize - maps an integer to a int type. +// Int32, UInt32, Int64, UInt64, TimeInMillis +// - integers of known sizes. +// BiggestInt - the biggest signed integer type. +// +// Command-line utilities: +// GTEST_FLAG() - references a flag. +// GTEST_DECLARE_*() - declares a flag. +// GTEST_DEFINE_*() - defines a flag. +// GetInjectableArgvs() - returns the command line as a vector of strings. +// +// Environment variable utilities: +// GetEnv() - gets the value of an environment variable. +// BoolFromGTestEnv() - parses a bool environment variable. +// Int32FromGTestEnv() - parses an Int32 environment variable. +// StringFromGTestEnv() - parses a string environment variable. + +#include // for isspace, etc +#include // for ptrdiff_t +#include +#include +#include +#ifndef _WIN32_WCE +# include +# include +#endif // !_WIN32_WCE + +#if defined __APPLE__ +# include +# include +#endif + +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" +#define GTEST_FLAG_PREFIX_ "gtest_" +#define GTEST_FLAG_PREFIX_DASH_ "gtest-" +#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" +#define GTEST_NAME_ "Google Test" +#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" + +// Determines the version of gcc that is used to compile this. +#ifdef __GNUC__ +// 40302 means version 4.3.2. +# define GTEST_GCC_VER_ \ + (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) +#endif // __GNUC__ + +// Determines the platform on which Google Test is compiled. +#ifdef __CYGWIN__ +# define GTEST_OS_CYGWIN 1 +#elif defined __SYMBIAN32__ +# define GTEST_OS_SYMBIAN 1 +#elif defined _WIN32 +# define GTEST_OS_WINDOWS 1 +# ifdef _WIN32_WCE +# define GTEST_OS_WINDOWS_MOBILE 1 +# elif defined(__MINGW__) || defined(__MINGW32__) +# define GTEST_OS_WINDOWS_MINGW 1 +# else +# define GTEST_OS_WINDOWS_DESKTOP 1 +# endif // _WIN32_WCE +#elif defined __APPLE__ +# define GTEST_OS_MAC 1 +# if TARGET_OS_IPHONE +# define GTEST_OS_IOS 1 +# if TARGET_IPHONE_SIMULATOR +# define GTEST_OS_IOS_SIMULATOR 1 +# endif +# endif +#elif defined __linux__ +# define GTEST_OS_LINUX 1 +# if defined __ANDROID__ +# define GTEST_OS_LINUX_ANDROID 1 +# endif +#elif defined __MVS__ +# define GTEST_OS_ZOS 1 +#elif defined(__sun) && defined(__SVR4) +# define GTEST_OS_SOLARIS 1 +#elif defined(_AIX) +# define GTEST_OS_AIX 1 +#elif defined(__hpux) +# define GTEST_OS_HPUX 1 +#elif defined __native_client__ +# define GTEST_OS_NACL 1 +#elif defined __OpenBSD__ +# define GTEST_OS_OPENBSD 1 +#elif defined __QNX__ +# define GTEST_OS_QNX 1 +#endif // __CYGWIN__ + +#ifndef GTEST_LANG_CXX11 +// gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when +// -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a +// value for __cplusplus, and recent versions of clang, gcc, and +// probably other compilers set that too in C++11 mode. +# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L +// Compiling in at least C++11 mode. +# define GTEST_LANG_CXX11 1 +# else +# define GTEST_LANG_CXX11 0 +# endif +#endif + +// Brings in definitions for functions used in the testing::internal::posix +// namespace (read, write, close, chdir, isatty, stat). We do not currently +// use them on Windows Mobile. +#if !GTEST_OS_WINDOWS +// This assumes that non-Windows OSes provide unistd.h. For OSes where this +// is not the case, we need to include headers that provide the functions +// mentioned above. +# include +# include +#elif !GTEST_OS_WINDOWS_MOBILE +# include +# include +#endif + +#if GTEST_OS_LINUX_ANDROID +// Used to define __ANDROID_API__ matching the target NDK API level. +# include // NOLINT +#endif + +// Defines this to true iff Google Test can use POSIX regular expressions. +#ifndef GTEST_HAS_POSIX_RE +# if GTEST_OS_LINUX_ANDROID +// On Android, is only available starting with Gingerbread. +# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) +# else +# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) +# endif +#endif + +#if GTEST_HAS_POSIX_RE + +// On some platforms, needs someone to define size_t, and +// won't compile otherwise. We can #include it here as we already +// included , which is guaranteed to define size_t through +// . +# include // NOLINT + +# define GTEST_USES_POSIX_RE 1 + +#elif GTEST_OS_WINDOWS + +// is not available on Windows. Use our own simple regex +// implementation instead. +# define GTEST_USES_SIMPLE_RE 1 + +#else + +// may not be available on this platform. Use our own +// simple regex implementation instead. +# define GTEST_USES_SIMPLE_RE 1 + +#endif // GTEST_HAS_POSIX_RE + +#ifndef GTEST_HAS_EXCEPTIONS +// The user didn't tell us whether exceptions are enabled, so we need +// to figure it out. +# if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS +// macro to enable exceptions, so we'll do the same. +// Assumes that exceptions are enabled by default. +# ifndef _HAS_EXCEPTIONS +# define _HAS_EXCEPTIONS 1 +# endif // _HAS_EXCEPTIONS +# define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS +# elif defined(__GNUC__) && __EXCEPTIONS +// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. +# define GTEST_HAS_EXCEPTIONS 1 +# elif defined(__SUNPRO_CC) +// Sun Pro CC supports exceptions. However, there is no compile-time way of +// detecting whether they are enabled or not. Therefore, we assume that +// they are enabled unless the user tells us otherwise. +# define GTEST_HAS_EXCEPTIONS 1 +# elif defined(__IBMCPP__) && __EXCEPTIONS +// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. +# define GTEST_HAS_EXCEPTIONS 1 +# elif defined(__HP_aCC) +// Exception handling is in effect by default in HP aCC compiler. It has to +// be turned of by +noeh compiler option if desired. +# define GTEST_HAS_EXCEPTIONS 1 +# else +// For other compilers, we assume exceptions are disabled to be +// conservative. +# define GTEST_HAS_EXCEPTIONS 0 +# endif // defined(_MSC_VER) || defined(__BORLANDC__) +#endif // GTEST_HAS_EXCEPTIONS + +#if !defined(GTEST_HAS_STD_STRING) +// Even though we don't use this macro any longer, we keep it in case +// some clients still depend on it. +# define GTEST_HAS_STD_STRING 1 +#elif !GTEST_HAS_STD_STRING +// The user told us that ::std::string isn't available. +# error "Google Test cannot be used where ::std::string isn't available." +#endif // !defined(GTEST_HAS_STD_STRING) + +#ifndef GTEST_HAS_GLOBAL_STRING +// The user didn't tell us whether ::string is available, so we need +// to figure it out. + +# define GTEST_HAS_GLOBAL_STRING 0 + +#endif // GTEST_HAS_GLOBAL_STRING + +#ifndef GTEST_HAS_STD_WSTRING +// The user didn't tell us whether ::std::wstring is available, so we need +// to figure it out. +// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring +// is available. + +// Cygwin 1.7 and below doesn't support ::std::wstring. +// Solaris' libc++ doesn't support it either. Android has +// no support for it at least as recent as Froyo (2.2). +# define GTEST_HAS_STD_WSTRING \ + (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) + +#endif // GTEST_HAS_STD_WSTRING + +#ifndef GTEST_HAS_GLOBAL_WSTRING +// The user didn't tell us whether ::wstring is available, so we need +// to figure it out. +# define GTEST_HAS_GLOBAL_WSTRING \ + (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Determines whether RTTI is available. +#ifndef GTEST_HAS_RTTI +// The user didn't tell us whether RTTI is enabled, so we need to +// figure it out. + +# ifdef _MSC_VER + +# ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. +# define GTEST_HAS_RTTI 1 +# else +# define GTEST_HAS_RTTI 0 +# endif + +// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. +# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) + +# ifdef __GXX_RTTI +// When building against STLport with the Android NDK and with +// -frtti -fno-exceptions, the build fails at link time with undefined +// references to __cxa_bad_typeid. Note sure if STL or toolchain bug, +// so disable RTTI when detected. +# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ + !defined(__EXCEPTIONS) +# define GTEST_HAS_RTTI 0 +# else +# define GTEST_HAS_RTTI 1 +# endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS +# else +# define GTEST_HAS_RTTI 0 +# endif // __GXX_RTTI + +// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends +// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the +// first version with C++ support. +# elif defined(__clang__) + +# define GTEST_HAS_RTTI __has_feature(cxx_rtti) + +// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if +// both the typeid and dynamic_cast features are present. +# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) + +# ifdef __RTTI_ALL__ +# define GTEST_HAS_RTTI 1 +# else +# define GTEST_HAS_RTTI 0 +# endif + +# else + +// For all other compilers, we assume RTTI is enabled. +# define GTEST_HAS_RTTI 1 + +# endif // _MSC_VER + +#endif // GTEST_HAS_RTTI + +// It's this header's responsibility to #include when RTTI +// is enabled. +#if GTEST_HAS_RTTI +# include +#endif + +// Determines whether Google Test can use the pthreads library. +#ifndef GTEST_HAS_PTHREAD +// The user didn't tell us explicitly, so we assume pthreads support is +// available on Linux and Mac. +// +// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 +// to your compiler flags. +# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ + || GTEST_OS_QNX) +#endif // GTEST_HAS_PTHREAD + +#if GTEST_HAS_PTHREAD +// gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is +// true. +# include // NOLINT + +// For timespec and nanosleep, used below. +# include // NOLINT +#endif + +// Determines whether Google Test can use tr1/tuple. You can define +// this macro to 0 to prevent Google Test from using tuple (any +// feature depending on tuple with be disabled in this mode). +#ifndef GTEST_HAS_TR1_TUPLE +# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) +// STLport, provided with the Android NDK, has neither or . +# define GTEST_HAS_TR1_TUPLE 0 +# else +// The user didn't tell us not to do it, so we assume it's OK. +# define GTEST_HAS_TR1_TUPLE 1 +# endif +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether Google Test's own tr1 tuple implementation +// should be used. +#ifndef GTEST_USE_OWN_TR1_TUPLE +// The user didn't tell us, so we need to figure it out. + +// We use our own TR1 tuple if we aren't sure the user has an +// implementation of it already. At this time, libstdc++ 4.0.0+ and +// MSVC 2010 are the only mainstream standard libraries that come +// with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler +// pretends to be GCC by defining __GNUC__ and friends, but cannot +// compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1 +// tuple in a 323 MB Feature Pack download, which we cannot assume the +// user has. QNX's QCC compiler is a modified GCC but it doesn't +// support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, +// and it can be used with some compilers that define __GNUC__. +# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ + && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 +# define GTEST_ENV_HAS_TR1_TUPLE_ 1 +# endif + +// C++11 specifies that provides std::tuple. Use that if gtest is used +// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6 +// can build with clang but need to use gcc4.2's libstdc++). +# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) +# define GTEST_ENV_HAS_STD_TUPLE_ 1 +# endif + +# if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ +# define GTEST_USE_OWN_TR1_TUPLE 0 +# else +# define GTEST_USE_OWN_TR1_TUPLE 1 +# endif + +#endif // GTEST_USE_OWN_TR1_TUPLE + +// To avoid conditional compilation everywhere, we make it +// gtest-port.h's responsibility to #include the header implementing +// tr1/tuple. +#if GTEST_HAS_TR1_TUPLE + +# if GTEST_USE_OWN_TR1_TUPLE +// This file was GENERATED by command: +// pump.py gtest-tuple.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2009 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Implements a subset of TR1 tuple needed by Google Test and Google Mock. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ + +#include // For ::std::pair. + +// The compiler used in Symbian has a bug that prevents us from declaring the +// tuple template as a friend (it complains that tuple is redefined). This +// hack bypasses the bug by declaring the members that should otherwise be +// private as public. +// Sun Studio versions < 12 also have the above bug. +#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) +# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: +#else +# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ + template friend class tuple; \ + private: +#endif + +// GTEST_n_TUPLE_(T) is the type of an n-tuple. +#define GTEST_0_TUPLE_(T) tuple<> +#define GTEST_1_TUPLE_(T) tuple +#define GTEST_2_TUPLE_(T) tuple +#define GTEST_3_TUPLE_(T) tuple +#define GTEST_4_TUPLE_(T) tuple +#define GTEST_5_TUPLE_(T) tuple +#define GTEST_6_TUPLE_(T) tuple +#define GTEST_7_TUPLE_(T) tuple +#define GTEST_8_TUPLE_(T) tuple +#define GTEST_9_TUPLE_(T) tuple +#define GTEST_10_TUPLE_(T) tuple + +// GTEST_n_TYPENAMES_(T) declares a list of n typenames. +#define GTEST_0_TYPENAMES_(T) +#define GTEST_1_TYPENAMES_(T) typename T##0 +#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 +#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 +#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3 +#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4 +#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5 +#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6 +#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 +#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8 +#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ + typename T##3, typename T##4, typename T##5, typename T##6, \ + typename T##7, typename T##8, typename T##9 + +// In theory, defining stuff in the ::std namespace is undefined +// behavior. We can do this as we are playing the role of a standard +// library vendor. +namespace std { +namespace tr1 { + +template +class tuple; + +// Anything in namespace gtest_internal is Google Test's INTERNAL +// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. +namespace gtest_internal { + +// ByRef::type is T if T is a reference; otherwise it's const T&. +template +struct ByRef { typedef const T& type; }; // NOLINT +template +struct ByRef { typedef T& type; }; // NOLINT + +// A handy wrapper for ByRef. +#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type + +// AddRef::type is T if T is a reference; otherwise it's T&. This +// is the same as tr1::add_reference::type. +template +struct AddRef { typedef T& type; }; // NOLINT +template +struct AddRef { typedef T& type; }; // NOLINT + +// A handy wrapper for AddRef. +#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type + +// A helper for implementing get(). +template class Get; + +// A helper for implementing tuple_element. kIndexValid is true +// iff k < the number of fields in tuple type T. +template +struct TupleElement; + +template +struct TupleElement { + typedef T0 type; +}; + +template +struct TupleElement { + typedef T1 type; +}; + +template +struct TupleElement { + typedef T2 type; +}; + +template +struct TupleElement { + typedef T3 type; +}; + +template +struct TupleElement { + typedef T4 type; +}; + +template +struct TupleElement { + typedef T5 type; +}; + +template +struct TupleElement { + typedef T6 type; +}; + +template +struct TupleElement { + typedef T7 type; +}; + +template +struct TupleElement { + typedef T8 type; +}; + +template +struct TupleElement { + typedef T9 type; +}; + +} // namespace gtest_internal + +template <> +class tuple<> { + public: + tuple() {} + tuple(const tuple& /* t */) {} + tuple& operator=(const tuple& /* t */) { return *this; } +}; + +template +class GTEST_1_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} + + tuple(const tuple& t) : f0_(t.f0_) {} + + template + tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_1_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { + f0_ = t.f0_; + return *this; + } + + T0 f0_; +}; + +template +class GTEST_2_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), + f1_(f1) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} + + template + tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} + template + tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_2_TUPLE_(U)& t) { + return CopyFrom(t); + } + template + tuple& operator=(const ::std::pair& p) { + f0_ = p.first; + f1_ = p.second; + return *this; + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + return *this; + } + + T0 f0_; + T1 f1_; +}; + +template +class GTEST_3_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + template + tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_3_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; +}; + +template +class GTEST_4_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} + + template + tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_4_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; +}; + +template +class GTEST_5_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, + GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_) {} + + template + tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_5_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; +}; + +template +class GTEST_6_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_) {} + + template + tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_6_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; +}; + +template +class GTEST_7_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + template + tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_7_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; +}; + +template +class GTEST_8_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, + GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + template + tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_8_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; +}; + +template +class GTEST_9_TUPLE_(T) { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), + f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + template + tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_9_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; +}; + +template +class tuple { + public: + template friend class gtest_internal::Get; + + tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), + f9_() {} + + explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, + GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, + GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, + GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), + f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} + + tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), + f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} + + template + tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), + f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), + f9_(t.f9_) {} + + tuple& operator=(const tuple& t) { return CopyFrom(t); } + + template + tuple& operator=(const GTEST_10_TUPLE_(U)& t) { + return CopyFrom(t); + } + + GTEST_DECLARE_TUPLE_AS_FRIEND_ + + template + tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { + f0_ = t.f0_; + f1_ = t.f1_; + f2_ = t.f2_; + f3_ = t.f3_; + f4_ = t.f4_; + f5_ = t.f5_; + f6_ = t.f6_; + f7_ = t.f7_; + f8_ = t.f8_; + f9_ = t.f9_; + return *this; + } + + T0 f0_; + T1 f1_; + T2 f2_; + T3 f3_; + T4 f4_; + T5 f5_; + T6 f6_; + T7 f7_; + T8 f8_; + T9 f9_; +}; + +// 6.1.3.2 Tuple creation functions. + +// Known limitations: we don't support passing an +// std::tr1::reference_wrapper to make_tuple(). And we don't +// implement tie(). + +inline tuple<> make_tuple() { return tuple<>(); } + +template +inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { + return GTEST_1_TUPLE_(T)(f0); +} + +template +inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { + return GTEST_2_TUPLE_(T)(f0, f1); +} + +template +inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { + return GTEST_3_TUPLE_(T)(f0, f1, f2); +} + +template +inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3) { + return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); +} + +template +inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4) { + return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); +} + +template +inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5) { + return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); +} + +template +inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6) { + return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); +} + +template +inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { + return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); +} + +template +inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8) { + return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); +} + +template +inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, + const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, + const T8& f8, const T9& f9) { + return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); +} + +// 6.1.3.3 Tuple helper classes. + +template struct tuple_size; + +template +struct tuple_size { + static const int value = 0; +}; + +template +struct tuple_size { + static const int value = 1; +}; + +template +struct tuple_size { + static const int value = 2; +}; + +template +struct tuple_size { + static const int value = 3; +}; + +template +struct tuple_size { + static const int value = 4; +}; + +template +struct tuple_size { + static const int value = 5; +}; + +template +struct tuple_size { + static const int value = 6; +}; + +template +struct tuple_size { + static const int value = 7; +}; + +template +struct tuple_size { + static const int value = 8; +}; + +template +struct tuple_size { + static const int value = 9; +}; + +template +struct tuple_size { + static const int value = 10; +}; + +template +struct tuple_element { + typedef typename gtest_internal::TupleElement< + k < (tuple_size::value), k, Tuple>::type type; +}; + +#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type + +// 6.1.3.4 Element access. + +namespace gtest_internal { + +template <> +class Get<0> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + Field(Tuple& t) { return t.f0_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) + ConstField(const Tuple& t) { return t.f0_; } +}; + +template <> +class Get<1> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + Field(Tuple& t) { return t.f1_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) + ConstField(const Tuple& t) { return t.f1_; } +}; + +template <> +class Get<2> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + Field(Tuple& t) { return t.f2_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) + ConstField(const Tuple& t) { return t.f2_; } +}; + +template <> +class Get<3> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + Field(Tuple& t) { return t.f3_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) + ConstField(const Tuple& t) { return t.f3_; } +}; + +template <> +class Get<4> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + Field(Tuple& t) { return t.f4_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) + ConstField(const Tuple& t) { return t.f4_; } +}; + +template <> +class Get<5> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + Field(Tuple& t) { return t.f5_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) + ConstField(const Tuple& t) { return t.f5_; } +}; + +template <> +class Get<6> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + Field(Tuple& t) { return t.f6_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) + ConstField(const Tuple& t) { return t.f6_; } +}; + +template <> +class Get<7> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + Field(Tuple& t) { return t.f7_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) + ConstField(const Tuple& t) { return t.f7_; } +}; + +template <> +class Get<8> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + Field(Tuple& t) { return t.f8_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) + ConstField(const Tuple& t) { return t.f8_; } +}; + +template <> +class Get<9> { + public: + template + static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + Field(Tuple& t) { return t.f9_; } // NOLINT + + template + static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) + ConstField(const Tuple& t) { return t.f9_; } +}; + +} // namespace gtest_internal + +template +GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::Field(t); +} + +template +GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) +get(const GTEST_10_TUPLE_(T)& t) { + return gtest_internal::Get::ConstField(t); +} + +// 6.1.3.5 Relational operators + +// We only implement == and !=, as we don't have a need for the rest yet. + +namespace gtest_internal { + +// SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the +// first k fields of t1 equals the first k fields of t2. +// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if +// k1 != k2. +template +struct SameSizeTuplePrefixComparator; + +template <> +struct SameSizeTuplePrefixComparator<0, 0> { + template + static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { + return true; + } +}; + +template +struct SameSizeTuplePrefixComparator { + template + static bool Eq(const Tuple1& t1, const Tuple2& t2) { + return SameSizeTuplePrefixComparator::Eq(t1, t2) && + ::std::tr1::get(t1) == ::std::tr1::get(t2); + } +}; + +} // namespace gtest_internal + +template +inline bool operator==(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { + return gtest_internal::SameSizeTuplePrefixComparator< + tuple_size::value, + tuple_size::value>::Eq(t, u); +} + +template +inline bool operator!=(const GTEST_10_TUPLE_(T)& t, + const GTEST_10_TUPLE_(U)& u) { return !(t == u); } + +// 6.1.4 Pairs. +// Unimplemented. + +} // namespace tr1 +} // namespace std + +#undef GTEST_0_TUPLE_ +#undef GTEST_1_TUPLE_ +#undef GTEST_2_TUPLE_ +#undef GTEST_3_TUPLE_ +#undef GTEST_4_TUPLE_ +#undef GTEST_5_TUPLE_ +#undef GTEST_6_TUPLE_ +#undef GTEST_7_TUPLE_ +#undef GTEST_8_TUPLE_ +#undef GTEST_9_TUPLE_ +#undef GTEST_10_TUPLE_ + +#undef GTEST_0_TYPENAMES_ +#undef GTEST_1_TYPENAMES_ +#undef GTEST_2_TYPENAMES_ +#undef GTEST_3_TYPENAMES_ +#undef GTEST_4_TYPENAMES_ +#undef GTEST_5_TYPENAMES_ +#undef GTEST_6_TYPENAMES_ +#undef GTEST_7_TYPENAMES_ +#undef GTEST_8_TYPENAMES_ +#undef GTEST_9_TYPENAMES_ +#undef GTEST_10_TYPENAMES_ + +#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ +#undef GTEST_BY_REF_ +#undef GTEST_ADD_REF_ +#undef GTEST_TUPLE_ELEMENT_ + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ +# elif GTEST_ENV_HAS_STD_TUPLE_ +# include +// C++11 puts its tuple into the ::std namespace rather than +// ::std::tr1. gtest expects tuple to live in ::std::tr1, so put it there. +// This causes undefined behavior, but supported compilers react in +// the way we intend. +namespace std { +namespace tr1 { +using ::std::get; +using ::std::make_tuple; +using ::std::tuple; +using ::std::tuple_element; +using ::std::tuple_size; +} +} + +# elif GTEST_OS_SYMBIAN + +// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to +// use STLport's tuple implementation, which unfortunately doesn't +// work as the copy of STLport distributed with Symbian is incomplete. +// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to +// use its own tuple implementation. +# ifdef BOOST_HAS_TR1_TUPLE +# undef BOOST_HAS_TR1_TUPLE +# endif // BOOST_HAS_TR1_TUPLE + +// This prevents , which defines +// BOOST_HAS_TR1_TUPLE, from being #included by Boost's . +# define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED +# include + +# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) +// GCC 4.0+ implements tr1/tuple in the header. This does +// not conform to the TR1 spec, which requires the header to be . + +# if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 +// Until version 4.3.2, gcc has a bug that causes , +// which is #included by , to not compile when RTTI is +// disabled. _TR1_FUNCTIONAL is the header guard for +// . Hence the following #define is a hack to prevent +// from being included. +# define _TR1_FUNCTIONAL 1 +# include +# undef _TR1_FUNCTIONAL // Allows the user to #include + // if he chooses to. +# else +# include // NOLINT +# endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 + +# else +// If the compiler is not GCC 4.0+, we assume the user is using a +// spec-conforming TR1 implementation. +# include // NOLINT +# endif // GTEST_USE_OWN_TR1_TUPLE + +#endif // GTEST_HAS_TR1_TUPLE + +// Determines whether clone(2) is supported. +// Usually it will only be available on Linux, excluding +// Linux on the Itanium architecture. +// Also see http://linux.die.net/man/2/clone. +#ifndef GTEST_HAS_CLONE +// The user didn't tell us, so we need to figure it out. + +# if GTEST_OS_LINUX && !defined(__ia64__) +# if GTEST_OS_LINUX_ANDROID +// On Android, clone() is only available on ARM starting with Gingerbread. +# if defined(__arm__) && __ANDROID_API__ >= 9 +# define GTEST_HAS_CLONE 1 +# else +# define GTEST_HAS_CLONE 0 +# endif +# else +# define GTEST_HAS_CLONE 1 +# endif +# else +# define GTEST_HAS_CLONE 0 +# endif // GTEST_OS_LINUX && !defined(__ia64__) + +#endif // GTEST_HAS_CLONE + +// Determines whether to support stream redirection. This is used to test +// output correctness and to implement death tests. +#ifndef GTEST_HAS_STREAM_REDIRECTION +// By default, we assume that stream redirection is supported on all +// platforms except known mobile ones. +# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN +# define GTEST_HAS_STREAM_REDIRECTION 0 +# else +# define GTEST_HAS_STREAM_REDIRECTION 1 +# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN +#endif // GTEST_HAS_STREAM_REDIRECTION + +// Determines whether to support death tests. +// Google Test does not support death tests for VC 7.1 and earlier as +// abort() in a VC 7.1 application compiled as GUI in debug config +// pops up a dialog window that cannot be suppressed programmatically. +#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ + (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ + (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ + GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ + GTEST_OS_OPENBSD || GTEST_OS_QNX) +# define GTEST_HAS_DEATH_TEST 1 +# include // NOLINT +#endif + +// We don't support MSVC 7.1 with exceptions disabled now. Therefore +// all the compilers we care about are adequate for supporting +// value-parameterized tests. +#define GTEST_HAS_PARAM_TEST 1 + +// Determines whether to support type-driven tests. + +// Typed tests need and variadic macros, which GCC, VC++ 8.0, +// Sun Pro CC, IBM Visual Age, and HP aCC support. +#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ + defined(__IBMCPP__) || defined(__HP_aCC) +# define GTEST_HAS_TYPED_TEST 1 +# define GTEST_HAS_TYPED_TEST_P 1 +#endif + +// Determines whether to support Combine(). This only makes sense when +// value-parameterized tests are enabled. The implementation doesn't +// work on Sun Studio since it doesn't understand templated conversion +// operators. +#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) +# define GTEST_HAS_COMBINE 1 +#endif + +// Determines whether the system compiler uses UTF-16 for encoding wide strings. +#define GTEST_WIDE_STRING_USES_UTF16_ \ + (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) + +// Determines whether test results can be streamed to a socket. +#if GTEST_OS_LINUX +# define GTEST_CAN_STREAM_RESULTS_ 1 +#endif + +// Defines some utility macros. + +// The GNU compiler emits a warning if nested "if" statements are followed by +// an "else" statement and braces are not used to explicitly disambiguate the +// "else" binding. This leads to problems with code like: +// +// if (gate) +// ASSERT_*(condition) << "Some message"; +// +// The "switch (0) case 0:" idiom is used to suppress this. +#ifdef __INTEL_COMPILER +# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ +#else +# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT +#endif + +// Use this annotation at the end of a struct/class definition to +// prevent the compiler from optimizing away instances that are never +// used. This is useful when all interesting logic happens inside the +// c'tor and / or d'tor. Example: +// +// struct Foo { +// Foo() { ... } +// } GTEST_ATTRIBUTE_UNUSED_; +// +// Also use it after a variable or parameter declaration to tell the +// compiler the variable/parameter does not have to be used. +#if defined(__GNUC__) && !defined(COMPILER_ICC) +# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) +#else +# define GTEST_ATTRIBUTE_UNUSED_ +#endif + +// A macro to disallow operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_ASSIGN_(type)\ + void operator=(type const &) + +// A macro to disallow copy constructor and operator= +// This should be used in the private: declarations for a class. +#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ + type(type const &);\ + GTEST_DISALLOW_ASSIGN_(type) + +// Tell the compiler to warn about unused return values for functions declared +// with this macro. The macro should be used on function declarations +// following the argument list: +// +// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; +#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) +# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) +#else +# define GTEST_MUST_USE_RESULT_ +#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC + +// Determine whether the compiler supports Microsoft's Structured Exception +// Handling. This is supported by several Windows compilers but generally +// does not exist on any other system. +#ifndef GTEST_HAS_SEH +// The user didn't tell us, so we need to figure it out. + +# if defined(_MSC_VER) || defined(__BORLANDC__) +// These two compilers are known to support SEH. +# define GTEST_HAS_SEH 1 +# else +// Assume no SEH. +# define GTEST_HAS_SEH 0 +# endif + +#endif // GTEST_HAS_SEH + +#ifdef _MSC_VER + +# if GTEST_LINKED_AS_SHARED_LIBRARY +# define GTEST_API_ __declspec(dllimport) +# elif GTEST_CREATE_SHARED_LIBRARY +# define GTEST_API_ __declspec(dllexport) +# endif + +#endif // _MSC_VER + +#ifndef GTEST_API_ +# define GTEST_API_ +#endif + +#ifdef __GNUC__ +// Ask the compiler to never inline a given function. +# define GTEST_NO_INLINE_ __attribute__((noinline)) +#else +# define GTEST_NO_INLINE_ +#endif + +// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project. +#if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) +# define GTEST_HAS_CXXABI_H_ 1 +#else +# define GTEST_HAS_CXXABI_H_ 0 +#endif + +namespace testing { + +class Message; + +namespace internal { + +// A secret type that Google Test users don't know about. It has no +// definition on purpose. Therefore it's impossible to create a +// Secret object, which is what we want. +class Secret; + +// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time +// expression is true. For example, you could use it to verify the +// size of a static array: +// +// GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, +// content_type_names_incorrect_size); +// +// or to make sure a struct is smaller than a certain size: +// +// GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); +// +// The second argument to the macro is the name of the variable. If +// the expression is false, most compilers will issue a warning/error +// containing the name of the variable. + +template +struct CompileAssert { +}; + +#define GTEST_COMPILE_ASSERT_(expr, msg) \ + typedef ::testing::internal::CompileAssert<(static_cast(expr))> \ + msg[static_cast(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ + +// Implementation details of GTEST_COMPILE_ASSERT_: +// +// - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 +// elements (and thus is invalid) when the expression is false. +// +// - The simpler definition +// +// #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] +// +// does not work, as gcc supports variable-length arrays whose sizes +// are determined at run-time (this is gcc's extension and not part +// of the C++ standard). As a result, gcc fails to reject the +// following code with the simple definition: +// +// int foo; +// GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is +// // not a compile-time constant. +// +// - By using the type CompileAssert<(bool(expr))>, we ensures that +// expr is a compile-time constant. (Template arguments must be +// determined at compile-time.) +// +// - The outter parentheses in CompileAssert<(bool(expr))> are necessary +// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written +// +// CompileAssert +// +// instead, these compilers will refuse to compile +// +// GTEST_COMPILE_ASSERT_(5 > 0, some_message); +// +// (They seem to think the ">" in "5 > 0" marks the end of the +// template argument list.) +// +// - The array size is (bool(expr) ? 1 : -1), instead of simply +// +// ((expr) ? 1 : -1). +// +// This is to avoid running into a bug in MS VC 7.1, which +// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. + +// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. +// +// This template is declared, but intentionally undefined. +template +struct StaticAssertTypeEqHelper; + +template +struct StaticAssertTypeEqHelper {}; + +#if GTEST_HAS_GLOBAL_STRING +typedef ::string string; +#else +typedef ::std::string string; +#endif // GTEST_HAS_GLOBAL_STRING + +#if GTEST_HAS_GLOBAL_WSTRING +typedef ::wstring wstring; +#elif GTEST_HAS_STD_WSTRING +typedef ::std::wstring wstring; +#endif // GTEST_HAS_GLOBAL_WSTRING + +// A helper for suppressing warnings on constant condition. It just +// returns 'condition'. +GTEST_API_ bool IsTrue(bool condition); + +// Defines scoped_ptr. + +// This implementation of scoped_ptr is PARTIAL - it only contains +// enough stuff to satisfy Google Test's need. +template +class scoped_ptr { + public: + typedef T element_type; + + explicit scoped_ptr(T* p = NULL) : ptr_(p) {} + ~scoped_ptr() { reset(); } + + T& operator*() const { return *ptr_; } + T* operator->() const { return ptr_; } + T* get() const { return ptr_; } + + T* release() { + T* const ptr = ptr_; + ptr_ = NULL; + return ptr; + } + + void reset(T* p = NULL) { + if (p != ptr_) { + if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. + delete ptr_; + } + ptr_ = p; + } + } + + private: + T* ptr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); +}; + +// Defines RE. + +// A simple C++ wrapper for . It uses the POSIX Extended +// Regular Expression syntax. +class GTEST_API_ RE { + public: + // A copy constructor is required by the Standard to initialize object + // references from r-values. + RE(const RE& other) { Init(other.pattern()); } + + // Constructs an RE from a string. + RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + + RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT + +#endif // GTEST_HAS_GLOBAL_STRING + + RE(const char* regex) { Init(regex); } // NOLINT + ~RE(); + + // Returns the string representation of the regex. + const char* pattern() const { return pattern_; } + + // FullMatch(str, re) returns true iff regular expression re matches + // the entire str. + // PartialMatch(str, re) returns true iff regular expression re + // matches a substring of str (including str itself). + // + // TODO(wan@google.com): make FullMatch() and PartialMatch() work + // when str contains NUL characters. + static bool FullMatch(const ::std::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::std::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } + +#if GTEST_HAS_GLOBAL_STRING + + static bool FullMatch(const ::string& str, const RE& re) { + return FullMatch(str.c_str(), re); + } + static bool PartialMatch(const ::string& str, const RE& re) { + return PartialMatch(str.c_str(), re); + } + +#endif // GTEST_HAS_GLOBAL_STRING + + static bool FullMatch(const char* str, const RE& re); + static bool PartialMatch(const char* str, const RE& re); + + private: + void Init(const char* regex); + + // We use a const char* instead of an std::string, as Google Test used to be + // used where std::string is not available. TODO(wan@google.com): change to + // std::string. + const char* pattern_; + bool is_valid_; + +#if GTEST_USES_POSIX_RE + + regex_t full_regex_; // For FullMatch(). + regex_t partial_regex_; // For PartialMatch(). + +#else // GTEST_USES_SIMPLE_RE + + const char* full_pattern_; // For FullMatch(); + +#endif + + GTEST_DISALLOW_ASSIGN_(RE); +}; + +// Formats a source file path and a line number as they would appear +// in an error message from the compiler used to compile this code. +GTEST_API_ ::std::string FormatFileLocation(const char* file, int line); + +// Formats a file location for compiler-independent XML output. +// Although this function is not platform dependent, we put it next to +// FormatFileLocation in order to contrast the two functions. +GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, + int line); + +// Defines logging utilities: +// GTEST_LOG_(severity) - logs messages at the specified severity level. The +// message itself is streamed into the macro. +// LogToStderr() - directs all log messages to stderr. +// FlushInfoLog() - flushes informational log messages. + +enum GTestLogSeverity { + GTEST_INFO, + GTEST_WARNING, + GTEST_ERROR, + GTEST_FATAL +}; + +// Formats log entry severity, provides a stream object for streaming the +// log message, and terminates the message with a newline when going out of +// scope. +class GTEST_API_ GTestLog { + public: + GTestLog(GTestLogSeverity severity, const char* file, int line); + + // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. + ~GTestLog(); + + ::std::ostream& GetStream() { return ::std::cerr; } + + private: + const GTestLogSeverity severity_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); +}; + +#define GTEST_LOG_(severity) \ + ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ + __FILE__, __LINE__).GetStream() + +inline void LogToStderr() {} +inline void FlushInfoLog() { fflush(NULL); } + +// INTERNAL IMPLEMENTATION - DO NOT USE. +// +// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition +// is not satisfied. +// Synopsys: +// GTEST_CHECK_(boolean_condition); +// or +// GTEST_CHECK_(boolean_condition) << "Additional message"; +// +// This checks the condition and if the condition is not satisfied +// it prints message about the condition violation, including the +// condition itself, plus additional message streamed into it, if any, +// and then it aborts the program. It aborts the program irrespective of +// whether it is built in the debug mode or not. +#define GTEST_CHECK_(condition) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::IsTrue(condition)) \ + ; \ + else \ + GTEST_LOG_(FATAL) << "Condition " #condition " failed. " + +// An all-mode assert to verify that the given POSIX-style function +// call returns 0 (indicating success). Known limitation: this +// doesn't expand to a balanced 'if' statement, so enclose the macro +// in {} if you need to use it as the only statement in an 'if' +// branch. +#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ + if (const int gtest_error = (posix_call)) \ + GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ + << gtest_error + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Use ImplicitCast_ as a safe version of static_cast for upcasting in +// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a +// const Foo*). When you use ImplicitCast_, the compiler checks that +// the cast is safe. Such explicit ImplicitCast_s are necessary in +// surprisingly many situations where C++ demands an exact type match +// instead of an argument type convertable to a target type. +// +// The syntax for using ImplicitCast_ is the same as for static_cast: +// +// ImplicitCast_(expr) +// +// ImplicitCast_ would have been part of the C++ standard library, +// but the proposal was submitted too late. It will probably make +// its way into the language in the future. +// +// This relatively ugly name is intentional. It prevents clashes with +// similar functions users may have (e.g., implicit_cast). The internal +// namespace alone is not enough because the function can be found by ADL. +template +inline To ImplicitCast_(To x) { return x; } + +// When you upcast (that is, cast a pointer from type Foo to type +// SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts +// always succeed. When you downcast (that is, cast a pointer from +// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because +// how do you know the pointer is really of type SubclassOfFoo? It +// could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, +// when you downcast, you should use this macro. In debug mode, we +// use dynamic_cast<> to double-check the downcast is legal (we die +// if it's not). In normal mode, we do the efficient static_cast<> +// instead. Thus, it's important to test in debug mode to make sure +// the cast is legal! +// This is the only place in the code we should use dynamic_cast<>. +// In particular, you SHOULDN'T be using dynamic_cast<> in order to +// do RTTI (eg code like this: +// if (dynamic_cast(foo)) HandleASubclass1Object(foo); +// if (dynamic_cast(foo)) HandleASubclass2Object(foo); +// You should design the code some other way not to need this. +// +// This relatively ugly name is intentional. It prevents clashes with +// similar functions users may have (e.g., down_cast). The internal +// namespace alone is not enough because the function can be found by ADL. +template // use like this: DownCast_(foo); +inline To DownCast_(From* f) { // so we only accept pointers + // Ensures that To is a sub-type of From *. This test is here only + // for compile-time type checking, and has no overhead in an + // optimized build at run-time, as it will be optimized away + // completely. + if (false) { + const To to = NULL; + ::testing::internal::ImplicitCast_(to); + } + +#if GTEST_HAS_RTTI + // RTTI: debug mode only! + GTEST_CHECK_(f == NULL || dynamic_cast(f) != NULL); +#endif + return static_cast(f); +} + +// Downcasts the pointer of type Base to Derived. +// Derived must be a subclass of Base. The parameter MUST +// point to a class of type Derived, not any subclass of it. +// When RTTI is available, the function performs a runtime +// check to enforce this. +template +Derived* CheckedDowncastToActualType(Base* base) { +#if GTEST_HAS_RTTI + GTEST_CHECK_(typeid(*base) == typeid(Derived)); + return dynamic_cast(base); // NOLINT +#else + return static_cast(base); // Poor man's downcast. +#endif +} + +#if GTEST_HAS_STREAM_REDIRECTION + +// Defines the stderr capturer: +// CaptureStdout - starts capturing stdout. +// GetCapturedStdout - stops capturing stdout and returns the captured string. +// CaptureStderr - starts capturing stderr. +// GetCapturedStderr - stops capturing stderr and returns the captured string. +// +GTEST_API_ void CaptureStdout(); +GTEST_API_ std::string GetCapturedStdout(); +GTEST_API_ void CaptureStderr(); +GTEST_API_ std::string GetCapturedStderr(); + +#endif // GTEST_HAS_STREAM_REDIRECTION + + +#if GTEST_HAS_DEATH_TEST + +const ::std::vector& GetInjectableArgvs(); +void SetInjectableArgvs(const ::std::vector* + new_argvs); + +// A copy of all command line arguments. Set by InitGoogleTest(). +extern ::std::vector g_argvs; + +#endif // GTEST_HAS_DEATH_TEST + +// Defines synchronization primitives. + +#if GTEST_HAS_PTHREAD + +// Sleeps for (roughly) n milli-seconds. This function is only for +// testing Google Test's own constructs. Don't use it in user tests, +// either directly or indirectly. +inline void SleepMilliseconds(int n) { + const timespec time = { + 0, // 0 seconds. + n * 1000L * 1000L, // And n ms. + }; + nanosleep(&time, NULL); +} + +// Allows a controller thread to pause execution of newly created +// threads until notified. Instances of this class must be created +// and destroyed in the controller thread. +// +// This class is only for testing Google Test's own constructs. Do not +// use it in user tests, either directly or indirectly. +class Notification { + public: + Notification() : notified_(false) { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + } + ~Notification() { + pthread_mutex_destroy(&mutex_); + } + + // Notifies all threads created with this notification to start. Must + // be called from the controller thread. + void Notify() { + pthread_mutex_lock(&mutex_); + notified_ = true; + pthread_mutex_unlock(&mutex_); + } + + // Blocks until the controller thread notifies. Must be called from a test + // thread. + void WaitForNotification() { + for (;;) { + pthread_mutex_lock(&mutex_); + const bool notified = notified_; + pthread_mutex_unlock(&mutex_); + if (notified) + break; + SleepMilliseconds(10); + } + } + + private: + pthread_mutex_t mutex_; + bool notified_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); +}; + +// As a C-function, ThreadFuncWithCLinkage cannot be templated itself. +// Consequently, it cannot select a correct instantiation of ThreadWithParam +// in order to call its Run(). Introducing ThreadWithParamBase as a +// non-templated base class for ThreadWithParam allows us to bypass this +// problem. +class ThreadWithParamBase { + public: + virtual ~ThreadWithParamBase() {} + virtual void Run() = 0; +}; + +// pthread_create() accepts a pointer to a function type with the C linkage. +// According to the Standard (7.5/1), function types with different linkages +// are different even if they are otherwise identical. Some compilers (for +// example, SunStudio) treat them as different types. Since class methods +// cannot be defined with C-linkage we need to define a free C-function to +// pass into pthread_create(). +extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { + static_cast(thread)->Run(); + return NULL; +} + +// Helper class for testing Google Test's multi-threading constructs. +// To use it, write: +// +// void ThreadFunc(int param) { /* Do things with param */ } +// Notification thread_can_start; +// ... +// // The thread_can_start parameter is optional; you can supply NULL. +// ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); +// thread_can_start.Notify(); +// +// These classes are only for testing Google Test's own constructs. Do +// not use them in user tests, either directly or indirectly. +template +class ThreadWithParam : public ThreadWithParamBase { + public: + typedef void (*UserThreadFunc)(T); + + ThreadWithParam( + UserThreadFunc func, T param, Notification* thread_can_start) + : func_(func), + param_(param), + thread_can_start_(thread_can_start), + finished_(false) { + ThreadWithParamBase* const base = this; + // The thread can be created only after all fields except thread_ + // have been initialized. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); + } + ~ThreadWithParam() { Join(); } + + void Join() { + if (!finished_) { + GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); + finished_ = true; + } + } + + virtual void Run() { + if (thread_can_start_ != NULL) + thread_can_start_->WaitForNotification(); + func_(param_); + } + + private: + const UserThreadFunc func_; // User-supplied thread function. + const T param_; // User-supplied parameter to the thread function. + // When non-NULL, used to block execution until the controller thread + // notifies. + Notification* const thread_can_start_; + bool finished_; // true iff we know that the thread function has finished. + pthread_t thread_; // The native thread object. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); +}; + +// MutexBase and Mutex implement mutex on pthreads-based platforms. They +// are used in conjunction with class MutexLock: +// +// Mutex mutex; +// ... +// MutexLock lock(&mutex); // Acquires the mutex and releases it at the end +// // of the current scope. +// +// MutexBase implements behavior for both statically and dynamically +// allocated mutexes. Do not use MutexBase directly. Instead, write +// the following to define a static mutex: +// +// GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); +// +// You can forward declare a static mutex like this: +// +// GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); +// +// To create a dynamic mutex, just define an object of type Mutex. +class MutexBase { + public: + // Acquires this mutex. + void Lock() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); + owner_ = pthread_self(); + has_owner_ = true; + } + + // Releases this mutex. + void Unlock() { + // Since the lock is being released the owner_ field should no longer be + // considered valid. We don't protect writing to has_owner_ here, as it's + // the caller's responsibility to ensure that the current thread holds the + // mutex when this is called. + has_owner_ = false; + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); + } + + // Does nothing if the current thread holds the mutex. Otherwise, crashes + // with high probability. + void AssertHeld() const { + GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self())) + << "The current thread is not holding the mutex @" << this; + } + + // A static mutex may be used before main() is entered. It may even + // be used before the dynamic initialization stage. Therefore we + // must be able to initialize a static mutex object at link time. + // This means MutexBase has to be a POD and its member variables + // have to be public. + public: + pthread_mutex_t mutex_; // The underlying pthread mutex. + // has_owner_ indicates whether the owner_ field below contains a valid thread + // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All + // accesses to the owner_ field should be protected by a check of this field. + // An alternative might be to memset() owner_ to all zeros, but there's no + // guarantee that a zero'd pthread_t is necessarily invalid or even different + // from pthread_self(). + bool has_owner_; + pthread_t owner_; // The thread holding the mutex. +}; + +// Forward-declares a static mutex. +# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::MutexBase mutex + +// Defines and statically (i.e. at link time) initializes a static mutex. +// The initialization list here does not explicitly initialize each field, +// instead relying on default initialization for the unspecified fields. In +// particular, the owner_ field (a pthread_t) is not explicitly initialized. +// This allows initialization to work whether pthread_t is a scalar or struct. +// The flag -Wmissing-field-initializers must not be specified for this to work. +# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ + ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } + +// The Mutex class can only be used for mutexes created at runtime. It +// shares its API with MutexBase otherwise. +class Mutex : public MutexBase { + public: + Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + has_owner_ = false; + } + ~Mutex() { + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); +}; + +// We cannot name this class MutexLock as the ctor declaration would +// conflict with a macro named MutexLock, which is defined on some +// platforms. Hence the typedef trick below. +class GTestMutexLock { + public: + explicit GTestMutexLock(MutexBase* mutex) + : mutex_(mutex) { mutex_->Lock(); } + + ~GTestMutexLock() { mutex_->Unlock(); } + + private: + MutexBase* const mutex_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); +}; + +typedef GTestMutexLock MutexLock; + +// Helpers for ThreadLocal. + +// pthread_key_create() requires DeleteThreadLocalValue() to have +// C-linkage. Therefore it cannot be templatized to access +// ThreadLocal. Hence the need for class +// ThreadLocalValueHolderBase. +class ThreadLocalValueHolderBase { + public: + virtual ~ThreadLocalValueHolderBase() {} +}; + +// Called by pthread to delete thread-local data stored by +// pthread_setspecific(). +extern "C" inline void DeleteThreadLocalValue(void* value_holder) { + delete static_cast(value_holder); +} + +// Implements thread-local storage on pthreads-based systems. +// +// // Thread 1 +// ThreadLocal tl(100); // 100 is the default value for each thread. +// +// // Thread 2 +// tl.set(150); // Changes the value for thread 2 only. +// EXPECT_EQ(150, tl.get()); +// +// // Thread 1 +// EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. +// tl.set(200); +// EXPECT_EQ(200, tl.get()); +// +// The template type argument T must have a public copy constructor. +// In addition, the default ThreadLocal constructor requires T to have +// a public default constructor. +// +// An object managed for a thread by a ThreadLocal instance is deleted +// when the thread exits. Or, if the ThreadLocal instance dies in +// that thread, when the ThreadLocal dies. It's the user's +// responsibility to ensure that all other threads using a ThreadLocal +// have exited when it dies, or the per-thread objects for those +// threads will not be deleted. +// +// Google Test only uses global ThreadLocal objects. That means they +// will die after main() has returned. Therefore, no per-thread +// object managed by Google Test will be leaked as long as all threads +// using Google Test have exited when main() returns. +template +class ThreadLocal { + public: + ThreadLocal() : key_(CreateKey()), + default_() {} + explicit ThreadLocal(const T& value) : key_(CreateKey()), + default_(value) {} + + ~ThreadLocal() { + // Destroys the managed object for the current thread, if any. + DeleteThreadLocalValue(pthread_getspecific(key_)); + + // Releases resources associated with the key. This will *not* + // delete managed objects for other threads. + GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); + } + + T* pointer() { return GetOrCreateValue(); } + const T* pointer() const { return GetOrCreateValue(); } + const T& get() const { return *pointer(); } + void set(const T& value) { *pointer() = value; } + + private: + // Holds a value of type T. + class ValueHolder : public ThreadLocalValueHolderBase { + public: + explicit ValueHolder(const T& value) : value_(value) {} + + T* pointer() { return &value_; } + + private: + T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); + }; + + static pthread_key_t CreateKey() { + pthread_key_t key; + // When a thread exits, DeleteThreadLocalValue() will be called on + // the object managed for that thread. + GTEST_CHECK_POSIX_SUCCESS_( + pthread_key_create(&key, &DeleteThreadLocalValue)); + return key; + } + + T* GetOrCreateValue() const { + ThreadLocalValueHolderBase* const holder = + static_cast(pthread_getspecific(key_)); + if (holder != NULL) { + return CheckedDowncastToActualType(holder)->pointer(); + } + + ValueHolder* const new_holder = new ValueHolder(default_); + ThreadLocalValueHolderBase* const holder_base = new_holder; + GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); + return new_holder->pointer(); + } + + // A key pthreads uses for looking up per-thread values. + const pthread_key_t key_; + const T default_; // The default value for each thread. + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); +}; + +# define GTEST_IS_THREADSAFE 1 + +#else // GTEST_HAS_PTHREAD + +// A dummy implementation of synchronization primitives (mutex, lock, +// and thread-local variable). Necessary for compiling Google Test where +// mutex is not supported - using Google Test in multiple threads is not +// supported on such platforms. + +class Mutex { + public: + Mutex() {} + void Lock() {} + void Unlock() {} + void AssertHeld() const {} +}; + +# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::Mutex mutex + +# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex + +class GTestMutexLock { + public: + explicit GTestMutexLock(Mutex*) {} // NOLINT +}; + +typedef GTestMutexLock MutexLock; + +template +class ThreadLocal { + public: + ThreadLocal() : value_() {} + explicit ThreadLocal(const T& value) : value_(value) {} + T* pointer() { return &value_; } + const T* pointer() const { return &value_; } + const T& get() const { return value_; } + void set(const T& value) { value_ = value; } + private: + T value_; +}; + +// The above synchronization primitives have dummy implementations. +// Therefore Google Test is not thread-safe. +# define GTEST_IS_THREADSAFE 0 + +#endif // GTEST_HAS_PTHREAD + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +GTEST_API_ size_t GetThreadCount(); + +// Passing non-POD classes through ellipsis (...) crashes the ARM +// compiler and generates a warning in Sun Studio. The Nokia Symbian +// and the IBM XL C/C++ compiler try to instantiate a copy constructor +// for objects passed through ellipsis (...), failing for uncopyable +// objects. We define this to ensure that only POD is passed through +// ellipsis on these systems. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +# define GTEST_ELLIPSIS_NEEDS_POD_ 1 +#else +# define GTEST_CAN_COMPARE_NULL 1 +#endif + +// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between +// const T& and const T* in a function template. These compilers +// _can_ decide between class template specializations for T and T*, +// so a tr1::type_traits-like is_pointer works. +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) +# define GTEST_NEEDS_IS_POINTER_ 1 +#endif + +template +struct bool_constant { + typedef bool_constant type; + static const bool value = bool_value; +}; +template const bool bool_constant::value; + +typedef bool_constant false_type; +typedef bool_constant true_type; + +template +struct is_pointer : public false_type {}; + +template +struct is_pointer : public true_type {}; + +template +struct IteratorTraits { + typedef typename Iterator::value_type value_type; +}; + +template +struct IteratorTraits { + typedef T value_type; +}; + +template +struct IteratorTraits { + typedef T value_type; +}; + +#if GTEST_OS_WINDOWS +# define GTEST_PATH_SEP_ "\\" +# define GTEST_HAS_ALT_PATH_SEP_ 1 +// The biggest signed integer type the compiler supports. +typedef __int64 BiggestInt; +#else +# define GTEST_PATH_SEP_ "/" +# define GTEST_HAS_ALT_PATH_SEP_ 0 +typedef long long BiggestInt; // NOLINT +#endif // GTEST_OS_WINDOWS + +// Utilities for char. + +// isspace(int ch) and friends accept an unsigned char or EOF. char +// may be signed, depending on the compiler (or compiler flags). +// Therefore we need to cast a char to unsigned char before calling +// isspace(), etc. + +inline bool IsAlpha(char ch) { + return isalpha(static_cast(ch)) != 0; +} +inline bool IsAlNum(char ch) { + return isalnum(static_cast(ch)) != 0; +} +inline bool IsDigit(char ch) { + return isdigit(static_cast(ch)) != 0; +} +inline bool IsLower(char ch) { + return islower(static_cast(ch)) != 0; +} +inline bool IsSpace(char ch) { + return isspace(static_cast(ch)) != 0; +} +inline bool IsUpper(char ch) { + return isupper(static_cast(ch)) != 0; +} +inline bool IsXDigit(char ch) { + return isxdigit(static_cast(ch)) != 0; +} +inline bool IsXDigit(wchar_t ch) { + const unsigned char low_byte = static_cast(ch); + return ch == low_byte && isxdigit(low_byte) != 0; +} + +inline char ToLower(char ch) { + return static_cast(tolower(static_cast(ch))); +} +inline char ToUpper(char ch) { + return static_cast(toupper(static_cast(ch))); +} + +// The testing::internal::posix namespace holds wrappers for common +// POSIX functions. These wrappers hide the differences between +// Windows/MSVC and POSIX systems. Since some compilers define these +// standard functions as macros, the wrapper cannot have the same name +// as the wrapped function. + +namespace posix { + +// Functions with a different name on Windows. + +#if GTEST_OS_WINDOWS + +typedef struct _stat StatStruct; + +# ifdef __BORLANDC__ +inline int IsATTY(int fd) { return isatty(fd); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +# else // !__BORLANDC__ +# if GTEST_OS_WINDOWS_MOBILE +inline int IsATTY(int /* fd */) { return 0; } +# else +inline int IsATTY(int fd) { return _isatty(fd); } +# endif // GTEST_OS_WINDOWS_MOBILE +inline int StrCaseCmp(const char* s1, const char* s2) { + return _stricmp(s1, s2); +} +inline char* StrDup(const char* src) { return _strdup(src); } +# endif // __BORLANDC__ + +# if GTEST_OS_WINDOWS_MOBILE +inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } +// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this +// time and thus not defined there. +# else +inline int FileNo(FILE* file) { return _fileno(file); } +inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } +inline int RmDir(const char* dir) { return _rmdir(dir); } +inline bool IsDir(const StatStruct& st) { + return (_S_IFDIR & st.st_mode) != 0; +} +# endif // GTEST_OS_WINDOWS_MOBILE + +#else + +typedef struct stat StatStruct; + +inline int FileNo(FILE* file) { return fileno(file); } +inline int IsATTY(int fd) { return isatty(fd); } +inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } +inline int StrCaseCmp(const char* s1, const char* s2) { + return strcasecmp(s1, s2); +} +inline char* StrDup(const char* src) { return strdup(src); } +inline int RmDir(const char* dir) { return rmdir(dir); } +inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } + +#endif // GTEST_OS_WINDOWS + +// Functions deprecated by MSVC 8.0. + +#ifdef _MSC_VER +// Temporarily disable warning 4996 (deprecated function). +# pragma warning(push) +# pragma warning(disable:4996) +#endif + +inline const char* StrNCpy(char* dest, const char* src, size_t n) { + return strncpy(dest, src, n); +} + +// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and +// StrError() aren't needed on Windows CE at this time and thus not +// defined there. + +#if !GTEST_OS_WINDOWS_MOBILE +inline int ChDir(const char* dir) { return chdir(dir); } +#endif +inline FILE* FOpen(const char* path, const char* mode) { + return fopen(path, mode); +} +#if !GTEST_OS_WINDOWS_MOBILE +inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { + return freopen(path, mode, stream); +} +inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } +#endif +inline int FClose(FILE* fp) { return fclose(fp); } +#if !GTEST_OS_WINDOWS_MOBILE +inline int Read(int fd, void* buf, unsigned int count) { + return static_cast(read(fd, buf, count)); +} +inline int Write(int fd, const void* buf, unsigned int count) { + return static_cast(write(fd, buf, count)); +} +inline int Close(int fd) { return close(fd); } +inline const char* StrError(int errnum) { return strerror(errnum); } +#endif +inline const char* GetEnv(const char* name) { +#if GTEST_OS_WINDOWS_MOBILE + // We are on Windows CE, which has no environment variables. + return NULL; +#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) + // Environment variables which we programmatically clear will be set to the + // empty string rather than unset (NULL). Handle that case. + const char* const env = getenv(name); + return (env != NULL && env[0] != '\0') ? env : NULL; +#else + return getenv(name); +#endif +} + +#ifdef _MSC_VER +# pragma warning(pop) // Restores the warning state. +#endif + +#if GTEST_OS_WINDOWS_MOBILE +// Windows CE has no C library. The abort() function is used in +// several places in Google Test. This implementation provides a reasonable +// imitation of standard behaviour. +void Abort(); +#else +inline void Abort() { abort(); } +#endif // GTEST_OS_WINDOWS_MOBILE + +} // namespace posix + +// MSVC "deprecates" snprintf and issues warnings wherever it is used. In +// order to avoid these warnings, we need to use _snprintf or _snprintf_s on +// MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate +// function in order to achieve that. We use macro definition here because +// snprintf is a variadic function. +#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE +// MSVC 2005 and above support variadic macros. +# define GTEST_SNPRINTF_(buffer, size, format, ...) \ + _snprintf_s(buffer, size, size, format, __VA_ARGS__) +#elif defined(_MSC_VER) +// Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't +// complain about _snprintf. +# define GTEST_SNPRINTF_ _snprintf +#else +# define GTEST_SNPRINTF_ snprintf +#endif + +// The maximum number a BiggestInt can represent. This definition +// works no matter BiggestInt is represented in one's complement or +// two's complement. +// +// We cannot rely on numeric_limits in STL, as __int64 and long long +// are not part of standard C++ and numeric_limits doesn't need to be +// defined for them. +const BiggestInt kMaxBiggestInt = + ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); + +// This template class serves as a compile-time function from size to +// type. It maps a size in bytes to a primitive type with that +// size. e.g. +// +// TypeWithSize<4>::UInt +// +// is typedef-ed to be unsigned int (unsigned integer made up of 4 +// bytes). +// +// Such functionality should belong to STL, but I cannot find it +// there. +// +// Google Test uses this class in the implementation of floating-point +// comparison. +// +// For now it only handles UInt (unsigned int) as that's all Google Test +// needs. Other types can be easily added in the future if need +// arises. +template +class TypeWithSize { + public: + // This prevents the user from using TypeWithSize with incorrect + // values of N. + typedef void UInt; +}; + +// The specialization for size 4. +template <> +class TypeWithSize<4> { + public: + // unsigned int has size 4 in both gcc and MSVC. + // + // As base/basictypes.h doesn't compile on Windows, we cannot use + // uint32, uint64, and etc here. + typedef int Int; + typedef unsigned int UInt; +}; + +// The specialization for size 8. +template <> +class TypeWithSize<8> { + public: +#if GTEST_OS_WINDOWS + typedef __int64 Int; + typedef unsigned __int64 UInt; +#else + typedef long long Int; // NOLINT + typedef unsigned long long UInt; // NOLINT +#endif // GTEST_OS_WINDOWS +}; + +// Integer types of known sizes. +typedef TypeWithSize<4>::Int Int32; +typedef TypeWithSize<4>::UInt UInt32; +typedef TypeWithSize<8>::Int Int64; +typedef TypeWithSize<8>::UInt UInt64; +typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. + +// Utilities for command line flags and environment variables. + +// Macro for referencing flags. +#define GTEST_FLAG(name) FLAGS_gtest_##name + +// Macros for declaring flags. +#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) +#define GTEST_DECLARE_int32_(name) \ + GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) +#define GTEST_DECLARE_string_(name) \ + GTEST_API_ extern ::std::string GTEST_FLAG(name) + +// Macros for defining flags. +#define GTEST_DEFINE_bool_(name, default_val, doc) \ + GTEST_API_ bool GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_int32_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_string_(name, default_val, doc) \ + GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) + +// Thread annotations +#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) +#define GTEST_LOCK_EXCLUDED_(locks) + +// Parses 'str' for a 32-bit signed integer. If successful, writes the result +// to *value and returns true; otherwise leaves *value unchanged and returns +// false. +// TODO(chandlerc): Find a better way to refactor flag and environment parsing +// out of both gtest-port.cc and gtest.cc to avoid exporting this utility +// function. +bool ParseInt32(const Message& src_text, const char* str, Int32* value); + +// Parses a bool/Int32/string from the environment variable +// corresponding to the given Google Test flag. +bool BoolFromGTestEnv(const char* flag, bool default_val); +GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); +const char* StringFromGTestEnv(const char* flag, const char* default_val); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ + +#if GTEST_OS_LINUX +# include +# include +# include +# include +#endif // GTEST_OS_LINUX + +#if GTEST_HAS_EXCEPTIONS +# include +#endif + +#include +#include +#include +#include +#include +#include + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the Message class. +// +// IMPORTANT NOTE: Due to limitation of the C++ language, we have to +// leave some internal implementation details in this header file. +// They are clearly marked by comments like this: +// +// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +// +// Such code is NOT meant to be used by a user directly, and is subject +// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user +// program! + +#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ + +#include + + +// Ensures that there is at least one operator<< in the global namespace. +// See Message& operator<<(...) below for why. +void operator<<(const testing::internal::Secret&, int); + +namespace testing { + +// The Message class works like an ostream repeater. +// +// Typical usage: +// +// 1. You stream a bunch of values to a Message object. +// It will remember the text in a stringstream. +// 2. Then you stream the Message object to an ostream. +// This causes the text in the Message to be streamed +// to the ostream. +// +// For example; +// +// testing::Message foo; +// foo << 1 << " != " << 2; +// std::cout << foo; +// +// will print "1 != 2". +// +// Message is not intended to be inherited from. In particular, its +// destructor is not virtual. +// +// Note that stringstream behaves differently in gcc and in MSVC. You +// can stream a NULL char pointer to it in the former, but not in the +// latter (it causes an access violation if you do). The Message +// class hides this difference by treating a NULL char pointer as +// "(null)". +class GTEST_API_ Message { + private: + // The type of basic IO manipulators (endl, ends, and flush) for + // narrow streams. + typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); + + public: + // Constructs an empty Message. + Message(); + + // Copy constructor. + Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT + *ss_ << msg.GetString(); + } + + // Constructs a Message from a C-string. + explicit Message(const char* str) : ss_(new ::std::stringstream) { + *ss_ << str; + } + +#if GTEST_OS_SYMBIAN + // Streams a value (either a pointer or not) to this object. + template + inline Message& operator <<(const T& value) { + StreamHelper(typename internal::is_pointer::type(), value); + return *this; + } +#else + // Streams a non-pointer value to this object. + template + inline Message& operator <<(const T& val) { + // Some libraries overload << for STL containers. These + // overloads are defined in the global namespace instead of ::std. + // + // C++'s symbol lookup rule (i.e. Koenig lookup) says that these + // overloads are visible in either the std namespace or the global + // namespace, but not other namespaces, including the testing + // namespace which Google Test's Message class is in. + // + // To allow STL containers (and other types that has a << operator + // defined in the global namespace) to be used in Google Test + // assertions, testing::Message must access the custom << operator + // from the global namespace. With this using declaration, + // overloads of << defined in the global namespace and those + // visible via Koenig lookup are both exposed in this function. + using ::operator <<; + *ss_ << val; + return *this; + } + + // Streams a pointer value to this object. + // + // This function is an overload of the previous one. When you + // stream a pointer to a Message, this definition will be used as it + // is more specialized. (The C++ Standard, section + // [temp.func.order].) If you stream a non-pointer, then the + // previous definition will be used. + // + // The reason for this overload is that streaming a NULL pointer to + // ostream is undefined behavior. Depending on the compiler, you + // may get "0", "(nil)", "(null)", or an access violation. To + // ensure consistent result across compilers, we always treat NULL + // as "(null)". + template + inline Message& operator <<(T* const& pointer) { // NOLINT + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + *ss_ << pointer; + } + return *this; + } +#endif // GTEST_OS_SYMBIAN + + // Since the basic IO manipulators are overloaded for both narrow + // and wide streams, we have to provide this specialized definition + // of operator <<, even though its body is the same as the + // templatized version above. Without this definition, streaming + // endl or other basic IO manipulators to Message will confuse the + // compiler. + Message& operator <<(BasicNarrowIoManip val) { + *ss_ << val; + return *this; + } + + // Instead of 1/0, we want to see true/false for bool values. + Message& operator <<(bool b) { + return *this << (b ? "true" : "false"); + } + + // These two overloads allow streaming a wide C string to a Message + // using the UTF-8 encoding. + Message& operator <<(const wchar_t* wide_c_str); + Message& operator <<(wchar_t* wide_c_str); + +#if GTEST_HAS_STD_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::std::wstring& wstr); +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING + // Converts the given wide string to a narrow string using the UTF-8 + // encoding, and streams the result to this Message object. + Message& operator <<(const ::wstring& wstr); +#endif // GTEST_HAS_GLOBAL_WSTRING + + // Gets the text streamed to this object so far as an std::string. + // Each '\0' character in the buffer is replaced with "\\0". + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + std::string GetString() const; + + private: + +#if GTEST_OS_SYMBIAN + // These are needed as the Nokia Symbian Compiler cannot decide between + // const T& and const T* in a function template. The Nokia compiler _can_ + // decide between class template specializations for T and T*, so a + // tr1::type_traits-like is_pointer works, and we can overload on that. + template + inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { + if (pointer == NULL) { + *ss_ << "(null)"; + } else { + *ss_ << pointer; + } + } + template + inline void StreamHelper(internal::false_type /*is_pointer*/, + const T& value) { + // See the comments in Message& operator <<(const T&) above for why + // we need this using statement. + using ::operator <<; + *ss_ << value; + } +#endif // GTEST_OS_SYMBIAN + + // We'll hold the text streamed to this object here. + const internal::scoped_ptr< ::std::stringstream> ss_; + + // We declare (but don't implement) this to prevent the compiler + // from implementing the assignment operator. + void operator=(const Message&); +}; + +// Streams a Message to an ostream. +inline std::ostream& operator <<(std::ostream& os, const Message& sb) { + return os << sb.GetString(); +} + +namespace internal { + +// Converts a streamable value to an std::string. A NULL pointer is +// converted to "(null)". When the input value is a ::string, +// ::std::string, ::wstring, or ::std::wstring object, each NUL +// character in it is replaced with "\\0". +template +std::string StreamableToString(const T& streamable) { + return (Message() << streamable).GetString(); +} + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file declares the String class and functions used internally by +// Google Test. They are subject to change without notice. They should not used +// by code external to Google Test. +// +// This header file is #included by . +// It should not be #included by other files. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ + +#ifdef __BORLANDC__ +// string.h is not guaranteed to provide strcpy on C++ Builder. +# include +#endif + +#include +#include + + +namespace testing { +namespace internal { + +// String - an abstract class holding static string utilities. +class GTEST_API_ String { + public: + // Static utility methods + + // Clones a 0-terminated C string, allocating memory using new. The + // caller is responsible for deleting the return value using + // delete[]. Returns the cloned string, or NULL if the input is + // NULL. + // + // This is different from strdup() in string.h, which allocates + // memory using malloc(). + static const char* CloneCString(const char* c_str); + +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be + // able to pass strings to Win32 APIs on CE we need to convert them + // to 'Unicode', UTF-16. + + // Creates a UTF-16 wide string from the given ANSI string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the wide string, or NULL if the + // input is NULL. + // + // The wide string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static LPCWSTR AnsiToUtf16(const char* c_str); + + // Creates an ANSI string from the given wide string, allocating + // memory using new. The caller is responsible for deleting the return + // value using delete[]. Returns the ANSI string, or NULL if the + // input is NULL. + // + // The returned string is created using the ANSI codepage (CP_ACP) to + // match the behaviour of the ANSI versions of Win32 calls and the + // C runtime. + static const char* Utf16ToAnsi(LPCWSTR utf16_str); +#endif + + // Compares two C strings. Returns true iff they have the same content. + // + // Unlike strcmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CStringEquals(const char* lhs, const char* rhs); + + // Converts a wide C string to a String using the UTF-8 encoding. + // NULL will be converted to "(null)". If an error occurred during + // the conversion, "(failed to convert from wide string)" is + // returned. + static std::string ShowWideCString(const wchar_t* wide_c_str); + + // Compares two wide C strings. Returns true iff they have the same + // content. + // + // Unlike wcscmp(), this function can handle NULL argument(s). A + // NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); + + // Compares two C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike strcasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL C string, + // including the empty string. + static bool CaseInsensitiveCStringEquals(const char* lhs, + const char* rhs); + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. + static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs); + + // Returns true iff the given string ends with the given suffix, ignoring + // case. Any string is considered to end with an empty suffix. + static bool EndsWithCaseInsensitive( + const std::string& str, const std::string& suffix); + + // Formats an int value as "%02d". + static std::string FormatIntWidth2(int value); // "%02d" for width == 2 + + // Formats an int value as "%X". + static std::string FormatHexInt(int value); + + // Formats a byte as "%02X". + static std::string FormatByte(unsigned char value); + + private: + String(); // Not meant to be instantiated. +}; // class String + +// Gets the content of the stringstream's buffer as an std::string. Each '\0' +// character in the buffer is replaced with "\\0". +GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: keith.ray@gmail.com (Keith Ray) +// +// Google Test filepath utilities +// +// This header file declares classes and functions used internally by +// Google Test. They are subject to change without notice. +// +// This file is #included in . +// Do not include this header file separately! + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ + + +namespace testing { +namespace internal { + +// FilePath - a class for file and directory pathname manipulation which +// handles platform-specific conventions (like the pathname separator). +// Used for helper functions for naming files in a directory for xml output. +// Except for Set methods, all methods are const or static, which provides an +// "immutable value object" -- useful for peace of mind. +// A FilePath with a value ending in a path separator ("like/this/") represents +// a directory, otherwise it is assumed to represent a file. In either case, +// it may or may not represent an actual file or directory in the file system. +// Names are NOT checked for syntax correctness -- no checking for illegal +// characters, malformed paths, etc. + +class GTEST_API_ FilePath { + public: + FilePath() : pathname_("") { } + FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } + + explicit FilePath(const std::string& pathname) : pathname_(pathname) { + Normalize(); + } + + FilePath& operator=(const FilePath& rhs) { + Set(rhs); + return *this; + } + + void Set(const FilePath& rhs) { + pathname_ = rhs.pathname_; + } + + const std::string& string() const { return pathname_; } + const char* c_str() const { return pathname_.c_str(); } + + // Returns the current working directory, or "" if unsuccessful. + static FilePath GetCurrentDir(); + + // Given directory = "dir", base_name = "test", number = 0, + // extension = "xml", returns "dir/test.xml". If number is greater + // than zero (e.g., 12), returns "dir/test_12.xml". + // On Windows platform, uses \ as the separator rather than /. + static FilePath MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension); + + // Given directory = "dir", relative_path = "test.xml", + // returns "dir/test.xml". + // On Windows, uses \ as the separator rather than /. + static FilePath ConcatPaths(const FilePath& directory, + const FilePath& relative_path); + + // Returns a pathname for a file that does not currently exist. The pathname + // will be directory/base_name.extension or + // directory/base_name_.extension if directory/base_name.extension + // already exists. The number will be incremented until a pathname is found + // that does not already exist. + // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. + // There could be a race condition if two or more processes are calling this + // function at the same time -- they could both pick the same filename. + static FilePath GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension); + + // Returns true iff the path is "". + bool IsEmpty() const { return pathname_.empty(); } + + // If input name has a trailing separator character, removes it and returns + // the name, otherwise return the name string unmodified. + // On Windows platform, uses \ as the separator, other platforms use /. + FilePath RemoveTrailingPathSeparator() const; + + // Returns a copy of the FilePath with the directory part removed. + // Example: FilePath("path/to/file").RemoveDirectoryName() returns + // FilePath("file"). If there is no directory part ("just_a_file"), it returns + // the FilePath unmodified. If there is no file part ("just_a_dir/") it + // returns an empty FilePath (""). + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveDirectoryName() const; + + // RemoveFileName returns the directory path with the filename removed. + // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". + // If the FilePath is "a_file" or "/a_file", RemoveFileName returns + // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does + // not have a file, like "just/a/dir/", it returns the FilePath unmodified. + // On Windows platform, '\' is the path separator, otherwise it is '/'. + FilePath RemoveFileName() const; + + // Returns a copy of the FilePath with the case-insensitive extension removed. + // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns + // FilePath("dir/file"). If a case-insensitive extension is not + // found, returns a copy of the original FilePath. + FilePath RemoveExtension(const char* extension) const; + + // Creates directories so that path exists. Returns true if successful or if + // the directories already exist; returns false if unable to create + // directories for any reason. Will also return false if the FilePath does + // not represent a directory (that is, it doesn't end with a path separator). + bool CreateDirectoriesRecursively() const; + + // Create the directory so that path exists. Returns true if successful or + // if the directory already exists; returns false if unable to create the + // directory for any reason, including if the parent directory does not + // exist. Not named "CreateDirectory" because that's a macro on Windows. + bool CreateFolder() const; + + // Returns true if FilePath describes something in the file-system, + // either a file, directory, or whatever, and that something exists. + bool FileOrDirectoryExists() const; + + // Returns true if pathname describes a directory in the file-system + // that exists. + bool DirectoryExists() const; + + // Returns true if FilePath ends with a path separator, which indicates that + // it is intended to represent a directory. Returns false otherwise. + // This does NOT check that a directory (or file) actually exists. + bool IsDirectory() const; + + // Returns true if pathname describes a root directory. (Windows has one + // root directory per disk drive.) + bool IsRootDirectory() const; + + // Returns true if pathname describes an absolute path. + bool IsAbsolutePath() const; + + private: + // Replaces multiple consecutive separators with a single separator. + // For example, "bar///foo" becomes "bar/foo". Does not eliminate other + // redundancies that might be in a pathname involving "." or "..". + // + // A pathname with multiple consecutive separators may occur either through + // user error or as a result of some scripts or APIs that generate a pathname + // with a trailing separator. On other platforms the same API or script + // may NOT generate a pathname with a trailing "/". Then elsewhere that + // pathname may have another "/" and pathname components added to it, + // without checking for the separator already being there. + // The script language and operating system may allow paths like "foo//bar" + // but some of the functions in FilePath will not handle that correctly. In + // particular, RemoveTrailingPathSeparator() only removes one separator, and + // it is called in CreateDirectoriesRecursively() assuming that it will change + // a pathname from directory syntax (trailing separator) to filename syntax. + // + // On Windows this method also replaces the alternate path separator '/' with + // the primary path separator '\\', so that for example "bar\\/\\foo" becomes + // "bar\\foo". + + void Normalize(); + + // Returns a pointer to the last occurrence of a valid path separator in + // the FilePath. On Windows, for example, both '/' and '\' are valid path + // separators. Returns NULL if no path separator was found. + const char* FindLastPathSeparator() const; + + std::string pathname_; +}; // class FilePath + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +// This file was GENERATED by command: +// pump.py gtest-type-util.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Type utilities needed for implementing typed and type-parameterized +// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently we support at most 50 types in a list, and at most 50 +// type-parameterized tests in one type-parameterized test case. +// Please contact googletestframework@googlegroups.com if you need +// more. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + + +// #ifdef __GNUC__ is too general here. It is possible to use gcc without using +// libstdc++ (which is where cxxabi.h comes from). +# if GTEST_HAS_CXXABI_H_ +# include +# elif defined(__HP_aCC) +# include +# endif // GTEST_HASH_CXXABI_H_ + +namespace testing { +namespace internal { + +// GetTypeName() returns a human-readable name of type T. +// NB: This function is also used in Google Mock, so don't move it inside of +// the typed-test-only section below. +template +std::string GetTypeName() { +# if GTEST_HAS_RTTI + + const char* const name = typeid(T).name(); +# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) + int status = 0; + // gcc's implementation of typeid(T).name() mangles the type name, + // so we have to demangle it. +# if GTEST_HAS_CXXABI_H_ + using abi::__cxa_demangle; +# endif // GTEST_HAS_CXXABI_H_ + char* const readable_name = __cxa_demangle(name, 0, 0, &status); + const std::string name_str(status == 0 ? readable_name : name); + free(readable_name); + return name_str; +# else + return name; +# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC + +# else + + return ""; + +# endif // GTEST_HAS_RTTI +} + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// AssertyTypeEq::type is defined iff T1 and T2 are the same +// type. This can be used as a compile-time assertion to ensure that +// two types are equal. + +template +struct AssertTypeEq; + +template +struct AssertTypeEq { + typedef bool type; +}; + +// A unique type used as the default value for the arguments of class +// template Types. This allows us to simulate variadic templates +// (e.g. Types, Type, and etc), which C++ doesn't +// support directly. +struct None {}; + +// The following family of struct and struct templates are used to +// represent type lists. In particular, TypesN +// represents a type list with N types (T1, T2, ..., and TN) in it. +// Except for Types0, every struct in the family has two member types: +// Head for the first type in the list, and Tail for the rest of the +// list. + +// The empty type list. +struct Types0 {}; + +// Type lists of length 1, 2, 3, and so on. + +template +struct Types1 { + typedef T1 Head; + typedef Types0 Tail; +}; +template +struct Types2 { + typedef T1 Head; + typedef Types1 Tail; +}; + +template +struct Types3 { + typedef T1 Head; + typedef Types2 Tail; +}; + +template +struct Types4 { + typedef T1 Head; + typedef Types3 Tail; +}; + +template +struct Types5 { + typedef T1 Head; + typedef Types4 Tail; +}; + +template +struct Types6 { + typedef T1 Head; + typedef Types5 Tail; +}; + +template +struct Types7 { + typedef T1 Head; + typedef Types6 Tail; +}; + +template +struct Types8 { + typedef T1 Head; + typedef Types7 Tail; +}; + +template +struct Types9 { + typedef T1 Head; + typedef Types8 Tail; +}; + +template +struct Types10 { + typedef T1 Head; + typedef Types9 Tail; +}; + +template +struct Types11 { + typedef T1 Head; + typedef Types10 Tail; +}; + +template +struct Types12 { + typedef T1 Head; + typedef Types11 Tail; +}; + +template +struct Types13 { + typedef T1 Head; + typedef Types12 Tail; +}; + +template +struct Types14 { + typedef T1 Head; + typedef Types13 Tail; +}; + +template +struct Types15 { + typedef T1 Head; + typedef Types14 Tail; +}; + +template +struct Types16 { + typedef T1 Head; + typedef Types15 Tail; +}; + +template +struct Types17 { + typedef T1 Head; + typedef Types16 Tail; +}; + +template +struct Types18 { + typedef T1 Head; + typedef Types17 Tail; +}; + +template +struct Types19 { + typedef T1 Head; + typedef Types18 Tail; +}; + +template +struct Types20 { + typedef T1 Head; + typedef Types19 Tail; +}; + +template +struct Types21 { + typedef T1 Head; + typedef Types20 Tail; +}; + +template +struct Types22 { + typedef T1 Head; + typedef Types21 Tail; +}; + +template +struct Types23 { + typedef T1 Head; + typedef Types22 Tail; +}; + +template +struct Types24 { + typedef T1 Head; + typedef Types23 Tail; +}; + +template +struct Types25 { + typedef T1 Head; + typedef Types24 Tail; +}; + +template +struct Types26 { + typedef T1 Head; + typedef Types25 Tail; +}; + +template +struct Types27 { + typedef T1 Head; + typedef Types26 Tail; +}; + +template +struct Types28 { + typedef T1 Head; + typedef Types27 Tail; +}; + +template +struct Types29 { + typedef T1 Head; + typedef Types28 Tail; +}; + +template +struct Types30 { + typedef T1 Head; + typedef Types29 Tail; +}; + +template +struct Types31 { + typedef T1 Head; + typedef Types30 Tail; +}; + +template +struct Types32 { + typedef T1 Head; + typedef Types31 Tail; +}; + +template +struct Types33 { + typedef T1 Head; + typedef Types32 Tail; +}; + +template +struct Types34 { + typedef T1 Head; + typedef Types33 Tail; +}; + +template +struct Types35 { + typedef T1 Head; + typedef Types34 Tail; +}; + +template +struct Types36 { + typedef T1 Head; + typedef Types35 Tail; +}; + +template +struct Types37 { + typedef T1 Head; + typedef Types36 Tail; +}; + +template +struct Types38 { + typedef T1 Head; + typedef Types37 Tail; +}; + +template +struct Types39 { + typedef T1 Head; + typedef Types38 Tail; +}; + +template +struct Types40 { + typedef T1 Head; + typedef Types39 Tail; +}; + +template +struct Types41 { + typedef T1 Head; + typedef Types40 Tail; +}; + +template +struct Types42 { + typedef T1 Head; + typedef Types41 Tail; +}; + +template +struct Types43 { + typedef T1 Head; + typedef Types42 Tail; +}; + +template +struct Types44 { + typedef T1 Head; + typedef Types43 Tail; +}; + +template +struct Types45 { + typedef T1 Head; + typedef Types44 Tail; +}; + +template +struct Types46 { + typedef T1 Head; + typedef Types45 Tail; +}; + +template +struct Types47 { + typedef T1 Head; + typedef Types46 Tail; +}; + +template +struct Types48 { + typedef T1 Head; + typedef Types47 Tail; +}; + +template +struct Types49 { + typedef T1 Head; + typedef Types48 Tail; +}; + +template +struct Types50 { + typedef T1 Head; + typedef Types49 Tail; +}; + + +} // namespace internal + +// We don't want to require the users to write TypesN<...> directly, +// as that would require them to count the length. Types<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Types +// will appear as Types in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Types, and Google Test will translate +// that to TypesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Types template. +template +struct Types { + typedef internal::Types50 type; +}; + +template <> +struct Types { + typedef internal::Types0 type; +}; +template +struct Types { + typedef internal::Types1 type; +}; +template +struct Types { + typedef internal::Types2 type; +}; +template +struct Types { + typedef internal::Types3 type; +}; +template +struct Types { + typedef internal::Types4 type; +}; +template +struct Types { + typedef internal::Types5 type; +}; +template +struct Types { + typedef internal::Types6 type; +}; +template +struct Types { + typedef internal::Types7 type; +}; +template +struct Types { + typedef internal::Types8 type; +}; +template +struct Types { + typedef internal::Types9 type; +}; +template +struct Types { + typedef internal::Types10 type; +}; +template +struct Types { + typedef internal::Types11 type; +}; +template +struct Types { + typedef internal::Types12 type; +}; +template +struct Types { + typedef internal::Types13 type; +}; +template +struct Types { + typedef internal::Types14 type; +}; +template +struct Types { + typedef internal::Types15 type; +}; +template +struct Types { + typedef internal::Types16 type; +}; +template +struct Types { + typedef internal::Types17 type; +}; +template +struct Types { + typedef internal::Types18 type; +}; +template +struct Types { + typedef internal::Types19 type; +}; +template +struct Types { + typedef internal::Types20 type; +}; +template +struct Types { + typedef internal::Types21 type; +}; +template +struct Types { + typedef internal::Types22 type; +}; +template +struct Types { + typedef internal::Types23 type; +}; +template +struct Types { + typedef internal::Types24 type; +}; +template +struct Types { + typedef internal::Types25 type; +}; +template +struct Types { + typedef internal::Types26 type; +}; +template +struct Types { + typedef internal::Types27 type; +}; +template +struct Types { + typedef internal::Types28 type; +}; +template +struct Types { + typedef internal::Types29 type; +}; +template +struct Types { + typedef internal::Types30 type; +}; +template +struct Types { + typedef internal::Types31 type; +}; +template +struct Types { + typedef internal::Types32 type; +}; +template +struct Types { + typedef internal::Types33 type; +}; +template +struct Types { + typedef internal::Types34 type; +}; +template +struct Types { + typedef internal::Types35 type; +}; +template +struct Types { + typedef internal::Types36 type; +}; +template +struct Types { + typedef internal::Types37 type; +}; +template +struct Types { + typedef internal::Types38 type; +}; +template +struct Types { + typedef internal::Types39 type; +}; +template +struct Types { + typedef internal::Types40 type; +}; +template +struct Types { + typedef internal::Types41 type; +}; +template +struct Types { + typedef internal::Types42 type; +}; +template +struct Types { + typedef internal::Types43 type; +}; +template +struct Types { + typedef internal::Types44 type; +}; +template +struct Types { + typedef internal::Types45 type; +}; +template +struct Types { + typedef internal::Types46 type; +}; +template +struct Types { + typedef internal::Types47 type; +}; +template +struct Types { + typedef internal::Types48 type; +}; +template +struct Types { + typedef internal::Types49 type; +}; + +namespace internal { + +# define GTEST_TEMPLATE_ template class + +// The template "selector" struct TemplateSel is used to +// represent Tmpl, which must be a class template with one type +// parameter, as a type. TemplateSel::Bind::type is defined +// as the type Tmpl. This allows us to actually instantiate the +// template "selected" by TemplateSel. +// +// This trick is necessary for simulating typedef for class templates, +// which C++ doesn't support directly. +template +struct TemplateSel { + template + struct Bind { + typedef Tmpl type; + }; +}; + +# define GTEST_BIND_(TmplSel, T) \ + TmplSel::template Bind::type + +// A unique struct template used as the default value for the +// arguments of class template Templates. This allows us to simulate +// variadic templates (e.g. Templates, Templates, +// and etc), which C++ doesn't support directly. +template +struct NoneT {}; + +// The following family of struct and struct templates are used to +// represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except +// for Templates0, every struct in the family has two member types: +// Head for the selector of the first template in the list, and Tail +// for the rest of the list. + +// The empty template list. +struct Templates0 {}; + +// Template lists of length 1, 2, 3, and so on. + +template +struct Templates1 { + typedef TemplateSel Head; + typedef Templates0 Tail; +}; +template +struct Templates2 { + typedef TemplateSel Head; + typedef Templates1 Tail; +}; + +template +struct Templates3 { + typedef TemplateSel Head; + typedef Templates2 Tail; +}; + +template +struct Templates4 { + typedef TemplateSel Head; + typedef Templates3 Tail; +}; + +template +struct Templates5 { + typedef TemplateSel Head; + typedef Templates4 Tail; +}; + +template +struct Templates6 { + typedef TemplateSel Head; + typedef Templates5 Tail; +}; + +template +struct Templates7 { + typedef TemplateSel Head; + typedef Templates6 Tail; +}; + +template +struct Templates8 { + typedef TemplateSel Head; + typedef Templates7 Tail; +}; + +template +struct Templates9 { + typedef TemplateSel Head; + typedef Templates8 Tail; +}; + +template +struct Templates10 { + typedef TemplateSel Head; + typedef Templates9 Tail; +}; + +template +struct Templates11 { + typedef TemplateSel Head; + typedef Templates10 Tail; +}; + +template +struct Templates12 { + typedef TemplateSel Head; + typedef Templates11 Tail; +}; + +template +struct Templates13 { + typedef TemplateSel Head; + typedef Templates12 Tail; +}; + +template +struct Templates14 { + typedef TemplateSel Head; + typedef Templates13 Tail; +}; + +template +struct Templates15 { + typedef TemplateSel Head; + typedef Templates14 Tail; +}; + +template +struct Templates16 { + typedef TemplateSel Head; + typedef Templates15 Tail; +}; + +template +struct Templates17 { + typedef TemplateSel Head; + typedef Templates16 Tail; +}; + +template +struct Templates18 { + typedef TemplateSel Head; + typedef Templates17 Tail; +}; + +template +struct Templates19 { + typedef TemplateSel Head; + typedef Templates18 Tail; +}; + +template +struct Templates20 { + typedef TemplateSel Head; + typedef Templates19 Tail; +}; + +template +struct Templates21 { + typedef TemplateSel Head; + typedef Templates20 Tail; +}; + +template +struct Templates22 { + typedef TemplateSel Head; + typedef Templates21 Tail; +}; + +template +struct Templates23 { + typedef TemplateSel Head; + typedef Templates22 Tail; +}; + +template +struct Templates24 { + typedef TemplateSel Head; + typedef Templates23 Tail; +}; + +template +struct Templates25 { + typedef TemplateSel Head; + typedef Templates24 Tail; +}; + +template +struct Templates26 { + typedef TemplateSel Head; + typedef Templates25 Tail; +}; + +template +struct Templates27 { + typedef TemplateSel Head; + typedef Templates26 Tail; +}; + +template +struct Templates28 { + typedef TemplateSel Head; + typedef Templates27 Tail; +}; + +template +struct Templates29 { + typedef TemplateSel Head; + typedef Templates28 Tail; +}; + +template +struct Templates30 { + typedef TemplateSel Head; + typedef Templates29 Tail; +}; + +template +struct Templates31 { + typedef TemplateSel Head; + typedef Templates30 Tail; +}; + +template +struct Templates32 { + typedef TemplateSel Head; + typedef Templates31 Tail; +}; + +template +struct Templates33 { + typedef TemplateSel Head; + typedef Templates32 Tail; +}; + +template +struct Templates34 { + typedef TemplateSel Head; + typedef Templates33 Tail; +}; + +template +struct Templates35 { + typedef TemplateSel Head; + typedef Templates34 Tail; +}; + +template +struct Templates36 { + typedef TemplateSel Head; + typedef Templates35 Tail; +}; + +template +struct Templates37 { + typedef TemplateSel Head; + typedef Templates36 Tail; +}; + +template +struct Templates38 { + typedef TemplateSel Head; + typedef Templates37 Tail; +}; + +template +struct Templates39 { + typedef TemplateSel Head; + typedef Templates38 Tail; +}; + +template +struct Templates40 { + typedef TemplateSel Head; + typedef Templates39 Tail; +}; + +template +struct Templates41 { + typedef TemplateSel Head; + typedef Templates40 Tail; +}; + +template +struct Templates42 { + typedef TemplateSel Head; + typedef Templates41 Tail; +}; + +template +struct Templates43 { + typedef TemplateSel Head; + typedef Templates42 Tail; +}; + +template +struct Templates44 { + typedef TemplateSel Head; + typedef Templates43 Tail; +}; + +template +struct Templates45 { + typedef TemplateSel Head; + typedef Templates44 Tail; +}; + +template +struct Templates46 { + typedef TemplateSel Head; + typedef Templates45 Tail; +}; + +template +struct Templates47 { + typedef TemplateSel Head; + typedef Templates46 Tail; +}; + +template +struct Templates48 { + typedef TemplateSel Head; + typedef Templates47 Tail; +}; + +template +struct Templates49 { + typedef TemplateSel Head; + typedef Templates48 Tail; +}; + +template +struct Templates50 { + typedef TemplateSel Head; + typedef Templates49 Tail; +}; + + +// We don't want to require the users to write TemplatesN<...> directly, +// as that would require them to count the length. Templates<...> is much +// easier to write, but generates horrible messages when there is a +// compiler error, as gcc insists on printing out each template +// argument, even if it has the default value (this means Templates +// will appear as Templates in the compiler +// errors). +// +// Our solution is to combine the best part of the two approaches: a +// user would write Templates, and Google Test will translate +// that to TemplatesN internally to make error messages +// readable. The translation is done by the 'type' member of the +// Templates template. +template +struct Templates { + typedef Templates50 type; +}; + +template <> +struct Templates { + typedef Templates0 type; +}; +template +struct Templates { + typedef Templates1 type; +}; +template +struct Templates { + typedef Templates2 type; +}; +template +struct Templates { + typedef Templates3 type; +}; +template +struct Templates { + typedef Templates4 type; +}; +template +struct Templates { + typedef Templates5 type; +}; +template +struct Templates { + typedef Templates6 type; +}; +template +struct Templates { + typedef Templates7 type; +}; +template +struct Templates { + typedef Templates8 type; +}; +template +struct Templates { + typedef Templates9 type; +}; +template +struct Templates { + typedef Templates10 type; +}; +template +struct Templates { + typedef Templates11 type; +}; +template +struct Templates { + typedef Templates12 type; +}; +template +struct Templates { + typedef Templates13 type; +}; +template +struct Templates { + typedef Templates14 type; +}; +template +struct Templates { + typedef Templates15 type; +}; +template +struct Templates { + typedef Templates16 type; +}; +template +struct Templates { + typedef Templates17 type; +}; +template +struct Templates { + typedef Templates18 type; +}; +template +struct Templates { + typedef Templates19 type; +}; +template +struct Templates { + typedef Templates20 type; +}; +template +struct Templates { + typedef Templates21 type; +}; +template +struct Templates { + typedef Templates22 type; +}; +template +struct Templates { + typedef Templates23 type; +}; +template +struct Templates { + typedef Templates24 type; +}; +template +struct Templates { + typedef Templates25 type; +}; +template +struct Templates { + typedef Templates26 type; +}; +template +struct Templates { + typedef Templates27 type; +}; +template +struct Templates { + typedef Templates28 type; +}; +template +struct Templates { + typedef Templates29 type; +}; +template +struct Templates { + typedef Templates30 type; +}; +template +struct Templates { + typedef Templates31 type; +}; +template +struct Templates { + typedef Templates32 type; +}; +template +struct Templates { + typedef Templates33 type; +}; +template +struct Templates { + typedef Templates34 type; +}; +template +struct Templates { + typedef Templates35 type; +}; +template +struct Templates { + typedef Templates36 type; +}; +template +struct Templates { + typedef Templates37 type; +}; +template +struct Templates { + typedef Templates38 type; +}; +template +struct Templates { + typedef Templates39 type; +}; +template +struct Templates { + typedef Templates40 type; +}; +template +struct Templates { + typedef Templates41 type; +}; +template +struct Templates { + typedef Templates42 type; +}; +template +struct Templates { + typedef Templates43 type; +}; +template +struct Templates { + typedef Templates44 type; +}; +template +struct Templates { + typedef Templates45 type; +}; +template +struct Templates { + typedef Templates46 type; +}; +template +struct Templates { + typedef Templates47 type; +}; +template +struct Templates { + typedef Templates48 type; +}; +template +struct Templates { + typedef Templates49 type; +}; + +// The TypeList template makes it possible to use either a single type +// or a Types<...> list in TYPED_TEST_CASE() and +// INSTANTIATE_TYPED_TEST_CASE_P(). + +template +struct TypeList { + typedef Types1 type; +}; + +template +struct TypeList > { + typedef typename Types::type type; +}; + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + +// Due to C++ preprocessor weirdness, we need double indirection to +// concatenate two tokens when one of them is __LINE__. Writing +// +// foo ## __LINE__ +// +// will result in the token foo__LINE__, instead of foo followed by +// the current line number. For more details, see +// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 +#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) +#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar + +class ProtocolMessage; +namespace proto2 { class Message; } + +namespace testing { + +// Forward declarations. + +class AssertionResult; // Result of an assertion. +class Message; // Represents a failure message. +class Test; // Represents a test. +class TestInfo; // Information about a test. +class TestPartResult; // Result of a test part. +class UnitTest; // A collection of test cases. + +template +::std::string PrintToString(const T& value); + +namespace internal { + +struct TraceInfo; // Information about a trace point. +class ScopedTrace; // Implements scoped trace. +class TestInfoImpl; // Opaque implementation of TestInfo +class UnitTestImpl; // Opaque implementation of UnitTest + +// How many times InitGoogleTest() has been called. +GTEST_API_ extern int g_init_gtest_count; + +// The text used in failure messages to indicate the start of the +// stack trace. +GTEST_API_ extern const char kStackTraceMarker[]; + +// Two overloaded helpers for checking at compile time whether an +// expression is a null pointer literal (i.e. NULL or any 0-valued +// compile-time integral constant). Their return values have +// different sizes, so we can use sizeof() to test which version is +// picked by the compiler. These helpers have no implementations, as +// we only need their signatures. +// +// Given IsNullLiteralHelper(x), the compiler will pick the first +// version if x can be implicitly converted to Secret*, and pick the +// second version otherwise. Since Secret is a secret and incomplete +// type, the only expression a user can write that has type Secret* is +// a null pointer literal. Therefore, we know that x is a null +// pointer literal if and only if the first version is picked by the +// compiler. +char IsNullLiteralHelper(Secret* p); +char (&IsNullLiteralHelper(...))[2]; // NOLINT + +// A compile-time bool constant that is true if and only if x is a +// null pointer literal (i.e. NULL or any 0-valued compile-time +// integral constant). +#ifdef GTEST_ELLIPSIS_NEEDS_POD_ +// We lose support for NULL detection where the compiler doesn't like +// passing non-POD classes through ellipsis (...). +# define GTEST_IS_NULL_LITERAL_(x) false +#else +# define GTEST_IS_NULL_LITERAL_(x) \ + (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) +#endif // GTEST_ELLIPSIS_NEEDS_POD_ + +// Appends the user-supplied message to the Google-Test-generated message. +GTEST_API_ std::string AppendUserMessage( + const std::string& gtest_msg, const Message& user_msg); + +#if GTEST_HAS_EXCEPTIONS + +// This exception is thrown by (and only by) a failed Google Test +// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions +// are enabled). We derive it from std::runtime_error, which is for +// errors presumably detectable only at run time. Since +// std::runtime_error inherits from std::exception, many testing +// frameworks know how to extract and print the message inside it. +class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { + public: + explicit GoogleTestFailureException(const TestPartResult& failure); +}; + +#endif // GTEST_HAS_EXCEPTIONS + +// A helper class for creating scoped traces in user programs. +class GTEST_API_ ScopedTrace { + public: + // The c'tor pushes the given source file location and message onto + // a trace stack maintained by Google Test. + ScopedTrace(const char* file, int line, const Message& message); + + // The d'tor pops the info pushed by the c'tor. + // + // Note that the d'tor is not virtual in order to be efficient. + // Don't inherit from ScopedTrace! + ~ScopedTrace(); + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); +} GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its + // c'tor and d'tor. Therefore it doesn't + // need to be used otherwise. + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +GTEST_API_ AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const std::string& expected_value, + const std::string& actual_value, + bool ignoring_case); + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +GTEST_API_ std::string GetBoolAssertionFailureMessage( + const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value); + +// This template class represents an IEEE floating-point number +// (either single-precision or double-precision, depending on the +// template parameters). +// +// The purpose of this class is to do more sophisticated number +// comparison. (Due to round-off error, etc, it's very unlikely that +// two floating-points will be equal exactly. Hence a naive +// comparison by the == operation often doesn't work.) +// +// Format of IEEE floating-point: +// +// The most-significant bit being the leftmost, an IEEE +// floating-point looks like +// +// sign_bit exponent_bits fraction_bits +// +// Here, sign_bit is a single bit that designates the sign of the +// number. +// +// For float, there are 8 exponent bits and 23 fraction bits. +// +// For double, there are 11 exponent bits and 52 fraction bits. +// +// More details can be found at +// http://en.wikipedia.org/wiki/IEEE_floating-point_standard. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +template +class FloatingPoint { + public: + // Defines the unsigned integer type that has the same size as the + // floating point number. + typedef typename TypeWithSize::UInt Bits; + + // Constants. + + // # of bits in a number. + static const size_t kBitCount = 8*sizeof(RawType); + + // # of fraction bits in a number. + static const size_t kFractionBitCount = + std::numeric_limits::digits - 1; + + // # of exponent bits in a number. + static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; + + // The mask for the sign bit. + static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); + + // The mask for the fraction bits. + static const Bits kFractionBitMask = + ~static_cast(0) >> (kExponentBitCount + 1); + + // The mask for the exponent bits. + static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); + + // How many ULP's (Units in the Last Place) we want to tolerate when + // comparing two numbers. The larger the value, the more error we + // allow. A 0 value means that two numbers must be exactly the same + // to be considered equal. + // + // The maximum error of a single floating-point operation is 0.5 + // units in the last place. On Intel CPU's, all floating-point + // calculations are done with 80-bit precision, while double has 64 + // bits. Therefore, 4 should be enough for ordinary use. + // + // See the following article for more details on ULP: + // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ + static const size_t kMaxUlps = 4; + + // Constructs a FloatingPoint from a raw floating-point number. + // + // On an Intel CPU, passing a non-normalized NAN (Not a Number) + // around may change its bits, although the new value is guaranteed + // to be also a NAN. Therefore, don't expect this constructor to + // preserve the bits in x when x is a NAN. + explicit FloatingPoint(const RawType& x) { u_.value_ = x; } + + // Static methods + + // Reinterprets a bit pattern as a floating-point number. + // + // This function is needed to test the AlmostEquals() method. + static RawType ReinterpretBits(const Bits bits) { + FloatingPoint fp(0); + fp.u_.bits_ = bits; + return fp.u_.value_; + } + + // Returns the floating-point number that represent positive infinity. + static RawType Infinity() { + return ReinterpretBits(kExponentBitMask); + } + + // Returns the maximum representable finite floating-point number. + static RawType Max(); + + // Non-static methods + + // Returns the bits that represents this number. + const Bits &bits() const { return u_.bits_; } + + // Returns the exponent bits of this number. + Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } + + // Returns the fraction bits of this number. + Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } + + // Returns the sign bit of this number. + Bits sign_bit() const { return kSignBitMask & u_.bits_; } + + // Returns true iff this is NAN (not a number). + bool is_nan() const { + // It's a NAN if the exponent bits are all ones and the fraction + // bits are not entirely zeros. + return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); + } + + // Returns true iff this number is at most kMaxUlps ULP's away from + // rhs. In particular, this function: + // + // - returns false if either number is (or both are) NAN. + // - treats really large numbers as almost equal to infinity. + // - thinks +0.0 and -0.0 are 0 DLP's apart. + bool AlmostEquals(const FloatingPoint& rhs) const { + // The IEEE standard says that any comparison operation involving + // a NAN must return false. + if (is_nan() || rhs.is_nan()) return false; + + return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) + <= kMaxUlps; + } + + private: + // The data type used to store the actual floating-point number. + union FloatingPointUnion { + RawType value_; // The raw floating-point number. + Bits bits_; // The bits that represent the number. + }; + + // Converts an integer from the sign-and-magnitude representation to + // the biased representation. More precisely, let N be 2 to the + // power of (kBitCount - 1), an integer x is represented by the + // unsigned number x + N. + // + // For instance, + // + // -N + 1 (the most negative number representable using + // sign-and-magnitude) is represented by 1; + // 0 is represented by N; and + // N - 1 (the biggest number representable using + // sign-and-magnitude) is represented by 2N - 1. + // + // Read http://en.wikipedia.org/wiki/Signed_number_representations + // for more details on signed number representations. + static Bits SignAndMagnitudeToBiased(const Bits &sam) { + if (kSignBitMask & sam) { + // sam represents a negative number. + return ~sam + 1; + } else { + // sam represents a positive number. + return kSignBitMask | sam; + } + } + + // Given two numbers in the sign-and-magnitude representation, + // returns the distance between them as an unsigned number. + static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, + const Bits &sam2) { + const Bits biased1 = SignAndMagnitudeToBiased(sam1); + const Bits biased2 = SignAndMagnitudeToBiased(sam2); + return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); + } + + FloatingPointUnion u_; +}; + +// We cannot use std::numeric_limits::max() as it clashes with the max() +// macro defined by . +template <> +inline float FloatingPoint::Max() { return FLT_MAX; } +template <> +inline double FloatingPoint::Max() { return DBL_MAX; } + +// Typedefs the instances of the FloatingPoint template class that we +// care to use. +typedef FloatingPoint Float; +typedef FloatingPoint Double; + +// In order to catch the mistake of putting tests that use different +// test fixture classes in the same test case, we need to assign +// unique IDs to fixture classes and compare them. The TypeId type is +// used to hold such IDs. The user should treat TypeId as an opaque +// type: the only operation allowed on TypeId values is to compare +// them for equality using the == operator. +typedef const void* TypeId; + +template +class TypeIdHelper { + public: + // dummy_ must not have a const type. Otherwise an overly eager + // compiler (e.g. MSVC 7.1 & 8.0) may try to merge + // TypeIdHelper::dummy_ for different Ts as an "optimization". + static bool dummy_; +}; + +template +bool TypeIdHelper::dummy_ = false; + +// GetTypeId() returns the ID of type T. Different values will be +// returned for different types. Calling the function twice with the +// same type argument is guaranteed to return the same ID. +template +TypeId GetTypeId() { + // The compiler is required to allocate a different + // TypeIdHelper::dummy_ variable for each T used to instantiate + // the template. Therefore, the address of dummy_ is guaranteed to + // be unique. + return &(TypeIdHelper::dummy_); +} + +// Returns the type ID of ::testing::Test. Always call this instead +// of GetTypeId< ::testing::Test>() to get the type ID of +// ::testing::Test, as the latter may give the wrong result due to a +// suspected linker bug when compiling Google Test as a Mac OS X +// framework. +GTEST_API_ TypeId GetTestTypeId(); + +// Defines the abstract factory interface that creates instances +// of a Test object. +class TestFactoryBase { + public: + virtual ~TestFactoryBase() {} + + // Creates a test instance to run. The instance is both created and destroyed + // within TestInfoImpl::Run() + virtual Test* CreateTest() = 0; + + protected: + TestFactoryBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); +}; + +// This class provides implementation of TeastFactoryBase interface. +// It is used in TEST and TEST_F macros. +template +class TestFactoryImpl : public TestFactoryBase { + public: + virtual Test* CreateTest() { return new TestClass; } +}; + +#if GTEST_OS_WINDOWS + +// Predicate-formatters for implementing the HRESULT checking macros +// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} +// We pass a long instead of HRESULT to avoid causing an +// include dependency for the HRESULT type. +GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, + long hr); // NOLINT +GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, + long hr); // NOLINT + +#endif // GTEST_OS_WINDOWS + +// Types of SetUpTestCase() and TearDownTestCase() functions. +typedef void (*SetUpTestCaseFunc)(); +typedef void (*TearDownTestCaseFunc)(); + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// type_param the name of the test's type parameter, or NULL if +// this is not a typed or a type-parameterized test. +// value_param text representation of the test's value parameter, +// or NULL if this is not a type-parameterized test. +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +GTEST_API_ TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, + const char* name, + const char* type_param, + const char* value_param, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory); + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); + +#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// State of the definition of a type-parameterized test case. +class GTEST_API_ TypedTestCasePState { + public: + TypedTestCasePState() : registered_(false) {} + + // Adds the given test name to defined_test_names_ and return true + // if the test case hasn't been registered; otherwise aborts the + // program. + bool AddTestName(const char* file, int line, const char* case_name, + const char* test_name) { + if (registered_) { + fprintf(stderr, "%s Test %s must be defined before " + "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", + FormatFileLocation(file, line).c_str(), test_name, case_name); + fflush(stderr); + posix::Abort(); + } + defined_test_names_.insert(test_name); + return true; + } + + // Verifies that registered_tests match the test names in + // defined_test_names_; returns registered_tests if successful, or + // aborts the program otherwise. + const char* VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests); + + private: + bool registered_; + ::std::set defined_test_names_; +}; + +// Skips to the first non-space char after the first comma in 'str'; +// returns NULL if no comma is found in 'str'. +inline const char* SkipComma(const char* str) { + const char* comma = strchr(str, ','); + if (comma == NULL) { + return NULL; + } + while (IsSpace(*(++comma))) {} + return comma; +} + +// Returns the prefix of 'str' before the first comma in it; returns +// the entire string if it contains no comma. +inline std::string GetPrefixUntilComma(const char* str) { + const char* comma = strchr(str, ','); + return comma == NULL ? str : std::string(str, comma); +} + +// TypeParameterizedTest::Register() +// registers a list of type-parameterized tests with Google Test. The +// return value is insignificant - we just need to return something +// such that we can call this function in a namespace scope. +// +// Implementation note: The GTEST_TEMPLATE_ macro declares a template +// template parameter. It's defined in gtest-type-util.h. +template +class TypeParameterizedTest { + public: + // 'index' is the index of the test in the type list 'Types' + // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, + // Types). Valid values for 'index' are [0, N - 1] where N is the + // length of Types. + static bool Register(const char* prefix, const char* case_name, + const char* test_names, int index) { + typedef typename Types::Head Type; + typedef Fixture FixtureClass; + typedef typename GTEST_BIND_(TestSel, Type) TestClass; + + // First, registers the first type-parameterized test in the type + // list. + MakeAndRegisterTestInfo( + (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" + + StreamableToString(index)).c_str(), + GetPrefixUntilComma(test_names).c_str(), + GetTypeName().c_str(), + NULL, // No value parameter. + GetTypeId(), + TestClass::SetUpTestCase, + TestClass::TearDownTestCase, + new TestFactoryImpl); + + // Next, recurses (at compile time) with the tail of the type list. + return TypeParameterizedTest + ::Register(prefix, case_name, test_names, index + 1); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTest { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/, int /*index*/) { + return true; + } +}; + +// TypeParameterizedTestCase::Register() +// registers *all combinations* of 'Tests' and 'Types' with Google +// Test. The return value is insignificant - we just need to return +// something such that we can call this function in a namespace scope. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* prefix, const char* case_name, + const char* test_names) { + typedef typename Tests::Head Head; + + // First, register the first test in 'Test' for each type in 'Types'. + TypeParameterizedTest::Register( + prefix, case_name, test_names, 0); + + // Next, recurses (at compile time) with the tail of the test list. + return TypeParameterizedTestCase + ::Register(prefix, case_name, SkipComma(test_names)); + } +}; + +// The base case for the compile time recursion. +template +class TypeParameterizedTestCase { + public: + static bool Register(const char* /*prefix*/, const char* /*case_name*/, + const char* /*test_names*/) { + return true; + } +}; + +#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P + +// Returns the current OS stack trace as an std::string. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +GTEST_API_ std::string GetCurrentOsStackTraceExceptTop( + UnitTest* unit_test, int skip_count); + +// Helpers for suppressing warnings on unreachable code or constant +// condition. + +// Always returns true. +GTEST_API_ bool AlwaysTrue(); + +// Always returns false. +inline bool AlwaysFalse() { return !AlwaysTrue(); } + +// Helper for suppressing false warning from Clang on a const char* +// variable declared in a conditional expression always being NULL in +// the else branch. +struct GTEST_API_ ConstCharPtr { + ConstCharPtr(const char* str) : value(str) {} + operator bool() const { return true; } + const char* value; +}; + +// A simple Linear Congruential Generator for generating random +// numbers with a uniform distribution. Unlike rand() and srand(), it +// doesn't use global state (and therefore can't interfere with user +// code). Unlike rand_r(), it's portable. An LCG isn't very random, +// but it's good enough for our purposes. +class GTEST_API_ Random { + public: + static const UInt32 kMaxRange = 1u << 31; + + explicit Random(UInt32 seed) : state_(seed) {} + + void Reseed(UInt32 seed) { state_ = seed; } + + // Generates a random number from [0, range). Crashes if 'range' is + // 0 or greater than kMaxRange. + UInt32 Generate(UInt32 range); + + private: + UInt32 state_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); +}; + +// Defining a variable of type CompileAssertTypesEqual will cause a +// compiler error iff T1 and T2 are different types. +template +struct CompileAssertTypesEqual; + +template +struct CompileAssertTypesEqual { +}; + +// Removes the reference from a type if it is a reference type, +// otherwise leaves it unchanged. This is the same as +// tr1::remove_reference, which is not widely available yet. +template +struct RemoveReference { typedef T type; }; // NOLINT +template +struct RemoveReference { typedef T type; }; // NOLINT + +// A handy wrapper around RemoveReference that works when the argument +// T depends on template parameters. +#define GTEST_REMOVE_REFERENCE_(T) \ + typename ::testing::internal::RemoveReference::type + +// Removes const from a type if it is a const type, otherwise leaves +// it unchanged. This is the same as tr1::remove_const, which is not +// widely available yet. +template +struct RemoveConst { typedef T type; }; // NOLINT +template +struct RemoveConst { typedef T type; }; // NOLINT + +// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above +// definition to fail to remove the const in 'const int[3]' and 'const +// char[3][4]'. The following specialization works around the bug. +template +struct RemoveConst { + typedef typename RemoveConst::type type[N]; +}; + +#if defined(_MSC_VER) && _MSC_VER < 1400 +// This is the only specialization that allows VC++ 7.1 to remove const in +// 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC +// and thus needs to be conditionally compiled. +template +struct RemoveConst { + typedef typename RemoveConst::type type[N]; +}; +#endif + +// A handy wrapper around RemoveConst that works when the argument +// T depends on template parameters. +#define GTEST_REMOVE_CONST_(T) \ + typename ::testing::internal::RemoveConst::type + +// Turns const U&, U&, const U, and U all into U. +#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ + GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) + +// Adds reference to a type if it is not a reference type, +// otherwise leaves it unchanged. This is the same as +// tr1::add_reference, which is not widely available yet. +template +struct AddReference { typedef T& type; }; // NOLINT +template +struct AddReference { typedef T& type; }; // NOLINT + +// A handy wrapper around AddReference that works when the argument T +// depends on template parameters. +#define GTEST_ADD_REFERENCE_(T) \ + typename ::testing::internal::AddReference::type + +// Adds a reference to const on top of T as necessary. For example, +// it transforms +// +// char ==> const char& +// const char ==> const char& +// char& ==> const char& +// const char& ==> const char& +// +// The argument T must depend on some template parameters. +#define GTEST_REFERENCE_TO_CONST_(T) \ + GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) + +// ImplicitlyConvertible::value is a compile-time bool +// constant that's true iff type From can be implicitly converted to +// type To. +template +class ImplicitlyConvertible { + private: + // We need the following helper functions only for their types. + // They have no implementations. + + // MakeFrom() is an expression whose type is From. We cannot simply + // use From(), as the type From may not have a public default + // constructor. + static From MakeFrom(); + + // These two functions are overloaded. Given an expression + // Helper(x), the compiler will pick the first version if x can be + // implicitly converted to type To; otherwise it will pick the + // second version. + // + // The first version returns a value of size 1, and the second + // version returns a value of size 2. Therefore, by checking the + // size of Helper(x), which can be done at compile time, we can tell + // which version of Helper() is used, and hence whether x can be + // implicitly converted to type To. + static char Helper(To); + static char (&Helper(...))[2]; // NOLINT + + // We have to put the 'public' section after the 'private' section, + // or MSVC refuses to compile the code. + public: + // MSVC warns about implicitly converting from double to int for + // possible loss of data, so we need to temporarily disable the + // warning. +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4244) // Temporarily disables warning 4244. + + static const bool value = + sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; +# pragma warning(pop) // Restores the warning state. +#elif defined(__BORLANDC__) + // C++Builder cannot use member overload resolution during template + // instantiation. The simplest workaround is to use its C++0x type traits + // functions (C++Builder 2009 and above only). + static const bool value = __is_convertible(From, To); +#else + static const bool value = + sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; +#endif // _MSV_VER +}; +template +const bool ImplicitlyConvertible::value; + +// IsAProtocolMessage::value is a compile-time bool constant that's +// true iff T is type ProtocolMessage, proto2::Message, or a subclass +// of those. +template +struct IsAProtocolMessage + : public bool_constant< + ImplicitlyConvertible::value || + ImplicitlyConvertible::value> { +}; + +// When the compiler sees expression IsContainerTest(0), if C is an +// STL-style container class, the first overload of IsContainerTest +// will be viable (since both C::iterator* and C::const_iterator* are +// valid types and NULL can be implicitly converted to them). It will +// be picked over the second overload as 'int' is a perfect match for +// the type of argument 0. If C::iterator or C::const_iterator is not +// a valid type, the first overload is not viable, and the second +// overload will be picked. Therefore, we can determine whether C is +// a container class by checking the type of IsContainerTest(0). +// The value of the expression is insignificant. +// +// Note that we look for both C::iterator and C::const_iterator. The +// reason is that C++ injects the name of a class as a member of the +// class itself (e.g. you can refer to class iterator as either +// 'iterator' or 'iterator::iterator'). If we look for C::iterator +// only, for example, we would mistakenly think that a class named +// iterator is an STL container. +// +// Also note that the simpler approach of overloading +// IsContainerTest(typename C::const_iterator*) and +// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. +typedef int IsContainer; +template +IsContainer IsContainerTest(int /* dummy */, + typename C::iterator* /* it */ = NULL, + typename C::const_iterator* /* const_it */ = NULL) { + return 0; +} + +typedef char IsNotContainer; +template +IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } + +// EnableIf::type is void when 'Cond' is true, and +// undefined when 'Cond' is false. To use SFINAE to make a function +// overload only apply when a particular expression is true, add +// "typename EnableIf::type* = 0" as the last parameter. +template struct EnableIf; +template<> struct EnableIf { typedef void type; }; // NOLINT + +// Utilities for native arrays. + +// ArrayEq() compares two k-dimensional native arrays using the +// elements' operator==, where k can be any integer >= 0. When k is +// 0, ArrayEq() degenerates into comparing a single pair of values. + +template +bool ArrayEq(const T* lhs, size_t size, const U* rhs); + +// This generic version is used when k is 0. +template +inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } + +// This overload is used when k >= 1. +template +inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { + return internal::ArrayEq(lhs, N, rhs); +} + +// This helper reduces code bloat. If we instead put its logic inside +// the previous ArrayEq() function, arrays with different sizes would +// lead to different copies of the template code. +template +bool ArrayEq(const T* lhs, size_t size, const U* rhs) { + for (size_t i = 0; i != size; i++) { + if (!internal::ArrayEq(lhs[i], rhs[i])) + return false; + } + return true; +} + +// Finds the first element in the iterator range [begin, end) that +// equals elem. Element may be a native array type itself. +template +Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { + for (Iter it = begin; it != end; ++it) { + if (internal::ArrayEq(*it, elem)) + return it; + } + return end; +} + +// CopyArray() copies a k-dimensional native array using the elements' +// operator=, where k can be any integer >= 0. When k is 0, +// CopyArray() degenerates into copying a single value. + +template +void CopyArray(const T* from, size_t size, U* to); + +// This generic version is used when k is 0. +template +inline void CopyArray(const T& from, U* to) { *to = from; } + +// This overload is used when k >= 1. +template +inline void CopyArray(const T(&from)[N], U(*to)[N]) { + internal::CopyArray(from, N, *to); +} + +// This helper reduces code bloat. If we instead put its logic inside +// the previous CopyArray() function, arrays with different sizes +// would lead to different copies of the template code. +template +void CopyArray(const T* from, size_t size, U* to) { + for (size_t i = 0; i != size; i++) { + internal::CopyArray(from[i], to + i); + } +} + +// The relation between an NativeArray object (see below) and the +// native array it represents. +enum RelationToSource { + kReference, // The NativeArray references the native array. + kCopy // The NativeArray makes a copy of the native array and + // owns the copy. +}; + +// Adapts a native array to a read-only STL-style container. Instead +// of the complete STL container concept, this adaptor only implements +// members useful for Google Mock's container matchers. New members +// should be added as needed. To simplify the implementation, we only +// support Element being a raw type (i.e. having no top-level const or +// reference modifier). It's the client's responsibility to satisfy +// this requirement. Element can be an array type itself (hence +// multi-dimensional arrays are supported). +template +class NativeArray { + public: + // STL-style container typedefs. + typedef Element value_type; + typedef Element* iterator; + typedef const Element* const_iterator; + + // Constructs from a native array. + NativeArray(const Element* array, size_t count, RelationToSource relation) { + Init(array, count, relation); + } + + // Copy constructor. + NativeArray(const NativeArray& rhs) { + Init(rhs.array_, rhs.size_, rhs.relation_to_source_); + } + + ~NativeArray() { + // Ensures that the user doesn't instantiate NativeArray with a + // const or reference type. + static_cast(StaticAssertTypeEqHelper()); + if (relation_to_source_ == kCopy) + delete[] array_; + } + + // STL-style container methods. + size_t size() const { return size_; } + const_iterator begin() const { return array_; } + const_iterator end() const { return array_ + size_; } + bool operator==(const NativeArray& rhs) const { + return size() == rhs.size() && + ArrayEq(begin(), size(), rhs.begin()); + } + + private: + // Initializes this object; makes a copy of the input array if + // 'relation' is kCopy. + void Init(const Element* array, size_t a_size, RelationToSource relation) { + if (relation == kReference) { + array_ = array; + } else { + Element* const copy = new Element[a_size]; + CopyArray(array, a_size, copy); + array_ = copy; + } + size_ = a_size; + relation_to_source_ = relation; + } + + const Element* array_; + size_t size_; + RelationToSource relation_to_source_; + + GTEST_DISALLOW_ASSIGN_(NativeArray); +}; + +} // namespace internal +} // namespace testing + +#define GTEST_MESSAGE_AT_(file, line, message, result_type) \ + ::testing::internal::AssertHelper(result_type, file, line, message) \ + = ::testing::Message() + +#define GTEST_MESSAGE_(message, result_type) \ + GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) + +#define GTEST_FATAL_FAILURE_(message) \ + return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) + +#define GTEST_NONFATAL_FAILURE_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) + +#define GTEST_SUCCESS_(message) \ + GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) + +// Suppresses MSVC warnings 4072 (unreachable code) for the code following +// statement if it returns or throws (or doesn't return or throw in some +// situations). +#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ + if (::testing::internal::AlwaysTrue()) { statement; } + +#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::ConstCharPtr gtest_msg = "") { \ + bool gtest_caught_expected = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (expected_exception const&) { \ + gtest_caught_expected = true; \ + } \ + catch (...) { \ + gtest_msg.value = \ + "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws a different type."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + if (!gtest_caught_expected) { \ + gtest_msg.value = \ + "Expected: " #statement " throws an exception of type " \ + #expected_exception ".\n Actual: it throws nothing."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ + fail(gtest_msg.value) + +#define GTEST_TEST_NO_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ + fail("Expected: " #statement " doesn't throw an exception.\n" \ + " Actual: it throws.") + +#define GTEST_TEST_ANY_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + bool gtest_caught_any = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + catch (...) { \ + gtest_caught_any = true; \ + } \ + if (!gtest_caught_any) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ + fail("Expected: " #statement " throws an exception.\n" \ + " Actual: it doesn't.") + + +// Implements Boolean test assertions such as EXPECT_TRUE. expression can be +// either a boolean expression or an AssertionResult. text is a textual +// represenation of expression as it was passed into the EXPECT_TRUE. +#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar_ = \ + ::testing::AssertionResult(expression)) \ + ; \ + else \ + fail(::testing::internal::GetBoolAssertionFailureMessage(\ + gtest_ar_, text, #actual, #expected).c_str()) + +#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ + fail("Expected: " #statement " doesn't generate new fatal " \ + "failures in the current thread.\n" \ + " Actual: it does.") + +// Expands to the name of the class that implements the given test. +#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + test_case_name##_##test_name##_Test + +// Helper macro for defining tests. +#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ +class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ + public:\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ + private:\ + virtual void TestBody();\ + static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ +};\ +\ +::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ + ::test_info_ =\ + ::testing::internal::MakeAndRegisterTestInfo(\ + #test_case_name, #test_name, NULL, NULL, \ + (parent_id), \ + parent_class::SetUpTestCase, \ + parent_class::TearDownTestCase, \ + new ::testing::internal::TestFactoryImpl<\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ +void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines the public API for death tests. It is +// #included by gtest.h so a user doesn't need to include this +// directly. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// +// The Google C++ Testing Framework (Google Test) +// +// This header file defines internal utilities needed for implementing +// death tests. They are subject to change without notice. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ + + +#include + +namespace testing { +namespace internal { + +GTEST_DECLARE_string_(internal_run_death_test); + +// Names of the flags (needed for parsing Google Test flags). +const char kDeathTestStyleFlag[] = "death_test_style"; +const char kDeathTestUseFork[] = "death_test_use_fork"; +const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; + +#if GTEST_HAS_DEATH_TEST + +// DeathTest is a class that hides much of the complexity of the +// GTEST_DEATH_TEST_ macro. It is abstract; its static Create method +// returns a concrete class that depends on the prevailing death test +// style, as defined by the --gtest_death_test_style and/or +// --gtest_internal_run_death_test flags. + +// In describing the results of death tests, these terms are used with +// the corresponding definitions: +// +// exit status: The integer exit information in the format specified +// by wait(2) +// exit code: The integer code passed to exit(3), _exit(2), or +// returned from main() +class GTEST_API_ DeathTest { + public: + // Create returns false if there was an error determining the + // appropriate action to take for the current death test; for example, + // if the gtest_death_test_style flag is set to an invalid value. + // The LastMessage method will return a more detailed message in that + // case. Otherwise, the DeathTest pointer pointed to by the "test" + // argument is set. If the death test should be skipped, the pointer + // is set to NULL; otherwise, it is set to the address of a new concrete + // DeathTest object that controls the execution of the current test. + static bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); + DeathTest(); + virtual ~DeathTest() { } + + // A helper class that aborts a death test when it's deleted. + class ReturnSentinel { + public: + explicit ReturnSentinel(DeathTest* test) : test_(test) { } + ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } + private: + DeathTest* const test_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); + } GTEST_ATTRIBUTE_UNUSED_; + + // An enumeration of possible roles that may be taken when a death + // test is encountered. EXECUTE means that the death test logic should + // be executed immediately. OVERSEE means that the program should prepare + // the appropriate environment for a child process to execute the death + // test, then wait for it to complete. + enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; + + // An enumeration of the three reasons that a test might be aborted. + enum AbortReason { + TEST_ENCOUNTERED_RETURN_STATEMENT, + TEST_THREW_EXCEPTION, + TEST_DID_NOT_DIE + }; + + // Assumes one of the above roles. + virtual TestRole AssumeRole() = 0; + + // Waits for the death test to finish and returns its status. + virtual int Wait() = 0; + + // Returns true if the death test passed; that is, the test process + // exited during the test, its exit status matches a user-supplied + // predicate, and its stderr output matches a user-supplied regular + // expression. + // The user-supplied predicate may be a macro expression rather + // than a function pointer or functor, or else Wait and Passed could + // be combined. + virtual bool Passed(bool exit_status_ok) = 0; + + // Signals that the death test did not die as expected. + virtual void Abort(AbortReason reason) = 0; + + // Returns a human-readable outcome message regarding the outcome of + // the last death test. + static const char* LastMessage(); + + static void set_last_death_test_message(const std::string& message); + + private: + // A string containing a description of the outcome of the last death test. + static std::string last_death_test_message_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); +}; + +// Factory interface for death tests. May be mocked out for testing. +class DeathTestFactory { + public: + virtual ~DeathTestFactory() { } + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) = 0; +}; + +// A concrete DeathTestFactory implementation for normal use. +class DefaultDeathTestFactory : public DeathTestFactory { + public: + virtual bool Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test); +}; + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +GTEST_API_ bool ExitedUnsuccessfully(int exit_status); + +// Traps C++ exceptions escaping statement and reports them as test +// failures. Note that trapping SEH exceptions is not implemented here. +# if GTEST_HAS_EXCEPTIONS +# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } catch (const ::std::exception& gtest_exception) { \ + fprintf(\ + stderr, \ + "\n%s: Caught std::exception-derived exception escaping the " \ + "death test statement. Exception message: %s\n", \ + ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ + gtest_exception.what()); \ + fflush(stderr); \ + death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ + } catch (...) { \ + death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ + } + +# else +# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) + +# endif + +// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, +// ASSERT_EXIT*, and EXPECT_EXIT*. +# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + const ::testing::internal::RE& gtest_regex = (regex); \ + ::testing::internal::DeathTest* gtest_dt; \ + if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ + __FILE__, __LINE__, >est_dt)) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + if (gtest_dt != NULL) { \ + ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ + gtest_dt_ptr(gtest_dt); \ + switch (gtest_dt->AssumeRole()) { \ + case ::testing::internal::DeathTest::OVERSEE_TEST: \ + if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + break; \ + case ::testing::internal::DeathTest::EXECUTE_TEST: { \ + ::testing::internal::DeathTest::ReturnSentinel \ + gtest_sentinel(gtest_dt); \ + GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ + gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ + break; \ + } \ + default: \ + break; \ + } \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ + fail(::testing::internal::DeathTest::LastMessage()) +// The symbol "fail" here expands to something into which a message +// can be streamed. + +// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in +// NDEBUG mode. In this case we need the statements to be executed, the regex is +// ignored, and the macro must accept a streamed message even though the message +// is never printed. +# define GTEST_EXECUTE_STATEMENT_(statement, regex) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } else \ + ::testing::Message() + +// A class representing the parsed contents of the +// --gtest_internal_run_death_test flag, as it existed when +// RUN_ALL_TESTS was called. +class InternalRunDeathTestFlag { + public: + InternalRunDeathTestFlag(const std::string& a_file, + int a_line, + int an_index, + int a_write_fd) + : file_(a_file), line_(a_line), index_(an_index), + write_fd_(a_write_fd) {} + + ~InternalRunDeathTestFlag() { + if (write_fd_ >= 0) + posix::Close(write_fd_); + } + + const std::string& file() const { return file_; } + int line() const { return line_; } + int index() const { return index_; } + int write_fd() const { return write_fd_; } + + private: + std::string file_; + int line_; + int index_; + int write_fd_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); +}; + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); + +#else // GTEST_HAS_DEATH_TEST + +// This macro is used for implementing macros such as +// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where +// death tests are not supported. Those macros must compile on such systems +// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on +// systems that support death tests. This allows one to write such a macro +// on a system that does not support death tests and be sure that it will +// compile on a death-test supporting system. +// +// Parameters: +// statement - A statement that a macro such as EXPECT_DEATH would test +// for program termination. This macro has to make sure this +// statement is compiled but not executed, to ensure that +// EXPECT_DEATH_IF_SUPPORTED compiles with a certain +// parameter iff EXPECT_DEATH compiles with it. +// regex - A regex that a macro such as EXPECT_DEATH would use to test +// the output of statement. This parameter has to be +// compiled but not evaluated by this macro, to ensure that +// this macro only accepts expressions that a macro such as +// EXPECT_DEATH would accept. +// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED +// and a return statement for ASSERT_DEATH_IF_SUPPORTED. +// This ensures that ASSERT_DEATH_IF_SUPPORTED will not +// compile inside functions where ASSERT_DEATH doesn't +// compile. +// +// The branch that has an always false condition is used to ensure that +// statement and regex are compiled (and thus syntactically correct) but +// never executed. The unreachable code macro protects the terminator +// statement from generating an 'unreachable code' warning in case +// statement unconditionally returns or throws. The Message constructor at +// the end allows the syntax of streaming additional messages into the +// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. +# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_LOG_(WARNING) \ + << "Death tests are not supported on this platform.\n" \ + << "Statement '" #statement "' cannot be verified."; \ + } else if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::RE::PartialMatch(".*", (regex)); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + terminator; \ + } else \ + ::testing::Message() + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ + +namespace testing { + +// This flag controls the style of death tests. Valid values are "threadsafe", +// meaning that the death test child process will re-execute the test binary +// from the start, running only a single death test, or "fast", +// meaning that the child process will execute the test logic immediately +// after forking. +GTEST_DECLARE_string_(death_test_style); + +#if GTEST_HAS_DEATH_TEST + +namespace internal { + +// Returns a Boolean value indicating whether the caller is currently +// executing in the context of the death test child process. Tools such as +// Valgrind heap checkers may need this to modify their behavior in death +// tests. IMPORTANT: This is an internal utility. Using it may break the +// implementation of death tests. User code MUST NOT use it. +GTEST_API_ bool InDeathTestChild(); + +} // namespace internal + +// The following macros are useful for writing death tests. + +// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is +// executed: +// +// 1. It generates a warning if there is more than one active +// thread. This is because it's safe to fork() or clone() only +// when there is a single thread. +// +// 2. The parent process clone()s a sub-process and runs the death +// test in it; the sub-process exits with code 0 at the end of the +// death test, if it hasn't exited already. +// +// 3. The parent process waits for the sub-process to terminate. +// +// 4. The parent process checks the exit code and error message of +// the sub-process. +// +// Examples: +// +// ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); +// for (int i = 0; i < 5; i++) { +// EXPECT_DEATH(server.ProcessRequest(i), +// "Invalid request .* in ProcessRequest()") +// << "Failed to die on request " << i; +// } +// +// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); +// +// bool KilledBySIGHUP(int exit_code) { +// return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; +// } +// +// ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); +// +// On the regular expressions used in death tests: +// +// On POSIX-compliant systems (*nix), we use the library, +// which uses the POSIX extended regex syntax. +// +// On other platforms (e.g. Windows), we only support a simple regex +// syntax implemented as part of Google Test. This limited +// implementation should be enough most of the time when writing +// death tests; though it lacks many features you can find in PCRE +// or POSIX extended regex syntax. For example, we don't support +// union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and +// repetition count ("x{5,7}"), among others. +// +// Below is the syntax that we do support. We chose it to be a +// subset of both PCRE and POSIX extended regex, so it's easy to +// learn wherever you come from. In the following: 'A' denotes a +// literal character, period (.), or a single \\ escape sequence; +// 'x' and 'y' denote regular expressions; 'm' and 'n' are for +// natural numbers. +// +// c matches any literal character c +// \\d matches any decimal digit +// \\D matches any character that's not a decimal digit +// \\f matches \f +// \\n matches \n +// \\r matches \r +// \\s matches any ASCII whitespace, including \n +// \\S matches any character that's not a whitespace +// \\t matches \t +// \\v matches \v +// \\w matches any letter, _, or decimal digit +// \\W matches any character that \\w doesn't match +// \\c matches any literal character c, which must be a punctuation +// . matches any single character except \n +// A? matches 0 or 1 occurrences of A +// A* matches 0 or many occurrences of A +// A+ matches 1 or many occurrences of A +// ^ matches the beginning of a string (not that of each line) +// $ matches the end of a string (not that of each line) +// xy matches x followed by y +// +// If you accidentally use PCRE or POSIX extended regex features +// not implemented by us, you will get a run-time failure. In that +// case, please try to rewrite your regular expression within the +// above syntax. +// +// This implementation is *not* meant to be as highly tuned or robust +// as a compiled regex library, but should perform well enough for a +// death test, which already incurs significant overhead by launching +// a child process. +// +// Known caveats: +// +// A "threadsafe" style death test obtains the path to the test +// program from argv[0] and re-executes it in the sub-process. For +// simplicity, the current implementation doesn't search the PATH +// when launching the sub-process. This means that the user must +// invoke the test program via a path that contains at least one +// path separator (e.g. path/to/foo_test and +// /absolute/path/to/bar_test are fine, but foo_test is not). This +// is rarely a problem as people usually don't put the test binary +// directory in PATH. +// +// TODO(wan@google.com): make thread-safe death tests search the PATH. + +// Asserts that a given statement causes the program to exit, with an +// integer exit status that satisfies predicate, and emitting error output +// that matches regex. +# define ASSERT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) + +// Like ASSERT_EXIT, but continues on to successive tests in the +// test case, if any: +# define EXPECT_EXIT(statement, predicate, regex) \ + GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) + +// Asserts that a given statement causes the program to exit, either by +// explicitly exiting with a nonzero exit code or being killed by a +// signal, and emitting error output that matches regex. +# define ASSERT_DEATH(statement, regex) \ + ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Like ASSERT_DEATH, but continues on to successive tests in the +// test case, if any: +# define EXPECT_DEATH(statement, regex) \ + EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) + +// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: + +// Tests that an exit code describes a normal exit with a given exit code. +class GTEST_API_ ExitedWithCode { + public: + explicit ExitedWithCode(int exit_code); + bool operator()(int exit_status) const; + private: + // No implementation - assignment is unsupported. + void operator=(const ExitedWithCode& other); + + const int exit_code_; +}; + +# if !GTEST_OS_WINDOWS +// Tests that an exit code describes an exit due to termination by a +// given signal. +class GTEST_API_ KilledBySignal { + public: + explicit KilledBySignal(int signum); + bool operator()(int exit_status) const; + private: + const int signum_; +}; +# endif // !GTEST_OS_WINDOWS + +// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. +// The death testing framework causes this to have interesting semantics, +// since the sideeffects of the call are only visible in opt mode, and not +// in debug mode. +// +// In practice, this can be used to test functions that utilize the +// LOG(DFATAL) macro using the following style: +// +// int DieInDebugOr12(int* sideeffect) { +// if (sideeffect) { +// *sideeffect = 12; +// } +// LOG(DFATAL) << "death"; +// return 12; +// } +// +// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { +// int sideeffect = 0; +// // Only asserts in dbg. +// EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); +// +// #ifdef NDEBUG +// // opt-mode has sideeffect visible. +// EXPECT_EQ(12, sideeffect); +// #else +// // dbg-mode no visible sideeffect. +// EXPECT_EQ(0, sideeffect); +// #endif +// } +// +// This will assert that DieInDebugReturn12InOpt() crashes in debug +// mode, usually due to a DCHECK or LOG(DFATAL), but returns the +// appropriate fallback value (12 in this case) in opt mode. If you +// need to test that a function has appropriate side-effects in opt +// mode, include assertions against the side-effects. A general +// pattern for this is: +// +// EXPECT_DEBUG_DEATH({ +// // Side-effects here will have an effect after this statement in +// // opt mode, but none in debug mode. +// EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); +// }, "death"); +// +# ifdef NDEBUG + +# define EXPECT_DEBUG_DEATH(statement, regex) \ + GTEST_EXECUTE_STATEMENT_(statement, regex) + +# define ASSERT_DEBUG_DEATH(statement, regex) \ + GTEST_EXECUTE_STATEMENT_(statement, regex) + +# else + +# define EXPECT_DEBUG_DEATH(statement, regex) \ + EXPECT_DEATH(statement, regex) + +# define ASSERT_DEBUG_DEATH(statement, regex) \ + ASSERT_DEATH(statement, regex) + +# endif // NDEBUG for EXPECT_DEBUG_DEATH +#endif // GTEST_HAS_DEATH_TEST + +// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and +// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if +// death tests are supported; otherwise they just issue a warning. This is +// useful when you are combining death test assertions with normal test +// assertions in one test. +#if GTEST_HAS_DEATH_TEST +# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + EXPECT_DEATH(statement, regex) +# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + ASSERT_DEATH(statement, regex) +#else +# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) +# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) +#endif + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +// This file was GENERATED by command: +// pump.py gtest-param-test.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: vladl@google.com (Vlad Losev) +// +// Macros and functions for implementing parameterized tests +// in Google C++ Testing Framework (Google Test) +// +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ + + +// Value-parameterized tests allow you to test your code with different +// parameters without writing multiple copies of the same test. +// +// Here is how you use value-parameterized tests: + +#if 0 + +// To write value-parameterized tests, first you should define a fixture +// class. It is usually derived from testing::TestWithParam (see below for +// another inheritance scheme that's sometimes useful in more complicated +// class hierarchies), where the type of your parameter values. +// TestWithParam is itself derived from testing::Test. T can be any +// copyable type. If it's a raw pointer, you are responsible for managing the +// lifespan of the pointed values. + +class FooTest : public ::testing::TestWithParam { + // You can implement all the usual class fixture members here. +}; + +// Then, use the TEST_P macro to define as many parameterized tests +// for this fixture as you want. The _P suffix is for "parameterized" +// or "pattern", whichever you prefer to think. + +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} + +// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test +// case with any set of parameters you want. Google Test defines a number +// of functions for generating test parameters. They return what we call +// (surprise!) parameter generators. Here is a summary of them, which +// are all in the testing namespace: +// +// +// Range(begin, end [, step]) - Yields values {begin, begin+step, +// begin+step+step, ...}. The values do not +// include end. step defaults to 1. +// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. +// ValuesIn(container) - Yields values from a C-style array, an STL +// ValuesIn(begin,end) container, or an iterator range [begin, end). +// Bool() - Yields sequence {false, true}. +// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product +// for the math savvy) of the values generated +// by the N generators. +// +// For more details, see comments at the definitions of these functions below +// in this file. +// +// The following statement will instantiate tests from the FooTest test case +// each with parameter values "meeny", "miny", and "moe". + +INSTANTIATE_TEST_CASE_P(InstantiationName, + FooTest, + Values("meeny", "miny", "moe")); + +// To distinguish different instances of the pattern, (yes, you +// can instantiate it more then once) the first argument to the +// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the +// actual test case name. Remember to pick unique prefixes for different +// instantiations. The tests from the instantiation above will have +// these names: +// +// * InstantiationName/FooTest.DoesBlah/0 for "meeny" +// * InstantiationName/FooTest.DoesBlah/1 for "miny" +// * InstantiationName/FooTest.DoesBlah/2 for "moe" +// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" +// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" +// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" +// +// You can use these names in --gtest_filter. +// +// This statement will instantiate all tests from FooTest again, each +// with parameter values "cat" and "dog": + +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); + +// The tests from the instantiation above will have these names: +// +// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" +// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" +// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" +// +// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests +// in the given test case, whether their definitions come before or +// AFTER the INSTANTIATE_TEST_CASE_P statement. +// +// Please also note that generator expressions (including parameters to the +// generators) are evaluated in InitGoogleTest(), after main() has started. +// This allows the user on one hand, to adjust generator parameters in order +// to dynamically determine a set of tests to run and on the other hand, +// give the user a chance to inspect the generated tests with Google Test +// reflection API before RUN_ALL_TESTS() is executed. +// +// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc +// for more examples. +// +// In the future, we plan to publish the API for defining new parameter +// generators. But for now this interface remains part of the internal +// implementation and is subject to change. +// +// +// A parameterized test fixture must be derived from testing::Test and from +// testing::WithParamInterface, where T is the type of the parameter +// values. Inheriting from TestWithParam satisfies that requirement because +// TestWithParam inherits from both Test and WithParamInterface. In more +// complicated hierarchies, however, it is occasionally useful to inherit +// separately from Test and WithParamInterface. For example: + +class BaseTest : public ::testing::Test { + // You can inherit all the usual members for a non-parameterized test + // fixture here. +}; + +class DerivedTest : public BaseTest, public ::testing::WithParamInterface { + // The usual test fixture members go here too. +}; + +TEST_F(BaseTest, HasFoo) { + // This is an ordinary non-parameterized test. +} + +TEST_P(DerivedTest, DoesBlah) { + // GetParam works just the same here as if you inherit from TestWithParam. + EXPECT_TRUE(foo.Blah(GetParam())); +} + +#endif // 0 + + +#if !GTEST_OS_SYMBIAN +# include +#endif + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ + +#include +#include +#include + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. +// Copyright 2003 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: Dan Egnor (egnor@google.com) +// +// A "smart" pointer type with reference tracking. Every pointer to a +// particular object is kept on a circular linked list. When the last pointer +// to an object is destroyed or reassigned, the object is deleted. +// +// Used properly, this deletes the object when the last reference goes away. +// There are several caveats: +// - Like all reference counting schemes, cycles lead to leaks. +// - Each smart pointer is actually two pointers (8 bytes instead of 4). +// - Every time a pointer is assigned, the entire list of pointers to that +// object is traversed. This class is therefore NOT SUITABLE when there +// will often be more than two or three pointers to a particular object. +// - References are only tracked as long as linked_ptr<> objects are copied. +// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS +// will happen (double deletion). +// +// A good use of this class is storing object references in STL containers. +// You can safely put linked_ptr<> in a vector<>. +// Other uses may not be as good. +// +// Note: If you use an incomplete type with linked_ptr<>, the class +// *containing* linked_ptr<> must have a constructor and destructor (even +// if they do nothing!). +// +// Bill Gibbons suggested we use something like this. +// +// Thread Safety: +// Unlike other linked_ptr implementations, in this implementation +// a linked_ptr object is thread-safe in the sense that: +// - it's safe to copy linked_ptr objects concurrently, +// - it's safe to copy *from* a linked_ptr and read its underlying +// raw pointer (e.g. via get()) concurrently, and +// - it's safe to write to two linked_ptrs that point to the same +// shared object concurrently. +// TODO(wan@google.com): rename this to safe_linked_ptr to avoid +// confusion with normal linked_ptr. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ + +#include +#include + + +namespace testing { +namespace internal { + +// Protects copying of all linked_ptr objects. +GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// This is used internally by all instances of linked_ptr<>. It needs to be +// a non-template class because different types of linked_ptr<> can refer to +// the same object (linked_ptr(obj) vs linked_ptr(obj)). +// So, it needs to be possible for different types of linked_ptr to participate +// in the same circular linked list, so we need a single class type here. +// +// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. +class linked_ptr_internal { + public: + // Create a new circle that includes only this instance. + void join_new() { + next_ = this; + } + + // Many linked_ptr operations may change p.link_ for some linked_ptr + // variable p in the same circle as this object. Therefore we need + // to prevent two such operations from occurring concurrently. + // + // Note that different types of linked_ptr objects can coexist in a + // circle (e.g. linked_ptr, linked_ptr, and + // linked_ptr). Therefore we must use a single mutex to + // protect all linked_ptr objects. This can create serious + // contention in production code, but is acceptable in a testing + // framework. + + // Join an existing circle. + void join(linked_ptr_internal const* ptr) + GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { + MutexLock lock(&g_linked_ptr_mutex); + + linked_ptr_internal const* p = ptr; + while (p->next_ != ptr) p = p->next_; + p->next_ = this; + next_ = ptr; + } + + // Leave whatever circle we're part of. Returns true if we were the + // last member of the circle. Once this is done, you can join() another. + bool depart() + GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { + MutexLock lock(&g_linked_ptr_mutex); + + if (next_ == this) return true; + linked_ptr_internal const* p = next_; + while (p->next_ != this) p = p->next_; + p->next_ = next_; + return false; + } + + private: + mutable linked_ptr_internal const* next_; +}; + +template +class linked_ptr { + public: + typedef T element_type; + + // Take over ownership of a raw pointer. This should happen as soon as + // possible after the object is created. + explicit linked_ptr(T* ptr = NULL) { capture(ptr); } + ~linked_ptr() { depart(); } + + // Copy an existing linked_ptr<>, adding ourselves to the list of references. + template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } + linked_ptr(linked_ptr const& ptr) { // NOLINT + assert(&ptr != this); + copy(&ptr); + } + + // Assignment releases the old value and acquires the new. + template linked_ptr& operator=(linked_ptr const& ptr) { + depart(); + copy(&ptr); + return *this; + } + + linked_ptr& operator=(linked_ptr const& ptr) { + if (&ptr != this) { + depart(); + copy(&ptr); + } + return *this; + } + + // Smart pointer members. + void reset(T* ptr = NULL) { + depart(); + capture(ptr); + } + T* get() const { return value_; } + T* operator->() const { return value_; } + T& operator*() const { return *value_; } + + bool operator==(T* p) const { return value_ == p; } + bool operator!=(T* p) const { return value_ != p; } + template + bool operator==(linked_ptr const& ptr) const { + return value_ == ptr.get(); + } + template + bool operator!=(linked_ptr const& ptr) const { + return value_ != ptr.get(); + } + + private: + template + friend class linked_ptr; + + T* value_; + linked_ptr_internal link_; + + void depart() { + if (link_.depart()) delete value_; + } + + void capture(T* ptr) { + value_ = ptr; + link_.join_new(); + } + + template void copy(linked_ptr const* ptr) { + value_ = ptr->get(); + if (value_) + link_.join(&ptr->link_); + else + link_.join_new(); + } +}; + +template inline +bool operator==(T* ptr, const linked_ptr& x) { + return ptr == x.get(); +} + +template inline +bool operator!=(T* ptr, const linked_ptr& x) { + return ptr != x.get(); +} + +// A function to convert T* into linked_ptr +// Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation +// for linked_ptr >(new FooBarBaz(arg)) +template +linked_ptr make_linked_ptr(T* ptr) { + return linked_ptr(ptr); +} + +} // namespace internal +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Test - The Google C++ Testing Framework +// +// This file implements a universal value printer that can print a +// value of any type T: +// +// void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); +// +// A user can teach this function how to print a class type T by +// defining either operator<<() or PrintTo() in the namespace that +// defines T. More specifically, the FIRST defined function in the +// following list will be used (assuming T is defined in namespace +// foo): +// +// 1. foo::PrintTo(const T&, ostream*) +// 2. operator<<(ostream&, const T&) defined in either foo or the +// global namespace. +// +// If none of the above is defined, it will print the debug string of +// the value if it is a protocol buffer, or print the raw bytes in the +// value otherwise. +// +// To aid debugging: when T is a reference type, the address of the +// value is also printed; when T is a (const) char pointer, both the +// pointer value and the NUL-terminated string it points to are +// printed. +// +// We also provide some convenient wrappers: +// +// // Prints a value to a string. For a (const or not) char +// // pointer, the NUL-terminated string (but not the pointer) is +// // printed. +// std::string ::testing::PrintToString(const T& value); +// +// // Prints a value tersely: for a reference type, the referenced +// // value (but not the address) is printed; for a (const or not) char +// // pointer, the NUL-terminated string (but not the pointer) is +// // printed. +// void ::testing::internal::UniversalTersePrint(const T& value, ostream*); +// +// // Prints value using the type inferred by the compiler. The difference +// // from UniversalTersePrint() is that this function prints both the +// // pointer and the NUL-terminated string for a (const or not) char pointer. +// void ::testing::internal::UniversalPrint(const T& value, ostream*); +// +// // Prints the fields of a tuple tersely to a string vector, one +// // element for each field. Tuple support must be enabled in +// // gtest-port.h. +// std::vector UniversalTersePrintTupleFieldsToStrings( +// const Tuple& value); +// +// Known limitation: +// +// The print primitives print the elements of an STL-style container +// using the compiler-inferred type of *iter where iter is a +// const_iterator of the container. When const_iterator is an input +// iterator but not a forward iterator, this inferred type may not +// match value_type, and the print output may be incorrect. In +// practice, this is rarely a problem as for most containers +// const_iterator is a forward iterator. We'll fix this if there's an +// actual need for it. Note that this fix cannot rely on value_type +// being defined as many user-defined container types don't have +// value_type. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ + +#include // NOLINT +#include +#include +#include +#include + +namespace testing { + +// Definitions in the 'internal' and 'internal2' name spaces are +// subject to change without notice. DO NOT USE THEM IN USER CODE! +namespace internal2 { + +// Prints the given number of bytes in the given object to the given +// ostream. +GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, + size_t count, + ::std::ostream* os); + +// For selecting which printer to use when a given type has neither << +// nor PrintTo(). +enum TypeKind { + kProtobuf, // a protobuf type + kConvertibleToInteger, // a type implicitly convertible to BiggestInt + // (e.g. a named or unnamed enum type) + kOtherType // anything else +}; + +// TypeWithoutFormatter::PrintValue(value, os) is called +// by the universal printer to print a value of type T when neither +// operator<< nor PrintTo() is defined for T, where kTypeKind is the +// "kind" of T as defined by enum TypeKind. +template +class TypeWithoutFormatter { + public: + // This default version is called when kTypeKind is kOtherType. + static void PrintValue(const T& value, ::std::ostream* os) { + PrintBytesInObjectTo(reinterpret_cast(&value), + sizeof(value), os); + } +}; + +// We print a protobuf using its ShortDebugString() when the string +// doesn't exceed this many characters; otherwise we print it using +// DebugString() for better readability. +const size_t kProtobufOneLinerMaxLength = 50; + +template +class TypeWithoutFormatter { + public: + static void PrintValue(const T& value, ::std::ostream* os) { + const ::testing::internal::string short_str = value.ShortDebugString(); + const ::testing::internal::string pretty_str = + short_str.length() <= kProtobufOneLinerMaxLength ? + short_str : ("\n" + value.DebugString()); + *os << ("<" + pretty_str + ">"); + } +}; + +template +class TypeWithoutFormatter { + public: + // Since T has no << operator or PrintTo() but can be implicitly + // converted to BiggestInt, we print it as a BiggestInt. + // + // Most likely T is an enum type (either named or unnamed), in which + // case printing it as an integer is the desired behavior. In case + // T is not an enum, printing it as an integer is the best we can do + // given that it has no user-defined printer. + static void PrintValue(const T& value, ::std::ostream* os) { + const internal::BiggestInt kBigInt = value; + *os << kBigInt; + } +}; + +// Prints the given value to the given ostream. If the value is a +// protocol message, its debug string is printed; if it's an enum or +// of a type implicitly convertible to BiggestInt, it's printed as an +// integer; otherwise the bytes in the value are printed. This is +// what UniversalPrinter::Print() does when it knows nothing about +// type T and T has neither << operator nor PrintTo(). +// +// A user can override this behavior for a class type Foo by defining +// a << operator in the namespace where Foo is defined. +// +// We put this operator in namespace 'internal2' instead of 'internal' +// to simplify the implementation, as much code in 'internal' needs to +// use << in STL, which would conflict with our own << were it defined +// in 'internal'. +// +// Note that this operator<< takes a generic std::basic_ostream type instead of the more restricted std::ostream. If +// we define it to take an std::ostream instead, we'll get an +// "ambiguous overloads" compiler error when trying to print a type +// Foo that supports streaming to std::basic_ostream, as the compiler cannot tell whether +// operator<<(std::ostream&, const T&) or +// operator<<(std::basic_stream, const Foo&) is more +// specific. +template +::std::basic_ostream& operator<<( + ::std::basic_ostream& os, const T& x) { + TypeWithoutFormatter::value ? kProtobuf : + internal::ImplicitlyConvertible::value ? + kConvertibleToInteger : kOtherType)>::PrintValue(x, &os); + return os; +} + +} // namespace internal2 +} // namespace testing + +// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up +// magic needed for implementing UniversalPrinter won't work. +namespace testing_internal { + +// Used to print a value that is not an STL-style container when the +// user doesn't define PrintTo() for it. +template +void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { + // With the following statement, during unqualified name lookup, + // testing::internal2::operator<< appears as if it was declared in + // the nearest enclosing namespace that contains both + // ::testing_internal and ::testing::internal2, i.e. the global + // namespace. For more details, refer to the C++ Standard section + // 7.3.4-1 [namespace.udir]. This allows us to fall back onto + // testing::internal2::operator<< in case T doesn't come with a << + // operator. + // + // We cannot write 'using ::testing::internal2::operator<<;', which + // gcc 3.3 fails to compile due to a compiler bug. + using namespace ::testing::internal2; // NOLINT + + // Assuming T is defined in namespace foo, in the next statement, + // the compiler will consider all of: + // + // 1. foo::operator<< (thanks to Koenig look-up), + // 2. ::operator<< (as the current namespace is enclosed in ::), + // 3. testing::internal2::operator<< (thanks to the using statement above). + // + // The operator<< whose type matches T best will be picked. + // + // We deliberately allow #2 to be a candidate, as sometimes it's + // impossible to define #1 (e.g. when foo is ::std, defining + // anything in it is undefined behavior unless you are a compiler + // vendor.). + *os << value; +} + +} // namespace testing_internal + +namespace testing { +namespace internal { + +// UniversalPrinter::Print(value, ostream_ptr) prints the given +// value to the given ostream. The caller must ensure that +// 'ostream_ptr' is not NULL, or the behavior is undefined. +// +// We define UniversalPrinter as a class template (as opposed to a +// function template), as we need to partially specialize it for +// reference types, which cannot be done with function templates. +template +class UniversalPrinter; + +template +void UniversalPrint(const T& value, ::std::ostream* os); + +// Used to print an STL-style container when the user doesn't define +// a PrintTo() for it. +template +void DefaultPrintTo(IsContainer /* dummy */, + false_type /* is not a pointer */, + const C& container, ::std::ostream* os) { + const size_t kMaxCount = 32; // The maximum number of elements to print. + *os << '{'; + size_t count = 0; + for (typename C::const_iterator it = container.begin(); + it != container.end(); ++it, ++count) { + if (count > 0) { + *os << ','; + if (count == kMaxCount) { // Enough has been printed. + *os << " ..."; + break; + } + } + *os << ' '; + // We cannot call PrintTo(*it, os) here as PrintTo() doesn't + // handle *it being a native array. + internal::UniversalPrint(*it, os); + } + + if (count > 0) { + *os << ' '; + } + *os << '}'; +} + +// Used to print a pointer that is neither a char pointer nor a member +// pointer, when the user doesn't define PrintTo() for it. (A member +// variable pointer or member function pointer doesn't really point to +// a location in the address space. Their representation is +// implementation-defined. Therefore they will be printed as raw +// bytes.) +template +void DefaultPrintTo(IsNotContainer /* dummy */, + true_type /* is a pointer */, + T* p, ::std::ostream* os) { + if (p == NULL) { + *os << "NULL"; + } else { + // C++ doesn't allow casting from a function pointer to any object + // pointer. + // + // IsTrue() silences warnings: "Condition is always true", + // "unreachable code". + if (IsTrue(ImplicitlyConvertible::value)) { + // T is not a function type. We just call << to print p, + // relying on ADL to pick up user-defined << for their pointer + // types, if any. + *os << p; + } else { + // T is a function type, so '*os << p' doesn't do what we want + // (it just prints p as bool). We want to print p as a const + // void*. However, we cannot cast it to const void* directly, + // even using reinterpret_cast, as earlier versions of gcc + // (e.g. 3.4.5) cannot compile the cast when p is a function + // pointer. Casting to UInt64 first solves the problem. + *os << reinterpret_cast( + reinterpret_cast(p)); + } + } +} + +// Used to print a non-container, non-pointer value when the user +// doesn't define PrintTo() for it. +template +void DefaultPrintTo(IsNotContainer /* dummy */, + false_type /* is not a pointer */, + const T& value, ::std::ostream* os) { + ::testing_internal::DefaultPrintNonContainerTo(value, os); +} + +// Prints the given value using the << operator if it has one; +// otherwise prints the bytes in it. This is what +// UniversalPrinter::Print() does when PrintTo() is not specialized +// or overloaded for type T. +// +// A user can override this behavior for a class type Foo by defining +// an overload of PrintTo() in the namespace where Foo is defined. We +// give the user this option as sometimes defining a << operator for +// Foo is not desirable (e.g. the coding style may prevent doing it, +// or there is already a << operator but it doesn't do what the user +// wants). +template +void PrintTo(const T& value, ::std::ostream* os) { + // DefaultPrintTo() is overloaded. The type of its first two + // arguments determine which version will be picked. If T is an + // STL-style container, the version for container will be called; if + // T is a pointer, the pointer version will be called; otherwise the + // generic version will be called. + // + // Note that we check for container types here, prior to we check + // for protocol message types in our operator<<. The rationale is: + // + // For protocol messages, we want to give people a chance to + // override Google Mock's format by defining a PrintTo() or + // operator<<. For STL containers, other formats can be + // incompatible with Google Mock's format for the container + // elements; therefore we check for container types here to ensure + // that our format is used. + // + // The second argument of DefaultPrintTo() is needed to bypass a bug + // in Symbian's C++ compiler that prevents it from picking the right + // overload between: + // + // PrintTo(const T& x, ...); + // PrintTo(T* x, ...); + DefaultPrintTo(IsContainerTest(0), is_pointer(), value, os); +} + +// The following list of PrintTo() overloads tells +// UniversalPrinter::Print() how to print standard types (built-in +// types, strings, plain arrays, and pointers). + +// Overloads for various char types. +GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os); +GTEST_API_ void PrintTo(signed char c, ::std::ostream* os); +inline void PrintTo(char c, ::std::ostream* os) { + // When printing a plain char, we always treat it as unsigned. This + // way, the output won't be affected by whether the compiler thinks + // char is signed or not. + PrintTo(static_cast(c), os); +} + +// Overloads for other simple built-in types. +inline void PrintTo(bool x, ::std::ostream* os) { + *os << (x ? "true" : "false"); +} + +// Overload for wchar_t type. +// Prints a wchar_t as a symbol if it is printable or as its internal +// code otherwise and also as its decimal code (except for L'\0'). +// The L'\0' char is printed as "L'\\0'". The decimal code is printed +// as signed integer when wchar_t is implemented by the compiler +// as a signed type and is printed as an unsigned integer when wchar_t +// is implemented as an unsigned type. +GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); + +// Overloads for C strings. +GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); +inline void PrintTo(char* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} + +// signed/unsigned char is often used for representing binary data, so +// we print pointers to it as void* to be safe. +inline void PrintTo(const signed char* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} +inline void PrintTo(signed char* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} +inline void PrintTo(const unsigned char* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} +inline void PrintTo(unsigned char* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} + +// MSVC can be configured to define wchar_t as a typedef of unsigned +// short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native +// type. When wchar_t is a typedef, defining an overload for const +// wchar_t* would cause unsigned short* be printed as a wide string, +// possibly causing invalid memory accesses. +#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) +// Overloads for wide C strings +GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os); +inline void PrintTo(wchar_t* s, ::std::ostream* os) { + PrintTo(ImplicitCast_(s), os); +} +#endif + +// Overload for C arrays. Multi-dimensional arrays are printed +// properly. + +// Prints the given number of elements in an array, without printing +// the curly braces. +template +void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { + UniversalPrint(a[0], os); + for (size_t i = 1; i != count; i++) { + *os << ", "; + UniversalPrint(a[i], os); + } +} + +// Overloads for ::string and ::std::string. +#if GTEST_HAS_GLOBAL_STRING +GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); +inline void PrintTo(const ::string& s, ::std::ostream* os) { + PrintStringTo(s, os); +} +#endif // GTEST_HAS_GLOBAL_STRING + +GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); +inline void PrintTo(const ::std::string& s, ::std::ostream* os) { + PrintStringTo(s, os); +} + +// Overloads for ::wstring and ::std::wstring. +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); +inline void PrintTo(const ::wstring& s, ::std::ostream* os) { + PrintWideStringTo(s, os); +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); +inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { + PrintWideStringTo(s, os); +} +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_TR1_TUPLE +// Overload for ::std::tr1::tuple. Needed for printing function arguments, +// which are packed as tuples. + +// Helper function for printing a tuple. T must be instantiated with +// a tuple type. +template +void PrintTupleTo(const T& t, ::std::ostream* os); + +// Overloaded PrintTo() for tuples of various arities. We support +// tuples of up-to 10 fields. The following implementation works +// regardless of whether tr1::tuple is implemented using the +// non-standard variadic template feature or not. + +inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo(const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template +void PrintTo( + const ::std::tr1::tuple& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} +#endif // GTEST_HAS_TR1_TUPLE + +// Overload for std::pair. +template +void PrintTo(const ::std::pair& value, ::std::ostream* os) { + *os << '('; + // We cannot use UniversalPrint(value.first, os) here, as T1 may be + // a reference type. The same for printing value.second. + UniversalPrinter::Print(value.first, os); + *os << ", "; + UniversalPrinter::Print(value.second, os); + *os << ')'; +} + +// Implements printing a non-reference type T by letting the compiler +// pick the right overload of PrintTo() for T. +template +class UniversalPrinter { + public: + // MSVC warns about adding const to a function type, so we want to + // disable the warning. +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4180) // Temporarily disables warning 4180. +#endif // _MSC_VER + + // Note: we deliberately don't call this PrintTo(), as that name + // conflicts with ::testing::internal::PrintTo in the body of the + // function. + static void Print(const T& value, ::std::ostream* os) { + // By default, ::testing::internal::PrintTo() is used for printing + // the value. + // + // Thanks to Koenig look-up, if T is a class and has its own + // PrintTo() function defined in its namespace, that function will + // be visible here. Since it is more specific than the generic ones + // in ::testing::internal, it will be picked by the compiler in the + // following statement - exactly what we want. + PrintTo(value, os); + } + +#ifdef _MSC_VER +# pragma warning(pop) // Restores the warning state. +#endif // _MSC_VER +}; + +// UniversalPrintArray(begin, len, os) prints an array of 'len' +// elements, starting at address 'begin'. +template +void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { + if (len == 0) { + *os << "{}"; + } else { + *os << "{ "; + const size_t kThreshold = 18; + const size_t kChunkSize = 8; + // If the array has more than kThreshold elements, we'll have to + // omit some details by printing only the first and the last + // kChunkSize elements. + // TODO(wan@google.com): let the user control the threshold using a flag. + if (len <= kThreshold) { + PrintRawArrayTo(begin, len, os); + } else { + PrintRawArrayTo(begin, kChunkSize, os); + *os << ", ..., "; + PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os); + } + *os << " }"; + } +} +// This overload prints a (const) char array compactly. +GTEST_API_ void UniversalPrintArray( + const char* begin, size_t len, ::std::ostream* os); + +// This overload prints a (const) wchar_t array compactly. +GTEST_API_ void UniversalPrintArray( + const wchar_t* begin, size_t len, ::std::ostream* os); + +// Implements printing an array type T[N]. +template +class UniversalPrinter { + public: + // Prints the given array, omitting some elements when there are too + // many. + static void Print(const T (&a)[N], ::std::ostream* os) { + UniversalPrintArray(a, N, os); + } +}; + +// Implements printing a reference type T&. +template +class UniversalPrinter { + public: + // MSVC warns about adding const to a function type, so we want to + // disable the warning. +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4180) // Temporarily disables warning 4180. +#endif // _MSC_VER + + static void Print(const T& value, ::std::ostream* os) { + // Prints the address of the value. We use reinterpret_cast here + // as static_cast doesn't compile when T is a function type. + *os << "@" << reinterpret_cast(&value) << " "; + + // Then prints the value itself. + UniversalPrint(value, os); + } + +#ifdef _MSC_VER +# pragma warning(pop) // Restores the warning state. +#endif // _MSC_VER +}; + +// Prints a value tersely: for a reference type, the referenced value +// (but not the address) is printed; for a (const) char pointer, the +// NUL-terminated string (but not the pointer) is printed. + +template +class UniversalTersePrinter { + public: + static void Print(const T& value, ::std::ostream* os) { + UniversalPrint(value, os); + } +}; +template +class UniversalTersePrinter { + public: + static void Print(const T& value, ::std::ostream* os) { + UniversalPrint(value, os); + } +}; +template +class UniversalTersePrinter { + public: + static void Print(const T (&value)[N], ::std::ostream* os) { + UniversalPrinter::Print(value, os); + } +}; +template <> +class UniversalTersePrinter { + public: + static void Print(const char* str, ::std::ostream* os) { + if (str == NULL) { + *os << "NULL"; + } else { + UniversalPrint(string(str), os); + } + } +}; +template <> +class UniversalTersePrinter { + public: + static void Print(char* str, ::std::ostream* os) { + UniversalTersePrinter::Print(str, os); + } +}; + +#if GTEST_HAS_STD_WSTRING +template <> +class UniversalTersePrinter { + public: + static void Print(const wchar_t* str, ::std::ostream* os) { + if (str == NULL) { + *os << "NULL"; + } else { + UniversalPrint(::std::wstring(str), os); + } + } +}; +#endif + +template <> +class UniversalTersePrinter { + public: + static void Print(wchar_t* str, ::std::ostream* os) { + UniversalTersePrinter::Print(str, os); + } +}; + +template +void UniversalTersePrint(const T& value, ::std::ostream* os) { + UniversalTersePrinter::Print(value, os); +} + +// Prints a value using the type inferred by the compiler. The +// difference between this and UniversalTersePrint() is that for a +// (const) char pointer, this prints both the pointer and the +// NUL-terminated string. +template +void UniversalPrint(const T& value, ::std::ostream* os) { + // A workarond for the bug in VC++ 7.1 that prevents us from instantiating + // UniversalPrinter with T directly. + typedef T T1; + UniversalPrinter::Print(value, os); +} + +#if GTEST_HAS_TR1_TUPLE +typedef ::std::vector Strings; + +// This helper template allows PrintTo() for tuples and +// UniversalTersePrintTupleFieldsToStrings() to be defined by +// induction on the number of tuple fields. The idea is that +// TuplePrefixPrinter::PrintPrefixTo(t, os) prints the first N +// fields in tuple t, and can be defined in terms of +// TuplePrefixPrinter. + +// The inductive case. +template +struct TuplePrefixPrinter { + // Prints the first N fields of a tuple. + template + static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { + TuplePrefixPrinter::PrintPrefixTo(t, os); + *os << ", "; + UniversalPrinter::type> + ::Print(::std::tr1::get(t), os); + } + + // Tersely prints the first N fields of a tuple to a string vector, + // one element for each field. + template + static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { + TuplePrefixPrinter::TersePrintPrefixToStrings(t, strings); + ::std::stringstream ss; + UniversalTersePrint(::std::tr1::get(t), &ss); + strings->push_back(ss.str()); + } +}; + +// Base cases. +template <> +struct TuplePrefixPrinter<0> { + template + static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} + + template + static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} +}; +// We have to specialize the entire TuplePrefixPrinter<> class +// template here, even though the definition of +// TersePrintPrefixToStrings() is the same as the generic version, as +// Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't +// support specializing a method template of a class template. +template <> +struct TuplePrefixPrinter<1> { + template + static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { + UniversalPrinter::type>:: + Print(::std::tr1::get<0>(t), os); + } + + template + static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { + ::std::stringstream ss; + UniversalTersePrint(::std::tr1::get<0>(t), &ss); + strings->push_back(ss.str()); + } +}; + +// Helper function for printing a tuple. T must be instantiated with +// a tuple type. +template +void PrintTupleTo(const T& t, ::std::ostream* os) { + *os << "("; + TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: + PrintPrefixTo(t, os); + *os << ")"; +} + +// Prints the fields of a tuple tersely to a string vector, one +// element for each field. See the comment before +// UniversalTersePrint() for how we define "tersely". +template +Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { + Strings result; + TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: + TersePrintPrefixToStrings(value, &result); + return result; +} +#endif // GTEST_HAS_TR1_TUPLE + +} // namespace internal + +template +::std::string PrintToString(const T& value) { + ::std::stringstream ss; + internal::UniversalTersePrinter::Print(value, &ss); + return ss.str(); +} + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ + +#if GTEST_HAS_PARAM_TEST + +namespace testing { +namespace internal { + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Outputs a message explaining invalid registration of different +// fixture class for the same test case. This may happen when +// TEST_P macro is used to define two tests with the same name +// but in different namespaces. +GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line); + +template class ParamGeneratorInterface; +template class ParamGenerator; + +// Interface for iterating over elements provided by an implementation +// of ParamGeneratorInterface. +template +class ParamIteratorInterface { + public: + virtual ~ParamIteratorInterface() {} + // A pointer to the base generator instance. + // Used only for the purposes of iterator comparison + // to make sure that two iterators belong to the same generator. + virtual const ParamGeneratorInterface* BaseGenerator() const = 0; + // Advances iterator to point to the next element + // provided by the generator. The caller is responsible + // for not calling Advance() on an iterator equal to + // BaseGenerator()->End(). + virtual void Advance() = 0; + // Clones the iterator object. Used for implementing copy semantics + // of ParamIterator. + virtual ParamIteratorInterface* Clone() const = 0; + // Dereferences the current iterator and provides (read-only) access + // to the pointed value. It is the caller's responsibility not to call + // Current() on an iterator equal to BaseGenerator()->End(). + // Used for implementing ParamGenerator::operator*(). + virtual const T* Current() const = 0; + // Determines whether the given iterator and other point to the same + // element in the sequence generated by the generator. + // Used for implementing ParamGenerator::operator==(). + virtual bool Equals(const ParamIteratorInterface& other) const = 0; +}; + +// Class iterating over elements provided by an implementation of +// ParamGeneratorInterface. It wraps ParamIteratorInterface +// and implements the const forward iterator concept. +template +class ParamIterator { + public: + typedef T value_type; + typedef const T& reference; + typedef ptrdiff_t difference_type; + + // ParamIterator assumes ownership of the impl_ pointer. + ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} + ParamIterator& operator=(const ParamIterator& other) { + if (this != &other) + impl_.reset(other.impl_->Clone()); + return *this; + } + + const T& operator*() const { return *impl_->Current(); } + const T* operator->() const { return impl_->Current(); } + // Prefix version of operator++. + ParamIterator& operator++() { + impl_->Advance(); + return *this; + } + // Postfix version of operator++. + ParamIterator operator++(int /*unused*/) { + ParamIteratorInterface* clone = impl_->Clone(); + impl_->Advance(); + return ParamIterator(clone); + } + bool operator==(const ParamIterator& other) const { + return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); + } + bool operator!=(const ParamIterator& other) const { + return !(*this == other); + } + + private: + friend class ParamGenerator; + explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} + scoped_ptr > impl_; +}; + +// ParamGeneratorInterface is the binary interface to access generators +// defined in other translation units. +template +class ParamGeneratorInterface { + public: + typedef T ParamType; + + virtual ~ParamGeneratorInterface() {} + + // Generator interface definition + virtual ParamIteratorInterface* Begin() const = 0; + virtual ParamIteratorInterface* End() const = 0; +}; + +// Wraps ParamGeneratorInterface and provides general generator syntax +// compatible with the STL Container concept. +// This class implements copy initialization semantics and the contained +// ParamGeneratorInterface instance is shared among all copies +// of the original object. This is possible because that instance is immutable. +template +class ParamGenerator { + public: + typedef ParamIterator iterator; + + explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} + ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} + + ParamGenerator& operator=(const ParamGenerator& other) { + impl_ = other.impl_; + return *this; + } + + iterator begin() const { return iterator(impl_->Begin()); } + iterator end() const { return iterator(impl_->End()); } + + private: + linked_ptr > impl_; +}; + +// Generates values from a range of two comparable values. Can be used to +// generate sequences of user-defined types that implement operator+() and +// operator<(). +// This class is used in the Range() function. +template +class RangeGenerator : public ParamGeneratorInterface { + public: + RangeGenerator(T begin, T end, IncrementT step) + : begin_(begin), end_(end), + step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} + virtual ~RangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, begin_, 0, step_); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, end_, end_index_, step_); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, T value, int index, + IncrementT step) + : base_(base), value_(value), index_(index), step_(step) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + value_ = value_ + step_; + index_++; + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const T* Current() const { return &value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const int other_index = + CheckedDowncastToActualType(&other)->index_; + return index_ == other_index; + } + + private: + Iterator(const Iterator& other) + : ParamIteratorInterface(), + base_(other.base_), value_(other.value_), index_(other.index_), + step_(other.step_) {} + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + T value_; + int index_; + const IncrementT step_; + }; // class RangeGenerator::Iterator + + static int CalculateEndIndex(const T& begin, + const T& end, + const IncrementT& step) { + int end_index = 0; + for (T i = begin; i < end; i = i + step) + end_index++; + return end_index; + } + + // No implementation - assignment is unsupported. + void operator=(const RangeGenerator& other); + + const T begin_; + const T end_; + const IncrementT step_; + // The index for the end() iterator. All the elements in the generated + // sequence are indexed (0-based) to aid iterator comparison. + const int end_index_; +}; // class RangeGenerator + + +// Generates values from a pair of STL-style iterators. Used in the +// ValuesIn() function. The elements are copied from the source range +// since the source can be located on the stack, and the generator +// is likely to persist beyond that stack frame. +template +class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { + public: + template + ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) + : container_(begin, end) {} + virtual ~ValuesInIteratorRangeGenerator() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, container_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, container_.end()); + } + + private: + typedef typename ::std::vector ContainerType; + + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + typename ContainerType::const_iterator iterator) + : base_(base), iterator_(iterator) {} + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + virtual void Advance() { + ++iterator_; + value_.reset(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + // We need to use cached value referenced by iterator_ because *iterator_ + // can return a temporary object (and of type other then T), so just + // having "return &*iterator_;" doesn't work. + // value_ is updated here and not in Advance() because Advance() + // can advance iterator_ beyond the end of the range, and we cannot + // detect that fact. The client code, on the other hand, is + // responsible for not calling Current() on an out-of-range iterator. + virtual const T* Current() const { + if (value_.get() == NULL) + value_.reset(new T(*iterator_)); + return value_.get(); + } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + return iterator_ == + CheckedDowncastToActualType(&other)->iterator_; + } + + private: + Iterator(const Iterator& other) + // The explicit constructor call suppresses a false warning + // emitted by gcc when supplied with the -Wextra option. + : ParamIteratorInterface(), + base_(other.base_), + iterator_(other.iterator_) {} + + const ParamGeneratorInterface* const base_; + typename ContainerType::const_iterator iterator_; + // A cached value of *iterator_. We keep it here to allow access by + // pointer in the wrapping iterator's operator->(). + // value_ needs to be mutable to be accessed in Current(). + // Use of scoped_ptr helps manage cached value's lifetime, + // which is bound by the lifespan of the iterator itself. + mutable scoped_ptr value_; + }; // class ValuesInIteratorRangeGenerator::Iterator + + // No implementation - assignment is unsupported. + void operator=(const ValuesInIteratorRangeGenerator& other); + + const ContainerType container_; +}; // class ValuesInIteratorRangeGenerator + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Stores a parameter value and later creates tests parameterized with that +// value. +template +class ParameterizedTestFactory : public TestFactoryBase { + public: + typedef typename TestClass::ParamType ParamType; + explicit ParameterizedTestFactory(ParamType parameter) : + parameter_(parameter) {} + virtual Test* CreateTest() { + TestClass::SetParam(¶meter_); + return new TestClass(); + } + + private: + const ParamType parameter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactoryBase is a base class for meta-factories that create +// test factories for passing into MakeAndRegisterTestInfo function. +template +class TestMetaFactoryBase { + public: + virtual ~TestMetaFactoryBase() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// TestMetaFactory creates test factories for passing into +// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives +// ownership of test factory pointer, same factory object cannot be passed +// into that method twice. But ParameterizedTestCaseInfo is going to call +// it for each Test/Parameter value combination. Thus it needs meta factory +// creator class. +template +class TestMetaFactory + : public TestMetaFactoryBase { + public: + typedef typename TestCase::ParamType ParamType; + + TestMetaFactory() {} + + virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { + return new ParameterizedTestFactory(parameter); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfoBase is a generic interface +// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase +// accumulates test information provided by TEST_P macro invocations +// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations +// and uses that information to register all resulting test instances +// in RegisterTests method. The ParameterizeTestCaseRegistry class holds +// a collection of pointers to the ParameterizedTestCaseInfo objects +// and calls RegisterTests() on each of them when asked. +class ParameterizedTestCaseInfoBase { + public: + virtual ~ParameterizedTestCaseInfoBase() {} + + // Base part of test case name for display purposes. + virtual const string& GetTestCaseName() const = 0; + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const = 0; + // UnitTest class invokes this method to register tests in this + // test case right before running them in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + virtual void RegisterTests() = 0; + + protected: + ParameterizedTestCaseInfoBase() {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P +// macro invocations for a particular test case and generators +// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that +// test case. It registers tests with all values generated by all +// generators when asked. +template +class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { + public: + // ParamType and GeneratorCreationFunc are private types but are required + // for declarations of public methods AddTestPattern() and + // AddTestCaseInstantiation(). + typedef typename TestCase::ParamType ParamType; + // A function that returns an instance of appropriate generator type. + typedef ParamGenerator(GeneratorCreationFunc)(); + + explicit ParameterizedTestCaseInfo(const char* name) + : test_case_name_(name) {} + + // Test case base name for display purposes. + virtual const string& GetTestCaseName() const { return test_case_name_; } + // Test case id to verify identity. + virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } + // TEST_P macro uses AddTestPattern() to record information + // about a single test in a LocalTestInfo structure. + // test_case_name is the base name of the test case (without invocation + // prefix). test_base_name is the name of an individual test without + // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is + // test case base name and DoBar is test base name. + void AddTestPattern(const char* test_case_name, + const char* test_base_name, + TestMetaFactoryBase* meta_factory) { + tests_.push_back(linked_ptr(new TestInfo(test_case_name, + test_base_name, + meta_factory))); + } + // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information + // about a generator. + int AddTestCaseInstantiation(const string& instantiation_name, + GeneratorCreationFunc* func, + const char* /* file */, + int /* line */) { + instantiations_.push_back(::std::make_pair(instantiation_name, func)); + return 0; // Return value used only to run this method in namespace scope. + } + // UnitTest class invokes this method to register tests in this test case + // test cases right before running tests in RUN_ALL_TESTS macro. + // This method should not be called more then once on any single + // instance of a ParameterizedTestCaseInfoBase derived class. + // UnitTest has a guard to prevent from calling this method more then once. + virtual void RegisterTests() { + for (typename TestInfoContainer::iterator test_it = tests_.begin(); + test_it != tests_.end(); ++test_it) { + linked_ptr test_info = *test_it; + for (typename InstantiationContainer::iterator gen_it = + instantiations_.begin(); gen_it != instantiations_.end(); + ++gen_it) { + const string& instantiation_name = gen_it->first; + ParamGenerator generator((*gen_it->second)()); + + string test_case_name; + if ( !instantiation_name.empty() ) + test_case_name = instantiation_name + "/"; + test_case_name += test_info->test_case_base_name; + + int i = 0; + for (typename ParamGenerator::iterator param_it = + generator.begin(); + param_it != generator.end(); ++param_it, ++i) { + Message test_name_stream; + test_name_stream << test_info->test_base_name << "/" << i; + MakeAndRegisterTestInfo( + test_case_name.c_str(), + test_name_stream.GetString().c_str(), + NULL, // No type parameter. + PrintToString(*param_it).c_str(), + GetTestCaseTypeId(), + TestCase::SetUpTestCase, + TestCase::TearDownTestCase, + test_info->test_meta_factory->CreateTestFactory(*param_it)); + } // for param_it + } // for gen_it + } // for test_it + } // RegisterTests + + private: + // LocalTestInfo structure keeps information about a single test registered + // with TEST_P macro. + struct TestInfo { + TestInfo(const char* a_test_case_base_name, + const char* a_test_base_name, + TestMetaFactoryBase* a_test_meta_factory) : + test_case_base_name(a_test_case_base_name), + test_base_name(a_test_base_name), + test_meta_factory(a_test_meta_factory) {} + + const string test_case_base_name; + const string test_base_name; + const scoped_ptr > test_meta_factory; + }; + typedef ::std::vector > TestInfoContainer; + // Keeps pairs of + // received from INSTANTIATE_TEST_CASE_P macros. + typedef ::std::vector > + InstantiationContainer; + + const string test_case_name_; + TestInfoContainer tests_; + InstantiationContainer instantiations_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); +}; // class ParameterizedTestCaseInfo + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase +// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P +// macros use it to locate their corresponding ParameterizedTestCaseInfo +// descriptors. +class ParameterizedTestCaseRegistry { + public: + ParameterizedTestCaseRegistry() {} + ~ParameterizedTestCaseRegistry() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + delete *it; + } + } + + // Looks up or creates and returns a structure containing information about + // tests and instantiations of a particular test case. + template + ParameterizedTestCaseInfo* GetTestCasePatternHolder( + const char* test_case_name, + const char* file, + int line) { + ParameterizedTestCaseInfo* typed_test_info = NULL; + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + if ((*it)->GetTestCaseName() == test_case_name) { + if ((*it)->GetTestCaseTypeId() != GetTypeId()) { + // Complain about incorrect usage of Google Test facilities + // and terminate the program since we cannot guaranty correct + // test case setup and tear-down in this case. + ReportInvalidTestCaseType(test_case_name, file, line); + posix::Abort(); + } else { + // At this point we are sure that the object we found is of the same + // type we are looking for, so we downcast it to that type + // without further checks. + typed_test_info = CheckedDowncastToActualType< + ParameterizedTestCaseInfo >(*it); + } + break; + } + } + if (typed_test_info == NULL) { + typed_test_info = new ParameterizedTestCaseInfo(test_case_name); + test_case_infos_.push_back(typed_test_info); + } + return typed_test_info; + } + void RegisterTests() { + for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); + it != test_case_infos_.end(); ++it) { + (*it)->RegisterTests(); + } + } + + private: + typedef ::std::vector TestCaseInfoContainer; + + TestCaseInfoContainer test_case_infos_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); +}; + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +// This file was GENERATED by command: +// pump.py gtest-param-util-generated.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vladl@google.com (Vlad Losev) + +// Type and function utilities for implementing parameterized tests. +// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! +// +// Currently Google Test supports at most 50 arguments in Values, +// and at most 10 arguments in Combine. Please contact +// googletestframework@googlegroups.com if you need more. +// Please note that the number of arguments to Combine is limited +// by the maximum arity of the implementation of tr1::tuple which is +// currently set at 10. + +#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ +#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +// scripts/fuse_gtest.py depends on gtest's own header being #included +// *unconditionally*. Therefore these #includes cannot be moved +// inside #if GTEST_HAS_PARAM_TEST. + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Forward declarations of ValuesIn(), which is implemented in +// include/gtest/gtest-param-test.h. +template +internal::ParamGenerator< + typename ::testing::internal::IteratorTraits::value_type> +ValuesIn(ForwardIterator begin, ForwardIterator end); + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]); + +template +internal::ParamGenerator ValuesIn( + const Container& container); + +namespace internal { + +// Used in the Values() function to provide polymorphic capabilities. +template +class ValueArray1 { + public: + explicit ValueArray1(T1 v1) : v1_(v1) {} + + template + operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray1& other); + + const T1 v1_; +}; + +template +class ValueArray2 { + public: + ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray2& other); + + const T1 v1_; + const T2 v2_; +}; + +template +class ValueArray3 { + public: + ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray3& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; +}; + +template +class ValueArray4 { + public: + ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray4& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; +}; + +template +class ValueArray5 { + public: + ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray5& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; +}; + +template +class ValueArray6 { + public: + ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray6& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; +}; + +template +class ValueArray7 { + public: + ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray7& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; +}; + +template +class ValueArray8 { + public: + ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray8& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; +}; + +template +class ValueArray9 { + public: + ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray9& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; +}; + +template +class ValueArray10 { + public: + ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray10& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; +}; + +template +class ValueArray11 { + public: + ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray11& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; +}; + +template +class ValueArray12 { + public: + ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray12& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; +}; + +template +class ValueArray13 { + public: + ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray13& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; +}; + +template +class ValueArray14 { + public: + ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray14& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; +}; + +template +class ValueArray15 { + public: + ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray15& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; +}; + +template +class ValueArray16 { + public: + ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray16& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; +}; + +template +class ValueArray17 { + public: + ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray17& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; +}; + +template +class ValueArray18 { + public: + ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray18& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; +}; + +template +class ValueArray19 { + public: + ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray19& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; +}; + +template +class ValueArray20 { + public: + ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray20& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; +}; + +template +class ValueArray21 { + public: + ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray21& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; +}; + +template +class ValueArray22 { + public: + ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray22& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; +}; + +template +class ValueArray23 { + public: + ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray23& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; +}; + +template +class ValueArray24 { + public: + ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray24& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; +}; + +template +class ValueArray25 { + public: + ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray25& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; +}; + +template +class ValueArray26 { + public: + ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray26& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; +}; + +template +class ValueArray27 { + public: + ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray27& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; +}; + +template +class ValueArray28 { + public: + ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray28& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; +}; + +template +class ValueArray29 { + public: + ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray29& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; +}; + +template +class ValueArray30 { + public: + ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray30& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; +}; + +template +class ValueArray31 { + public: + ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray31& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; +}; + +template +class ValueArray32 { + public: + ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray32& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; +}; + +template +class ValueArray33 { + public: + ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray33& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; +}; + +template +class ValueArray34 { + public: + ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray34& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; +}; + +template +class ValueArray35 { + public: + ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray35& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; +}; + +template +class ValueArray36 { + public: + ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray36& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; +}; + +template +class ValueArray37 { + public: + ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray37& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; +}; + +template +class ValueArray38 { + public: + ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray38& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; +}; + +template +class ValueArray39 { + public: + ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray39& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; +}; + +template +class ValueArray40 { + public: + ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray40& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; +}; + +template +class ValueArray41 { + public: + ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray41& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; +}; + +template +class ValueArray42 { + public: + ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray42& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; +}; + +template +class ValueArray43 { + public: + ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), + v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), + v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), + v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), + v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), + v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), + v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray43& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; +}; + +template +class ValueArray44 { + public: + ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), + v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), + v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), + v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), + v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), + v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), + v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), + v43_(v43), v44_(v44) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray44& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; +}; + +template +class ValueArray45 { + public: + ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), + v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), + v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), + v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), + v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), + v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), + v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), + v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray45& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; +}; + +template +class ValueArray46 { + public: + ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), + v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_), static_cast(v46_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray46& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; +}; + +template +class ValueArray47 { + public: + ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), + v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), + v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), + v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), + v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), + v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), + v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), + v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), + v47_(v47) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_), static_cast(v46_), static_cast(v47_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray47& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; +}; + +template +class ValueArray48 { + public: + ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), + v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), + v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), + v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), + v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), + v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), + v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), + v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), + v46_(v46), v47_(v47), v48_(v48) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_), static_cast(v46_), static_cast(v47_), + static_cast(v48_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray48& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; +}; + +template +class ValueArray49 { + public: + ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, + T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_), static_cast(v46_), static_cast(v47_), + static_cast(v48_), static_cast(v49_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray49& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; +}; + +template +class ValueArray50 { + public: + ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, + T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), + v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), + v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), + v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), + v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), + v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), + v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), + v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} + + template + operator ParamGenerator() const { + const T array[] = {static_cast(v1_), static_cast(v2_), + static_cast(v3_), static_cast(v4_), static_cast(v5_), + static_cast(v6_), static_cast(v7_), static_cast(v8_), + static_cast(v9_), static_cast(v10_), static_cast(v11_), + static_cast(v12_), static_cast(v13_), static_cast(v14_), + static_cast(v15_), static_cast(v16_), static_cast(v17_), + static_cast(v18_), static_cast(v19_), static_cast(v20_), + static_cast(v21_), static_cast(v22_), static_cast(v23_), + static_cast(v24_), static_cast(v25_), static_cast(v26_), + static_cast(v27_), static_cast(v28_), static_cast(v29_), + static_cast(v30_), static_cast(v31_), static_cast(v32_), + static_cast(v33_), static_cast(v34_), static_cast(v35_), + static_cast(v36_), static_cast(v37_), static_cast(v38_), + static_cast(v39_), static_cast(v40_), static_cast(v41_), + static_cast(v42_), static_cast(v43_), static_cast(v44_), + static_cast(v45_), static_cast(v46_), static_cast(v47_), + static_cast(v48_), static_cast(v49_), static_cast(v50_)}; + return ValuesIn(array); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const ValueArray50& other); + + const T1 v1_; + const T2 v2_; + const T3 v3_; + const T4 v4_; + const T5 v5_; + const T6 v6_; + const T7 v7_; + const T8 v8_; + const T9 v9_; + const T10 v10_; + const T11 v11_; + const T12 v12_; + const T13 v13_; + const T14 v14_; + const T15 v15_; + const T16 v16_; + const T17 v17_; + const T18 v18_; + const T19 v19_; + const T20 v20_; + const T21 v21_; + const T22 v22_; + const T23 v23_; + const T24 v24_; + const T25 v25_; + const T26 v26_; + const T27 v27_; + const T28 v28_; + const T29 v29_; + const T30 v30_; + const T31 v31_; + const T32 v32_; + const T33 v33_; + const T34 v34_; + const T35 v35_; + const T36 v36_; + const T37 v37_; + const T38 v38_; + const T39 v39_; + const T40 v40_; + const T41 v41_; + const T42 v42_; + const T43 v43_; + const T44 v44_; + const T45 v45_; + const T46 v46_; + const T47 v47_; + const T48 v48_; + const T49 v49_; + const T50 v50_; +}; + +# if GTEST_HAS_COMBINE +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Generates values from the Cartesian product of values produced +// by the argument generators. +// +template +class CartesianProductGenerator2 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator2(const ParamGenerator& g1, + const ParamGenerator& g2) + : g1_(g1), g2_(g2) {} + virtual ~CartesianProductGenerator2() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current2_; + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + ParamType current_value_; + }; // class CartesianProductGenerator2::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator2& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; +}; // class CartesianProductGenerator2 + + +template +class CartesianProductGenerator3 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator3(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + virtual ~CartesianProductGenerator3() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current3_; + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + ParamType current_value_; + }; // class CartesianProductGenerator3::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator3& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; +}; // class CartesianProductGenerator3 + + +template +class CartesianProductGenerator4 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator4(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + virtual ~CartesianProductGenerator4() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current4_; + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + ParamType current_value_; + }; // class CartesianProductGenerator4::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator4& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; +}; // class CartesianProductGenerator4 + + +template +class CartesianProductGenerator5 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator5(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + virtual ~CartesianProductGenerator5() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current5_; + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + ParamType current_value_; + }; // class CartesianProductGenerator5::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator5& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; +}; // class CartesianProductGenerator5 + + +template +class CartesianProductGenerator6 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator6(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + virtual ~CartesianProductGenerator6() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current6_; + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + ParamType current_value_; + }; // class CartesianProductGenerator6::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator6& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; +}; // class CartesianProductGenerator6 + + +template +class CartesianProductGenerator7 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator7(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + virtual ~CartesianProductGenerator7() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current7_; + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + ParamType current_value_; + }; // class CartesianProductGenerator7::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator7& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; +}; // class CartesianProductGenerator7 + + +template +class CartesianProductGenerator8 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator8(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + virtual ~CartesianProductGenerator8() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current8_; + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + ParamType current_value_; + }; // class CartesianProductGenerator8::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator8& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; +}; // class CartesianProductGenerator8 + + +template +class CartesianProductGenerator9 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator9(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + virtual ~CartesianProductGenerator9() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current9_; + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + ParamType current_value_; + }; // class CartesianProductGenerator9::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator9& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; +}; // class CartesianProductGenerator9 + + +template +class CartesianProductGenerator10 + : public ParamGeneratorInterface< ::std::tr1::tuple > { + public: + typedef ::std::tr1::tuple ParamType; + + CartesianProductGenerator10(const ParamGenerator& g1, + const ParamGenerator& g2, const ParamGenerator& g3, + const ParamGenerator& g4, const ParamGenerator& g5, + const ParamGenerator& g6, const ParamGenerator& g7, + const ParamGenerator& g8, const ParamGenerator& g9, + const ParamGenerator& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + virtual ~CartesianProductGenerator10() {} + + virtual ParamIteratorInterface* Begin() const { + return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, + g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, + g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); + } + virtual ParamIteratorInterface* End() const { + return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), + g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, + g8_.end(), g9_, g9_.end(), g10_, g10_.end()); + } + + private: + class Iterator : public ParamIteratorInterface { + public: + Iterator(const ParamGeneratorInterface* base, + const ParamGenerator& g1, + const typename ParamGenerator::iterator& current1, + const ParamGenerator& g2, + const typename ParamGenerator::iterator& current2, + const ParamGenerator& g3, + const typename ParamGenerator::iterator& current3, + const ParamGenerator& g4, + const typename ParamGenerator::iterator& current4, + const ParamGenerator& g5, + const typename ParamGenerator::iterator& current5, + const ParamGenerator& g6, + const typename ParamGenerator::iterator& current6, + const ParamGenerator& g7, + const typename ParamGenerator::iterator& current7, + const ParamGenerator& g8, + const typename ParamGenerator::iterator& current8, + const ParamGenerator& g9, + const typename ParamGenerator::iterator& current9, + const ParamGenerator& g10, + const typename ParamGenerator::iterator& current10) + : base_(base), + begin1_(g1.begin()), end1_(g1.end()), current1_(current1), + begin2_(g2.begin()), end2_(g2.end()), current2_(current2), + begin3_(g3.begin()), end3_(g3.end()), current3_(current3), + begin4_(g4.begin()), end4_(g4.end()), current4_(current4), + begin5_(g5.begin()), end5_(g5.end()), current5_(current5), + begin6_(g6.begin()), end6_(g6.end()), current6_(current6), + begin7_(g7.begin()), end7_(g7.end()), current7_(current7), + begin8_(g8.begin()), end8_(g8.end()), current8_(current8), + begin9_(g9.begin()), end9_(g9.end()), current9_(current9), + begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { + ComputeCurrentValue(); + } + virtual ~Iterator() {} + + virtual const ParamGeneratorInterface* BaseGenerator() const { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + virtual void Advance() { + assert(!AtEnd()); + ++current10_; + if (current10_ == end10_) { + current10_ = begin10_; + ++current9_; + } + if (current9_ == end9_) { + current9_ = begin9_; + ++current8_; + } + if (current8_ == end8_) { + current8_ = begin8_; + ++current7_; + } + if (current7_ == end7_) { + current7_ = begin7_; + ++current6_; + } + if (current6_ == end6_) { + current6_ = begin6_; + ++current5_; + } + if (current5_ == end5_) { + current5_ = begin5_; + ++current4_; + } + if (current4_ == end4_) { + current4_ = begin4_; + ++current3_; + } + if (current3_ == end3_) { + current3_ = begin3_; + ++current2_; + } + if (current2_ == end2_) { + current2_ = begin2_; + ++current1_; + } + ComputeCurrentValue(); + } + virtual ParamIteratorInterface* Clone() const { + return new Iterator(*this); + } + virtual const ParamType* Current() const { return ¤t_value_; } + virtual bool Equals(const ParamIteratorInterface& other) const { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const Iterator* typed_other = + CheckedDowncastToActualType(&other); + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + return (AtEnd() && typed_other->AtEnd()) || + ( + current1_ == typed_other->current1_ && + current2_ == typed_other->current2_ && + current3_ == typed_other->current3_ && + current4_ == typed_other->current4_ && + current5_ == typed_other->current5_ && + current6_ == typed_other->current6_ && + current7_ == typed_other->current7_ && + current8_ == typed_other->current8_ && + current9_ == typed_other->current9_ && + current10_ == typed_other->current10_); + } + + private: + Iterator(const Iterator& other) + : base_(other.base_), + begin1_(other.begin1_), + end1_(other.end1_), + current1_(other.current1_), + begin2_(other.begin2_), + end2_(other.end2_), + current2_(other.current2_), + begin3_(other.begin3_), + end3_(other.end3_), + current3_(other.current3_), + begin4_(other.begin4_), + end4_(other.end4_), + current4_(other.current4_), + begin5_(other.begin5_), + end5_(other.end5_), + current5_(other.current5_), + begin6_(other.begin6_), + end6_(other.end6_), + current6_(other.current6_), + begin7_(other.begin7_), + end7_(other.end7_), + current7_(other.current7_), + begin8_(other.begin8_), + end8_(other.end8_), + current8_(other.current8_), + begin9_(other.begin9_), + end9_(other.end9_), + current9_(other.current9_), + begin10_(other.begin10_), + end10_(other.end10_), + current10_(other.current10_) { + ComputeCurrentValue(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = ParamType(*current1_, *current2_, *current3_, + *current4_, *current5_, *current6_, *current7_, *current8_, + *current9_, *current10_); + } + bool AtEnd() const { + // We must report iterator past the end of the range when either of the + // component iterators has reached the end of its range. + return + current1_ == end1_ || + current2_ == end2_ || + current3_ == end3_ || + current4_ == end4_ || + current5_ == end5_ || + current6_ == end6_ || + current7_ == end7_ || + current8_ == end8_ || + current9_ == end9_ || + current10_ == end10_; + } + + // No implementation - assignment is unsupported. + void operator=(const Iterator& other); + + const ParamGeneratorInterface* const base_; + // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. + // current[i]_ is the actual traversing iterator. + const typename ParamGenerator::iterator begin1_; + const typename ParamGenerator::iterator end1_; + typename ParamGenerator::iterator current1_; + const typename ParamGenerator::iterator begin2_; + const typename ParamGenerator::iterator end2_; + typename ParamGenerator::iterator current2_; + const typename ParamGenerator::iterator begin3_; + const typename ParamGenerator::iterator end3_; + typename ParamGenerator::iterator current3_; + const typename ParamGenerator::iterator begin4_; + const typename ParamGenerator::iterator end4_; + typename ParamGenerator::iterator current4_; + const typename ParamGenerator::iterator begin5_; + const typename ParamGenerator::iterator end5_; + typename ParamGenerator::iterator current5_; + const typename ParamGenerator::iterator begin6_; + const typename ParamGenerator::iterator end6_; + typename ParamGenerator::iterator current6_; + const typename ParamGenerator::iterator begin7_; + const typename ParamGenerator::iterator end7_; + typename ParamGenerator::iterator current7_; + const typename ParamGenerator::iterator begin8_; + const typename ParamGenerator::iterator end8_; + typename ParamGenerator::iterator current8_; + const typename ParamGenerator::iterator begin9_; + const typename ParamGenerator::iterator end9_; + typename ParamGenerator::iterator current9_; + const typename ParamGenerator::iterator begin10_; + const typename ParamGenerator::iterator end10_; + typename ParamGenerator::iterator current10_; + ParamType current_value_; + }; // class CartesianProductGenerator10::Iterator + + // No implementation - assignment is unsupported. + void operator=(const CartesianProductGenerator10& other); + + const ParamGenerator g1_; + const ParamGenerator g2_; + const ParamGenerator g3_; + const ParamGenerator g4_; + const ParamGenerator g5_; + const ParamGenerator g6_; + const ParamGenerator g7_; + const ParamGenerator g8_; + const ParamGenerator g9_; + const ParamGenerator g10_; +}; // class CartesianProductGenerator10 + + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Helper classes providing Combine() with polymorphic features. They allow +// casting CartesianProductGeneratorN to ParamGenerator if T is +// convertible to U. +// +template +class CartesianProductHolder2 { + public: +CartesianProductHolder2(const Generator1& g1, const Generator2& g2) + : g1_(g1), g2_(g2) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator2( + static_cast >(g1_), + static_cast >(g2_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder2& other); + + const Generator1 g1_; + const Generator2 g2_; +}; // class CartesianProductHolder2 + +template +class CartesianProductHolder3 { + public: +CartesianProductHolder3(const Generator1& g1, const Generator2& g2, + const Generator3& g3) + : g1_(g1), g2_(g2), g3_(g3) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator3( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder3& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; +}; // class CartesianProductHolder3 + +template +class CartesianProductHolder4 { + public: +CartesianProductHolder4(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator4( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder4& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; +}; // class CartesianProductHolder4 + +template +class CartesianProductHolder5 { + public: +CartesianProductHolder5(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator5( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder5& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; +}; // class CartesianProductHolder5 + +template +class CartesianProductHolder6 { + public: +CartesianProductHolder6(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator6( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder6& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; +}; // class CartesianProductHolder6 + +template +class CartesianProductHolder7 { + public: +CartesianProductHolder7(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator7( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder7& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; +}; // class CartesianProductHolder7 + +template +class CartesianProductHolder8 { + public: +CartesianProductHolder8(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), + g8_(g8) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator8( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder8& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; +}; // class CartesianProductHolder8 + +template +class CartesianProductHolder9 { + public: +CartesianProductHolder9(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator9( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder9& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; +}; // class CartesianProductHolder9 + +template +class CartesianProductHolder10 { + public: +CartesianProductHolder10(const Generator1& g1, const Generator2& g2, + const Generator3& g3, const Generator4& g4, const Generator5& g5, + const Generator6& g6, const Generator7& g7, const Generator8& g8, + const Generator9& g9, const Generator10& g10) + : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), + g9_(g9), g10_(g10) {} + template + operator ParamGenerator< ::std::tr1::tuple >() const { + return ParamGenerator< ::std::tr1::tuple >( + new CartesianProductGenerator10( + static_cast >(g1_), + static_cast >(g2_), + static_cast >(g3_), + static_cast >(g4_), + static_cast >(g5_), + static_cast >(g6_), + static_cast >(g7_), + static_cast >(g8_), + static_cast >(g9_), + static_cast >(g10_))); + } + + private: + // No implementation - assignment is unsupported. + void operator=(const CartesianProductHolder10& other); + + const Generator1 g1_; + const Generator2 g2_; + const Generator3 g3_; + const Generator4 g4_; + const Generator5 g5_; + const Generator6 g6_; + const Generator7 g7_; + const Generator8 g8_; + const Generator9 g9_; + const Generator10 g10_; +}; // class CartesianProductHolder10 + +# endif // GTEST_HAS_COMBINE + +} // namespace internal +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ + +#if GTEST_HAS_PARAM_TEST + +namespace testing { + +// Functions producing parameter generators. +// +// Google Test uses these generators to produce parameters for value- +// parameterized tests. When a parameterized test case is instantiated +// with a particular generator, Google Test creates and runs tests +// for each element in the sequence produced by the generator. +// +// In the following sample, tests from test case FooTest are instantiated +// each three times with parameter values 3, 5, and 8: +// +// class FooTest : public TestWithParam { ... }; +// +// TEST_P(FooTest, TestThis) { +// } +// TEST_P(FooTest, TestThat) { +// } +// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); +// + +// Range() returns generators providing sequences of values in a range. +// +// Synopsis: +// Range(start, end) +// - returns a generator producing a sequence of values {start, start+1, +// start+2, ..., }. +// Range(start, end, step) +// - returns a generator producing a sequence of values {start, start+step, +// start+step+step, ..., }. +// Notes: +// * The generated sequences never include end. For example, Range(1, 5) +// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) +// returns a generator producing {1, 3, 5, 7}. +// * start and end must have the same type. That type may be any integral or +// floating-point type or a user defined type satisfying these conditions: +// * It must be assignable (have operator=() defined). +// * It must have operator+() (operator+(int-compatible type) for +// two-operand version). +// * It must have operator<() defined. +// Elements in the resulting sequences will also have that type. +// * Condition start < end must be satisfied in order for resulting sequences +// to contain any elements. +// +template +internal::ParamGenerator Range(T start, T end, IncrementT step) { + return internal::ParamGenerator( + new internal::RangeGenerator(start, end, step)); +} + +template +internal::ParamGenerator Range(T start, T end) { + return Range(start, end, 1); +} + +// ValuesIn() function allows generation of tests with parameters coming from +// a container. +// +// Synopsis: +// ValuesIn(const T (&array)[N]) +// - returns a generator producing sequences with elements from +// a C-style array. +// ValuesIn(const Container& container) +// - returns a generator producing sequences with elements from +// an STL-style container. +// ValuesIn(Iterator begin, Iterator end) +// - returns a generator producing sequences with elements from +// a range [begin, end) defined by a pair of STL-style iterators. These +// iterators can also be plain C pointers. +// +// Please note that ValuesIn copies the values from the containers +// passed in and keeps them to generate tests in RUN_ALL_TESTS(). +// +// Examples: +// +// This instantiates tests from test case StringTest +// each with C-string values of "foo", "bar", and "baz": +// +// const char* strings[] = {"foo", "bar", "baz"}; +// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); +// +// This instantiates tests from test case StlStringTest +// each with STL strings with values "a" and "b": +// +// ::std::vector< ::std::string> GetParameterStrings() { +// ::std::vector< ::std::string> v; +// v.push_back("a"); +// v.push_back("b"); +// return v; +// } +// +// INSTANTIATE_TEST_CASE_P(CharSequence, +// StlStringTest, +// ValuesIn(GetParameterStrings())); +// +// +// This will also instantiate tests from CharTest +// each with parameter values 'a' and 'b': +// +// ::std::list GetParameterChars() { +// ::std::list list; +// list.push_back('a'); +// list.push_back('b'); +// return list; +// } +// ::std::list l = GetParameterChars(); +// INSTANTIATE_TEST_CASE_P(CharSequence2, +// CharTest, +// ValuesIn(l.begin(), l.end())); +// +template +internal::ParamGenerator< + typename ::testing::internal::IteratorTraits::value_type> +ValuesIn(ForwardIterator begin, ForwardIterator end) { + typedef typename ::testing::internal::IteratorTraits + ::value_type ParamType; + return internal::ParamGenerator( + new internal::ValuesInIteratorRangeGenerator(begin, end)); +} + +template +internal::ParamGenerator ValuesIn(const T (&array)[N]) { + return ValuesIn(array, array + N); +} + +template +internal::ParamGenerator ValuesIn( + const Container& container) { + return ValuesIn(container.begin(), container.end()); +} + +// Values() allows generating tests from explicitly specified list of +// parameters. +// +// Synopsis: +// Values(T v1, T v2, ..., T vN) +// - returns a generator producing sequences with elements v1, v2, ..., vN. +// +// For example, this instantiates tests from test case BarTest each +// with values "one", "two", and "three": +// +// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); +// +// This instantiates tests from test case BazTest each with values 1, 2, 3.5. +// The exact type of values will depend on the type of parameter in BazTest. +// +// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); +// +// Currently, Values() supports from 1 to 50 parameters. +// +template +internal::ValueArray1 Values(T1 v1) { + return internal::ValueArray1(v1); +} + +template +internal::ValueArray2 Values(T1 v1, T2 v2) { + return internal::ValueArray2(v1, v2); +} + +template +internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { + return internal::ValueArray3(v1, v2, v3); +} + +template +internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { + return internal::ValueArray4(v1, v2, v3, v4); +} + +template +internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5) { + return internal::ValueArray5(v1, v2, v3, v4, v5); +} + +template +internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6) { + return internal::ValueArray6(v1, v2, v3, v4, v5, v6); +} + +template +internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7) { + return internal::ValueArray7(v1, v2, v3, v4, v5, + v6, v7); +} + +template +internal::ValueArray8 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { + return internal::ValueArray8(v1, v2, v3, v4, + v5, v6, v7, v8); +} + +template +internal::ValueArray9 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { + return internal::ValueArray9(v1, v2, v3, + v4, v5, v6, v7, v8, v9); +} + +template +internal::ValueArray10 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { + return internal::ValueArray10(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10); +} + +template +internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11) { + return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); +} + +template +internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12) { + return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); +} + +template +internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13) { + return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); +} + +template +internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { + return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14); +} + +template +internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { + return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); +} + +template +internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16) { + return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16); +} + +template +internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17) { + return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17); +} + +template +internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18) { + return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18); +} + +template +internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { + return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); +} + +template +internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { + return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); +} + +template +internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { + return internal::ValueArray21(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); +} + +template +internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22) { + return internal::ValueArray22(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22); +} + +template +internal::ValueArray23 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23) { + return internal::ValueArray23(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23); +} + +template +internal::ValueArray24 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24) { + return internal::ValueArray24(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24); +} + +template +internal::ValueArray25 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { + return internal::ValueArray25(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25); +} + +template +internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26) { + return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); +} + +template +internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27) { + return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); +} + +template +internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28) { + return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28); +} + +template +internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29) { + return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29); +} + +template +internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { + return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30); +} + +template +internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { + return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31); +} + +template +internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32) { + return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32); +} + +template +internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33) { + return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); +} + +template +internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34) { + return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); +} + +template +internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { + return internal::ValueArray35(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); +} + +template +internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { + return internal::ValueArray36(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36); +} + +template +internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, + T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37) { + return internal::ValueArray37(v1, v2, v3, + v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37); +} + +template +internal::ValueArray38 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38) { + return internal::ValueArray38(v1, v2, + v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, + v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, + v33, v34, v35, v36, v37, v38); +} + +template +internal::ValueArray39 Values(T1 v1, T2 v2, + T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, + T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, + T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, + T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, + T37 v37, T38 v38, T39 v39) { + return internal::ValueArray39(v1, + v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, + v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39); +} + +template +internal::ValueArray40 Values(T1 v1, + T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, + T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, + T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, + T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, + T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { + return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, + v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, + v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); +} + +template +internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { + return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, + v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); +} + +template +internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42) { + return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, + v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, + v42); +} + +template +internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43) { + return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, + v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, + v41, v42, v43); +} + +template +internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, + T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, + T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, + T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, + T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, + T42 v42, T43 v43, T44 v44) { + return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, + v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, + v40, v41, v42, v43, v44); +} + +template +internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, + T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, + T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, + T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, + T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, + T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { + return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, + v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, + v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, + v39, v40, v41, v42, v43, v44, v45); +} + +template +internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { + return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46); +} + +template +internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, + T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { + return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, + v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, + v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, + v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); +} + +template +internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, + T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, + T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, + T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, + T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, + T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, + T48 v48) { + return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, + v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, + v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); +} + +template +internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, + T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, + T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, + T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, + T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, + T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, + T47 v47, T48 v48, T49 v49) { + return internal::ValueArray49(v1, v2, v3, v4, v5, v6, + v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, + v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); +} + +template +internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, + T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, + T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, + T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, + T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, + T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, + T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { + return internal::ValueArray50(v1, v2, v3, v4, + v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, + v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, + v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, + v48, v49, v50); +} + +// Bool() allows generating tests with parameters in a set of (false, true). +// +// Synopsis: +// Bool() +// - returns a generator producing sequences with elements {false, true}. +// +// It is useful when testing code that depends on Boolean flags. Combinations +// of multiple flags can be tested when several Bool()'s are combined using +// Combine() function. +// +// In the following example all tests in the test case FlagDependentTest +// will be instantiated twice with parameters false and true. +// +// class FlagDependentTest : public testing::TestWithParam { +// virtual void SetUp() { +// external_flag = GetParam(); +// } +// } +// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); +// +inline internal::ParamGenerator Bool() { + return Values(false, true); +} + +# if GTEST_HAS_COMBINE +// Combine() allows the user to combine two or more sequences to produce +// values of a Cartesian product of those sequences' elements. +// +// Synopsis: +// Combine(gen1, gen2, ..., genN) +// - returns a generator producing sequences with elements coming from +// the Cartesian product of elements from the sequences generated by +// gen1, gen2, ..., genN. The sequence elements will have a type of +// tuple where T1, T2, ..., TN are the types +// of elements from sequences produces by gen1, gen2, ..., genN. +// +// Combine can have up to 10 arguments. This number is currently limited +// by the maximum number of elements in the tuple implementation used by Google +// Test. +// +// Example: +// +// This will instantiate tests in test case AnimalTest each one with +// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), +// tuple("dog", BLACK), and tuple("dog", WHITE): +// +// enum Color { BLACK, GRAY, WHITE }; +// class AnimalTest +// : public testing::TestWithParam > {...}; +// +// TEST_P(AnimalTest, AnimalLooksNice) {...} +// +// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, +// Combine(Values("cat", "dog"), +// Values(BLACK, WHITE))); +// +// This will instantiate tests in FlagDependentTest with all variations of two +// Boolean flags: +// +// class FlagDependentTest +// : public testing::TestWithParam > { +// virtual void SetUp() { +// // Assigns external_flag_1 and external_flag_2 values from the tuple. +// tie(external_flag_1, external_flag_2) = GetParam(); +// } +// }; +// +// TEST_P(FlagDependentTest, TestFeature1) { +// // Test your code using external_flag_1 and external_flag_2 here. +// } +// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, +// Combine(Bool(), Bool())); +// +template +internal::CartesianProductHolder2 Combine( + const Generator1& g1, const Generator2& g2) { + return internal::CartesianProductHolder2( + g1, g2); +} + +template +internal::CartesianProductHolder3 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3) { + return internal::CartesianProductHolder3( + g1, g2, g3); +} + +template +internal::CartesianProductHolder4 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4) { + return internal::CartesianProductHolder4( + g1, g2, g3, g4); +} + +template +internal::CartesianProductHolder5 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5) { + return internal::CartesianProductHolder5( + g1, g2, g3, g4, g5); +} + +template +internal::CartesianProductHolder6 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6) { + return internal::CartesianProductHolder6( + g1, g2, g3, g4, g5, g6); +} + +template +internal::CartesianProductHolder7 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7) { + return internal::CartesianProductHolder7( + g1, g2, g3, g4, g5, g6, g7); +} + +template +internal::CartesianProductHolder8 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8) { + return internal::CartesianProductHolder8( + g1, g2, g3, g4, g5, g6, g7, g8); +} + +template +internal::CartesianProductHolder9 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9) { + return internal::CartesianProductHolder9( + g1, g2, g3, g4, g5, g6, g7, g8, g9); +} + +template +internal::CartesianProductHolder10 Combine( + const Generator1& g1, const Generator2& g2, const Generator3& g3, + const Generator4& g4, const Generator5& g5, const Generator6& g6, + const Generator7& g7, const Generator8& g8, const Generator9& g9, + const Generator10& g10) { + return internal::CartesianProductHolder10( + g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); +} +# endif // GTEST_HAS_COMBINE + + + +# define TEST_P(test_case_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + : public test_case_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ + virtual void TestBody(); \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ + #test_case_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_case_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() + +# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ + ::testing::internal::ParamGenerator \ + gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ + int gtest_##prefix##test_case_name##_dummy_ = \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ + #prefix, \ + >est_##prefix##test_case_name##_EvalGenerator_, \ + __FILE__, __LINE__) + +} // namespace testing + +#endif // GTEST_HAS_PARAM_TEST + +#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Google C++ Testing Framework definitions useful in production code. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ + +// When you need to test the private or protected members of a class, +// use the FRIEND_TEST macro to declare your tests as friends of the +// class. For example: +// +// class MyClass { +// private: +// void MyMethod(); +// FRIEND_TEST(MyClassTest, MyMethod); +// }; +// +// class MyClassTest : public testing::Test { +// // ... +// }; +// +// TEST_F(MyClassTest, MyMethod) { +// // Can call MyClass::MyMethod() here. +// } + +#define FRIEND_TEST(test_case_name, test_name)\ +friend class test_case_name##_##test_name##_Test + +#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ + +#include +#include + +namespace testing { + +// A copyable object representing the result of a test part (i.e. an +// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). +// +// Don't inherit from TestPartResult as its destructor is not virtual. +class GTEST_API_ TestPartResult { + public: + // The possible outcomes of a test part (i.e. an assertion or an + // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). + enum Type { + kSuccess, // Succeeded. + kNonFatalFailure, // Failed but the test can continue. + kFatalFailure // Failed and the test should be terminated. + }; + + // C'tor. TestPartResult does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestPartResult object. + TestPartResult(Type a_type, + const char* a_file_name, + int a_line_number, + const char* a_message) + : type_(a_type), + file_name_(a_file_name == NULL ? "" : a_file_name), + line_number_(a_line_number), + summary_(ExtractSummary(a_message)), + message_(a_message) { + } + + // Gets the outcome of the test part. + Type type() const { return type_; } + + // Gets the name of the source file where the test part took place, or + // NULL if it's unknown. + const char* file_name() const { + return file_name_.empty() ? NULL : file_name_.c_str(); + } + + // Gets the line in the source file where the test part took place, + // or -1 if it's unknown. + int line_number() const { return line_number_; } + + // Gets the summary of the failure message. + const char* summary() const { return summary_.c_str(); } + + // Gets the message associated with the test part. + const char* message() const { return message_.c_str(); } + + // Returns true iff the test part passed. + bool passed() const { return type_ == kSuccess; } + + // Returns true iff the test part failed. + bool failed() const { return type_ != kSuccess; } + + // Returns true iff the test part non-fatally failed. + bool nonfatally_failed() const { return type_ == kNonFatalFailure; } + + // Returns true iff the test part fatally failed. + bool fatally_failed() const { return type_ == kFatalFailure; } + + private: + Type type_; + + // Gets the summary of the failure message by omitting the stack + // trace in it. + static std::string ExtractSummary(const char* message); + + // The name of the source file where the test part took place, or + // "" if the source file is unknown. + std::string file_name_; + // The line in the source file where the test part took place, or -1 + // if the line number is unknown. + int line_number_; + std::string summary_; // The test failure summary. + std::string message_; // The test failure message. +}; + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result); + +// An array of TestPartResult objects. +// +// Don't inherit from TestPartResultArray as its destructor is not +// virtual. +class GTEST_API_ TestPartResultArray { + public: + TestPartResultArray() {} + + // Appends the given TestPartResult to the array. + void Append(const TestPartResult& result); + + // Returns the TestPartResult at the given index (0-based). + const TestPartResult& GetTestPartResult(int index) const; + + // Returns the number of TestPartResult objects in the array. + int size() const; + + private: + std::vector array_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); +}; + +// This interface knows how to report a test part result. +class TestPartResultReporterInterface { + public: + virtual ~TestPartResultReporterInterface() {} + + virtual void ReportTestPartResult(const TestPartResult& result) = 0; +}; + +namespace internal { + +// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a +// statement generates new fatal failures. To do so it registers itself as the +// current test part result reporter. Besides checking if fatal failures were +// reported, it only delegates the reporting to the former result reporter. +// The original result reporter is restored in the destructor. +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +class GTEST_API_ HasNewFatalFailureHelper + : public TestPartResultReporterInterface { + public: + HasNewFatalFailureHelper(); + virtual ~HasNewFatalFailureHelper(); + virtual void ReportTestPartResult(const TestPartResult& result); + bool has_new_fatal_failure() const { return has_new_fatal_failure_; } + private: + bool has_new_fatal_failure_; + TestPartResultReporterInterface* original_reporter_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); +}; + +} // namespace internal + +} // namespace testing + +#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ + +// This header implements typed tests and type-parameterized tests. + +// Typed (aka type-driven) tests repeat the same test for types in a +// list. You must know which types you want to test with when writing +// typed tests. Here's how you do it: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + public: + ... + typedef std::list List; + static T shared_; + T value_; +}; + +// Next, associate a list of types with the test case, which will be +// repeated for each type in the list. The typedef is necessary for +// the macro to parse correctly. +typedef testing::Types MyTypes; +TYPED_TEST_CASE(FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// TYPED_TEST_CASE(FooTest, int); + +// Then, use TYPED_TEST() instead of TEST_F() to define as many typed +// tests for this test case as you want. +TYPED_TEST(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + // Since we are inside a derived class template, C++ requires use to + // visit the members of FooTest via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the TestFixture:: + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the "typename + // TestFixture::" prefix. + typename TestFixture::List values; + values.push_back(n); + ... +} + +TYPED_TEST(FooTest, HasPropertyA) { ... } + +#endif // 0 + +// Type-parameterized tests are abstract test patterns parameterized +// by a type. Compared with typed tests, type-parameterized tests +// allow you to define the test pattern without knowing what the type +// parameters are. The defined pattern can be instantiated with +// different types any number of times, in any number of translation +// units. +// +// If you are designing an interface or concept, you can define a +// suite of type-parameterized tests to verify properties that any +// valid implementation of the interface/concept should have. Then, +// each implementation can easily instantiate the test suite to verify +// that it conforms to the requirements, without having to write +// similar tests repeatedly. Here's an example: + +#if 0 + +// First, define a fixture class template. It should be parameterized +// by a type. Remember to derive it from testing::Test. +template +class FooTest : public testing::Test { + ... +}; + +// Next, declare that you will define a type-parameterized test case +// (the _P suffix is for "parameterized" or "pattern", whichever you +// prefer): +TYPED_TEST_CASE_P(FooTest); + +// Then, use TYPED_TEST_P() to define as many type-parameterized tests +// for this type-parameterized test case as you want. +TYPED_TEST_P(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + TypeParam n = 0; + ... +} + +TYPED_TEST_P(FooTest, HasPropertyA) { ... } + +// Now the tricky part: you need to register all test patterns before +// you can instantiate them. The first argument of the macro is the +// test case name; the rest are the names of the tests in this test +// case. +REGISTER_TYPED_TEST_CASE_P(FooTest, + DoesBlah, HasPropertyA); + +// Finally, you are free to instantiate the pattern with the types you +// want. If you put the above code in a header file, you can #include +// it in multiple C++ source files and instantiate it multiple times. +// +// To distinguish different instances of the pattern, the first +// argument to the INSTANTIATE_* macro is a prefix that will be added +// to the actual test case name. Remember to pick unique prefixes for +// different instances. +typedef testing::Types MyTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); + +// If the type list contains only one type, you can write that type +// directly without Types<...>: +// INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); + +#endif // 0 + + +// Implements typed tests. + +#if GTEST_HAS_TYPED_TEST + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the typedef for the type parameters of the +// given test case. +# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +# define TYPED_TEST_CASE(CaseName, Types) \ + typedef ::testing::internal::TypeList< Types >::type \ + GTEST_TYPE_PARAMS_(CaseName) + +# define TYPED_TEST(CaseName, TestName) \ + template \ + class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ + : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTest< \ + CaseName, \ + ::testing::internal::TemplateSel< \ + GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ + GTEST_TYPE_PARAMS_(CaseName)>::Register(\ + "", #CaseName, #TestName, 0); \ + template \ + void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() + +#endif // GTEST_HAS_TYPED_TEST + +// Implements type-parameterized tests. + +#if GTEST_HAS_TYPED_TEST_P + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the namespace name that the type-parameterized tests for +// the given type-parameterized test case are defined in. The exact +// name of the namespace is subject to change without notice. +# define GTEST_CASE_NAMESPACE_(TestCaseName) \ + gtest_case_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Expands to the name of the variable used to remember the names of +// the defined tests in the given test case. +# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ + gtest_typed_test_case_p_state_##TestCaseName##_ + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. +// +// Expands to the name of the variable used to remember the names of +// the registered tests in the given test case. +# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ + gtest_registered_test_names_##TestCaseName##_ + +// The variables defined in the type-parameterized test macros are +// static as typically these macros are used in a .h file that can be +// #included in multiple translation units linked together. +# define TYPED_TEST_CASE_P(CaseName) \ + static ::testing::internal::TypedTestCasePState \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) + +# define TYPED_TEST_P(CaseName, TestName) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + template \ + class TestName : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ + __FILE__, __LINE__, #CaseName, #TestName); \ + } \ + template \ + void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() + +# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ + namespace GTEST_CASE_NAMESPACE_(CaseName) { \ + typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ + } \ + static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ + __FILE__, __LINE__, #__VA_ARGS__) + +// The 'Types' template argument below must have spaces around it +// since some compilers may choke on '>>' when passing a template +// instance (e.g. Types) +# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ + bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTestCase::type>::Register(\ + #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) + +#endif // GTEST_HAS_TYPED_TEST_P + +#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ + +// Depending on the platform, different string classes are available. +// On Linux, in addition to ::std::string, Google also makes use of +// class ::string, which has the same interface as ::std::string, but +// has a different implementation. +// +// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that +// ::string is available AND is a distinct type to ::std::string, or +// define it to 0 to indicate otherwise. +// +// If the user's ::std::string and ::string are the same class due to +// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. +// +// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined +// heuristically. + +namespace testing { + +// Declares the flags. + +// This flag temporary enables the disabled tests. +GTEST_DECLARE_bool_(also_run_disabled_tests); + +// This flag brings the debugger on an assertion failure. +GTEST_DECLARE_bool_(break_on_failure); + +// This flag controls whether Google Test catches all test-thrown exceptions +// and logs them as failures. +GTEST_DECLARE_bool_(catch_exceptions); + +// This flag enables using colors in terminal output. Available values are +// "yes" to enable colors, "no" (disable colors), or "auto" (the default) +// to let Google Test decide. +GTEST_DECLARE_string_(color); + +// This flag sets up the filter to select by name using a glob pattern +// the tests to run. If the filter is not given all tests are executed. +GTEST_DECLARE_string_(filter); + +// This flag causes the Google Test to list tests. None of the tests listed +// are actually run if the flag is provided. +GTEST_DECLARE_bool_(list_tests); + +// This flag controls whether Google Test emits a detailed XML report to a file +// in addition to its normal textual output. +GTEST_DECLARE_string_(output); + +// This flags control whether Google Test prints the elapsed time for each +// test. +GTEST_DECLARE_bool_(print_time); + +// This flag specifies the random number seed. +GTEST_DECLARE_int32_(random_seed); + +// This flag sets how many times the tests are repeated. The default value +// is 1. If the value is -1 the tests are repeating forever. +GTEST_DECLARE_int32_(repeat); + +// This flag controls whether Google Test includes Google Test internal +// stack frames in failure stack traces. +GTEST_DECLARE_bool_(show_internal_stack_frames); + +// When this flag is specified, tests' order is randomized on every iteration. +GTEST_DECLARE_bool_(shuffle); + +// This flag specifies the maximum number of stack frames to be +// printed in a failure message. +GTEST_DECLARE_int32_(stack_trace_depth); + +// When this flag is specified, a failed assertion will throw an +// exception if exceptions are enabled, or exit the program with a +// non-zero code otherwise. +GTEST_DECLARE_bool_(throw_on_failure); + +// When this flag is set with a "host:port" string, on supported +// platforms test results are streamed to the specified port on +// the specified host machine. +GTEST_DECLARE_string_(stream_result_to); + +// The upper limit for valid stack trace depths. +const int kMaxStackTraceDepth = 100; + +namespace internal { + +class AssertHelper; +class DefaultGlobalTestPartResultReporter; +class ExecDeathTest; +class NoExecDeathTest; +class FinalSuccessChecker; +class GTestFlagSaver; +class StreamingListenerTest; +class TestResultAccessor; +class TestEventListenersAccessor; +class TestEventRepeater; +class UnitTestRecordPropertyTestHelper; +class WindowsDeathTest; +class UnitTestImpl* GetUnitTestImpl(); +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const std::string& message); + +} // namespace internal + +// The friend relationship of some of these classes is cyclic. +// If we don't forward declare them the compiler might confuse the classes +// in friendship clauses with same named classes on the scope. +class Test; +class TestCase; +class TestInfo; +class UnitTest; + +// A class for indicating whether an assertion was successful. When +// the assertion wasn't successful, the AssertionResult object +// remembers a non-empty message that describes how it failed. +// +// To create an instance of this class, use one of the factory functions +// (AssertionSuccess() and AssertionFailure()). +// +// This class is useful for two purposes: +// 1. Defining predicate functions to be used with Boolean test assertions +// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts +// 2. Defining predicate-format functions to be +// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). +// +// For example, if you define IsEven predicate: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) +// will print the message +// +// Value of: IsEven(Fib(5)) +// Actual: false (5 is odd) +// Expected: true +// +// instead of a more opaque +// +// Value of: IsEven(Fib(5)) +// Actual: false +// Expected: true +// +// in case IsEven is a simple Boolean predicate. +// +// If you expect your predicate to be reused and want to support informative +// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up +// about half as often as positive ones in our tests), supply messages for +// both success and failure cases: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess() << n << " is even"; +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print +// +// Value of: IsEven(Fib(6)) +// Actual: true (8 is even) +// Expected: false +// +// NB: Predicates that support negative Boolean assertions have reduced +// performance in positive ones so be careful not to use them in tests +// that have lots (tens of thousands) of positive Boolean assertions. +// +// To use this class with EXPECT_PRED_FORMAT assertions such as: +// +// // Verifies that Foo() returns an even number. +// EXPECT_PRED_FORMAT1(IsEven, Foo()); +// +// you need to define: +// +// testing::AssertionResult IsEven(const char* expr, int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() +// << "Expected: " << expr << " is even\n Actual: it's " << n; +// } +// +// If Foo() returns 5, you will see the following message: +// +// Expected: Foo() is even +// Actual: it's 5 +// +class GTEST_API_ AssertionResult { + public: + // Copy constructor. + // Used in EXPECT_TRUE/FALSE(assertion_result). + AssertionResult(const AssertionResult& other); + // Used in the EXPECT_TRUE/FALSE(bool_expression). + explicit AssertionResult(bool success) : success_(success) {} + + // Returns true iff the assertion succeeded. + operator bool() const { return success_; } // NOLINT + + // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. + AssertionResult operator!() const; + + // Returns the text streamed into this AssertionResult. Test assertions + // use it when they fail (i.e., the predicate's outcome doesn't match the + // assertion's expectation). When nothing has been streamed into the + // object, returns an empty string. + const char* message() const { + return message_.get() != NULL ? message_->c_str() : ""; + } + // TODO(vladl@google.com): Remove this after making sure no clients use it. + // Deprecated; please use message() instead. + const char* failure_message() const { return message(); } + + // Streams a custom failure message into this object. + template AssertionResult& operator<<(const T& value) { + AppendMessage(Message() << value); + return *this; + } + + // Allows streaming basic output manipulators such as endl or flush into + // this object. + AssertionResult& operator<<( + ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { + AppendMessage(Message() << basic_manipulator); + return *this; + } + + private: + // Appends the contents of message to message_. + void AppendMessage(const Message& a_message) { + if (message_.get() == NULL) + message_.reset(new ::std::string); + message_->append(a_message.GetString().c_str()); + } + + // Stores result of the assertion predicate. + bool success_; + // Stores the message describing the condition in case the expectation + // construct is not satisfied with the predicate's outcome. + // Referenced via a pointer to avoid taking too much stack frame space + // with test assertions. + internal::scoped_ptr< ::std::string> message_; + + GTEST_DISALLOW_ASSIGN_(AssertionResult); +}; + +// Makes a successful assertion result. +GTEST_API_ AssertionResult AssertionSuccess(); + +// Makes a failed assertion result. +GTEST_API_ AssertionResult AssertionFailure(); + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << msg. +GTEST_API_ AssertionResult AssertionFailure(const Message& msg); + +// The abstract class that all tests inherit from. +// +// In Google Test, a unit test program contains one or many TestCases, and +// each TestCase contains one or many Tests. +// +// When you define a test using the TEST macro, you don't need to +// explicitly derive from Test - the TEST macro automatically does +// this for you. +// +// The only time you derive from Test is when defining a test fixture +// to be used a TEST_F. For example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { ... } +// virtual void TearDown() { ... } +// ... +// }; +// +// TEST_F(FooTest, Bar) { ... } +// TEST_F(FooTest, Baz) { ... } +// +// Test is not copyable. +class GTEST_API_ Test { + public: + friend class TestInfo; + + // Defines types for pointers to functions that set up and tear down + // a test case. + typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; + typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; + + // The d'tor is virtual as we intend to inherit from Test. + virtual ~Test(); + + // Sets up the stuff shared by all tests in this test case. + // + // Google Test will call Foo::SetUpTestCase() before running the first + // test in test case Foo. Hence a sub-class can define its own + // SetUpTestCase() method to shadow the one defined in the super + // class. + static void SetUpTestCase() {} + + // Tears down the stuff shared by all tests in this test case. + // + // Google Test will call Foo::TearDownTestCase() after running the last + // test in test case Foo. Hence a sub-class can define its own + // TearDownTestCase() method to shadow the one defined in the super + // class. + static void TearDownTestCase() {} + + // Returns true iff the current test has a fatal failure. + static bool HasFatalFailure(); + + // Returns true iff the current test has a non-fatal failure. + static bool HasNonfatalFailure(); + + // Returns true iff the current test has a (either fatal or + // non-fatal) failure. + static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } + + // Logs a property for the current test, test case, or for the entire + // invocation of the test program when used outside of the context of a + // test case. Only the last value for a given key is remembered. These + // are public static so they can be called from utility functions that are + // not members of the test fixture. Calls to RecordProperty made during + // lifespan of the test (from the moment its constructor starts to the + // moment its destructor finishes) will be output in XML as attributes of + // the element. Properties recorded from fixture's + // SetUpTestCase or TearDownTestCase are logged as attributes of the + // corresponding element. Calls to RecordProperty made in the + // global context (before or after invocation of RUN_ALL_TESTS and from + // SetUp/TearDown method of Environment objects registered with Google + // Test) will be output as attributes of the element. + static void RecordProperty(const std::string& key, const std::string& value); + static void RecordProperty(const std::string& key, int value); + + protected: + // Creates a Test object. + Test(); + + // Sets up the test fixture. + virtual void SetUp(); + + // Tears down the test fixture. + virtual void TearDown(); + + private: + // Returns true iff the current test has the same fixture class as + // the first test in the current test case. + static bool HasSameFixtureClass(); + + // Runs the test after the test fixture has been set up. + // + // A sub-class must implement this to define the test logic. + // + // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. + // Instead, use the TEST or TEST_F macro. + virtual void TestBody() = 0; + + // Sets up, executes, and tears down the test. + void Run(); + + // Deletes self. We deliberately pick an unusual name for this + // internal method to avoid clashing with names used in user TESTs. + void DeleteSelf_() { delete this; } + + // Uses a GTestFlagSaver to save and restore all Google Test flags. + const internal::GTestFlagSaver* const gtest_flag_saver_; + + // Often a user mis-spells SetUp() as Setup() and spends a long time + // wondering why it is never called by Google Test. The declaration of + // the following method is solely for catching such an error at + // compile time: + // + // - The return type is deliberately chosen to be not void, so it + // will be a conflict if a user declares void Setup() in his test + // fixture. + // + // - This method is private, so it will be another compiler error + // if a user calls it from his test fixture. + // + // DO NOT OVERRIDE THIS FUNCTION. + // + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } + + // We disallow copying Tests. + GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); +}; + +typedef internal::TimeInMillis TimeInMillis; + +// A copyable object representing a user specified test property which can be +// output as a key/value string pair. +// +// Don't inherit from TestProperty as its destructor is not virtual. +class TestProperty { + public: + // C'tor. TestProperty does NOT have a default constructor. + // Always use this constructor (with parameters) to create a + // TestProperty object. + TestProperty(const std::string& a_key, const std::string& a_value) : + key_(a_key), value_(a_value) { + } + + // Gets the user supplied key. + const char* key() const { + return key_.c_str(); + } + + // Gets the user supplied value. + const char* value() const { + return value_.c_str(); + } + + // Sets a new value, overriding the one supplied in the constructor. + void SetValue(const std::string& new_value) { + value_ = new_value; + } + + private: + // The key supplied by the user. + std::string key_; + // The value supplied by the user. + std::string value_; +}; + +// The result of a single Test. This includes a list of +// TestPartResults, a list of TestProperties, a count of how many +// death tests there are in the Test, and how much time it took to run +// the Test. +// +// TestResult is not copyable. +class GTEST_API_ TestResult { + public: + // Creates an empty TestResult. + TestResult(); + + // D'tor. Do not inherit from TestResult. + ~TestResult(); + + // Gets the number of all test parts. This is the sum of the number + // of successful test parts and the number of failed test parts. + int total_part_count() const; + + // Returns the number of the test properties. + int test_property_count() const; + + // Returns true iff the test passed (i.e. no test part failed). + bool Passed() const { return !Failed(); } + + // Returns true iff the test failed. + bool Failed() const; + + // Returns true iff the test fatally failed. + bool HasFatalFailure() const; + + // Returns true iff the test has a non-fatal failure. + bool HasNonfatalFailure() const; + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test part result among all the results. i can range + // from 0 to test_property_count() - 1. If i is not in that range, aborts + // the program. + const TestPartResult& GetTestPartResult(int i) const; + + // Returns the i-th test property. i can range from 0 to + // test_property_count() - 1. If i is not in that range, aborts the + // program. + const TestProperty& GetTestProperty(int i) const; + + private: + friend class TestInfo; + friend class TestCase; + friend class UnitTest; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::ExecDeathTest; + friend class internal::TestResultAccessor; + friend class internal::UnitTestImpl; + friend class internal::WindowsDeathTest; + + // Gets the vector of TestPartResults. + const std::vector& test_part_results() const { + return test_part_results_; + } + + // Gets the vector of TestProperties. + const std::vector& test_properties() const { + return test_properties_; + } + + // Sets the elapsed time. + void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } + + // Adds a test property to the list. The property is validated and may add + // a non-fatal failure if invalid (e.g., if it conflicts with reserved + // key names). If a property is already recorded for the same key, the + // value will be updated, rather than storing multiple values for the same + // key. xml_element specifies the element for which the property is being + // recorded and is used for validation. + void RecordProperty(const std::string& xml_element, + const TestProperty& test_property); + + // Adds a failure if the key is a reserved attribute of Google Test + // testcase tags. Returns true if the property is valid. + // TODO(russr): Validate attribute names are legal and human readable. + static bool ValidateTestProperty(const std::string& xml_element, + const TestProperty& test_property); + + // Adds a test part result to the list. + void AddTestPartResult(const TestPartResult& test_part_result); + + // Returns the death test count. + int death_test_count() const { return death_test_count_; } + + // Increments the death test count, returning the new count. + int increment_death_test_count() { return ++death_test_count_; } + + // Clears the test part results. + void ClearTestPartResults(); + + // Clears the object. + void Clear(); + + // Protects mutable state of the property vector and of owned + // properties, whose values may be updated. + internal::Mutex test_properites_mutex_; + + // The vector of TestPartResults + std::vector test_part_results_; + // The vector of TestProperties + std::vector test_properties_; + // Running count of death tests. + int death_test_count_; + // The elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + + // We disallow copying TestResult. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); +}; // class TestResult + +// A TestInfo object stores the following information about a test: +// +// Test case name +// Test name +// Whether the test should be run +// A function pointer that creates the test object when invoked +// Test result +// +// The constructor of TestInfo registers itself with the UnitTest +// singleton such that the RUN_ALL_TESTS() macro knows which tests to +// run. +class GTEST_API_ TestInfo { + public: + // Destructs a TestInfo object. This function is not virtual, so + // don't inherit from TestInfo. + ~TestInfo(); + + // Returns the test case name. + const char* test_case_name() const { return test_case_name_.c_str(); } + + // Returns the test name. + const char* name() const { return name_.c_str(); } + + // Returns the name of the parameter type, or NULL if this is not a typed + // or a type-parameterized test. + const char* type_param() const { + if (type_param_.get() != NULL) + return type_param_->c_str(); + return NULL; + } + + // Returns the text representation of the value parameter, or NULL if this + // is not a value-parameterized test. + const char* value_param() const { + if (value_param_.get() != NULL) + return value_param_->c_str(); + return NULL; + } + + // Returns true if this test should run, that is if the test is not + // disabled (or it is disabled but the also_run_disabled_tests flag has + // been specified) and its full name matches the user-specified filter. + // + // Google Test allows the user to filter the tests by their full names. + // The full name of a test Bar in test case Foo is defined as + // "Foo.Bar". Only the tests that match the filter will run. + // + // A filter is a colon-separated list of glob (not regex) patterns, + // optionally followed by a '-' and a colon-separated list of + // negative patterns (tests to exclude). A test is run if it + // matches one of the positive patterns and does not match any of + // the negative patterns. + // + // For example, *A*:Foo.* is a filter that matches any string that + // contains the character 'A' or starts with "Foo.". + bool should_run() const { return should_run_; } + + // Returns true iff this test will appear in the XML report. + bool is_reportable() const { + // For now, the XML report includes all tests matching the filter. + // In the future, we may trim tests that are excluded because of + // sharding. + return matches_filter_; + } + + // Returns the result of the test. + const TestResult* result() const { return &result_; } + + private: +#if GTEST_HAS_DEATH_TEST + friend class internal::DefaultDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + friend class Test; + friend class TestCase; + friend class internal::UnitTestImpl; + friend class internal::StreamingListenerTest; + friend TestInfo* internal::MakeAndRegisterTestInfo( + const char* test_case_name, + const char* name, + const char* type_param, + const char* value_param, + internal::TypeId fixture_class_id, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + internal::TestFactoryBase* factory); + + // Constructs a TestInfo object. The newly constructed instance assumes + // ownership of the factory object. + TestInfo(const std::string& test_case_name, + const std::string& name, + const char* a_type_param, // NULL if not a type-parameterized test + const char* a_value_param, // NULL if not a value-parameterized test + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory); + + // Increments the number of death tests encountered in this test so + // far. + int increment_death_test_count() { + return result_.increment_death_test_count(); + } + + // Creates the test object, runs it, records its result, and then + // deletes it. + void Run(); + + static void ClearTestResult(TestInfo* test_info) { + test_info->result_.Clear(); + } + + // These fields are immutable properties of the test. + const std::string test_case_name_; // Test case name + const std::string name_; // Test name + // Name of the parameter type, or NULL if this is not a typed or a + // type-parameterized test. + const internal::scoped_ptr type_param_; + // Text representation of the value parameter, or NULL if this is not a + // value-parameterized test. + const internal::scoped_ptr value_param_; + const internal::TypeId fixture_class_id_; // ID of the test fixture class + bool should_run_; // True iff this test should run + bool is_disabled_; // True iff this test is disabled + bool matches_filter_; // True if this test matches the + // user-specified filter. + internal::TestFactoryBase* const factory_; // The factory that creates + // the test object + + // This field is mutable and needs to be reset before running the + // test for the second time. + TestResult result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); +}; + +// A test case, which consists of a vector of TestInfos. +// +// TestCase is not copyable. +class GTEST_API_ TestCase { + public: + // Creates a TestCase with the given name. + // + // TestCase does NOT have a default constructor. Always use this + // constructor to create a TestCase object. + // + // Arguments: + // + // name: name of the test case + // a_type_param: the name of the test's type parameter, or NULL if + // this is not a type-parameterized test. + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase(const char* name, const char* a_type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Destructor of TestCase. + virtual ~TestCase(); + + // Gets the name of the TestCase. + const char* name() const { return name_.c_str(); } + + // Returns the name of the parameter type, or NULL if this is not a + // type-parameterized test case. + const char* type_param() const { + if (type_param_.get() != NULL) + return type_param_->c_str(); + return NULL; + } + + // Returns true if any test in this test case should run. + bool should_run() const { return should_run_; } + + // Gets the number of successful tests in this test case. + int successful_test_count() const; + + // Gets the number of failed tests in this test case. + int failed_test_count() const; + + // Gets the number of disabled tests that will be reported in the XML report. + int reportable_disabled_test_count() const; + + // Gets the number of disabled tests in this test case. + int disabled_test_count() const; + + // Gets the number of tests to be printed in the XML report. + int reportable_test_count() const; + + // Get the number of tests in this test case that should run. + int test_to_run_count() const; + + // Gets the number of all tests in this test case. + int total_test_count() const; + + // Returns true iff the test case passed. + bool Passed() const { return !Failed(); } + + // Returns true iff the test case failed. + bool Failed() const { return failed_test_count() > 0; } + + // Returns the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + const TestInfo* GetTestInfo(int i) const; + + // Returns the TestResult that holds test properties recorded during + // execution of SetUpTestCase and TearDownTestCase. + const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } + + private: + friend class Test; + friend class internal::UnitTestImpl; + + // Gets the (mutable) vector of TestInfos in this TestCase. + std::vector& test_info_list() { return test_info_list_; } + + // Gets the (immutable) vector of TestInfos in this TestCase. + const std::vector& test_info_list() const { + return test_info_list_; + } + + // Returns the i-th test among all the tests. i can range from 0 to + // total_test_count() - 1. If i is not in that range, returns NULL. + TestInfo* GetMutableTestInfo(int i); + + // Sets the should_run member. + void set_should_run(bool should) { should_run_ = should; } + + // Adds a TestInfo to this test case. Will delete the TestInfo upon + // destruction of the TestCase object. + void AddTestInfo(TestInfo * test_info); + + // Clears the results of all tests in this test case. + void ClearResult(); + + // Clears the results of all tests in the given test case. + static void ClearTestCaseResult(TestCase* test_case) { + test_case->ClearResult(); + } + + // Runs every test in this TestCase. + void Run(); + + // Runs SetUpTestCase() for this TestCase. This wrapper is needed + // for catching exceptions thrown from SetUpTestCase(). + void RunSetUpTestCase() { (*set_up_tc_)(); } + + // Runs TearDownTestCase() for this TestCase. This wrapper is + // needed for catching exceptions thrown from TearDownTestCase(). + void RunTearDownTestCase() { (*tear_down_tc_)(); } + + // Returns true iff test passed. + static bool TestPassed(const TestInfo* test_info) { + return test_info->should_run() && test_info->result()->Passed(); + } + + // Returns true iff test failed. + static bool TestFailed(const TestInfo* test_info) { + return test_info->should_run() && test_info->result()->Failed(); + } + + // Returns true iff the test is disabled and will be reported in the XML + // report. + static bool TestReportableDisabled(const TestInfo* test_info) { + return test_info->is_reportable() && test_info->is_disabled_; + } + + // Returns true iff test is disabled. + static bool TestDisabled(const TestInfo* test_info) { + return test_info->is_disabled_; + } + + // Returns true iff this test will appear in the XML report. + static bool TestReportable(const TestInfo* test_info) { + return test_info->is_reportable(); + } + + // Returns true if the given test should run. + static bool ShouldRunTest(const TestInfo* test_info) { + return test_info->should_run(); + } + + // Shuffles the tests in this test case. + void ShuffleTests(internal::Random* random); + + // Restores the test order to before the first shuffle. + void UnshuffleTests(); + + // Name of the test case. + std::string name_; + // Name of the parameter type, or NULL if this is not a typed or a + // type-parameterized test. + const internal::scoped_ptr type_param_; + // The vector of TestInfos in their original order. It owns the + // elements in the vector. + std::vector test_info_list_; + // Provides a level of indirection for the test list to allow easy + // shuffling and restoring the test order. The i-th element in this + // vector is the index of the i-th test in the shuffled test list. + std::vector test_indices_; + // Pointer to the function that sets up the test case. + Test::SetUpTestCaseFunc set_up_tc_; + // Pointer to the function that tears down the test case. + Test::TearDownTestCaseFunc tear_down_tc_; + // True iff any test in this test case should run. + bool should_run_; + // Elapsed time, in milliseconds. + TimeInMillis elapsed_time_; + // Holds test properties recorded during execution of SetUpTestCase and + // TearDownTestCase. + TestResult ad_hoc_test_result_; + + // We disallow copying TestCases. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); +}; + +// An Environment object is capable of setting up and tearing down an +// environment. The user should subclass this to define his own +// environment(s). +// +// An Environment object does the set-up and tear-down in virtual +// methods SetUp() and TearDown() instead of the constructor and the +// destructor, as: +// +// 1. You cannot safely throw from a destructor. This is a problem +// as in some cases Google Test is used where exceptions are enabled, and +// we may want to implement ASSERT_* using exceptions where they are +// available. +// 2. You cannot use ASSERT_* directly in a constructor or +// destructor. +class Environment { + public: + // The d'tor is virtual as we need to subclass Environment. + virtual ~Environment() {} + + // Override this to define how to set up the environment. + virtual void SetUp() {} + + // Override this to define how to tear down the environment. + virtual void TearDown() {} + private: + // If you see an error about overriding the following function or + // about it being private, you have mis-spelled SetUp() as Setup(). + struct Setup_should_be_spelled_SetUp {}; + virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } +}; + +// The interface for tracing execution of tests. The methods are organized in +// the order the corresponding events are fired. +class TestEventListener { + public: + virtual ~TestEventListener() {} + + // Fired before any test activity starts. + virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; + + // Fired before each iteration of tests starts. There may be more than + // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration + // index, starting from 0. + virtual void OnTestIterationStart(const UnitTest& unit_test, + int iteration) = 0; + + // Fired before environment set-up for each iteration of tests starts. + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; + + // Fired after environment set-up for each iteration of tests ends. + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; + + // Fired before the test case starts. + virtual void OnTestCaseStart(const TestCase& test_case) = 0; + + // Fired before the test starts. + virtual void OnTestStart(const TestInfo& test_info) = 0; + + // Fired after a failed assertion or a SUCCEED() invocation. + virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; + + // Fired after the test ends. + virtual void OnTestEnd(const TestInfo& test_info) = 0; + + // Fired after the test case ends. + virtual void OnTestCaseEnd(const TestCase& test_case) = 0; + + // Fired before environment tear-down for each iteration of tests starts. + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; + + // Fired after environment tear-down for each iteration of tests ends. + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; + + // Fired after each iteration of tests finishes. + virtual void OnTestIterationEnd(const UnitTest& unit_test, + int iteration) = 0; + + // Fired after all test activities have ended. + virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; +}; + +// The convenience class for users who need to override just one or two +// methods and are not concerned that a possible change to a signature of +// the methods they override will not be caught during the build. For +// comments about each method please see the definition of TestEventListener +// above. +class EmptyTestEventListener : public TestEventListener { + public: + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} + virtual void OnTestStart(const TestInfo& /*test_info*/) {} + virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} + virtual void OnTestEnd(const TestInfo& /*test_info*/) {} + virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} + virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int /*iteration*/) {} + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} +}; + +// TestEventListeners lets users add listeners to track events in Google Test. +class GTEST_API_ TestEventListeners { + public: + TestEventListeners(); + ~TestEventListeners(); + + // Appends an event listener to the end of the list. Google Test assumes + // the ownership of the listener (i.e. it will delete the listener when + // the test program finishes). + void Append(TestEventListener* listener); + + // Removes the given event listener from the list and returns it. It then + // becomes the caller's responsibility to delete the listener. Returns + // NULL if the listener is not found in the list. + TestEventListener* Release(TestEventListener* listener); + + // Returns the standard listener responsible for the default console + // output. Can be removed from the listeners list to shut down default + // console output. Note that removing this object from the listener list + // with Release transfers its ownership to the caller and makes this + // function return NULL the next time. + TestEventListener* default_result_printer() const { + return default_result_printer_; + } + + // Returns the standard listener responsible for the default XML output + // controlled by the --gtest_output=xml flag. Can be removed from the + // listeners list by users who want to shut down the default XML output + // controlled by this flag and substitute it with custom one. Note that + // removing this object from the listener list with Release transfers its + // ownership to the caller and makes this function return NULL the next + // time. + TestEventListener* default_xml_generator() const { + return default_xml_generator_; + } + + private: + friend class TestCase; + friend class TestInfo; + friend class internal::DefaultGlobalTestPartResultReporter; + friend class internal::NoExecDeathTest; + friend class internal::TestEventListenersAccessor; + friend class internal::UnitTestImpl; + + // Returns repeater that broadcasts the TestEventListener events to all + // subscribers. + TestEventListener* repeater(); + + // Sets the default_result_printer attribute to the provided listener. + // The listener is also added to the listener list and previous + // default_result_printer is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultResultPrinter(TestEventListener* listener); + + // Sets the default_xml_generator attribute to the provided listener. The + // listener is also added to the listener list and previous + // default_xml_generator is removed from it and deleted. The listener can + // also be NULL in which case it will not be added to the list. Does + // nothing if the previous and the current listener objects are the same. + void SetDefaultXmlGenerator(TestEventListener* listener); + + // Controls whether events will be forwarded by the repeater to the + // listeners in the list. + bool EventForwardingEnabled() const; + void SuppressEventForwarding(); + + // The actual list of listeners. + internal::TestEventRepeater* repeater_; + // Listener responsible for the standard result output. + TestEventListener* default_result_printer_; + // Listener responsible for the creation of the XML output file. + TestEventListener* default_xml_generator_; + + // We disallow copying TestEventListeners. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); +}; + +// A UnitTest consists of a vector of TestCases. +// +// This is a singleton class. The only instance of UnitTest is +// created when UnitTest::GetInstance() is first called. This +// instance is never deleted. +// +// UnitTest is not copyable. +// +// This class is thread-safe as long as the methods are called +// according to their specification. +class GTEST_API_ UnitTest { + public: + // Gets the singleton UnitTest object. The first time this method + // is called, a UnitTest object is constructed and returned. + // Consecutive calls will return the same object. + static UnitTest* GetInstance(); + + // Runs all tests in this UnitTest object and prints the result. + // Returns 0 if successful, or 1 otherwise. + // + // This method can only be called from the main thread. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + int Run() GTEST_MUST_USE_RESULT_; + + // Returns the working directory when the first TEST() or TEST_F() + // was executed. The UnitTest object owns the string. + const char* original_working_dir() const; + + // Returns the TestCase object for the test that's currently running, + // or NULL if no test is running. + const TestCase* current_test_case() const + GTEST_LOCK_EXCLUDED_(mutex_); + + // Returns the TestInfo object for the test that's currently running, + // or NULL if no test is running. + const TestInfo* current_test_info() const + GTEST_LOCK_EXCLUDED_(mutex_); + + // Returns the random seed used at the start of the current test run. + int random_seed() const; + +#if GTEST_HAS_PARAM_TEST + // Returns the ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + // + // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() + GTEST_LOCK_EXCLUDED_(mutex_); +#endif // GTEST_HAS_PARAM_TEST + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests that will be reported in the XML report. + int reportable_disabled_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of tests to be printed in the XML report. + int reportable_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the time of the test program start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp() const; + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const; + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const; + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const; + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const; + + // Returns the TestResult containing information on test failures and + // properties logged outside of individual test cases. + const TestResult& ad_hoc_test_result() const; + + // Returns the list of event listeners that can be used to track events + // inside Google Test. + TestEventListeners& listeners(); + + private: + // Registers and returns a global test environment. When a test + // program is run, all global test environments will be set-up in + // the order they were registered. After all tests in the program + // have finished, all global test environments will be torn-down in + // the *reverse* order they were registered. + // + // The UnitTest object takes ownership of the given environment. + // + // This method can only be called from the main thread. + Environment* AddEnvironment(Environment* env); + + // Adds a TestPartResult to the current TestResult object. All + // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) + // eventually call this to report their results. The user code + // should use the assertion macros instead of calling this directly. + void AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, + int line_number, + const std::string& message, + const std::string& os_stack_trace) + GTEST_LOCK_EXCLUDED_(mutex_); + + // Adds a TestProperty to the current TestResult object when invoked from + // inside a test, to current TestCase's ad_hoc_test_result_ when invoked + // from SetUpTestCase or TearDownTestCase, or to the global property set + // when invoked elsewhere. If the result already contains a property with + // the same key, the value will be updated. + void RecordProperty(const std::string& key, const std::string& value); + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i); + + // Accessors for the implementation object. + internal::UnitTestImpl* impl() { return impl_; } + const internal::UnitTestImpl* impl() const { return impl_; } + + // These classes and funcions are friends as they need to access private + // members of UnitTest. + friend class Test; + friend class internal::AssertHelper; + friend class internal::ScopedTrace; + friend class internal::StreamingListenerTest; + friend class internal::UnitTestRecordPropertyTestHelper; + friend Environment* AddGlobalTestEnvironment(Environment* env); + friend internal::UnitTestImpl* internal::GetUnitTestImpl(); + friend void internal::ReportFailureInUnknownLocation( + TestPartResult::Type result_type, + const std::string& message); + + // Creates an empty UnitTest. + UnitTest(); + + // D'tor + virtual ~UnitTest(); + + // Pushes a trace defined by SCOPED_TRACE() on to the per-thread + // Google Test trace stack. + void PushGTestTrace(const internal::TraceInfo& trace) + GTEST_LOCK_EXCLUDED_(mutex_); + + // Pops a trace from the per-thread Google Test trace stack. + void PopGTestTrace() + GTEST_LOCK_EXCLUDED_(mutex_); + + // Protects mutable state in *impl_. This is mutable as some const + // methods need to lock it too. + mutable internal::Mutex mutex_; + + // Opaque implementation object. This field is never changed once + // the object is constructed. We don't mark it as const here, as + // doing so will cause a warning in the constructor of UnitTest. + // Mutable state in *impl_ is protected by mutex_. + internal::UnitTestImpl* impl_; + + // We disallow copying UnitTest. + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); +}; + +// A convenient wrapper for adding an environment for the test +// program. +// +// You should call this before RUN_ALL_TESTS() is called, probably in +// main(). If you use gtest_main, you need to call this before main() +// starts for it to take effect. For example, you can define a global +// variable like this: +// +// testing::Environment* const foo_env = +// testing::AddGlobalTestEnvironment(new FooEnvironment); +// +// However, we strongly recommend you to write your own main() and +// call AddGlobalTestEnvironment() there, as relying on initialization +// of global variables makes the code harder to read and may cause +// problems when you register multiple environments from different +// translation units and the environments have dependencies among them +// (remember that the compiler doesn't guarantee the order in which +// global variables from different translation units are initialized). +inline Environment* AddGlobalTestEnvironment(Environment* env) { + return UnitTest::GetInstance()->AddEnvironment(env); +} + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +GTEST_API_ void InitGoogleTest(int* argc, char** argv); + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); + +namespace internal { + +// FormatForComparison::Format(value) formats a +// value of type ToPrint that is an operand of a comparison assertion +// (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in +// the comparison, and is used to help determine the best way to +// format the value. In particular, when the value is a C string +// (char pointer) and the other operand is an STL string object, we +// want to format the C string as a string, since we know it is +// compared by value with the string object. If the value is a char +// pointer but the other operand is not an STL string object, we don't +// know whether the pointer is supposed to point to a NUL-terminated +// string, and thus want to print it as a pointer to be safe. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + +// The default case. +template +class FormatForComparison { + public: + static ::std::string Format(const ToPrint& value) { + return ::testing::PrintToString(value); + } +}; + +// Array. +template +class FormatForComparison { + public: + static ::std::string Format(const ToPrint* value) { + return FormatForComparison::Format(value); + } +}; + +// By default, print C string as pointers to be safe, as we don't know +// whether they actually point to a NUL-terminated string. + +#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \ + template \ + class FormatForComparison { \ + public: \ + static ::std::string Format(CharType* value) { \ + return ::testing::PrintToString(static_cast(value)); \ + } \ + } + +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); + +#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ + +// If a C string is compared with an STL string object, we know it's meant +// to point to a NUL-terminated string, and thus can print it as a string. + +#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ + template <> \ + class FormatForComparison { \ + public: \ + static ::std::string Format(CharType* value) { \ + return ::testing::PrintToString(value); \ + } \ + } + +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); + +#if GTEST_HAS_GLOBAL_STRING +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string); +#endif + +#if GTEST_HAS_GLOBAL_WSTRING +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring); +#endif + +#if GTEST_HAS_STD_WSTRING +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); +#endif + +#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ + +// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) +// operand to be used in a failure message. The type (but not value) +// of the other operand may affect the format. This allows us to +// print a char* as a raw pointer when it is compared against another +// char* or void*, and print it as a C string when it is compared +// against an std::string object, for example. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +std::string FormatForComparisonFailureMessage( + const T1& value, const T2& /* other_operand */) { + return FormatForComparison::Format(value); +} + +// The helper function for {ASSERT|EXPECT}_EQ. +template +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4389) // Temporarily disables warning on + // signed/unsigned mismatch. +#endif + + if (expected == actual) { + return AssertionSuccess(); + } + +#ifdef _MSC_VER +# pragma warning(pop) // Restores the warning state. +#endif + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// With this overloaded version, we allow anonymous enums to be used +// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums +// can be implicitly cast to BiggestInt. +GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual); + +// The helper class for {ASSERT|EXPECT}_EQ. The template argument +// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() +// is a null pointer literal. The following default implementation is +// for lhs_is_null_literal being false. +template +class EqHelper { + public: + // This templatized version is for the general case. + template + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // With this overloaded version, we allow anonymous enums to be used + // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous + // enums can be implicitly cast to BiggestInt. + // + // Even though its body looks the same as the above version, we + // cannot merge the two, as it will make anonymous enums unhappy. + static AssertionResult Compare(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } +}; + +// This specialization is used when the first argument to ASSERT_EQ() +// is a null pointer literal, like NULL, false, or 0. +template <> +class EqHelper { + public: + // We define two overloaded versions of Compare(). The first + // version will be picked when the second argument to ASSERT_EQ() is + // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or + // EXPECT_EQ(false, a_bool). + template + static AssertionResult Compare( + const char* expected_expression, + const char* actual_expression, + const T1& expected, + const T2& actual, + // The following line prevents this overload from being considered if T2 + // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) + // expands to Compare("", "", NULL, my_ptr), which requires a conversion + // to match the Secret* in the other overload, which would otherwise make + // this template match better. + typename EnableIf::value>::type* = 0) { + return CmpHelperEQ(expected_expression, actual_expression, expected, + actual); + } + + // This version will be picked when the second argument to ASSERT_EQ() is a + // pointer, e.g. ASSERT_EQ(NULL, a_pointer). + template + static AssertionResult Compare( + const char* expected_expression, + const char* actual_expression, + // We used to have a second template parameter instead of Secret*. That + // template parameter would deduce to 'long', making this a better match + // than the first overload even without the first overload's EnableIf. + // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to + // non-pointer argument" (even a deduced integral argument), so the old + // implementation caused warnings in user code. + Secret* /* expected (NULL) */, + T* actual) { + // We already know that 'expected' is a null pointer. + return CmpHelperEQ(expected_expression, actual_expression, + static_cast(NULL), actual); + } +}; + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste +// of similar code. +// +// For each templatized helper function, we also define an overloaded +// version for BiggestInt in order to reduce code bloat and allow +// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled +// with gcc 4. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +template \ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + const T1& val1, const T2& val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + return AssertionFailure() \ + << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + }\ +}\ +GTEST_API_ AssertionResult CmpHelper##op_name(\ + const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) + +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. + +// Implements the helper function for {ASSERT|EXPECT}_NE +GTEST_IMPL_CMP_HELPER_(NE, !=); +// Implements the helper function for {ASSERT|EXPECT}_LE +GTEST_IMPL_CMP_HELPER_(LE, <=); +// Implements the helper function for {ASSERT|EXPECT}_LT +GTEST_IMPL_CMP_HELPER_(LT, <); +// Implements the helper function for {ASSERT|EXPECT}_GE +GTEST_IMPL_CMP_HELPER_(GE, >=); +// Implements the helper function for {ASSERT|EXPECT}_GT +GTEST_IMPL_CMP_HELPER_(GT, >); + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual); + +// The helper function for {ASSERT|EXPECT}_STRNE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2); + + +// Helper function for *_STREQ on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual); + +// Helper function for *_STRNE on wide strings. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2); + +} // namespace internal + +// IsSubstring() and IsNotSubstring() are intended to be used as the +// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by +// themselves. They check whether needle is a substring of haystack +// (NULL is considered a substring of itself only), and return an +// appropriate error message when they fail. +// +// The {needle,haystack}_expr arguments are the stringified +// expressions that generated the two real arguments. +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack); +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack); + +#if GTEST_HAS_STD_WSTRING +GTEST_API_ AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +GTEST_API_ AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack); +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +// Helper template function for comparing floating-points. +// +// Template parameter: +// +// RawType: the raw floating-point type (either float or double) +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +template +AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, + const char* actual_expression, + RawType expected, + RawType actual) { + const FloatingPoint lhs(expected), rhs(actual); + + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + ::std::stringstream expected_ss; + expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << expected; + + ::std::stringstream actual_ss; + actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << actual; + + return EqFailure(expected_expression, + actual_expression, + StringStreamToString(&expected_ss), + StringStreamToString(&actual_ss), + false); +} + +// Helper function for implementing ASSERT_NEAR. +// +// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. +GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error); + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// A class that enables one to stream messages to assertion macros +class GTEST_API_ AssertHelper { + public: + // Constructor. + AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message); + ~AssertHelper(); + + // Message assignment is a semantic trick to enable assertion + // streaming; see the GTEST_MESSAGE_ macro below. + void operator=(const Message& message) const; + + private: + // We put our data in a struct so that the size of the AssertHelper class can + // be as small as possible. This is important because gcc is incapable of + // re-using stack space even for temporary variables, so every EXPECT_EQ + // reserves stack space for another AssertHelper. + struct AssertHelperData { + AssertHelperData(TestPartResult::Type t, + const char* srcfile, + int line_num, + const char* msg) + : type(t), file(srcfile), line(line_num), message(msg) { } + + TestPartResult::Type const type; + const char* const file; + int const line; + std::string const message; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); + }; + + AssertHelperData* const data_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); +}; + +} // namespace internal + +#if GTEST_HAS_PARAM_TEST +// The pure interface class that all value-parameterized tests inherit from. +// A value-parameterized class must inherit from both ::testing::Test and +// ::testing::WithParamInterface. In most cases that just means inheriting +// from ::testing::TestWithParam, but more complicated test hierarchies +// may need to inherit from Test and WithParamInterface at different levels. +// +// This interface has support for accessing the test parameter value via +// the GetParam() method. +// +// Use it with one of the parameter generator defining functions, like Range(), +// Values(), ValuesIn(), Bool(), and Combine(). +// +// class FooTest : public ::testing::TestWithParam { +// protected: +// FooTest() { +// // Can use GetParam() here. +// } +// virtual ~FooTest() { +// // Can use GetParam() here. +// } +// virtual void SetUp() { +// // Can use GetParam() here. +// } +// virtual void TearDown { +// // Can use GetParam() here. +// } +// }; +// TEST_P(FooTest, DoesBar) { +// // Can use GetParam() method here. +// Foo foo; +// ASSERT_TRUE(foo.DoesBar(GetParam())); +// } +// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); + +template +class WithParamInterface { + public: + typedef T ParamType; + virtual ~WithParamInterface() {} + + // The current parameter value. Is also available in the test fixture's + // constructor. This member function is non-static, even though it only + // references static data, to reduce the opportunity for incorrect uses + // like writing 'WithParamInterface::GetParam()' for a test that + // uses a fixture whose parameter type is int. + const ParamType& GetParam() const { + GTEST_CHECK_(parameter_ != NULL) + << "GetParam() can only be called inside a value-parameterized test " + << "-- did you intend to write TEST_P instead of TEST_F?"; + return *parameter_; + } + + private: + // Sets parameter value. The caller is responsible for making sure the value + // remains alive and unchanged throughout the current test. + static void SetParam(const ParamType* parameter) { + parameter_ = parameter; + } + + // Static value used for accessing parameter during a test lifetime. + static const ParamType* parameter_; + + // TestClass must be a subclass of WithParamInterface and Test. + template friend class internal::ParameterizedTestFactory; +}; + +template +const T* WithParamInterface::parameter_ = NULL; + +// Most value-parameterized classes can ignore the existence of +// WithParamInterface, and can just inherit from ::testing::TestWithParam. + +template +class TestWithParam : public Test, public WithParamInterface { +}; + +#endif // GTEST_HAS_PARAM_TEST + +// Macros for indicating success/failure in test code. + +// ADD_FAILURE unconditionally adds a failure to the current test. +// SUCCEED generates a success - it doesn't automatically make the +// current test successful, as a test is only successful when it has +// no failure. +// +// EXPECT_* verifies that a certain condition is satisfied. If not, +// it behaves like ADD_FAILURE. In particular: +// +// EXPECT_TRUE verifies that a Boolean condition is true. +// EXPECT_FALSE verifies that a Boolean condition is false. +// +// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except +// that they will also abort the current function on failure. People +// usually want the fail-fast behavior of FAIL and ASSERT_*, but those +// writing data-driven tests often find themselves using ADD_FAILURE +// and EXPECT_* more. + +// Generates a nonfatal failure with a generic message. +#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") + +// Generates a nonfatal failure at the given source file location with +// a generic message. +#define ADD_FAILURE_AT(file, line) \ + GTEST_MESSAGE_AT_(file, line, "Failed", \ + ::testing::TestPartResult::kNonFatalFailure) + +// Generates a fatal failure with a generic message. +#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") + +// Define this macro to 1 to omit the definition of FAIL(), which is a +// generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_FAIL +# define FAIL() GTEST_FAIL() +#endif + +// Generates a success with a generic message. +#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") + +// Define this macro to 1 to omit the definition of SUCCEED(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_SUCCEED +# define SUCCEED() GTEST_SUCCEED() +#endif + +// Macros for testing exceptions. +// +// * {ASSERT|EXPECT}_THROW(statement, expected_exception): +// Tests that the statement throws the expected exception. +// * {ASSERT|EXPECT}_NO_THROW(statement): +// Tests that the statement doesn't throw any exception. +// * {ASSERT|EXPECT}_ANY_THROW(statement): +// Tests that the statement throws an exception. + +#define EXPECT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) +#define EXPECT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define EXPECT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) +#define ASSERT_THROW(statement, expected_exception) \ + GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) +#define ASSERT_NO_THROW(statement) \ + GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) +#define ASSERT_ANY_THROW(statement) \ + GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) + +// Boolean assertions. Condition can be either a Boolean expression or an +// AssertionResult. For more information on how to use AssertionResult with +// these macros see comments on that class. +#define EXPECT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_NONFATAL_FAILURE_) +#define EXPECT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_NONFATAL_FAILURE_) +#define ASSERT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ + GTEST_FATAL_FAILURE_) +#define ASSERT_FALSE(condition) \ + GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ + GTEST_FATAL_FAILURE_) + +// Includes the auto-generated header that implements a family of +// generic predicate assertion macros. +// Copyright 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command +// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! +// +// Implements a family of generic predicate assertion macros. + +#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Makes sure this header is not included before gtest.h. +#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ +# error Do not include gtest_pred_impl.h directly. Include gtest.h instead. +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ + +// This header implements a family of generic predicate assertion +// macros: +// +// ASSERT_PRED_FORMAT1(pred_format, v1) +// ASSERT_PRED_FORMAT2(pred_format, v1, v2) +// ... +// +// where pred_format is a function or functor that takes n (in the +// case of ASSERT_PRED_FORMATn) values and their source expression +// text, and returns a testing::AssertionResult. See the definition +// of ASSERT_EQ in gtest.h for an example. +// +// If you don't care about formatting, you can use the more +// restrictive version: +// +// ASSERT_PRED1(pred, v1) +// ASSERT_PRED2(pred, v1, v2) +// ... +// +// where pred is an n-ary function or functor that returns bool, +// and the values v1, v2, ..., must support the << operator for +// streaming to std::ostream. +// +// We also define the EXPECT_* variations. +// +// For now we only support predicates whose arity is at most 5. +// Please email googletestframework@googlegroups.com if you need +// support for higher arities. + +// GTEST_ASSERT_ is the basic statement to which all of the assertions +// in this file reduce. Don't use this in your code. + +#define GTEST_ASSERT_(expression, on_failure) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar = (expression)) \ + ; \ + else \ + on_failure(gtest_ar.failure_message()) + + +// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +template +AssertionResult AssertPred1Helper(const char* pred_text, + const char* e1, + Pred pred, + const T1& v1) { + if (pred(v1)) return AssertionSuccess(); + + return AssertionFailure() << pred_text << "(" + << e1 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1; +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. +// Don't use this in your code. +#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, v1), \ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use +// this in your code. +#define GTEST_PRED1_(pred, v1, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ + #v1, \ + pred, \ + v1), on_failure) + +// Unary predicate assertion macros. +#define EXPECT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT1(pred_format, v1) \ + GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED1(pred, v1) \ + GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +template +AssertionResult AssertPred2Helper(const char* pred_text, + const char* e1, + const char* e2, + Pred pred, + const T1& v1, + const T2& v2) { + if (pred(v1, v2)) return AssertionSuccess(); + + return AssertionFailure() << pred_text << "(" + << e1 << ", " + << e2 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2; +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. +// Don't use this in your code. +#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use +// this in your code. +#define GTEST_PRED2_(pred, v1, v2, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ + #v1, \ + #v2, \ + pred, \ + v1, \ + v2), on_failure) + +// Binary predicate assertion macros. +#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ + GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED2(pred, v1, v2) \ + GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +template +AssertionResult AssertPred3Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3) { + if (pred(v1, v2, v3)) return AssertionSuccess(); + + return AssertionFailure() << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3; +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. +// Don't use this in your code. +#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use +// this in your code. +#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + pred, \ + v1, \ + v2, \ + v3), on_failure) + +// Ternary predicate assertion macros. +#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ + GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED3(pred, v1, v2, v3) \ + GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +template +AssertionResult AssertPred4Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4) { + if (pred(v1, v2, v3, v4)) return AssertionSuccess(); + + return AssertionFailure() << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4; +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. +// Don't use this in your code. +#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use +// this in your code. +#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4), on_failure) + +// 4-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ + GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ + GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) + + + +// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +template +AssertionResult AssertPred5Helper(const char* pred_text, + const char* e1, + const char* e2, + const char* e3, + const char* e4, + const char* e5, + Pred pred, + const T1& v1, + const T2& v2, + const T3& v3, + const T4& v4, + const T5& v5) { + if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); + + return AssertionFailure() << pred_text << "(" + << e1 << ", " + << e2 << ", " + << e3 << ", " + << e4 << ", " + << e5 << ") evaluates to false, where" + << "\n" << e1 << " evaluates to " << v1 + << "\n" << e2 << " evaluates to " << v2 + << "\n" << e3 << " evaluates to " << v3 + << "\n" << e4 << " evaluates to " << v4 + << "\n" << e5 << " evaluates to " << v5; +} + +// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. +// Don't use this in your code. +#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ + on_failure) + +// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use +// this in your code. +#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ + GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ + #v1, \ + #v2, \ + #v3, \ + #v4, \ + #v5, \ + pred, \ + v1, \ + v2, \ + v3, \ + v4, \ + v5), on_failure) + +// 5-ary predicate assertion macros. +#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) +#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ + GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) +#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ + GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) + + + +#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ + +// Macros for testing equalities and inequalities. +// +// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual +// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 +// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 +// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 +// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 +// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 +// +// When they are not, Google Test prints both the tested expressions and +// their actual values. The values must be compatible built-in types, +// or you will get a compiler error. By "compatible" we mean that the +// values can be compared by the respective operator. +// +// Note: +// +// 1. It is possible to make a user-defined type work with +// {ASSERT|EXPECT}_??(), but that requires overloading the +// comparison operators and is thus discouraged by the Google C++ +// Usage Guide. Therefore, you are advised to use the +// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are +// equal. +// +// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on +// pointers (in particular, C strings). Therefore, if you use it +// with two C strings, you are testing how their locations in memory +// are related, not how their content is related. To compare two C +// strings by content, use {ASSERT|EXPECT}_STR*(). +// +// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to +// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you +// what the actual value is when it fails, and similarly for the +// other comparisons. +// +// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() +// evaluate their arguments, which is undefined. +// +// 5. These macros evaluate their arguments exactly once. +// +// Examples: +// +// EXPECT_NE(5, Foo()); +// EXPECT_EQ(NULL, a_pointer); +// ASSERT_LT(i, array_size); +// ASSERT_GT(records.size(), 0) << "There is no record left."; + +#define EXPECT_EQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define EXPECT_NE(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) +#define EXPECT_LE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define EXPECT_LT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define EXPECT_GE(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define EXPECT_GT(val1, val2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +#define GTEST_ASSERT_EQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal:: \ + EqHelper::Compare, \ + expected, actual) +#define GTEST_ASSERT_NE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) +#define GTEST_ASSERT_LE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) +#define GTEST_ASSERT_LT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) +#define GTEST_ASSERT_GE(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) +#define GTEST_ASSERT_GT(val1, val2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) + +// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of +// ASSERT_XY(), which clashes with some users' own code. + +#if !GTEST_DONT_DEFINE_ASSERT_EQ +# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_NE +# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_LE +# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_LT +# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_GE +# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_GT +# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) +#endif + +// C-string Comparisons. All tests treat NULL and any non-NULL string +// as different. Two NULLs are equal. +// +// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 +// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 +// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case +// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case +// +// For wide or narrow string objects, you can use the +// {ASSERT|EXPECT}_??() macros. +// +// Don't depend on the order in which the arguments are evaluated, +// which is undefined. +// +// These macros evaluate their arguments exactly once. + +#define EXPECT_STREQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define EXPECT_STRNE(s1, s2) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define EXPECT_STRCASEEQ(expected, actual) \ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define EXPECT_STRCASENE(s1, s2)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +#define ASSERT_STREQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) +#define ASSERT_STRNE(s1, s2) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) +#define ASSERT_STRCASEEQ(expected, actual) \ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) +#define ASSERT_STRCASENE(s1, s2)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) + +// Macros for comparing floating-point numbers. +// +// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): +// Tests that two float values are almost equal. +// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): +// Tests that two double values are almost equal. +// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): +// Tests that v1 and v2 are within the given distance to each other. +// +// Google Test uses ULP-based comparison to automatically pick a default +// error bound that is appropriate for the operands. See the +// FloatingPoint template class in gtest-internal.h if you are +// interested in the implementation details. + +#define EXPECT_FLOAT_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_DOUBLE_EQ(expected, actual)\ + EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_FLOAT_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define ASSERT_DOUBLE_EQ(expected, actual)\ + ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ + expected, actual) + +#define EXPECT_NEAR(val1, val2, abs_error)\ + EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +#define ASSERT_NEAR(val1, val2, abs_error)\ + ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ + val1, val2, abs_error) + +// These predicate format functions work on floating-point values, and +// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. +// +// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2); +GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2); + + +#if GTEST_OS_WINDOWS + +// Macros that test for HRESULT failure and success, these are only useful +// on Windows, and rely on Windows SDK macros and APIs to compile. +// +// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) +// +// When expr unexpectedly fails or succeeds, Google Test prints the +// expected result and the actual result with both a human-readable +// string representation of the error, if available, as well as the +// hex result code. +# define EXPECT_HRESULT_SUCCEEDED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +# define ASSERT_HRESULT_SUCCEEDED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) + +# define EXPECT_HRESULT_FAILED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +# define ASSERT_HRESULT_FAILED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) + +#endif // GTEST_OS_WINDOWS + +// Macros that execute statement and check that it doesn't generate new fatal +// failures in the current thread. +// +// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); +// +// Examples: +// +// EXPECT_NO_FATAL_FAILURE(Process()); +// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; +// +#define ASSERT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) +#define EXPECT_NO_FATAL_FAILURE(statement) \ + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) + +// Causes a trace (including the source file path, the current line +// number, and the given message) to be included in every test failure +// message generated by code in the current scope. The effect is +// undone when the control leaves the current scope. +// +// The message argument can be anything streamable to std::ostream. +// +// In the implementation, we include the current line number as part +// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s +// to appear in the same block - as long as they are on different +// lines. +#define SCOPED_TRACE(message) \ + ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ + __FILE__, __LINE__, ::testing::Message() << (message)) + +// Compile-time assertion for type equality. +// StaticAssertTypeEq() compiles iff type1 and type2 are +// the same type. The value it returns is not interesting. +// +// Instead of making StaticAssertTypeEq a class template, we make it a +// function template that invokes a helper class template. This +// prevents a user from misusing StaticAssertTypeEq by +// defining objects of that type. +// +// CAVEAT: +// +// When used inside a method of a class template, +// StaticAssertTypeEq() is effective ONLY IF the method is +// instantiated. For example, given: +// +// template class Foo { +// public: +// void Bar() { testing::StaticAssertTypeEq(); } +// }; +// +// the code: +// +// void Test1() { Foo foo; } +// +// will NOT generate a compiler error, as Foo::Bar() is never +// actually instantiated. Instead, you need: +// +// void Test2() { Foo foo; foo.Bar(); } +// +// to cause a compiler error. +template +bool StaticAssertTypeEq() { + (void)internal::StaticAssertTypeEqHelper(); + return true; +} + +// Defines a test. +// +// The first parameter is the name of the test case, and the second +// parameter is the name of the test within the test case. +// +// The convention is to end the test case name with "Test". For +// example, a test case for the Foo class can be named FooTest. +// +// The user should put his test code between braces after using this +// macro. Example: +// +// TEST(FooTest, InitializesCorrectly) { +// Foo foo; +// EXPECT_TRUE(foo.StatusIsOK()); +// } + +// Note that we call GetTestTypeId() instead of GetTypeId< +// ::testing::Test>() here to get the type ID of testing::Test. This +// is to work around a suspected linker bug when using Google Test as +// a framework on Mac OS X. The bug causes GetTypeId< +// ::testing::Test>() to return different values depending on whether +// the call is from the Google Test framework itself or from user test +// code. GetTestTypeId() is guaranteed to always return the same +// value, as it always calls GetTypeId<>() from the Google Test +// framework. +#define GTEST_TEST(test_case_name, test_name)\ + GTEST_TEST_(test_case_name, test_name, \ + ::testing::Test, ::testing::internal::GetTestTypeId()) + +// Define this macro to 1 to omit the definition of TEST(), which +// is a generic name and clashes with some other libraries. +#if !GTEST_DONT_DEFINE_TEST +# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) +#endif + +// Defines a test that uses a test fixture. +// +// The first parameter is the name of the test fixture class, which +// also doubles as the test case name. The second parameter is the +// name of the test within the test case. +// +// A test fixture class must be declared earlier. The user should put +// his test code between braces after using this macro. Example: +// +// class FooTest : public testing::Test { +// protected: +// virtual void SetUp() { b_.AddElement(3); } +// +// Foo a_; +// Foo b_; +// }; +// +// TEST_F(FooTest, InitializesCorrectly) { +// EXPECT_TRUE(a_.StatusIsOK()); +// } +// +// TEST_F(FooTest, ReturnsElementCountCorrectly) { +// EXPECT_EQ(0, a_.size()); +// EXPECT_EQ(1, b_.size()); +// } + +#define TEST_F(test_fixture, test_name)\ + GTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId()) + +} // namespace testing + +// Use this function in main() to run all tests. It returns 0 if all +// tests are successful, or 1 otherwise. +// +// RUN_ALL_TESTS() should be invoked after the command line has been +// parsed by InitGoogleTest(). +// +// This function was formerly a macro; thus, it is in the global +// namespace and has an all-caps name. +int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; + +inline int RUN_ALL_TESTS() { + return ::testing::UnitTest::GetInstance()->Run(); +} + +#endif // GTEST_INCLUDE_GTEST_GTEST_H_ From b2d67bcbb5ffd74702cfa9ada31bb37212a787e1 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 12 Nov 2018 15:18:06 -0700 Subject: [PATCH 101/273] Remove tpls dir --- lib/kokkos/tpls/gtest/gtest/LICENSE | 28 - lib/kokkos/tpls/gtest/gtest/README | 13 - lib/kokkos/tpls/gtest/gtest/gtest-all.cc | 9594 -------- lib/kokkos/tpls/gtest/gtest/gtest-test-part.h | 1 - lib/kokkos/tpls/gtest/gtest/gtest.h | 20065 ---------------- 5 files changed, 29701 deletions(-) delete mode 100644 lib/kokkos/tpls/gtest/gtest/LICENSE delete mode 100644 lib/kokkos/tpls/gtest/gtest/README delete mode 100644 lib/kokkos/tpls/gtest/gtest/gtest-all.cc delete mode 120000 lib/kokkos/tpls/gtest/gtest/gtest-test-part.h delete mode 100644 lib/kokkos/tpls/gtest/gtest/gtest.h diff --git a/lib/kokkos/tpls/gtest/gtest/LICENSE b/lib/kokkos/tpls/gtest/gtest/LICENSE deleted file mode 100644 index 1941a11f8c..0000000000 --- a/lib/kokkos/tpls/gtest/gtest/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/kokkos/tpls/gtest/gtest/README b/lib/kokkos/tpls/gtest/gtest/README deleted file mode 100644 index 82964ecc32..0000000000 --- a/lib/kokkos/tpls/gtest/gtest/README +++ /dev/null @@ -1,13 +0,0 @@ -This is a fused source version of gtest 1.7.0. All that should be necessary to -start using gtest in your package is to declare the dependency and include -gtest/gtest.h. - -However, because some of the packages that are developed in Sierra do not use a -fused source version of gtest we need to make it possible for them to build with -this version as well as with their native build. To facilitate this we have -created symlinks for the other gtest headers that they use to the fused source -gtest.h. This will make it possible for them find the headers while still using -the fuse source version. This should not have any ill effects since the header is -protected and allows for only using the non-gtest.h headers in their files. - - diff --git a/lib/kokkos/tpls/gtest/gtest/gtest-all.cc b/lib/kokkos/tpls/gtest/gtest/gtest-all.cc deleted file mode 100644 index 735f581c95..0000000000 --- a/lib/kokkos/tpls/gtest/gtest/gtest-all.cc +++ /dev/null @@ -1,9594 +0,0 @@ -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: mheule@google.com (Markus Heule) -// -// Google C++ Testing Framework (Google Test) -// -// Sometimes it's desirable to build Google Test by compiling a single file. -// This file serves this purpose. - -// This line ensures that gtest.h can be compiled on its own, even -// when it's fused. -#include "gtest/gtest.h" - -// The following lines pull in the real gtest *.cc files. -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// The Google C++ Testing Framework (Google Test) - -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// Utilities for testing Google Test itself and code that uses Google Test -// (e.g. frameworks built on top of Google Test). - -#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ -#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ - - -namespace testing { - -// This helper class can be used to mock out Google Test failure reporting -// so that we can test Google Test or code that builds on Google Test. -// -// An object of this class appends a TestPartResult object to the -// TestPartResultArray object given in the constructor whenever a Google Test -// failure is reported. It can either intercept only failures that are -// generated in the same thread that created this object or it can intercept -// all generated failures. The scope of this mock object can be controlled with -// the second argument to the two arguments constructor. -class GTEST_API_ ScopedFakeTestPartResultReporter - : public TestPartResultReporterInterface { - public: - // The two possible mocking modes of this object. - enum InterceptMode { - INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. - INTERCEPT_ALL_THREADS // Intercepts all failures. - }; - - // The c'tor sets this object as the test part result reporter used - // by Google Test. The 'result' parameter specifies where to report the - // results. This reporter will only catch failures generated in the current - // thread. DEPRECATED - explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); - - // Same as above, but you can choose the interception scope of this object. - ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, - TestPartResultArray* result); - - // The d'tor restores the previous test part result reporter. - virtual ~ScopedFakeTestPartResultReporter(); - - // Appends the TestPartResult object to the TestPartResultArray - // received in the constructor. - // - // This method is from the TestPartResultReporterInterface - // interface. - virtual void ReportTestPartResult(const TestPartResult& result); - private: - void Init(); - - const InterceptMode intercept_mode_; - TestPartResultReporterInterface* old_reporter_; - TestPartResultArray* const result_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); -}; - -namespace internal { - -// A helper class for implementing EXPECT_FATAL_FAILURE() and -// EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given -// TestPartResultArray contains exactly one failure that has the given -// type and contains the given substring. If that's not the case, a -// non-fatal failure will be generated. -class GTEST_API_ SingleFailureChecker { - public: - // The constructor remembers the arguments. - SingleFailureChecker(const TestPartResultArray* results, - TestPartResult::Type type, - const string& substr); - ~SingleFailureChecker(); - private: - const TestPartResultArray* const results_; - const TestPartResult::Type type_; - const string substr_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); -}; - -} // namespace internal - -} // namespace testing - -// A set of macros for testing Google Test assertions or code that's expected -// to generate Google Test fatal failures. It verifies that the given -// statement will cause exactly one fatal Google Test failure with 'substr' -// being part of the failure message. -// -// There are two different versions of this macro. EXPECT_FATAL_FAILURE only -// affects and considers failures generated in the current thread and -// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. -// -// The verification of the assertion is done correctly even when the statement -// throws an exception or aborts the current function. -// -// Known restrictions: -// - 'statement' cannot reference local non-static variables or -// non-static members of the current object. -// - 'statement' cannot return a value. -// - You cannot stream a failure message to this macro. -// -// Note that even though the implementations of the following two -// macros are much alike, we cannot refactor them to use a common -// helper macro, due to some peculiarity in how the preprocessor -// works. The AcceptsMacroThatExpandsToUnprotectedComma test in -// gtest_unittest.cc will fail to compile if we do that. -#define EXPECT_FATAL_FAILURE(statement, substr) \ - do { \ - class GTestExpectFatalFailureHelper {\ - public:\ - static void Execute() { statement; }\ - };\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ - GTestExpectFatalFailureHelper::Execute();\ - }\ - } while (::testing::internal::AlwaysFalse()) - -#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ - do { \ - class GTestExpectFatalFailureHelper {\ - public:\ - static void Execute() { statement; }\ - };\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ALL_THREADS, >est_failures);\ - GTestExpectFatalFailureHelper::Execute();\ - }\ - } while (::testing::internal::AlwaysFalse()) - -// A macro for testing Google Test assertions or code that's expected to -// generate Google Test non-fatal failures. It asserts that the given -// statement will cause exactly one non-fatal Google Test failure with 'substr' -// being part of the failure message. -// -// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only -// affects and considers failures generated in the current thread and -// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. -// -// 'statement' is allowed to reference local variables and members of -// the current object. -// -// The verification of the assertion is done correctly even when the statement -// throws an exception or aborts the current function. -// -// Known restrictions: -// - You cannot stream a failure message to this macro. -// -// Note that even though the implementations of the following two -// macros are much alike, we cannot refactor them to use a common -// helper macro, due to some peculiarity in how the preprocessor -// works. If we do that, the code won't compile when the user gives -// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that -// expands to code containing an unprotected comma. The -// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc -// catches that. -// -// For the same reason, we have to write -// if (::testing::internal::AlwaysTrue()) { statement; } -// instead of -// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) -// to avoid an MSVC warning on unreachable code. -#define EXPECT_NONFATAL_FAILURE(statement, substr) \ - do {\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ - (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ - if (::testing::internal::AlwaysTrue()) { statement; }\ - }\ - } while (::testing::internal::AlwaysFalse()) - -#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ - do {\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ - (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ - >est_failures);\ - if (::testing::internal::AlwaysTrue()) { statement; }\ - }\ - } while (::testing::internal::AlwaysFalse()) - -#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include // NOLINT -#include -#include - -#if GTEST_OS_LINUX - -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). -# define GTEST_HAS_GETTIMEOFDAY_ 1 - -# include // NOLINT -# include // NOLINT -# include // NOLINT -// Declares vsnprintf(). This header is not available on Windows. -# include // NOLINT -# include // NOLINT -# include // NOLINT -# include // NOLINT -# include - -#elif GTEST_OS_SYMBIAN -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include // NOLINT - -#elif GTEST_OS_ZOS -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include // NOLINT - -// On z/OS we additionally need strings.h for strcasecmp. -# include // NOLINT - -#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. - -# include // NOLINT - -#elif GTEST_OS_WINDOWS // We are on Windows proper. - -# include // NOLINT -# include // NOLINT -# include // NOLINT -# include // NOLINT - -# if GTEST_OS_WINDOWS_MINGW -// MinGW has gettimeofday() but not _ftime64(). -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). -// TODO(kenton@google.com): There are other ways to get the time on -// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW -// supports these. consider using them instead. -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include // NOLINT -# endif // GTEST_OS_WINDOWS_MINGW - -// cpplint thinks that the header is already included, so we want to -// silence it. -# include // NOLINT - -#else - -// Assume other platforms have gettimeofday(). -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). -# define GTEST_HAS_GETTIMEOFDAY_ 1 - -// cpplint thinks that the header is already included, so we want to -// silence it. -# include // NOLINT -# include // NOLINT - -#endif // GTEST_OS_LINUX - -#if GTEST_HAS_EXCEPTIONS -# include -#endif - -#if GTEST_CAN_STREAM_RESULTS_ -# include // NOLINT -# include // NOLINT -#endif - -// Indicates that this translation unit is part of Google Test's -// implementation. It must come before gtest-internal-inl.h is -// included, or there will be a compiler error. This trick is to -// prevent a user from accidentally including gtest-internal-inl.h in -// his code. -#define GTEST_IMPLEMENTATION_ 1 -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Utility functions and classes used by the Google C++ testing framework. -// -// Author: wan@google.com (Zhanyong Wan) -// -// This file contains purely Google Test's internal implementation. Please -// DO NOT #INCLUDE IT IN A USER PROGRAM. - -#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ -#define GTEST_SRC_GTEST_INTERNAL_INL_H_ - -// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is -// part of Google Test's implementation; otherwise it's undefined. -#if !GTEST_IMPLEMENTATION_ -// A user is trying to include this from his code - just say no. -# error "gtest-internal-inl.h is part of Google Test's internal implementation." -# error "It must not be included except by Google Test itself." -#endif // GTEST_IMPLEMENTATION_ - -#ifndef _WIN32_WCE -# include -#endif // !_WIN32_WCE -#include -#include // For strtoll/_strtoul64/malloc/free. -#include // For memmove. - -#include -#include -#include - - -#if GTEST_CAN_STREAM_RESULTS_ -# include // NOLINT -# include // NOLINT -#endif - -#if GTEST_OS_WINDOWS -# include // NOLINT -#endif // GTEST_OS_WINDOWS - - -namespace testing { - -// Declares the flags. -// -// We don't want the users to modify this flag in the code, but want -// Google Test's own unit tests to be able to access it. Therefore we -// declare it here as opposed to in gtest.h. -GTEST_DECLARE_bool_(death_test_use_fork); - -namespace internal { - -// The value of GetTestTypeId() as seen from within the Google Test -// library. This is solely for testing GetTestTypeId(). -GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; - -// Names of the flags (needed for parsing Google Test flags). -const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; -const char kBreakOnFailureFlag[] = "break_on_failure"; -const char kCatchExceptionsFlag[] = "catch_exceptions"; -const char kColorFlag[] = "color"; -const char kFilterFlag[] = "filter"; -const char kListTestsFlag[] = "list_tests"; -const char kOutputFlag[] = "output"; -const char kPrintTimeFlag[] = "print_time"; -const char kRandomSeedFlag[] = "random_seed"; -const char kRepeatFlag[] = "repeat"; -const char kShuffleFlag[] = "shuffle"; -const char kStackTraceDepthFlag[] = "stack_trace_depth"; -const char kStreamResultToFlag[] = "stream_result_to"; -const char kThrowOnFailureFlag[] = "throw_on_failure"; - -// A valid random seed must be in [1, kMaxRandomSeed]. -const int kMaxRandomSeed = 99999; - -// g_help_flag is true iff the --help flag or an equivalent form is -// specified on the command line. -GTEST_API_ extern bool g_help_flag; - -// Returns the current time in milliseconds. -GTEST_API_ TimeInMillis GetTimeInMillis(); - -// Returns true iff Google Test should use colors in the output. -GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); - -// Formats the given time in milliseconds as seconds. -GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); - -// Converts the given time in milliseconds to a date string in the ISO 8601 -// format, without the timezone information. N.B.: due to the use the -// non-reentrant localtime() function, this function is not thread safe. Do -// not use it in any code that can be called from multiple threads. -GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); - -// Parses a string for an Int32 flag, in the form of "--flag=value". -// -// On success, stores the value of the flag in *value, and returns -// true. On failure, returns false without changing *value. -GTEST_API_ bool ParseInt32Flag( - const char* str, const char* flag, Int32* value); - -// Returns a random seed in range [1, kMaxRandomSeed] based on the -// given --gtest_random_seed flag value. -inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { - const unsigned int raw_seed = (random_seed_flag == 0) ? - static_cast(GetTimeInMillis()) : - static_cast(random_seed_flag); - - // Normalizes the actual seed to range [1, kMaxRandomSeed] such that - // it's easy to type. - const int normalized_seed = - static_cast((raw_seed - 1U) % - static_cast(kMaxRandomSeed)) + 1; - return normalized_seed; -} - -// Returns the first valid random seed after 'seed'. The behavior is -// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is -// considered to be 1. -inline int GetNextRandomSeed(int seed) { - GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) - << "Invalid random seed " << seed << " - must be in [1, " - << kMaxRandomSeed << "]."; - const int next_seed = seed + 1; - return (next_seed > kMaxRandomSeed) ? 1 : next_seed; -} - -// This class saves the values of all Google Test flags in its c'tor, and -// restores them in its d'tor. -class GTestFlagSaver { - public: - // The c'tor. - GTestFlagSaver() { - also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); - break_on_failure_ = GTEST_FLAG(break_on_failure); - catch_exceptions_ = GTEST_FLAG(catch_exceptions); - color_ = GTEST_FLAG(color); - death_test_style_ = GTEST_FLAG(death_test_style); - death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); - filter_ = GTEST_FLAG(filter); - internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); - list_tests_ = GTEST_FLAG(list_tests); - output_ = GTEST_FLAG(output); - print_time_ = GTEST_FLAG(print_time); - random_seed_ = GTEST_FLAG(random_seed); - repeat_ = GTEST_FLAG(repeat); - shuffle_ = GTEST_FLAG(shuffle); - stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); - stream_result_to_ = GTEST_FLAG(stream_result_to); - throw_on_failure_ = GTEST_FLAG(throw_on_failure); - } - - // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. - ~GTestFlagSaver() { - GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; - GTEST_FLAG(break_on_failure) = break_on_failure_; - GTEST_FLAG(catch_exceptions) = catch_exceptions_; - GTEST_FLAG(color) = color_; - GTEST_FLAG(death_test_style) = death_test_style_; - GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; - GTEST_FLAG(filter) = filter_; - GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; - GTEST_FLAG(list_tests) = list_tests_; - GTEST_FLAG(output) = output_; - GTEST_FLAG(print_time) = print_time_; - GTEST_FLAG(random_seed) = random_seed_; - GTEST_FLAG(repeat) = repeat_; - GTEST_FLAG(shuffle) = shuffle_; - GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; - GTEST_FLAG(stream_result_to) = stream_result_to_; - GTEST_FLAG(throw_on_failure) = throw_on_failure_; - } - - private: - // Fields for saving the original values of flags. - bool also_run_disabled_tests_; - bool break_on_failure_; - bool catch_exceptions_; - std::string color_; - std::string death_test_style_; - bool death_test_use_fork_; - std::string filter_; - std::string internal_run_death_test_; - bool list_tests_; - std::string output_; - bool print_time_; - internal::Int32 random_seed_; - internal::Int32 repeat_; - bool shuffle_; - internal::Int32 stack_trace_depth_; - std::string stream_result_to_; - bool throw_on_failure_; -} GTEST_ATTRIBUTE_UNUSED_; - -// Converts a Unicode code point to a narrow string in UTF-8 encoding. -// code_point parameter is of type UInt32 because wchar_t may not be -// wide enough to contain a code point. -// If the code_point is not a valid Unicode code point -// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted -// to "(Invalid Unicode 0xXXXXXXXX)". -GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); - -// Converts a wide string to a narrow string in UTF-8 encoding. -// The wide string is assumed to have the following encoding: -// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) -// UTF-32 if sizeof(wchar_t) == 4 (on Linux) -// Parameter str points to a null-terminated wide string. -// Parameter num_chars may additionally limit the number -// of wchar_t characters processed. -1 is used when the entire string -// should be processed. -// If the string contains code points that are not valid Unicode code points -// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output -// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding -// and contains invalid UTF-16 surrogate pairs, values in those pairs -// will be encoded as individual Unicode characters from Basic Normal Plane. -GTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars); - -// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file -// if the variable is present. If a file already exists at this location, this -// function will write over it. If the variable is present, but the file cannot -// be created, prints an error and exits. -void WriteToShardStatusFileIfNeeded(); - -// Checks whether sharding is enabled by examining the relevant -// environment variable values. If the variables are present, -// but inconsistent (e.g., shard_index >= total_shards), prints -// an error and exits. If in_subprocess_for_death_test, sharding is -// disabled because it must only be applied to the original test -// process. Otherwise, we could filter out death tests we intended to execute. -GTEST_API_ bool ShouldShard(const char* total_shards_str, - const char* shard_index_str, - bool in_subprocess_for_death_test); - -// Parses the environment variable var as an Int32. If it is unset, -// returns default_val. If it is not an Int32, prints an error and -// and aborts. -GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); - -// Given the total number of shards, the shard index, and the test id, -// returns true iff the test should be run on this shard. The test id is -// some arbitrary but unique non-negative integer assigned to each test -// method. Assumes that 0 <= shard_index < total_shards. -GTEST_API_ bool ShouldRunTestOnShard( - int total_shards, int shard_index, int test_id); - -// STL container utilities. - -// Returns the number of elements in the given container that satisfy -// the given predicate. -template -inline int CountIf(const Container& c, Predicate predicate) { - // Implemented as an explicit loop since std::count_if() in libCstd on - // Solaris has a non-standard signature. - int count = 0; - for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { - if (predicate(*it)) - ++count; - } - return count; -} - -// Applies a function/functor to each element in the container. -template -void ForEach(const Container& c, Functor functor) { - std::for_each(c.begin(), c.end(), functor); -} - -// Returns the i-th element of the vector, or default_value if i is not -// in range [0, v.size()). -template -inline E GetElementOr(const std::vector& v, int i, E default_value) { - return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; -} - -// Performs an in-place shuffle of a range of the vector's elements. -// 'begin' and 'end' are element indices as an STL-style range; -// i.e. [begin, end) are shuffled, where 'end' == size() means to -// shuffle to the end of the vector. -template -void ShuffleRange(internal::Random* random, int begin, int end, - std::vector* v) { - const int size = static_cast(v->size()); - GTEST_CHECK_(0 <= begin && begin <= size) - << "Invalid shuffle range start " << begin << ": must be in range [0, " - << size << "]."; - GTEST_CHECK_(begin <= end && end <= size) - << "Invalid shuffle range finish " << end << ": must be in range [" - << begin << ", " << size << "]."; - - // Fisher-Yates shuffle, from - // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle - for (int range_width = end - begin; range_width >= 2; range_width--) { - const int last_in_range = begin + range_width - 1; - const int selected = begin + random->Generate(range_width); - std::swap((*v)[selected], (*v)[last_in_range]); - } -} - -// Performs an in-place shuffle of the vector's elements. -template -inline void Shuffle(internal::Random* random, std::vector* v) { - ShuffleRange(random, 0, static_cast(v->size()), v); -} - -// A function for deleting an object. Handy for being used as a -// functor. -template -static void Delete(T* x) { - delete x; -} - -// A predicate that checks the key of a TestProperty against a known key. -// -// TestPropertyKeyIs is copyable. -class TestPropertyKeyIs { - public: - // Constructor. - // - // TestPropertyKeyIs has NO default constructor. - explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} - - // Returns true iff the test name of test property matches on key_. - bool operator()(const TestProperty& test_property) const { - return test_property.key() == key_; - } - - private: - std::string key_; -}; - -// Class UnitTestOptions. -// -// This class contains functions for processing options the user -// specifies when running the tests. It has only static members. -// -// In most cases, the user can specify an option using either an -// environment variable or a command line flag. E.g. you can set the -// test filter using either GTEST_FILTER or --gtest_filter. If both -// the variable and the flag are present, the latter overrides the -// former. -class GTEST_API_ UnitTestOptions { - public: - // Functions for processing the gtest_output flag. - - // Returns the output format, or "" for normal printed output. - static std::string GetOutputFormat(); - - // Returns the absolute path of the requested output file, or the - // default (test_detail.xml in the original working directory) if - // none was explicitly specified. - static std::string GetAbsolutePathToOutputFile(); - - // Functions for processing the gtest_filter flag. - - // Returns true iff the wildcard pattern matches the string. The - // first ':' or '\0' character in pattern marks the end of it. - // - // This recursive algorithm isn't very efficient, but is clear and - // works well enough for matching test names, which are short. - static bool PatternMatchesString(const char *pattern, const char *str); - - // Returns true iff the user-specified filter matches the test case - // name and the test name. - static bool FilterMatchesTest(const std::string &test_case_name, - const std::string &test_name); - -#if GTEST_OS_WINDOWS - // Function for supporting the gtest_catch_exception flag. - - // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the - // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. - // This function is useful as an __except condition. - static int GTestShouldProcessSEH(DWORD exception_code); -#endif // GTEST_OS_WINDOWS - - // Returns true if "name" matches the ':' separated list of glob-style - // filters in "filter". - static bool MatchesFilter(const std::string& name, const char* filter); -}; - -// Returns the current application's name, removing directory path if that -// is present. Used by UnitTestOptions::GetOutputFile. -GTEST_API_ FilePath GetCurrentExecutableName(); - -// The role interface for getting the OS stack trace as a string. -class OsStackTraceGetterInterface { - public: - OsStackTraceGetterInterface() {} - virtual ~OsStackTraceGetterInterface() {} - - // Returns the current OS stack trace as an std::string. Parameters: - // - // max_depth - the maximum number of stack frames to be included - // in the trace. - // skip_count - the number of top frames to be skipped; doesn't count - // against max_depth. - virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; - - // UponLeavingGTest() should be called immediately before Google Test calls - // user code. It saves some information about the current stack that - // CurrentStackTrace() will use to find and hide Google Test stack frames. - virtual void UponLeavingGTest() = 0; - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); -}; - -// A working implementation of the OsStackTraceGetterInterface interface. -class OsStackTraceGetter : public OsStackTraceGetterInterface { - public: - OsStackTraceGetter() : caller_frame_(NULL) {} - - virtual string CurrentStackTrace(int max_depth, int skip_count) - GTEST_LOCK_EXCLUDED_(mutex_); - - virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_); - - // This string is inserted in place of stack frames that are part of - // Google Test's implementation. - static const char* const kElidedFramesMarker; - - private: - Mutex mutex_; // protects all internal state - - // We save the stack frame below the frame that calls user code. - // We do this because the address of the frame immediately below - // the user code changes between the call to UponLeavingGTest() - // and any calls to CurrentStackTrace() from within the user code. - void* caller_frame_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); -}; - -// Information about a Google Test trace point. -struct TraceInfo { - const char* file; - int line; - std::string message; -}; - -// This is the default global test part result reporter used in UnitTestImpl. -// This class should only be used by UnitTestImpl. -class DefaultGlobalTestPartResultReporter - : public TestPartResultReporterInterface { - public: - explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); - // Implements the TestPartResultReporterInterface. Reports the test part - // result in the current test. - virtual void ReportTestPartResult(const TestPartResult& result); - - private: - UnitTestImpl* const unit_test_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); -}; - -// This is the default per thread test part result reporter used in -// UnitTestImpl. This class should only be used by UnitTestImpl. -class DefaultPerThreadTestPartResultReporter - : public TestPartResultReporterInterface { - public: - explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); - // Implements the TestPartResultReporterInterface. The implementation just - // delegates to the current global test part result reporter of *unit_test_. - virtual void ReportTestPartResult(const TestPartResult& result); - - private: - UnitTestImpl* const unit_test_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); -}; - -// The private implementation of the UnitTest class. We don't protect -// the methods under a mutex, as this class is not accessible by a -// user and the UnitTest class that delegates work to this class does -// proper locking. -class GTEST_API_ UnitTestImpl { - public: - explicit UnitTestImpl(UnitTest* parent); - virtual ~UnitTestImpl(); - - // There are two different ways to register your own TestPartResultReporter. - // You can register your own repoter to listen either only for test results - // from the current thread or for results from all threads. - // By default, each per-thread test result repoter just passes a new - // TestPartResult to the global test result reporter, which registers the - // test part result for the currently running test. - - // Returns the global test part result reporter. - TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); - - // Sets the global test part result reporter. - void SetGlobalTestPartResultReporter( - TestPartResultReporterInterface* reporter); - - // Returns the test part result reporter for the current thread. - TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); - - // Sets the test part result reporter for the current thread. - void SetTestPartResultReporterForCurrentThread( - TestPartResultReporterInterface* reporter); - - // Gets the number of successful test cases. - int successful_test_case_count() const; - - // Gets the number of failed test cases. - int failed_test_case_count() const; - - // Gets the number of all test cases. - int total_test_case_count() const; - - // Gets the number of all test cases that contain at least one test - // that should run. - int test_case_to_run_count() const; - - // Gets the number of successful tests. - int successful_test_count() const; - - // Gets the number of failed tests. - int failed_test_count() const; - - // Gets the number of disabled tests that will be reported in the XML report. - int reportable_disabled_test_count() const; - - // Gets the number of disabled tests. - int disabled_test_count() const; - - // Gets the number of tests to be printed in the XML report. - int reportable_test_count() const; - - // Gets the number of all tests. - int total_test_count() const; - - // Gets the number of tests that should run. - int test_to_run_count() const; - - // Gets the time of the test program start, in ms from the start of the - // UNIX epoch. - TimeInMillis start_timestamp() const { return start_timestamp_; } - - // Gets the elapsed time, in milliseconds. - TimeInMillis elapsed_time() const { return elapsed_time_; } - - // Returns true iff the unit test passed (i.e. all test cases passed). - bool Passed() const { return !Failed(); } - - // Returns true iff the unit test failed (i.e. some test case failed - // or something outside of all tests failed). - bool Failed() const { - return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); - } - - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - const TestCase* GetTestCase(int i) const { - const int index = GetElementOr(test_case_indices_, i, -1); - return index < 0 ? NULL : test_cases_[i]; - } - - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - TestCase* GetMutableTestCase(int i) { - const int index = GetElementOr(test_case_indices_, i, -1); - return index < 0 ? NULL : test_cases_[index]; - } - - // Provides access to the event listener list. - TestEventListeners* listeners() { return &listeners_; } - - // Returns the TestResult for the test that's currently running, or - // the TestResult for the ad hoc test if no test is running. - TestResult* current_test_result(); - - // Returns the TestResult for the ad hoc test. - const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } - - // Sets the OS stack trace getter. - // - // Does nothing if the input and the current OS stack trace getter - // are the same; otherwise, deletes the old getter and makes the - // input the current getter. - void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); - - // Returns the current OS stack trace getter if it is not NULL; - // otherwise, creates an OsStackTraceGetter, makes it the current - // getter, and returns it. - OsStackTraceGetterInterface* os_stack_trace_getter(); - - // Returns the current OS stack trace as an std::string. - // - // The maximum number of stack frames to be included is specified by - // the gtest_stack_trace_depth flag. The skip_count parameter - // specifies the number of top frames to be skipped, which doesn't - // count against the number of frames to be included. - // - // For example, if Foo() calls Bar(), which in turn calls - // CurrentOsStackTraceExceptTop(1), Foo() will be included in the - // trace but Bar() and CurrentOsStackTraceExceptTop() won't. - std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; - - // Finds and returns a TestCase with the given name. If one doesn't - // exist, creates one and returns it. - // - // Arguments: - // - // test_case_name: name of the test case - // type_param: the name of the test's type parameter, or NULL if - // this is not a typed or a type-parameterized test. - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case - TestCase* GetTestCase(const char* test_case_name, - const char* type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc); - - // Adds a TestInfo to the unit test. - // - // Arguments: - // - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case - // test_info: the TestInfo object - void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc, - TestInfo* test_info) { - // In order to support thread-safe death tests, we need to - // remember the original working directory when the test program - // was first invoked. We cannot do this in RUN_ALL_TESTS(), as - // the user may have changed the current directory before calling - // RUN_ALL_TESTS(). Therefore we capture the current directory in - // AddTestInfo(), which is called to register a TEST or TEST_F - // before main() is reached. - if (original_working_dir_.IsEmpty()) { - original_working_dir_.Set(FilePath::GetCurrentDir()); - GTEST_CHECK_(!original_working_dir_.IsEmpty()) - << "Failed to get the current working directory."; - } - - GetTestCase(test_info->test_case_name(), - test_info->type_param(), - set_up_tc, - tear_down_tc)->AddTestInfo(test_info); - } - -#if GTEST_HAS_PARAM_TEST - // Returns ParameterizedTestCaseRegistry object used to keep track of - // value-parameterized tests and instantiate and register them. - internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { - return parameterized_test_registry_; - } -#endif // GTEST_HAS_PARAM_TEST - - // Sets the TestCase object for the test that's currently running. - void set_current_test_case(TestCase* a_current_test_case) { - current_test_case_ = a_current_test_case; - } - - // Sets the TestInfo object for the test that's currently running. If - // current_test_info is NULL, the assertion results will be stored in - // ad_hoc_test_result_. - void set_current_test_info(TestInfo* a_current_test_info) { - current_test_info_ = a_current_test_info; - } - - // Registers all parameterized tests defined using TEST_P and - // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter - // combination. This method can be called more then once; it has guards - // protecting from registering the tests more then once. If - // value-parameterized tests are disabled, RegisterParameterizedTests is - // present but does nothing. - void RegisterParameterizedTests(); - - // Runs all tests in this UnitTest object, prints the result, and - // returns true if all tests are successful. If any exception is - // thrown during a test, this test is considered to be failed, but - // the rest of the tests will still be run. - bool RunAllTests(); - - // Clears the results of all tests, except the ad hoc tests. - void ClearNonAdHocTestResult() { - ForEach(test_cases_, TestCase::ClearTestCaseResult); - } - - // Clears the results of ad-hoc test assertions. - void ClearAdHocTestResult() { - ad_hoc_test_result_.Clear(); - } - - // Adds a TestProperty to the current TestResult object when invoked in a - // context of a test or a test case, or to the global property set. If the - // result already contains a property with the same key, the value will be - // updated. - void RecordProperty(const TestProperty& test_property); - - enum ReactionToSharding { - HONOR_SHARDING_PROTOCOL, - IGNORE_SHARDING_PROTOCOL - }; - - // Matches the full name of each test against the user-specified - // filter to decide whether the test should run, then records the - // result in each TestCase and TestInfo object. - // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests - // based on sharding variables in the environment. - // Returns the number of tests that should run. - int FilterTests(ReactionToSharding shard_tests); - - // Prints the names of the tests matching the user-specified filter flag. - void ListTestsMatchingFilter(); - - const TestCase* current_test_case() const { return current_test_case_; } - TestInfo* current_test_info() { return current_test_info_; } - const TestInfo* current_test_info() const { return current_test_info_; } - - // Returns the vector of environments that need to be set-up/torn-down - // before/after the tests are run. - std::vector& environments() { return environments_; } - - // Getters for the per-thread Google Test trace stack. - std::vector& gtest_trace_stack() { - return *(gtest_trace_stack_.pointer()); - } - const std::vector& gtest_trace_stack() const { - return gtest_trace_stack_.get(); - } - -#if GTEST_HAS_DEATH_TEST - void InitDeathTestSubprocessControlInfo() { - internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); - } - // Returns a pointer to the parsed --gtest_internal_run_death_test - // flag, or NULL if that flag was not specified. - // This information is useful only in a death test child process. - // Must not be called before a call to InitGoogleTest. - const InternalRunDeathTestFlag* internal_run_death_test_flag() const { - return internal_run_death_test_flag_.get(); - } - - // Returns a pointer to the current death test factory. - internal::DeathTestFactory* death_test_factory() { - return death_test_factory_.get(); - } - - void SuppressTestEventsIfInSubprocess(); - - friend class ReplaceDeathTestFactory; -#endif // GTEST_HAS_DEATH_TEST - - // Initializes the event listener performing XML output as specified by - // UnitTestOptions. Must not be called before InitGoogleTest. - void ConfigureXmlOutput(); - -#if GTEST_CAN_STREAM_RESULTS_ - // Initializes the event listener for streaming test results to a socket. - // Must not be called before InitGoogleTest. - void ConfigureStreamingOutput(); -#endif - - // Performs initialization dependent upon flag values obtained in - // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to - // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest - // this function is also called from RunAllTests. Since this function can be - // called more than once, it has to be idempotent. - void PostFlagParsingInit(); - - // Gets the random seed used at the start of the current test iteration. - int random_seed() const { return random_seed_; } - - // Gets the random number generator. - internal::Random* random() { return &random_; } - - // Shuffles all test cases, and the tests within each test case, - // making sure that death tests are still run first. - void ShuffleTests(); - - // Restores the test cases and tests to their order before the first shuffle. - void UnshuffleTests(); - - // Returns the value of GTEST_FLAG(catch_exceptions) at the moment - // UnitTest::Run() starts. - bool catch_exceptions() const { return catch_exceptions_; } - - private: - friend class ::testing::UnitTest; - - // Used by UnitTest::Run() to capture the state of - // GTEST_FLAG(catch_exceptions) at the moment it starts. - void set_catch_exceptions(bool value) { catch_exceptions_ = value; } - - // The UnitTest object that owns this implementation object. - UnitTest* const parent_; - - // The working directory when the first TEST() or TEST_F() was - // executed. - internal::FilePath original_working_dir_; - - // The default test part result reporters. - DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; - DefaultPerThreadTestPartResultReporter - default_per_thread_test_part_result_reporter_; - - // Points to (but doesn't own) the global test part result reporter. - TestPartResultReporterInterface* global_test_part_result_repoter_; - - // Protects read and write access to global_test_part_result_reporter_. - internal::Mutex global_test_part_result_reporter_mutex_; - - // Points to (but doesn't own) the per-thread test part result reporter. - internal::ThreadLocal - per_thread_test_part_result_reporter_; - - // The vector of environments that need to be set-up/torn-down - // before/after the tests are run. - std::vector environments_; - - // The vector of TestCases in their original order. It owns the - // elements in the vector. - std::vector test_cases_; - - // Provides a level of indirection for the test case list to allow - // easy shuffling and restoring the test case order. The i-th - // element of this vector is the index of the i-th test case in the - // shuffled order. - std::vector test_case_indices_; - -#if GTEST_HAS_PARAM_TEST - // ParameterizedTestRegistry object used to register value-parameterized - // tests. - internal::ParameterizedTestCaseRegistry parameterized_test_registry_; - - // Indicates whether RegisterParameterizedTests() has been called already. - bool parameterized_tests_registered_; -#endif // GTEST_HAS_PARAM_TEST - - // Index of the last death test case registered. Initially -1. - int last_death_test_case_; - - // This points to the TestCase for the currently running test. It - // changes as Google Test goes through one test case after another. - // When no test is running, this is set to NULL and Google Test - // stores assertion results in ad_hoc_test_result_. Initially NULL. - TestCase* current_test_case_; - - // This points to the TestInfo for the currently running test. It - // changes as Google Test goes through one test after another. When - // no test is running, this is set to NULL and Google Test stores - // assertion results in ad_hoc_test_result_. Initially NULL. - TestInfo* current_test_info_; - - // Normally, a user only writes assertions inside a TEST or TEST_F, - // or inside a function called by a TEST or TEST_F. Since Google - // Test keeps track of which test is current running, it can - // associate such an assertion with the test it belongs to. - // - // If an assertion is encountered when no TEST or TEST_F is running, - // Google Test attributes the assertion result to an imaginary "ad hoc" - // test, and records the result in ad_hoc_test_result_. - TestResult ad_hoc_test_result_; - - // The list of event listeners that can be used to track events inside - // Google Test. - TestEventListeners listeners_; - - // The OS stack trace getter. Will be deleted when the UnitTest - // object is destructed. By default, an OsStackTraceGetter is used, - // but the user can set this field to use a custom getter if that is - // desired. - OsStackTraceGetterInterface* os_stack_trace_getter_; - - // True iff PostFlagParsingInit() has been called. - bool post_flag_parse_init_performed_; - - // The random number seed used at the beginning of the test run. - int random_seed_; - - // Our random number generator. - internal::Random random_; - - // The time of the test program start, in ms from the start of the - // UNIX epoch. - TimeInMillis start_timestamp_; - - // How long the test took to run, in milliseconds. - TimeInMillis elapsed_time_; - -#if GTEST_HAS_DEATH_TEST - // The decomposed components of the gtest_internal_run_death_test flag, - // parsed when RUN_ALL_TESTS is called. - internal::scoped_ptr internal_run_death_test_flag_; - internal::scoped_ptr death_test_factory_; -#endif // GTEST_HAS_DEATH_TEST - - // A per-thread stack of traces created by the SCOPED_TRACE() macro. - internal::ThreadLocal > gtest_trace_stack_; - - // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() - // starts. - bool catch_exceptions_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); -}; // class UnitTestImpl - -// Convenience function for accessing the global UnitTest -// implementation object. -inline UnitTestImpl* GetUnitTestImpl() { - return UnitTest::GetInstance()->impl(); -} - -#if GTEST_USES_SIMPLE_RE - -// Internal helper functions for implementing the simple regular -// expression matcher. -GTEST_API_ bool IsInSet(char ch, const char* str); -GTEST_API_ bool IsAsciiDigit(char ch); -GTEST_API_ bool IsAsciiPunct(char ch); -GTEST_API_ bool IsRepeat(char ch); -GTEST_API_ bool IsAsciiWhiteSpace(char ch); -GTEST_API_ bool IsAsciiWordChar(char ch); -GTEST_API_ bool IsValidEscape(char ch); -GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); -GTEST_API_ bool ValidateRegex(const char* regex); -GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); -GTEST_API_ bool MatchRepetitionAndRegexAtHead( - bool escaped, char ch, char repeat, const char* regex, const char* str); -GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); - -#endif // GTEST_USES_SIMPLE_RE - -// Parses the command line for Google Test flags, without initializing -// other parts of Google Test. -GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); -GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); - -#if GTEST_HAS_DEATH_TEST - -// Returns the message describing the last system error, regardless of the -// platform. -GTEST_API_ std::string GetLastErrnoDescription(); - -# if GTEST_OS_WINDOWS -// Provides leak-safe Windows kernel handle ownership. -class AutoHandle { - public: - AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} - explicit AutoHandle(HANDLE handle) : handle_(handle) {} - - ~AutoHandle() { Reset(); } - - HANDLE Get() const { return handle_; } - void Reset() { Reset(INVALID_HANDLE_VALUE); } - void Reset(HANDLE handle) { - if (handle != handle_) { - if (handle_ != INVALID_HANDLE_VALUE) - ::CloseHandle(handle_); - handle_ = handle; - } - } - - private: - HANDLE handle_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); -}; -# endif // GTEST_OS_WINDOWS - -// Attempts to parse a string into a positive integer pointed to by the -// number parameter. Returns true if that is possible. -// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use -// it here. -template -bool ParseNaturalNumber(const ::std::string& str, Integer* number) { - // Fail fast if the given string does not begin with a digit; - // this bypasses strtoXXX's "optional leading whitespace and plus - // or minus sign" semantics, which are undesirable here. - if (str.empty() || !IsDigit(str[0])) { - return false; - } - errno = 0; - - char* end; - // BiggestConvertible is the largest integer type that system-provided - // string-to-number conversion routines can return. - -# if GTEST_OS_WINDOWS && !defined(__GNUC__) - - // MSVC and C++ Builder define __int64 instead of the standard long long. - typedef unsigned __int64 BiggestConvertible; - const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); - -# else - - typedef unsigned long long BiggestConvertible; // NOLINT - const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); - -# endif // GTEST_OS_WINDOWS && !defined(__GNUC__) - - const bool parse_success = *end == '\0' && errno == 0; - - // TODO(vladl@google.com): Convert this to compile time assertion when it is - // available. - GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); - - const Integer result = static_cast(parsed); - if (parse_success && static_cast(result) == parsed) { - *number = result; - return true; - } - return false; -} -#endif // GTEST_HAS_DEATH_TEST - -// TestResult contains some private methods that should be hidden from -// Google Test user but are required for testing. This class allow our tests -// to access them. -// -// This class is supplied only for the purpose of testing Google Test's own -// constructs. Do not use it in user tests, either directly or indirectly. -class TestResultAccessor { - public: - static void RecordProperty(TestResult* test_result, - const std::string& xml_element, - const TestProperty& property) { - test_result->RecordProperty(xml_element, property); - } - - static void ClearTestPartResults(TestResult* test_result) { - test_result->ClearTestPartResults(); - } - - static const std::vector& test_part_results( - const TestResult& test_result) { - return test_result.test_part_results(); - } -}; - -#if GTEST_CAN_STREAM_RESULTS_ - -// Streams test results to the given port on the given host machine. -class StreamingListener : public EmptyTestEventListener { - public: - // Abstract base class for writing strings to a socket. - class AbstractSocketWriter { - public: - virtual ~AbstractSocketWriter() {} - - // Sends a string to the socket. - virtual void Send(const string& message) = 0; - - // Closes the socket. - virtual void CloseConnection() {} - - // Sends a string and a newline to the socket. - void SendLn(const string& message) { - Send(message + "\n"); - } - }; - - // Concrete class for actually writing strings to a socket. - class SocketWriter : public AbstractSocketWriter { - public: - SocketWriter(const string& host, const string& port) - : sockfd_(-1), host_name_(host), port_num_(port) { - MakeConnection(); - } - - virtual ~SocketWriter() { - if (sockfd_ != -1) - CloseConnection(); - } - - // Sends a string to the socket. - virtual void Send(const string& message) { - GTEST_CHECK_(sockfd_ != -1) - << "Send() can be called only when there is a connection."; - - const int len = static_cast(message.length()); - if (write(sockfd_, message.c_str(), len) != len) { - GTEST_LOG_(WARNING) - << "stream_result_to: failed to stream to " - << host_name_ << ":" << port_num_; - } - } - - private: - // Creates a client socket and connects to the server. - void MakeConnection(); - - // Closes the socket. - void CloseConnection() { - GTEST_CHECK_(sockfd_ != -1) - << "CloseConnection() can be called only when there is a connection."; - - close(sockfd_); - sockfd_ = -1; - } - - int sockfd_; // socket file descriptor - const string host_name_; - const string port_num_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); - }; // class SocketWriter - - // Escapes '=', '&', '%', and '\n' characters in str as "%xx". - static string UrlEncode(const char* str); - - StreamingListener(const string& host, const string& port) - : socket_writer_(new SocketWriter(host, port)) { Start(); } - - explicit StreamingListener(AbstractSocketWriter* socket_writer) - : socket_writer_(socket_writer) { Start(); } - - void OnTestProgramStart(const UnitTest& /* unit_test */) { - SendLn("event=TestProgramStart"); - } - - void OnTestProgramEnd(const UnitTest& unit_test) { - // Note that Google Test current only report elapsed time for each - // test iteration, not for the entire test program. - SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); - - // Notify the streaming server to stop. - socket_writer_->CloseConnection(); - } - - void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { - SendLn("event=TestIterationStart&iteration=" + - StreamableToString(iteration)); - } - - void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { - SendLn("event=TestIterationEnd&passed=" + - FormatBool(unit_test.Passed()) + "&elapsed_time=" + - StreamableToString(unit_test.elapsed_time()) + "ms"); - } - - void OnTestCaseStart(const TestCase& test_case) { - SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); - } - - void OnTestCaseEnd(const TestCase& test_case) { - SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) - + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) - + "ms"); - } - - void OnTestStart(const TestInfo& test_info) { - SendLn(std::string("event=TestStart&name=") + test_info.name()); - } - - void OnTestEnd(const TestInfo& test_info) { - SendLn("event=TestEnd&passed=" + - FormatBool((test_info.result())->Passed()) + - "&elapsed_time=" + - StreamableToString((test_info.result())->elapsed_time()) + "ms"); - } - - void OnTestPartResult(const TestPartResult& test_part_result) { - const char* file_name = test_part_result.file_name(); - if (file_name == NULL) - file_name = ""; - SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + - "&line=" + StreamableToString(test_part_result.line_number()) + - "&message=" + UrlEncode(test_part_result.message())); - } - - private: - // Sends the given message and a newline to the socket. - void SendLn(const string& message) { socket_writer_->SendLn(message); } - - // Called at the start of streaming to notify the receiver what - // protocol we are using. - void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } - - string FormatBool(bool value) { return value ? "1" : "0"; } - - const scoped_ptr socket_writer_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); -}; // class StreamingListener - -#endif // GTEST_CAN_STREAM_RESULTS_ - -} // namespace internal -} // namespace testing - -#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ -#undef GTEST_IMPLEMENTATION_ - -#if GTEST_OS_WINDOWS -# define vsnprintf _vsnprintf -#endif // GTEST_OS_WINDOWS - -namespace testing { - -using internal::CountIf; -using internal::ForEach; -using internal::GetElementOr; -using internal::Shuffle; - -// Constants. - -// A test whose test case name or test name matches this filter is -// disabled and not run. -static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; - -// A test case whose name matches this filter is considered a death -// test case and will be run before test cases whose name doesn't -// match this filter. -static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; - -// A test filter that matches everything. -static const char kUniversalFilter[] = "*"; - -// The default output file for XML output. -static const char kDefaultOutputFile[] = "test_detail.xml"; - -// The environment variable name for the test shard index. -static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; -// The environment variable name for the total number of test shards. -static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; -// The environment variable name for the test shard status file. -static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; - -namespace internal { - -// The text used in failure messages to indicate the start of the -// stack trace. -const char kStackTraceMarker[] = "\nStack trace:\n"; - -// g_help_flag is true iff the --help flag or an equivalent form is -// specified on the command line. -bool g_help_flag = false; - -} // namespace internal - -static const char* GetDefaultFilter() { - return kUniversalFilter; -} - -GTEST_DEFINE_bool_( - also_run_disabled_tests, - internal::BoolFromGTestEnv("also_run_disabled_tests", false), - "Run disabled tests too, in addition to the tests normally being run."); - -GTEST_DEFINE_bool_( - break_on_failure, - internal::BoolFromGTestEnv("break_on_failure", false), - "True iff a failed assertion should be a debugger break-point."); - -GTEST_DEFINE_bool_( - catch_exceptions, - internal::BoolFromGTestEnv("catch_exceptions", true), - "True iff " GTEST_NAME_ - " should catch exceptions and treat them as test failures."); - -GTEST_DEFINE_string_( - color, - internal::StringFromGTestEnv("color", "auto"), - "Whether to use colors in the output. Valid values: yes, no, " - "and auto. 'auto' means to use colors if the output is " - "being sent to a terminal and the TERM environment variable " - "is set to a terminal type that supports colors."); - -GTEST_DEFINE_string_( - filter, - internal::StringFromGTestEnv("filter", GetDefaultFilter()), - "A colon-separated list of glob (not regex) patterns " - "for filtering the tests to run, optionally followed by a " - "'-' and a : separated list of negative patterns (tests to " - "exclude). A test is run if it matches one of the positive " - "patterns and does not match any of the negative patterns."); - -GTEST_DEFINE_bool_(list_tests, false, - "List all tests without running them."); - -GTEST_DEFINE_string_( - output, - internal::StringFromGTestEnv("output", ""), - "A format (currently must be \"xml\"), optionally followed " - "by a colon and an output file name or directory. A directory " - "is indicated by a trailing pathname separator. " - "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " - "If a directory is specified, output files will be created " - "within that directory, with file-names based on the test " - "executable's name and, if necessary, made unique by adding " - "digits."); - -GTEST_DEFINE_bool_( - print_time, - internal::BoolFromGTestEnv("print_time", true), - "True iff " GTEST_NAME_ - " should display elapsed time in text output."); - -GTEST_DEFINE_int32_( - random_seed, - internal::Int32FromGTestEnv("random_seed", 0), - "Random number seed to use when shuffling test orders. Must be in range " - "[1, 99999], or 0 to use a seed based on the current time."); - -GTEST_DEFINE_int32_( - repeat, - internal::Int32FromGTestEnv("repeat", 1), - "How many times to repeat each test. Specify a negative number " - "for repeating forever. Useful for shaking out flaky tests."); - -GTEST_DEFINE_bool_( - show_internal_stack_frames, false, - "True iff " GTEST_NAME_ " should include internal stack frames when " - "printing test failure stack traces."); - -GTEST_DEFINE_bool_( - shuffle, - internal::BoolFromGTestEnv("shuffle", false), - "True iff " GTEST_NAME_ - " should randomize tests' order on every run."); - -GTEST_DEFINE_int32_( - stack_trace_depth, - internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), - "The maximum number of stack frames to print when an " - "assertion fails. The valid range is 0 through 100, inclusive."); - -GTEST_DEFINE_string_( - stream_result_to, - internal::StringFromGTestEnv("stream_result_to", ""), - "This flag specifies the host name and the port number on which to stream " - "test results. Example: \"localhost:555\". The flag is effective only on " - "Linux."); - -GTEST_DEFINE_bool_( - throw_on_failure, - internal::BoolFromGTestEnv("throw_on_failure", false), - "When this flag is specified, a failed assertion will throw an exception " - "if exceptions are enabled or exit the program with a non-zero code " - "otherwise."); - -namespace internal { - -// Generates a random number from [0, range), using a Linear -// Congruential Generator (LCG). Crashes if 'range' is 0 or greater -// than kMaxRange. -UInt32 Random::Generate(UInt32 range) { - // These constants are the same as are used in glibc's rand(3). - state_ = (1103515245U*state_ + 12345U) % kMaxRange; - - GTEST_CHECK_(range > 0) - << "Cannot generate a number in the range [0, 0)."; - GTEST_CHECK_(range <= kMaxRange) - << "Generation of a number in [0, " << range << ") was requested, " - << "but this can only generate numbers in [0, " << kMaxRange << ")."; - - // Converting via modulus introduces a bit of downward bias, but - // it's simple, and a linear congruential generator isn't too good - // to begin with. - return state_ % range; -} - -// GTestIsInitialized() returns true iff the user has initialized -// Google Test. Useful for catching the user mistake of not initializing -// Google Test before calling RUN_ALL_TESTS(). -// -// A user must call testing::InitGoogleTest() to initialize Google -// Test. g_init_gtest_count is set to the number of times -// InitGoogleTest() has been called. We don't protect this variable -// under a mutex as it is only accessed in the main thread. -GTEST_API_ int g_init_gtest_count = 0; -static bool GTestIsInitialized() { return g_init_gtest_count != 0; } - -// Iterates over a vector of TestCases, keeping a running sum of the -// results of calling a given int-returning method on each. -// Returns the sum. -static int SumOverTestCaseList(const std::vector& case_list, - int (TestCase::*method)() const) { - int sum = 0; - for (size_t i = 0; i < case_list.size(); i++) { - sum += (case_list[i]->*method)(); - } - return sum; -} - -// Returns true iff the test case passed. -static bool TestCasePassed(const TestCase* test_case) { - return test_case->should_run() && test_case->Passed(); -} - -// Returns true iff the test case failed. -static bool TestCaseFailed(const TestCase* test_case) { - return test_case->should_run() && test_case->Failed(); -} - -// Returns true iff test_case contains at least one test that should -// run. -static bool ShouldRunTestCase(const TestCase* test_case) { - return test_case->should_run(); -} - -// AssertHelper constructor. -AssertHelper::AssertHelper(TestPartResult::Type type, - const char* file, - int line, - const char* message) - : data_(new AssertHelperData(type, file, line, message)) { -} - -AssertHelper::~AssertHelper() { - delete data_; -} - -// Message assignment, for assertion streaming support. -void AssertHelper::operator=(const Message& message) const { - UnitTest::GetInstance()-> - AddTestPartResult(data_->type, data_->file, data_->line, - AppendUserMessage(data_->message, message), - UnitTest::GetInstance()->impl() - ->CurrentOsStackTraceExceptTop(1) - // Skips the stack frame for this function itself. - ); // NOLINT -} - -// Mutex for linked pointers. -GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); - -// Application pathname gotten in InitGoogleTest. -std::string g_executable_path; - -// Returns the current application's name, removing directory path if that -// is present. -FilePath GetCurrentExecutableName() { - FilePath result; - -#if GTEST_OS_WINDOWS - result.Set(FilePath(g_executable_path).RemoveExtension("exe")); -#else - result.Set(FilePath(g_executable_path)); -#endif // GTEST_OS_WINDOWS - - return result.RemoveDirectoryName(); -} - -// Functions for processing the gtest_output flag. - -// Returns the output format, or "" for normal printed output. -std::string UnitTestOptions::GetOutputFormat() { - const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); - if (gtest_output_flag == NULL) return std::string(""); - - const char* const colon = strchr(gtest_output_flag, ':'); - return (colon == NULL) ? - std::string(gtest_output_flag) : - std::string(gtest_output_flag, colon - gtest_output_flag); -} - -// Returns the name of the requested output file, or the default if none -// was explicitly specified. -std::string UnitTestOptions::GetAbsolutePathToOutputFile() { - const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); - if (gtest_output_flag == NULL) - return ""; - - const char* const colon = strchr(gtest_output_flag, ':'); - if (colon == NULL) - return internal::FilePath::ConcatPaths( - internal::FilePath( - UnitTest::GetInstance()->original_working_dir()), - internal::FilePath(kDefaultOutputFile)).string(); - - internal::FilePath output_name(colon + 1); - if (!output_name.IsAbsolutePath()) - // TODO(wan@google.com): on Windows \some\path is not an absolute - // path (as its meaning depends on the current drive), yet the - // following logic for turning it into an absolute path is wrong. - // Fix it. - output_name = internal::FilePath::ConcatPaths( - internal::FilePath(UnitTest::GetInstance()->original_working_dir()), - internal::FilePath(colon + 1)); - - if (!output_name.IsDirectory()) - return output_name.string(); - - internal::FilePath result(internal::FilePath::GenerateUniqueFileName( - output_name, internal::GetCurrentExecutableName(), - GetOutputFormat().c_str())); - return result.string(); -} - -// Returns true iff the wildcard pattern matches the string. The -// first ':' or '\0' character in pattern marks the end of it. -// -// This recursive algorithm isn't very efficient, but is clear and -// works well enough for matching test names, which are short. -bool UnitTestOptions::PatternMatchesString(const char *pattern, - const char *str) { - switch (*pattern) { - case '\0': - case ':': // Either ':' or '\0' marks the end of the pattern. - return *str == '\0'; - case '?': // Matches any single character. - return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); - case '*': // Matches any string (possibly empty) of characters. - return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || - PatternMatchesString(pattern + 1, str); - default: // Non-special character. Matches itself. - return *pattern == *str && - PatternMatchesString(pattern + 1, str + 1); - } -} - -bool UnitTestOptions::MatchesFilter( - const std::string& name, const char* filter) { - const char *cur_pattern = filter; - for (;;) { - if (PatternMatchesString(cur_pattern, name.c_str())) { - return true; - } - - // Finds the next pattern in the filter. - cur_pattern = strchr(cur_pattern, ':'); - - // Returns if no more pattern can be found. - if (cur_pattern == NULL) { - return false; - } - - // Skips the pattern separater (the ':' character). - cur_pattern++; - } -} - -// Returns true iff the user-specified filter matches the test case -// name and the test name. -bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, - const std::string &test_name) { - const std::string& full_name = test_case_name + "." + test_name.c_str(); - - // Split --gtest_filter at '-', if there is one, to separate into - // positive filter and negative filter portions - const char* const p = GTEST_FLAG(filter).c_str(); - const char* const dash = strchr(p, '-'); - std::string positive; - std::string negative; - if (dash == NULL) { - positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter - negative = ""; - } else { - positive = std::string(p, dash); // Everything up to the dash - negative = std::string(dash + 1); // Everything after the dash - if (positive.empty()) { - // Treat '-test1' as the same as '*-test1' - positive = kUniversalFilter; - } - } - - // A filter is a colon-separated list of patterns. It matches a - // test if any pattern in it matches the test. - return (MatchesFilter(full_name, positive.c_str()) && - !MatchesFilter(full_name, negative.c_str())); -} - -#if GTEST_HAS_SEH -// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the -// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. -// This function is useful as an __except condition. -int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { - // Google Test should handle a SEH exception if: - // 1. the user wants it to, AND - // 2. this is not a breakpoint exception, AND - // 3. this is not a C++ exception (VC++ implements them via SEH, - // apparently). - // - // SEH exception code for C++ exceptions. - // (see http://support.microsoft.com/kb/185294 for more information). - const DWORD kCxxExceptionCode = 0xe06d7363; - - bool should_handle = true; - - if (!GTEST_FLAG(catch_exceptions)) - should_handle = false; - else if (exception_code == EXCEPTION_BREAKPOINT) - should_handle = false; - else if (exception_code == kCxxExceptionCode) - should_handle = false; - - return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; -} -#endif // GTEST_HAS_SEH - -} // namespace internal - -// The c'tor sets this object as the test part result reporter used by -// Google Test. The 'result' parameter specifies where to report the -// results. Intercepts only failures from the current thread. -ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( - TestPartResultArray* result) - : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), - result_(result) { - Init(); -} - -// The c'tor sets this object as the test part result reporter used by -// Google Test. The 'result' parameter specifies where to report the -// results. -ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( - InterceptMode intercept_mode, TestPartResultArray* result) - : intercept_mode_(intercept_mode), - result_(result) { - Init(); -} - -void ScopedFakeTestPartResultReporter::Init() { - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - if (intercept_mode_ == INTERCEPT_ALL_THREADS) { - old_reporter_ = impl->GetGlobalTestPartResultReporter(); - impl->SetGlobalTestPartResultReporter(this); - } else { - old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); - impl->SetTestPartResultReporterForCurrentThread(this); - } -} - -// The d'tor restores the test part result reporter used by Google Test -// before. -ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - if (intercept_mode_ == INTERCEPT_ALL_THREADS) { - impl->SetGlobalTestPartResultReporter(old_reporter_); - } else { - impl->SetTestPartResultReporterForCurrentThread(old_reporter_); - } -} - -// Increments the test part result count and remembers the result. -// This method is from the TestPartResultReporterInterface interface. -void ScopedFakeTestPartResultReporter::ReportTestPartResult( - const TestPartResult& result) { - result_->Append(result); -} - -namespace internal { - -// Returns the type ID of ::testing::Test. We should always call this -// instead of GetTypeId< ::testing::Test>() to get the type ID of -// testing::Test. This is to work around a suspected linker bug when -// using Google Test as a framework on Mac OS X. The bug causes -// GetTypeId< ::testing::Test>() to return different values depending -// on whether the call is from the Google Test framework itself or -// from user test code. GetTestTypeId() is guaranteed to always -// return the same value, as it always calls GetTypeId<>() from the -// gtest.cc, which is within the Google Test framework. -TypeId GetTestTypeId() { - return GetTypeId(); -} - -// The value of GetTestTypeId() as seen from within the Google Test -// library. This is solely for testing GetTestTypeId(). -extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); - -// This predicate-formatter checks that 'results' contains a test part -// failure of the given type and that the failure message contains the -// given substring. -AssertionResult HasOneFailure(const char* /* results_expr */, - const char* /* type_expr */, - const char* /* substr_expr */, - const TestPartResultArray& results, - TestPartResult::Type type, - const string& substr) { - const std::string expected(type == TestPartResult::kFatalFailure ? - "1 fatal failure" : - "1 non-fatal failure"); - Message msg; - if (results.size() != 1) { - msg << "Expected: " << expected << "\n" - << " Actual: " << results.size() << " failures"; - for (int i = 0; i < results.size(); i++) { - msg << "\n" << results.GetTestPartResult(i); - } - return AssertionFailure() << msg; - } - - const TestPartResult& r = results.GetTestPartResult(0); - if (r.type() != type) { - return AssertionFailure() << "Expected: " << expected << "\n" - << " Actual:\n" - << r; - } - - if (strstr(r.message(), substr.c_str()) == NULL) { - return AssertionFailure() << "Expected: " << expected << " containing \"" - << substr << "\"\n" - << " Actual:\n" - << r; - } - - return AssertionSuccess(); -} - -// The constructor of SingleFailureChecker remembers where to look up -// test part results, what type of failure we expect, and what -// substring the failure message should contain. -SingleFailureChecker:: SingleFailureChecker( - const TestPartResultArray* results, - TestPartResult::Type type, - const string& substr) - : results_(results), - type_(type), - substr_(substr) {} - -// The destructor of SingleFailureChecker verifies that the given -// TestPartResultArray contains exactly one failure that has the given -// type and contains the given substring. If that's not the case, a -// non-fatal failure will be generated. -SingleFailureChecker::~SingleFailureChecker() { - EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); -} - -DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( - UnitTestImpl* unit_test) : unit_test_(unit_test) {} - -void DefaultGlobalTestPartResultReporter::ReportTestPartResult( - const TestPartResult& result) { - unit_test_->current_test_result()->AddTestPartResult(result); - unit_test_->listeners()->repeater()->OnTestPartResult(result); -} - -DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( - UnitTestImpl* unit_test) : unit_test_(unit_test) {} - -void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( - const TestPartResult& result) { - unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); -} - -// Returns the global test part result reporter. -TestPartResultReporterInterface* -UnitTestImpl::GetGlobalTestPartResultReporter() { - internal::MutexLock lock(&global_test_part_result_reporter_mutex_); - return global_test_part_result_repoter_; -} - -// Sets the global test part result reporter. -void UnitTestImpl::SetGlobalTestPartResultReporter( - TestPartResultReporterInterface* reporter) { - internal::MutexLock lock(&global_test_part_result_reporter_mutex_); - global_test_part_result_repoter_ = reporter; -} - -// Returns the test part result reporter for the current thread. -TestPartResultReporterInterface* -UnitTestImpl::GetTestPartResultReporterForCurrentThread() { - return per_thread_test_part_result_reporter_.get(); -} - -// Sets the test part result reporter for the current thread. -void UnitTestImpl::SetTestPartResultReporterForCurrentThread( - TestPartResultReporterInterface* reporter) { - per_thread_test_part_result_reporter_.set(reporter); -} - -// Gets the number of successful test cases. -int UnitTestImpl::successful_test_case_count() const { - return CountIf(test_cases_, TestCasePassed); -} - -// Gets the number of failed test cases. -int UnitTestImpl::failed_test_case_count() const { - return CountIf(test_cases_, TestCaseFailed); -} - -// Gets the number of all test cases. -int UnitTestImpl::total_test_case_count() const { - return static_cast(test_cases_.size()); -} - -// Gets the number of all test cases that contain at least one test -// that should run. -int UnitTestImpl::test_case_to_run_count() const { - return CountIf(test_cases_, ShouldRunTestCase); -} - -// Gets the number of successful tests. -int UnitTestImpl::successful_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); -} - -// Gets the number of failed tests. -int UnitTestImpl::failed_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); -} - -// Gets the number of disabled tests that will be reported in the XML report. -int UnitTestImpl::reportable_disabled_test_count() const { - return SumOverTestCaseList(test_cases_, - &TestCase::reportable_disabled_test_count); -} - -// Gets the number of disabled tests. -int UnitTestImpl::disabled_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); -} - -// Gets the number of tests to be printed in the XML report. -int UnitTestImpl::reportable_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); -} - -// Gets the number of all tests. -int UnitTestImpl::total_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); -} - -// Gets the number of tests that should run. -int UnitTestImpl::test_to_run_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); -} - -// Returns the current OS stack trace as an std::string. -// -// The maximum number of stack frames to be included is specified by -// the gtest_stack_trace_depth flag. The skip_count parameter -// specifies the number of top frames to be skipped, which doesn't -// count against the number of frames to be included. -// -// For example, if Foo() calls Bar(), which in turn calls -// CurrentOsStackTraceExceptTop(1), Foo() will be included in the -// trace but Bar() and CurrentOsStackTraceExceptTop() won't. -std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { - (void)skip_count; - return ""; -} - -// Returns the current time in milliseconds. -TimeInMillis GetTimeInMillis() { -#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) - // Difference between 1970-01-01 and 1601-01-01 in milliseconds. - // http://analogous.blogspot.com/2005/04/epoch.html - const TimeInMillis kJavaEpochToWinFileTimeDelta = - static_cast(116444736UL) * 100000UL; - const DWORD kTenthMicrosInMilliSecond = 10000; - - SYSTEMTIME now_systime; - FILETIME now_filetime; - ULARGE_INTEGER now_int64; - // TODO(kenton@google.com): Shouldn't this just use - // GetSystemTimeAsFileTime()? - GetSystemTime(&now_systime); - if (SystemTimeToFileTime(&now_systime, &now_filetime)) { - now_int64.LowPart = now_filetime.dwLowDateTime; - now_int64.HighPart = now_filetime.dwHighDateTime; - now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - - kJavaEpochToWinFileTimeDelta; - return now_int64.QuadPart; - } - return 0; -#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ - __timeb64 now; - -# ifdef _MSC_VER - - // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 - // (deprecated function) there. - // TODO(kenton@google.com): Use GetTickCount()? Or use - // SystemTimeToFileTime() -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4996) // Temporarily disables warning 4996. - _ftime64(&now); -# pragma warning(pop) // Restores the warning state. -# else - - _ftime64(&now); - -# endif // _MSC_VER - - return static_cast(now.time) * 1000 + now.millitm; -#elif GTEST_HAS_GETTIMEOFDAY_ - struct timeval now; - gettimeofday(&now, NULL); - return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; -#else -# error "Don't know how to get the current time on your system." -#endif -} - -// Utilities - -// class String. - -#if GTEST_OS_WINDOWS_MOBILE -// Creates a UTF-16 wide string from the given ANSI string, allocating -// memory using new. The caller is responsible for deleting the return -// value using delete[]. Returns the wide string, or NULL if the -// input is NULL. -LPCWSTR String::AnsiToUtf16(const char* ansi) { - if (!ansi) return NULL; - const int length = strlen(ansi); - const int unicode_length = - MultiByteToWideChar(CP_ACP, 0, ansi, length, - NULL, 0); - WCHAR* unicode = new WCHAR[unicode_length + 1]; - MultiByteToWideChar(CP_ACP, 0, ansi, length, - unicode, unicode_length); - unicode[unicode_length] = 0; - return unicode; -} - -// Creates an ANSI string from the given wide string, allocating -// memory using new. The caller is responsible for deleting the return -// value using delete[]. Returns the ANSI string, or NULL if the -// input is NULL. -const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { - if (!utf16_str) return NULL; - const int ansi_length = - WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, - NULL, 0, NULL, NULL); - char* ansi = new char[ansi_length + 1]; - WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, - ansi, ansi_length, NULL, NULL); - ansi[ansi_length] = 0; - return ansi; -} - -#endif // GTEST_OS_WINDOWS_MOBILE - -// Compares two C strings. Returns true iff they have the same content. -// -// Unlike strcmp(), this function can handle NULL argument(s). A NULL -// C string is considered different to any non-NULL C string, -// including the empty string. -bool String::CStringEquals(const char * lhs, const char * rhs) { - if ( lhs == NULL ) return rhs == NULL; - - if ( rhs == NULL ) return false; - - return strcmp(lhs, rhs) == 0; -} - -#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING - -// Converts an array of wide chars to a narrow string using the UTF-8 -// encoding, and streams the result to the given Message object. -static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, - Message* msg) { - for (size_t i = 0; i != length; ) { // NOLINT - if (wstr[i] != L'\0') { - *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); - while (i != length && wstr[i] != L'\0') - i++; - } else { - *msg << '\0'; - i++; - } - } -} - -#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING - -} // namespace internal - -// Constructs an empty Message. -// We allocate the stringstream separately because otherwise each use of -// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's -// stack frame leading to huge stack frames in some cases; gcc does not reuse -// the stack space. -Message::Message() : ss_(new ::std::stringstream) { - // By default, we want there to be enough precision when printing - // a double to a Message. - *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); -} - -// These two overloads allow streaming a wide C string to a Message -// using the UTF-8 encoding. -Message& Message::operator <<(const wchar_t* wide_c_str) { - return *this << internal::String::ShowWideCString(wide_c_str); -} -Message& Message::operator <<(wchar_t* wide_c_str) { - return *this << internal::String::ShowWideCString(wide_c_str); -} - -#if GTEST_HAS_STD_WSTRING -// Converts the given wide string to a narrow string using the UTF-8 -// encoding, and streams the result to this Message object. -Message& Message::operator <<(const ::std::wstring& wstr) { - internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); - return *this; -} -#endif // GTEST_HAS_STD_WSTRING - -#if GTEST_HAS_GLOBAL_WSTRING -// Converts the given wide string to a narrow string using the UTF-8 -// encoding, and streams the result to this Message object. -Message& Message::operator <<(const ::wstring& wstr) { - internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); - return *this; -} -#endif // GTEST_HAS_GLOBAL_WSTRING - -// Gets the text streamed to this object so far as an std::string. -// Each '\0' character in the buffer is replaced with "\\0". -std::string Message::GetString() const { - return internal::StringStreamToString(ss_.get()); -} - -// AssertionResult constructors. -// Used in EXPECT_TRUE/FALSE(assertion_result). -AssertionResult::AssertionResult(const AssertionResult& other) - : success_(other.success_), - message_(other.message_.get() != NULL ? - new ::std::string(*other.message_) : - static_cast< ::std::string*>(NULL)) { -} - -// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. -AssertionResult AssertionResult::operator!() const { - AssertionResult negation(!success_); - if (message_.get() != NULL) - negation << *message_; - return negation; -} - -// Makes a successful assertion result. -AssertionResult AssertionSuccess() { - return AssertionResult(true); -} - -// Makes a failed assertion result. -AssertionResult AssertionFailure() { - return AssertionResult(false); -} - -// Makes a failed assertion result with the given failure message. -// Deprecated; use AssertionFailure() << message. -AssertionResult AssertionFailure(const Message& message) { - return AssertionFailure() << message; -} - -namespace internal { - -// Constructs and returns the message for an equality assertion -// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. -// -// The first four parameters are the expressions used in the assertion -// and their values, as strings. For example, for ASSERT_EQ(foo, bar) -// where foo is 5 and bar is 6, we have: -// -// expected_expression: "foo" -// actual_expression: "bar" -// expected_value: "5" -// actual_value: "6" -// -// The ignoring_case parameter is true iff the assertion is a -// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will -// be inserted into the message. -AssertionResult EqFailure(const char* expected_expression, - const char* actual_expression, - const std::string& expected_value, - const std::string& actual_value, - bool ignoring_case) { - Message msg; - msg << "Value of: " << actual_expression; - if (actual_value != actual_expression) { - msg << "\n Actual: " << actual_value; - } - - msg << "\nExpected: " << expected_expression; - if (ignoring_case) { - msg << " (ignoring case)"; - } - if (expected_value != expected_expression) { - msg << "\nWhich is: " << expected_value; - } - - return AssertionFailure() << msg; -} - -// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. -std::string GetBoolAssertionFailureMessage( - const AssertionResult& assertion_result, - const char* expression_text, - const char* actual_predicate_value, - const char* expected_predicate_value) { - const char* actual_message = assertion_result.message(); - Message msg; - msg << "Value of: " << expression_text - << "\n Actual: " << actual_predicate_value; - if (actual_message[0] != '\0') - msg << " (" << actual_message << ")"; - msg << "\nExpected: " << expected_predicate_value; - return msg.GetString(); -} - -// Helper function for implementing ASSERT_NEAR. -AssertionResult DoubleNearPredFormat(const char* expr1, - const char* expr2, - const char* abs_error_expr, - double val1, - double val2, - double abs_error) { - const double diff = fabs(val1 - val2); - if (diff <= abs_error) return AssertionSuccess(); - - // TODO(wan): do not print the value of an expression if it's - // already a literal. - return AssertionFailure() - << "The difference between " << expr1 << " and " << expr2 - << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" - << expr1 << " evaluates to " << val1 << ",\n" - << expr2 << " evaluates to " << val2 << ", and\n" - << abs_error_expr << " evaluates to " << abs_error << "."; -} - - -// Helper template for implementing FloatLE() and DoubleLE(). -template -AssertionResult FloatingPointLE(const char* expr1, - const char* expr2, - RawType val1, - RawType val2) { - // Returns success if val1 is less than val2, - if (val1 < val2) { - return AssertionSuccess(); - } - - // or if val1 is almost equal to val2. - const FloatingPoint lhs(val1), rhs(val2); - if (lhs.AlmostEquals(rhs)) { - return AssertionSuccess(); - } - - // Note that the above two checks will both fail if either val1 or - // val2 is NaN, as the IEEE floating-point standard requires that - // any predicate involving a NaN must return false. - - ::std::stringstream val1_ss; - val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) - << val1; - - ::std::stringstream val2_ss; - val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) - << val2; - - return AssertionFailure() - << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" - << " Actual: " << StringStreamToString(&val1_ss) << " vs " - << StringStreamToString(&val2_ss); -} - -} // namespace internal - -// Asserts that val1 is less than, or almost equal to, val2. Fails -// otherwise. In particular, it fails if either val1 or val2 is NaN. -AssertionResult FloatLE(const char* expr1, const char* expr2, - float val1, float val2) { - return internal::FloatingPointLE(expr1, expr2, val1, val2); -} - -// Asserts that val1 is less than, or almost equal to, val2. Fails -// otherwise. In particular, it fails if either val1 or val2 is NaN. -AssertionResult DoubleLE(const char* expr1, const char* expr2, - double val1, double val2) { - return internal::FloatingPointLE(expr1, expr2, val1, val2); -} - -namespace internal { - -// The helper function for {ASSERT|EXPECT}_EQ with int or enum -// arguments. -AssertionResult CmpHelperEQ(const char* expected_expression, - const char* actual_expression, - BiggestInt expected, - BiggestInt actual) { - if (expected == actual) { - return AssertionSuccess(); - } - - return EqFailure(expected_expression, - actual_expression, - FormatForComparisonFailureMessage(expected, actual), - FormatForComparisonFailureMessage(actual, expected), - false); -} - -// A macro for implementing the helper functions needed to implement -// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here -// just to avoid copy-and-paste of similar code. -#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ -AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ - BiggestInt val1, BiggestInt val2) {\ - if (val1 op val2) {\ - return AssertionSuccess();\ - } else {\ - return AssertionFailure() \ - << "Expected: (" << expr1 << ") " #op " (" << expr2\ - << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ - << " vs " << FormatForComparisonFailureMessage(val2, val1);\ - }\ -} - -// Implements the helper function for {ASSERT|EXPECT}_NE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(NE, !=) -// Implements the helper function for {ASSERT|EXPECT}_LE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(LE, <=) -// Implements the helper function for {ASSERT|EXPECT}_LT with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(LT, < ) -// Implements the helper function for {ASSERT|EXPECT}_GE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(GE, >=) -// Implements the helper function for {ASSERT|EXPECT}_GT with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(GT, > ) - -#undef GTEST_IMPL_CMP_HELPER_ - -// The helper function for {ASSERT|EXPECT}_STREQ. -AssertionResult CmpHelperSTREQ(const char* expected_expression, - const char* actual_expression, - const char* expected, - const char* actual) { - if (String::CStringEquals(expected, actual)) { - return AssertionSuccess(); - } - - return EqFailure(expected_expression, - actual_expression, - PrintToString(expected), - PrintToString(actual), - false); -} - -// The helper function for {ASSERT|EXPECT}_STRCASEEQ. -AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, - const char* actual_expression, - const char* expected, - const char* actual) { - if (String::CaseInsensitiveCStringEquals(expected, actual)) { - return AssertionSuccess(); - } - - return EqFailure(expected_expression, - actual_expression, - PrintToString(expected), - PrintToString(actual), - true); -} - -// The helper function for {ASSERT|EXPECT}_STRNE. -AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const char* s1, - const char* s2) { - if (!String::CStringEquals(s1, s2)) { - return AssertionSuccess(); - } else { - return AssertionFailure() << "Expected: (" << s1_expression << ") != (" - << s2_expression << "), actual: \"" - << s1 << "\" vs \"" << s2 << "\""; - } -} - -// The helper function for {ASSERT|EXPECT}_STRCASENE. -AssertionResult CmpHelperSTRCASENE(const char* s1_expression, - const char* s2_expression, - const char* s1, - const char* s2) { - if (!String::CaseInsensitiveCStringEquals(s1, s2)) { - return AssertionSuccess(); - } else { - return AssertionFailure() - << "Expected: (" << s1_expression << ") != (" - << s2_expression << ") (ignoring case), actual: \"" - << s1 << "\" vs \"" << s2 << "\""; - } -} - -} // namespace internal - -namespace { - -// Helper functions for implementing IsSubString() and IsNotSubstring(). - -// This group of overloaded functions return true iff needle is a -// substring of haystack. NULL is considered a substring of itself -// only. - -bool IsSubstringPred(const char* needle, const char* haystack) { - if (needle == NULL || haystack == NULL) - return needle == haystack; - - return strstr(haystack, needle) != NULL; -} - -bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { - if (needle == NULL || haystack == NULL) - return needle == haystack; - - return wcsstr(haystack, needle) != NULL; -} - -// StringType here can be either ::std::string or ::std::wstring. -template -bool IsSubstringPred(const StringType& needle, - const StringType& haystack) { - return haystack.find(needle) != StringType::npos; -} - -// This function implements either IsSubstring() or IsNotSubstring(), -// depending on the value of the expected_to_be_substring parameter. -// StringType here can be const char*, const wchar_t*, ::std::string, -// or ::std::wstring. -template -AssertionResult IsSubstringImpl( - bool expected_to_be_substring, - const char* needle_expr, const char* haystack_expr, - const StringType& needle, const StringType& haystack) { - if (IsSubstringPred(needle, haystack) == expected_to_be_substring) - return AssertionSuccess(); - - const bool is_wide_string = sizeof(needle[0]) > 1; - const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; - return AssertionFailure() - << "Value of: " << needle_expr << "\n" - << " Actual: " << begin_string_quote << needle << "\"\n" - << "Expected: " << (expected_to_be_substring ? "" : "not ") - << "a substring of " << haystack_expr << "\n" - << "Which is: " << begin_string_quote << haystack << "\""; -} - -} // namespace - -// IsSubstring() and IsNotSubstring() check whether needle is a -// substring of haystack (NULL is considered a substring of itself -// only), and return an appropriate error message when they fail. - -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack) { - return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack) { - return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack) { - return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack) { - return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack) { - return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack) { - return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); -} - -#if GTEST_HAS_STD_WSTRING -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack) { - return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); -} - -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack) { - return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); -} -#endif // GTEST_HAS_STD_WSTRING - -namespace internal { - -#if GTEST_OS_WINDOWS - -namespace { - -// Helper function for IsHRESULT{SuccessFailure} predicates -AssertionResult HRESULTFailureHelper(const char* expr, - const char* expected, - long hr) { // NOLINT -# if GTEST_OS_WINDOWS_MOBILE - - // Windows CE doesn't support FormatMessage. - const char error_text[] = ""; - -# else - - // Looks up the human-readable system message for the HRESULT code - // and since we're not passing any params to FormatMessage, we don't - // want inserts expanded. - const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS; - const DWORD kBufSize = 4096; - // Gets the system's human readable message string for this HRESULT. - char error_text[kBufSize] = { '\0' }; - DWORD message_length = ::FormatMessageA(kFlags, - 0, // no source, we're asking system - hr, // the error - 0, // no line width restrictions - error_text, // output buffer - kBufSize, // buf size - NULL); // no arguments for inserts - // Trims tailing white space (FormatMessage leaves a trailing CR-LF) - for (; message_length && IsSpace(error_text[message_length - 1]); - --message_length) { - error_text[message_length - 1] = '\0'; - } - -# endif // GTEST_OS_WINDOWS_MOBILE - - const std::string error_hex("0x" + String::FormatHexInt(hr)); - return ::testing::AssertionFailure() - << "Expected: " << expr << " " << expected << ".\n" - << " Actual: " << error_hex << " " << error_text << "\n"; -} - -} // namespace - -AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT - if (SUCCEEDED(hr)) { - return AssertionSuccess(); - } - return HRESULTFailureHelper(expr, "succeeds", hr); -} - -AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT - if (FAILED(hr)) { - return AssertionSuccess(); - } - return HRESULTFailureHelper(expr, "fails", hr); -} - -#endif // GTEST_OS_WINDOWS - -// Utility functions for encoding Unicode text (wide strings) in -// UTF-8. - -// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 -// like this: -// -// Code-point length Encoding -// 0 - 7 bits 0xxxxxxx -// 8 - 11 bits 110xxxxx 10xxxxxx -// 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx -// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - -// The maximum code-point a one-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; - -// The maximum code-point a two-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; - -// The maximum code-point a three-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; - -// The maximum code-point a four-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; - -// Chops off the n lowest bits from a bit pattern. Returns the n -// lowest bits. As a side effect, the original bit pattern will be -// shifted to the right by n bits. -inline UInt32 ChopLowBits(UInt32* bits, int n) { - const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); - *bits >>= n; - return low_bits; -} - -// Converts a Unicode code point to a narrow string in UTF-8 encoding. -// code_point parameter is of type UInt32 because wchar_t may not be -// wide enough to contain a code point. -// If the code_point is not a valid Unicode code point -// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted -// to "(Invalid Unicode 0xXXXXXXXX)". -std::string CodePointToUtf8(UInt32 code_point) { - if (code_point > kMaxCodePoint4) { - return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; - } - - char str[5]; // Big enough for the largest valid code point. - if (code_point <= kMaxCodePoint1) { - str[1] = '\0'; - str[0] = static_cast(code_point); // 0xxxxxxx - } else if (code_point <= kMaxCodePoint2) { - str[2] = '\0'; - str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[0] = static_cast(0xC0 | code_point); // 110xxxxx - } else if (code_point <= kMaxCodePoint3) { - str[3] = '\0'; - str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[0] = static_cast(0xE0 | code_point); // 1110xxxx - } else { // code_point <= kMaxCodePoint4 - str[4] = '\0'; - str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx - str[0] = static_cast(0xF0 | code_point); // 11110xxx - } - return str; -} - -// The following two functions only make sense if the the system -// uses UTF-16 for wide string encoding. All supported systems -// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. - -// Determines if the arguments constitute UTF-16 surrogate pair -// and thus should be combined into a single Unicode code point -// using CreateCodePointFromUtf16SurrogatePair. -inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { - return sizeof(wchar_t) == 2 && - (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; -} - -// Creates a Unicode code point from UTF16 surrogate pair. -inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, - wchar_t second) { - const UInt32 mask = (1 << 10) - 1; - return (sizeof(wchar_t) == 2) ? - (((first & mask) << 10) | (second & mask)) + 0x10000 : - // This function should not be called when the condition is - // false, but we provide a sensible default in case it is. - static_cast(first); -} - -// Converts a wide string to a narrow string in UTF-8 encoding. -// The wide string is assumed to have the following encoding: -// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) -// UTF-32 if sizeof(wchar_t) == 4 (on Linux) -// Parameter str points to a null-terminated wide string. -// Parameter num_chars may additionally limit the number -// of wchar_t characters processed. -1 is used when the entire string -// should be processed. -// If the string contains code points that are not valid Unicode code points -// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output -// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding -// and contains invalid UTF-16 surrogate pairs, values in those pairs -// will be encoded as individual Unicode characters from Basic Normal Plane. -std::string WideStringToUtf8(const wchar_t* str, int num_chars) { - if (num_chars == -1) - num_chars = static_cast(wcslen(str)); - - ::std::stringstream stream; - for (int i = 0; i < num_chars; ++i) { - UInt32 unicode_code_point; - - if (str[i] == L'\0') { - break; - } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { - unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], - str[i + 1]); - i++; - } else { - unicode_code_point = static_cast(str[i]); - } - - stream << CodePointToUtf8(unicode_code_point); - } - return StringStreamToString(&stream); -} - -// Converts a wide C string to an std::string using the UTF-8 encoding. -// NULL will be converted to "(null)". -std::string String::ShowWideCString(const wchar_t * wide_c_str) { - if (wide_c_str == NULL) return "(null)"; - - return internal::WideStringToUtf8(wide_c_str, -1); -} - -// Compares two wide C strings. Returns true iff they have the same -// content. -// -// Unlike wcscmp(), this function can handle NULL argument(s). A NULL -// C string is considered different to any non-NULL C string, -// including the empty string. -bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { - if (lhs == NULL) return rhs == NULL; - - if (rhs == NULL) return false; - - return wcscmp(lhs, rhs) == 0; -} - -// Helper function for *_STREQ on wide strings. -AssertionResult CmpHelperSTREQ(const char* expected_expression, - const char* actual_expression, - const wchar_t* expected, - const wchar_t* actual) { - if (String::WideCStringEquals(expected, actual)) { - return AssertionSuccess(); - } - - return EqFailure(expected_expression, - actual_expression, - PrintToString(expected), - PrintToString(actual), - false); -} - -// Helper function for *_STRNE on wide strings. -AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const wchar_t* s1, - const wchar_t* s2) { - if (!String::WideCStringEquals(s1, s2)) { - return AssertionSuccess(); - } - - return AssertionFailure() << "Expected: (" << s1_expression << ") != (" - << s2_expression << "), actual: " - << PrintToString(s1) - << " vs " << PrintToString(s2); -} - -// Compares two C strings, ignoring case. Returns true iff they have -// the same content. -// -// Unlike strcasecmp(), this function can handle NULL argument(s). A -// NULL C string is considered different to any non-NULL C string, -// including the empty string. -bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { - if (lhs == NULL) - return rhs == NULL; - if (rhs == NULL) - return false; - return posix::StrCaseCmp(lhs, rhs) == 0; -} - - // Compares two wide C strings, ignoring case. Returns true iff they - // have the same content. - // - // Unlike wcscasecmp(), this function can handle NULL argument(s). - // A NULL C string is considered different to any non-NULL wide C string, - // including the empty string. - // NB: The implementations on different platforms slightly differ. - // On windows, this method uses _wcsicmp which compares according to LC_CTYPE - // environment variable. On GNU platform this method uses wcscasecmp - // which compares according to LC_CTYPE category of the current locale. - // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the - // current locale. -bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, - const wchar_t* rhs) { - if (lhs == NULL) return rhs == NULL; - - if (rhs == NULL) return false; - -#if GTEST_OS_WINDOWS - return _wcsicmp(lhs, rhs) == 0; -#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID - return wcscasecmp(lhs, rhs) == 0; -#else - // Android, Mac OS X and Cygwin don't define wcscasecmp. - // Other unknown OSes may not define it either. - wint_t left, right; - do { - left = towlower(*lhs++); - right = towlower(*rhs++); - } while (left && left == right); - return left == right; -#endif // OS selector -} - -// Returns true iff str ends with the given suffix, ignoring case. -// Any string is considered to end with an empty suffix. -bool String::EndsWithCaseInsensitive( - const std::string& str, const std::string& suffix) { - const size_t str_len = str.length(); - const size_t suffix_len = suffix.length(); - return (str_len >= suffix_len) && - CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len, - suffix.c_str()); -} - -// Formats an int value as "%02d". -std::string String::FormatIntWidth2(int value) { - std::stringstream ss; - ss << std::setfill('0') << std::setw(2) << value; - return ss.str(); -} - -// Formats an int value as "%X". -std::string String::FormatHexInt(int value) { - std::stringstream ss; - ss << std::hex << std::uppercase << value; - return ss.str(); -} - -// Formats a byte as "%02X". -std::string String::FormatByte(unsigned char value) { - std::stringstream ss; - ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase - << static_cast(value); - return ss.str(); -} - -// Converts the buffer in a stringstream to an std::string, converting NUL -// bytes to "\\0" along the way. -std::string StringStreamToString(::std::stringstream* ss) { - const ::std::string& str = ss->str(); - const char* const start = str.c_str(); - const char* const end = start + str.length(); - - std::string result; - result.reserve(2 * (end - start)); - for (const char* ch = start; ch != end; ++ch) { - if (*ch == '\0') { - result += "\\0"; // Replaces NUL with "\\0"; - } else { - result += *ch; - } - } - - return result; -} - -// Appends the user-supplied message to the Google-Test-generated message. -std::string AppendUserMessage(const std::string& gtest_msg, - const Message& user_msg) { - // Appends the user message if it's non-empty. - const std::string user_msg_string = user_msg.GetString(); - if (user_msg_string.empty()) { - return gtest_msg; - } - - return gtest_msg + "\n" + user_msg_string; -} - -} // namespace internal - -// class TestResult - -// Creates an empty TestResult. -TestResult::TestResult() - : death_test_count_(0), - elapsed_time_(0) { -} - -// D'tor. -TestResult::~TestResult() { -} - -// Returns the i-th test part result among all the results. i can -// range from 0 to total_part_count() - 1. If i is not in that range, -// aborts the program. -const TestPartResult& TestResult::GetTestPartResult(int i) const { - if (i < 0 || i >= total_part_count()) - internal::posix::Abort(); - return test_part_results_.at(i); -} - -// Returns the i-th test property. i can range from 0 to -// test_property_count() - 1. If i is not in that range, aborts the -// program. -const TestProperty& TestResult::GetTestProperty(int i) const { - if (i < 0 || i >= test_property_count()) - internal::posix::Abort(); - return test_properties_.at(i); -} - -// Clears the test part results. -void TestResult::ClearTestPartResults() { - test_part_results_.clear(); -} - -// Adds a test part result to the list. -void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { - test_part_results_.push_back(test_part_result); -} - -// Adds a test property to the list. If a property with the same key as the -// supplied property is already represented, the value of this test_property -// replaces the old value for that key. -void TestResult::RecordProperty(const std::string& xml_element, - const TestProperty& test_property) { - if (!ValidateTestProperty(xml_element, test_property)) { - return; - } - internal::MutexLock lock(&test_properites_mutex_); - const std::vector::iterator property_with_matching_key = - std::find_if(test_properties_.begin(), test_properties_.end(), - internal::TestPropertyKeyIs(test_property.key())); - if (property_with_matching_key == test_properties_.end()) { - test_properties_.push_back(test_property); - return; - } - property_with_matching_key->SetValue(test_property.value()); -} - -// The list of reserved attributes used in the element of XML -// output. -static const char* const kReservedTestSuitesAttributes[] = { - "disabled", - "errors", - "failures", - "name", - "random_seed", - "tests", - "time", - "timestamp" -}; - -// The list of reserved attributes used in the element of XML -// output. -static const char* const kReservedTestSuiteAttributes[] = { - "disabled", - "errors", - "failures", - "name", - "tests", - "time" -}; - -// The list of reserved attributes used in the element of XML output. -static const char* const kReservedTestCaseAttributes[] = { - "classname", - "name", - "status", - "time", - "type_param", - "value_param" -}; - -template -std::vector ArrayAsVector(const char* const (&array)[kSize]) { - return std::vector(array, array + kSize); -} - -static std::vector GetReservedAttributesForElement( - const std::string& xml_element) { - if (xml_element == "testsuites") { - return ArrayAsVector(kReservedTestSuitesAttributes); - } else if (xml_element == "testsuite") { - return ArrayAsVector(kReservedTestSuiteAttributes); - } else if (xml_element == "testcase") { - return ArrayAsVector(kReservedTestCaseAttributes); - } else { - GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; - } - // This code is unreachable but some compilers may not realizes that. - return std::vector(); -} - -static std::string FormatWordList(const std::vector& words) { - Message word_list; - for (size_t i = 0; i < words.size(); ++i) { - if (i > 0 && words.size() > 2) { - word_list << ", "; - } - if (i == words.size() - 1) { - word_list << "and "; - } - word_list << "'" << words[i] << "'"; - } - return word_list.GetString(); -} - -bool ValidateTestPropertyName(const std::string& property_name, - const std::vector& reserved_names) { - if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != - reserved_names.end()) { - ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name - << " (" << FormatWordList(reserved_names) - << " are reserved by " << GTEST_NAME_ << ")"; - return false; - } - return true; -} - -// Adds a failure if the key is a reserved attribute of the element named -// xml_element. Returns true if the property is valid. -bool TestResult::ValidateTestProperty(const std::string& xml_element, - const TestProperty& test_property) { - return ValidateTestPropertyName(test_property.key(), - GetReservedAttributesForElement(xml_element)); -} - -// Clears the object. -void TestResult::Clear() { - test_part_results_.clear(); - test_properties_.clear(); - death_test_count_ = 0; - elapsed_time_ = 0; -} - -// Returns true iff the test failed. -bool TestResult::Failed() const { - for (int i = 0; i < total_part_count(); ++i) { - if (GetTestPartResult(i).failed()) - return true; - } - return false; -} - -// Returns true iff the test part fatally failed. -static bool TestPartFatallyFailed(const TestPartResult& result) { - return result.fatally_failed(); -} - -// Returns true iff the test fatally failed. -bool TestResult::HasFatalFailure() const { - return CountIf(test_part_results_, TestPartFatallyFailed) > 0; -} - -// Returns true iff the test part non-fatally failed. -static bool TestPartNonfatallyFailed(const TestPartResult& result) { - return result.nonfatally_failed(); -} - -// Returns true iff the test has a non-fatal failure. -bool TestResult::HasNonfatalFailure() const { - return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; -} - -// Gets the number of all test parts. This is the sum of the number -// of successful test parts and the number of failed test parts. -int TestResult::total_part_count() const { - return static_cast(test_part_results_.size()); -} - -// Returns the number of the test properties. -int TestResult::test_property_count() const { - return static_cast(test_properties_.size()); -} - -// class Test - -// Creates a Test object. - -// The c'tor saves the values of all Google Test flags. -Test::Test() - : gtest_flag_saver_(new internal::GTestFlagSaver) { -} - -// The d'tor restores the values of all Google Test flags. -Test::~Test() { - delete gtest_flag_saver_; -} - -// Sets up the test fixture. -// -// A sub-class may override this. -void Test::SetUp() { -} - -// Tears down the test fixture. -// -// A sub-class may override this. -void Test::TearDown() { -} - -// Allows user supplied key value pairs to be recorded for later output. -void Test::RecordProperty(const std::string& key, const std::string& value) { - UnitTest::GetInstance()->RecordProperty(key, value); -} - -// Allows user supplied key value pairs to be recorded for later output. -void Test::RecordProperty(const std::string& key, int value) { - Message value_message; - value_message << value; - RecordProperty(key, value_message.GetString().c_str()); -} - -namespace internal { - -void ReportFailureInUnknownLocation(TestPartResult::Type result_type, - const std::string& message) { - // This function is a friend of UnitTest and as such has access to - // AddTestPartResult. - UnitTest::GetInstance()->AddTestPartResult( - result_type, - NULL, // No info about the source file where the exception occurred. - -1, // We have no info on which line caused the exception. - message, - ""); // No stack trace, either. -} - -} // namespace internal - -// Google Test requires all tests in the same test case to use the same test -// fixture class. This function checks if the current test has the -// same fixture class as the first test in the current test case. If -// yes, it returns true; otherwise it generates a Google Test failure and -// returns false. -bool Test::HasSameFixtureClass() { - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - const TestCase* const test_case = impl->current_test_case(); - - // Info about the first test in the current test case. - const TestInfo* const first_test_info = test_case->test_info_list()[0]; - const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; - const char* const first_test_name = first_test_info->name(); - - // Info about the current test. - const TestInfo* const this_test_info = impl->current_test_info(); - const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; - const char* const this_test_name = this_test_info->name(); - - if (this_fixture_id != first_fixture_id) { - // Is the first test defined using TEST? - const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); - // Is this test defined using TEST? - const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); - - if (first_is_TEST || this_is_TEST) { - // The user mixed TEST and TEST_F in this test case - we'll tell - // him/her how to fix it. - - // Gets the name of the TEST and the name of the TEST_F. Note - // that first_is_TEST and this_is_TEST cannot both be true, as - // the fixture IDs are different for the two tests. - const char* const TEST_name = - first_is_TEST ? first_test_name : this_test_name; - const char* const TEST_F_name = - first_is_TEST ? this_test_name : first_test_name; - - ADD_FAILURE() - << "All tests in the same test case must use the same test fixture\n" - << "class, so mixing TEST_F and TEST in the same test case is\n" - << "illegal. In test case " << this_test_info->test_case_name() - << ",\n" - << "test " << TEST_F_name << " is defined using TEST_F but\n" - << "test " << TEST_name << " is defined using TEST. You probably\n" - << "want to change the TEST to TEST_F or move it to another test\n" - << "case."; - } else { - // The user defined two fixture classes with the same name in - // two namespaces - we'll tell him/her how to fix it. - ADD_FAILURE() - << "All tests in the same test case must use the same test fixture\n" - << "class. However, in test case " - << this_test_info->test_case_name() << ",\n" - << "you defined test " << first_test_name - << " and test " << this_test_name << "\n" - << "using two different test fixture classes. This can happen if\n" - << "the two classes are from different namespaces or translation\n" - << "units and have the same name. You should probably rename one\n" - << "of the classes to put the tests into different test cases."; - } - return false; - } - - return true; -} - -#if GTEST_HAS_SEH - -// Adds an "exception thrown" fatal failure to the current test. This -// function returns its result via an output parameter pointer because VC++ -// prohibits creation of objects with destructors on stack in functions -// using __try (see error C2712). -static std::string* FormatSehExceptionMessage(DWORD exception_code, - const char* location) { - Message message; - message << "SEH exception with code 0x" << std::setbase(16) << - exception_code << std::setbase(10) << " thrown in " << location << "."; - - return new std::string(message.GetString()); -} - -#endif // GTEST_HAS_SEH - -namespace internal { - -#if GTEST_HAS_EXCEPTIONS - -// Adds an "exception thrown" fatal failure to the current test. -static std::string FormatCxxExceptionMessage(const char* description, - const char* location) { - Message message; - if (description != NULL) { - message << "C++ exception with description \"" << description << "\""; - } else { - message << "Unknown C++ exception"; - } - message << " thrown in " << location << "."; - - return message.GetString(); -} - -static std::string PrintTestPartResultToString( - const TestPartResult& test_part_result); - -GoogleTestFailureException::GoogleTestFailureException( - const TestPartResult& failure) - : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} - -#endif // GTEST_HAS_EXCEPTIONS - -// We put these helper functions in the internal namespace as IBM's xlC -// compiler rejects the code if they were declared static. - -// Runs the given method and handles SEH exceptions it throws, when -// SEH is supported; returns the 0-value for type Result in case of an -// SEH exception. (Microsoft compilers cannot handle SEH and C++ -// exceptions in the same function. Therefore, we provide a separate -// wrapper function for handling SEH exceptions.) -template -Result HandleSehExceptionsInMethodIfSupported( - T* object, Result (T::*method)(), const char* location) { -#if GTEST_HAS_SEH - __try { - return (object->*method)(); - } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT - GetExceptionCode())) { - // We create the exception message on the heap because VC++ prohibits - // creation of objects with destructors on stack in functions using __try - // (see error C2712). - std::string* exception_message = FormatSehExceptionMessage( - GetExceptionCode(), location); - internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, - *exception_message); - delete exception_message; - return static_cast(0); - } -#else - (void)location; - return (object->*method)(); -#endif // GTEST_HAS_SEH -} - -// Runs the given method and catches and reports C++ and/or SEH-style -// exceptions, if they are supported; returns the 0-value for type -// Result in case of an SEH exception. -template -Result HandleExceptionsInMethodIfSupported( - T* object, Result (T::*method)(), const char* location) { - // NOTE: The user code can affect the way in which Google Test handles - // exceptions by setting GTEST_FLAG(catch_exceptions), but only before - // RUN_ALL_TESTS() starts. It is technically possible to check the flag - // after the exception is caught and either report or re-throw the - // exception based on the flag's value: - // - // try { - // // Perform the test method. - // } catch (...) { - // if (GTEST_FLAG(catch_exceptions)) - // // Report the exception as failure. - // else - // throw; // Re-throws the original exception. - // } - // - // However, the purpose of this flag is to allow the program to drop into - // the debugger when the exception is thrown. On most platforms, once the - // control enters the catch block, the exception origin information is - // lost and the debugger will stop the program at the point of the - // re-throw in this function -- instead of at the point of the original - // throw statement in the code under test. For this reason, we perform - // the check early, sacrificing the ability to affect Google Test's - // exception handling in the method where the exception is thrown. - if (internal::GetUnitTestImpl()->catch_exceptions()) { -#if GTEST_HAS_EXCEPTIONS - try { - return HandleSehExceptionsInMethodIfSupported(object, method, location); - } catch (const internal::GoogleTestFailureException&) { // NOLINT - // This exception type can only be thrown by a failed Google - // Test assertion with the intention of letting another testing - // framework catch it. Therefore we just re-throw it. - throw; - } catch (const std::exception& e) { // NOLINT - internal::ReportFailureInUnknownLocation( - TestPartResult::kFatalFailure, - FormatCxxExceptionMessage(e.what(), location)); - } catch (...) { // NOLINT - internal::ReportFailureInUnknownLocation( - TestPartResult::kFatalFailure, - FormatCxxExceptionMessage(NULL, location)); - } - return static_cast(0); -#else - return HandleSehExceptionsInMethodIfSupported(object, method, location); -#endif // GTEST_HAS_EXCEPTIONS - } else { - return (object->*method)(); - } -} - -} // namespace internal - -// Runs the test and updates the test result. -void Test::Run() { - if (!HasSameFixtureClass()) return; - - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); - // We will run the test only if SetUp() was successful. - if (!HasFatalFailure()) { - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &Test::TestBody, "the test body"); - } - - // However, we want to clean up as much as possible. Hence we will - // always call TearDown(), even if SetUp() or the test body has - // failed. - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &Test::TearDown, "TearDown()"); -} - -// Returns true iff the current test has a fatal failure. -bool Test::HasFatalFailure() { - return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); -} - -// Returns true iff the current test has a non-fatal failure. -bool Test::HasNonfatalFailure() { - return internal::GetUnitTestImpl()->current_test_result()-> - HasNonfatalFailure(); -} - -// class TestInfo - -// Constructs a TestInfo object. It assumes ownership of the test factory -// object. -TestInfo::TestInfo(const std::string& a_test_case_name, - const std::string& a_name, - const char* a_type_param, - const char* a_value_param, - internal::TypeId fixture_class_id, - internal::TestFactoryBase* factory) - : test_case_name_(a_test_case_name), - name_(a_name), - type_param_(a_type_param ? new std::string(a_type_param) : NULL), - value_param_(a_value_param ? new std::string(a_value_param) : NULL), - fixture_class_id_(fixture_class_id), - should_run_(false), - is_disabled_(false), - matches_filter_(false), - factory_(factory), - result_() {} - -// Destructs a TestInfo object. -TestInfo::~TestInfo() { delete factory_; } - -namespace internal { - -// Creates a new TestInfo object and registers it with Google Test; -// returns the created object. -// -// Arguments: -// -// test_case_name: name of the test case -// name: name of the test -// type_param: the name of the test's type parameter, or NULL if -// this is not a typed or a type-parameterized test. -// value_param: text representation of the test's value parameter, -// or NULL if this is not a value-parameterized test. -// fixture_class_id: ID of the test fixture class -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -// factory: pointer to the factory that creates a test object. -// The newly created TestInfo instance will assume -// ownership of the factory object. -TestInfo* MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - TypeId fixture_class_id, - SetUpTestCaseFunc set_up_tc, - TearDownTestCaseFunc tear_down_tc, - TestFactoryBase* factory) { - TestInfo* const test_info = - new TestInfo(test_case_name, name, type_param, value_param, - fixture_class_id, factory); - GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); - return test_info; -} - -#if GTEST_HAS_PARAM_TEST -void ReportInvalidTestCaseType(const char* test_case_name, - const char* file, int line) { - Message errors; - errors - << "Attempted redefinition of test case " << test_case_name << ".\n" - << "All tests in the same test case must use the same test fixture\n" - << "class. However, in test case " << test_case_name << ", you tried\n" - << "to define a test using a fixture class different from the one\n" - << "used earlier. This can happen if the two fixture classes are\n" - << "from different namespaces and have the same name. You should\n" - << "probably rename one of the classes to put the tests into different\n" - << "test cases."; - - fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), - errors.GetString().c_str()); -} -#endif // GTEST_HAS_PARAM_TEST - -} // namespace internal - -namespace { - -// A predicate that checks the test name of a TestInfo against a known -// value. -// -// This is used for implementation of the TestCase class only. We put -// it in the anonymous namespace to prevent polluting the outer -// namespace. -// -// TestNameIs is copyable. - -//Commenting out this class since its not used and wherefor produces warnings -// class TestNameIs { -// public: -// // Constructor. -// // -// // TestNameIs has NO default constructor. -// explicit TestNameIs(const char* name) -// : name_(name) {} -// -// // Returns true iff the test name of test_info matches name_. -// bool operator()(const TestInfo * test_info) const { -// return test_info && test_info->name() == name_; -// } -// -// private: -// std::string name_; -//}; - -} // namespace - -namespace internal { - -// This method expands all parameterized tests registered with macros TEST_P -// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. -// This will be done just once during the program runtime. -void UnitTestImpl::RegisterParameterizedTests() { -#if GTEST_HAS_PARAM_TEST - if (!parameterized_tests_registered_) { - parameterized_test_registry_.RegisterTests(); - parameterized_tests_registered_ = true; - } -#endif -} - -} // namespace internal - -// Creates the test object, runs it, records its result, and then -// deletes it. -void TestInfo::Run() { - if (!should_run_) return; - - // Tells UnitTest where to store test result. - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - impl->set_current_test_info(this); - - TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); - - // Notifies the unit test event listeners that a test is about to start. - repeater->OnTestStart(*this); - - const TimeInMillis start = internal::GetTimeInMillis(); - - impl->os_stack_trace_getter()->UponLeavingGTest(); - - // Creates the test object. - Test* const test = internal::HandleExceptionsInMethodIfSupported( - factory_, &internal::TestFactoryBase::CreateTest, - "the test fixture's constructor"); - - // Runs the test only if the test object was created and its - // constructor didn't generate a fatal failure. - if ((test != NULL) && !Test::HasFatalFailure()) { - // This doesn't throw as all user code that can throw are wrapped into - // exception handling code. - test->Run(); - } - - // Deletes the test object. - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - test, &Test::DeleteSelf_, "the test fixture's destructor"); - - result_.set_elapsed_time(internal::GetTimeInMillis() - start); - - // Notifies the unit test event listener that a test has just finished. - repeater->OnTestEnd(*this); - - // Tells UnitTest to stop associating assertion results to this - // test. - impl->set_current_test_info(NULL); -} - -// class TestCase - -// Gets the number of successful tests in this test case. -int TestCase::successful_test_count() const { - return CountIf(test_info_list_, TestPassed); -} - -// Gets the number of failed tests in this test case. -int TestCase::failed_test_count() const { - return CountIf(test_info_list_, TestFailed); -} - -// Gets the number of disabled tests that will be reported in the XML report. -int TestCase::reportable_disabled_test_count() const { - return CountIf(test_info_list_, TestReportableDisabled); -} - -// Gets the number of disabled tests in this test case. -int TestCase::disabled_test_count() const { - return CountIf(test_info_list_, TestDisabled); -} - -// Gets the number of tests to be printed in the XML report. -int TestCase::reportable_test_count() const { - return CountIf(test_info_list_, TestReportable); -} - -// Get the number of tests in this test case that should run. -int TestCase::test_to_run_count() const { - return CountIf(test_info_list_, ShouldRunTest); -} - -// Gets the number of all tests. -int TestCase::total_test_count() const { - return static_cast(test_info_list_.size()); -} - -// Creates a TestCase with the given name. -// -// Arguments: -// -// name: name of the test case -// a_type_param: the name of the test case's type parameter, or NULL if -// this is not a typed or a type-parameterized test case. -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -TestCase::TestCase(const char* a_name, const char* a_type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc) - : name_(a_name), - type_param_(a_type_param ? new std::string(a_type_param) : NULL), - set_up_tc_(set_up_tc), - tear_down_tc_(tear_down_tc), - should_run_(false), - elapsed_time_(0) { -} - -// Destructor of TestCase. -TestCase::~TestCase() { - // Deletes every Test in the collection. - ForEach(test_info_list_, internal::Delete); -} - -// Returns the i-th test among all the tests. i can range from 0 to -// total_test_count() - 1. If i is not in that range, returns NULL. -const TestInfo* TestCase::GetTestInfo(int i) const { - const int index = GetElementOr(test_indices_, i, -1); - return index < 0 ? NULL : test_info_list_[index]; -} - -// Returns the i-th test among all the tests. i can range from 0 to -// total_test_count() - 1. If i is not in that range, returns NULL. -TestInfo* TestCase::GetMutableTestInfo(int i) { - const int index = GetElementOr(test_indices_, i, -1); - return index < 0 ? NULL : test_info_list_[index]; -} - -// Adds a test to this test case. Will delete the test upon -// destruction of the TestCase object. -void TestCase::AddTestInfo(TestInfo * test_info) { - test_info_list_.push_back(test_info); - test_indices_.push_back(static_cast(test_indices_.size())); -} - -// Runs every test in this TestCase. -void TestCase::Run() { - if (!should_run_) return; - - internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - impl->set_current_test_case(this); - - TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); - - repeater->OnTestCaseStart(*this); - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); - - const internal::TimeInMillis start = internal::GetTimeInMillis(); - for (int i = 0; i < total_test_count(); i++) { - GetMutableTestInfo(i)->Run(); - } - elapsed_time_ = internal::GetTimeInMillis() - start; - - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); - - repeater->OnTestCaseEnd(*this); - impl->set_current_test_case(NULL); -} - -// Clears the results of all tests in this test case. -void TestCase::ClearResult() { - ad_hoc_test_result_.Clear(); - ForEach(test_info_list_, TestInfo::ClearTestResult); -} - -// Shuffles the tests in this test case. -void TestCase::ShuffleTests(internal::Random* random) { - Shuffle(random, &test_indices_); -} - -// Restores the test order to before the first shuffle. -void TestCase::UnshuffleTests() { - for (size_t i = 0; i < test_indices_.size(); i++) { - test_indices_[i] = static_cast(i); - } -} - -// Formats a countable noun. Depending on its quantity, either the -// singular form or the plural form is used. e.g. -// -// FormatCountableNoun(1, "formula", "formuli") returns "1 formula". -// FormatCountableNoun(5, "book", "books") returns "5 books". -static std::string FormatCountableNoun(int count, - const char * singular_form, - const char * plural_form) { - return internal::StreamableToString(count) + " " + - (count == 1 ? singular_form : plural_form); -} - -// Formats the count of tests. -static std::string FormatTestCount(int test_count) { - return FormatCountableNoun(test_count, "test", "tests"); -} - -// Formats the count of test cases. -static std::string FormatTestCaseCount(int test_case_count) { - return FormatCountableNoun(test_case_count, "test case", "test cases"); -} - -// Converts a TestPartResult::Type enum to human-friendly string -// representation. Both kNonFatalFailure and kFatalFailure are translated -// to "Failure", as the user usually doesn't care about the difference -// between the two when viewing the test result. -static const char * TestPartResultTypeToString(TestPartResult::Type type) { - switch (type) { - case TestPartResult::kSuccess: - return "Success"; - - case TestPartResult::kNonFatalFailure: - case TestPartResult::kFatalFailure: -#ifdef _MSC_VER - return "error: "; -#else - return "Failure\n"; -#endif - default: - return "Unknown result type"; - } -} - -namespace internal { - -// Prints a TestPartResult to an std::string. -static std::string PrintTestPartResultToString( - const TestPartResult& test_part_result) { - return (Message() - << internal::FormatFileLocation(test_part_result.file_name(), - test_part_result.line_number()) - << " " << TestPartResultTypeToString(test_part_result.type()) - << test_part_result.message()).GetString(); -} - -// Prints a TestPartResult. -static void PrintTestPartResult(const TestPartResult& test_part_result) { - const std::string& result = - PrintTestPartResultToString(test_part_result); - printf("%s\n", result.c_str()); - fflush(stdout); - // If the test program runs in Visual Studio or a debugger, the - // following statements add the test part result message to the Output - // window such that the user can double-click on it to jump to the - // corresponding source code location; otherwise they do nothing. -#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE - // We don't call OutputDebugString*() on Windows Mobile, as printing - // to stdout is done by OutputDebugString() there already - we don't - // want the same message printed twice. - ::OutputDebugStringA(result.c_str()); - ::OutputDebugStringA("\n"); -#endif -} - -// class PrettyUnitTestResultPrinter - -enum GTestColor { - COLOR_DEFAULT, - COLOR_RED, - COLOR_GREEN, - COLOR_YELLOW -}; - -#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE - -// Returns the character attribute for the given color. -WORD GetColorAttribute(GTestColor color) { - switch (color) { - case COLOR_RED: return FOREGROUND_RED; - case COLOR_GREEN: return FOREGROUND_GREEN; - case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; - default: return 0; - } -} - -#else - -// Returns the ANSI color code for the given color. COLOR_DEFAULT is -// an invalid input. -const char* GetAnsiColorCode(GTestColor color) { - switch (color) { - case COLOR_RED: return "1"; - case COLOR_GREEN: return "2"; - case COLOR_YELLOW: return "3"; - default: return NULL; - }; -} - -#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE - -// Returns true iff Google Test should use colors in the output. -bool ShouldUseColor(bool stdout_is_tty) { - const char* const gtest_color = GTEST_FLAG(color).c_str(); - - if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { -#if GTEST_OS_WINDOWS - // On Windows the TERM variable is usually not set, but the - // console there does support colors. - return stdout_is_tty; -#else - // On non-Windows platforms, we rely on the TERM variable. - const char* const term = posix::GetEnv("TERM"); - const bool term_supports_color = - String::CStringEquals(term, "xterm") || - String::CStringEquals(term, "xterm-color") || - String::CStringEquals(term, "xterm-256color") || - String::CStringEquals(term, "screen") || - String::CStringEquals(term, "screen-256color") || - String::CStringEquals(term, "linux") || - String::CStringEquals(term, "cygwin"); - return stdout_is_tty && term_supports_color; -#endif // GTEST_OS_WINDOWS - } - - return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || - String::CaseInsensitiveCStringEquals(gtest_color, "true") || - String::CaseInsensitiveCStringEquals(gtest_color, "t") || - String::CStringEquals(gtest_color, "1"); - // We take "yes", "true", "t", and "1" as meaning "yes". If the - // value is neither one of these nor "auto", we treat it as "no" to - // be conservative. -} - -// Helpers for printing colored strings to stdout. Note that on Windows, we -// cannot simply emit special characters and have the terminal change colors. -// This routine must actually emit the characters rather than return a string -// that would be colored when printed, as can be done on Linux. -void ColoredPrintf(GTestColor color, const char* fmt, ...) { - va_list args; - va_start(args, fmt); - -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS - const bool use_color = false; -#else - static const bool in_color_mode = - ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); - const bool use_color = in_color_mode && (color != COLOR_DEFAULT); -#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS - // The '!= 0' comparison is necessary to satisfy MSVC 7.1. - - if (!use_color) { - vprintf(fmt, args); - va_end(args); - return; - } - -#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE - const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); - - // Gets the current text color. - CONSOLE_SCREEN_BUFFER_INFO buffer_info; - GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); - const WORD old_color_attrs = buffer_info.wAttributes; - - // We need to flush the stream buffers into the console before each - // SetConsoleTextAttribute call lest it affect the text that is already - // printed but has not yet reached the console. - fflush(stdout); - SetConsoleTextAttribute(stdout_handle, - GetColorAttribute(color) | FOREGROUND_INTENSITY); - vprintf(fmt, args); - - fflush(stdout); - // Restores the text color. - SetConsoleTextAttribute(stdout_handle, old_color_attrs); -#else - printf("\033[0;3%sm", GetAnsiColorCode(color)); - vprintf(fmt, args); - printf("\033[m"); // Resets the terminal to default. -#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE - va_end(args); -} - -// Text printed in Google Test's text output and --gunit_list_tests -// output to label the type parameter and value parameter for a test. -static const char kTypeParamLabel[] = "TypeParam"; -static const char kValueParamLabel[] = "GetParam()"; - -void PrintFullTestCommentIfPresent(const TestInfo& test_info) { - const char* const type_param = test_info.type_param(); - const char* const value_param = test_info.value_param(); - - if (type_param != NULL || value_param != NULL) { - printf(", where "); - if (type_param != NULL) { - printf("%s = %s", kTypeParamLabel, type_param); - if (value_param != NULL) - printf(" and "); - } - if (value_param != NULL) { - printf("%s = %s", kValueParamLabel, value_param); - } - } -} - -// This class implements the TestEventListener interface. -// -// Class PrettyUnitTestResultPrinter is copyable. -class PrettyUnitTestResultPrinter : public TestEventListener { - public: - PrettyUnitTestResultPrinter() {} - static void PrintTestName(const char * test_case, const char * test) { - printf("%s.%s", test_case, test); - } - - // The following methods override what's in the TestEventListener class. - virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); - virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); - virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestCaseStart(const TestCase& test_case); - virtual void OnTestStart(const TestInfo& test_info); - virtual void OnTestPartResult(const TestPartResult& result); - virtual void OnTestEnd(const TestInfo& test_info); - virtual void OnTestCaseEnd(const TestCase& test_case); - virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); - virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); - virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} - - private: - static void PrintFailedTests(const UnitTest& unit_test); -}; - - // Fired before each iteration of tests starts. -void PrettyUnitTestResultPrinter::OnTestIterationStart( - const UnitTest& unit_test, int iteration) { - if (GTEST_FLAG(repeat) != 1) - printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); - - const char* const filter = GTEST_FLAG(filter).c_str(); - - // Prints the filter if it's not *. This reminds the user that some - // tests may be skipped. - if (!String::CStringEquals(filter, kUniversalFilter)) { - ColoredPrintf(COLOR_YELLOW, - "Note: %s filter = %s\n", GTEST_NAME_, filter); - } - - if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { - const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); - ColoredPrintf(COLOR_YELLOW, - "Note: This is test shard %d of %s.\n", - static_cast(shard_index) + 1, - internal::posix::GetEnv(kTestTotalShards)); - } - - if (GTEST_FLAG(shuffle)) { - ColoredPrintf(COLOR_YELLOW, - "Note: Randomizing tests' orders with a seed of %d .\n", - unit_test.random_seed()); - } - - ColoredPrintf(COLOR_GREEN, "[==========] "); - printf("Running %s from %s.\n", - FormatTestCount(unit_test.test_to_run_count()).c_str(), - FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( - const UnitTest& /*unit_test*/) { - ColoredPrintf(COLOR_GREEN, "[----------] "); - printf("Global test environment set-up.\n"); - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { - const std::string counts = - FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); - printf("%s from %s", counts.c_str(), test_case.name()); - if (test_case.type_param() == NULL) { - printf("\n"); - } else { - printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); - } - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { - ColoredPrintf(COLOR_GREEN, "[ RUN ] "); - PrintTestName(test_info.test_case_name(), test_info.name()); - printf("\n"); - fflush(stdout); -} - -// Called after an assertion failure. -void PrettyUnitTestResultPrinter::OnTestPartResult( - const TestPartResult& result) { - // If the test part succeeded, we don't need to do anything. - if (result.type() == TestPartResult::kSuccess) - return; - - // Print failure message from the assertion (e.g. expected this and got that). - PrintTestPartResult(result); - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { - if (test_info.result()->Passed()) { - ColoredPrintf(COLOR_GREEN, "[ OK ] "); - } else { - ColoredPrintf(COLOR_RED, "[ FAILED ] "); - } - PrintTestName(test_info.test_case_name(), test_info.name()); - if (test_info.result()->Failed()) - PrintFullTestCommentIfPresent(test_info); - - if (GTEST_FLAG(print_time)) { - printf(" (%s ms)\n", internal::StreamableToString( - test_info.result()->elapsed_time()).c_str()); - } else { - printf("\n"); - } - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { - if (!GTEST_FLAG(print_time)) return; - - const std::string counts = - FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); - printf("%s from %s (%s ms total)\n\n", - counts.c_str(), test_case.name(), - internal::StreamableToString(test_case.elapsed_time()).c_str()); - fflush(stdout); -} - -void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( - const UnitTest& /*unit_test*/) { - ColoredPrintf(COLOR_GREEN, "[----------] "); - printf("Global test environment tear-down\n"); - fflush(stdout); -} - -// Internal helper for printing the list of failed tests. -void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { - const int failed_test_count = unit_test.failed_test_count(); - if (failed_test_count == 0) { - return; - } - - for (int i = 0; i < unit_test.total_test_case_count(); ++i) { - const TestCase& test_case = *unit_test.GetTestCase(i); - if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { - continue; - } - for (int j = 0; j < test_case.total_test_count(); ++j) { - const TestInfo& test_info = *test_case.GetTestInfo(j); - if (!test_info.should_run() || test_info.result()->Passed()) { - continue; - } - ColoredPrintf(COLOR_RED, "[ FAILED ] "); - printf("%s.%s", test_case.name(), test_info.name()); - PrintFullTestCommentIfPresent(test_info); - printf("\n"); - } - } -} - -void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, - int /*iteration*/) { - ColoredPrintf(COLOR_GREEN, "[==========] "); - printf("%s from %s ran.", - FormatTestCount(unit_test.test_to_run_count()).c_str(), - FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); - if (GTEST_FLAG(print_time)) { - printf(" (%s ms total)", - internal::StreamableToString(unit_test.elapsed_time()).c_str()); - } - printf("\n"); - ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); - printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); - - int num_failures = unit_test.failed_test_count(); - if (!unit_test.Passed()) { - const int failed_test_count = unit_test.failed_test_count(); - ColoredPrintf(COLOR_RED, "[ FAILED ] "); - printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); - PrintFailedTests(unit_test); - printf("\n%2d FAILED %s\n", num_failures, - num_failures == 1 ? "TEST" : "TESTS"); - } - - int num_disabled = unit_test.reportable_disabled_test_count(); - if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { - if (!num_failures) { - printf("\n"); // Add a spacer if no FAILURE banner is displayed. - } - ColoredPrintf(COLOR_YELLOW, - " YOU HAVE %d DISABLED %s\n\n", - num_disabled, - num_disabled == 1 ? "TEST" : "TESTS"); - } - // Ensure that Google Test output is printed before, e.g., heapchecker output. - fflush(stdout); -} - -// End PrettyUnitTestResultPrinter - -// class TestEventRepeater -// -// This class forwards events to other event listeners. -class TestEventRepeater : public TestEventListener { - public: - TestEventRepeater() : forwarding_enabled_(true) {} - virtual ~TestEventRepeater(); - void Append(TestEventListener *listener); - TestEventListener* Release(TestEventListener* listener); - - // Controls whether events will be forwarded to listeners_. Set to false - // in death test child processes. - bool forwarding_enabled() const { return forwarding_enabled_; } - void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } - - virtual void OnTestProgramStart(const UnitTest& unit_test); - virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); - virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); - virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); - virtual void OnTestCaseStart(const TestCase& test_case); - virtual void OnTestStart(const TestInfo& test_info); - virtual void OnTestPartResult(const TestPartResult& result); - virtual void OnTestEnd(const TestInfo& test_info); - virtual void OnTestCaseEnd(const TestCase& test_case); - virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); - virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); - virtual void OnTestProgramEnd(const UnitTest& unit_test); - - private: - // Controls whether events will be forwarded to listeners_. Set to false - // in death test child processes. - bool forwarding_enabled_; - // The list of listeners that receive events. - std::vector listeners_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); -}; - -TestEventRepeater::~TestEventRepeater() { - ForEach(listeners_, Delete); -} - -void TestEventRepeater::Append(TestEventListener *listener) { - listeners_.push_back(listener); -} - -// TODO(vladl@google.com): Factor the search functionality into Vector::Find. -TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { - for (size_t i = 0; i < listeners_.size(); ++i) { - if (listeners_[i] == listener) { - listeners_.erase(listeners_.begin() + i); - return listener; - } - } - - return NULL; -} - -// Since most methods are very similar, use macros to reduce boilerplate. -// This defines a member that forwards the call to all listeners. -#define GTEST_REPEATER_METHOD_(Name, Type) \ -void TestEventRepeater::Name(const Type& parameter) { \ - if (forwarding_enabled_) { \ - for (size_t i = 0; i < listeners_.size(); i++) { \ - listeners_[i]->Name(parameter); \ - } \ - } \ -} -// This defines a member that forwards the call to all listeners in reverse -// order. -#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ -void TestEventRepeater::Name(const Type& parameter) { \ - if (forwarding_enabled_) { \ - for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ - listeners_[i]->Name(parameter); \ - } \ - } \ -} - -GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) -GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) -GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) -GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) -GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) -GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) -GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) -GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) -GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) -GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) -GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) - -#undef GTEST_REPEATER_METHOD_ -#undef GTEST_REVERSE_REPEATER_METHOD_ - -void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, - int iteration) { - if (forwarding_enabled_) { - for (size_t i = 0; i < listeners_.size(); i++) { - listeners_[i]->OnTestIterationStart(unit_test, iteration); - } - } -} - -void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, - int iteration) { - if (forwarding_enabled_) { - for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { - listeners_[i]->OnTestIterationEnd(unit_test, iteration); - } - } -} - -// End TestEventRepeater - -// This class generates an XML output file. -class XmlUnitTestResultPrinter : public EmptyTestEventListener { - public: - explicit XmlUnitTestResultPrinter(const char* output_file); - - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); - - private: - // Is c a whitespace character that is normalized to a space character - // when it appears in an XML attribute value? - static bool IsNormalizableWhitespace(char c) { - return c == 0x9 || c == 0xA || c == 0xD; - } - - // May c appear in a well-formed XML document? - static bool IsValidXmlCharacter(char c) { - return IsNormalizableWhitespace(c) || c >= 0x20; - } - - // Returns an XML-escaped copy of the input string str. If - // is_attribute is true, the text is meant to appear as an attribute - // value, and normalizable whitespace is preserved by replacing it - // with character references. - static std::string EscapeXml(const std::string& str, bool is_attribute); - - // Returns the given string with all characters invalid in XML removed. - static std::string RemoveInvalidXmlCharacters(const std::string& str); - - // Convenience wrapper around EscapeXml when str is an attribute value. - static std::string EscapeXmlAttribute(const std::string& str) { - return EscapeXml(str, true); - } - - // Convenience wrapper around EscapeXml when str is not an attribute value. - static std::string EscapeXmlText(const char* str) { - return EscapeXml(str, false); - } - - // Verifies that the given attribute belongs to the given element and - // streams the attribute as XML. - static void OutputXmlAttribute(std::ostream* stream, - const std::string& element_name, - const std::string& name, - const std::string& value); - - // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. - static void OutputXmlCDataSection(::std::ostream* stream, const char* data); - - // Streams an XML representation of a TestInfo object. - static void OutputXmlTestInfo(::std::ostream* stream, - const char* test_case_name, - const TestInfo& test_info); - - // Prints an XML representation of a TestCase object - static void PrintXmlTestCase(::std::ostream* stream, - const TestCase& test_case); - - // Prints an XML summary of unit_test to output stream out. - static void PrintXmlUnitTest(::std::ostream* stream, - const UnitTest& unit_test); - - // Produces a string representing the test properties in a result as space - // delimited XML attributes based on the property key="value" pairs. - // When the std::string is not empty, it includes a space at the beginning, - // to delimit this attribute from prior attributes. - static std::string TestPropertiesAsXmlAttributes(const TestResult& result); - - // The output file. - const std::string output_file_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); -}; - -// Creates a new XmlUnitTestResultPrinter. -XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) - : output_file_(output_file) { - if (output_file_.c_str() == NULL || output_file_.empty()) { - fprintf(stderr, "XML output file may not be null\n"); - fflush(stderr); - exit(EXIT_FAILURE); - } -} - -// Called after the unit test ends. -void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, - int /*iteration*/) { - FILE* xmlout = NULL; - FilePath output_file(output_file_); - FilePath output_dir(output_file.RemoveFileName()); - - if (output_dir.CreateDirectoriesRecursively()) { - xmlout = posix::FOpen(output_file_.c_str(), "w"); - } - if (xmlout == NULL) { - // TODO(wan): report the reason of the failure. - // - // We don't do it for now as: - // - // 1. There is no urgent need for it. - // 2. It's a bit involved to make the errno variable thread-safe on - // all three operating systems (Linux, Windows, and Mac OS). - // 3. To interpret the meaning of errno in a thread-safe way, - // we need the strerror_r() function, which is not available on - // Windows. - fprintf(stderr, - "Unable to open file \"%s\"\n", - output_file_.c_str()); - fflush(stderr); - exit(EXIT_FAILURE); - } - std::stringstream stream; - PrintXmlUnitTest(&stream, unit_test); - fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); - fclose(xmlout); -} - -// Returns an XML-escaped copy of the input string str. If is_attribute -// is true, the text is meant to appear as an attribute value, and -// normalizable whitespace is preserved by replacing it with character -// references. -// -// Invalid XML characters in str, if any, are stripped from the output. -// It is expected that most, if not all, of the text processed by this -// module will consist of ordinary English text. -// If this module is ever modified to produce version 1.1 XML output, -// most invalid characters can be retained using character references. -// TODO(wan): It might be nice to have a minimally invasive, human-readable -// escaping scheme for invalid characters, rather than dropping them. -std::string XmlUnitTestResultPrinter::EscapeXml( - const std::string& str, bool is_attribute) { - Message m; - - for (size_t i = 0; i < str.size(); ++i) { - const char ch = str[i]; - switch (ch) { - case '<': - m << "<"; - break; - case '>': - m << ">"; - break; - case '&': - m << "&"; - break; - case '\'': - if (is_attribute) - m << "'"; - else - m << '\''; - break; - case '"': - if (is_attribute) - m << """; - else - m << '"'; - break; - default: - if (IsValidXmlCharacter(ch)) { - if (is_attribute && IsNormalizableWhitespace(ch)) - m << "&#x" << String::FormatByte(static_cast(ch)) - << ";"; - else - m << ch; - } - break; - } - } - - return m.GetString(); -} - -// Returns the given string with all characters invalid in XML removed. -// Currently invalid characters are dropped from the string. An -// alternative is to replace them with certain characters such as . or ?. -std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( - const std::string& str) { - std::string output; - output.reserve(str.size()); - for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) - if (IsValidXmlCharacter(*it)) - output.push_back(*it); - - return output; -} - -// The following routines generate an XML representation of a UnitTest -// object. -// -// This is how Google Test concepts map to the DTD: -// -// <-- corresponds to a UnitTest object -// <-- corresponds to a TestCase object -// <-- corresponds to a TestInfo object -// ... -// ... -// ... -// <-- individual assertion failures -// -// -// - -// Formats the given time in milliseconds as seconds. -std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { - ::std::stringstream ss; - ss << ms/1000.0; - return ss.str(); -} - -// Converts the given epoch time in milliseconds to a date string in the ISO -// 8601 format, without the timezone information. -std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { - // Using non-reentrant version as localtime_r is not portable. - time_t seconds = static_cast(ms / 1000); -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4996) // Temporarily disables warning 4996 - // (function or variable may be unsafe). - const struct tm* const time_struct = localtime(&seconds); // NOLINT -# pragma warning(pop) // Restores the warning state again. -#else - const struct tm* const time_struct = localtime(&seconds); // NOLINT -#endif - if (time_struct == NULL) - return ""; // Invalid ms value - - // YYYY-MM-DDThh:mm:ss - return StreamableToString(time_struct->tm_year + 1900) + "-" + - String::FormatIntWidth2(time_struct->tm_mon + 1) + "-" + - String::FormatIntWidth2(time_struct->tm_mday) + "T" + - String::FormatIntWidth2(time_struct->tm_hour) + ":" + - String::FormatIntWidth2(time_struct->tm_min) + ":" + - String::FormatIntWidth2(time_struct->tm_sec); -} - -// Streams an XML CDATA section, escaping invalid CDATA sequences as needed. -void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, - const char* data) { - const char* segment = data; - *stream << ""); - if (next_segment != NULL) { - stream->write( - segment, static_cast(next_segment - segment)); - *stream << "]]>]]>"); - } else { - *stream << segment; - break; - } - } - *stream << "]]>"; -} - -void XmlUnitTestResultPrinter::OutputXmlAttribute( - std::ostream* stream, - const std::string& element_name, - const std::string& name, - const std::string& value) { - const std::vector& allowed_names = - GetReservedAttributesForElement(element_name); - - GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != - allowed_names.end()) - << "Attribute " << name << " is not allowed for element <" << element_name - << ">."; - - *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; -} - -// Prints an XML representation of a TestInfo object. -// TODO(wan): There is also value in printing properties with the plain printer. -void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, - const char* test_case_name, - const TestInfo& test_info) { - const TestResult& result = *test_info.result(); - const std::string kTestcase = "testcase"; - - *stream << " \n"; - } - const string location = internal::FormatCompilerIndependentFileLocation( - part.file_name(), part.line_number()); - const string summary = location + "\n" + part.summary(); - *stream << " "; - const string detail = location + "\n" + part.message(); - OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); - *stream << "\n"; - } - } - - if (failures == 0) - *stream << " />\n"; - else - *stream << " \n"; -} - -// Prints an XML representation of a TestCase object -void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, - const TestCase& test_case) { - const std::string kTestsuite = "testsuite"; - *stream << " <" << kTestsuite; - OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); - OutputXmlAttribute(stream, kTestsuite, "tests", - StreamableToString(test_case.reportable_test_count())); - OutputXmlAttribute(stream, kTestsuite, "failures", - StreamableToString(test_case.failed_test_count())); - OutputXmlAttribute( - stream, kTestsuite, "disabled", - StreamableToString(test_case.reportable_disabled_test_count())); - OutputXmlAttribute(stream, kTestsuite, "errors", "0"); - OutputXmlAttribute(stream, kTestsuite, "time", - FormatTimeInMillisAsSeconds(test_case.elapsed_time())); - *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) - << ">\n"; - - for (int i = 0; i < test_case.total_test_count(); ++i) { - if (test_case.GetTestInfo(i)->is_reportable()) - OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); - } - *stream << " \n"; -} - -// Prints an XML summary of unit_test to output stream out. -void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, - const UnitTest& unit_test) { - const std::string kTestsuites = "testsuites"; - - *stream << "\n"; - *stream << "<" << kTestsuites; - - OutputXmlAttribute(stream, kTestsuites, "tests", - StreamableToString(unit_test.reportable_test_count())); - OutputXmlAttribute(stream, kTestsuites, "failures", - StreamableToString(unit_test.failed_test_count())); - OutputXmlAttribute( - stream, kTestsuites, "disabled", - StreamableToString(unit_test.reportable_disabled_test_count())); - OutputXmlAttribute(stream, kTestsuites, "errors", "0"); - OutputXmlAttribute( - stream, kTestsuites, "timestamp", - FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); - OutputXmlAttribute(stream, kTestsuites, "time", - FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); - - if (GTEST_FLAG(shuffle)) { - OutputXmlAttribute(stream, kTestsuites, "random_seed", - StreamableToString(unit_test.random_seed())); - } - - *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result()); - - OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); - *stream << ">\n"; - - for (int i = 0; i < unit_test.total_test_case_count(); ++i) { - if (unit_test.GetTestCase(i)->reportable_test_count() > 0) - PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); - } - *stream << "\n"; -} - -// Produces a string representing the test properties in a result as space -// delimited XML attributes based on the property key="value" pairs. -std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( - const TestResult& result) { - Message attributes; - for (int i = 0; i < result.test_property_count(); ++i) { - const TestProperty& property = result.GetTestProperty(i); - attributes << " " << property.key() << "=" - << "\"" << EscapeXmlAttribute(property.value()) << "\""; - } - return attributes.GetString(); -} - -// End XmlUnitTestResultPrinter - -#if GTEST_CAN_STREAM_RESULTS_ - -// Checks if str contains '=', '&', '%' or '\n' characters. If yes, -// replaces them by "%xx" where xx is their hexadecimal value. For -// example, replaces "=" with "%3D". This algorithm is O(strlen(str)) -// in both time and space -- important as the input str may contain an -// arbitrarily long test failure message and stack trace. -string StreamingListener::UrlEncode(const char* str) { - string result; - result.reserve(strlen(str) + 1); - for (char ch = *str; ch != '\0'; ch = *++str) { - switch (ch) { - case '%': - case '=': - case '&': - case '\n': - result.append("%" + String::FormatByte(static_cast(ch))); - break; - default: - result.push_back(ch); - break; - } - } - return result; -} - -void StreamingListener::SocketWriter::MakeConnection() { - GTEST_CHECK_(sockfd_ == -1) - << "MakeConnection() can't be called when there is already a connection."; - - addrinfo hints; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. - hints.ai_socktype = SOCK_STREAM; - addrinfo* servinfo = NULL; - - // Use the getaddrinfo() to get a linked list of IP addresses for - // the given host name. - const int error_num = getaddrinfo( - host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); - if (error_num != 0) { - GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " - << gai_strerror(error_num); - } - - // Loop through all the results and connect to the first we can. - for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; - cur_addr = cur_addr->ai_next) { - sockfd_ = socket( - cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); - if (sockfd_ != -1) { - // Connect the client socket to the server socket. - if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { - close(sockfd_); - sockfd_ = -1; - } - } - } - - freeaddrinfo(servinfo); // all done with this structure - - if (sockfd_ == -1) { - GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " - << host_name_ << ":" << port_num_; - } -} - -// End of class Streaming Listener -#endif // GTEST_CAN_STREAM_RESULTS__ - -// Class ScopedTrace - -// Pushes the given source file location and message onto a per-thread -// trace stack maintained by Google Test. -ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) - GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { - TraceInfo trace; - trace.file = file; - trace.line = line; - trace.message = message.GetString(); - - UnitTest::GetInstance()->PushGTestTrace(trace); -} - -// Pops the info pushed by the c'tor. -ScopedTrace::~ScopedTrace() - GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { - UnitTest::GetInstance()->PopGTestTrace(); -} - - -// class OsStackTraceGetter - -// Returns the current OS stack trace as an std::string. Parameters: -// -// max_depth - the maximum number of stack frames to be included -// in the trace. -// skip_count - the number of top frames to be skipped; doesn't count -// against max_depth. -// -string OsStackTraceGetter::CurrentStackTrace(int /* max_depth */, - int /* skip_count */) - GTEST_LOCK_EXCLUDED_(mutex_) { - return ""; -} - -void OsStackTraceGetter::UponLeavingGTest() - GTEST_LOCK_EXCLUDED_(mutex_) { -} - -const char* const -OsStackTraceGetter::kElidedFramesMarker = - "... " GTEST_NAME_ " internal frames ..."; - -// A helper class that creates the premature-exit file in its -// constructor and deletes the file in its destructor. -class ScopedPrematureExitFile { - public: - explicit ScopedPrematureExitFile(const char* premature_exit_filepath) - : premature_exit_filepath_(premature_exit_filepath) { - // If a path to the premature-exit file is specified... - if (premature_exit_filepath != NULL && *premature_exit_filepath != '\0') { - // create the file with a single "0" character in it. I/O - // errors are ignored as there's nothing better we can do and we - // don't want to fail the test because of this. - FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); - fwrite("0", 1, 1, pfile); - fclose(pfile); - } - } - - ~ScopedPrematureExitFile() { - if (premature_exit_filepath_ != NULL && *premature_exit_filepath_ != '\0') { - remove(premature_exit_filepath_); - } - } - - private: - const char* const premature_exit_filepath_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); -}; - -} // namespace internal - -// class TestEventListeners - -TestEventListeners::TestEventListeners() - : repeater_(new internal::TestEventRepeater()), - default_result_printer_(NULL), - default_xml_generator_(NULL) { -} - -TestEventListeners::~TestEventListeners() { delete repeater_; } - -// Returns the standard listener responsible for the default console -// output. Can be removed from the listeners list to shut down default -// console output. Note that removing this object from the listener list -// with Release transfers its ownership to the user. -void TestEventListeners::Append(TestEventListener* listener) { - repeater_->Append(listener); -} - -// Removes the given event listener from the list and returns it. It then -// becomes the caller's responsibility to delete the listener. Returns -// NULL if the listener is not found in the list. -TestEventListener* TestEventListeners::Release(TestEventListener* listener) { - if (listener == default_result_printer_) - default_result_printer_ = NULL; - else if (listener == default_xml_generator_) - default_xml_generator_ = NULL; - return repeater_->Release(listener); -} - -// Returns repeater that broadcasts the TestEventListener events to all -// subscribers. -TestEventListener* TestEventListeners::repeater() { return repeater_; } - -// Sets the default_result_printer attribute to the provided listener. -// The listener is also added to the listener list and previous -// default_result_printer is removed from it and deleted. The listener can -// also be NULL in which case it will not be added to the list. Does -// nothing if the previous and the current listener objects are the same. -void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { - if (default_result_printer_ != listener) { - // It is an error to pass this method a listener that is already in the - // list. - delete Release(default_result_printer_); - default_result_printer_ = listener; - if (listener != NULL) - Append(listener); - } -} - -// Sets the default_xml_generator attribute to the provided listener. The -// listener is also added to the listener list and previous -// default_xml_generator is removed from it and deleted. The listener can -// also be NULL in which case it will not be added to the list. Does -// nothing if the previous and the current listener objects are the same. -void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { - if (default_xml_generator_ != listener) { - // It is an error to pass this method a listener that is already in the - // list. - delete Release(default_xml_generator_); - default_xml_generator_ = listener; - if (listener != NULL) - Append(listener); - } -} - -// Controls whether events will be forwarded by the repeater to the -// listeners in the list. -bool TestEventListeners::EventForwardingEnabled() const { - return repeater_->forwarding_enabled(); -} - -void TestEventListeners::SuppressEventForwarding() { - repeater_->set_forwarding_enabled(false); -} - -// class UnitTest - -// Gets the singleton UnitTest object. The first time this method is -// called, a UnitTest object is constructed and returned. Consecutive -// calls will return the same object. -// -// We don't protect this under mutex_ as a user is not supposed to -// call this before main() starts, from which point on the return -// value will never change. -UnitTest* UnitTest::GetInstance() { - // When compiled with MSVC 7.1 in optimized mode, destroying the - // UnitTest object upon exiting the program messes up the exit code, - // causing successful tests to appear failed. We have to use a - // different implementation in this case to bypass the compiler bug. - // This implementation makes the compiler happy, at the cost of - // leaking the UnitTest object. - - // CodeGear C++Builder insists on a public destructor for the - // default implementation. Use this implementation to keep good OO - // design with private destructor. - -#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) - static UnitTest* const instance = new UnitTest; - return instance; -#else - static UnitTest instance; - return &instance; -#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) -} - -// Gets the number of successful test cases. -int UnitTest::successful_test_case_count() const { - return impl()->successful_test_case_count(); -} - -// Gets the number of failed test cases. -int UnitTest::failed_test_case_count() const { - return impl()->failed_test_case_count(); -} - -// Gets the number of all test cases. -int UnitTest::total_test_case_count() const { - return impl()->total_test_case_count(); -} - -// Gets the number of all test cases that contain at least one test -// that should run. -int UnitTest::test_case_to_run_count() const { - return impl()->test_case_to_run_count(); -} - -// Gets the number of successful tests. -int UnitTest::successful_test_count() const { - return impl()->successful_test_count(); -} - -// Gets the number of failed tests. -int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } - -// Gets the number of disabled tests that will be reported in the XML report. -int UnitTest::reportable_disabled_test_count() const { - return impl()->reportable_disabled_test_count(); -} - -// Gets the number of disabled tests. -int UnitTest::disabled_test_count() const { - return impl()->disabled_test_count(); -} - -// Gets the number of tests to be printed in the XML report. -int UnitTest::reportable_test_count() const { - return impl()->reportable_test_count(); -} - -// Gets the number of all tests. -int UnitTest::total_test_count() const { return impl()->total_test_count(); } - -// Gets the number of tests that should run. -int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } - -// Gets the time of the test program start, in ms from the start of the -// UNIX epoch. -internal::TimeInMillis UnitTest::start_timestamp() const { - return impl()->start_timestamp(); -} - -// Gets the elapsed time, in milliseconds. -internal::TimeInMillis UnitTest::elapsed_time() const { - return impl()->elapsed_time(); -} - -// Returns true iff the unit test passed (i.e. all test cases passed). -bool UnitTest::Passed() const { return impl()->Passed(); } - -// Returns true iff the unit test failed (i.e. some test case failed -// or something outside of all tests failed). -bool UnitTest::Failed() const { return impl()->Failed(); } - -// Gets the i-th test case among all the test cases. i can range from 0 to -// total_test_case_count() - 1. If i is not in that range, returns NULL. -const TestCase* UnitTest::GetTestCase(int i) const { - return impl()->GetTestCase(i); -} - -// Returns the TestResult containing information on test failures and -// properties logged outside of individual test cases. -const TestResult& UnitTest::ad_hoc_test_result() const { - return *impl()->ad_hoc_test_result(); -} - -// Gets the i-th test case among all the test cases. i can range from 0 to -// total_test_case_count() - 1. If i is not in that range, returns NULL. -TestCase* UnitTest::GetMutableTestCase(int i) { - return impl()->GetMutableTestCase(i); -} - -// Returns the list of event listeners that can be used to track events -// inside Google Test. -TestEventListeners& UnitTest::listeners() { - return *impl()->listeners(); -} - -// Registers and returns a global test environment. When a test -// program is run, all global test environments will be set-up in the -// order they were registered. After all tests in the program have -// finished, all global test environments will be torn-down in the -// *reverse* order they were registered. -// -// The UnitTest object takes ownership of the given environment. -// -// We don't protect this under mutex_, as we only support calling it -// from the main thread. -Environment* UnitTest::AddEnvironment(Environment* env) { - if (env == NULL) { - return NULL; - } - - impl_->environments().push_back(env); - return env; -} - -// Adds a TestPartResult to the current TestResult object. All Google Test -// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call -// this to report their results. The user code should use the -// assertion macros instead of calling this directly. -void UnitTest::AddTestPartResult( - TestPartResult::Type result_type, - const char* file_name, - int line_number, - const std::string& message, - const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { - Message msg; - msg << message; - - internal::MutexLock lock(&mutex_); - if (impl_->gtest_trace_stack().size() > 0) { - msg << "\n" << GTEST_NAME_ << " trace:"; - - for (int i = static_cast(impl_->gtest_trace_stack().size()); - i > 0; --i) { - const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; - msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) - << " " << trace.message; - } - } - - if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { - msg << internal::kStackTraceMarker << os_stack_trace; - } - - const TestPartResult result = - TestPartResult(result_type, file_name, line_number, - msg.GetString().c_str()); - impl_->GetTestPartResultReporterForCurrentThread()-> - ReportTestPartResult(result); - - if (result_type != TestPartResult::kSuccess) { - // gtest_break_on_failure takes precedence over - // gtest_throw_on_failure. This allows a user to set the latter - // in the code (perhaps in order to use Google Test assertions - // with another testing framework) and specify the former on the - // command line for debugging. - if (GTEST_FLAG(break_on_failure)) { -#if GTEST_OS_WINDOWS - // Using DebugBreak on Windows allows gtest to still break into a debugger - // when a failure happens and both the --gtest_break_on_failure and - // the --gtest_catch_exceptions flags are specified. - DebugBreak(); -#else - // Dereference NULL through a volatile pointer to prevent the compiler - // from removing. We use this rather than abort() or __builtin_trap() for - // portability: Symbian doesn't implement abort() well, and some debuggers - // don't correctly trap abort(). - *static_cast(NULL) = 1; -#endif // GTEST_OS_WINDOWS - } else if (GTEST_FLAG(throw_on_failure)) { -#if GTEST_HAS_EXCEPTIONS - throw internal::GoogleTestFailureException(result); -#else - // We cannot call abort() as it generates a pop-up in debug mode - // that cannot be suppressed in VC 7.1 or below. - exit(1); -#endif - } - } -} - -// Adds a TestProperty to the current TestResult object when invoked from -// inside a test, to current TestCase's ad_hoc_test_result_ when invoked -// from SetUpTestCase or TearDownTestCase, or to the global property set -// when invoked elsewhere. If the result already contains a property with -// the same key, the value will be updated. -void UnitTest::RecordProperty(const std::string& key, - const std::string& value) { - impl_->RecordProperty(TestProperty(key, value)); -} - -// Runs all tests in this UnitTest object and prints the result. -// Returns 0 if successful, or 1 otherwise. -// -// We don't protect this under mutex_, as we only support calling it -// from the main thread. -int UnitTest::Run() { - const bool in_death_test_child_process = - internal::GTEST_FLAG(internal_run_death_test).length() > 0; - - // Google Test implements this protocol for catching that a test - // program exits before returning control to Google Test: - // - // 1. Upon start, Google Test creates a file whose absolute path - // is specified by the environment variable - // TEST_PREMATURE_EXIT_FILE. - // 2. When Google Test has finished its work, it deletes the file. - // - // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before - // running a Google-Test-based test program and check the existence - // of the file at the end of the test execution to see if it has - // exited prematurely. - - // If we are in the child process of a death test, don't - // create/delete the premature exit file, as doing so is unnecessary - // and will confuse the parent process. Otherwise, create/delete - // the file upon entering/leaving this function. If the program - // somehow exits before this function has a chance to return, the - // premature-exit file will be left undeleted, causing a test runner - // that understands the premature-exit-file protocol to report the - // test as having failed. - const internal::ScopedPrematureExitFile premature_exit_file( - in_death_test_child_process ? - NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); - - // Captures the value of GTEST_FLAG(catch_exceptions). This value will be - // used for the duration of the program. - impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); - -#if GTEST_HAS_SEH - // Either the user wants Google Test to catch exceptions thrown by the - // tests or this is executing in the context of death test child - // process. In either case the user does not want to see pop-up dialogs - // about crashes - they are expected. - if (impl()->catch_exceptions() || in_death_test_child_process) { -# if !GTEST_OS_WINDOWS_MOBILE - // SetErrorMode doesn't exist on CE. - SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | - SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); -# endif // !GTEST_OS_WINDOWS_MOBILE - -# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE - // Death test children can be terminated with _abort(). On Windows, - // _abort() can show a dialog with a warning message. This forces the - // abort message to go to stderr instead. - _set_error_mode(_OUT_TO_STDERR); -# endif - -# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE - // In the debug version, Visual Studio pops up a separate dialog - // offering a choice to debug the aborted program. We need to suppress - // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement - // executed. Google Test will notify the user of any unexpected - // failure via stderr. - // - // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. - // Users of prior VC versions shall suffer the agony and pain of - // clicking through the countless debug dialogs. - // TODO(vladl@google.com): find a way to suppress the abort dialog() in the - // debug mode when compiled with VC 7.1 or lower. - if (!GTEST_FLAG(break_on_failure)) - _set_abort_behavior( - 0x0, // Clear the following flags: - _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. -# endif - } -#endif // GTEST_HAS_SEH - - return internal::HandleExceptionsInMethodIfSupported( - impl(), - &internal::UnitTestImpl::RunAllTests, - "auxiliary test code (environments or event listeners)") ? 0 : 1; -} - -// Returns the working directory when the first TEST() or TEST_F() was -// executed. -const char* UnitTest::original_working_dir() const { - return impl_->original_working_dir_.c_str(); -} - -// Returns the TestCase object for the test that's currently running, -// or NULL if no test is running. -const TestCase* UnitTest::current_test_case() const - GTEST_LOCK_EXCLUDED_(mutex_) { - internal::MutexLock lock(&mutex_); - return impl_->current_test_case(); -} - -// Returns the TestInfo object for the test that's currently running, -// or NULL if no test is running. -const TestInfo* UnitTest::current_test_info() const - GTEST_LOCK_EXCLUDED_(mutex_) { - internal::MutexLock lock(&mutex_); - return impl_->current_test_info(); -} - -// Returns the random seed used at the start of the current test run. -int UnitTest::random_seed() const { return impl_->random_seed(); } - -#if GTEST_HAS_PARAM_TEST -// Returns ParameterizedTestCaseRegistry object used to keep track of -// value-parameterized tests and instantiate and register them. -internal::ParameterizedTestCaseRegistry& - UnitTest::parameterized_test_registry() - GTEST_LOCK_EXCLUDED_(mutex_) { - return impl_->parameterized_test_registry(); -} -#endif // GTEST_HAS_PARAM_TEST - -// Creates an empty UnitTest. -UnitTest::UnitTest() { - impl_ = new internal::UnitTestImpl(this); -} - -// Destructor of UnitTest. -UnitTest::~UnitTest() { - delete impl_; -} - -// Pushes a trace defined by SCOPED_TRACE() on to the per-thread -// Google Test trace stack. -void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) - GTEST_LOCK_EXCLUDED_(mutex_) { - internal::MutexLock lock(&mutex_); - impl_->gtest_trace_stack().push_back(trace); -} - -// Pops a trace from the per-thread Google Test trace stack. -void UnitTest::PopGTestTrace() - GTEST_LOCK_EXCLUDED_(mutex_) { - internal::MutexLock lock(&mutex_); - impl_->gtest_trace_stack().pop_back(); -} - -namespace internal { - -UnitTestImpl::UnitTestImpl(UnitTest* parent) - : parent_(parent), -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4355) // Temporarily disables warning 4355 - // (using this in initializer). - default_global_test_part_result_reporter_(this), - default_per_thread_test_part_result_reporter_(this), -# pragma warning(pop) // Restores the warning state again. -#else - default_global_test_part_result_reporter_(this), - default_per_thread_test_part_result_reporter_(this), -#endif // _MSC_VER - global_test_part_result_repoter_( - &default_global_test_part_result_reporter_), - per_thread_test_part_result_reporter_( - &default_per_thread_test_part_result_reporter_), -#if GTEST_HAS_PARAM_TEST - parameterized_test_registry_(), - parameterized_tests_registered_(false), -#endif // GTEST_HAS_PARAM_TEST - last_death_test_case_(-1), - current_test_case_(NULL), - current_test_info_(NULL), - ad_hoc_test_result_(), - os_stack_trace_getter_(NULL), - post_flag_parse_init_performed_(false), - random_seed_(0), // Will be overridden by the flag before first use. - random_(0), // Will be reseeded before first use. - start_timestamp_(0), - elapsed_time_(0), -#if GTEST_HAS_DEATH_TEST - death_test_factory_(new DefaultDeathTestFactory), -#endif - // Will be overridden by the flag before first use. - catch_exceptions_(false) { - listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); -} - -UnitTestImpl::~UnitTestImpl() { - // Deletes every TestCase. - ForEach(test_cases_, internal::Delete); - - // Deletes every Environment. - ForEach(environments_, internal::Delete); - - delete os_stack_trace_getter_; -} - -// Adds a TestProperty to the current TestResult object when invoked in a -// context of a test, to current test case's ad_hoc_test_result when invoke -// from SetUpTestCase/TearDownTestCase, or to the global property set -// otherwise. If the result already contains a property with the same key, -// the value will be updated. -void UnitTestImpl::RecordProperty(const TestProperty& test_property) { - std::string xml_element; - TestResult* test_result; // TestResult appropriate for property recording. - - if (current_test_info_ != NULL) { - xml_element = "testcase"; - test_result = &(current_test_info_->result_); - } else if (current_test_case_ != NULL) { - xml_element = "testsuite"; - test_result = &(current_test_case_->ad_hoc_test_result_); - } else { - xml_element = "testsuites"; - test_result = &ad_hoc_test_result_; - } - test_result->RecordProperty(xml_element, test_property); -} - -#if GTEST_HAS_DEATH_TEST -// Disables event forwarding if the control is currently in a death test -// subprocess. Must not be called before InitGoogleTest. -void UnitTestImpl::SuppressTestEventsIfInSubprocess() { - if (internal_run_death_test_flag_.get() != NULL) - listeners()->SuppressEventForwarding(); -} -#endif // GTEST_HAS_DEATH_TEST - -// Initializes event listeners performing XML output as specified by -// UnitTestOptions. Must not be called before InitGoogleTest. -void UnitTestImpl::ConfigureXmlOutput() { - const std::string& output_format = UnitTestOptions::GetOutputFormat(); - if (output_format == "xml") { - listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( - UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); - } else if (output_format != "") { - printf("WARNING: unrecognized output format \"%s\" ignored.\n", - output_format.c_str()); - fflush(stdout); - } -} - -#if GTEST_CAN_STREAM_RESULTS_ -// Initializes event listeners for streaming test results in string form. -// Must not be called before InitGoogleTest. -void UnitTestImpl::ConfigureStreamingOutput() { - const std::string& target = GTEST_FLAG(stream_result_to); - if (!target.empty()) { - const size_t pos = target.find(':'); - if (pos != std::string::npos) { - listeners()->Append(new StreamingListener(target.substr(0, pos), - target.substr(pos+1))); - } else { - printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", - target.c_str()); - fflush(stdout); - } - } -} -#endif // GTEST_CAN_STREAM_RESULTS_ - -// Performs initialization dependent upon flag values obtained in -// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to -// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest -// this function is also called from RunAllTests. Since this function can be -// called more than once, it has to be idempotent. -void UnitTestImpl::PostFlagParsingInit() { - // Ensures that this function does not execute more than once. - if (!post_flag_parse_init_performed_) { - post_flag_parse_init_performed_ = true; - -#if GTEST_HAS_DEATH_TEST - InitDeathTestSubprocessControlInfo(); - SuppressTestEventsIfInSubprocess(); -#endif // GTEST_HAS_DEATH_TEST - - // Registers parameterized tests. This makes parameterized tests - // available to the UnitTest reflection API without running - // RUN_ALL_TESTS. - RegisterParameterizedTests(); - - // Configures listeners for XML output. This makes it possible for users - // to shut down the default XML output before invoking RUN_ALL_TESTS. - ConfigureXmlOutput(); - -#if GTEST_CAN_STREAM_RESULTS_ - // Configures listeners for streaming test results to the specified server. - ConfigureStreamingOutput(); -#endif // GTEST_CAN_STREAM_RESULTS_ - } -} - -// A predicate that checks the name of a TestCase against a known -// value. -// -// This is used for implementation of the UnitTest class only. We put -// it in the anonymous namespace to prevent polluting the outer -// namespace. -// -// TestCaseNameIs is copyable. -class TestCaseNameIs { - public: - // Constructor. - explicit TestCaseNameIs(const std::string& name) - : name_(name) {} - - // Returns true iff the name of test_case matches name_. - bool operator()(const TestCase* test_case) const { - return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; - } - - private: - std::string name_; -}; - -// Finds and returns a TestCase with the given name. If one doesn't -// exist, creates one and returns it. It's the CALLER'S -// RESPONSIBILITY to ensure that this function is only called WHEN THE -// TESTS ARE NOT SHUFFLED. -// -// Arguments: -// -// test_case_name: name of the test case -// type_param: the name of the test case's type parameter, or NULL if -// this is not a typed or a type-parameterized test case. -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, - const char* type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc) { - // Can we find a TestCase with the given name? - const std::vector::const_iterator test_case = - std::find_if(test_cases_.begin(), test_cases_.end(), - TestCaseNameIs(test_case_name)); - - if (test_case != test_cases_.end()) - return *test_case; - - // No. Let's create one. - TestCase* const new_test_case = - new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); - - // Is this a death test case? - if (internal::UnitTestOptions::MatchesFilter(test_case_name, - kDeathTestCaseFilter)) { - // Yes. Inserts the test case after the last death test case - // defined so far. This only works when the test cases haven't - // been shuffled. Otherwise we may end up running a death test - // after a non-death test. - ++last_death_test_case_; - test_cases_.insert(test_cases_.begin() + last_death_test_case_, - new_test_case); - } else { - // No. Appends to the end of the list. - test_cases_.push_back(new_test_case); - } - - test_case_indices_.push_back(static_cast(test_case_indices_.size())); - return new_test_case; -} - -// Helpers for setting up / tearing down the given environment. They -// are for use in the ForEach() function. -static void SetUpEnvironment(Environment* env) { env->SetUp(); } -static void TearDownEnvironment(Environment* env) { env->TearDown(); } - -// Runs all tests in this UnitTest object, prints the result, and -// returns true if all tests are successful. If any exception is -// thrown during a test, the test is considered to be failed, but the -// rest of the tests will still be run. -// -// When parameterized tests are enabled, it expands and registers -// parameterized tests first in RegisterParameterizedTests(). -// All other functions called from RunAllTests() may safely assume that -// parameterized tests are ready to be counted and run. -bool UnitTestImpl::RunAllTests() { - // Makes sure InitGoogleTest() was called. - if (!GTestIsInitialized()) { - printf("%s", - "\nThis test program did NOT call ::testing::InitGoogleTest " - "before calling RUN_ALL_TESTS(). Please fix it.\n"); - return false; - } - - // Do not run any test if the --help flag was specified. - if (g_help_flag) - return true; - - // Repeats the call to the post-flag parsing initialization in case the - // user didn't call InitGoogleTest. - PostFlagParsingInit(); - - // Even if sharding is not on, test runners may want to use the - // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding - // protocol. - internal::WriteToShardStatusFileIfNeeded(); - - // True iff we are in a subprocess for running a thread-safe-style - // death test. - bool in_subprocess_for_death_test = false; - -#if GTEST_HAS_DEATH_TEST - in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); -#endif // GTEST_HAS_DEATH_TEST - - const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, - in_subprocess_for_death_test); - - // Compares the full test names with the filter to decide which - // tests to run. - const bool has_tests_to_run = FilterTests(should_shard - ? HONOR_SHARDING_PROTOCOL - : IGNORE_SHARDING_PROTOCOL) > 0; - - // Lists the tests and exits if the --gtest_list_tests flag was specified. - if (GTEST_FLAG(list_tests)) { - // This must be called *after* FilterTests() has been called. - ListTestsMatchingFilter(); - return true; - } - - random_seed_ = GTEST_FLAG(shuffle) ? - GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; - - // True iff at least one test has failed. - bool failed = false; - - TestEventListener* repeater = listeners()->repeater(); - - start_timestamp_ = GetTimeInMillis(); - repeater->OnTestProgramStart(*parent_); - - // How many times to repeat the tests? We don't want to repeat them - // when we are inside the subprocess of a death test. - const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); - // Repeats forever if the repeat count is negative. - const bool forever = repeat < 0; - for (int i = 0; forever || i != repeat; i++) { - // We want to preserve failures generated by ad-hoc test - // assertions executed before RUN_ALL_TESTS(). - ClearNonAdHocTestResult(); - - const TimeInMillis start = GetTimeInMillis(); - - // Shuffles test cases and tests if requested. - if (has_tests_to_run && GTEST_FLAG(shuffle)) { - random()->Reseed(random_seed_); - // This should be done before calling OnTestIterationStart(), - // such that a test event listener can see the actual test order - // in the event. - ShuffleTests(); - } - - // Tells the unit test event listeners that the tests are about to start. - repeater->OnTestIterationStart(*parent_, i); - - // Runs each test case if there is at least one test to run. - if (has_tests_to_run) { - // Sets up all environments beforehand. - repeater->OnEnvironmentsSetUpStart(*parent_); - ForEach(environments_, SetUpEnvironment); - repeater->OnEnvironmentsSetUpEnd(*parent_); - - // Runs the tests only if there was no fatal failure during global - // set-up. - if (!Test::HasFatalFailure()) { - for (int test_index = 0; test_index < total_test_case_count(); - test_index++) { - GetMutableTestCase(test_index)->Run(); - } - } - - // Tears down all environments in reverse order afterwards. - repeater->OnEnvironmentsTearDownStart(*parent_); - std::for_each(environments_.rbegin(), environments_.rend(), - TearDownEnvironment); - repeater->OnEnvironmentsTearDownEnd(*parent_); - } - - elapsed_time_ = GetTimeInMillis() - start; - - // Tells the unit test event listener that the tests have just finished. - repeater->OnTestIterationEnd(*parent_, i); - - // Gets the result and clears it. - if (!Passed()) { - failed = true; - } - - // Restores the original test order after the iteration. This - // allows the user to quickly repro a failure that happens in the - // N-th iteration without repeating the first (N - 1) iterations. - // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in - // case the user somehow changes the value of the flag somewhere - // (it's always safe to unshuffle the tests). - UnshuffleTests(); - - if (GTEST_FLAG(shuffle)) { - // Picks a new random seed for each iteration. - random_seed_ = GetNextRandomSeed(random_seed_); - } - } - - repeater->OnTestProgramEnd(*parent_); - - return !failed; -} - -// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file -// if the variable is present. If a file already exists at this location, this -// function will write over it. If the variable is present, but the file cannot -// be created, prints an error and exits. -void WriteToShardStatusFileIfNeeded() { - const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); - if (test_shard_file != NULL) { - FILE* const file = posix::FOpen(test_shard_file, "w"); - if (file == NULL) { - ColoredPrintf(COLOR_RED, - "Could not write to the test shard status file \"%s\" " - "specified by the %s environment variable.\n", - test_shard_file, kTestShardStatusFile); - fflush(stdout); - exit(EXIT_FAILURE); - } - fclose(file); - } -} - -// Checks whether sharding is enabled by examining the relevant -// environment variable values. If the variables are present, -// but inconsistent (i.e., shard_index >= total_shards), prints -// an error and exits. If in_subprocess_for_death_test, sharding is -// disabled because it must only be applied to the original test -// process. Otherwise, we could filter out death tests we intended to execute. -bool ShouldShard(const char* total_shards_env, - const char* shard_index_env, - bool in_subprocess_for_death_test) { - if (in_subprocess_for_death_test) { - return false; - } - - const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); - const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); - - if (total_shards == -1 && shard_index == -1) { - return false; - } else if (total_shards == -1 && shard_index != -1) { - const Message msg = Message() - << "Invalid environment variables: you have " - << kTestShardIndex << " = " << shard_index - << ", but have left " << kTestTotalShards << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); - fflush(stdout); - exit(EXIT_FAILURE); - } else if (total_shards != -1 && shard_index == -1) { - const Message msg = Message() - << "Invalid environment variables: you have " - << kTestTotalShards << " = " << total_shards - << ", but have left " << kTestShardIndex << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); - fflush(stdout); - exit(EXIT_FAILURE); - } else if (shard_index < 0 || shard_index >= total_shards) { - const Message msg = Message() - << "Invalid environment variables: we require 0 <= " - << kTestShardIndex << " < " << kTestTotalShards - << ", but you have " << kTestShardIndex << "=" << shard_index - << ", " << kTestTotalShards << "=" << total_shards << ".\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); - fflush(stdout); - exit(EXIT_FAILURE); - } - - return total_shards > 1; -} - -// Parses the environment variable var as an Int32. If it is unset, -// returns default_val. If it is not an Int32, prints an error -// and aborts. -Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { - const char* str_val = posix::GetEnv(var); - if (str_val == NULL) { - return default_val; - } - - Int32 result; - if (!ParseInt32(Message() << "The value of environment variable " << var, - str_val, &result)) { - exit(EXIT_FAILURE); - } - return result; -} - -// Given the total number of shards, the shard index, and the test id, -// returns true iff the test should be run on this shard. The test id is -// some arbitrary but unique non-negative integer assigned to each test -// method. Assumes that 0 <= shard_index < total_shards. -bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { - return (test_id % total_shards) == shard_index; -} - -// Compares the name of each test with the user-specified filter to -// decide whether the test should be run, then records the result in -// each TestCase and TestInfo object. -// If shard_tests == true, further filters tests based on sharding -// variables in the environment - see -// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. -// Returns the number of tests that should run. -int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { - const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? - Int32FromEnvOrDie(kTestTotalShards, -1) : -1; - const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? - Int32FromEnvOrDie(kTestShardIndex, -1) : -1; - - // num_runnable_tests are the number of tests that will - // run across all shards (i.e., match filter and are not disabled). - // num_selected_tests are the number of tests to be run on - // this shard. - int num_runnable_tests = 0; - int num_selected_tests = 0; - for (size_t i = 0; i < test_cases_.size(); i++) { - TestCase* const test_case = test_cases_[i]; - const std::string &test_case_name = test_case->name(); - test_case->set_should_run(false); - - for (size_t j = 0; j < test_case->test_info_list().size(); j++) { - TestInfo* const test_info = test_case->test_info_list()[j]; - const std::string test_name(test_info->name()); - // A test is disabled if test case name or test name matches - // kDisableTestFilter. - const bool is_disabled = - internal::UnitTestOptions::MatchesFilter(test_case_name, - kDisableTestFilter) || - internal::UnitTestOptions::MatchesFilter(test_name, - kDisableTestFilter); - test_info->is_disabled_ = is_disabled; - - const bool matches_filter = - internal::UnitTestOptions::FilterMatchesTest(test_case_name, - test_name); - test_info->matches_filter_ = matches_filter; - - const bool is_runnable = - (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && - matches_filter; - - const bool is_selected = is_runnable && - (shard_tests == IGNORE_SHARDING_PROTOCOL || - ShouldRunTestOnShard(total_shards, shard_index, - num_runnable_tests)); - - num_runnable_tests += is_runnable; - num_selected_tests += is_selected; - - test_info->should_run_ = is_selected; - test_case->set_should_run(test_case->should_run() || is_selected); - } - } - return num_selected_tests; -} - -// Prints the given C-string on a single line by replacing all '\n' -// characters with string "\\n". If the output takes more than -// max_length characters, only prints the first max_length characters -// and "...". -static void PrintOnOneLine(const char* str, int max_length) { - if (str != NULL) { - for (int i = 0; *str != '\0'; ++str) { - if (i >= max_length) { - printf("..."); - break; - } - if (*str == '\n') { - printf("\\n"); - i += 2; - } else { - printf("%c", *str); - ++i; - } - } - } -} - -// Prints the names of the tests matching the user-specified filter flag. -void UnitTestImpl::ListTestsMatchingFilter() { - // Print at most this many characters for each type/value parameter. - const int kMaxParamLength = 250; - - for (size_t i = 0; i < test_cases_.size(); i++) { - const TestCase* const test_case = test_cases_[i]; - bool printed_test_case_name = false; - - for (size_t j = 0; j < test_case->test_info_list().size(); j++) { - const TestInfo* const test_info = - test_case->test_info_list()[j]; - if (test_info->matches_filter_) { - if (!printed_test_case_name) { - printed_test_case_name = true; - printf("%s.", test_case->name()); - if (test_case->type_param() != NULL) { - printf(" # %s = ", kTypeParamLabel); - // We print the type parameter on a single line to make - // the output easy to parse by a program. - PrintOnOneLine(test_case->type_param(), kMaxParamLength); - } - printf("\n"); - } - printf(" %s", test_info->name()); - if (test_info->value_param() != NULL) { - printf(" # %s = ", kValueParamLabel); - // We print the value parameter on a single line to make the - // output easy to parse by a program. - PrintOnOneLine(test_info->value_param(), kMaxParamLength); - } - printf("\n"); - } - } - } - fflush(stdout); -} - -// Sets the OS stack trace getter. -// -// Does nothing if the input and the current OS stack trace getter are -// the same; otherwise, deletes the old getter and makes the input the -// current getter. -void UnitTestImpl::set_os_stack_trace_getter( - OsStackTraceGetterInterface* getter) { - if (os_stack_trace_getter_ != getter) { - delete os_stack_trace_getter_; - os_stack_trace_getter_ = getter; - } -} - -// Returns the current OS stack trace getter if it is not NULL; -// otherwise, creates an OsStackTraceGetter, makes it the current -// getter, and returns it. -OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { - if (os_stack_trace_getter_ == NULL) { - os_stack_trace_getter_ = new OsStackTraceGetter; - } - - return os_stack_trace_getter_; -} - -// Returns the TestResult for the test that's currently running, or -// the TestResult for the ad hoc test if no test is running. -TestResult* UnitTestImpl::current_test_result() { - return current_test_info_ ? - &(current_test_info_->result_) : &ad_hoc_test_result_; -} - -// Shuffles all test cases, and the tests within each test case, -// making sure that death tests are still run first. -void UnitTestImpl::ShuffleTests() { - // Shuffles the death test cases. - ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); - - // Shuffles the non-death test cases. - ShuffleRange(random(), last_death_test_case_ + 1, - static_cast(test_cases_.size()), &test_case_indices_); - - // Shuffles the tests inside each test case. - for (size_t i = 0; i < test_cases_.size(); i++) { - test_cases_[i]->ShuffleTests(random()); - } -} - -// Restores the test cases and tests to their order before the first shuffle. -void UnitTestImpl::UnshuffleTests() { - for (size_t i = 0; i < test_cases_.size(); i++) { - // Unshuffles the tests in each test case. - test_cases_[i]->UnshuffleTests(); - // Resets the index of each test case. - test_case_indices_[i] = static_cast(i); - } -} - -// Returns the current OS stack trace as an std::string. -// -// The maximum number of stack frames to be included is specified by -// the gtest_stack_trace_depth flag. The skip_count parameter -// specifies the number of top frames to be skipped, which doesn't -// count against the number of frames to be included. -// -// For example, if Foo() calls Bar(), which in turn calls -// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in -// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. -std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, - int skip_count) { - // We pass skip_count + 1 to skip this wrapper function in addition - // to what the user really wants to skip. - return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); -} - -// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to -// suppress unreachable code warnings. -namespace { -class ClassUniqueToAlwaysTrue {}; -} - -bool IsTrue(bool condition) { return condition; } - -bool AlwaysTrue() { -#if GTEST_HAS_EXCEPTIONS - // This condition is always false so AlwaysTrue() never actually throws, - // but it makes the compiler think that it may throw. - if (IsTrue(false)) - throw ClassUniqueToAlwaysTrue(); -#endif // GTEST_HAS_EXCEPTIONS - return true; -} - -// If *pstr starts with the given prefix, modifies *pstr to be right -// past the prefix and returns true; otherwise leaves *pstr unchanged -// and returns false. None of pstr, *pstr, and prefix can be NULL. -bool SkipPrefix(const char* prefix, const char** pstr) { - const size_t prefix_len = strlen(prefix); - if (strncmp(*pstr, prefix, prefix_len) == 0) { - *pstr += prefix_len; - return true; - } - return false; -} - -// Parses a string as a command line flag. The string should have -// the format "--flag=value". When def_optional is true, the "=value" -// part can be omitted. -// -// Returns the value of the flag, or NULL if the parsing failed. -const char* ParseFlagValue(const char* str, - const char* flag, - bool def_optional) { - // str and flag must not be NULL. - if (str == NULL || flag == NULL) return NULL; - - // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. - const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; - const size_t flag_len = flag_str.length(); - if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; - - // Skips the flag name. - const char* flag_end = str + flag_len; - - // When def_optional is true, it's OK to not have a "=value" part. - if (def_optional && (flag_end[0] == '\0')) { - return flag_end; - } - - // If def_optional is true and there are more characters after the - // flag name, or if def_optional is false, there must be a '=' after - // the flag name. - if (flag_end[0] != '=') return NULL; - - // Returns the string after "=". - return flag_end + 1; -} - -// Parses a string for a bool flag, in the form of either -// "--flag=value" or "--flag". -// -// In the former case, the value is taken as true as long as it does -// not start with '0', 'f', or 'F'. -// -// In the latter case, the value is taken as true. -// -// On success, stores the value of the flag in *value, and returns -// true. On failure, returns false without changing *value. -bool ParseBoolFlag(const char* str, const char* flag, bool* value) { - // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, true); - - // Aborts if the parsing failed. - if (value_str == NULL) return false; - - // Converts the string value to a bool. - *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); - return true; -} - -// Parses a string for an Int32 flag, in the form of -// "--flag=value". -// -// On success, stores the value of the flag in *value, and returns -// true. On failure, returns false without changing *value. -bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { - // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, false); - - // Aborts if the parsing failed. - if (value_str == NULL) return false; - - // Sets *value to the value of the flag. - return ParseInt32(Message() << "The value of flag --" << flag, - value_str, value); -} - -// Parses a string for a string flag, in the form of -// "--flag=value". -// -// On success, stores the value of the flag in *value, and returns -// true. On failure, returns false without changing *value. -bool ParseStringFlag(const char* str, const char* flag, std::string* value) { - // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, false); - - // Aborts if the parsing failed. - if (value_str == NULL) return false; - - // Sets *value to the value of the flag. - *value = value_str; - return true; -} - -// Determines whether a string has a prefix that Google Test uses for its -// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. -// If Google Test detects that a command line flag has its prefix but is not -// recognized, it will print its help message. Flags starting with -// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test -// internal flags and do not trigger the help message. -static bool HasGoogleTestFlagPrefix(const char* str) { - return (SkipPrefix("--", &str) || - SkipPrefix("-", &str) || - SkipPrefix("/", &str)) && - !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && - (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || - SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); -} - -// Prints a string containing code-encoded text. The following escape -// sequences can be used in the string to control the text color: -// -// @@ prints a single '@' character. -// @R changes the color to red. -// @G changes the color to green. -// @Y changes the color to yellow. -// @D changes to the default terminal text color. -// -// TODO(wan@google.com): Write tests for this once we add stdout -// capturing to Google Test. -static void PrintColorEncoded(const char* str) { - GTestColor color = COLOR_DEFAULT; // The current color. - - // Conceptually, we split the string into segments divided by escape - // sequences. Then we print one segment at a time. At the end of - // each iteration, the str pointer advances to the beginning of the - // next segment. - for (;;) { - const char* p = strchr(str, '@'); - if (p == NULL) { - ColoredPrintf(color, "%s", str); - return; - } - - ColoredPrintf(color, "%s", std::string(str, p).c_str()); - - const char ch = p[1]; - str = p + 2; - if (ch == '@') { - ColoredPrintf(color, "@"); - } else if (ch == 'D') { - color = COLOR_DEFAULT; - } else if (ch == 'R') { - color = COLOR_RED; - } else if (ch == 'G') { - color = COLOR_GREEN; - } else if (ch == 'Y') { - color = COLOR_YELLOW; - } else { - --str; - } - } -} - -static const char kColorEncodedHelpMessage[] = -"This program contains tests written using " GTEST_NAME_ ". You can use the\n" -"following command line flags to control its behavior:\n" -"\n" -"Test Selection:\n" -" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" -" List the names of all tests instead of running them. The name of\n" -" TEST(Foo, Bar) is \"Foo.Bar\".\n" -" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" - "[@G-@YNEGATIVE_PATTERNS]@D\n" -" Run only the tests whose name matches one of the positive patterns but\n" -" none of the negative patterns. '?' matches any single character; '*'\n" -" matches any substring; ':' separates two patterns.\n" -" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" -" Run all disabled tests too.\n" -"\n" -"Test Execution:\n" -" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" -" Run the tests repeatedly; use a negative count to repeat forever.\n" -" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" -" Randomize tests' orders on every iteration.\n" -" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" -" Random number seed to use for shuffling test orders (between 1 and\n" -" 99999, or 0 to use a seed based on the current time).\n" -"\n" -"Test Output:\n" -" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" -" Enable/disable colored output. The default is @Gauto@D.\n" -" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" -" Don't print the elapsed time of each test.\n" -" @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" - GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" -" Generate an XML report in the given directory or with the given file\n" -" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" -#if GTEST_CAN_STREAM_RESULTS_ -" @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" -" Stream test results to the given server.\n" -#endif // GTEST_CAN_STREAM_RESULTS_ -"\n" -"Assertion Behavior:\n" -#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS -" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" -" Set the default death test style.\n" -#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS -" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" -" Turn assertion failures into debugger break-points.\n" -" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" -" Turn assertion failures into C++ exceptions.\n" -" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" -" Do not report exceptions as test failures. Instead, allow them\n" -" to crash the program or throw a pop-up (on Windows).\n" -"\n" -"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " - "the corresponding\n" -"environment variable of a flag (all letters in upper-case). For example, to\n" -"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ - "color=no@D or set\n" -"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" -"\n" -"For more information, please read the " GTEST_NAME_ " documentation at\n" -"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" -"(not one in your own code or tests), please report it to\n" -"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; - -// Parses the command line for Google Test flags, without initializing -// other parts of Google Test. The type parameter CharType can be -// instantiated to either char or wchar_t. -template -void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { - for (int i = 1; i < *argc; i++) { - const std::string arg_string = StreamableToString(argv[i]); - const char* const arg = arg_string.c_str(); - - using internal::ParseBoolFlag; - using internal::ParseInt32Flag; - using internal::ParseStringFlag; - - // Do we see a Google Test flag? - if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, - >EST_FLAG(also_run_disabled_tests)) || - ParseBoolFlag(arg, kBreakOnFailureFlag, - >EST_FLAG(break_on_failure)) || - ParseBoolFlag(arg, kCatchExceptionsFlag, - >EST_FLAG(catch_exceptions)) || - ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || - ParseStringFlag(arg, kDeathTestStyleFlag, - >EST_FLAG(death_test_style)) || - ParseBoolFlag(arg, kDeathTestUseFork, - >EST_FLAG(death_test_use_fork)) || - ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || - ParseStringFlag(arg, kInternalRunDeathTestFlag, - >EST_FLAG(internal_run_death_test)) || - ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || - ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || - ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || - ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || - ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || - ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || - ParseInt32Flag(arg, kStackTraceDepthFlag, - >EST_FLAG(stack_trace_depth)) || - ParseStringFlag(arg, kStreamResultToFlag, - >EST_FLAG(stream_result_to)) || - ParseBoolFlag(arg, kThrowOnFailureFlag, - >EST_FLAG(throw_on_failure)) - ) { - // Yes. Shift the remainder of the argv list left by one. Note - // that argv has (*argc + 1) elements, the last one always being - // NULL. The following loop moves the trailing NULL element as - // well. - for (int j = i; j != *argc; j++) { - argv[j] = argv[j + 1]; - } - - // Decrements the argument count. - (*argc)--; - - // We also need to decrement the iterator as we just removed - // an element. - i--; - } else if (arg_string == "--help" || arg_string == "-h" || - arg_string == "-?" || arg_string == "/?" || - HasGoogleTestFlagPrefix(arg)) { - // Both help flag and unrecognized Google Test flags (excluding - // internal ones) trigger help display. - g_help_flag = true; - } - } - - if (g_help_flag) { - // We print the help here instead of in RUN_ALL_TESTS(), as the - // latter may not be called at all if the user is using Google - // Test with another testing framework. - PrintColorEncoded(kColorEncodedHelpMessage); - } -} - -// Parses the command line for Google Test flags, without initializing -// other parts of Google Test. -void ParseGoogleTestFlagsOnly(int* argc, char** argv) { - ParseGoogleTestFlagsOnlyImpl(argc, argv); -} -void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { - ParseGoogleTestFlagsOnlyImpl(argc, argv); -} - -// The internal implementation of InitGoogleTest(). -// -// The type parameter CharType can be instantiated to either char or -// wchar_t. -template -void InitGoogleTestImpl(int* argc, CharType** argv) { - g_init_gtest_count++; - - // We don't want to run the initialization code twice. - if (g_init_gtest_count != 1) return; - - if (*argc <= 0) return; - - internal::g_executable_path = internal::StreamableToString(argv[0]); - -#if GTEST_HAS_DEATH_TEST - - g_argvs.clear(); - for (int i = 0; i != *argc; i++) { - g_argvs.push_back(StreamableToString(argv[i])); - } - -#endif // GTEST_HAS_DEATH_TEST - - ParseGoogleTestFlagsOnly(argc, argv); - GetUnitTestImpl()->PostFlagParsingInit(); -} - -} // namespace internal - -// Initializes Google Test. This must be called before calling -// RUN_ALL_TESTS(). In particular, it parses a command line for the -// flags that Google Test recognizes. Whenever a Google Test flag is -// seen, it is removed from argv, and *argc is decremented. -// -// No value is returned. Instead, the Google Test flag variables are -// updated. -// -// Calling the function for the second time has no user-visible effect. -void InitGoogleTest(int* argc, char** argv) { - internal::InitGoogleTestImpl(argc, argv); -} - -// This overloaded version can be used in Windows programs compiled in -// UNICODE mode. -void InitGoogleTest(int* argc, wchar_t** argv) { - internal::InitGoogleTestImpl(argc, argv); -} - -} // namespace testing -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) -// -// This file implements death tests. - - -#if GTEST_HAS_DEATH_TEST - -# if GTEST_OS_MAC -# include -# endif // GTEST_OS_MAC - -# include -# include -# include - -# if GTEST_OS_LINUX -# include -# endif // GTEST_OS_LINUX - -# include - -# if GTEST_OS_WINDOWS -# include -# else -# include -# include -# endif // GTEST_OS_WINDOWS - -# if GTEST_OS_QNX -# include -# endif // GTEST_OS_QNX - -#endif // GTEST_HAS_DEATH_TEST - - -// Indicates that this translation unit is part of Google Test's -// implementation. It must come before gtest-internal-inl.h is -// included, or there will be a compiler error. This trick is to -// prevent a user from accidentally including gtest-internal-inl.h in -// his code. -#define GTEST_IMPLEMENTATION_ 1 -#undef GTEST_IMPLEMENTATION_ - -namespace testing { - -// Constants. - -// The default death test style. -static const char kDefaultDeathTestStyle[] = "fast"; - -GTEST_DEFINE_string_( - death_test_style, - internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), - "Indicates how to run a death test in a forked child process: " - "\"threadsafe\" (child process re-executes the test binary " - "from the beginning, running only the specific death test) or " - "\"fast\" (child process runs the death test immediately " - "after forking)."); - -GTEST_DEFINE_bool_( - death_test_use_fork, - internal::BoolFromGTestEnv("death_test_use_fork", false), - "Instructs to use fork()/_exit() instead of clone() in death tests. " - "Ignored and always uses fork() on POSIX systems where clone() is not " - "implemented. Useful when running under valgrind or similar tools if " - "those do not support clone(). Valgrind 3.3.1 will just fail if " - "it sees an unsupported combination of clone() flags. " - "It is not recommended to use this flag w/o valgrind though it will " - "work in 99% of the cases. Once valgrind is fixed, this flag will " - "most likely be removed."); - -namespace internal { -GTEST_DEFINE_string_( - internal_run_death_test, "", - "Indicates the file, line number, temporal index of " - "the single death test to run, and a file descriptor to " - "which a success code may be sent, all separated by " - "the '|' characters. This flag is specified if and only if the current " - "process is a sub-process launched for running a thread-safe " - "death test. FOR INTERNAL USE ONLY."); -} // namespace internal - -#if GTEST_HAS_DEATH_TEST - -namespace internal { - -// Valid only for fast death tests. Indicates the code is running in the -// child process of a fast style death test. -static bool g_in_fast_death_test_child = false; - -// Returns a Boolean value indicating whether the caller is currently -// executing in the context of the death test child process. Tools such as -// Valgrind heap checkers may need this to modify their behavior in death -// tests. IMPORTANT: This is an internal utility. Using it may break the -// implementation of death tests. User code MUST NOT use it. -bool InDeathTestChild() { -# if GTEST_OS_WINDOWS - - // On Windows, death tests are thread-safe regardless of the value of the - // death_test_style flag. - return !GTEST_FLAG(internal_run_death_test).empty(); - -# else - - if (GTEST_FLAG(death_test_style) == "threadsafe") - return !GTEST_FLAG(internal_run_death_test).empty(); - else - return g_in_fast_death_test_child; -#endif -} - -} // namespace internal - -// ExitedWithCode constructor. -ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { -} - -// ExitedWithCode function-call operator. -bool ExitedWithCode::operator()(int exit_status) const { -# if GTEST_OS_WINDOWS - - return exit_status == exit_code_; - -# else - - return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; - -# endif // GTEST_OS_WINDOWS -} - -# if !GTEST_OS_WINDOWS -// KilledBySignal constructor. -KilledBySignal::KilledBySignal(int signum) : signum_(signum) { -} - -// KilledBySignal function-call operator. -bool KilledBySignal::operator()(int exit_status) const { - return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; -} -# endif // !GTEST_OS_WINDOWS - -namespace internal { - -// Utilities needed for death tests. - -// Generates a textual description of a given exit code, in the format -// specified by wait(2). -static std::string ExitSummary(int exit_code) { - Message m; - -# if GTEST_OS_WINDOWS - - m << "Exited with exit status " << exit_code; - -# else - - if (WIFEXITED(exit_code)) { - m << "Exited with exit status " << WEXITSTATUS(exit_code); - } else if (WIFSIGNALED(exit_code)) { - m << "Terminated by signal " << WTERMSIG(exit_code); - } -# ifdef WCOREDUMP - if (WCOREDUMP(exit_code)) { - m << " (core dumped)"; - } -# endif -# endif // GTEST_OS_WINDOWS - - return m.GetString(); -} - -// Returns true if exit_status describes a process that was terminated -// by a signal, or exited normally with a nonzero exit code. -bool ExitedUnsuccessfully(int exit_status) { - return !ExitedWithCode(0)(exit_status); -} - -# if !GTEST_OS_WINDOWS -// Generates a textual failure message when a death test finds more than -// one thread running, or cannot determine the number of threads, prior -// to executing the given statement. It is the responsibility of the -// caller not to pass a thread_count of 1. -static std::string DeathTestThreadWarning(size_t thread_count) { - Message msg; - msg << "Death tests use fork(), which is unsafe particularly" - << " in a threaded context. For this test, " << GTEST_NAME_ << " "; - if (thread_count == 0) - msg << "couldn't detect the number of threads."; - else - msg << "detected " << thread_count << " threads."; - return msg.GetString(); -} -# endif // !GTEST_OS_WINDOWS - -// Flag characters for reporting a death test that did not die. -static const char kDeathTestLived = 'L'; -static const char kDeathTestReturned = 'R'; -static const char kDeathTestThrew = 'T'; -static const char kDeathTestInternalError = 'I'; - -// An enumeration describing all of the possible ways that a death test can -// conclude. DIED means that the process died while executing the test -// code; LIVED means that process lived beyond the end of the test code; -// RETURNED means that the test statement attempted to execute a return -// statement, which is not allowed; THREW means that the test statement -// returned control by throwing an exception. IN_PROGRESS means the test -// has not yet concluded. -// TODO(vladl@google.com): Unify names and possibly values for -// AbortReason, DeathTestOutcome, and flag characters above. -enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; - -// Routine for aborting the program which is safe to call from an -// exec-style death test child process, in which case the error -// message is propagated back to the parent process. Otherwise, the -// message is simply printed to stderr. In either case, the program -// then exits with status 1. -void DeathTestAbort(const std::string& message) { - // On a POSIX system, this function may be called from a threadsafe-style - // death test child process, which operates on a very small stack. Use - // the heap for any additional non-minuscule memory requirements. - const InternalRunDeathTestFlag* const flag = - GetUnitTestImpl()->internal_run_death_test_flag(); - if (flag != NULL) { - FILE* parent = posix::FDOpen(flag->write_fd(), "w"); - fputc(kDeathTestInternalError, parent); - fprintf(parent, "%s", message.c_str()); - fflush(parent); - _exit(1); - } else { - fprintf(stderr, "%s", message.c_str()); - fflush(stderr); - posix::Abort(); - } -} - -// A replacement for CHECK that calls DeathTestAbort if the assertion -// fails. -# define GTEST_DEATH_TEST_CHECK_(expression) \ - do { \ - if (!::testing::internal::IsTrue(expression)) { \ - DeathTestAbort( \ - ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ - + ::testing::internal::StreamableToString(__LINE__) + ": " \ - + #expression); \ - } \ - } while (::testing::internal::AlwaysFalse()) - -// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for -// evaluating any system call that fulfills two conditions: it must return -// -1 on failure, and set errno to EINTR when it is interrupted and -// should be tried again. The macro expands to a loop that repeatedly -// evaluates the expression as long as it evaluates to -1 and sets -// errno to EINTR. If the expression evaluates to -1 but errno is -// something other than EINTR, DeathTestAbort is called. -# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ - do { \ - int gtest_retval; \ - do { \ - gtest_retval = (expression); \ - } while (gtest_retval == -1 && errno == EINTR); \ - if (gtest_retval == -1) { \ - DeathTestAbort( \ - ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ - + ::testing::internal::StreamableToString(__LINE__) + ": " \ - + #expression + " != -1"); \ - } \ - } while (::testing::internal::AlwaysFalse()) - -// Returns the message describing the last system error in errno. -std::string GetLastErrnoDescription() { - return errno == 0 ? "" : posix::StrError(errno); -} - -// This is called from a death test parent process to read a failure -// message from the death test child process and log it with the FATAL -// severity. On Windows, the message is read from a pipe handle. On other -// platforms, it is read from a file descriptor. -static void FailFromInternalError(int fd) { - Message error; - char buffer[256]; - int num_read; - - do { - while ((num_read = posix::Read(fd, buffer, 255)) > 0) { - buffer[num_read] = '\0'; - error << buffer; - } - } while (num_read == -1 && errno == EINTR); - - if (num_read == 0) { - GTEST_LOG_(FATAL) << error.GetString(); - } else { - const int last_error = errno; - GTEST_LOG_(FATAL) << "Error while reading death test internal: " - << GetLastErrnoDescription() << " [" << last_error << "]"; - } -} - -// Death test constructor. Increments the running death test count -// for the current test. -DeathTest::DeathTest() { - TestInfo* const info = GetUnitTestImpl()->current_test_info(); - if (info == NULL) { - DeathTestAbort("Cannot run a death test outside of a TEST or " - "TEST_F construct"); - } -} - -// Creates and returns a death test by dispatching to the current -// death test factory. -bool DeathTest::Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test) { - return GetUnitTestImpl()->death_test_factory()->Create( - statement, regex, file, line, test); -} - -const char* DeathTest::LastMessage() { - return last_death_test_message_.c_str(); -} - -void DeathTest::set_last_death_test_message(const std::string& message) { - last_death_test_message_ = message; -} - -std::string DeathTest::last_death_test_message_; - -// Provides cross platform implementation for some death functionality. -class DeathTestImpl : public DeathTest { - protected: - DeathTestImpl(const char* a_statement, const RE* a_regex) - : statement_(a_statement), - regex_(a_regex), - spawned_(false), - status_(-1), - outcome_(IN_PROGRESS), - read_fd_(-1), - write_fd_(-1) {} - - // read_fd_ is expected to be closed and cleared by a derived class. - ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } - - void Abort(AbortReason reason); - virtual bool Passed(bool status_ok); - - const char* statement() const { return statement_; } - const RE* regex() const { return regex_; } - bool spawned() const { return spawned_; } - void set_spawned(bool is_spawned) { spawned_ = is_spawned; } - int status() const { return status_; } - void set_status(int a_status) { status_ = a_status; } - DeathTestOutcome outcome() const { return outcome_; } - void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } - int read_fd() const { return read_fd_; } - void set_read_fd(int fd) { read_fd_ = fd; } - int write_fd() const { return write_fd_; } - void set_write_fd(int fd) { write_fd_ = fd; } - - // Called in the parent process only. Reads the result code of the death - // test child process via a pipe, interprets it to set the outcome_ - // member, and closes read_fd_. Outputs diagnostics and terminates in - // case of unexpected codes. - void ReadAndInterpretStatusByte(); - - private: - // The textual content of the code this object is testing. This class - // doesn't own this string and should not attempt to delete it. - const char* const statement_; - // The regular expression which test output must match. DeathTestImpl - // doesn't own this object and should not attempt to delete it. - const RE* const regex_; - // True if the death test child process has been successfully spawned. - bool spawned_; - // The exit status of the child process. - int status_; - // How the death test concluded. - DeathTestOutcome outcome_; - // Descriptor to the read end of the pipe to the child process. It is - // always -1 in the child process. The child keeps its write end of the - // pipe in write_fd_. - int read_fd_; - // Descriptor to the child's write end of the pipe to the parent process. - // It is always -1 in the parent process. The parent keeps its end of the - // pipe in read_fd_. - int write_fd_; -}; - -// Called in the parent process only. Reads the result code of the death -// test child process via a pipe, interprets it to set the outcome_ -// member, and closes read_fd_. Outputs diagnostics and terminates in -// case of unexpected codes. -void DeathTestImpl::ReadAndInterpretStatusByte() { - char flag; - int bytes_read; - - // The read() here blocks until data is available (signifying the - // failure of the death test) or until the pipe is closed (signifying - // its success), so it's okay to call this in the parent before - // the child process has exited. - do { - bytes_read = posix::Read(read_fd(), &flag, 1); - } while (bytes_read == -1 && errno == EINTR); - - if (bytes_read == 0) { - set_outcome(DIED); - } else if (bytes_read == 1) { - switch (flag) { - case kDeathTestReturned: - set_outcome(RETURNED); - break; - case kDeathTestThrew: - set_outcome(THREW); - break; - case kDeathTestLived: - set_outcome(LIVED); - break; - case kDeathTestInternalError: - FailFromInternalError(read_fd()); // Does not return. - break; - default: - GTEST_LOG_(FATAL) << "Death test child process reported " - << "unexpected status byte (" - << static_cast(flag) << ")"; - } - } else { - GTEST_LOG_(FATAL) << "Read from death test child process failed: " - << GetLastErrnoDescription(); - } - GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); - set_read_fd(-1); -} - -// Signals that the death test code which should have exited, didn't. -// Should be called only in a death test child process. -// Writes a status byte to the child's status file descriptor, then -// calls _exit(1). -void DeathTestImpl::Abort(AbortReason reason) { - // The parent process considers the death test to be a failure if - // it finds any data in our pipe. So, here we write a single flag byte - // to the pipe, then exit. - const char status_ch = - reason == TEST_DID_NOT_DIE ? kDeathTestLived : - reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; - - GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); - // We are leaking the descriptor here because on some platforms (i.e., - // when built as Windows DLL), destructors of global objects will still - // run after calling _exit(). On such systems, write_fd_ will be - // indirectly closed from the destructor of UnitTestImpl, causing double - // close if it is also closed here. On debug configurations, double close - // may assert. As there are no in-process buffers to flush here, we are - // relying on the OS to close the descriptor after the process terminates - // when the destructors are not run. - _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) -} - -// Returns an indented copy of stderr output for a death test. -// This makes distinguishing death test output lines from regular log lines -// much easier. -static ::std::string FormatDeathTestOutput(const ::std::string& output) { - ::std::string ret; - for (size_t at = 0; ; ) { - const size_t line_end = output.find('\n', at); - ret += "[ DEATH ] "; - if (line_end == ::std::string::npos) { - ret += output.substr(at); - break; - } - ret += output.substr(at, line_end + 1 - at); - at = line_end + 1; - } - return ret; -} - -// Assesses the success or failure of a death test, using both private -// members which have previously been set, and one argument: -// -// Private data members: -// outcome: An enumeration describing how the death test -// concluded: DIED, LIVED, THREW, or RETURNED. The death test -// fails in the latter three cases. -// status: The exit status of the child process. On *nix, it is in the -// in the format specified by wait(2). On Windows, this is the -// value supplied to the ExitProcess() API or a numeric code -// of the exception that terminated the program. -// regex: A regular expression object to be applied to -// the test's captured standard error output; the death test -// fails if it does not match. -// -// Argument: -// status_ok: true if exit_status is acceptable in the context of -// this particular death test, which fails if it is false -// -// Returns true iff all of the above conditions are met. Otherwise, the -// first failing condition, in the order given above, is the one that is -// reported. Also sets the last death test message string. -bool DeathTestImpl::Passed(bool status_ok) { - if (!spawned()) - return false; - - const std::string error_message = GetCapturedStderr(); - - bool success = false; - Message buffer; - - buffer << "Death test: " << statement() << "\n"; - switch (outcome()) { - case LIVED: - buffer << " Result: failed to die.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); - break; - case THREW: - buffer << " Result: threw an exception.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); - break; - case RETURNED: - buffer << " Result: illegal return in test statement.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); - break; - case DIED: - if (status_ok) { - const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); - if (matched) { - success = true; - } else { - buffer << " Result: died but not with expected error.\n" - << " Expected: " << regex()->pattern() << "\n" - << "Actual msg:\n" << FormatDeathTestOutput(error_message); - } - } else { - buffer << " Result: died but not with expected exit code:\n" - << " " << ExitSummary(status()) << "\n" - << "Actual msg:\n" << FormatDeathTestOutput(error_message); - } - break; - case IN_PROGRESS: - default: - GTEST_LOG_(FATAL) - << "DeathTest::Passed somehow called before conclusion of test"; - } - - DeathTest::set_last_death_test_message(buffer.GetString()); - return success; -} - -# if GTEST_OS_WINDOWS -// WindowsDeathTest implements death tests on Windows. Due to the -// specifics of starting new processes on Windows, death tests there are -// always threadsafe, and Google Test considers the -// --gtest_death_test_style=fast setting to be equivalent to -// --gtest_death_test_style=threadsafe there. -// -// A few implementation notes: Like the Linux version, the Windows -// implementation uses pipes for child-to-parent communication. But due to -// the specifics of pipes on Windows, some extra steps are required: -// -// 1. The parent creates a communication pipe and stores handles to both -// ends of it. -// 2. The parent starts the child and provides it with the information -// necessary to acquire the handle to the write end of the pipe. -// 3. The child acquires the write end of the pipe and signals the parent -// using a Windows event. -// 4. Now the parent can release the write end of the pipe on its side. If -// this is done before step 3, the object's reference count goes down to -// 0 and it is destroyed, preventing the child from acquiring it. The -// parent now has to release it, or read operations on the read end of -// the pipe will not return when the child terminates. -// 5. The parent reads child's output through the pipe (outcome code and -// any possible error messages) from the pipe, and its stderr and then -// determines whether to fail the test. -// -// Note: to distinguish Win32 API calls from the local method and function -// calls, the former are explicitly resolved in the global namespace. -// -class WindowsDeathTest : public DeathTestImpl { - public: - WindowsDeathTest(const char* a_statement, - const RE* a_regex, - const char* file, - int line) - : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} - - // All of these virtual functions are inherited from DeathTest. - virtual int Wait(); - virtual TestRole AssumeRole(); - - private: - // The name of the file in which the death test is located. - const char* const file_; - // The line number on which the death test is located. - const int line_; - // Handle to the write end of the pipe to the child process. - AutoHandle write_handle_; - // Child process handle. - AutoHandle child_handle_; - // Event the child process uses to signal the parent that it has - // acquired the handle to the write end of the pipe. After seeing this - // event the parent can release its own handles to make sure its - // ReadFile() calls return when the child terminates. - AutoHandle event_handle_; -}; - -// Waits for the child in a death test to exit, returning its exit -// status, or 0 if no child process exists. As a side effect, sets the -// outcome data member. -int WindowsDeathTest::Wait() { - if (!spawned()) - return 0; - - // Wait until the child either signals that it has acquired the write end - // of the pipe or it dies. - const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; - switch (::WaitForMultipleObjects(2, - wait_handles, - FALSE, // Waits for any of the handles. - INFINITE)) { - case WAIT_OBJECT_0: - case WAIT_OBJECT_0 + 1: - break; - default: - GTEST_DEATH_TEST_CHECK_(false); // Should not get here. - } - - // The child has acquired the write end of the pipe or exited. - // We release the handle on our side and continue. - write_handle_.Reset(); - event_handle_.Reset(); - - ReadAndInterpretStatusByte(); - - // Waits for the child process to exit if it haven't already. This - // returns immediately if the child has already exited, regardless of - // whether previous calls to WaitForMultipleObjects synchronized on this - // handle or not. - GTEST_DEATH_TEST_CHECK_( - WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), - INFINITE)); - DWORD status_code; - GTEST_DEATH_TEST_CHECK_( - ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); - child_handle_.Reset(); - set_status(static_cast(status_code)); - return status(); -} - -// The AssumeRole process for a Windows death test. It creates a child -// process with the same executable as the current process to run the -// death test. The child process is given the --gtest_filter and -// --gtest_internal_run_death_test flags such that it knows to run the -// current death test only. -DeathTest::TestRole WindowsDeathTest::AssumeRole() { - const UnitTestImpl* const impl = GetUnitTestImpl(); - const InternalRunDeathTestFlag* const flag = - impl->internal_run_death_test_flag(); - const TestInfo* const info = impl->current_test_info(); - const int death_test_index = info->result()->death_test_count(); - - if (flag != NULL) { - // ParseInternalRunDeathTestFlag() has performed all the necessary - // processing. - set_write_fd(flag->write_fd()); - return EXECUTE_TEST; - } - - // WindowsDeathTest uses an anonymous pipe to communicate results of - // a death test. - SECURITY_ATTRIBUTES handles_are_inheritable = { - sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; - HANDLE read_handle, write_handle; - GTEST_DEATH_TEST_CHECK_( - ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, - 0) // Default buffer size. - != FALSE); - set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), - O_RDONLY)); - write_handle_.Reset(write_handle); - event_handle_.Reset(::CreateEvent( - &handles_are_inheritable, - TRUE, // The event will automatically reset to non-signaled state. - FALSE, // The initial state is non-signalled. - NULL)); // The even is unnamed. - GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); - const std::string filter_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + - info->test_case_name() + "." + info->name(); - const std::string internal_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + - "=" + file_ + "|" + StreamableToString(line_) + "|" + - StreamableToString(death_test_index) + "|" + - StreamableToString(static_cast(::GetCurrentProcessId())) + - // size_t has the same width as pointers on both 32-bit and 64-bit - // Windows platforms. - // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. - "|" + StreamableToString(reinterpret_cast(write_handle)) + - "|" + StreamableToString(reinterpret_cast(event_handle_.Get())); - - char executable_path[_MAX_PATH + 1]; // NOLINT - GTEST_DEATH_TEST_CHECK_( - _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, - executable_path, - _MAX_PATH)); - - std::string command_line = - std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + - internal_flag + "\""; - - DeathTest::set_last_death_test_message(""); - - CaptureStderr(); - // Flush the log buffers since the log streams are shared with the child. - FlushInfoLog(); - - // The child process will share the standard handles with the parent. - STARTUPINFOA startup_info; - memset(&startup_info, 0, sizeof(STARTUPINFO)); - startup_info.dwFlags = STARTF_USESTDHANDLES; - startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); - startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); - startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); - - PROCESS_INFORMATION process_info; - GTEST_DEATH_TEST_CHECK_(::CreateProcessA( - executable_path, - const_cast(command_line.c_str()), - NULL, // Retuned process handle is not inheritable. - NULL, // Retuned thread handle is not inheritable. - TRUE, // Child inherits all inheritable handles (for write_handle_). - 0x0, // Default creation flags. - NULL, // Inherit the parent's environment. - UnitTest::GetInstance()->original_working_dir(), - &startup_info, - &process_info) != FALSE); - child_handle_.Reset(process_info.hProcess); - ::CloseHandle(process_info.hThread); - set_spawned(true); - return OVERSEE_TEST; -} -# else // We are not on Windows. - -// ForkingDeathTest provides implementations for most of the abstract -// methods of the DeathTest interface. Only the AssumeRole method is -// left undefined. -class ForkingDeathTest : public DeathTestImpl { - public: - ForkingDeathTest(const char* statement, const RE* regex); - - // All of these virtual functions are inherited from DeathTest. - virtual int Wait(); - - protected: - void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } - - private: - // PID of child process during death test; 0 in the child process itself. - pid_t child_pid_; -}; - -// Constructs a ForkingDeathTest. -ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) - : DeathTestImpl(a_statement, a_regex), - child_pid_(-1) {} - -// Waits for the child in a death test to exit, returning its exit -// status, or 0 if no child process exists. As a side effect, sets the -// outcome data member. -int ForkingDeathTest::Wait() { - if (!spawned()) - return 0; - - ReadAndInterpretStatusByte(); - - int status_value; - GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); - set_status(status_value); - return status_value; -} - -// A concrete death test class that forks, then immediately runs the test -// in the child process. -class NoExecDeathTest : public ForkingDeathTest { - public: - NoExecDeathTest(const char* a_statement, const RE* a_regex) : - ForkingDeathTest(a_statement, a_regex) { } - virtual TestRole AssumeRole(); -}; - -// The AssumeRole process for a fork-and-run death test. It implements a -// straightforward fork, with a simple pipe to transmit the status byte. -DeathTest::TestRole NoExecDeathTest::AssumeRole() { - const size_t thread_count = GetThreadCount(); - if (thread_count != 1) { - GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); - } - - int pipe_fd[2]; - GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); - - DeathTest::set_last_death_test_message(""); - CaptureStderr(); - // When we fork the process below, the log file buffers are copied, but the - // file descriptors are shared. We flush all log files here so that closing - // the file descriptors in the child process doesn't throw off the - // synchronization between descriptors and buffers in the parent process. - // This is as close to the fork as possible to avoid a race condition in case - // there are multiple threads running before the death test, and another - // thread writes to the log file. - FlushInfoLog(); - - const pid_t child_pid = fork(); - GTEST_DEATH_TEST_CHECK_(child_pid != -1); - set_child_pid(child_pid); - if (child_pid == 0) { - GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); - set_write_fd(pipe_fd[1]); - // Redirects all logging to stderr in the child process to prevent - // concurrent writes to the log files. We capture stderr in the parent - // process and append the child process' output to a log. - LogToStderr(); - // Event forwarding to the listeners of event listener API mush be shut - // down in death test subprocesses. - GetUnitTestImpl()->listeners()->SuppressEventForwarding(); - g_in_fast_death_test_child = true; - return EXECUTE_TEST; - } else { - GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); - set_read_fd(pipe_fd[0]); - set_spawned(true); - return OVERSEE_TEST; - } -} - -// A concrete death test class that forks and re-executes the main -// program from the beginning, with command-line flags set that cause -// only this specific death test to be run. -class ExecDeathTest : public ForkingDeathTest { - public: - ExecDeathTest(const char* a_statement, const RE* a_regex, - const char* file, int line) : - ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } - virtual TestRole AssumeRole(); - private: - static ::std::vector - GetArgvsForDeathTestChildProcess() { - ::std::vector args = GetInjectableArgvs(); - return args; - } - // The name of the file in which the death test is located. - const char* const file_; - // The line number on which the death test is located. - const int line_; -}; - -// Utility class for accumulating command-line arguments. -class Arguments { - public: - Arguments() { - args_.push_back(NULL); - } - - ~Arguments() { - for (std::vector::iterator i = args_.begin(); i != args_.end(); - ++i) { - free(*i); - } - } - void AddArgument(const char* argument) { - args_.insert(args_.end() - 1, posix::StrDup(argument)); - } - - template - void AddArguments(const ::std::vector& arguments) { - for (typename ::std::vector::const_iterator i = arguments.begin(); - i != arguments.end(); - ++i) { - args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); - } - } - char* const* Argv() { - return &args_[0]; - } - - private: - std::vector args_; -}; - -// A struct that encompasses the arguments to the child process of a -// threadsafe-style death test process. -struct ExecDeathTestArgs { - char* const* argv; // Command-line arguments for the child's call to exec - int close_fd; // File descriptor to close; the read end of a pipe -}; - -# if GTEST_OS_MAC -inline char** GetEnviron() { - // When Google Test is built as a framework on MacOS X, the environ variable - // is unavailable. Apple's documentation (man environ) recommends using - // _NSGetEnviron() instead. - return *_NSGetEnviron(); -} -# else -// Some POSIX platforms expect you to declare environ. extern "C" makes -// it reside in the global namespace. -extern "C" char** environ; -inline char** GetEnviron() { return environ; } -# endif // GTEST_OS_MAC - -# if !GTEST_OS_QNX -// The main function for a threadsafe-style death test child process. -// This function is called in a clone()-ed process and thus must avoid -// any potentially unsafe operations like malloc or libc functions. -static int ExecDeathTestChildMain(void* child_arg) { - ExecDeathTestArgs* const args = static_cast(child_arg); - GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); - - // We need to execute the test program in the same environment where - // it was originally invoked. Therefore we change to the original - // working directory first. - const char* const original_dir = - UnitTest::GetInstance()->original_working_dir(); - // We can safely call chdir() as it's a direct system call. - if (chdir(original_dir) != 0) { - DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + - GetLastErrnoDescription()); - return EXIT_FAILURE; - } - - // We can safely call execve() as it's a direct system call. We - // cannot use execvp() as it's a libc function and thus potentially - // unsafe. Since execve() doesn't search the PATH, the user must - // invoke the test program via a valid path that contains at least - // one path separator. - execve(args->argv[0], args->argv, GetEnviron()); - DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + - original_dir + " failed: " + - GetLastErrnoDescription()); - return EXIT_FAILURE; -} -# endif // !GTEST_OS_QNX - -// Two utility routines that together determine the direction the stack -// grows. -// This could be accomplished more elegantly by a single recursive -// function, but we want to guard against the unlikely possibility of -// a smart compiler optimizing the recursion away. -// -// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining -// StackLowerThanAddress into StackGrowsDown, which then doesn't give -// correct answer. -void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; -void StackLowerThanAddress(const void* ptr, bool* result) { - int dummy; - *result = (&dummy < ptr); -} - -bool StackGrowsDown() { - int dummy; - bool result; - StackLowerThanAddress(&dummy, &result); - return result; -} - -// Spawns a child process with the same executable as the current process in -// a thread-safe manner and instructs it to run the death test. The -// implementation uses fork(2) + exec. On systems where clone(2) is -// available, it is used instead, being slightly more thread-safe. On QNX, -// fork supports only single-threaded environments, so this function uses -// spawn(2) there instead. The function dies with an error message if -// anything goes wrong. -static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { - ExecDeathTestArgs args = { argv, close_fd }; - pid_t child_pid = -1; - -# if GTEST_OS_QNX - // Obtains the current directory and sets it to be closed in the child - // process. - const int cwd_fd = open(".", O_RDONLY); - GTEST_DEATH_TEST_CHECK_(cwd_fd != -1); - GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC)); - // We need to execute the test program in the same environment where - // it was originally invoked. Therefore we change to the original - // working directory first. - const char* const original_dir = - UnitTest::GetInstance()->original_working_dir(); - // We can safely call chdir() as it's a direct system call. - if (chdir(original_dir) != 0) { - DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + - GetLastErrnoDescription()); - return EXIT_FAILURE; - } - - int fd_flags; - // Set close_fd to be closed after spawn. - GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); - GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, - fd_flags | FD_CLOEXEC)); - struct inheritance inherit = {0}; - // spawn is a system call. - child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); - // Restores the current working directory. - GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); - GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); - -# else // GTEST_OS_QNX -# if GTEST_OS_LINUX - // When a SIGPROF signal is received while fork() or clone() are executing, - // the process may hang. To avoid this, we ignore SIGPROF here and re-enable - // it after the call to fork()/clone() is complete. - struct sigaction saved_sigprof_action; - struct sigaction ignore_sigprof_action; - memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); - sigemptyset(&ignore_sigprof_action.sa_mask); - ignore_sigprof_action.sa_handler = SIG_IGN; - GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( - SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); -# endif // GTEST_OS_LINUX - -# if GTEST_HAS_CLONE - const bool use_fork = GTEST_FLAG(death_test_use_fork); - - if (!use_fork) { - static const bool stack_grows_down = StackGrowsDown(); - const size_t stack_size = getpagesize(); - // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. - void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); - GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); - - // Maximum stack alignment in bytes: For a downward-growing stack, this - // amount is subtracted from size of the stack space to get an address - // that is within the stack space and is aligned on all systems we care - // about. As far as I know there is no ABI with stack alignment greater - // than 64. We assume stack and stack_size already have alignment of - // kMaxStackAlignment. - const size_t kMaxStackAlignment = 64; - void* const stack_top = - static_cast(stack) + - (stack_grows_down ? stack_size - kMaxStackAlignment : 0); - GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && - reinterpret_cast(stack_top) % kMaxStackAlignment == 0); - - child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); - - GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); - } -# else - const bool use_fork = true; -# endif // GTEST_HAS_CLONE - - if (use_fork && (child_pid = fork()) == 0) { - ExecDeathTestChildMain(&args); - _exit(0); - } -# endif // GTEST_OS_QNX -# if GTEST_OS_LINUX - GTEST_DEATH_TEST_CHECK_SYSCALL_( - sigaction(SIGPROF, &saved_sigprof_action, NULL)); -# endif // GTEST_OS_LINUX - - GTEST_DEATH_TEST_CHECK_(child_pid != -1); - return child_pid; -} - -// The AssumeRole process for a fork-and-exec death test. It re-executes the -// main program from the beginning, setting the --gtest_filter -// and --gtest_internal_run_death_test flags to cause only the current -// death test to be re-run. -DeathTest::TestRole ExecDeathTest::AssumeRole() { - const UnitTestImpl* const impl = GetUnitTestImpl(); - const InternalRunDeathTestFlag* const flag = - impl->internal_run_death_test_flag(); - const TestInfo* const info = impl->current_test_info(); - const int death_test_index = info->result()->death_test_count(); - - if (flag != NULL) { - set_write_fd(flag->write_fd()); - return EXECUTE_TEST; - } - - int pipe_fd[2]; - GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); - // Clear the close-on-exec flag on the write end of the pipe, lest - // it be closed when the child process does an exec: - GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); - - const std::string filter_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" - + info->test_case_name() + "." + info->name(); - const std::string internal_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" - + file_ + "|" + StreamableToString(line_) + "|" - + StreamableToString(death_test_index) + "|" - + StreamableToString(pipe_fd[1]); - Arguments args; - args.AddArguments(GetArgvsForDeathTestChildProcess()); - args.AddArgument(filter_flag.c_str()); - args.AddArgument(internal_flag.c_str()); - - DeathTest::set_last_death_test_message(""); - - CaptureStderr(); - // See the comment in NoExecDeathTest::AssumeRole for why the next line - // is necessary. - FlushInfoLog(); - - const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]); - GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); - set_child_pid(child_pid); - set_read_fd(pipe_fd[0]); - set_spawned(true); - return OVERSEE_TEST; -} - -# endif // !GTEST_OS_WINDOWS - -// Creates a concrete DeathTest-derived class that depends on the -// --gtest_death_test_style flag, and sets the pointer pointed to -// by the "test" argument to its address. If the test should be -// skipped, sets that pointer to NULL. Returns true, unless the -// flag is set to an invalid value. -bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, - const char* file, int line, - DeathTest** test) { - UnitTestImpl* const impl = GetUnitTestImpl(); - const InternalRunDeathTestFlag* const flag = - impl->internal_run_death_test_flag(); - const int death_test_index = impl->current_test_info() - ->increment_death_test_count(); - - if (flag != NULL) { - if (death_test_index > flag->index()) { - DeathTest::set_last_death_test_message( - "Death test count (" + StreamableToString(death_test_index) - + ") somehow exceeded expected maximum (" - + StreamableToString(flag->index()) + ")"); - return false; - } - - if (!(flag->file() == file && flag->line() == line && - flag->index() == death_test_index)) { - *test = NULL; - return true; - } - } - -# if GTEST_OS_WINDOWS - - if (GTEST_FLAG(death_test_style) == "threadsafe" || - GTEST_FLAG(death_test_style) == "fast") { - *test = new WindowsDeathTest(statement, regex, file, line); - } - -# else - - if (GTEST_FLAG(death_test_style) == "threadsafe") { - *test = new ExecDeathTest(statement, regex, file, line); - } else if (GTEST_FLAG(death_test_style) == "fast") { - *test = new NoExecDeathTest(statement, regex); - } - -# endif // GTEST_OS_WINDOWS - - else { // NOLINT - this is more readable than unbalanced brackets inside #if. - DeathTest::set_last_death_test_message( - "Unknown death test style \"" + GTEST_FLAG(death_test_style) - + "\" encountered"); - return false; - } - - return true; -} - -// Splits a given string on a given delimiter, populating a given -// vector with the fields. GTEST_HAS_DEATH_TEST implies that we have -// ::std::string, so we can use it here. -static void SplitString(const ::std::string& str, char delimiter, - ::std::vector< ::std::string>* dest) { - ::std::vector< ::std::string> parsed; - ::std::string::size_type pos = 0; - while (::testing::internal::AlwaysTrue()) { - const ::std::string::size_type colon = str.find(delimiter, pos); - if (colon == ::std::string::npos) { - parsed.push_back(str.substr(pos)); - break; - } else { - parsed.push_back(str.substr(pos, colon - pos)); - pos = colon + 1; - } - } - dest->swap(parsed); -} - -# if GTEST_OS_WINDOWS -// Recreates the pipe and event handles from the provided parameters, -// signals the event, and returns a file descriptor wrapped around the pipe -// handle. This function is called in the child process only. -int GetStatusFileDescriptor(unsigned int parent_process_id, - size_t write_handle_as_size_t, - size_t event_handle_as_size_t) { - AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, - FALSE, // Non-inheritable. - parent_process_id)); - if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { - DeathTestAbort("Unable to open parent process " + - StreamableToString(parent_process_id)); - } - - // TODO(vladl@google.com): Replace the following check with a - // compile-time assertion when available. - GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); - - const HANDLE write_handle = - reinterpret_cast(write_handle_as_size_t); - HANDLE dup_write_handle; - - // The newly initialized handle is accessible only in in the parent - // process. To obtain one accessible within the child, we need to use - // DuplicateHandle. - if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, - ::GetCurrentProcess(), &dup_write_handle, - 0x0, // Requested privileges ignored since - // DUPLICATE_SAME_ACCESS is used. - FALSE, // Request non-inheritable handler. - DUPLICATE_SAME_ACCESS)) { - DeathTestAbort("Unable to duplicate the pipe handle " + - StreamableToString(write_handle_as_size_t) + - " from the parent process " + - StreamableToString(parent_process_id)); - } - - const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); - HANDLE dup_event_handle; - - if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, - ::GetCurrentProcess(), &dup_event_handle, - 0x0, - FALSE, - DUPLICATE_SAME_ACCESS)) { - DeathTestAbort("Unable to duplicate the event handle " + - StreamableToString(event_handle_as_size_t) + - " from the parent process " + - StreamableToString(parent_process_id)); - } - - const int write_fd = - ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); - if (write_fd == -1) { - DeathTestAbort("Unable to convert pipe handle " + - StreamableToString(write_handle_as_size_t) + - " to a file descriptor"); - } - - // Signals the parent that the write end of the pipe has been acquired - // so the parent can release its own write end. - ::SetEvent(dup_event_handle); - - return write_fd; -} -# endif // GTEST_OS_WINDOWS - -// Returns a newly created InternalRunDeathTestFlag object with fields -// initialized from the GTEST_FLAG(internal_run_death_test) flag if -// the flag is specified; otherwise returns NULL. -InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { - if (GTEST_FLAG(internal_run_death_test) == "") return NULL; - - // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we - // can use it here. - int line = -1; - int index = -1; - ::std::vector< ::std::string> fields; - SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); - int write_fd = -1; - -# if GTEST_OS_WINDOWS - - unsigned int parent_process_id = 0; - size_t write_handle_as_size_t = 0; - size_t event_handle_as_size_t = 0; - - if (fields.size() != 6 - || !ParseNaturalNumber(fields[1], &line) - || !ParseNaturalNumber(fields[2], &index) - || !ParseNaturalNumber(fields[3], &parent_process_id) - || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) - || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { - DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + - GTEST_FLAG(internal_run_death_test)); - } - write_fd = GetStatusFileDescriptor(parent_process_id, - write_handle_as_size_t, - event_handle_as_size_t); -# else - - if (fields.size() != 4 - || !ParseNaturalNumber(fields[1], &line) - || !ParseNaturalNumber(fields[2], &index) - || !ParseNaturalNumber(fields[3], &write_fd)) { - DeathTestAbort("Bad --gtest_internal_run_death_test flag: " - + GTEST_FLAG(internal_run_death_test)); - } - -# endif // GTEST_OS_WINDOWS - - return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); -} - -} // namespace internal - -#endif // GTEST_HAS_DEATH_TEST - -} // namespace testing -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: keith.ray@gmail.com (Keith Ray) - - -#include - -#if GTEST_OS_WINDOWS_MOBILE -# include -#elif GTEST_OS_WINDOWS -# include -# include -#elif GTEST_OS_SYMBIAN -// Symbian OpenC has PATH_MAX in sys/syslimits.h -# include -#else -# include -# include // Some Linux distributions define PATH_MAX here. -#endif // GTEST_OS_WINDOWS_MOBILE - -#if GTEST_OS_WINDOWS -# define GTEST_PATH_MAX_ _MAX_PATH -#elif defined(PATH_MAX) -# define GTEST_PATH_MAX_ PATH_MAX -#elif defined(_XOPEN_PATH_MAX) -# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX -#else -# define GTEST_PATH_MAX_ _POSIX_PATH_MAX -#endif // GTEST_OS_WINDOWS - - -namespace testing { -namespace internal { - -#if GTEST_OS_WINDOWS -// On Windows, '\\' is the standard path separator, but many tools and the -// Windows API also accept '/' as an alternate path separator. Unless otherwise -// noted, a file path can contain either kind of path separators, or a mixture -// of them. -const char kPathSeparator = '\\'; -const char kAlternatePathSeparator = '/'; -//const char kPathSeparatorString[] = "\\"; -const char kAlternatePathSeparatorString[] = "/"; -# if GTEST_OS_WINDOWS_MOBILE -// Windows CE doesn't have a current directory. You should not use -// the current directory in tests on Windows CE, but this at least -// provides a reasonable fallback. -const char kCurrentDirectoryString[] = "\\"; -// Windows CE doesn't define INVALID_FILE_ATTRIBUTES -const DWORD kInvalidFileAttributes = 0xffffffff; -# else -const char kCurrentDirectoryString[] = ".\\"; -# endif // GTEST_OS_WINDOWS_MOBILE -#else -const char kPathSeparator = '/'; -//const char kPathSeparatorString[] = "/"; -const char kCurrentDirectoryString[] = "./"; -#endif // GTEST_OS_WINDOWS - -// Returns whether the given character is a valid path separator. -static bool IsPathSeparator(char c) { -#if GTEST_HAS_ALT_PATH_SEP_ - return (c == kPathSeparator) || (c == kAlternatePathSeparator); -#else - return c == kPathSeparator; -#endif -} - -// Returns the current working directory, or "" if unsuccessful. -FilePath FilePath::GetCurrentDir() { -#if GTEST_OS_WINDOWS_MOBILE - // Windows CE doesn't have a current directory, so we just return - // something reasonable. - return FilePath(kCurrentDirectoryString); -#elif GTEST_OS_WINDOWS - char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; - return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); -#else - char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; - return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); -#endif // GTEST_OS_WINDOWS_MOBILE -} - -// Returns a copy of the FilePath with the case-insensitive extension removed. -// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns -// FilePath("dir/file"). If a case-insensitive extension is not -// found, returns a copy of the original FilePath. -FilePath FilePath::RemoveExtension(const char* extension) const { - const std::string dot_extension = std::string(".") + extension; - if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { - return FilePath(pathname_.substr( - 0, pathname_.length() - dot_extension.length())); - } - return *this; -} - -// Returns a pointer to the last occurrence of a valid path separator in -// the FilePath. On Windows, for example, both '/' and '\' are valid path -// separators. Returns NULL if no path separator was found. -const char* FilePath::FindLastPathSeparator() const { - const char* const last_sep = strrchr(c_str(), kPathSeparator); -#if GTEST_HAS_ALT_PATH_SEP_ - const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); - // Comparing two pointers of which only one is NULL is undefined. - if (last_alt_sep != NULL && - (last_sep == NULL || last_alt_sep > last_sep)) { - return last_alt_sep; - } -#endif - return last_sep; -} - -// Returns a copy of the FilePath with the directory part removed. -// Example: FilePath("path/to/file").RemoveDirectoryName() returns -// FilePath("file"). If there is no directory part ("just_a_file"), it returns -// the FilePath unmodified. If there is no file part ("just_a_dir/") it -// returns an empty FilePath (""). -// On Windows platform, '\' is the path separator, otherwise it is '/'. -FilePath FilePath::RemoveDirectoryName() const { - const char* const last_sep = FindLastPathSeparator(); - return last_sep ? FilePath(last_sep + 1) : *this; -} - -// RemoveFileName returns the directory path with the filename removed. -// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". -// If the FilePath is "a_file" or "/a_file", RemoveFileName returns -// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does -// not have a file, like "just/a/dir/", it returns the FilePath unmodified. -// On Windows platform, '\' is the path separator, otherwise it is '/'. -FilePath FilePath::RemoveFileName() const { - const char* const last_sep = FindLastPathSeparator(); - std::string dir; - if (last_sep) { - dir = std::string(c_str(), last_sep + 1 - c_str()); - } else { - dir = kCurrentDirectoryString; - } - return FilePath(dir); -} - -// Helper functions for naming files in a directory for xml output. - -// Given directory = "dir", base_name = "test", number = 0, -// extension = "xml", returns "dir/test.xml". If number is greater -// than zero (e.g., 12), returns "dir/test_12.xml". -// On Windows platform, uses \ as the separator rather than /. -FilePath FilePath::MakeFileName(const FilePath& directory, - const FilePath& base_name, - int number, - const char* extension) { - std::string file; - if (number == 0) { - file = base_name.string() + "." + extension; - } else { - file = base_name.string() + "_" + StreamableToString(number) - + "." + extension; - } - return ConcatPaths(directory, FilePath(file)); -} - -// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". -// On Windows, uses \ as the separator rather than /. -FilePath FilePath::ConcatPaths(const FilePath& directory, - const FilePath& relative_path) { - if (directory.IsEmpty()) - return relative_path; - const FilePath dir(directory.RemoveTrailingPathSeparator()); - return FilePath(dir.string() + kPathSeparator + relative_path.string()); -} - -// Returns true if pathname describes something findable in the file-system, -// either a file, directory, or whatever. -bool FilePath::FileOrDirectoryExists() const { -#if GTEST_OS_WINDOWS_MOBILE - LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); - const DWORD attributes = GetFileAttributes(unicode); - delete [] unicode; - return attributes != kInvalidFileAttributes; -#else - posix::StatStruct file_stat; - return posix::Stat(pathname_.c_str(), &file_stat) == 0; -#endif // GTEST_OS_WINDOWS_MOBILE -} - -// Returns true if pathname describes a directory in the file-system -// that exists. -bool FilePath::DirectoryExists() const { - bool result = false; -#if GTEST_OS_WINDOWS - // Don't strip off trailing separator if path is a root directory on - // Windows (like "C:\\"). - const FilePath& path(IsRootDirectory() ? *this : - RemoveTrailingPathSeparator()); -#else - const FilePath& path(*this); -#endif - -#if GTEST_OS_WINDOWS_MOBILE - LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); - const DWORD attributes = GetFileAttributes(unicode); - delete [] unicode; - if ((attributes != kInvalidFileAttributes) && - (attributes & FILE_ATTRIBUTE_DIRECTORY)) { - result = true; - } -#else - posix::StatStruct file_stat; - result = posix::Stat(path.c_str(), &file_stat) == 0 && - posix::IsDir(file_stat); -#endif // GTEST_OS_WINDOWS_MOBILE - - return result; -} - -// Returns true if pathname describes a root directory. (Windows has one -// root directory per disk drive.) -bool FilePath::IsRootDirectory() const { -#if GTEST_OS_WINDOWS - // TODO(wan@google.com): on Windows a network share like - // \\server\share can be a root directory, although it cannot be the - // current directory. Handle this properly. - return pathname_.length() == 3 && IsAbsolutePath(); -#else - return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); -#endif -} - -// Returns true if pathname describes an absolute path. -bool FilePath::IsAbsolutePath() const { - const char* const name = pathname_.c_str(); -#if GTEST_OS_WINDOWS - return pathname_.length() >= 3 && - ((name[0] >= 'a' && name[0] <= 'z') || - (name[0] >= 'A' && name[0] <= 'Z')) && - name[1] == ':' && - IsPathSeparator(name[2]); -#else - return IsPathSeparator(name[0]); -#endif -} - -// Returns a pathname for a file that does not currently exist. The pathname -// will be directory/base_name.extension or -// directory/base_name_.extension if directory/base_name.extension -// already exists. The number will be incremented until a pathname is found -// that does not already exist. -// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. -// There could be a race condition if two or more processes are calling this -// function at the same time -- they could both pick the same filename. -FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, - const FilePath& base_name, - const char* extension) { - FilePath full_pathname; - int number = 0; - do { - full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); - } while (full_pathname.FileOrDirectoryExists()); - return full_pathname; -} - -// Returns true if FilePath ends with a path separator, which indicates that -// it is intended to represent a directory. Returns false otherwise. -// This does NOT check that a directory (or file) actually exists. -bool FilePath::IsDirectory() const { - return !pathname_.empty() && - IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); -} - -// Create directories so that path exists. Returns true if successful or if -// the directories already exist; returns false if unable to create directories -// for any reason. -bool FilePath::CreateDirectoriesRecursively() const { - if (!this->IsDirectory()) { - return false; - } - - if (pathname_.length() == 0 || this->DirectoryExists()) { - return true; - } - - const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); - return parent.CreateDirectoriesRecursively() && this->CreateFolder(); -} - -// Create the directory so that path exists. Returns true if successful or -// if the directory already exists; returns false if unable to create the -// directory for any reason, including if the parent directory does not -// exist. Not named "CreateDirectory" because that's a macro on Windows. -bool FilePath::CreateFolder() const { -#if GTEST_OS_WINDOWS_MOBILE - FilePath removed_sep(this->RemoveTrailingPathSeparator()); - LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); - int result = CreateDirectory(unicode, NULL) ? 0 : -1; - delete [] unicode; -#elif GTEST_OS_WINDOWS - int result = _mkdir(pathname_.c_str()); -#else - int result = mkdir(pathname_.c_str(), 0777); -#endif // GTEST_OS_WINDOWS_MOBILE - - if (result == -1) { - return this->DirectoryExists(); // An error is OK if the directory exists. - } - return true; // No error. -} - -// If input name has a trailing separator character, remove it and return the -// name, otherwise return the name string unmodified. -// On Windows platform, uses \ as the separator, other platforms use /. -FilePath FilePath::RemoveTrailingPathSeparator() const { - return IsDirectory() - ? FilePath(pathname_.substr(0, pathname_.length() - 1)) - : *this; -} - -// Removes any redundant separators that might be in the pathname. -// For example, "bar///foo" becomes "bar/foo". Does not eliminate other -// redundancies that might be in a pathname involving "." or "..". -// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). -void FilePath::Normalize() { - if (pathname_.c_str() == NULL) { - pathname_ = ""; - return; - } - const char* src = pathname_.c_str(); - char* const dest = new char[pathname_.length() + 1]; - char* dest_ptr = dest; - memset(dest_ptr, 0, pathname_.length() + 1); - - while (*src != '\0') { - *dest_ptr = *src; - if (!IsPathSeparator(*src)) { - src++; - } else { -#if GTEST_HAS_ALT_PATH_SEP_ - if (*dest_ptr == kAlternatePathSeparator) { - *dest_ptr = kPathSeparator; - } -#endif - while (IsPathSeparator(*src)) - src++; - } - dest_ptr++; - } - *dest_ptr = '\0'; - pathname_ = dest; - delete[] dest; -} - -} // namespace internal -} // namespace testing -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - - -#include -#include -#include -#include - -#if GTEST_OS_WINDOWS_MOBILE -# include // For TerminateProcess() -#elif GTEST_OS_WINDOWS -# include -# include -#else -# include -#endif // GTEST_OS_WINDOWS_MOBILE - -#if GTEST_OS_MAC -# include -# include -# include -#endif // GTEST_OS_MAC - -#if GTEST_OS_QNX -# include -# include -#endif // GTEST_OS_QNX - - -// Indicates that this translation unit is part of Google Test's -// implementation. It must come before gtest-internal-inl.h is -// included, or there will be a compiler error. This trick is to -// prevent a user from accidentally including gtest-internal-inl.h in -// his code. -#define GTEST_IMPLEMENTATION_ 1 -#undef GTEST_IMPLEMENTATION_ - -namespace testing { -namespace internal { - -#if defined(_MSC_VER) || defined(__BORLANDC__) -// MSVC and C++Builder do not provide a definition of STDERR_FILENO. -const int kStdOutFileno = 1; -const int kStdErrFileno = 2; -#else -const int kStdOutFileno = STDOUT_FILENO; -const int kStdErrFileno = STDERR_FILENO; -#endif // _MSC_VER - -#if GTEST_OS_MAC - -// Returns the number of threads running in the process, or 0 to indicate that -// we cannot detect it. -size_t GetThreadCount() { - const task_t task = mach_task_self(); - mach_msg_type_number_t thread_count; - thread_act_array_t thread_list; - const kern_return_t status = task_threads(task, &thread_list, &thread_count); - if (status == KERN_SUCCESS) { - // task_threads allocates resources in thread_list and we need to free them - // to avoid leaks. - vm_deallocate(task, - reinterpret_cast(thread_list), - sizeof(thread_t) * thread_count); - return static_cast(thread_count); - } else { - return 0; - } -} - -#elif GTEST_OS_QNX - -// Returns the number of threads running in the process, or 0 to indicate that -// we cannot detect it. -size_t GetThreadCount() { - const int fd = open("/proc/self/as", O_RDONLY); - if (fd < 0) { - return 0; - } - procfs_info process_info; - const int status = - devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); - close(fd); - if (status == EOK) { - return static_cast(process_info.num_threads); - } else { - return 0; - } -} - -#else - -size_t GetThreadCount() { - // There's no portable way to detect the number of threads, so we just - // return 0 to indicate that we cannot detect it. - return 0; -} - -#endif // GTEST_OS_MAC - -#if GTEST_USES_POSIX_RE - -// Implements RE. Currently only needed for death tests. - -RE::~RE() { - if (is_valid_) { - // regfree'ing an invalid regex might crash because the content - // of the regex is undefined. Since the regex's are essentially - // the same, one cannot be valid (or invalid) without the other - // being so too. - regfree(&partial_regex_); - regfree(&full_regex_); - } - free(const_cast(pattern_)); -} - -// Returns true iff regular expression re matches the entire str. -bool RE::FullMatch(const char* str, const RE& re) { - if (!re.is_valid_) return false; - - regmatch_t match; - return regexec(&re.full_regex_, str, 1, &match, 0) == 0; -} - -// Returns true iff regular expression re matches a substring of str -// (including str itself). -bool RE::PartialMatch(const char* str, const RE& re) { - if (!re.is_valid_) return false; - - regmatch_t match; - return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; -} - -// Initializes an RE from its string representation. -void RE::Init(const char* regex) { - pattern_ = posix::StrDup(regex); - - // Reserves enough bytes to hold the regular expression used for a - // full match. - const size_t full_regex_len = strlen(regex) + 10; - char* const full_pattern = new char[full_regex_len]; - - snprintf(full_pattern, full_regex_len, "^(%s)$", regex); - is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; - // We want to call regcomp(&partial_regex_, ...) even if the - // previous expression returns false. Otherwise partial_regex_ may - // not be properly initialized can may cause trouble when it's - // freed. - // - // Some implementation of POSIX regex (e.g. on at least some - // versions of Cygwin) doesn't accept the empty string as a valid - // regex. We change it to an equivalent form "()" to be safe. - if (is_valid_) { - const char* const partial_regex = (*regex == '\0') ? "()" : regex; - is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; - } - EXPECT_TRUE(is_valid_) - << "Regular expression \"" << regex - << "\" is not a valid POSIX Extended regular expression."; - - delete[] full_pattern; -} - -#elif GTEST_USES_SIMPLE_RE - -// Returns true iff ch appears anywhere in str (excluding the -// terminating '\0' character). -bool IsInSet(char ch, const char* str) { - return ch != '\0' && strchr(str, ch) != NULL; -} - -// Returns true iff ch belongs to the given classification. Unlike -// similar functions in , these aren't affected by the -// current locale. -bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } -bool IsAsciiPunct(char ch) { - return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); -} -bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } -bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } -bool IsAsciiWordChar(char ch) { - return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || - ('0' <= ch && ch <= '9') || ch == '_'; -} - -// Returns true iff "\\c" is a supported escape sequence. -bool IsValidEscape(char c) { - return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); -} - -// Returns true iff the given atom (specified by escaped and pattern) -// matches ch. The result is undefined if the atom is invalid. -bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { - if (escaped) { // "\\p" where p is pattern_char. - switch (pattern_char) { - case 'd': return IsAsciiDigit(ch); - case 'D': return !IsAsciiDigit(ch); - case 'f': return ch == '\f'; - case 'n': return ch == '\n'; - case 'r': return ch == '\r'; - case 's': return IsAsciiWhiteSpace(ch); - case 'S': return !IsAsciiWhiteSpace(ch); - case 't': return ch == '\t'; - case 'v': return ch == '\v'; - case 'w': return IsAsciiWordChar(ch); - case 'W': return !IsAsciiWordChar(ch); - } - return IsAsciiPunct(pattern_char) && pattern_char == ch; - } - - return (pattern_char == '.' && ch != '\n') || pattern_char == ch; -} - -// Helper function used by ValidateRegex() to format error messages. -std::string FormatRegexSyntaxError(const char* regex, int index) { - return (Message() << "Syntax error at index " << index - << " in simple regular expression \"" << regex << "\": ").GetString(); -} - -// Generates non-fatal failures and returns false if regex is invalid; -// otherwise returns true. -bool ValidateRegex(const char* regex) { - if (regex == NULL) { - // TODO(wan@google.com): fix the source file location in the - // assertion failures to match where the regex is used in user - // code. - ADD_FAILURE() << "NULL is not a valid simple regular expression."; - return false; - } - - bool is_valid = true; - - // True iff ?, *, or + can follow the previous atom. - bool prev_repeatable = false; - for (int i = 0; regex[i]; i++) { - if (regex[i] == '\\') { // An escape sequence - i++; - if (regex[i] == '\0') { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) - << "'\\' cannot appear at the end."; - return false; - } - - if (!IsValidEscape(regex[i])) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) - << "invalid escape sequence \"\\" << regex[i] << "\"."; - is_valid = false; - } - prev_repeatable = true; - } else { // Not an escape sequence. - const char ch = regex[i]; - - if (ch == '^' && i > 0) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'^' can only appear at the beginning."; - is_valid = false; - } else if (ch == '$' && regex[i + 1] != '\0') { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'$' can only appear at the end."; - is_valid = false; - } else if (IsInSet(ch, "()[]{}|")) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'" << ch << "' is unsupported."; - is_valid = false; - } else if (IsRepeat(ch) && !prev_repeatable) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'" << ch << "' can only follow a repeatable token."; - is_valid = false; - } - - prev_repeatable = !IsInSet(ch, "^$?*+"); - } - } - - return is_valid; -} - -// Matches a repeated regex atom followed by a valid simple regular -// expression. The regex atom is defined as c if escaped is false, -// or \c otherwise. repeat is the repetition meta character (?, *, -// or +). The behavior is undefined if str contains too many -// characters to be indexable by size_t, in which case the test will -// probably time out anyway. We are fine with this limitation as -// std::string has it too. -bool MatchRepetitionAndRegexAtHead( - bool escaped, char c, char repeat, const char* regex, - const char* str) { - const size_t min_count = (repeat == '+') ? 1 : 0; - const size_t max_count = (repeat == '?') ? 1 : - static_cast(-1) - 1; - // We cannot call numeric_limits::max() as it conflicts with the - // max() macro on Windows. - - for (size_t i = 0; i <= max_count; ++i) { - // We know that the atom matches each of the first i characters in str. - if (i >= min_count && MatchRegexAtHead(regex, str + i)) { - // We have enough matches at the head, and the tail matches too. - // Since we only care about *whether* the pattern matches str - // (as opposed to *how* it matches), there is no need to find a - // greedy match. - return true; - } - if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) - return false; - } - return false; -} - -// Returns true iff regex matches a prefix of str. regex must be a -// valid simple regular expression and not start with "^", or the -// result is undefined. -bool MatchRegexAtHead(const char* regex, const char* str) { - if (*regex == '\0') // An empty regex matches a prefix of anything. - return true; - - // "$" only matches the end of a string. Note that regex being - // valid guarantees that there's nothing after "$" in it. - if (*regex == '$') - return *str == '\0'; - - // Is the first thing in regex an escape sequence? - const bool escaped = *regex == '\\'; - if (escaped) - ++regex; - if (IsRepeat(regex[1])) { - // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so - // here's an indirect recursion. It terminates as the regex gets - // shorter in each recursion. - return MatchRepetitionAndRegexAtHead( - escaped, regex[0], regex[1], regex + 2, str); - } else { - // regex isn't empty, isn't "$", and doesn't start with a - // repetition. We match the first atom of regex with the first - // character of str and recurse. - return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && - MatchRegexAtHead(regex + 1, str + 1); - } -} - -// Returns true iff regex matches any substring of str. regex must be -// a valid simple regular expression, or the result is undefined. -// -// The algorithm is recursive, but the recursion depth doesn't exceed -// the regex length, so we won't need to worry about running out of -// stack space normally. In rare cases the time complexity can be -// exponential with respect to the regex length + the string length, -// but usually it's must faster (often close to linear). -bool MatchRegexAnywhere(const char* regex, const char* str) { - if (regex == NULL || str == NULL) - return false; - - if (*regex == '^') - return MatchRegexAtHead(regex + 1, str); - - // A successful match can be anywhere in str. - do { - if (MatchRegexAtHead(regex, str)) - return true; - } while (*str++ != '\0'); - return false; -} - -// Implements the RE class. - -RE::~RE() { - free(const_cast(pattern_)); - free(const_cast(full_pattern_)); -} - -// Returns true iff regular expression re matches the entire str. -bool RE::FullMatch(const char* str, const RE& re) { - return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); -} - -// Returns true iff regular expression re matches a substring of str -// (including str itself). -bool RE::PartialMatch(const char* str, const RE& re) { - return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); -} - -// Initializes an RE from its string representation. -void RE::Init(const char* regex) { - pattern_ = full_pattern_ = NULL; - if (regex != NULL) { - pattern_ = posix::StrDup(regex); - } - - is_valid_ = ValidateRegex(regex); - if (!is_valid_) { - // No need to calculate the full pattern when the regex is invalid. - return; - } - - const size_t len = strlen(regex); - // Reserves enough bytes to hold the regular expression used for a - // full match: we need space to prepend a '^', append a '$', and - // terminate the string with '\0'. - char* buffer = static_cast(malloc(len + 3)); - full_pattern_ = buffer; - - if (*regex != '^') - *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. - - // We don't use snprintf or strncpy, as they trigger a warning when - // compiled with VC++ 8.0. - memcpy(buffer, regex, len); - buffer += len; - - if (len == 0 || regex[len - 1] != '$') - *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. - - *buffer = '\0'; -} - -#endif // GTEST_USES_POSIX_RE - -const char kUnknownFile[] = "unknown file"; - -// Formats a source file path and a line number as they would appear -// in an error message from the compiler used to compile this code. -GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { - const std::string file_name(file == NULL ? kUnknownFile : file); - - if (line < 0) { - return file_name + ":"; - } -#ifdef _MSC_VER - return file_name + "(" + StreamableToString(line) + "):"; -#else - return file_name + ":" + StreamableToString(line) + ":"; -#endif // _MSC_VER -} - -// Formats a file location for compiler-independent XML output. -// Although this function is not platform dependent, we put it next to -// FormatFileLocation in order to contrast the two functions. -// Note that FormatCompilerIndependentFileLocation() does NOT append colon -// to the file location it produces, unlike FormatFileLocation(). -GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( - const char* file, int line) { - const std::string file_name(file == NULL ? kUnknownFile : file); - - if (line < 0) - return file_name; - else - return file_name + ":" + StreamableToString(line); -} - - -GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) - : severity_(severity) { - const char* const marker = - severity == GTEST_INFO ? "[ INFO ]" : - severity == GTEST_WARNING ? "[WARNING]" : - severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; - GetStream() << ::std::endl << marker << " " - << FormatFileLocation(file, line).c_str() << ": "; -} - -// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. -GTestLog::~GTestLog() { - GetStream() << ::std::endl; - if (severity_ == GTEST_FATAL) { - fflush(stderr); - posix::Abort(); - } -} -// Disable Microsoft deprecation warnings for POSIX functions called from -// this class (creat, dup, dup2, and close) -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable: 4996) -#endif // _MSC_VER - -#if GTEST_HAS_STREAM_REDIRECTION - -// Object that captures an output stream (stdout/stderr). -class CapturedStream { - public: - // The ctor redirects the stream to a temporary file. - explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { -# if GTEST_OS_WINDOWS - char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT - char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT - - ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); - const UINT success = ::GetTempFileNameA(temp_dir_path, - "gtest_redir", - 0, // Generate unique file name. - temp_file_path); - GTEST_CHECK_(success != 0) - << "Unable to create a temporary file in " << temp_dir_path; - const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); - GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " - << temp_file_path; - filename_ = temp_file_path; -# else - // There's no guarantee that a test has write access to the current - // directory, so we create the temporary file in the /tmp directory - // instead. We use /tmp on most systems, and /sdcard on Android. - // That's because Android doesn't have /tmp. -# if GTEST_OS_LINUX_ANDROID - // Note: Android applications are expected to call the framework's - // Context.getExternalStorageDirectory() method through JNI to get - // the location of the world-writable SD Card directory. However, - // this requires a Context handle, which cannot be retrieved - // globally from native code. Doing so also precludes running the - // code as part of a regular standalone executable, which doesn't - // run in a Dalvik process (e.g. when running it through 'adb shell'). - // - // The location /sdcard is directly accessible from native code - // and is the only location (unofficially) supported by the Android - // team. It's generally a symlink to the real SD Card mount point - // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or - // other OEM-customized locations. Never rely on these, and always - // use /sdcard. - char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; -# else - char name_template[] = "/tmp/captured_stream.XXXXXX"; -# endif // GTEST_OS_LINUX_ANDROID - const int captured_fd = mkstemp(name_template); - filename_ = name_template; -# endif // GTEST_OS_WINDOWS - fflush(NULL); - dup2(captured_fd, fd_); - close(captured_fd); - } - - ~CapturedStream() { - remove(filename_.c_str()); - } - - std::string GetCapturedString() { - if (uncaptured_fd_ != -1) { - // Restores the original stream. - fflush(NULL); - dup2(uncaptured_fd_, fd_); - close(uncaptured_fd_); - uncaptured_fd_ = -1; - } - - FILE* const file = posix::FOpen(filename_.c_str(), "r"); - const std::string content = ReadEntireFile(file); - posix::FClose(file); - return content; - } - - private: - // Reads the entire content of a file as an std::string. - static std::string ReadEntireFile(FILE* file); - - // Returns the size (in bytes) of a file. - static size_t GetFileSize(FILE* file); - - const int fd_; // A stream to capture. - int uncaptured_fd_; - // Name of the temporary file holding the stderr output. - ::std::string filename_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); -}; - -// Returns the size (in bytes) of a file. -size_t CapturedStream::GetFileSize(FILE* file) { - fseek(file, 0, SEEK_END); - return static_cast(ftell(file)); -} - -// Reads the entire content of a file as a string. -std::string CapturedStream::ReadEntireFile(FILE* file) { - const size_t file_size = GetFileSize(file); - char* const buffer = new char[file_size]; - - size_t bytes_last_read = 0; // # of bytes read in the last fread() - size_t bytes_read = 0; // # of bytes read so far - - fseek(file, 0, SEEK_SET); - - // Keeps reading the file until we cannot read further or the - // pre-determined file size is reached. - do { - bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); - bytes_read += bytes_last_read; - } while (bytes_last_read > 0 && bytes_read < file_size); - - const std::string content(buffer, bytes_read); - delete[] buffer; - - return content; -} - -# ifdef _MSC_VER -# pragma warning(pop) -# endif // _MSC_VER - -static CapturedStream* g_captured_stderr = NULL; -static CapturedStream* g_captured_stdout = NULL; - -// Starts capturing an output stream (stdout/stderr). -void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { - if (*stream != NULL) { - GTEST_LOG_(FATAL) << "Only one " << stream_name - << " capturer can exist at a time."; - } - *stream = new CapturedStream(fd); -} - -// Stops capturing the output stream and returns the captured string. -std::string GetCapturedStream(CapturedStream** captured_stream) { - const std::string content = (*captured_stream)->GetCapturedString(); - - delete *captured_stream; - *captured_stream = NULL; - - return content; -} - -// Starts capturing stdout. -void CaptureStdout() { - CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); -} - -// Starts capturing stderr. -void CaptureStderr() { - CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); -} - -// Stops capturing stdout and returns the captured string. -std::string GetCapturedStdout() { - return GetCapturedStream(&g_captured_stdout); -} - -// Stops capturing stderr and returns the captured string. -std::string GetCapturedStderr() { - return GetCapturedStream(&g_captured_stderr); -} - -#endif // GTEST_HAS_STREAM_REDIRECTION - -#if GTEST_HAS_DEATH_TEST - -// A copy of all command line arguments. Set by InitGoogleTest(). -::std::vector g_argvs; - -static const ::std::vector* g_injected_test_argvs = - NULL; // Owned. - -void SetInjectableArgvs(const ::std::vector* argvs) { - if (g_injected_test_argvs != argvs) - delete g_injected_test_argvs; - g_injected_test_argvs = argvs; -} - -const ::std::vector& GetInjectableArgvs() { - if (g_injected_test_argvs != NULL) { - return *g_injected_test_argvs; - } - return g_argvs; -} -#endif // GTEST_HAS_DEATH_TEST - -#if GTEST_OS_WINDOWS_MOBILE -namespace posix { -void Abort() { - DebugBreak(); - TerminateProcess(GetCurrentProcess(), 1); -} -} // namespace posix -#endif // GTEST_OS_WINDOWS_MOBILE - -// Returns the name of the environment variable corresponding to the -// given flag. For example, FlagToEnvVar("foo") will return -// "GTEST_FOO" in the open-source version. -static std::string FlagToEnvVar(const char* flag) { - const std::string full_flag = - (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); - - Message env_var; - for (size_t i = 0; i != full_flag.length(); i++) { - env_var << ToUpper(full_flag.c_str()[i]); - } - - return env_var.GetString(); -} - -// Parses 'str' for a 32-bit signed integer. If successful, writes -// the result to *value and returns true; otherwise leaves *value -// unchanged and returns false. -bool ParseInt32(const Message& src_text, const char* str, Int32* value) { - // Parses the environment variable as a decimal integer. - char* end = NULL; - const long long_value = strtol(str, &end, 10); // NOLINT - - // Has strtol() consumed all characters in the string? - if (*end != '\0') { - // No - an invalid character was encountered. - Message msg; - msg << "WARNING: " << src_text - << " is expected to be a 32-bit integer, but actually" - << " has value \"" << str << "\".\n"; - printf("%s", msg.GetString().c_str()); - fflush(stdout); - return false; - } - - // Is the parsed value in the range of an Int32? - const Int32 result = static_cast(long_value); - if (long_value == LONG_MAX || long_value == LONG_MIN || - // The parsed value overflows as a long. (strtol() returns - // LONG_MAX or LONG_MIN when the input overflows.) - result != long_value - // The parsed value overflows as an Int32. - ) { - Message msg; - msg << "WARNING: " << src_text - << " is expected to be a 32-bit integer, but actually" - << " has value " << str << ", which overflows.\n"; - printf("%s", msg.GetString().c_str()); - fflush(stdout); - return false; - } - - *value = result; - return true; -} - -// Reads and returns the Boolean environment variable corresponding to -// the given flag; if it's not set, returns default_value. -// -// The value is considered true iff it's not "0". -bool BoolFromGTestEnv(const char* flag, bool default_value) { - const std::string env_var = FlagToEnvVar(flag); - const char* const string_value = posix::GetEnv(env_var.c_str()); - return string_value == NULL ? - default_value : strcmp(string_value, "0") != 0; -} - -// Reads and returns a 32-bit integer stored in the environment -// variable corresponding to the given flag; if it isn't set or -// doesn't represent a valid 32-bit integer, returns default_value. -Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { - const std::string env_var = FlagToEnvVar(flag); - const char* const string_value = posix::GetEnv(env_var.c_str()); - if (string_value == NULL) { - // The environment variable is not set. - return default_value; - } - - Int32 result = default_value; - if (!ParseInt32(Message() << "Environment variable " << env_var, - string_value, &result)) { - printf("The default value %s is used.\n", - (Message() << default_value).GetString().c_str()); - fflush(stdout); - return default_value; - } - - return result; -} - -// Reads and returns the string environment variable corresponding to -// the given flag; if it's not set, returns default_value. -const char* StringFromGTestEnv(const char* flag, const char* default_value) { - const std::string env_var = FlagToEnvVar(flag); - const char* const value = posix::GetEnv(env_var.c_str()); - return value == NULL ? default_value : value; -} - -} // namespace internal -} // namespace testing -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Google Test - The Google C++ Testing Framework -// -// This file implements a universal value printer that can print a -// value of any type T: -// -// void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); -// -// It uses the << operator when possible, and prints the bytes in the -// object otherwise. A user can override its behavior for a class -// type Foo by defining either operator<<(::std::ostream&, const Foo&) -// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that -// defines Foo. - -#include -#include -#include // NOLINT -#include - -namespace testing { - -namespace { - -using ::std::ostream; - -// Prints a segment of bytes in the given object. -void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, - size_t count, ostream* os) { - char text[5] = ""; - for (size_t i = 0; i != count; i++) { - const size_t j = start + i; - if (i != 0) { - // Organizes the bytes into groups of 2 for easy parsing by - // human. - if ((j % 2) == 0) - *os << ' '; - else - *os << '-'; - } - GTEST_SNPRINTF_(text, sizeof(text), "%02X", obj_bytes[j]); - *os << text; - } -} - -// Prints the bytes in the given value to the given ostream. -void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, - ostream* os) { - // Tells the user how big the object is. - *os << count << "-byte object <"; - - const size_t kThreshold = 132; - const size_t kChunkSize = 64; - // If the object size is bigger than kThreshold, we'll have to omit - // some details by printing only the first and the last kChunkSize - // bytes. - // TODO(wan): let the user control the threshold using a flag. - if (count < kThreshold) { - PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); - } else { - PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); - *os << " ... "; - // Rounds up to 2-byte boundary. - const size_t resume_pos = (count - kChunkSize + 1)/2*2; - PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); - } - *os << ">"; -} - -} // namespace - -namespace internal2 { - -// Delegates to PrintBytesInObjectToImpl() to print the bytes in the -// given object. The delegation simplifies the implementation, which -// uses the << operator and thus is easier done outside of the -// ::testing::internal namespace, which contains a << operator that -// sometimes conflicts with the one in STL. -void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, - ostream* os) { - PrintBytesInObjectToImpl(obj_bytes, count, os); -} - -} // namespace internal2 - -namespace internal { - -// Depending on the value of a char (or wchar_t), we print it in one -// of three formats: -// - as is if it's a printable ASCII (e.g. 'a', '2', ' '), -// - as a hexidecimal escape sequence (e.g. '\x7F'), or -// - as a special escape sequence (e.g. '\r', '\n'). -enum CharFormat { - kAsIs, - kHexEscape, - kSpecialEscape -}; - -// Returns true if c is a printable ASCII character. We test the -// value of c directly instead of calling isprint(), which is buggy on -// Windows Mobile. -inline bool IsPrintableAscii(wchar_t c) { - return 0x20 <= c && c <= 0x7E; -} - -// Prints a wide or narrow char c as a character literal without the -// quotes, escaping it when necessary; returns how c was formatted. -// The template argument UnsignedChar is the unsigned version of Char, -// which is the type of c. -template -static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { - switch (static_cast(c)) { - case L'\0': - *os << "\\0"; - break; - case L'\'': - *os << "\\'"; - break; - case L'\\': - *os << "\\\\"; - break; - case L'\a': - *os << "\\a"; - break; - case L'\b': - *os << "\\b"; - break; - case L'\f': - *os << "\\f"; - break; - case L'\n': - *os << "\\n"; - break; - case L'\r': - *os << "\\r"; - break; - case L'\t': - *os << "\\t"; - break; - case L'\v': - *os << "\\v"; - break; - default: - if (IsPrintableAscii(c)) { - *os << static_cast(c); - return kAsIs; - } else { - *os << "\\x" + String::FormatHexInt(static_cast(c)); - return kHexEscape; - } - } - return kSpecialEscape; -} - -// Prints a wchar_t c as if it's part of a string literal, escaping it when -// necessary; returns how c was formatted. -static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { - switch (c) { - case L'\'': - *os << "'"; - return kAsIs; - case L'"': - *os << "\\\""; - return kSpecialEscape; - default: - return PrintAsCharLiteralTo(c, os); - } -} - -// Prints a char c as if it's part of a string literal, escaping it when -// necessary; returns how c was formatted. -static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { - return PrintAsStringLiteralTo( - static_cast(static_cast(c)), os); -} - -// Prints a wide or narrow character c and its code. '\0' is printed -// as "'\\0'", other unprintable characters are also properly escaped -// using the standard C++ escape sequence. The template argument -// UnsignedChar is the unsigned version of Char, which is the type of c. -template -void PrintCharAndCodeTo(Char c, ostream* os) { - // First, print c as a literal in the most readable form we can find. - *os << ((sizeof(c) > 1) ? "L'" : "'"); - const CharFormat format = PrintAsCharLiteralTo(c, os); - *os << "'"; - - // To aid user debugging, we also print c's code in decimal, unless - // it's 0 (in which case c was printed as '\\0', making the code - // obvious). - if (c == 0) - return; - *os << " (" << static_cast(c); - - // For more convenience, we print c's code again in hexidecimal, - // unless c was already printed in the form '\x##' or the code is in - // [1, 9]. - if (format == kHexEscape || (1 <= c && c <= 9)) { - // Do nothing. - } else { - *os << ", 0x" << String::FormatHexInt(static_cast(c)); - } - *os << ")"; -} - -void PrintTo(unsigned char c, ::std::ostream* os) { - PrintCharAndCodeTo(c, os); -} -void PrintTo(signed char c, ::std::ostream* os) { - PrintCharAndCodeTo(c, os); -} - -// Prints a wchar_t as a symbol if it is printable or as its internal -// code otherwise and also as its code. L'\0' is printed as "L'\\0'". -void PrintTo(wchar_t wc, ostream* os) { - PrintCharAndCodeTo(wc, os); -} - -// Prints the given array of characters to the ostream. CharType must be either -// char or wchar_t. -// The array starts at begin, the length is len, it may include '\0' characters -// and may not be NUL-terminated. -template -static void PrintCharsAsStringTo( - const CharType* begin, size_t len, ostream* os) { - const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; - *os << kQuoteBegin; - bool is_previous_hex = false; - for (size_t index = 0; index < len; ++index) { - const CharType cur = begin[index]; - if (is_previous_hex && IsXDigit(cur)) { - // Previous character is of '\x..' form and this character can be - // interpreted as another hexadecimal digit in its number. Break string to - // disambiguate. - *os << "\" " << kQuoteBegin; - } - is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; - } - *os << "\""; -} - -// Prints a (const) char/wchar_t array of 'len' elements, starting at address -// 'begin'. CharType must be either char or wchar_t. -template -static void UniversalPrintCharArray( - const CharType* begin, size_t len, ostream* os) { - // The code - // const char kFoo[] = "foo"; - // generates an array of 4, not 3, elements, with the last one being '\0'. - // - // Therefore when printing a char array, we don't print the last element if - // it's '\0', such that the output matches the string literal as it's - // written in the source code. - if (len > 0 && begin[len - 1] == '\0') { - PrintCharsAsStringTo(begin, len - 1, os); - return; - } - - // If, however, the last element in the array is not '\0', e.g. - // const char kFoo[] = { 'f', 'o', 'o' }; - // we must print the entire array. We also print a message to indicate - // that the array is not NUL-terminated. - PrintCharsAsStringTo(begin, len, os); - *os << " (no terminating NUL)"; -} - -// Prints a (const) char array of 'len' elements, starting at address 'begin'. -void UniversalPrintArray(const char* begin, size_t len, ostream* os) { - UniversalPrintCharArray(begin, len, os); -} - -// Prints a (const) wchar_t array of 'len' elements, starting at address -// 'begin'. -void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { - UniversalPrintCharArray(begin, len, os); -} - -// Prints the given C string to the ostream. -void PrintTo(const char* s, ostream* os) { - if (s == NULL) { - *os << "NULL"; - } else { - *os << ImplicitCast_(s) << " pointing to "; - PrintCharsAsStringTo(s, strlen(s), os); - } -} - -// MSVC compiler can be configured to define whar_t as a typedef -// of unsigned short. Defining an overload for const wchar_t* in that case -// would cause pointers to unsigned shorts be printed as wide strings, -// possibly accessing more memory than intended and causing invalid -// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when -// wchar_t is implemented as a native type. -#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) -// Prints the given wide C string to the ostream. -void PrintTo(const wchar_t* s, ostream* os) { - if (s == NULL) { - *os << "NULL"; - } else { - *os << ImplicitCast_(s) << " pointing to "; - PrintCharsAsStringTo(s, wcslen(s), os); - } -} -#endif // wchar_t is native - -// Prints a ::string object. -#if GTEST_HAS_GLOBAL_STRING -void PrintStringTo(const ::string& s, ostream* os) { - PrintCharsAsStringTo(s.data(), s.size(), os); -} -#endif // GTEST_HAS_GLOBAL_STRING - -void PrintStringTo(const ::std::string& s, ostream* os) { - PrintCharsAsStringTo(s.data(), s.size(), os); -} - -// Prints a ::wstring object. -#if GTEST_HAS_GLOBAL_WSTRING -void PrintWideStringTo(const ::wstring& s, ostream* os) { - PrintCharsAsStringTo(s.data(), s.size(), os); -} -#endif // GTEST_HAS_GLOBAL_WSTRING - -#if GTEST_HAS_STD_WSTRING -void PrintWideStringTo(const ::std::wstring& s, ostream* os) { - PrintCharsAsStringTo(s.data(), s.size(), os); -} -#endif // GTEST_HAS_STD_WSTRING - -} // namespace internal - -} // namespace testing -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: mheule@google.com (Markus Heule) -// -// The Google C++ Testing Framework (Google Test) - - -// Indicates that this translation unit is part of Google Test's -// implementation. It must come before gtest-internal-inl.h is -// included, or there will be a compiler error. This trick is to -// prevent a user from accidentally including gtest-internal-inl.h in -// his code. -#define GTEST_IMPLEMENTATION_ 1 -#undef GTEST_IMPLEMENTATION_ - -namespace testing { - -using internal::GetUnitTestImpl; - -// Gets the summary of the failure message by omitting the stack trace -// in it. -std::string TestPartResult::ExtractSummary(const char* message) { - const char* const stack_trace = strstr(message, internal::kStackTraceMarker); - return stack_trace == NULL ? message : - std::string(message, stack_trace); -} - -// Prints a TestPartResult object. -std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { - return os - << result.file_name() << ":" << result.line_number() << ": " - << (result.type() == TestPartResult::kSuccess ? "Success" : - result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : - "Non-fatal failure") << ":\n" - << result.message() << std::endl; -} - -// Appends a TestPartResult to the array. -void TestPartResultArray::Append(const TestPartResult& result) { - array_.push_back(result); -} - -// Returns the TestPartResult at the given index (0-based). -const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { - if (index < 0 || index >= size()) { - printf("\nInvalid index (%d) into TestPartResultArray.\n", index); - internal::posix::Abort(); - } - - return array_[index]; -} - -// Returns the number of TestPartResult objects in the array. -int TestPartResultArray::size() const { - return static_cast(array_.size()); -} - -namespace internal { - -HasNewFatalFailureHelper::HasNewFatalFailureHelper() - : has_new_fatal_failure_(false), - original_reporter_(GetUnitTestImpl()-> - GetTestPartResultReporterForCurrentThread()) { - GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); -} - -HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { - GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( - original_reporter_); -} - -void HasNewFatalFailureHelper::ReportTestPartResult( - const TestPartResult& result) { - if (result.fatally_failed()) - has_new_fatal_failure_ = true; - original_reporter_->ReportTestPartResult(result); -} - -} // namespace internal - -} // namespace testing -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - - -namespace testing { -namespace internal { - -#if GTEST_HAS_TYPED_TEST_P - -// Skips to the first non-space char in str. Returns an empty string if str -// contains only whitespace characters. -static const char* SkipSpaces(const char* str) { - while (IsSpace(*str)) - str++; - return str; -} - -// Verifies that registered_tests match the test names in -// defined_test_names_; returns registered_tests if successful, or -// aborts the program otherwise. -const char* TypedTestCasePState::VerifyRegisteredTestNames( - const char* file, int line, const char* registered_tests) { - typedef ::std::set::const_iterator DefinedTestIter; - registered_ = true; - - // Skip initial whitespace in registered_tests since some - // preprocessors prefix stringizied literals with whitespace. - registered_tests = SkipSpaces(registered_tests); - - Message errors; - ::std::set tests; - for (const char* names = registered_tests; names != NULL; - names = SkipComma(names)) { - const std::string name = GetPrefixUntilComma(names); - if (tests.count(name) != 0) { - errors << "Test " << name << " is listed more than once.\n"; - continue; - } - - bool found = false; - for (DefinedTestIter it = defined_test_names_.begin(); - it != defined_test_names_.end(); - ++it) { - if (name == *it) { - found = true; - break; - } - } - - if (found) { - tests.insert(name); - } else { - errors << "No test named " << name - << " can be found in this test case.\n"; - } - } - - for (DefinedTestIter it = defined_test_names_.begin(); - it != defined_test_names_.end(); - ++it) { - if (tests.count(*it) == 0) { - errors << "You forgot to list test " << *it << ".\n"; - } - } - - const std::string& errors_str = errors.GetString(); - if (errors_str != "") { - fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), - errors_str.c_str()); - fflush(stderr); - posix::Abort(); - } - - return registered_tests; -} - -#endif // GTEST_HAS_TYPED_TEST_P - -} // namespace internal -} // namespace testing diff --git a/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h b/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h deleted file mode 120000 index 48d39090f1..0000000000 --- a/lib/kokkos/tpls/gtest/gtest/gtest-test-part.h +++ /dev/null @@ -1 +0,0 @@ -gtest.h \ No newline at end of file diff --git a/lib/kokkos/tpls/gtest/gtest/gtest.h b/lib/kokkos/tpls/gtest/gtest/gtest.h deleted file mode 100644 index 8f98f330ed..0000000000 --- a/lib/kokkos/tpls/gtest/gtest/gtest.h +++ /dev/null @@ -1,20065 +0,0 @@ -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file defines the public API for Google Test. It should be -// included by any test program that uses Google Test. -// -// IMPORTANT NOTE: Due to limitation of the C++ language, we have to -// leave some internal implementation details in this header file. -// They are clearly marked by comments like this: -// -// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -// -// Such code is NOT meant to be used by a user directly, and is subject -// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user -// program! -// -// Acknowledgment: Google Test borrowed the idea of automatic test -// registration from Barthelemy Dagenais' (barthelemy@prologique.com) -// easyUnit framework. - -#ifdef __GNUC__ -#pragma GCC system_header -#endif - -#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_H_ - -#include -#include -#include - -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file declares functions and macros used internally by -// Google Test. They are subject to change without notice. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ - -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: wan@google.com (Zhanyong Wan) -// -// Low-level types and utilities for porting Google Test to various -// platforms. They are subject to change without notice. DO NOT USE -// THEM IN USER CODE. -// -// This file is fundamental to Google Test. All other Google Test source -// files are expected to #include this. Therefore, it cannot #include -// any other Google Test header. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ - -// The user can define the following macros in the build script to -// control Google Test's behavior. If the user doesn't define a macro -// in this list, Google Test will define it. -// -// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) -// is/isn't available. -// GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions -// are enabled. -// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string -// is/isn't available (some systems define -// ::string, which is different to std::string). -// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string -// is/isn't available (some systems define -// ::wstring, which is different to std::wstring). -// GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular -// expressions are/aren't available. -// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that -// is/isn't available. -// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't -// enabled. -// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that -// std::wstring does/doesn't work (Google Test can -// be used where std::wstring is unavailable). -// GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple -// is/isn't available. -// GTEST_HAS_SEH - Define it to 1/0 to indicate whether the -// compiler supports Microsoft's "Structured -// Exception Handling". -// GTEST_HAS_STREAM_REDIRECTION -// - Define it to 1/0 to indicate whether the -// platform supports I/O stream redirection using -// dup() and dup2(). -// GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google -// Test's own tr1 tuple implementation should be -// used. Unused when the user sets -// GTEST_HAS_TR1_TUPLE to 0. -// GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test -// is building in C++11/C++98 mode. -// GTEST_LINKED_AS_SHARED_LIBRARY -// - Define to 1 when compiling tests that use -// Google Test as a shared library (known as -// DLL on Windows). -// GTEST_CREATE_SHARED_LIBRARY -// - Define to 1 when compiling Google Test itself -// as a shared library. - -// This header defines the following utilities: -// -// Macros indicating the current platform (defined to 1 if compiled on -// the given platform; otherwise undefined): -// GTEST_OS_AIX - IBM AIX -// GTEST_OS_CYGWIN - Cygwin -// GTEST_OS_HPUX - HP-UX -// GTEST_OS_LINUX - Linux -// GTEST_OS_LINUX_ANDROID - Google Android -// GTEST_OS_MAC - Mac OS X -// GTEST_OS_IOS - iOS -// GTEST_OS_IOS_SIMULATOR - iOS simulator -// GTEST_OS_NACL - Google Native Client (NaCl) -// GTEST_OS_OPENBSD - OpenBSD -// GTEST_OS_QNX - QNX -// GTEST_OS_SOLARIS - Sun Solaris -// GTEST_OS_SYMBIAN - Symbian -// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) -// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop -// GTEST_OS_WINDOWS_MINGW - MinGW -// GTEST_OS_WINDOWS_MOBILE - Windows Mobile -// GTEST_OS_ZOS - z/OS -// -// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the -// most stable support. Since core members of the Google Test project -// don't have access to other platforms, support for them may be less -// stable. If you notice any problems on your platform, please notify -// googletestframework@googlegroups.com (patches for fixing them are -// even more welcome!). -// -// Note that it is possible that none of the GTEST_OS_* macros are defined. -// -// Macros indicating available Google Test features (defined to 1 if -// the corresponding feature is supported; otherwise undefined): -// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized -// tests) -// GTEST_HAS_DEATH_TEST - death tests -// GTEST_HAS_PARAM_TEST - value-parameterized tests -// GTEST_HAS_TYPED_TEST - typed tests -// GTEST_HAS_TYPED_TEST_P - type-parameterized tests -// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with -// GTEST_HAS_POSIX_RE (see above) which users can -// define themselves. -// GTEST_USES_SIMPLE_RE - our own simple regex is used; -// the above two are mutually exclusive. -// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). -// -// Macros for basic C++ coding: -// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. -// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a -// variable don't have to be used. -// GTEST_DISALLOW_ASSIGN_ - disables operator=. -// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. -// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. -// -// Synchronization: -// Mutex, MutexLock, ThreadLocal, GetThreadCount() -// - synchronization primitives. -// GTEST_IS_THREADSAFE - defined to 1 to indicate that the above -// synchronization primitives have real implementations -// and Google Test is thread-safe; or 0 otherwise. -// -// Template meta programming: -// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. -// IteratorTraits - partial implementation of std::iterator_traits, which -// is not available in libCstd when compiled with Sun C++. -// -// Smart pointers: -// scoped_ptr - as in TR2. -// -// Regular expressions: -// RE - a simple regular expression class using the POSIX -// Extended Regular Expression syntax on UNIX-like -// platforms, or a reduced regular exception syntax on -// other platforms, including Windows. -// -// Logging: -// GTEST_LOG_() - logs messages at the specified severity level. -// LogToStderr() - directs all log messages to stderr. -// FlushInfoLog() - flushes informational log messages. -// -// Stdout and stderr capturing: -// CaptureStdout() - starts capturing stdout. -// GetCapturedStdout() - stops capturing stdout and returns the captured -// string. -// CaptureStderr() - starts capturing stderr. -// GetCapturedStderr() - stops capturing stderr and returns the captured -// string. -// -// Integer types: -// TypeWithSize - maps an integer to a int type. -// Int32, UInt32, Int64, UInt64, TimeInMillis -// - integers of known sizes. -// BiggestInt - the biggest signed integer type. -// -// Command-line utilities: -// GTEST_FLAG() - references a flag. -// GTEST_DECLARE_*() - declares a flag. -// GTEST_DEFINE_*() - defines a flag. -// GetInjectableArgvs() - returns the command line as a vector of strings. -// -// Environment variable utilities: -// GetEnv() - gets the value of an environment variable. -// BoolFromGTestEnv() - parses a bool environment variable. -// Int32FromGTestEnv() - parses an Int32 environment variable. -// StringFromGTestEnv() - parses a string environment variable. - -#include // for isspace, etc -#include // for ptrdiff_t -#include -#include -#include -#ifndef _WIN32_WCE -# include -# include -#endif // !_WIN32_WCE - -#if defined __APPLE__ -# include -# include -#endif - -#include // NOLINT -#include // NOLINT -#include // NOLINT - -#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" -#define GTEST_FLAG_PREFIX_ "gtest_" -#define GTEST_FLAG_PREFIX_DASH_ "gtest-" -#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" -#define GTEST_NAME_ "Google Test" -#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" - -// Determines the version of gcc that is used to compile this. -#ifdef __GNUC__ -// 40302 means version 4.3.2. -# define GTEST_GCC_VER_ \ - (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) -#endif // __GNUC__ - -// Determines the platform on which Google Test is compiled. -#ifdef __CYGWIN__ -# define GTEST_OS_CYGWIN 1 -#elif defined __SYMBIAN32__ -# define GTEST_OS_SYMBIAN 1 -#elif defined _WIN32 -# define GTEST_OS_WINDOWS 1 -# ifdef _WIN32_WCE -# define GTEST_OS_WINDOWS_MOBILE 1 -# elif defined(__MINGW__) || defined(__MINGW32__) -# define GTEST_OS_WINDOWS_MINGW 1 -# else -# define GTEST_OS_WINDOWS_DESKTOP 1 -# endif // _WIN32_WCE -#elif defined __APPLE__ -# define GTEST_OS_MAC 1 -# if TARGET_OS_IPHONE -# define GTEST_OS_IOS 1 -# if TARGET_IPHONE_SIMULATOR -# define GTEST_OS_IOS_SIMULATOR 1 -# endif -# endif -#elif defined __linux__ -# define GTEST_OS_LINUX 1 -# if defined __ANDROID__ -# define GTEST_OS_LINUX_ANDROID 1 -# endif -#elif defined __MVS__ -# define GTEST_OS_ZOS 1 -#elif defined(__sun) && defined(__SVR4) -# define GTEST_OS_SOLARIS 1 -#elif defined(_AIX) -# define GTEST_OS_AIX 1 -#elif defined(__hpux) -# define GTEST_OS_HPUX 1 -#elif defined __native_client__ -# define GTEST_OS_NACL 1 -#elif defined __OpenBSD__ -# define GTEST_OS_OPENBSD 1 -#elif defined __QNX__ -# define GTEST_OS_QNX 1 -#endif // __CYGWIN__ - -#ifndef GTEST_LANG_CXX11 -// gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when -// -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a -// value for __cplusplus, and recent versions of clang, gcc, and -// probably other compilers set that too in C++11 mode. -# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L -// Compiling in at least C++11 mode. -# define GTEST_LANG_CXX11 1 -# else -# define GTEST_LANG_CXX11 0 -# endif -#endif - -// Brings in definitions for functions used in the testing::internal::posix -// namespace (read, write, close, chdir, isatty, stat). We do not currently -// use them on Windows Mobile. -#if !GTEST_OS_WINDOWS -// This assumes that non-Windows OSes provide unistd.h. For OSes where this -// is not the case, we need to include headers that provide the functions -// mentioned above. -# include -# include -#elif !GTEST_OS_WINDOWS_MOBILE -# include -# include -#endif - -#if GTEST_OS_LINUX_ANDROID -// Used to define __ANDROID_API__ matching the target NDK API level. -# include // NOLINT -#endif - -// Defines this to true iff Google Test can use POSIX regular expressions. -#ifndef GTEST_HAS_POSIX_RE -# if GTEST_OS_LINUX_ANDROID -// On Android, is only available starting with Gingerbread. -# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) -# else -# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) -# endif -#endif - -#if GTEST_HAS_POSIX_RE - -// On some platforms, needs someone to define size_t, and -// won't compile otherwise. We can #include it here as we already -// included , which is guaranteed to define size_t through -// . -# include // NOLINT - -# define GTEST_USES_POSIX_RE 1 - -#elif GTEST_OS_WINDOWS - -// is not available on Windows. Use our own simple regex -// implementation instead. -# define GTEST_USES_SIMPLE_RE 1 - -#else - -// may not be available on this platform. Use our own -// simple regex implementation instead. -# define GTEST_USES_SIMPLE_RE 1 - -#endif // GTEST_HAS_POSIX_RE - -#ifndef GTEST_HAS_EXCEPTIONS -// The user didn't tell us whether exceptions are enabled, so we need -// to figure it out. -# if defined(_MSC_VER) || defined(__BORLANDC__) -// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS -// macro to enable exceptions, so we'll do the same. -// Assumes that exceptions are enabled by default. -# ifndef _HAS_EXCEPTIONS -# define _HAS_EXCEPTIONS 1 -# endif // _HAS_EXCEPTIONS -# define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS -# elif defined(__GNUC__) && __EXCEPTIONS -// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__SUNPRO_CC) -// Sun Pro CC supports exceptions. However, there is no compile-time way of -// detecting whether they are enabled or not. Therefore, we assume that -// they are enabled unless the user tells us otherwise. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__IBMCPP__) && __EXCEPTIONS -// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__HP_aCC) -// Exception handling is in effect by default in HP aCC compiler. It has to -// be turned of by +noeh compiler option if desired. -# define GTEST_HAS_EXCEPTIONS 1 -# else -// For other compilers, we assume exceptions are disabled to be -// conservative. -# define GTEST_HAS_EXCEPTIONS 0 -# endif // defined(_MSC_VER) || defined(__BORLANDC__) -#endif // GTEST_HAS_EXCEPTIONS - -#if !defined(GTEST_HAS_STD_STRING) -// Even though we don't use this macro any longer, we keep it in case -// some clients still depend on it. -# define GTEST_HAS_STD_STRING 1 -#elif !GTEST_HAS_STD_STRING -// The user told us that ::std::string isn't available. -# error "Google Test cannot be used where ::std::string isn't available." -#endif // !defined(GTEST_HAS_STD_STRING) - -#ifndef GTEST_HAS_GLOBAL_STRING -// The user didn't tell us whether ::string is available, so we need -// to figure it out. - -# define GTEST_HAS_GLOBAL_STRING 0 - -#endif // GTEST_HAS_GLOBAL_STRING - -#ifndef GTEST_HAS_STD_WSTRING -// The user didn't tell us whether ::std::wstring is available, so we need -// to figure it out. -// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring -// is available. - -// Cygwin 1.7 and below doesn't support ::std::wstring. -// Solaris' libc++ doesn't support it either. Android has -// no support for it at least as recent as Froyo (2.2). -# define GTEST_HAS_STD_WSTRING \ - (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) - -#endif // GTEST_HAS_STD_WSTRING - -#ifndef GTEST_HAS_GLOBAL_WSTRING -// The user didn't tell us whether ::wstring is available, so we need -// to figure it out. -# define GTEST_HAS_GLOBAL_WSTRING \ - (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) -#endif // GTEST_HAS_GLOBAL_WSTRING - -// Determines whether RTTI is available. -#ifndef GTEST_HAS_RTTI -// The user didn't tell us whether RTTI is enabled, so we need to -// figure it out. - -# ifdef _MSC_VER - -# ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. -# define GTEST_HAS_RTTI 1 -# else -# define GTEST_HAS_RTTI 0 -# endif - -// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. -# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) - -# ifdef __GXX_RTTI -// When building against STLport with the Android NDK and with -// -frtti -fno-exceptions, the build fails at link time with undefined -// references to __cxa_bad_typeid. Note sure if STL or toolchain bug, -// so disable RTTI when detected. -# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ - !defined(__EXCEPTIONS) -# define GTEST_HAS_RTTI 0 -# else -# define GTEST_HAS_RTTI 1 -# endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS -# else -# define GTEST_HAS_RTTI 0 -# endif // __GXX_RTTI - -// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends -// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the -// first version with C++ support. -# elif defined(__clang__) - -# define GTEST_HAS_RTTI __has_feature(cxx_rtti) - -// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if -// both the typeid and dynamic_cast features are present. -# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) - -# ifdef __RTTI_ALL__ -# define GTEST_HAS_RTTI 1 -# else -# define GTEST_HAS_RTTI 0 -# endif - -# else - -// For all other compilers, we assume RTTI is enabled. -# define GTEST_HAS_RTTI 1 - -# endif // _MSC_VER - -#endif // GTEST_HAS_RTTI - -// It's this header's responsibility to #include when RTTI -// is enabled. -#if GTEST_HAS_RTTI -# include -#endif - -// Determines whether Google Test can use the pthreads library. -#ifndef GTEST_HAS_PTHREAD -// The user didn't tell us explicitly, so we assume pthreads support is -// available on Linux and Mac. -// -// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 -// to your compiler flags. -# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ - || GTEST_OS_QNX) -#endif // GTEST_HAS_PTHREAD - -#if GTEST_HAS_PTHREAD -// gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is -// true. -# include // NOLINT - -// For timespec and nanosleep, used below. -# include // NOLINT -#endif - -// Determines whether Google Test can use tr1/tuple. You can define -// this macro to 0 to prevent Google Test from using tuple (any -// feature depending on tuple with be disabled in this mode). -#ifndef GTEST_HAS_TR1_TUPLE -# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) -// STLport, provided with the Android NDK, has neither or . -# define GTEST_HAS_TR1_TUPLE 0 -# else -// The user didn't tell us not to do it, so we assume it's OK. -# define GTEST_HAS_TR1_TUPLE 1 -# endif -#endif // GTEST_HAS_TR1_TUPLE - -// Determines whether Google Test's own tr1 tuple implementation -// should be used. -#ifndef GTEST_USE_OWN_TR1_TUPLE -// The user didn't tell us, so we need to figure it out. - -// We use our own TR1 tuple if we aren't sure the user has an -// implementation of it already. At this time, libstdc++ 4.0.0+ and -// MSVC 2010 are the only mainstream standard libraries that come -// with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler -// pretends to be GCC by defining __GNUC__ and friends, but cannot -// compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1 -// tuple in a 323 MB Feature Pack download, which we cannot assume the -// user has. QNX's QCC compiler is a modified GCC but it doesn't -// support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, -// and it can be used with some compilers that define __GNUC__. -# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ - && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 -# define GTEST_ENV_HAS_TR1_TUPLE_ 1 -# endif - -// C++11 specifies that provides std::tuple. Use that if gtest is used -// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6 -// can build with clang but need to use gcc4.2's libstdc++). -# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) -# define GTEST_ENV_HAS_STD_TUPLE_ 1 -# endif - -# if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ -# define GTEST_USE_OWN_TR1_TUPLE 0 -# else -# define GTEST_USE_OWN_TR1_TUPLE 1 -# endif - -#endif // GTEST_USE_OWN_TR1_TUPLE - -// To avoid conditional compilation everywhere, we make it -// gtest-port.h's responsibility to #include the header implementing -// tr1/tuple. -#if GTEST_HAS_TR1_TUPLE - -# if GTEST_USE_OWN_TR1_TUPLE -// This file was GENERATED by command: -// pump.py gtest-tuple.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2009 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Implements a subset of TR1 tuple needed by Google Test and Google Mock. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ - -#include // For ::std::pair. - -// The compiler used in Symbian has a bug that prevents us from declaring the -// tuple template as a friend (it complains that tuple is redefined). This -// hack bypasses the bug by declaring the members that should otherwise be -// private as public. -// Sun Studio versions < 12 also have the above bug. -#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: -#else -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ - template friend class tuple; \ - private: -#endif - -// GTEST_n_TUPLE_(T) is the type of an n-tuple. -#define GTEST_0_TUPLE_(T) tuple<> -#define GTEST_1_TUPLE_(T) tuple -#define GTEST_2_TUPLE_(T) tuple -#define GTEST_3_TUPLE_(T) tuple -#define GTEST_4_TUPLE_(T) tuple -#define GTEST_5_TUPLE_(T) tuple -#define GTEST_6_TUPLE_(T) tuple -#define GTEST_7_TUPLE_(T) tuple -#define GTEST_8_TUPLE_(T) tuple -#define GTEST_9_TUPLE_(T) tuple -#define GTEST_10_TUPLE_(T) tuple - -// GTEST_n_TYPENAMES_(T) declares a list of n typenames. -#define GTEST_0_TYPENAMES_(T) -#define GTEST_1_TYPENAMES_(T) typename T##0 -#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 -#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 -#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3 -#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4 -#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5 -#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6 -#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 -#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, \ - typename T##7, typename T##8 -#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, \ - typename T##7, typename T##8, typename T##9 - -// In theory, defining stuff in the ::std namespace is undefined -// behavior. We can do this as we are playing the role of a standard -// library vendor. -namespace std { -namespace tr1 { - -template -class tuple; - -// Anything in namespace gtest_internal is Google Test's INTERNAL -// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. -namespace gtest_internal { - -// ByRef::type is T if T is a reference; otherwise it's const T&. -template -struct ByRef { typedef const T& type; }; // NOLINT -template -struct ByRef { typedef T& type; }; // NOLINT - -// A handy wrapper for ByRef. -#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type - -// AddRef::type is T if T is a reference; otherwise it's T&. This -// is the same as tr1::add_reference::type. -template -struct AddRef { typedef T& type; }; // NOLINT -template -struct AddRef { typedef T& type; }; // NOLINT - -// A handy wrapper for AddRef. -#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type - -// A helper for implementing get(). -template class Get; - -// A helper for implementing tuple_element. kIndexValid is true -// iff k < the number of fields in tuple type T. -template -struct TupleElement; - -template -struct TupleElement { - typedef T0 type; -}; - -template -struct TupleElement { - typedef T1 type; -}; - -template -struct TupleElement { - typedef T2 type; -}; - -template -struct TupleElement { - typedef T3 type; -}; - -template -struct TupleElement { - typedef T4 type; -}; - -template -struct TupleElement { - typedef T5 type; -}; - -template -struct TupleElement { - typedef T6 type; -}; - -template -struct TupleElement { - typedef T7 type; -}; - -template -struct TupleElement { - typedef T8 type; -}; - -template -struct TupleElement { - typedef T9 type; -}; - -} // namespace gtest_internal - -template <> -class tuple<> { - public: - tuple() {} - tuple(const tuple& /* t */) {} - tuple& operator=(const tuple& /* t */) { return *this; } -}; - -template -class GTEST_1_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} - - tuple(const tuple& t) : f0_(t.f0_) {} - - template - tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_1_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { - f0_ = t.f0_; - return *this; - } - - T0 f0_; -}; - -template -class GTEST_2_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), - f1_(f1) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} - - template - tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} - template - tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_2_TUPLE_(U)& t) { - return CopyFrom(t); - } - template - tuple& operator=(const ::std::pair& p) { - f0_ = p.first; - f1_ = p.second; - return *this; - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - return *this; - } - - T0 f0_; - T1 f1_; -}; - -template -class GTEST_3_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} - - template - tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_3_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; -}; - -template -class GTEST_4_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} - - template - tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_4_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; -}; - -template -class GTEST_5_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, - GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_) {} - - template - tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_5_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; -}; - -template -class GTEST_6_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_) {} - - template - tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_6_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; -}; - -template -class GTEST_7_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} - - template - tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_7_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; -}; - -template -class GTEST_8_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, - GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5), f6_(f6), f7_(f7) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} - - template - tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_8_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; -}; - -template -class GTEST_9_TUPLE_(T) { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, - GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} - - template - tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_9_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - f8_ = t.f8_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; - T8 f8_; -}; - -template -class tuple { - public: - template friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), - f9_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, - GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} - - template - tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), - f9_(t.f9_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template - tuple& operator=(const GTEST_10_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template - tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - f8_ = t.f8_; - f9_ = t.f9_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; - T8 f8_; - T9 f9_; -}; - -// 6.1.3.2 Tuple creation functions. - -// Known limitations: we don't support passing an -// std::tr1::reference_wrapper to make_tuple(). And we don't -// implement tie(). - -inline tuple<> make_tuple() { return tuple<>(); } - -template -inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { - return GTEST_1_TUPLE_(T)(f0); -} - -template -inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { - return GTEST_2_TUPLE_(T)(f0, f1); -} - -template -inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { - return GTEST_3_TUPLE_(T)(f0, f1, f2); -} - -template -inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3) { - return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); -} - -template -inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4) { - return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); -} - -template -inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5) { - return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); -} - -template -inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6) { - return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); -} - -template -inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { - return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); -} - -template -inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, - const T8& f8) { - return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); -} - -template -inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, - const T8& f8, const T9& f9) { - return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); -} - -// 6.1.3.3 Tuple helper classes. - -template struct tuple_size; - -template -struct tuple_size { - static const int value = 0; -}; - -template -struct tuple_size { - static const int value = 1; -}; - -template -struct tuple_size { - static const int value = 2; -}; - -template -struct tuple_size { - static const int value = 3; -}; - -template -struct tuple_size { - static const int value = 4; -}; - -template -struct tuple_size { - static const int value = 5; -}; - -template -struct tuple_size { - static const int value = 6; -}; - -template -struct tuple_size { - static const int value = 7; -}; - -template -struct tuple_size { - static const int value = 8; -}; - -template -struct tuple_size { - static const int value = 9; -}; - -template -struct tuple_size { - static const int value = 10; -}; - -template -struct tuple_element { - typedef typename gtest_internal::TupleElement< - k < (tuple_size::value), k, Tuple>::type type; -}; - -#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type - -// 6.1.3.4 Element access. - -namespace gtest_internal { - -template <> -class Get<0> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) - Field(Tuple& t) { return t.f0_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) - ConstField(const Tuple& t) { return t.f0_; } -}; - -template <> -class Get<1> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) - Field(Tuple& t) { return t.f1_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) - ConstField(const Tuple& t) { return t.f1_; } -}; - -template <> -class Get<2> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) - Field(Tuple& t) { return t.f2_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) - ConstField(const Tuple& t) { return t.f2_; } -}; - -template <> -class Get<3> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) - Field(Tuple& t) { return t.f3_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) - ConstField(const Tuple& t) { return t.f3_; } -}; - -template <> -class Get<4> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) - Field(Tuple& t) { return t.f4_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) - ConstField(const Tuple& t) { return t.f4_; } -}; - -template <> -class Get<5> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) - Field(Tuple& t) { return t.f5_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) - ConstField(const Tuple& t) { return t.f5_; } -}; - -template <> -class Get<6> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) - Field(Tuple& t) { return t.f6_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) - ConstField(const Tuple& t) { return t.f6_; } -}; - -template <> -class Get<7> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) - Field(Tuple& t) { return t.f7_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) - ConstField(const Tuple& t) { return t.f7_; } -}; - -template <> -class Get<8> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) - Field(Tuple& t) { return t.f8_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) - ConstField(const Tuple& t) { return t.f8_; } -}; - -template <> -class Get<9> { - public: - template - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) - Field(Tuple& t) { return t.f9_; } // NOLINT - - template - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) - ConstField(const Tuple& t) { return t.f9_; } -}; - -} // namespace gtest_internal - -template -GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) -get(GTEST_10_TUPLE_(T)& t) { - return gtest_internal::Get::Field(t); -} - -template -GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) -get(const GTEST_10_TUPLE_(T)& t) { - return gtest_internal::Get::ConstField(t); -} - -// 6.1.3.5 Relational operators - -// We only implement == and !=, as we don't have a need for the rest yet. - -namespace gtest_internal { - -// SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the -// first k fields of t1 equals the first k fields of t2. -// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if -// k1 != k2. -template -struct SameSizeTuplePrefixComparator; - -template <> -struct SameSizeTuplePrefixComparator<0, 0> { - template - static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { - return true; - } -}; - -template -struct SameSizeTuplePrefixComparator { - template - static bool Eq(const Tuple1& t1, const Tuple2& t2) { - return SameSizeTuplePrefixComparator::Eq(t1, t2) && - ::std::tr1::get(t1) == ::std::tr1::get(t2); - } -}; - -} // namespace gtest_internal - -template -inline bool operator==(const GTEST_10_TUPLE_(T)& t, - const GTEST_10_TUPLE_(U)& u) { - return gtest_internal::SameSizeTuplePrefixComparator< - tuple_size::value, - tuple_size::value>::Eq(t, u); -} - -template -inline bool operator!=(const GTEST_10_TUPLE_(T)& t, - const GTEST_10_TUPLE_(U)& u) { return !(t == u); } - -// 6.1.4 Pairs. -// Unimplemented. - -} // namespace tr1 -} // namespace std - -#undef GTEST_0_TUPLE_ -#undef GTEST_1_TUPLE_ -#undef GTEST_2_TUPLE_ -#undef GTEST_3_TUPLE_ -#undef GTEST_4_TUPLE_ -#undef GTEST_5_TUPLE_ -#undef GTEST_6_TUPLE_ -#undef GTEST_7_TUPLE_ -#undef GTEST_8_TUPLE_ -#undef GTEST_9_TUPLE_ -#undef GTEST_10_TUPLE_ - -#undef GTEST_0_TYPENAMES_ -#undef GTEST_1_TYPENAMES_ -#undef GTEST_2_TYPENAMES_ -#undef GTEST_3_TYPENAMES_ -#undef GTEST_4_TYPENAMES_ -#undef GTEST_5_TYPENAMES_ -#undef GTEST_6_TYPENAMES_ -#undef GTEST_7_TYPENAMES_ -#undef GTEST_8_TYPENAMES_ -#undef GTEST_9_TYPENAMES_ -#undef GTEST_10_TYPENAMES_ - -#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ -#undef GTEST_BY_REF_ -#undef GTEST_ADD_REF_ -#undef GTEST_TUPLE_ELEMENT_ - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ -# elif GTEST_ENV_HAS_STD_TUPLE_ -# include -// C++11 puts its tuple into the ::std namespace rather than -// ::std::tr1. gtest expects tuple to live in ::std::tr1, so put it there. -// This causes undefined behavior, but supported compilers react in -// the way we intend. -namespace std { -namespace tr1 { -using ::std::get; -using ::std::make_tuple; -using ::std::tuple; -using ::std::tuple_element; -using ::std::tuple_size; -} -} - -# elif GTEST_OS_SYMBIAN - -// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to -// use STLport's tuple implementation, which unfortunately doesn't -// work as the copy of STLport distributed with Symbian is incomplete. -// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to -// use its own tuple implementation. -# ifdef BOOST_HAS_TR1_TUPLE -# undef BOOST_HAS_TR1_TUPLE -# endif // BOOST_HAS_TR1_TUPLE - -// This prevents , which defines -// BOOST_HAS_TR1_TUPLE, from being #included by Boost's . -# define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED -# include - -# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) -// GCC 4.0+ implements tr1/tuple in the header. This does -// not conform to the TR1 spec, which requires the header to be . - -# if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 -// Until version 4.3.2, gcc has a bug that causes , -// which is #included by , to not compile when RTTI is -// disabled. _TR1_FUNCTIONAL is the header guard for -// . Hence the following #define is a hack to prevent -// from being included. -# define _TR1_FUNCTIONAL 1 -# include -# undef _TR1_FUNCTIONAL // Allows the user to #include - // if he chooses to. -# else -# include // NOLINT -# endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 - -# else -// If the compiler is not GCC 4.0+, we assume the user is using a -// spec-conforming TR1 implementation. -# include // NOLINT -# endif // GTEST_USE_OWN_TR1_TUPLE - -#endif // GTEST_HAS_TR1_TUPLE - -// Determines whether clone(2) is supported. -// Usually it will only be available on Linux, excluding -// Linux on the Itanium architecture. -// Also see http://linux.die.net/man/2/clone. -#ifndef GTEST_HAS_CLONE -// The user didn't tell us, so we need to figure it out. - -# if GTEST_OS_LINUX && !defined(__ia64__) -# if GTEST_OS_LINUX_ANDROID -// On Android, clone() is only available on ARM starting with Gingerbread. -# if defined(__arm__) && __ANDROID_API__ >= 9 -# define GTEST_HAS_CLONE 1 -# else -# define GTEST_HAS_CLONE 0 -# endif -# else -# define GTEST_HAS_CLONE 1 -# endif -# else -# define GTEST_HAS_CLONE 0 -# endif // GTEST_OS_LINUX && !defined(__ia64__) - -#endif // GTEST_HAS_CLONE - -// Determines whether to support stream redirection. This is used to test -// output correctness and to implement death tests. -#ifndef GTEST_HAS_STREAM_REDIRECTION -// By default, we assume that stream redirection is supported on all -// platforms except known mobile ones. -# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN -# define GTEST_HAS_STREAM_REDIRECTION 0 -# else -# define GTEST_HAS_STREAM_REDIRECTION 1 -# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN -#endif // GTEST_HAS_STREAM_REDIRECTION - -// Determines whether to support death tests. -// Google Test does not support death tests for VC 7.1 and earlier as -// abort() in a VC 7.1 application compiled as GUI in debug config -// pops up a dialog window that cannot be suppressed programmatically. -#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ - (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ - (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ - GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ - GTEST_OS_OPENBSD || GTEST_OS_QNX) -# define GTEST_HAS_DEATH_TEST 1 -# include // NOLINT -#endif - -// We don't support MSVC 7.1 with exceptions disabled now. Therefore -// all the compilers we care about are adequate for supporting -// value-parameterized tests. -#define GTEST_HAS_PARAM_TEST 1 - -// Determines whether to support type-driven tests. - -// Typed tests need and variadic macros, which GCC, VC++ 8.0, -// Sun Pro CC, IBM Visual Age, and HP aCC support. -#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ - defined(__IBMCPP__) || defined(__HP_aCC) -# define GTEST_HAS_TYPED_TEST 1 -# define GTEST_HAS_TYPED_TEST_P 1 -#endif - -// Determines whether to support Combine(). This only makes sense when -// value-parameterized tests are enabled. The implementation doesn't -// work on Sun Studio since it doesn't understand templated conversion -// operators. -#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) -# define GTEST_HAS_COMBINE 1 -#endif - -// Determines whether the system compiler uses UTF-16 for encoding wide strings. -#define GTEST_WIDE_STRING_USES_UTF16_ \ - (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) - -// Determines whether test results can be streamed to a socket. -#if GTEST_OS_LINUX -# define GTEST_CAN_STREAM_RESULTS_ 1 -#endif - -// Defines some utility macros. - -// The GNU compiler emits a warning if nested "if" statements are followed by -// an "else" statement and braces are not used to explicitly disambiguate the -// "else" binding. This leads to problems with code like: -// -// if (gate) -// ASSERT_*(condition) << "Some message"; -// -// The "switch (0) case 0:" idiom is used to suppress this. -#ifdef __INTEL_COMPILER -# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ -#else -# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT -#endif - -// Use this annotation at the end of a struct/class definition to -// prevent the compiler from optimizing away instances that are never -// used. This is useful when all interesting logic happens inside the -// c'tor and / or d'tor. Example: -// -// struct Foo { -// Foo() { ... } -// } GTEST_ATTRIBUTE_UNUSED_; -// -// Also use it after a variable or parameter declaration to tell the -// compiler the variable/parameter does not have to be used. -#if defined(__GNUC__) && !defined(COMPILER_ICC) -# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) -#else -# define GTEST_ATTRIBUTE_UNUSED_ -#endif - -// A macro to disallow operator= -// This should be used in the private: declarations for a class. -#define GTEST_DISALLOW_ASSIGN_(type)\ - void operator=(type const &) - -// A macro to disallow copy constructor and operator= -// This should be used in the private: declarations for a class. -#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ - type(type const &);\ - GTEST_DISALLOW_ASSIGN_(type) - -// Tell the compiler to warn about unused return values for functions declared -// with this macro. The macro should be used on function declarations -// following the argument list: -// -// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; -#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) -# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) -#else -# define GTEST_MUST_USE_RESULT_ -#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC - -// Determine whether the compiler supports Microsoft's Structured Exception -// Handling. This is supported by several Windows compilers but generally -// does not exist on any other system. -#ifndef GTEST_HAS_SEH -// The user didn't tell us, so we need to figure it out. - -# if defined(_MSC_VER) || defined(__BORLANDC__) -// These two compilers are known to support SEH. -# define GTEST_HAS_SEH 1 -# else -// Assume no SEH. -# define GTEST_HAS_SEH 0 -# endif - -#endif // GTEST_HAS_SEH - -#ifdef _MSC_VER - -# if GTEST_LINKED_AS_SHARED_LIBRARY -# define GTEST_API_ __declspec(dllimport) -# elif GTEST_CREATE_SHARED_LIBRARY -# define GTEST_API_ __declspec(dllexport) -# endif - -#endif // _MSC_VER - -#ifndef GTEST_API_ -# define GTEST_API_ -#endif - -#ifdef __GNUC__ -// Ask the compiler to never inline a given function. -# define GTEST_NO_INLINE_ __attribute__((noinline)) -#else -# define GTEST_NO_INLINE_ -#endif - -// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project. -#if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) -# define GTEST_HAS_CXXABI_H_ 1 -#else -# define GTEST_HAS_CXXABI_H_ 0 -#endif - -namespace testing { - -class Message; - -namespace internal { - -// A secret type that Google Test users don't know about. It has no -// definition on purpose. Therefore it's impossible to create a -// Secret object, which is what we want. -class Secret; - -// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time -// expression is true. For example, you could use it to verify the -// size of a static array: -// -// GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, -// content_type_names_incorrect_size); -// -// or to make sure a struct is smaller than a certain size: -// -// GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); -// -// The second argument to the macro is the name of the variable. If -// the expression is false, most compilers will issue a warning/error -// containing the name of the variable. - -template -struct CompileAssert { -}; - -#define GTEST_COMPILE_ASSERT_(expr, msg) \ - typedef ::testing::internal::CompileAssert<(static_cast(expr))> \ - msg[static_cast(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ - -// Implementation details of GTEST_COMPILE_ASSERT_: -// -// - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 -// elements (and thus is invalid) when the expression is false. -// -// - The simpler definition -// -// #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] -// -// does not work, as gcc supports variable-length arrays whose sizes -// are determined at run-time (this is gcc's extension and not part -// of the C++ standard). As a result, gcc fails to reject the -// following code with the simple definition: -// -// int foo; -// GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is -// // not a compile-time constant. -// -// - By using the type CompileAssert<(bool(expr))>, we ensures that -// expr is a compile-time constant. (Template arguments must be -// determined at compile-time.) -// -// - The outter parentheses in CompileAssert<(bool(expr))> are necessary -// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written -// -// CompileAssert -// -// instead, these compilers will refuse to compile -// -// GTEST_COMPILE_ASSERT_(5 > 0, some_message); -// -// (They seem to think the ">" in "5 > 0" marks the end of the -// template argument list.) -// -// - The array size is (bool(expr) ? 1 : -1), instead of simply -// -// ((expr) ? 1 : -1). -// -// This is to avoid running into a bug in MS VC 7.1, which -// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. - -// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. -// -// This template is declared, but intentionally undefined. -template -struct StaticAssertTypeEqHelper; - -template -struct StaticAssertTypeEqHelper {}; - -#if GTEST_HAS_GLOBAL_STRING -typedef ::string string; -#else -typedef ::std::string string; -#endif // GTEST_HAS_GLOBAL_STRING - -#if GTEST_HAS_GLOBAL_WSTRING -typedef ::wstring wstring; -#elif GTEST_HAS_STD_WSTRING -typedef ::std::wstring wstring; -#endif // GTEST_HAS_GLOBAL_WSTRING - -// A helper for suppressing warnings on constant condition. It just -// returns 'condition'. -GTEST_API_ bool IsTrue(bool condition); - -// Defines scoped_ptr. - -// This implementation of scoped_ptr is PARTIAL - it only contains -// enough stuff to satisfy Google Test's need. -template -class scoped_ptr { - public: - typedef T element_type; - - explicit scoped_ptr(T* p = NULL) : ptr_(p) {} - ~scoped_ptr() { reset(); } - - T& operator*() const { return *ptr_; } - T* operator->() const { return ptr_; } - T* get() const { return ptr_; } - - T* release() { - T* const ptr = ptr_; - ptr_ = NULL; - return ptr; - } - - void reset(T* p = NULL) { - if (p != ptr_) { - if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. - delete ptr_; - } - ptr_ = p; - } - } - - private: - T* ptr_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); -}; - -// Defines RE. - -// A simple C++ wrapper for . It uses the POSIX Extended -// Regular Expression syntax. -class GTEST_API_ RE { - public: - // A copy constructor is required by the Standard to initialize object - // references from r-values. - RE(const RE& other) { Init(other.pattern()); } - - // Constructs an RE from a string. - RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT - -#if GTEST_HAS_GLOBAL_STRING - - RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT - -#endif // GTEST_HAS_GLOBAL_STRING - - RE(const char* regex) { Init(regex); } // NOLINT - ~RE(); - - // Returns the string representation of the regex. - const char* pattern() const { return pattern_; } - - // FullMatch(str, re) returns true iff regular expression re matches - // the entire str. - // PartialMatch(str, re) returns true iff regular expression re - // matches a substring of str (including str itself). - // - // TODO(wan@google.com): make FullMatch() and PartialMatch() work - // when str contains NUL characters. - static bool FullMatch(const ::std::string& str, const RE& re) { - return FullMatch(str.c_str(), re); - } - static bool PartialMatch(const ::std::string& str, const RE& re) { - return PartialMatch(str.c_str(), re); - } - -#if GTEST_HAS_GLOBAL_STRING - - static bool FullMatch(const ::string& str, const RE& re) { - return FullMatch(str.c_str(), re); - } - static bool PartialMatch(const ::string& str, const RE& re) { - return PartialMatch(str.c_str(), re); - } - -#endif // GTEST_HAS_GLOBAL_STRING - - static bool FullMatch(const char* str, const RE& re); - static bool PartialMatch(const char* str, const RE& re); - - private: - void Init(const char* regex); - - // We use a const char* instead of an std::string, as Google Test used to be - // used where std::string is not available. TODO(wan@google.com): change to - // std::string. - const char* pattern_; - bool is_valid_; - -#if GTEST_USES_POSIX_RE - - regex_t full_regex_; // For FullMatch(). - regex_t partial_regex_; // For PartialMatch(). - -#else // GTEST_USES_SIMPLE_RE - - const char* full_pattern_; // For FullMatch(); - -#endif - - GTEST_DISALLOW_ASSIGN_(RE); -}; - -// Formats a source file path and a line number as they would appear -// in an error message from the compiler used to compile this code. -GTEST_API_ ::std::string FormatFileLocation(const char* file, int line); - -// Formats a file location for compiler-independent XML output. -// Although this function is not platform dependent, we put it next to -// FormatFileLocation in order to contrast the two functions. -GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, - int line); - -// Defines logging utilities: -// GTEST_LOG_(severity) - logs messages at the specified severity level. The -// message itself is streamed into the macro. -// LogToStderr() - directs all log messages to stderr. -// FlushInfoLog() - flushes informational log messages. - -enum GTestLogSeverity { - GTEST_INFO, - GTEST_WARNING, - GTEST_ERROR, - GTEST_FATAL -}; - -// Formats log entry severity, provides a stream object for streaming the -// log message, and terminates the message with a newline when going out of -// scope. -class GTEST_API_ GTestLog { - public: - GTestLog(GTestLogSeverity severity, const char* file, int line); - - // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. - ~GTestLog(); - - ::std::ostream& GetStream() { return ::std::cerr; } - - private: - const GTestLogSeverity severity_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); -}; - -#define GTEST_LOG_(severity) \ - ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ - __FILE__, __LINE__).GetStream() - -inline void LogToStderr() {} -inline void FlushInfoLog() { fflush(NULL); } - -// INTERNAL IMPLEMENTATION - DO NOT USE. -// -// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition -// is not satisfied. -// Synopsys: -// GTEST_CHECK_(boolean_condition); -// or -// GTEST_CHECK_(boolean_condition) << "Additional message"; -// -// This checks the condition and if the condition is not satisfied -// it prints message about the condition violation, including the -// condition itself, plus additional message streamed into it, if any, -// and then it aborts the program. It aborts the program irrespective of -// whether it is built in the debug mode or not. -#define GTEST_CHECK_(condition) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::IsTrue(condition)) \ - ; \ - else \ - GTEST_LOG_(FATAL) << "Condition " #condition " failed. " - -// An all-mode assert to verify that the given POSIX-style function -// call returns 0 (indicating success). Known limitation: this -// doesn't expand to a balanced 'if' statement, so enclose the macro -// in {} if you need to use it as the only statement in an 'if' -// branch. -#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ - if (const int gtest_error = (posix_call)) \ - GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ - << gtest_error - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Use ImplicitCast_ as a safe version of static_cast for upcasting in -// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a -// const Foo*). When you use ImplicitCast_, the compiler checks that -// the cast is safe. Such explicit ImplicitCast_s are necessary in -// surprisingly many situations where C++ demands an exact type match -// instead of an argument type convertable to a target type. -// -// The syntax for using ImplicitCast_ is the same as for static_cast: -// -// ImplicitCast_(expr) -// -// ImplicitCast_ would have been part of the C++ standard library, -// but the proposal was submitted too late. It will probably make -// its way into the language in the future. -// -// This relatively ugly name is intentional. It prevents clashes with -// similar functions users may have (e.g., implicit_cast). The internal -// namespace alone is not enough because the function can be found by ADL. -template -inline To ImplicitCast_(To x) { return x; } - -// When you upcast (that is, cast a pointer from type Foo to type -// SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts -// always succeed. When you downcast (that is, cast a pointer from -// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because -// how do you know the pointer is really of type SubclassOfFoo? It -// could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, -// when you downcast, you should use this macro. In debug mode, we -// use dynamic_cast<> to double-check the downcast is legal (we die -// if it's not). In normal mode, we do the efficient static_cast<> -// instead. Thus, it's important to test in debug mode to make sure -// the cast is legal! -// This is the only place in the code we should use dynamic_cast<>. -// In particular, you SHOULDN'T be using dynamic_cast<> in order to -// do RTTI (eg code like this: -// if (dynamic_cast(foo)) HandleASubclass1Object(foo); -// if (dynamic_cast(foo)) HandleASubclass2Object(foo); -// You should design the code some other way not to need this. -// -// This relatively ugly name is intentional. It prevents clashes with -// similar functions users may have (e.g., down_cast). The internal -// namespace alone is not enough because the function can be found by ADL. -template // use like this: DownCast_(foo); -inline To DownCast_(From* f) { // so we only accept pointers - // Ensures that To is a sub-type of From *. This test is here only - // for compile-time type checking, and has no overhead in an - // optimized build at run-time, as it will be optimized away - // completely. - if (false) { - const To to = NULL; - ::testing::internal::ImplicitCast_(to); - } - -#if GTEST_HAS_RTTI - // RTTI: debug mode only! - GTEST_CHECK_(f == NULL || dynamic_cast(f) != NULL); -#endif - return static_cast(f); -} - -// Downcasts the pointer of type Base to Derived. -// Derived must be a subclass of Base. The parameter MUST -// point to a class of type Derived, not any subclass of it. -// When RTTI is available, the function performs a runtime -// check to enforce this. -template -Derived* CheckedDowncastToActualType(Base* base) { -#if GTEST_HAS_RTTI - GTEST_CHECK_(typeid(*base) == typeid(Derived)); - return dynamic_cast(base); // NOLINT -#else - return static_cast(base); // Poor man's downcast. -#endif -} - -#if GTEST_HAS_STREAM_REDIRECTION - -// Defines the stderr capturer: -// CaptureStdout - starts capturing stdout. -// GetCapturedStdout - stops capturing stdout and returns the captured string. -// CaptureStderr - starts capturing stderr. -// GetCapturedStderr - stops capturing stderr and returns the captured string. -// -GTEST_API_ void CaptureStdout(); -GTEST_API_ std::string GetCapturedStdout(); -GTEST_API_ void CaptureStderr(); -GTEST_API_ std::string GetCapturedStderr(); - -#endif // GTEST_HAS_STREAM_REDIRECTION - - -#if GTEST_HAS_DEATH_TEST - -const ::std::vector& GetInjectableArgvs(); -void SetInjectableArgvs(const ::std::vector* - new_argvs); - -// A copy of all command line arguments. Set by InitGoogleTest(). -extern ::std::vector g_argvs; - -#endif // GTEST_HAS_DEATH_TEST - -// Defines synchronization primitives. - -#if GTEST_HAS_PTHREAD - -// Sleeps for (roughly) n milli-seconds. This function is only for -// testing Google Test's own constructs. Don't use it in user tests, -// either directly or indirectly. -inline void SleepMilliseconds(int n) { - const timespec time = { - 0, // 0 seconds. - n * 1000L * 1000L, // And n ms. - }; - nanosleep(&time, NULL); -} - -// Allows a controller thread to pause execution of newly created -// threads until notified. Instances of this class must be created -// and destroyed in the controller thread. -// -// This class is only for testing Google Test's own constructs. Do not -// use it in user tests, either directly or indirectly. -class Notification { - public: - Notification() : notified_(false) { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); - } - ~Notification() { - pthread_mutex_destroy(&mutex_); - } - - // Notifies all threads created with this notification to start. Must - // be called from the controller thread. - void Notify() { - pthread_mutex_lock(&mutex_); - notified_ = true; - pthread_mutex_unlock(&mutex_); - } - - // Blocks until the controller thread notifies. Must be called from a test - // thread. - void WaitForNotification() { - for (;;) { - pthread_mutex_lock(&mutex_); - const bool notified = notified_; - pthread_mutex_unlock(&mutex_); - if (notified) - break; - SleepMilliseconds(10); - } - } - - private: - pthread_mutex_t mutex_; - bool notified_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); -}; - -// As a C-function, ThreadFuncWithCLinkage cannot be templated itself. -// Consequently, it cannot select a correct instantiation of ThreadWithParam -// in order to call its Run(). Introducing ThreadWithParamBase as a -// non-templated base class for ThreadWithParam allows us to bypass this -// problem. -class ThreadWithParamBase { - public: - virtual ~ThreadWithParamBase() {} - virtual void Run() = 0; -}; - -// pthread_create() accepts a pointer to a function type with the C linkage. -// According to the Standard (7.5/1), function types with different linkages -// are different even if they are otherwise identical. Some compilers (for -// example, SunStudio) treat them as different types. Since class methods -// cannot be defined with C-linkage we need to define a free C-function to -// pass into pthread_create(). -extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { - static_cast(thread)->Run(); - return NULL; -} - -// Helper class for testing Google Test's multi-threading constructs. -// To use it, write: -// -// void ThreadFunc(int param) { /* Do things with param */ } -// Notification thread_can_start; -// ... -// // The thread_can_start parameter is optional; you can supply NULL. -// ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); -// thread_can_start.Notify(); -// -// These classes are only for testing Google Test's own constructs. Do -// not use them in user tests, either directly or indirectly. -template -class ThreadWithParam : public ThreadWithParamBase { - public: - typedef void (*UserThreadFunc)(T); - - ThreadWithParam( - UserThreadFunc func, T param, Notification* thread_can_start) - : func_(func), - param_(param), - thread_can_start_(thread_can_start), - finished_(false) { - ThreadWithParamBase* const base = this; - // The thread can be created only after all fields except thread_ - // have been initialized. - GTEST_CHECK_POSIX_SUCCESS_( - pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); - } - ~ThreadWithParam() { Join(); } - - void Join() { - if (!finished_) { - GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); - finished_ = true; - } - } - - virtual void Run() { - if (thread_can_start_ != NULL) - thread_can_start_->WaitForNotification(); - func_(param_); - } - - private: - const UserThreadFunc func_; // User-supplied thread function. - const T param_; // User-supplied parameter to the thread function. - // When non-NULL, used to block execution until the controller thread - // notifies. - Notification* const thread_can_start_; - bool finished_; // true iff we know that the thread function has finished. - pthread_t thread_; // The native thread object. - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); -}; - -// MutexBase and Mutex implement mutex on pthreads-based platforms. They -// are used in conjunction with class MutexLock: -// -// Mutex mutex; -// ... -// MutexLock lock(&mutex); // Acquires the mutex and releases it at the end -// // of the current scope. -// -// MutexBase implements behavior for both statically and dynamically -// allocated mutexes. Do not use MutexBase directly. Instead, write -// the following to define a static mutex: -// -// GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); -// -// You can forward declare a static mutex like this: -// -// GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); -// -// To create a dynamic mutex, just define an object of type Mutex. -class MutexBase { - public: - // Acquires this mutex. - void Lock() { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); - owner_ = pthread_self(); - has_owner_ = true; - } - - // Releases this mutex. - void Unlock() { - // Since the lock is being released the owner_ field should no longer be - // considered valid. We don't protect writing to has_owner_ here, as it's - // the caller's responsibility to ensure that the current thread holds the - // mutex when this is called. - has_owner_ = false; - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); - } - - // Does nothing if the current thread holds the mutex. Otherwise, crashes - // with high probability. - void AssertHeld() const { - GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self())) - << "The current thread is not holding the mutex @" << this; - } - - // A static mutex may be used before main() is entered. It may even - // be used before the dynamic initialization stage. Therefore we - // must be able to initialize a static mutex object at link time. - // This means MutexBase has to be a POD and its member variables - // have to be public. - public: - pthread_mutex_t mutex_; // The underlying pthread mutex. - // has_owner_ indicates whether the owner_ field below contains a valid thread - // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All - // accesses to the owner_ field should be protected by a check of this field. - // An alternative might be to memset() owner_ to all zeros, but there's no - // guarantee that a zero'd pthread_t is necessarily invalid or even different - // from pthread_self(). - bool has_owner_; - pthread_t owner_; // The thread holding the mutex. -}; - -// Forward-declares a static mutex. -# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ - extern ::testing::internal::MutexBase mutex - -// Defines and statically (i.e. at link time) initializes a static mutex. -// The initialization list here does not explicitly initialize each field, -// instead relying on default initialization for the unspecified fields. In -// particular, the owner_ field (a pthread_t) is not explicitly initialized. -// This allows initialization to work whether pthread_t is a scalar or struct. -// The flag -Wmissing-field-initializers must not be specified for this to work. -# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ - ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } - -// The Mutex class can only be used for mutexes created at runtime. It -// shares its API with MutexBase otherwise. -class Mutex : public MutexBase { - public: - Mutex() { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); - has_owner_ = false; - } - ~Mutex() { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); - } - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); -}; - -// We cannot name this class MutexLock as the ctor declaration would -// conflict with a macro named MutexLock, which is defined on some -// platforms. Hence the typedef trick below. -class GTestMutexLock { - public: - explicit GTestMutexLock(MutexBase* mutex) - : mutex_(mutex) { mutex_->Lock(); } - - ~GTestMutexLock() { mutex_->Unlock(); } - - private: - MutexBase* const mutex_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); -}; - -typedef GTestMutexLock MutexLock; - -// Helpers for ThreadLocal. - -// pthread_key_create() requires DeleteThreadLocalValue() to have -// C-linkage. Therefore it cannot be templatized to access -// ThreadLocal. Hence the need for class -// ThreadLocalValueHolderBase. -class ThreadLocalValueHolderBase { - public: - virtual ~ThreadLocalValueHolderBase() {} -}; - -// Called by pthread to delete thread-local data stored by -// pthread_setspecific(). -extern "C" inline void DeleteThreadLocalValue(void* value_holder) { - delete static_cast(value_holder); -} - -// Implements thread-local storage on pthreads-based systems. -// -// // Thread 1 -// ThreadLocal tl(100); // 100 is the default value for each thread. -// -// // Thread 2 -// tl.set(150); // Changes the value for thread 2 only. -// EXPECT_EQ(150, tl.get()); -// -// // Thread 1 -// EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. -// tl.set(200); -// EXPECT_EQ(200, tl.get()); -// -// The template type argument T must have a public copy constructor. -// In addition, the default ThreadLocal constructor requires T to have -// a public default constructor. -// -// An object managed for a thread by a ThreadLocal instance is deleted -// when the thread exits. Or, if the ThreadLocal instance dies in -// that thread, when the ThreadLocal dies. It's the user's -// responsibility to ensure that all other threads using a ThreadLocal -// have exited when it dies, or the per-thread objects for those -// threads will not be deleted. -// -// Google Test only uses global ThreadLocal objects. That means they -// will die after main() has returned. Therefore, no per-thread -// object managed by Google Test will be leaked as long as all threads -// using Google Test have exited when main() returns. -template -class ThreadLocal { - public: - ThreadLocal() : key_(CreateKey()), - default_() {} - explicit ThreadLocal(const T& value) : key_(CreateKey()), - default_(value) {} - - ~ThreadLocal() { - // Destroys the managed object for the current thread, if any. - DeleteThreadLocalValue(pthread_getspecific(key_)); - - // Releases resources associated with the key. This will *not* - // delete managed objects for other threads. - GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); - } - - T* pointer() { return GetOrCreateValue(); } - const T* pointer() const { return GetOrCreateValue(); } - const T& get() const { return *pointer(); } - void set(const T& value) { *pointer() = value; } - - private: - // Holds a value of type T. - class ValueHolder : public ThreadLocalValueHolderBase { - public: - explicit ValueHolder(const T& value) : value_(value) {} - - T* pointer() { return &value_; } - - private: - T value_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); - }; - - static pthread_key_t CreateKey() { - pthread_key_t key; - // When a thread exits, DeleteThreadLocalValue() will be called on - // the object managed for that thread. - GTEST_CHECK_POSIX_SUCCESS_( - pthread_key_create(&key, &DeleteThreadLocalValue)); - return key; - } - - T* GetOrCreateValue() const { - ThreadLocalValueHolderBase* const holder = - static_cast(pthread_getspecific(key_)); - if (holder != NULL) { - return CheckedDowncastToActualType(holder)->pointer(); - } - - ValueHolder* const new_holder = new ValueHolder(default_); - ThreadLocalValueHolderBase* const holder_base = new_holder; - GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); - return new_holder->pointer(); - } - - // A key pthreads uses for looking up per-thread values. - const pthread_key_t key_; - const T default_; // The default value for each thread. - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); -}; - -# define GTEST_IS_THREADSAFE 1 - -#else // GTEST_HAS_PTHREAD - -// A dummy implementation of synchronization primitives (mutex, lock, -// and thread-local variable). Necessary for compiling Google Test where -// mutex is not supported - using Google Test in multiple threads is not -// supported on such platforms. - -class Mutex { - public: - Mutex() {} - void Lock() {} - void Unlock() {} - void AssertHeld() const {} -}; - -# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ - extern ::testing::internal::Mutex mutex - -# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex - -class GTestMutexLock { - public: - explicit GTestMutexLock(Mutex*) {} // NOLINT -}; - -typedef GTestMutexLock MutexLock; - -template -class ThreadLocal { - public: - ThreadLocal() : value_() {} - explicit ThreadLocal(const T& value) : value_(value) {} - T* pointer() { return &value_; } - const T* pointer() const { return &value_; } - const T& get() const { return value_; } - void set(const T& value) { value_ = value; } - private: - T value_; -}; - -// The above synchronization primitives have dummy implementations. -// Therefore Google Test is not thread-safe. -# define GTEST_IS_THREADSAFE 0 - -#endif // GTEST_HAS_PTHREAD - -// Returns the number of threads running in the process, or 0 to indicate that -// we cannot detect it. -GTEST_API_ size_t GetThreadCount(); - -// Passing non-POD classes through ellipsis (...) crashes the ARM -// compiler and generates a warning in Sun Studio. The Nokia Symbian -// and the IBM XL C/C++ compiler try to instantiate a copy constructor -// for objects passed through ellipsis (...), failing for uncopyable -// objects. We define this to ensure that only POD is passed through -// ellipsis on these systems. -#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) -// We lose support for NULL detection where the compiler doesn't like -// passing non-POD classes through ellipsis (...). -# define GTEST_ELLIPSIS_NEEDS_POD_ 1 -#else -# define GTEST_CAN_COMPARE_NULL 1 -#endif - -// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between -// const T& and const T* in a function template. These compilers -// _can_ decide between class template specializations for T and T*, -// so a tr1::type_traits-like is_pointer works. -#if defined(__SYMBIAN32__) || defined(__IBMCPP__) -# define GTEST_NEEDS_IS_POINTER_ 1 -#endif - -template -struct bool_constant { - typedef bool_constant type; - static const bool value = bool_value; -}; -template const bool bool_constant::value; - -typedef bool_constant false_type; -typedef bool_constant true_type; - -template -struct is_pointer : public false_type {}; - -template -struct is_pointer : public true_type {}; - -template -struct IteratorTraits { - typedef typename Iterator::value_type value_type; -}; - -template -struct IteratorTraits { - typedef T value_type; -}; - -template -struct IteratorTraits { - typedef T value_type; -}; - -#if GTEST_OS_WINDOWS -# define GTEST_PATH_SEP_ "\\" -# define GTEST_HAS_ALT_PATH_SEP_ 1 -// The biggest signed integer type the compiler supports. -typedef __int64 BiggestInt; -#else -# define GTEST_PATH_SEP_ "/" -# define GTEST_HAS_ALT_PATH_SEP_ 0 -typedef long long BiggestInt; // NOLINT -#endif // GTEST_OS_WINDOWS - -// Utilities for char. - -// isspace(int ch) and friends accept an unsigned char or EOF. char -// may be signed, depending on the compiler (or compiler flags). -// Therefore we need to cast a char to unsigned char before calling -// isspace(), etc. - -inline bool IsAlpha(char ch) { - return isalpha(static_cast(ch)) != 0; -} -inline bool IsAlNum(char ch) { - return isalnum(static_cast(ch)) != 0; -} -inline bool IsDigit(char ch) { - return isdigit(static_cast(ch)) != 0; -} -inline bool IsLower(char ch) { - return islower(static_cast(ch)) != 0; -} -inline bool IsSpace(char ch) { - return isspace(static_cast(ch)) != 0; -} -inline bool IsUpper(char ch) { - return isupper(static_cast(ch)) != 0; -} -inline bool IsXDigit(char ch) { - return isxdigit(static_cast(ch)) != 0; -} -inline bool IsXDigit(wchar_t ch) { - const unsigned char low_byte = static_cast(ch); - return ch == low_byte && isxdigit(low_byte) != 0; -} - -inline char ToLower(char ch) { - return static_cast(tolower(static_cast(ch))); -} -inline char ToUpper(char ch) { - return static_cast(toupper(static_cast(ch))); -} - -// The testing::internal::posix namespace holds wrappers for common -// POSIX functions. These wrappers hide the differences between -// Windows/MSVC and POSIX systems. Since some compilers define these -// standard functions as macros, the wrapper cannot have the same name -// as the wrapped function. - -namespace posix { - -// Functions with a different name on Windows. - -#if GTEST_OS_WINDOWS - -typedef struct _stat StatStruct; - -# ifdef __BORLANDC__ -inline int IsATTY(int fd) { return isatty(fd); } -inline int StrCaseCmp(const char* s1, const char* s2) { - return stricmp(s1, s2); -} -inline char* StrDup(const char* src) { return strdup(src); } -# else // !__BORLANDC__ -# if GTEST_OS_WINDOWS_MOBILE -inline int IsATTY(int /* fd */) { return 0; } -# else -inline int IsATTY(int fd) { return _isatty(fd); } -# endif // GTEST_OS_WINDOWS_MOBILE -inline int StrCaseCmp(const char* s1, const char* s2) { - return _stricmp(s1, s2); -} -inline char* StrDup(const char* src) { return _strdup(src); } -# endif // __BORLANDC__ - -# if GTEST_OS_WINDOWS_MOBILE -inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } -// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this -// time and thus not defined there. -# else -inline int FileNo(FILE* file) { return _fileno(file); } -inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } -inline int RmDir(const char* dir) { return _rmdir(dir); } -inline bool IsDir(const StatStruct& st) { - return (_S_IFDIR & st.st_mode) != 0; -} -# endif // GTEST_OS_WINDOWS_MOBILE - -#else - -typedef struct stat StatStruct; - -inline int FileNo(FILE* file) { return fileno(file); } -inline int IsATTY(int fd) { return isatty(fd); } -inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } -inline int StrCaseCmp(const char* s1, const char* s2) { - return strcasecmp(s1, s2); -} -inline char* StrDup(const char* src) { return strdup(src); } -inline int RmDir(const char* dir) { return rmdir(dir); } -inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } - -#endif // GTEST_OS_WINDOWS - -// Functions deprecated by MSVC 8.0. - -#ifdef _MSC_VER -// Temporarily disable warning 4996 (deprecated function). -# pragma warning(push) -# pragma warning(disable:4996) -#endif - -inline const char* StrNCpy(char* dest, const char* src, size_t n) { - return strncpy(dest, src, n); -} - -// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and -// StrError() aren't needed on Windows CE at this time and thus not -// defined there. - -#if !GTEST_OS_WINDOWS_MOBILE -inline int ChDir(const char* dir) { return chdir(dir); } -#endif -inline FILE* FOpen(const char* path, const char* mode) { - return fopen(path, mode); -} -#if !GTEST_OS_WINDOWS_MOBILE -inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { - return freopen(path, mode, stream); -} -inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } -#endif -inline int FClose(FILE* fp) { return fclose(fp); } -#if !GTEST_OS_WINDOWS_MOBILE -inline int Read(int fd, void* buf, unsigned int count) { - return static_cast(read(fd, buf, count)); -} -inline int Write(int fd, const void* buf, unsigned int count) { - return static_cast(write(fd, buf, count)); -} -inline int Close(int fd) { return close(fd); } -inline const char* StrError(int errnum) { return strerror(errnum); } -#endif -inline const char* GetEnv(const char* name) { -#if GTEST_OS_WINDOWS_MOBILE - // We are on Windows CE, which has no environment variables. - return NULL; -#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) - // Environment variables which we programmatically clear will be set to the - // empty string rather than unset (NULL). Handle that case. - const char* const env = getenv(name); - return (env != NULL && env[0] != '\0') ? env : NULL; -#else - return getenv(name); -#endif -} - -#ifdef _MSC_VER -# pragma warning(pop) // Restores the warning state. -#endif - -#if GTEST_OS_WINDOWS_MOBILE -// Windows CE has no C library. The abort() function is used in -// several places in Google Test. This implementation provides a reasonable -// imitation of standard behaviour. -void Abort(); -#else -inline void Abort() { abort(); } -#endif // GTEST_OS_WINDOWS_MOBILE - -} // namespace posix - -// MSVC "deprecates" snprintf and issues warnings wherever it is used. In -// order to avoid these warnings, we need to use _snprintf or _snprintf_s on -// MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate -// function in order to achieve that. We use macro definition here because -// snprintf is a variadic function. -#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE -// MSVC 2005 and above support variadic macros. -# define GTEST_SNPRINTF_(buffer, size, format, ...) \ - _snprintf_s(buffer, size, size, format, __VA_ARGS__) -#elif defined(_MSC_VER) -// Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't -// complain about _snprintf. -# define GTEST_SNPRINTF_ _snprintf -#else -# define GTEST_SNPRINTF_ snprintf -#endif - -// The maximum number a BiggestInt can represent. This definition -// works no matter BiggestInt is represented in one's complement or -// two's complement. -// -// We cannot rely on numeric_limits in STL, as __int64 and long long -// are not part of standard C++ and numeric_limits doesn't need to be -// defined for them. -const BiggestInt kMaxBiggestInt = - ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); - -// This template class serves as a compile-time function from size to -// type. It maps a size in bytes to a primitive type with that -// size. e.g. -// -// TypeWithSize<4>::UInt -// -// is typedef-ed to be unsigned int (unsigned integer made up of 4 -// bytes). -// -// Such functionality should belong to STL, but I cannot find it -// there. -// -// Google Test uses this class in the implementation of floating-point -// comparison. -// -// For now it only handles UInt (unsigned int) as that's all Google Test -// needs. Other types can be easily added in the future if need -// arises. -template -class TypeWithSize { - public: - // This prevents the user from using TypeWithSize with incorrect - // values of N. - typedef void UInt; -}; - -// The specialization for size 4. -template <> -class TypeWithSize<4> { - public: - // unsigned int has size 4 in both gcc and MSVC. - // - // As base/basictypes.h doesn't compile on Windows, we cannot use - // uint32, uint64, and etc here. - typedef int Int; - typedef unsigned int UInt; -}; - -// The specialization for size 8. -template <> -class TypeWithSize<8> { - public: -#if GTEST_OS_WINDOWS - typedef __int64 Int; - typedef unsigned __int64 UInt; -#else - typedef long long Int; // NOLINT - typedef unsigned long long UInt; // NOLINT -#endif // GTEST_OS_WINDOWS -}; - -// Integer types of known sizes. -typedef TypeWithSize<4>::Int Int32; -typedef TypeWithSize<4>::UInt UInt32; -typedef TypeWithSize<8>::Int Int64; -typedef TypeWithSize<8>::UInt UInt64; -typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. - -// Utilities for command line flags and environment variables. - -// Macro for referencing flags. -#define GTEST_FLAG(name) FLAGS_gtest_##name - -// Macros for declaring flags. -#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) -#define GTEST_DECLARE_int32_(name) \ - GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) -#define GTEST_DECLARE_string_(name) \ - GTEST_API_ extern ::std::string GTEST_FLAG(name) - -// Macros for defining flags. -#define GTEST_DEFINE_bool_(name, default_val, doc) \ - GTEST_API_ bool GTEST_FLAG(name) = (default_val) -#define GTEST_DEFINE_int32_(name, default_val, doc) \ - GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) -#define GTEST_DEFINE_string_(name, default_val, doc) \ - GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) - -// Thread annotations -#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) -#define GTEST_LOCK_EXCLUDED_(locks) - -// Parses 'str' for a 32-bit signed integer. If successful, writes the result -// to *value and returns true; otherwise leaves *value unchanged and returns -// false. -// TODO(chandlerc): Find a better way to refactor flag and environment parsing -// out of both gtest-port.cc and gtest.cc to avoid exporting this utility -// function. -bool ParseInt32(const Message& src_text, const char* str, Int32* value); - -// Parses a bool/Int32/string from the environment variable -// corresponding to the given Google Test flag. -bool BoolFromGTestEnv(const char* flag, bool default_val); -GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); -const char* StringFromGTestEnv(const char* flag, const char* default_val); - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ - -#if GTEST_OS_LINUX -# include -# include -# include -# include -#endif // GTEST_OS_LINUX - -#if GTEST_HAS_EXCEPTIONS -# include -#endif - -#include -#include -#include -#include -#include -#include - -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file defines the Message class. -// -// IMPORTANT NOTE: Due to limitation of the C++ language, we have to -// leave some internal implementation details in this header file. -// They are clearly marked by comments like this: -// -// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -// -// Such code is NOT meant to be used by a user directly, and is subject -// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user -// program! - -#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ -#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ - -#include - - -// Ensures that there is at least one operator<< in the global namespace. -// See Message& operator<<(...) below for why. -void operator<<(const testing::internal::Secret&, int); - -namespace testing { - -// The Message class works like an ostream repeater. -// -// Typical usage: -// -// 1. You stream a bunch of values to a Message object. -// It will remember the text in a stringstream. -// 2. Then you stream the Message object to an ostream. -// This causes the text in the Message to be streamed -// to the ostream. -// -// For example; -// -// testing::Message foo; -// foo << 1 << " != " << 2; -// std::cout << foo; -// -// will print "1 != 2". -// -// Message is not intended to be inherited from. In particular, its -// destructor is not virtual. -// -// Note that stringstream behaves differently in gcc and in MSVC. You -// can stream a NULL char pointer to it in the former, but not in the -// latter (it causes an access violation if you do). The Message -// class hides this difference by treating a NULL char pointer as -// "(null)". -class GTEST_API_ Message { - private: - // The type of basic IO manipulators (endl, ends, and flush) for - // narrow streams. - typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); - - public: - // Constructs an empty Message. - Message(); - - // Copy constructor. - Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT - *ss_ << msg.GetString(); - } - - // Constructs a Message from a C-string. - explicit Message(const char* str) : ss_(new ::std::stringstream) { - *ss_ << str; - } - -#if GTEST_OS_SYMBIAN - // Streams a value (either a pointer or not) to this object. - template - inline Message& operator <<(const T& value) { - StreamHelper(typename internal::is_pointer::type(), value); - return *this; - } -#else - // Streams a non-pointer value to this object. - template - inline Message& operator <<(const T& val) { - // Some libraries overload << for STL containers. These - // overloads are defined in the global namespace instead of ::std. - // - // C++'s symbol lookup rule (i.e. Koenig lookup) says that these - // overloads are visible in either the std namespace or the global - // namespace, but not other namespaces, including the testing - // namespace which Google Test's Message class is in. - // - // To allow STL containers (and other types that has a << operator - // defined in the global namespace) to be used in Google Test - // assertions, testing::Message must access the custom << operator - // from the global namespace. With this using declaration, - // overloads of << defined in the global namespace and those - // visible via Koenig lookup are both exposed in this function. - using ::operator <<; - *ss_ << val; - return *this; - } - - // Streams a pointer value to this object. - // - // This function is an overload of the previous one. When you - // stream a pointer to a Message, this definition will be used as it - // is more specialized. (The C++ Standard, section - // [temp.func.order].) If you stream a non-pointer, then the - // previous definition will be used. - // - // The reason for this overload is that streaming a NULL pointer to - // ostream is undefined behavior. Depending on the compiler, you - // may get "0", "(nil)", "(null)", or an access violation. To - // ensure consistent result across compilers, we always treat NULL - // as "(null)". - template - inline Message& operator <<(T* const& pointer) { // NOLINT - if (pointer == NULL) { - *ss_ << "(null)"; - } else { - *ss_ << pointer; - } - return *this; - } -#endif // GTEST_OS_SYMBIAN - - // Since the basic IO manipulators are overloaded for both narrow - // and wide streams, we have to provide this specialized definition - // of operator <<, even though its body is the same as the - // templatized version above. Without this definition, streaming - // endl or other basic IO manipulators to Message will confuse the - // compiler. - Message& operator <<(BasicNarrowIoManip val) { - *ss_ << val; - return *this; - } - - // Instead of 1/0, we want to see true/false for bool values. - Message& operator <<(bool b) { - return *this << (b ? "true" : "false"); - } - - // These two overloads allow streaming a wide C string to a Message - // using the UTF-8 encoding. - Message& operator <<(const wchar_t* wide_c_str); - Message& operator <<(wchar_t* wide_c_str); - -#if GTEST_HAS_STD_WSTRING - // Converts the given wide string to a narrow string using the UTF-8 - // encoding, and streams the result to this Message object. - Message& operator <<(const ::std::wstring& wstr); -#endif // GTEST_HAS_STD_WSTRING - -#if GTEST_HAS_GLOBAL_WSTRING - // Converts the given wide string to a narrow string using the UTF-8 - // encoding, and streams the result to this Message object. - Message& operator <<(const ::wstring& wstr); -#endif // GTEST_HAS_GLOBAL_WSTRING - - // Gets the text streamed to this object so far as an std::string. - // Each '\0' character in the buffer is replaced with "\\0". - // - // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - std::string GetString() const; - - private: - -#if GTEST_OS_SYMBIAN - // These are needed as the Nokia Symbian Compiler cannot decide between - // const T& and const T* in a function template. The Nokia compiler _can_ - // decide between class template specializations for T and T*, so a - // tr1::type_traits-like is_pointer works, and we can overload on that. - template - inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { - if (pointer == NULL) { - *ss_ << "(null)"; - } else { - *ss_ << pointer; - } - } - template - inline void StreamHelper(internal::false_type /*is_pointer*/, - const T& value) { - // See the comments in Message& operator <<(const T&) above for why - // we need this using statement. - using ::operator <<; - *ss_ << value; - } -#endif // GTEST_OS_SYMBIAN - - // We'll hold the text streamed to this object here. - const internal::scoped_ptr< ::std::stringstream> ss_; - - // We declare (but don't implement) this to prevent the compiler - // from implementing the assignment operator. - void operator=(const Message&); -}; - -// Streams a Message to an ostream. -inline std::ostream& operator <<(std::ostream& os, const Message& sb) { - return os << sb.GetString(); -} - -namespace internal { - -// Converts a streamable value to an std::string. A NULL pointer is -// converted to "(null)". When the input value is a ::string, -// ::std::string, ::wstring, or ::std::wstring object, each NUL -// character in it is replaced with "\\0". -template -std::string StreamableToString(const T& streamable) { - return (Message() << streamable).GetString(); -} - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file declares the String class and functions used internally by -// Google Test. They are subject to change without notice. They should not used -// by code external to Google Test. -// -// This header file is #included by . -// It should not be #included by other files. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ - -#ifdef __BORLANDC__ -// string.h is not guaranteed to provide strcpy on C++ Builder. -# include -#endif - -#include -#include - - -namespace testing { -namespace internal { - -// String - an abstract class holding static string utilities. -class GTEST_API_ String { - public: - // Static utility methods - - // Clones a 0-terminated C string, allocating memory using new. The - // caller is responsible for deleting the return value using - // delete[]. Returns the cloned string, or NULL if the input is - // NULL. - // - // This is different from strdup() in string.h, which allocates - // memory using malloc(). - static const char* CloneCString(const char* c_str); - -#if GTEST_OS_WINDOWS_MOBILE - // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be - // able to pass strings to Win32 APIs on CE we need to convert them - // to 'Unicode', UTF-16. - - // Creates a UTF-16 wide string from the given ANSI string, allocating - // memory using new. The caller is responsible for deleting the return - // value using delete[]. Returns the wide string, or NULL if the - // input is NULL. - // - // The wide string is created using the ANSI codepage (CP_ACP) to - // match the behaviour of the ANSI versions of Win32 calls and the - // C runtime. - static LPCWSTR AnsiToUtf16(const char* c_str); - - // Creates an ANSI string from the given wide string, allocating - // memory using new. The caller is responsible for deleting the return - // value using delete[]. Returns the ANSI string, or NULL if the - // input is NULL. - // - // The returned string is created using the ANSI codepage (CP_ACP) to - // match the behaviour of the ANSI versions of Win32 calls and the - // C runtime. - static const char* Utf16ToAnsi(LPCWSTR utf16_str); -#endif - - // Compares two C strings. Returns true iff they have the same content. - // - // Unlike strcmp(), this function can handle NULL argument(s). A - // NULL C string is considered different to any non-NULL C string, - // including the empty string. - static bool CStringEquals(const char* lhs, const char* rhs); - - // Converts a wide C string to a String using the UTF-8 encoding. - // NULL will be converted to "(null)". If an error occurred during - // the conversion, "(failed to convert from wide string)" is - // returned. - static std::string ShowWideCString(const wchar_t* wide_c_str); - - // Compares two wide C strings. Returns true iff they have the same - // content. - // - // Unlike wcscmp(), this function can handle NULL argument(s). A - // NULL C string is considered different to any non-NULL C string, - // including the empty string. - static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); - - // Compares two C strings, ignoring case. Returns true iff they - // have the same content. - // - // Unlike strcasecmp(), this function can handle NULL argument(s). - // A NULL C string is considered different to any non-NULL C string, - // including the empty string. - static bool CaseInsensitiveCStringEquals(const char* lhs, - const char* rhs); - - // Compares two wide C strings, ignoring case. Returns true iff they - // have the same content. - // - // Unlike wcscasecmp(), this function can handle NULL argument(s). - // A NULL C string is considered different to any non-NULL wide C string, - // including the empty string. - // NB: The implementations on different platforms slightly differ. - // On windows, this method uses _wcsicmp which compares according to LC_CTYPE - // environment variable. On GNU platform this method uses wcscasecmp - // which compares according to LC_CTYPE category of the current locale. - // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the - // current locale. - static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, - const wchar_t* rhs); - - // Returns true iff the given string ends with the given suffix, ignoring - // case. Any string is considered to end with an empty suffix. - static bool EndsWithCaseInsensitive( - const std::string& str, const std::string& suffix); - - // Formats an int value as "%02d". - static std::string FormatIntWidth2(int value); // "%02d" for width == 2 - - // Formats an int value as "%X". - static std::string FormatHexInt(int value); - - // Formats a byte as "%02X". - static std::string FormatByte(unsigned char value); - - private: - String(); // Not meant to be instantiated. -}; // class String - -// Gets the content of the stringstream's buffer as an std::string. Each '\0' -// character in the buffer is replaced with "\\0". -GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: keith.ray@gmail.com (Keith Ray) -// -// Google Test filepath utilities -// -// This header file declares classes and functions used internally by -// Google Test. They are subject to change without notice. -// -// This file is #included in . -// Do not include this header file separately! - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ - - -namespace testing { -namespace internal { - -// FilePath - a class for file and directory pathname manipulation which -// handles platform-specific conventions (like the pathname separator). -// Used for helper functions for naming files in a directory for xml output. -// Except for Set methods, all methods are const or static, which provides an -// "immutable value object" -- useful for peace of mind. -// A FilePath with a value ending in a path separator ("like/this/") represents -// a directory, otherwise it is assumed to represent a file. In either case, -// it may or may not represent an actual file or directory in the file system. -// Names are NOT checked for syntax correctness -- no checking for illegal -// characters, malformed paths, etc. - -class GTEST_API_ FilePath { - public: - FilePath() : pathname_("") { } - FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } - - explicit FilePath(const std::string& pathname) : pathname_(pathname) { - Normalize(); - } - - FilePath& operator=(const FilePath& rhs) { - Set(rhs); - return *this; - } - - void Set(const FilePath& rhs) { - pathname_ = rhs.pathname_; - } - - const std::string& string() const { return pathname_; } - const char* c_str() const { return pathname_.c_str(); } - - // Returns the current working directory, or "" if unsuccessful. - static FilePath GetCurrentDir(); - - // Given directory = "dir", base_name = "test", number = 0, - // extension = "xml", returns "dir/test.xml". If number is greater - // than zero (e.g., 12), returns "dir/test_12.xml". - // On Windows platform, uses \ as the separator rather than /. - static FilePath MakeFileName(const FilePath& directory, - const FilePath& base_name, - int number, - const char* extension); - - // Given directory = "dir", relative_path = "test.xml", - // returns "dir/test.xml". - // On Windows, uses \ as the separator rather than /. - static FilePath ConcatPaths(const FilePath& directory, - const FilePath& relative_path); - - // Returns a pathname for a file that does not currently exist. The pathname - // will be directory/base_name.extension or - // directory/base_name_.extension if directory/base_name.extension - // already exists. The number will be incremented until a pathname is found - // that does not already exist. - // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. - // There could be a race condition if two or more processes are calling this - // function at the same time -- they could both pick the same filename. - static FilePath GenerateUniqueFileName(const FilePath& directory, - const FilePath& base_name, - const char* extension); - - // Returns true iff the path is "". - bool IsEmpty() const { return pathname_.empty(); } - - // If input name has a trailing separator character, removes it and returns - // the name, otherwise return the name string unmodified. - // On Windows platform, uses \ as the separator, other platforms use /. - FilePath RemoveTrailingPathSeparator() const; - - // Returns a copy of the FilePath with the directory part removed. - // Example: FilePath("path/to/file").RemoveDirectoryName() returns - // FilePath("file"). If there is no directory part ("just_a_file"), it returns - // the FilePath unmodified. If there is no file part ("just_a_dir/") it - // returns an empty FilePath (""). - // On Windows platform, '\' is the path separator, otherwise it is '/'. - FilePath RemoveDirectoryName() const; - - // RemoveFileName returns the directory path with the filename removed. - // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". - // If the FilePath is "a_file" or "/a_file", RemoveFileName returns - // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does - // not have a file, like "just/a/dir/", it returns the FilePath unmodified. - // On Windows platform, '\' is the path separator, otherwise it is '/'. - FilePath RemoveFileName() const; - - // Returns a copy of the FilePath with the case-insensitive extension removed. - // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns - // FilePath("dir/file"). If a case-insensitive extension is not - // found, returns a copy of the original FilePath. - FilePath RemoveExtension(const char* extension) const; - - // Creates directories so that path exists. Returns true if successful or if - // the directories already exist; returns false if unable to create - // directories for any reason. Will also return false if the FilePath does - // not represent a directory (that is, it doesn't end with a path separator). - bool CreateDirectoriesRecursively() const; - - // Create the directory so that path exists. Returns true if successful or - // if the directory already exists; returns false if unable to create the - // directory for any reason, including if the parent directory does not - // exist. Not named "CreateDirectory" because that's a macro on Windows. - bool CreateFolder() const; - - // Returns true if FilePath describes something in the file-system, - // either a file, directory, or whatever, and that something exists. - bool FileOrDirectoryExists() const; - - // Returns true if pathname describes a directory in the file-system - // that exists. - bool DirectoryExists() const; - - // Returns true if FilePath ends with a path separator, which indicates that - // it is intended to represent a directory. Returns false otherwise. - // This does NOT check that a directory (or file) actually exists. - bool IsDirectory() const; - - // Returns true if pathname describes a root directory. (Windows has one - // root directory per disk drive.) - bool IsRootDirectory() const; - - // Returns true if pathname describes an absolute path. - bool IsAbsolutePath() const; - - private: - // Replaces multiple consecutive separators with a single separator. - // For example, "bar///foo" becomes "bar/foo". Does not eliminate other - // redundancies that might be in a pathname involving "." or "..". - // - // A pathname with multiple consecutive separators may occur either through - // user error or as a result of some scripts or APIs that generate a pathname - // with a trailing separator. On other platforms the same API or script - // may NOT generate a pathname with a trailing "/". Then elsewhere that - // pathname may have another "/" and pathname components added to it, - // without checking for the separator already being there. - // The script language and operating system may allow paths like "foo//bar" - // but some of the functions in FilePath will not handle that correctly. In - // particular, RemoveTrailingPathSeparator() only removes one separator, and - // it is called in CreateDirectoriesRecursively() assuming that it will change - // a pathname from directory syntax (trailing separator) to filename syntax. - // - // On Windows this method also replaces the alternate path separator '/' with - // the primary path separator '\\', so that for example "bar\\/\\foo" becomes - // "bar\\foo". - - void Normalize(); - - // Returns a pointer to the last occurrence of a valid path separator in - // the FilePath. On Windows, for example, both '/' and '\' are valid path - // separators. Returns NULL if no path separator was found. - const char* FindLastPathSeparator() const; - - std::string pathname_; -}; // class FilePath - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ -// This file was GENERATED by command: -// pump.py gtest-type-util.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Type utilities needed for implementing typed and type-parameterized -// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently we support at most 50 types in a list, and at most 50 -// type-parameterized tests in one type-parameterized test case. -// Please contact googletestframework@googlegroups.com if you need -// more. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ - - -// #ifdef __GNUC__ is too general here. It is possible to use gcc without using -// libstdc++ (which is where cxxabi.h comes from). -# if GTEST_HAS_CXXABI_H_ -# include -# elif defined(__HP_aCC) -# include -# endif // GTEST_HASH_CXXABI_H_ - -namespace testing { -namespace internal { - -// GetTypeName() returns a human-readable name of type T. -// NB: This function is also used in Google Mock, so don't move it inside of -// the typed-test-only section below. -template -std::string GetTypeName() { -# if GTEST_HAS_RTTI - - const char* const name = typeid(T).name(); -# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) - int status = 0; - // gcc's implementation of typeid(T).name() mangles the type name, - // so we have to demangle it. -# if GTEST_HAS_CXXABI_H_ - using abi::__cxa_demangle; -# endif // GTEST_HAS_CXXABI_H_ - char* const readable_name = __cxa_demangle(name, 0, 0, &status); - const std::string name_str(status == 0 ? readable_name : name); - free(readable_name); - return name_str; -# else - return name; -# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC - -# else - - return ""; - -# endif // GTEST_HAS_RTTI -} - -#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -// AssertyTypeEq::type is defined iff T1 and T2 are the same -// type. This can be used as a compile-time assertion to ensure that -// two types are equal. - -template -struct AssertTypeEq; - -template -struct AssertTypeEq { - typedef bool type; -}; - -// A unique type used as the default value for the arguments of class -// template Types. This allows us to simulate variadic templates -// (e.g. Types, Type, and etc), which C++ doesn't -// support directly. -struct None {}; - -// The following family of struct and struct templates are used to -// represent type lists. In particular, TypesN -// represents a type list with N types (T1, T2, ..., and TN) in it. -// Except for Types0, every struct in the family has two member types: -// Head for the first type in the list, and Tail for the rest of the -// list. - -// The empty type list. -struct Types0 {}; - -// Type lists of length 1, 2, 3, and so on. - -template -struct Types1 { - typedef T1 Head; - typedef Types0 Tail; -}; -template -struct Types2 { - typedef T1 Head; - typedef Types1 Tail; -}; - -template -struct Types3 { - typedef T1 Head; - typedef Types2 Tail; -}; - -template -struct Types4 { - typedef T1 Head; - typedef Types3 Tail; -}; - -template -struct Types5 { - typedef T1 Head; - typedef Types4 Tail; -}; - -template -struct Types6 { - typedef T1 Head; - typedef Types5 Tail; -}; - -template -struct Types7 { - typedef T1 Head; - typedef Types6 Tail; -}; - -template -struct Types8 { - typedef T1 Head; - typedef Types7 Tail; -}; - -template -struct Types9 { - typedef T1 Head; - typedef Types8 Tail; -}; - -template -struct Types10 { - typedef T1 Head; - typedef Types9 Tail; -}; - -template -struct Types11 { - typedef T1 Head; - typedef Types10 Tail; -}; - -template -struct Types12 { - typedef T1 Head; - typedef Types11 Tail; -}; - -template -struct Types13 { - typedef T1 Head; - typedef Types12 Tail; -}; - -template -struct Types14 { - typedef T1 Head; - typedef Types13 Tail; -}; - -template -struct Types15 { - typedef T1 Head; - typedef Types14 Tail; -}; - -template -struct Types16 { - typedef T1 Head; - typedef Types15 Tail; -}; - -template -struct Types17 { - typedef T1 Head; - typedef Types16 Tail; -}; - -template -struct Types18 { - typedef T1 Head; - typedef Types17 Tail; -}; - -template -struct Types19 { - typedef T1 Head; - typedef Types18 Tail; -}; - -template -struct Types20 { - typedef T1 Head; - typedef Types19 Tail; -}; - -template -struct Types21 { - typedef T1 Head; - typedef Types20 Tail; -}; - -template -struct Types22 { - typedef T1 Head; - typedef Types21 Tail; -}; - -template -struct Types23 { - typedef T1 Head; - typedef Types22 Tail; -}; - -template -struct Types24 { - typedef T1 Head; - typedef Types23 Tail; -}; - -template -struct Types25 { - typedef T1 Head; - typedef Types24 Tail; -}; - -template -struct Types26 { - typedef T1 Head; - typedef Types25 Tail; -}; - -template -struct Types27 { - typedef T1 Head; - typedef Types26 Tail; -}; - -template -struct Types28 { - typedef T1 Head; - typedef Types27 Tail; -}; - -template -struct Types29 { - typedef T1 Head; - typedef Types28 Tail; -}; - -template -struct Types30 { - typedef T1 Head; - typedef Types29 Tail; -}; - -template -struct Types31 { - typedef T1 Head; - typedef Types30 Tail; -}; - -template -struct Types32 { - typedef T1 Head; - typedef Types31 Tail; -}; - -template -struct Types33 { - typedef T1 Head; - typedef Types32 Tail; -}; - -template -struct Types34 { - typedef T1 Head; - typedef Types33 Tail; -}; - -template -struct Types35 { - typedef T1 Head; - typedef Types34 Tail; -}; - -template -struct Types36 { - typedef T1 Head; - typedef Types35 Tail; -}; - -template -struct Types37 { - typedef T1 Head; - typedef Types36 Tail; -}; - -template -struct Types38 { - typedef T1 Head; - typedef Types37 Tail; -}; - -template -struct Types39 { - typedef T1 Head; - typedef Types38 Tail; -}; - -template -struct Types40 { - typedef T1 Head; - typedef Types39 Tail; -}; - -template -struct Types41 { - typedef T1 Head; - typedef Types40 Tail; -}; - -template -struct Types42 { - typedef T1 Head; - typedef Types41 Tail; -}; - -template -struct Types43 { - typedef T1 Head; - typedef Types42 Tail; -}; - -template -struct Types44 { - typedef T1 Head; - typedef Types43 Tail; -}; - -template -struct Types45 { - typedef T1 Head; - typedef Types44 Tail; -}; - -template -struct Types46 { - typedef T1 Head; - typedef Types45 Tail; -}; - -template -struct Types47 { - typedef T1 Head; - typedef Types46 Tail; -}; - -template -struct Types48 { - typedef T1 Head; - typedef Types47 Tail; -}; - -template -struct Types49 { - typedef T1 Head; - typedef Types48 Tail; -}; - -template -struct Types50 { - typedef T1 Head; - typedef Types49 Tail; -}; - - -} // namespace internal - -// We don't want to require the users to write TypesN<...> directly, -// as that would require them to count the length. Types<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Types -// will appear as Types in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Types, and Google Test will translate -// that to TypesN internally to make error messages -// readable. The translation is done by the 'type' member of the -// Types template. -template -struct Types { - typedef internal::Types50 type; -}; - -template <> -struct Types { - typedef internal::Types0 type; -}; -template -struct Types { - typedef internal::Types1 type; -}; -template -struct Types { - typedef internal::Types2 type; -}; -template -struct Types { - typedef internal::Types3 type; -}; -template -struct Types { - typedef internal::Types4 type; -}; -template -struct Types { - typedef internal::Types5 type; -}; -template -struct Types { - typedef internal::Types6 type; -}; -template -struct Types { - typedef internal::Types7 type; -}; -template -struct Types { - typedef internal::Types8 type; -}; -template -struct Types { - typedef internal::Types9 type; -}; -template -struct Types { - typedef internal::Types10 type; -}; -template -struct Types { - typedef internal::Types11 type; -}; -template -struct Types { - typedef internal::Types12 type; -}; -template -struct Types { - typedef internal::Types13 type; -}; -template -struct Types { - typedef internal::Types14 type; -}; -template -struct Types { - typedef internal::Types15 type; -}; -template -struct Types { - typedef internal::Types16 type; -}; -template -struct Types { - typedef internal::Types17 type; -}; -template -struct Types { - typedef internal::Types18 type; -}; -template -struct Types { - typedef internal::Types19 type; -}; -template -struct Types { - typedef internal::Types20 type; -}; -template -struct Types { - typedef internal::Types21 type; -}; -template -struct Types { - typedef internal::Types22 type; -}; -template -struct Types { - typedef internal::Types23 type; -}; -template -struct Types { - typedef internal::Types24 type; -}; -template -struct Types { - typedef internal::Types25 type; -}; -template -struct Types { - typedef internal::Types26 type; -}; -template -struct Types { - typedef internal::Types27 type; -}; -template -struct Types { - typedef internal::Types28 type; -}; -template -struct Types { - typedef internal::Types29 type; -}; -template -struct Types { - typedef internal::Types30 type; -}; -template -struct Types { - typedef internal::Types31 type; -}; -template -struct Types { - typedef internal::Types32 type; -}; -template -struct Types { - typedef internal::Types33 type; -}; -template -struct Types { - typedef internal::Types34 type; -}; -template -struct Types { - typedef internal::Types35 type; -}; -template -struct Types { - typedef internal::Types36 type; -}; -template -struct Types { - typedef internal::Types37 type; -}; -template -struct Types { - typedef internal::Types38 type; -}; -template -struct Types { - typedef internal::Types39 type; -}; -template -struct Types { - typedef internal::Types40 type; -}; -template -struct Types { - typedef internal::Types41 type; -}; -template -struct Types { - typedef internal::Types42 type; -}; -template -struct Types { - typedef internal::Types43 type; -}; -template -struct Types { - typedef internal::Types44 type; -}; -template -struct Types { - typedef internal::Types45 type; -}; -template -struct Types { - typedef internal::Types46 type; -}; -template -struct Types { - typedef internal::Types47 type; -}; -template -struct Types { - typedef internal::Types48 type; -}; -template -struct Types { - typedef internal::Types49 type; -}; - -namespace internal { - -# define GTEST_TEMPLATE_ template class - -// The template "selector" struct TemplateSel is used to -// represent Tmpl, which must be a class template with one type -// parameter, as a type. TemplateSel::Bind::type is defined -// as the type Tmpl. This allows us to actually instantiate the -// template "selected" by TemplateSel. -// -// This trick is necessary for simulating typedef for class templates, -// which C++ doesn't support directly. -template -struct TemplateSel { - template - struct Bind { - typedef Tmpl type; - }; -}; - -# define GTEST_BIND_(TmplSel, T) \ - TmplSel::template Bind::type - -// A unique struct template used as the default value for the -// arguments of class template Templates. This allows us to simulate -// variadic templates (e.g. Templates, Templates, -// and etc), which C++ doesn't support directly. -template -struct NoneT {}; - -// The following family of struct and struct templates are used to -// represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except -// for Templates0, every struct in the family has two member types: -// Head for the selector of the first template in the list, and Tail -// for the rest of the list. - -// The empty template list. -struct Templates0 {}; - -// Template lists of length 1, 2, 3, and so on. - -template -struct Templates1 { - typedef TemplateSel Head; - typedef Templates0 Tail; -}; -template -struct Templates2 { - typedef TemplateSel Head; - typedef Templates1 Tail; -}; - -template -struct Templates3 { - typedef TemplateSel Head; - typedef Templates2 Tail; -}; - -template -struct Templates4 { - typedef TemplateSel Head; - typedef Templates3 Tail; -}; - -template -struct Templates5 { - typedef TemplateSel Head; - typedef Templates4 Tail; -}; - -template -struct Templates6 { - typedef TemplateSel Head; - typedef Templates5 Tail; -}; - -template -struct Templates7 { - typedef TemplateSel Head; - typedef Templates6 Tail; -}; - -template -struct Templates8 { - typedef TemplateSel Head; - typedef Templates7 Tail; -}; - -template -struct Templates9 { - typedef TemplateSel Head; - typedef Templates8 Tail; -}; - -template -struct Templates10 { - typedef TemplateSel Head; - typedef Templates9 Tail; -}; - -template -struct Templates11 { - typedef TemplateSel Head; - typedef Templates10 Tail; -}; - -template -struct Templates12 { - typedef TemplateSel Head; - typedef Templates11 Tail; -}; - -template -struct Templates13 { - typedef TemplateSel Head; - typedef Templates12 Tail; -}; - -template -struct Templates14 { - typedef TemplateSel Head; - typedef Templates13 Tail; -}; - -template -struct Templates15 { - typedef TemplateSel Head; - typedef Templates14 Tail; -}; - -template -struct Templates16 { - typedef TemplateSel Head; - typedef Templates15 Tail; -}; - -template -struct Templates17 { - typedef TemplateSel Head; - typedef Templates16 Tail; -}; - -template -struct Templates18 { - typedef TemplateSel Head; - typedef Templates17 Tail; -}; - -template -struct Templates19 { - typedef TemplateSel Head; - typedef Templates18 Tail; -}; - -template -struct Templates20 { - typedef TemplateSel Head; - typedef Templates19 Tail; -}; - -template -struct Templates21 { - typedef TemplateSel Head; - typedef Templates20 Tail; -}; - -template -struct Templates22 { - typedef TemplateSel Head; - typedef Templates21 Tail; -}; - -template -struct Templates23 { - typedef TemplateSel Head; - typedef Templates22 Tail; -}; - -template -struct Templates24 { - typedef TemplateSel Head; - typedef Templates23 Tail; -}; - -template -struct Templates25 { - typedef TemplateSel Head; - typedef Templates24 Tail; -}; - -template -struct Templates26 { - typedef TemplateSel Head; - typedef Templates25 Tail; -}; - -template -struct Templates27 { - typedef TemplateSel Head; - typedef Templates26 Tail; -}; - -template -struct Templates28 { - typedef TemplateSel Head; - typedef Templates27 Tail; -}; - -template -struct Templates29 { - typedef TemplateSel Head; - typedef Templates28 Tail; -}; - -template -struct Templates30 { - typedef TemplateSel Head; - typedef Templates29 Tail; -}; - -template -struct Templates31 { - typedef TemplateSel Head; - typedef Templates30 Tail; -}; - -template -struct Templates32 { - typedef TemplateSel Head; - typedef Templates31 Tail; -}; - -template -struct Templates33 { - typedef TemplateSel Head; - typedef Templates32 Tail; -}; - -template -struct Templates34 { - typedef TemplateSel Head; - typedef Templates33 Tail; -}; - -template -struct Templates35 { - typedef TemplateSel Head; - typedef Templates34 Tail; -}; - -template -struct Templates36 { - typedef TemplateSel Head; - typedef Templates35 Tail; -}; - -template -struct Templates37 { - typedef TemplateSel Head; - typedef Templates36 Tail; -}; - -template -struct Templates38 { - typedef TemplateSel Head; - typedef Templates37 Tail; -}; - -template -struct Templates39 { - typedef TemplateSel Head; - typedef Templates38 Tail; -}; - -template -struct Templates40 { - typedef TemplateSel Head; - typedef Templates39 Tail; -}; - -template -struct Templates41 { - typedef TemplateSel Head; - typedef Templates40 Tail; -}; - -template -struct Templates42 { - typedef TemplateSel Head; - typedef Templates41 Tail; -}; - -template -struct Templates43 { - typedef TemplateSel Head; - typedef Templates42 Tail; -}; - -template -struct Templates44 { - typedef TemplateSel Head; - typedef Templates43 Tail; -}; - -template -struct Templates45 { - typedef TemplateSel Head; - typedef Templates44 Tail; -}; - -template -struct Templates46 { - typedef TemplateSel Head; - typedef Templates45 Tail; -}; - -template -struct Templates47 { - typedef TemplateSel Head; - typedef Templates46 Tail; -}; - -template -struct Templates48 { - typedef TemplateSel Head; - typedef Templates47 Tail; -}; - -template -struct Templates49 { - typedef TemplateSel Head; - typedef Templates48 Tail; -}; - -template -struct Templates50 { - typedef TemplateSel Head; - typedef Templates49 Tail; -}; - - -// We don't want to require the users to write TemplatesN<...> directly, -// as that would require them to count the length. Templates<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Templates -// will appear as Templates in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Templates, and Google Test will translate -// that to TemplatesN internally to make error messages -// readable. The translation is done by the 'type' member of the -// Templates template. -template -struct Templates { - typedef Templates50 type; -}; - -template <> -struct Templates { - typedef Templates0 type; -}; -template -struct Templates { - typedef Templates1 type; -}; -template -struct Templates { - typedef Templates2 type; -}; -template -struct Templates { - typedef Templates3 type; -}; -template -struct Templates { - typedef Templates4 type; -}; -template -struct Templates { - typedef Templates5 type; -}; -template -struct Templates { - typedef Templates6 type; -}; -template -struct Templates { - typedef Templates7 type; -}; -template -struct Templates { - typedef Templates8 type; -}; -template -struct Templates { - typedef Templates9 type; -}; -template -struct Templates { - typedef Templates10 type; -}; -template -struct Templates { - typedef Templates11 type; -}; -template -struct Templates { - typedef Templates12 type; -}; -template -struct Templates { - typedef Templates13 type; -}; -template -struct Templates { - typedef Templates14 type; -}; -template -struct Templates { - typedef Templates15 type; -}; -template -struct Templates { - typedef Templates16 type; -}; -template -struct Templates { - typedef Templates17 type; -}; -template -struct Templates { - typedef Templates18 type; -}; -template -struct Templates { - typedef Templates19 type; -}; -template -struct Templates { - typedef Templates20 type; -}; -template -struct Templates { - typedef Templates21 type; -}; -template -struct Templates { - typedef Templates22 type; -}; -template -struct Templates { - typedef Templates23 type; -}; -template -struct Templates { - typedef Templates24 type; -}; -template -struct Templates { - typedef Templates25 type; -}; -template -struct Templates { - typedef Templates26 type; -}; -template -struct Templates { - typedef Templates27 type; -}; -template -struct Templates { - typedef Templates28 type; -}; -template -struct Templates { - typedef Templates29 type; -}; -template -struct Templates { - typedef Templates30 type; -}; -template -struct Templates { - typedef Templates31 type; -}; -template -struct Templates { - typedef Templates32 type; -}; -template -struct Templates { - typedef Templates33 type; -}; -template -struct Templates { - typedef Templates34 type; -}; -template -struct Templates { - typedef Templates35 type; -}; -template -struct Templates { - typedef Templates36 type; -}; -template -struct Templates { - typedef Templates37 type; -}; -template -struct Templates { - typedef Templates38 type; -}; -template -struct Templates { - typedef Templates39 type; -}; -template -struct Templates { - typedef Templates40 type; -}; -template -struct Templates { - typedef Templates41 type; -}; -template -struct Templates { - typedef Templates42 type; -}; -template -struct Templates { - typedef Templates43 type; -}; -template -struct Templates { - typedef Templates44 type; -}; -template -struct Templates { - typedef Templates45 type; -}; -template -struct Templates { - typedef Templates46 type; -}; -template -struct Templates { - typedef Templates47 type; -}; -template -struct Templates { - typedef Templates48 type; -}; -template -struct Templates { - typedef Templates49 type; -}; - -// The TypeList template makes it possible to use either a single type -// or a Types<...> list in TYPED_TEST_CASE() and -// INSTANTIATE_TYPED_TEST_CASE_P(). - -template -struct TypeList { - typedef Types1 type; -}; - -template -struct TypeList > { - typedef typename Types::type type; -}; - -#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ - -// Due to C++ preprocessor weirdness, we need double indirection to -// concatenate two tokens when one of them is __LINE__. Writing -// -// foo ## __LINE__ -// -// will result in the token foo__LINE__, instead of foo followed by -// the current line number. For more details, see -// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 -#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) -#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar - -class ProtocolMessage; -namespace proto2 { class Message; } - -namespace testing { - -// Forward declarations. - -class AssertionResult; // Result of an assertion. -class Message; // Represents a failure message. -class Test; // Represents a test. -class TestInfo; // Information about a test. -class TestPartResult; // Result of a test part. -class UnitTest; // A collection of test cases. - -template -::std::string PrintToString(const T& value); - -namespace internal { - -struct TraceInfo; // Information about a trace point. -class ScopedTrace; // Implements scoped trace. -class TestInfoImpl; // Opaque implementation of TestInfo -class UnitTestImpl; // Opaque implementation of UnitTest - -// How many times InitGoogleTest() has been called. -GTEST_API_ extern int g_init_gtest_count; - -// The text used in failure messages to indicate the start of the -// stack trace. -GTEST_API_ extern const char kStackTraceMarker[]; - -// Two overloaded helpers for checking at compile time whether an -// expression is a null pointer literal (i.e. NULL or any 0-valued -// compile-time integral constant). Their return values have -// different sizes, so we can use sizeof() to test which version is -// picked by the compiler. These helpers have no implementations, as -// we only need their signatures. -// -// Given IsNullLiteralHelper(x), the compiler will pick the first -// version if x can be implicitly converted to Secret*, and pick the -// second version otherwise. Since Secret is a secret and incomplete -// type, the only expression a user can write that has type Secret* is -// a null pointer literal. Therefore, we know that x is a null -// pointer literal if and only if the first version is picked by the -// compiler. -char IsNullLiteralHelper(Secret* p); -char (&IsNullLiteralHelper(...))[2]; // NOLINT - -// A compile-time bool constant that is true if and only if x is a -// null pointer literal (i.e. NULL or any 0-valued compile-time -// integral constant). -#ifdef GTEST_ELLIPSIS_NEEDS_POD_ -// We lose support for NULL detection where the compiler doesn't like -// passing non-POD classes through ellipsis (...). -# define GTEST_IS_NULL_LITERAL_(x) false -#else -# define GTEST_IS_NULL_LITERAL_(x) \ - (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) -#endif // GTEST_ELLIPSIS_NEEDS_POD_ - -// Appends the user-supplied message to the Google-Test-generated message. -GTEST_API_ std::string AppendUserMessage( - const std::string& gtest_msg, const Message& user_msg); - -#if GTEST_HAS_EXCEPTIONS - -// This exception is thrown by (and only by) a failed Google Test -// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions -// are enabled). We derive it from std::runtime_error, which is for -// errors presumably detectable only at run time. Since -// std::runtime_error inherits from std::exception, many testing -// frameworks know how to extract and print the message inside it. -class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { - public: - explicit GoogleTestFailureException(const TestPartResult& failure); -}; - -#endif // GTEST_HAS_EXCEPTIONS - -// A helper class for creating scoped traces in user programs. -class GTEST_API_ ScopedTrace { - public: - // The c'tor pushes the given source file location and message onto - // a trace stack maintained by Google Test. - ScopedTrace(const char* file, int line, const Message& message); - - // The d'tor pops the info pushed by the c'tor. - // - // Note that the d'tor is not virtual in order to be efficient. - // Don't inherit from ScopedTrace! - ~ScopedTrace(); - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); -} GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its - // c'tor and d'tor. Therefore it doesn't - // need to be used otherwise. - -// Constructs and returns the message for an equality assertion -// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. -// -// The first four parameters are the expressions used in the assertion -// and their values, as strings. For example, for ASSERT_EQ(foo, bar) -// where foo is 5 and bar is 6, we have: -// -// expected_expression: "foo" -// actual_expression: "bar" -// expected_value: "5" -// actual_value: "6" -// -// The ignoring_case parameter is true iff the assertion is a -// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will -// be inserted into the message. -GTEST_API_ AssertionResult EqFailure(const char* expected_expression, - const char* actual_expression, - const std::string& expected_value, - const std::string& actual_value, - bool ignoring_case); - -// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. -GTEST_API_ std::string GetBoolAssertionFailureMessage( - const AssertionResult& assertion_result, - const char* expression_text, - const char* actual_predicate_value, - const char* expected_predicate_value); - -// This template class represents an IEEE floating-point number -// (either single-precision or double-precision, depending on the -// template parameters). -// -// The purpose of this class is to do more sophisticated number -// comparison. (Due to round-off error, etc, it's very unlikely that -// two floating-points will be equal exactly. Hence a naive -// comparison by the == operation often doesn't work.) -// -// Format of IEEE floating-point: -// -// The most-significant bit being the leftmost, an IEEE -// floating-point looks like -// -// sign_bit exponent_bits fraction_bits -// -// Here, sign_bit is a single bit that designates the sign of the -// number. -// -// For float, there are 8 exponent bits and 23 fraction bits. -// -// For double, there are 11 exponent bits and 52 fraction bits. -// -// More details can be found at -// http://en.wikipedia.org/wiki/IEEE_floating-point_standard. -// -// Template parameter: -// -// RawType: the raw floating-point type (either float or double) -template -class FloatingPoint { - public: - // Defines the unsigned integer type that has the same size as the - // floating point number. - typedef typename TypeWithSize::UInt Bits; - - // Constants. - - // # of bits in a number. - static const size_t kBitCount = 8*sizeof(RawType); - - // # of fraction bits in a number. - static const size_t kFractionBitCount = - std::numeric_limits::digits - 1; - - // # of exponent bits in a number. - static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; - - // The mask for the sign bit. - static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); - - // The mask for the fraction bits. - static const Bits kFractionBitMask = - ~static_cast(0) >> (kExponentBitCount + 1); - - // The mask for the exponent bits. - static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); - - // How many ULP's (Units in the Last Place) we want to tolerate when - // comparing two numbers. The larger the value, the more error we - // allow. A 0 value means that two numbers must be exactly the same - // to be considered equal. - // - // The maximum error of a single floating-point operation is 0.5 - // units in the last place. On Intel CPU's, all floating-point - // calculations are done with 80-bit precision, while double has 64 - // bits. Therefore, 4 should be enough for ordinary use. - // - // See the following article for more details on ULP: - // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - static const size_t kMaxUlps = 4; - - // Constructs a FloatingPoint from a raw floating-point number. - // - // On an Intel CPU, passing a non-normalized NAN (Not a Number) - // around may change its bits, although the new value is guaranteed - // to be also a NAN. Therefore, don't expect this constructor to - // preserve the bits in x when x is a NAN. - explicit FloatingPoint(const RawType& x) { u_.value_ = x; } - - // Static methods - - // Reinterprets a bit pattern as a floating-point number. - // - // This function is needed to test the AlmostEquals() method. - static RawType ReinterpretBits(const Bits bits) { - FloatingPoint fp(0); - fp.u_.bits_ = bits; - return fp.u_.value_; - } - - // Returns the floating-point number that represent positive infinity. - static RawType Infinity() { - return ReinterpretBits(kExponentBitMask); - } - - // Returns the maximum representable finite floating-point number. - static RawType Max(); - - // Non-static methods - - // Returns the bits that represents this number. - const Bits &bits() const { return u_.bits_; } - - // Returns the exponent bits of this number. - Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } - - // Returns the fraction bits of this number. - Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } - - // Returns the sign bit of this number. - Bits sign_bit() const { return kSignBitMask & u_.bits_; } - - // Returns true iff this is NAN (not a number). - bool is_nan() const { - // It's a NAN if the exponent bits are all ones and the fraction - // bits are not entirely zeros. - return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); - } - - // Returns true iff this number is at most kMaxUlps ULP's away from - // rhs. In particular, this function: - // - // - returns false if either number is (or both are) NAN. - // - treats really large numbers as almost equal to infinity. - // - thinks +0.0 and -0.0 are 0 DLP's apart. - bool AlmostEquals(const FloatingPoint& rhs) const { - // The IEEE standard says that any comparison operation involving - // a NAN must return false. - if (is_nan() || rhs.is_nan()) return false; - - return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) - <= kMaxUlps; - } - - private: - // The data type used to store the actual floating-point number. - union FloatingPointUnion { - RawType value_; // The raw floating-point number. - Bits bits_; // The bits that represent the number. - }; - - // Converts an integer from the sign-and-magnitude representation to - // the biased representation. More precisely, let N be 2 to the - // power of (kBitCount - 1), an integer x is represented by the - // unsigned number x + N. - // - // For instance, - // - // -N + 1 (the most negative number representable using - // sign-and-magnitude) is represented by 1; - // 0 is represented by N; and - // N - 1 (the biggest number representable using - // sign-and-magnitude) is represented by 2N - 1. - // - // Read http://en.wikipedia.org/wiki/Signed_number_representations - // for more details on signed number representations. - static Bits SignAndMagnitudeToBiased(const Bits &sam) { - if (kSignBitMask & sam) { - // sam represents a negative number. - return ~sam + 1; - } else { - // sam represents a positive number. - return kSignBitMask | sam; - } - } - - // Given two numbers in the sign-and-magnitude representation, - // returns the distance between them as an unsigned number. - static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, - const Bits &sam2) { - const Bits biased1 = SignAndMagnitudeToBiased(sam1); - const Bits biased2 = SignAndMagnitudeToBiased(sam2); - return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); - } - - FloatingPointUnion u_; -}; - -// We cannot use std::numeric_limits::max() as it clashes with the max() -// macro defined by . -template <> -inline float FloatingPoint::Max() { return FLT_MAX; } -template <> -inline double FloatingPoint::Max() { return DBL_MAX; } - -// Typedefs the instances of the FloatingPoint template class that we -// care to use. -typedef FloatingPoint Float; -typedef FloatingPoint Double; - -// In order to catch the mistake of putting tests that use different -// test fixture classes in the same test case, we need to assign -// unique IDs to fixture classes and compare them. The TypeId type is -// used to hold such IDs. The user should treat TypeId as an opaque -// type: the only operation allowed on TypeId values is to compare -// them for equality using the == operator. -typedef const void* TypeId; - -template -class TypeIdHelper { - public: - // dummy_ must not have a const type. Otherwise an overly eager - // compiler (e.g. MSVC 7.1 & 8.0) may try to merge - // TypeIdHelper::dummy_ for different Ts as an "optimization". - static bool dummy_; -}; - -template -bool TypeIdHelper::dummy_ = false; - -// GetTypeId() returns the ID of type T. Different values will be -// returned for different types. Calling the function twice with the -// same type argument is guaranteed to return the same ID. -template -TypeId GetTypeId() { - // The compiler is required to allocate a different - // TypeIdHelper::dummy_ variable for each T used to instantiate - // the template. Therefore, the address of dummy_ is guaranteed to - // be unique. - return &(TypeIdHelper::dummy_); -} - -// Returns the type ID of ::testing::Test. Always call this instead -// of GetTypeId< ::testing::Test>() to get the type ID of -// ::testing::Test, as the latter may give the wrong result due to a -// suspected linker bug when compiling Google Test as a Mac OS X -// framework. -GTEST_API_ TypeId GetTestTypeId(); - -// Defines the abstract factory interface that creates instances -// of a Test object. -class TestFactoryBase { - public: - virtual ~TestFactoryBase() {} - - // Creates a test instance to run. The instance is both created and destroyed - // within TestInfoImpl::Run() - virtual Test* CreateTest() = 0; - - protected: - TestFactoryBase() {} - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); -}; - -// This class provides implementation of TeastFactoryBase interface. -// It is used in TEST and TEST_F macros. -template -class TestFactoryImpl : public TestFactoryBase { - public: - virtual Test* CreateTest() { return new TestClass; } -}; - -#if GTEST_OS_WINDOWS - -// Predicate-formatters for implementing the HRESULT checking macros -// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} -// We pass a long instead of HRESULT to avoid causing an -// include dependency for the HRESULT type. -GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, - long hr); // NOLINT -GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, - long hr); // NOLINT - -#endif // GTEST_OS_WINDOWS - -// Types of SetUpTestCase() and TearDownTestCase() functions. -typedef void (*SetUpTestCaseFunc)(); -typedef void (*TearDownTestCaseFunc)(); - -// Creates a new TestInfo object and registers it with Google Test; -// returns the created object. -// -// Arguments: -// -// test_case_name: name of the test case -// name: name of the test -// type_param the name of the test's type parameter, or NULL if -// this is not a typed or a type-parameterized test. -// value_param text representation of the test's value parameter, -// or NULL if this is not a type-parameterized test. -// fixture_class_id: ID of the test fixture class -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -// factory: pointer to the factory that creates a test object. -// The newly created TestInfo instance will assume -// ownership of the factory object. -GTEST_API_ TestInfo* MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - TypeId fixture_class_id, - SetUpTestCaseFunc set_up_tc, - TearDownTestCaseFunc tear_down_tc, - TestFactoryBase* factory); - -// If *pstr starts with the given prefix, modifies *pstr to be right -// past the prefix and returns true; otherwise leaves *pstr unchanged -// and returns false. None of pstr, *pstr, and prefix can be NULL. -GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); - -#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -// State of the definition of a type-parameterized test case. -class GTEST_API_ TypedTestCasePState { - public: - TypedTestCasePState() : registered_(false) {} - - // Adds the given test name to defined_test_names_ and return true - // if the test case hasn't been registered; otherwise aborts the - // program. - bool AddTestName(const char* file, int line, const char* case_name, - const char* test_name) { - if (registered_) { - fprintf(stderr, "%s Test %s must be defined before " - "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", - FormatFileLocation(file, line).c_str(), test_name, case_name); - fflush(stderr); - posix::Abort(); - } - defined_test_names_.insert(test_name); - return true; - } - - // Verifies that registered_tests match the test names in - // defined_test_names_; returns registered_tests if successful, or - // aborts the program otherwise. - const char* VerifyRegisteredTestNames( - const char* file, int line, const char* registered_tests); - - private: - bool registered_; - ::std::set defined_test_names_; -}; - -// Skips to the first non-space char after the first comma in 'str'; -// returns NULL if no comma is found in 'str'. -inline const char* SkipComma(const char* str) { - const char* comma = strchr(str, ','); - if (comma == NULL) { - return NULL; - } - while (IsSpace(*(++comma))) {} - return comma; -} - -// Returns the prefix of 'str' before the first comma in it; returns -// the entire string if it contains no comma. -inline std::string GetPrefixUntilComma(const char* str) { - const char* comma = strchr(str, ','); - return comma == NULL ? str : std::string(str, comma); -} - -// TypeParameterizedTest::Register() -// registers a list of type-parameterized tests with Google Test. The -// return value is insignificant - we just need to return something -// such that we can call this function in a namespace scope. -// -// Implementation note: The GTEST_TEMPLATE_ macro declares a template -// template parameter. It's defined in gtest-type-util.h. -template -class TypeParameterizedTest { - public: - // 'index' is the index of the test in the type list 'Types' - // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, - // Types). Valid values for 'index' are [0, N - 1] where N is the - // length of Types. - static bool Register(const char* prefix, const char* case_name, - const char* test_names, int index) { - typedef typename Types::Head Type; - typedef Fixture FixtureClass; - typedef typename GTEST_BIND_(TestSel, Type) TestClass; - - // First, registers the first type-parameterized test in the type - // list. - MakeAndRegisterTestInfo( - (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" - + StreamableToString(index)).c_str(), - GetPrefixUntilComma(test_names).c_str(), - GetTypeName().c_str(), - NULL, // No value parameter. - GetTypeId(), - TestClass::SetUpTestCase, - TestClass::TearDownTestCase, - new TestFactoryImpl); - - // Next, recurses (at compile time) with the tail of the type list. - return TypeParameterizedTest - ::Register(prefix, case_name, test_names, index + 1); - } -}; - -// The base case for the compile time recursion. -template -class TypeParameterizedTest { - public: - static bool Register(const char* /*prefix*/, const char* /*case_name*/, - const char* /*test_names*/, int /*index*/) { - return true; - } -}; - -// TypeParameterizedTestCase::Register() -// registers *all combinations* of 'Tests' and 'Types' with Google -// Test. The return value is insignificant - we just need to return -// something such that we can call this function in a namespace scope. -template -class TypeParameterizedTestCase { - public: - static bool Register(const char* prefix, const char* case_name, - const char* test_names) { - typedef typename Tests::Head Head; - - // First, register the first test in 'Test' for each type in 'Types'. - TypeParameterizedTest::Register( - prefix, case_name, test_names, 0); - - // Next, recurses (at compile time) with the tail of the test list. - return TypeParameterizedTestCase - ::Register(prefix, case_name, SkipComma(test_names)); - } -}; - -// The base case for the compile time recursion. -template -class TypeParameterizedTestCase { - public: - static bool Register(const char* /*prefix*/, const char* /*case_name*/, - const char* /*test_names*/) { - return true; - } -}; - -#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -// Returns the current OS stack trace as an std::string. -// -// The maximum number of stack frames to be included is specified by -// the gtest_stack_trace_depth flag. The skip_count parameter -// specifies the number of top frames to be skipped, which doesn't -// count against the number of frames to be included. -// -// For example, if Foo() calls Bar(), which in turn calls -// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in -// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. -GTEST_API_ std::string GetCurrentOsStackTraceExceptTop( - UnitTest* unit_test, int skip_count); - -// Helpers for suppressing warnings on unreachable code or constant -// condition. - -// Always returns true. -GTEST_API_ bool AlwaysTrue(); - -// Always returns false. -inline bool AlwaysFalse() { return !AlwaysTrue(); } - -// Helper for suppressing false warning from Clang on a const char* -// variable declared in a conditional expression always being NULL in -// the else branch. -struct GTEST_API_ ConstCharPtr { - ConstCharPtr(const char* str) : value(str) {} - operator bool() const { return true; } - const char* value; -}; - -// A simple Linear Congruential Generator for generating random -// numbers with a uniform distribution. Unlike rand() and srand(), it -// doesn't use global state (and therefore can't interfere with user -// code). Unlike rand_r(), it's portable. An LCG isn't very random, -// but it's good enough for our purposes. -class GTEST_API_ Random { - public: - static const UInt32 kMaxRange = 1u << 31; - - explicit Random(UInt32 seed) : state_(seed) {} - - void Reseed(UInt32 seed) { state_ = seed; } - - // Generates a random number from [0, range). Crashes if 'range' is - // 0 or greater than kMaxRange. - UInt32 Generate(UInt32 range); - - private: - UInt32 state_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); -}; - -// Defining a variable of type CompileAssertTypesEqual will cause a -// compiler error iff T1 and T2 are different types. -template -struct CompileAssertTypesEqual; - -template -struct CompileAssertTypesEqual { -}; - -// Removes the reference from a type if it is a reference type, -// otherwise leaves it unchanged. This is the same as -// tr1::remove_reference, which is not widely available yet. -template -struct RemoveReference { typedef T type; }; // NOLINT -template -struct RemoveReference { typedef T type; }; // NOLINT - -// A handy wrapper around RemoveReference that works when the argument -// T depends on template parameters. -#define GTEST_REMOVE_REFERENCE_(T) \ - typename ::testing::internal::RemoveReference::type - -// Removes const from a type if it is a const type, otherwise leaves -// it unchanged. This is the same as tr1::remove_const, which is not -// widely available yet. -template -struct RemoveConst { typedef T type; }; // NOLINT -template -struct RemoveConst { typedef T type; }; // NOLINT - -// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above -// definition to fail to remove the const in 'const int[3]' and 'const -// char[3][4]'. The following specialization works around the bug. -template -struct RemoveConst { - typedef typename RemoveConst::type type[N]; -}; - -#if defined(_MSC_VER) && _MSC_VER < 1400 -// This is the only specialization that allows VC++ 7.1 to remove const in -// 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC -// and thus needs to be conditionally compiled. -template -struct RemoveConst { - typedef typename RemoveConst::type type[N]; -}; -#endif - -// A handy wrapper around RemoveConst that works when the argument -// T depends on template parameters. -#define GTEST_REMOVE_CONST_(T) \ - typename ::testing::internal::RemoveConst::type - -// Turns const U&, U&, const U, and U all into U. -#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ - GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) - -// Adds reference to a type if it is not a reference type, -// otherwise leaves it unchanged. This is the same as -// tr1::add_reference, which is not widely available yet. -template -struct AddReference { typedef T& type; }; // NOLINT -template -struct AddReference { typedef T& type; }; // NOLINT - -// A handy wrapper around AddReference that works when the argument T -// depends on template parameters. -#define GTEST_ADD_REFERENCE_(T) \ - typename ::testing::internal::AddReference::type - -// Adds a reference to const on top of T as necessary. For example, -// it transforms -// -// char ==> const char& -// const char ==> const char& -// char& ==> const char& -// const char& ==> const char& -// -// The argument T must depend on some template parameters. -#define GTEST_REFERENCE_TO_CONST_(T) \ - GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) - -// ImplicitlyConvertible::value is a compile-time bool -// constant that's true iff type From can be implicitly converted to -// type To. -template -class ImplicitlyConvertible { - private: - // We need the following helper functions only for their types. - // They have no implementations. - - // MakeFrom() is an expression whose type is From. We cannot simply - // use From(), as the type From may not have a public default - // constructor. - static From MakeFrom(); - - // These two functions are overloaded. Given an expression - // Helper(x), the compiler will pick the first version if x can be - // implicitly converted to type To; otherwise it will pick the - // second version. - // - // The first version returns a value of size 1, and the second - // version returns a value of size 2. Therefore, by checking the - // size of Helper(x), which can be done at compile time, we can tell - // which version of Helper() is used, and hence whether x can be - // implicitly converted to type To. - static char Helper(To); - static char (&Helper(...))[2]; // NOLINT - - // We have to put the 'public' section after the 'private' section, - // or MSVC refuses to compile the code. - public: - // MSVC warns about implicitly converting from double to int for - // possible loss of data, so we need to temporarily disable the - // warning. -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4244) // Temporarily disables warning 4244. - - static const bool value = - sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; -# pragma warning(pop) // Restores the warning state. -#elif defined(__BORLANDC__) - // C++Builder cannot use member overload resolution during template - // instantiation. The simplest workaround is to use its C++0x type traits - // functions (C++Builder 2009 and above only). - static const bool value = __is_convertible(From, To); -#else - static const bool value = - sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; -#endif // _MSV_VER -}; -template -const bool ImplicitlyConvertible::value; - -// IsAProtocolMessage::value is a compile-time bool constant that's -// true iff T is type ProtocolMessage, proto2::Message, or a subclass -// of those. -template -struct IsAProtocolMessage - : public bool_constant< - ImplicitlyConvertible::value || - ImplicitlyConvertible::value> { -}; - -// When the compiler sees expression IsContainerTest(0), if C is an -// STL-style container class, the first overload of IsContainerTest -// will be viable (since both C::iterator* and C::const_iterator* are -// valid types and NULL can be implicitly converted to them). It will -// be picked over the second overload as 'int' is a perfect match for -// the type of argument 0. If C::iterator or C::const_iterator is not -// a valid type, the first overload is not viable, and the second -// overload will be picked. Therefore, we can determine whether C is -// a container class by checking the type of IsContainerTest(0). -// The value of the expression is insignificant. -// -// Note that we look for both C::iterator and C::const_iterator. The -// reason is that C++ injects the name of a class as a member of the -// class itself (e.g. you can refer to class iterator as either -// 'iterator' or 'iterator::iterator'). If we look for C::iterator -// only, for example, we would mistakenly think that a class named -// iterator is an STL container. -// -// Also note that the simpler approach of overloading -// IsContainerTest(typename C::const_iterator*) and -// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. -typedef int IsContainer; -template -IsContainer IsContainerTest(int /* dummy */, - typename C::iterator* /* it */ = NULL, - typename C::const_iterator* /* const_it */ = NULL) { - return 0; -} - -typedef char IsNotContainer; -template -IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } - -// EnableIf::type is void when 'Cond' is true, and -// undefined when 'Cond' is false. To use SFINAE to make a function -// overload only apply when a particular expression is true, add -// "typename EnableIf::type* = 0" as the last parameter. -template struct EnableIf; -template<> struct EnableIf { typedef void type; }; // NOLINT - -// Utilities for native arrays. - -// ArrayEq() compares two k-dimensional native arrays using the -// elements' operator==, where k can be any integer >= 0. When k is -// 0, ArrayEq() degenerates into comparing a single pair of values. - -template -bool ArrayEq(const T* lhs, size_t size, const U* rhs); - -// This generic version is used when k is 0. -template -inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } - -// This overload is used when k >= 1. -template -inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { - return internal::ArrayEq(lhs, N, rhs); -} - -// This helper reduces code bloat. If we instead put its logic inside -// the previous ArrayEq() function, arrays with different sizes would -// lead to different copies of the template code. -template -bool ArrayEq(const T* lhs, size_t size, const U* rhs) { - for (size_t i = 0; i != size; i++) { - if (!internal::ArrayEq(lhs[i], rhs[i])) - return false; - } - return true; -} - -// Finds the first element in the iterator range [begin, end) that -// equals elem. Element may be a native array type itself. -template -Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { - for (Iter it = begin; it != end; ++it) { - if (internal::ArrayEq(*it, elem)) - return it; - } - return end; -} - -// CopyArray() copies a k-dimensional native array using the elements' -// operator=, where k can be any integer >= 0. When k is 0, -// CopyArray() degenerates into copying a single value. - -template -void CopyArray(const T* from, size_t size, U* to); - -// This generic version is used when k is 0. -template -inline void CopyArray(const T& from, U* to) { *to = from; } - -// This overload is used when k >= 1. -template -inline void CopyArray(const T(&from)[N], U(*to)[N]) { - internal::CopyArray(from, N, *to); -} - -// This helper reduces code bloat. If we instead put its logic inside -// the previous CopyArray() function, arrays with different sizes -// would lead to different copies of the template code. -template -void CopyArray(const T* from, size_t size, U* to) { - for (size_t i = 0; i != size; i++) { - internal::CopyArray(from[i], to + i); - } -} - -// The relation between an NativeArray object (see below) and the -// native array it represents. -enum RelationToSource { - kReference, // The NativeArray references the native array. - kCopy // The NativeArray makes a copy of the native array and - // owns the copy. -}; - -// Adapts a native array to a read-only STL-style container. Instead -// of the complete STL container concept, this adaptor only implements -// members useful for Google Mock's container matchers. New members -// should be added as needed. To simplify the implementation, we only -// support Element being a raw type (i.e. having no top-level const or -// reference modifier). It's the client's responsibility to satisfy -// this requirement. Element can be an array type itself (hence -// multi-dimensional arrays are supported). -template -class NativeArray { - public: - // STL-style container typedefs. - typedef Element value_type; - typedef Element* iterator; - typedef const Element* const_iterator; - - // Constructs from a native array. - NativeArray(const Element* array, size_t count, RelationToSource relation) { - Init(array, count, relation); - } - - // Copy constructor. - NativeArray(const NativeArray& rhs) { - Init(rhs.array_, rhs.size_, rhs.relation_to_source_); - } - - ~NativeArray() { - // Ensures that the user doesn't instantiate NativeArray with a - // const or reference type. - static_cast(StaticAssertTypeEqHelper()); - if (relation_to_source_ == kCopy) - delete[] array_; - } - - // STL-style container methods. - size_t size() const { return size_; } - const_iterator begin() const { return array_; } - const_iterator end() const { return array_ + size_; } - bool operator==(const NativeArray& rhs) const { - return size() == rhs.size() && - ArrayEq(begin(), size(), rhs.begin()); - } - - private: - // Initializes this object; makes a copy of the input array if - // 'relation' is kCopy. - void Init(const Element* array, size_t a_size, RelationToSource relation) { - if (relation == kReference) { - array_ = array; - } else { - Element* const copy = new Element[a_size]; - CopyArray(array, a_size, copy); - array_ = copy; - } - size_ = a_size; - relation_to_source_ = relation; - } - - const Element* array_; - size_t size_; - RelationToSource relation_to_source_; - - GTEST_DISALLOW_ASSIGN_(NativeArray); -}; - -} // namespace internal -} // namespace testing - -#define GTEST_MESSAGE_AT_(file, line, message, result_type) \ - ::testing::internal::AssertHelper(result_type, file, line, message) \ - = ::testing::Message() - -#define GTEST_MESSAGE_(message, result_type) \ - GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) - -#define GTEST_FATAL_FAILURE_(message) \ - return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) - -#define GTEST_NONFATAL_FAILURE_(message) \ - GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) - -#define GTEST_SUCCESS_(message) \ - GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) - -// Suppresses MSVC warnings 4072 (unreachable code) for the code following -// statement if it returns or throws (or doesn't return or throw in some -// situations). -#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ - if (::testing::internal::AlwaysTrue()) { statement; } - -#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::ConstCharPtr gtest_msg = "") { \ - bool gtest_caught_expected = false; \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (expected_exception const&) { \ - gtest_caught_expected = true; \ - } \ - catch (...) { \ - gtest_msg.value = \ - "Expected: " #statement " throws an exception of type " \ - #expected_exception ".\n Actual: it throws a different type."; \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ - } \ - if (!gtest_caught_expected) { \ - gtest_msg.value = \ - "Expected: " #statement " throws an exception of type " \ - #expected_exception ".\n Actual: it throws nothing."; \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ - fail(gtest_msg.value) - -#define GTEST_TEST_NO_THROW_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (...) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ - fail("Expected: " #statement " doesn't throw an exception.\n" \ - " Actual: it throws.") - -#define GTEST_TEST_ANY_THROW_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - bool gtest_caught_any = false; \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (...) { \ - gtest_caught_any = true; \ - } \ - if (!gtest_caught_any) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ - fail("Expected: " #statement " throws an exception.\n" \ - " Actual: it doesn't.") - - -// Implements Boolean test assertions such as EXPECT_TRUE. expression can be -// either a boolean expression or an AssertionResult. text is a textual -// represenation of expression as it was passed into the EXPECT_TRUE. -#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (const ::testing::AssertionResult gtest_ar_ = \ - ::testing::AssertionResult(expression)) \ - ; \ - else \ - fail(::testing::internal::GetBoolAssertionFailureMessage(\ - gtest_ar_, text, #actual, #expected).c_str()) - -#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ - fail("Expected: " #statement " doesn't generate new fatal " \ - "failures in the current thread.\n" \ - " Actual: it does.") - -// Expands to the name of the class that implements the given test. -#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - test_case_name##_##test_name##_Test - -// Helper macro for defining tests. -#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ -class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ - public:\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ - private:\ - virtual void TestBody();\ - static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ -};\ -\ -::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ - ::test_info_ =\ - ::testing::internal::MakeAndRegisterTestInfo(\ - #test_case_name, #test_name, NULL, NULL, \ - (parent_id), \ - parent_class::SetUpTestCase, \ - parent_class::TearDownTestCase, \ - new ::testing::internal::TestFactoryImpl<\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ -void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file defines the public API for death tests. It is -// #included by gtest.h so a user doesn't need to include this -// directly. - -#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ - -// Copyright 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) -// -// The Google C++ Testing Framework (Google Test) -// -// This header file defines internal utilities needed for implementing -// death tests. They are subject to change without notice. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ - - -#include - -namespace testing { -namespace internal { - -GTEST_DECLARE_string_(internal_run_death_test); - -// Names of the flags (needed for parsing Google Test flags). -const char kDeathTestStyleFlag[] = "death_test_style"; -const char kDeathTestUseFork[] = "death_test_use_fork"; -const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; - -#if GTEST_HAS_DEATH_TEST - -// DeathTest is a class that hides much of the complexity of the -// GTEST_DEATH_TEST_ macro. It is abstract; its static Create method -// returns a concrete class that depends on the prevailing death test -// style, as defined by the --gtest_death_test_style and/or -// --gtest_internal_run_death_test flags. - -// In describing the results of death tests, these terms are used with -// the corresponding definitions: -// -// exit status: The integer exit information in the format specified -// by wait(2) -// exit code: The integer code passed to exit(3), _exit(2), or -// returned from main() -class GTEST_API_ DeathTest { - public: - // Create returns false if there was an error determining the - // appropriate action to take for the current death test; for example, - // if the gtest_death_test_style flag is set to an invalid value. - // The LastMessage method will return a more detailed message in that - // case. Otherwise, the DeathTest pointer pointed to by the "test" - // argument is set. If the death test should be skipped, the pointer - // is set to NULL; otherwise, it is set to the address of a new concrete - // DeathTest object that controls the execution of the current test. - static bool Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test); - DeathTest(); - virtual ~DeathTest() { } - - // A helper class that aborts a death test when it's deleted. - class ReturnSentinel { - public: - explicit ReturnSentinel(DeathTest* test) : test_(test) { } - ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } - private: - DeathTest* const test_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); - } GTEST_ATTRIBUTE_UNUSED_; - - // An enumeration of possible roles that may be taken when a death - // test is encountered. EXECUTE means that the death test logic should - // be executed immediately. OVERSEE means that the program should prepare - // the appropriate environment for a child process to execute the death - // test, then wait for it to complete. - enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; - - // An enumeration of the three reasons that a test might be aborted. - enum AbortReason { - TEST_ENCOUNTERED_RETURN_STATEMENT, - TEST_THREW_EXCEPTION, - TEST_DID_NOT_DIE - }; - - // Assumes one of the above roles. - virtual TestRole AssumeRole() = 0; - - // Waits for the death test to finish and returns its status. - virtual int Wait() = 0; - - // Returns true if the death test passed; that is, the test process - // exited during the test, its exit status matches a user-supplied - // predicate, and its stderr output matches a user-supplied regular - // expression. - // The user-supplied predicate may be a macro expression rather - // than a function pointer or functor, or else Wait and Passed could - // be combined. - virtual bool Passed(bool exit_status_ok) = 0; - - // Signals that the death test did not die as expected. - virtual void Abort(AbortReason reason) = 0; - - // Returns a human-readable outcome message regarding the outcome of - // the last death test. - static const char* LastMessage(); - - static void set_last_death_test_message(const std::string& message); - - private: - // A string containing a description of the outcome of the last death test. - static std::string last_death_test_message_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); -}; - -// Factory interface for death tests. May be mocked out for testing. -class DeathTestFactory { - public: - virtual ~DeathTestFactory() { } - virtual bool Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test) = 0; -}; - -// A concrete DeathTestFactory implementation for normal use. -class DefaultDeathTestFactory : public DeathTestFactory { - public: - virtual bool Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test); -}; - -// Returns true if exit_status describes a process that was terminated -// by a signal, or exited normally with a nonzero exit code. -GTEST_API_ bool ExitedUnsuccessfully(int exit_status); - -// Traps C++ exceptions escaping statement and reports them as test -// failures. Note that trapping SEH exceptions is not implemented here. -# if GTEST_HAS_EXCEPTIONS -# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } catch (const ::std::exception& gtest_exception) { \ - fprintf(\ - stderr, \ - "\n%s: Caught std::exception-derived exception escaping the " \ - "death test statement. Exception message: %s\n", \ - ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ - gtest_exception.what()); \ - fflush(stderr); \ - death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ - } catch (...) { \ - death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ - } - -# else -# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) - -# endif - -// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, -// ASSERT_EXIT*, and EXPECT_EXIT*. -# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - const ::testing::internal::RE& gtest_regex = (regex); \ - ::testing::internal::DeathTest* gtest_dt; \ - if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ - __FILE__, __LINE__, >est_dt)) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ - } \ - if (gtest_dt != NULL) { \ - ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ - gtest_dt_ptr(gtest_dt); \ - switch (gtest_dt->AssumeRole()) { \ - case ::testing::internal::DeathTest::OVERSEE_TEST: \ - if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ - } \ - break; \ - case ::testing::internal::DeathTest::EXECUTE_TEST: { \ - ::testing::internal::DeathTest::ReturnSentinel \ - gtest_sentinel(gtest_dt); \ - GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ - gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ - break; \ - } \ - default: \ - break; \ - } \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ - fail(::testing::internal::DeathTest::LastMessage()) -// The symbol "fail" here expands to something into which a message -// can be streamed. - -// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in -// NDEBUG mode. In this case we need the statements to be executed, the regex is -// ignored, and the macro must accept a streamed message even though the message -// is never printed. -# define GTEST_EXECUTE_STATEMENT_(statement, regex) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } else \ - ::testing::Message() - -// A class representing the parsed contents of the -// --gtest_internal_run_death_test flag, as it existed when -// RUN_ALL_TESTS was called. -class InternalRunDeathTestFlag { - public: - InternalRunDeathTestFlag(const std::string& a_file, - int a_line, - int an_index, - int a_write_fd) - : file_(a_file), line_(a_line), index_(an_index), - write_fd_(a_write_fd) {} - - ~InternalRunDeathTestFlag() { - if (write_fd_ >= 0) - posix::Close(write_fd_); - } - - const std::string& file() const { return file_; } - int line() const { return line_; } - int index() const { return index_; } - int write_fd() const { return write_fd_; } - - private: - std::string file_; - int line_; - int index_; - int write_fd_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); -}; - -// Returns a newly created InternalRunDeathTestFlag object with fields -// initialized from the GTEST_FLAG(internal_run_death_test) flag if -// the flag is specified; otherwise returns NULL. -InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); - -#else // GTEST_HAS_DEATH_TEST - -// This macro is used for implementing macros such as -// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where -// death tests are not supported. Those macros must compile on such systems -// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on -// systems that support death tests. This allows one to write such a macro -// on a system that does not support death tests and be sure that it will -// compile on a death-test supporting system. -// -// Parameters: -// statement - A statement that a macro such as EXPECT_DEATH would test -// for program termination. This macro has to make sure this -// statement is compiled but not executed, to ensure that -// EXPECT_DEATH_IF_SUPPORTED compiles with a certain -// parameter iff EXPECT_DEATH compiles with it. -// regex - A regex that a macro such as EXPECT_DEATH would use to test -// the output of statement. This parameter has to be -// compiled but not evaluated by this macro, to ensure that -// this macro only accepts expressions that a macro such as -// EXPECT_DEATH would accept. -// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED -// and a return statement for ASSERT_DEATH_IF_SUPPORTED. -// This ensures that ASSERT_DEATH_IF_SUPPORTED will not -// compile inside functions where ASSERT_DEATH doesn't -// compile. -// -// The branch that has an always false condition is used to ensure that -// statement and regex are compiled (and thus syntactically correct) but -// never executed. The unreachable code macro protects the terminator -// statement from generating an 'unreachable code' warning in case -// statement unconditionally returns or throws. The Message constructor at -// the end allows the syntax of streaming additional messages into the -// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. -# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - GTEST_LOG_(WARNING) \ - << "Death tests are not supported on this platform.\n" \ - << "Statement '" #statement "' cannot be verified."; \ - } else if (::testing::internal::AlwaysFalse()) { \ - ::testing::internal::RE::PartialMatch(".*", (regex)); \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - terminator; \ - } else \ - ::testing::Message() - -#endif // GTEST_HAS_DEATH_TEST - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ - -namespace testing { - -// This flag controls the style of death tests. Valid values are "threadsafe", -// meaning that the death test child process will re-execute the test binary -// from the start, running only a single death test, or "fast", -// meaning that the child process will execute the test logic immediately -// after forking. -GTEST_DECLARE_string_(death_test_style); - -#if GTEST_HAS_DEATH_TEST - -namespace internal { - -// Returns a Boolean value indicating whether the caller is currently -// executing in the context of the death test child process. Tools such as -// Valgrind heap checkers may need this to modify their behavior in death -// tests. IMPORTANT: This is an internal utility. Using it may break the -// implementation of death tests. User code MUST NOT use it. -GTEST_API_ bool InDeathTestChild(); - -} // namespace internal - -// The following macros are useful for writing death tests. - -// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is -// executed: -// -// 1. It generates a warning if there is more than one active -// thread. This is because it's safe to fork() or clone() only -// when there is a single thread. -// -// 2. The parent process clone()s a sub-process and runs the death -// test in it; the sub-process exits with code 0 at the end of the -// death test, if it hasn't exited already. -// -// 3. The parent process waits for the sub-process to terminate. -// -// 4. The parent process checks the exit code and error message of -// the sub-process. -// -// Examples: -// -// ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); -// for (int i = 0; i < 5; i++) { -// EXPECT_DEATH(server.ProcessRequest(i), -// "Invalid request .* in ProcessRequest()") -// << "Failed to die on request " << i; -// } -// -// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); -// -// bool KilledBySIGHUP(int exit_code) { -// return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; -// } -// -// ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); -// -// On the regular expressions used in death tests: -// -// On POSIX-compliant systems (*nix), we use the library, -// which uses the POSIX extended regex syntax. -// -// On other platforms (e.g. Windows), we only support a simple regex -// syntax implemented as part of Google Test. This limited -// implementation should be enough most of the time when writing -// death tests; though it lacks many features you can find in PCRE -// or POSIX extended regex syntax. For example, we don't support -// union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and -// repetition count ("x{5,7}"), among others. -// -// Below is the syntax that we do support. We chose it to be a -// subset of both PCRE and POSIX extended regex, so it's easy to -// learn wherever you come from. In the following: 'A' denotes a -// literal character, period (.), or a single \\ escape sequence; -// 'x' and 'y' denote regular expressions; 'm' and 'n' are for -// natural numbers. -// -// c matches any literal character c -// \\d matches any decimal digit -// \\D matches any character that's not a decimal digit -// \\f matches \f -// \\n matches \n -// \\r matches \r -// \\s matches any ASCII whitespace, including \n -// \\S matches any character that's not a whitespace -// \\t matches \t -// \\v matches \v -// \\w matches any letter, _, or decimal digit -// \\W matches any character that \\w doesn't match -// \\c matches any literal character c, which must be a punctuation -// . matches any single character except \n -// A? matches 0 or 1 occurrences of A -// A* matches 0 or many occurrences of A -// A+ matches 1 or many occurrences of A -// ^ matches the beginning of a string (not that of each line) -// $ matches the end of a string (not that of each line) -// xy matches x followed by y -// -// If you accidentally use PCRE or POSIX extended regex features -// not implemented by us, you will get a run-time failure. In that -// case, please try to rewrite your regular expression within the -// above syntax. -// -// This implementation is *not* meant to be as highly tuned or robust -// as a compiled regex library, but should perform well enough for a -// death test, which already incurs significant overhead by launching -// a child process. -// -// Known caveats: -// -// A "threadsafe" style death test obtains the path to the test -// program from argv[0] and re-executes it in the sub-process. For -// simplicity, the current implementation doesn't search the PATH -// when launching the sub-process. This means that the user must -// invoke the test program via a path that contains at least one -// path separator (e.g. path/to/foo_test and -// /absolute/path/to/bar_test are fine, but foo_test is not). This -// is rarely a problem as people usually don't put the test binary -// directory in PATH. -// -// TODO(wan@google.com): make thread-safe death tests search the PATH. - -// Asserts that a given statement causes the program to exit, with an -// integer exit status that satisfies predicate, and emitting error output -// that matches regex. -# define ASSERT_EXIT(statement, predicate, regex) \ - GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) - -// Like ASSERT_EXIT, but continues on to successive tests in the -// test case, if any: -# define EXPECT_EXIT(statement, predicate, regex) \ - GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) - -// Asserts that a given statement causes the program to exit, either by -// explicitly exiting with a nonzero exit code or being killed by a -// signal, and emitting error output that matches regex. -# define ASSERT_DEATH(statement, regex) \ - ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) - -// Like ASSERT_DEATH, but continues on to successive tests in the -// test case, if any: -# define EXPECT_DEATH(statement, regex) \ - EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) - -// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: - -// Tests that an exit code describes a normal exit with a given exit code. -class GTEST_API_ ExitedWithCode { - public: - explicit ExitedWithCode(int exit_code); - bool operator()(int exit_status) const; - private: - // No implementation - assignment is unsupported. - void operator=(const ExitedWithCode& other); - - const int exit_code_; -}; - -# if !GTEST_OS_WINDOWS -// Tests that an exit code describes an exit due to termination by a -// given signal. -class GTEST_API_ KilledBySignal { - public: - explicit KilledBySignal(int signum); - bool operator()(int exit_status) const; - private: - const int signum_; -}; -# endif // !GTEST_OS_WINDOWS - -// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. -// The death testing framework causes this to have interesting semantics, -// since the sideeffects of the call are only visible in opt mode, and not -// in debug mode. -// -// In practice, this can be used to test functions that utilize the -// LOG(DFATAL) macro using the following style: -// -// int DieInDebugOr12(int* sideeffect) { -// if (sideeffect) { -// *sideeffect = 12; -// } -// LOG(DFATAL) << "death"; -// return 12; -// } -// -// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { -// int sideeffect = 0; -// // Only asserts in dbg. -// EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); -// -// #ifdef NDEBUG -// // opt-mode has sideeffect visible. -// EXPECT_EQ(12, sideeffect); -// #else -// // dbg-mode no visible sideeffect. -// EXPECT_EQ(0, sideeffect); -// #endif -// } -// -// This will assert that DieInDebugReturn12InOpt() crashes in debug -// mode, usually due to a DCHECK or LOG(DFATAL), but returns the -// appropriate fallback value (12 in this case) in opt mode. If you -// need to test that a function has appropriate side-effects in opt -// mode, include assertions against the side-effects. A general -// pattern for this is: -// -// EXPECT_DEBUG_DEATH({ -// // Side-effects here will have an effect after this statement in -// // opt mode, but none in debug mode. -// EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); -// }, "death"); -// -# ifdef NDEBUG - -# define EXPECT_DEBUG_DEATH(statement, regex) \ - GTEST_EXECUTE_STATEMENT_(statement, regex) - -# define ASSERT_DEBUG_DEATH(statement, regex) \ - GTEST_EXECUTE_STATEMENT_(statement, regex) - -# else - -# define EXPECT_DEBUG_DEATH(statement, regex) \ - EXPECT_DEATH(statement, regex) - -# define ASSERT_DEBUG_DEATH(statement, regex) \ - ASSERT_DEATH(statement, regex) - -# endif // NDEBUG for EXPECT_DEBUG_DEATH -#endif // GTEST_HAS_DEATH_TEST - -// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and -// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if -// death tests are supported; otherwise they just issue a warning. This is -// useful when you are combining death test assertions with normal test -// assertions in one test. -#if GTEST_HAS_DEATH_TEST -# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ - EXPECT_DEATH(statement, regex) -# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ - ASSERT_DEATH(statement, regex) -#else -# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ - GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) -# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ - GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) -#endif - -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ -// This file was GENERATED by command: -// pump.py gtest-param-test.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: vladl@google.com (Vlad Losev) -// -// Macros and functions for implementing parameterized tests -// in Google C++ Testing Framework (Google Test) -// -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ - - -// Value-parameterized tests allow you to test your code with different -// parameters without writing multiple copies of the same test. -// -// Here is how you use value-parameterized tests: - -#if 0 - -// To write value-parameterized tests, first you should define a fixture -// class. It is usually derived from testing::TestWithParam (see below for -// another inheritance scheme that's sometimes useful in more complicated -// class hierarchies), where the type of your parameter values. -// TestWithParam is itself derived from testing::Test. T can be any -// copyable type. If it's a raw pointer, you are responsible for managing the -// lifespan of the pointed values. - -class FooTest : public ::testing::TestWithParam { - // You can implement all the usual class fixture members here. -}; - -// Then, use the TEST_P macro to define as many parameterized tests -// for this fixture as you want. The _P suffix is for "parameterized" -// or "pattern", whichever you prefer to think. - -TEST_P(FooTest, DoesBlah) { - // Inside a test, access the test parameter with the GetParam() method - // of the TestWithParam class: - EXPECT_TRUE(foo.Blah(GetParam())); - ... -} - -TEST_P(FooTest, HasBlahBlah) { - ... -} - -// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test -// case with any set of parameters you want. Google Test defines a number -// of functions for generating test parameters. They return what we call -// (surprise!) parameter generators. Here is a summary of them, which -// are all in the testing namespace: -// -// -// Range(begin, end [, step]) - Yields values {begin, begin+step, -// begin+step+step, ...}. The values do not -// include end. step defaults to 1. -// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. -// ValuesIn(container) - Yields values from a C-style array, an STL -// ValuesIn(begin,end) container, or an iterator range [begin, end). -// Bool() - Yields sequence {false, true}. -// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product -// for the math savvy) of the values generated -// by the N generators. -// -// For more details, see comments at the definitions of these functions below -// in this file. -// -// The following statement will instantiate tests from the FooTest test case -// each with parameter values "meeny", "miny", and "moe". - -INSTANTIATE_TEST_CASE_P(InstantiationName, - FooTest, - Values("meeny", "miny", "moe")); - -// To distinguish different instances of the pattern, (yes, you -// can instantiate it more then once) the first argument to the -// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the -// actual test case name. Remember to pick unique prefixes for different -// instantiations. The tests from the instantiation above will have -// these names: -// -// * InstantiationName/FooTest.DoesBlah/0 for "meeny" -// * InstantiationName/FooTest.DoesBlah/1 for "miny" -// * InstantiationName/FooTest.DoesBlah/2 for "moe" -// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" -// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" -// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" -// -// You can use these names in --gtest_filter. -// -// This statement will instantiate all tests from FooTest again, each -// with parameter values "cat" and "dog": - -const char* pets[] = {"cat", "dog"}; -INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); - -// The tests from the instantiation above will have these names: -// -// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" -// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" -// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" -// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" -// -// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests -// in the given test case, whether their definitions come before or -// AFTER the INSTANTIATE_TEST_CASE_P statement. -// -// Please also note that generator expressions (including parameters to the -// generators) are evaluated in InitGoogleTest(), after main() has started. -// This allows the user on one hand, to adjust generator parameters in order -// to dynamically determine a set of tests to run and on the other hand, -// give the user a chance to inspect the generated tests with Google Test -// reflection API before RUN_ALL_TESTS() is executed. -// -// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc -// for more examples. -// -// In the future, we plan to publish the API for defining new parameter -// generators. But for now this interface remains part of the internal -// implementation and is subject to change. -// -// -// A parameterized test fixture must be derived from testing::Test and from -// testing::WithParamInterface, where T is the type of the parameter -// values. Inheriting from TestWithParam satisfies that requirement because -// TestWithParam inherits from both Test and WithParamInterface. In more -// complicated hierarchies, however, it is occasionally useful to inherit -// separately from Test and WithParamInterface. For example: - -class BaseTest : public ::testing::Test { - // You can inherit all the usual members for a non-parameterized test - // fixture here. -}; - -class DerivedTest : public BaseTest, public ::testing::WithParamInterface { - // The usual test fixture members go here too. -}; - -TEST_F(BaseTest, HasFoo) { - // This is an ordinary non-parameterized test. -} - -TEST_P(DerivedTest, DoesBlah) { - // GetParam works just the same here as if you inherit from TestWithParam. - EXPECT_TRUE(foo.Blah(GetParam())); -} - -#endif // 0 - - -#if !GTEST_OS_SYMBIAN -# include -#endif - -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: vladl@google.com (Vlad Losev) - -// Type and function utilities for implementing parameterized tests. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ - -#include -#include -#include - -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. -// Copyright 2003 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: Dan Egnor (egnor@google.com) -// -// A "smart" pointer type with reference tracking. Every pointer to a -// particular object is kept on a circular linked list. When the last pointer -// to an object is destroyed or reassigned, the object is deleted. -// -// Used properly, this deletes the object when the last reference goes away. -// There are several caveats: -// - Like all reference counting schemes, cycles lead to leaks. -// - Each smart pointer is actually two pointers (8 bytes instead of 4). -// - Every time a pointer is assigned, the entire list of pointers to that -// object is traversed. This class is therefore NOT SUITABLE when there -// will often be more than two or three pointers to a particular object. -// - References are only tracked as long as linked_ptr<> objects are copied. -// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS -// will happen (double deletion). -// -// A good use of this class is storing object references in STL containers. -// You can safely put linked_ptr<> in a vector<>. -// Other uses may not be as good. -// -// Note: If you use an incomplete type with linked_ptr<>, the class -// *containing* linked_ptr<> must have a constructor and destructor (even -// if they do nothing!). -// -// Bill Gibbons suggested we use something like this. -// -// Thread Safety: -// Unlike other linked_ptr implementations, in this implementation -// a linked_ptr object is thread-safe in the sense that: -// - it's safe to copy linked_ptr objects concurrently, -// - it's safe to copy *from* a linked_ptr and read its underlying -// raw pointer (e.g. via get()) concurrently, and -// - it's safe to write to two linked_ptrs that point to the same -// shared object concurrently. -// TODO(wan@google.com): rename this to safe_linked_ptr to avoid -// confusion with normal linked_ptr. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ - -#include -#include - - -namespace testing { -namespace internal { - -// Protects copying of all linked_ptr objects. -GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); - -// This is used internally by all instances of linked_ptr<>. It needs to be -// a non-template class because different types of linked_ptr<> can refer to -// the same object (linked_ptr(obj) vs linked_ptr(obj)). -// So, it needs to be possible for different types of linked_ptr to participate -// in the same circular linked list, so we need a single class type here. -// -// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. -class linked_ptr_internal { - public: - // Create a new circle that includes only this instance. - void join_new() { - next_ = this; - } - - // Many linked_ptr operations may change p.link_ for some linked_ptr - // variable p in the same circle as this object. Therefore we need - // to prevent two such operations from occurring concurrently. - // - // Note that different types of linked_ptr objects can coexist in a - // circle (e.g. linked_ptr, linked_ptr, and - // linked_ptr). Therefore we must use a single mutex to - // protect all linked_ptr objects. This can create serious - // contention in production code, but is acceptable in a testing - // framework. - - // Join an existing circle. - void join(linked_ptr_internal const* ptr) - GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { - MutexLock lock(&g_linked_ptr_mutex); - - linked_ptr_internal const* p = ptr; - while (p->next_ != ptr) p = p->next_; - p->next_ = this; - next_ = ptr; - } - - // Leave whatever circle we're part of. Returns true if we were the - // last member of the circle. Once this is done, you can join() another. - bool depart() - GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { - MutexLock lock(&g_linked_ptr_mutex); - - if (next_ == this) return true; - linked_ptr_internal const* p = next_; - while (p->next_ != this) p = p->next_; - p->next_ = next_; - return false; - } - - private: - mutable linked_ptr_internal const* next_; -}; - -template -class linked_ptr { - public: - typedef T element_type; - - // Take over ownership of a raw pointer. This should happen as soon as - // possible after the object is created. - explicit linked_ptr(T* ptr = NULL) { capture(ptr); } - ~linked_ptr() { depart(); } - - // Copy an existing linked_ptr<>, adding ourselves to the list of references. - template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } - linked_ptr(linked_ptr const& ptr) { // NOLINT - assert(&ptr != this); - copy(&ptr); - } - - // Assignment releases the old value and acquires the new. - template linked_ptr& operator=(linked_ptr const& ptr) { - depart(); - copy(&ptr); - return *this; - } - - linked_ptr& operator=(linked_ptr const& ptr) { - if (&ptr != this) { - depart(); - copy(&ptr); - } - return *this; - } - - // Smart pointer members. - void reset(T* ptr = NULL) { - depart(); - capture(ptr); - } - T* get() const { return value_; } - T* operator->() const { return value_; } - T& operator*() const { return *value_; } - - bool operator==(T* p) const { return value_ == p; } - bool operator!=(T* p) const { return value_ != p; } - template - bool operator==(linked_ptr const& ptr) const { - return value_ == ptr.get(); - } - template - bool operator!=(linked_ptr const& ptr) const { - return value_ != ptr.get(); - } - - private: - template - friend class linked_ptr; - - T* value_; - linked_ptr_internal link_; - - void depart() { - if (link_.depart()) delete value_; - } - - void capture(T* ptr) { - value_ = ptr; - link_.join_new(); - } - - template void copy(linked_ptr const* ptr) { - value_ = ptr->get(); - if (value_) - link_.join(&ptr->link_); - else - link_.join_new(); - } -}; - -template inline -bool operator==(T* ptr, const linked_ptr& x) { - return ptr == x.get(); -} - -template inline -bool operator!=(T* ptr, const linked_ptr& x) { - return ptr != x.get(); -} - -// A function to convert T* into linked_ptr -// Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation -// for linked_ptr >(new FooBarBaz(arg)) -template -linked_ptr make_linked_ptr(T* ptr) { - return linked_ptr(ptr); -} - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Google Test - The Google C++ Testing Framework -// -// This file implements a universal value printer that can print a -// value of any type T: -// -// void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); -// -// A user can teach this function how to print a class type T by -// defining either operator<<() or PrintTo() in the namespace that -// defines T. More specifically, the FIRST defined function in the -// following list will be used (assuming T is defined in namespace -// foo): -// -// 1. foo::PrintTo(const T&, ostream*) -// 2. operator<<(ostream&, const T&) defined in either foo or the -// global namespace. -// -// If none of the above is defined, it will print the debug string of -// the value if it is a protocol buffer, or print the raw bytes in the -// value otherwise. -// -// To aid debugging: when T is a reference type, the address of the -// value is also printed; when T is a (const) char pointer, both the -// pointer value and the NUL-terminated string it points to are -// printed. -// -// We also provide some convenient wrappers: -// -// // Prints a value to a string. For a (const or not) char -// // pointer, the NUL-terminated string (but not the pointer) is -// // printed. -// std::string ::testing::PrintToString(const T& value); -// -// // Prints a value tersely: for a reference type, the referenced -// // value (but not the address) is printed; for a (const or not) char -// // pointer, the NUL-terminated string (but not the pointer) is -// // printed. -// void ::testing::internal::UniversalTersePrint(const T& value, ostream*); -// -// // Prints value using the type inferred by the compiler. The difference -// // from UniversalTersePrint() is that this function prints both the -// // pointer and the NUL-terminated string for a (const or not) char pointer. -// void ::testing::internal::UniversalPrint(const T& value, ostream*); -// -// // Prints the fields of a tuple tersely to a string vector, one -// // element for each field. Tuple support must be enabled in -// // gtest-port.h. -// std::vector UniversalTersePrintTupleFieldsToStrings( -// const Tuple& value); -// -// Known limitation: -// -// The print primitives print the elements of an STL-style container -// using the compiler-inferred type of *iter where iter is a -// const_iterator of the container. When const_iterator is an input -// iterator but not a forward iterator, this inferred type may not -// match value_type, and the print output may be incorrect. In -// practice, this is rarely a problem as for most containers -// const_iterator is a forward iterator. We'll fix this if there's an -// actual need for it. Note that this fix cannot rely on value_type -// being defined as many user-defined container types don't have -// value_type. - -#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ - -#include // NOLINT -#include -#include -#include -#include - -namespace testing { - -// Definitions in the 'internal' and 'internal2' name spaces are -// subject to change without notice. DO NOT USE THEM IN USER CODE! -namespace internal2 { - -// Prints the given number of bytes in the given object to the given -// ostream. -GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, - size_t count, - ::std::ostream* os); - -// For selecting which printer to use when a given type has neither << -// nor PrintTo(). -enum TypeKind { - kProtobuf, // a protobuf type - kConvertibleToInteger, // a type implicitly convertible to BiggestInt - // (e.g. a named or unnamed enum type) - kOtherType // anything else -}; - -// TypeWithoutFormatter::PrintValue(value, os) is called -// by the universal printer to print a value of type T when neither -// operator<< nor PrintTo() is defined for T, where kTypeKind is the -// "kind" of T as defined by enum TypeKind. -template -class TypeWithoutFormatter { - public: - // This default version is called when kTypeKind is kOtherType. - static void PrintValue(const T& value, ::std::ostream* os) { - PrintBytesInObjectTo(reinterpret_cast(&value), - sizeof(value), os); - } -}; - -// We print a protobuf using its ShortDebugString() when the string -// doesn't exceed this many characters; otherwise we print it using -// DebugString() for better readability. -const size_t kProtobufOneLinerMaxLength = 50; - -template -class TypeWithoutFormatter { - public: - static void PrintValue(const T& value, ::std::ostream* os) { - const ::testing::internal::string short_str = value.ShortDebugString(); - const ::testing::internal::string pretty_str = - short_str.length() <= kProtobufOneLinerMaxLength ? - short_str : ("\n" + value.DebugString()); - *os << ("<" + pretty_str + ">"); - } -}; - -template -class TypeWithoutFormatter { - public: - // Since T has no << operator or PrintTo() but can be implicitly - // converted to BiggestInt, we print it as a BiggestInt. - // - // Most likely T is an enum type (either named or unnamed), in which - // case printing it as an integer is the desired behavior. In case - // T is not an enum, printing it as an integer is the best we can do - // given that it has no user-defined printer. - static void PrintValue(const T& value, ::std::ostream* os) { - const internal::BiggestInt kBigInt = value; - *os << kBigInt; - } -}; - -// Prints the given value to the given ostream. If the value is a -// protocol message, its debug string is printed; if it's an enum or -// of a type implicitly convertible to BiggestInt, it's printed as an -// integer; otherwise the bytes in the value are printed. This is -// what UniversalPrinter::Print() does when it knows nothing about -// type T and T has neither << operator nor PrintTo(). -// -// A user can override this behavior for a class type Foo by defining -// a << operator in the namespace where Foo is defined. -// -// We put this operator in namespace 'internal2' instead of 'internal' -// to simplify the implementation, as much code in 'internal' needs to -// use << in STL, which would conflict with our own << were it defined -// in 'internal'. -// -// Note that this operator<< takes a generic std::basic_ostream type instead of the more restricted std::ostream. If -// we define it to take an std::ostream instead, we'll get an -// "ambiguous overloads" compiler error when trying to print a type -// Foo that supports streaming to std::basic_ostream, as the compiler cannot tell whether -// operator<<(std::ostream&, const T&) or -// operator<<(std::basic_stream, const Foo&) is more -// specific. -template -::std::basic_ostream& operator<<( - ::std::basic_ostream& os, const T& x) { - TypeWithoutFormatter::value ? kProtobuf : - internal::ImplicitlyConvertible::value ? - kConvertibleToInteger : kOtherType)>::PrintValue(x, &os); - return os; -} - -} // namespace internal2 -} // namespace testing - -// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up -// magic needed for implementing UniversalPrinter won't work. -namespace testing_internal { - -// Used to print a value that is not an STL-style container when the -// user doesn't define PrintTo() for it. -template -void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { - // With the following statement, during unqualified name lookup, - // testing::internal2::operator<< appears as if it was declared in - // the nearest enclosing namespace that contains both - // ::testing_internal and ::testing::internal2, i.e. the global - // namespace. For more details, refer to the C++ Standard section - // 7.3.4-1 [namespace.udir]. This allows us to fall back onto - // testing::internal2::operator<< in case T doesn't come with a << - // operator. - // - // We cannot write 'using ::testing::internal2::operator<<;', which - // gcc 3.3 fails to compile due to a compiler bug. - using namespace ::testing::internal2; // NOLINT - - // Assuming T is defined in namespace foo, in the next statement, - // the compiler will consider all of: - // - // 1. foo::operator<< (thanks to Koenig look-up), - // 2. ::operator<< (as the current namespace is enclosed in ::), - // 3. testing::internal2::operator<< (thanks to the using statement above). - // - // The operator<< whose type matches T best will be picked. - // - // We deliberately allow #2 to be a candidate, as sometimes it's - // impossible to define #1 (e.g. when foo is ::std, defining - // anything in it is undefined behavior unless you are a compiler - // vendor.). - *os << value; -} - -} // namespace testing_internal - -namespace testing { -namespace internal { - -// UniversalPrinter::Print(value, ostream_ptr) prints the given -// value to the given ostream. The caller must ensure that -// 'ostream_ptr' is not NULL, or the behavior is undefined. -// -// We define UniversalPrinter as a class template (as opposed to a -// function template), as we need to partially specialize it for -// reference types, which cannot be done with function templates. -template -class UniversalPrinter; - -template -void UniversalPrint(const T& value, ::std::ostream* os); - -// Used to print an STL-style container when the user doesn't define -// a PrintTo() for it. -template -void DefaultPrintTo(IsContainer /* dummy */, - false_type /* is not a pointer */, - const C& container, ::std::ostream* os) { - const size_t kMaxCount = 32; // The maximum number of elements to print. - *os << '{'; - size_t count = 0; - for (typename C::const_iterator it = container.begin(); - it != container.end(); ++it, ++count) { - if (count > 0) { - *os << ','; - if (count == kMaxCount) { // Enough has been printed. - *os << " ..."; - break; - } - } - *os << ' '; - // We cannot call PrintTo(*it, os) here as PrintTo() doesn't - // handle *it being a native array. - internal::UniversalPrint(*it, os); - } - - if (count > 0) { - *os << ' '; - } - *os << '}'; -} - -// Used to print a pointer that is neither a char pointer nor a member -// pointer, when the user doesn't define PrintTo() for it. (A member -// variable pointer or member function pointer doesn't really point to -// a location in the address space. Their representation is -// implementation-defined. Therefore they will be printed as raw -// bytes.) -template -void DefaultPrintTo(IsNotContainer /* dummy */, - true_type /* is a pointer */, - T* p, ::std::ostream* os) { - if (p == NULL) { - *os << "NULL"; - } else { - // C++ doesn't allow casting from a function pointer to any object - // pointer. - // - // IsTrue() silences warnings: "Condition is always true", - // "unreachable code". - if (IsTrue(ImplicitlyConvertible::value)) { - // T is not a function type. We just call << to print p, - // relying on ADL to pick up user-defined << for their pointer - // types, if any. - *os << p; - } else { - // T is a function type, so '*os << p' doesn't do what we want - // (it just prints p as bool). We want to print p as a const - // void*. However, we cannot cast it to const void* directly, - // even using reinterpret_cast, as earlier versions of gcc - // (e.g. 3.4.5) cannot compile the cast when p is a function - // pointer. Casting to UInt64 first solves the problem. - *os << reinterpret_cast( - reinterpret_cast(p)); - } - } -} - -// Used to print a non-container, non-pointer value when the user -// doesn't define PrintTo() for it. -template -void DefaultPrintTo(IsNotContainer /* dummy */, - false_type /* is not a pointer */, - const T& value, ::std::ostream* os) { - ::testing_internal::DefaultPrintNonContainerTo(value, os); -} - -// Prints the given value using the << operator if it has one; -// otherwise prints the bytes in it. This is what -// UniversalPrinter::Print() does when PrintTo() is not specialized -// or overloaded for type T. -// -// A user can override this behavior for a class type Foo by defining -// an overload of PrintTo() in the namespace where Foo is defined. We -// give the user this option as sometimes defining a << operator for -// Foo is not desirable (e.g. the coding style may prevent doing it, -// or there is already a << operator but it doesn't do what the user -// wants). -template -void PrintTo(const T& value, ::std::ostream* os) { - // DefaultPrintTo() is overloaded. The type of its first two - // arguments determine which version will be picked. If T is an - // STL-style container, the version for container will be called; if - // T is a pointer, the pointer version will be called; otherwise the - // generic version will be called. - // - // Note that we check for container types here, prior to we check - // for protocol message types in our operator<<. The rationale is: - // - // For protocol messages, we want to give people a chance to - // override Google Mock's format by defining a PrintTo() or - // operator<<. For STL containers, other formats can be - // incompatible with Google Mock's format for the container - // elements; therefore we check for container types here to ensure - // that our format is used. - // - // The second argument of DefaultPrintTo() is needed to bypass a bug - // in Symbian's C++ compiler that prevents it from picking the right - // overload between: - // - // PrintTo(const T& x, ...); - // PrintTo(T* x, ...); - DefaultPrintTo(IsContainerTest(0), is_pointer(), value, os); -} - -// The following list of PrintTo() overloads tells -// UniversalPrinter::Print() how to print standard types (built-in -// types, strings, plain arrays, and pointers). - -// Overloads for various char types. -GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os); -GTEST_API_ void PrintTo(signed char c, ::std::ostream* os); -inline void PrintTo(char c, ::std::ostream* os) { - // When printing a plain char, we always treat it as unsigned. This - // way, the output won't be affected by whether the compiler thinks - // char is signed or not. - PrintTo(static_cast(c), os); -} - -// Overloads for other simple built-in types. -inline void PrintTo(bool x, ::std::ostream* os) { - *os << (x ? "true" : "false"); -} - -// Overload for wchar_t type. -// Prints a wchar_t as a symbol if it is printable or as its internal -// code otherwise and also as its decimal code (except for L'\0'). -// The L'\0' char is printed as "L'\\0'". The decimal code is printed -// as signed integer when wchar_t is implemented by the compiler -// as a signed type and is printed as an unsigned integer when wchar_t -// is implemented as an unsigned type. -GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); - -// Overloads for C strings. -GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); -inline void PrintTo(char* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} - -// signed/unsigned char is often used for representing binary data, so -// we print pointers to it as void* to be safe. -inline void PrintTo(const signed char* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} -inline void PrintTo(signed char* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} -inline void PrintTo(const unsigned char* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} -inline void PrintTo(unsigned char* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} - -// MSVC can be configured to define wchar_t as a typedef of unsigned -// short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native -// type. When wchar_t is a typedef, defining an overload for const -// wchar_t* would cause unsigned short* be printed as a wide string, -// possibly causing invalid memory accesses. -#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) -// Overloads for wide C strings -GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os); -inline void PrintTo(wchar_t* s, ::std::ostream* os) { - PrintTo(ImplicitCast_(s), os); -} -#endif - -// Overload for C arrays. Multi-dimensional arrays are printed -// properly. - -// Prints the given number of elements in an array, without printing -// the curly braces. -template -void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { - UniversalPrint(a[0], os); - for (size_t i = 1; i != count; i++) { - *os << ", "; - UniversalPrint(a[i], os); - } -} - -// Overloads for ::string and ::std::string. -#if GTEST_HAS_GLOBAL_STRING -GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); -inline void PrintTo(const ::string& s, ::std::ostream* os) { - PrintStringTo(s, os); -} -#endif // GTEST_HAS_GLOBAL_STRING - -GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); -inline void PrintTo(const ::std::string& s, ::std::ostream* os) { - PrintStringTo(s, os); -} - -// Overloads for ::wstring and ::std::wstring. -#if GTEST_HAS_GLOBAL_WSTRING -GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); -inline void PrintTo(const ::wstring& s, ::std::ostream* os) { - PrintWideStringTo(s, os); -} -#endif // GTEST_HAS_GLOBAL_WSTRING - -#if GTEST_HAS_STD_WSTRING -GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); -inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { - PrintWideStringTo(s, os); -} -#endif // GTEST_HAS_STD_WSTRING - -#if GTEST_HAS_TR1_TUPLE -// Overload for ::std::tr1::tuple. Needed for printing function arguments, -// which are packed as tuples. - -// Helper function for printing a tuple. T must be instantiated with -// a tuple type. -template -void PrintTupleTo(const T& t, ::std::ostream* os); - -// Overloaded PrintTo() for tuples of various arities. We support -// tuples of up-to 10 fields. The following implementation works -// regardless of whether tr1::tuple is implemented using the -// non-standard variadic template feature or not. - -inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo(const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template -void PrintTo( - const ::std::tr1::tuple& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} -#endif // GTEST_HAS_TR1_TUPLE - -// Overload for std::pair. -template -void PrintTo(const ::std::pair& value, ::std::ostream* os) { - *os << '('; - // We cannot use UniversalPrint(value.first, os) here, as T1 may be - // a reference type. The same for printing value.second. - UniversalPrinter::Print(value.first, os); - *os << ", "; - UniversalPrinter::Print(value.second, os); - *os << ')'; -} - -// Implements printing a non-reference type T by letting the compiler -// pick the right overload of PrintTo() for T. -template -class UniversalPrinter { - public: - // MSVC warns about adding const to a function type, so we want to - // disable the warning. -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4180) // Temporarily disables warning 4180. -#endif // _MSC_VER - - // Note: we deliberately don't call this PrintTo(), as that name - // conflicts with ::testing::internal::PrintTo in the body of the - // function. - static void Print(const T& value, ::std::ostream* os) { - // By default, ::testing::internal::PrintTo() is used for printing - // the value. - // - // Thanks to Koenig look-up, if T is a class and has its own - // PrintTo() function defined in its namespace, that function will - // be visible here. Since it is more specific than the generic ones - // in ::testing::internal, it will be picked by the compiler in the - // following statement - exactly what we want. - PrintTo(value, os); - } - -#ifdef _MSC_VER -# pragma warning(pop) // Restores the warning state. -#endif // _MSC_VER -}; - -// UniversalPrintArray(begin, len, os) prints an array of 'len' -// elements, starting at address 'begin'. -template -void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { - if (len == 0) { - *os << "{}"; - } else { - *os << "{ "; - const size_t kThreshold = 18; - const size_t kChunkSize = 8; - // If the array has more than kThreshold elements, we'll have to - // omit some details by printing only the first and the last - // kChunkSize elements. - // TODO(wan@google.com): let the user control the threshold using a flag. - if (len <= kThreshold) { - PrintRawArrayTo(begin, len, os); - } else { - PrintRawArrayTo(begin, kChunkSize, os); - *os << ", ..., "; - PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os); - } - *os << " }"; - } -} -// This overload prints a (const) char array compactly. -GTEST_API_ void UniversalPrintArray( - const char* begin, size_t len, ::std::ostream* os); - -// This overload prints a (const) wchar_t array compactly. -GTEST_API_ void UniversalPrintArray( - const wchar_t* begin, size_t len, ::std::ostream* os); - -// Implements printing an array type T[N]. -template -class UniversalPrinter { - public: - // Prints the given array, omitting some elements when there are too - // many. - static void Print(const T (&a)[N], ::std::ostream* os) { - UniversalPrintArray(a, N, os); - } -}; - -// Implements printing a reference type T&. -template -class UniversalPrinter { - public: - // MSVC warns about adding const to a function type, so we want to - // disable the warning. -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4180) // Temporarily disables warning 4180. -#endif // _MSC_VER - - static void Print(const T& value, ::std::ostream* os) { - // Prints the address of the value. We use reinterpret_cast here - // as static_cast doesn't compile when T is a function type. - *os << "@" << reinterpret_cast(&value) << " "; - - // Then prints the value itself. - UniversalPrint(value, os); - } - -#ifdef _MSC_VER -# pragma warning(pop) // Restores the warning state. -#endif // _MSC_VER -}; - -// Prints a value tersely: for a reference type, the referenced value -// (but not the address) is printed; for a (const) char pointer, the -// NUL-terminated string (but not the pointer) is printed. - -template -class UniversalTersePrinter { - public: - static void Print(const T& value, ::std::ostream* os) { - UniversalPrint(value, os); - } -}; -template -class UniversalTersePrinter { - public: - static void Print(const T& value, ::std::ostream* os) { - UniversalPrint(value, os); - } -}; -template -class UniversalTersePrinter { - public: - static void Print(const T (&value)[N], ::std::ostream* os) { - UniversalPrinter::Print(value, os); - } -}; -template <> -class UniversalTersePrinter { - public: - static void Print(const char* str, ::std::ostream* os) { - if (str == NULL) { - *os << "NULL"; - } else { - UniversalPrint(string(str), os); - } - } -}; -template <> -class UniversalTersePrinter { - public: - static void Print(char* str, ::std::ostream* os) { - UniversalTersePrinter::Print(str, os); - } -}; - -#if GTEST_HAS_STD_WSTRING -template <> -class UniversalTersePrinter { - public: - static void Print(const wchar_t* str, ::std::ostream* os) { - if (str == NULL) { - *os << "NULL"; - } else { - UniversalPrint(::std::wstring(str), os); - } - } -}; -#endif - -template <> -class UniversalTersePrinter { - public: - static void Print(wchar_t* str, ::std::ostream* os) { - UniversalTersePrinter::Print(str, os); - } -}; - -template -void UniversalTersePrint(const T& value, ::std::ostream* os) { - UniversalTersePrinter::Print(value, os); -} - -// Prints a value using the type inferred by the compiler. The -// difference between this and UniversalTersePrint() is that for a -// (const) char pointer, this prints both the pointer and the -// NUL-terminated string. -template -void UniversalPrint(const T& value, ::std::ostream* os) { - // A workarond for the bug in VC++ 7.1 that prevents us from instantiating - // UniversalPrinter with T directly. - typedef T T1; - UniversalPrinter::Print(value, os); -} - -#if GTEST_HAS_TR1_TUPLE -typedef ::std::vector Strings; - -// This helper template allows PrintTo() for tuples and -// UniversalTersePrintTupleFieldsToStrings() to be defined by -// induction on the number of tuple fields. The idea is that -// TuplePrefixPrinter::PrintPrefixTo(t, os) prints the first N -// fields in tuple t, and can be defined in terms of -// TuplePrefixPrinter. - -// The inductive case. -template -struct TuplePrefixPrinter { - // Prints the first N fields of a tuple. - template - static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { - TuplePrefixPrinter::PrintPrefixTo(t, os); - *os << ", "; - UniversalPrinter::type> - ::Print(::std::tr1::get(t), os); - } - - // Tersely prints the first N fields of a tuple to a string vector, - // one element for each field. - template - static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { - TuplePrefixPrinter::TersePrintPrefixToStrings(t, strings); - ::std::stringstream ss; - UniversalTersePrint(::std::tr1::get(t), &ss); - strings->push_back(ss.str()); - } -}; - -// Base cases. -template <> -struct TuplePrefixPrinter<0> { - template - static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} - - template - static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} -}; -// We have to specialize the entire TuplePrefixPrinter<> class -// template here, even though the definition of -// TersePrintPrefixToStrings() is the same as the generic version, as -// Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't -// support specializing a method template of a class template. -template <> -struct TuplePrefixPrinter<1> { - template - static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { - UniversalPrinter::type>:: - Print(::std::tr1::get<0>(t), os); - } - - template - static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { - ::std::stringstream ss; - UniversalTersePrint(::std::tr1::get<0>(t), &ss); - strings->push_back(ss.str()); - } -}; - -// Helper function for printing a tuple. T must be instantiated with -// a tuple type. -template -void PrintTupleTo(const T& t, ::std::ostream* os) { - *os << "("; - TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: - PrintPrefixTo(t, os); - *os << ")"; -} - -// Prints the fields of a tuple tersely to a string vector, one -// element for each field. See the comment before -// UniversalTersePrint() for how we define "tersely". -template -Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { - Strings result; - TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: - TersePrintPrefixToStrings(value, &result); - return result; -} -#endif // GTEST_HAS_TR1_TUPLE - -} // namespace internal - -template -::std::string PrintToString(const T& value) { - ::std::stringstream ss; - internal::UniversalTersePrinter::Print(value, &ss); - return ss.str(); -} - -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ - -#if GTEST_HAS_PARAM_TEST - -namespace testing { -namespace internal { - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Outputs a message explaining invalid registration of different -// fixture class for the same test case. This may happen when -// TEST_P macro is used to define two tests with the same name -// but in different namespaces. -GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, - const char* file, int line); - -template class ParamGeneratorInterface; -template class ParamGenerator; - -// Interface for iterating over elements provided by an implementation -// of ParamGeneratorInterface. -template -class ParamIteratorInterface { - public: - virtual ~ParamIteratorInterface() {} - // A pointer to the base generator instance. - // Used only for the purposes of iterator comparison - // to make sure that two iterators belong to the same generator. - virtual const ParamGeneratorInterface* BaseGenerator() const = 0; - // Advances iterator to point to the next element - // provided by the generator. The caller is responsible - // for not calling Advance() on an iterator equal to - // BaseGenerator()->End(). - virtual void Advance() = 0; - // Clones the iterator object. Used for implementing copy semantics - // of ParamIterator. - virtual ParamIteratorInterface* Clone() const = 0; - // Dereferences the current iterator and provides (read-only) access - // to the pointed value. It is the caller's responsibility not to call - // Current() on an iterator equal to BaseGenerator()->End(). - // Used for implementing ParamGenerator::operator*(). - virtual const T* Current() const = 0; - // Determines whether the given iterator and other point to the same - // element in the sequence generated by the generator. - // Used for implementing ParamGenerator::operator==(). - virtual bool Equals(const ParamIteratorInterface& other) const = 0; -}; - -// Class iterating over elements provided by an implementation of -// ParamGeneratorInterface. It wraps ParamIteratorInterface -// and implements the const forward iterator concept. -template -class ParamIterator { - public: - typedef T value_type; - typedef const T& reference; - typedef ptrdiff_t difference_type; - - // ParamIterator assumes ownership of the impl_ pointer. - ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} - ParamIterator& operator=(const ParamIterator& other) { - if (this != &other) - impl_.reset(other.impl_->Clone()); - return *this; - } - - const T& operator*() const { return *impl_->Current(); } - const T* operator->() const { return impl_->Current(); } - // Prefix version of operator++. - ParamIterator& operator++() { - impl_->Advance(); - return *this; - } - // Postfix version of operator++. - ParamIterator operator++(int /*unused*/) { - ParamIteratorInterface* clone = impl_->Clone(); - impl_->Advance(); - return ParamIterator(clone); - } - bool operator==(const ParamIterator& other) const { - return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); - } - bool operator!=(const ParamIterator& other) const { - return !(*this == other); - } - - private: - friend class ParamGenerator; - explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} - scoped_ptr > impl_; -}; - -// ParamGeneratorInterface is the binary interface to access generators -// defined in other translation units. -template -class ParamGeneratorInterface { - public: - typedef T ParamType; - - virtual ~ParamGeneratorInterface() {} - - // Generator interface definition - virtual ParamIteratorInterface* Begin() const = 0; - virtual ParamIteratorInterface* End() const = 0; -}; - -// Wraps ParamGeneratorInterface and provides general generator syntax -// compatible with the STL Container concept. -// This class implements copy initialization semantics and the contained -// ParamGeneratorInterface instance is shared among all copies -// of the original object. This is possible because that instance is immutable. -template -class ParamGenerator { - public: - typedef ParamIterator iterator; - - explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} - ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} - - ParamGenerator& operator=(const ParamGenerator& other) { - impl_ = other.impl_; - return *this; - } - - iterator begin() const { return iterator(impl_->Begin()); } - iterator end() const { return iterator(impl_->End()); } - - private: - linked_ptr > impl_; -}; - -// Generates values from a range of two comparable values. Can be used to -// generate sequences of user-defined types that implement operator+() and -// operator<(). -// This class is used in the Range() function. -template -class RangeGenerator : public ParamGeneratorInterface { - public: - RangeGenerator(T begin, T end, IncrementT step) - : begin_(begin), end_(end), - step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} - virtual ~RangeGenerator() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, begin_, 0, step_); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, end_, end_index_, step_); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, T value, int index, - IncrementT step) - : base_(base), value_(value), index_(index), step_(step) {} - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - virtual void Advance() { - value_ = value_ + step_; - index_++; - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const T* Current() const { return &value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const int other_index = - CheckedDowncastToActualType(&other)->index_; - return index_ == other_index; - } - - private: - Iterator(const Iterator& other) - : ParamIteratorInterface(), - base_(other.base_), value_(other.value_), index_(other.index_), - step_(other.step_) {} - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - T value_; - int index_; - const IncrementT step_; - }; // class RangeGenerator::Iterator - - static int CalculateEndIndex(const T& begin, - const T& end, - const IncrementT& step) { - int end_index = 0; - for (T i = begin; i < end; i = i + step) - end_index++; - return end_index; - } - - // No implementation - assignment is unsupported. - void operator=(const RangeGenerator& other); - - const T begin_; - const T end_; - const IncrementT step_; - // The index for the end() iterator. All the elements in the generated - // sequence are indexed (0-based) to aid iterator comparison. - const int end_index_; -}; // class RangeGenerator - - -// Generates values from a pair of STL-style iterators. Used in the -// ValuesIn() function. The elements are copied from the source range -// since the source can be located on the stack, and the generator -// is likely to persist beyond that stack frame. -template -class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { - public: - template - ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) - : container_(begin, end) {} - virtual ~ValuesInIteratorRangeGenerator() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, container_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, container_.end()); - } - - private: - typedef typename ::std::vector ContainerType; - - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - typename ContainerType::const_iterator iterator) - : base_(base), iterator_(iterator) {} - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - virtual void Advance() { - ++iterator_; - value_.reset(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - // We need to use cached value referenced by iterator_ because *iterator_ - // can return a temporary object (and of type other then T), so just - // having "return &*iterator_;" doesn't work. - // value_ is updated here and not in Advance() because Advance() - // can advance iterator_ beyond the end of the range, and we cannot - // detect that fact. The client code, on the other hand, is - // responsible for not calling Current() on an out-of-range iterator. - virtual const T* Current() const { - if (value_.get() == NULL) - value_.reset(new T(*iterator_)); - return value_.get(); - } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - return iterator_ == - CheckedDowncastToActualType(&other)->iterator_; - } - - private: - Iterator(const Iterator& other) - // The explicit constructor call suppresses a false warning - // emitted by gcc when supplied with the -Wextra option. - : ParamIteratorInterface(), - base_(other.base_), - iterator_(other.iterator_) {} - - const ParamGeneratorInterface* const base_; - typename ContainerType::const_iterator iterator_; - // A cached value of *iterator_. We keep it here to allow access by - // pointer in the wrapping iterator's operator->(). - // value_ needs to be mutable to be accessed in Current(). - // Use of scoped_ptr helps manage cached value's lifetime, - // which is bound by the lifespan of the iterator itself. - mutable scoped_ptr value_; - }; // class ValuesInIteratorRangeGenerator::Iterator - - // No implementation - assignment is unsupported. - void operator=(const ValuesInIteratorRangeGenerator& other); - - const ContainerType container_; -}; // class ValuesInIteratorRangeGenerator - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Stores a parameter value and later creates tests parameterized with that -// value. -template -class ParameterizedTestFactory : public TestFactoryBase { - public: - typedef typename TestClass::ParamType ParamType; - explicit ParameterizedTestFactory(ParamType parameter) : - parameter_(parameter) {} - virtual Test* CreateTest() { - TestClass::SetParam(¶meter_); - return new TestClass(); - } - - private: - const ParamType parameter_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); -}; - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// TestMetaFactoryBase is a base class for meta-factories that create -// test factories for passing into MakeAndRegisterTestInfo function. -template -class TestMetaFactoryBase { - public: - virtual ~TestMetaFactoryBase() {} - - virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; -}; - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// TestMetaFactory creates test factories for passing into -// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives -// ownership of test factory pointer, same factory object cannot be passed -// into that method twice. But ParameterizedTestCaseInfo is going to call -// it for each Test/Parameter value combination. Thus it needs meta factory -// creator class. -template -class TestMetaFactory - : public TestMetaFactoryBase { - public: - typedef typename TestCase::ParamType ParamType; - - TestMetaFactory() {} - - virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { - return new ParameterizedTestFactory(parameter); - } - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); -}; - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// ParameterizedTestCaseInfoBase is a generic interface -// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase -// accumulates test information provided by TEST_P macro invocations -// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations -// and uses that information to register all resulting test instances -// in RegisterTests method. The ParameterizeTestCaseRegistry class holds -// a collection of pointers to the ParameterizedTestCaseInfo objects -// and calls RegisterTests() on each of them when asked. -class ParameterizedTestCaseInfoBase { - public: - virtual ~ParameterizedTestCaseInfoBase() {} - - // Base part of test case name for display purposes. - virtual const string& GetTestCaseName() const = 0; - // Test case id to verify identity. - virtual TypeId GetTestCaseTypeId() const = 0; - // UnitTest class invokes this method to register tests in this - // test case right before running them in RUN_ALL_TESTS macro. - // This method should not be called more then once on any single - // instance of a ParameterizedTestCaseInfoBase derived class. - virtual void RegisterTests() = 0; - - protected: - ParameterizedTestCaseInfoBase() {} - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); -}; - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P -// macro invocations for a particular test case and generators -// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that -// test case. It registers tests with all values generated by all -// generators when asked. -template -class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { - public: - // ParamType and GeneratorCreationFunc are private types but are required - // for declarations of public methods AddTestPattern() and - // AddTestCaseInstantiation(). - typedef typename TestCase::ParamType ParamType; - // A function that returns an instance of appropriate generator type. - typedef ParamGenerator(GeneratorCreationFunc)(); - - explicit ParameterizedTestCaseInfo(const char* name) - : test_case_name_(name) {} - - // Test case base name for display purposes. - virtual const string& GetTestCaseName() const { return test_case_name_; } - // Test case id to verify identity. - virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } - // TEST_P macro uses AddTestPattern() to record information - // about a single test in a LocalTestInfo structure. - // test_case_name is the base name of the test case (without invocation - // prefix). test_base_name is the name of an individual test without - // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is - // test case base name and DoBar is test base name. - void AddTestPattern(const char* test_case_name, - const char* test_base_name, - TestMetaFactoryBase* meta_factory) { - tests_.push_back(linked_ptr(new TestInfo(test_case_name, - test_base_name, - meta_factory))); - } - // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information - // about a generator. - int AddTestCaseInstantiation(const string& instantiation_name, - GeneratorCreationFunc* func, - const char* /* file */, - int /* line */) { - instantiations_.push_back(::std::make_pair(instantiation_name, func)); - return 0; // Return value used only to run this method in namespace scope. - } - // UnitTest class invokes this method to register tests in this test case - // test cases right before running tests in RUN_ALL_TESTS macro. - // This method should not be called more then once on any single - // instance of a ParameterizedTestCaseInfoBase derived class. - // UnitTest has a guard to prevent from calling this method more then once. - virtual void RegisterTests() { - for (typename TestInfoContainer::iterator test_it = tests_.begin(); - test_it != tests_.end(); ++test_it) { - linked_ptr test_info = *test_it; - for (typename InstantiationContainer::iterator gen_it = - instantiations_.begin(); gen_it != instantiations_.end(); - ++gen_it) { - const string& instantiation_name = gen_it->first; - ParamGenerator generator((*gen_it->second)()); - - string test_case_name; - if ( !instantiation_name.empty() ) - test_case_name = instantiation_name + "/"; - test_case_name += test_info->test_case_base_name; - - int i = 0; - for (typename ParamGenerator::iterator param_it = - generator.begin(); - param_it != generator.end(); ++param_it, ++i) { - Message test_name_stream; - test_name_stream << test_info->test_base_name << "/" << i; - MakeAndRegisterTestInfo( - test_case_name.c_str(), - test_name_stream.GetString().c_str(), - NULL, // No type parameter. - PrintToString(*param_it).c_str(), - GetTestCaseTypeId(), - TestCase::SetUpTestCase, - TestCase::TearDownTestCase, - test_info->test_meta_factory->CreateTestFactory(*param_it)); - } // for param_it - } // for gen_it - } // for test_it - } // RegisterTests - - private: - // LocalTestInfo structure keeps information about a single test registered - // with TEST_P macro. - struct TestInfo { - TestInfo(const char* a_test_case_base_name, - const char* a_test_base_name, - TestMetaFactoryBase* a_test_meta_factory) : - test_case_base_name(a_test_case_base_name), - test_base_name(a_test_base_name), - test_meta_factory(a_test_meta_factory) {} - - const string test_case_base_name; - const string test_base_name; - const scoped_ptr > test_meta_factory; - }; - typedef ::std::vector > TestInfoContainer; - // Keeps pairs of - // received from INSTANTIATE_TEST_CASE_P macros. - typedef ::std::vector > - InstantiationContainer; - - const string test_case_name_; - TestInfoContainer tests_; - InstantiationContainer instantiations_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); -}; // class ParameterizedTestCaseInfo - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase -// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P -// macros use it to locate their corresponding ParameterizedTestCaseInfo -// descriptors. -class ParameterizedTestCaseRegistry { - public: - ParameterizedTestCaseRegistry() {} - ~ParameterizedTestCaseRegistry() { - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - delete *it; - } - } - - // Looks up or creates and returns a structure containing information about - // tests and instantiations of a particular test case. - template - ParameterizedTestCaseInfo* GetTestCasePatternHolder( - const char* test_case_name, - const char* file, - int line) { - ParameterizedTestCaseInfo* typed_test_info = NULL; - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - if ((*it)->GetTestCaseName() == test_case_name) { - if ((*it)->GetTestCaseTypeId() != GetTypeId()) { - // Complain about incorrect usage of Google Test facilities - // and terminate the program since we cannot guaranty correct - // test case setup and tear-down in this case. - ReportInvalidTestCaseType(test_case_name, file, line); - posix::Abort(); - } else { - // At this point we are sure that the object we found is of the same - // type we are looking for, so we downcast it to that type - // without further checks. - typed_test_info = CheckedDowncastToActualType< - ParameterizedTestCaseInfo >(*it); - } - break; - } - } - if (typed_test_info == NULL) { - typed_test_info = new ParameterizedTestCaseInfo(test_case_name); - test_case_infos_.push_back(typed_test_info); - } - return typed_test_info; - } - void RegisterTests() { - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - (*it)->RegisterTests(); - } - } - - private: - typedef ::std::vector TestCaseInfoContainer; - - TestCaseInfoContainer test_case_infos_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); -}; - -} // namespace internal -} // namespace testing - -#endif // GTEST_HAS_PARAM_TEST - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ -// This file was GENERATED by command: -// pump.py gtest-param-util-generated.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: vladl@google.com (Vlad Losev) - -// Type and function utilities for implementing parameterized tests. -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently Google Test supports at most 50 arguments in Values, -// and at most 10 arguments in Combine. Please contact -// googletestframework@googlegroups.com if you need more. -// Please note that the number of arguments to Combine is limited -// by the maximum arity of the implementation of tr1::tuple which is -// currently set at 10. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ - -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. - -#if GTEST_HAS_PARAM_TEST - -namespace testing { - -// Forward declarations of ValuesIn(), which is implemented in -// include/gtest/gtest-param-test.h. -template -internal::ParamGenerator< - typename ::testing::internal::IteratorTraits::value_type> -ValuesIn(ForwardIterator begin, ForwardIterator end); - -template -internal::ParamGenerator ValuesIn(const T (&array)[N]); - -template -internal::ParamGenerator ValuesIn( - const Container& container); - -namespace internal { - -// Used in the Values() function to provide polymorphic capabilities. -template -class ValueArray1 { - public: - explicit ValueArray1(T1 v1) : v1_(v1) {} - - template - operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray1& other); - - const T1 v1_; -}; - -template -class ValueArray2 { - public: - ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray2& other); - - const T1 v1_; - const T2 v2_; -}; - -template -class ValueArray3 { - public: - ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray3& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; -}; - -template -class ValueArray4 { - public: - ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray4& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; -}; - -template -class ValueArray5 { - public: - ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray5& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; -}; - -template -class ValueArray6 { - public: - ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray6& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; -}; - -template -class ValueArray7 { - public: - ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray7& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; -}; - -template -class ValueArray8 { - public: - ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray8& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; -}; - -template -class ValueArray9 { - public: - ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray9& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; -}; - -template -class ValueArray10 { - public: - ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray10& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; -}; - -template -class ValueArray11 { - public: - ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray11& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; -}; - -template -class ValueArray12 { - public: - ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray12& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; -}; - -template -class ValueArray13 { - public: - ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray13& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; -}; - -template -class ValueArray14 { - public: - ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray14& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; -}; - -template -class ValueArray15 { - public: - ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray15& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; -}; - -template -class ValueArray16 { - public: - ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray16& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; -}; - -template -class ValueArray17 { - public: - ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray17& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; -}; - -template -class ValueArray18 { - public: - ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray18& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; -}; - -template -class ValueArray19 { - public: - ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray19& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; -}; - -template -class ValueArray20 { - public: - ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray20& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; -}; - -template -class ValueArray21 { - public: - ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray21& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; -}; - -template -class ValueArray22 { - public: - ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray22& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; -}; - -template -class ValueArray23 { - public: - ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray23& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; -}; - -template -class ValueArray24 { - public: - ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray24& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; -}; - -template -class ValueArray25 { - public: - ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray25& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; -}; - -template -class ValueArray26 { - public: - ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray26& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; -}; - -template -class ValueArray27 { - public: - ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray27& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; -}; - -template -class ValueArray28 { - public: - ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray28& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; -}; - -template -class ValueArray29 { - public: - ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray29& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; -}; - -template -class ValueArray30 { - public: - ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray30& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; -}; - -template -class ValueArray31 { - public: - ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray31& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; -}; - -template -class ValueArray32 { - public: - ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray32& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; -}; - -template -class ValueArray33 { - public: - ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, - T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray33& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; -}; - -template -class ValueArray34 { - public: - ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray34& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; -}; - -template -class ValueArray35 { - public: - ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), - v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray35& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; -}; - -template -class ValueArray36 { - public: - ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), - v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray36& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; -}; - -template -class ValueArray37 { - public: - ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), - v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), - v36_(v36), v37_(v37) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray37& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; -}; - -template -class ValueArray38 { - public: - ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray38& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; -}; - -template -class ValueArray39 { - public: - ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray39& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; -}; - -template -class ValueArray40 { - public: - ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), - v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), - v40_(v40) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray40& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; -}; - -template -class ValueArray41 { - public: - ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, - T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray41& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; -}; - -template -class ValueArray42 { - public: - ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray42& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; -}; - -template -class ValueArray43 { - public: - ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), - v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), - v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray43& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; -}; - -template -class ValueArray44 { - public: - ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), - v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), - v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), - v43_(v43), v44_(v44) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray44& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; -}; - -template -class ValueArray45 { - public: - ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), - v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), - v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), - v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray45& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; -}; - -template -class ValueArray46 { - public: - ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), - v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_), static_cast(v46_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray46& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; -}; - -template -class ValueArray47 { - public: - ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), - v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), - v47_(v47) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_), static_cast(v46_), static_cast(v47_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray47& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; -}; - -template -class ValueArray48 { - public: - ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), - v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), - v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), - v46_(v46), v47_(v47), v48_(v48) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_), static_cast(v46_), static_cast(v47_), - static_cast(v48_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray48& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; -}; - -template -class ValueArray49 { - public: - ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, - T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), - v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_), static_cast(v46_), static_cast(v47_), - static_cast(v48_), static_cast(v49_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray49& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; - const T49 v49_; -}; - -template -class ValueArray50 { - public: - ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, - T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), - v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} - - template - operator ParamGenerator() const { - const T array[] = {static_cast(v1_), static_cast(v2_), - static_cast(v3_), static_cast(v4_), static_cast(v5_), - static_cast(v6_), static_cast(v7_), static_cast(v8_), - static_cast(v9_), static_cast(v10_), static_cast(v11_), - static_cast(v12_), static_cast(v13_), static_cast(v14_), - static_cast(v15_), static_cast(v16_), static_cast(v17_), - static_cast(v18_), static_cast(v19_), static_cast(v20_), - static_cast(v21_), static_cast(v22_), static_cast(v23_), - static_cast(v24_), static_cast(v25_), static_cast(v26_), - static_cast(v27_), static_cast(v28_), static_cast(v29_), - static_cast(v30_), static_cast(v31_), static_cast(v32_), - static_cast(v33_), static_cast(v34_), static_cast(v35_), - static_cast(v36_), static_cast(v37_), static_cast(v38_), - static_cast(v39_), static_cast(v40_), static_cast(v41_), - static_cast(v42_), static_cast(v43_), static_cast(v44_), - static_cast(v45_), static_cast(v46_), static_cast(v47_), - static_cast(v48_), static_cast(v49_), static_cast(v50_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray50& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; - const T49 v49_; - const T50 v50_; -}; - -# if GTEST_HAS_COMBINE -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Generates values from the Cartesian product of values produced -// by the argument generators. -// -template -class CartesianProductGenerator2 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator2(const ParamGenerator& g1, - const ParamGenerator& g2) - : g1_(g1), g2_(g2) {} - virtual ~CartesianProductGenerator2() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current2_; - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - ParamType current_value_; - }; // class CartesianProductGenerator2::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator2& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; -}; // class CartesianProductGenerator2 - - -template -class CartesianProductGenerator3 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator3(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3) - : g1_(g1), g2_(g2), g3_(g3) {} - virtual ~CartesianProductGenerator3() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current3_; - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - ParamType current_value_; - }; // class CartesianProductGenerator3::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator3& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; -}; // class CartesianProductGenerator3 - - -template -class CartesianProductGenerator4 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator4(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} - virtual ~CartesianProductGenerator4() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current4_; - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - ParamType current_value_; - }; // class CartesianProductGenerator4::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator4& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; -}; // class CartesianProductGenerator4 - - -template -class CartesianProductGenerator5 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator5(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} - virtual ~CartesianProductGenerator5() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current5_; - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - ParamType current_value_; - }; // class CartesianProductGenerator5::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator5& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; -}; // class CartesianProductGenerator5 - - -template -class CartesianProductGenerator6 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator6(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5, - const ParamGenerator& g6) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} - virtual ~CartesianProductGenerator6() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5, - const ParamGenerator& g6, - const typename ParamGenerator::iterator& current6) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current6_; - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - const typename ParamGenerator::iterator begin6_; - const typename ParamGenerator::iterator end6_; - typename ParamGenerator::iterator current6_; - ParamType current_value_; - }; // class CartesianProductGenerator6::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator6& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; - const ParamGenerator g6_; -}; // class CartesianProductGenerator6 - - -template -class CartesianProductGenerator7 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator7(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5, - const ParamGenerator& g6, const ParamGenerator& g7) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} - virtual ~CartesianProductGenerator7() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5, - const ParamGenerator& g6, - const typename ParamGenerator::iterator& current6, - const ParamGenerator& g7, - const typename ParamGenerator::iterator& current7) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current7_; - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - const typename ParamGenerator::iterator begin6_; - const typename ParamGenerator::iterator end6_; - typename ParamGenerator::iterator current6_; - const typename ParamGenerator::iterator begin7_; - const typename ParamGenerator::iterator end7_; - typename ParamGenerator::iterator current7_; - ParamType current_value_; - }; // class CartesianProductGenerator7::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator7& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; - const ParamGenerator g6_; - const ParamGenerator g7_; -}; // class CartesianProductGenerator7 - - -template -class CartesianProductGenerator8 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator8(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5, - const ParamGenerator& g6, const ParamGenerator& g7, - const ParamGenerator& g8) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), - g8_(g8) {} - virtual ~CartesianProductGenerator8() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5, - const ParamGenerator& g6, - const typename ParamGenerator::iterator& current6, - const ParamGenerator& g7, - const typename ParamGenerator::iterator& current7, - const ParamGenerator& g8, - const typename ParamGenerator::iterator& current8) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current8_; - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - const typename ParamGenerator::iterator begin6_; - const typename ParamGenerator::iterator end6_; - typename ParamGenerator::iterator current6_; - const typename ParamGenerator::iterator begin7_; - const typename ParamGenerator::iterator end7_; - typename ParamGenerator::iterator current7_; - const typename ParamGenerator::iterator begin8_; - const typename ParamGenerator::iterator end8_; - typename ParamGenerator::iterator current8_; - ParamType current_value_; - }; // class CartesianProductGenerator8::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator8& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; - const ParamGenerator g6_; - const ParamGenerator g7_; - const ParamGenerator g8_; -}; // class CartesianProductGenerator8 - - -template -class CartesianProductGenerator9 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator9(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5, - const ParamGenerator& g6, const ParamGenerator& g7, - const ParamGenerator& g8, const ParamGenerator& g9) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9) {} - virtual ~CartesianProductGenerator9() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end(), g9_, g9_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5, - const ParamGenerator& g6, - const typename ParamGenerator::iterator& current6, - const ParamGenerator& g7, - const typename ParamGenerator::iterator& current7, - const ParamGenerator& g8, - const typename ParamGenerator::iterator& current8, - const ParamGenerator& g9, - const typename ParamGenerator::iterator& current9) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8), - begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current9_; - if (current9_ == end9_) { - current9_ = begin9_; - ++current8_; - } - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_ && - current9_ == typed_other->current9_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_), - begin9_(other.begin9_), - end9_(other.end9_), - current9_(other.current9_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_, - *current9_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_ || - current9_ == end9_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - const typename ParamGenerator::iterator begin6_; - const typename ParamGenerator::iterator end6_; - typename ParamGenerator::iterator current6_; - const typename ParamGenerator::iterator begin7_; - const typename ParamGenerator::iterator end7_; - typename ParamGenerator::iterator current7_; - const typename ParamGenerator::iterator begin8_; - const typename ParamGenerator::iterator end8_; - typename ParamGenerator::iterator current8_; - const typename ParamGenerator::iterator begin9_; - const typename ParamGenerator::iterator end9_; - typename ParamGenerator::iterator current9_; - ParamType current_value_; - }; // class CartesianProductGenerator9::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator9& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; - const ParamGenerator g6_; - const ParamGenerator g7_; - const ParamGenerator g8_; - const ParamGenerator g9_; -}; // class CartesianProductGenerator9 - - -template -class CartesianProductGenerator10 - : public ParamGeneratorInterface< ::std::tr1::tuple > { - public: - typedef ::std::tr1::tuple ParamType; - - CartesianProductGenerator10(const ParamGenerator& g1, - const ParamGenerator& g2, const ParamGenerator& g3, - const ParamGenerator& g4, const ParamGenerator& g5, - const ParamGenerator& g6, const ParamGenerator& g7, - const ParamGenerator& g8, const ParamGenerator& g9, - const ParamGenerator& g10) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9), g10_(g10) {} - virtual ~CartesianProductGenerator10() {} - - virtual ParamIteratorInterface* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); - } - virtual ParamIteratorInterface* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end(), g9_, g9_.end(), g10_, g10_.end()); - } - - private: - class Iterator : public ParamIteratorInterface { - public: - Iterator(const ParamGeneratorInterface* base, - const ParamGenerator& g1, - const typename ParamGenerator::iterator& current1, - const ParamGenerator& g2, - const typename ParamGenerator::iterator& current2, - const ParamGenerator& g3, - const typename ParamGenerator::iterator& current3, - const ParamGenerator& g4, - const typename ParamGenerator::iterator& current4, - const ParamGenerator& g5, - const typename ParamGenerator::iterator& current5, - const ParamGenerator& g6, - const typename ParamGenerator::iterator& current6, - const ParamGenerator& g7, - const typename ParamGenerator::iterator& current7, - const ParamGenerator& g8, - const typename ParamGenerator::iterator& current8, - const ParamGenerator& g9, - const typename ParamGenerator::iterator& current9, - const ParamGenerator& g10, - const typename ParamGenerator::iterator& current10) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8), - begin9_(g9.begin()), end9_(g9.end()), current9_(current9), - begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current10_; - if (current10_ == end10_) { - current10_ = begin10_; - ++current9_; - } - if (current9_ == end9_) { - current9_ = begin9_; - ++current8_; - } - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return ¤t_value_; } - virtual bool Equals(const ParamIteratorInterface& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_ && - current9_ == typed_other->current9_ && - current10_ == typed_other->current10_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_), - begin9_(other.begin9_), - end9_(other.end9_), - current9_(other.current9_), - begin10_(other.begin10_), - end10_(other.end10_), - current10_(other.current10_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_ = ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_, - *current9_, *current10_); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_ || - current9_ == end9_ || - current10_ == end10_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator::iterator begin1_; - const typename ParamGenerator::iterator end1_; - typename ParamGenerator::iterator current1_; - const typename ParamGenerator::iterator begin2_; - const typename ParamGenerator::iterator end2_; - typename ParamGenerator::iterator current2_; - const typename ParamGenerator::iterator begin3_; - const typename ParamGenerator::iterator end3_; - typename ParamGenerator::iterator current3_; - const typename ParamGenerator::iterator begin4_; - const typename ParamGenerator::iterator end4_; - typename ParamGenerator::iterator current4_; - const typename ParamGenerator::iterator begin5_; - const typename ParamGenerator::iterator end5_; - typename ParamGenerator::iterator current5_; - const typename ParamGenerator::iterator begin6_; - const typename ParamGenerator::iterator end6_; - typename ParamGenerator::iterator current6_; - const typename ParamGenerator::iterator begin7_; - const typename ParamGenerator::iterator end7_; - typename ParamGenerator::iterator current7_; - const typename ParamGenerator::iterator begin8_; - const typename ParamGenerator::iterator end8_; - typename ParamGenerator::iterator current8_; - const typename ParamGenerator::iterator begin9_; - const typename ParamGenerator::iterator end9_; - typename ParamGenerator::iterator current9_; - const typename ParamGenerator::iterator begin10_; - const typename ParamGenerator::iterator end10_; - typename ParamGenerator::iterator current10_; - ParamType current_value_; - }; // class CartesianProductGenerator10::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator10& other); - - const ParamGenerator g1_; - const ParamGenerator g2_; - const ParamGenerator g3_; - const ParamGenerator g4_; - const ParamGenerator g5_; - const ParamGenerator g6_; - const ParamGenerator g7_; - const ParamGenerator g8_; - const ParamGenerator g9_; - const ParamGenerator g10_; -}; // class CartesianProductGenerator10 - - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Helper classes providing Combine() with polymorphic features. They allow -// casting CartesianProductGeneratorN to ParamGenerator if T is -// convertible to U. -// -template -class CartesianProductHolder2 { - public: -CartesianProductHolder2(const Generator1& g1, const Generator2& g2) - : g1_(g1), g2_(g2) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator2( - static_cast >(g1_), - static_cast >(g2_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder2& other); - - const Generator1 g1_; - const Generator2 g2_; -}; // class CartesianProductHolder2 - -template -class CartesianProductHolder3 { - public: -CartesianProductHolder3(const Generator1& g1, const Generator2& g2, - const Generator3& g3) - : g1_(g1), g2_(g2), g3_(g3) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator3( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder3& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; -}; // class CartesianProductHolder3 - -template -class CartesianProductHolder4 { - public: -CartesianProductHolder4(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator4( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder4& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; -}; // class CartesianProductHolder4 - -template -class CartesianProductHolder5 { - public: -CartesianProductHolder5(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator5( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder5& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; -}; // class CartesianProductHolder5 - -template -class CartesianProductHolder6 { - public: -CartesianProductHolder6(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator6( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_), - static_cast >(g6_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder6& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; -}; // class CartesianProductHolder6 - -template -class CartesianProductHolder7 { - public: -CartesianProductHolder7(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator7( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_), - static_cast >(g6_), - static_cast >(g7_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder7& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; -}; // class CartesianProductHolder7 - -template -class CartesianProductHolder8 { - public: -CartesianProductHolder8(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), - g8_(g8) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator8( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_), - static_cast >(g6_), - static_cast >(g7_), - static_cast >(g8_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder8& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; -}; // class CartesianProductHolder8 - -template -class CartesianProductHolder9 { - public: -CartesianProductHolder9(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8, - const Generator9& g9) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator9( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_), - static_cast >(g6_), - static_cast >(g7_), - static_cast >(g8_), - static_cast >(g9_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder9& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; - const Generator9 g9_; -}; // class CartesianProductHolder9 - -template -class CartesianProductHolder10 { - public: -CartesianProductHolder10(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8, - const Generator9& g9, const Generator10& g10) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9), g10_(g10) {} - template - operator ParamGenerator< ::std::tr1::tuple >() const { - return ParamGenerator< ::std::tr1::tuple >( - new CartesianProductGenerator10( - static_cast >(g1_), - static_cast >(g2_), - static_cast >(g3_), - static_cast >(g4_), - static_cast >(g5_), - static_cast >(g6_), - static_cast >(g7_), - static_cast >(g8_), - static_cast >(g9_), - static_cast >(g10_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder10& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; - const Generator9 g9_; - const Generator10 g10_; -}; // class CartesianProductHolder10 - -# endif // GTEST_HAS_COMBINE - -} // namespace internal -} // namespace testing - -#endif // GTEST_HAS_PARAM_TEST - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ - -#if GTEST_HAS_PARAM_TEST - -namespace testing { - -// Functions producing parameter generators. -// -// Google Test uses these generators to produce parameters for value- -// parameterized tests. When a parameterized test case is instantiated -// with a particular generator, Google Test creates and runs tests -// for each element in the sequence produced by the generator. -// -// In the following sample, tests from test case FooTest are instantiated -// each three times with parameter values 3, 5, and 8: -// -// class FooTest : public TestWithParam { ... }; -// -// TEST_P(FooTest, TestThis) { -// } -// TEST_P(FooTest, TestThat) { -// } -// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); -// - -// Range() returns generators providing sequences of values in a range. -// -// Synopsis: -// Range(start, end) -// - returns a generator producing a sequence of values {start, start+1, -// start+2, ..., }. -// Range(start, end, step) -// - returns a generator producing a sequence of values {start, start+step, -// start+step+step, ..., }. -// Notes: -// * The generated sequences never include end. For example, Range(1, 5) -// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) -// returns a generator producing {1, 3, 5, 7}. -// * start and end must have the same type. That type may be any integral or -// floating-point type or a user defined type satisfying these conditions: -// * It must be assignable (have operator=() defined). -// * It must have operator+() (operator+(int-compatible type) for -// two-operand version). -// * It must have operator<() defined. -// Elements in the resulting sequences will also have that type. -// * Condition start < end must be satisfied in order for resulting sequences -// to contain any elements. -// -template -internal::ParamGenerator Range(T start, T end, IncrementT step) { - return internal::ParamGenerator( - new internal::RangeGenerator(start, end, step)); -} - -template -internal::ParamGenerator Range(T start, T end) { - return Range(start, end, 1); -} - -// ValuesIn() function allows generation of tests with parameters coming from -// a container. -// -// Synopsis: -// ValuesIn(const T (&array)[N]) -// - returns a generator producing sequences with elements from -// a C-style array. -// ValuesIn(const Container& container) -// - returns a generator producing sequences with elements from -// an STL-style container. -// ValuesIn(Iterator begin, Iterator end) -// - returns a generator producing sequences with elements from -// a range [begin, end) defined by a pair of STL-style iterators. These -// iterators can also be plain C pointers. -// -// Please note that ValuesIn copies the values from the containers -// passed in and keeps them to generate tests in RUN_ALL_TESTS(). -// -// Examples: -// -// This instantiates tests from test case StringTest -// each with C-string values of "foo", "bar", and "baz": -// -// const char* strings[] = {"foo", "bar", "baz"}; -// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); -// -// This instantiates tests from test case StlStringTest -// each with STL strings with values "a" and "b": -// -// ::std::vector< ::std::string> GetParameterStrings() { -// ::std::vector< ::std::string> v; -// v.push_back("a"); -// v.push_back("b"); -// return v; -// } -// -// INSTANTIATE_TEST_CASE_P(CharSequence, -// StlStringTest, -// ValuesIn(GetParameterStrings())); -// -// -// This will also instantiate tests from CharTest -// each with parameter values 'a' and 'b': -// -// ::std::list GetParameterChars() { -// ::std::list list; -// list.push_back('a'); -// list.push_back('b'); -// return list; -// } -// ::std::list l = GetParameterChars(); -// INSTANTIATE_TEST_CASE_P(CharSequence2, -// CharTest, -// ValuesIn(l.begin(), l.end())); -// -template -internal::ParamGenerator< - typename ::testing::internal::IteratorTraits::value_type> -ValuesIn(ForwardIterator begin, ForwardIterator end) { - typedef typename ::testing::internal::IteratorTraits - ::value_type ParamType; - return internal::ParamGenerator( - new internal::ValuesInIteratorRangeGenerator(begin, end)); -} - -template -internal::ParamGenerator ValuesIn(const T (&array)[N]) { - return ValuesIn(array, array + N); -} - -template -internal::ParamGenerator ValuesIn( - const Container& container) { - return ValuesIn(container.begin(), container.end()); -} - -// Values() allows generating tests from explicitly specified list of -// parameters. -// -// Synopsis: -// Values(T v1, T v2, ..., T vN) -// - returns a generator producing sequences with elements v1, v2, ..., vN. -// -// For example, this instantiates tests from test case BarTest each -// with values "one", "two", and "three": -// -// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); -// -// This instantiates tests from test case BazTest each with values 1, 2, 3.5. -// The exact type of values will depend on the type of parameter in BazTest. -// -// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); -// -// Currently, Values() supports from 1 to 50 parameters. -// -template -internal::ValueArray1 Values(T1 v1) { - return internal::ValueArray1(v1); -} - -template -internal::ValueArray2 Values(T1 v1, T2 v2) { - return internal::ValueArray2(v1, v2); -} - -template -internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { - return internal::ValueArray3(v1, v2, v3); -} - -template -internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { - return internal::ValueArray4(v1, v2, v3, v4); -} - -template -internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5) { - return internal::ValueArray5(v1, v2, v3, v4, v5); -} - -template -internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6) { - return internal::ValueArray6(v1, v2, v3, v4, v5, v6); -} - -template -internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7) { - return internal::ValueArray7(v1, v2, v3, v4, v5, - v6, v7); -} - -template -internal::ValueArray8 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { - return internal::ValueArray8(v1, v2, v3, v4, - v5, v6, v7, v8); -} - -template -internal::ValueArray9 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { - return internal::ValueArray9(v1, v2, v3, - v4, v5, v6, v7, v8, v9); -} - -template -internal::ValueArray10 Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { - return internal::ValueArray10(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10); -} - -template -internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11) { - return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); -} - -template -internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12) { - return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); -} - -template -internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13) { - return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); -} - -template -internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { - return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14); -} - -template -internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { - return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15); -} - -template -internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16) { - return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16); -} - -template -internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17) { - return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17); -} - -template -internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18) { - return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18); -} - -template -internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { - return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); -} - -template -internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { - return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); -} - -template -internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { - return internal::ValueArray21(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); -} - -template -internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22) { - return internal::ValueArray22(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22); -} - -template -internal::ValueArray23 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23) { - return internal::ValueArray23(v1, v2, v3, - v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23); -} - -template -internal::ValueArray24 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24) { - return internal::ValueArray24(v1, v2, - v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, - v19, v20, v21, v22, v23, v24); -} - -template -internal::ValueArray25 Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, - T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, - T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { - return internal::ValueArray25(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, - v18, v19, v20, v21, v22, v23, v24, v25); -} - -template -internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26) { - return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, - v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); -} - -template -internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27) { - return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, - v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); -} - -template -internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28) { - return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, - v28); -} - -template -internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29) { - return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, - v27, v28, v29); -} - -template -internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { - return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, - v26, v27, v28, v29, v30); -} - -template -internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { - return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, - v25, v26, v27, v28, v29, v30, v31); -} - -template -internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32) { - return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32); -} - -template -internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33) { - return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); -} - -template -internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, - T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, - T31 v31, T32 v32, T33 v33, T34 v34) { - return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, - v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); -} - -template -internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { - return internal::ValueArray35(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, - v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); -} - -template -internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { - return internal::ValueArray36(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36); -} - -template -internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37) { - return internal::ValueArray37(v1, v2, v3, - v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36, v37); -} - -template -internal::ValueArray38 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37, T38 v38) { - return internal::ValueArray38(v1, v2, - v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, - v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, - v33, v34, v35, v36, v37, v38); -} - -template -internal::ValueArray39 Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37, T38 v38, T39 v39) { - return internal::ValueArray39(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, - v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, - v32, v33, v34, v35, v36, v37, v38, v39); -} - -template -internal::ValueArray40 Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, - T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, - T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, - T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, - T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { - return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, - v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, - v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); -} - -template -internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { - return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, - v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, - v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); -} - -template -internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42) { - return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, - v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, - v42); -} - -template -internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43) { - return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, - v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, - v41, v42, v43); -} - -template -internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44) { - return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, - v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, - v40, v41, v42, v43, v44); -} - -template -internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, - T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, - T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { - return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, - v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, - v39, v40, v41, v42, v43, v44, v45); -} - -template -internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { - return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, - v38, v39, v40, v41, v42, v43, v44, v45, v46); -} - -template -internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { - return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, - v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); -} - -template -internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, - T48 v48) { - return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, - v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, - v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); -} - -template -internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, - T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, - T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, - T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, - T47 v47, T48 v48, T49 v49) { - return internal::ValueArray49(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, - v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, - v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); -} - -template -internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, - T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, - T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { - return internal::ValueArray50(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, - v48, v49, v50); -} - -// Bool() allows generating tests with parameters in a set of (false, true). -// -// Synopsis: -// Bool() -// - returns a generator producing sequences with elements {false, true}. -// -// It is useful when testing code that depends on Boolean flags. Combinations -// of multiple flags can be tested when several Bool()'s are combined using -// Combine() function. -// -// In the following example all tests in the test case FlagDependentTest -// will be instantiated twice with parameters false and true. -// -// class FlagDependentTest : public testing::TestWithParam { -// virtual void SetUp() { -// external_flag = GetParam(); -// } -// } -// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); -// -inline internal::ParamGenerator Bool() { - return Values(false, true); -} - -# if GTEST_HAS_COMBINE -// Combine() allows the user to combine two or more sequences to produce -// values of a Cartesian product of those sequences' elements. -// -// Synopsis: -// Combine(gen1, gen2, ..., genN) -// - returns a generator producing sequences with elements coming from -// the Cartesian product of elements from the sequences generated by -// gen1, gen2, ..., genN. The sequence elements will have a type of -// tuple where T1, T2, ..., TN are the types -// of elements from sequences produces by gen1, gen2, ..., genN. -// -// Combine can have up to 10 arguments. This number is currently limited -// by the maximum number of elements in the tuple implementation used by Google -// Test. -// -// Example: -// -// This will instantiate tests in test case AnimalTest each one with -// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), -// tuple("dog", BLACK), and tuple("dog", WHITE): -// -// enum Color { BLACK, GRAY, WHITE }; -// class AnimalTest -// : public testing::TestWithParam > {...}; -// -// TEST_P(AnimalTest, AnimalLooksNice) {...} -// -// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, -// Combine(Values("cat", "dog"), -// Values(BLACK, WHITE))); -// -// This will instantiate tests in FlagDependentTest with all variations of two -// Boolean flags: -// -// class FlagDependentTest -// : public testing::TestWithParam > { -// virtual void SetUp() { -// // Assigns external_flag_1 and external_flag_2 values from the tuple. -// tie(external_flag_1, external_flag_2) = GetParam(); -// } -// }; -// -// TEST_P(FlagDependentTest, TestFeature1) { -// // Test your code using external_flag_1 and external_flag_2 here. -// } -// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, -// Combine(Bool(), Bool())); -// -template -internal::CartesianProductHolder2 Combine( - const Generator1& g1, const Generator2& g2) { - return internal::CartesianProductHolder2( - g1, g2); -} - -template -internal::CartesianProductHolder3 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3) { - return internal::CartesianProductHolder3( - g1, g2, g3); -} - -template -internal::CartesianProductHolder4 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4) { - return internal::CartesianProductHolder4( - g1, g2, g3, g4); -} - -template -internal::CartesianProductHolder5 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5) { - return internal::CartesianProductHolder5( - g1, g2, g3, g4, g5); -} - -template -internal::CartesianProductHolder6 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6) { - return internal::CartesianProductHolder6( - g1, g2, g3, g4, g5, g6); -} - -template -internal::CartesianProductHolder7 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7) { - return internal::CartesianProductHolder7( - g1, g2, g3, g4, g5, g6, g7); -} - -template -internal::CartesianProductHolder8 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8) { - return internal::CartesianProductHolder8( - g1, g2, g3, g4, g5, g6, g7, g8); -} - -template -internal::CartesianProductHolder9 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8, const Generator9& g9) { - return internal::CartesianProductHolder9( - g1, g2, g3, g4, g5, g6, g7, g8, g9); -} - -template -internal::CartesianProductHolder10 Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8, const Generator9& g9, - const Generator10& g10) { - return internal::CartesianProductHolder10( - g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); -} -# endif // GTEST_HAS_COMBINE - - - -# define TEST_P(test_case_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - : public test_case_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ - virtual void TestBody(); \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder(\ - #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ - #test_case_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_case_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ - void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() - -# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ - ::testing::internal::ParamGenerator \ - gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ - int gtest_##prefix##test_case_name##_dummy_ = \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder(\ - #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ - #prefix, \ - >est_##prefix##test_case_name##_EvalGenerator_, \ - __FILE__, __LINE__) - -} // namespace testing - -#endif // GTEST_HAS_PARAM_TEST - -#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ -// Copyright 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) -// -// Google C++ Testing Framework definitions useful in production code. - -#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ - -// When you need to test the private or protected members of a class, -// use the FRIEND_TEST macro to declare your tests as friends of the -// class. For example: -// -// class MyClass { -// private: -// void MyMethod(); -// FRIEND_TEST(MyClassTest, MyMethod); -// }; -// -// class MyClassTest : public testing::Test { -// // ... -// }; -// -// TEST_F(MyClassTest, MyMethod) { -// // Can call MyClass::MyMethod() here. -// } - -#define FRIEND_TEST(test_case_name, test_name)\ -friend class test_case_name##_##test_name##_Test - -#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: mheule@google.com (Markus Heule) -// - -#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ -#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ - -#include -#include - -namespace testing { - -// A copyable object representing the result of a test part (i.e. an -// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). -// -// Don't inherit from TestPartResult as its destructor is not virtual. -class GTEST_API_ TestPartResult { - public: - // The possible outcomes of a test part (i.e. an assertion or an - // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). - enum Type { - kSuccess, // Succeeded. - kNonFatalFailure, // Failed but the test can continue. - kFatalFailure // Failed and the test should be terminated. - }; - - // C'tor. TestPartResult does NOT have a default constructor. - // Always use this constructor (with parameters) to create a - // TestPartResult object. - TestPartResult(Type a_type, - const char* a_file_name, - int a_line_number, - const char* a_message) - : type_(a_type), - file_name_(a_file_name == NULL ? "" : a_file_name), - line_number_(a_line_number), - summary_(ExtractSummary(a_message)), - message_(a_message) { - } - - // Gets the outcome of the test part. - Type type() const { return type_; } - - // Gets the name of the source file where the test part took place, or - // NULL if it's unknown. - const char* file_name() const { - return file_name_.empty() ? NULL : file_name_.c_str(); - } - - // Gets the line in the source file where the test part took place, - // or -1 if it's unknown. - int line_number() const { return line_number_; } - - // Gets the summary of the failure message. - const char* summary() const { return summary_.c_str(); } - - // Gets the message associated with the test part. - const char* message() const { return message_.c_str(); } - - // Returns true iff the test part passed. - bool passed() const { return type_ == kSuccess; } - - // Returns true iff the test part failed. - bool failed() const { return type_ != kSuccess; } - - // Returns true iff the test part non-fatally failed. - bool nonfatally_failed() const { return type_ == kNonFatalFailure; } - - // Returns true iff the test part fatally failed. - bool fatally_failed() const { return type_ == kFatalFailure; } - - private: - Type type_; - - // Gets the summary of the failure message by omitting the stack - // trace in it. - static std::string ExtractSummary(const char* message); - - // The name of the source file where the test part took place, or - // "" if the source file is unknown. - std::string file_name_; - // The line in the source file where the test part took place, or -1 - // if the line number is unknown. - int line_number_; - std::string summary_; // The test failure summary. - std::string message_; // The test failure message. -}; - -// Prints a TestPartResult object. -std::ostream& operator<<(std::ostream& os, const TestPartResult& result); - -// An array of TestPartResult objects. -// -// Don't inherit from TestPartResultArray as its destructor is not -// virtual. -class GTEST_API_ TestPartResultArray { - public: - TestPartResultArray() {} - - // Appends the given TestPartResult to the array. - void Append(const TestPartResult& result); - - // Returns the TestPartResult at the given index (0-based). - const TestPartResult& GetTestPartResult(int index) const; - - // Returns the number of TestPartResult objects in the array. - int size() const; - - private: - std::vector array_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); -}; - -// This interface knows how to report a test part result. -class TestPartResultReporterInterface { - public: - virtual ~TestPartResultReporterInterface() {} - - virtual void ReportTestPartResult(const TestPartResult& result) = 0; -}; - -namespace internal { - -// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a -// statement generates new fatal failures. To do so it registers itself as the -// current test part result reporter. Besides checking if fatal failures were -// reported, it only delegates the reporting to the former result reporter. -// The original result reporter is restored in the destructor. -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -class GTEST_API_ HasNewFatalFailureHelper - : public TestPartResultReporterInterface { - public: - HasNewFatalFailureHelper(); - virtual ~HasNewFatalFailureHelper(); - virtual void ReportTestPartResult(const TestPartResult& result); - bool has_new_fatal_failure() const { return has_new_fatal_failure_; } - private: - bool has_new_fatal_failure_; - TestPartResultReporterInterface* original_reporter_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); -}; - -} // namespace internal - -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ - -// This header implements typed tests and type-parameterized tests. - -// Typed (aka type-driven) tests repeat the same test for types in a -// list. You must know which types you want to test with when writing -// typed tests. Here's how you do it: - -#if 0 - -// First, define a fixture class template. It should be parameterized -// by a type. Remember to derive it from testing::Test. -template -class FooTest : public testing::Test { - public: - ... - typedef std::list List; - static T shared_; - T value_; -}; - -// Next, associate a list of types with the test case, which will be -// repeated for each type in the list. The typedef is necessary for -// the macro to parse correctly. -typedef testing::Types MyTypes; -TYPED_TEST_CASE(FooTest, MyTypes); - -// If the type list contains only one type, you can write that type -// directly without Types<...>: -// TYPED_TEST_CASE(FooTest, int); - -// Then, use TYPED_TEST() instead of TEST_F() to define as many typed -// tests for this test case as you want. -TYPED_TEST(FooTest, DoesBlah) { - // Inside a test, refer to TypeParam to get the type parameter. - // Since we are inside a derived class template, C++ requires use to - // visit the members of FooTest via 'this'. - TypeParam n = this->value_; - - // To visit static members of the fixture, add the TestFixture:: - // prefix. - n += TestFixture::shared_; - - // To refer to typedefs in the fixture, add the "typename - // TestFixture::" prefix. - typename TestFixture::List values; - values.push_back(n); - ... -} - -TYPED_TEST(FooTest, HasPropertyA) { ... } - -#endif // 0 - -// Type-parameterized tests are abstract test patterns parameterized -// by a type. Compared with typed tests, type-parameterized tests -// allow you to define the test pattern without knowing what the type -// parameters are. The defined pattern can be instantiated with -// different types any number of times, in any number of translation -// units. -// -// If you are designing an interface or concept, you can define a -// suite of type-parameterized tests to verify properties that any -// valid implementation of the interface/concept should have. Then, -// each implementation can easily instantiate the test suite to verify -// that it conforms to the requirements, without having to write -// similar tests repeatedly. Here's an example: - -#if 0 - -// First, define a fixture class template. It should be parameterized -// by a type. Remember to derive it from testing::Test. -template -class FooTest : public testing::Test { - ... -}; - -// Next, declare that you will define a type-parameterized test case -// (the _P suffix is for "parameterized" or "pattern", whichever you -// prefer): -TYPED_TEST_CASE_P(FooTest); - -// Then, use TYPED_TEST_P() to define as many type-parameterized tests -// for this type-parameterized test case as you want. -TYPED_TEST_P(FooTest, DoesBlah) { - // Inside a test, refer to TypeParam to get the type parameter. - TypeParam n = 0; - ... -} - -TYPED_TEST_P(FooTest, HasPropertyA) { ... } - -// Now the tricky part: you need to register all test patterns before -// you can instantiate them. The first argument of the macro is the -// test case name; the rest are the names of the tests in this test -// case. -REGISTER_TYPED_TEST_CASE_P(FooTest, - DoesBlah, HasPropertyA); - -// Finally, you are free to instantiate the pattern with the types you -// want. If you put the above code in a header file, you can #include -// it in multiple C++ source files and instantiate it multiple times. -// -// To distinguish different instances of the pattern, the first -// argument to the INSTANTIATE_* macro is a prefix that will be added -// to the actual test case name. Remember to pick unique prefixes for -// different instances. -typedef testing::Types MyTypes; -INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); - -// If the type list contains only one type, you can write that type -// directly without Types<...>: -// INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); - -#endif // 0 - - -// Implements typed tests. - -#if GTEST_HAS_TYPED_TEST - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Expands to the name of the typedef for the type parameters of the -// given test case. -# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ - -// The 'Types' template argument below must have spaces around it -// since some compilers may choke on '>>' when passing a template -// instance (e.g. Types) -# define TYPED_TEST_CASE(CaseName, Types) \ - typedef ::testing::internal::TypeList< Types >::type \ - GTEST_TYPE_PARAMS_(CaseName) - -# define TYPED_TEST(CaseName, TestName) \ - template \ - class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ - : public CaseName { \ - private: \ - typedef CaseName TestFixture; \ - typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ - }; \ - bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTest< \ - CaseName, \ - ::testing::internal::TemplateSel< \ - GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ - GTEST_TYPE_PARAMS_(CaseName)>::Register(\ - "", #CaseName, #TestName, 0); \ - template \ - void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() - -#endif // GTEST_HAS_TYPED_TEST - -// Implements type-parameterized tests. - -#if GTEST_HAS_TYPED_TEST_P - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Expands to the namespace name that the type-parameterized tests for -// the given type-parameterized test case are defined in. The exact -// name of the namespace is subject to change without notice. -# define GTEST_CASE_NAMESPACE_(TestCaseName) \ - gtest_case_##TestCaseName##_ - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Expands to the name of the variable used to remember the names of -// the defined tests in the given test case. -# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ - gtest_typed_test_case_p_state_##TestCaseName##_ - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. -// -// Expands to the name of the variable used to remember the names of -// the registered tests in the given test case. -# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ - gtest_registered_test_names_##TestCaseName##_ - -// The variables defined in the type-parameterized test macros are -// static as typically these macros are used in a .h file that can be -// #included in multiple translation units linked together. -# define TYPED_TEST_CASE_P(CaseName) \ - static ::testing::internal::TypedTestCasePState \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) - -# define TYPED_TEST_P(CaseName, TestName) \ - namespace GTEST_CASE_NAMESPACE_(CaseName) { \ - template \ - class TestName : public CaseName { \ - private: \ - typedef CaseName TestFixture; \ - typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ - }; \ - static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ - __FILE__, __LINE__, #CaseName, #TestName); \ - } \ - template \ - void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() - -# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ - namespace GTEST_CASE_NAMESPACE_(CaseName) { \ - typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ - } \ - static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ - __FILE__, __LINE__, #__VA_ARGS__) - -// The 'Types' template argument below must have spaces around it -// since some compilers may choke on '>>' when passing a template -// instance (e.g. Types) -# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ - bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTestCase::type>::Register(\ - #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) - -#endif // GTEST_HAS_TYPED_TEST_P - -#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ - -// Depending on the platform, different string classes are available. -// On Linux, in addition to ::std::string, Google also makes use of -// class ::string, which has the same interface as ::std::string, but -// has a different implementation. -// -// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that -// ::string is available AND is a distinct type to ::std::string, or -// define it to 0 to indicate otherwise. -// -// If the user's ::std::string and ::string are the same class due to -// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. -// -// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined -// heuristically. - -namespace testing { - -// Declares the flags. - -// This flag temporary enables the disabled tests. -GTEST_DECLARE_bool_(also_run_disabled_tests); - -// This flag brings the debugger on an assertion failure. -GTEST_DECLARE_bool_(break_on_failure); - -// This flag controls whether Google Test catches all test-thrown exceptions -// and logs them as failures. -GTEST_DECLARE_bool_(catch_exceptions); - -// This flag enables using colors in terminal output. Available values are -// "yes" to enable colors, "no" (disable colors), or "auto" (the default) -// to let Google Test decide. -GTEST_DECLARE_string_(color); - -// This flag sets up the filter to select by name using a glob pattern -// the tests to run. If the filter is not given all tests are executed. -GTEST_DECLARE_string_(filter); - -// This flag causes the Google Test to list tests. None of the tests listed -// are actually run if the flag is provided. -GTEST_DECLARE_bool_(list_tests); - -// This flag controls whether Google Test emits a detailed XML report to a file -// in addition to its normal textual output. -GTEST_DECLARE_string_(output); - -// This flags control whether Google Test prints the elapsed time for each -// test. -GTEST_DECLARE_bool_(print_time); - -// This flag specifies the random number seed. -GTEST_DECLARE_int32_(random_seed); - -// This flag sets how many times the tests are repeated. The default value -// is 1. If the value is -1 the tests are repeating forever. -GTEST_DECLARE_int32_(repeat); - -// This flag controls whether Google Test includes Google Test internal -// stack frames in failure stack traces. -GTEST_DECLARE_bool_(show_internal_stack_frames); - -// When this flag is specified, tests' order is randomized on every iteration. -GTEST_DECLARE_bool_(shuffle); - -// This flag specifies the maximum number of stack frames to be -// printed in a failure message. -GTEST_DECLARE_int32_(stack_trace_depth); - -// When this flag is specified, a failed assertion will throw an -// exception if exceptions are enabled, or exit the program with a -// non-zero code otherwise. -GTEST_DECLARE_bool_(throw_on_failure); - -// When this flag is set with a "host:port" string, on supported -// platforms test results are streamed to the specified port on -// the specified host machine. -GTEST_DECLARE_string_(stream_result_to); - -// The upper limit for valid stack trace depths. -const int kMaxStackTraceDepth = 100; - -namespace internal { - -class AssertHelper; -class DefaultGlobalTestPartResultReporter; -class ExecDeathTest; -class NoExecDeathTest; -class FinalSuccessChecker; -class GTestFlagSaver; -class StreamingListenerTest; -class TestResultAccessor; -class TestEventListenersAccessor; -class TestEventRepeater; -class UnitTestRecordPropertyTestHelper; -class WindowsDeathTest; -class UnitTestImpl* GetUnitTestImpl(); -void ReportFailureInUnknownLocation(TestPartResult::Type result_type, - const std::string& message); - -} // namespace internal - -// The friend relationship of some of these classes is cyclic. -// If we don't forward declare them the compiler might confuse the classes -// in friendship clauses with same named classes on the scope. -class Test; -class TestCase; -class TestInfo; -class UnitTest; - -// A class for indicating whether an assertion was successful. When -// the assertion wasn't successful, the AssertionResult object -// remembers a non-empty message that describes how it failed. -// -// To create an instance of this class, use one of the factory functions -// (AssertionSuccess() and AssertionFailure()). -// -// This class is useful for two purposes: -// 1. Defining predicate functions to be used with Boolean test assertions -// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts -// 2. Defining predicate-format functions to be -// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). -// -// For example, if you define IsEven predicate: -// -// testing::AssertionResult IsEven(int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess(); -// else -// return testing::AssertionFailure() << n << " is odd"; -// } -// -// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) -// will print the message -// -// Value of: IsEven(Fib(5)) -// Actual: false (5 is odd) -// Expected: true -// -// instead of a more opaque -// -// Value of: IsEven(Fib(5)) -// Actual: false -// Expected: true -// -// in case IsEven is a simple Boolean predicate. -// -// If you expect your predicate to be reused and want to support informative -// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up -// about half as often as positive ones in our tests), supply messages for -// both success and failure cases: -// -// testing::AssertionResult IsEven(int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess() << n << " is even"; -// else -// return testing::AssertionFailure() << n << " is odd"; -// } -// -// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print -// -// Value of: IsEven(Fib(6)) -// Actual: true (8 is even) -// Expected: false -// -// NB: Predicates that support negative Boolean assertions have reduced -// performance in positive ones so be careful not to use them in tests -// that have lots (tens of thousands) of positive Boolean assertions. -// -// To use this class with EXPECT_PRED_FORMAT assertions such as: -// -// // Verifies that Foo() returns an even number. -// EXPECT_PRED_FORMAT1(IsEven, Foo()); -// -// you need to define: -// -// testing::AssertionResult IsEven(const char* expr, int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess(); -// else -// return testing::AssertionFailure() -// << "Expected: " << expr << " is even\n Actual: it's " << n; -// } -// -// If Foo() returns 5, you will see the following message: -// -// Expected: Foo() is even -// Actual: it's 5 -// -class GTEST_API_ AssertionResult { - public: - // Copy constructor. - // Used in EXPECT_TRUE/FALSE(assertion_result). - AssertionResult(const AssertionResult& other); - // Used in the EXPECT_TRUE/FALSE(bool_expression). - explicit AssertionResult(bool success) : success_(success) {} - - // Returns true iff the assertion succeeded. - operator bool() const { return success_; } // NOLINT - - // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. - AssertionResult operator!() const; - - // Returns the text streamed into this AssertionResult. Test assertions - // use it when they fail (i.e., the predicate's outcome doesn't match the - // assertion's expectation). When nothing has been streamed into the - // object, returns an empty string. - const char* message() const { - return message_.get() != NULL ? message_->c_str() : ""; - } - // TODO(vladl@google.com): Remove this after making sure no clients use it. - // Deprecated; please use message() instead. - const char* failure_message() const { return message(); } - - // Streams a custom failure message into this object. - template AssertionResult& operator<<(const T& value) { - AppendMessage(Message() << value); - return *this; - } - - // Allows streaming basic output manipulators such as endl or flush into - // this object. - AssertionResult& operator<<( - ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { - AppendMessage(Message() << basic_manipulator); - return *this; - } - - private: - // Appends the contents of message to message_. - void AppendMessage(const Message& a_message) { - if (message_.get() == NULL) - message_.reset(new ::std::string); - message_->append(a_message.GetString().c_str()); - } - - // Stores result of the assertion predicate. - bool success_; - // Stores the message describing the condition in case the expectation - // construct is not satisfied with the predicate's outcome. - // Referenced via a pointer to avoid taking too much stack frame space - // with test assertions. - internal::scoped_ptr< ::std::string> message_; - - GTEST_DISALLOW_ASSIGN_(AssertionResult); -}; - -// Makes a successful assertion result. -GTEST_API_ AssertionResult AssertionSuccess(); - -// Makes a failed assertion result. -GTEST_API_ AssertionResult AssertionFailure(); - -// Makes a failed assertion result with the given failure message. -// Deprecated; use AssertionFailure() << msg. -GTEST_API_ AssertionResult AssertionFailure(const Message& msg); - -// The abstract class that all tests inherit from. -// -// In Google Test, a unit test program contains one or many TestCases, and -// each TestCase contains one or many Tests. -// -// When you define a test using the TEST macro, you don't need to -// explicitly derive from Test - the TEST macro automatically does -// this for you. -// -// The only time you derive from Test is when defining a test fixture -// to be used a TEST_F. For example: -// -// class FooTest : public testing::Test { -// protected: -// virtual void SetUp() { ... } -// virtual void TearDown() { ... } -// ... -// }; -// -// TEST_F(FooTest, Bar) { ... } -// TEST_F(FooTest, Baz) { ... } -// -// Test is not copyable. -class GTEST_API_ Test { - public: - friend class TestInfo; - - // Defines types for pointers to functions that set up and tear down - // a test case. - typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; - typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; - - // The d'tor is virtual as we intend to inherit from Test. - virtual ~Test(); - - // Sets up the stuff shared by all tests in this test case. - // - // Google Test will call Foo::SetUpTestCase() before running the first - // test in test case Foo. Hence a sub-class can define its own - // SetUpTestCase() method to shadow the one defined in the super - // class. - static void SetUpTestCase() {} - - // Tears down the stuff shared by all tests in this test case. - // - // Google Test will call Foo::TearDownTestCase() after running the last - // test in test case Foo. Hence a sub-class can define its own - // TearDownTestCase() method to shadow the one defined in the super - // class. - static void TearDownTestCase() {} - - // Returns true iff the current test has a fatal failure. - static bool HasFatalFailure(); - - // Returns true iff the current test has a non-fatal failure. - static bool HasNonfatalFailure(); - - // Returns true iff the current test has a (either fatal or - // non-fatal) failure. - static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } - - // Logs a property for the current test, test case, or for the entire - // invocation of the test program when used outside of the context of a - // test case. Only the last value for a given key is remembered. These - // are public static so they can be called from utility functions that are - // not members of the test fixture. Calls to RecordProperty made during - // lifespan of the test (from the moment its constructor starts to the - // moment its destructor finishes) will be output in XML as attributes of - // the element. Properties recorded from fixture's - // SetUpTestCase or TearDownTestCase are logged as attributes of the - // corresponding element. Calls to RecordProperty made in the - // global context (before or after invocation of RUN_ALL_TESTS and from - // SetUp/TearDown method of Environment objects registered with Google - // Test) will be output as attributes of the element. - static void RecordProperty(const std::string& key, const std::string& value); - static void RecordProperty(const std::string& key, int value); - - protected: - // Creates a Test object. - Test(); - - // Sets up the test fixture. - virtual void SetUp(); - - // Tears down the test fixture. - virtual void TearDown(); - - private: - // Returns true iff the current test has the same fixture class as - // the first test in the current test case. - static bool HasSameFixtureClass(); - - // Runs the test after the test fixture has been set up. - // - // A sub-class must implement this to define the test logic. - // - // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. - // Instead, use the TEST or TEST_F macro. - virtual void TestBody() = 0; - - // Sets up, executes, and tears down the test. - void Run(); - - // Deletes self. We deliberately pick an unusual name for this - // internal method to avoid clashing with names used in user TESTs. - void DeleteSelf_() { delete this; } - - // Uses a GTestFlagSaver to save and restore all Google Test flags. - const internal::GTestFlagSaver* const gtest_flag_saver_; - - // Often a user mis-spells SetUp() as Setup() and spends a long time - // wondering why it is never called by Google Test. The declaration of - // the following method is solely for catching such an error at - // compile time: - // - // - The return type is deliberately chosen to be not void, so it - // will be a conflict if a user declares void Setup() in his test - // fixture. - // - // - This method is private, so it will be another compiler error - // if a user calls it from his test fixture. - // - // DO NOT OVERRIDE THIS FUNCTION. - // - // If you see an error about overriding the following function or - // about it being private, you have mis-spelled SetUp() as Setup(). - struct Setup_should_be_spelled_SetUp {}; - virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } - - // We disallow copying Tests. - GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); -}; - -typedef internal::TimeInMillis TimeInMillis; - -// A copyable object representing a user specified test property which can be -// output as a key/value string pair. -// -// Don't inherit from TestProperty as its destructor is not virtual. -class TestProperty { - public: - // C'tor. TestProperty does NOT have a default constructor. - // Always use this constructor (with parameters) to create a - // TestProperty object. - TestProperty(const std::string& a_key, const std::string& a_value) : - key_(a_key), value_(a_value) { - } - - // Gets the user supplied key. - const char* key() const { - return key_.c_str(); - } - - // Gets the user supplied value. - const char* value() const { - return value_.c_str(); - } - - // Sets a new value, overriding the one supplied in the constructor. - void SetValue(const std::string& new_value) { - value_ = new_value; - } - - private: - // The key supplied by the user. - std::string key_; - // The value supplied by the user. - std::string value_; -}; - -// The result of a single Test. This includes a list of -// TestPartResults, a list of TestProperties, a count of how many -// death tests there are in the Test, and how much time it took to run -// the Test. -// -// TestResult is not copyable. -class GTEST_API_ TestResult { - public: - // Creates an empty TestResult. - TestResult(); - - // D'tor. Do not inherit from TestResult. - ~TestResult(); - - // Gets the number of all test parts. This is the sum of the number - // of successful test parts and the number of failed test parts. - int total_part_count() const; - - // Returns the number of the test properties. - int test_property_count() const; - - // Returns true iff the test passed (i.e. no test part failed). - bool Passed() const { return !Failed(); } - - // Returns true iff the test failed. - bool Failed() const; - - // Returns true iff the test fatally failed. - bool HasFatalFailure() const; - - // Returns true iff the test has a non-fatal failure. - bool HasNonfatalFailure() const; - - // Returns the elapsed time, in milliseconds. - TimeInMillis elapsed_time() const { return elapsed_time_; } - - // Returns the i-th test part result among all the results. i can range - // from 0 to test_property_count() - 1. If i is not in that range, aborts - // the program. - const TestPartResult& GetTestPartResult(int i) const; - - // Returns the i-th test property. i can range from 0 to - // test_property_count() - 1. If i is not in that range, aborts the - // program. - const TestProperty& GetTestProperty(int i) const; - - private: - friend class TestInfo; - friend class TestCase; - friend class UnitTest; - friend class internal::DefaultGlobalTestPartResultReporter; - friend class internal::ExecDeathTest; - friend class internal::TestResultAccessor; - friend class internal::UnitTestImpl; - friend class internal::WindowsDeathTest; - - // Gets the vector of TestPartResults. - const std::vector& test_part_results() const { - return test_part_results_; - } - - // Gets the vector of TestProperties. - const std::vector& test_properties() const { - return test_properties_; - } - - // Sets the elapsed time. - void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } - - // Adds a test property to the list. The property is validated and may add - // a non-fatal failure if invalid (e.g., if it conflicts with reserved - // key names). If a property is already recorded for the same key, the - // value will be updated, rather than storing multiple values for the same - // key. xml_element specifies the element for which the property is being - // recorded and is used for validation. - void RecordProperty(const std::string& xml_element, - const TestProperty& test_property); - - // Adds a failure if the key is a reserved attribute of Google Test - // testcase tags. Returns true if the property is valid. - // TODO(russr): Validate attribute names are legal and human readable. - static bool ValidateTestProperty(const std::string& xml_element, - const TestProperty& test_property); - - // Adds a test part result to the list. - void AddTestPartResult(const TestPartResult& test_part_result); - - // Returns the death test count. - int death_test_count() const { return death_test_count_; } - - // Increments the death test count, returning the new count. - int increment_death_test_count() { return ++death_test_count_; } - - // Clears the test part results. - void ClearTestPartResults(); - - // Clears the object. - void Clear(); - - // Protects mutable state of the property vector and of owned - // properties, whose values may be updated. - internal::Mutex test_properites_mutex_; - - // The vector of TestPartResults - std::vector test_part_results_; - // The vector of TestProperties - std::vector test_properties_; - // Running count of death tests. - int death_test_count_; - // The elapsed time, in milliseconds. - TimeInMillis elapsed_time_; - - // We disallow copying TestResult. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); -}; // class TestResult - -// A TestInfo object stores the following information about a test: -// -// Test case name -// Test name -// Whether the test should be run -// A function pointer that creates the test object when invoked -// Test result -// -// The constructor of TestInfo registers itself with the UnitTest -// singleton such that the RUN_ALL_TESTS() macro knows which tests to -// run. -class GTEST_API_ TestInfo { - public: - // Destructs a TestInfo object. This function is not virtual, so - // don't inherit from TestInfo. - ~TestInfo(); - - // Returns the test case name. - const char* test_case_name() const { return test_case_name_.c_str(); } - - // Returns the test name. - const char* name() const { return name_.c_str(); } - - // Returns the name of the parameter type, or NULL if this is not a typed - // or a type-parameterized test. - const char* type_param() const { - if (type_param_.get() != NULL) - return type_param_->c_str(); - return NULL; - } - - // Returns the text representation of the value parameter, or NULL if this - // is not a value-parameterized test. - const char* value_param() const { - if (value_param_.get() != NULL) - return value_param_->c_str(); - return NULL; - } - - // Returns true if this test should run, that is if the test is not - // disabled (or it is disabled but the also_run_disabled_tests flag has - // been specified) and its full name matches the user-specified filter. - // - // Google Test allows the user to filter the tests by their full names. - // The full name of a test Bar in test case Foo is defined as - // "Foo.Bar". Only the tests that match the filter will run. - // - // A filter is a colon-separated list of glob (not regex) patterns, - // optionally followed by a '-' and a colon-separated list of - // negative patterns (tests to exclude). A test is run if it - // matches one of the positive patterns and does not match any of - // the negative patterns. - // - // For example, *A*:Foo.* is a filter that matches any string that - // contains the character 'A' or starts with "Foo.". - bool should_run() const { return should_run_; } - - // Returns true iff this test will appear in the XML report. - bool is_reportable() const { - // For now, the XML report includes all tests matching the filter. - // In the future, we may trim tests that are excluded because of - // sharding. - return matches_filter_; - } - - // Returns the result of the test. - const TestResult* result() const { return &result_; } - - private: -#if GTEST_HAS_DEATH_TEST - friend class internal::DefaultDeathTestFactory; -#endif // GTEST_HAS_DEATH_TEST - friend class Test; - friend class TestCase; - friend class internal::UnitTestImpl; - friend class internal::StreamingListenerTest; - friend TestInfo* internal::MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - internal::TypeId fixture_class_id, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc, - internal::TestFactoryBase* factory); - - // Constructs a TestInfo object. The newly constructed instance assumes - // ownership of the factory object. - TestInfo(const std::string& test_case_name, - const std::string& name, - const char* a_type_param, // NULL if not a type-parameterized test - const char* a_value_param, // NULL if not a value-parameterized test - internal::TypeId fixture_class_id, - internal::TestFactoryBase* factory); - - // Increments the number of death tests encountered in this test so - // far. - int increment_death_test_count() { - return result_.increment_death_test_count(); - } - - // Creates the test object, runs it, records its result, and then - // deletes it. - void Run(); - - static void ClearTestResult(TestInfo* test_info) { - test_info->result_.Clear(); - } - - // These fields are immutable properties of the test. - const std::string test_case_name_; // Test case name - const std::string name_; // Test name - // Name of the parameter type, or NULL if this is not a typed or a - // type-parameterized test. - const internal::scoped_ptr type_param_; - // Text representation of the value parameter, or NULL if this is not a - // value-parameterized test. - const internal::scoped_ptr value_param_; - const internal::TypeId fixture_class_id_; // ID of the test fixture class - bool should_run_; // True iff this test should run - bool is_disabled_; // True iff this test is disabled - bool matches_filter_; // True if this test matches the - // user-specified filter. - internal::TestFactoryBase* const factory_; // The factory that creates - // the test object - - // This field is mutable and needs to be reset before running the - // test for the second time. - TestResult result_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); -}; - -// A test case, which consists of a vector of TestInfos. -// -// TestCase is not copyable. -class GTEST_API_ TestCase { - public: - // Creates a TestCase with the given name. - // - // TestCase does NOT have a default constructor. Always use this - // constructor to create a TestCase object. - // - // Arguments: - // - // name: name of the test case - // a_type_param: the name of the test's type parameter, or NULL if - // this is not a type-parameterized test. - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case - TestCase(const char* name, const char* a_type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc); - - // Destructor of TestCase. - virtual ~TestCase(); - - // Gets the name of the TestCase. - const char* name() const { return name_.c_str(); } - - // Returns the name of the parameter type, or NULL if this is not a - // type-parameterized test case. - const char* type_param() const { - if (type_param_.get() != NULL) - return type_param_->c_str(); - return NULL; - } - - // Returns true if any test in this test case should run. - bool should_run() const { return should_run_; } - - // Gets the number of successful tests in this test case. - int successful_test_count() const; - - // Gets the number of failed tests in this test case. - int failed_test_count() const; - - // Gets the number of disabled tests that will be reported in the XML report. - int reportable_disabled_test_count() const; - - // Gets the number of disabled tests in this test case. - int disabled_test_count() const; - - // Gets the number of tests to be printed in the XML report. - int reportable_test_count() const; - - // Get the number of tests in this test case that should run. - int test_to_run_count() const; - - // Gets the number of all tests in this test case. - int total_test_count() const; - - // Returns true iff the test case passed. - bool Passed() const { return !Failed(); } - - // Returns true iff the test case failed. - bool Failed() const { return failed_test_count() > 0; } - - // Returns the elapsed time, in milliseconds. - TimeInMillis elapsed_time() const { return elapsed_time_; } - - // Returns the i-th test among all the tests. i can range from 0 to - // total_test_count() - 1. If i is not in that range, returns NULL. - const TestInfo* GetTestInfo(int i) const; - - // Returns the TestResult that holds test properties recorded during - // execution of SetUpTestCase and TearDownTestCase. - const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } - - private: - friend class Test; - friend class internal::UnitTestImpl; - - // Gets the (mutable) vector of TestInfos in this TestCase. - std::vector& test_info_list() { return test_info_list_; } - - // Gets the (immutable) vector of TestInfos in this TestCase. - const std::vector& test_info_list() const { - return test_info_list_; - } - - // Returns the i-th test among all the tests. i can range from 0 to - // total_test_count() - 1. If i is not in that range, returns NULL. - TestInfo* GetMutableTestInfo(int i); - - // Sets the should_run member. - void set_should_run(bool should) { should_run_ = should; } - - // Adds a TestInfo to this test case. Will delete the TestInfo upon - // destruction of the TestCase object. - void AddTestInfo(TestInfo * test_info); - - // Clears the results of all tests in this test case. - void ClearResult(); - - // Clears the results of all tests in the given test case. - static void ClearTestCaseResult(TestCase* test_case) { - test_case->ClearResult(); - } - - // Runs every test in this TestCase. - void Run(); - - // Runs SetUpTestCase() for this TestCase. This wrapper is needed - // for catching exceptions thrown from SetUpTestCase(). - void RunSetUpTestCase() { (*set_up_tc_)(); } - - // Runs TearDownTestCase() for this TestCase. This wrapper is - // needed for catching exceptions thrown from TearDownTestCase(). - void RunTearDownTestCase() { (*tear_down_tc_)(); } - - // Returns true iff test passed. - static bool TestPassed(const TestInfo* test_info) { - return test_info->should_run() && test_info->result()->Passed(); - } - - // Returns true iff test failed. - static bool TestFailed(const TestInfo* test_info) { - return test_info->should_run() && test_info->result()->Failed(); - } - - // Returns true iff the test is disabled and will be reported in the XML - // report. - static bool TestReportableDisabled(const TestInfo* test_info) { - return test_info->is_reportable() && test_info->is_disabled_; - } - - // Returns true iff test is disabled. - static bool TestDisabled(const TestInfo* test_info) { - return test_info->is_disabled_; - } - - // Returns true iff this test will appear in the XML report. - static bool TestReportable(const TestInfo* test_info) { - return test_info->is_reportable(); - } - - // Returns true if the given test should run. - static bool ShouldRunTest(const TestInfo* test_info) { - return test_info->should_run(); - } - - // Shuffles the tests in this test case. - void ShuffleTests(internal::Random* random); - - // Restores the test order to before the first shuffle. - void UnshuffleTests(); - - // Name of the test case. - std::string name_; - // Name of the parameter type, or NULL if this is not a typed or a - // type-parameterized test. - const internal::scoped_ptr type_param_; - // The vector of TestInfos in their original order. It owns the - // elements in the vector. - std::vector test_info_list_; - // Provides a level of indirection for the test list to allow easy - // shuffling and restoring the test order. The i-th element in this - // vector is the index of the i-th test in the shuffled test list. - std::vector test_indices_; - // Pointer to the function that sets up the test case. - Test::SetUpTestCaseFunc set_up_tc_; - // Pointer to the function that tears down the test case. - Test::TearDownTestCaseFunc tear_down_tc_; - // True iff any test in this test case should run. - bool should_run_; - // Elapsed time, in milliseconds. - TimeInMillis elapsed_time_; - // Holds test properties recorded during execution of SetUpTestCase and - // TearDownTestCase. - TestResult ad_hoc_test_result_; - - // We disallow copying TestCases. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); -}; - -// An Environment object is capable of setting up and tearing down an -// environment. The user should subclass this to define his own -// environment(s). -// -// An Environment object does the set-up and tear-down in virtual -// methods SetUp() and TearDown() instead of the constructor and the -// destructor, as: -// -// 1. You cannot safely throw from a destructor. This is a problem -// as in some cases Google Test is used where exceptions are enabled, and -// we may want to implement ASSERT_* using exceptions where they are -// available. -// 2. You cannot use ASSERT_* directly in a constructor or -// destructor. -class Environment { - public: - // The d'tor is virtual as we need to subclass Environment. - virtual ~Environment() {} - - // Override this to define how to set up the environment. - virtual void SetUp() {} - - // Override this to define how to tear down the environment. - virtual void TearDown() {} - private: - // If you see an error about overriding the following function or - // about it being private, you have mis-spelled SetUp() as Setup(). - struct Setup_should_be_spelled_SetUp {}; - virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } -}; - -// The interface for tracing execution of tests. The methods are organized in -// the order the corresponding events are fired. -class TestEventListener { - public: - virtual ~TestEventListener() {} - - // Fired before any test activity starts. - virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; - - // Fired before each iteration of tests starts. There may be more than - // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration - // index, starting from 0. - virtual void OnTestIterationStart(const UnitTest& unit_test, - int iteration) = 0; - - // Fired before environment set-up for each iteration of tests starts. - virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; - - // Fired after environment set-up for each iteration of tests ends. - virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; - - // Fired before the test case starts. - virtual void OnTestCaseStart(const TestCase& test_case) = 0; - - // Fired before the test starts. - virtual void OnTestStart(const TestInfo& test_info) = 0; - - // Fired after a failed assertion or a SUCCEED() invocation. - virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; - - // Fired after the test ends. - virtual void OnTestEnd(const TestInfo& test_info) = 0; - - // Fired after the test case ends. - virtual void OnTestCaseEnd(const TestCase& test_case) = 0; - - // Fired before environment tear-down for each iteration of tests starts. - virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; - - // Fired after environment tear-down for each iteration of tests ends. - virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; - - // Fired after each iteration of tests finishes. - virtual void OnTestIterationEnd(const UnitTest& unit_test, - int iteration) = 0; - - // Fired after all test activities have ended. - virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; -}; - -// The convenience class for users who need to override just one or two -// methods and are not concerned that a possible change to a signature of -// the methods they override will not be caught during the build. For -// comments about each method please see the definition of TestEventListener -// above. -class EmptyTestEventListener : public TestEventListener { - public: - virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, - int /*iteration*/) {} - virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} - virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} - virtual void OnTestStart(const TestInfo& /*test_info*/) {} - virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} - virtual void OnTestEnd(const TestInfo& /*test_info*/) {} - virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} - virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} - virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, - int /*iteration*/) {} - virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} -}; - -// TestEventListeners lets users add listeners to track events in Google Test. -class GTEST_API_ TestEventListeners { - public: - TestEventListeners(); - ~TestEventListeners(); - - // Appends an event listener to the end of the list. Google Test assumes - // the ownership of the listener (i.e. it will delete the listener when - // the test program finishes). - void Append(TestEventListener* listener); - - // Removes the given event listener from the list and returns it. It then - // becomes the caller's responsibility to delete the listener. Returns - // NULL if the listener is not found in the list. - TestEventListener* Release(TestEventListener* listener); - - // Returns the standard listener responsible for the default console - // output. Can be removed from the listeners list to shut down default - // console output. Note that removing this object from the listener list - // with Release transfers its ownership to the caller and makes this - // function return NULL the next time. - TestEventListener* default_result_printer() const { - return default_result_printer_; - } - - // Returns the standard listener responsible for the default XML output - // controlled by the --gtest_output=xml flag. Can be removed from the - // listeners list by users who want to shut down the default XML output - // controlled by this flag and substitute it with custom one. Note that - // removing this object from the listener list with Release transfers its - // ownership to the caller and makes this function return NULL the next - // time. - TestEventListener* default_xml_generator() const { - return default_xml_generator_; - } - - private: - friend class TestCase; - friend class TestInfo; - friend class internal::DefaultGlobalTestPartResultReporter; - friend class internal::NoExecDeathTest; - friend class internal::TestEventListenersAccessor; - friend class internal::UnitTestImpl; - - // Returns repeater that broadcasts the TestEventListener events to all - // subscribers. - TestEventListener* repeater(); - - // Sets the default_result_printer attribute to the provided listener. - // The listener is also added to the listener list and previous - // default_result_printer is removed from it and deleted. The listener can - // also be NULL in which case it will not be added to the list. Does - // nothing if the previous and the current listener objects are the same. - void SetDefaultResultPrinter(TestEventListener* listener); - - // Sets the default_xml_generator attribute to the provided listener. The - // listener is also added to the listener list and previous - // default_xml_generator is removed from it and deleted. The listener can - // also be NULL in which case it will not be added to the list. Does - // nothing if the previous and the current listener objects are the same. - void SetDefaultXmlGenerator(TestEventListener* listener); - - // Controls whether events will be forwarded by the repeater to the - // listeners in the list. - bool EventForwardingEnabled() const; - void SuppressEventForwarding(); - - // The actual list of listeners. - internal::TestEventRepeater* repeater_; - // Listener responsible for the standard result output. - TestEventListener* default_result_printer_; - // Listener responsible for the creation of the XML output file. - TestEventListener* default_xml_generator_; - - // We disallow copying TestEventListeners. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); -}; - -// A UnitTest consists of a vector of TestCases. -// -// This is a singleton class. The only instance of UnitTest is -// created when UnitTest::GetInstance() is first called. This -// instance is never deleted. -// -// UnitTest is not copyable. -// -// This class is thread-safe as long as the methods are called -// according to their specification. -class GTEST_API_ UnitTest { - public: - // Gets the singleton UnitTest object. The first time this method - // is called, a UnitTest object is constructed and returned. - // Consecutive calls will return the same object. - static UnitTest* GetInstance(); - - // Runs all tests in this UnitTest object and prints the result. - // Returns 0 if successful, or 1 otherwise. - // - // This method can only be called from the main thread. - // - // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - int Run() GTEST_MUST_USE_RESULT_; - - // Returns the working directory when the first TEST() or TEST_F() - // was executed. The UnitTest object owns the string. - const char* original_working_dir() const; - - // Returns the TestCase object for the test that's currently running, - // or NULL if no test is running. - const TestCase* current_test_case() const - GTEST_LOCK_EXCLUDED_(mutex_); - - // Returns the TestInfo object for the test that's currently running, - // or NULL if no test is running. - const TestInfo* current_test_info() const - GTEST_LOCK_EXCLUDED_(mutex_); - - // Returns the random seed used at the start of the current test run. - int random_seed() const; - -#if GTEST_HAS_PARAM_TEST - // Returns the ParameterizedTestCaseRegistry object used to keep track of - // value-parameterized tests and instantiate and register them. - // - // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - internal::ParameterizedTestCaseRegistry& parameterized_test_registry() - GTEST_LOCK_EXCLUDED_(mutex_); -#endif // GTEST_HAS_PARAM_TEST - - // Gets the number of successful test cases. - int successful_test_case_count() const; - - // Gets the number of failed test cases. - int failed_test_case_count() const; - - // Gets the number of all test cases. - int total_test_case_count() const; - - // Gets the number of all test cases that contain at least one test - // that should run. - int test_case_to_run_count() const; - - // Gets the number of successful tests. - int successful_test_count() const; - - // Gets the number of failed tests. - int failed_test_count() const; - - // Gets the number of disabled tests that will be reported in the XML report. - int reportable_disabled_test_count() const; - - // Gets the number of disabled tests. - int disabled_test_count() const; - - // Gets the number of tests to be printed in the XML report. - int reportable_test_count() const; - - // Gets the number of all tests. - int total_test_count() const; - - // Gets the number of tests that should run. - int test_to_run_count() const; - - // Gets the time of the test program start, in ms from the start of the - // UNIX epoch. - TimeInMillis start_timestamp() const; - - // Gets the elapsed time, in milliseconds. - TimeInMillis elapsed_time() const; - - // Returns true iff the unit test passed (i.e. all test cases passed). - bool Passed() const; - - // Returns true iff the unit test failed (i.e. some test case failed - // or something outside of all tests failed). - bool Failed() const; - - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - const TestCase* GetTestCase(int i) const; - - // Returns the TestResult containing information on test failures and - // properties logged outside of individual test cases. - const TestResult& ad_hoc_test_result() const; - - // Returns the list of event listeners that can be used to track events - // inside Google Test. - TestEventListeners& listeners(); - - private: - // Registers and returns a global test environment. When a test - // program is run, all global test environments will be set-up in - // the order they were registered. After all tests in the program - // have finished, all global test environments will be torn-down in - // the *reverse* order they were registered. - // - // The UnitTest object takes ownership of the given environment. - // - // This method can only be called from the main thread. - Environment* AddEnvironment(Environment* env); - - // Adds a TestPartResult to the current TestResult object. All - // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) - // eventually call this to report their results. The user code - // should use the assertion macros instead of calling this directly. - void AddTestPartResult(TestPartResult::Type result_type, - const char* file_name, - int line_number, - const std::string& message, - const std::string& os_stack_trace) - GTEST_LOCK_EXCLUDED_(mutex_); - - // Adds a TestProperty to the current TestResult object when invoked from - // inside a test, to current TestCase's ad_hoc_test_result_ when invoked - // from SetUpTestCase or TearDownTestCase, or to the global property set - // when invoked elsewhere. If the result already contains a property with - // the same key, the value will be updated. - void RecordProperty(const std::string& key, const std::string& value); - - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - TestCase* GetMutableTestCase(int i); - - // Accessors for the implementation object. - internal::UnitTestImpl* impl() { return impl_; } - const internal::UnitTestImpl* impl() const { return impl_; } - - // These classes and funcions are friends as they need to access private - // members of UnitTest. - friend class Test; - friend class internal::AssertHelper; - friend class internal::ScopedTrace; - friend class internal::StreamingListenerTest; - friend class internal::UnitTestRecordPropertyTestHelper; - friend Environment* AddGlobalTestEnvironment(Environment* env); - friend internal::UnitTestImpl* internal::GetUnitTestImpl(); - friend void internal::ReportFailureInUnknownLocation( - TestPartResult::Type result_type, - const std::string& message); - - // Creates an empty UnitTest. - UnitTest(); - - // D'tor - virtual ~UnitTest(); - - // Pushes a trace defined by SCOPED_TRACE() on to the per-thread - // Google Test trace stack. - void PushGTestTrace(const internal::TraceInfo& trace) - GTEST_LOCK_EXCLUDED_(mutex_); - - // Pops a trace from the per-thread Google Test trace stack. - void PopGTestTrace() - GTEST_LOCK_EXCLUDED_(mutex_); - - // Protects mutable state in *impl_. This is mutable as some const - // methods need to lock it too. - mutable internal::Mutex mutex_; - - // Opaque implementation object. This field is never changed once - // the object is constructed. We don't mark it as const here, as - // doing so will cause a warning in the constructor of UnitTest. - // Mutable state in *impl_ is protected by mutex_. - internal::UnitTestImpl* impl_; - - // We disallow copying UnitTest. - GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); -}; - -// A convenient wrapper for adding an environment for the test -// program. -// -// You should call this before RUN_ALL_TESTS() is called, probably in -// main(). If you use gtest_main, you need to call this before main() -// starts for it to take effect. For example, you can define a global -// variable like this: -// -// testing::Environment* const foo_env = -// testing::AddGlobalTestEnvironment(new FooEnvironment); -// -// However, we strongly recommend you to write your own main() and -// call AddGlobalTestEnvironment() there, as relying on initialization -// of global variables makes the code harder to read and may cause -// problems when you register multiple environments from different -// translation units and the environments have dependencies among them -// (remember that the compiler doesn't guarantee the order in which -// global variables from different translation units are initialized). -inline Environment* AddGlobalTestEnvironment(Environment* env) { - return UnitTest::GetInstance()->AddEnvironment(env); -} - -// Initializes Google Test. This must be called before calling -// RUN_ALL_TESTS(). In particular, it parses a command line for the -// flags that Google Test recognizes. Whenever a Google Test flag is -// seen, it is removed from argv, and *argc is decremented. -// -// No value is returned. Instead, the Google Test flag variables are -// updated. -// -// Calling the function for the second time has no user-visible effect. -GTEST_API_ void InitGoogleTest(int* argc, char** argv); - -// This overloaded version can be used in Windows programs compiled in -// UNICODE mode. -GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); - -namespace internal { - -// FormatForComparison::Format(value) formats a -// value of type ToPrint that is an operand of a comparison assertion -// (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in -// the comparison, and is used to help determine the best way to -// format the value. In particular, when the value is a C string -// (char pointer) and the other operand is an STL string object, we -// want to format the C string as a string, since we know it is -// compared by value with the string object. If the value is a char -// pointer but the other operand is not an STL string object, we don't -// know whether the pointer is supposed to point to a NUL-terminated -// string, and thus want to print it as a pointer to be safe. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - -// The default case. -template -class FormatForComparison { - public: - static ::std::string Format(const ToPrint& value) { - return ::testing::PrintToString(value); - } -}; - -// Array. -template -class FormatForComparison { - public: - static ::std::string Format(const ToPrint* value) { - return FormatForComparison::Format(value); - } -}; - -// By default, print C string as pointers to be safe, as we don't know -// whether they actually point to a NUL-terminated string. - -#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \ - template \ - class FormatForComparison { \ - public: \ - static ::std::string Format(CharType* value) { \ - return ::testing::PrintToString(static_cast(value)); \ - } \ - } - -GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char); -GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char); -GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t); -GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); - -#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ - -// If a C string is compared with an STL string object, we know it's meant -// to point to a NUL-terminated string, and thus can print it as a string. - -#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ - template <> \ - class FormatForComparison { \ - public: \ - static ::std::string Format(CharType* value) { \ - return ::testing::PrintToString(value); \ - } \ - } - -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); - -#if GTEST_HAS_GLOBAL_STRING -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string); -#endif - -#if GTEST_HAS_GLOBAL_WSTRING -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring); -#endif - -#if GTEST_HAS_STD_WSTRING -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); -#endif - -#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ - -// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) -// operand to be used in a failure message. The type (but not value) -// of the other operand may affect the format. This allows us to -// print a char* as a raw pointer when it is compared against another -// char* or void*, and print it as a C string when it is compared -// against an std::string object, for example. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -template -std::string FormatForComparisonFailureMessage( - const T1& value, const T2& /* other_operand */) { - return FormatForComparison::Format(value); -} - -// The helper function for {ASSERT|EXPECT}_EQ. -template -AssertionResult CmpHelperEQ(const char* expected_expression, - const char* actual_expression, - const T1& expected, - const T2& actual) { -#ifdef _MSC_VER -# pragma warning(push) // Saves the current warning state. -# pragma warning(disable:4389) // Temporarily disables warning on - // signed/unsigned mismatch. -#endif - - if (expected == actual) { - return AssertionSuccess(); - } - -#ifdef _MSC_VER -# pragma warning(pop) // Restores the warning state. -#endif - - return EqFailure(expected_expression, - actual_expression, - FormatForComparisonFailureMessage(expected, actual), - FormatForComparisonFailureMessage(actual, expected), - false); -} - -// With this overloaded version, we allow anonymous enums to be used -// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums -// can be implicitly cast to BiggestInt. -GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, - const char* actual_expression, - BiggestInt expected, - BiggestInt actual); - -// The helper class for {ASSERT|EXPECT}_EQ. The template argument -// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() -// is a null pointer literal. The following default implementation is -// for lhs_is_null_literal being false. -template -class EqHelper { - public: - // This templatized version is for the general case. - template - static AssertionResult Compare(const char* expected_expression, - const char* actual_expression, - const T1& expected, - const T2& actual) { - return CmpHelperEQ(expected_expression, actual_expression, expected, - actual); - } - - // With this overloaded version, we allow anonymous enums to be used - // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous - // enums can be implicitly cast to BiggestInt. - // - // Even though its body looks the same as the above version, we - // cannot merge the two, as it will make anonymous enums unhappy. - static AssertionResult Compare(const char* expected_expression, - const char* actual_expression, - BiggestInt expected, - BiggestInt actual) { - return CmpHelperEQ(expected_expression, actual_expression, expected, - actual); - } -}; - -// This specialization is used when the first argument to ASSERT_EQ() -// is a null pointer literal, like NULL, false, or 0. -template <> -class EqHelper { - public: - // We define two overloaded versions of Compare(). The first - // version will be picked when the second argument to ASSERT_EQ() is - // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or - // EXPECT_EQ(false, a_bool). - template - static AssertionResult Compare( - const char* expected_expression, - const char* actual_expression, - const T1& expected, - const T2& actual, - // The following line prevents this overload from being considered if T2 - // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) - // expands to Compare("", "", NULL, my_ptr), which requires a conversion - // to match the Secret* in the other overload, which would otherwise make - // this template match better. - typename EnableIf::value>::type* = 0) { - return CmpHelperEQ(expected_expression, actual_expression, expected, - actual); - } - - // This version will be picked when the second argument to ASSERT_EQ() is a - // pointer, e.g. ASSERT_EQ(NULL, a_pointer). - template - static AssertionResult Compare( - const char* expected_expression, - const char* actual_expression, - // We used to have a second template parameter instead of Secret*. That - // template parameter would deduce to 'long', making this a better match - // than the first overload even without the first overload's EnableIf. - // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to - // non-pointer argument" (even a deduced integral argument), so the old - // implementation caused warnings in user code. - Secret* /* expected (NULL) */, - T* actual) { - // We already know that 'expected' is a null pointer. - return CmpHelperEQ(expected_expression, actual_expression, - static_cast(NULL), actual); - } -}; - -// A macro for implementing the helper functions needed to implement -// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste -// of similar code. -// -// For each templatized helper function, we also define an overloaded -// version for BiggestInt in order to reduce code bloat and allow -// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled -// with gcc 4. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ -template \ -AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ - const T1& val1, const T2& val2) {\ - if (val1 op val2) {\ - return AssertionSuccess();\ - } else {\ - return AssertionFailure() \ - << "Expected: (" << expr1 << ") " #op " (" << expr2\ - << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ - << " vs " << FormatForComparisonFailureMessage(val2, val1);\ - }\ -}\ -GTEST_API_ AssertionResult CmpHelper##op_name(\ - const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) - -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - -// Implements the helper function for {ASSERT|EXPECT}_NE -GTEST_IMPL_CMP_HELPER_(NE, !=); -// Implements the helper function for {ASSERT|EXPECT}_LE -GTEST_IMPL_CMP_HELPER_(LE, <=); -// Implements the helper function for {ASSERT|EXPECT}_LT -GTEST_IMPL_CMP_HELPER_(LT, <); -// Implements the helper function for {ASSERT|EXPECT}_GE -GTEST_IMPL_CMP_HELPER_(GE, >=); -// Implements the helper function for {ASSERT|EXPECT}_GT -GTEST_IMPL_CMP_HELPER_(GT, >); - -#undef GTEST_IMPL_CMP_HELPER_ - -// The helper function for {ASSERT|EXPECT}_STREQ. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, - const char* actual_expression, - const char* expected, - const char* actual); - -// The helper function for {ASSERT|EXPECT}_STRCASEEQ. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, - const char* actual_expression, - const char* expected, - const char* actual); - -// The helper function for {ASSERT|EXPECT}_STRNE. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const char* s1, - const char* s2); - -// The helper function for {ASSERT|EXPECT}_STRCASENE. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, - const char* s2_expression, - const char* s1, - const char* s2); - - -// Helper function for *_STREQ on wide strings. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, - const char* actual_expression, - const wchar_t* expected, - const wchar_t* actual); - -// Helper function for *_STRNE on wide strings. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const wchar_t* s1, - const wchar_t* s2); - -} // namespace internal - -// IsSubstring() and IsNotSubstring() are intended to be used as the -// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by -// themselves. They check whether needle is a substring of haystack -// (NULL is considered a substring of itself only), and return an -// appropriate error message when they fail. -// -// The {needle,haystack}_expr arguments are the stringified -// expressions that generated the two real arguments. -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack); -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack); -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack); - -#if GTEST_HAS_STD_WSTRING -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack); -#endif // GTEST_HAS_STD_WSTRING - -namespace internal { - -// Helper template function for comparing floating-points. -// -// Template parameter: -// -// RawType: the raw floating-point type (either float or double) -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -template -AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, - const char* actual_expression, - RawType expected, - RawType actual) { - const FloatingPoint lhs(expected), rhs(actual); - - if (lhs.AlmostEquals(rhs)) { - return AssertionSuccess(); - } - - ::std::stringstream expected_ss; - expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) - << expected; - - ::std::stringstream actual_ss; - actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) - << actual; - - return EqFailure(expected_expression, - actual_expression, - StringStreamToString(&expected_ss), - StringStreamToString(&actual_ss), - false); -} - -// Helper function for implementing ASSERT_NEAR. -// -// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, - const char* expr2, - const char* abs_error_expr, - double val1, - double val2, - double abs_error); - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// A class that enables one to stream messages to assertion macros -class GTEST_API_ AssertHelper { - public: - // Constructor. - AssertHelper(TestPartResult::Type type, - const char* file, - int line, - const char* message); - ~AssertHelper(); - - // Message assignment is a semantic trick to enable assertion - // streaming; see the GTEST_MESSAGE_ macro below. - void operator=(const Message& message) const; - - private: - // We put our data in a struct so that the size of the AssertHelper class can - // be as small as possible. This is important because gcc is incapable of - // re-using stack space even for temporary variables, so every EXPECT_EQ - // reserves stack space for another AssertHelper. - struct AssertHelperData { - AssertHelperData(TestPartResult::Type t, - const char* srcfile, - int line_num, - const char* msg) - : type(t), file(srcfile), line(line_num), message(msg) { } - - TestPartResult::Type const type; - const char* const file; - int const line; - std::string const message; - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); - }; - - AssertHelperData* const data_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); -}; - -} // namespace internal - -#if GTEST_HAS_PARAM_TEST -// The pure interface class that all value-parameterized tests inherit from. -// A value-parameterized class must inherit from both ::testing::Test and -// ::testing::WithParamInterface. In most cases that just means inheriting -// from ::testing::TestWithParam, but more complicated test hierarchies -// may need to inherit from Test and WithParamInterface at different levels. -// -// This interface has support for accessing the test parameter value via -// the GetParam() method. -// -// Use it with one of the parameter generator defining functions, like Range(), -// Values(), ValuesIn(), Bool(), and Combine(). -// -// class FooTest : public ::testing::TestWithParam { -// protected: -// FooTest() { -// // Can use GetParam() here. -// } -// virtual ~FooTest() { -// // Can use GetParam() here. -// } -// virtual void SetUp() { -// // Can use GetParam() here. -// } -// virtual void TearDown { -// // Can use GetParam() here. -// } -// }; -// TEST_P(FooTest, DoesBar) { -// // Can use GetParam() method here. -// Foo foo; -// ASSERT_TRUE(foo.DoesBar(GetParam())); -// } -// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); - -template -class WithParamInterface { - public: - typedef T ParamType; - virtual ~WithParamInterface() {} - - // The current parameter value. Is also available in the test fixture's - // constructor. This member function is non-static, even though it only - // references static data, to reduce the opportunity for incorrect uses - // like writing 'WithParamInterface::GetParam()' for a test that - // uses a fixture whose parameter type is int. - const ParamType& GetParam() const { - GTEST_CHECK_(parameter_ != NULL) - << "GetParam() can only be called inside a value-parameterized test " - << "-- did you intend to write TEST_P instead of TEST_F?"; - return *parameter_; - } - - private: - // Sets parameter value. The caller is responsible for making sure the value - // remains alive and unchanged throughout the current test. - static void SetParam(const ParamType* parameter) { - parameter_ = parameter; - } - - // Static value used for accessing parameter during a test lifetime. - static const ParamType* parameter_; - - // TestClass must be a subclass of WithParamInterface and Test. - template friend class internal::ParameterizedTestFactory; -}; - -template -const T* WithParamInterface::parameter_ = NULL; - -// Most value-parameterized classes can ignore the existence of -// WithParamInterface, and can just inherit from ::testing::TestWithParam. - -template -class TestWithParam : public Test, public WithParamInterface { -}; - -#endif // GTEST_HAS_PARAM_TEST - -// Macros for indicating success/failure in test code. - -// ADD_FAILURE unconditionally adds a failure to the current test. -// SUCCEED generates a success - it doesn't automatically make the -// current test successful, as a test is only successful when it has -// no failure. -// -// EXPECT_* verifies that a certain condition is satisfied. If not, -// it behaves like ADD_FAILURE. In particular: -// -// EXPECT_TRUE verifies that a Boolean condition is true. -// EXPECT_FALSE verifies that a Boolean condition is false. -// -// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except -// that they will also abort the current function on failure. People -// usually want the fail-fast behavior of FAIL and ASSERT_*, but those -// writing data-driven tests often find themselves using ADD_FAILURE -// and EXPECT_* more. - -// Generates a nonfatal failure with a generic message. -#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") - -// Generates a nonfatal failure at the given source file location with -// a generic message. -#define ADD_FAILURE_AT(file, line) \ - GTEST_MESSAGE_AT_(file, line, "Failed", \ - ::testing::TestPartResult::kNonFatalFailure) - -// Generates a fatal failure with a generic message. -#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") - -// Define this macro to 1 to omit the definition of FAIL(), which is a -// generic name and clashes with some other libraries. -#if !GTEST_DONT_DEFINE_FAIL -# define FAIL() GTEST_FAIL() -#endif - -// Generates a success with a generic message. -#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") - -// Define this macro to 1 to omit the definition of SUCCEED(), which -// is a generic name and clashes with some other libraries. -#if !GTEST_DONT_DEFINE_SUCCEED -# define SUCCEED() GTEST_SUCCEED() -#endif - -// Macros for testing exceptions. -// -// * {ASSERT|EXPECT}_THROW(statement, expected_exception): -// Tests that the statement throws the expected exception. -// * {ASSERT|EXPECT}_NO_THROW(statement): -// Tests that the statement doesn't throw any exception. -// * {ASSERT|EXPECT}_ANY_THROW(statement): -// Tests that the statement throws an exception. - -#define EXPECT_THROW(statement, expected_exception) \ - GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) -#define EXPECT_NO_THROW(statement) \ - GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) -#define EXPECT_ANY_THROW(statement) \ - GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) -#define ASSERT_THROW(statement, expected_exception) \ - GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) -#define ASSERT_NO_THROW(statement) \ - GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) -#define ASSERT_ANY_THROW(statement) \ - GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) - -// Boolean assertions. Condition can be either a Boolean expression or an -// AssertionResult. For more information on how to use AssertionResult with -// these macros see comments on that class. -#define EXPECT_TRUE(condition) \ - GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ - GTEST_NONFATAL_FAILURE_) -#define EXPECT_FALSE(condition) \ - GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ - GTEST_NONFATAL_FAILURE_) -#define ASSERT_TRUE(condition) \ - GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ - GTEST_FATAL_FAILURE_) -#define ASSERT_FALSE(condition) \ - GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ - GTEST_FATAL_FAILURE_) - -// Includes the auto-generated header that implements a family of -// generic predicate assertion macros. -// Copyright 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command -// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! -// -// Implements a family of generic predicate assertion macros. - -#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ - -// Makes sure this header is not included before gtest.h. -#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ -# error Do not include gtest_pred_impl.h directly. Include gtest.h instead. -#endif // GTEST_INCLUDE_GTEST_GTEST_H_ - -// This header implements a family of generic predicate assertion -// macros: -// -// ASSERT_PRED_FORMAT1(pred_format, v1) -// ASSERT_PRED_FORMAT2(pred_format, v1, v2) -// ... -// -// where pred_format is a function or functor that takes n (in the -// case of ASSERT_PRED_FORMATn) values and their source expression -// text, and returns a testing::AssertionResult. See the definition -// of ASSERT_EQ in gtest.h for an example. -// -// If you don't care about formatting, you can use the more -// restrictive version: -// -// ASSERT_PRED1(pred, v1) -// ASSERT_PRED2(pred, v1, v2) -// ... -// -// where pred is an n-ary function or functor that returns bool, -// and the values v1, v2, ..., must support the << operator for -// streaming to std::ostream. -// -// We also define the EXPECT_* variations. -// -// For now we only support predicates whose arity is at most 5. -// Please email googletestframework@googlegroups.com if you need -// support for higher arities. - -// GTEST_ASSERT_ is the basic statement to which all of the assertions -// in this file reduce. Don't use this in your code. - -#define GTEST_ASSERT_(expression, on_failure) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (const ::testing::AssertionResult gtest_ar = (expression)) \ - ; \ - else \ - on_failure(gtest_ar.failure_message()) - - -// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use -// this in your code. -template -AssertionResult AssertPred1Helper(const char* pred_text, - const char* e1, - Pred pred, - const T1& v1) { - if (pred(v1)) return AssertionSuccess(); - - return AssertionFailure() << pred_text << "(" - << e1 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1; -} - -// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. -// Don't use this in your code. -#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, v1), \ - on_failure) - -// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use -// this in your code. -#define GTEST_PRED1_(pred, v1, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ - #v1, \ - pred, \ - v1), on_failure) - -// Unary predicate assertion macros. -#define EXPECT_PRED_FORMAT1(pred_format, v1) \ - GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED1(pred, v1) \ - GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) -#define ASSERT_PRED_FORMAT1(pred_format, v1) \ - GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED1(pred, v1) \ - GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) - - - -// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use -// this in your code. -template -AssertionResult AssertPred2Helper(const char* pred_text, - const char* e1, - const char* e2, - Pred pred, - const T1& v1, - const T2& v2) { - if (pred(v1, v2)) return AssertionSuccess(); - - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2; -} - -// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. -// Don't use this in your code. -#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ - on_failure) - -// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use -// this in your code. -#define GTEST_PRED2_(pred, v1, v2, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ - #v1, \ - #v2, \ - pred, \ - v1, \ - v2), on_failure) - -// Binary predicate assertion macros. -#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ - GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED2(pred, v1, v2) \ - GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) -#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ - GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED2(pred, v1, v2) \ - GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) - - - -// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use -// this in your code. -template -AssertionResult AssertPred3Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3) { - if (pred(v1, v2, v3)) return AssertionSuccess(); - - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3; -} - -// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. -// Don't use this in your code. -#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ - on_failure) - -// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use -// this in your code. -#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - pred, \ - v1, \ - v2, \ - v3), on_failure) - -// Ternary predicate assertion macros. -#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ - GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED3(pred, v1, v2, v3) \ - GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) -#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ - GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED3(pred, v1, v2, v3) \ - GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) - - - -// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use -// this in your code. -template -AssertionResult AssertPred4Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - const char* e4, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3, - const T4& v4) { - if (pred(v1, v2, v3, v4)) return AssertionSuccess(); - - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ", " - << e4 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3 - << "\n" << e4 << " evaluates to " << v4; -} - -// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. -// Don't use this in your code. -#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ - on_failure) - -// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use -// this in your code. -#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - #v4, \ - pred, \ - v1, \ - v2, \ - v3, \ - v4), on_failure) - -// 4-ary predicate assertion macros. -#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ - GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ - GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) -#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ - GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ - GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) - - - -// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use -// this in your code. -template -AssertionResult AssertPred5Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - const char* e4, - const char* e5, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3, - const T4& v4, - const T5& v5) { - if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); - - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ", " - << e4 << ", " - << e5 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3 - << "\n" << e4 << " evaluates to " << v4 - << "\n" << e5 << " evaluates to " << v5; -} - -// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. -// Don't use this in your code. -#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ - on_failure) - -// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use -// this in your code. -#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - #v4, \ - #v5, \ - pred, \ - v1, \ - v2, \ - v3, \ - v4, \ - v5), on_failure) - -// 5-ary predicate assertion macros. -#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ - GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ - GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) -#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ - GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ - GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) - - - -#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ - -// Macros for testing equalities and inequalities. -// -// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual -// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 -// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 -// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 -// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 -// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 -// -// When they are not, Google Test prints both the tested expressions and -// their actual values. The values must be compatible built-in types, -// or you will get a compiler error. By "compatible" we mean that the -// values can be compared by the respective operator. -// -// Note: -// -// 1. It is possible to make a user-defined type work with -// {ASSERT|EXPECT}_??(), but that requires overloading the -// comparison operators and is thus discouraged by the Google C++ -// Usage Guide. Therefore, you are advised to use the -// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are -// equal. -// -// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on -// pointers (in particular, C strings). Therefore, if you use it -// with two C strings, you are testing how their locations in memory -// are related, not how their content is related. To compare two C -// strings by content, use {ASSERT|EXPECT}_STR*(). -// -// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to -// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you -// what the actual value is when it fails, and similarly for the -// other comparisons. -// -// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() -// evaluate their arguments, which is undefined. -// -// 5. These macros evaluate their arguments exactly once. -// -// Examples: -// -// EXPECT_NE(5, Foo()); -// EXPECT_EQ(NULL, a_pointer); -// ASSERT_LT(i, array_size); -// ASSERT_GT(records.size(), 0) << "There is no record left."; - -#define EXPECT_EQ(expected, actual) \ - EXPECT_PRED_FORMAT2(::testing::internal:: \ - EqHelper::Compare, \ - expected, actual) -#define EXPECT_NE(expected, actual) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) -#define EXPECT_LE(val1, val2) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) -#define EXPECT_LT(val1, val2) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) -#define EXPECT_GE(val1, val2) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) -#define EXPECT_GT(val1, val2) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) - -#define GTEST_ASSERT_EQ(expected, actual) \ - ASSERT_PRED_FORMAT2(::testing::internal:: \ - EqHelper::Compare, \ - expected, actual) -#define GTEST_ASSERT_NE(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) -#define GTEST_ASSERT_LE(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) -#define GTEST_ASSERT_LT(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) -#define GTEST_ASSERT_GE(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) -#define GTEST_ASSERT_GT(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) - -// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of -// ASSERT_XY(), which clashes with some users' own code. - -#if !GTEST_DONT_DEFINE_ASSERT_EQ -# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) -#endif - -#if !GTEST_DONT_DEFINE_ASSERT_NE -# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) -#endif - -#if !GTEST_DONT_DEFINE_ASSERT_LE -# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) -#endif - -#if !GTEST_DONT_DEFINE_ASSERT_LT -# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) -#endif - -#if !GTEST_DONT_DEFINE_ASSERT_GE -# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) -#endif - -#if !GTEST_DONT_DEFINE_ASSERT_GT -# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) -#endif - -// C-string Comparisons. All tests treat NULL and any non-NULL string -// as different. Two NULLs are equal. -// -// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 -// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 -// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case -// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case -// -// For wide or narrow string objects, you can use the -// {ASSERT|EXPECT}_??() macros. -// -// Don't depend on the order in which the arguments are evaluated, -// which is undefined. -// -// These macros evaluate their arguments exactly once. - -#define EXPECT_STREQ(expected, actual) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) -#define EXPECT_STRNE(s1, s2) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) -#define EXPECT_STRCASEEQ(expected, actual) \ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) -#define EXPECT_STRCASENE(s1, s2)\ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) - -#define ASSERT_STREQ(expected, actual) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) -#define ASSERT_STRNE(s1, s2) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) -#define ASSERT_STRCASEEQ(expected, actual) \ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) -#define ASSERT_STRCASENE(s1, s2)\ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) - -// Macros for comparing floating-point numbers. -// -// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): -// Tests that two float values are almost equal. -// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): -// Tests that two double values are almost equal. -// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): -// Tests that v1 and v2 are within the given distance to each other. -// -// Google Test uses ULP-based comparison to automatically pick a default -// error bound that is appropriate for the operands. See the -// FloatingPoint template class in gtest-internal.h if you are -// interested in the implementation details. - -#define EXPECT_FLOAT_EQ(expected, actual)\ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ - expected, actual) - -#define EXPECT_DOUBLE_EQ(expected, actual)\ - EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ - expected, actual) - -#define ASSERT_FLOAT_EQ(expected, actual)\ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ - expected, actual) - -#define ASSERT_DOUBLE_EQ(expected, actual)\ - ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ - expected, actual) - -#define EXPECT_NEAR(val1, val2, abs_error)\ - EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ - val1, val2, abs_error) - -#define ASSERT_NEAR(val1, val2, abs_error)\ - ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ - val1, val2, abs_error) - -// These predicate format functions work on floating-point values, and -// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. -// -// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); - -// Asserts that val1 is less than, or almost equal to, val2. Fails -// otherwise. In particular, it fails if either val1 or val2 is NaN. -GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, - float val1, float val2); -GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, - double val1, double val2); - - -#if GTEST_OS_WINDOWS - -// Macros that test for HRESULT failure and success, these are only useful -// on Windows, and rely on Windows SDK macros and APIs to compile. -// -// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) -// -// When expr unexpectedly fails or succeeds, Google Test prints the -// expected result and the actual result with both a human-readable -// string representation of the error, if available, as well as the -// hex result code. -# define EXPECT_HRESULT_SUCCEEDED(expr) \ - EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) - -# define ASSERT_HRESULT_SUCCEEDED(expr) \ - ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) - -# define EXPECT_HRESULT_FAILED(expr) \ - EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) - -# define ASSERT_HRESULT_FAILED(expr) \ - ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) - -#endif // GTEST_OS_WINDOWS - -// Macros that execute statement and check that it doesn't generate new fatal -// failures in the current thread. -// -// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); -// -// Examples: -// -// EXPECT_NO_FATAL_FAILURE(Process()); -// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; -// -#define ASSERT_NO_FATAL_FAILURE(statement) \ - GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) -#define EXPECT_NO_FATAL_FAILURE(statement) \ - GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) - -// Causes a trace (including the source file path, the current line -// number, and the given message) to be included in every test failure -// message generated by code in the current scope. The effect is -// undone when the control leaves the current scope. -// -// The message argument can be anything streamable to std::ostream. -// -// In the implementation, we include the current line number as part -// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s -// to appear in the same block - as long as they are on different -// lines. -#define SCOPED_TRACE(message) \ - ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ - __FILE__, __LINE__, ::testing::Message() << (message)) - -// Compile-time assertion for type equality. -// StaticAssertTypeEq() compiles iff type1 and type2 are -// the same type. The value it returns is not interesting. -// -// Instead of making StaticAssertTypeEq a class template, we make it a -// function template that invokes a helper class template. This -// prevents a user from misusing StaticAssertTypeEq by -// defining objects of that type. -// -// CAVEAT: -// -// When used inside a method of a class template, -// StaticAssertTypeEq() is effective ONLY IF the method is -// instantiated. For example, given: -// -// template class Foo { -// public: -// void Bar() { testing::StaticAssertTypeEq(); } -// }; -// -// the code: -// -// void Test1() { Foo foo; } -// -// will NOT generate a compiler error, as Foo::Bar() is never -// actually instantiated. Instead, you need: -// -// void Test2() { Foo foo; foo.Bar(); } -// -// to cause a compiler error. -template -bool StaticAssertTypeEq() { - (void)internal::StaticAssertTypeEqHelper(); - return true; -} - -// Defines a test. -// -// The first parameter is the name of the test case, and the second -// parameter is the name of the test within the test case. -// -// The convention is to end the test case name with "Test". For -// example, a test case for the Foo class can be named FooTest. -// -// The user should put his test code between braces after using this -// macro. Example: -// -// TEST(FooTest, InitializesCorrectly) { -// Foo foo; -// EXPECT_TRUE(foo.StatusIsOK()); -// } - -// Note that we call GetTestTypeId() instead of GetTypeId< -// ::testing::Test>() here to get the type ID of testing::Test. This -// is to work around a suspected linker bug when using Google Test as -// a framework on Mac OS X. The bug causes GetTypeId< -// ::testing::Test>() to return different values depending on whether -// the call is from the Google Test framework itself or from user test -// code. GetTestTypeId() is guaranteed to always return the same -// value, as it always calls GetTypeId<>() from the Google Test -// framework. -#define GTEST_TEST(test_case_name, test_name)\ - GTEST_TEST_(test_case_name, test_name, \ - ::testing::Test, ::testing::internal::GetTestTypeId()) - -// Define this macro to 1 to omit the definition of TEST(), which -// is a generic name and clashes with some other libraries. -#if !GTEST_DONT_DEFINE_TEST -# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) -#endif - -// Defines a test that uses a test fixture. -// -// The first parameter is the name of the test fixture class, which -// also doubles as the test case name. The second parameter is the -// name of the test within the test case. -// -// A test fixture class must be declared earlier. The user should put -// his test code between braces after using this macro. Example: -// -// class FooTest : public testing::Test { -// protected: -// virtual void SetUp() { b_.AddElement(3); } -// -// Foo a_; -// Foo b_; -// }; -// -// TEST_F(FooTest, InitializesCorrectly) { -// EXPECT_TRUE(a_.StatusIsOK()); -// } -// -// TEST_F(FooTest, ReturnsElementCountCorrectly) { -// EXPECT_EQ(0, a_.size()); -// EXPECT_EQ(1, b_.size()); -// } - -#define TEST_F(test_fixture, test_name)\ - GTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId()) - -} // namespace testing - -// Use this function in main() to run all tests. It returns 0 if all -// tests are successful, or 1 otherwise. -// -// RUN_ALL_TESTS() should be invoked after the command line has been -// parsed by InitGoogleTest(). -// -// This function was formerly a macro; thus, it is in the global -// namespace and has an all-caps name. -int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; - -inline int RUN_ALL_TESTS() { - return ::testing::UnitTest::GetInstance()->Run(); -} - -#endif // GTEST_INCLUDE_GTEST_GTEST_H_ From c22c6e4d34a60cc6bd1f69f268f6ac2cc1573d8f Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 12 Nov 2018 15:30:14 -0700 Subject: [PATCH 102/273] Add LAMMPS changes to Kokkos Makefile --- lib/kokkos/Makefile.kokkos | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index 05f3cf7811..84ce007639 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -1,8 +1,14 @@ # Default settings common options. +#LAMMPS specific settings: +ifndef KOKKOS_PATH + KOKKOS_PATH=../../lib/kokkos +endif +CXXFLAGS=$(CCFLAGS) + # Options: Cuda,ROCm,OpenMP,Pthread,Qthreads,Serial -#KOKKOS_DEVICES ?= "OpenMP" -KOKKOS_DEVICES ?= "Pthread" +KOKKOS_DEVICES ?= "OpenMP" +#KOKKOS_DEVICES ?= "Pthread" # Options: # Intel: KNC,KNL,SNB,HSW,BDW,SKX # NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72 @@ -25,7 +31,7 @@ KOKKOS_CMAKE ?= "no" # Default settings specific options. # Options: force_uvm,use_ldg,rdc,enable_lambda -KOKKOS_CUDA_OPTIONS ?= "" +KOKKOS_CUDA_OPTIONS ?= "enable_lambda" # Return a 1 if a string contains a substring and 0 if not # Note the search string should be without '"' From 2b96dfd6cceb772b3d88a133d35075ee37dc5d6d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 12 Nov 2018 15:49:31 -0700 Subject: [PATCH 103/273] Remove deprecated Kokkos code --- src/KOKKOS/verlet_kokkos.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index f56e6015d0..d75a7e491f 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -537,7 +537,7 @@ void VerletKokkos::run(int n) Kokkos::deep_copy(LMPHostType(),f_merge_copy,atomKK->k_f.h_view); Kokkos::parallel_for(atomKK->k_f.extent(0), ForceAdder(atomKK->k_f.d_view,f_merge_copy)); - atomKK->k_f.modified_host() = 0; // special case + atomKK->k_f.clear_sync_state(); // special case atomKK->k_f.modify(); } @@ -585,8 +585,8 @@ void VerletKokkos::force_clear() { if (external_force_clear) return; - atomKK->k_f.modified_host() = 0; // ignore host forces/torques since device views - atomKK->k_torque.modified_host() = 0; // will be cleared below + atomKK->k_f.clear_sync_state(); // ignore host forces/torques since device views + atomKK->k_torque.clear_sync_state(); // will be cleared below // clear force on all particles // if either newton flag is set, also include ghosts From 0ca02b6f41029dd9d2ab047b0510154a56665687 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 12 Nov 2018 17:23:15 -0700 Subject: [PATCH 104/273] added new commands to doc pages, fixed a few missing entries as well --- doc/src/Commands_all.txt | 1 + doc/src/Commands_fix.txt | 7 +++++-- doc/src/commands_list.txt | 1 + doc/src/compute.txt | 1 + doc/src/fix.txt | 4 ++++ doc/src/fixes.txt | 2 ++ doc/src/lammps.book | 3 +++ src/REPLICA/fix_event_hyper.cpp | 4 ++-- src/REPLICA/fix_hyper.cpp | 2 +- src/REPLICA/fix_hyper_global.cpp | 6 +++--- src/REPLICA/fix_hyper_local.cpp | 8 ++++---- src/REPLICA/hyper.cpp | 6 +++--- 12 files changed, 30 insertions(+), 15 deletions(-) diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 6f54681342..c0b8c4516d 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -59,6 +59,7 @@ An alphabetic list of all LAMMPS commands. "fix_modify"_fix_modify.html, "group"_group.html, "group2ndx"_group2ndx.html, +"hyper"_hyper.html, "if"_if.html, "info"_info.html, "improper_coeff"_improper_coeff.html, diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 77684390bd..6d8f67b503 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -78,6 +78,8 @@ OPT. "grem"_fix_grem.html, "halt"_fix_halt.html, "heat"_fix_heat.html, +"hyper/global"_fix_hyper_global.html, +"hyper/local"_fix_hyper_local.html, "imd"_fix_imd.html, "indent"_fix_indent.html, "ipi"_fix_ipi.html, @@ -108,7 +110,7 @@ OPT. "nph/asphere (o)"_fix_nph_asphere.html, "nph/body"_fix_nph_body.html, "nph/eff"_fix_nh_eff.html, -"nph/sphere (ko)"_fix_nph_sphere.html, +"nph/sphere (o)"_fix_nph_sphere.html, "nphug (o)"_fix_nphug.html, "npt (iko)"_fix_nh.html, "npt/asphere (o)"_fix_npt_asphere.html, @@ -128,7 +130,7 @@ OPT. "nve/line"_fix_nve_line.html, "nve/manifold/rattle"_fix_nve_manifold_rattle.html, "nve/noforce"_fix_nve_noforce.html, -"nve/sphere (o)"_fix_nve_sphere.html, +"nve/sphere (ko)"_fix_nve_sphere.html, "nve/spin"_fix_nve_spin.html, "nve/tri"_fix_nve_tri.html, "nvk"_fix_nvk.html, @@ -147,6 +149,7 @@ OPT. "phonon"_fix_phonon.html, "pimd"_fix_pimd.html, "planeforce"_fix_planeforce.html, +"plumed"_fix_plumed.html, "poems"_fix_poems.html, "pour"_fix_pour.html, "precession/spin"_fix_precession_spin.html, diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index db3ef36ddf..78fa9fbf87 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -44,6 +44,7 @@ Commands :h1 fix_modify group group2ndx + hyper if improper_coeff improper_style diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 857795ffe5..761d3fe29f 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -176,6 +176,7 @@ compute"_Commands_compute.html doc page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. "ackland/atom"_compute_ackland_atom.html - +"adf"_compute_adf.html - angular distribution function "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom "angle"_compute_angle.html - "angle/local"_compute_angle_local.html - diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 8d00fa987d..1a216319b0 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -221,6 +221,8 @@ accelerated styles exist. "grem"_fix_grem.html - "halt"_fix_halt.html - terminate a dynamics run or minimization "heat"_fix_heat.html - add/subtract momentum-conserving heat +"hyper/global"_fix_hyper_global.html - global hyperdynamics +"hyper/local"_fix_hyper_local.html - local hyperdynamics "imd"_fix_imd.html - "indent"_fix_indent.html - impose force due to an indenter "ipi"_fix_ipi.html - @@ -238,6 +240,7 @@ accelerated styles exist. "manifoldforce"_fix_manifoldforce.html - "meso"_fix_meso.html - "meso"_fix_meso_move.html - move mesoscopic SPH/SDPD particles in a prescribed fashion +"meso/move"_fix_meso_move.html - "meso/stationary"_fix_meso_stationary.html - "momentum"_fix_momentum.html - zero the linear and/or angular momentum of a group of atoms "move"_fix_move.html - move atoms in a prescribed fashion @@ -293,6 +296,7 @@ accelerated styles exist. "phonon"_fix_phonon.html - "pimd"_fix_pimd.html - "planeforce"_fix_planeforce.html - constrain atoms to move in a plane +"plumed"_fix_plumed.html - wrapper on PLUMED free energy library "poems"_fix_poems.html - constrain clusters of atoms to move as coupled rigid bodies "pour"_fix_pour.html - pour new atoms/molecules into a granular simulation domain "precession/spin"_fix_precession_spin.html - diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 36ccd4f167..eb52583dce 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -57,6 +57,8 @@ Fixes :h1 fix_grem fix_halt fix_heat + fix_hyper_global + fix_hyper_local fix_imd fix_indent fix_ipi diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 419789b2a2..3ec314e09e 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -160,6 +160,7 @@ dump_cfg_uef.html echo.html group.html group2ndx.html +hyper.html if.html include.html info.html @@ -277,6 +278,8 @@ fix_gravity.html fix_grem.html fix_halt.html fix_heat.html +fix_hyper_global.html +fix_hyper_local.html fix_imd.html fix_indent.html fix_ipi.html diff --git a/src/REPLICA/fix_event_hyper.cpp b/src/REPLICA/fix_event_hyper.cpp index 7dd306c735..448228515f 100644 --- a/src/REPLICA/fix_event_hyper.cpp +++ b/src/REPLICA/fix_event_hyper.cpp @@ -11,8 +11,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include +#include +#include #include "fix_event_hyper.h" #include "atom.h" #include "update.h" diff --git a/src/REPLICA/fix_hyper.cpp b/src/REPLICA/fix_hyper.cpp index 9f01d9542c..2d51d8f6ec 100644 --- a/src/REPLICA/fix_hyper.cpp +++ b/src/REPLICA/fix_hyper.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include "fix_hyper.h" using namespace LAMMPS_NS; diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 8508b23440..c90c18becb 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -12,9 +12,9 @@ ------------------------------------------------------------------------- */ #include -#include -#include -#include +#include +#include +#include #include "fix_hyper_global.h" #include "atom.h" #include "update.h" diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 7072197a28..2a0c9fc92e 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -12,9 +12,9 @@ ------------------------------------------------------------------------- */ #include -#include -#include -#include +#include +#include +#include #include "fix_hyper_local.h" #include "atom.h" #include "update.h" @@ -99,7 +99,7 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : int iarg = 10; while (iarg < narg) { - /* + /* NOTE: do not enable this yet, need to think about it differently if (strcmp(arg[iarg],"histo") == 0) { if (iarg+5 > narg) error->all(FLERR,"Illegal fix hyper/local command"); histoflag = 1; diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 9e7dc34b13..28d98a81b2 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -11,9 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include -#include +#include +#include +#include #include "hyper.h" #include "update.h" #include "atom.h" From 5a4e44b75aa3191b3edf62e922009d7e8e7a0833 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 20:27:21 -0500 Subject: [PATCH 105/273] remove accidentally duplicated code --- src/bond_hybrid.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 1b150b8b34..4e5a26f731 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -227,9 +227,6 @@ void BondHybrid::settings(int narg, char **arg) if (strcmp(arg[i],"none") == 0) error->all(FLERR,"Bond style hybrid cannot have none as an argument"); - if (strcmp(arg[i],"none") == 0) - error->all(FLERR,"Bond style hybrid cannot have none as an argument"); - // register index of quartic bond type, // so that bond type 0 can be mapped to it From 5cb24632044b1b1e71a295b3548c5ce840a8f505 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 20:33:30 -0500 Subject: [PATCH 106/273] c++ style include files do not have a .h extension --- src/REPLICA/fix_event_hyper.cpp | 4 ++-- src/REPLICA/fix_hyper.cpp | 2 +- src/REPLICA/fix_hyper_global.cpp | 6 +++--- src/REPLICA/fix_hyper_local.cpp | 6 +++--- src/REPLICA/hyper.cpp | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/REPLICA/fix_event_hyper.cpp b/src/REPLICA/fix_event_hyper.cpp index 448228515f..eae1ad021d 100644 --- a/src/REPLICA/fix_event_hyper.cpp +++ b/src/REPLICA/fix_event_hyper.cpp @@ -11,8 +11,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include +#include +#include #include "fix_event_hyper.h" #include "atom.h" #include "update.h" diff --git a/src/REPLICA/fix_hyper.cpp b/src/REPLICA/fix_hyper.cpp index 2d51d8f6ec..829d4b2474 100644 --- a/src/REPLICA/fix_hyper.cpp +++ b/src/REPLICA/fix_hyper.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include "fix_hyper.h" using namespace LAMMPS_NS; diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index c90c18becb..980dd6aff1 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -12,9 +12,9 @@ ------------------------------------------------------------------------- */ #include -#include -#include -#include +#include +#include +#include #include "fix_hyper_global.h" #include "atom.h" #include "update.h" diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 2a0c9fc92e..0c871d778a 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -12,9 +12,9 @@ ------------------------------------------------------------------------- */ #include -#include -#include -#include +#include +#include +#include #include "fix_hyper_local.h" #include "atom.h" #include "update.h" diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 28d98a81b2..04ff43aa02 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -11,9 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include -#include +#include +#include +#include #include "hyper.h" #include "update.h" #include "atom.h" From c4c90a96ec35cfd1983f4f00757f32cd6456013d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 20:49:01 -0500 Subject: [PATCH 107/273] avoid void return from non-void function --- src/REPLICA/fix_hyper_global.cpp | 2 ++ src/REPLICA/fix_hyper_local.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 980dd6aff1..14038cd6d2 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -467,6 +467,8 @@ double FixHyperGlobal::compute_vector(int i) if (i == 8) return t_hyper; if (i == 9) return (double) nevent; if (i == 10) return (double) nevent_atom; + + return 0.0; } /* ---------------------------------------------------------------------- diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 0c871d778a..8d198e404d 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -1378,6 +1378,8 @@ double FixHyperLocal::compute_vector(int i) MPI_Allreduce(&nnewbond,&allnew,1,MPI_INT,MPI_SUM,world); return (double) 0.5*allnew; } + + return 0.0; } /* ---------------------------------------------------------------------- From 443644025f5ba5b7cfaab6ecac01ecb6c03c89cf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 20:50:14 -0500 Subject: [PATCH 108/273] silence compiler warnings --- src/REPLICA/fix_hyper_global.cpp | 2 ++ src/REPLICA/fix_hyper_local.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 14038cd6d2..7b120c3327 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -487,6 +487,8 @@ double FixHyperGlobal::query(int i) if (i == 7) return compute_vector(5); // fraction with zero bias error->all(FLERR,"Invalid query to fix hyper/global"); + + return 0.0; } /* ---------------------------------------------------------------------- diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 8d198e404d..4152bd3836 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -1417,6 +1417,8 @@ double FixHyperLocal::query(int i) if (i == 23) return compute_vector(18); // count of non-matching bias coeffs error->all(FLERR,"Invalid query to fix hyper/local"); + + return 0.0; } /* ---------------------------------------------------------------------- From b776f0f29f8771366a44560d53e733b637e714d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 21:11:55 -0500 Subject: [PATCH 109/273] remove dead code and silence warnings about unused parameters --- src/REPLICA/fix_hyper_global.cpp | 12 +++++------- src/REPLICA/fix_hyper_local.cpp | 13 ++++++------- src/REPLICA/hyper.cpp | 4 ++-- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 7b120c3327..d119083a3b 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -136,7 +136,7 @@ void FixHyperGlobal::init() /* ---------------------------------------------------------------------- */ -void FixHyperGlobal::init_list(int id, NeighList *ptr) +void FixHyperGlobal::init_list(int /* id */, NeighList *ptr) { list = ptr; } @@ -167,7 +167,7 @@ void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag) void FixHyperGlobal::pre_neighbor() { - int i,m,jnum,iold,jold,ilocal,jlocal; + int m,iold,jold,ilocal,jlocal; double distsq; // reset local IDs for owned bond atoms, since atoms have migrated @@ -200,10 +200,10 @@ void FixHyperGlobal::pre_neighbor() /* ---------------------------------------------------------------------- */ -void FixHyperGlobal::pre_reverse(int eflag, int vflag) +void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */) { int i,j,m,imax,jmax; - double xtmp,ytmp,ztmp,delx,dely,delz; + double delx,dely,delz; double r,r0,estrain,rmax,r0max,emax,dt_boost; double vbias,fbias,fbiasr; @@ -299,11 +299,9 @@ void FixHyperGlobal::pre_reverse(int eflag, int vflag) void FixHyperGlobal::build_bond_list(int natom) { - int i,j,n,ii,jj,inum,jnum; + int i,j,ii,jj,inum,jnum; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; int *ilist,*jlist,*numneigh,**firstneigh; - tagint *bptr; - double *rptr; if (natom) { nevent++; diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 4152bd3836..a7d384905d 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -316,7 +316,7 @@ void FixHyperLocal::init() /* ---------------------------------------------------------------------- */ -void FixHyperLocal::init_list(int id, NeighList *ptr) +void FixHyperLocal::init_list(int /* id */, NeighList *ptr) { list = ptr; } @@ -413,7 +413,7 @@ void FixHyperLocal::pre_neighbor() /* ---------------------------------------------------------------------- */ -void FixHyperLocal::pre_reverse(int eflag, int vflag) +void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) { int i,j,m,ii,jj,inum,jnum,iold,jold,nbond,bondindex; tagint itag,jtag; @@ -788,7 +788,6 @@ void FixHyperLocal::pre_reverse(int eflag, int vflag) if (checkcoeff && update->ntimestep % checkcoeff_every == 0) { int jb,jbonds; - double ibias,jbias; for (i = 0; i < nlocal; i++) { nbond = numbond[i]; @@ -998,9 +997,9 @@ void FixHyperLocal::build_bond_list(int natom) /* ---------------------------------------------------------------------- */ int FixHyperLocal::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /* pbc_flag */, int * /* pbc */) { - int i,j,k,m,ibond,nbond,start; + int i,j,m; m = 0; @@ -1039,7 +1038,7 @@ int FixHyperLocal::pack_forward_comm(int n, int *list, double *buf, void FixHyperLocal::unpack_forward_comm(int n, int first, double *buf) { - int i,j,k,m,last,ibond,nbond,jlocal,flag; + int i,m,last; m = 0; last = first + n; @@ -1158,7 +1157,7 @@ void FixHyperLocal::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixHyperLocal::copy_arrays(int i, int j, int delflag) +void FixHyperLocal::copy_arrays(int i, int j, int /* delflag */) { // avoid valgrind copy-to-self warning diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 04ff43aa02..51490702fb 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -413,7 +413,7 @@ void Hyper::command(int narg, char **arg) short dynamics run ------------------------------------------------------------------------- */ -void Hyper::dynamics(int nsteps, double &time_category) +void Hyper::dynamics(int nsteps, double & /* time_category */) { update->whichflag = 1; update->nsteps = nsteps; @@ -470,7 +470,7 @@ void Hyper::quench(int flag) //update->minimize->setup_minimal(1); // NOTE: what doing with ncalls? - int ncalls = neighbor->ncalls; + // int ncalls = neighbor->ncalls; timer->barrier_start(); update->minimize->run(maxiter); From 7e779d16de45ac9fff68eaec1b1ebeaf3a0f6b2b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 21:33:37 -0500 Subject: [PATCH 110/273] correct broken links in manual reported by 'make html' --- doc/src/fix_hyper_global.txt | 9 ++++----- doc/src/fix_hyper_local.txt | 8 ++++---- doc/src/hyper.txt | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index 55c63547af..27396491d2 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -190,11 +190,10 @@ The "fix_modify"_fix_modify.html {energy} option is supported by this fix to add the energy of the bias potential to the the system's potential energy as part of "thermodynamic output"_thermo_style.html. -This fix computes a global scalar and global vector of length 11, -which can be accessed by various "output -commands"_Section_howto.html#howto_15. The scalar is the magnitude of -the bias potential (energy units) applied on the current timestep. -The vector stores the following quantities: +This fix computes a global scalar and global vector of length 11, which +can be accessed by various "output commands"_Howto_output.html". The +scalar is the magnitude of the bias potential (energy units) applied on +the current timestep. The vector stores the following quantities: 1 = boost factor on this step (unitless) 2 = max strain Eij of any bond on this step (unitless) diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index dfdd22251a..4af6ab5a55 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -62,7 +62,7 @@ bond-boost form of a bias potential for HD is due to Miron and Fichthorn as described in "(Miron)"_#Mironlhd. To understand this description, you should first read the description -of the GHD algorithm on the "fix hyper/global"_fix_hyper/global.html +of the GHD algorithm on the "fix hyper/global"_fix_hyper_global.html doc page. This description of LHD builds on the GHD description. The definition of bonds, Eij, and Emax are the same for GHD and LHD. @@ -284,7 +284,7 @@ potential energy as part of "thermodynamic output"_thermo_style.html. This fix computes a global scalar and global vector of length 23, which can be accessed by various "output -commands"_Section_howto.html#howto_15. The scalar is the magnitude of +commands"_Howto_output.html. The scalar is the magnitude of the bias potential (energy units) applied on the current timestep, summed over all biased bonds. The vector stores the following quantities: @@ -385,8 +385,8 @@ minimization"_minimize.html. [Restrictions:] This fix is part of the REPLICA package. It is only enabled if LAMMPS -was built with that package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. +was built with that package. See the "Build package"_Build_package.html +doc page for more info. [Related commands:] diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index b6fe27b9c7..0ea4ac781b 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -187,6 +187,6 @@ The option defaults are min = 0.1 0.1 40 50 and time = steps. [(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, 144110 (2013). -:link(Voter2002prd) +:link(Voter2002hd) [(Voter2002)] Voter, Montalenti, Germann, Annual Review of Materials Research 32, 321 (2002). From a026ce96690fcbddfef265fc916f925876961c42 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Nov 2018 21:38:26 -0500 Subject: [PATCH 111/273] correct broken links detected by make mobi --- doc/src/Packages_user.txt | 2 +- doc/src/fix_hyper_global.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index e1269b0d0c..463b8ab2e7 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -68,7 +68,7 @@ Package, Description, Doc page, Example, Library "USER-QUIP"_Packages_details.html#PKG-USER-QUIP, QUIP/libatoms interface,"pair_style quip"_pair_quip.html, USER/quip, ext "USER-REAXC"_Packages_details.html#PKG-USER-REAXC, ReaxFF potential (C/C++) ,"pair_style reaxc"_pair_reaxc.html, reax, no "USER-SCAFACOS"_Packages_details.html#PKG-USER-SCAFACOS, wrapper on ScaFaCoS solver,"kspace_style scafacos"_kspace_style.html, USER/scafacos, ext -"USER-SDPD"_Packages_details.html#PKG-USER-SDPD, smoothed dissipative particle dynamics,"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal, USER/sdpd, no +"USER-SDPD"_Packages_details.html#PKG-USER-SDPD, smoothed dissipative particle dynamics,"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html, USER/sdpd, no "USER-SMD"_Packages_details.html#PKG-USER-SMD, smoothed Mach dynamics,"SMD User Guide"_PDF/SMD_LAMMPS_userguide.pdf, USER/smd, ext "USER-SMTBQ"_Packages_details.html#PKG-USER-SMTBQ, second moment tight binding QEq potential,"pair_style smtbq"_pair_smtbq.html, USER/smtbq, no "USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index 27396491d2..4b9e971e14 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -191,7 +191,7 @@ fix to add the energy of the bias potential to the the system's potential energy as part of "thermodynamic output"_thermo_style.html. This fix computes a global scalar and global vector of length 11, which -can be accessed by various "output commands"_Howto_output.html". The +can be accessed by various "output commands"_Howto_output.html. The scalar is the magnitude of the bias potential (energy units) applied on the current timestep. The vector stores the following quantities: From 380f0e49716e794c7255cc811f582ae53be2f0e9 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 13 Nov 2018 08:06:40 -0700 Subject: [PATCH 112/273] remove some debugging code --- src/REPLICA/fix_hyper_local.cpp | 12 +++++++----- src/REPLICA/fix_hyper_local.h | 15 ++++----------- src/REPLICA/hyper.cpp | 3 --- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index a7d384905d..dac88a8efa 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -308,10 +308,10 @@ void FixHyperLocal::init() neighbor->requests[irequest]->cutoff = dcut; neighbor->requests[irequest]->occasional = 1; - // DEBUG timing output + // extra timing output - timefirst = timesecond = timethird = timefourth = timefifth = - timesixth = timeseventh = timetotal = 0.0; + //timefirst = timesecond = timethird = timefourth = timefifth = + // timesixth = timeseventh = timetotal = 0.0; } /* ---------------------------------------------------------------------- */ @@ -530,18 +530,20 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) continue; } - // DEBUG - only good for 2 dims x,y - if (j >= nlocal) { if (x[j][0] < sublo[0]) rmaxbig = MAX(rmaxbig,sublo[0]-x[j][0]); if (x[j][1] < sublo[1]) rmaxbig = MAX(rmaxbig,sublo[1]-x[j][1]); + if (x[j][2] < sublo[2]) rmaxbig = MAX(rmaxbig,sublo[2]-x[j][2]); if (x[j][0] > subhi[0]) rmaxbig = MAX(rmaxbig,x[j][0]-subhi[0]); if (x[j][1] > subhi[1]) rmaxbig = MAX(rmaxbig,x[j][1]-subhi[1]); + if (x[j][2] > subhi[2]) rmaxbig = MAX(rmaxbig,x[j][2]-subhi[2]); if (maxstrain[j] < qfactor) { if (x[j][0] < sublo[0]) rmax = MAX(rmax,sublo[0]-x[j][0]); if (x[j][1] < sublo[1]) rmax = MAX(rmax,sublo[1]-x[j][1]); + if (x[j][2] < sublo[2]) rmax = MAX(rmax,sublo[2]-x[j][2]); if (x[j][0] > subhi[0]) rmax = MAX(rmax,x[j][0]-subhi[0]); if (x[j][1] > subhi[1]) rmax = MAX(rmax,x[j][1]-subhi[1]); + if (x[j][2] > subhi[2]) rmax = MAX(rmax,x[j][2]-subhi[2]); } } } diff --git a/src/REPLICA/fix_hyper_local.h b/src/REPLICA/fix_hyper_local.h index 5150386929..9fe4d03fb9 100644 --- a/src/REPLICA/fix_hyper_local.h +++ b/src/REPLICA/fix_hyper_local.h @@ -96,8 +96,10 @@ class FixHyperLocal : public FixHyper { double rmaxever,rmaxeverbig; int ghost_toofar; - double timefirst,timesecond,timethird,timefourth; - double timefifth,timesixth,timeseventh,timetotal; + // extra timers + + //double timefirst,timesecond,timethird,timefourth; + //double timefifth,timesixth,timeseventh,timetotal; // data structs for per-atom and per-bond info // all of these are for current owned and ghost atoms @@ -148,15 +150,6 @@ class FixHyperLocal : public FixHyper { int histo_flag,histo_every,histo_count,histo_print,histo_steps; double histo_delta,invhisto_delta,histo_lo; bigint *histo,*allhisto; - - // DEBUG: MPI data struct for finding min/max bias coeffs via Allreduce - - struct Two { - double value; - int proc; - }; - Two pairme,pairall; - }; } diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 51490702fb..89409d63fc 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -469,9 +469,6 @@ void Hyper::quench(int flag) //modify->addstep_compute_all(update->ntimestep); //update->minimize->setup_minimal(1); - // NOTE: what doing with ncalls? - // int ncalls = neighbor->ncalls; - timer->barrier_start(); update->minimize->run(maxiter); timer->barrier_stop(); From 4805e1df2214fc7dfa7dc00fa9e5484d7c4bd262 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 13 Nov 2018 08:29:07 -0700 Subject: [PATCH 113/273] doc page additions for USER-PLUMED package --- doc/src/Build_extras.txt | 61 +++++++++++++++++++----------------- doc/src/Build_package.txt | 1 + doc/src/Packages_details.txt | 19 ++++++----- doc/src/Packages_user.txt | 3 ++ 4 files changed, 48 insertions(+), 36 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index e4ab6b9541..3b685a44e3 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -41,11 +41,11 @@ This is the list of packages that may require additional steps. "USER-ATC"_#user-atc, "USER-AWPMD"_#user-awpmd, "USER-COLVARS"_#user-colvars, -"USER-PLUMED" _#user-plumed, "USER-H5MD"_#user-h5md, "USER-INTEL"_#user-intel, "USER-MOLFILE"_#user-molfile, "USER-NETCDF"_#user-netcdf, +"USER-PLUMED"_#user-plumed, "USER-OMP"_#user-omp, "USER-QMMM"_#user-qmmm, "USER-QUIP"_#user-quip, @@ -719,47 +719,52 @@ USER-PLUMED package :h4,link(user-plumed) [Traditional make]: -Before building LAMMPS with this package, you must first build -PLUMED. We recommending building PLUMED separately to LAMMPS using -the instructions that can be found at http://plumed.github.io/doc-master/user-doc/html/_installation.html. +Before building LAMMPS with this package, you must first build PLUMED. +We recommending building PLUMED separately to LAMMPS using the +instructions that can be found at +http://plumed.github.io/doc-master/user-doc/html/_installation.html. Before compiling LAMMPS you can then install the fix plumed command and compile LAMMPS in the usual manner: make yes-user-plumed make machine :pre -Once this compilation completes you should be able to run LAMMPS in the usual -way. When running LAMMPS with an input script that contains a fix -plumed command LAMMPS will try to call the PLUMED runtime library. PLUMED -must therefore be available in your path if LAMMPS is compiled in this way. +Once this compilation completes you should be able to run LAMMPS in +the usual way. When running LAMMPS with an input script that contains +a fix plumed command LAMMPS will try to call the PLUMED runtime +library. PLUMED must therefore be available in your path if LAMMPS is +compiled in this way. -On some machines it is not possible to call runtime libraries in the way described -above. When compiling on these machines it is thus better to statically link -PLUMED when compiling LAMMPS. To do this you must either download a PLUMED -tarball from http://www.plumed.org/get-it or clone it using -git clone https://github.com/plumed/plumed2.git. If you download the tarball -unpack it in the /lib/plumed directory. Similarly if you clone -it clone it to the /lib/plumed directory as if there is a version of PLUMED within -this directory LAMMPS will always try to statically link the version of PLUMED -that this directory contains instead of dynamically linking the library. +On some machines it is not possible to call runtime libraries in the +way described above. When compiling on these machines it is thus +better to statically link PLUMED when compiling LAMMPS. To do this +you must either download a PLUMED tarball from +http://www.plumed.org/get-it or clone it using git clone +https://github.com/plumed/plumed2.git. If you download the tarball +unpack it in the /lib/plumed directory. Similarly if you clone it +clone it to the /lib/plumed directory as if there is a version of +PLUMED within this directory LAMMPS will always try to statically link +the version of PLUMED that this directory contains instead of +dynamically linking the library. -Once you have downloaded PLUMED into /lib/plumed you must again build the code -here by following the instructions that can be found at +Once you have downloaded PLUMED into /lib/plumed you must again build +the code here by following the instructions that can be found at http://plumed.github.io/doc-master/user-doc/html/_installation.html. -You can statically link PLUMED manually and if you want to access the full -range of PLUMED functionalities this is what you should do. If you only want the -basic range of functionalities, however, (i.e. no user contributed modules) then -you can download and compile PLUMED in one step from the lammps/src dir, using a -command like like those below: +You can statically link PLUMED manually and if you want to access the +full range of PLUMED functionalities this is what you should do. If +you only want the basic range of functionalities, however, (i.e. no +user contributed modules) then you can download and compile PLUMED in +one step from the lammps/src dir, using a command like like those +below: make lib-plumed # print help message make lib-plumed args="-b" # download and build the latest stable version of PLUMED -These commands will simply invoke the lib/plumed/Install.py script with -args specified. Furthermore, once the script has completed you should -have a compiled version of PLUMED. With this built you can install/un-install -PLUMED and build LAMMPS in the usual manner: +These commands will simply invoke the lib/plumed/Install.py script +with args specified. Furthermore, once the script has completed you +should have a compiled version of PLUMED. With this built you can +install/un-install PLUMED and build LAMMPS in the usual manner: make yes-user-plumed make machine :pre diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index f1aa4bb671..82833b867c 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -56,6 +56,7 @@ packages: "USER-INTEL"_Build_extras.html#user-intel, "USER-MOLFILE"_Build_extras.html#user-molfile, "USER-NETCDF"_Build_extras.html#user-netcdf, +"USER-PLUMED"_Build_extras.html#user-plumed, "USER-OMP"_Build_extras.html#user-omp, "USER-QMMM"_Build_extras.html#user-qmmm, "USER-QUIP"_Build_extras.html#user-quip, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 4bc72f3147..fa9ad1bb95 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -89,6 +89,7 @@ as contained in the file name. "USER-NETCDF"_#PKG-USER-NETCDF, "USER-OMP"_#PKG-USER-OMP, "USER-PHONON"_#PKG-USER-PHONON, +"USER-PLUMED"_#PKG-USER-PLUMED, "USER-PTM"_#PKG-USER-PTM, "USER-QMMM"_#PKG-USER-QMMM, "USER-QTB"_#PKG-USER-QTB, @@ -1205,14 +1206,16 @@ USER-PLUMED package :link(USER-PLUMED),h4 [Contents:] -The fix plumed command allows you to use the plugin for molecular -dynamics PLUMED to analyse and bias your LAMMPS trajectory on the fly. -In practise PLUMED is called from within the lammps input script by using -the "fix plumed _fix_plumed.html command. +The fix plumed command allows you to use the PLUMED free energy plugin +for molecular dynamics to analyse and bias your LAMMPS trajectory on +the fly. The PLUMED library is called from within the LAMMPS input +script by using the "fix plumed _fix_plumed.html command. -[Authors:] The PLUMED library is written and maintained by -Massimilliano Bonomi, Giovanni Bussi, Carlo Camiloni and -Gareth Tribello. +[Authors:] The "PLUMED library"_#PLUMED is written and maintained by +Massimilliano Bonomi, Giovanni Bussi, Carlo Camiloni and Gareth +Tribello. + +:link(PLUMED,http://www.plumed.org) [Install:] @@ -1224,7 +1227,7 @@ extras"_Build_extras.html doc page. src/USER-PLUMED/README lib/plumed/README -"fix plumed "_fix_plumed.html +"fix plumed"_fix_plumed.html examples/USER/plumed :ul :line diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index e1269b0d0c..07548fb643 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -62,6 +62,7 @@ Package, Description, Doc page, Example, Library "USER-NETCDF"_Packages_details.html#PKG-USER-NETCDF, dump output via NetCDF,"dump netcdf"_dump_netcdf.html, n/a, ext "USER-OMP"_Packages_details.html#PKG-USER-OMP, OpenMP-enabled styles,"Speed omp"_Speed_omp.html, "Benchmarks"_http://lammps.sandia.gov/bench.html, no "USER-PHONON"_Packages_details.html#PKG-USER-PHONON, phonon dynamical matrix,"fix phonon"_fix_phonon.html, USER/phonon, no +"USER-PLUMED"_Packages_details.html#PKG-USER-PLUMED, "PLUMED"_#PLUMED free energy library,"fix plumed"_fix_plumed.html, USER/plumed, ext "USER-PTM"_Packages_details.html#PKG-USER-PTM, Polyhedral Template Matching,"compute ptm/atom"_compute_ptm_atom.html, n/a, no "USER-QMMM"_Packages_details.html#PKG-USER-QMMM, QM/MM coupling,"fix qmmm"_fix_qmmm.html, USER/qmmm, ext "USER-QTB"_Packages_details.html#PKG-USER-QTB, quantum nuclear effects,"fix qtb"_fix_qtb.html "fix qbmsst"_fix_qbmsst.html, qtb, no @@ -75,4 +76,6 @@ Package, Description, Doc page, Example, Library "USER-TALLY"_Packages_details.html#PKG-USER-TALLY, pairwise tally computes,"compute XXX/tally"_compute_tally.html, USER/tally, no "USER-UEF"_Packages_details.html#PKG-USER-UEF, extensional flow,"fix nvt/uef"_fix_nh_uef.html, USER/uef, no "USER-VTK"_Packages_details.html#PKG-USER-VTK, dump output via VTK, "compute vtk"_dump_vtk.html, n/a, ext :tb(ea=c,ca1=l) + :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) +:link(PLUMED,http://www.plumed.org) From 4c1fbc359a414ae82fa0d40e107a0392df307c1b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 05:28:19 -0500 Subject: [PATCH 114/273] use tagint when unpacking atom tags from communication buffers --- src/MOLECULE/atom_vec_molecular.cpp | 48 ++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/MOLECULE/atom_vec_molecular.cpp b/src/MOLECULE/atom_vec_molecular.cpp index 6e903a936e..cdd3f02505 100644 --- a/src/MOLECULE/atom_vec_molecular.cpp +++ b/src/MOLECULE/atom_vec_molecular.cpp @@ -677,33 +677,33 @@ int AtomVecMolecular::unpack_exchange(double *buf) num_bond[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_bond[nlocal]; k++) { bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (int) ubuf(buf[m++]).i; + bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_angle[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_angle[nlocal]; k++) { angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; + angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_dihedral[nlocal]; k++) { dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (int) ubuf(buf[m++]).i; + dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_improper[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_improper[nlocal]; k++) { improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (int) ubuf(buf[m++]).i; + improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; } nspecial[nlocal][0] = (int) ubuf(buf[m++]).i; @@ -840,33 +840,33 @@ int AtomVecMolecular::unpack_restart(double *buf) num_bond[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_bond[nlocal]; k++) { bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (int) ubuf(buf[m++]).i; + bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_angle[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_angle[nlocal]; k++) { angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; + angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_dihedral[nlocal]; k++) { dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (int) ubuf(buf[m++]).i; + dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; } num_improper[nlocal] = (int) ubuf(buf[m++]).i; for (k = 0; k < num_improper[nlocal]; k++) { improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (int) ubuf(buf[m++]).i; + improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; } nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; From 7a22b8aa621528327637ab3bc159b467db9c7478 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 05:29:26 -0500 Subject: [PATCH 115/273] check only in currently added data file atoms for dihedral overflow --- src/read_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/read_data.cpp b/src/read_data.cpp index 26c406c1d6..1dbb9506c6 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -1435,7 +1435,7 @@ void ReadData::dihedrals(int firstpass) if (firstpass) { int max = 0; - for (int i = 0; i < nlocal; i++) max = MAX(max,count[i]); + for (int i = nlocal_previous; i < nlocal; i++) max = MAX(max,count[i]); int maxall; MPI_Allreduce(&max,&maxall,1,MPI_INT,MPI_MAX,world); if (addflag == NONE) maxall += atom->extra_dihedral_per_atom; From a942d8b3ba0bfb784bb71e091e7ef5ae1af38c59 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 05:30:23 -0500 Subject: [PATCH 116/273] use memset() for clearing of arrays --- src/read_data.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/read_data.cpp b/src/read_data.cpp index 1dbb9506c6..373ba30151 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -1248,7 +1248,7 @@ void ReadData::bonds(int firstpass) int *count = NULL; if (firstpass) { memory->create(count,nlocal,"read_data:count"); - for (int i = 0; i < nlocal; i++) count[i] = 0; + memset(count,0,nlocal*sizeof(int)); } // read and process bonds @@ -1331,7 +1331,7 @@ void ReadData::angles(int firstpass) int *count = NULL; if (firstpass) { memory->create(count,nlocal,"read_data:count"); - for (int i = 0; i < nlocal; i++) count[i] = 0; + memset(count,0,nlocal*sizeof(int)); } // read and process angles @@ -1414,7 +1414,7 @@ void ReadData::dihedrals(int firstpass) int *count = NULL; if (firstpass) { memory->create(count,nlocal,"read_data:count"); - for (int i = 0; i < nlocal; i++) count[i] = 0; + memset(count,0,nlocal*sizeof(int)); } // read and process dihedrals @@ -1497,7 +1497,7 @@ void ReadData::impropers(int firstpass) int *count = NULL; if (firstpass) { memory->create(count,nlocal,"read_data:count"); - for (int i = 0; i < nlocal; i++) count[i] = 0; + memset(count,0,nlocal*sizeof(int)); } // read and process impropers From 952e52982e3c66541a4bb07f465863d81ab5f7d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 05:37:59 -0500 Subject: [PATCH 117/273] add comment to indicate code intended for backward compatibility only --- src/read_restart.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 252c48d251..6b9ea8d773 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -924,11 +924,13 @@ void ReadRestart::header(int incompatible) atom->extra_dihedral_per_atom = read_int(); } else if (flag == EXTRA_IMPROPER_PER_ATOM) { atom->extra_improper_per_atom = read_int(); - } else if (flag == EXTRA_SPECIAL_PER_ATOM) { - force->special_extra = read_int(); } else if (flag == ATOM_MAXSPECIAL) { atom->maxspecial = read_int(); + // for backward compatibility + } else if (flag == EXTRA_SPECIAL_PER_ATOM) { + force->special_extra = read_int(); + } else error->all(FLERR,"Invalid flag in header section of restart file"); flag = read_int(); From 04520e627dc50244cd81439de845b3c59adcff6a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 21:26:36 -0500 Subject: [PATCH 118/273] add code and scripts to support all three plumed linkage modes with fix plumed for conventional build --- lib/plumed/Install.py | 36 ++++++++++++++---------------- lib/plumed/Makefile.lammps.runtime | 5 +++++ lib/plumed/Makefile.lammps.shared | 5 +++++ lib/plumed/Makefile.lammps.static | 4 +++- src/USER-PLUMED/fix_plumed.cpp | 16 ++++++++----- 5 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 lib/plumed/Makefile.lammps.runtime create mode 100644 lib/plumed/Makefile.lammps.shared diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 481cfdcc0e..61c1c35ee2 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -11,27 +11,29 @@ import sys,os,re,subprocess,hashlib help = """ Syntax from src dir: make lib-plumed args="-b" or: make lib-plumed args="-b -v 2.4.3" - or: make lib-plumed args="-p /usr/local/plumed2-2.4.3" + or: make lib-plumed args="-p /usr/local/plumed2 -m shared" Syntax from lib dir: python Install.py -b -v 2.4.3 or: python Install.py -b - or: python Install.py -p /usr/local/plumed2-2.4.3 + or: python Install.py -p /usr/local/plumed2 -m shared specify one or more options, order does not matter -b = download and build the plumed2 library - -p = specify folder of existing plumed2 installation -v = set version of plumed2 to download and build (default: 2.4.3) + -p = specify folder of existing plumed2 installation + -m = set plumed linkage mode: static (default), shared, or runtime Example: make lib-plumed args="-b" # download/build in lib/plumed/plumed2 -make lib-plumed args="-p $HOME/plumed-2.4.3" # use existing Plumed2 installation in $HOME/plumed-2.4.3 +make lib-plumed args="-p $HOME/plumed2 -m shared" # use existing Plumed2 installation in $HOME/plumed2 """ # settings version = "2.4.3" +mode = "static" # known checksums for different PLUMED versions. used to validate the download. checksums = { \ @@ -40,11 +42,6 @@ checksums = { \ '2.5b' : 'e341bdef469be1da058b8a0b97a3db22', \ } -#checksums = { \ -# '2.4.2' : '0f66f24b4c763ae8b2f39574113e9935', \ -# '2.4.3' : 'dc38de0ffd59d13950d8f1ef1ce05574', \ -# } - # print error message or help def error(str=None): if not str: print(help) @@ -132,6 +129,10 @@ while iarg < nargs: plumedpath = fullpath(args[iarg+1]) pathflag = True iarg += 2 + elif args[iarg] == "-m": + if iarg+2 > nargs: error() + mode = args[iarg+1] + iarg += 2 elif args[iarg] == "-b": buildflag = True iarg += 1 @@ -149,13 +150,14 @@ if (buildflag and pathflag): if (not buildflag and not pathflag): error("Have to use either -b or -p flag") +if ((mode != "static") and (mode != "shared") and (mode != "runtime")): + error("Unknown linkage mode '%s' for Plumed" % mode) + # download and unpack plumed2 tarball if buildflag: url = "https://github.com/plumed/plumed2/releases/download/v%s/plumed-src-%s.tgz" % (version,version) filename = "plumed-src-%s.tar.gz" %version - #url = "https://github.com/plumed/plumed2/archive/v%s.tar.gz" % version - #filename = "v%s.tar.gz" %version print("Downloading plumed ...") geturl(url,filename) @@ -168,9 +170,6 @@ if buildflag: if os.path.exists("%s/plumed-%s" % (homepath,version)): cmd = 'rm -rf "%s/plumed-%s"' % (homepath,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - #if os.path.exists("%s/plumed2-%s" % (homepath,version)): - # cmd = 'rm -rf "%s/plumed2-%s"' % (homepath,version) - # subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.exists("%s/plumed2" % (homepath)): cmd = 'rm -rf "%s/plumed2"' % (homepath) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) @@ -183,7 +182,6 @@ if buildflag: if buildflag: print("Building plumed ...") cmd = 'cd %s/plumed-%s; ./configure --prefix=%s/plumed2 --enable-static-patch ; make ; make install' % (homepath,version,homepath) - #cmd = 'cd %s/plumed2-%s; ./configure --prefix=%s/plumed2 --enable-static-patch ; make ; make install' % (homepath,version,homepath) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) print(txt.decode('UTF-8')) # @@ -195,12 +193,12 @@ if linkflag: os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") - cmd = 'ln -s "%s/plumed2/include" includelink' % homepath + cmd = 'ln -s "%s/include" includelink' % homedir subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - cmd = 'ln -s "%s/plumed2/lib" liblink' % homepath + cmd = 'ln -s "%s/lib" liblink' % homedir subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if os.path.isfile("Makefile.lammps.static"): + if os.path.isfile("Makefile.lammps.%s" % mode): print("Creating Makefile.lammps") - cmd = 'cat liblink/plumed/src/lib/Plumed.inc.static Makefile.lammps.static > Makefile.lammps' + cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) diff --git a/lib/plumed/Makefile.lammps.runtime b/lib/plumed/Makefile.lammps.runtime new file mode 100644 index 0000000000..b8c8636940 --- /dev/null +++ b/lib/plumed/Makefile.lammps.runtime @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +plumed_SYSINC = -D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=$(PLUMED_LIBDIR)/libplumedKernel.so +plumed_SYSLIB = $(PLUMED_LOAD) -rdynamic +plumed_SYSPATH = diff --git a/lib/plumed/Makefile.lammps.shared b/lib/plumed/Makefile.lammps.shared new file mode 100644 index 0000000000..860202a6f2 --- /dev/null +++ b/lib/plumed/Makefile.lammps.shared @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +plumed_SYSINC = +plumed_SYSLIB = $(PLUMED_LOAD) +plumed_SYSPATH = diff --git a/lib/plumed/Makefile.lammps.static b/lib/plumed/Makefile.lammps.static index 860202a6f2..2ca0858610 100644 --- a/lib/plumed/Makefile.lammps.static +++ b/lib/plumed/Makefile.lammps.static @@ -1,5 +1,7 @@ # Settings that the LAMMPS build will import when this package library is used -plumed_SYSINC = +# Use statically linked C++ interface to plumed + +plumed_SYSINC = -D__PLUMED_WRAPPER_CXX=1 plumed_SYSLIB = $(PLUMED_LOAD) plumed_SYSPATH = diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index bb8309cf93..d73cfdb7a7 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -34,13 +34,14 @@ #include "modify.h" #include "pair.h" -/* - Use statically linked C++ interface to plumed -*/ -#define __PLUMED_WRAPPER_CXX 1 - #include "plumed/wrapper/Plumed.h" +#if defined(__PLUMED_DEFAULT_KERNEL) +#define PLUMED_QUOTE_DIRECT(name) #name +#define PLUMED_QUOTE(macro) PLUMED_QUOTE_DIRECT(macro) +static char plumed_default_kernel[] = "PLUMED_KERNEL=" PLUMED_QUOTE(__PLUMED_DEFAULT_KERNEL); +#endif + /* -------------------------------------------------------------------- */ using namespace LAMMPS_NS; @@ -64,6 +65,11 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : error->warning(FLERR,"Fix group for fix plumed is not 'all'. " "Group will be ignored."); +#if defined(__PLUMED_DEFAULT_KERNEL) + if (getenv("PLUMED_KERNEL") == NULL) + putenv(plumed_default_kernel); +#endif + p=new PLMD::Plumed; // Check API version From a55764493928fd85b5ddcdef3f55a1823463378d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 22:13:18 -0500 Subject: [PATCH 119/273] support all three plumed linkage modes with CMake as well. For downloaded and previously installed plumed lib --- cmake/CMakeLists.txt | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index cc5a3356a6..e36d7259a5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -349,7 +349,7 @@ if(PKG_KSPACE) endif() endif() -if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) +if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE OR PKG_USER-PLUMED) find_package(LAPACK) find_package(BLAS) if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) @@ -531,6 +531,12 @@ endif() if(PKG_USER-PLUMED) find_package(GSL REQUIRED) + set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") + set(PLUMED_MODE_VALUES static shared runtime) + set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) + validate_option(PLUMED_MODE PLUMED_MODE_VALUES) + string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) + option(DOWNLOAD_PLUMED "Download Plumed (instead of using the system's one)" OFF) if(DOWNLOAD_PLUMED) include(ExternalProject) @@ -543,13 +549,29 @@ if(PKG_USER-PLUMED) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o - ${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o ${GSL_LIBRARIES} ${CMAKE_DL_LIBS}) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o + "${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o" ${GSL_LIBRARIES} ${CMAKE_DL_LIBS} ${LAPACK_LIBRARIES}) + elseif(PLUMED_MODE STREQUAL "SHARED") + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${CMAKE_DL_LIBS}) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) + endif() set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") else() find_package(PkgConfig REQUIRED) pkg_check_modules(PLUMED plumed REQUIRED) - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + elseif(PLUMED_MODE STREQUAL "SHARED") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel.so) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) + endif() list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) endif() include_directories(${PLUMED_INCLUDE_DIRS}) From 003bb28471d2a38f39782308a5459d1e215472c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Nov 2018 22:17:25 -0500 Subject: [PATCH 120/273] make @gtribello code owner of the USER-PLUMED package --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 164bc05d60..7aab6bef92 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -29,6 +29,7 @@ src/USER-MEAMC/* @martok src/USER-MOFFF/* @hheenen src/USER-MOLFILE/* @akohlmey src/USER-NETCDF/* @pastewka +src/USER-PLUMED/* @gtribello src/USER-PHONON/* @lingtikong src/USER-PTM/* @pmla src/USER-OMP/* @akohlmey From 25914ea3f3ee840f4958d881399705653387da15 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 10:17:25 -0500 Subject: [PATCH 121/273] patch 15Nov2018 --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index b109937034..f41759ef70 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -9 Nov 2018 version :c,h2 +15 Nov 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index bf3eb42707..162fb8916f 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "9 Nov 2018" +#define LAMMPS_VERSION "15 Nov 2018" From 4231ab3d57c25e2e4ecb6fd5dbd4f5ffa3857d23 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 10:52:03 -0500 Subject: [PATCH 122/273] correct some links --- doc/src/Packages_details.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index fa9ad1bb95..5f50e80271 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -1188,7 +1188,7 @@ the NAMD MD code, but with portability in mind. Axel Kohlmeyer [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-colvars on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1202,7 +1202,7 @@ examples/USER/colvars :ul :line -USER-PLUMED package :link(USER-PLUMED),h4 +USER-PLUMED package :link(PKG-USER-PLUMED),h4 [Contents:] From 82d6aa9add88cd76d34530ee08c00bddab23ebbb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 10:52:41 -0500 Subject: [PATCH 123/273] interlink fixes colvars, plumed, and smd --- doc/src/fix_colvars.txt | 5 +++-- doc/src/fix_smd.txt | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_colvars.txt b/doc/src/fix_colvars.txt index 3a64840bdc..d702fb264e 100644 --- a/doc/src/fix_colvars.txt +++ b/doc/src/fix_colvars.txt @@ -116,7 +116,8 @@ not a limitation of functionality. [Related commands:] -"fix smd"_fix_smd.html +"fix smd"_fix_smd.html, "fix spring"_fix_spring.html, +"fix plumed"_fix_plumed.html [Default:] @@ -126,4 +127,4 @@ and tstat = NULL. :line :link(Fiorin) -[(Fiorin)] Fiorin , Klein, Henin, Mol. Phys., DOI:10.1080/00268976.2013.813594 +[(Fiorin)] Fiorin, Klein, Henin, Mol. Phys., DOI:10.1080/00268976.2013.813594 diff --git a/doc/src/fix_smd.txt b/doc/src/fix_smd.txt index 774842c7cf..907df7ab1f 100644 --- a/doc/src/fix_smd.txt +++ b/doc/src/fix_smd.txt @@ -137,7 +137,8 @@ package"_Build_package.html doc page for more info. "fix drag"_fix_drag.html, "fix spring"_fix_spring.html, "fix spring/self"_fix_spring_self.html, -"fix spring/rg"_fix_spring_rg.html +"fix spring/rg"_fix_spring_rg.html, +"fix colvars"_fix_colvars.html, "fix plumed"_fix_plumed.html [Default:] none From 8a4983e4bcb8c16e8cd636bbf01644457c89b2ce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 10:53:38 -0500 Subject: [PATCH 124/273] reformatting and simplification of fix plumed docs --- doc/src/fix_plumed.txt | 66 +++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index d5fbcd88ef..9c7f45af1e 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -25,33 +25,32 @@ fix pl all plumed all plumed plumedfile plumed.dat outfile p.log [Description:] -This fix instructs LAMMPS to call the PLUMED library, which allows one -to perform various forms of trajectory analysis on the fly and to also -use methods such as umbrella sampling and metadynamics to enhance the -sampling of phase space. +This fix instructs LAMMPS to call the "PLUMED"_plumedhome library, which +allows one to perform various forms of trajectory analysis on the fly +and to also use methods such as umbrella sampling and metadynamics to +enhance the sampling of phase space. -The documentation included here only describes the fix plumed command. -This command is LAMMPS specific whereas most of the functionality -implemented in PLUMED will work with a range of MD codes and also when -PLUMED is used as a stand alone code. The full documentation for PLUMED -is available at "this website"_http://www.plumed.org/documentation +The documentation included here only describes the fix plumed command +itself. This command is LAMMPS specific, whereas most of the +functionality implemented in PLUMED, however, will work with a range of +MD codes, and when PLUMED is used as a stand alone code for analysis. +The full "documentation for PLUMED"_plumeddocs is available online and +included in the PLUMED source code. The PLUMED library development is +hosted at +"https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 +A detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. -The PLUMED library is developed at -"https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 A -detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. - -There are some example scripts for using this package with LAMMPS in the +There is an example input for using this package with LAMMPS in the examples/USER/plumed directory. :line -The command to call PLUMED above is reasonably self explanatory. Within -the input file for lammps the user is required to specify the input file -for PLUMED and a file on which to output the PLUMED log. The user must -specify both of these arguments every time PLUMED is to be used. -Furthermore, the fix plumed command should appear in the LAMMPS input -file after the relevant input paramters (e.g. the timestep) have been -set. +The command to make LAMMPS call PLUMED during a run requires two keyword +value pairs pointing to the PLUMED input file and an output file for the +PLUMED log. The user must specify these arguments every time PLUMED is +to be used. Furthermore, the fix plumed command should appear in the +LAMMPS input file [after] relevant input paramters (e.g. the timestep) +have been set. The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED and there can only be one instance of the plumed fix at a @@ -64,10 +63,10 @@ functionality by only allowing only one plumed fix in the LAMMPS input. The {plumedfile} keyword allows the user to specify the name of the PLUMED input file. Instructions as to what should be included in a plumed input file can be found in the "documentation for -PLUMED"_http://www.plumed.org/documentation. +PLUMED"_plumeddocs The {outfile} keyword allows the user to specify the name of a file on -which to output the PLUMED log. This log file normally just parots the +which to output the PLUMED log. This log file normally just parrots the information that is contained in the input file. The names of the files on which the results from the various analyses that have been performed using PLUMED will be specified by the user in the PLUMED input file. @@ -76,12 +75,13 @@ using PLUMED will be specified by the user in the PLUMED input file. When performing a restart of a calculation that involves PLUMED you must include a RESTART command in the PLUMED input file as detailed in the -"PLUMED documentation"_http://www.plumed.org/documentation. When the -restart command is found in the PLUMED input PLUMED will append to the -files that were generated in the run that was performed previously. -Furthermore, any history dependent bias potentials that were accumulated -in previous calculations will be read in when the restart command is -included in the PLUMED input. +"PLUMED documentation"_plumeddocs. When the restart command is found in +the PLUMED input PLUMED will append to the files that were generated in +the run that was performed previously. No part of the PLUMED restart +data is included in the LAMMPS restart files. Furthermore, any history +dependent bias potentials that were accumulated in previous calculations +will be read in when the RESTART command is included in the PLUMED +input. The "fix_modify"_fix_modify.html {energy} option is not supported by this fix. @@ -97,10 +97,7 @@ This fix is part of the USER-PLUMED package. It is only enabled if LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. -There can only be one plumed fix active at a time. Since the interface -communicates only the minimum amount of information and since the PLUMED -module itself can handle an arbitrary number of analysis and biasing -methods, this is not a limitation of functionality. +There can only be one plumed fix active at a time. [Related commands:] @@ -115,3 +112,6 @@ The default options are plumedfile = NULL and outfile = NULL :link(PLUMED) [(PLUMED)] G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) + +:link(plumeddocs,http://www.plumed.org/documentation) +:link(plumedhome,http://www.plumed.org/) From 4d9e2a014b69429af54d2c05441875824df88c16 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 11:35:04 -0500 Subject: [PATCH 125/273] add detailed build instructions and discussion of linkage modes for PLUMED library and USER-PLUMED package --- doc/src/Build_extras.txt | 128 +++++++++++++++++++++++++-------------- 1 file changed, 82 insertions(+), 46 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 3b685a44e3..8881ee44c1 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -715,62 +715,98 @@ a corresponding Makefile.lammps.machine file. USER-PLUMED package :h4,link(user-plumed) +Before building LAMMPS with this package, you must first build PLUMED. +PLUMED can be built as part of the LAMMPS build or installed separately +from LAMMPS using the generic "plumed installation instructions"_plumedinstall. +:link(plumedinstall,http://plumed.github.io/doc-master/user-doc/html/_installation.html) + +PLUMED can be linked into MD codes in three different modes: static, +shared, and runtime. With the "static" mode, all required PLUMED code +is linked statically into the MD code. The MD code is then fully +independent from the PLUMED installation, but also you have to +rebuild/relink the MD code to update the PLUMED code inside it. With +"shared" linkage mode, the MD code is linked to a shared library +containing the PLUMED code, preferably after it was installed in a +globally accessible location. This way the same installed PLUMED code +can be shared across multiple MD packages and can be updated, for as +long as the shared PLUMED library is ABI-compatible. The third linkage +mode is "runtime" which allows to switch the PLUMED kernel at runtime +between different variants through setting the PLUMED_KERNEL environment +varible, which has to point to the location of the libplumedKernel.so +dynamical shared object, which is then loaded at runtime. This is +particularly convenient for doing PLUMED development and comparing +multiple PLUMED versions without having to recompile the hosting MD +code. All three linkage modes are supported by LAMMPS on selected +operating systems (e.g. Linux) and using either CMake or traditional +make build. The "static" mode should be most portable, the "runtime" +mode support in LAMMPS makes the most assumptions about operating +system and compiler environment. If one mode does not work, try a +different one, or switch to a different build system, or consider +a global PLUMED installation or downloading it during building LAMMPS. + [CMake build]: +-D DOWNLOAD_PLUMED=value # download PLUMED for build, value = no (default) or yes +-D PLUMED_MODE=value # Linkage mode for PLUMED, value = static (default), shared, or runtime :pre + +If DOWNLOAD_PLUMED is set to "yes", the PLUMED library will be +downloaded (the version of that is hardcoded to a vetted version of +PLUMED, usually a recent stable release version) and built inside the +CMake build directory. If DOWNLOAD_PLUMED is set to "no" (the default), +CMake will try to detect an installed version of PLUMED and link to +that. For this to work, the PLUMED library has to be installed into a +location where the pkg-config tool can find it or the PKG_CONFIG_PATH +environment variable has to be set up accordingly. + +The PLUMED_MODE setting determines the linkage mode of the PLUMED +library. Allowed values are "static" (default), "shared", or "runtime". +For a discussion of PLUMED linkage modes, please see above. When +enabling DOWNLOAD_PLUMED, the static linkage mode is recommended. + [Traditional make]: -Before building LAMMPS with this package, you must first build PLUMED. -We recommending building PLUMED separately to LAMMPS using the -instructions that can be found at -http://plumed.github.io/doc-master/user-doc/html/_installation.html. -Before compiling LAMMPS you can then install the fix plumed command -and compile LAMMPS in the usual manner: +Before installing the USER-PLUMED package, first the PLUMED library +needs to be configured so that LAMMPS can find the right settings when +compiling and linking the LAMMPS executable itself. You can either +download and build PLUMED inside the LAMMPS plumed library folder or use +a previously installed PLUMED library and point LAMMPS to its +location. You also have to choose the linkage mode: "static" (default), +"shared" or "runtime". For a discussion of PLUMED linkage modes, please +see above. + +Download/compilation/configuration of the plumed library can be done +from the src folder through the following make args: + +make lib-plumed # print help message +make lib-plumed args="-b" # download and build PLUMED in lib/plumed/plumed2 +make lib-plumed args="-p $HOME/.local" # use existing PLUMED installation in $HOME/.local +make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installation in + # /usr/local and use shared linkage mode +:pre + +Note that 2 symbolic (soft) links, "includelink" and "liblink" are +created in lib/plumed to point into the location of the PLUMED build to +use and also a new file lib/plumed/Makefile.lammps is created with +settings suitable for LAMMPS to compile and link PLUMED in the desired +linkage mode. After this step is compleded, you can install the +USER-PLUMED package and compile LAMMPS in the usual manner: make yes-user-plumed make machine :pre -Once this compilation completes you should be able to run LAMMPS in -the usual way. When running LAMMPS with an input script that contains -a fix plumed command LAMMPS will try to call the PLUMED runtime -library. PLUMED must therefore be available in your path if LAMMPS is -compiled in this way. +Once this compilation completes you should be able to run LAMMPS in the +usual way. For shared linkage mode, libplumed.so must be found by the +LAMMPS executable, which on many operating systems means, you have to +set the LD_LIBRARY_PATH environment variable accordingly. -On some machines it is not possible to call runtime libraries in the -way described above. When compiling on these machines it is thus -better to statically link PLUMED when compiling LAMMPS. To do this -you must either download a PLUMED tarball from -http://www.plumed.org/get-it or clone it using git clone -https://github.com/plumed/plumed2.git. If you download the tarball -unpack it in the /lib/plumed directory. Similarly if you clone it -clone it to the /lib/plumed directory as if there is a version of -PLUMED within this directory LAMMPS will always try to statically link -the version of PLUMED that this directory contains instead of -dynamically linking the library. +Support for the different linkage modes in LAMMPS varies for different +operating systems, using the static linkage is expected to be the most +portable, and thus set to be the default. -Once you have downloaded PLUMED into /lib/plumed you must again build -the code here by following the instructions that can be found at -http://plumed.github.io/doc-master/user-doc/html/_installation.html. - -You can statically link PLUMED manually and if you want to access the -full range of PLUMED functionalities this is what you should do. If -you only want the basic range of functionalities, however, (i.e. no -user contributed modules) then you can download and compile PLUMED in -one step from the lammps/src dir, using a command like like those -below: - -make lib-plumed # print help message -make lib-plumed args="-b" # download and build the latest stable version of PLUMED - -These commands will simply invoke the lib/plumed/Install.py script -with args specified. Furthermore, once the script has completed you -should have a compiled version of PLUMED. With this built you can -install/un-install PLUMED and build LAMMPS in the usual manner: - -make yes-user-plumed -make machine :pre - -make no-user-plumed -make machine :pre +If you want to change the linkage mode, you have to re-run "make +lib-plumed" with the desired settings [and] do a reinstall if the +USER-PLUMED package with "make yes-user-plumed" to update the required +makefile settings with the changes in the lib/plumed folder. :line From d5f222464b4742331e71dcb421696dbc2b852c6b Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Thu, 15 Nov 2018 09:48:46 -0700 Subject: [PATCH 126/273] Update README.md --- cmake/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/README.md b/cmake/README.md index b9020bf4a9..90aba19a41 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -1494,8 +1494,8 @@ target API. BIN2C (CUDA only) - Path to bin2c executable - 1st in path (if found) + Path to bin2c executable, will automatically pick up the first one in your $PATH. + (automatic) @@ -1652,8 +1652,8 @@ requires `gzip` to be in your `PATH` GZIP_EXECUTABLE - path to gzip executable - 1st in path (if found) + Path to gzip executable, will automatically pick up the first one in your $PATH. + (automatic) @@ -1683,8 +1683,8 @@ requires `ffmpeg` to be in your `PATH` FFMPEG_EXECUTABLE - path to ffmpeg executable - 1st in path (if found) + Path to ffmpeg executable, will automatically pick up the first one in your $PATH. + (automatic) From e1603763657826355ff25ee01a5db215d4da32f9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 12:45:15 -0500 Subject: [PATCH 127/273] incomplete first draft. committed for checking the markup in github. --- doc/github-development-workflow.md | 82 ++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 doc/github-development-workflow.md diff --git a/doc/github-development-workflow.md b/doc/github-development-workflow.md new file mode 100644 index 0000000000..b81dbb417e --- /dev/null +++ b/doc/github-development-workflow.md @@ -0,0 +1,82 @@ +# Outline of the GitHub Development Workflow + +This purpose of this document is to provide a point of reference for the +core LAMMPS developers and other LAMMPS contibutors to understand the +choices the LAMMPS developers have agreed on. Git and GitHub provide the +tools, but do not set policies, so it is up to the developers to come to +an agreement as to how to define and interpret policies. This document +is likely to change as our experiences and needs change and we try to +adapt accordingly. Last change 2018-11-15. + +## Table of Contents + + * [GitHub Merge Management](#github-merge-management) + * [Pull Requests](#pull-requests) + * [Pull Request Assignments](#pull-request-assignments) + * [Pull Request Reviews](#pull-request-reviews) + * [Pull Request Discussions](#pull-request-discussions) + * [Checklist for Pull Requests](#checklist-for-pull-requests) + * [GitHub Issues](#github-issues) + * [Feature Request Issues](#feature-request-issues) + * [Bug Report Issues](#bug-report-issues) + * [Milestones and Release Planning](#milestones-and-release-planning) + +## GitHub Merge Management + +In the interest of consistency, ONLY ONE of the core LAMMPS developers +should doing the merging itself. This is currently @akohlmey (Axel +Kohlmeyer). If this assignment needs to be changed, it shall be done +right after a stable release. + +## Pull Requests + +ALL changes to the LAMMPS code and documentation, however trivial, MUST +be submitted as a pull request to GitHub. All changes to the "master" +branch must be made exclusively through merging pull requests. The +"unstable" and "stable" branches are only to be updated upon patch or +stable releases with fast-forward merges based on the associated +tags. Pull requests may also be submitted to (long-running) feature +branches created by LAMMPS developers inside the LAMMPS project, if +needed. Those are not subject to the merge and review restrictions +discussed in this document, though. + +### Pull Request Assignments + +Pull requests can be "chaperoned" by one of the LAMMPS core developers. +This is indicated by who the pull request is assigned to. LAMMPS core +developers can self-assign or they can decide to assign a pull request +to a different LAMMPS developer. Being assigned to a pull request means, +that this pull request may need some work and the assignee is tasked to +determine what this might be needed or not, and may either implement the +required changes or ask the submitter of the pull request to implement +them. Even though, all LAMMPS developers may have write access to pull +requests (if enabled by the submitter, which is the default), only the +submitter or the assignee of a pull request may do so. During this +period the "work_in_progress" label shall be applied to the pull +request. The assignee gets to decide what happens to the pull request +next, e.g. whether it should be assigned to a different developer for +additional checks and changes, or is recommended to be merged. Removing +the "work_in_progress" label and assigning the pull request to the +developer tasked with merging signals that a pull request is ready to be +merged. + +### Pull Request Reviews + +People can be assigned to review a pull request in two ways: + * They can be assigned manually to review a pull request + by the submitter or a LAMMPS developer + * They can be automatically assigned, because +developer + +### Pull Request Discussions + +### Checklist for Pull Requests + +## GitHub Issues + +### Feature Request Issues + +### Bug Report Issues + +## Milestones and Release Planning + From db29ec7eee14cef6f256fbe7190f7b262fc0a472 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 14:58:02 -0500 Subject: [PATCH 128/273] complete workflow document --- doc/github-development-workflow.md | 132 +++++++++++++++++++++++++---- 1 file changed, 117 insertions(+), 15 deletions(-) diff --git a/doc/github-development-workflow.md b/doc/github-development-workflow.md index b81dbb417e..31fd3f23f0 100644 --- a/doc/github-development-workflow.md +++ b/doc/github-development-workflow.md @@ -17,28 +17,28 @@ adapt accordingly. Last change 2018-11-15. * [Pull Request Discussions](#pull-request-discussions) * [Checklist for Pull Requests](#checklist-for-pull-requests) * [GitHub Issues](#github-issues) - * [Feature Request Issues](#feature-request-issues) - * [Bug Report Issues](#bug-report-issues) * [Milestones and Release Planning](#milestones-and-release-planning) ## GitHub Merge Management In the interest of consistency, ONLY ONE of the core LAMMPS developers -should doing the merging itself. This is currently @akohlmey (Axel -Kohlmeyer). If this assignment needs to be changed, it shall be done -right after a stable release. +should doing the merging itself. This is currently +[@akohlmey](https://github.com/akohlmey) (Axel Kohlmeyer). +If this assignment needs to be changed, it shall be done right after a +stable release. ## Pull Requests ALL changes to the LAMMPS code and documentation, however trivial, MUST be submitted as a pull request to GitHub. All changes to the "master" branch must be made exclusively through merging pull requests. The -"unstable" and "stable" branches are only to be updated upon patch or -stable releases with fast-forward merges based on the associated -tags. Pull requests may also be submitted to (long-running) feature -branches created by LAMMPS developers inside the LAMMPS project, if -needed. Those are not subject to the merge and review restrictions -discussed in this document, though. +"unstable" and "stable" branches, respectively are only to be updated +upon patch or stable releases with fast-forward merges based on the +associated tags. Pull requests may also be submitted to (long-running) +feature branches created by LAMMPS developers inside the LAMMPS project, +if needed. Those are not subject to the merge and review restrictions +discussed in this document, though, but get manages as needed on a +case-by-case basis. ### Pull Request Assignments @@ -63,20 +63,122 @@ merged. ### Pull Request Reviews People can be assigned to review a pull request in two ways: + * They can be assigned manually to review a pull request by the submitter or a LAMMPS developer - * They can be automatically assigned, because -developer + * They can be automatically assigned, because a developers matches + a file pattern in the `.github/CODEOWNERS` file, which associates + developers with the code they contributed and maintain. + +Reviewers are requested to state their appraisal of the proposed changes +and either approve or request changes. People may unassign themselves +from review, if they feel not competent about the changes proposed. At +least one review from a LAMMPS developer with write access is required +before merging in addition to the automated compilation tests. The +feature, that reviews from code owners are "hard" reviews (i.e. they +must all be approved before merging is allowed), is currently disabled +and it is in the discretion of the merge maintainer to assess when +a sufficient degree of approval has been reached. Reviews may be +(automatically) dismissed, when the reviewed code has been changed, +and then approval is required a second time. ### Pull Request Discussions +All discussions about a pull request should be kept as much as possible +on the pull request discussion page on GitHub, so that other developers +can later review the entire discussion after the fact and understand the +rationale behind choices made. Exceptions to this policy are technical +discussions, that are centered on tools or policies themselves +(git, github, c++) rather than on the content of the pull request. + ### Checklist for Pull Requests +Here are some items to check: + * source and text files should not have CR/LF line endings (use dos2unix to remove) + * every new command or style should have documentation. The names of + source files (c++ and manual) should follow the name of the style. + (example: `src/fix_nve.cpp`, `src/fix_nve.h` for `fix nve` command, + implementing the class `FixNVE`, documented in `doc/src/fix_nve.txt`) + * all new style names should be lower case, the must be no dashes, + blanks, or underscores separating words, only forward slashes. + * new style docs should be added to the "overview" files in + `doc/src/Commands_*.txt`, `doc/src/{fixes,computes,pairs,bonds,...}.txt` + and `doc/src/lammps.book` + * new files in packages should be added to `src/.gitignore` + * removed or renamed files in packages should be added to `src/Purge.list` + * C++ source files should use C++ style include files for accessing + C-library APIs, e.g. `#include ` instead of `#include `. + And they should use angular brackets instead of double quotes. Full list: + * assert.h -> cassert + * ctype.h -> cctype + * errno.h -> cerrno + * float.h -> cfloat + * limits.h -> climits + * math.h -> cmath + * omplex.h -> complex + * setjmp.h -> csetjmp + * signal.h -> csignal + * stddef.h -> cstddef + * stdint.h -> cstdint + * stdio.h -> cstdio + * stdlib.h -> cstdlib + * string.h -> cstring + * time.h -> ctime + Do not replace (as they are C++-11): `inttypes.h` and `stdint.h`. + * Code should follow the C++-98 standard. C++-11 is only accepted + in individual special purpose packages + * indentation is two spaces per level + * there should be no tabs and no trailing whitespace + * header files, especially of new styles, should not include any + other headers, except the header with the base class or cstdio. + Forward declarations should be used instead when possible. + * iostreams should be avoided. LAMMPS uses stdio from the C-library. + * use of STL in headers and class definitions should be avoided. + * static class members should be avoided at all cost. + * anything storing atom IDs should be using `tagint` and not `int`. + This can be flagged by the compiler only for pointers and only when + compiling LAMMPS with `-DLAMMPS_BIGBIG`. + * when including both `lmptype.h` (and using defines or macros from it) + and `mpi.h`, `lmptype.h` must be included first. + ## GitHub Issues -### Feature Request Issues +The GitHub issue tracker is the location where the LAMMPS developers +and other contributors or LAMMPS users can report issues or bugs with +the LAMMPS code or request new features to be added. Feature requests +are usually indicated by a `[Feature Request]` marker in the subject. +Issues are assigned to a person, if this person is working on this +feature or working to resolve an issue. Issues that have nobody working +on them at the moment, have the label `volunteer needed` attached. -### Bug Report Issues +When an issue, say `#125` is resolved by a specific pull request, +the comment for the pull request shall contain the text `closes #125` +or `fixes #125`, so that the issue is automatically deleted when +the pull request is merged. ## Milestones and Release Planning +LAMMPS uses a continuous release development model with incremental +changes, i.e. significant effort is made - including automated pre-merge +testing - that the code in the branch "master" does not get broken. +More extensive testing (including regression testing) is performed after +code is merged to the "master" branch. There are patch releases of +LAMMPS every 1-3 weeks at a point, when the LAMMPS developers feel, that +a sufficient amount of changes have happened, and the post-merge testing +has been successful. These patch releases are marked with a +`patch_` tag and the "unstable" branch follows only these +versions (and thus is always supposed to be of production quality, +unlike "master", which may be temporary broken, in the case of larger +change sets or unexpected incompatibilities or side effects. + +About 3-4 times each year, there are going to be "stable" releases +of LAMMPS. These have seen additional, manual testing and review of +results from testing with instrumented code and static code analysis. +Also, in the last 2-3 patch releases before a stable release are +"release candidate" versions which only contain bugfixes and +documentation updates. For release planning and the information of +code contributors, issues and pull requests being actively worked on +are assigned a "milestone", which corresponds to the next stable +release or the stable release after that, with a tentative release +date. + From eae9d27f6d37ec7f935a5e3112fa34b7f78f5fea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 16:03:33 -0500 Subject: [PATCH 129/273] OpenMP support from the compiler is not a requirement for USER-OMP. Without OpenMP, it is like the OPT package but for many more styles, so it is still useful and should be supported. --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index cc5a3356a6..6d559bebe3 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -304,7 +304,7 @@ pkg_depends(USER-SCAFACOS MPI) find_package(OpenMP QUIET) option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) -if(BUILD_OMP OR PKG_USER-OMP OR PKG_KOKKOS OR PKG_USER-INTEL) +if(BUILD_OMP OR PKG_KOKKOS OR PKG_USER-INTEL) find_package(OpenMP REQUIRED) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") From 1fc3b4618c5d015255ed8d9f1afb76f3fc623950 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 16:31:04 -0500 Subject: [PATCH 130/273] remove dead code and silence compiler warnings --- src/BODY/pair_body_rounded_polygon.cpp | 2 +- src/MISC/pair_nm_cut.cpp | 8 ------- src/MISC/pair_nm_cut_coul_cut.cpp | 8 ------- src/MISC/pair_nm_cut_coul_long.cpp | 8 ------- src/MOLECULE/fix_cmap.cpp | 2 +- src/POEMS/fix_poems.cpp | 22 ++++++-------------- src/REPLICA/fix_hyper_local.cpp | 2 +- src/REPLICA/fix_hyper_local.h | 4 ++-- src/SPIN/pair_spin_exchange.cpp | 2 +- src/USER-CGDNA/pair_oxdna2_coaxstk.cpp | 10 ++------- src/USER-MISC/compute_stress_mop.cpp | 9 ++++---- src/USER-MISC/compute_stress_mop_profile.cpp | 15 +++++++------ src/USER-MISC/compute_stress_mop_profile.h | 1 - src/USER-MISC/fix_ffl.cpp | 8 +++---- src/USER-MISC/fix_filter_corotate.cpp | 11 ++++------ src/USER-OMP/fix_omp.cpp | 2 ++ src/USER-OMP/thr_omp.h | 1 + src/compute_chunk_atom.cpp | 4 ++-- src/compute_dihedral_local.h | 2 +- src/create_bonds.cpp | 2 +- src/displace_atoms.cpp | 4 ++-- src/dump_image.cpp | 2 +- src/fix_deform.cpp | 2 +- src/fix_move.cpp | 2 +- src/input.cpp | 2 +- src/set.cpp | 2 +- src/variable.cpp | 4 ++-- src/velocity.cpp | 4 ++-- src/write_dump.cpp | 2 +- 29 files changed, 51 insertions(+), 96 deletions(-) diff --git a/src/BODY/pair_body_rounded_polygon.cpp b/src/BODY/pair_body_rounded_polygon.cpp index 6a176f1083..9040817772 100644 --- a/src/BODY/pair_body_rounded_polygon.cpp +++ b/src/BODY/pair_body_rounded_polygon.cpp @@ -107,7 +107,7 @@ void PairBodyRoundedPolygon::compute(int eflag, int vflag) int nei,nej,iefirst,jefirst; double xtmp,ytmp,ztmp,delx,dely,delz,evdwl; double rsq,rsqinv,r,radi,radj,eradi,eradj,rradi,rradj,k_nij,k_naij; - double xi[3],xj[3],facc[3]; + double facc[3]; int *ilist,*jlist,*numneigh,**firstneigh; evdwl = 0.0; diff --git a/src/MISC/pair_nm_cut.cpp b/src/MISC/pair_nm_cut.cpp index ce077a7a04..4b1611b137 100644 --- a/src/MISC/pair_nm_cut.cpp +++ b/src/MISC/pair_nm_cut.cpp @@ -274,14 +274,6 @@ double PairNMCut::init_one(int i, int j) } MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - double rr1 = mm[i][j]*(nn[i][j]-1)*pow(r0[i][j],nn[i][j]); - double rr2 = nn[i][j]*(mm[i][j]-1)*pow(r0[i][j],mm[i][j]); - double p1 = 1-nn[i][j]; - double p2 = 1-mm[i][j]; - - double rrr1 = pow(r0[i][j],nn[i][j])*(1-nn[i][j]); - double rrr2 = pow(r0[i][j],mm[i][j])*(1-mm[i][j]); - double cut3 = cut[i][j]*cut[i][j]*cut[i][j]; ptail_ij = 2.*MY_PI/3.*all[0]*all[1]*e0nm[i][j]*nm[i][j]*cut3 * (pow(r0[i][j]/cut[i][j],nn[i][j])/(nn[i][j]-3) - pow(r0[i][j]/cut[i][j],mm[i][j])/(mm[i][j]-3)); diff --git a/src/MISC/pair_nm_cut_coul_cut.cpp b/src/MISC/pair_nm_cut_coul_cut.cpp index b807bc972b..999fab1d6e 100644 --- a/src/MISC/pair_nm_cut_coul_cut.cpp +++ b/src/MISC/pair_nm_cut_coul_cut.cpp @@ -324,14 +324,6 @@ double PairNMCutCoulCut::init_one(int i, int j) } MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - double rr1 = mm[i][j]*(nn[i][j]-1)*pow(r0[i][j],nn[i][j]); - double rr2 = nn[i][j]*(mm[i][j]-1)*pow(r0[i][j],mm[i][j]); - double p1 = 1-nn[i][j]; - double p2 = 1-mm[i][j]; - - double rrr1 = pow(r0[i][j],nn[i][j])*(1-nn[i][j]); - double rrr2 = pow(r0[i][j],mm[i][j])*(1-mm[i][j]); - double cut_lj3 = cut_lj[i][j]*cut_lj[i][j]*cut_lj[i][j]; ptail_ij = 2.*MY_PI/3.*all[0]*all[1]*e0nm[i][j]*nm[i][j]*cut_lj3 * (pow(r0[i][j]/cut_lj[i][j],nn[i][j])/(nn[i][j]-3) - pow(r0[i][j]/cut_lj[i][j],mm[i][j])/(mm[i][j]-3)); diff --git a/src/MISC/pair_nm_cut_coul_long.cpp b/src/MISC/pair_nm_cut_coul_long.cpp index 325f3da003..fb82436dba 100644 --- a/src/MISC/pair_nm_cut_coul_long.cpp +++ b/src/MISC/pair_nm_cut_coul_long.cpp @@ -371,14 +371,6 @@ double PairNMCutCoulLong::init_one(int i, int j) } MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - double rr1 = mm[i][j]*(nn[i][j]-1)*pow(r0[i][j],nn[i][j]); - double rr2 = nn[i][j]*(mm[i][j]-1)*pow(r0[i][j],mm[i][j]); - double p1 = 1-nn[i][j]; - double p2 = 1-mm[i][j]; - - double rrr1 = pow(r0[i][j],nn[i][j])*(1-nn[i][j]); - double rrr2 = pow(r0[i][j],mm[i][j])*(1-mm[i][j]); - double cut_lj3 = cut_lj[i][j]*cut_lj[i][j]*cut_lj[i][j]; ptail_ij = 2.*MY_PI/3.*all[0]*all[1]*e0nm[i][j]*nm[i][j]*cut_lj3 * (pow(r0[i][j]/cut_lj[i][j],nn[i][j])/(nn[i][j]-3) - pow(r0[i][j]/cut_lj[i][j],mm[i][j])/(mm[i][j]-3)); diff --git a/src/MOLECULE/fix_cmap.cpp b/src/MOLECULE/fix_cmap.cpp index a889a8d0db..ec2588e61b 100644 --- a/src/MOLECULE/fix_cmap.cpp +++ b/src/MOLECULE/fix_cmap.cpp @@ -943,7 +943,7 @@ double FixCMAP::dihedral_angle_atan2(double fx, double fy, double fz, { // calculate the dihedral angle - double angle, arg1, arg2; + double angle = 0.0, arg1, arg2; arg1 = absg*(fx*bx+fy*by+fz*bz); arg2 = ax*bx+ay*by+az*bz; diff --git a/src/POEMS/fix_poems.cpp b/src/POEMS/fix_poems.cpp index f345d52aab..a01878bffd 100644 --- a/src/POEMS/fix_poems.cpp +++ b/src/POEMS/fix_poems.cpp @@ -748,19 +748,9 @@ void FixPOEMS::initial_integrate(int vflag) /* ---------------------------------------------------------------------- */ -void FixPOEMS::post_force(int vflag) +void FixPOEMS::post_force(int /* vflag */) { if (earlyflag) compute_forces_and_torques(); - - /* - for (int ibody = 0; ibody < nbody; ibody++) { - if (ibody == 0) { - printf("PFF %d %g %g %g\n",ibody,fcm[ibody][0],fcm[ibody][1],fcm[ibody][2]); - printf("PFT %d %g %g %g\n",ibody, - torque[ibody][0],torque[ibody][1],torque[ibody][2]); - } - } - */ } /* ---------------------------------------------------------------------- @@ -850,7 +840,7 @@ void FixPOEMS::final_integrate() /* ---------------------------------------------------------------------- */ -void FixPOEMS::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixPOEMS::initial_integrate_respa(int vflag, int ilevel, int /* iloop */) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -862,14 +852,14 @@ void FixPOEMS::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixPOEMS::post_force_respa(int vflag, int ilevel, int iloop) +void FixPOEMS::post_force_respa(int vflag, int ilevel, int /* iloop */) { if (ilevel == nlevels_respa-1) post_force(vflag); } /* ---------------------------------------------------------------------- */ -void FixPOEMS::final_integrate_respa(int ilevel, int iloop) +void FixPOEMS::final_integrate_respa(int ilevel, int /* iloop */) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); @@ -949,7 +939,7 @@ int FixPOEMS::dof(int igroup) thus this routine does nothing for now ------------------------------------------------------------------------- */ -void FixPOEMS::deform(int flag) {} +void FixPOEMS::deform(int /* flag */) {} /* ---------------------------------------------------------------------- */ @@ -1607,7 +1597,7 @@ void FixPOEMS::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixPOEMS::copy_arrays(int i, int j, int delflag) +void FixPOEMS::copy_arrays(int i, int j, int /* delflag */) { natom2body[j] = natom2body[i]; for (int k = 0; k < natom2body[j]; k++) atom2body[j][k] = atom2body[i][k]; diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index dac88a8efa..4868cd75de 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -716,7 +716,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) if (update->ntimestep % histo_print == 0) { MPI_Allreduce(histo,allhisto,histo_count+2,MPI_LMP_BIGINT,MPI_SUM,world); - bigint total; + bigint total = 0; for (i = 0; i < histo_count+2; i++) total += allhisto[i]; if (me == 0) { diff --git a/src/REPLICA/fix_hyper_local.h b/src/REPLICA/fix_hyper_local.h index 9fe4d03fb9..967101837e 100644 --- a/src/REPLICA/fix_hyper_local.h +++ b/src/REPLICA/fix_hyper_local.h @@ -87,7 +87,7 @@ class FixHyperLocal : public FixHyper { int nevent; // # of events that trigger bond rebuild int nevent_atom; // # of atoms that experienced an event double cutbondsq,dcutsq; - double beta,t_hyper,invqfactorsq; + double beta,invqfactorsq; double mybias; double maxbondlen; // cummulative max length of any bond double maxdriftsq; // max distance any atom drifts from original pos @@ -147,7 +147,7 @@ class FixHyperLocal : public FixHyper { // histogramming of bond boost cooeficients - int histo_flag,histo_every,histo_count,histo_print,histo_steps; + int histo_every,histo_count,histo_print,histo_steps; double histo_delta,invhisto_delta,histo_lo; bigint *histo,*allhisto; }; diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index cc074bb97d..72a4c0d7de 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -323,7 +323,7 @@ void PairSpinExchange::compute_single_pair(int ii, double fmi[3]) double **x = atom->x; double **sp = atom->sp; double local_cut2; - double xi[3], rij[3]; + double xi[3]; double delx,dely,delz; double spj[3]; diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp index d31890ea52..569f911eb9 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp @@ -103,9 +103,9 @@ PairOxdna2Coaxstk::~PairOxdna2Coaxstk() void PairOxdna2Coaxstk::compute(int eflag, int vflag) { - double delf[3],delt[3],delta[3],deltb[3]; // force, torque increment; + double delf[3],delta[3],deltb[3]; // force, torque increment; double evdwl,fpair,finc,tpair,factor_lj; - double v1tmp[3],v2tmp[3],v3tmp[3]; + double v1tmp[3]; double delr_ss[3],delr_ss_norm[3],rsq_ss,r_ss,rinv_ss; double delr_st[3],delr_st_norm[3],rsq_st,r_st,rinv_st; double theta1,theta1p,t1dir[3],cost1; @@ -114,12 +114,6 @@ void PairOxdna2Coaxstk::compute(int eflag, int vflag) double theta6,theta6p,t6dir[3],cost6; double cosphi3; - double gamma,gammacub,rinv_ss_cub,fac; - double aybx,azbx,rax,ray,raz,rbx; - double dcdr,dcdrbx; - double dcdaxbx,dcdaybx,dcdazbx; - double dcdrax,dcdray,dcdraz; - // distances COM-backbone site, COM-stacking site double d_cs=-0.4, d_cst=+0.34; // vectors COM-backbone site, COM-stacking site in lab frame diff --git a/src/USER-MISC/compute_stress_mop.cpp b/src/USER-MISC/compute_stress_mop.cpp index e63dff507f..e496fd4dfa 100644 --- a/src/USER-MISC/compute_stress_mop.cpp +++ b/src/USER-MISC/compute_stress_mop.cpp @@ -210,7 +210,7 @@ void ComputeStressMop::init() /* ---------------------------------------------------------------------- */ -void ComputeStressMop::init_list(int id, NeighList *ptr) +void ComputeStressMop::init_list(int /* id */, NeighList *ptr) { list = ptr; } @@ -246,9 +246,9 @@ void ComputeStressMop::compute_vector() void ComputeStressMop::compute_pairs() { - int i,j,m,n,ii,jj,inum,jnum,itype,jtype; + int i,j,m,ii,jj,inum,jnum,itype,jtype; double delx,dely,delz; - double rsq,eng,fpair,factor_coul,factor_lj; + double rsq,fpair,factor_coul,factor_lj; int *ilist,*jlist,*numneigh,**firstneigh; double *mass = atom->mass; @@ -363,8 +363,7 @@ void ComputeStressMop::compute_pairs() // counts local particles transfers across the plane if (which[m] == KIN || which[m] == TOTAL){ - double vcm[3]; - double masstotal,sgn; + double sgn; for (int i = 0; i < nlocal; i++){ diff --git a/src/USER-MISC/compute_stress_mop_profile.cpp b/src/USER-MISC/compute_stress_mop_profile.cpp index 02ad3ea453..9189318381 100644 --- a/src/USER-MISC/compute_stress_mop_profile.cpp +++ b/src/USER-MISC/compute_stress_mop_profile.cpp @@ -211,7 +211,7 @@ void ComputeStressMopProfile::init() /* ---------------------------------------------------------------------- */ -void ComputeStressMopProfile::init_list(int id, NeighList *ptr) +void ComputeStressMopProfile::init_list(int /* id */, NeighList *ptr) { list = ptr; } @@ -253,11 +253,11 @@ void ComputeStressMopProfile::compute_array() void ComputeStressMopProfile::compute_pairs() { - int i,j,m,n,ii,jj,inum,jnum,itype,jtype,ibin; + int i,j,m,ii,jj,inum,jnum,itype,jtype,ibin; double delx,dely,delz; - double rsq,eng,fpair,factor_coul,factor_lj; + double rsq,fpair,factor_coul,factor_lj; int *ilist,*jlist,*numneigh,**firstneigh; - double pos,pos1,pos_temp; + double pos,pos1; double *mass = atom->mass; int *type = atom->type; @@ -385,8 +385,7 @@ void ComputeStressMopProfile::compute_pairs() if (which[m] == KIN || which[m] == TOTAL){ - double vcm[3]; - double masstotal,sgn; + double sgn; for (int i = 0; i < nlocal; i++){ @@ -449,8 +448,8 @@ void ComputeStressMopProfile::compute_pairs() void ComputeStressMopProfile::setup_bins() { - int i,j,k,m,n; - double lo,hi,coord1,coord2; + int i,n; + double lo = 0.0, hi = 0.0; double *boxlo,*boxhi,*prd; boxlo = domain->boxlo; diff --git a/src/USER-MISC/compute_stress_mop_profile.h b/src/USER-MISC/compute_stress_mop_profile.h index 648d86cc7f..0ab774f3db 100644 --- a/src/USER-MISC/compute_stress_mop_profile.h +++ b/src/USER-MISC/compute_stress_mop_profile.h @@ -50,7 +50,6 @@ namespace LAMMPS_NS { double **coord,**coordp; double **values_local,**values_global; - int ndim; double dt,nktv2p,ftm2v; double area; class NeighList *list; diff --git a/src/USER-MISC/fix_ffl.cpp b/src/USER-MISC/fix_ffl.cpp index e2fb0166a2..d2a57fd2d0 100644 --- a/src/USER-MISC/fix_ffl.cpp +++ b/src/USER-MISC/fix_ffl.cpp @@ -108,8 +108,6 @@ FixFFL::FixFFL(LAMMPS *lmp, int narg, char **arg) : } t_target=t_start; - const double kT = t_target * force->boltz / force->mvv2e; - // initialize Marsaglia RNG with processor-unique seed // NB: this means runs will not be the same with different numbers of processors @@ -298,7 +296,7 @@ void FixFFL::ffl_integrate() { } -void FixFFL::initial_integrate(int vflag) { +void FixFFL::initial_integrate(int /* vflag */) { double dtfm; // update v and x of atoms in group @@ -391,7 +389,7 @@ void FixFFL::final_integrate() { } /* ---------------------------------------------------------------------- */ -void FixFFL::initial_integrate_respa(int vflag, int ilevel, int iloop) { +void FixFFL::initial_integrate_respa(int vflag, int ilevel, int /* iloop */) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -406,7 +404,7 @@ void FixFFL::initial_integrate_respa(int vflag, int ilevel, int iloop) { } } -void FixFFL::final_integrate_respa(int ilevel, int iloop) { +void FixFFL::final_integrate_respa(int ilevel, int /* iloop */) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; diff --git a/src/USER-MISC/fix_filter_corotate.cpp b/src/USER-MISC/fix_filter_corotate.cpp index 56ab2b3df9..717861e06f 100644 --- a/src/USER-MISC/fix_filter_corotate.cpp +++ b/src/USER-MISC/fix_filter_corotate.cpp @@ -592,14 +592,13 @@ void FixFilterCorotate::pre_neighbor() double c = (del2[0])*(del3[1]) - (del2[1])*(del3[0]); int signum = sgn(a*(del1[0]) + b*(del1[1]) + c*(del1[2])); - if (fabs(signum)!= 1) + if (abs(signum) != 1) error->all(FLERR,"Wrong orientation in cluster of size 4" "in fix filter/corotate!"); clist_q0[i][8] *= signum; clist_q0[i][11] *= signum; - } else if (N == 5) - { + } else if (N == 5) { oxy = atom->map(shake_atom[m][0]); atom1 = atom->map(shake_atom[m][1]); atom2 = atom->map(shake_atom[m][2]); @@ -666,14 +665,12 @@ void FixFilterCorotate::pre_neighbor() double c = (del2[0])*(del3[1]) - (del2[1])*(del3[0]); int signum = sgn(a*(del1[0]) + b*(del1[1]) + c*(del1[2])); - if (fabs(signum)!= 1) + if (abs(signum)!= 1) error->all(FLERR,"Wrong orientation in cluster of size 5" "in fix filter/corotate!"); clist_q0[i][8] *= signum; clist_q0[i][11] *= signum; - } - else - { + } else { error->all(FLERR,"Fix filter/corotate cluster with size > 5" "not yet configured..."); } diff --git a/src/USER-OMP/fix_omp.cpp b/src/USER-OMP/fix_omp.cpp index 8be54caada..a4587b1c14 100644 --- a/src/USER-OMP/fix_omp.cpp +++ b/src/USER-OMP/fix_omp.cpp @@ -80,7 +80,9 @@ FixOMP::FixOMP(LAMMPS *lmp, int narg, char **arg) if (nthreads < 1) error->all(FLERR,"Illegal number of OpenMP threads requested"); +#if defined(_OPENMP) int reset_thr = 0; +#endif if (nthreads != comm->nthreads) { #if defined(_OPENMP) reset_thr = 1; diff --git a/src/USER-OMP/thr_omp.h b/src/USER-OMP/thr_omp.h index 0821f8cea0..87d921290e 100644 --- a/src/USER-OMP/thr_omp.h +++ b/src/USER-OMP/thr_omp.h @@ -185,6 +185,7 @@ static inline void loop_setup_thr(int &ifrom, int &ito, int &tid, tid = 0; ifrom = 0; ito = inum; + nthreads = 1; #endif } diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp index ddad7eb62f..61b653b375 100644 --- a/src/compute_chunk_atom.cpp +++ b/src/compute_chunk_atom.cpp @@ -66,7 +66,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : // chunk style and its args - int iarg; + int iarg = 0; binflag = 0; ncoord = 0; @@ -248,7 +248,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"bound") == 0) { if (iarg+4 > narg) error->all(FLERR,"Illegal compute chunk/atom command"); - int idim; + int idim = 0; if (strcmp(arg[iarg+1],"x") == 0) idim = 0; else if (strcmp(arg[iarg+1],"y") == 0) idim = 1; else if (strcmp(arg[iarg+1],"z") == 0) idim = 2; diff --git a/src/compute_dihedral_local.h b/src/compute_dihedral_local.h index d5f6a64183..5c50a66e96 100644 --- a/src/compute_dihedral_local.h +++ b/src/compute_dihedral_local.h @@ -33,7 +33,7 @@ class ComputeDihedralLocal : public Compute { double memory_usage(); private: - int nvalues,nvar,ncount,setflag,tflag; + int nvalues,nvar,ncount,setflag; int pvar; int *bstyle,*vvar; diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 751c4746ba..e19b565554 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -54,7 +54,7 @@ void CreateBonds::command(int narg, char **arg) int style; - int iarg; + int iarg = 0; if (strcmp(arg[0],"many") == 0) { style = MANY; if (narg != 6) error->all(FLERR,"Illegal create_bonds command"); diff --git a/src/displace_atoms.cpp b/src/displace_atoms.cpp index 04088bec8c..7b29b1d3d5 100644 --- a/src/displace_atoms.cpp +++ b/src/displace_atoms.cpp @@ -118,7 +118,7 @@ void DisplaceAtoms::command(int narg, char **arg) if (style == RAMP) { - int d_dim; + int d_dim = 0; if (strcmp(arg[2],"x") == 0) d_dim = 0; else if (strcmp(arg[2],"y") == 0) d_dim = 1; else if (strcmp(arg[2],"z") == 0) d_dim = 2; @@ -136,7 +136,7 @@ void DisplaceAtoms::command(int narg, char **arg) d_hi = zscale*force->numeric(FLERR,arg[4]); } - int coord_dim; + int coord_dim = 0; if (strcmp(arg[5],"x") == 0) coord_dim = 0; else if (strcmp(arg[5],"y") == 0) coord_dim = 1; else if (strcmp(arg[5],"z") == 0) coord_dim = 2; diff --git a/src/dump_image.cpp b/src/dump_image.cpp index a488f65161..0d63d2e4cb 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -1290,7 +1290,7 @@ int DumpImage::modify_param(int narg, char **arg) if (strcmp(arg[0],"amap") == 0) { if (narg < 6) error->all(FLERR,"Illegal dump_modify command"); if (strlen(arg[3]) != 2) error->all(FLERR,"Illegal dump_modify command"); - int factor; + int factor = 0; if (arg[3][0] == 's') factor = 1; else if (arg[3][0] == 'c') factor = 2; else if (arg[3][0] == 'd') factor = 3; diff --git a/src/fix_deform.cpp b/src/fix_deform.cpp index c960c310f6..909ead3e2a 100644 --- a/src/fix_deform.cpp +++ b/src/fix_deform.cpp @@ -802,7 +802,7 @@ void FixDeform::end_of_step() // tilt_target can be large positive or large negative value // add/subtract box lengths until tilt_target is closest to current value - int idenom; + int idenom = 0; if (i == 5) idenom = 0; else if (i == 4) idenom = 0; else if (i == 3) idenom = 1; diff --git a/src/fix_move.cpp b/src/fix_move.cpp index 2f9fb0ebaa..0a5f506ab2 100644 --- a/src/fix_move.cpp +++ b/src/fix_move.cpp @@ -68,7 +68,7 @@ FixMove::FixMove(LAMMPS *lmp, int narg, char **arg) : // parse args - int iarg; + int iarg = 0; if (strcmp(arg[3],"linear") == 0) { if (narg < 7) error->all(FLERR,"Illegal fix move command"); diff --git a/src/input.cpp b/src/input.cpp index f9dd1ec314..8af8da26be 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1138,7 +1138,7 @@ void Input::partition() { if (narg < 3) error->all(FLERR,"Illegal partition command"); - int yesflag; + int yesflag = 0; if (strcmp(arg[0],"yes") == 0) yesflag = 1; else if (strcmp(arg[0],"no") == 0) yesflag = 0; else error->all(FLERR,"Illegal partition command"); diff --git a/src/set.cpp b/src/set.cpp index 7eca4e9a9c..34b86ea328 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -890,7 +890,7 @@ void Set::set(int keyword) // enforce quat rotation vector in z dir for 2d systems else if (keyword == QUAT) { - double *quat; + double *quat = NULL; if (avec_ellipsoid && atom->ellipsoid[i] >= 0) quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat; else if (avec_tri && atom->tri[i] >= 0) diff --git a/src/variable.cpp b/src/variable.cpp index 1595456f33..af5f647b74 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -182,7 +182,7 @@ void Variable::set(int narg, char **arg) if (find(arg[0]) >= 0) return; if (nvar == maxvar) grow(); style[nvar] = LOOP; - int nfirst,nlast; + int nfirst = 0,nlast = 0; if (narg == 3 || (narg == 4 && strcmp(arg[3],"pad") == 0)) { nfirst = 1; nlast = force->inumeric(FLERR,arg[2]); @@ -3983,7 +3983,7 @@ int Variable::special_function(char *word, char *contents, Tree **tree, strcmp(word,"max") == 0 || strcmp(word,"ave") == 0 || strcmp(word,"trap") == 0 || strcmp(word,"slope") == 0) { - int method; + int method = 0; if (strcmp(word,"sum") == 0) method = SUM; else if (strcmp(word,"min") == 0) method = XMIN; else if (strcmp(word,"max") == 0) method = XMAX; diff --git a/src/velocity.cpp b/src/velocity.cpp index 3a0b95fb4d..6d6027cc3c 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -641,7 +641,7 @@ void Velocity::ramp(int /*narg*/, char **arg) // parse args - int v_dim; + int v_dim = 0; if (strcmp(arg[0],"vx") == 0) v_dim = 0; else if (strcmp(arg[0],"vy") == 0) v_dim = 1; else if (strcmp(arg[0],"vz") == 0) v_dim = 2; @@ -662,7 +662,7 @@ void Velocity::ramp(int /*narg*/, char **arg) v_hi = zscale*force->numeric(FLERR,arg[2]); } - int coord_dim; + int coord_dim = 0; if (strcmp(arg[3],"x") == 0) coord_dim = 0; else if (strcmp(arg[3],"y") == 0) coord_dim = 1; else if (strcmp(arg[3],"z") == 0) coord_dim = 2; diff --git a/src/write_dump.cpp b/src/write_dump.cpp index bb79c654b4..6c7375012e 100644 --- a/src/write_dump.cpp +++ b/src/write_dump.cpp @@ -45,7 +45,7 @@ void WriteDump::command(int narg, char **arg) // create the Dump instance // create dump command line with extra required args - Dump *dump; + Dump *dump = NULL; char **dumpargs = new char*[modindex+2]; dumpargs[0] = (char *) "WRITE_DUMP"; // dump id From 6e225d90fc2926170176821e5ef1b8144bd38e3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Nov 2018 16:48:38 -0500 Subject: [PATCH 131/273] fix some minor bugs write data file writing and remove dead code and silence compiler warnings --- src/USER-COLVARS/group_ndx.cpp | 4 ++-- src/USER-DPD/fix_rx.cpp | 6 ++++-- src/USER-MISC/compute_stress_mop_profile.cpp | 3 +-- src/USER-MOFFF/angle_class2_p6.cpp | 2 +- src/USER-MOFFF/angle_cosine_buck6d.cpp | 2 +- src/USER-MOFFF/improper_inversion_harmonic.cpp | 5 +++-- src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp | 2 +- src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp | 2 +- 8 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/USER-COLVARS/group_ndx.cpp b/src/USER-COLVARS/group_ndx.cpp index 450c250ffa..858336c9d5 100644 --- a/src/USER-COLVARS/group_ndx.cpp +++ b/src/USER-COLVARS/group_ndx.cpp @@ -50,7 +50,7 @@ static int cmptagint(const void *p1, const void *p2) static void write_group(FILE *fp, int gid, Atom *atom, Group *group, int me, int np, MPI_Comm world, FILE *screen, FILE *logfile) { - char fmt[8]; + char fmt[16]; tagint *sendlist, *recvlist; bigint num = group->count(gid); int lnum, cols; @@ -73,7 +73,7 @@ static void write_group(FILE *fp, int gid, Atom *atom, Group *group, int me, ++i; j /= 10; } - sprintf(fmt,"%%%dd ", i); + snprintf(fmt,16,"%%%dd ", i); cols = 80 / (i+1); } diff --git a/src/USER-DPD/fix_rx.cpp b/src/USER-DPD/fix_rx.cpp index 97668471c8..cb8349786f 100644 --- a/src/USER-DPD/fix_rx.cpp +++ b/src/USER-DPD/fix_rx.cpp @@ -758,8 +758,10 @@ void FixRX::pre_force(int /*vflag*/) memory->create( diagnosticCounterPerODE[FuncSum], nlocal, "FixRX::diagnosticCounterPerODE"); } - //#pragma omp parallel \ - // reduction(+: nSteps, nIters, nFuncs, nFails ) +#if 0 + #pragma omp parallel \ + reduction(+: nSteps, nIters, nFuncs, nFails ) +#endif { double *rwork = new double[8*nspecies]; diff --git a/src/USER-MISC/compute_stress_mop_profile.cpp b/src/USER-MISC/compute_stress_mop_profile.cpp index 9189318381..76bf487630 100644 --- a/src/USER-MISC/compute_stress_mop_profile.cpp +++ b/src/USER-MISC/compute_stress_mop_profile.cpp @@ -451,10 +451,9 @@ void ComputeStressMopProfile::setup_bins() int i,n; double lo = 0.0, hi = 0.0; - double *boxlo,*boxhi,*prd; + double *boxlo,*boxhi; boxlo = domain->boxlo; boxhi = domain->boxhi; - prd = domain->prd; if (originflag == LOWER) origin = boxlo[dir]; else if (originflag == UPPER) origin = boxhi[dir]; diff --git a/src/USER-MOFFF/angle_class2_p6.cpp b/src/USER-MOFFF/angle_class2_p6.cpp index c821c9d883..d2a6e21e6b 100644 --- a/src/USER-MOFFF/angle_class2_p6.cpp +++ b/src/USER-MOFFF/angle_class2_p6.cpp @@ -429,7 +429,7 @@ void AngleClass2P6::read_restart(FILE *fp) void AngleClass2P6::write_data(FILE *fp) { for (int i = 1; i <= atom->nangletypes; i++) - fprintf(fp,"%d %g %g %g %g\n", + fprintf(fp,"%d %g %g %g %g %g %g\n", i,theta0[i]/MY_PI*180.0,k2[i],k3[i],k4[i],k5[i],k6[i]); fprintf(fp,"\nBondBond Coeffs\n\n"); diff --git a/src/USER-MOFFF/angle_cosine_buck6d.cpp b/src/USER-MOFFF/angle_cosine_buck6d.cpp index 3f87aeb757..f358097802 100644 --- a/src/USER-MOFFF/angle_cosine_buck6d.cpp +++ b/src/USER-MOFFF/angle_cosine_buck6d.cpp @@ -353,7 +353,7 @@ void AngleCosineBuck6d::read_restart(FILE *fp) void AngleCosineBuck6d::write_data(FILE *fp) { for (int i = 1; i <= atom->nangletypes; i++) { - fprintf(fp,"%d %g %d %d\n",i,k[i],multiplicity[i],th0[i]); + fprintf(fp,"%d %g %d %g\n",i,k[i],multiplicity[i],th0[i]); } } diff --git a/src/USER-MOFFF/improper_inversion_harmonic.cpp b/src/USER-MOFFF/improper_inversion_harmonic.cpp index 9608d58054..8404984b53 100644 --- a/src/USER-MOFFF/improper_inversion_harmonic.cpp +++ b/src/USER-MOFFF/improper_inversion_harmonic.cpp @@ -241,8 +241,8 @@ void ImproperInversionHarmonic::invang(const int &i1,const int &i2, f[i4][2] += f4[2]; } - double rb3x, rb3y, rb3z; - if (evflag) + if (evflag) { + double rb3x, rb3y, rb3z; rb3x = vb1x - vb2x; rb3y = vb1y - vb2y; @@ -252,6 +252,7 @@ void ImproperInversionHarmonic::invang(const int &i1,const int &i2, vb3x,vb3y,vb3z, vb2x,vb2y,vb2z, rb3x,rb3y,rb3z); + } } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp b/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp index f434d03858..46af95470c 100644 --- a/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp +++ b/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp @@ -83,7 +83,7 @@ void PairBuck6dCoulGaussDSF::compute(int eflag, int vflag) double r,rsq,r2inv,r6inv,r14inv,rexp,forcecoul,forcebuck6d,factor_coul,factor_lj; double term1,term2,term3,term4,term5; double rcu,rqu,sme,smf,ebuck6d; - double prefactor,erfcc,erfcd,t,arg; + double prefactor,erfcc,erfcd,arg; int *ilist,*jlist,*numneigh,**firstneigh; evdwl = ecoul = 0.0; diff --git a/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp b/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp index 9902896d18..3c54d64770 100644 --- a/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp +++ b/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp @@ -85,7 +85,7 @@ void PairBuck6dCoulGaussLong::compute(int eflag, int vflag) double grij,expm2,erf; double term1,term2,term3,term4,term5; double rcu,rqu,sme,smf,ebuck6d,ealpha; - double prefactor,erfa,expa,t,arg,falpha; + double prefactor,erfa,expa,arg,falpha; int *ilist,*jlist,*numneigh,**firstneigh; evdwl = ecoul = 0.0; From 2c979e878f51c5bf6f31b28a9badde8042de2b0f Mon Sep 17 00:00:00 2001 From: Pierre de Buyl Date: Fri, 16 Nov 2018 15:18:58 +0100 Subject: [PATCH 132/273] fix cmake build for USER-H5MD The hdf5 includes were needed as well for building the dump. --- cmake/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 253cee6465..90f6e9c8bd 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -819,7 +819,7 @@ foreach(SIMPLE_LIB REAX MEAM POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD if(PKG_LIB STREQUAL awpmd) target_include_directories(awpmd PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/awpmd/systems/interact ${LAMMPS_LIB_SOURCE_DIR}/awpmd/ivutils/include) elseif(PKG_LIB STREQUAL h5md) - target_include_directories(h5md PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/h5md/include) + target_include_directories(h5md PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/h5md/include ${HDF5_INCLUDE_DIRS}) elseif(PKG_LIB STREQUAL colvars) target_compile_options(colvars PRIVATE -DLEPTON) target_include_directories(colvars PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton/include) @@ -842,6 +842,7 @@ if(PKG_USER-H5MD) find_package(HDF5 REQUIRED) target_link_libraries(h5md ${HDF5_LIBRARIES}) target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS}) + include_directories(${HDF5_INCLUDE_DIRS}) endif() From 11de8dafe3e68e97671673840e79f34c8cfbf0af Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Fri, 16 Nov 2018 09:51:17 -0500 Subject: [PATCH 133/273] Update Colvars library to version 2018-11-16 Fixes several issues with running averages and time correlation function computations. Details are in: https://github.com/Colvars/colvars/issues/143 https://github.com/Colvars/colvars/issues/193 https://github.com/Colvars/colvars/pull/194 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 621342 -> 621677 bytes lib/colvars/colvar.cpp | 239 +++++++++++++++----------- lib/colvars/colvar.h | 18 +- lib/colvars/colvarbias.cpp | 6 + lib/colvars/colvarbias.h | 3 + lib/colvars/colvardeps.cpp | 3 + lib/colvars/colvarmodule.cpp | 43 ++++- lib/colvars/colvarmodule.h | 6 +- lib/colvars/colvars_version.h | 2 +- 9 files changed, 206 insertions(+), 114 deletions(-) diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 4afeedccc87bb748bdc3fcb6eceb56d4004331c6..07d82544759e2c3fd3a98b45cff0afc3066f15b1 100644 GIT binary patch delta 65076 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, - (std::string("colvar")+cvm::to_str(cv->variables()->size()+1))); + (std::string("colvar")+cvm::to_str(cv->variables()->size()))); if ((cvm::colvar_by_name(this->name) != NULL) && (cvm::colvar_by_name(this->name) != this)) { @@ -63,9 +68,6 @@ int colvar::init(std::string const &conf) this->description = "colvar " + this->name; - kinetic_energy = 0.0; - potential_energy = 0.0; - error_code |= init_components(conf); if (error_code != COLVARS_OK) { return cvm::get_error(); @@ -260,7 +262,6 @@ int colvar::init(std::string const &conf) f_old.reset(); x_restart.type(value()); - after_restart = false; reset_bias_force(); @@ -282,8 +283,7 @@ int colvar::init(std::string const &conf) // Now that the children are defined we can solve dependencies enable(f_cv_active); - if (cvm::b_analysis) - parse_analysis(conf); + error_code |= parse_analysis(conf); if (cvm::debug()) cvm::log("Done initializing collective variable \""+this->name+"\".\n"); @@ -881,19 +881,7 @@ int colvar::parse_analysis(std::string const &conf) cvm::error("Error: runAveStride must be commensurate with the restart frequency.\n", INPUT_ERROR); } - get_keyval(conf, "runAveOutputFile", runave_outfile, - std::string(cvm::output_prefix()+"."+ - this->name+".runave.traj")); - - size_t const this_cv_width = x.output_width(cvm::cv_width); - cvm::proxy->backup_file(runave_outfile); - runave_os = cvm::proxy->output_stream(runave_outfile); - *runave_os << "# " << cvm::wrap_string("step", cvm::it_width-2) - << " " - << cvm::wrap_string("running average", this_cv_width) - << " " - << cvm::wrap_string("running stddev", this_cv_width) - << "\n"; + get_keyval(conf, "runAveOutputFile", runave_outfile, runave_outfile); } acf_length = 0; @@ -902,7 +890,6 @@ int colvar::parse_analysis(std::string const &conf) enable(f_cv_corrfunc); - std::string acf_colvar_name; get_keyval(conf, "corrFuncWithColvar", acf_colvar_name, this->name); if (acf_colvar_name == this->name) { cvm::log("Calculating auto-correlation function.\n"); @@ -918,8 +905,12 @@ int colvar::parse_analysis(std::string const &conf) } else if (acf_type_str == to_lower_cppstr(std::string("velocity"))) { acf_type = acf_vel; enable(f_cv_fdiff_velocity); - if (acf_colvar_name.size()) - (cvm::colvar_by_name(acf_colvar_name))->enable(f_cv_fdiff_velocity); + colvar *cv2 = cvm::colvar_by_name(acf_colvar_name); + if (cv2 == NULL) { + return cvm::error("Error: collective variable \""+acf_colvar_name+ + "\" is not defined at this time.\n", INPUT_ERROR); + } + cv2->enable(f_cv_fdiff_velocity); } else if (acf_type_str == to_lower_cppstr(std::string("coordinate_p2"))) { acf_type = acf_p2coor; } else { @@ -937,9 +928,7 @@ int colvar::parse_analysis(std::string const &conf) } get_keyval(conf, "corrFuncNormalize", acf_normalize, true); - get_keyval(conf, "corrFuncOutputFile", acf_outfile, - std::string(cvm::output_prefix()+"."+this->name+ - ".corrfunc.dat")); + get_keyval(conf, "corrFuncOutputFile", acf_outfile, acf_outfile); } return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); } @@ -1389,9 +1378,9 @@ int colvar::calc_colvar_properties() { if (is_enabled(f_cv_fdiff_velocity)) { // calculate the velocity by finite differences - if (cvm::step_relative() == 0) + if (cvm::step_relative() == 0) { x_old = x; - else { + } else { v_fdiff = fdiff_velocity(x_old, x); v_reported = v_fdiff; } @@ -1486,7 +1475,6 @@ cvm::real colvar::update_forces_energy() return 0.; } } - prev_timestep = cvm::step_relative(); // Integrate with slow timestep (if time_step_factor != 1) cvm::real dt = cvm::dt() * cvm::real(time_step_factor); @@ -1547,8 +1535,18 @@ cvm::real colvar::update_forces_energy() // bypass the extended Lagrangian mass) f += fb_actual; + if (cvm::debug()) + cvm::log("Done updating colvar \""+this->name+"\".\n"); + return (potential_energy + kinetic_energy); +} + + +int colvar::end_of_step() +{ + if (cvm::debug()) + cvm::log("End of step for colvar \""+this->name+"\".\n"); + if (is_enabled(f_cv_fdiff_velocity)) { - // set it for the next step x_old = x; } @@ -1556,9 +1554,9 @@ cvm::real colvar::update_forces_energy() f_old = f; } - if (cvm::debug()) - cvm::log("Done updating colvar \""+this->name+"\".\n"); - return (potential_energy + kinetic_energy); + prev_timestep = cvm::step_relative(); + + return COLVARS_OK; } @@ -1966,6 +1964,10 @@ std::ostream & colvar::write_restart(std::ostream &os) { os << "}\n\n"; + if (runave_os) { + cvm::main()->proxy->flush_output_stream(runave_os); + } + return os; } @@ -2075,55 +2077,61 @@ std::ostream & colvar::write_traj(std::ostream &os) return os; } + int colvar::write_output_files() { - if (cvm::b_analysis) { + int error_code = COLVARS_OK; + if (is_enabled(f_cv_corrfunc)) { if (acf.size()) { - cvm::log("Writing acf to file \""+acf_outfile+"\".\n"); - + if (acf_outfile.size() == 0) { + acf_outfile = std::string(cvm::output_prefix()+"."+this->name+ + ".corrfunc.dat"); + } + cvm::log("Writing correlation function to file \""+acf_outfile+"\".\n"); cvm::backup_file(acf_outfile.c_str()); std::ostream *acf_os = cvm::proxy->output_stream(acf_outfile); if (!acf_os) return cvm::get_error(); - write_acf(*acf_os); + error_code |= write_acf(*acf_os); cvm::proxy->close_output_stream(acf_outfile); } - - if (runave_os) { - cvm::proxy->close_output_stream(runave_outfile); - runave_os = NULL; - } } - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); + + return error_code; } // ******************** ANALYSIS FUNCTIONS ******************** -void colvar::analyze() +int colvar::analyze() { + int error_code = COLVARS_OK; + if (is_enabled(f_cv_runave)) { - calc_runave(); + error_code |= calc_runave(); } if (is_enabled(f_cv_corrfunc)) { - calc_acf(); + error_code |= calc_acf(); } + + return error_code; } inline void history_add_value(size_t const &history_length, - std::list &history, - colvarvalue const &new_value) + std::list &history, + colvarvalue const &new_value) { history.push_front(new_value); if (history.size() > history_length) history.pop_back(); } + inline void history_incr(std::list< std::list > &history, - std::list< std::list >::iterator &history_p) + std::list< std::list >::iterator &history_p) { if ((++history_p) == history.end()) history_p = history.begin(); @@ -2133,18 +2141,21 @@ inline void history_incr(std::list< std::list > &history, int colvar::calc_acf() { // using here an acf_stride-long list of vectors for either - // coordinates(acf_x_history) or velocities (acf_v_history); each vector can + // coordinates (acf_x_history) or velocities (acf_v_history); each vector can // contain up to acf_length values, which are contiguous in memory // representation but separated by acf_stride in the time series; // the pointer to each vector is changed at every step + colvar const *cfcv = cvm::colvar_by_name(acf_colvar_name); + if (cfcv == NULL) { + return cvm::error("Error: collective variable \""+acf_colvar_name+ + "\" is not defined at this time.\n", INPUT_ERROR); + } + if (acf_x_history.empty() && acf_v_history.empty()) { // first-step operations - colvar *cfcv = (acf_colvar_name.size() ? - cvm::colvar_by_name(acf_colvar_name) : - this); if (colvarvalue::check_types(cfcv->value(), value())) { cvm::error("Error: correlation function between \""+cfcv->name+ "\" and \""+this->name+"\" cannot be calculated, " @@ -2153,7 +2164,8 @@ int colvar::calc_acf() } acf_nframes = 0; - cvm::log("Colvar \""+this->name+"\": initializing ACF calculation.\n"); + cvm::log("Colvar \""+this->name+"\": initializing correlation function " + "calculation.\n"); if (acf.size() < acf_length+1) acf.resize(acf_length+1, 0.0); @@ -2182,41 +2194,31 @@ int colvar::calc_acf() break; } - } else { - - colvar *cfcv = (acf_colvar_name.size() ? - cvm::colvar_by_name(acf_colvar_name) : - this); + } else if (cvm::step_relative() > prev_timestep) { switch (acf_type) { case acf_vel: - if (is_enabled(f_cv_fdiff_velocity)) { - // calc() should do this already, but this only happens in a - // simulation; better do it again in case a trajectory is - // being read - v_reported = v_fdiff = fdiff_velocity(x_old, cfcv->value()); - } - calc_vel_acf((*acf_v_history_p), cfcv->velocity()); - // store this value in the history - history_add_value(acf_length+acf_offset, *acf_v_history_p, cfcv->velocity()); - // if stride is larger than one, cycle among different histories + history_add_value(acf_length+acf_offset, *acf_v_history_p, + cfcv->velocity()); history_incr(acf_v_history, acf_v_history_p); break; case acf_coor: calc_coor_acf((*acf_x_history_p), cfcv->value()); - history_add_value(acf_length+acf_offset, *acf_x_history_p, cfcv->value()); + history_add_value(acf_length+acf_offset, *acf_x_history_p, + cfcv->value()); history_incr(acf_x_history, acf_x_history_p); break; case acf_p2coor: calc_p2coor_acf((*acf_x_history_p), cfcv->value()); - history_add_value(acf_length+acf_offset, *acf_x_history_p, cfcv->value()); + history_add_value(acf_length+acf_offset, *acf_x_history_p, + cfcv->value()); history_incr(acf_x_history, acf_x_history_p); break; @@ -2225,18 +2227,14 @@ int colvar::calc_acf() } } - if (is_enabled(f_cv_fdiff_velocity)) { - // set it for the next step - x_old = x; - } - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); + return COLVARS_OK; } -int colvar::calc_vel_acf(std::list &v_list, - colvarvalue const &v) +void colvar::calc_vel_acf(std::list &v_list, + colvarvalue const &v) { - // loop over stored velocities and add to the ACF, but only the + // loop over stored velocities and add to the ACF, but only if the // length is sufficient to hold an entire row of ACF values if (v_list.size() >= acf_length+acf_offset) { std::list::iterator vs_i = v_list.begin(); @@ -2255,7 +2253,6 @@ int colvar::calc_vel_acf(std::list &v_list, acf_nframes++; } - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); } @@ -2280,7 +2277,7 @@ void colvar::calc_coor_acf(std::list &x_list, void colvar::calc_p2coor_acf(std::list &x_list, - colvarvalue const &x) + colvarvalue const &x) { // same as above but with second order Legendre polynomial instead // of just the scalar product @@ -2301,20 +2298,46 @@ void colvar::calc_p2coor_acf(std::list &x_list, } -void colvar::write_acf(std::ostream &os) +int colvar::write_acf(std::ostream &os) { - if (!acf_nframes) - cvm::log("Warning: ACF was not calculated (insufficient frames).\n"); + if (!acf_nframes) { + return COLVARS_OK; + } + os.setf(std::ios::scientific, std::ios::floatfield); - os << "# Autocorrelation function for collective variable \"" - << this->name << "\"\n"; - // one frame is used for normalization, the statistical sample is - // hence decreased - os << "# nframes = " << (acf_normalize ? - acf_nframes - 1 : - acf_nframes) << "\n"; + os << "# "; + switch (acf_type) { + case acf_vel: + os << "Velocity"; + break; + case acf_coor: + os << "Coordinate"; + break; + case acf_p2coor: + os << "Coordinate (2nd Legendre poly)"; + break; + } + + if (acf_colvar_name == name) { + os << " autocorrelation function for variable \"" + << this->name << "\"\n"; + } else { + os << " correlation function between variables \"" // + << this->name << "\" and \"" << acf_colvar_name << "\"\n"; + } + + os << "# Number of samples = "; + if (acf_normalize) { + os << (acf_nframes-1) << " (one DoF is used for normalization)\n"; + } else { + os << acf_nframes << "\n"; + } + + os << "# " << cvm::wrap_string("step", cvm::it_width-2) << " " + << cvm::wrap_string("corrfunc(step)", cvm::cv_width) << "\n"; cvm::real const acf_norm = acf.front() / cvm::real(acf_nframes); + std::vector::iterator acf_i; size_t it = acf_offset; for (acf_i = acf.begin(); acf_i != acf.end(); ++acf_i) { @@ -2325,11 +2348,15 @@ void colvar::write_acf(std::ostream &os) (*acf_i)/(acf_norm * cvm::real(acf_nframes)) : (*acf_i)/(cvm::real(acf_nframes)) ) << "\n"; } + + return os.good() ? COLVARS_OK : FILE_ERROR; } -void colvar::calc_runave() +int colvar::calc_runave() { + int error_code = COLVARS_OK; + if (x_history.empty()) { runave.type(value().type()); @@ -2348,10 +2375,29 @@ void colvar::calc_runave() } else { - if ( (cvm::step_relative() % runave_stride) == 0) { + if ( (cvm::step_relative() % runave_stride) == 0 && + (cvm::step_relative() > prev_timestep) ) { if ((*x_history_p).size() >= runave_length-1) { + if (runave_os == NULL) { + if (runave_outfile.size() == 0) { + runave_outfile = std::string(cvm::output_prefix()+"."+ + this->name+".runave.traj"); + } + + size_t const this_cv_width = x.output_width(cvm::cv_width); + cvm::proxy->backup_file(runave_outfile); + runave_os = cvm::proxy->output_stream(runave_outfile); + runave_os->setf(std::ios::scientific, std::ios::floatfield); + *runave_os << "# " << cvm::wrap_string("step", cvm::it_width-2) + << " " + << cvm::wrap_string("running average", this_cv_width) + << " " + << cvm::wrap_string("running stddev", this_cv_width) + << "\n"; + } + runave = x; std::list::iterator xs_i; for (xs_i = (*x_history_p).begin(); @@ -2370,7 +2416,7 @@ void colvar::calc_runave() runave_variance *= 1.0 / cvm::real(runave_length-1); *runave_os << std::setw(cvm::it_width) << cvm::step_relative() - << " " + << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) << runave << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) @@ -2381,6 +2427,7 @@ void colvar::calc_runave() } } + return error_code; } // Static members diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index 989d55124f..a67749d577 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -291,6 +291,9 @@ public: /// \brief Calculate the colvar's value and related quantities int calc(); + /// Carry out operations needed before next step is run + int end_of_step(); + /// \brief Calculate a subset of the colvar components (CVCs) currently active /// (default: all active CVCs) /// Note: both arguments refer to the sect of *active* CVCs, not all CVCs @@ -410,8 +413,9 @@ public: /// Read the analysis tasks int parse_analysis(std::string const &conf); + /// Perform analysis tasks - void analyze(); + int analyze(); /// Read the value from a collective variable trajectory file @@ -489,23 +493,23 @@ protected: acf_type_e acf_type; /// \brief Velocity ACF, scalar product between v(0) and v(t) - int calc_vel_acf(std::list &v_history, - colvarvalue const &v); + void calc_vel_acf(std::list &v_history, + colvarvalue const &v); /// \brief Coordinate ACF, scalar product between x(0) and x(t) /// (does not work with scalar numbers) void calc_coor_acf(std::list &x_history, - colvarvalue const &x); + colvarvalue const &x); /// \brief Coordinate ACF, second order Legendre polynomial between /// x(0) and x(t) (does not work with scalar numbers) void calc_p2coor_acf(std::list &x_history, - colvarvalue const &x); + colvarvalue const &x); /// Calculate the auto-correlation function (ACF) int calc_acf(); /// Save the ACF to a file - void write_acf(std::ostream &os); + int write_acf(std::ostream &os); /// Length of running average series size_t runave_length; @@ -521,7 +525,7 @@ protected: cvm::real runave_variance; /// Calculate the running average and its standard deviation - void calc_runave(); + int calc_runave(); /// If extended Lagrangian active: colvar energies (kinetic and harmonic potential) cvm::real kinetic_energy; diff --git a/lib/colvars/colvarbias.cpp b/lib/colvars/colvarbias.cpp index 29620fbee8..9363fcdcb6 100644 --- a/lib/colvars/colvarbias.cpp +++ b/lib/colvars/colvarbias.cpp @@ -236,6 +236,12 @@ void colvarbias::communicate_forces() } +int colvarbias::end_of_step() +{ + return COLVARS_OK; +} + + int colvarbias::change_configuration(std::string const &conf) { cvm::error("Error: change_configuration() not implemented.\n", diff --git a/lib/colvars/colvarbias.h b/lib/colvars/colvarbias.h index 083b9d7303..391826e79e 100644 --- a/lib/colvars/colvarbias.h +++ b/lib/colvars/colvarbias.h @@ -66,6 +66,9 @@ public: /// Send forces to the collective variables virtual void communicate_forces(); + /// Carry out operations needed before next step is run + virtual int end_of_step(); + /// Load new configuration - force constant and/or centers only virtual int change_configuration(std::string const &conf); diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index 80bd6670d3..d20ee6e55c 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -567,6 +567,9 @@ void colvardeps::init_cv_requires() { // Most features are available, so we set them so // and list exceptions below } + + feature_states[f_cv_fdiff_velocity].available = + cvm::main()->proxy->simulation_running(); } diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index 87b08b1ef8..d88a97a441 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -62,8 +62,6 @@ colvarmodule::colvarmodule(colvarproxy *proxy_in) use_scripted_forces = false; scripting_after_biases = false; - b_analysis = false; - colvarmodule::debug_gradients_step_size = 1.0e-07; colvarmodule::rotation::monitor_crossings = false; @@ -274,7 +272,12 @@ int colvarmodule::parse_global_params(std::string const &conf) } } - parse->get_keyval(conf, "analysis", b_analysis, b_analysis); + bool b_analysis = true; + if (parse->get_keyval(conf, "analysis", b_analysis, true, + colvarparse::parse_silent)) { + cvm::log("Warning: keyword \"analysis\" is deprecated: it is now set " + "to true; individual analyses are performed only if requested."); + } parse->get_keyval(conf, "debugGradientsStepSize", debug_gradients_step_size, debug_gradients_step_size, @@ -715,9 +718,7 @@ int colvarmodule::calc() error_code |= calc_biases(); error_code |= update_colvar_forces(); - if (cvm::b_analysis) { - error_code |= analyze(); - } + error_code |= analyze(); // write trajectory files, if needed if (cv_traj_freq && cv_traj_name.size()) { @@ -736,6 +737,8 @@ int colvarmodule::calc() write_output_files(); } + error_code |= end_of_step(); + return error_code; } @@ -1056,6 +1059,33 @@ int colvarmodule::analyze() } +int colvarmodule::end_of_step() +{ + if (cvm::debug()) { + cvm::log("colvarmodule::end_of_step(), step = "+cvm::to_str(it)+".\n"); + } + + for (std::vector::iterator cvi = variables_active()->begin(); + cvi != variables_active()->end(); + cvi++) { + cvm::increase_depth(); + (*cvi)->end_of_step(); + cvm::decrease_depth(); + } + + // perform bias-specific analysis + for (std::vector::iterator bi = biases.begin(); + bi != biases.end(); + bi++) { + cvm::increase_depth(); + (*bi)->end_of_step(); + cvm::decrease_depth(); + } + + return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); +} + + int colvarmodule::setup() { if (this->size() == 0) return cvm::get_error(); @@ -1895,7 +1925,6 @@ long colvarmodule::it = 0; long colvarmodule::it_restart = 0; size_t colvarmodule::restart_out_freq = 0; size_t colvarmodule::cv_traj_freq = 0; -bool colvarmodule::b_analysis = false; bool colvarmodule::use_scripted_forces = false; bool colvarmodule::scripting_after_biases = true; diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index 3d93798e0a..99b797627e 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -422,6 +422,9 @@ public: /// Perform analysis int analyze(); + /// Carry out operations needed before next step is run + int end_of_step(); + /// \brief Read a collective variable trajectory (post-processing /// only, not called at runtime) int read_traj(char const *traj_filename, @@ -546,9 +549,6 @@ public: /// Frequency for collective variables trajectory output static size_t cv_traj_freq; - /// \brief True if only analysis is performed and not a run - static bool b_analysis; - /// Frequency for saving output restarts static size_t restart_out_freq; /// Output restart file name diff --git a/lib/colvars/colvars_version.h b/lib/colvars/colvars_version.h index a37d264a20..bd84d077d7 100644 --- a/lib/colvars/colvars_version.h +++ b/lib/colvars/colvars_version.h @@ -1,5 +1,5 @@ #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2018-10-16" +#define COLVARS_VERSION "2018-11-16" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars From 5974741eea2b09ccfd469e95f0a2842a946dfda4 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 16 Nov 2018 09:26:12 -0700 Subject: [PATCH 134/273] Tweak to github-development-workflow.md --- doc/github-development-workflow.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/github-development-workflow.md b/doc/github-development-workflow.md index 31fd3f23f0..a11ee28aab 100644 --- a/doc/github-development-workflow.md +++ b/doc/github-development-workflow.md @@ -1,7 +1,7 @@ # Outline of the GitHub Development Workflow This purpose of this document is to provide a point of reference for the -core LAMMPS developers and other LAMMPS contibutors to understand the +core LAMMPS developers and other LAMMPS contributors to understand the choices the LAMMPS developers have agreed on. Git and GitHub provide the tools, but do not set policies, so it is up to the developers to come to an agreement as to how to define and interpret policies. This document @@ -25,7 +25,10 @@ In the interest of consistency, ONLY ONE of the core LAMMPS developers should doing the merging itself. This is currently [@akohlmey](https://github.com/akohlmey) (Axel Kohlmeyer). If this assignment needs to be changed, it shall be done right after a -stable release. +stable release. If the currently assigned developer cannot merge outstanding pull +requests in a timely manner, or in other extenuating circumstances, +other core LAMMPS developers with merge rights can merge pull requests, +when necessary. ## Pull Requests @@ -37,7 +40,7 @@ upon patch or stable releases with fast-forward merges based on the associated tags. Pull requests may also be submitted to (long-running) feature branches created by LAMMPS developers inside the LAMMPS project, if needed. Those are not subject to the merge and review restrictions -discussed in this document, though, but get manages as needed on a +discussed in this document, though, but get managed as needed on a case-by-case basis. ### Pull Request Assignments From c5c26abdd3ca56cdbbb71e029a3f70bec8075f43 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 16 Nov 2018 09:26:37 -0700 Subject: [PATCH 135/273] change warning to just a note --- doc/src/hyper.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index 0ea4ac781b..a9b0748a17 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -94,8 +94,8 @@ hyper/local"_fix_hyper_local.html command specified as {fix-ID}. At every dynamics timestep, the same fix selects one of more bonds to apply a bias potential to. -IMPORTANT NOTE: The style of fix associated with the specified -{fix-ID} determines whether you are running the global versus local +NOTE: The style of fix associated with the specified {fix-ID} +determines whether you are running the global versus local hyperdynamics algorithm. Dynamics (with the bias potential) is run continuously, stopping every From fd4262805d2e3b7fd7c303845d3e93ab57bab4df Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 15:48:35 -0500 Subject: [PATCH 136/273] for enabling MPIIO we also need to set -DLMP_MPIIO --- cmake/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 253cee6465..230168500d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -791,6 +791,13 @@ foreach(PKG ${DEFAULT_PACKAGES}) endif() endforeach() +# packages that need defines set +foreach(PKG MPIIO) + if(PKG_${PKG}) + add_definitions(-DLMP_${PKG}) + endif() +endforeach() + # dedicated check for entire contents of accelerator packages foreach(PKG ${ACCEL_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) From a66384cfea3c10f7e7b57a69b6531ee9c18edaa9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 16:27:05 -0500 Subject: [PATCH 137/273] update github tutorial/howto for recent changes in the development workflow --- doc/src/Howto_github.txt | 44 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/doc/src/Howto_github.txt b/doc/src/Howto_github.txt index 720b3317f0..3c2b9ac8c5 100644 --- a/doc/src/Howto_github.txt +++ b/doc/src/Howto_github.txt @@ -254,20 +254,53 @@ them, or if a developer has requested that something needs to be changed before the feature can be accepted into the official LAMMPS version. After each push, the automated checks are run again. +[Labels] + +LAMMPS developers may add labels to your pull request to assign it to +categories (mostly for bookkeeping purposes), but a few of them are +important: needs_work, work_in_progress, test-for-regression, and +full-regression-test. The first two indicate, that your pull request +is not considered to be complete. With "needs_work" the burden is on +exclusively on you; while "work_in_progress" can also mean, that a +LAMMPS developer may want to add changes. Please watch the comments +to the pull requests. The two "test" labels are used to trigger +extended tests before the code is merged. This is sometimes done by +LAMMPS developers, if they suspect that there may be some subtle +side effects from your changes. It is not done by default, because +those tests are very time consuming. + +[Reviews] + +As of Summer 2018, a pull request needs at least 1 approving review +from a LAMMPS developer with write access to the repository. +In case your changes touch code that certain developers are associated +with, they are auto-requested by the GitHub software. Those associations +are set in the file +".github/CODEOWNERS"_https://github.com/lammps/lammps/blob/master/.github/CODEOWNERS +Thus if you want to be automatically notified to review when anybody +changes files or packages, that you have contributed to LAMMPS, you can +add suitable patterns to that file, or a LAMMPS developer may add you. + +Otherwise, you can also manually request reviews from specific developers, +or LAMMPS developers - in their assessment of your pull request - may +determine who else should be reviewing your contribution and add that person. +Through reviews, LAMMPS developers also may request specific changes from you. +If those are not addressed, your pull requests cannot be merged. + [Assignees] -There is an assignee label for pull requests. If the request has not +There is an assignee property for pull requests. If the request has not been reviewed by any developer yet, it is not assigned to anyone. After revision, a developer can choose to assign it to either a) you, b) a -LAMMPS developer (including him/herself) or c) Steve Plimpton (sjplimp). +LAMMPS developer (including him/herself) or c) Axel Kohlmeyer (akohlmey). Case a) happens if changes are required on your part :ulb,l Case b) means that at the moment, it is being tested and reviewed by a LAMMPS developer with the expectation that some changes would be required. After the review, the developer can choose to implement changes directly or suggest them to you. :l -Case c) means that the pull request has been assigned to the lead -developer Steve Plimpton and means it is considered ready for merging. :ule,l +Case c) means that the pull request has been assigned to the developer +overseeing the merging of pull requests into the master branch. :ule,l In this case, Axel assigned the tutorial to Steve: @@ -381,3 +414,6 @@ Furthermore, the naming of the patches now follow the pattern "patch_" to simplify comparisons between releases. Finally, all patches and submissions are subject to automatic testing and code checks to make sure they at the very least compile. + +A discussion of the LAMMPS developer GitHub workflow can be found in the file +"doc/github-development-workflow.md"_https://github.com/lammps/lammps/blob/master/doc/github-development-workflow.md From 0264edfcec4340bad9ccd8a70e17448e58204c74 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 16:27:47 -0500 Subject: [PATCH 138/273] provide example for how to set Tdamp correctly to 100 timesteps for all choices of unit --- doc/src/fix_nh.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/src/fix_nh.txt b/doc/src/fix_nh.txt index 644ced4bdc..1ff80f5b7a 100644 --- a/doc/src/fix_nh.txt +++ b/doc/src/fix_nh.txt @@ -123,7 +123,12 @@ of {Tdamp}. If {Tdamp} is too small, the temperature can fluctuate wildly; if it is too large, the temperature will take a very long time to equilibrate. A good choice for many models is a {Tdamp} of around 100 timesteps. Note that this is NOT the same as 100 time units for -most "units"_units.html settings. +most "units"_units.html settings. A simple way to ensure this, is +via using an "immediate variable"_variable.html expression accessing +the thermo property 'dt', which is the length of the time step. Example: + +fix 1 all nvt temp 300.0 300.0 $(100.0*dt) :pre + :line From dc6054fc2d4444398c5cfe5af7a979c8d2a52f32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 22:04:35 -0500 Subject: [PATCH 139/273] rename "All commands" headers to "General commands" --- doc/src/Commands.txt | 8 ++++---- doc/src/Commands_all.txt | 6 +++--- doc/src/Commands_bond.txt | 2 +- doc/src/Commands_category.txt | 7 +++---- doc/src/Commands_compute.txt | 2 +- doc/src/Commands_fix.txt | 2 +- doc/src/Commands_kspace.txt | 2 +- doc/src/Commands_pair.txt | 2 +- 8 files changed, 15 insertions(+), 16 deletions(-) diff --git a/doc/src/Commands.txt b/doc/src/Commands.txt index a1a94c6d29..bb3fab3683 100644 --- a/doc/src/Commands.txt +++ b/doc/src/Commands.txt @@ -42,10 +42,10 @@ END_RST --> "Input script structure"_Commands_structure.html "Commands by category"_Commands_category.html :all(b) -"All commands"_Commands_all.html -"Fix commands"_Commands_fix.html -"Compute commands"_Commands_compute.html -"Pair commands"_Commands_pair.html +"General commands"_Commands_all.html +"Fix commands"_Commands_fix.html +"Compute commands"_Commands_compute.html +"Pair commands"_Commands_pair.html "Bond, angle, dihedral, improper commands"_Commands_bond.html "KSpace solvers"_Commands_kspace.html :all(b) diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index c0b8c4516d..f137ccffd9 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, @@ -17,9 +17,9 @@ Documentation"_ld - "LAMMPS Commands"_lc :c "Improper styles"_Commands_bond.html#improper, "KSpace styles"_Commands_kspace.html :tb(c=3,ea=c) -All commands :h3 +General commands :h3 -An alphabetic list of all LAMMPS commands. +An alphabetic list of all general LAMMPS commands. "angle_coeff"_angle_coeff.html, "angle_style"_angle_style.html, diff --git a/doc/src/Commands_bond.txt b/doc/src/Commands_bond.txt index d4d48924a7..fbf292aab2 100644 --- a/doc/src/Commands_bond.txt +++ b/doc/src/Commands_bond.txt @@ -5,7 +5,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :link(ld,Manual.html) :link(lc,Commands_all.html) -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, diff --git a/doc/src/Commands_category.txt b/doc/src/Commands_category.txt index 5d047c6727..134dae82bb 100644 --- a/doc/src/Commands_category.txt +++ b/doc/src/Commands_category.txt @@ -10,10 +10,9 @@ Documentation"_ld - "LAMMPS Commands"_lc :c Commands by category :h3 This page lists most of the LAMMPS commands, grouped by category. The -"Commands all"_Commands_all.html doc page lists all commands -alphabetically. It also includes long lists of style options for -entries that appear in the following categories as a single command -(fix, compute, pair, etc). +"General commands"_Commands_all.html doc page lists all general commands +alphabetically. Style options for entries like fix, compute, pair etc. +have their own pages where they are listed alphabetically. Initialization: diff --git a/doc/src/Commands_compute.txt b/doc/src/Commands_compute.txt index eb802030e2..f566702609 100644 --- a/doc/src/Commands_compute.txt +++ b/doc/src/Commands_compute.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 6d8f67b503..1e4eb27196 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, diff --git a/doc/src/Commands_kspace.txt b/doc/src/Commands_kspace.txt index d56b7fa767..02b41b9d67 100644 --- a/doc/src/Commands_kspace.txt +++ b/doc/src/Commands_kspace.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index 7af2cc9bae..bf2b2b4f39 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -"All commands"_Commands_all.html, +"General commands"_Commands_all.html, "Fix styles"_Commands_fix.html, "Compute styles"_Commands_compute.html, "Pair styles"_Commands_pair.html, From bbcb659158bd7e915b9f955d88b1601b70e4090e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 22:09:07 -0500 Subject: [PATCH 140/273] render fix commands in 6 columns instead of 8 so only narrow screens need to scroll horizontally --- doc/src/Commands_fix.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 1e4eb27196..fb4515b486 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -235,4 +235,4 @@ OPT. "wall/reflect (k)"_fix_wall_reflect.html, "wall/region"_fix_wall_region.html, "wall/region/ees"_fix_wall_ees.html, -"wall/srd"_fix_wall_srd.html :tb(c=8,ea=c) +"wall/srd"_fix_wall_srd.html :tb(c=6,ea=c) From da88305f4df4d6b4fec7c4570867cf80e61d3ccc Mon Sep 17 00:00:00 2001 From: jrgissing Date: Fri, 16 Nov 2018 20:41:49 -0700 Subject: [PATCH 141/273] bond/react: doc corrections, mostly formatting --- doc/src/fix_bond_react.txt | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 55a5785f7f..c0f60d84a0 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -25,7 +25,7 @@ common_keyword = {stabilization} :l {no} = no reaction site stabilization {yes} = perform reaction site stabilization {group-ID} = user-assigned prefix for the dynamic group of non-reacting atoms - {xmax} = xmax value that is used by an internally created "nve/limit"_fix_nve_limit.html integrator :pre + {xmax} = xmax value that is used by an internally-created "nve/limit"_fix_nve_limit.html integrator :pre react = mandatory argument indicating new reaction specification :l react-ID = user-assigned name for the reaction :l react-group-ID = only atoms in this group are considered for the reaction :l @@ -36,13 +36,13 @@ react = mandatory argument indicating new reaction specification :l template-ID(post-reacted) = ID of a molecule template containing post-reaction topology :l map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates :l zero or more individual keyword/value pairs may be appended to each react argument :l - individual_keyword = {prob} or {stabilize_steps} :l + individual_keyword = {prob} or {stabilize_steps} or {update_edges} :l {prob} values = fraction seed fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) {stabilize_steps} value = timesteps - timesteps = number of timesteps to apply internally created nve/limit fix :pre - {update_edges} value = {none} or {charges} :l + timesteps = number of timesteps to apply the internally-created "nve/limit"_fix_nve_limit.html fix to reacting atoms + {update_edges} value = {none} or {charges} or {custom} none = do not update topology near the edges of reaction templates charges = update atomic charges of all atoms in reaction templates custom = force the update of user-specified atomic charges :pre @@ -95,7 +95,7 @@ necessary because the 'common keywords' are applied to all reactions. The {stabilization} keyword enables reaction site stabilization. Reaction site stabilization is performed by including reacting atoms -in an internally created fix "nve/limit"_fix_nve_limit.html time +in an internally-created fix "nve/limit"_fix_nve_limit.html time integrator for a set number of timesteps given by the {stabilize_steps} keyword. While reacting atoms are being time integrated by the internal nve/limit, they are prevented from being @@ -122,12 +122,13 @@ due to the internal dynamic grouping performed by fix bond/react. NOTE: If the group-ID is an existing static group, react-group-IDs should also be specified as this static group, or a subset. -NOTE: If the group-ID is previously unused, the internally created +NOTE: If the group-ID is previously unused, the internally-created group applies to all atoms in the system, i.e. you should generally not have a separate thermostat which acts on the 'all' group, or any other group. -The following comments pertain to each {react} argument: +The following comments pertain to each {react} argument (in other +words, can be customized for each specified reaction): A check for possible new reaction sites is performed every {Nevery} timesteps. @@ -202,9 +203,9 @@ A discussion of correctly handling this is also provided on the The map file is a text document with the following format: A map file has a header and a body. The header of map file the -contains one mandatory keyword and two optional keywords. The mandatory -keyword is 'equivalences' and the optional keywords are 'edgeIDs' and -'customIDs': +contains one mandatory keyword and two optional keywords. The +mandatory keyword is 'equivalences' and the optional keywords are +'edgeIDs' and 'customIDs': N {equivalences} = # of atoms N in the reaction molecule templates N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template @@ -286,6 +287,14 @@ The {stabilize_steps} keyword allows for the specification of how many timesteps a reaction site is stabilized before being returned to the overall system thermostat. +In order to produce the most physical behavior, this 'reaction site +equilibration time' should be tuned to be as small as possible while +retaining stability for a given system or reaction step. After a +limited number of case studies, this number has been set to a default +of 60 timesteps. Ideally, it should be individually tuned for each fix +reaction step. Note that in some situations, decreasing rather than +increasing this parameter will result in an increase in stability. + The {update_edges} keyword can increase the number of atoms whose atomic charges are updated, when the pre-reaction template contains edge atoms. When the value is set to 'charges,' all atoms' atomic @@ -298,14 +307,6 @@ atom ID with a value of 'charges' will force the update of the atom's charge, even if it is near a template edge. Atoms not near a template edge are unaffected by this setting. -In order to produce the most physical behavior, this 'reaction site -equilibration time' should be tuned to be as small as possible while -retaining stability for a given system or reaction step. After a -limited number of case studies, this number has been set to a default -of 60 timesteps. Ideally, it should be individually tuned for each fix -reaction step. Note that in some situations, decreasing rather than -increasing this parameter will result in an increase in stability. - A few other considerations: It may be beneficial to ensure reacting atoms are at a certain From d7abb8cf4dda5b5df6f510a32fed7f2a437c509e Mon Sep 17 00:00:00 2001 From: jrgissing Date: Fri, 16 Nov 2018 20:42:52 -0700 Subject: [PATCH 142/273] Revert "bond/react: doc corrections, mostly formatting" This reverts commit da88305f4df4d6b4fec7c4570867cf80e61d3ccc. --- doc/src/fix_bond_react.txt | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index c0f60d84a0..55a5785f7f 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -25,7 +25,7 @@ common_keyword = {stabilization} :l {no} = no reaction site stabilization {yes} = perform reaction site stabilization {group-ID} = user-assigned prefix for the dynamic group of non-reacting atoms - {xmax} = xmax value that is used by an internally-created "nve/limit"_fix_nve_limit.html integrator :pre + {xmax} = xmax value that is used by an internally created "nve/limit"_fix_nve_limit.html integrator :pre react = mandatory argument indicating new reaction specification :l react-ID = user-assigned name for the reaction :l react-group-ID = only atoms in this group are considered for the reaction :l @@ -36,13 +36,13 @@ react = mandatory argument indicating new reaction specification :l template-ID(post-reacted) = ID of a molecule template containing post-reaction topology :l map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates :l zero or more individual keyword/value pairs may be appended to each react argument :l - individual_keyword = {prob} or {stabilize_steps} or {update_edges} :l + individual_keyword = {prob} or {stabilize_steps} :l {prob} values = fraction seed fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) {stabilize_steps} value = timesteps - timesteps = number of timesteps to apply the internally-created "nve/limit"_fix_nve_limit.html fix to reacting atoms - {update_edges} value = {none} or {charges} or {custom} + timesteps = number of timesteps to apply internally created nve/limit fix :pre + {update_edges} value = {none} or {charges} :l none = do not update topology near the edges of reaction templates charges = update atomic charges of all atoms in reaction templates custom = force the update of user-specified atomic charges :pre @@ -95,7 +95,7 @@ necessary because the 'common keywords' are applied to all reactions. The {stabilization} keyword enables reaction site stabilization. Reaction site stabilization is performed by including reacting atoms -in an internally-created fix "nve/limit"_fix_nve_limit.html time +in an internally created fix "nve/limit"_fix_nve_limit.html time integrator for a set number of timesteps given by the {stabilize_steps} keyword. While reacting atoms are being time integrated by the internal nve/limit, they are prevented from being @@ -122,13 +122,12 @@ due to the internal dynamic grouping performed by fix bond/react. NOTE: If the group-ID is an existing static group, react-group-IDs should also be specified as this static group, or a subset. -NOTE: If the group-ID is previously unused, the internally-created +NOTE: If the group-ID is previously unused, the internally created group applies to all atoms in the system, i.e. you should generally not have a separate thermostat which acts on the 'all' group, or any other group. -The following comments pertain to each {react} argument (in other -words, can be customized for each specified reaction): +The following comments pertain to each {react} argument: A check for possible new reaction sites is performed every {Nevery} timesteps. @@ -203,9 +202,9 @@ A discussion of correctly handling this is also provided on the The map file is a text document with the following format: A map file has a header and a body. The header of map file the -contains one mandatory keyword and two optional keywords. The -mandatory keyword is 'equivalences' and the optional keywords are -'edgeIDs' and 'customIDs': +contains one mandatory keyword and two optional keywords. The mandatory +keyword is 'equivalences' and the optional keywords are 'edgeIDs' and +'customIDs': N {equivalences} = # of atoms N in the reaction molecule templates N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template @@ -287,14 +286,6 @@ The {stabilize_steps} keyword allows for the specification of how many timesteps a reaction site is stabilized before being returned to the overall system thermostat. -In order to produce the most physical behavior, this 'reaction site -equilibration time' should be tuned to be as small as possible while -retaining stability for a given system or reaction step. After a -limited number of case studies, this number has been set to a default -of 60 timesteps. Ideally, it should be individually tuned for each fix -reaction step. Note that in some situations, decreasing rather than -increasing this parameter will result in an increase in stability. - The {update_edges} keyword can increase the number of atoms whose atomic charges are updated, when the pre-reaction template contains edge atoms. When the value is set to 'charges,' all atoms' atomic @@ -307,6 +298,14 @@ atom ID with a value of 'charges' will force the update of the atom's charge, even if it is near a template edge. Atoms not near a template edge are unaffected by this setting. +In order to produce the most physical behavior, this 'reaction site +equilibration time' should be tuned to be as small as possible while +retaining stability for a given system or reaction step. After a +limited number of case studies, this number has been set to a default +of 60 timesteps. Ideally, it should be individually tuned for each fix +reaction step. Note that in some situations, decreasing rather than +increasing this parameter will result in an increase in stability. + A few other considerations: It may be beneficial to ensure reacting atoms are at a certain From 1d4e1f142572f70dacd6c66a1c1d0168ae720903 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Fri, 16 Nov 2018 20:47:51 -0700 Subject: [PATCH 143/273] bond/react:doc corrections --- doc/src/fix_bond_react.txt | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 55a5785f7f..ab7b247aaa 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -25,7 +25,7 @@ common_keyword = {stabilization} :l {no} = no reaction site stabilization {yes} = perform reaction site stabilization {group-ID} = user-assigned prefix for the dynamic group of non-reacting atoms - {xmax} = xmax value that is used by an internally created "nve/limit"_fix_nve_limit.html integrator :pre + {xmax} = xmax value that is used by an internally-created "nve/limit"_fix_nve_limit.html integrator :pre react = mandatory argument indicating new reaction specification :l react-ID = user-assigned name for the reaction :l react-group-ID = only atoms in this group are considered for the reaction :l @@ -36,13 +36,13 @@ react = mandatory argument indicating new reaction specification :l template-ID(post-reacted) = ID of a molecule template containing post-reaction topology :l map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates :l zero or more individual keyword/value pairs may be appended to each react argument :l - individual_keyword = {prob} or {stabilize_steps} :l + individual_keyword = {prob} or {stabilize_steps} or {update_edges} :l {prob} values = fraction seed fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) {stabilize_steps} value = timesteps - timesteps = number of timesteps to apply internally created nve/limit fix :pre - {update_edges} value = {none} or {charges} :l + timesteps = number of timesteps to apply the internally-created "nve/limit"_fix_nve_limit.html fix to reacting atoms + {update_edges} value = {none} or {charges} or {custom} none = do not update topology near the edges of reaction templates charges = update atomic charges of all atoms in reaction templates custom = force the update of user-specified atomic charges :pre @@ -95,7 +95,7 @@ necessary because the 'common keywords' are applied to all reactions. The {stabilization} keyword enables reaction site stabilization. Reaction site stabilization is performed by including reacting atoms -in an internally created fix "nve/limit"_fix_nve_limit.html time +in an internally-created fix "nve/limit"_fix_nve_limit.html time integrator for a set number of timesteps given by the {stabilize_steps} keyword. While reacting atoms are being time integrated by the internal nve/limit, they are prevented from being @@ -122,12 +122,13 @@ due to the internal dynamic grouping performed by fix bond/react. NOTE: If the group-ID is an existing static group, react-group-IDs should also be specified as this static group, or a subset. -NOTE: If the group-ID is previously unused, the internally created +NOTE: If the group-ID is previously unused, the internally-created group applies to all atoms in the system, i.e. you should generally not have a separate thermostat which acts on the 'all' group, or any other group. -The following comments pertain to each {react} argument: +The following comments pertain to each {react} argument (in other +words, can be customized for each reaction, or reaction step): A check for possible new reaction sites is performed every {Nevery} timesteps. @@ -202,9 +203,9 @@ A discussion of correctly handling this is also provided on the The map file is a text document with the following format: A map file has a header and a body. The header of map file the -contains one mandatory keyword and two optional keywords. The mandatory -keyword is 'equivalences' and the optional keywords are 'edgeIDs' and -'customIDs': +contains one mandatory keyword and two optional keywords. The +mandatory keyword is 'equivalences' and the optional keywords are +'edgeIDs' and 'customIDs': N {equivalences} = # of atoms N in the reaction molecule templates N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template @@ -286,6 +287,14 @@ The {stabilize_steps} keyword allows for the specification of how many timesteps a reaction site is stabilized before being returned to the overall system thermostat. +In order to produce the most physical behavior, this 'reaction site +equilibration time' should be tuned to be as small as possible while +retaining stability for a given system or reaction step. After a +limited number of case studies, this number has been set to a default +of 60 timesteps. Ideally, it should be individually tuned for each fix +reaction step. Note that in some situations, decreasing rather than +increasing this parameter will result in an increase in stability. + The {update_edges} keyword can increase the number of atoms whose atomic charges are updated, when the pre-reaction template contains edge atoms. When the value is set to 'charges,' all atoms' atomic @@ -298,14 +307,6 @@ atom ID with a value of 'charges' will force the update of the atom's charge, even if it is near a template edge. Atoms not near a template edge are unaffected by this setting. -In order to produce the most physical behavior, this 'reaction site -equilibration time' should be tuned to be as small as possible while -retaining stability for a given system or reaction step. After a -limited number of case studies, this number has been set to a default -of 60 timesteps. Ideally, it should be individually tuned for each fix -reaction step. Note that in some situations, decreasing rather than -increasing this parameter will result in an increase in stability. - A few other considerations: It may be beneficial to ensure reacting atoms are at a certain From a7bfb30043ba5c2fd8142175f57acb0784e8ad98 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Nov 2018 23:03:47 -0500 Subject: [PATCH 144/273] update atc/cauchy_born examples with missing files --- examples/USER/atc/cauchy_born/Au_u3.eam | 1 + .../atc/cauchy_born/ftcb_constV_setup.init | 1751 +++++++++++++++++ .../USER/atc/cauchy_born/read_xref_0.data | 535 +++++ .../USER/atc/cauchy_born/read_xref_1.init | 531 +++++ lib/atc/DenseVector.h | 4 +- 5 files changed, 2820 insertions(+), 2 deletions(-) create mode 120000 examples/USER/atc/cauchy_born/Au_u3.eam create mode 100644 examples/USER/atc/cauchy_born/ftcb_constV_setup.init create mode 100644 examples/USER/atc/cauchy_born/read_xref_0.data create mode 100644 examples/USER/atc/cauchy_born/read_xref_1.init diff --git a/examples/USER/atc/cauchy_born/Au_u3.eam b/examples/USER/atc/cauchy_born/Au_u3.eam new file mode 120000 index 0000000000..2ace8a4162 --- /dev/null +++ b/examples/USER/atc/cauchy_born/Au_u3.eam @@ -0,0 +1 @@ +../../../../potentials/Au_u3.eam \ No newline at end of file diff --git a/examples/USER/atc/cauchy_born/ftcb_constV_setup.init b/examples/USER/atc/cauchy_born/ftcb_constV_setup.init new file mode 100644 index 0000000000..c8ab629267 --- /dev/null +++ b/examples/USER/atc/cauchy_born/ftcb_constV_setup.init @@ -0,0 +1,1751 @@ +LAMMPS data file from restart file: timestep = 0, procs = 1 + +864 atoms + +1 atom types + +0.0000000000000000e+00 3.1537364922000002e+01 xlo xhi +0.0000000000000000e+00 3.1537364922000002e+01 ylo yhi +0.0000000000000000e+00 3.1537364922000002e+01 zlo zhi + +Masses + +1 39.95 + +Pair Coeffs + +1 0.238 3.405 + +Atoms + +1 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +2 1 2.6281137435000002e+00 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +3 1 2.6281137435000002e+00 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +4 1 0.0000000000000000e+00 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +5 1 5.2562274870000003e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +6 1 7.8843412305000005e+00 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +7 1 7.8843412305000005e+00 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +8 1 5.2562274870000003e+00 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +9 1 1.0512454974000001e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +10 1 1.3140568717500001e+01 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +11 1 1.3140568717500001e+01 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +12 1 1.0512454974000001e+01 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +13 1 1.5768682461000001e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +14 1 1.8396796204499999e+01 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +15 1 1.8396796204499999e+01 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +16 1 1.5768682461000001e+01 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +17 1 2.1024909948000001e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +18 1 2.3653023691500003e+01 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +19 1 2.3653023691500003e+01 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +20 1 2.1024909948000001e+01 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +21 1 2.6281137435000002e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +22 1 2.8909251178500000e+01 2.6281137435000002e+00 0.0000000000000000e+00 0 0 0 +23 1 2.8909251178500000e+01 0.0000000000000000e+00 2.6281137435000002e+00 0 0 0 +24 1 2.6281137435000002e+01 2.6281137435000002e+00 2.6281137435000002e+00 0 0 0 +25 1 0.0000000000000000e+00 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +26 1 2.6281137435000002e+00 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +27 1 2.6281137435000002e+00 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +28 1 0.0000000000000000e+00 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +29 1 5.2562274870000003e+00 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +30 1 7.8843412305000005e+00 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +31 1 7.8843412305000005e+00 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +32 1 5.2562274870000003e+00 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +33 1 1.0512454974000001e+01 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +34 1 1.3140568717500001e+01 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +35 1 1.3140568717500001e+01 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +36 1 1.0512454974000001e+01 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +37 1 1.5768682461000001e+01 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +38 1 1.8396796204499999e+01 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +39 1 1.8396796204499999e+01 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +40 1 1.5768682461000001e+01 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +41 1 2.1024909948000001e+01 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +42 1 2.3653023691500003e+01 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +43 1 2.3653023691500003e+01 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +44 1 2.1024909948000001e+01 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +45 1 2.6281137435000002e+01 5.2562274870000003e+00 0.0000000000000000e+00 0 0 0 +46 1 2.8909251178500000e+01 7.8843412305000005e+00 0.0000000000000000e+00 0 0 0 +47 1 2.8909251178500000e+01 5.2562274870000003e+00 2.6281137435000002e+00 0 0 0 +48 1 2.6281137435000002e+01 7.8843412305000005e+00 2.6281137435000002e+00 0 0 0 +49 1 0.0000000000000000e+00 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +50 1 2.6281137435000002e+00 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +51 1 2.6281137435000002e+00 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +52 1 0.0000000000000000e+00 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +53 1 5.2562274870000003e+00 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +54 1 7.8843412305000005e+00 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +55 1 7.8843412305000005e+00 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +56 1 5.2562274870000003e+00 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +57 1 1.0512454974000001e+01 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +58 1 1.3140568717500001e+01 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +59 1 1.3140568717500001e+01 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +60 1 1.0512454974000001e+01 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +61 1 1.5768682461000001e+01 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +62 1 1.8396796204499999e+01 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +63 1 1.8396796204499999e+01 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +64 1 1.5768682461000001e+01 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +65 1 2.1024909948000001e+01 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +66 1 2.3653023691500003e+01 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +67 1 2.3653023691500003e+01 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +68 1 2.1024909948000001e+01 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +69 1 2.6281137435000002e+01 1.0512454974000001e+01 0.0000000000000000e+00 0 0 0 +70 1 2.8909251178500000e+01 1.3140568717500001e+01 0.0000000000000000e+00 0 0 0 +71 1 2.8909251178500000e+01 1.0512454974000001e+01 2.6281137435000002e+00 0 0 0 +72 1 2.6281137435000002e+01 1.3140568717500001e+01 2.6281137435000002e+00 0 0 0 +73 1 0.0000000000000000e+00 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +74 1 2.6281137435000002e+00 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +75 1 2.6281137435000002e+00 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +76 1 0.0000000000000000e+00 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +77 1 5.2562274870000003e+00 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +78 1 7.8843412305000005e+00 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +79 1 7.8843412305000005e+00 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +80 1 5.2562274870000003e+00 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +81 1 1.0512454974000001e+01 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +82 1 1.3140568717500001e+01 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +83 1 1.3140568717500001e+01 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +84 1 1.0512454974000001e+01 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +85 1 1.5768682461000001e+01 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +86 1 1.8396796204499999e+01 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +87 1 1.8396796204499999e+01 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +88 1 1.5768682461000001e+01 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +89 1 2.1024909948000001e+01 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +90 1 2.3653023691500003e+01 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +91 1 2.3653023691500003e+01 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +92 1 2.1024909948000001e+01 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +93 1 2.6281137435000002e+01 1.5768682461000001e+01 0.0000000000000000e+00 0 0 0 +94 1 2.8909251178500000e+01 1.8396796204499999e+01 0.0000000000000000e+00 0 0 0 +95 1 2.8909251178500000e+01 1.5768682461000001e+01 2.6281137435000002e+00 0 0 0 +96 1 2.6281137435000002e+01 1.8396796204499999e+01 2.6281137435000002e+00 0 0 0 +97 1 0.0000000000000000e+00 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +98 1 2.6281137435000002e+00 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +99 1 2.6281137435000002e+00 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +100 1 0.0000000000000000e+00 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +101 1 5.2562274870000003e+00 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +102 1 7.8843412305000005e+00 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +103 1 7.8843412305000005e+00 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +104 1 5.2562274870000003e+00 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +105 1 1.0512454974000001e+01 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +106 1 1.3140568717500001e+01 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +107 1 1.3140568717500001e+01 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +108 1 1.0512454974000001e+01 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +109 1 1.5768682461000001e+01 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +110 1 1.8396796204499999e+01 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +111 1 1.8396796204499999e+01 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +112 1 1.5768682461000001e+01 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +113 1 2.1024909948000001e+01 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +114 1 2.3653023691500003e+01 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +115 1 2.3653023691500003e+01 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +116 1 2.1024909948000001e+01 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +117 1 2.6281137435000002e+01 2.1024909948000001e+01 0.0000000000000000e+00 0 0 0 +118 1 2.8909251178500000e+01 2.3653023691500003e+01 0.0000000000000000e+00 0 0 0 +119 1 2.8909251178500000e+01 2.1024909948000001e+01 2.6281137435000002e+00 0 0 0 +120 1 2.6281137435000002e+01 2.3653023691500003e+01 2.6281137435000002e+00 0 0 0 +121 1 0.0000000000000000e+00 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +122 1 2.6281137435000002e+00 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +123 1 2.6281137435000002e+00 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +124 1 0.0000000000000000e+00 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +125 1 5.2562274870000003e+00 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +126 1 7.8843412305000005e+00 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +127 1 7.8843412305000005e+00 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +128 1 5.2562274870000003e+00 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +129 1 1.0512454974000001e+01 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +130 1 1.3140568717500001e+01 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +131 1 1.3140568717500001e+01 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +132 1 1.0512454974000001e+01 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +133 1 1.5768682461000001e+01 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +134 1 1.8396796204499999e+01 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +135 1 1.8396796204499999e+01 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +136 1 1.5768682461000001e+01 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +137 1 2.1024909948000001e+01 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +138 1 2.3653023691500003e+01 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +139 1 2.3653023691500003e+01 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +140 1 2.1024909948000001e+01 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +141 1 2.6281137435000002e+01 2.6281137435000002e+01 0.0000000000000000e+00 0 0 0 +142 1 2.8909251178500000e+01 2.8909251178500000e+01 0.0000000000000000e+00 0 0 0 +143 1 2.8909251178500000e+01 2.6281137435000002e+01 2.6281137435000002e+00 0 0 0 +144 1 2.6281137435000002e+01 2.8909251178500000e+01 2.6281137435000002e+00 0 0 0 +145 1 0.0000000000000000e+00 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +146 1 2.6281137435000002e+00 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +147 1 2.6281137435000002e+00 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +148 1 0.0000000000000000e+00 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +149 1 5.2562274870000003e+00 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +150 1 7.8843412305000005e+00 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +151 1 7.8843412305000005e+00 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +152 1 5.2562274870000003e+00 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +153 1 1.0512454974000001e+01 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +154 1 1.3140568717500001e+01 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +155 1 1.3140568717500001e+01 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +156 1 1.0512454974000001e+01 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +157 1 1.5768682461000001e+01 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +158 1 1.8396796204499999e+01 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +159 1 1.8396796204499999e+01 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +160 1 1.5768682461000001e+01 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +161 1 2.1024909948000001e+01 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +162 1 2.3653023691500003e+01 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +163 1 2.3653023691500003e+01 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +164 1 2.1024909948000001e+01 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +165 1 2.6281137435000002e+01 0.0000000000000000e+00 5.2562274870000003e+00 0 0 0 +166 1 2.8909251178500000e+01 2.6281137435000002e+00 5.2562274870000003e+00 0 0 0 +167 1 2.8909251178500000e+01 0.0000000000000000e+00 7.8843412305000005e+00 0 0 0 +168 1 2.6281137435000002e+01 2.6281137435000002e+00 7.8843412305000005e+00 0 0 0 +169 1 0.0000000000000000e+00 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +170 1 2.6281137435000002e+00 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +171 1 2.6281137435000002e+00 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +172 1 0.0000000000000000e+00 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +173 1 5.2562274870000003e+00 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +174 1 7.8843412305000005e+00 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +175 1 7.8843412305000005e+00 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +176 1 5.2562274870000003e+00 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +177 1 1.0512454974000001e+01 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +178 1 1.3140568717500001e+01 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +179 1 1.3140568717500001e+01 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +180 1 1.0512454974000001e+01 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +181 1 1.5768682461000001e+01 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +182 1 1.8396796204499999e+01 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +183 1 1.8396796204499999e+01 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +184 1 1.5768682461000001e+01 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +185 1 2.1024909948000001e+01 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +186 1 2.3653023691500003e+01 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +187 1 2.3653023691500003e+01 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +188 1 2.1024909948000001e+01 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +189 1 2.6281137435000002e+01 5.2562274870000003e+00 5.2562274870000003e+00 0 0 0 +190 1 2.8909251178500000e+01 7.8843412305000005e+00 5.2562274870000003e+00 0 0 0 +191 1 2.8909251178500000e+01 5.2562274870000003e+00 7.8843412305000005e+00 0 0 0 +192 1 2.6281137435000002e+01 7.8843412305000005e+00 7.8843412305000005e+00 0 0 0 +193 1 0.0000000000000000e+00 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +194 1 2.6281137435000002e+00 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +195 1 2.6281137435000002e+00 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +196 1 0.0000000000000000e+00 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +197 1 5.2562274870000003e+00 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +198 1 7.8843412305000005e+00 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +199 1 7.8843412305000005e+00 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +200 1 5.2562274870000003e+00 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +201 1 1.0512454974000001e+01 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +202 1 1.3140568717500001e+01 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +203 1 1.3140568717500001e+01 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +204 1 1.0512454974000001e+01 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +205 1 1.5768682461000001e+01 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +206 1 1.8396796204499999e+01 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +207 1 1.8396796204499999e+01 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +208 1 1.5768682461000001e+01 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +209 1 2.1024909948000001e+01 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +210 1 2.3653023691500003e+01 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +211 1 2.3653023691500003e+01 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +212 1 2.1024909948000001e+01 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +213 1 2.6281137435000002e+01 1.0512454974000001e+01 5.2562274870000003e+00 0 0 0 +214 1 2.8909251178500000e+01 1.3140568717500001e+01 5.2562274870000003e+00 0 0 0 +215 1 2.8909251178500000e+01 1.0512454974000001e+01 7.8843412305000005e+00 0 0 0 +216 1 2.6281137435000002e+01 1.3140568717500001e+01 7.8843412305000005e+00 0 0 0 +217 1 0.0000000000000000e+00 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +218 1 2.6281137435000002e+00 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +219 1 2.6281137435000002e+00 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +220 1 0.0000000000000000e+00 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +221 1 5.2562274870000003e+00 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +222 1 7.8843412305000005e+00 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +223 1 7.8843412305000005e+00 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +224 1 5.2562274870000003e+00 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +225 1 1.0512454974000001e+01 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +226 1 1.3140568717500001e+01 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +227 1 1.3140568717500001e+01 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +228 1 1.0512454974000001e+01 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +229 1 1.5768682461000001e+01 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +230 1 1.8396796204499999e+01 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +231 1 1.8396796204499999e+01 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +232 1 1.5768682461000001e+01 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +233 1 2.1024909948000001e+01 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +234 1 2.3653023691500003e+01 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +235 1 2.3653023691500003e+01 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +236 1 2.1024909948000001e+01 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +237 1 2.6281137435000002e+01 1.5768682461000001e+01 5.2562274870000003e+00 0 0 0 +238 1 2.8909251178500000e+01 1.8396796204499999e+01 5.2562274870000003e+00 0 0 0 +239 1 2.8909251178500000e+01 1.5768682461000001e+01 7.8843412305000005e+00 0 0 0 +240 1 2.6281137435000002e+01 1.8396796204499999e+01 7.8843412305000005e+00 0 0 0 +241 1 0.0000000000000000e+00 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +242 1 2.6281137435000002e+00 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +243 1 2.6281137435000002e+00 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +244 1 0.0000000000000000e+00 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +245 1 5.2562274870000003e+00 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +246 1 7.8843412305000005e+00 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +247 1 7.8843412305000005e+00 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +248 1 5.2562274870000003e+00 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +249 1 1.0512454974000001e+01 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +250 1 1.3140568717500001e+01 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +251 1 1.3140568717500001e+01 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +252 1 1.0512454974000001e+01 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +253 1 1.5768682461000001e+01 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +254 1 1.8396796204499999e+01 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +255 1 1.8396796204499999e+01 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +256 1 1.5768682461000001e+01 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +257 1 2.1024909948000001e+01 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +258 1 2.3653023691500003e+01 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +259 1 2.3653023691500003e+01 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +260 1 2.1024909948000001e+01 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +261 1 2.6281137435000002e+01 2.1024909948000001e+01 5.2562274870000003e+00 0 0 0 +262 1 2.8909251178500000e+01 2.3653023691500003e+01 5.2562274870000003e+00 0 0 0 +263 1 2.8909251178500000e+01 2.1024909948000001e+01 7.8843412305000005e+00 0 0 0 +264 1 2.6281137435000002e+01 2.3653023691500003e+01 7.8843412305000005e+00 0 0 0 +265 1 0.0000000000000000e+00 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +266 1 2.6281137435000002e+00 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +267 1 2.6281137435000002e+00 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +268 1 0.0000000000000000e+00 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +269 1 5.2562274870000003e+00 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +270 1 7.8843412305000005e+00 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +271 1 7.8843412305000005e+00 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +272 1 5.2562274870000003e+00 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +273 1 1.0512454974000001e+01 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +274 1 1.3140568717500001e+01 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +275 1 1.3140568717500001e+01 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +276 1 1.0512454974000001e+01 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +277 1 1.5768682461000001e+01 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +278 1 1.8396796204499999e+01 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +279 1 1.8396796204499999e+01 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +280 1 1.5768682461000001e+01 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +281 1 2.1024909948000001e+01 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +282 1 2.3653023691500003e+01 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +283 1 2.3653023691500003e+01 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +284 1 2.1024909948000001e+01 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +285 1 2.6281137435000002e+01 2.6281137435000002e+01 5.2562274870000003e+00 0 0 0 +286 1 2.8909251178500000e+01 2.8909251178500000e+01 5.2562274870000003e+00 0 0 0 +287 1 2.8909251178500000e+01 2.6281137435000002e+01 7.8843412305000005e+00 0 0 0 +288 1 2.6281137435000002e+01 2.8909251178500000e+01 7.8843412305000005e+00 0 0 0 +289 1 0.0000000000000000e+00 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +290 1 2.6281137435000002e+00 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +291 1 2.6281137435000002e+00 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +292 1 0.0000000000000000e+00 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +293 1 5.2562274870000003e+00 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +294 1 7.8843412305000005e+00 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +295 1 7.8843412305000005e+00 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +296 1 5.2562274870000003e+00 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +297 1 1.0512454974000001e+01 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +298 1 1.3140568717500001e+01 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +299 1 1.3140568717500001e+01 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +300 1 1.0512454974000001e+01 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +301 1 1.5768682461000001e+01 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +302 1 1.8396796204499999e+01 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +303 1 1.8396796204499999e+01 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +304 1 1.5768682461000001e+01 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +305 1 2.1024909948000001e+01 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +306 1 2.3653023691500003e+01 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +307 1 2.3653023691500003e+01 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +308 1 2.1024909948000001e+01 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +309 1 2.6281137435000002e+01 0.0000000000000000e+00 1.0512454974000001e+01 0 0 0 +310 1 2.8909251178500000e+01 2.6281137435000002e+00 1.0512454974000001e+01 0 0 0 +311 1 2.8909251178500000e+01 0.0000000000000000e+00 1.3140568717500001e+01 0 0 0 +312 1 2.6281137435000002e+01 2.6281137435000002e+00 1.3140568717500001e+01 0 0 0 +313 1 0.0000000000000000e+00 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +314 1 2.6281137435000002e+00 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +315 1 2.6281137435000002e+00 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +316 1 0.0000000000000000e+00 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +317 1 5.2562274870000003e+00 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +318 1 7.8843412305000005e+00 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +319 1 7.8843412305000005e+00 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +320 1 5.2562274870000003e+00 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +321 1 1.0512454974000001e+01 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +322 1 1.3140568717500001e+01 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +323 1 1.3140568717500001e+01 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +324 1 1.0512454974000001e+01 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +325 1 1.5768682461000001e+01 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +326 1 1.8396796204499999e+01 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +327 1 1.8396796204499999e+01 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +328 1 1.5768682461000001e+01 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +329 1 2.1024909948000001e+01 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +330 1 2.3653023691500003e+01 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +331 1 2.3653023691500003e+01 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +332 1 2.1024909948000001e+01 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +333 1 2.6281137435000002e+01 5.2562274870000003e+00 1.0512454974000001e+01 0 0 0 +334 1 2.8909251178500000e+01 7.8843412305000005e+00 1.0512454974000001e+01 0 0 0 +335 1 2.8909251178500000e+01 5.2562274870000003e+00 1.3140568717500001e+01 0 0 0 +336 1 2.6281137435000002e+01 7.8843412305000005e+00 1.3140568717500001e+01 0 0 0 +337 1 0.0000000000000000e+00 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +338 1 2.6281137435000002e+00 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +339 1 2.6281137435000002e+00 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +340 1 0.0000000000000000e+00 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +341 1 5.2562274870000003e+00 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +342 1 7.8843412305000005e+00 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +343 1 7.8843412305000005e+00 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +344 1 5.2562274870000003e+00 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +345 1 1.0512454974000001e+01 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +346 1 1.3140568717500001e+01 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +347 1 1.3140568717500001e+01 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +348 1 1.0512454974000001e+01 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +349 1 1.5768682461000001e+01 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +350 1 1.8396796204499999e+01 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +351 1 1.8396796204499999e+01 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +352 1 1.5768682461000001e+01 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +353 1 2.1024909948000001e+01 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +354 1 2.3653023691500003e+01 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +355 1 2.3653023691500003e+01 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +356 1 2.1024909948000001e+01 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +357 1 2.6281137435000002e+01 1.0512454974000001e+01 1.0512454974000001e+01 0 0 0 +358 1 2.8909251178500000e+01 1.3140568717500001e+01 1.0512454974000001e+01 0 0 0 +359 1 2.8909251178500000e+01 1.0512454974000001e+01 1.3140568717500001e+01 0 0 0 +360 1 2.6281137435000002e+01 1.3140568717500001e+01 1.3140568717500001e+01 0 0 0 +361 1 0.0000000000000000e+00 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +362 1 2.6281137435000002e+00 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +363 1 2.6281137435000002e+00 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +364 1 0.0000000000000000e+00 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +365 1 5.2562274870000003e+00 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +366 1 7.8843412305000005e+00 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +367 1 7.8843412305000005e+00 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +368 1 5.2562274870000003e+00 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +369 1 1.0512454974000001e+01 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +370 1 1.3140568717500001e+01 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +371 1 1.3140568717500001e+01 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +372 1 1.0512454974000001e+01 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +373 1 1.5768682461000001e+01 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +374 1 1.8396796204499999e+01 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +375 1 1.8396796204499999e+01 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +376 1 1.5768682461000001e+01 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +377 1 2.1024909948000001e+01 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +378 1 2.3653023691500003e+01 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +379 1 2.3653023691500003e+01 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +380 1 2.1024909948000001e+01 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +381 1 2.6281137435000002e+01 1.5768682461000001e+01 1.0512454974000001e+01 0 0 0 +382 1 2.8909251178500000e+01 1.8396796204499999e+01 1.0512454974000001e+01 0 0 0 +383 1 2.8909251178500000e+01 1.5768682461000001e+01 1.3140568717500001e+01 0 0 0 +384 1 2.6281137435000002e+01 1.8396796204499999e+01 1.3140568717500001e+01 0 0 0 +385 1 0.0000000000000000e+00 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +386 1 2.6281137435000002e+00 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +387 1 2.6281137435000002e+00 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +388 1 0.0000000000000000e+00 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +389 1 5.2562274870000003e+00 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +390 1 7.8843412305000005e+00 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +391 1 7.8843412305000005e+00 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +392 1 5.2562274870000003e+00 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +393 1 1.0512454974000001e+01 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +394 1 1.3140568717500001e+01 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +395 1 1.3140568717500001e+01 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +396 1 1.0512454974000001e+01 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +397 1 1.5768682461000001e+01 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +398 1 1.8396796204499999e+01 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +399 1 1.8396796204499999e+01 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +400 1 1.5768682461000001e+01 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +401 1 2.1024909948000001e+01 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +402 1 2.3653023691500003e+01 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +403 1 2.3653023691500003e+01 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +404 1 2.1024909948000001e+01 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +405 1 2.6281137435000002e+01 2.1024909948000001e+01 1.0512454974000001e+01 0 0 0 +406 1 2.8909251178500000e+01 2.3653023691500003e+01 1.0512454974000001e+01 0 0 0 +407 1 2.8909251178500000e+01 2.1024909948000001e+01 1.3140568717500001e+01 0 0 0 +408 1 2.6281137435000002e+01 2.3653023691500003e+01 1.3140568717500001e+01 0 0 0 +409 1 0.0000000000000000e+00 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +410 1 2.6281137435000002e+00 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +411 1 2.6281137435000002e+00 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +412 1 0.0000000000000000e+00 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +413 1 5.2562274870000003e+00 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +414 1 7.8843412305000005e+00 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +415 1 7.8843412305000005e+00 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +416 1 5.2562274870000003e+00 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +417 1 1.0512454974000001e+01 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +418 1 1.3140568717500001e+01 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +419 1 1.3140568717500001e+01 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +420 1 1.0512454974000001e+01 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +421 1 1.5768682461000001e+01 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +422 1 1.8396796204499999e+01 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +423 1 1.8396796204499999e+01 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +424 1 1.5768682461000001e+01 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +425 1 2.1024909948000001e+01 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +426 1 2.3653023691500003e+01 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +427 1 2.3653023691500003e+01 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +428 1 2.1024909948000001e+01 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +429 1 2.6281137435000002e+01 2.6281137435000002e+01 1.0512454974000001e+01 0 0 0 +430 1 2.8909251178500000e+01 2.8909251178500000e+01 1.0512454974000001e+01 0 0 0 +431 1 2.8909251178500000e+01 2.6281137435000002e+01 1.3140568717500001e+01 0 0 0 +432 1 2.6281137435000002e+01 2.8909251178500000e+01 1.3140568717500001e+01 0 0 0 +433 1 0.0000000000000000e+00 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +434 1 2.6281137435000002e+00 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +435 1 2.6281137435000002e+00 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +436 1 0.0000000000000000e+00 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +437 1 5.2562274870000003e+00 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +438 1 7.8843412305000005e+00 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +439 1 7.8843412305000005e+00 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +440 1 5.2562274870000003e+00 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +441 1 1.0512454974000001e+01 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +442 1 1.3140568717500001e+01 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +443 1 1.3140568717500001e+01 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +444 1 1.0512454974000001e+01 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +445 1 1.5768682461000001e+01 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +446 1 1.8396796204499999e+01 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +447 1 1.8396796204499999e+01 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +448 1 1.5768682461000001e+01 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +449 1 2.1024909948000001e+01 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +450 1 2.3653023691500003e+01 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +451 1 2.3653023691500003e+01 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +452 1 2.1024909948000001e+01 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +453 1 2.6281137435000002e+01 0.0000000000000000e+00 1.5768682461000001e+01 0 0 0 +454 1 2.8909251178500000e+01 2.6281137435000002e+00 1.5768682461000001e+01 0 0 0 +455 1 2.8909251178500000e+01 0.0000000000000000e+00 1.8396796204499999e+01 0 0 0 +456 1 2.6281137435000002e+01 2.6281137435000002e+00 1.8396796204499999e+01 0 0 0 +457 1 0.0000000000000000e+00 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +458 1 2.6281137435000002e+00 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +459 1 2.6281137435000002e+00 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +460 1 0.0000000000000000e+00 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +461 1 5.2562274870000003e+00 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +462 1 7.8843412305000005e+00 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +463 1 7.8843412305000005e+00 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +464 1 5.2562274870000003e+00 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +465 1 1.0512454974000001e+01 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +466 1 1.3140568717500001e+01 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +467 1 1.3140568717500001e+01 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +468 1 1.0512454974000001e+01 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +469 1 1.5768682461000001e+01 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +470 1 1.8396796204499999e+01 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +471 1 1.8396796204499999e+01 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +472 1 1.5768682461000001e+01 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +473 1 2.1024909948000001e+01 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +474 1 2.3653023691500003e+01 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +475 1 2.3653023691500003e+01 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +476 1 2.1024909948000001e+01 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +477 1 2.6281137435000002e+01 5.2562274870000003e+00 1.5768682461000001e+01 0 0 0 +478 1 2.8909251178500000e+01 7.8843412305000005e+00 1.5768682461000001e+01 0 0 0 +479 1 2.8909251178500000e+01 5.2562274870000003e+00 1.8396796204499999e+01 0 0 0 +480 1 2.6281137435000002e+01 7.8843412305000005e+00 1.8396796204499999e+01 0 0 0 +481 1 0.0000000000000000e+00 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +482 1 2.6281137435000002e+00 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +483 1 2.6281137435000002e+00 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +484 1 0.0000000000000000e+00 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +485 1 5.2562274870000003e+00 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +486 1 7.8843412305000005e+00 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +487 1 7.8843412305000005e+00 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +488 1 5.2562274870000003e+00 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +489 1 1.0512454974000001e+01 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +490 1 1.3140568717500001e+01 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +491 1 1.3140568717500001e+01 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +492 1 1.0512454974000001e+01 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +493 1 1.5768682461000001e+01 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +494 1 1.8396796204499999e+01 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +495 1 1.8396796204499999e+01 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +496 1 1.5768682461000001e+01 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +497 1 2.1024909948000001e+01 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +498 1 2.3653023691500003e+01 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +499 1 2.3653023691500003e+01 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +500 1 2.1024909948000001e+01 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +501 1 2.6281137435000002e+01 1.0512454974000001e+01 1.5768682461000001e+01 0 0 0 +502 1 2.8909251178500000e+01 1.3140568717500001e+01 1.5768682461000001e+01 0 0 0 +503 1 2.8909251178500000e+01 1.0512454974000001e+01 1.8396796204499999e+01 0 0 0 +504 1 2.6281137435000002e+01 1.3140568717500001e+01 1.8396796204499999e+01 0 0 0 +505 1 0.0000000000000000e+00 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +506 1 2.6281137435000002e+00 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +507 1 2.6281137435000002e+00 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +508 1 0.0000000000000000e+00 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +509 1 5.2562274870000003e+00 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +510 1 7.8843412305000005e+00 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +511 1 7.8843412305000005e+00 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +512 1 5.2562274870000003e+00 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +513 1 1.0512454974000001e+01 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +514 1 1.3140568717500001e+01 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +515 1 1.3140568717500001e+01 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +516 1 1.0512454974000001e+01 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +517 1 1.5768682461000001e+01 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +518 1 1.8396796204499999e+01 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +519 1 1.8396796204499999e+01 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +520 1 1.5768682461000001e+01 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +521 1 2.1024909948000001e+01 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +522 1 2.3653023691500003e+01 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +523 1 2.3653023691500003e+01 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +524 1 2.1024909948000001e+01 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +525 1 2.6281137435000002e+01 1.5768682461000001e+01 1.5768682461000001e+01 0 0 0 +526 1 2.8909251178500000e+01 1.8396796204499999e+01 1.5768682461000001e+01 0 0 0 +527 1 2.8909251178500000e+01 1.5768682461000001e+01 1.8396796204499999e+01 0 0 0 +528 1 2.6281137435000002e+01 1.8396796204499999e+01 1.8396796204499999e+01 0 0 0 +529 1 0.0000000000000000e+00 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +530 1 2.6281137435000002e+00 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +531 1 2.6281137435000002e+00 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +532 1 0.0000000000000000e+00 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +533 1 5.2562274870000003e+00 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +534 1 7.8843412305000005e+00 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +535 1 7.8843412305000005e+00 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +536 1 5.2562274870000003e+00 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +537 1 1.0512454974000001e+01 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +538 1 1.3140568717500001e+01 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +539 1 1.3140568717500001e+01 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +540 1 1.0512454974000001e+01 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +541 1 1.5768682461000001e+01 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +542 1 1.8396796204499999e+01 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +543 1 1.8396796204499999e+01 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +544 1 1.5768682461000001e+01 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +545 1 2.1024909948000001e+01 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +546 1 2.3653023691500003e+01 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +547 1 2.3653023691500003e+01 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +548 1 2.1024909948000001e+01 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +549 1 2.6281137435000002e+01 2.1024909948000001e+01 1.5768682461000001e+01 0 0 0 +550 1 2.8909251178500000e+01 2.3653023691500003e+01 1.5768682461000001e+01 0 0 0 +551 1 2.8909251178500000e+01 2.1024909948000001e+01 1.8396796204499999e+01 0 0 0 +552 1 2.6281137435000002e+01 2.3653023691500003e+01 1.8396796204499999e+01 0 0 0 +553 1 0.0000000000000000e+00 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +554 1 2.6281137435000002e+00 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +555 1 2.6281137435000002e+00 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +556 1 0.0000000000000000e+00 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +557 1 5.2562274870000003e+00 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +558 1 7.8843412305000005e+00 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +559 1 7.8843412305000005e+00 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +560 1 5.2562274870000003e+00 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +561 1 1.0512454974000001e+01 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +562 1 1.3140568717500001e+01 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +563 1 1.3140568717500001e+01 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +564 1 1.0512454974000001e+01 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +565 1 1.5768682461000001e+01 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +566 1 1.8396796204499999e+01 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +567 1 1.8396796204499999e+01 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +568 1 1.5768682461000001e+01 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +569 1 2.1024909948000001e+01 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +570 1 2.3653023691500003e+01 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +571 1 2.3653023691500003e+01 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +572 1 2.1024909948000001e+01 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +573 1 2.6281137435000002e+01 2.6281137435000002e+01 1.5768682461000001e+01 0 0 0 +574 1 2.8909251178500000e+01 2.8909251178500000e+01 1.5768682461000001e+01 0 0 0 +575 1 2.8909251178500000e+01 2.6281137435000002e+01 1.8396796204499999e+01 0 0 0 +576 1 2.6281137435000002e+01 2.8909251178500000e+01 1.8396796204499999e+01 0 0 0 +577 1 0.0000000000000000e+00 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +578 1 2.6281137435000002e+00 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +579 1 2.6281137435000002e+00 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +580 1 0.0000000000000000e+00 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +581 1 5.2562274870000003e+00 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +582 1 7.8843412305000005e+00 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +583 1 7.8843412305000005e+00 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +584 1 5.2562274870000003e+00 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +585 1 1.0512454974000001e+01 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +586 1 1.3140568717500001e+01 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +587 1 1.3140568717500001e+01 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +588 1 1.0512454974000001e+01 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +589 1 1.5768682461000001e+01 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +590 1 1.8396796204499999e+01 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +591 1 1.8396796204499999e+01 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +592 1 1.5768682461000001e+01 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +593 1 2.1024909948000001e+01 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +594 1 2.3653023691500003e+01 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +595 1 2.3653023691500003e+01 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +596 1 2.1024909948000001e+01 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +597 1 2.6281137435000002e+01 0.0000000000000000e+00 2.1024909948000001e+01 0 0 0 +598 1 2.8909251178500000e+01 2.6281137435000002e+00 2.1024909948000001e+01 0 0 0 +599 1 2.8909251178500000e+01 0.0000000000000000e+00 2.3653023691500003e+01 0 0 0 +600 1 2.6281137435000002e+01 2.6281137435000002e+00 2.3653023691500003e+01 0 0 0 +601 1 0.0000000000000000e+00 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +602 1 2.6281137435000002e+00 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +603 1 2.6281137435000002e+00 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +604 1 0.0000000000000000e+00 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +605 1 5.2562274870000003e+00 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +606 1 7.8843412305000005e+00 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +607 1 7.8843412305000005e+00 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +608 1 5.2562274870000003e+00 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +609 1 1.0512454974000001e+01 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +610 1 1.3140568717500001e+01 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +611 1 1.3140568717500001e+01 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +612 1 1.0512454974000001e+01 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +613 1 1.5768682461000001e+01 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +614 1 1.8396796204499999e+01 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +615 1 1.8396796204499999e+01 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +616 1 1.5768682461000001e+01 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +617 1 2.1024909948000001e+01 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +618 1 2.3653023691500003e+01 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +619 1 2.3653023691500003e+01 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +620 1 2.1024909948000001e+01 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +621 1 2.6281137435000002e+01 5.2562274870000003e+00 2.1024909948000001e+01 0 0 0 +622 1 2.8909251178500000e+01 7.8843412305000005e+00 2.1024909948000001e+01 0 0 0 +623 1 2.8909251178500000e+01 5.2562274870000003e+00 2.3653023691500003e+01 0 0 0 +624 1 2.6281137435000002e+01 7.8843412305000005e+00 2.3653023691500003e+01 0 0 0 +625 1 0.0000000000000000e+00 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +626 1 2.6281137435000002e+00 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +627 1 2.6281137435000002e+00 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +628 1 0.0000000000000000e+00 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +629 1 5.2562274870000003e+00 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +630 1 7.8843412305000005e+00 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +631 1 7.8843412305000005e+00 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +632 1 5.2562274870000003e+00 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +633 1 1.0512454974000001e+01 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +634 1 1.3140568717500001e+01 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +635 1 1.3140568717500001e+01 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +636 1 1.0512454974000001e+01 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +637 1 1.5768682461000001e+01 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +638 1 1.8396796204499999e+01 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +639 1 1.8396796204499999e+01 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +640 1 1.5768682461000001e+01 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +641 1 2.1024909948000001e+01 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +642 1 2.3653023691500003e+01 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +643 1 2.3653023691500003e+01 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +644 1 2.1024909948000001e+01 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +645 1 2.6281137435000002e+01 1.0512454974000001e+01 2.1024909948000001e+01 0 0 0 +646 1 2.8909251178500000e+01 1.3140568717500001e+01 2.1024909948000001e+01 0 0 0 +647 1 2.8909251178500000e+01 1.0512454974000001e+01 2.3653023691500003e+01 0 0 0 +648 1 2.6281137435000002e+01 1.3140568717500001e+01 2.3653023691500003e+01 0 0 0 +649 1 0.0000000000000000e+00 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +650 1 2.6281137435000002e+00 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +651 1 2.6281137435000002e+00 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +652 1 0.0000000000000000e+00 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +653 1 5.2562274870000003e+00 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +654 1 7.8843412305000005e+00 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +655 1 7.8843412305000005e+00 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +656 1 5.2562274870000003e+00 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +657 1 1.0512454974000001e+01 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +658 1 1.3140568717500001e+01 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +659 1 1.3140568717500001e+01 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +660 1 1.0512454974000001e+01 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +661 1 1.5768682461000001e+01 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +662 1 1.8396796204499999e+01 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +663 1 1.8396796204499999e+01 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +664 1 1.5768682461000001e+01 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +665 1 2.1024909948000001e+01 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +666 1 2.3653023691500003e+01 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +667 1 2.3653023691500003e+01 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +668 1 2.1024909948000001e+01 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +669 1 2.6281137435000002e+01 1.5768682461000001e+01 2.1024909948000001e+01 0 0 0 +670 1 2.8909251178500000e+01 1.8396796204499999e+01 2.1024909948000001e+01 0 0 0 +671 1 2.8909251178500000e+01 1.5768682461000001e+01 2.3653023691500003e+01 0 0 0 +672 1 2.6281137435000002e+01 1.8396796204499999e+01 2.3653023691500003e+01 0 0 0 +673 1 0.0000000000000000e+00 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +674 1 2.6281137435000002e+00 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +675 1 2.6281137435000002e+00 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +676 1 0.0000000000000000e+00 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +677 1 5.2562274870000003e+00 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +678 1 7.8843412305000005e+00 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +679 1 7.8843412305000005e+00 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +680 1 5.2562274870000003e+00 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +681 1 1.0512454974000001e+01 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +682 1 1.3140568717500001e+01 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +683 1 1.3140568717500001e+01 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +684 1 1.0512454974000001e+01 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +685 1 1.5768682461000001e+01 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +686 1 1.8396796204499999e+01 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +687 1 1.8396796204499999e+01 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +688 1 1.5768682461000001e+01 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +689 1 2.1024909948000001e+01 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +690 1 2.3653023691500003e+01 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +691 1 2.3653023691500003e+01 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +692 1 2.1024909948000001e+01 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +693 1 2.6281137435000002e+01 2.1024909948000001e+01 2.1024909948000001e+01 0 0 0 +694 1 2.8909251178500000e+01 2.3653023691500003e+01 2.1024909948000001e+01 0 0 0 +695 1 2.8909251178500000e+01 2.1024909948000001e+01 2.3653023691500003e+01 0 0 0 +696 1 2.6281137435000002e+01 2.3653023691500003e+01 2.3653023691500003e+01 0 0 0 +697 1 0.0000000000000000e+00 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +698 1 2.6281137435000002e+00 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +699 1 2.6281137435000002e+00 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +700 1 0.0000000000000000e+00 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +701 1 5.2562274870000003e+00 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +702 1 7.8843412305000005e+00 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +703 1 7.8843412305000005e+00 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +704 1 5.2562274870000003e+00 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +705 1 1.0512454974000001e+01 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +706 1 1.3140568717500001e+01 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +707 1 1.3140568717500001e+01 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +708 1 1.0512454974000001e+01 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +709 1 1.5768682461000001e+01 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +710 1 1.8396796204499999e+01 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +711 1 1.8396796204499999e+01 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +712 1 1.5768682461000001e+01 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +713 1 2.1024909948000001e+01 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +714 1 2.3653023691500003e+01 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +715 1 2.3653023691500003e+01 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +716 1 2.1024909948000001e+01 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +717 1 2.6281137435000002e+01 2.6281137435000002e+01 2.1024909948000001e+01 0 0 0 +718 1 2.8909251178500000e+01 2.8909251178500000e+01 2.1024909948000001e+01 0 0 0 +719 1 2.8909251178500000e+01 2.6281137435000002e+01 2.3653023691500003e+01 0 0 0 +720 1 2.6281137435000002e+01 2.8909251178500000e+01 2.3653023691500003e+01 0 0 0 +721 1 0.0000000000000000e+00 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +722 1 2.6281137435000002e+00 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +723 1 2.6281137435000002e+00 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +724 1 0.0000000000000000e+00 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +725 1 5.2562274870000003e+00 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +726 1 7.8843412305000005e+00 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +727 1 7.8843412305000005e+00 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +728 1 5.2562274870000003e+00 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +729 1 1.0512454974000001e+01 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +730 1 1.3140568717500001e+01 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +731 1 1.3140568717500001e+01 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +732 1 1.0512454974000001e+01 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +733 1 1.5768682461000001e+01 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +734 1 1.8396796204499999e+01 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +735 1 1.8396796204499999e+01 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +736 1 1.5768682461000001e+01 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +737 1 2.1024909948000001e+01 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +738 1 2.3653023691500003e+01 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +739 1 2.3653023691500003e+01 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +740 1 2.1024909948000001e+01 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +741 1 2.6281137435000002e+01 0.0000000000000000e+00 2.6281137435000002e+01 0 0 0 +742 1 2.8909251178500000e+01 2.6281137435000002e+00 2.6281137435000002e+01 0 0 0 +743 1 2.8909251178500000e+01 0.0000000000000000e+00 2.8909251178500000e+01 0 0 0 +744 1 2.6281137435000002e+01 2.6281137435000002e+00 2.8909251178500000e+01 0 0 0 +745 1 0.0000000000000000e+00 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +746 1 2.6281137435000002e+00 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +747 1 2.6281137435000002e+00 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +748 1 0.0000000000000000e+00 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +749 1 5.2562274870000003e+00 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +750 1 7.8843412305000005e+00 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +751 1 7.8843412305000005e+00 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +752 1 5.2562274870000003e+00 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +753 1 1.0512454974000001e+01 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +754 1 1.3140568717500001e+01 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +755 1 1.3140568717500001e+01 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +756 1 1.0512454974000001e+01 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +757 1 1.5768682461000001e+01 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +758 1 1.8396796204499999e+01 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +759 1 1.8396796204499999e+01 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +760 1 1.5768682461000001e+01 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +761 1 2.1024909948000001e+01 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +762 1 2.3653023691500003e+01 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +763 1 2.3653023691500003e+01 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +764 1 2.1024909948000001e+01 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +765 1 2.6281137435000002e+01 5.2562274870000003e+00 2.6281137435000002e+01 0 0 0 +766 1 2.8909251178500000e+01 7.8843412305000005e+00 2.6281137435000002e+01 0 0 0 +767 1 2.8909251178500000e+01 5.2562274870000003e+00 2.8909251178500000e+01 0 0 0 +768 1 2.6281137435000002e+01 7.8843412305000005e+00 2.8909251178500000e+01 0 0 0 +769 1 0.0000000000000000e+00 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +770 1 2.6281137435000002e+00 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +771 1 2.6281137435000002e+00 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +772 1 0.0000000000000000e+00 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +773 1 5.2562274870000003e+00 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +774 1 7.8843412305000005e+00 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +775 1 7.8843412305000005e+00 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +776 1 5.2562274870000003e+00 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +777 1 1.0512454974000001e+01 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +778 1 1.3140568717500001e+01 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +779 1 1.3140568717500001e+01 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +780 1 1.0512454974000001e+01 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +781 1 1.5768682461000001e+01 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +782 1 1.8396796204499999e+01 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +783 1 1.8396796204499999e+01 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +784 1 1.5768682461000001e+01 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +785 1 2.1024909948000001e+01 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +786 1 2.3653023691500003e+01 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +787 1 2.3653023691500003e+01 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +788 1 2.1024909948000001e+01 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +789 1 2.6281137435000002e+01 1.0512454974000001e+01 2.6281137435000002e+01 0 0 0 +790 1 2.8909251178500000e+01 1.3140568717500001e+01 2.6281137435000002e+01 0 0 0 +791 1 2.8909251178500000e+01 1.0512454974000001e+01 2.8909251178500000e+01 0 0 0 +792 1 2.6281137435000002e+01 1.3140568717500001e+01 2.8909251178500000e+01 0 0 0 +793 1 0.0000000000000000e+00 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +794 1 2.6281137435000002e+00 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +795 1 2.6281137435000002e+00 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +796 1 0.0000000000000000e+00 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +797 1 5.2562274870000003e+00 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +798 1 7.8843412305000005e+00 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +799 1 7.8843412305000005e+00 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +800 1 5.2562274870000003e+00 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +801 1 1.0512454974000001e+01 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +802 1 1.3140568717500001e+01 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +803 1 1.3140568717500001e+01 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +804 1 1.0512454974000001e+01 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +805 1 1.5768682461000001e+01 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +806 1 1.8396796204499999e+01 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +807 1 1.8396796204499999e+01 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +808 1 1.5768682461000001e+01 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +809 1 2.1024909948000001e+01 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +810 1 2.3653023691500003e+01 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +811 1 2.3653023691500003e+01 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +812 1 2.1024909948000001e+01 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +813 1 2.6281137435000002e+01 1.5768682461000001e+01 2.6281137435000002e+01 0 0 0 +814 1 2.8909251178500000e+01 1.8396796204499999e+01 2.6281137435000002e+01 0 0 0 +815 1 2.8909251178500000e+01 1.5768682461000001e+01 2.8909251178500000e+01 0 0 0 +816 1 2.6281137435000002e+01 1.8396796204499999e+01 2.8909251178500000e+01 0 0 0 +817 1 0.0000000000000000e+00 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +818 1 2.6281137435000002e+00 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +819 1 2.6281137435000002e+00 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +820 1 0.0000000000000000e+00 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +821 1 5.2562274870000003e+00 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +822 1 7.8843412305000005e+00 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +823 1 7.8843412305000005e+00 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +824 1 5.2562274870000003e+00 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +825 1 1.0512454974000001e+01 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +826 1 1.3140568717500001e+01 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +827 1 1.3140568717500001e+01 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +828 1 1.0512454974000001e+01 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +829 1 1.5768682461000001e+01 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +830 1 1.8396796204499999e+01 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +831 1 1.8396796204499999e+01 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +832 1 1.5768682461000001e+01 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +833 1 2.1024909948000001e+01 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +834 1 2.3653023691500003e+01 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +835 1 2.3653023691500003e+01 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +836 1 2.1024909948000001e+01 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +837 1 2.6281137435000002e+01 2.1024909948000001e+01 2.6281137435000002e+01 0 0 0 +838 1 2.8909251178500000e+01 2.3653023691500003e+01 2.6281137435000002e+01 0 0 0 +839 1 2.8909251178500000e+01 2.1024909948000001e+01 2.8909251178500000e+01 0 0 0 +840 1 2.6281137435000002e+01 2.3653023691500003e+01 2.8909251178500000e+01 0 0 0 +841 1 0.0000000000000000e+00 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +842 1 2.6281137435000002e+00 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +843 1 2.6281137435000002e+00 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +844 1 0.0000000000000000e+00 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 +845 1 5.2562274870000003e+00 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +846 1 7.8843412305000005e+00 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +847 1 7.8843412305000005e+00 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +848 1 5.2562274870000003e+00 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 +849 1 1.0512454974000001e+01 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +850 1 1.3140568717500001e+01 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +851 1 1.3140568717500001e+01 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +852 1 1.0512454974000001e+01 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 +853 1 1.5768682461000001e+01 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +854 1 1.8396796204499999e+01 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +855 1 1.8396796204499999e+01 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +856 1 1.5768682461000001e+01 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 +857 1 2.1024909948000001e+01 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +858 1 2.3653023691500003e+01 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +859 1 2.3653023691500003e+01 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +860 1 2.1024909948000001e+01 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 +861 1 2.6281137435000002e+01 2.6281137435000002e+01 2.6281137435000002e+01 0 0 0 +862 1 2.8909251178500000e+01 2.8909251178500000e+01 2.6281137435000002e+01 0 0 0 +863 1 2.8909251178500000e+01 2.6281137435000002e+01 2.8909251178500000e+01 0 0 0 +864 1 2.6281137435000002e+01 2.8909251178500000e+01 2.8909251178500000e+01 0 0 0 + +Velocities + +1 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +5 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +7 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +8 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +11 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +14 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +16 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +18 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +19 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +20 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +22 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +23 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +24 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +25 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +27 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +32 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +33 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +34 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +35 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +36 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +40 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +41 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +42 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +44 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +46 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +53 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +56 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +57 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +58 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +59 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +68 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +71 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +72 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +74 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +76 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +78 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +81 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +82 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +83 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +84 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +85 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +86 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +89 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +90 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +91 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +92 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +93 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +94 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +97 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +98 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +101 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +107 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +108 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +110 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +114 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +117 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +118 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +120 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +122 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +123 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +125 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +126 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +128 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +129 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +130 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +131 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +133 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +134 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +135 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +137 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +138 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +139 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +142 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +145 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +146 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +149 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +150 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +152 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +153 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +154 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +155 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +156 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +157 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +158 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +159 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +161 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +166 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +167 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +168 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +169 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +170 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +171 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +176 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +177 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +181 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +186 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +188 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +189 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +190 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +201 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +202 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +203 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +205 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +208 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +212 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +213 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +215 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +216 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +217 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +218 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +219 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +221 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +222 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +223 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +224 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +225 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +226 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +228 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +229 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +231 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +232 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +235 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +236 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +238 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +239 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +240 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +243 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +245 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +248 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +252 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +254 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +255 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +256 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +257 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +259 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +260 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +261 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +263 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +264 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +265 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +266 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +267 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +268 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +269 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +270 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +271 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +272 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +273 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +274 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +275 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +276 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +277 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +279 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +280 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +281 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +282 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +283 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +284 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +285 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +286 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +287 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +288 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +289 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +290 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +291 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +292 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +293 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +294 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +296 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +297 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +298 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +299 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +300 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +301 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +302 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +303 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +305 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +306 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +307 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +308 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +309 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +310 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +311 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +312 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +313 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +314 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +315 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +317 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +318 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +319 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +320 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +321 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +322 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +323 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +324 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +325 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +326 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +327 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +328 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +329 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +330 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +331 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +332 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +333 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +336 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +337 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +338 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +339 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +340 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +341 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +342 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +343 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +344 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +345 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +346 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +349 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +350 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +353 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +354 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +355 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +356 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +357 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +360 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +361 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +362 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +363 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +364 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +366 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +367 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +368 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +369 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +370 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +372 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +373 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +374 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +375 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +376 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +377 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +378 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +380 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +381 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +384 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +385 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +386 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +389 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +390 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +392 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +393 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +396 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +397 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +398 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +399 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +400 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +401 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +402 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +403 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +404 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +405 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +406 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +407 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +408 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +409 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +410 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +411 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +412 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +413 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +414 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +415 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +416 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +417 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +418 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +419 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +420 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +421 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +422 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +423 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +424 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +425 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +426 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +427 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +428 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +429 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +430 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +431 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +432 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +433 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +434 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +435 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +436 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +437 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +438 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +439 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +440 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +441 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +442 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +443 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +444 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +445 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +446 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +447 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +448 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +449 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +450 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +451 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +452 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +453 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +454 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +455 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +456 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +457 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +458 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +459 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +460 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +461 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +462 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +463 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +464 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +465 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +466 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +467 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +468 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +469 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +470 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +471 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +472 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +473 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +474 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +475 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +476 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +477 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +478 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +479 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +480 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +481 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +482 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +483 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +484 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +485 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +486 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +487 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +488 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +489 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +490 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +491 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +492 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +493 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +494 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +495 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +496 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +497 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +498 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +499 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +500 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +501 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +502 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +503 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +504 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +505 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +506 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +507 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +508 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +509 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +510 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +511 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +512 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +513 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +514 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +515 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +516 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +517 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +518 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +519 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +520 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +521 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +522 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +523 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +524 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +525 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +526 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +527 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +528 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +529 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +530 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +531 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +532 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +533 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +534 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +535 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +536 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +537 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +538 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +539 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +540 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +541 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +542 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +543 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +544 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +545 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +546 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +547 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +548 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +549 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +550 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +551 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +552 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +553 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +554 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +555 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +556 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +557 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +558 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +559 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +560 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +561 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +562 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +563 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +564 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +565 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +566 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +567 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +568 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +569 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +570 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +571 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +572 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +573 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +574 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +575 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +576 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +577 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +578 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +579 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +580 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +581 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +582 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +583 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +584 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +585 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +586 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +587 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +588 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +589 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +590 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +591 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +592 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +593 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +594 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +595 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +596 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +597 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +598 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +599 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +600 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +601 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +602 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +603 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +604 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +605 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +606 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +607 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +608 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +609 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +610 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +611 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +612 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +613 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +614 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +615 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +616 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +617 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +618 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +619 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +620 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +621 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +622 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +623 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +624 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +625 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +626 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +627 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +628 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +629 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +630 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +631 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +632 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +633 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +634 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +635 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +636 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +637 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +638 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +639 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +640 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +641 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +642 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +643 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +644 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +645 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +646 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +647 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +648 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +649 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +650 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +651 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +652 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +653 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +654 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +655 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +656 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +657 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +658 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +659 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +660 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +661 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +662 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +663 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +664 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +665 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +666 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +667 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +668 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +669 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +670 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +671 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +672 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +673 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +674 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +675 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +676 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +677 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +678 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +679 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +680 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +681 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +682 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +683 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +684 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +685 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +686 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +687 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +688 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +689 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +690 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +691 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +692 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +693 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +694 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +695 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +696 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +697 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +698 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +699 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +700 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +701 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +702 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +703 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +704 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +705 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +706 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +707 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +708 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +709 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +710 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +711 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +712 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +713 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +714 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +715 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +716 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +717 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +718 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +719 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +720 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +721 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +722 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +723 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +724 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +725 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +726 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +727 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +728 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +729 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +730 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +731 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +732 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +733 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +734 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +735 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +736 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +737 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +738 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +739 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +740 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +741 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +742 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +743 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +744 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +745 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +746 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +747 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +748 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +749 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +750 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +751 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +752 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +753 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +754 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +755 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +756 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +757 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +758 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +759 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +760 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +761 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +762 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +763 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +764 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +765 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +766 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +767 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +768 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +769 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +770 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +771 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +772 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +773 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +774 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +775 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +776 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +777 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +778 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +779 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +780 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +781 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +782 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +783 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +784 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +785 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +786 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +787 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +788 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +789 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +790 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +791 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +792 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +793 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +794 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +795 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +796 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +797 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +798 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +799 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +800 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +801 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +802 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +803 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +804 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +805 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +806 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +807 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +808 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +809 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +810 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +811 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +812 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +813 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +814 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +815 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +816 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +817 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +818 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +819 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +820 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +821 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +822 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +823 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +824 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +825 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +826 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +827 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +828 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +829 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +830 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +831 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +832 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +833 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +834 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +835 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +836 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +837 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +838 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +839 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +840 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +841 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +842 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +843 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +844 -0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +845 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +846 -0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +847 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +848 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +849 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +850 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +851 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +852 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 +853 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 +854 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +855 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +856 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +857 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +858 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +859 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +860 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +861 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +862 -0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +863 0.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 +864 0.0000000000000000e+00 -0.0000000000000000e+00 -0.0000000000000000e+00 diff --git a/examples/USER/atc/cauchy_born/read_xref_0.data b/examples/USER/atc/cauchy_born/read_xref_0.data new file mode 100644 index 0000000000..a4d1dd74c7 --- /dev/null +++ b/examples/USER/atc/cauchy_born/read_xref_0.data @@ -0,0 +1,535 @@ +LAMMPS data file from restart file: timestep = 0, procs = 1 + +256 atoms + +1 atom types + +0.0000000000000000e+00 2.1024909948000001e+01 xlo xhi +0.0000000000000000e+00 2.1024909948000001e+01 ylo yhi +0.0000000000000000e+00 2.1024909948000001e+01 zlo zhi + +Masses + +1 39.95 + +Pair Coeffs + +1 0.238 3.405 + +Atoms + +1 1 1.3140568717500001e+00 1.3140568717500001e+00 1.3140568717500001e+00 0 0 0 +2 1 3.9421706152500002e+00 3.9421706152500002e+00 1.3140568717500001e+00 0 0 0 +3 1 3.9421706152500002e+00 1.3140568717500001e+00 3.9421706152500002e+00 0 0 0 +4 1 1.3140568717500001e+00 3.9421706152500002e+00 3.9421706152500002e+00 0 0 0 +5 1 6.5702843587500004e+00 1.3140568717500001e+00 1.3140568717500001e+00 0 0 0 +6 1 9.1983981022499997e+00 3.9421706152500002e+00 1.3140568717500001e+00 0 0 0 +7 1 9.1983981022499997e+00 1.3140568717500001e+00 3.9421706152500002e+00 0 0 0 +8 1 6.5702843587500004e+00 3.9421706152500002e+00 3.9421706152500002e+00 0 0 0 +9 1 1.1826511845750002e+01 1.3140568717500001e+00 1.3140568717500001e+00 0 0 0 +10 1 1.4454625589250000e+01 3.9421706152500002e+00 1.3140568717500001e+00 0 0 0 +11 1 1.4454625589250000e+01 1.3140568717500001e+00 3.9421706152500002e+00 0 0 0 +12 1 1.1826511845750002e+01 3.9421706152500002e+00 3.9421706152500002e+00 0 0 0 +13 1 1.7082739332750002e+01 1.3140568717500001e+00 1.3140568717500001e+00 0 0 0 +14 1 1.9710853076250000e+01 3.9421706152500002e+00 1.3140568717500001e+00 0 0 0 +15 1 1.9710853076250000e+01 1.3140568717500001e+00 3.9421706152500002e+00 0 0 0 +16 1 1.7082739332750002e+01 3.9421706152500002e+00 3.9421706152500002e+00 0 0 0 +17 1 1.3140568717500001e+00 6.5702843587500004e+00 1.3140568717500001e+00 0 0 0 +18 1 3.9421706152500002e+00 9.1983981022499997e+00 1.3140568717500001e+00 0 0 0 +19 1 3.9421706152500002e+00 6.5702843587500004e+00 3.9421706152500002e+00 0 0 0 +20 1 1.3140568717500001e+00 9.1983981022499997e+00 3.9421706152500002e+00 0 0 0 +21 1 6.5702843587500004e+00 6.5702843587500004e+00 1.3140568717500001e+00 0 0 0 +22 1 9.1983981022499997e+00 9.1983981022499997e+00 1.3140568717500001e+00 0 0 0 +23 1 9.1983981022499997e+00 6.5702843587500004e+00 3.9421706152500002e+00 0 0 0 +24 1 6.5702843587500004e+00 9.1983981022499997e+00 3.9421706152500002e+00 0 0 0 +25 1 1.1826511845750002e+01 6.5702843587500004e+00 1.3140568717500001e+00 0 0 0 +26 1 1.4454625589250000e+01 9.1983981022499997e+00 1.3140568717500001e+00 0 0 0 +27 1 1.4454625589250000e+01 6.5702843587500004e+00 3.9421706152500002e+00 0 0 0 +28 1 1.1826511845750002e+01 9.1983981022499997e+00 3.9421706152500002e+00 0 0 0 +29 1 1.7082739332750002e+01 6.5702843587500004e+00 1.3140568717500001e+00 0 0 0 +30 1 1.9710853076250000e+01 9.1983981022499997e+00 1.3140568717500001e+00 0 0 0 +31 1 1.9710853076250000e+01 6.5702843587500004e+00 3.9421706152500002e+00 0 0 0 +32 1 1.7082739332750002e+01 9.1983981022499997e+00 3.9421706152500002e+00 0 0 0 +33 1 1.3140568717500001e+00 1.1826511845750002e+01 1.3140568717500001e+00 0 0 0 +34 1 3.9421706152500002e+00 1.4454625589250000e+01 1.3140568717500001e+00 0 0 0 +35 1 3.9421706152500002e+00 1.1826511845750002e+01 3.9421706152500002e+00 0 0 0 +36 1 1.3140568717500001e+00 1.4454625589250000e+01 3.9421706152500002e+00 0 0 0 +37 1 6.5702843587500004e+00 1.1826511845750002e+01 1.3140568717500001e+00 0 0 0 +38 1 9.1983981022499997e+00 1.4454625589250000e+01 1.3140568717500001e+00 0 0 0 +39 1 9.1983981022499997e+00 1.1826511845750002e+01 3.9421706152500002e+00 0 0 0 +40 1 6.5702843587500004e+00 1.4454625589250000e+01 3.9421706152500002e+00 0 0 0 +41 1 1.1826511845750002e+01 1.1826511845750002e+01 1.3140568717500001e+00 0 0 0 +42 1 1.4454625589250000e+01 1.4454625589250000e+01 1.3140568717500001e+00 0 0 0 +43 1 1.4454625589250000e+01 1.1826511845750002e+01 3.9421706152500002e+00 0 0 0 +44 1 1.1826511845750002e+01 1.4454625589250000e+01 3.9421706152500002e+00 0 0 0 +45 1 1.7082739332750002e+01 1.1826511845750002e+01 1.3140568717500001e+00 0 0 0 +46 1 1.9710853076250000e+01 1.4454625589250000e+01 1.3140568717500001e+00 0 0 0 +47 1 1.9710853076250000e+01 1.1826511845750002e+01 3.9421706152500002e+00 0 0 0 +48 1 1.7082739332750002e+01 1.4454625589250000e+01 3.9421706152500002e+00 0 0 0 +49 1 1.3140568717500001e+00 1.7082739332750002e+01 1.3140568717500001e+00 0 0 0 +50 1 3.9421706152500002e+00 1.9710853076250000e+01 1.3140568717500001e+00 0 0 0 +51 1 3.9421706152500002e+00 1.7082739332750002e+01 3.9421706152500002e+00 0 0 0 +52 1 1.3140568717500001e+00 1.9710853076250000e+01 3.9421706152500002e+00 0 0 0 +53 1 6.5702843587500004e+00 1.7082739332750002e+01 1.3140568717500001e+00 0 0 0 +54 1 9.1983981022499997e+00 1.9710853076250000e+01 1.3140568717500001e+00 0 0 0 +55 1 9.1983981022499997e+00 1.7082739332750002e+01 3.9421706152500002e+00 0 0 0 +56 1 6.5702843587500004e+00 1.9710853076250000e+01 3.9421706152500002e+00 0 0 0 +57 1 1.1826511845750002e+01 1.7082739332750002e+01 1.3140568717500001e+00 0 0 0 +58 1 1.4454625589250000e+01 1.9710853076250000e+01 1.3140568717500001e+00 0 0 0 +59 1 1.4454625589250000e+01 1.7082739332750002e+01 3.9421706152500002e+00 0 0 0 +60 1 1.1826511845750002e+01 1.9710853076250000e+01 3.9421706152500002e+00 0 0 0 +61 1 1.7082739332750002e+01 1.7082739332750002e+01 1.3140568717500001e+00 0 0 0 +62 1 1.9710853076250000e+01 1.9710853076250000e+01 1.3140568717500001e+00 0 0 0 +63 1 1.9710853076250000e+01 1.7082739332750002e+01 3.9421706152500002e+00 0 0 0 +64 1 1.7082739332750002e+01 1.9710853076250000e+01 3.9421706152500002e+00 0 0 0 +65 1 1.3140568717500001e+00 1.3140568717500001e+00 6.5702843587500004e+00 0 0 0 +66 1 3.9421706152500002e+00 3.9421706152500002e+00 6.5702843587500004e+00 0 0 0 +67 1 3.9421706152500002e+00 1.3140568717500001e+00 9.1983981022499997e+00 0 0 0 +68 1 1.3140568717500001e+00 3.9421706152500002e+00 9.1983981022499997e+00 0 0 0 +69 1 6.5702843587500004e+00 1.3140568717500001e+00 6.5702843587500004e+00 0 0 0 +70 1 9.1983981022499997e+00 3.9421706152500002e+00 6.5702843587500004e+00 0 0 0 +71 1 9.1983981022499997e+00 1.3140568717500001e+00 9.1983981022499997e+00 0 0 0 +72 1 6.5702843587500004e+00 3.9421706152500002e+00 9.1983981022499997e+00 0 0 0 +73 1 1.1826511845750002e+01 1.3140568717500001e+00 6.5702843587500004e+00 0 0 0 +74 1 1.4454625589250000e+01 3.9421706152500002e+00 6.5702843587500004e+00 0 0 0 +75 1 1.4454625589250000e+01 1.3140568717500001e+00 9.1983981022499997e+00 0 0 0 +76 1 1.1826511845750002e+01 3.9421706152500002e+00 9.1983981022499997e+00 0 0 0 +77 1 1.7082739332750002e+01 1.3140568717500001e+00 6.5702843587500004e+00 0 0 0 +78 1 1.9710853076250000e+01 3.9421706152500002e+00 6.5702843587500004e+00 0 0 0 +79 1 1.9710853076250000e+01 1.3140568717500001e+00 9.1983981022499997e+00 0 0 0 +80 1 1.7082739332750002e+01 3.9421706152500002e+00 9.1983981022499997e+00 0 0 0 +81 1 1.3140568717500001e+00 6.5702843587500004e+00 6.5702843587500004e+00 0 0 0 +82 1 3.9421706152500002e+00 9.1983981022499997e+00 6.5702843587500004e+00 0 0 0 +83 1 3.9421706152500002e+00 6.5702843587500004e+00 9.1983981022499997e+00 0 0 0 +84 1 1.3140568717500001e+00 9.1983981022499997e+00 9.1983981022499997e+00 0 0 0 +85 1 6.5702843587500004e+00 6.5702843587500004e+00 6.5702843587500004e+00 0 0 0 +86 1 9.1983981022499997e+00 9.1983981022499997e+00 6.5702843587500004e+00 0 0 0 +87 1 9.1983981022499997e+00 6.5702843587500004e+00 9.1983981022499997e+00 0 0 0 +88 1 6.5702843587500004e+00 9.1983981022499997e+00 9.1983981022499997e+00 0 0 0 +89 1 1.1826511845750002e+01 6.5702843587500004e+00 6.5702843587500004e+00 0 0 0 +90 1 1.4454625589250000e+01 9.1983981022499997e+00 6.5702843587500004e+00 0 0 0 +91 1 1.4454625589250000e+01 6.5702843587500004e+00 9.1983981022499997e+00 0 0 0 +92 1 1.1826511845750002e+01 9.1983981022499997e+00 9.1983981022499997e+00 0 0 0 +93 1 1.7082739332750002e+01 6.5702843587500004e+00 6.5702843587500004e+00 0 0 0 +94 1 1.9710853076250000e+01 9.1983981022499997e+00 6.5702843587500004e+00 0 0 0 +95 1 1.9710853076250000e+01 6.5702843587500004e+00 9.1983981022499997e+00 0 0 0 +96 1 1.7082739332750002e+01 9.1983981022499997e+00 9.1983981022499997e+00 0 0 0 +97 1 1.3140568717500001e+00 1.1826511845750002e+01 6.5702843587500004e+00 0 0 0 +98 1 3.9421706152500002e+00 1.4454625589250000e+01 6.5702843587500004e+00 0 0 0 +99 1 3.9421706152500002e+00 1.1826511845750002e+01 9.1983981022499997e+00 0 0 0 +100 1 1.3140568717500001e+00 1.4454625589250000e+01 9.1983981022499997e+00 0 0 0 +101 1 6.5702843587500004e+00 1.1826511845750002e+01 6.5702843587500004e+00 0 0 0 +102 1 9.1983981022499997e+00 1.4454625589250000e+01 6.5702843587500004e+00 0 0 0 +103 1 9.1983981022499997e+00 1.1826511845750002e+01 9.1983981022499997e+00 0 0 0 +104 1 6.5702843587500004e+00 1.4454625589250000e+01 9.1983981022499997e+00 0 0 0 +105 1 1.1826511845750002e+01 1.1826511845750002e+01 6.5702843587500004e+00 0 0 0 +106 1 1.4454625589250000e+01 1.4454625589250000e+01 6.5702843587500004e+00 0 0 0 +107 1 1.4454625589250000e+01 1.1826511845750002e+01 9.1983981022499997e+00 0 0 0 +108 1 1.1826511845750002e+01 1.4454625589250000e+01 9.1983981022499997e+00 0 0 0 +109 1 1.7082739332750002e+01 1.1826511845750002e+01 6.5702843587500004e+00 0 0 0 +110 1 1.9710853076250000e+01 1.4454625589250000e+01 6.5702843587500004e+00 0 0 0 +111 1 1.9710853076250000e+01 1.1826511845750002e+01 9.1983981022499997e+00 0 0 0 +112 1 1.7082739332750002e+01 1.4454625589250000e+01 9.1983981022499997e+00 0 0 0 +113 1 1.3140568717500001e+00 1.7082739332750002e+01 6.5702843587500004e+00 0 0 0 +114 1 3.9421706152500002e+00 1.9710853076250000e+01 6.5702843587500004e+00 0 0 0 +115 1 3.9421706152500002e+00 1.7082739332750002e+01 9.1983981022499997e+00 0 0 0 +116 1 1.3140568717500001e+00 1.9710853076250000e+01 9.1983981022499997e+00 0 0 0 +117 1 6.5702843587500004e+00 1.7082739332750002e+01 6.5702843587500004e+00 0 0 0 +118 1 9.1983981022499997e+00 1.9710853076250000e+01 6.5702843587500004e+00 0 0 0 +119 1 9.1983981022499997e+00 1.7082739332750002e+01 9.1983981022499997e+00 0 0 0 +120 1 6.5702843587500004e+00 1.9710853076250000e+01 9.1983981022499997e+00 0 0 0 +121 1 1.1826511845750002e+01 1.7082739332750002e+01 6.5702843587500004e+00 0 0 0 +122 1 1.4454625589250000e+01 1.9710853076250000e+01 6.5702843587500004e+00 0 0 0 +123 1 1.4454625589250000e+01 1.7082739332750002e+01 9.1983981022499997e+00 0 0 0 +124 1 1.1826511845750002e+01 1.9710853076250000e+01 9.1983981022499997e+00 0 0 0 +125 1 1.7082739332750002e+01 1.7082739332750002e+01 6.5702843587500004e+00 0 0 0 +126 1 1.9710853076250000e+01 1.9710853076250000e+01 6.5702843587500004e+00 0 0 0 +127 1 1.9710853076250000e+01 1.7082739332750002e+01 9.1983981022499997e+00 0 0 0 +128 1 1.7082739332750002e+01 1.9710853076250000e+01 9.1983981022499997e+00 0 0 0 +129 1 1.3140568717500001e+00 1.3140568717500001e+00 1.1826511845750002e+01 0 0 0 +130 1 3.9421706152500002e+00 3.9421706152500002e+00 1.1826511845750002e+01 0 0 0 +131 1 3.9421706152500002e+00 1.3140568717500001e+00 1.4454625589250000e+01 0 0 0 +132 1 1.3140568717500001e+00 3.9421706152500002e+00 1.4454625589250000e+01 0 0 0 +133 1 6.5702843587500004e+00 1.3140568717500001e+00 1.1826511845750002e+01 0 0 0 +134 1 9.1983981022499997e+00 3.9421706152500002e+00 1.1826511845750002e+01 0 0 0 +135 1 9.1983981022499997e+00 1.3140568717500001e+00 1.4454625589250000e+01 0 0 0 +136 1 6.5702843587500004e+00 3.9421706152500002e+00 1.4454625589250000e+01 0 0 0 +137 1 1.1826511845750002e+01 1.3140568717500001e+00 1.1826511845750002e+01 0 0 0 +138 1 1.4454625589250000e+01 3.9421706152500002e+00 1.1826511845750002e+01 0 0 0 +139 1 1.4454625589250000e+01 1.3140568717500001e+00 1.4454625589250000e+01 0 0 0 +140 1 1.1826511845750002e+01 3.9421706152500002e+00 1.4454625589250000e+01 0 0 0 +141 1 1.7082739332750002e+01 1.3140568717500001e+00 1.1826511845750002e+01 0 0 0 +142 1 1.9710853076250000e+01 3.9421706152500002e+00 1.1826511845750002e+01 0 0 0 +143 1 1.9710853076250000e+01 1.3140568717500001e+00 1.4454625589250000e+01 0 0 0 +144 1 1.7082739332750002e+01 3.9421706152500002e+00 1.4454625589250000e+01 0 0 0 +145 1 1.3140568717500001e+00 6.5702843587500004e+00 1.1826511845750002e+01 0 0 0 +146 1 3.9421706152500002e+00 9.1983981022499997e+00 1.1826511845750002e+01 0 0 0 +147 1 3.9421706152500002e+00 6.5702843587500004e+00 1.4454625589250000e+01 0 0 0 +148 1 1.3140568717500001e+00 9.1983981022499997e+00 1.4454625589250000e+01 0 0 0 +149 1 6.5702843587500004e+00 6.5702843587500004e+00 1.1826511845750002e+01 0 0 0 +150 1 9.1983981022499997e+00 9.1983981022499997e+00 1.1826511845750002e+01 0 0 0 +151 1 9.1983981022499997e+00 6.5702843587500004e+00 1.4454625589250000e+01 0 0 0 +152 1 6.5702843587500004e+00 9.1983981022499997e+00 1.4454625589250000e+01 0 0 0 +153 1 1.1826511845750002e+01 6.5702843587500004e+00 1.1826511845750002e+01 0 0 0 +154 1 1.4454625589250000e+01 9.1983981022499997e+00 1.1826511845750002e+01 0 0 0 +155 1 1.4454625589250000e+01 6.5702843587500004e+00 1.4454625589250000e+01 0 0 0 +156 1 1.1826511845750002e+01 9.1983981022499997e+00 1.4454625589250000e+01 0 0 0 +157 1 1.7082739332750002e+01 6.5702843587500004e+00 1.1826511845750002e+01 0 0 0 +158 1 1.9710853076250000e+01 9.1983981022499997e+00 1.1826511845750002e+01 0 0 0 +159 1 1.9710853076250000e+01 6.5702843587500004e+00 1.4454625589250000e+01 0 0 0 +160 1 1.7082739332750002e+01 9.1983981022499997e+00 1.4454625589250000e+01 0 0 0 +161 1 1.3140568717500001e+00 1.1826511845750002e+01 1.1826511845750002e+01 0 0 0 +162 1 3.9421706152500002e+00 1.4454625589250000e+01 1.1826511845750002e+01 0 0 0 +163 1 3.9421706152500002e+00 1.1826511845750002e+01 1.4454625589250000e+01 0 0 0 +164 1 1.3140568717500001e+00 1.4454625589250000e+01 1.4454625589250000e+01 0 0 0 +165 1 6.5702843587500004e+00 1.1826511845750002e+01 1.1826511845750002e+01 0 0 0 +166 1 9.1983981022499997e+00 1.4454625589250000e+01 1.1826511845750002e+01 0 0 0 +167 1 9.1983981022499997e+00 1.1826511845750002e+01 1.4454625589250000e+01 0 0 0 +168 1 6.5702843587500004e+00 1.4454625589250000e+01 1.4454625589250000e+01 0 0 0 +169 1 1.1826511845750002e+01 1.1826511845750002e+01 1.1826511845750002e+01 0 0 0 +170 1 1.4454625589250000e+01 1.4454625589250000e+01 1.1826511845750002e+01 0 0 0 +171 1 1.4454625589250000e+01 1.1826511845750002e+01 1.4454625589250000e+01 0 0 0 +172 1 1.1826511845750002e+01 1.4454625589250000e+01 1.4454625589250000e+01 0 0 0 +173 1 1.7082739332750002e+01 1.1826511845750002e+01 1.1826511845750002e+01 0 0 0 +174 1 1.9710853076250000e+01 1.4454625589250000e+01 1.1826511845750002e+01 0 0 0 +175 1 1.9710853076250000e+01 1.1826511845750002e+01 1.4454625589250000e+01 0 0 0 +176 1 1.7082739332750002e+01 1.4454625589250000e+01 1.4454625589250000e+01 0 0 0 +177 1 1.3140568717500001e+00 1.7082739332750002e+01 1.1826511845750002e+01 0 0 0 +178 1 3.9421706152500002e+00 1.9710853076250000e+01 1.1826511845750002e+01 0 0 0 +179 1 3.9421706152500002e+00 1.7082739332750002e+01 1.4454625589250000e+01 0 0 0 +180 1 1.3140568717500001e+00 1.9710853076250000e+01 1.4454625589250000e+01 0 0 0 +181 1 6.5702843587500004e+00 1.7082739332750002e+01 1.1826511845750002e+01 0 0 0 +182 1 9.1983981022499997e+00 1.9710853076250000e+01 1.1826511845750002e+01 0 0 0 +183 1 9.1983981022499997e+00 1.7082739332750002e+01 1.4454625589250000e+01 0 0 0 +184 1 6.5702843587500004e+00 1.9710853076250000e+01 1.4454625589250000e+01 0 0 0 +185 1 1.1826511845750002e+01 1.7082739332750002e+01 1.1826511845750002e+01 0 0 0 +186 1 1.4454625589250000e+01 1.9710853076250000e+01 1.1826511845750002e+01 0 0 0 +187 1 1.4454625589250000e+01 1.7082739332750002e+01 1.4454625589250000e+01 0 0 0 +188 1 1.1826511845750002e+01 1.9710853076250000e+01 1.4454625589250000e+01 0 0 0 +189 1 1.7082739332750002e+01 1.7082739332750002e+01 1.1826511845750002e+01 0 0 0 +190 1 1.9710853076250000e+01 1.9710853076250000e+01 1.1826511845750002e+01 0 0 0 +191 1 1.9710853076250000e+01 1.7082739332750002e+01 1.4454625589250000e+01 0 0 0 +192 1 1.7082739332750002e+01 1.9710853076250000e+01 1.4454625589250000e+01 0 0 0 +193 1 1.3140568717500001e+00 1.3140568717500001e+00 1.7082739332750002e+01 0 0 0 +194 1 3.9421706152500002e+00 3.9421706152500002e+00 1.7082739332750002e+01 0 0 0 +195 1 3.9421706152500002e+00 1.3140568717500001e+00 1.9710853076250000e+01 0 0 0 +196 1 1.3140568717500001e+00 3.9421706152500002e+00 1.9710853076250000e+01 0 0 0 +197 1 6.5702843587500004e+00 1.3140568717500001e+00 1.7082739332750002e+01 0 0 0 +198 1 9.1983981022499997e+00 3.9421706152500002e+00 1.7082739332750002e+01 0 0 0 +199 1 9.1983981022499997e+00 1.3140568717500001e+00 1.9710853076250000e+01 0 0 0 +200 1 6.5702843587500004e+00 3.9421706152500002e+00 1.9710853076250000e+01 0 0 0 +201 1 1.1826511845750002e+01 1.3140568717500001e+00 1.7082739332750002e+01 0 0 0 +202 1 1.4454625589250000e+01 3.9421706152500002e+00 1.7082739332750002e+01 0 0 0 +203 1 1.4454625589250000e+01 1.3140568717500001e+00 1.9710853076250000e+01 0 0 0 +204 1 1.1826511845750002e+01 3.9421706152500002e+00 1.9710853076250000e+01 0 0 0 +205 1 1.7082739332750002e+01 1.3140568717500001e+00 1.7082739332750002e+01 0 0 0 +206 1 1.9710853076250000e+01 3.9421706152500002e+00 1.7082739332750002e+01 0 0 0 +207 1 1.9710853076250000e+01 1.3140568717500001e+00 1.9710853076250000e+01 0 0 0 +208 1 1.7082739332750002e+01 3.9421706152500002e+00 1.9710853076250000e+01 0 0 0 +209 1 1.3140568717500001e+00 6.5702843587500004e+00 1.7082739332750002e+01 0 0 0 +210 1 3.9421706152500002e+00 9.1983981022499997e+00 1.7082739332750002e+01 0 0 0 +211 1 3.9421706152500002e+00 6.5702843587500004e+00 1.9710853076250000e+01 0 0 0 +212 1 1.3140568717500001e+00 9.1983981022499997e+00 1.9710853076250000e+01 0 0 0 +213 1 6.5702843587500004e+00 6.5702843587500004e+00 1.7082739332750002e+01 0 0 0 +214 1 9.1983981022499997e+00 9.1983981022499997e+00 1.7082739332750002e+01 0 0 0 +215 1 9.1983981022499997e+00 6.5702843587500004e+00 1.9710853076250000e+01 0 0 0 +216 1 6.5702843587500004e+00 9.1983981022499997e+00 1.9710853076250000e+01 0 0 0 +217 1 1.1826511845750002e+01 6.5702843587500004e+00 1.7082739332750002e+01 0 0 0 +218 1 1.4454625589250000e+01 9.1983981022499997e+00 1.7082739332750002e+01 0 0 0 +219 1 1.4454625589250000e+01 6.5702843587500004e+00 1.9710853076250000e+01 0 0 0 +220 1 1.1826511845750002e+01 9.1983981022499997e+00 1.9710853076250000e+01 0 0 0 +221 1 1.7082739332750002e+01 6.5702843587500004e+00 1.7082739332750002e+01 0 0 0 +222 1 1.9710853076250000e+01 9.1983981022499997e+00 1.7082739332750002e+01 0 0 0 +223 1 1.9710853076250000e+01 6.5702843587500004e+00 1.9710853076250000e+01 0 0 0 +224 1 1.7082739332750002e+01 9.1983981022499997e+00 1.9710853076250000e+01 0 0 0 +225 1 1.3140568717500001e+00 1.1826511845750002e+01 1.7082739332750002e+01 0 0 0 +226 1 3.9421706152500002e+00 1.4454625589250000e+01 1.7082739332750002e+01 0 0 0 +227 1 3.9421706152500002e+00 1.1826511845750002e+01 1.9710853076250000e+01 0 0 0 +228 1 1.3140568717500001e+00 1.4454625589250000e+01 1.9710853076250000e+01 0 0 0 +229 1 6.5702843587500004e+00 1.1826511845750002e+01 1.7082739332750002e+01 0 0 0 +230 1 9.1983981022499997e+00 1.4454625589250000e+01 1.7082739332750002e+01 0 0 0 +231 1 9.1983981022499997e+00 1.1826511845750002e+01 1.9710853076250000e+01 0 0 0 +232 1 6.5702843587500004e+00 1.4454625589250000e+01 1.9710853076250000e+01 0 0 0 +233 1 1.1826511845750002e+01 1.1826511845750002e+01 1.7082739332750002e+01 0 0 0 +234 1 1.4454625589250000e+01 1.4454625589250000e+01 1.7082739332750002e+01 0 0 0 +235 1 1.4454625589250000e+01 1.1826511845750002e+01 1.9710853076250000e+01 0 0 0 +236 1 1.1826511845750002e+01 1.4454625589250000e+01 1.9710853076250000e+01 0 0 0 +237 1 1.7082739332750002e+01 1.1826511845750002e+01 1.7082739332750002e+01 0 0 0 +238 1 1.9710853076250000e+01 1.4454625589250000e+01 1.7082739332750002e+01 0 0 0 +239 1 1.9710853076250000e+01 1.1826511845750002e+01 1.9710853076250000e+01 0 0 0 +240 1 1.7082739332750002e+01 1.4454625589250000e+01 1.9710853076250000e+01 0 0 0 +241 1 1.3140568717500001e+00 1.7082739332750002e+01 1.7082739332750002e+01 0 0 0 +242 1 3.9421706152500002e+00 1.9710853076250000e+01 1.7082739332750002e+01 0 0 0 +243 1 3.9421706152500002e+00 1.7082739332750002e+01 1.9710853076250000e+01 0 0 0 +244 1 1.3140568717500001e+00 1.9710853076250000e+01 1.9710853076250000e+01 0 0 0 +245 1 6.5702843587500004e+00 1.7082739332750002e+01 1.7082739332750002e+01 0 0 0 +246 1 9.1983981022499997e+00 1.9710853076250000e+01 1.7082739332750002e+01 0 0 0 +247 1 9.1983981022499997e+00 1.7082739332750002e+01 1.9710853076250000e+01 0 0 0 +248 1 6.5702843587500004e+00 1.9710853076250000e+01 1.9710853076250000e+01 0 0 0 +249 1 1.1826511845750002e+01 1.7082739332750002e+01 1.7082739332750002e+01 0 0 0 +250 1 1.4454625589250000e+01 1.9710853076250000e+01 1.7082739332750002e+01 0 0 0 +251 1 1.4454625589250000e+01 1.7082739332750002e+01 1.9710853076250000e+01 0 0 0 +252 1 1.1826511845750002e+01 1.9710853076250000e+01 1.9710853076250000e+01 0 0 0 +253 1 1.7082739332750002e+01 1.7082739332750002e+01 1.7082739332750002e+01 0 0 0 +254 1 1.9710853076250000e+01 1.9710853076250000e+01 1.7082739332750002e+01 0 0 0 +255 1 1.9710853076250000e+01 1.7082739332750002e+01 1.9710853076250000e+01 0 0 0 +256 1 1.7082739332750002e+01 1.9710853076250000e+01 1.9710853076250000e+01 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/USER/atc/cauchy_born/read_xref_1.init b/examples/USER/atc/cauchy_born/read_xref_1.init new file mode 100644 index 0000000000..60b676543e --- /dev/null +++ b/examples/USER/atc/cauchy_born/read_xref_1.init @@ -0,0 +1,531 @@ +LAMMPS data file from restart file: timestep = 1, procs = 1 + +256 atoms + +1 atom types + +-1.0512454974000009e+00 2.2076155445400001e+01 xlo xhi +-1.0512454974000009e+00 2.2076155445400001e+01 ylo yhi +-1.0512454974000009e+00 2.2076155445400001e+01 zlo zhi + +Masses + +1 39.95 + +Atoms + +1 1 3.9421706152499914e-01 3.9421706152499914e-01 3.9421706152499914e-01 0 0 0 +2 1 3.2851421793749993e+00 3.2851421793749993e+00 3.9421706152499914e-01 0 0 0 +3 1 3.2851421793749993e+00 3.9421706152499914e-01 3.2851421793749993e+00 0 0 0 +4 1 3.9421706152499914e-01 3.2851421793749993e+00 3.2851421793749993e+00 0 0 0 +5 1 6.1760672972249999e+00 3.9421706152499914e-01 3.9421706152499914e-01 0 0 0 +6 1 9.0669924150749992e+00 3.2851421793749993e+00 3.9421706152499914e-01 0 0 0 +7 1 9.0669924150749992e+00 3.9421706152499914e-01 3.2851421793749993e+00 0 0 0 +8 1 6.1760672972249999e+00 3.2851421793749993e+00 3.2851421793749993e+00 0 0 0 +9 1 1.1957917532925000e+01 3.9421706152499914e-01 3.9421706152499914e-01 0 0 0 +10 1 1.4848842650774998e+01 3.2851421793749993e+00 3.9421706152499914e-01 0 0 0 +11 1 1.4848842650774998e+01 3.9421706152499914e-01 3.2851421793749993e+00 0 0 0 +12 1 1.1957917532925000e+01 3.2851421793749993e+00 3.2851421793749993e+00 0 0 0 +13 1 1.7739767768625001e+01 3.9421706152499914e-01 3.9421706152499914e-01 0 0 0 +14 1 2.0630692886474996e+01 3.2851421793749993e+00 3.9421706152499914e-01 0 0 0 +15 1 2.0630692886474996e+01 3.9421706152499914e-01 3.2851421793749993e+00 0 0 0 +16 1 1.7739767768625001e+01 3.2851421793749993e+00 3.2851421793749993e+00 0 0 0 +17 1 3.9421706152499914e-01 6.1760672972249999e+00 3.9421706152499914e-01 0 0 0 +18 1 3.2851421793749993e+00 9.0669924150749992e+00 3.9421706152499914e-01 0 0 0 +19 1 3.2851421793749993e+00 6.1760672972249999e+00 3.2851421793749993e+00 0 0 0 +20 1 3.9421706152499914e-01 9.0669924150749992e+00 3.2851421793749993e+00 0 0 0 +21 1 6.1760672972249999e+00 6.1760672972249999e+00 3.9421706152499914e-01 0 0 0 +22 1 9.0669924150749992e+00 9.0669924150749992e+00 3.9421706152499914e-01 0 0 0 +23 1 9.0669924150749992e+00 6.1760672972249999e+00 3.2851421793749993e+00 0 0 0 +24 1 6.1760672972249999e+00 9.0669924150749992e+00 3.2851421793749993e+00 0 0 0 +25 1 1.1957917532925000e+01 6.1760672972249999e+00 3.9421706152499914e-01 0 0 0 +26 1 1.4848842650774998e+01 9.0669924150749992e+00 3.9421706152499914e-01 0 0 0 +27 1 1.4848842650774998e+01 6.1760672972249999e+00 3.2851421793749993e+00 0 0 0 +28 1 1.1957917532925000e+01 9.0669924150749992e+00 3.2851421793749993e+00 0 0 0 +29 1 1.7739767768625001e+01 6.1760672972249999e+00 3.9421706152499914e-01 0 0 0 +30 1 2.0630692886474996e+01 9.0669924150749992e+00 3.9421706152499914e-01 0 0 0 +31 1 2.0630692886474996e+01 6.1760672972249999e+00 3.2851421793749993e+00 0 0 0 +32 1 1.7739767768625001e+01 9.0669924150749992e+00 3.2851421793749993e+00 0 0 0 +33 1 3.9421706152499914e-01 1.1957917532925000e+01 3.9421706152499914e-01 0 0 0 +34 1 3.2851421793749993e+00 1.4848842650774998e+01 3.9421706152499914e-01 0 0 0 +35 1 3.2851421793749993e+00 1.1957917532925000e+01 3.2851421793749993e+00 0 0 0 +36 1 3.9421706152499914e-01 1.4848842650774998e+01 3.2851421793749993e+00 0 0 0 +37 1 6.1760672972249999e+00 1.1957917532925000e+01 3.9421706152499914e-01 0 0 0 +38 1 9.0669924150749992e+00 1.4848842650774998e+01 3.9421706152499914e-01 0 0 0 +39 1 9.0669924150749992e+00 1.1957917532925000e+01 3.2851421793749993e+00 0 0 0 +40 1 6.1760672972249999e+00 1.4848842650774998e+01 3.2851421793749993e+00 0 0 0 +41 1 1.1957917532925000e+01 1.1957917532925000e+01 3.9421706152499914e-01 0 0 0 +42 1 1.4848842650774998e+01 1.4848842650774998e+01 3.9421706152499914e-01 0 0 0 +43 1 1.4848842650774998e+01 1.1957917532925000e+01 3.2851421793749993e+00 0 0 0 +44 1 1.1957917532925000e+01 1.4848842650774998e+01 3.2851421793749993e+00 0 0 0 +45 1 1.7739767768625001e+01 1.1957917532925000e+01 3.9421706152499914e-01 0 0 0 +46 1 2.0630692886474996e+01 1.4848842650774998e+01 3.9421706152499914e-01 0 0 0 +47 1 2.0630692886474996e+01 1.1957917532925000e+01 3.2851421793749993e+00 0 0 0 +48 1 1.7739767768625001e+01 1.4848842650774998e+01 3.2851421793749993e+00 0 0 0 +49 1 3.9421706152499914e-01 1.7739767768625001e+01 3.9421706152499914e-01 0 0 0 +50 1 3.2851421793749993e+00 2.0630692886474996e+01 3.9421706152499914e-01 0 0 0 +51 1 3.2851421793749993e+00 1.7739767768625001e+01 3.2851421793749993e+00 0 0 0 +52 1 3.9421706152499914e-01 2.0630692886474996e+01 3.2851421793749993e+00 0 0 0 +53 1 6.1760672972249999e+00 1.7739767768625001e+01 3.9421706152499914e-01 0 0 0 +54 1 9.0669924150749992e+00 2.0630692886474996e+01 3.9421706152499914e-01 0 0 0 +55 1 9.0669924150749992e+00 1.7739767768625001e+01 3.2851421793749993e+00 0 0 0 +56 1 6.1760672972249999e+00 2.0630692886474996e+01 3.2851421793749993e+00 0 0 0 +57 1 1.1957917532925000e+01 1.7739767768625001e+01 3.9421706152499914e-01 0 0 0 +58 1 1.4848842650774998e+01 2.0630692886474996e+01 3.9421706152499914e-01 0 0 0 +59 1 1.4848842650774998e+01 1.7739767768625001e+01 3.2851421793749993e+00 0 0 0 +60 1 1.1957917532925000e+01 2.0630692886474996e+01 3.2851421793749993e+00 0 0 0 +61 1 1.7739767768625001e+01 1.7739767768625001e+01 3.9421706152499914e-01 0 0 0 +62 1 2.0630692886474996e+01 2.0630692886474996e+01 3.9421706152499914e-01 0 0 0 +63 1 2.0630692886474996e+01 1.7739767768625001e+01 3.2851421793749993e+00 0 0 0 +64 1 1.7739767768625001e+01 2.0630692886474996e+01 3.2851421793749993e+00 0 0 0 +65 1 3.9421706152499914e-01 3.9421706152499914e-01 6.1760672972249999e+00 0 0 0 +66 1 3.2851421793749993e+00 3.2851421793749993e+00 6.1760672972249999e+00 0 0 0 +67 1 3.2851421793749993e+00 3.9421706152499914e-01 9.0669924150749992e+00 0 0 0 +68 1 3.9421706152499914e-01 3.2851421793749993e+00 9.0669924150749992e+00 0 0 0 +69 1 6.1760672972249999e+00 3.9421706152499914e-01 6.1760672972249999e+00 0 0 0 +70 1 9.0669924150749992e+00 3.2851421793749993e+00 6.1760672972249999e+00 0 0 0 +71 1 9.0669924150749992e+00 3.9421706152499914e-01 9.0669924150749992e+00 0 0 0 +72 1 6.1760672972249999e+00 3.2851421793749993e+00 9.0669924150749992e+00 0 0 0 +73 1 1.1957917532925000e+01 3.9421706152499914e-01 6.1760672972249999e+00 0 0 0 +74 1 1.4848842650774998e+01 3.2851421793749993e+00 6.1760672972249999e+00 0 0 0 +75 1 1.4848842650774998e+01 3.9421706152499914e-01 9.0669924150749992e+00 0 0 0 +76 1 1.1957917532925000e+01 3.2851421793749993e+00 9.0669924150749992e+00 0 0 0 +77 1 1.7739767768625001e+01 3.9421706152499914e-01 6.1760672972249999e+00 0 0 0 +78 1 2.0630692886474996e+01 3.2851421793749993e+00 6.1760672972249999e+00 0 0 0 +79 1 2.0630692886474996e+01 3.9421706152499914e-01 9.0669924150749992e+00 0 0 0 +80 1 1.7739767768625001e+01 3.2851421793749993e+00 9.0669924150749992e+00 0 0 0 +81 1 3.9421706152499914e-01 6.1760672972249999e+00 6.1760672972249999e+00 0 0 0 +82 1 3.2851421793749993e+00 9.0669924150749992e+00 6.1760672972249999e+00 0 0 0 +83 1 3.2851421793749993e+00 6.1760672972249999e+00 9.0669924150749992e+00 0 0 0 +84 1 3.9421706152499914e-01 9.0669924150749992e+00 9.0669924150749992e+00 0 0 0 +85 1 6.1760672972249999e+00 6.1760672972249999e+00 6.1760672972249999e+00 0 0 0 +86 1 9.0669924150749992e+00 9.0669924150749992e+00 6.1760672972249999e+00 0 0 0 +87 1 9.0669924150749992e+00 6.1760672972249999e+00 9.0669924150749992e+00 0 0 0 +88 1 6.1760672972249999e+00 9.0669924150749992e+00 9.0669924150749992e+00 0 0 0 +89 1 1.1957917532925000e+01 6.1760672972249999e+00 6.1760672972249999e+00 0 0 0 +90 1 1.4848842650774998e+01 9.0669924150749992e+00 6.1760672972249999e+00 0 0 0 +91 1 1.4848842650774998e+01 6.1760672972249999e+00 9.0669924150749992e+00 0 0 0 +92 1 1.1957917532925000e+01 9.0669924150749992e+00 9.0669924150749992e+00 0 0 0 +93 1 1.7739767768625001e+01 6.1760672972249999e+00 6.1760672972249999e+00 0 0 0 +94 1 2.0630692886474996e+01 9.0669924150749992e+00 6.1760672972249999e+00 0 0 0 +95 1 2.0630692886474996e+01 6.1760672972249999e+00 9.0669924150749992e+00 0 0 0 +96 1 1.7739767768625001e+01 9.0669924150749992e+00 9.0669924150749992e+00 0 0 0 +97 1 3.9421706152499914e-01 1.1957917532925000e+01 6.1760672972249999e+00 0 0 0 +98 1 3.2851421793749993e+00 1.4848842650774998e+01 6.1760672972249999e+00 0 0 0 +99 1 3.2851421793749993e+00 1.1957917532925000e+01 9.0669924150749992e+00 0 0 0 +100 1 3.9421706152499914e-01 1.4848842650774998e+01 9.0669924150749992e+00 0 0 0 +101 1 6.1760672972249999e+00 1.1957917532925000e+01 6.1760672972249999e+00 0 0 0 +102 1 9.0669924150749992e+00 1.4848842650774998e+01 6.1760672972249999e+00 0 0 0 +103 1 9.0669924150749992e+00 1.1957917532925000e+01 9.0669924150749992e+00 0 0 0 +104 1 6.1760672972249999e+00 1.4848842650774998e+01 9.0669924150749992e+00 0 0 0 +105 1 1.1957917532925000e+01 1.1957917532925000e+01 6.1760672972249999e+00 0 0 0 +106 1 1.4848842650774998e+01 1.4848842650774998e+01 6.1760672972249999e+00 0 0 0 +107 1 1.4848842650774998e+01 1.1957917532925000e+01 9.0669924150749992e+00 0 0 0 +108 1 1.1957917532925000e+01 1.4848842650774998e+01 9.0669924150749992e+00 0 0 0 +109 1 1.7739767768625001e+01 1.1957917532925000e+01 6.1760672972249999e+00 0 0 0 +110 1 2.0630692886474996e+01 1.4848842650774998e+01 6.1760672972249999e+00 0 0 0 +111 1 2.0630692886474996e+01 1.1957917532925000e+01 9.0669924150749992e+00 0 0 0 +112 1 1.7739767768625001e+01 1.4848842650774998e+01 9.0669924150749992e+00 0 0 0 +113 1 3.9421706152499914e-01 1.7739767768625001e+01 6.1760672972249999e+00 0 0 0 +114 1 3.2851421793749993e+00 2.0630692886474996e+01 6.1760672972249999e+00 0 0 0 +115 1 3.2851421793749993e+00 1.7739767768625001e+01 9.0669924150749992e+00 0 0 0 +116 1 3.9421706152499914e-01 2.0630692886474996e+01 9.0669924150749992e+00 0 0 0 +117 1 6.1760672972249999e+00 1.7739767768625001e+01 6.1760672972249999e+00 0 0 0 +118 1 9.0669924150749992e+00 2.0630692886474996e+01 6.1760672972249999e+00 0 0 0 +119 1 9.0669924150749992e+00 1.7739767768625001e+01 9.0669924150749992e+00 0 0 0 +120 1 6.1760672972249999e+00 2.0630692886474996e+01 9.0669924150749992e+00 0 0 0 +121 1 1.1957917532925000e+01 1.7739767768625001e+01 6.1760672972249999e+00 0 0 0 +122 1 1.4848842650774998e+01 2.0630692886474996e+01 6.1760672972249999e+00 0 0 0 +123 1 1.4848842650774998e+01 1.7739767768625001e+01 9.0669924150749992e+00 0 0 0 +124 1 1.1957917532925000e+01 2.0630692886474996e+01 9.0669924150749992e+00 0 0 0 +125 1 1.7739767768625001e+01 1.7739767768625001e+01 6.1760672972249999e+00 0 0 0 +126 1 2.0630692886474996e+01 2.0630692886474996e+01 6.1760672972249999e+00 0 0 0 +127 1 2.0630692886474996e+01 1.7739767768625001e+01 9.0669924150749992e+00 0 0 0 +128 1 1.7739767768625001e+01 2.0630692886474996e+01 9.0669924150749992e+00 0 0 0 +129 1 3.9421706152499914e-01 3.9421706152499914e-01 1.1957917532925000e+01 0 0 0 +130 1 3.2851421793749993e+00 3.2851421793749993e+00 1.1957917532925000e+01 0 0 0 +131 1 3.2851421793749993e+00 3.9421706152499914e-01 1.4848842650774998e+01 0 0 0 +132 1 3.9421706152499914e-01 3.2851421793749993e+00 1.4848842650774998e+01 0 0 0 +133 1 6.1760672972249999e+00 3.9421706152499914e-01 1.1957917532925000e+01 0 0 0 +134 1 9.0669924150749992e+00 3.2851421793749993e+00 1.1957917532925000e+01 0 0 0 +135 1 9.0669924150749992e+00 3.9421706152499914e-01 1.4848842650774998e+01 0 0 0 +136 1 6.1760672972249999e+00 3.2851421793749993e+00 1.4848842650774998e+01 0 0 0 +137 1 1.1957917532925000e+01 3.9421706152499914e-01 1.1957917532925000e+01 0 0 0 +138 1 1.4848842650774998e+01 3.2851421793749993e+00 1.1957917532925000e+01 0 0 0 +139 1 1.4848842650774998e+01 3.9421706152499914e-01 1.4848842650774998e+01 0 0 0 +140 1 1.1957917532925000e+01 3.2851421793749993e+00 1.4848842650774998e+01 0 0 0 +141 1 1.7739767768625001e+01 3.9421706152499914e-01 1.1957917532925000e+01 0 0 0 +142 1 2.0630692886474996e+01 3.2851421793749993e+00 1.1957917532925000e+01 0 0 0 +143 1 2.0630692886474996e+01 3.9421706152499914e-01 1.4848842650774998e+01 0 0 0 +144 1 1.7739767768625001e+01 3.2851421793749993e+00 1.4848842650774998e+01 0 0 0 +145 1 3.9421706152499914e-01 6.1760672972249999e+00 1.1957917532925000e+01 0 0 0 +146 1 3.2851421793749993e+00 9.0669924150749992e+00 1.1957917532925000e+01 0 0 0 +147 1 3.2851421793749993e+00 6.1760672972249999e+00 1.4848842650774998e+01 0 0 0 +148 1 3.9421706152499914e-01 9.0669924150749992e+00 1.4848842650774998e+01 0 0 0 +149 1 6.1760672972249999e+00 6.1760672972249999e+00 1.1957917532925000e+01 0 0 0 +150 1 9.0669924150749992e+00 9.0669924150749992e+00 1.1957917532925000e+01 0 0 0 +151 1 9.0669924150749992e+00 6.1760672972249999e+00 1.4848842650774998e+01 0 0 0 +152 1 6.1760672972249999e+00 9.0669924150749992e+00 1.4848842650774998e+01 0 0 0 +153 1 1.1957917532925000e+01 6.1760672972249999e+00 1.1957917532925000e+01 0 0 0 +154 1 1.4848842650774998e+01 9.0669924150749992e+00 1.1957917532925000e+01 0 0 0 +155 1 1.4848842650774998e+01 6.1760672972249999e+00 1.4848842650774998e+01 0 0 0 +156 1 1.1957917532925000e+01 9.0669924150749992e+00 1.4848842650774998e+01 0 0 0 +157 1 1.7739767768625001e+01 6.1760672972249999e+00 1.1957917532925000e+01 0 0 0 +158 1 2.0630692886474996e+01 9.0669924150749992e+00 1.1957917532925000e+01 0 0 0 +159 1 2.0630692886474996e+01 6.1760672972249999e+00 1.4848842650774998e+01 0 0 0 +160 1 1.7739767768625001e+01 9.0669924150749992e+00 1.4848842650774998e+01 0 0 0 +161 1 3.9421706152499914e-01 1.1957917532925000e+01 1.1957917532925000e+01 0 0 0 +162 1 3.2851421793749993e+00 1.4848842650774998e+01 1.1957917532925000e+01 0 0 0 +163 1 3.2851421793749993e+00 1.1957917532925000e+01 1.4848842650774998e+01 0 0 0 +164 1 3.9421706152499914e-01 1.4848842650774998e+01 1.4848842650774998e+01 0 0 0 +165 1 6.1760672972249999e+00 1.1957917532925000e+01 1.1957917532925000e+01 0 0 0 +166 1 9.0669924150749992e+00 1.4848842650774998e+01 1.1957917532925000e+01 0 0 0 +167 1 9.0669924150749992e+00 1.1957917532925000e+01 1.4848842650774998e+01 0 0 0 +168 1 6.1760672972249999e+00 1.4848842650774998e+01 1.4848842650774998e+01 0 0 0 +169 1 1.1957917532925000e+01 1.1957917532925000e+01 1.1957917532925000e+01 0 0 0 +170 1 1.4848842650774998e+01 1.4848842650774998e+01 1.1957917532925000e+01 0 0 0 +171 1 1.4848842650774998e+01 1.1957917532925000e+01 1.4848842650774998e+01 0 0 0 +172 1 1.1957917532925000e+01 1.4848842650774998e+01 1.4848842650774998e+01 0 0 0 +173 1 1.7739767768625001e+01 1.1957917532925000e+01 1.1957917532925000e+01 0 0 0 +174 1 2.0630692886474996e+01 1.4848842650774998e+01 1.1957917532925000e+01 0 0 0 +175 1 2.0630692886474996e+01 1.1957917532925000e+01 1.4848842650774998e+01 0 0 0 +176 1 1.7739767768625001e+01 1.4848842650774998e+01 1.4848842650774998e+01 0 0 0 +177 1 3.9421706152499914e-01 1.7739767768625001e+01 1.1957917532925000e+01 0 0 0 +178 1 3.2851421793749993e+00 2.0630692886474996e+01 1.1957917532925000e+01 0 0 0 +179 1 3.2851421793749993e+00 1.7739767768625001e+01 1.4848842650774998e+01 0 0 0 +180 1 3.9421706152499914e-01 2.0630692886474996e+01 1.4848842650774998e+01 0 0 0 +181 1 6.1760672972249999e+00 1.7739767768625001e+01 1.1957917532925000e+01 0 0 0 +182 1 9.0669924150749992e+00 2.0630692886474996e+01 1.1957917532925000e+01 0 0 0 +183 1 9.0669924150749992e+00 1.7739767768625001e+01 1.4848842650774998e+01 0 0 0 +184 1 6.1760672972249999e+00 2.0630692886474996e+01 1.4848842650774998e+01 0 0 0 +185 1 1.1957917532925000e+01 1.7739767768625001e+01 1.1957917532925000e+01 0 0 0 +186 1 1.4848842650774998e+01 2.0630692886474996e+01 1.1957917532925000e+01 0 0 0 +187 1 1.4848842650774998e+01 1.7739767768625001e+01 1.4848842650774998e+01 0 0 0 +188 1 1.1957917532925000e+01 2.0630692886474996e+01 1.4848842650774998e+01 0 0 0 +189 1 1.7739767768625001e+01 1.7739767768625001e+01 1.1957917532925000e+01 0 0 0 +190 1 2.0630692886474996e+01 2.0630692886474996e+01 1.1957917532925000e+01 0 0 0 +191 1 2.0630692886474996e+01 1.7739767768625001e+01 1.4848842650774998e+01 0 0 0 +192 1 1.7739767768625001e+01 2.0630692886474996e+01 1.4848842650774998e+01 0 0 0 +193 1 3.9421706152499914e-01 3.9421706152499914e-01 1.7739767768625001e+01 0 0 0 +194 1 3.2851421793749993e+00 3.2851421793749993e+00 1.7739767768625001e+01 0 0 0 +195 1 3.2851421793749993e+00 3.9421706152499914e-01 2.0630692886474996e+01 0 0 0 +196 1 3.9421706152499914e-01 3.2851421793749993e+00 2.0630692886474996e+01 0 0 0 +197 1 6.1760672972249999e+00 3.9421706152499914e-01 1.7739767768625001e+01 0 0 0 +198 1 9.0669924150749992e+00 3.2851421793749993e+00 1.7739767768625001e+01 0 0 0 +199 1 9.0669924150749992e+00 3.9421706152499914e-01 2.0630692886474996e+01 0 0 0 +200 1 6.1760672972249999e+00 3.2851421793749993e+00 2.0630692886474996e+01 0 0 0 +201 1 1.1957917532925000e+01 3.9421706152499914e-01 1.7739767768625001e+01 0 0 0 +202 1 1.4848842650774998e+01 3.2851421793749993e+00 1.7739767768625001e+01 0 0 0 +203 1 1.4848842650774998e+01 3.9421706152499914e-01 2.0630692886474996e+01 0 0 0 +204 1 1.1957917532925000e+01 3.2851421793749993e+00 2.0630692886474996e+01 0 0 0 +205 1 1.7739767768625001e+01 3.9421706152499914e-01 1.7739767768625001e+01 0 0 0 +206 1 2.0630692886474996e+01 3.2851421793749993e+00 1.7739767768625001e+01 0 0 0 +207 1 2.0630692886474996e+01 3.9421706152499914e-01 2.0630692886474996e+01 0 0 0 +208 1 1.7739767768625001e+01 3.2851421793749993e+00 2.0630692886474996e+01 0 0 0 +209 1 3.9421706152499914e-01 6.1760672972249999e+00 1.7739767768625001e+01 0 0 0 +210 1 3.2851421793749993e+00 9.0669924150749992e+00 1.7739767768625001e+01 0 0 0 +211 1 3.2851421793749993e+00 6.1760672972249999e+00 2.0630692886474996e+01 0 0 0 +212 1 3.9421706152499914e-01 9.0669924150749992e+00 2.0630692886474996e+01 0 0 0 +213 1 6.1760672972249999e+00 6.1760672972249999e+00 1.7739767768625001e+01 0 0 0 +214 1 9.0669924150749992e+00 9.0669924150749992e+00 1.7739767768625001e+01 0 0 0 +215 1 9.0669924150749992e+00 6.1760672972249999e+00 2.0630692886474996e+01 0 0 0 +216 1 6.1760672972249999e+00 9.0669924150749992e+00 2.0630692886474996e+01 0 0 0 +217 1 1.1957917532925000e+01 6.1760672972249999e+00 1.7739767768625001e+01 0 0 0 +218 1 1.4848842650774998e+01 9.0669924150749992e+00 1.7739767768625001e+01 0 0 0 +219 1 1.4848842650774998e+01 6.1760672972249999e+00 2.0630692886474996e+01 0 0 0 +220 1 1.1957917532925000e+01 9.0669924150749992e+00 2.0630692886474996e+01 0 0 0 +221 1 1.7739767768625001e+01 6.1760672972249999e+00 1.7739767768625001e+01 0 0 0 +222 1 2.0630692886474996e+01 9.0669924150749992e+00 1.7739767768625001e+01 0 0 0 +223 1 2.0630692886474996e+01 6.1760672972249999e+00 2.0630692886474996e+01 0 0 0 +224 1 1.7739767768625001e+01 9.0669924150749992e+00 2.0630692886474996e+01 0 0 0 +225 1 3.9421706152499914e-01 1.1957917532925000e+01 1.7739767768625001e+01 0 0 0 +226 1 3.2851421793749993e+00 1.4848842650774998e+01 1.7739767768625001e+01 0 0 0 +227 1 3.2851421793749993e+00 1.1957917532925000e+01 2.0630692886474996e+01 0 0 0 +228 1 3.9421706152499914e-01 1.4848842650774998e+01 2.0630692886474996e+01 0 0 0 +229 1 6.1760672972249999e+00 1.1957917532925000e+01 1.7739767768625001e+01 0 0 0 +230 1 9.0669924150749992e+00 1.4848842650774998e+01 1.7739767768625001e+01 0 0 0 +231 1 9.0669924150749992e+00 1.1957917532925000e+01 2.0630692886474996e+01 0 0 0 +232 1 6.1760672972249999e+00 1.4848842650774998e+01 2.0630692886474996e+01 0 0 0 +233 1 1.1957917532925000e+01 1.1957917532925000e+01 1.7739767768625001e+01 0 0 0 +234 1 1.4848842650774998e+01 1.4848842650774998e+01 1.7739767768625001e+01 0 0 0 +235 1 1.4848842650774998e+01 1.1957917532925000e+01 2.0630692886474996e+01 0 0 0 +236 1 1.1957917532925000e+01 1.4848842650774998e+01 2.0630692886474996e+01 0 0 0 +237 1 1.7739767768625001e+01 1.1957917532925000e+01 1.7739767768625001e+01 0 0 0 +238 1 2.0630692886474996e+01 1.4848842650774998e+01 1.7739767768625001e+01 0 0 0 +239 1 2.0630692886474996e+01 1.1957917532925000e+01 2.0630692886474996e+01 0 0 0 +240 1 1.7739767768625001e+01 1.4848842650774998e+01 2.0630692886474996e+01 0 0 0 +241 1 3.9421706152499914e-01 1.7739767768625001e+01 1.7739767768625001e+01 0 0 0 +242 1 3.2851421793749993e+00 2.0630692886474996e+01 1.7739767768625001e+01 0 0 0 +243 1 3.2851421793749993e+00 1.7739767768625001e+01 2.0630692886474996e+01 0 0 0 +244 1 3.9421706152499914e-01 2.0630692886474996e+01 2.0630692886474996e+01 0 0 0 +245 1 6.1760672972249999e+00 1.7739767768625001e+01 1.7739767768625001e+01 0 0 0 +246 1 9.0669924150749992e+00 2.0630692886474996e+01 1.7739767768625001e+01 0 0 0 +247 1 9.0669924150749992e+00 1.7739767768625001e+01 2.0630692886474996e+01 0 0 0 +248 1 6.1760672972249999e+00 2.0630692886474996e+01 2.0630692886474996e+01 0 0 0 +249 1 1.1957917532925000e+01 1.7739767768625001e+01 1.7739767768625001e+01 0 0 0 +250 1 1.4848842650774998e+01 2.0630692886474996e+01 1.7739767768625001e+01 0 0 0 +251 1 1.4848842650774998e+01 1.7739767768625001e+01 2.0630692886474996e+01 0 0 0 +252 1 1.1957917532925000e+01 2.0630692886474996e+01 2.0630692886474996e+01 0 0 0 +253 1 1.7739767768625001e+01 1.7739767768625001e+01 1.7739767768625001e+01 0 0 0 +254 1 2.0630692886474996e+01 2.0630692886474996e+01 1.7739767768625001e+01 0 0 0 +255 1 2.0630692886474996e+01 1.7739767768625001e+01 2.0630692886474996e+01 0 0 0 +256 1 1.7739767768625001e+01 2.0630692886474996e+01 2.0630692886474996e+01 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/lib/atc/DenseVector.h b/lib/atc/DenseVector.h index bbca12997b..70e223d988 100644 --- a/lib/atc/DenseVector.h +++ b/lib/atc/DenseVector.h @@ -82,7 +82,7 @@ void DenseVector::resize(INDEX rows, INDEX cols, bool copy) /////////////////////////////////////////////////////////////////////////////// //* resizes the matrix and optionally zeros it out template -void DenseVector::reset(INDEX rows, INDEX cols, bool zero) +void DenseVector::reset(INDEX rows, INDEX /* cols */, bool zero) { if (_size!=rows) { @@ -94,7 +94,7 @@ void DenseVector::reset(INDEX rows, INDEX cols, bool zero) /////////////////////////////////////////////////////////////////////////////// //* resizes the matrix and optionally zeros it out template -void DenseVector::copy(const T * ptr, INDEX rows, INDEX cols) +void DenseVector::copy(const T * ptr, INDEX rows, INDEX /* cols */) { resize(rows, 1, false); memcpy(_data, ptr, this->size()*sizeof(T)); From 1597e78d5a0ed99e11c371e300b6a9ba4c96aa25 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 17 Nov 2018 06:39:28 -0500 Subject: [PATCH 145/273] guarantee initialization of hyperflag --- src/REPLICA/fix_hyper.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/REPLICA/fix_hyper.cpp b/src/REPLICA/fix_hyper.cpp index 829d4b2474..c86c00ad45 100644 --- a/src/REPLICA/fix_hyper.cpp +++ b/src/REPLICA/fix_hyper.cpp @@ -18,7 +18,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixHyper::FixHyper(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) {} +FixHyper::FixHyper(LAMMPS *lmp, int narg, char **arg) + : Fix(lmp, narg, arg), hyperflag(0) {} /* ---------------------------------------------------------------------- extract hyper flag setting for all Fixes that perform hyperdynamics From c49c35e41db01b78752abeaeaa1ff2b9a3f4ca77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 17 Nov 2018 06:40:33 -0500 Subject: [PATCH 146/273] avoid tuncation error through integer division and promote to use "bigint" instead of "int" to avoid overflows for large systems --- src/REPLICA/fix_hyper_local.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 4868cd75de..d4fa08f261 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -44,9 +44,9 @@ enum{IGNORE,WARN,ERROR}; /* ---------------------------------------------------------------------- */ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : - FixHyper(lmp, narg, arg), old2now(NULL), xold(NULL), tagold(NULL), - bonds(NULL), numbond(NULL), maxstrain(NULL), maxstrain_region(NULL), - maxstrain_bondindex(NULL), biasflag(NULL), boost(NULL), + FixHyper(lmp, narg, arg), old2now(NULL), xold(NULL), tagold(NULL), + bonds(NULL), numbond(NULL), maxstrain(NULL), maxstrain_region(NULL), + maxstrain_bondindex(NULL), biasflag(NULL), boost(NULL), histo(NULL), allhisto(NULL) { // error checks @@ -1274,16 +1274,18 @@ double FixHyperLocal::compute_vector(int i) if (i == 3) return 1.0*allbonds/atom->natoms; if (i == 4) { - int nlocal = atom->nlocal; - int nbonds = 0; // BIGINT? + const int nlocal = atom->nlocal; + bigint nbonds = 0; for (int j = 0; j < nlocal; j++) nbonds += numbond[j]; - int allbonds; - MPI_Allreduce(&nbonds,&allbonds,1,MPI_INT,MPI_SUM,world); - int allneigh; // BIGINT? - MPI_Allreduce(&list->ipage->ndatum,&allneigh,1,MPI_INT,MPI_SUM,world); - double neighsperatom = allneigh/atom->natoms; - double bondsperatom = 0.5*allbonds/atom->natoms; + bigint allbonds; + MPI_Allreduce(&nbonds,&allbonds,1,MPI_LMP_BIGINT,MPI_SUM,world); + bigint allneigh,thisneigh; + thisneigh = list->ipage->ndatum; + MPI_Allreduce(&thisneigh,&allneigh,1,MPI_LMP_BIGINT,MPI_SUM,world); + const double natoms = atom->natoms; + const double neighsperatom = static_cast(allneigh)/natoms; + const double bondsperatom = 0.5*static_cast(allbonds)/natoms; return neighsperatom * bondsperatom; } From 4dc2f9c6c4019586a02175e9b05ccbddb9b87ec1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 Nov 2018 11:24:17 -0500 Subject: [PATCH 147/273] fix some spelling errors in the manual --- doc/src/Build_basics.txt | 2 +- doc/src/Build_extras.txt | 2 +- doc/src/Howto_client_server.txt | 2 +- doc/src/Install_git.txt | 2 +- doc/src/Speed_kokkos.txt | 30 +++++++++++++++--------------- doc/src/Speed_omp.txt | 4 ++-- doc/src/compute_property_atom.txt | 6 +++--- doc/src/compute_ptm_atom.txt | 2 +- doc/src/fix_plumed.txt | 11 ++++++----- doc/src/fix_rigid.txt | 2 +- doc/src/fix_rigid_meso.txt | 2 +- doc/src/hyper.txt | 2 +- doc/src/kspace_modify.txt | 2 +- doc/src/message.txt | 2 +- doc/src/neb.txt | 2 +- doc/src/rerun.txt | 4 ++-- 16 files changed, 39 insertions(+), 38 deletions(-) diff --git a/doc/src/Build_basics.txt b/doc/src/Build_basics.txt index b3ff0a55c5..47801890c4 100644 --- a/doc/src/Build_basics.txt +++ b/doc/src/Build_basics.txt @@ -292,7 +292,7 @@ This will create a lammps/doc/html dir with the HTML doc pages so that you can browse them locally on your system. Type "make" from the lammps/doc dir to see other options. -NOTE: You can also download a tarball of the documention for the +NOTE: You can also download a tarball of the documentation for the current LAMMPS version (HTML and PDF files), from the website "download page"_http://lammps.sandia.gov/download.html. diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 8881ee44c1..98937c096e 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -732,7 +732,7 @@ can be shared across multiple MD packages and can be updated, for as long as the shared PLUMED library is ABI-compatible. The third linkage mode is "runtime" which allows to switch the PLUMED kernel at runtime between different variants through setting the PLUMED_KERNEL environment -varible, which has to point to the location of the libplumedKernel.so +variable, which has to point to the location of the libplumedKernel.so dynamical shared object, which is then loaded at runtime. This is particularly convenient for doing PLUMED development and comparing multiple PLUMED versions without having to recompile the hosting MD diff --git a/doc/src/Howto_client_server.txt b/doc/src/Howto_client_server.txt index aa6b8eab76..897b0aa6ff 100644 --- a/doc/src/Howto_client_server.txt +++ b/doc/src/Howto_client_server.txt @@ -64,7 +64,7 @@ client or server. "server mc"_server_mc.html = LAMMPS is a server for computing a Monte Carlo energy :ul The server doc files give details of the message protocols -for data that is exchanged bewteen the client and server. +for data that is exchanged between the client and server. These example directories illustrate how to use LAMMPS as either a client or server code: diff --git a/doc/src/Install_git.txt b/doc/src/Install_git.txt index 538fa8aff8..80ec3e3478 100644 --- a/doc/src/Install_git.txt +++ b/doc/src/Install_git.txt @@ -45,7 +45,7 @@ git clone -b unstable https://github.com/lammps/lammps.git mylammps :pre where "mylammps" is the name of the directory you wish to create on your machine and "unstable" is one of the 3 branches listed above. (Note that you actually download all 3 branches; you can switch -between them at any time using "git checkout ".) +between them at any time using "git checkout ".) Once the command completes, your directory will contain the same files as if you unpacked a current LAMMPS tarball, with two exceptions: diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index f74c9c9ed7..d1fb52a9f8 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -127,21 +127,21 @@ mpirun -np 16 lmp_kokkos_mpi_only -k on -sf kk -pk kokkos newton on neigh half c If the "newton"_newton.html command is used in the input script, it can also override the Newton flag defaults. -For half neighbor lists and OpenMP, the KOKKOS package uses data -duplication (i.e. thread-private arrays) by default to avoid -thread-level write conflicts in the force arrays (and other data -structures as necessary). Data duplication is typically fastest for -small numbers of threads (i.e. 8 or less) but does increase memory -footprint and is not scalable to large numbers of threads. An -alternative to data duplication is to use thread-level atomics, which -don't require duplication. The use of atomics can be forced by compiling -with the "-DLMP_KOKKOS_USE_ATOMICS" compile switch. Most but not all -Kokkos-enabled pair_styles support data duplication. Alternatively, full -neighbor lists avoid the need for duplication or atomics but require -more compute operations per atom. When using the Kokkos Serial backend -or the OpenMP backend with a single thread, no duplication or atomics are -used. For CUDA and half neighbor lists, the KOKKOS package always uses -atomics. +For half neighbor lists and OpenMP, the KOKKOS package uses data +duplication (i.e. thread-private arrays) by default to avoid +thread-level write conflicts in the force arrays (and other data +structures as necessary). Data duplication is typically fastest for +small numbers of threads (i.e. 8 or less) but does increase memory +footprint and is not scalable to large numbers of threads. An +alternative to data duplication is to use thread-level atomic operations +which do not require data duplication. The use of atomic operations can +be enforced by compiling LAMMPS with the "-DLMP_KOKKOS_USE_ATOMICS" +pre-processor flag. Most but not all Kokkos-enabled pair_styles support +data duplication. Alternatively, full neighbor lists avoid the need for +duplication or atomic operations but require more compute operations per +atom. When using the Kokkos Serial backend or the OpenMP backend with +a single thread, no duplication or atomic operations are used. For CUDA +and half neighbor lists, the KOKKOS package always uses atomic operations. [Core and Thread Affinity:] diff --git a/doc/src/Speed_omp.txt b/doc/src/Speed_omp.txt index 238909d1b4..97aa251e9e 100644 --- a/doc/src/Speed_omp.txt +++ b/doc/src/Speed_omp.txt @@ -131,7 +131,7 @@ effect worsens when using an increasing number of nodes. :l The system has a spatially inhomogeneous particle density which does not map well to the "domain decomposition scheme"_processors.html or "load-balancing"_balance.html options that LAMMPS provides. This is -because multi-threading achives parallelism over the number of +because multi-threading achieves parallelism over the number of particles, not via their distribution in space. :l A machine is being used in "capability mode", i.e. near the point @@ -143,7 +143,7 @@ the performance-limiting factor. Using multi-threading allows less MPI tasks to be invoked and can speed-up the long-range solver, while increasing overall performance by parallelizing the pairwise and bonded calculations via OpenMP. Likewise additional speedup can be -sometimes be achived by increasing the length of the Coulombic cutoff +sometimes be achieved by increasing the length of the Coulombic cutoff and thus reducing the work done by the long-range solver. Using the "run_style verlet/split"_run_style.html command, which is compatible with the USER-OMP package, is an alternative way to reduce the number diff --git a/doc/src/compute_property_atom.txt b/doc/src/compute_property_atom.txt index bc1e3049fa..3c55c88d10 100644 --- a/doc/src/compute_property_atom.txt +++ b/doc/src/compute_property_atom.txt @@ -19,7 +19,7 @@ input = one or more atom attributes :l x, y, z, xs, ys, zs, xu, yu, zu, ix, iy, iz, vx, vy, vz, fx, fy, fz, q, mux, muy, muz, mu, - sp, spx, spy, spz, fmx, fmy, fmz, + sp, spx, spy, spz, fmx, fmy, fmz, radius, diameter, omegax, omegay, omegaz, angmomx, angmomy, angmomz, shapex,shapey, shapez, @@ -158,8 +158,8 @@ corresponding attribute is in, e.g. velocity units for vx, charge units for q, etc. For the spin quantities, sp is in the units of the Bohr magneton, spx, -spy, and spz are adimensional quantities, and fmx, fmy and fmz are -given in rad.THz. +spy, and spz are unitless quantities, and fmx, fmy and fmz are given +in rad/THz. [Restrictions:] none diff --git a/doc/src/compute_ptm_atom.txt b/doc/src/compute_ptm_atom.txt index 8f79fe502b..57e143404e 100644 --- a/doc/src/compute_ptm_atom.txt +++ b/doc/src/compute_ptm_atom.txt @@ -80,7 +80,7 @@ too frequently or to have multiple compute/dump commands, each with a [Output info:] -This compute calculates a per-atom arry, which can be accessed by +This compute calculates a per-atom array, which can be accessed by any command that uses per-atom values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index 9c7f45af1e..a9795850f5 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -65,11 +65,12 @@ PLUMED input file. Instructions as to what should be included in a plumed input file can be found in the "documentation for PLUMED"_plumeddocs -The {outfile} keyword allows the user to specify the name of a file on -which to output the PLUMED log. This log file normally just parrots the -information that is contained in the input file. The names of the files -on which the results from the various analyses that have been performed -using PLUMED will be specified by the user in the PLUMED input file. +The {outfile} keyword allows the user to specify the name of a file in +which to output the PLUMED log. This log file normally just repeats the +information that is contained in the input file to confirm it was +correctly read and parsed. The names of the files in which the results +are stored from the various analysis options performed by PLUMED will +be specified by the user in the PLUMED input file. [Restart, fix_modify, output, run start/stop, minimize info:] diff --git a/doc/src/fix_rigid.txt b/doc/src/fix_rigid.txt index 5d65856735..d45705b2b2 100644 --- a/doc/src/fix_rigid.txt +++ b/doc/src/fix_rigid.txt @@ -247,7 +247,7 @@ of atoms that form rigid bodies. An integer vector defined by the "fix property/atom"_fix_property_atom.html command can be used. Or an "atom-style or atomfile-style variable"_variable.html can be used; the floating-point value produced by the variable is rounded to an -integer. As with bondstyle {molecule}, each set of atoms in the fix +integer. As with bodystyle {molecule}, each set of atoms in the fix groups with the same integer value is treated as a different rigid body. Since fix property/atom vectors and atom-style variables produce values for all atoms, you should be careful to use a fix group diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt index 79b014e671..b0a7e3cf9e 100644 --- a/doc/src/fix_rigid_meso.txt +++ b/doc/src/fix_rigid_meso.txt @@ -128,7 +128,7 @@ of particles that form rigid bodies. An integer vector defined by the "fix property/atom"_fix_property_atom.html command can be used. Or an "atom-style or atomfile-style variable"_variable.html can be used; the floating-point value produced by the variable is rounded to an -integer. As with bondstyle {molecule}, each set of particles in the fix +integer. As with bodystyle {molecule}, each set of particles in the fix groups with the same integer value is treated as a different rigid body. Since fix property/atom vectors and atom-style variables produce values for all particles, you should be careful to use a fix group diff --git a/doc/src/hyper.txt b/doc/src/hyper.txt index 0ea4ac781b..570f27ca64 100644 --- a/doc/src/hyper.txt +++ b/doc/src/hyper.txt @@ -131,7 +131,7 @@ system (coordinates and velocities) is restored, and dynamics continue. At the end of the hyper run, a variety of statistics are output to the screen and logfile. These include info relevant to both global and local hyperdynamics, such as the number of events and the elapsed -hyper time (acclerated time), And it includes info specific to one or +hyper time (accelerated time), And it includes info specific to one or the other, depending on which style of fix was specified by {fix-ID}. :line diff --git a/doc/src/kspace_modify.txt b/doc/src/kspace_modify.txt index 41973601d7..218f85bd74 100644 --- a/doc/src/kspace_modify.txt +++ b/doc/src/kspace_modify.txt @@ -326,7 +326,7 @@ field_rel = relative accuracy in electric field :ul The values with suffix _rel indicate the tolerance is a relative tolerance; the other values impose an absolute tolerance on the given -quantity. Absoulte tolerance in this case means, that for a given +quantity. Absolute tolerance in this case means, that for a given quantity q and a given absolute tolerance of t_a the result should be between q-t_a and q+t_a. For a relative tolerance t_r the relative error should not be greater than t_r, i.e. abs(1 - (result/q)) < t_r. diff --git a/doc/src/message.txt b/doc/src/message.txt index 6ceb62a3e6..2b6a894e70 100644 --- a/doc/src/message.txt +++ b/doc/src/message.txt @@ -22,7 +22,7 @@ mode = {file} or {zmq} or {mpi/one} or {mpi/two} :l socket-ID for server = *:5555, see description below {mpi/one} arg = none {mpi/two} arg = filename - filename = file used to establish communication bewteen 2 MPI jobs :pre + filename = file used to establish communication between 2 MPI jobs :pre :ule [Examples:] diff --git a/doc/src/neb.txt b/doc/src/neb.txt index 75d199e0b4..e136aa2f2c 100644 --- a/doc/src/neb.txt +++ b/doc/src/neb.txt @@ -340,7 +340,7 @@ MaxAtomForce is the maximum force component of any atom in replica i. When a NEB calculation does not converge properly, the supplementary information can help understanding what is going wrong. For instance -when the path angle becomes accute, the definition of tangent used in +when the path angle becomes acute, the definition of tangent used in the NEB calculation is questionable and the NEB cannot may diverge "(Maras)"_#Maras2. diff --git a/doc/src/rerun.txt b/doc/src/rerun.txt index 71ad464bb0..9a92a7374f 100644 --- a/doc/src/rerun.txt +++ b/doc/src/rerun.txt @@ -150,8 +150,8 @@ indent"_fix_indent.html and "fix langevin"_fix_langevin.html. So you should think carefully as to whether that makes sense for the manner in which you are reprocessing the dump snapshots. -If you only want the rerun script to perform analyses that do not -involve pair interactions, such as use compute msd to calculated +If you only want the rerun script to perform an analysis that does +not involve pair interactions, such as use compute msd to calculated displacements over time, you do not need to define a "pair style"_pair_style.html, which may also mean neighbor lists will not need to be calculated which saves time. The "comm_modify From 809bd855b652a25191fb34970253c067e80e9752 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 Nov 2018 11:24:55 -0500 Subject: [PATCH 148/273] adjust wording of non-features discussion to be more in-sync with recent developments --- doc/src/Intro_nonfeatures.txt | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/doc/src/Intro_nonfeatures.txt b/doc/src/Intro_nonfeatures.txt index 2acf6db71f..316e661475 100644 --- a/doc/src/Intro_nonfeatures.txt +++ b/doc/src/Intro_nonfeatures.txt @@ -13,15 +13,19 @@ LAMMPS is designed to be a fast, parallel engine for molecular dynamics (MD) simulations. It provides only a modest amount of functionality for setting up simulations and analyzing their output. -Specifically, LAMMPS does not: +Specifically, LAMMPS was not conceived and designed for: -run thru a GUI -build molecular systems +being run thru a GUI +build molecular systems, or building molecular topologies assign force-field coefficients automagically -perform sophisticated analyses of your MD simulation +perform sophisticated analysis of your MD simulation visualize your MD simulation interactively plot your output data :ul +Although over the years these limitations have been somewhat +reduced through features added to LAMMPS or external tools +that either interface with LAMMPS or extend LAMMPS. + Here are suggestions on how to perform these tasks: GUI: LAMMPS can be built as a library and a Python wrapper that wraps @@ -29,7 +33,7 @@ the library interface is provided. Thus, GUI interfaces can be written in Python (or C or C++ if desired) that run LAMMPS and visualize or plot its output. Examples of this are provided in the python directory and described on the "Python"_Python_head.html doc -page. :ulb,l +page. Also, there are several external wrappers or GUI frontends.:ulb,l Builder: Several pre-processing tools are packaged with LAMMPS. Some of them convert input files in formats produced by other MD codes such @@ -40,28 +44,36 @@ molecular builder that will generate complex molecular models. See the "Tools"_Tools.html doc page for details on tools packaged with LAMMPS. The "Pre/post processing page"_http:/lammps.sandia.gov/prepost.html of the LAMMPS website -describes a variety of 3rd party tools for this task. :l +describes a variety of 3rd party tools for this task. Furthermore, +some LAMMPS internal commands to reconstruct topology, as well as +the option to insert molecule templates instead of atoms.:l Force-field assignment: The conversion tools described in the previous bullet for CHARMM, AMBER, and Insight will also assign force field coefficients in the LAMMPS format, assuming you provide CHARMM, AMBER, or Accelerys force field files. :l -Simulation analyses: If you want to perform analyses on-the-fly as +Simulation analysis: If you want to perform analysis on-the-fly as your simulation runs, see the "compute"_compute.html and "fix"_fix.html doc pages, which list commands that can be used in a LAMMPS input script. Also see the "Modify"_Modify.html doc page for info on how to add your own analysis code or algorithms to LAMMPS. For post-processing, LAMMPS output such as "dump file snapshots"_dump.html can be converted into formats used by other MD or -post-processing codes. Some post-processing tools packaged with +post-processing codes. To some degree, that conversion can be done +directly inside of LAMMPS by interfacing to the VMD molfile plugins. +The "rerun"_rerun.html command also allows to do some post-processing +of existing trajectories, and through being able to read a variety +of file formats, this can also be used for analysing trajectories +from other MD codes. Some post-processing tools packaged with LAMMPS will do these conversions. Scripts provided in the tools/python directory can extract and massage data in dump files to make it easier to import into other programs. See the "Tools"_Tools.html doc page for details on these various options. :l Visualization: LAMMPS can produce JPG or PNG snapshot images -on-the-fly via its "dump image"_dump_image.html command. For +on-the-fly via its "dump image"_dump_image.html command and pass +them to an external program FFmpeg to generate movies from them. For high-quality, interactive visualization there are many excellent and free tools available. See the "Other Codes page"_http://lammps.sandia.gov/viz.html page of the LAMMPS website for From b6f0fe4c2d3910653dbafe5bb31d5d237786b9aa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 Nov 2018 11:47:33 -0500 Subject: [PATCH 149/273] more changes for correct and consistent spelling in the manual --- doc/src/Howto_barostat.txt | 2 +- doc/src/Speed_kokkos.txt | 8 ++++---- doc/src/compute.txt | 2 +- doc/src/compute_heat_flux.txt | 4 ++-- doc/src/fix_ffl.txt | 2 +- doc/src/fix_gle.txt | 2 +- doc/src/fix_langevin.txt | 2 +- doc/src/fix_nh.txt | 2 +- doc/src/fix_phonon.txt | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/src/Howto_barostat.txt b/doc/src/Howto_barostat.txt index 3323334600..1fbfb14222 100644 --- a/doc/src/Howto_barostat.txt +++ b/doc/src/Howto_barostat.txt @@ -19,7 +19,7 @@ barostat attempts to equilibrate the system to the requested T and/or P. Barostatting in LAMMPS is performed by "fixes"_fix.html. Two -barosttating methods are currently available: Nose-Hoover (npt and +barostatting methods are currently available: Nose-Hoover (npt and nph) and Berendsen: "fix npt"_fix_nh.html diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index d1fb52a9f8..3373982e9f 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -13,7 +13,7 @@ Kokkos is a templated C++ library that provides abstractions to allow a single implementation of an application kernel (e.g. a pair style) to run efficiently on different kinds of hardware, such as GPUs, Intel Xeon Phis, or many-core CPUs. Kokkos maps the C++ kernel onto -different backend languages such as CUDA, OpenMP, or Pthreads. The +different back end languages such as CUDA, OpenMP, or Pthreads. The Kokkos library also provides data abstractions to adjust (at compile time) the memory layout of data structures like 2d and 3d arrays to optimize performance on different hardware. For more information on @@ -106,9 +106,9 @@ modification to the input script is needed. Alternatively, one can run with the KOKKOS package by editing the input script as described below. -NOTE: When using a single OpenMP thread, the Kokkos Serial backend (i.e. +NOTE: When using a single OpenMP thread, the Kokkos Serial back end (i.e. Makefile.kokkos_mpi_only) will give better performance than the OpenMP -backend (i.e. Makefile.kokkos_omp) because some of the overhead to make +back end (i.e. Makefile.kokkos_omp) because some of the overhead to make the code thread-safe is removed. NOTE: The default for the "package kokkos"_package.html command is to @@ -139,7 +139,7 @@ be enforced by compiling LAMMPS with the "-DLMP_KOKKOS_USE_ATOMICS" pre-processor flag. Most but not all Kokkos-enabled pair_styles support data duplication. Alternatively, full neighbor lists avoid the need for duplication or atomic operations but require more compute operations per -atom. When using the Kokkos Serial backend or the OpenMP backend with +atom. When using the Kokkos Serial back end or the OpenMP back end with a single thread, no duplication or atomic operations are used. For CUDA and half neighbor lists, the KOKKOS package always uses atomic operations. diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 761d3fe29f..f31ca39ea5 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -309,7 +309,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "temp/uef"_compute_temp_uef.html - "ti"_compute_ti.html - thermodynamic integration free energy values "torque/chunk"_compute_torque_chunk.html - torque applied on each chunk -"vacf"_compute_vacf.html - velocity-autocorrelation function of group of atoms +"vacf"_compute_vacf.html - velocity auto-correlation function of group of atoms "vcm/chunk"_compute_vcm_chunk.html - velocity of center-of-mass for each chunk "voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom "xrd"_compute_xrd.html - :ul diff --git a/doc/src/compute_heat_flux.txt b/doc/src/compute_heat_flux.txt index 81a2a3f517..edd46f7587 100644 --- a/doc/src/compute_heat_flux.txt +++ b/doc/src/compute_heat_flux.txt @@ -82,11 +82,11 @@ first term in the equation for J above. The heat flux can be output every so many timesteps (e.g. via the "thermo_style custom"_thermo_style.html command). Then as a -post-processing operation, an autocorrelation can be performed, its +post-processing operation, an auto-correlation can be performed, its integral estimated, and the Green-Kubo formula above evaluated. The "fix ave/correlate"_fix_ave_correlate.html command can calculate -the autocorrelation. The trap() function in the +the auto-correlation. The trap() function in the "variable"_variable.html command can calculate the integral. An example LAMMPS input script for solid Ar is appended below. The diff --git a/doc/src/fix_ffl.txt b/doc/src/fix_ffl.txt index ea33dc432f..a5d3f80a62 100644 --- a/doc/src/fix_ffl.txt +++ b/doc/src/fix_ffl.txt @@ -82,7 +82,7 @@ sense, a restarted simulation should produce the same behavior. Note however that you should use a different seed each time you restart, otherwise the same sequence of random numbers will be used each time, which might lead to stochastic synchronization and -subtle artefacts in the sampling. +subtle artifacts in the sampling. This fix can ramp its target temperature over multiple runs, using the {start} and {stop} keywords of the "run"_run.html command. See the diff --git a/doc/src/fix_gle.txt b/doc/src/fix_gle.txt index 70a8e7f342..a8026256b0 100644 --- a/doc/src/fix_gle.txt +++ b/doc/src/fix_gle.txt @@ -104,7 +104,7 @@ sense, a restarted simulation should produce the same behavior. Note however that you should use a different seed each time you restart, otherwise the same sequence of random numbers will be used each time, which might lead to stochastic synchronization and -subtle artefacts in the sampling. +subtle artifacts in the sampling. This fix can ramp its target temperature over multiple runs, using the {start} and {stop} keywords of the "run"_run.html command. See the diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index e97c7c3c37..62325fdef3 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -255,7 +255,7 @@ bonds, configurational properties generated with dt = 2.5 fs and tdamp = 100 fs are indistinguishable from dt = 0.5 fs. Because the velocity distribution systematically decreases with increasing timestep, the method should not be used to generate properties that depend on the -velocity distribution, such as the velocity autocorrelation function +velocity distribution, such as the velocity auto-correlation function (VACF). In this example, the velocity distribution at dt = 2.5fs generates an average temperature of 220 K, instead of 300 K. diff --git a/doc/src/fix_nh.txt b/doc/src/fix_nh.txt index 1ff80f5b7a..174547d775 100644 --- a/doc/src/fix_nh.txt +++ b/doc/src/fix_nh.txt @@ -362,7 +362,7 @@ The flip operation is described in more detail in the doc page for "fix deform"_fix_deform.html. Both the barostat dynamics and the atom trajectories are unaffected by this operation. However, if a tilt factor is incremented by a large amount (1.5 times the box length) on -a single timestep, LAMMPS can not accomodate this event and will +a single timestep, LAMMPS can not accommodate this event and will terminate the simulation with an error. This error typically indicates that there is something badly wrong with how the simulation was constructed, such as specifying values of {Pstart} that are too far diff --git a/doc/src/fix_phonon.txt b/doc/src/fix_phonon.txt index 0c449899df..ede3bb5cfd 100644 --- a/doc/src/fix_phonon.txt +++ b/doc/src/fix_phonon.txt @@ -127,7 +127,7 @@ which lattice point; the lattice indices start from 0. An auxiliary code, "latgen"_http://code.google.com/p/latgen, can be employed to generate the compatible map file for various crystals. -In case one simulates an aperiodic system, where the whole simulation +In case one simulates a nonperiodic system, where the whole simulation box is treated as a unit cell, one can set {map_file} as {GAMMA}, so that the mapping info will be generated internally and a file is not needed. In this case, the dynamical matrix at only the gamma-point From 8a94a3255119736dae44d9a63fdddb2fd3709726 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 Nov 2018 15:19:23 -0500 Subject: [PATCH 150/273] avoid duplicate label --- doc/src/Howto.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Howto.txt b/doc/src/Howto.txt index 730b492699..36f6be7194 100644 --- a/doc/src/Howto.txt +++ b/doc/src/Howto.txt @@ -45,7 +45,7 @@ General howto :h3 LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -15 Nov 2018 version :c,h2 +27 Nov 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 162fb8916f..d907ef2b85 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "15 Nov 2018" +#define LAMMPS_VERSION "27 Nov 2018" From 79b3e9e27d08ff51bccecf182665304908823d8e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 14:46:39 -0500 Subject: [PATCH 175/273] some clarifications and corrections on the wildcard command line docs --- doc/src/Run_options.txt | 55 ++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 98b6f92cbc..9c12b3ff24 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -354,29 +354,31 @@ the LAMMPS simulation domain. :line -[-restart2data restartfile (remap) datafile keyword value ...] :link(restart2data) +[-restart2data restartfile \[remap\] datafile keyword value ...] +:link(restart2data) Convert the restart file into a data file and immediately exit. This is the same operation as if the following 2-line input script were run: -read_restart restartfile (remap) +read_restart restartfile \[remap\] write_data datafile keyword value ... :pre -The specified restartfile and/or datafile can have the wild-card -character "*". The restartfile can also have the wild-card character -"%". The meaning of these characters is explained on the +The specified restartfile and/or datafile name may contain the wild-card +character "*". The restartfile name may also contain the wild-card +character "%". The meaning of these characters is explained on the "read_restart"_read_restart.html and "write_data"_write_data.html doc pages. The use of "%" means that a parallel restart file can be read. -Note that a filename such as file.* will need to be enclosed in quotes -to avoid shell expansion of the "*" character. +Note that a filename such as file.* may need to be enclosed in quotes or +the "*" character prefixed with a backslash ("\") to avoid shell +expansion of the "*" character. -Following restartfile, the optional word "remap" can be used. This -has the effect of adding it to the "read_restart"_read_restart.html -command, as explained on its doc page. This is useful if reading the -restart file triggers an error that atoms have been lost. In that -case, use of the remap flag should allow the data file to still be -produced. +Following restartfile argument, the optional word "remap" may be used. +This has the same effect like adding it to a +"read_restart"_read_restart.html command, and operates as explained on +its doc page. This is useful if reading the restart file triggers an +error that atoms have been lost. In that case, use of the remap flag +should allow the data file to still be produced. The syntax following restartfile (or remap), namely @@ -388,29 +390,30 @@ optional keyword/value settings. :line -[-restart2dump restartfile (remap) group-ID dumpstyle dumpfile arg1 arg2 ...] :link(restart2dump) +[-restart2dump restartfile \[remap\] group-ID dumpstyle dumpfile arg1 arg2 ...] :link(restart2dump) Convert the restart file into a dump file and immediately exit. This is the same operation as if the following 2-line input script were run: -read_restart restartfile (remap) +read_restart restartfile \[remap\] write_dump group-ID dumpstyle dumpfile arg1 arg2 ... :pre -Note that the specified restartfile and dumpfile can have wild-card -characters ("*","%") as explained on the +Note that the specified restartfile and dumpfile names may contain +wild-card characters ("*","%") as explained on the "read_restart"_read_restart.html and "write_dump"_write_dump.html doc pages. The use of "%" means that a parallel restart file and/or parallel dump file can be read and/or written. Note that a filename -such as file.* will need to be enclosed in quotes to avoid shell -expansion of the "*" character. +such as file.* may need to be enclosed in quotes or the "*" character +prefixed with a backslash ("\") to avoid shell expansion of the "*" +character. -Note that following restartfile, the optional word "remap" can be -used. This has the effect as adding it to the -"read_restart"_read_restart.html command, as explained on its doc -page. This is useful if reading the restart file triggers an error -that atoms have been lost. In that case, use of the remap flag should -allow the dump file to still be produced. +Note that following the restartfile argument, the optional word "remap" +can be used. This has the effect as adding it to the +"read_restart"_read_restart.html command, as explained on its doc page. +This is useful if reading the restart file triggers an error that atoms +have been lost. In that case, use of the remap flag should allow the +dump file to still be produced. The syntax following restartfile (or remap), namely @@ -524,7 +527,7 @@ option is equivalent to putting the line "variable name index value1 value2 ..." at the beginning of the input script. Defining an index variable as a command-line argument overrides any setting for the same index variable in the input script, since index variables cannot be -re-defined. +re-defined. See the "variable"_variable.html command for more info on defining index and other kinds of variables and the "Commands From 4434481c91f9449a71f786ff735c06d64f110e5e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 14:48:53 -0500 Subject: [PATCH 176/273] remove trailing whitespace in manual source files --- doc/src/Build_basics.txt | 4 +- doc/src/Build_cmake.txt | 2 +- doc/src/Build_extras.txt | 34 ++--- doc/src/Build_settings.txt | 22 +-- doc/src/Build_windows.txt | 6 +- doc/src/Errors.txt | 2 +- doc/src/Howto_bash.txt | 6 +- doc/src/Howto_body.txt | 4 +- doc/src/Howto_client_server.txt | 8 +- doc/src/Howto_library.txt | 2 +- doc/src/Howto_spins.txt | 54 +++---- doc/src/Install_linux.txt | 2 +- doc/src/Install_patch.txt | 2 +- doc/src/Intro_authors.txt | 2 +- doc/src/Intro_features.txt | 6 +- doc/src/Manual_build.txt | 2 +- doc/src/Packages_details.txt | 56 +++---- doc/src/Speed_intel.txt | 14 +- doc/src/Speed_kokkos.txt | 8 +- doc/src/Tools.txt | 2 +- doc/src/angle_cosine_buck6d.txt | 12 +- doc/src/angle_cosine_shift.txt | 2 +- doc/src/atom_style.txt | 8 +- doc/src/bond_style.txt | 2 +- doc/src/compute.txt | 120 +++++++-------- doc/src/compute_angle_local.txt | 2 +- doc/src/compute_chunk_spread_atom.txt | 22 +-- doc/src/compute_edpd_temp_atom.txt | 2 +- doc/src/compute_entropy_atom.txt | 34 ++--- doc/src/compute_pressure_cylinder.txt | 6 +- doc/src/compute_property_atom.txt | 2 +- doc/src/compute_sna_atom.txt | 2 +- doc/src/compute_spin.txt | 16 +- doc/src/compute_stress_mop.txt | 8 +- doc/src/compute_tdpd_cc_atom.txt | 4 +- doc/src/compute_temp_uef.txt | 8 +- doc/src/create_bonds.txt | 2 +- doc/src/dihedral_table_cut.txt | 2 +- doc/src/dump_cfg_uef.txt | 6 +- doc/src/fix.txt | 190 ++++++++++++------------ doc/src/fix_bocs.txt | 48 +++--- doc/src/fix_client_md.txt | 2 +- doc/src/fix_deform.txt | 2 +- doc/src/fix_dt_reset.txt | 2 +- doc/src/fix_gcmc.txt | 4 +- doc/src/fix_langevin_spin.txt | 24 +-- doc/src/fix_latte.txt | 4 +- doc/src/fix_modify.txt | 2 +- doc/src/fix_msst.txt | 2 +- doc/src/fix_nve_dot.txt | 2 +- doc/src/fix_nve_dotc_langevin.txt | 14 +- doc/src/fix_nve_spin.txt | 12 +- doc/src/fix_poems.txt | 2 +- doc/src/fix_precession_spin.txt | 32 ++-- doc/src/fix_rigid_meso.txt | 2 +- doc/src/improper_inversion_harmonic.txt | 12 +- doc/src/kspace_modify.txt | 6 +- doc/src/kspace_style.txt | 2 +- doc/src/message.txt | 2 +- doc/src/package.txt | 2 +- doc/src/pair_airebo.txt | 2 +- doc/src/pair_buck6d_coul_gauss.txt | 58 ++++---- doc/src/pair_cs.txt | 2 +- doc/src/pair_extep.txt | 4 +- doc/src/pair_ilp_graphene_hbn.txt | 2 +- doc/src/pair_kolmogorov_crespi_full.txt | 2 +- doc/src/pair_meam.txt | 2 +- doc/src/pair_meso.txt | 16 +- doc/src/pair_oxdna.txt | 8 +- doc/src/pair_oxdna2.txt | 6 +- doc/src/pair_spin_dmi.txt | 30 ++-- doc/src/pair_spin_exchange.txt | 26 ++-- doc/src/pair_spin_magelec.txt | 4 +- doc/src/pair_spin_neel.txt | 6 +- doc/src/pair_style.txt | 72 ++++----- doc/src/pair_ufm.txt | 2 +- doc/src/read_data.txt | 2 +- doc/src/server.txt | 2 +- doc/src/server_mc.txt | 6 +- doc/src/server_md.txt | 2 +- doc/src/set.txt | 10 +- doc/src/temper_npt.txt | 4 +- doc/src/write_data.txt | 2 +- 83 files changed, 568 insertions(+), 568 deletions(-) diff --git a/doc/src/Build_basics.txt b/doc/src/Build_basics.txt index 47801890c4..90a91db60f 100644 --- a/doc/src/Build_basics.txt +++ b/doc/src/Build_basics.txt @@ -49,7 +49,7 @@ make mybox :pre # uses Makefile.mybox to produce lmp_mybox :pre Serial build (see src/MAKE/Makefile.serial): -MPI_INC = -I../STUBS +MPI_INC = -I../STUBS MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs :pre @@ -172,7 +172,7 @@ want. Parallel build (see src/MAKE/Makefile.mpi): CC = mpicxx -CCFLAGS = -g -O3 +CCFLAGS = -g -O3 LINK = mpicxx LINKFLAGS = -g -O :pre diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index f8b52056fc..1406d290f5 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -27,7 +27,7 @@ make command to build LAMMPS, which uses the created Makefile(s). Example: cd lammps # change to the LAMMPS distribution directory -mkdir build; cd build # create a new directory (folder) for build +mkdir build; cd build # create a new directory (folder) for build cmake ../cmake \[options ...\] # configuration with (command-line) cmake make # compilation :pre diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 4377981662..bc03b5c8ce 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -64,7 +64,7 @@ available on your system. If CMake cannot find the library, you can set these variables: --D ZLIB_INCLUDE_DIR=path # path to zlib.h header file +-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file -D ZLIB_LIBRARIES=path # path to libz.a (.so) file :pre [Traditional make]: @@ -151,7 +151,7 @@ package uses the library settings from the lib/gpu/Makefile.machine used to build the GPU library. :line - + KIM package :h4,link(kim) To build with this package, the KIM library must be downloaded and @@ -178,7 +178,7 @@ package?" page. [CMake build]: -D DOWNLOAD_KIM=value # download OpenKIM API v1 for build, value = no (default) or yes --D KIM_LIBRARY=path # KIM library file (only needed if a custom location) +-D KIM_LIBRARY=path # KIM library file (only needed if a custom location) -D KIM_INCLUDE_DIR=path # KIM include directory (only needed if a custom location) :pre If DOWNLOAD_KIM is set, the KIM library will be downloaded and built @@ -255,7 +255,7 @@ For NVIDIA GPUs using CUDA, set these 4 variables: -D KOKKOS_ARCH="archCPU;archGPU" # archCPU = CPU from list above that is hosting the GPU # archGPU = GPU from list above -D KOKKOS_ENABLE_CUDA=yes --D KOKKOS_ENABLE_OPENMP=yes +-D KOKKOS_ENABLE_OPENMP=yes -D CMAKE_CXX_COMPILER=wrapper # wrapper = full path to Cuda nvcc wrapper :pre The wrapper value is the Cuda nvcc compiler wrapper provided in the @@ -297,7 +297,7 @@ export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper CC = mpicxx :pre :line - + LATTE package :h4,link(latte) To build with this package, you must download and build the LATTE @@ -325,7 +325,7 @@ args: make lib-latte # print help message make lib-latte args="-b" # download and build in lib/latte/LATTE-master make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte -make lib-latte args="-b -m gfortran" # download and build in lib/latte and +make lib-latte args="-b -m gfortran" # download and build in lib/latte and # copy Makefile.lammps.gfortran to Makefile.lammps :pre @@ -336,7 +336,7 @@ also check that the Makefile.lammps file you create is appropriate for the compiler you use on your system to build LATTE. :line - + MEAM package :h4,link(meam) NOTE: the use of the MEAM package is discouraged, as it has been @@ -379,7 +379,7 @@ EXTRAMAKE variable to specify a corresponding Makefile.lammps.machine file. :line - + MESSAGE package :h4,link(message) This package can optionally include support for messaging via sockets, @@ -408,7 +408,7 @@ existing Makefile.lammps.* and has settings to link with the ZeroMQ library if requested in the build. :line - + MSCG package :h4,link(mscg) To build with this package, you must download and build the MS-CG @@ -420,7 +420,7 @@ lib/mscg/README and MSCG/Install files for more details. [CMake build]: -D DOWNLOAD_MSCG=value # download MSCG for build, value = no (default) or yes --D MSCG_LIBRARY=path # MSCG library file (only needed if a custom location) +-D MSCG_LIBRARY=path # MSCG library file (only needed if a custom location) -D MSCG_INCLUDE_DIR=path # MSCG include directory (only needed if a custom location) :pre If DOWNLOAD_MSCG is set, the MSCG library will be downloaded and built @@ -465,7 +465,7 @@ line of your Makefile.machine. See src/MAKE/OPTIONS/Makefile.opt for an example. :line - + POEMS package :h4,link(poems) [CMake build]: @@ -494,7 +494,7 @@ for your system, which should define an EXTRAMAKE variable to specify a corresponding Makefile.lammps.machine file. :line - + PYTHON package :h4,link(python) Building with the PYTHON package requires you have a Python shared @@ -521,7 +521,7 @@ Makefile.lammps.* file (and copy it to Makefile.lammps) if the LAMMPS build fails. :line - + REAX package :h4,link(reax) NOTE: the use of the REAX package and its "pair_style @@ -571,7 +571,7 @@ library"_voro-home. [CMake build]: -D DOWNLOAD_VORO=value # download Voro++ for build, value = no (default) or yes --D VORO_LIBRARY=path # Voro++ library file (only needed if at custom location) +-D VORO_LIBRARY=path # Voro++ library file (only needed if at custom location) -D VORO_INCLUDE_DIR=path # Voro++ include directory (only needed if at custom location) :pre If DOWNLOAD_VORO is set, the Voro++ library will be downloaded and @@ -791,7 +791,7 @@ settings suitable for LAMMPS to compile and link PLUMED in the desired linkage mode. After this step is completed, you can install the USER-PLUMED package and compile LAMMPS in the usual manner: -make yes-user-plumed +make yes-user-plumed make machine :pre Once this compilation completes you should be able to run LAMMPS in the @@ -967,7 +967,7 @@ Quantum ESPRESSO known to work with this QM/MM interface was version [CMake build]: The CMake build system currently does not support building the full -QM/MM-capable hybrid executable of LAMMPS and QE called pwqmmm.x. +QM/MM-capable hybrid executable of LAMMPS and QE called pwqmmm.x. You must use the traditional make build for this package. [Traditional make]: @@ -1037,7 +1037,7 @@ Coulomb solver library"_scafacos-home [CMake build]: -D DOWNLOAD_SCAFACOS=value # download ScaFaCoS for build, value = no (default) or yes --D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location) +-D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location) -D SCAFACOS_INCLUDE_DIR=path # ScaFaCoS include directory (only needed if at custom location) :pre If DOWNLOAD_SCAFACOS is set, the ScaFaCoS library will be downloaded diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index c871d4ab42..f1db9f0130 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -22,7 +22,7 @@ explain how to do this for building both with CMake and make. "Error handling exceptions"_#exceptions when using LAMMPS as a library :all(b) :line - + FFT library :h4,link(fft) When the KSPACE package is included in a LAMMPS build, the @@ -73,7 +73,7 @@ FFT_LIB with the appropriate FFT libraries to include in the link. The "KISS FFT library"_http://kissfft.sf.net is included in the LAMMPS distribution. It is portable across all platforms. Depending on the size of the FFTs and the number of processors used, the other -libraries listed here can be faster. +libraries listed here can be faster. However, note that long-range Coulombics are only a portion of the per-timestep CPU cost, FFTs are only a portion of long-range @@ -92,7 +92,7 @@ Building FFTW for your box should be as simple as ./configure; make; make install. The install command typically requires root privileges (e.g. invoke it via sudo), unless you specify a local directory with the "--prefix" option of configure. Type "./configure --help" to see -various options. +various options. The Intel MKL math library is part of the Intel compiler suite. It can be used with the Intel or GNU compiler (see FFT_LIB setting above). @@ -143,12 +143,12 @@ LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL :pre [CMake and make info]: The default "smallbig" setting allows for simulations with: - + total atom count = 2^63 atoms (about 9e18) total timesteps = 2^63 (about 9e18) atom IDs = 2^31 (about 2 billion) image flags = roll over at 512 :ul - + The "bigbig" setting increases the latter two limits. It allows for: total atom count = 2^63 atoms (about 9e18) @@ -209,12 +209,12 @@ Usually these settings are all that is needed. If CMake cannot find the graphics header, library, executable files, you can set these variables: --D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file --D JPEG_LIBRARIES=path # path to libjpeg.a (.so) file --D PNG_INCLUDE_DIR=path # path to png.h header file --D PNG_LIBRARIES=path # path to libpng.a (.so) file --D ZLIB_INCLUDE_DIR=path # path to zlib.h header file --D ZLIB_LIBRARIES=path # path to libz.a (.so) file +-D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file +-D JPEG_LIBRARIES=path # path to libjpeg.a (.so) file +-D PNG_INCLUDE_DIR=path # path to png.h header file +-D PNG_LIBRARIES=path # path to libpng.a (.so) file +-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file +-D ZLIB_LIBRARIES=path # path to libz.a (.so) file -D FFMPEG_EXECUTABLE=path # path to ffmpeg executable :pre [Makefile.machine settings]: diff --git a/doc/src/Build_windows.txt b/doc/src/Build_windows.txt index 6ac6f52d54..bf1ec265a1 100644 --- a/doc/src/Build_windows.txt +++ b/doc/src/Build_windows.txt @@ -53,14 +53,14 @@ are included, but may not always up-to-date for recently added functionality and the corresponding new code. A machine makefile for using cygwin for the old build system is provided. The CMake build system is untested for this; you will have to request that makefiles are generated and -manually set the compiler. +manually set the compiler. When compiling for Windows [not] set the -DLAMMPS_MEMALIGN define in the LMP_INC makefile variable and add -lwsock32 -lpsapi to the linker -flags in LIB makefile variable. Try adding -static-libgcc or -static or +flags in LIB makefile variable. Try adding -static-libgcc or -static or both to the linker flags when your resulting LAMMPS Windows executable complains about missing .dll files. The CMake configuration should set -this up automatically, but is untested. +this up automatically, but is untested. In case of problems, you are recommended to contact somebody with experience in using cygwin. If you do come across portability problems diff --git a/doc/src/Errors.txt b/doc/src/Errors.txt index 10f84874a3..0489d228bd 100644 --- a/doc/src/Errors.txt +++ b/doc/src/Errors.txt @@ -32,7 +32,7 @@ END_RST --> "Common problems"_Errors_common.html "Reporting bugs"_Errors_bugs.html -"Error messages"_Errors_messages.html +"Error messages"_Errors_messages.html "Warning messages"_Errors_warnings.html :all(b) diff --git a/doc/src/Howto_bash.txt b/doc/src/Howto_bash.txt index f1438418e7..b6e1a65b01 100755 --- a/doc/src/Howto_bash.txt +++ b/doc/src/Howto_bash.txt @@ -40,7 +40,7 @@ Install Windows Subsystem for Linux :h5 Next you must ensure that the Window Subsystem for Linux is installed. Again, search for "enable windows features" in the Settings dialog. This opens a dialog with a list of features you can install. Add a checkmark to Windows -Subsystem for Linux (Beta) and press OK. +Subsystem for Linux (Beta) and press OK. :image(JPG/bow_tutorial_04_small.png,JPG/bow_tutorial_04.png) :image(JPG/bow_tutorial_05.png,JPG/bow_tutorial_05.png) @@ -54,12 +54,12 @@ enter. This will then download Ubuntu for Windows. :image(JPG/bow_tutorial_06.png) :image(JPG/bow_tutorial_07.png) - + During installation, you will be asked for a new password. This will be used for installing new software and running commands with sudo. :image(JPG/bow_tutorial_08.png) - + Type exit to close the command-line window. Go to the Start menu and type "bash" again. This time you will see a "Bash on diff --git a/doc/src/Howto_body.txt b/doc/src/Howto_body.txt index 3e7db9bc8e..7cbdf95315 100644 --- a/doc/src/Howto_body.txt +++ b/doc/src/Howto_body.txt @@ -132,7 +132,7 @@ x1 y1 z1 xN yN zN :pre where M = 6 + 3*N, and N is the number of sub-particles in the body -particle. +particle. The integer line has a single value N. The floating point line(s) list 6 moments of inertia followed by the coordinates of the N @@ -315,7 +315,7 @@ x1 y1 z1 ... xN yN zN 0 1 -1 2 +1 2 2 3 ... 0 1 2 -1 diff --git a/doc/src/Howto_client_server.txt b/doc/src/Howto_client_server.txt index 5875a48744..61d99f7572 100644 --- a/doc/src/Howto_client_server.txt +++ b/doc/src/Howto_client_server.txt @@ -75,7 +75,7 @@ examples/COUPLE/lammps_mc examples/COUPLE/lammps_vasp :ul The examples/message dir couples a client instance of LAMMPS to a -server instance of LAMMPS. +server instance of LAMMPS. The lammps_mc dir shows how to couple LAMMPS as a server to a simple Monte Carlo client code as the driver. @@ -106,13 +106,13 @@ together to exchange MPI messages between them. For message exchange in {file}, {zmq}, or {mpi/two} modes: -% mpirun -np 1 lmp_mpi -log log.client < in.client & +% mpirun -np 1 lmp_mpi -log log.client < in.client & % mpirun -np 2 lmp_mpi -log log.server < in.server :pre -% mpirun -np 4 lmp_mpi -log log.client < in.client & +% mpirun -np 4 lmp_mpi -log log.client < in.client & % mpirun -np 1 lmp_mpi -log log.server < in.server :pre -% mpirun -np 2 lmp_mpi -log log.client < in.client & +% mpirun -np 2 lmp_mpi -log log.client < in.client & % mpirun -np 4 lmp_mpi -log log.server < in.server :pre For message exchange in {mpi/one} mode: diff --git a/doc/src/Howto_library.txt b/doc/src/Howto_library.txt index 9a9656784c..796c5b2e2d 100644 --- a/doc/src/Howto_library.txt +++ b/doc/src/Howto_library.txt @@ -185,7 +185,7 @@ by the same function if the caller needs to know the ordering. The lammps_gather_subset() function allows the caller to request values for only a subset of atoms (identified by ID). For all 3 gather function, per-atom image flags can be retrieved in 2 ways. -If the count is specified as 1, they are returned +If the count is specified as 1, they are returned in a packed format with all three image flags stored in a single integer. If the count is specified as 3, the values are unpacked into xyz flags by the library before returning them. diff --git a/doc/src/Howto_spins.txt b/doc/src/Howto_spins.txt index 88a5fbd86f..7f16883487 100644 --- a/doc/src/Howto_spins.txt +++ b/doc/src/Howto_spins.txt @@ -12,48 +12,48 @@ Magnetic spins :h3 The magnetic spin simulations are enabled by the SPIN package, whose implementation is detailed in "Tranchida"_#Tranchida7. -The model represents the simulation of atomic magnetic spins coupled -to lattice vibrations. The dynamics of those magnetic spins can be used -to simulate a broad range a phenomena related to magneto-elasticity, or -or to study the influence of defects on the magnetic properties of -materials. +The model represents the simulation of atomic magnetic spins coupled +to lattice vibrations. The dynamics of those magnetic spins can be used +to simulate a broad range a phenomena related to magneto-elasticity, or +or to study the influence of defects on the magnetic properties of +materials. -The magnetic spins are interacting with each others and with the -lattice via pair interactions. Typically, the magnetic exchange -interaction can be defined using the +The magnetic spins are interacting with each others and with the +lattice via pair interactions. Typically, the magnetic exchange +interaction can be defined using the "pair/spin/exchange"_pair_spin_exchange.html command. This exchange applies a magnetic torque to a given spin, considering the orientation -of its neighboring spins and their relative distances. -It also applies a force on the atoms as a function of the spin -orientations and their associated inter-atomic distances. - +of its neighboring spins and their relative distances. +It also applies a force on the atoms as a function of the spin +orientations and their associated inter-atomic distances. + The command "fix precession/spin"_fix_precession_spin.html allows to apply a constant magnetic torque on all the spins in the system. This torque can be an external magnetic field (Zeeman interaction), or an -uniaxial magnetic anisotropy. +uniaxial magnetic anisotropy. -A Langevin thermostat can be applied to those magnetic spins using -"fix langevin/spin"_fix_langevin_spin.html. Typically, this thermostat -can be coupled to another Langevin thermostat applied to the atoms -using "fix langevin"_fix_langevin.html in order to simulate -thermostatted spin-lattice system. +A Langevin thermostat can be applied to those magnetic spins using +"fix langevin/spin"_fix_langevin_spin.html. Typically, this thermostat +can be coupled to another Langevin thermostat applied to the atoms +using "fix langevin"_fix_langevin.html in order to simulate +thermostatted spin-lattice system. -The magnetic Gilbert damping can also be applied using "fix -langevin/spin"_fix_langevin_spin.html. It allows to either dissipate -the thermal energy of the Langevin thermostat, or to perform a +The magnetic Gilbert damping can also be applied using "fix +langevin/spin"_fix_langevin_spin.html. It allows to either dissipate +the thermal energy of the Langevin thermostat, or to perform a relaxation of the magnetic configuration toward an equilibrium state. -All the computed magnetic properties can be output by two main -commands. The first one is "compute spin"_compute_spin.html, that -enables to evaluate magnetic averaged quantities, such as the total +All the computed magnetic properties can be output by two main +commands. The first one is "compute spin"_compute_spin.html, that +enables to evaluate magnetic averaged quantities, such as the total magnetization of the system along x, y, or z, the spin temperature, or -the magnetic energy. The second command is "compute +the magnetic energy. The second command is "compute property/atom"_compute_property_atom.html. It enables to output all the -per atom magnetic quantities. Typically, the orientation of a given +per atom magnetic quantities. Typically, the orientation of a given magnetic spin, or the magnetic force acting on this spin. :line :link(Tranchida7) -[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, +[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, arXiv preprint arXiv:1801.10233, (2018). diff --git a/doc/src/Install_linux.txt b/doc/src/Install_linux.txt index bd22de057c..f1da9de66e 100644 --- a/doc/src/Install_linux.txt +++ b/doc/src/Install_linux.txt @@ -89,7 +89,7 @@ the C library interface (lammps-headers), and the LAMMPS python module for Python 3. All packages can be installed at the same time and the name of the LAMMPS executable is {lmp} in all 3 cases. By default, {lmp} will refer to the serial executable, unless -one of the MPI environment modules is loaded +one of the MPI environment modules is loaded ("module load mpi/mpich-x86_64" or "module load mpi/openmpi-x86_64"). Then the corresponding parallel LAMMPS executable is used. The same mechanism applies when loading the LAMMPS python module. diff --git a/doc/src/Install_patch.txt b/doc/src/Install_patch.txt index ff9b14c12c..40c272d1c8 100644 --- a/doc/src/Install_patch.txt +++ b/doc/src/Install_patch.txt @@ -17,7 +17,7 @@ how to stay current are on the "Install git"_Install_git.html and If you prefer to download a tarball, as described on the "Install git"_Install_tarball.html doc page, you can stay current by downloading "patch files" when new patch releases are made. A link to -a patch file is posted on the "bug and feature +a patch file is posted on the "bug and feature page"_http://lammps.sandia.gov/bug.html of the LAMMPS website, along with a list of changed files and details about what is in the new patch release. This page explains how to apply the patch file to your local diff --git a/doc/src/Intro_authors.txt b/doc/src/Intro_authors.txt index dc41727c05..8f025df96d 100644 --- a/doc/src/Intro_authors.txt +++ b/doc/src/Intro_authors.txt @@ -58,7 +58,7 @@ page"_http://lammps.sandia.gov/history.html of the website, LAMMPS originated as a cooperative project between DOE labs and industrial partners. Folks involved in the design and testing of the original version of LAMMPS were the following: - + John Carpenter (Mayo Clinic, formerly at Cray Research) Terry Stouch (Lexicon Pharmaceuticals, formerly at Bristol Myers Squibb) Steve Lustig (Dupont) diff --git a/doc/src/Intro_features.txt b/doc/src/Intro_features.txt index d5e5b7f8b5..66874e79e0 100644 --- a/doc/src/Intro_features.txt +++ b/doc/src/Intro_features.txt @@ -110,7 +110,7 @@ Atom creation :h4,link(create) displace atoms :ul Ensembles, constraints, and boundary conditions :h4,link(ensemble) -("fix"_fix.html command) +("fix"_fix.html command) 2d or 3d systems orthogonal or non-orthogonal (triclinic symmetry) simulation domains @@ -128,7 +128,7 @@ Ensembles, constraints, and boundary conditions :h4,link(ensemble) variety of additional boundary conditions and constraints :ul Integrators :h4,link(integrate) -("run"_run.html, "run_style"_run_style.html, "minimize"_minimize.html commands) +("run"_run.html, "run_style"_run_style.html, "minimize"_minimize.html commands) velocity-Verlet integrator Brownian dynamics @@ -142,7 +142,7 @@ Diagnostics :h4,link(diag) see various flavors of the "fix"_fix.html and "compute"_compute.html commands :ul Output :h4,link(output) -("dump"_dump.html, "restart"_restart.html commands) +("dump"_dump.html, "restart"_restart.html commands) log file of thermodynamic info text dump files of atom coords, velocities, other per-atom quantities diff --git a/doc/src/Manual_build.txt b/doc/src/Manual_build.txt index ac12dd7b2e..42c77c4500 100644 --- a/doc/src/Manual_build.txt +++ b/doc/src/Manual_build.txt @@ -61,7 +61,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 epub # generate LAMMPS.epub in ePUB format using Sphinx make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert make clean # remove intermediate RST files created by HTML build make clean-all # remove entire build folder and any cached data :pre diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index d6a3e17866..364ff3fe30 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -205,7 +205,7 @@ available on your system. [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -286,7 +286,7 @@ also the "KOKKOS"_#PKG-KOKKOS package, which has GPU-enabled styles. [Authors:] Mike Brown (Intel) while at Sandia and ORNL and Trung Nguyen (Northwestern U) while at ORNL. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -354,7 +354,7 @@ API which the "pair_style kim"_pair_kim.html command uses. He developed the pair style in collaboration with Valeriu Smirichinski (U Minnesota). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -400,7 +400,7 @@ which was developed by Carter Edwards, Christian Trott, and others at Sandia, and which is included in the LAMMPS distribution in lib/kokkos. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -548,7 +548,7 @@ and user interface. [Author:] Greg Wagner (Northwestern U) while at Sandia. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -681,7 +681,7 @@ system. library was developed by Jacob Wagner in Greg Voth's group at the University of Chicago. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -713,7 +713,7 @@ have styles optimized for CPU performance. [Authors:] James Fischer (High Performance Technologies), David Richie, and Vincent Natoli (Stone Ridge Technolgy). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -770,7 +770,7 @@ connections at hinge points. [Author:] Rudra Mukherjee (JPL) while at RPI. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -802,7 +802,7 @@ shared library available on your system, which needs to be a Python 2 version, 2.6 or later. Python 3 is not yet supported. See the lib/python/README for more details. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -850,7 +850,7 @@ as bonds are created and destroyed. [Author:] Aidan Thompson (Sandia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1023,7 +1023,7 @@ system. library was written by Chris Rycroft (Harvard U) while at UC Berkeley and LBNL. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1050,7 +1050,7 @@ atomic information to continuum fields. [Authors:] Reese Jones, Jeremy Templeton, Jon Zimmerman (Sandia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1077,7 +1077,7 @@ model. [Author:] Ilya Valuev (JIHT, Russia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1100,7 +1100,7 @@ This package provides "fix bocs"_fix_bocs.html, a modified version of "fix npt"_fix_nh.html which includes the pressure correction to the barostat as outlined in: -N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that +N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that accurately describe the structure, pressure, and compressibility of molecular liquids," J. Chem. Phys. 143, 243148 (2015). @@ -1185,7 +1185,7 @@ and Jerome Henin (LISM, CNRS, Marseille, France), originally for the NAMD MD code, but with portability in mind. Axel Kohlmeyer (Temple U) provided the interface to LAMMPS. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#user-colvars on the "Build @@ -1395,7 +1395,7 @@ system. [Author:] Pierre de Buyl (KU Leuven) created both the package and the H5MD format. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1433,7 +1433,7 @@ NOTE: the USER-INTEL package contains styles that require using the [Author:] Mike Brown (Intel). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1603,17 +1603,17 @@ USER-MOFFF package :link(PKG-USER-MOFFF),h4 [Contents:] Pair, angle and improper styles needed to employ the MOF-FF -force field by Schmid and coworkers with LAMMPS. +force field by Schmid and coworkers with LAMMPS. MOF-FF is a first principles derived force field with the primary aim -to simulate MOFs and related porous framework materials, using spherical +to simulate MOFs and related porous framework materials, using spherical Gaussian charges. It is described in S. Bureekaew et al., Phys. Stat. Sol. B 2013, 250, 1128-1141. -For the usage of MOF-FF see the example in the example directory as +For the usage of MOF-FF see the example in the example directory as well as the "MOF+"_MOFplus website. :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) -[Author:] Hendrik Heenen (Technical U of Munich), +[Author:] Hendrik Heenen (Technical U of Munich), Rochus Schmid (Ruhr-University Bochum). [Supporting info:] @@ -1654,7 +1654,7 @@ at [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1694,7 +1694,7 @@ tools: [Author:] Lars Pastewka (Karlsruhe Institute of Technology). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1738,7 +1738,7 @@ See src/MAKE/OPTIONS/Makefile.omp for an example. Once you have an appropriate Makefile.machine, you can install/un-install the package and build LAMMPS in the usual manner: -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1817,7 +1817,7 @@ without changes to LAMMPS itself. [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1875,7 +1875,7 @@ on your system. [Author:] Albert Bartok (Cambridge University) -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1994,7 +1994,7 @@ specified as surface geometries from *.STL files. [Author:] Georg Ganzenmuller (Fraunhofer-Institute for High-Speed Dynamics, Ernst Mach Institute, Germany). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -2120,7 +2120,7 @@ system. [Authors:] Richard Berger (JKU) and Daniel Queteschiner (DCS Computing). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build diff --git a/doc/src/Speed_intel.txt b/doc/src/Speed_intel.txt index 7ff8d73ae9..da772f29fd 100644 --- a/doc/src/Speed_intel.txt +++ b/doc/src/Speed_intel.txt @@ -27,9 +27,9 @@ Bond Styles: fene, fourier, harmonic :l Dihedral Styles: charmm, harmonic, opls :l Fixes: nve, npt, nvt, nvt/sllod, nve/asphere :l Improper Styles: cvff, harmonic :l -Pair Styles: airebo, airebo/morse, buck/coul/cut, buck/coul/long, -buck, dpd, eam, eam/alloy, eam/fs, gayberne, lj/charmm/coul/charmm, -lj/charmm/coul/long, lj/cut, lj/cut/coul/long, lj/long/coul/long, +Pair Styles: airebo, airebo/morse, buck/coul/cut, buck/coul/long, +buck, dpd, eam, eam/alloy, eam/fs, gayberne, lj/charmm/coul/charmm, +lj/charmm/coul/long, lj/cut, lj/cut/coul/long, lj/long/coul/long, rebo, sw, tersoff :l K-Space Styles: pppm, pppm/disp :l :ule @@ -233,12 +233,12 @@ However, if you do not have co-processors on your system, building without offload support will produce a smaller binary. The general requirements for Makefiles with the USER-INTEL package -are as follows. When using Intel compilers, "-restrict" is required -and "-qopenmp" is highly recommended for CCFLAGS and LINKFLAGS. +are as follows. When using Intel compilers, "-restrict" is required +and "-qopenmp" is highly recommended for CCFLAGS and LINKFLAGS. CCFLAGS should include "-DLMP_INTEL_USELRT" (unless POSIX Threads are not supported in the build environment) and "-DLMP_USE_MKL_RNG" (unless Intel Math Kernel Library (MKL) is not available in the build -environment). For Intel compilers, LIB should include "-ltbbmalloc" +environment). For Intel compilers, LIB should include "-ltbbmalloc" or if the library is not available, "-DLMP_INTEL_NO_TBB" can be added to CCFLAGS. For builds supporting offload, "-DLMP_INTEL_OFFLOAD" is required for CCFLAGS and "-qoffload" is required for LINKFLAGS. Other @@ -399,7 +399,7 @@ the "suffix hybrid intel omp"_suffix.html command can also be used within the input script to automatically append the "omp" suffix to styles when USER-INTEL styles are not available. -NOTE: For simulations on higher node counts, add "processors * * * +NOTE: For simulations on higher node counts, add "processors * * * grid numa"_processors.html to the beginning of the input script for better scalability. diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index 0a24753a9f..ef193d7401 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -106,10 +106,10 @@ modification to the input script is needed. Alternatively, one can run with the KOKKOS package by editing the input script as described below. -NOTE: When using a single OpenMP thread, the Kokkos Serial back end (i.e. -Makefile.kokkos_mpi_only) will give better performance than the OpenMP -back end (i.e. Makefile.kokkos_omp) because some of the overhead to make -the code thread-safe is removed. +NOTE: When using a single OpenMP thread, the Kokkos Serial back end (i.e. +Makefile.kokkos_mpi_only) will give better performance than the OpenMP +back end (i.e. Makefile.kokkos_omp) because some of the overhead to make +the code thread-safe is removed. NOTE: The default for the "package kokkos"_package.html command is to use "full" neighbor lists and set the Newton flag to "off" for both diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index 1ec4969620..d2e53d8b77 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -263,7 +263,7 @@ These tools were provided by Andres Jaramillo-Botero at CalTech emacs tool :h4,link(emacs) -The tools/emacs directory contains an Emacs Lisp add-on file for GNU Emacs +The tools/emacs directory contains an Emacs Lisp add-on file for GNU Emacs that enables a lammps-mode for editing input scripts when using GNU Emacs, with various highlighting options set up. diff --git a/doc/src/angle_cosine_buck6d.txt b/doc/src/angle_cosine_buck6d.txt index 686e123ca0..1ce3556ea6 100644 --- a/doc/src/angle_cosine_buck6d.txt +++ b/doc/src/angle_cosine_buck6d.txt @@ -23,19 +23,19 @@ The {cosine/buck6d} angle style uses the potential :c,image(Eqs/angle_cosine_buck6d.jpg) -where K is the energy constant, n is the periodic multiplicity and +where K is the energy constant, n is the periodic multiplicity and Theta0 is the equilibrium angle. -The coefficients must be defined for each angle type via the +The coefficients must be defined for each angle type via the "angle_coeff"_angle_coeff.html command as in the example above, or in the data file or restart files read by the "read_data"_read_data.html or "read_restart"_read_restart.html commands in the following order: K (energy) -n +n Theta0 (degrees) :ul -Theta0 is specified in degrees, but LAMMPS converts it to radians +Theta0 is specified in degrees, but LAMMPS converts it to radians internally. Additional to the cosine term the {cosine/buck6d} angle style computes @@ -51,8 +51,8 @@ the "special_bonds"_special_bonds.html 1-3 interactions to be weighted [Restrictions:] {cosine/buck6d} can only be used in combination with the -"pair_buck6d"_pair_buck6d_coul_gauss.html style and with a -"special_bonds"_special_bonds.html 0.0 weighting of 1-3 interactions. +"pair_buck6d"_pair_buck6d_coul_gauss.html style and with a +"special_bonds"_special_bonds.html 0.0 weighting of 1-3 interactions. This angle style can only be used if LAMMPS was built with the USER-MOFFF package. See the "Build package"_Build_package.html doc diff --git a/doc/src/angle_cosine_shift.txt b/doc/src/angle_cosine_shift.txt index 3a4efad218..65dc0924e5 100644 --- a/doc/src/angle_cosine_shift.txt +++ b/doc/src/angle_cosine_shift.txt @@ -63,7 +63,7 @@ instructions on how to use the accelerated styles effectively. [Restrictions:] This angle style can only be used if LAMMPS was built with the -USER-MISC package. +USER-MISC package. [Related commands:] diff --git a/doc/src/atom_style.txt b/doc/src/atom_style.txt index ff714e31d9..ff96fedab9 100644 --- a/doc/src/atom_style.txt +++ b/doc/src/atom_style.txt @@ -39,7 +39,7 @@ atom_style body nparticle 2 10 atom_style hybrid charge bond atom_style hybrid charge body nparticle 2 5 atom_style spin -atom_style template myMols +atom_style template myMols atom_style tdpd 2 :pre [Description:] @@ -309,9 +309,9 @@ force fields"_pair_eff.html. The {dpd} style is part of the USER-DPD package for dissipative particle dynamics (DPD). -The {edpd}, {mdpd}, and {tdpd} styles are part of the USER-MESO package -for energy-conserving dissipative particle dynamics (eDPD), many-body -dissipative particle dynamics (mDPD), and transport dissipative particle +The {edpd}, {mdpd}, and {tdpd} styles are part of the USER-MESO package +for energy-conserving dissipative particle dynamics (eDPD), many-body +dissipative particle dynamics (mDPD), and transport dissipative particle dynamics (tDPD), respectively. The {meso} style is part of the USER-SPH package for smoothed particle diff --git a/doc/src/bond_style.txt b/doc/src/bond_style.txt index d603bc28fd..ae19f2369d 100644 --- a/doc/src/bond_style.txt +++ b/doc/src/bond_style.txt @@ -89,7 +89,7 @@ accelerated styles exist. "morse"_bond_morse.html - Morse bond "nonlinear"_bond_nonlinear.html - nonlinear bond "oxdna/fene"_bond_oxdna.html - modified FENE bond suitable for DNA modeling -"oxdna2/fene"_bond_oxdna.html - same as oxdna but used with different pair styles +"oxdna2/fene"_bond_oxdna.html - same as oxdna but used with different pair styles "quartic"_bond_quartic.html - breakable quartic bond "table"_bond_table.html - tabulated by bond length :ul diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 8c3c5d5dde..4886e73ab6 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -170,14 +170,14 @@ The individual style names on the "Commands compute"_Commands_compute.html doc page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. -"ackland/atom"_compute_ackland_atom.html - +"ackland/atom"_compute_ackland_atom.html - "adf"_compute_adf.html - angular distribution function of triples of atoms "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom -"angle"_compute_angle.html - -"angle/local"_compute_angle_local.html - +"angle"_compute_angle.html - +"angle/local"_compute_angle_local.html - "angle/local"_compute_bond_local.html - theta and energy of each angle "angmom/chunk"_compute_angmom_chunk.html - angular momentum for each chunk -"basal/atom"_compute_basal_atom.html - +"basal/atom"_compute_basal_atom.html - "body/local"_compute_body_local.html - attributes of body sub-particles "bond"_compute_bond.html - values computed by a bond style "bond/local"_compute_bond_local.html - distance and energy of each bond @@ -186,48 +186,48 @@ compute"_Commands_compute.html doc page are followed by one or more of "chunk/spread/atom"_compute_chunk_spread_atom.html - spreads chunk values to each atom in chunk "cluster/atom"_compute_cluster_atom.html - cluster ID for each atom "cna/atom"_compute_cna_atom.html - common neighbor analysis (CNA) for each atom -"cnp/atom"_compute_cnp_atom.html - +"cnp/atom"_compute_cnp_atom.html - "com"_compute_com.html - center-of-mass of group of atoms "com/chunk"_compute_com_chunk.html - center-of-mass for each chunk "contact/atom"_compute_contact_atom.html - contact count for each spherical particle "coord/atom"_compute_coord_atom.html - coordination number for each atom "damage/atom"_compute_damage_atom.html - Peridynamic damage for each atom -"dihedral"_compute_dihedral.html - +"dihedral"_compute_dihedral.html - "dihedral/local"_compute_dihedral_local.html - angle of each dihedral "dilatation/atom"_compute_dilatation_atom.html - Peridynamic dilatation for each atom -"dipole/chunk"_compute_dipole_chunk.html - +"dipole/chunk"_compute_dipole_chunk.html - "displace/atom"_compute_displace_atom.html - displacement of each atom -"dpd"_compute_dpd.html - -"dpd/atom"_compute_dpd_atom.html - -"edpd/temp/atom"_compute_edpd_temp_atom.html - -"entropy/atom"_compute_entropy_atom.html - +"dpd"_compute_dpd.html - +"dpd/atom"_compute_dpd_atom.html - +"edpd/temp/atom"_compute_edpd_temp_atom.html - +"entropy/atom"_compute_entropy_atom.html - "erotate/asphere"_compute_erotate_asphere.html - rotational energy of aspherical particles "erotate/rigid"_compute_erotate_rigid.html - rotational energy of rigid bodies "erotate/sphere"_compute_erotate_sphere.html - rotational energy of spherical particles "erotate/sphere/atom"_compute_erotate_sphere.html - rotational energy for each spherical particle -"erotate/sphere/atom"_compute_erotate_sphere_atom.html - +"erotate/sphere/atom"_compute_erotate_sphere_atom.html - "event/displace"_compute_event_displace.html - detect event on atom displacement -"fep"_compute_fep.html - -"force/tally"_compute_tally.html - +"fep"_compute_fep.html - +"force/tally"_compute_tally.html - "fragment/atom"_compute_cluster_atom.html - fragment ID for each atom -"global/atom"_compute_global_atom.html - +"global/atom"_compute_global_atom.html - "group/group"_compute_group_group.html - energy/force between two groups of atoms "gyration"_compute_gyration.html - radius of gyration of group of atoms "gyration/chunk"_compute_gyration_chunk.html - radius of gyration for each chunk "heat/flux"_compute_heat_flux.html - heat flux through a group of atoms -"heat/flux/tally"_compute_tally.html - +"heat/flux/tally"_compute_tally.html - "hexorder/atom"_compute_hexorder_atom.html - bond orientational order parameter q6 -"improper"_compute_improper.html - +"improper"_compute_improper.html - "improper/local"_compute_improper_local.html - angle of each improper "inertia/chunk"_compute_inertia_chunk.html - inertia tensor for each chunk "ke"_compute_ke.html - translational kinetic energy "ke/atom"_compute_ke_atom.html - kinetic energy for each atom -"ke/atom/eff"_compute_ke_atom_eff.html - -"ke/eff"_compute_ke_eff.html - +"ke/atom/eff"_compute_ke_atom_eff.html - +"ke/eff"_compute_ke_eff.html - "ke/rigid"_compute_ke_rigid.html - translational kinetic energy of rigid bodies -"meso/e/atom"_compute_meso_e_atom.html - -"meso/rho/atom"_compute_meso_rho_atom.html - -"meso/t/atom"_compute_meso_t_atom.html - +"meso/e/atom"_compute_meso_e_atom.html - +"meso/rho/atom"_compute_meso_rho_atom.html - +"meso/t/atom"_compute_meso_t_atom.html - "msd"_compute_msd.html - mean-squared displacement of group of atoms "msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk "msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms @@ -237,71 +237,71 @@ compute"_Commands_compute.html doc page are followed by one or more of "pair/local"_compute_pair_local.html - distance/energy/force of each pairwise interaction "pe"_compute_pe.html - potential energy "pe/atom"_compute_pe_atom.html - potential energy for each atom -"pe/mol/tally"_compute_tally.html - -"pe/tally"_compute_tally.html - +"pe/mol/tally"_compute_tally.html - +"pe/tally"_compute_tally.html - "plasticity/atom"_compute_plasticity_atom.html - Peridynamic plasticity for each atom "pressure"_compute_pressure.html - total pressure and pressure tensor -"pressure/cylinder"_compute_pressure_cylinder.html - -"pressure/uef"_compute_pressure_uef.html - +"pressure/cylinder"_compute_pressure_cylinder.html - +"pressure/uef"_compute_pressure_uef.html - "property/atom"_compute_property_atom.html - convert atom attributes to per-atom vectors/arrays "property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "property/local"_compute_property_local.html - convert local attributes to localvectors/arrays -"ptm/atom"_compute_ptm_atom.html - +"ptm/atom"_compute_ptm_atom.html - "rdf"_compute_rdf.html - radial distribution function g(r) histogram of group of atoms "reduce"_compute_reduce.html - combine per-atom quantities into a single global value "reduce/chunk"_compute_reduce_chunk.html - reduce per-atom quantities within each chunk "reduce/region"_compute_reduce.html - same as compute reduce, within a region "rigid/local"_compute_rigid_local.html - extract rigid body attributes -"saed"_compute_saed.html - +"saed"_compute_saed.html - "slice"_compute_slice.html - extract values from global vector or array -"smd/contact/radius"_compute_smd_contact_radius.html - -"smd/damage"_compute_smd_damage.html - -"smd/hourglass/error"_compute_smd_hourglass_error.html - -"smd/internal/energy"_compute_smd_internal_energy.html - -"smd/plastic/strain"_compute_smd_plastic_strain.html - -"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html - -"smd/rho"_compute_smd_rho.html - -"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html - -"smd/tlsph/dt"_compute_smd_tlsph_dt.html - -"smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html - -"smd/tlsph/shape"_compute_smd_tlsph_shape.html - -"smd/tlsph/strain"_compute_smd_tlsph_strain.html - -"smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html - -"smd/tlsph/stress"_compute_smd_tlsph_stress.html - +"smd/contact/radius"_compute_smd_contact_radius.html - +"smd/damage"_compute_smd_damage.html - +"smd/hourglass/error"_compute_smd_hourglass_error.html - +"smd/internal/energy"_compute_smd_internal_energy.html - +"smd/plastic/strain"_compute_smd_plastic_strain.html - +"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html - +"smd/rho"_compute_smd_rho.html - +"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html - +"smd/tlsph/dt"_compute_smd_tlsph_dt.html - +"smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html - +"smd/tlsph/shape"_compute_smd_tlsph_shape.html - +"smd/tlsph/strain"_compute_smd_tlsph_strain.html - +"smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html - +"smd/tlsph/stress"_compute_smd_tlsph_stress.html - "smd/triangle/vertices"_compute_smd_triangle_vertices.html - -"smd/triangle/vertices"_compute_smd_triangle_vertices.html - -"smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html - -"smd/ulsph/strain"_compute_smd_ulsph_strain.html - -"smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html - -"smd/ulsph/stress"_compute_smd_ulsph_stress.html - -"smd/vol"_compute_smd_vol.html - +"smd/triangle/vertices"_compute_smd_triangle_vertices.html - +"smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html - +"smd/ulsph/strain"_compute_smd_ulsph_strain.html - +"smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html - +"smd/ulsph/stress"_compute_smd_ulsph_stress.html - +"smd/vol"_compute_smd_vol.html - "sna/atom"_compute_sna_atom.html - calculate bispectrum coefficients for each atom "snad/atom"_compute_sna_atom.html - derivative of bispectrum coefficients for each atom "snav/atom"_compute_sna_atom.html - virial contribution from bispectrum coefficients for each atom -"spin"_compute_spin.html - +"spin"_compute_spin.html - "stress/atom"_compute_stress_atom.html - stress tensor for each atom -"stress/mop"_compute_stress_mop.html - -"stress/mop/profile"_compute_stress_mop.html - -"stress/tally"_compute_tally.html - -"tdpd/cc/atom"_compute_tdpd_cc_atom.html - +"stress/mop"_compute_stress_mop.html - +"stress/mop/profile"_compute_stress_mop.html - +"stress/tally"_compute_tally.html - +"tdpd/cc/atom"_compute_tdpd_cc_atom.html - "temp"_compute_temp.html - temperature of group of atoms "temp/asphere"_compute_temp_asphere.html - temperature of aspherical particles "temp/body"_compute_temp_body.html - temperature of body particles "temp/chunk"_compute_temp_chunk.html - temperature of each chunk "temp/com"_compute_temp_com.html - temperature after subtracting center-of-mass velocity -"temp/cs"_compute_temp_cs.html - +"temp/cs"_compute_temp_cs.html - "temp/deform"_compute_temp_deform.html - temperature excluding box deformation velocity -"temp/deform/eff"_compute_temp_deform_eff.html - -"temp/drude"_compute_temp_drude.html - -"temp/eff"_compute_temp_eff.html - +"temp/deform/eff"_compute_temp_deform_eff.html - +"temp/drude"_compute_temp_drude.html - +"temp/eff"_compute_temp_eff.html - "temp/partial"_compute_temp_partial.html - temperature excluding one or more dimensions of velocity "temp/profile"_compute_temp_profile.html - temperature excluding a binned velocity profile "temp/ramp"_compute_temp_ramp.html - temperature excluding ramped velocity component "temp/region"_compute_temp_region.html - temperature of a region of atoms -"temp/region/eff"_compute_temp_region_eff.html - -"temp/rotate"_compute_temp_rotate.html - +"temp/region/eff"_compute_temp_region_eff.html - +"temp/rotate"_compute_temp_rotate.html - "temp/sphere"_compute_temp_sphere.html - temperature of spherical particles -"temp/uef"_compute_temp_uef.html - +"temp/uef"_compute_temp_uef.html - "ti"_compute_ti.html - thermodynamic integration free energy values "torque/chunk"_compute_torque_chunk.html - torque applied on each chunk "vacf"_compute_vacf.html - velocity auto-correlation function of group of atoms diff --git a/doc/src/compute_angle_local.txt b/doc/src/compute_angle_local.txt index 8acaec94d5..332a7a07af 100644 --- a/doc/src/compute_angle_local.txt +++ b/doc/src/compute_angle_local.txt @@ -29,7 +29,7 @@ keyword = {set} :l [Examples:] compute 1 all angle/local theta -compute 1 all angle/local eng theta +compute 1 all angle/local eng theta compute 1 all angle/local theta v_cos set theta t :pre [Description:] diff --git a/doc/src/compute_chunk_spread_atom.txt b/doc/src/compute_chunk_spread_atom.txt index f84ef67974..5f65900a49 100644 --- a/doc/src/compute_chunk_spread_atom.txt +++ b/doc/src/compute_chunk_spread_atom.txt @@ -74,7 +74,7 @@ produces a global vector or array. :line -Each listed input is operated on independently. +Each listed input is operated on independently. If a bracketed index I is used, it can be specified using a wildcard asterisk with the index to effectively specify multiple values. This @@ -134,16 +134,16 @@ compute gyr all gyration/chunk cmol variable ave equal ave(c_gyr) thermo_style custom step etotal press v_ave :pre - 0 22.394765 4.6721833 5.128278 - 100 22.445002 4.8166709 5.0348372 - 200 22.500128 4.8790392 4.9364875 - 300 22.534686 4.9183766 4.8590693 - 400 22.557196 4.9492211 4.7937849 - 500 22.571017 4.9161853 4.7412008 - 600 22.573944 5.0229708 4.6931243 - 700 22.581804 5.0541301 4.6440647 - 800 22.584683 4.9691734 4.6000016 - 900 22.59128 5.0247538 4.5611513 + 0 22.394765 4.6721833 5.128278 + 100 22.445002 4.8166709 5.0348372 + 200 22.500128 4.8790392 4.9364875 + 300 22.534686 4.9183766 4.8590693 + 400 22.557196 4.9492211 4.7937849 + 500 22.571017 4.9161853 4.7412008 + 600 22.573944 5.0229708 4.6931243 + 700 22.581804 5.0541301 4.6440647 + 800 22.584683 4.9691734 4.6000016 + 900 22.59128 5.0247538 4.5611513 1000 22.586832 4.94697 4.5238362 :pre :line diff --git a/doc/src/compute_edpd_temp_atom.txt b/doc/src/compute_edpd_temp_atom.txt index f3c1418d44..ac3fb5e277 100644 --- a/doc/src/compute_edpd_temp_atom.txt +++ b/doc/src/compute_edpd_temp_atom.txt @@ -24,7 +24,7 @@ compute 1 all edpd/temp/atom :pre Define a computation that calculates the per-atom temperature for each eDPD particle in a group. -The temperature is a local temperature derived from the internal energy +The temperature is a local temperature derived from the internal energy of each eDPD particle based on the local equilibrium hypothesis. For more details please see "(Espanol1997)"_#Espanol1997 and "(Li2014)"_#Li2014a. diff --git a/doc/src/compute_entropy_atom.txt b/doc/src/compute_entropy_atom.txt index 04f0fd0b82..cd90a9b590 100644 --- a/doc/src/compute_entropy_atom.txt +++ b/doc/src/compute_entropy_atom.txt @@ -35,11 +35,11 @@ compute 1 all entropy/atom 0.125 7.3 avg yes 5.1 local yes :pre Define a computation that calculates the pair entropy fingerprint for each atom in the group. The fingerprint is useful to distinguish between -ordered and disordered environments, for instance liquid and solid-like -environments, or glassy and crystalline-like environments. Some -applications could be the identification of grain boundaries, a -melt-solid interface, or a solid cluster emerging from the melt. -The advantage of this parameter over others is that no a priori +ordered and disordered environments, for instance liquid and solid-like +environments, or glassy and crystalline-like environments. Some +applications could be the identification of grain boundaries, a +melt-solid interface, or a solid cluster emerging from the melt. +The advantage of this parameter over others is that no a priori information about the solid structure is required. This parameter for atom i is computed using the following formula from @@ -47,8 +47,8 @@ This parameter for atom i is computed using the following formula from :c,image(Eqs/pair_entropy.jpg) -where r is a distance, g(r) is the radial distribution function of atom -i and rho is the density of the system. The g(r) computed for each +where r is a distance, g(r) is the radial distribution function of atom +i and rho is the density of the system. The g(r) computed for each atom i can be noisy and therefore it is smoothed using: :c,image(Eqs/pair_entropy2.jpg) @@ -57,7 +57,7 @@ where the sum in j goes through the neighbors of atom i, and sigma is a parameter to control the smoothing. The input parameters are {sigma} the smoothing parameter, and the -{cutoff} for the calculation of g(r). +{cutoff} for the calculation of g(r). If the keyword {avg} has the setting {yes}, then this compute also averages the parameter over the neighbors of atom i according to: @@ -66,25 +66,25 @@ averages the parameter over the neighbors of atom i according to: where the sum j goes over the neighbors of atom i and N is the number of neighbors. This procedure provides a sharper distinction between -order and disorder environments. In this case the input parameter -{cutoff2} is the cutoff for the averaging over the neighbors and +order and disorder environments. In this case the input parameter +{cutoff2} is the cutoff for the averaging over the neighbors and must also be specified. If the {avg yes} option is used, the effective cutoff of the neighbor -list should be {cutoff}+{cutoff2} and therefore it might be necessary +list should be {cutoff}+{cutoff2} and therefore it might be necessary to increase the skin of the neighbor list with: neighbor skin bin :pre See "neighbor"_neighbor.html for details. -If the {local yes} option is used, the g(r) is normalized by the -local density around each atom, that is to say the density around each -atom is the number of neighbors within the neighbor list cutoff divided -by the corresponding volume. This option can be useful when dealing with +If the {local yes} option is used, the g(r) is normalized by the +local density around each atom, that is to say the density around each +atom is the number of neighbors within the neighbor list cutoff divided +by the corresponding volume. This option can be useful when dealing with inhomogeneous systems such as those that have surfaces. -Here are typical input parameters for fcc aluminum (lattice +Here are typical input parameters for fcc aluminum (lattice constant 4.05 Angstroms), compute 1 all entropy/atom 0.25 5.7 avg yes 3.7 :pre @@ -102,7 +102,7 @@ uses per-atom values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. -The pair entropy values have units of the Boltzmann constant. They are +The pair entropy values have units of the Boltzmann constant. They are always negative, and lower values (lower entropy) correspond to more ordered environments. diff --git a/doc/src/compute_pressure_cylinder.txt b/doc/src/compute_pressure_cylinder.txt index f4312e67bc..5cca9ea3a5 100644 --- a/doc/src/compute_pressure_cylinder.txt +++ b/doc/src/compute_pressure_cylinder.txt @@ -42,14 +42,14 @@ output in pressure units. [Output info:] This compute calculates a global array with 5 columns and Rmax/bin_width -rows. The output columns are: R (distance units), number density (inverse -volume units), configurational radial pressure (pressure units), +rows. The output columns are: R (distance units), number density (inverse +volume units), configurational radial pressure (pressure units), configurational azimuthal pressure (pressure units), and configurational axial pressure (pressure units). The values calculated by this compute are "intensive". The pressure values will be in pressure -"units"_units.html. The number density values will be in +"units"_units.html. The number density values will be in inverse volume "units"_units.html. [Restrictions:] diff --git a/doc/src/compute_property_atom.txt b/doc/src/compute_property_atom.txt index 3c55c88d10..a0c8579283 100644 --- a/doc/src/compute_property_atom.txt +++ b/doc/src/compute_property_atom.txt @@ -86,7 +86,7 @@ input = one or more atom attributes :l compute 1 all property/atom xs vx fx mux compute 2 all property/atom type -compute 1 all property/atom ix iy iz +compute 1 all property/atom ix iy iz compute 3 all property/atom sp spx spy spz :pre [Description:] diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt index 95d183937f..ab652daf83 100644 --- a/doc/src/compute_sna_atom.txt +++ b/doc/src/compute_sna_atom.txt @@ -161,7 +161,7 @@ function. The keyword {bzeroflag} determines whether or not {B0}, the bispectrum components of an atom with no neighbors, are subtracted from -the calculated bispectrum components. This optional keyword +the calculated bispectrum components. This optional keyword normally only affects compute {sna/atom}. However, when {quadraticflag} is on, it also affects {snad/atom} and {snav/atom}. diff --git a/doc/src/compute_spin.txt b/doc/src/compute_spin.txt index 4edecc2408..d27e402972 100644 --- a/doc/src/compute_spin.txt +++ b/doc/src/compute_spin.txt @@ -21,7 +21,7 @@ compute out_mag all spin :pre [Description:] -Define a computation that calculates magnetic quantities for a system +Define a computation that calculates magnetic quantities for a system of atoms having spins. This compute calculates 6 magnetic quantities. @@ -31,11 +31,11 @@ magnetization. The fourth quantity is the norm of the total magnetization. -The fifth quantity is the magnetic energy. +The fifth quantity is the magnetic energy. The sixth one is referred to as the spin temperature, according -to the work of "(Nurdin)"_#Nurdin1. - +to the work of "(Nurdin)"_#Nurdin1. + The simplest way to output the results of the compute spin calculation is to define some of the quantities as variables, and to use the thermo and thermo_style commands, for example: @@ -49,9 +49,9 @@ variable temp_mag equal c_out_mag\[6\] :pre thermo 10 thermo_style custom step v_mag_z v_mag_norm v_temp_mag :pre -This series of commands evaluates the total magnetization along z, the norm of -the total magnetization, and the magnetic temperature. Three variables are -assigned to those quantities. The thermo and thermo_style commands print them +This series of commands evaluates the total magnetization along z, the norm of +the total magnetization, and the magnetic temperature. Three variables are +assigned to those quantities. The thermo and thermo_style commands print them every 10 timesteps. [Output info:] @@ -59,7 +59,7 @@ every 10 timesteps. The array values are "intensive". The array values will be in metal units ("units"_units.html). -[Restrictions:] +[Restrictions:] The {spin} compute is part of the SPIN package. This compute is only enabled if LAMMPS was built with this package. See the "Build diff --git a/doc/src/compute_stress_mop.txt b/doc/src/compute_stress_mop.txt index 1006463179..d97581afd5 100644 --- a/doc/src/compute_stress_mop.txt +++ b/doc/src/compute_stress_mop.txt @@ -60,7 +60,7 @@ Between one and three keywords can be used to indicate which contributions to the stress must be computed: kinetic stress (kin), configurational stress (conf), and/or total stress (total). -NOTE 1: The configurational stress is computed considering all pairs of atoms where at least one atom belongs to group group-ID. +NOTE 1: The configurational stress is computed considering all pairs of atoms where at least one atom belongs to group group-ID. NOTE 2: The local stress does not include any Lennard-Jones tail corrections to the pressure added by the "pair_modify tail @@ -80,11 +80,11 @@ keywords have been declared). For each keyword, the profiles of stress tensor components are ordered as follows: stress_dir,x; stress_dir,y; and stress_dir,z. -The values are in pressure "units"_units.html. +The values are in pressure "units"_units.html. The values produced by this compute can be accessed by various "output commands"_Howto_output.html. For instance, the results can be written to a file using the "fix ave/time"_fix_ave_time.html command. Please see the example in the examples/USER/mop folder. -[Restrictions:] +[Restrictions:] These styles are part of the USER-MISC package. They are only enabled if LAMMPS is built with that package. See the "Build package"_Build_package.html @@ -107,5 +107,5 @@ intra-molecular interactions, and long range (kspace) interactions. :line :link(mop-todd) -[(Todd)] B. D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids", +[(Todd)] B. D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids", Phys. Rev. E 52, 1627 (1995). diff --git a/doc/src/compute_tdpd_cc_atom.txt b/doc/src/compute_tdpd_cc_atom.txt index a385bef10b..d1f9c38319 100644 --- a/doc/src/compute_tdpd_cc_atom.txt +++ b/doc/src/compute_tdpd_cc_atom.txt @@ -13,7 +13,7 @@ compute tdpd/cc/atom command :h3 compute ID group-ID tdpd/cc/atom index :pre ID, group-ID are documented in "compute"_compute.html command -tdpd/cc/atom = style name of this compute command +tdpd/cc/atom = style name of this compute command index = index of chemical species (1 to Nspecies) :ul [Examples:] @@ -37,7 +37,7 @@ any command that uses per-atom values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. -The per-atom vector values will be in the units of chemical species +The per-atom vector values will be in the units of chemical species per unit mass. [Restrictions:] diff --git a/doc/src/compute_temp_uef.txt b/doc/src/compute_temp_uef.txt index 97e1d6e1ae..b9e6187533 100644 --- a/doc/src/compute_temp_uef.txt +++ b/doc/src/compute_temp_uef.txt @@ -17,17 +17,17 @@ temp/uef = style name of this compute command :ul [Examples:] -compute 1 all temp/uef +compute 1 all temp/uef compute 2 sel temp/uef :pre [Description:] -This command is used to compute the kinetic energy tensor in +This command is used to compute the kinetic energy tensor in the reference frame of the applied flow field when "fix nvt/uef"_fix_nh_uef.html or "fix npt/uef"_fix_nh_uef.html is used. It is not necessary to use this command to compute the scalar -value of the temperature. A "compute temp"_compute_temp.html +value of the temperature. A "compute temp"_compute_temp.html may be used for that purpose. Output information for this command can be found in the @@ -39,7 +39,7 @@ This fix is part of the USER-UEF package. It is only enabled if LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. -This command can only be used when "fix nvt/uef"_fix_nh_uef.html +This command can only be used when "fix nvt/uef"_fix_nh_uef.html or "fix npt/uef"_fix_nh_uef.html is active. [Related commands:] diff --git a/doc/src/create_bonds.txt b/doc/src/create_bonds.txt index fbf741d914..abd1959e81 100644 --- a/doc/src/create_bonds.txt +++ b/doc/src/create_bonds.txt @@ -90,7 +90,7 @@ The {many} style will create bonds between pairs of atoms I,J where I is in one of the two specified groups, and J is in the other. The two groups can be the same, e.g. group "all". The created bonds will be of bond type {btype}, where {btype} must be a value between 1 and the -number of bond types defined. +number of bond types defined. For a bond to be created, an I,J pair of atoms must be a distance D apart such that {rmin} <= D <= {rmax}. diff --git a/doc/src/dihedral_table_cut.txt b/doc/src/dihedral_table_cut.txt index b8e0ec64c8..6f3f6edbcc 100644 --- a/doc/src/dihedral_table_cut.txt +++ b/doc/src/dihedral_table_cut.txt @@ -59,7 +59,7 @@ cutoff angle2 filename keyword :ul -The cutoff dihedral style uses a tabulated dihedral interaction with a +The cutoff dihedral style uses a tabulated dihedral interaction with a cutoff function: :c,image(Eqs/dihedral_table_cut.jpg) diff --git a/doc/src/dump_cfg_uef.txt b/doc/src/dump_cfg_uef.txt index 16e4aba4c0..ca43b0b6ea 100644 --- a/doc/src/dump_cfg_uef.txt +++ b/doc/src/dump_cfg_uef.txt @@ -28,10 +28,10 @@ dump 2 all cfg/uef 100 dump.*.cfg mass type xs ys zs id c_stress :pre [Description:] This command is used to dump atomic coordinates in the -reference frame of the applied flow field when +reference frame of the applied flow field when "fix nvt/uef"_fix_nh_uef.html or -"fix npt/uef"_fix_nh_uef.html or is used. Only the atomic -coordinates and frame-invariant scalar quantities +"fix npt/uef"_fix_nh_uef.html or is used. Only the atomic +coordinates and frame-invariant scalar quantities will be in the flow frame. If velocities are selected as output, for example, they will not be in the same reference frame as the atomic positions. diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 92d0725828..916e9887f9 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -163,188 +163,188 @@ page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. "adapt"_fix_adapt.html - change a simulation parameter over time -"adapt/fep"_fix_adapt_fep.html - +"adapt/fep"_fix_adapt_fep.html - "addforce"_fix_addforce.html - add a force to each atom -"addtorque"_fix_addtorque.html - +"addtorque"_fix_addtorque.html - "append/atoms"_fix_append_atoms.html - append atoms to a running simulation -"atc"_fix_atc.html - +"atc"_fix_atc.html - "atom/swap"_fix_atom_swap.html - Monte Carlo atom type swapping "ave/atom"_fix_ave_atom.html - compute per-atom time-averaged quantities "ave/chunk"_fix_ave_chunk.html - compute per-chunk time-averaged quantities "ave/correlate"_fix_ave_correlate.html - compute/output time correlations -"ave/correlate/long"_fix_ave_correlate_long.html - +"ave/correlate/long"_fix_ave_correlate_long.html - "ave/histo"_fix_ave_histo.html - compute/output time-averaged histograms -"ave/histo/weight"_fix_ave_histo.html - +"ave/histo/weight"_fix_ave_histo.html - "ave/time"_fix_ave_time.html - compute/output global time-averaged quantities "aveforce"_fix_aveforce.html - add an averaged force to each atom "balance"_fix_balance.html - perform dynamic load-balancing -"bocs"_fix_bocs.html - +"bocs"_fix_bocs.html - "bond/break"_fix_bond_break.html - break bonds on the fly "bond/create"_fix_bond_create.html - create bonds on the fly -"bond/react"_fix_bond_react.html - +"bond/react"_fix_bond_react.html - "bond/swap"_fix_bond_swap.html - Monte Carlo bond swapping "box/relax"_fix_box_relax.html - relax box size during energy minimization -"client/md"_fix_client_md.html - -"cmap"_fix_cmap.html - -"colvars"_fix_colvars.html - -"controller"_fix_controller.html - +"client/md"_fix_client_md.html - +"cmap"_fix_cmap.html - +"colvars"_fix_colvars.html - +"controller"_fix_controller.html - "deform"_fix_deform.html - change the simulation box size/shape "deposit"_fix_deposit.html - add new atoms above a surface -"dpd/energy"_fix_dpd_energy.html - +"dpd/energy"_fix_dpd_energy.html - "drag"_fix_drag.html - drag atoms towards a defined coordinate -"drude"_fix_drude.html - -"drude/transform/direct"_fix_drude_transform.html - -"drude/transform/inverse"_fix_drude_transform.html - +"drude"_fix_drude.html - +"drude/transform/direct"_fix_drude_transform.html - +"drude/transform/inverse"_fix_drude_transform.html - "dt/reset"_fix_dt_reset.html - reset the timestep based on velocity, forces -"edpd/source"_fix_dpd_source.html - +"edpd/source"_fix_dpd_source.html - "efield"_fix_efield.html - impose electric field on system "ehex"_fix_ehex.html - enhanced heat exchange algorithm "enforce2d"_fix_enforce2d.html - zero out z-dimension velocity and force -"eos/cv"_fix_eos_cv.html - -"eos/table"_fix_eos_table.html - -"eos/table/rx"_fix_eos_table_rx.html - +"eos/cv"_fix_eos_cv.html - +"eos/table"_fix_eos_table.html - +"eos/table/rx"_fix_eos_table_rx.html - "evaporate"_fix_evaporate.html - remove atoms from simulation periodically "external"_fix_external.html - callback to an external driver program -"ffl"_fix_ffl.html - -"filter/corotate"_fix_filter_corotate.html - -"flow/gauss"_fix_flow_gauss.html - +"ffl"_fix_ffl.html - +"filter/corotate"_fix_filter_corotate.html - +"flow/gauss"_fix_flow_gauss.html - "freeze"_fix_freeze.html - freeze atoms in a granular simulation "gcmc"_fix_gcmc.html - grand canonical insertions/deletions "gld"_fix_gcmc.html - generalized Langevin dynamics integrator -"gld"_fix_gld.html - -"gle"_fix_gle.html - +"gld"_fix_gld.html - +"gle"_fix_gle.html - "gravity"_fix_gravity.html - add gravity to atoms in a granular simulation -"grem"_fix_grem.html - +"grem"_fix_grem.html - "halt"_fix_halt.html - terminate a dynamics run or minimization "heat"_fix_heat.html - add/subtract momentum-conserving heat "hyper/global"_fix_hyper_global.html - global hyperdynamics "hyper/local"_fix_hyper_local.html - local hyperdynamics -"imd"_fix_imd.html - +"imd"_fix_imd.html - "indent"_fix_indent.html - impose force due to an indenter -"ipi"_fix_ipi.html - +"ipi"_fix_ipi.html - "langevin"_fix_langevin.html - Langevin temperature control -"langevin/drude"_fix_langevin_drude.html - -"langevin/eff"_fix_langevin_eff.html - -"langevin/spin"_fix_langevin_spin.html - +"langevin/drude"_fix_langevin_drude.html - +"langevin/eff"_fix_langevin_eff.html - +"langevin/spin"_fix_langevin_spin.html - "latte"_fix_latte.html - wrapper on LATTE density-functional tight-binding code -"lb/fluid"_fix_lb_fluid.html - -"lb/momentum"_fix_lb_momentum.html - -"lb/pc"_fix_lb_pc.html - -"lb/rigid/pc/sphere"_fix_lb_rigid_pc_sphere.html - -"lb/viscous"_fix_lb_viscous.html - +"lb/fluid"_fix_lb_fluid.html - +"lb/momentum"_fix_lb_momentum.html - +"lb/pc"_fix_lb_pc.html - +"lb/rigid/pc/sphere"_fix_lb_rigid_pc_sphere.html - +"lb/viscous"_fix_lb_viscous.html - "lineforce"_fix_lineforce.html - constrain atoms to move in a line -"manifoldforce"_fix_manifoldforce.html - -"meso"_fix_meso.html - +"manifoldforce"_fix_manifoldforce.html - +"meso"_fix_meso.html - "meso"_fix_meso_move.html - move mesoscopic SPH/SDPD particles in a prescribed fashion -"meso/move"_fix_meso_move.html - -"meso/stationary"_fix_meso_stationary.html - +"meso/move"_fix_meso_move.html - +"meso/stationary"_fix_meso_stationary.html - "momentum"_fix_momentum.html - zero the linear and/or angular momentum of a group of atoms "move"_fix_move.html - move atoms in a prescribed fashion -"mscg"_fix_mscg.html - +"mscg"_fix_mscg.html - "msst"_fix_msst.html - multi-scale shock technique (MSST) integration -"mvv/dpd"_fix_mvv_dpd.html - -"mvv/edpd"_fix_mvv_dpd.html - -"mvv/tdpd"_fix_mvv_dpd.html - +"mvv/dpd"_fix_mvv_dpd.html - +"mvv/edpd"_fix_mvv_dpd.html - +"mvv/tdpd"_fix_mvv_dpd.html - "neb"_fix_neb.html - nudged elastic band (NEB) spring forces "nph"_fix_nh.html - constant NPH time integration via Nose/Hoover "nph/asphere"_fix_nph_asphere.html - NPH for aspherical particles -"nph/body"_fix_nph_body.html - +"nph/body"_fix_nph_body.html - "nph/body"_fix_nve_body.html - NPH for body particles -"nph/eff"_fix_nh_eff.html - +"nph/eff"_fix_nh_eff.html - "nph/sphere"_fix_nph_sphere.html - NPH for spherical particles "nphug"_fix_nphug.html - constant-stress Hugoniostat integration "npt"_fix_nh.html - constant NPT time integration via Nose/Hoover "npt/asphere"_fix_npt_asphere.html - NPT for aspherical particles -"npt/body"_fix_npt_body.html - +"npt/body"_fix_npt_body.html - "npt/body"_fix_nve_body.html - NPT for body particles -"npt/eff"_fix_nh_eff.html - +"npt/eff"_fix_nh_eff.html - "npt/sphere"_fix_npt_sphere.html - NPT for spherical particles -"npt/uef"_fix_nh_uef.html - +"npt/uef"_fix_nh_uef.html - "nve"_fix_nve.html - constant NVE time integration "nve/asphere"_fix_nve_asphere.html - NVE for aspherical particles "nve/asphere/noforce"_fix_nve_asphere_noforce.html - NVE for aspherical particles without forces" -"nve/awpmd"_fix_nve_awpmd.html - +"nve/awpmd"_fix_nve_awpmd.html - "nve/body"_fix_nve_body.html - NVE for body particles -"nve/dot"_fix_nve_dot.html - -"nve/dotc/langevin"_fix_nve_dotc_langevin.html - -"nve/eff"_fix_nve_eff.html - +"nve/dot"_fix_nve_dot.html - +"nve/dotc/langevin"_fix_nve_dotc_langevin.html - +"nve/eff"_fix_nve_eff.html - "nve/limit"_fix_nve_limit.html - NVE with limited step length "nve/line"_fix_nve_line.html - NVE for line segments -"nve/manifold/rattle"_fix_nve_manifold_rattle.html - +"nve/manifold/rattle"_fix_nve_manifold_rattle.html - "nve/noforce"_fix_nve_noforce.html - NVE without forces (v only) "nve/sphere"_fix_nve_sphere.html - NVE for spherical particles -"nve/spin"_fix_nve_spin.html - +"nve/spin"_fix_nve_spin.html - "nve/tri"_fix_nve_tri.html - NVE for triangles -"nvk"_fix_nvk.html - +"nvk"_fix_nvk.html - "nvt"_fix_nh.html - constant NVT time integration via Nose/Hoover "nvt/asphere"_fix_nvt_asphere.html - NVT for aspherical particles "nvt/body"_fix_nve_body.html - NVT for body particles -"nvt/body"_fix_nvt_body.html - -"nvt/eff"_fix_nh_eff.html - -"nvt/manifold/rattle"_fix_nvt_manifold_rattle.html - +"nvt/body"_fix_nvt_body.html - +"nvt/eff"_fix_nh_eff.html - +"nvt/manifold/rattle"_fix_nvt_manifold_rattle.html - "nvt/sllod"_fix_nvt_sllod.html - NVT for NEMD with SLLOD equations -"nvt/sllod/eff"_fix_nvt_sllod_eff.html - +"nvt/sllod/eff"_fix_nvt_sllod_eff.html - "nvt/sphere"_fix_nvt_sphere.html - NVT for spherical particles -"nvt/uef"_fix_nh_uef.html - +"nvt/uef"_fix_nh_uef.html - "oneway"_fix_oneway.html - constrain particles on move in one direction "orient/bcc"_fix_orient.html - add grain boundary migration force for BCC "orient/fcc"_fix_orient.html - add grain boundary migration force for FCC -"phonon"_fix_phonon.html - -"pimd"_fix_pimd.html - +"phonon"_fix_phonon.html - +"pimd"_fix_pimd.html - "planeforce"_fix_planeforce.html - constrain atoms to move in a plane "plumed"_fix_plumed.html - wrapper on PLUMED free energy library "poems"_fix_poems.html - constrain clusters of atoms to move as coupled rigid bodies "pour"_fix_pour.html - pour new atoms/molecules into a granular simulation domain -"precession/spin"_fix_precession_spin.html - +"precession/spin"_fix_precession_spin.html - "press/berendsen"_fix_press_berendsen.html - pressure control by Berendsen barostat "print"_fix_print.html - print text and variables during a simulation "property/atom"_fix_property_atom.html - add customized per-atom values -"python/invoke"_fix_python_invoke.html - -"python/move"_fix_python_move.html - -"qbmsst"_fix_qbmsst.html - +"python/invoke"_fix_python_invoke.html - +"python/move"_fix_python_move.html - +"qbmsst"_fix_qbmsst.html - "qeq/comb"_fix_qeq_comb.html - charge equilibration for COMB potential "qeq/dynamic"_fix_qeq.html - charge equilibration via dynamic method "qeq/fire"_fix_qeq.html - charge equilibration via FIRE minimizer "qeq/point"_fix_qeq.html - charge equilibration via point method -"qeq/reax"_fix_qeq_reax.html - +"qeq/reax"_fix_qeq_reax.html - "qeq/shielded"_fix_qeq.html - charge equilibration via shielded method "qeq/slater"_fix_qeq.html - charge equilibration via Slater method -"qmmm"_fix_qmmm.html - -"qtb"_fix_qtb.html - +"qmmm"_fix_qmmm.html - +"qtb"_fix_qtb.html - "rattle"_fix_shake.html - RATTLE constraints on bonds and/or angles "reax/bonds"_fix_reax_bonds.html - write out ReaxFF bond information -"reax/c/bonds"_fix_reax_bonds.html - -"reax/c/species"_fix_reaxc_species.html - +"reax/c/bonds"_fix_reax_bonds.html - +"reax/c/species"_fix_reaxc_species.html - "recenter"_fix_recenter.html - constrain the center-of-mass position of a group of atoms "restrain"_fix_restrain.html - constrain a bond, angle, dihedral -"rhok"_fix_rhok.html - +"rhok"_fix_rhok.html - "rigid"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NVE integration "rigid/nph"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPH integration -"rigid/nph/small"_fix_rigid.html - +"rigid/nph/small"_fix_rigid.html - "rigid/npt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPT integration -"rigid/npt/small"_fix_rigid.html - +"rigid/npt/small"_fix_rigid.html - "rigid/nve"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with alternate NVE integration -"rigid/nve/small"_fix_rigid.html - +"rigid/nve/small"_fix_rigid.html - "rigid/nvt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NVT integration -"rigid/nvt/small"_fix_rigid.html - +"rigid/nvt/small"_fix_rigid.html - "rigid/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVE integration "rigid/small/nph"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPH integration "rigid/small/npt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPT integration "rigid/small/nve"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with alternate NVE integration "rigid/small/nvt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVT integration "rigid/meso"_fix_rigid_meso.html - constrain clusters of mesoscopic SPH/SDPD particles to move as a rigid body -"rx"_fix_rx.html - -"saed/vtk"_fix_saed_vtk.html - +"rx"_fix_rx.html - +"saed/vtk"_fix_saed_vtk.html - "setforce"_fix_setforce.html - set the force on each atom "shake"_fix_shake.html - SHAKE constraints on bonds and/or angles -"shardlow"_fix_shardlow.html - -"smd"_fix_smd.html - -"smd/adjust_dt"_fix_smd_adjust_dt.html - -"smd/integrate_tlsph"_fix_smd_integrate_tlsph.html - -"smd/integrate_ulsph"_fix_smd_integrate_ulsph.html - -"smd/move_tri_surf"_fix_smd_move_triangulated_surface.html - -"smd/setvel"_fix_smd_setvel.html - -"smd/wall_surface"_fix_smd_wall_surface.html - +"shardlow"_fix_shardlow.html - +"smd"_fix_smd.html - +"smd/adjust_dt"_fix_smd_adjust_dt.html - +"smd/integrate_tlsph"_fix_smd_integrate_tlsph.html - +"smd/integrate_ulsph"_fix_smd_integrate_ulsph.html - +"smd/move_tri_surf"_fix_smd_move_triangulated_surface.html - +"smd/setvel"_fix_smd_setvel.html - +"smd/wall_surface"_fix_smd_wall_surface.html - "spring"_fix_spring.html - apply harmonic spring force to group of atoms "spring/chunk"_fix_spring_chunk.html - apply harmonic spring force to each chunk of atoms "spring/rg"_fix_spring_rg.html - spring on radius of gyration of group of atoms @@ -352,28 +352,28 @@ accelerated styles exist. "srd"_fix_srd.html - stochastic rotation dynamics (SRD) "store/force"_fix_store_force.html - store force on each atom "store/state"_fix_store_state.html - store attributes for each atom -"tdpd/source"_fix_dpd_source.html - +"tdpd/source"_fix_dpd_source.html - "temp/berendsen"_fix_temp_berendsen.html - temperature control by Berendsen thermostat "temp/csld"_fix_temp_csvr.html - canonical sampling thermostat with Langevin dynamics "temp/csvr"_fix_temp_csvr.html - canonical sampling thermostat with Hamiltonian dynamics "temp/rescale"_fix_temp_rescale.html - temperature control by velocity rescaling -"temp/rescale/eff"_fix_temp_rescale_eff.html - +"temp/rescale/eff"_fix_temp_rescale_eff.html - "tfmc"_fix_tfmc.html - perform force-bias Monte Carlo with time-stamped method "thermal/conductivity"_fix_thermal_conductivity.html - Muller-Plathe kinetic energy exchange for thermal conductivity calculation -"ti/spring"_fix_ti_spring.html - +"ti/spring"_fix_ti_spring.html - "tmd"_fix_tmd.html - guide a group of atoms to a new configuration "ttm"_fix_ttm.html - two-temperature model for electronic/atomic coupling -"ttm/mod"_fix_ttm.html - +"ttm/mod"_fix_ttm.html - "tune/kspace"_fix_tune_kspace.html - auto-tune KSpace parameters "vector"_fix_vector.html - accumulate a global vector every N timesteps "viscosity"_fix_viscosity.html - Muller-Plathe momentum exchange for viscosity calculation "viscous"_fix_viscous.html - viscous damping for granular simulations -"wall/body/polygon"_fix_wall_body_polygon.html - -"wall/body/polyhedron"_fix_wall_body_polyhedron.html - +"wall/body/polygon"_fix_wall_body_polygon.html - +"wall/body/polyhedron"_fix_wall_body_polyhedron.html - "wall/colloid"_fix_wall.html - Lennard-Jones wall interacting with finite-size particles -"wall/ees"_fix_wall_ees.html - +"wall/ees"_fix_wall_ees.html - "wall/gran"_fix_wall_gran.html - frictional wall(s) for granular simulations -"wall/gran/region"_fix_wall_gran_region.html - +"wall/gran/region"_fix_wall_gran_region.html - "wall/harmonic"_fix_wall.html - harmonic spring wall "wall/lj1043"_fix_wall.html - Lennard-Jones 10-4-3 wall "wall/lj126"_fix_wall.html - Lennard-Jones 12-6 wall @@ -381,7 +381,7 @@ accelerated styles exist. "wall/piston"_fix_wall_piston.html - moving reflective piston wall "wall/reflect"_fix_wall_reflect.html - reflecting wall(s) "wall/region"_fix_wall_region.html - use region surface as wall -"wall/region/ees"_fix_wall_ees.html - +"wall/region/ees"_fix_wall_ees.html - "wall/srd"_fix_wall_srd.html - slip/no-slip wall for SRD particles :ul [Restrictions:] diff --git a/doc/src/fix_bocs.txt b/doc/src/fix_bocs.txt index cbcd1138d3..db9c35069c 100644 --- a/doc/src/fix_bocs.txt +++ b/doc/src/fix_bocs.txt @@ -24,7 +24,7 @@ keyword = {temp} or {cgiso} or {analytic} or {linear_spline} or {cubic_spline} [Examples:] fix 1 all bocs temp 300.0 300.0 100.0 cgiso 0.986 0.986 1000.0 analytic 66476.015 968 2 245030.10 8962.20 :pre - + fix 1 all bocs temp 300.0 300.0 100.0 cgiso 0.986 0.986 1000.0 cubic_spline input_Fv.dat :pre thermo_modify press 1_press :pre @@ -32,55 +32,55 @@ thermo_modify press 1_press :pre [Description:] -These commands incorporate a pressure correction as described by +These commands incorporate a pressure correction as described by Dunn and Noid in "(Dunn1)"_#bocs-Dunn1 to the standard MTTK barostat by Martyna et. al. in "(Martyna)"_#bocs-Martyna . The first half of the command mimics a standard fix npt command: fix 1 all bocs temp Tstart Tstop Tcoupl cgiso Pstart Pstop Pdamp :pre -The two differences are replacing {npt} with {bocs}, and replacing +The two differences are replacing {npt} with {bocs}, and replacing {iso}/{aniso}/{etc} with {cgiso}. -The rest of the command details what form you would like to use for -the pressure correction equation. The choices are: {analytic}, {linear_spline}, -or {cubic_spline}. +The rest of the command details what form you would like to use for +the pressure correction equation. The choices are: {analytic}, {linear_spline}, +or {cubic_spline}. -With either spline method, the only argument that needs to follow it -is the name of a file that contains the desired pressure correction +With either spline method, the only argument that needs to follow it +is the name of a file that contains the desired pressure correction as a function of volume. The file should be formatted so each line has: Volume_i, PressureCorrection_i :pre -Note both the COMMA and the SPACE separating the volume's -value and its corresponding pressure correction. The volumes in the file -should be uniformly spaced. Both the volumes and the pressure corrections -should be provided in the proper units, e.g. if you are using {units real}, -the volumes should all be in cubic angstroms, and the pressure corrections -should all be in atmospheres. Furthermore, the table should start/end at a -volume considerably smaller/larger than you expect your system to sample -during the simulation. If the system ever reaches a volume outside of the +Note both the COMMA and the SPACE separating the volume's +value and its corresponding pressure correction. The volumes in the file +should be uniformly spaced. Both the volumes and the pressure corrections +should be provided in the proper units, e.g. if you are using {units real}, +the volumes should all be in cubic angstroms, and the pressure corrections +should all be in atmospheres. Furthermore, the table should start/end at a +volume considerably smaller/larger than you expect your system to sample +during the simulation. If the system ever reaches a volume outside of the range provided, the simulation will stop. With the {analytic} option, the arguments are as follows: ... analytic V_avg N_particles N_coeff Coeff_1 Coeff_2 ... Coeff_N :pre -Note that {V_avg} and {Coeff_i} should all be in the proper units, e.g. if you -are using {units real}, {V_avg} should be in cubic angstroms, and the +Note that {V_avg} and {Coeff_i} should all be in the proper units, e.g. if you +are using {units real}, {V_avg} should be in cubic angstroms, and the coefficients should all be in atmospheres * cubic angstroms. [Restrictions:] As this is computing a (modified) pressure, group-ID should be {all}. -The pressure correction has only been tested for use with an isotropic -pressure coupling in 3 dimensions. +The pressure correction has only been tested for use with an isotropic +pressure coupling in 3 dimensions. By default, LAMMPS will still report the normal value for the pressure if the pressure is printed via a {thermo} command, or if the pressures are written to a file every so often. In order to have LAMMPS report the -modified pressure, you must include the {thermo_modify} command given in -the examples. For the last argument in the command, you should put +modified pressure, you must include the {thermo_modify} command given in +the examples. For the last argument in the command, you should put XXXX_press, where XXXX is the ID given to the fix bocs command (in the example, the ID of the fix bocs command is 1 ). @@ -90,8 +90,8 @@ package"_Build_package.html doc page for more info. [Related:] -For more details about the pressure correction and the entire BOCS software -package, visit the "BOCS package on GitHub"_bocsgithub and read the release +For more details about the pressure correction and the entire BOCS software +package, visit the "BOCS package on GitHub"_bocsgithub and read the release paper by Dunn et. al. "(Dunn2)"_#bocs-Dunn2 . diff --git a/doc/src/fix_client_md.txt b/doc/src/fix_client_md.txt index 6828731021..5fee8511fe 100644 --- a/doc/src/fix_client_md.txt +++ b/doc/src/fix_client_md.txt @@ -68,7 +68,7 @@ LAMMPS and another code in tandem to perform a coupled simulation. [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart -files"_restart.html. +files"_restart.html. The "fix_modify"_fix_modify.html {energy} option is supported by this fix to add the potential energy computed by the server application to diff --git a/doc/src/fix_deform.txt b/doc/src/fix_deform.txt index d35c3065a2..3259f79497 100644 --- a/doc/src/fix_deform.txt +++ b/doc/src/fix_deform.txt @@ -86,7 +86,7 @@ Change the volume and/or shape of the simulation box during a dynamics run. Orthogonal simulation boxes have 3 adjustable parameters (x,y,z). Triclinic (non-orthogonal) simulation boxes have 6 adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be -adjusted independently and simultaneously by this command. +adjusted independently and simultaneously by this command. This fix can be used to perform non-equilibrium MD (NEMD) simulations of a continuously strained system. See the "fix diff --git a/doc/src/fix_dt_reset.txt b/doc/src/fix_dt_reset.txt index 0c5a4493ae..adca2c3072 100644 --- a/doc/src/fix_dt_reset.txt +++ b/doc/src/fix_dt_reset.txt @@ -55,7 +55,7 @@ current velocity and force. Since performing this calculation exactly would require the solution to a quartic equation, a cheaper estimate is generated. The estimate is conservative in that the atom's displacement is guaranteed not to exceed {Xmax}, though it may be -smaller. +smaller. In addition if the {emax} keyword is used, the specified {Emax} value is enforced as a limit on how much an atom's kinetic energy can diff --git a/doc/src/fix_gcmc.txt b/doc/src/fix_gcmc.txt index 6b9a02eeca..8a66a007a3 100644 --- a/doc/src/fix_gcmc.txt +++ b/doc/src/fix_gcmc.txt @@ -74,7 +74,7 @@ materials, or computing vapor-liquid coexistence curves. Every N timesteps the fix attempts both GCMC exchanges (insertions or deletions) and MC moves of gas atoms or molecules. On those timesteps, the average number of attempted GCMC exchanges is X, -while the average number of attempted MC moves is M. +while the average number of attempted MC moves is M. For GCMC exchanges of either molecular or atomic gasses, these exchanges can be either deletions or insertions, with equal probability. @@ -203,7 +203,7 @@ atom translations, molecule translations, and molecule rotations, respectively. The values must be non-negative integers or real numbers, with at least one non-zero value. For example, (10,30,0) would result in 25% of the MC moves being atomic translations, 75% -molecular translations, and no molecular rotations. +molecular translations, and no molecular rotations. Optionally, users may specify the maximum rotation angle for molecular rotations using the {maxangle} keyword and specifying the angle in diff --git a/doc/src/fix_langevin_spin.txt b/doc/src/fix_langevin_spin.txt index d4836706e2..ddd3a0319b 100644 --- a/doc/src/fix_langevin_spin.txt +++ b/doc/src/fix_langevin_spin.txt @@ -25,35 +25,35 @@ fix 2 all langevin/spin 300.0 0.01 21 :pre [Description:] -Apply a Langevin thermostat as described in "(Mayergoyz)"_#Mayergoyz1 to the -magnetic spins associated to the atoms. -Used with "fix nve/spin"_fix_nve_spin.html, this command performs -Brownian dynamics (BD). +Apply a Langevin thermostat as described in "(Mayergoyz)"_#Mayergoyz1 to the +magnetic spins associated to the atoms. +Used with "fix nve/spin"_fix_nve_spin.html, this command performs +Brownian dynamics (BD). A random torque and a transverse dissipation are applied to each spin i according to the following stochastic differential equation: :c,image(Eqs/fix_langevin_spin_sLLG.jpg) with lambda the transverse damping, and eta a random vector. -This equation is referred to as the stochastic Landau-Lifshitz-Gilbert (sLLG) +This equation is referred to as the stochastic Landau-Lifshitz-Gilbert (sLLG) equation. -The components of eta are drawn from a Gaussian probability law. Their amplitude -is defined as a proportion of the temperature of the external thermostat T (in K +The components of eta are drawn from a Gaussian probability law. Their amplitude +is defined as a proportion of the temperature of the external thermostat T (in K in metal units). More details about this implementation are reported in "(Tranchida)"_#Tranchida2. Note: due to the form of the sLLG equation, this fix has to be defined just -before the nve/spin fix (and after all other magnetic fixes). +before the nve/spin fix (and after all other magnetic fixes). As an example: fix 1 all precession/spin zeeman 0.01 0.0 0.0 1.0 -fix 2 all langevin/spin 300.0 0.01 21 +fix 2 all langevin/spin 300.0 0.01 21 fix 3 all nve/spin lattice yes :pre is correct, but defining a force/spin command after the langevin/spin command -would give an error message. +would give an error message. Note: The random # {seed} must be a positive integer. A Marsaglia random number generator is used. Each processor uses the input seed to @@ -81,10 +81,10 @@ only enabled if LAMMPS was built with this package. See the "Build package"_Build_package.html doc page for more info. The numerical integration has to be performed with {fix nve/spin} -when {fix langevin/spin} is enabled. +when {fix langevin/spin} is enabled. This fix has to be the last defined magnetic fix before the time -integration fix (e.g. {fix nve/spin}). +integration fix (e.g. {fix nve/spin}). [Related commands:] diff --git a/doc/src/fix_latte.txt b/doc/src/fix_latte.txt index c97095bcfc..e6edf6ac8a 100644 --- a/doc/src/fix_latte.txt +++ b/doc/src/fix_latte.txt @@ -58,7 +58,7 @@ LATTE is a code for performing self-consistent charge transfer tight-binding (SC-TB) calculations of total energies and the forces acting on atoms in molecules and solids. This tight-binding method is becoming more and more popular and widely used in chemistry, -biochemistry, material science, etc. +biochemistry, material science, etc. The SC-TB formalism is derived from an expansion of the Kohn-Sham density functional to second order in charge fluctuations about a @@ -66,7 +66,7 @@ reference charge of overlapping atom-centered densities and bond integrals are parameterized using a Slater-Koster tight-binding approach. This procedure, which usually is referred to as the DFTB method has been described in detail by ("Elstner"_#Elstner) and -("Finnis"_#Finnis2) and coworkers. +("Finnis"_#Finnis2) and coworkers. The work of the LATTE developers follows that of Elstner closely with respect to the physical model. However, the development of LATTE is diff --git a/doc/src/fix_modify.txt b/doc/src/fix_modify.txt index f50747948a..f7882c58f7 100644 --- a/doc/src/fix_modify.txt +++ b/doc/src/fix_modify.txt @@ -78,7 +78,7 @@ virial is included in the calculation performed by the "compute pressure"_compute_pressure.html or "compute stress/atom"_compute_stress_atom.html commands. See the "thermo_style"_thermo_style.html command for info -on how pressure is output. +on how pressure is output. NOTE: You must specify the {virial yes} setting for a fix if you are doing "box relaxation"_fix_box_relax.html and diff --git a/doc/src/fix_msst.txt b/doc/src/fix_msst.txt index 64195abb37..a46e79c5b0 100644 --- a/doc/src/fix_msst.txt +++ b/doc/src/fix_msst.txt @@ -23,7 +23,7 @@ keyword = {q} or {mu} or {p0} or {v0} or {e0} or {tscale} or {beta} or {dftb} :l {p0} value = initial pressure in the shock equations (pressure units) {v0} value = initial simulation cell volume in the shock equations (distance^3 units) {e0} value = initial total energy (energy units) - {tscale} value = reduction in initial temperature (unitless fraction between 0.0 and 1.0) + {tscale} value = reduction in initial temperature (unitless fraction between 0.0 and 1.0) {dftb} value = {yes} or {no} for whether using MSST in conjunction with DFTB+ {beta} value = scale factor for improved energy conservation :pre :ule diff --git a/doc/src/fix_nve_dot.txt b/doc/src/fix_nve_dot.txt index 3112b586d1..fcd8926c13 100644 --- a/doc/src/fix_nve_dot.txt +++ b/doc/src/fix_nve_dot.txt @@ -36,7 +36,7 @@ The command is equivalent to the "fix nve"_fix_nve.html. The particles are always considered to have a finite size. An example input file can be found in /examples/USER/cgdna/examples/duplex1/. -Further details of the implementation and stability of the integrator are contained in "(Henrich)"_#Henrich3. +Further details of the implementation and stability of the integrator are contained in "(Henrich)"_#Henrich3. The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. :line diff --git a/doc/src/fix_nve_dotc_langevin.txt b/doc/src/fix_nve_dotc_langevin.txt index bb59a8423c..898ca5132b 100644 --- a/doc/src/fix_nve_dotc_langevin.txt +++ b/doc/src/fix_nve_dotc_langevin.txt @@ -24,7 +24,7 @@ keyword = {angmom} :l [Examples:] -fix 1 all nve/dotc/langevin 1.0 1.0 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 1.0 1.0 0.03 457145 angmom 10 fix 1 all nve/dotc/langevin 0.1 0.1 78.9375 457145 angmom 10 :pre [Description:] @@ -79,9 +79,9 @@ a Gaussian random number) for speed. :line {Tstart} and {Tstop} have to be constant values, i.e. they cannot -be variables. If used together with the oxDNA force field for +be variables. If used together with the oxDNA force field for coarse-grained simulation of DNA please note that T = 0.1 in oxDNA units -corresponds to T = 300 K. +corresponds to T = 300 K. The {damp} parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 0.03 @@ -92,10 +92,10 @@ viscosity of the solvent, i.e. a small relaxation time implies a hi-viscosity solvent and vice versa. See the discussion about gamma and viscosity in the documentation for the "fix viscous"_fix_viscous.html command for more details. -Note that the value 78.9375 in the second example above corresponds -to a diffusion constant, which is about an order of magnitude larger +Note that the value 78.9375 in the second example above corresponds +to a diffusion constant, which is about an order of magnitude larger than realistic ones. This has been used to sample configurations faster -in Brownian dynamics simulations. +in Brownian dynamics simulations. The random # {seed} must be a positive integer. A Marsaglia random number generator is used. Each processor uses the input seed to @@ -114,7 +114,7 @@ The scale factor after the {angmom} keyword gives the ratio of the rotational to the translational friction coefficient. An example input file can be found in /examples/USER/cgdna/examples/duplex2/. -Further details of the implementation and stability of the integrators are contained in "(Henrich)"_#Henrich4. +Further details of the implementation and stability of the integrators are contained in "(Henrich)"_#Henrich4. The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. :line diff --git a/doc/src/fix_nve_spin.txt b/doc/src/fix_nve_spin.txt index 08f0eab61d..af435dc730 100644 --- a/doc/src/fix_nve_spin.txt +++ b/doc/src/fix_nve_spin.txt @@ -27,20 +27,20 @@ fix 1 all nve/spin lattice no :pre Perform a symplectic integration for the spin or spin-lattice system. -The {lattice} keyword defines if the spins are integrated on a lattice +The {lattice} keyword defines if the spins are integrated on a lattice of fixed atoms (lattice = no), or if atoms are moving (lattice = yes). By default (lattice = yes), a spin-lattice integration is performed. -The {nve/spin} fix applies a Suzuki-Trotter decomposition to +The {nve/spin} fix applies a Suzuki-Trotter decomposition to the equations of motion of the spin lattice system, following the scheme: :c,image(Eqs/fix_integration_spin_stdecomposition.jpg) according to the implementation reported in "(Omelyan)"_#Omelyan1. -A sectoring method enables this scheme for parallel calculations. -The implementation of this sectoring algorithm is reported +A sectoring method enables this scheme for parallel calculations. +The implementation of this sectoring algorithm is reported in "(Tranchida)"_#Tranchida1. :line @@ -51,7 +51,7 @@ This fix style can only be used if LAMMPS was built with the SPIN package. See the "Build package"_Build_package.html doc page for more info. -To use the spin algorithm, it is necessary to define a map with +To use the spin algorithm, it is necessary to define a map with the atom_modify command. Typically, by adding the command: atom_modify map array :pre @@ -68,7 +68,7 @@ instead of "array" is also valid. :line :link(Omelyan1) -[(Omelyan)] Omelyan, Mryglod, and Folk. Phys. Rev. Lett. +[(Omelyan)] Omelyan, Mryglod, and Folk. Phys. Rev. Lett. 86(5), 898. (2001). :link(Tranchida1) diff --git a/doc/src/fix_poems.txt b/doc/src/fix_poems.txt index 8fe793ce7f..027a15a5ff 100644 --- a/doc/src/fix_poems.txt +++ b/doc/src/fix_poems.txt @@ -106,7 +106,7 @@ off, and there is only a single fix poems defined. [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart -files"_restart.html. +files"_restart.html. The "fix_modify"_fix_modify.html {bodyforces} option is supported by this fix style to set whether per-body forces and torques are computed diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index d58cd622b0..f16522c7b6 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -15,7 +15,7 @@ fix ID group precession/spin style args :pre ID, group are documented in "fix"_fix.html command :ulb,l precession/spin = style name of this fix command :l style = {zeeman} or {anisotropy} :l - {zeeman} args = H x y z + {zeeman} args = H x y z H = intensity of the magnetic field (in Tesla) x y z = vector direction of the field {anisotropy} args = K x y z @@ -26,43 +26,43 @@ style = {zeeman} or {anisotropy} :l [Examples:] fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 -fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0 :pre [Description:] Impose a force torque to each magnetic spin in the group. -Style {zeeman} is used for the simulation of the interaction -between the magnetic spins in the defined group and an external +Style {zeeman} is used for the simulation of the interaction +between the magnetic spins in the defined group and an external magnetic field: :c,image(Eqs/force_spin_zeeman.jpg) -with mu0 the vacuum permeability, muB the Bohr magneton (muB = 5.788 eV/T -in metal units). +with mu0 the vacuum permeability, muB the Bohr magneton (muB = 5.788 eV/T +in metal units). -Style {anisotropy} is used to simulate an easy axis or an easy plane -for the magnetic spins in the defined group: +Style {anisotropy} is used to simulate an easy axis or an easy plane +for the magnetic spins in the defined group: :c,image(Eqs/force_spin_aniso.jpg) -with n defining the direction of the anisotropy, and K (in eV) its intensity. +with n defining the direction of the anisotropy, and K (in eV) its intensity. If K>0, an easy axis is defined, and if K<0, an easy plane is defined. -In both cases, the choice of (x y z) imposes the vector direction for the force. -Only the direction of the vector is important; it's length is ignored. +In both cases, the choice of (x y z) imposes the vector direction for the force. +Only the direction of the vector is important; it's length is ignored. -Both styles can be combined within one single command line. +Both styles can be combined within one single command line. :line [Restart, fix_modify, output, run start/stop, minimize info:] -By default, the energy associated to this fix is not added to the potential -energy of the system. -The "fix_modify"_fix_modify.html {energy} option is supported by this fix -to add this magnetic potential energy to the potential energy of the system, +By default, the energy associated to this fix is not added to the potential +energy of the system. +The "fix_modify"_fix_modify.html {energy} option is supported by this fix +to add this magnetic potential energy to the potential energy of the system, fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix_modify 1 energy yes :pre diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt index b0a7e3cf9e..d86d359f1d 100644 --- a/doc/src/fix_rigid_meso.txt +++ b/doc/src/fix_rigid_meso.txt @@ -345,5 +345,5 @@ torque. Also reinit = yes. :line :link(Miller) -[(Miller)] Miller, Eleftheriou, Pattnaik, Ndirango, and Newns, +[(Miller)] Miller, Eleftheriou, Pattnaik, Ndirango, and Newns, J Chem Phys, 116, 8649 (2002). diff --git a/doc/src/improper_inversion_harmonic.txt b/doc/src/improper_inversion_harmonic.txt index 43ffdeb8e9..857eaecc5f 100644 --- a/doc/src/improper_inversion_harmonic.txt +++ b/doc/src/improper_inversion_harmonic.txt @@ -15,7 +15,7 @@ improper_style inversion/harmonic :pre [Examples:] improper_style inversion/harmonic -improper_coeff 1 18.776340 0.000000 :pre +improper_coeff 1 18.776340 0.000000 :pre [Description:] @@ -24,15 +24,15 @@ out-of-plane angle definition and uses an harmonic potential: :c,image(Eqs/improper_inversion_harmonic.jpg) -where K is the force constant and omega is the angle evaluated for +where K is the force constant and omega is the angle evaluated for all three axis-plane combinations centered around the atom I. For the IL axis and the IJK plane omega looks as follows: :c,image(Eqs/umbrella.jpg) -Note that the {inversion/harmonic} angle term evaluation differs to -the "improper_umbrella"_improper_umbrella.html due to the cyclic -evaluation of all possible angles omega. +Note that the {inversion/harmonic} angle term evaluation differs to +the "improper_umbrella"_improper_umbrella.html due to the cyclic +evaluation of all possible angles omega. The following coefficients must be defined for each improper type via the "improper_coeff"_improper_coeff.html command as in the example @@ -45,7 +45,7 @@ omega0 (degrees) :ul If omega0 = 0 the potential term has a minimum for the planar structure. Otherwise it has two minima at +/- omega0, with a barrier -in between. +in between. :line diff --git a/doc/src/kspace_modify.txt b/doc/src/kspace_modify.txt index c4bd4db3ee..65b2174334 100644 --- a/doc/src/kspace_modify.txt +++ b/doc/src/kspace_modify.txt @@ -58,7 +58,7 @@ keyword = {collective} or {compute} or {cutoff/adjust} or {diff} or {disp/auto} [Examples:] kspace_modify mesh 24 24 30 order 6 -kspace_modify slab 3.0 +kspace_modify slab 3.0 kspace_modify scafacos tolerance energy :pre [Description:] @@ -328,8 +328,8 @@ The values with suffix _rel indicate the tolerance is a relative tolerance; the other values impose an absolute tolerance on the given quantity. Absolute tolerance in this case means, that for a given quantity q and a given absolute tolerance of t_a the result should -be between q-t_a and q+t_a. For a relative tolerance t_r the relative -error should not be greater than t_r, i.e. abs(1 - (result/q)) < t_r. +be between q-t_a and q+t_a. For a relative tolerance t_r the relative +error should not be greater than t_r, i.e. abs(1 - (result/q)) < t_r. As a consequence of this, the tolerance type should be checked, when performing computations with a high absolute field / energy. E.g. if the total energy in the system is 1000000.0 an absolute tolerance diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index fdf78ce4ec..d676beff16 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -58,7 +58,7 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces smallq = cutoff for charges to be considered (optional) (charge units) {scafacos} values = method accuracy - method = fmm or p2nfft or ewald or direct + method = fmm or p2nfft or ewald or direct accuracy = desired relative error in forces :pre :ule diff --git a/doc/src/message.txt b/doc/src/message.txt index d258cfbd08..0c10af4ac6 100644 --- a/doc/src/message.txt +++ b/doc/src/message.txt @@ -26,7 +26,7 @@ mode = {file} or {zmq} or {mpi/one} or {mpi/two} :l :ule [Examples:] - + message client md file tmp.couple message server md file tmp.couple :pre diff --git a/doc/src/package.txt b/doc/src/package.txt index f9ed0734c9..c226d7942f 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -488,7 +488,7 @@ packing/unpacking operation. The optimal choice for these keywords depends on the input script and the hardware used. The {no} value is useful for verifying that the -Kokkos-based {host} and {device} values are working correctly. +Kokkos-based {host} and {device} values are working correctly. It may also be the fastest choice when using Kokkos styles in MPI-only mode (i.e. with a thread count of 1). diff --git a/doc/src/pair_airebo.txt b/doc/src/pair_airebo.txt index c090a39af7..3708fb287d 100644 --- a/doc/src/pair_airebo.txt +++ b/doc/src/pair_airebo.txt @@ -103,7 +103,7 @@ would be 10.2 Angstroms. By default, the longer-ranged interaction is smoothly switched off between 2.16 and 3.0 sigma. By specifying {cutoff_min} in addition -to {cutoff}, the switching can be configured to take place between +to {cutoff}, the switching can be configured to take place between {cutoff_min} and {cutoff}. {cutoff_min} can only be specified if all optional arguments are given. diff --git a/doc/src/pair_buck6d_coul_gauss.txt b/doc/src/pair_buck6d_coul_gauss.txt index 21de3330f4..1f013e91ef 100644 --- a/doc/src/pair_buck6d_coul_gauss.txt +++ b/doc/src/pair_buck6d_coul_gauss.txt @@ -37,55 +37,55 @@ pair_coeff 1 1 1030. 3.061 457.179 4.521 0.608 :pre The {buck6d/coul/gauss} styles evaluate vdW and Coulomb interactions following the MOF-FF force field after -"(Schmid)"_#Schmid. The vdW term of the {buck6d} styles +"(Schmid)"_#Schmid. The vdW term of the {buck6d} styles computes a dispersion damped Buckingham potential: :c,image(Eqs/pair_buck6d.jpg) -where A and C are a force constant, kappa is an ionic-pair dependent -reciprocal length parameter, D is a dispersion correction parameter, +where A and C are a force constant, kappa is an ionic-pair dependent +reciprocal length parameter, D is a dispersion correction parameter, and the cutoff Rc truncates the interaction distance. -The first term in the potential corresponds to the Buckingham -repulsion term and the second term to the dispersion attraction with -a damping correction analog to the Grimme correction used in DFT. -The latter corrects for artifacts occurring at short distances which -become an issue for soft vdW potentials. +The first term in the potential corresponds to the Buckingham +repulsion term and the second term to the dispersion attraction with +a damping correction analog to the Grimme correction used in DFT. +The latter corrects for artifacts occurring at short distances which +become an issue for soft vdW potentials. -The {buck6d} styles include a smoothing function which is invoked -according to the global smoothing parameter within the specified -cutoff. Hereby a parameter of i.e. 0.9 invokes the smoothing +The {buck6d} styles include a smoothing function which is invoked +according to the global smoothing parameter within the specified +cutoff. Hereby a parameter of i.e. 0.9 invokes the smoothing within 90% of the cutoff. No smoothing is applied at a value -of 1.0. For the {gauss/dsf} style this smoothing is only applicable +of 1.0. For the {gauss/dsf} style this smoothing is only applicable for the dispersion damped Buckingham potential. For the {gauss/long} styles the smoothing function can also be invoked for the real -space coulomb interactions which enforce continuous energies and +space coulomb interactions which enforce continuous energies and forces at the cutoff. -Both styles {buck6d/coul/gauss/dsf} and {buck6d/coul/gauss/long} -evaluate a Coulomb potential using spherical Gaussian type charge -distributions which effectively dampen electrostatic interactions +Both styles {buck6d/coul/gauss/dsf} and {buck6d/coul/gauss/long} +evaluate a Coulomb potential using spherical Gaussian type charge +distributions which effectively dampen electrostatic interactions for high charges at close distances. The electrostatic potential is thus evaluated as: :c,image(Eqs/pair_coul_gauss.jpg) -where C is an energy-conversion constant, Qi and Qj are the -charges on the 2 atoms, epsilon is the dielectric constant which -can be set by the "dielectric"_dielectric.html command, alpha is -ion pair dependent damping parameter and erf() is the error-function. +where C is an energy-conversion constant, Qi and Qj are the +charges on the 2 atoms, epsilon is the dielectric constant which +can be set by the "dielectric"_dielectric.html command, alpha is +ion pair dependent damping parameter and erf() is the error-function. The cutoff Rc truncates the interaction distance. The style {buck6d/coul/gauss/dsf} computes the Coulomb interaction -via the damped shifted force model described in "(Fennell)"_#Fennell +via the damped shifted force model described in "(Fennell)"_#Fennell approximating an Ewald sum similar to the "pair coul/dsf"_pair_coul.html -styles. In {buck6d/coul/gauss/long} an additional damping factor is -applied to the Coulombic term so it can be used in conjunction with the -"kspace_style"_kspace_style.html command and its {ewald} or {pppm} -options. The Coulombic cutoff in this case separates the real and +styles. In {buck6d/coul/gauss/long} an additional damping factor is +applied to the Coulombic term so it can be used in conjunction with the +"kspace_style"_kspace_style.html command and its {ewald} or {pppm} +options. The Coulombic cutoff in this case separates the real and reciprocal space evaluation of the Ewald sum. If one cutoff is specified it is used for both the vdW and Coulomb -terms. If two cutoffs are specified, the first is used as the cutoff +terms. If two cutoffs are specified, the first is used as the cutoff for the vdW terms, and the second is the cutoff for the Coulombic term. The following coefficients must be defined for each pair of atoms @@ -101,9 +101,9 @@ D (distance^14 units) alpha (distance^-1 units) cutoff (distance units) :ul -The second coefficient, rho, must be greater than zero. The latter -coefficient is optional. If not specified, the global vdW cutoff -is used. +The second coefficient, rho, must be greater than zero. The latter +coefficient is optional. If not specified, the global vdW cutoff +is used. :line diff --git a/doc/src/pair_cs.txt b/doc/src/pair_cs.txt index 830e0586d2..5fce65d6f7 100644 --- a/doc/src/pair_cs.txt +++ b/doc/src/pair_cs.txt @@ -95,7 +95,7 @@ the "/cs" in the name: except that they correctly treat the special case where the distance between two charged core and shell atoms in the same core/shell pair -approach r = 0.0. +approach r = 0.0. Styles with a "/long" in the name are used with a long-range solver for Coulombic interactions via the "kspace_style"_kspace_style.html diff --git a/doc/src/pair_extep.txt b/doc/src/pair_extep.txt index 3acad1132d..5d69df69e9 100644 --- a/doc/src/pair_extep.txt +++ b/doc/src/pair_extep.txt @@ -35,6 +35,6 @@ interactions as described in "(Los2017)"_#Los2017. :line :link(Los2017) -[(Los2017)] J. H. Los et al. "Extended Tersoff potential for boron nitride: -Energetics and elastic properties of pristine and defective h-BN", +[(Los2017)] J. H. Los et al. "Extended Tersoff potential for boron nitride: +Energetics and elastic properties of pristine and defective h-BN", Phys. Rev. B 96 (184108), 2017. diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index f9b500d066..a8d74dca0f 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -13,7 +13,7 @@ pair_style ilp/graphene/hbn command :h3 pair_style hybrid/overlay ilp/graphene/hbn cutoff tap_flag :pre cutoff = global cutoff (distance units) -tap_flag = 0/1 to turn off/on the taper function +tap_flag = 0/1 to turn off/on the taper function [Examples:] diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index df9a9696be..a13825abe5 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -13,7 +13,7 @@ pair_style kolmogorov/crespi/full command :h3 pair_style hybrid/overlay kolmogorov/crespi/full cutoff tap_flag :pre cutoff = global cutoff (distance units) -tap_flag = 0/1 to turn off/on the taper function +tap_flag = 0/1 to turn off/on the taper function [Examples:] diff --git a/doc/src/pair_meam.txt b/doc/src/pair_meam.txt index 0b1c1ac767..b4893d1db1 100644 --- a/doc/src/pair_meam.txt +++ b/doc/src/pair_meam.txt @@ -179,7 +179,7 @@ selected starting from 1. Thus for the example given below pair_coeff * * library.meam Si C sic.meam Si Si Si C :pre -an index of 1 would refer to Si and an index of 2 to C. +an index of 1 would refer to Si and an index of 2 to C. The recognized keywords for the parameter file are as follows: diff --git a/doc/src/pair_meso.txt b/doc/src/pair_meso.txt index 005498d8bf..54186a0e75 100644 --- a/doc/src/pair_meso.txt +++ b/doc/src/pair_meso.txt @@ -24,7 +24,7 @@ args = list of arguments for a particular style :l T = temperature (temperature units) cutoff = global cutoff for mDPD interactions (distance units) seed = random # seed (integer) (if <= 0, mDPD will use current time as the seed) - {mdpd/rhosum} args = + {mdpd/rhosum} args = {tdpd} args = T cutoff seed T = temperature (temperature units) cutoff = global cutoff for tDPD interactions (distance units) @@ -43,7 +43,7 @@ pair_coeff 1 1 mdpd/rhosum 0.75 pair_coeff 1 1 mdpd -40.0 25.0 18.0 1.0 0.75 :pre pair_style tdpd 1.0 1.58 935662 -pair_coeff * * 18.75 4.5 0.41 1.58 1.58 1.0 1.0E-5 2.0 +pair_coeff * * 18.75 4.5 0.41 1.58 1.58 1.0 1.0E-5 2.0 pair_coeff 1 1 18.75 4.5 0.41 1.58 1.58 1.0 1.0E-5 2.0 3.0 1.0E-5 2.0 :pre [Description:] @@ -73,7 +73,7 @@ heat flux qV, and random heat flux :c,image(Eqs/pair_edpd_heat.jpg) -where the mesoscopic heat friction κ is given by +where the mesoscopic heat friction κ is given by :c,image(Eqs/pair_edpd_kappa.jpg) @@ -84,7 +84,7 @@ The following coefficients must be defined in eDPD system for each pair of atom types via the "pair_coeff"_pair_coeff.html command as in the examples above. -A (force units) +A (force units) gamma (force/velocity units) power_f (positive real) cutoff (distance units) @@ -172,7 +172,7 @@ size="4">ms is much smaller than the mass of a tDPD particle m. For more details, see "(Li2015_JCP)"_#Li2015_JCP. -The following coefficients must be defined for each pair of atom types via the +The following coefficients must be defined for each pair of atom types via the "pair_coeff"_pair_coeff.html command as in the examples above. A (force units) @@ -250,10 +250,10 @@ more info. [Related commands:] -"pair_coeff"_pair_coeff.html, "fix mvv/dpd"_fix_mvv_dpd.html, +"pair_coeff"_pair_coeff.html, "fix mvv/dpd"_fix_mvv_dpd.html, "fix mvv/edpd"_fix_mvv_dpd.html, "fix mvv/tdpd"_fix_mvv_dpd.html, -"fix edpd/source"_fix_dpd_source.html, "fix tdpd/source"_fix_dpd_source.html, -"compute edpd/temp/atom"_compute_edpd_temp_atom.html, +"fix edpd/source"_fix_dpd_source.html, "fix tdpd/source"_fix_dpd_source.html, +"compute edpd/temp/atom"_compute_edpd_temp_atom.html, "compute tdpd/cc/atom"_compute_tdpd_cc_atom.html [Default:] none diff --git a/doc/src/pair_oxdna.txt b/doc/src/pair_oxdna.txt index 153fc50189..b63b5371cf 100644 --- a/doc/src/pair_oxdna.txt +++ b/doc/src/pair_oxdna.txt @@ -25,10 +25,10 @@ args = list of arguments for these particular styles :ul {oxdna/stk} args = seq T 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 seq = seqav (for average sequence stacking strength) or seqdep (for sequence-dependent stacking strength) - T = temperature (oxDNA units, 0.1 = 300 K) + T = temperature (oxDNA units, 0.1 = 300 K) {oxdna/hbond} args = seq eps 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 seq = seqav (for average sequence base-pairing strength) or seqdep (for sequence-dependent base-pairing strength) - eps = 1.077 (between base pairs A-T and C-G) or 0 (all other pairs) :pre + eps = 1.077 (between base pairs A-T and C-G) or 0 (all other pairs) :pre [Examples:] @@ -72,8 +72,8 @@ Example input and data files for DNA duplexes can be found in examples/USER/cgdn A simple python setup tool which creates single straight or helical DNA strands, DNA duplexes or arrays of DNA duplexes can be found in examples/USER/cgdna/util/. -Please cite "(Henrich)"_#Henrich1 and the relevant oxDNA articles in any publication that uses this implementation. -The article contains more information on the model, the structure of the input file, the setup tool +Please cite "(Henrich)"_#Henrich1 and the relevant oxDNA articles in any publication that uses this implementation. +The article contains more information on the model, the structure of the input file, the setup tool and the performance of the LAMMPS-implementation of oxDNA. The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. diff --git a/doc/src/pair_oxdna2.txt b/doc/src/pair_oxdna2.txt index a928bdf886..f2963f7b17 100644 --- a/doc/src/pair_oxdna2.txt +++ b/doc/src/pair_oxdna2.txt @@ -69,7 +69,7 @@ NOTE: These pair styles have to be used together with the related oxDNA2 bond st "bond_style oxdna2/fene"_bond_oxdna.html). Most of the coefficients in the above example have to be kept fixed and cannot be changed without reparameterizing the entire model. Exceptions are the first and the second coefficient after {oxdna2/stk} (seq=seqdep and T=0.1 in the above example), -the first coefficient after {oxdna/hbond} (seq=seqdep in the above example) and the three coefficients +the first coefficient after {oxdna/hbond} (seq=seqdep in the above example) and the three coefficients after {oxdna2/dh} (T=0.1, rhos=1.0, qeff=0.815 in the above example). When using a Langevin thermostat e.g. through "fix langevin"_fix_langevin.html or "fix nve/dotc/langevin"_fix_nve_dotc_langevin.html the temperature coefficients have to be matched to the one used in the fix. @@ -78,8 +78,8 @@ Example input and data files for DNA duplexes can be found in examples/USER/cgdn A simple python setup tool which creates single straight or helical DNA strands, DNA duplexes or arrays of DNA duplexes can be found in examples/USER/cgdna/util/. -Please cite "(Henrich)"_#Henrich and the relevant oxDNA articles in any publication that uses this implementation. -The article contains more information on the model, the structure of the input file, the setup tool +Please cite "(Henrich)"_#Henrich and the relevant oxDNA articles in any publication that uses this implementation. +The article contains more information on the model, the structure of the input file, the setup tool and the performance of the LAMMPS-implementation of oxDNA. The preprint version of the article can be found "here"_PDF/USER-CGDNA.pdf. diff --git a/doc/src/pair_spin_dmi.txt b/doc/src/pair_spin_dmi.txt index a040f27d68..bc67e43ecd 100644 --- a/doc/src/pair_spin_dmi.txt +++ b/doc/src/pair_spin_dmi.txt @@ -25,44 +25,44 @@ pair_coeff 1 2 dmi 4.0 0.00109 0.0 0.0 1.0 :pre [Description:] Style {spin/dmi} computes the Dzyaloshinskii-Moriya (DM) interaction -between pairs of magnetic spins. +between pairs of magnetic spins. According to the expression reported in "(Rohart)"_#Rohart, one has the following DM energy: :c,image(Eqs/pair_spin_dmi_interaction.jpg) -where si and sj are two neighboring magnetic spins of two particles, +where si and sj are two neighboring magnetic spins of two particles, eij = (ri - rj)/|ri-rj| is the unit vector between sites i and j, -and D is the DM vector defining the intensity (in eV) and the direction +and D is the DM vector defining the intensity (in eV) and the direction of the interaction. -In "(Rohart)"_#Rohart, D is defined as the direction normal to the film oriented +In "(Rohart)"_#Rohart, D is defined as the direction normal to the film oriented from the high spin-orbit layer to the magnetic ultra-thin film. The application of a spin-lattice Poisson bracket to this energy (as described in "(Tranchida)"_#Tranchida5) allows to derive a magnetic torque omega, and a -mechanical force F (for spin-lattice calculations only) for each magnetic -particle i: +mechanical force F (for spin-lattice calculations only) for each magnetic +particle i: :c,image(Eqs/pair_spin_dmi_forces.jpg) More details about the derivation of these torques/forces are reported in "(Tranchida)"_#Tranchida5. -For the {spin/dmi} pair style, the following coefficients must be defined for -each pair of atoms types via the "pair_coeff"_pair_coeff.html command as in -the examples above, or in the data file or restart files read by the -"read_data"_read_data.html or "read_restart"_read_restart.html commands, and -set in the following order: +For the {spin/dmi} pair style, the following coefficients must be defined for +each pair of atoms types via the "pair_coeff"_pair_coeff.html command as in +the examples above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html commands, and +set in the following order: rc (distance units) |D| (energy units) Dx, Dy, Dz (direction of D) :ul -Note that rc is the radius cutoff of the considered DM interaction, |D| is -the norm of the DM vector (in eV), and Dx, Dy and Dz define its direction. +Note that rc is the radius cutoff of the considered DM interaction, |D| is +the norm of the DM vector (in eV), and Dx, Dy and Dz define its direction. -None of those coefficients is optional. If not specified, the {spin/dmi} +None of those coefficients is optional. If not specified, the {spin/dmi} pair style cannot be used. :line @@ -76,7 +76,7 @@ package"_Build_package.html doc page for more info. [Related commands:] -"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, +"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, "pair_eam"_pair_eam.html, [Default:] none diff --git a/doc/src/pair_spin_exchange.txt b/doc/src/pair_spin_exchange.txt index fdbac9df3e..10d65a55a1 100644 --- a/doc/src/pair_spin_exchange.txt +++ b/doc/src/pair_spin_exchange.txt @@ -24,14 +24,14 @@ pair_coeff 1 2 exchange 6.0 -0.01575 0.0 1.965 :pre [Description:] -Style {spin/exchange} computes the exchange interaction between +Style {spin/exchange} computes the exchange interaction between pairs of magnetic spins: :c,image(Eqs/pair_spin_exchange_interaction.jpg) -where si and sj are two neighboring magnetic spins of two particles, +where si and sj are two neighboring magnetic spins of two particles, rij = ri - rj is the inter-atomic distance between the two particles, -and J(rij) is a function defining the intensity and the sign of the exchange +and J(rij) is a function defining the intensity and the sign of the exchange interaction for different neighboring shells. This function is defined as: :c,image(Eqs/pair_spin_exchange_function.jpg) @@ -44,35 +44,35 @@ the value of the exchange interaction for the N neighbor shells taken into accou Examples and more explanations about this function and its parameterization are reported in "(Tranchida)"_#Tranchida3. -From this exchange interaction, each spin i will be submitted +From this exchange interaction, each spin i will be submitted to a magnetic torque omega, and its associated atom can be submitted to a force F for spin-lattice calculations (see "fix_nve_spin"_fix_nve_spin.html), such as: :c,image(Eqs/pair_spin_exchange_forces.jpg) -with h the Planck constant (in metal units), and eij = (ri - rj)/|ri-rj| the unit +with h the Planck constant (in metal units), and eij = (ri - rj)/|ri-rj| the unit vector between sites i and j. More details about the derivation of these torques/forces are reported in "(Tranchida)"_#Tranchida3. -For the {spin/exchange} pair style, the following coefficients must be defined -for each pair of atoms types via the "pair_coeff"_pair_coeff.html command as in -the examples above, or in the data file or restart files read by the -"read_data"_read_data.html or "read_restart"_read_restart.html commands, and -set in the following order: +For the {spin/exchange} pair style, the following coefficients must be defined +for each pair of atoms types via the "pair_coeff"_pair_coeff.html command as in +the examples above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html commands, and +set in the following order: rc (distance units) a (energy units) -b (adim parameter) +b (adim parameter) d (distance units) :ul Note that rc is the radius cutoff of the considered exchange interaction, and a, b and d are the three coefficients performing the parameterization of the function J(rij) defined above. -None of those coefficients is optional. If not specified, the +None of those coefficients is optional. If not specified, the {spin/exchange} pair style cannot be used. :line @@ -86,7 +86,7 @@ package"_Build_package.html doc page for more info. [Related commands:] -"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, +"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, "pair_eam"_pair_eam.html, [Default:] none diff --git a/doc/src/pair_spin_magelec.txt b/doc/src/pair_spin_magelec.txt index 360f440792..151ecdec3d 100644 --- a/doc/src/pair_spin_magelec.txt +++ b/doc/src/pair_spin_magelec.txt @@ -25,7 +25,7 @@ pair_coeff * * magelec 4.5 0.00109 1.0 1.0 1.0 :pre Style {spin/me} computes a magneto-electric interaction between pairs of magnetic spins. According to the derivation reported in -"(Katsura)"_#Katsura1, this interaction is defined as: +"(Katsura)"_#Katsura1, this interaction is defined as: :c,image(Eqs/pair_spin_me_interaction.jpg) @@ -69,5 +69,5 @@ package"_Build_package.html doc page for more info. [(Katsura)] H. Katsura, N. Nagaosa, A.V. Balatsky. Phys. Rev. Lett., 95(5), 057205. (2005) :link(Tranchida4) -[(Tranchida)] Tranchida, Plimpton, Thibaudeau, and Thompson, +[(Tranchida)] Tranchida, Plimpton, Thibaudeau, and Thompson, Journal of Computational Physics, (2018). diff --git a/doc/src/pair_spin_neel.txt b/doc/src/pair_spin_neel.txt index 4458a0767b..8e2242f013 100644 --- a/doc/src/pair_spin_neel.txt +++ b/doc/src/pair_spin_neel.txt @@ -24,8 +24,8 @@ pair_coeff 1 2 neel 4.0 0.0048 0.234 1.168 0.0 0.0 1.0 :pre [Description:] -Style {spin/neel} computes the Neel pair anisotropy model -between pairs of magnetic spins: +Style {spin/neel} computes the Neel pair anisotropy model +between pairs of magnetic spins: :c,image(Eqs/pair_spin_neel_interaction.jpg) @@ -71,7 +71,7 @@ package"_Build_package.html doc page for more info. [Related commands:] -"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, +"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, "pair_eam"_pair_eam.html, [Default:] none diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 00cbbb04c0..46a4f31dd4 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -232,7 +232,7 @@ accelerated styles exist. "meam/sw/spline"_pair_meam_sw_spline.html - splined version of MEAM with a Stillinger-Weber term "mgpt"_pair_mgpt.html - simplified model generalized pseudopotential theory (MGPT) potential "mie/cut"_pair_mie.html - Mie potential -"momb"_pair_momb.html - Many-Body Metal-Organic (MOMB) force field +"momb"_pair_momb.html - Many-Body Metal-Organic (MOMB) force field "morse"_pair_morse.html - Morse potential "morse/smooth/linear"_pair_morse.html - linear smoothed Morse potential "morse/soft"_pair_morse.html - Morse potential with a soft core @@ -242,64 +242,64 @@ accelerated styles exist. "nm/cut"_pair_nm.html - N-M potential "nm/cut/coul/cut"_pair_nm.html - N-M potential with cutoff Coulomb "nm/cut/coul/long"_pair_nm.html - N-M potential with long-range Coulombics -"oxdna/coaxstk"_pair_oxdna.html - -"oxdna/excv"_pair_oxdna.html - -"oxdna/hbond"_pair_oxdna.html - -"oxdna/stk"_pair_oxdna.html - -"oxdna/xstk"_pair_oxdna.html - -"oxdna2/coaxstk"_pair_oxdna2.html - -"oxdna2/dh"_pair_oxdna2.html - -"oxdna2/excv"_pair_oxdna2.html - -"oxdna2/hbond"_pair_oxdna2.html - -"oxdna2/stk"_pair_oxdna2.html - -"oxdna2/xstk"_pair_oxdna2.html - +"oxdna/coaxstk"_pair_oxdna.html - +"oxdna/excv"_pair_oxdna.html - +"oxdna/hbond"_pair_oxdna.html - +"oxdna/stk"_pair_oxdna.html - +"oxdna/xstk"_pair_oxdna.html - +"oxdna2/coaxstk"_pair_oxdna2.html - +"oxdna2/dh"_pair_oxdna2.html - +"oxdna2/excv"_pair_oxdna2.html - +"oxdna2/hbond"_pair_oxdna2.html - +"oxdna2/stk"_pair_oxdna2.html - +"oxdna2/xstk"_pair_oxdna2.html - "peri/eps"_pair_peri.html - peridynamic EPS potential "peri/lps"_pair_peri.html - peridynamic LPS potential "peri/pmb"_pair_peri.html - peridynamic PMB potential "peri/ves"_pair_peri.html - peridynamic VES potential "polymorphic"_pair_polymorphic.html - polymorphic 3-body potential -"python"_pair_python.html - -"quip"_pair_quip.html - +"python"_pair_python.html - +"quip"_pair_quip.html - "reax"_pair_reax.html - ReaxFF potential in Fortran "reax/c"_pair_reaxc.html - ReaxFF potential in C "rebo"_pair_airebo.html - 2nd generation REBO potential of Brenner "resquared"_pair_resquared.html - Everaers RE-Squared ellipsoidal potential "sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html - smoothed dissipative particle dynamics for water at isothermal conditions -"smd/hertz"_pair_smd_hertz.html - -"smd/tlsph"_pair_smd_tlsph.html - -"smd/tri_surface"_pair_smd_triangulated_surface.html - -"smd/ulsph"_pair_smd_ulsph.html - -"smtbq"_pair_smtbq.html - +"smd/hertz"_pair_smd_hertz.html - +"smd/tlsph"_pair_smd_tlsph.html - +"smd/tri_surface"_pair_smd_triangulated_surface.html - +"smd/ulsph"_pair_smd_ulsph.html - +"smtbq"_pair_smtbq.html - "snap"_pair_snap.html - SNAP quantum-accurate potential "soft"_pair_soft.html - Soft (cosine) potential -"sph/heatconduction"_pair_sph_heatconduction.html - -"sph/idealgas"_pair_sph_idealgas.html - -"sph/lj"_pair_sph_lj.html - -"sph/rhosum"_pair_sph_rhosum.html - -"sph/taitwater"_pair_sph_taitwater.html - -"sph/taitwater/morris"_pair_sph_taitwater_morris.html - -"spin/dmi"_pair_spin_dmi.html - -"spin/exchange"_pair_spin_exchange.html - -"spin/magelec"_pair_spin_magelec.html - -"spin/neel"_pair_spin_neel.html - -"srp"_pair_srp.html - +"sph/heatconduction"_pair_sph_heatconduction.html - +"sph/idealgas"_pair_sph_idealgas.html - +"sph/lj"_pair_sph_lj.html - +"sph/rhosum"_pair_sph_rhosum.html - +"sph/taitwater"_pair_sph_taitwater.html - +"sph/taitwater/morris"_pair_sph_taitwater_morris.html - +"spin/dmi"_pair_spin_dmi.html - +"spin/exchange"_pair_spin_exchange.html - +"spin/magelec"_pair_spin_magelec.html - +"spin/neel"_pair_spin_neel.html - +"srp"_pair_srp.html - "sw"_pair_sw.html - Stillinger-Weber 3-body potential "table"_pair_table.html - tabulated pair potential -"table/rx"_pair_table_rx.html - +"table/rx"_pair_table_rx.html - "tdpd"_pair_meso.html - tDPD particle interactions "tersoff"_pair_tersoff.html - Tersoff 3-body potential "tersoff/mod"_pair_tersoff_mod.html - modified Tersoff 3-body potential -"tersoff/mod/c"_pair_tersoff_mod.html - -"tersoff/table"_pair_tersoff.html - +"tersoff/mod/c"_pair_tersoff_mod.html - +"tersoff/table"_pair_tersoff.html - "tersoff/zbl"_pair_tersoff_zbl.html - Tersoff/ZBL 3-body potential "thole"_pair_thole.html - Coulomb interactions with thole damping "tip4p/cut"_pair_coul.html - Coulomb for TIP4P water w/out LJ "tip4p/long"_pair_coul.html - long-range Coulombics for TIP4P water w/out LJ -"tip4p/long/soft"_pair_lj_soft.html - +"tip4p/long/soft"_pair_lj_soft.html - "tri/lj"_pair_tri_lj.html - LJ potential between triangles -"ufm"_pair_ufm.html - +"ufm"_pair_ufm.html - "vashishta"_pair_vashishta.html - Vashishta 2-body and 3-body potential -"vashishta/table"_pair_vashishta.html - +"vashishta/table"_pair_vashishta.html - "yukawa"_pair_yukawa.html - Yukawa potential "yukawa/colloid"_pair_yukawa_colloid.html - screened Yukawa potential for finite-size particles "zbl"_pair_zbl.html - Ziegler-Biersack-Littmark potential :ul diff --git a/doc/src/pair_ufm.txt b/doc/src/pair_ufm.txt index 787c60a1bd..f0efcfbf19 100644 --- a/doc/src/pair_ufm.txt +++ b/doc/src/pair_ufm.txt @@ -37,7 +37,7 @@ Style {ufm} computes pairwise interactions using the Uhlenbeck-Ford model (UFM) where rc is the cutoff, sigma is a distance-scale and epsilon is an energy-scale, i.e., a product of Boltzmann constant kB, temperature T and the Uhlenbeck-Ford p-parameter which is responsible to control the softness of the interactions "(Paula Leite2017)"_#PL1. -This model is useful as a reference system for fluid-phase free-energy calculations "(Paula Leite2016)"_#PL2. +This model is useful as a reference system for fluid-phase free-energy calculations "(Paula Leite2016)"_#PL2. The following coefficients must be defined for each pair of atom types via the "pair_coeff"_pair_coeff.html command as in the examples above, diff --git a/doc/src/read_data.txt b/doc/src/read_data.txt index 7669b78f85..30ee1201d9 100644 --- a/doc/src/read_data.txt +++ b/doc/src/read_data.txt @@ -553,7 +553,7 @@ bond: atom-ID molecule-ID atom-type x y z charge: atom-ID atom-type q x y z dipole: atom-ID atom-type q x y z mux muy muz dpd: atom-ID atom-type theta x y z -edpd: atom-ID atom-type edpd_temp edpd_cv x y z +edpd: atom-ID atom-type edpd_temp edpd_cv x y z mdpd: atom-ID atom-type rho x y z tdpd: atom-ID atom-type x y z cc1 cc2 ... ccNspecies electron: atom-ID atom-type q spin eradius x y z diff --git a/doc/src/server.txt b/doc/src/server.txt index 86fb68d012..8f87b5c76b 100644 --- a/doc/src/server.txt +++ b/doc/src/server.txt @@ -15,7 +15,7 @@ server protocol :pre protocol = {md} or {mc} :ul [Examples:] - + server md :pre [Description:] diff --git a/doc/src/server_mc.txt b/doc/src/server_mc.txt index 638d3dadfb..ef3c56f886 100644 --- a/doc/src/server_mc.txt +++ b/doc/src/server_mc.txt @@ -15,7 +15,7 @@ server mc :pre mc = the protocol argument to the "server"_server.html command [Examples:] - + server mc :pre [Description:] @@ -46,7 +46,7 @@ examples/COUPLE/lammps_mc/in.server. When using this command, LAMMPS (as the server code) receives instructions from a Monte Carlo (MC) driver to displace random atoms, compute the energy before and after displacement, and run dynamics to -equilibrate the system. +equilibrate the system. The MC driver performs the random displacements on random atoms, accepts or rejects the move in an MC sense, and orchestrates the MD @@ -83,7 +83,7 @@ cs->pack_int(1,nsteps) # 1st field = # of timesteps to run MD :pre [Server replies]: -cs->send(NATOMS,1) # msgID = 1 with 1 field +cs->send(NATOMS,1) # msgID = 1 with 1 field cs->pack_int(1,natoms) # 1st field = number of atoms :pre cs->send(EINIT,2) # msgID = 2 with 2 fields diff --git a/doc/src/server_md.txt b/doc/src/server_md.txt index fc9ae5d53a..03f3db7e19 100644 --- a/doc/src/server_md.txt +++ b/doc/src/server_md.txt @@ -15,7 +15,7 @@ server md :pre md = the protocol argument to the "server"_server.html command [Examples:] - + server md :pre [Description:] diff --git a/doc/src/set.txt b/doc/src/set.txt index b83ad54f4e..15c96071ae 100644 --- a/doc/src/set.txt +++ b/doc/src/set.txt @@ -245,13 +245,13 @@ many processors are being used. This keyword does not allow use of an atom-style variable. Keyword {spin} uses the specified g value to set the magnitude of the -magnetic spin vectors, and the x,y,z values as components of a vector -to set as the orientation of the magnetic spin vectors of the selected -atoms. +magnetic spin vectors, and the x,y,z values as components of a vector +to set as the orientation of the magnetic spin vectors of the selected +atoms. Keyword {spin/random} randomizes the orientation of the magnetic spin -vectors for the selected atoms and sets the magnitude of each to the -specified {Dlen} value. +vectors for the selected atoms and sets the magnitude of each to the +specified {Dlen} value. Keyword {quat} uses the specified values to create a quaternion (4-vector) that represents the orientation of the selected atoms. The diff --git a/doc/src/temper_npt.txt b/doc/src/temper_npt.txt index 50ac5615f6..00a3e35ec3 100644 --- a/doc/src/temper_npt.txt +++ b/doc/src/temper_npt.txt @@ -23,7 +23,7 @@ index = which temperature (0 to N-1) I am simulating (optional) :ul [Examples:] temper/npt 100000 100 $t nptfix 0 58728 1 -temper/npt 2500000 1000 300 nptfix 0 32285 $p +temper/npt 2500000 1000 300 nptfix 0 32285 $p temper/npt 5000000 2000 $t nptfix 0 12523 1 $w :pre [Description:] @@ -43,7 +43,7 @@ of pressure, this command works much like the "temper"_temper.html command. See the documentation on "temper"_temper.html for information on how the parallel tempering is handled in general. -:line +:line [Restrictions:] diff --git a/doc/src/write_data.txt b/doc/src/write_data.txt index b6002b5252..a8168b70a0 100644 --- a/doc/src/write_data.txt +++ b/doc/src/write_data.txt @@ -87,7 +87,7 @@ are read in separately anyway, e.g. from an include file. The {nofix} keyword requests that no extra sections read by fixes should be written to the data file (see the {fix} option of the "read_data"_read_data.html command for details). For example, this -option excludes sections for user-created per-atom properties +option excludes sections for user-created per-atom properties from "fix property/atom"_fix_property_atom.html. The {pair} keyword lets you specify in what format the pair From 1ddbd24a4e271e98ce60e8aea1a63e813150a49a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 15:45:23 -0500 Subject: [PATCH 177/273] add missing include file --- src/write_coeff.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index 72b4835e55..83da6e4319 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -12,6 +12,7 @@ ------------------------------------------------------------------------- */ #include +#include #include #include "write_coeff.h" #include "pair.h" From c61da28f0ae3d865c026a0e67bccc2379a4b370e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 17:03:09 -0500 Subject: [PATCH 178/273] allow building "fat" GPU binaries in CUDA mode, resulting in executables compatible with all GPUs supported by the used CUDA toolkit --- cmake/CMakeLists.txt | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3c431b0325..ce6bcb6bbf 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1143,11 +1143,44 @@ if(PKG_GPU) file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) endif() - cuda_compile_cubin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR -arch=${GPU_ARCH} -D_${GPU_PREC_SETTING}) + # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice + # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture + set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") + # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 + if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") + endif() + # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later + if(CUDA_VERSION VERSION_GREATER "4.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") + endif() + # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later + if(CUDA_VERSION VERSION_GREATER "5.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") + endif() + # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later + if(CUDA_VERSION VERSION_GREATER "7.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") + endif() + # Volta (GPU Arch 7.0) is supported by CUDA 9 and later + if(CUDA_VERSION VERSION_GREATER "8.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") + endif() + # Turing (GPU Arch 7.5) is supported by CUDA 10 and later + if(CUDA_VERSION VERSION_GREATER "9.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") + endif() - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS $<$:-Xcompiler=-fPIC> - -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR -arch=${GPU_ARCH} -D_${GPU_PREC_SETTING}) + cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS + -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + if(${BUILD_SHARED_LIBS}) + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS -Xcompiler=-fPIC + -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + else() + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS + -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + endif() foreach(CU_OBJ ${GPU_GEN_OBJS}) get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) From b3975f4b1453864cccacaa8738f402581b4baa77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 17:03:32 -0500 Subject: [PATCH 179/273] reword a few options for clarity --- cmake/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ce6bcb6bbf..311a57a27f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1026,7 +1026,7 @@ if(PKG_USER-INTEL) endif() if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") + message(FATAL_ERROR "USER-INTEL needs at least a 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") endif() if(NOT BUILD_OMP) @@ -1091,7 +1091,7 @@ if(PKG_USER-INTEL) endif() if(PKG_GPU) - if (CMAKE_VERSION VERSION_LESS "3.1") + if (CMAKE_VERSION VERSION_LESS "3.1") message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") endif() set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) @@ -1126,11 +1126,11 @@ if(PKG_GPU) find_package(CUDA REQUIRED) find_program(BIN2C bin2c) if(NOT BIN2C) - message(FATAL_ERROR "Couldn't find bin2c, use -DBIN2C helping cmake to find it.") + message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") endif() option(CUDPP_OPT "Enable CUDPP_OPT" ON) - set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM architecture (e.g. sm_60)") + set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) From e0ff23026870b8bd9060ce31823abaa414245d8d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 17:03:48 -0500 Subject: [PATCH 180/273] remove comment-in-comment --- lib/gpu/lal_device.cu | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/gpu/lal_device.cu b/lib/gpu/lal_device.cu index 6761b23fbb..37d0758845 100644 --- a/lib/gpu/lal_device.cu +++ b/lib/gpu/lal_device.cu @@ -11,7 +11,7 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** #ifdef NV_KERNEL #include "lal_preprocessor.h" @@ -42,3 +42,4 @@ __kernel void kernel_info(__global int *info) { info[13]=THREADS_PER_CHARGE; info[14]=BLOCK_ELLIPSE; } + From 55359789fb1d3e4f08faf46727c71cff6ff35822 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 18:13:50 -0500 Subject: [PATCH 181/273] improve docs for building the GPU library with CUDA and CMake/make with fat binaries --- doc/src/Build_extras.txt | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index bc03b5c8ce..fb2fe95341 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -87,22 +87,30 @@ which GPU hardware to build for. # value = double or mixed (default) or single -D OCL_TUNE=value # hardware choice for GPU_API=opencl # generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA) --D GPU_ARCH=value # hardware choice for GPU_API=cuda +-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda # value = sm_XX, see below # default is Cuda-compiler dependent, but typically sm_20 --D CUDPP_OPT=value # optimization setting for GPU_API=cudea +-D CUDPP_OPT=value # optimization setting for GPU_API=cuda # enables CUDA Performance Primitives Optimizations # yes (default) or no :pre GPU_ARCH settings for different GPU hardware is as follows: -sm_20 for Fermi (C2050/C2070, deprecated as of CUDA 8.0) or GeForce GTX 580 or similar -sm_30 for Kepler (K10) -sm_35 for Kepler (K40) or GeForce GTX Titan or similar -sm_37 for Kepler (dual K80) -sm_50 for Maxwell -sm_60 for Pascal (P100) -sm_70 for Volta :ul +sm_20 or sm_21 for Fermi (supported by CUDA 3.2 until CUDA 7.5) +sm_30 or sm_35 or sm_37 for Kepler (supported since CUDA 5) +sm_50 or sm_52 for Maxwell (supported since CUDA 6) +sm_60 or sm_61 for Pascal (supported since CUDA 8) +sm_70 for Volta (supported since CUDA 9) +sm_75 for Turing (supported since CUDA 10) :ul + +A more detailed list can be found, for example, +at "Wikipedia's CUDA article"_https://en.wikipedia.org/wiki/CUDA#GPUs_supported + +CMake can detect which version of the CUDA toolkit is used and thus can +include support for [all] major GPU architectures supported by this toolkit. +Thus the GPU_ARCH setting is merely an optimization, to have code for +the preferred GPU architecture directly included rather than having to wait +for the JIT compiler of the CUDA driver to translate it. [Traditional make]: @@ -137,6 +145,11 @@ CUDA_ARCH = sm_XX, what GPU hardware you have, same as CMake GPU_ARCH above CUDA_PRECISION = precision (double, mixed, single) EXTRAMAKE = which Makefile.lammps.* file to copy to Makefile.lammps :ul +The file Makefile.linux_multi is set up to include support for multiple +GPU architectures as supported by the CUDA toolkit in use. This is done +through using the "--gencode " flag, which can be used multiple times and +thus support all GPU architectures supported by your CUDA compiler. + If the library build is successful, 3 files should be created: lib/gpu/libgpu.a, lib/gpu/nvc_get_devices, and lib/gpu/Makefile.lammps. The latter has settings that enable LAMMPS @@ -150,6 +163,7 @@ re-build LAMMPS. This is because the compilation of files in the GPU package uses the library settings from the lib/gpu/Makefile.machine used to build the GPU library. + :line KIM package :h4,link(kim) From 5df2f926510a31d17bd5153adc4714aa8a134584 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 18:22:33 -0500 Subject: [PATCH 182/273] minor cleanup in lib/gpu --- lib/gpu/Makefile.linux | 30 +++++++++++++++++++++++++----- lib/gpu/Nvidia.makefile | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/gpu/Makefile.linux b/lib/gpu/Makefile.linux index 9580bfd4ae..6b63b26398 100644 --- a/lib/gpu/Makefile.linux +++ b/lib/gpu/Makefile.linux @@ -13,13 +13,33 @@ endif NVCC = nvcc -# older CUDA -#CUDA_ARCH = -arch=sm_21 -# newer CUDA +# obsolete hardware. not supported by current drivers anymore. #CUDA_ARCH = -arch=sm_13 -# older CUDA #CUDA_ARCH = -arch=sm_10 -DCUDA_PRE_THREE -CUDA_ARCH = -arch=sm_35 + +# Fermi hardware +#CUDA_ARCH = -arch=sm_20 +#CUDA_ARCH = -arch=sm_21 + +# Kepler hardware +CUDA_ARCH = -arch=sm_30 +#CUDA_ARCH = -arch=sm_32 +#CUDA_ARCH = -arch=sm_35 +#CUDA_ARCH = -arch=sm_37 + +# Maxwell hardware +#CUDA_ARCH = -arch=sm_50 +#CUDA_ARCH = -arch=sm_52 + +# Pascal hardware +#CUDA_ARCH = -arch=sm_60 +#CUDA_ARCH = -arch=sm_61 + +# Volta hardware +#CUDA_ARCH = -arch=sm_70 + +# Turing hardware +#CUDA_ARCH = -arch=sm_75 # this setting should match LAMMPS Makefile # one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL diff --git a/lib/gpu/Nvidia.makefile b/lib/gpu/Nvidia.makefile index 0d7214260d..233f43380f 100644 --- a/lib/gpu/Nvidia.makefile +++ b/lib/gpu/Nvidia.makefile @@ -880,7 +880,7 @@ $(OBJ_DIR)/lal_born_coul_wolf_cs_ext.o: $(ALL_H) lal_born_coul_wolf_cs.h lal_bor $(CUDR) -o $@ -c lal_born_coul_wolf_cs_ext.cpp -I$(OBJ_DIR) $(BIN_DIR)/nvc_get_devices: ./geryon/ucl_get_devices.cpp $(NVD_H) - $(CUDR) -o $@ ./geryon/ucl_get_devices.cpp -DUCL_CUDADR $(CUDA_LIB) -lcuda + $(CUDR) -o $@ ./geryon/ucl_get_devices.cpp -DUCL_CUDADR $(CUDA_LIB) -lcuda $(GPU_LIB): $(OBJS) $(CUDPP) $(AR) -crusv $(GPU_LIB) $(OBJS) $(CUDPP) From 05fb2d758779f8e1ffb5face646b5d6f0a07b7f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 18:23:06 -0500 Subject: [PATCH 183/273] more generated files/symlinks to ignore --- doc/src/Developer/.gitignore | 3 +++ lib/scafacos/.gitignore | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 doc/src/Developer/.gitignore create mode 100644 lib/scafacos/.gitignore diff --git a/doc/src/Developer/.gitignore b/doc/src/Developer/.gitignore new file mode 100644 index 0000000000..38f7323f7b --- /dev/null +++ b/doc/src/Developer/.gitignore @@ -0,0 +1,3 @@ +/developer.aux +/developer.log +/developer.toc diff --git a/lib/scafacos/.gitignore b/lib/scafacos/.gitignore new file mode 100644 index 0000000000..66523c0cb3 --- /dev/null +++ b/lib/scafacos/.gitignore @@ -0,0 +1,3 @@ +/scafacos* +/includelink +/liblink From aa0b9684dc9f3d03053b5ea10cd1b862db1d62a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 20:19:28 -0500 Subject: [PATCH 184/273] remove inline expansion from two more cases (of external library builds) --- cmake/CMakeLists.txt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 311a57a27f..935a2c6246 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -486,15 +486,15 @@ if(PKG_USER-SCAFACOS) ExternalProject_Add(scafacos_build URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= - --disable-doc + CONFIGURE_COMMAND /configure --prefix= + --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft - $<$:--with-pic> - FC=${CMAKE_MPI_Fortran_COMPILER} - CXX=${CMAKE_MPI_CXX_COMPILER} + --with-pic + FC=${CMAKE_MPI_Fortran_COMPILER} + CXX=${CMAKE_MPI_CXX_COMPILER} CC=${CMAKE_MPI_C_COMPILER} F77= ) @@ -541,11 +541,10 @@ if(PKG_USER-PLUMED) if(DOWNLOAD_PLUMED) include(ExternalProject) ExternalProject_Add(plumed_build - URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-src-2.4.3.tgz + URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-src-2.4.3.tgz URL_MD5 b1be7c48971627febc11c61b70767fc5 BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND /configure --prefix= - $<$:--with-pic> ) + CONFIGURE_COMMAND /configure --prefix= --with-pic) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) From 3ad74985eb5ba62d1de87ab59dd1f8883ac542ff Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 20:53:23 -0500 Subject: [PATCH 185/273] replace more inline expansions with explicit code. some general overhaul and better propagation of consistent compiler settings and flags for library builds --- cmake/CMakeLists.txt | 78 +++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 935a2c6246..c49b1c621b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -422,15 +422,25 @@ if(WITH_FFMPEG) add_definitions(-DLAMMPS_FFMPEG) endif() +if(BUILD_SHARED_LIBS) + set(CONFIGURE_REQUEST_PIC "--with-pic") + set(CMAKE_REQUEST_PIC "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}") +else() + set(CONFIGURE_REQUEST_PIC "") + set(CMAKE_REQUEST_PIC "") +endif() + + if(PKG_VORONOI) - option(DOWNLOAD_VORO "Download voro++ (instead of using the system's one)" OFF) + option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" OFF) if(DOWNLOAD_VORO) + message(STATUS "Voro++ download requested - we will build our own") include(ExternalProject) if(BUILD_SHARED_LIBS) - set(VORO_BUILD_OPTIONS "CFLAGS=-fPIC") + set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_POSITION_INDEPENDENT_CODE} ${CMAKE_C_FLAGS}") else() - set(VORO_BUILD_OPTIONS) + set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_C_FLAGS}") endif() ExternalProject_Add(voro_build @@ -445,7 +455,7 @@ if(PKG_VORONOI) else() find_package(VORO) if(NOT VORO_FOUND) - message(FATAL_ERROR "VORO not found, help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") + message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") endif() endif() include_directories(${VORO_INCLUDE_DIRS}) @@ -453,26 +463,27 @@ if(PKG_VORONOI) endif() if(PKG_LATTE) - option(DOWNLOAD_LATTE "Download latte (instead of using the system's one)" OFF) + option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" OFF) if(DOWNLOAD_LATTE) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() - message(STATUS "LATTE not found - we will build our own") + message(STATUS "LATTE download requested - we will build our own") include(ExternalProject) ExternalProject_Add(latte_build URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz URL_MD5 85ac414fdada2d04619c8f936344df14 SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - ) + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} + ) + endif() ExternalProject_get_property(latte_build INSTALL_DIR) set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) list(APPEND LAMMPS_DEPS latte_build) else() find_package(LATTE) if(NOT LATTE_FOUND) - message(FATAL_ERROR "LATTE not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") + message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") endif() endif() list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) @@ -480,24 +491,22 @@ endif() if(PKG_USER-SCAFACOS) find_package(GSL REQUIRED) - option(DOWNLOAD_SCAFACOS "Download ScaFaCoS (instead of using the system's one)" OFF) + option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" OFF) if(DOWNLOAD_SCAFACOS) + message(STATUS "ScaFaCoS download requested - we will build our own") include(ExternalProject) ExternalProject_Add(scafacos_build URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= - --disable-doc + CONFIGURE_COMMAND /configure --prefix= --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m - --with-internal-fftw - --with-internal-pfft - --with-internal-pnfft - --with-pic + --with-internal-fftw --with-internal-pfft + --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} FC=${CMAKE_MPI_Fortran_COMPILER} CXX=${CMAKE_MPI_CXX_COMPILER} CC=${CMAKE_MPI_C_COMPILER} F77= - ) + ) ExternalProject_get_property(scafacos_build INSTALL_DIR) set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) @@ -537,14 +546,15 @@ if(PKG_USER-PLUMED) validate_option(PLUMED_MODE PLUMED_MODE_VALUES) string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) - option(DOWNLOAD_PLUMED "Download Plumed (instead of using the system's one)" OFF) + option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" OFF) if(DOWNLOAD_PLUMED) + message(STATUS "PLUMED download requested - we will build our own") include(ExternalProject) ExternalProject_Add(plumed_build URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-src-2.4.3.tgz URL_MD5 b1be7c48971627febc11c61b70767fc5 BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND /configure --prefix= --with-pic) + CONFIGURE_COMMAND /configure --prefix= ${CONFIGURE_REQUEST_PIC}) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) list(APPEND LAMMPS_DEPS plumed_build) @@ -591,11 +601,12 @@ if(PKG_USER-NETCDF) endif() if(PKG_USER-SMD) - option(DOWNLOAD_EIGEN3 "Download Eigen3 (instead of using the system's one)" OFF) + option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" OFF) if(DOWNLOAD_EIGEN3) + message(STATUS "Eigen3 download requested - we will build our own") include(ExternalProject) ExternalProject_Add(Eigen3_build - URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz + URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz URL_MD5 1a47e78efe365a97de0c022d127607c3 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) @@ -632,8 +643,9 @@ if(PKG_USER-VTK) endif() if(PKG_KIM) - option(DOWNLOAD_KIM "Download kim-api (instead of using the system's one)" OFF) + option(DOWNLOAD_KIM "Download KIM-API v1 from OpenKIM instead of using an already installed one)" OFF) if(DOWNLOAD_KIM) + message(STATUS "KIM-API v1 download requested - we will build our own") include(ExternalProject) ExternalProject_Add(kim_build URL https://github.com/openkim/kim-api/archive/v1.9.5.tar.gz @@ -648,7 +660,7 @@ if(PKG_KIM) else() find_package(KIM) if(NOT KIM_FOUND) - message(FATAL_ERROR "KIM not found, help CMake to find it by setting KIM_LIBRARY and KIM_INCLUDE_DIR, or set DOWNLOAD_KIM=ON to download it") + message(FATAL_ERROR "KIM-API v1 not found, help CMake to find it by setting KIM_LIBRARY and KIM_INCLUDE_DIR, or set DOWNLOAD_KIM=ON to download it") endif() endif() list(APPEND LAMMPS_LINK_LIBS ${KIM_LIBRARIES}) @@ -691,10 +703,10 @@ endif() if(PKG_MSCG) find_package(GSL REQUIRED) - option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF) + option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" OFF) if(DOWNLOAD_MSCG) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") endif() include(ExternalProject) if(NOT LAPACK_FOUND) @@ -704,7 +716,7 @@ if(PKG_MSCG) URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz URL_MD5 8c45e269ee13f60b303edd7823866a91 SOURCE_SUBDIR src/CMake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} ${EXTRA_MSCG_OPTS} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} BUILD_COMMAND make mscg INSTALL_COMMAND "" ) ExternalProject_get_property(mscg_build BINARY_DIR) @@ -752,7 +764,7 @@ set(MATH_LIBRARIES "m" CACHE STRING "math library") mark_as_advanced( MATH_LIBRARIES ) include(CheckLibraryExists) if (CMAKE_VERSION VERSION_LESS "3.4") - enable_language(C) # check_library_exists isn't supported without a c compiler before v3.4 + enable_language(C) # check_library_exists isn't supported without a C compiler before v3.4 endif() # RB: disabled this check because it breaks with KOKKOS CUDA enabled #foreach(FUNC sin cos) @@ -1174,7 +1186,7 @@ if(PKG_GPU) -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) if(${BUILD_SHARED_LIBS}) - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS -Xcompiler=-fPIC + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS -Xcompiler ${CMAKE_POSITION_INDEPENDENT_CODE} -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) else() cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS @@ -1327,7 +1339,7 @@ if(BUILD_EXE) add_dependencies(lmp ${LAMMPS_DEPS}) endif() endif() - + set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) @@ -1464,14 +1476,14 @@ message(STATUS "<<< Build configuration >>> get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) list (FIND LANGUAGES "Fortran" _index) if (${_index} GREATER -1) - message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} + message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} Type ${CMAKE_Fortran_COMPILER_ID} Version ${CMAKE_Fortran_COMPILER_VERSION} Fortran Flags ${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}") endif() list (FIND LANGUAGES "C" _index) if (${_index} GREATER -1) - message(STATUS "C Compiler ${CMAKE_C_COMPILER} + message(STATUS "C Compiler ${CMAKE_C_COMPILER} Type ${CMAKE_C_COMPILER_ID} Version ${CMAKE_C_COMPILER_VERSION} C Flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") From c980dd0a56bd73326f568e17a51fcc4dae660a2e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 20:56:13 -0500 Subject: [PATCH 186/273] remove stray endif() --- cmake/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c49b1c621b..78653a6c39 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -476,7 +476,6 @@ if(PKG_LATTE) SOURCE_SUBDIR cmake CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} ) - endif() ExternalProject_get_property(latte_build INSTALL_DIR) set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) list(APPEND LAMMPS_DEPS latte_build) @@ -1491,7 +1490,7 @@ endif() if(CMAKE_EXE_LINKER_FLAGS) message(STATUS "Linker flags: Executable ${CMAKE_EXE_LINKER_FLAGS}") - endif() +endif() if(BUILD_SHARED_LIBS) message(STATUS "Shared libraries ${CMAKE_SHARED_LINKER_FLAGS}") else() From 91b96fa0c91e920d34a255b68f3b20115d05aa88 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 21:37:23 -0500 Subject: [PATCH 187/273] build MESSAGE package client/server library always as static library --- cmake/CMakeLists.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 78653a6c39..28698c9a03 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -672,12 +672,7 @@ if(PKG_MESSAGE) ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) - if(BUILD_SHARED_LIBS) - add_library(cslib SHARED ${cslib_SOURCES}) - else() - add_library(cslib STATIC ${cslib_SOURCES}) - endif() - + add_library(cslib STATIC ${cslib_SOURCES}) if(BUILD_MPI) target_compile_definitions(cslib PRIVATE -DMPI_YES) set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") From d6ea31e14319d0e3ee4842bee8406b06f281ed2f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 22:06:10 -0500 Subject: [PATCH 188/273] implement changes suggested by @junghans for GPU/CUDA compilation --- cmake/CMakeLists.txt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 28698c9a03..fe158f512f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -425,9 +425,11 @@ endif() if(BUILD_SHARED_LIBS) set(CONFIGURE_REQUEST_PIC "--with-pic") set(CMAKE_REQUEST_PIC "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}") + set(CUDA_REQUEST_PIC "-Xcompiler ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") else() set(CONFIGURE_REQUEST_PIC "") set(CMAKE_REQUEST_PIC "") + set(CUDA_REQUEST_PIC "") endif() @@ -1179,13 +1181,8 @@ if(PKG_GPU) cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - if(${BUILD_SHARED_LIBS}) - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS -Xcompiler ${CMAKE_POSITION_INDEPENDENT_CODE} + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - else() - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS - -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - endif() foreach(CU_OBJ ${GPU_GEN_OBJS}) get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) From 1fdfc89d251ca5d151634abaf4e8ea25d55306e7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 22:27:21 -0500 Subject: [PATCH 189/273] make $HOME/.local the default LAMMPS installation destination --- cmake/CMakeLists.txt | 4 ++++ cmake/README.md | 1 + doc/src/Build_cmake.txt | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fe158f512f..690ac40957 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -11,6 +11,10 @@ get_filename_component(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUTE) +# by default, install into $HOME/.local (not /usr/local), so that no root access (and sudo!!) is needed +if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "default install path" FORCE ) +endif() # To avoid conflicts with the conventional Makefile build system, we build everything here file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) diff --git a/cmake/README.md b/cmake/README.md index 90aba19a41..ae9ea8d1f7 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -195,6 +195,7 @@ cmake -C ../cmake/presets/std_nolib.cmake -D PKG_GPU=on ../cmake CMAKE_INSTALL_PREFIX Install location where LAMMPS files will be copied to. In the Unix/Linux case with Makefiles this controls what `make install` will do. + Default setting is $HOME/.local. diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 1406d290f5..5c29e11280 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -44,7 +44,7 @@ LAMMPS or need to re-compile LAMMPS repeatedly, installation of the ccache (= Compiler Cache) software may speed up compilation even more. After compilation, you can optionally copy the LAMMPS executable and -library into your system folders (by default under /usr/local) with: +library into your system folders (by default under $HOME/.local) with: make install # optional, copy LAMMPS executable & library elsewhere :pre From 00b138f5421c3af7f88dfd678702c5a1fe50c278 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 22:43:08 -0500 Subject: [PATCH 190/273] verbose CUDA assembly processing is more distracting than helping --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 690ac40957..99d7f2d0d3 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1183,10 +1183,10 @@ if(PKG_GPU) endif() cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + -DUNIX -O3 --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} - -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + -DUNIX -O3 --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) foreach(CU_OBJ ${GPU_GEN_OBJS}) get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) From d43f2291620ad311ab22df3099adca3d3159de4d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 26 Nov 2018 22:48:23 -0500 Subject: [PATCH 191/273] do not warn about deprecated GPU target archs --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 99d7f2d0d3..c873429d00 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1183,10 +1183,10 @@ if(PKG_GPU) endif() cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 --use_fast_math -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} - -DUNIX -O3 --use_fast_math -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) foreach(CU_OBJ ${GPU_GEN_OBJS}) get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) From dbc798e28672d7a656d0efa7d4aa6fbe0ea7f7ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 27 Nov 2018 05:29:42 -0500 Subject: [PATCH 192/273] correct passing flags to local voro++ build --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c873429d00..e6ed5be376 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -444,9 +444,9 @@ if(PKG_VORONOI) include(ExternalProject) if(BUILD_SHARED_LIBS) - set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_POSITION_INDEPENDENT_CODE} ${CMAKE_C_FLAGS}") + set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") else() - set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_C_FLAGS}") + set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_CXX_FLAGS}") endif() ExternalProject_Add(voro_build From 79fafcb12cb3bead034febc1972cc045a29b456c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 27 Nov 2018 09:57:21 -0500 Subject: [PATCH 193/273] passing build type specific compiler flags to building the voro++ library --- cmake/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e6ed5be376..3702647f9d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -79,6 +79,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) #release comes with -O3 by default set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) +string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # check for files auto-generated by make-based buildsystem # this is fast, so check for it all the time @@ -444,10 +445,12 @@ if(PKG_VORONOI) include(ExternalProject) if(BUILD_SHARED_LIBS) - set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") + set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") else() - set(VORO_BUILD_OPTIONS CXX="${CMAKE_CXX_COMPILER}" CFLAGS="${CMAKE_CXX_FLAGS}") + set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") endif() + string(APPEND VORO_BUILD_CFLAGS ${CMAKE_CXX_FLAGS}) + set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) ExternalProject_Add(voro_build URL http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz @@ -1455,7 +1458,6 @@ foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) endif() endforeach() -string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) get_directory_property(CPPFLAGS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) include(FeatureSummary) feature_summary(DESCRIPTION "The following packages have been found:" WHAT PACKAGES_FOUND) From ebacd5ca6b9e00e5cf72629deae4404049ff8a87 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 27 Nov 2018 14:36:59 -0500 Subject: [PATCH 194/273] anti-nitpick hack --- cmake/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3702647f9d..aa42ed9a87 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -432,9 +432,9 @@ if(BUILD_SHARED_LIBS) set(CMAKE_REQUEST_PIC "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}") set(CUDA_REQUEST_PIC "-Xcompiler ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") else() - set(CONFIGURE_REQUEST_PIC "") - set(CMAKE_REQUEST_PIC "") - set(CUDA_REQUEST_PIC "") + set(CONFIGURE_REQUEST_PIC) + set(CMAKE_REQUEST_PIC) + set(CUDA_REQUEST_PIC) endif() From 1b50ad02fb645f80a403198eb9442aeaf22bfb13 Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 00:06:50 +0100 Subject: [PATCH 195/273] fixed uninitialized var homedir --- lib/plumed/Install.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 61c1c35ee2..83268b11ec 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -139,6 +139,7 @@ while iarg < nargs: else: error() homepath = fullpath(homepath) +homedir = "%s/plumed2" % (homepath) if (pathflag): if not os.path.isdir(plumedpath): error("Plumed2 path does not exist") @@ -170,8 +171,8 @@ if buildflag: if os.path.exists("%s/plumed-%s" % (homepath,version)): cmd = 'rm -rf "%s/plumed-%s"' % (homepath,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if os.path.exists("%s/plumed2" % (homepath)): - cmd = 'rm -rf "%s/plumed2"' % (homepath) + if os.path.exists(homedir): + cmd = 'rm -rf "%s"' % (homedir) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'cd "%s"; tar -xzvf %s' % (homepath,filename) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) @@ -181,7 +182,7 @@ if buildflag: if buildflag: print("Building plumed ...") - cmd = 'cd %s/plumed-%s; ./configure --prefix=%s/plumed2 --enable-static-patch ; make ; make install' % (homepath,version,homepath) + cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-static-patch ; make ; make install' % (homepath,version,homedir) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) print(txt.decode('UTF-8')) # From c87bdda9a8a9862811cee4b05e5161aebd0a44f7 Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 00:08:01 +0100 Subject: [PATCH 196/273] fixed wrong path to Plumed.inc.* --- lib/plumed/Install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 83268b11ec..0a2c2be135 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -200,6 +200,6 @@ if linkflag: subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.isfile("Makefile.lammps.%s" % mode): print("Creating Makefile.lammps") - cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) + cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From 32abe3520101384214729be9859e541148a10152 Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 00:08:55 +0100 Subject: [PATCH 197/273] added -j8 option for faster plumed make --- lib/plumed/Install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 0a2c2be135..ff866ea223 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -182,7 +182,7 @@ if buildflag: if buildflag: print("Building plumed ...") - cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-static-patch ; make ; make install' % (homepath,version,homedir) + cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-static-patch ; make -j8 ; make install' % (homepath,version,homedir) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) print(txt.decode('UTF-8')) # From 55654ca68eeda8af3d6a203793fc80a93f28e54c Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 00:35:47 +0100 Subject: [PATCH 198/273] fix memory leak due to virial_lmp --- src/USER-PLUMED/fix_plumed.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index d73cfdb7a7..c0f67ea60a 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -410,8 +410,8 @@ void FixPlumed::post_force(int /* vflag */) p->cmd("getBias",&bias); // Pass virial to plumed - // If energy is needed virial_plmd is equal to Lammps' virial - // If energy is not needed virial_plmd is initialized to zero + // If energy is needed plmd_virial is equal to Lammps' virial + // If energy is not needed plmd_virial is initialized to zero // In the first case the virial will be rescaled and an extra term will be added // In the latter case only an extra term will be added p->cmd("setVirial",&plmd_virial[0][0]); @@ -470,25 +470,31 @@ void FixPlumed::post_force(int /* vflag */) plmd_virial[0][1]=-virial_lmp[3]; plmd_virial[0][2]=-virial_lmp[4]; plmd_virial[1][2]=-virial_lmp[5]; - } else { - virial_lmp = new double[6]; - for (int i=0;i<6;i++) virial_lmp[i] = 0.; } // do the real calculation: p->cmd("performCalc"); // retransform virial to lammps representation and assign it to this - // fix's virial. Plumed is giving back the full virial and therefore - // we have to subtract the initial virial i.e. virial_lmp. + // fix's virial. If the energy is biased, Plumed is giving back the full + // virial and therefore we have to subtract the initial virial i.e. virial_lmp. // The vector virial contains only the contribution added by plumed. // The calculation of the pressure will be done by a compute pressure // and will include this contribution. - virial[0] = -plmd_virial[0][0]-virial_lmp[0]; - virial[1] = -plmd_virial[1][1]-virial_lmp[1]; - virial[2] = -plmd_virial[2][2]-virial_lmp[2]; - virial[3] = -plmd_virial[0][1]-virial_lmp[3]; - virial[4] = -plmd_virial[0][2]-virial_lmp[4]; - virial[5] = -plmd_virial[1][2]-virial_lmp[5]; + if (plumedNeedsEnergy) { + virial[0] = -plmd_virial[0][0]-virial_lmp[0]; + virial[1] = -plmd_virial[1][1]-virial_lmp[1]; + virial[2] = -plmd_virial[2][2]-virial_lmp[2]; + virial[3] = -plmd_virial[0][1]-virial_lmp[3]; + virial[4] = -plmd_virial[0][2]-virial_lmp[4]; + virial[5] = -plmd_virial[1][2]-virial_lmp[5]; + } else { + virial[0] = -plmd_virial[0][0]; + virial[1] = -plmd_virial[1][1]; + virial[2] = -plmd_virial[2][2]; + virial[3] = -plmd_virial[0][1]; + virial[4] = -plmd_virial[0][2]; + virial[5] = -plmd_virial[1][2]; + } // Ask for the computes in the next time step // such that the virial and energy are tallied. From 3d5423f5da45f7985c5a8be011ce7a34b684644b Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 09:18:38 +0100 Subject: [PATCH 199/273] revert back to correct path to Plumed.inc.*. (my fault, I was not doing the 'make install') --- lib/plumed/Install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index ff866ea223..849640a4f9 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -200,6 +200,6 @@ if linkflag: subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.isfile("Makefile.lammps.%s" % mode): print("Creating Makefile.lammps") - cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) + cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From a4684e2629043f27eeee78c70682f658020ef485 Mon Sep 17 00:00:00 2001 From: PabloPiaggi Date: Wed, 28 Nov 2018 15:43:35 +0100 Subject: [PATCH 200/273] Add --noinstall flag to use the plumed source code directly without issuing make install --- doc/src/Build_extras.txt | 4 ++++ lib/plumed/Install.py | 29 +++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index fb2fe95341..b98caee076 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -796,6 +796,10 @@ make lib-plumed args="-b" # download and build PLUMED in lib/plume make lib-plumed args="-p $HOME/.local" # use existing PLUMED installation in $HOME/.local make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installation in # /usr/local and use shared linkage mode +make lib-plumed args="-p $HOME/plumed2 --noinstall -m shared" # use existing PLUMED + # compiled source code in + # $HOME/plumed2 and use + # shared linkage mode :pre Note that 2 symbolic (soft) links, "includelink" and "liblink" are diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 849640a4f9..abead8deb8 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -12,10 +12,12 @@ help = """ Syntax from src dir: make lib-plumed args="-b" or: make lib-plumed args="-b -v 2.4.3" or: make lib-plumed args="-p /usr/local/plumed2 -m shared" + or: make lib-plumed args="-p /home/myname/myplumed2sourcecode --noinstall" Syntax from lib dir: python Install.py -b -v 2.4.3 or: python Install.py -b or: python Install.py -p /usr/local/plumed2 -m shared + or: python Install.py -p /home/myname/myplumed2sourcecode --noinstall specify one or more options, order does not matter @@ -23,11 +25,13 @@ specify one or more options, order does not matter -v = set version of plumed2 to download and build (default: 2.4.3) -p = specify folder of existing plumed2 installation -m = set plumed linkage mode: static (default), shared, or runtime + --noinstall = use existing plumed2 source code folder where make was issued but make install was not Example: make lib-plumed args="-b" # download/build in lib/plumed/plumed2 -make lib-plumed args="-p $HOME/plumed2 -m shared" # use existing Plumed2 installation in $HOME/plumed2 +make lib-plumed args="-p /usr/local/plumed2 -m shared" # use existing Plumed2 installation in /usr/local/plumed2 +make lib-plumed args="-p $HOME/plumed2 -m shared --noinstall" # use existing Plumed2 source code folder in $HOME/plumed2 """ # settings @@ -117,6 +121,7 @@ buildflag = False pathflag = False suffixflag = False linkflag = True +noinstallflag = False iarg = 0 while iarg < nargs: @@ -136,6 +141,9 @@ while iarg < nargs: elif args[iarg] == "-b": buildflag = True iarg += 1 + elif args[iarg] == "--noinstall": + noinstallflag = True + iarg += 1 else: error() homepath = fullpath(homepath) @@ -194,12 +202,21 @@ if linkflag: os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") - cmd = 'ln -s "%s/include" includelink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - cmd = 'ln -s "%s/lib" liblink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + if noinstallflag: + cmd = 'ln -s "%s/src/include" includelink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/src/lib" liblink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + else: + cmd = 'ln -s "%s/include" includelink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/lib" liblink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.isfile("Makefile.lammps.%s" % mode): print("Creating Makefile.lammps") - cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) + if noinstallflag: + cmd = 'echo PLUMED_LIBDIR="%s/src/lib" > Makefile.lammps; cat liblink/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) + else: + cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From 82132879666069387e9b64de5944fd642e998098 Mon Sep 17 00:00:00 2001 From: Michele Invernizzi Date: Wed, 28 Nov 2018 16:09:05 +0100 Subject: [PATCH 201/273] detect the number of available CPU for plumed make, as suggested by @akohlmey --- lib/plumed/Install.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index abead8deb8..b79108d2b4 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -186,14 +186,17 @@ if buildflag: subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) os.remove("%s/%s" % (homepath,filename)) -# build plumed + # build plumed + print("Building plumed ...") + try: + import multiprocessing + n_cpus = multiprocessing.cpu_count() + except: + n_cpus = 1 + cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-static-patch ; make -j%d ; make install' % (homepath,version,homedir,n_cpus) + txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + print(txt.decode('UTF-8')) -if buildflag: - print("Building plumed ...") - cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-static-patch ; make -j8 ; make install' % (homepath,version,homedir) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - print(txt.decode('UTF-8')) -# # create 2 links in lib/plumed to plumed2 installation dir if linkflag: From 22e774adef5787e577b490b42a0b588dfdfab9f6 Mon Sep 17 00:00:00 2001 From: PabloPiaggi Date: Wed, 28 Nov 2018 17:37:24 +0100 Subject: [PATCH 202/273] Revert "Add --noinstall flag to use the plumed source code directly without issuing make install" This reverts commit a4684e2629043f27eeee78c70682f658020ef485. Revert --noinstall flag commit --- doc/src/Build_extras.txt | 4 ---- lib/plumed/Install.py | 29 ++++++----------------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index b98caee076..fb2fe95341 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -796,10 +796,6 @@ make lib-plumed args="-b" # download and build PLUMED in lib/plume make lib-plumed args="-p $HOME/.local" # use existing PLUMED installation in $HOME/.local make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installation in # /usr/local and use shared linkage mode -make lib-plumed args="-p $HOME/plumed2 --noinstall -m shared" # use existing PLUMED - # compiled source code in - # $HOME/plumed2 and use - # shared linkage mode :pre Note that 2 symbolic (soft) links, "includelink" and "liblink" are diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index b79108d2b4..cbe3a55937 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -12,12 +12,10 @@ help = """ Syntax from src dir: make lib-plumed args="-b" or: make lib-plumed args="-b -v 2.4.3" or: make lib-plumed args="-p /usr/local/plumed2 -m shared" - or: make lib-plumed args="-p /home/myname/myplumed2sourcecode --noinstall" Syntax from lib dir: python Install.py -b -v 2.4.3 or: python Install.py -b or: python Install.py -p /usr/local/plumed2 -m shared - or: python Install.py -p /home/myname/myplumed2sourcecode --noinstall specify one or more options, order does not matter @@ -25,13 +23,11 @@ specify one or more options, order does not matter -v = set version of plumed2 to download and build (default: 2.4.3) -p = specify folder of existing plumed2 installation -m = set plumed linkage mode: static (default), shared, or runtime - --noinstall = use existing plumed2 source code folder where make was issued but make install was not Example: make lib-plumed args="-b" # download/build in lib/plumed/plumed2 -make lib-plumed args="-p /usr/local/plumed2 -m shared" # use existing Plumed2 installation in /usr/local/plumed2 -make lib-plumed args="-p $HOME/plumed2 -m shared --noinstall" # use existing Plumed2 source code folder in $HOME/plumed2 +make lib-plumed args="-p $HOME/plumed2 -m shared" # use existing Plumed2 installation in $HOME/plumed2 """ # settings @@ -121,7 +117,6 @@ buildflag = False pathflag = False suffixflag = False linkflag = True -noinstallflag = False iarg = 0 while iarg < nargs: @@ -141,9 +136,6 @@ while iarg < nargs: elif args[iarg] == "-b": buildflag = True iarg += 1 - elif args[iarg] == "--noinstall": - noinstallflag = True - iarg += 1 else: error() homepath = fullpath(homepath) @@ -205,21 +197,12 @@ if linkflag: os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") - if noinstallflag: - cmd = 'ln -s "%s/src/include" includelink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - cmd = 'ln -s "%s/src/lib" liblink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - else: - cmd = 'ln -s "%s/include" includelink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - cmd = 'ln -s "%s/lib" liblink' % homedir - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/include" includelink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/lib" liblink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if os.path.isfile("Makefile.lammps.%s" % mode): print("Creating Makefile.lammps") - if noinstallflag: - cmd = 'echo PLUMED_LIBDIR="%s/src/lib" > Makefile.lammps; cat liblink/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) - else: - cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) + cmd = 'echo PLUMED_LIBDIR="%s/lib" > Makefile.lammps; cat liblink/plumed/src/lib/Plumed.inc.%s Makefile.lammps.%s >> Makefile.lammps' % (homedir,mode,mode) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) From 77e73621683f6474c00991a11112ba1f93562bea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 14:28:20 -0500 Subject: [PATCH 203/273] update log files for airebo and atm examples --- examples/airebo/CH.airebo | 1 + examples/airebo/CH.airebo-m | 1 + examples/airebo/in.airebo | 26 ++++++------ examples/airebo/in.airebo-m | 26 ++++++------ ...ebo-m.g++.1 => log.27Nov18.airebo-m.g++.1} | 23 ++++++----- ...ebo-m.g++.4 => log.27Nov18.airebo-m.g++.4} | 23 ++++++----- ....airebo.g++.1 => log.27Nov18.airebo.g++.1} | 23 ++++++----- ....airebo.g++.4 => log.27Nov18.airebo.g++.4} | 23 ++++++----- examples/atm/in.atm | 40 +++++++++---------- ...og.27Aug18.g++.1 => log.27Nov18.atm.g++.1} | 23 ++++++----- ...og.27Aug18.g++.4 => log.27Nov18.atm.g++.4} | 23 ++++++----- 11 files changed, 120 insertions(+), 112 deletions(-) create mode 120000 examples/airebo/CH.airebo create mode 120000 examples/airebo/CH.airebo-m rename examples/airebo/{log.23Jun17.airebo-m.g++.1 => log.27Nov18.airebo-m.g++.1} (80%) rename examples/airebo/{log.23Jun17.airebo-m.g++.4 => log.27Nov18.airebo-m.g++.4} (80%) rename examples/airebo/{log.23Jun17.airebo.g++.1 => log.27Nov18.airebo.g++.1} (80%) rename examples/airebo/{log.23Jun17.airebo.g++.4 => log.27Nov18.airebo.g++.4} (80%) rename examples/atm/{log.27Aug18.g++.1 => log.27Nov18.atm.g++.1} (82%) rename examples/atm/{log.27Aug18.g++.4 => log.27Nov18.atm.g++.4} (81%) diff --git a/examples/airebo/CH.airebo b/examples/airebo/CH.airebo new file mode 120000 index 0000000000..60249102a5 --- /dev/null +++ b/examples/airebo/CH.airebo @@ -0,0 +1 @@ +../../potentials/CH.airebo \ No newline at end of file diff --git a/examples/airebo/CH.airebo-m b/examples/airebo/CH.airebo-m new file mode 120000 index 0000000000..21f734dd05 --- /dev/null +++ b/examples/airebo/CH.airebo-m @@ -0,0 +1 @@ +../../potentials/CH.airebo-m \ No newline at end of file diff --git a/examples/airebo/in.airebo b/examples/airebo/in.airebo index 5b0e36ff4a..7615412430 100644 --- a/examples/airebo/in.airebo +++ b/examples/airebo/in.airebo @@ -1,22 +1,22 @@ # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo -replicate 17 16 2 +replicate 17 16 2 -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo C H +pair_style airebo 3.0 1 1 +pair_coeff * * CH.airebo C H -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 diff --git a/examples/airebo/in.airebo-m b/examples/airebo/in.airebo-m index 3ec29482a7..562b74e6fc 100644 --- a/examples/airebo/in.airebo-m +++ b/examples/airebo/in.airebo-m @@ -1,22 +1,22 @@ # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo -replicate 17 16 2 +replicate 17 16 2 -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo/morse 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo-m C H +pair_style airebo/morse 3.0 1 1 +pair_coeff * * CH.airebo-m C H -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.1 b/examples/airebo/log.27Nov18.airebo-m.g++.1 similarity index 80% rename from examples/airebo/log.23Jun17.airebo-m.g++.1 rename to examples/airebo/log.27Nov18.airebo-m.g++.1 index 1483fcb4a6..44d8b9d59c 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.1 +++ b/examples/airebo/log.27Nov18.airebo-m.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (23 Jun 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00141144 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 117.672 on 1 procs for 100 steps with 32640 atoms +Loop time of 64.6107 on 1 procs for 100 steps with 32640 atoms -Performance: 0.037 ns/day, 653.734 hours/ns, 0.850 timesteps/s -99.3% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.067 ns/day, 358.948 hours/ns, 1.548 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 108.31 | 108.31 | 108.31 | 0.0 | 92.04 -Neigh | 9.2199 | 9.2199 | 9.2199 | 0.0 | 7.84 -Comm | 0.052942 | 0.052942 | 0.052942 | 0.0 | 0.04 -Output | 0.0015149 | 0.0015149 | 0.0015149 | 0.0 | 0.00 -Modify | 0.060962 | 0.060962 | 0.060962 | 0.0 | 0.05 -Other | | 0.02656 | | | 0.02 +Pair | 59.916 | 59.916 | 59.916 | 0.0 | 92.73 +Neigh | 4.6347 | 4.6347 | 4.6347 | 0.0 | 7.17 +Comm | 0.025572 | 0.025572 | 0.025572 | 0.0 | 0.04 +Output | 0.00098896 | 0.00098896 | 0.00098896 | 0.0 | 0.00 +Modify | 0.022327 | 0.022327 | 0.022327 | 0.0 | 0.03 +Other | | 0.01076 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +84,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:02:00 +Total wall time: 0:01:05 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.4 b/examples/airebo/log.27Nov18.airebo-m.g++.4 similarity index 80% rename from examples/airebo/log.23Jun17.airebo-m.g++.4 rename to examples/airebo/log.27Nov18.airebo-m.g++.4 index 3a3d922bcb..a4cc55211b 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.4 +++ b/examples/airebo/log.27Nov18.airebo-m.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (23 Jun 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.000637531 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 32.9268 on 4 procs for 100 steps with 32640 atoms +Loop time of 18.1922 on 4 procs for 100 steps with 32640 atoms -Performance: 0.131 ns/day, 182.927 hours/ns, 3.037 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.237 ns/day, 101.068 hours/ns, 5.497 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 28.045 | 28.537 | 29.42 | 10.4 | 86.67 -Neigh | 3.163 | 3.237 | 3.3761 | 4.7 | 9.83 -Comm | 0.09883 | 1.1206 | 1.6862 | 60.4 | 3.40 -Output | 0.00099325 | 0.0011329 | 0.0012462 | 0.3 | 0.00 -Modify | 0.016013 | 0.016726 | 0.017257 | 0.4 | 0.05 -Other | | 0.01459 | | | 0.04 +Pair | 15.968 | 16.084 | 16.308 | 3.4 | 88.41 +Neigh | 1.6017 | 1.6334 | 1.7006 | 3.1 | 8.98 +Comm | 0.1603 | 0.45122 | 0.59951 | 26.0 | 2.48 +Output | 0.00042605 | 0.00073195 | 0.0016003 | 0.0 | 0.00 +Modify | 0.0092106 | 0.010544 | 0.014411 | 2.2 | 0.06 +Other | | 0.01193 | | | 0.07 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +84,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:33 +Total wall time: 0:00:18 diff --git a/examples/airebo/log.23Jun17.airebo.g++.1 b/examples/airebo/log.27Nov18.airebo.g++.1 similarity index 80% rename from examples/airebo/log.23Jun17.airebo.g++.1 rename to examples/airebo/log.27Nov18.airebo.g++.1 index 0ef895dc28..3713c8a8f8 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.1 +++ b/examples/airebo/log.27Nov18.airebo.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (23 Jun 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00144172 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 110.107 on 1 procs for 100 steps with 32640 atoms +Loop time of 57.9914 on 1 procs for 100 steps with 32640 atoms -Performance: 0.039 ns/day, 611.705 hours/ns, 0.908 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.074 ns/day, 322.174 hours/ns, 1.724 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 100.76 | 100.76 | 100.76 | 0.0 | 91.51 -Neigh | 9.1909 | 9.1909 | 9.1909 | 0.0 | 8.35 -Comm | 0.058134 | 0.058134 | 0.058134 | 0.0 | 0.05 -Output | 0.0015941 | 0.0015941 | 0.0015941 | 0.0 | 0.00 -Modify | 0.062212 | 0.062212 | 0.062212 | 0.0 | 0.06 -Other | | 0.03123 | | | 0.03 +Pair | 53.275 | 53.275 | 53.275 | 0.0 | 91.87 +Neigh | 4.6548 | 4.6548 | 4.6548 | 0.0 | 8.03 +Comm | 0.026622 | 0.026622 | 0.026622 | 0.0 | 0.05 +Output | 0.00097251 | 0.00097251 | 0.00097251 | 0.0 | 0.00 +Modify | 0.022773 | 0.022773 | 0.022773 | 0.0 | 0.04 +Other | | 0.01089 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +84,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:01:52 +Total wall time: 0:00:59 diff --git a/examples/airebo/log.23Jun17.airebo.g++.4 b/examples/airebo/log.27Nov18.airebo.g++.4 similarity index 80% rename from examples/airebo/log.23Jun17.airebo.g++.4 rename to examples/airebo/log.27Nov18.airebo.g++.4 index 486b48a004..335690684a 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.4 +++ b/examples/airebo/log.27Nov18.airebo.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (23 Jun 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.00262594 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 30.1916 on 4 procs for 100 steps with 32640 atoms +Loop time of 16.4395 on 4 procs for 100 steps with 32640 atoms -Performance: 0.143 ns/day, 167.731 hours/ns, 3.312 timesteps/s -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.263 ns/day, 91.331 hours/ns, 6.083 timesteps/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 26.083 | 26.31 | 26.795 | 5.5 | 87.14 -Neigh | 3.1781 | 3.2134 | 3.2775 | 2.2 | 10.64 -Comm | 0.086296 | 0.63643 | 0.88995 | 40.2 | 2.11 -Output | 0.00074124 | 0.0010698 | 0.0013616 | 0.7 | 0.00 -Modify | 0.015335 | 0.016373 | 0.017565 | 0.8 | 0.05 -Other | | 0.01457 | | | 0.05 +Pair | 14.263 | 14.349 | 14.483 | 2.3 | 87.28 +Neigh | 1.6071 | 1.6283 | 1.6636 | 1.7 | 9.90 +Comm | 0.26261 | 0.43435 | 0.52323 | 16.1 | 2.64 +Output | 0.00042105 | 0.0007121 | 0.001538 | 0.0 | 0.00 +Modify | 0.00898 | 0.009112 | 0.0093675 | 0.2 | 0.06 +Other | | 0.0184 | | | 0.11 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +84,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:30 +Total wall time: 0:00:16 diff --git a/examples/atm/in.atm b/examples/atm/in.atm index 131528dce3..e0041d9d2a 100644 --- a/examples/atm/in.atm +++ b/examples/atm/in.atm @@ -1,31 +1,31 @@ # Axilrod-Teller-Muto potential example -variable x index 1 -variable y index 1 -variable z index 1 +variable x index 1 +variable y index 1 +variable z index 1 -variable xx equal 10*$x -variable yy equal 10*$y -variable zz equal 10*$z +variable xx equal 10*$x +variable yy equal 10*$y +variable zz equal 10*$z -units lj -atom_style atomic +units lj +atom_style atomic -lattice fcc 0.65 -region box block 0 ${xx} 0 ${yy} 0 ${zz} -create_box 1 box -create_atoms 1 box +lattice fcc 0.65 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +create_box 1 box +create_atoms 1 box -pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 -pair_coeff * * lj/cut 1.0 1.0 -pair_coeff * * atm * 0.072 +pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff * * atm * 0.072 -mass * 1.0 -velocity all create 1.033 12345678 loop geom +mass * 1.0 +velocity all create 1.033 12345678 loop geom -fix 1 all nvt temp 1.033 1.033 0.05 +fix 1 all nvt temp 1.033 1.033 0.05 timestep 0.002 -thermo 5 +thermo 5 -run 25 +run 25 diff --git a/examples/atm/log.27Aug18.g++.1 b/examples/atm/log.27Nov18.atm.g++.1 similarity index 82% rename from examples/atm/log.27Aug18.g++.1 rename to examples/atm/log.27Nov18.atm.g++.1 index 46215e108c..69bdb2f266 100644 --- a/examples/atm/log.27Aug18.g++.1 +++ b/examples/atm/log.27Nov18.atm.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (22 Aug 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Axilrod-Teller-Muto potential example variable x index 1 @@ -26,7 +27,7 @@ Created orthogonal box = (0 0 0) to (18.3252 18.3252 18.3252) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms - Time spent = 0.00139618 secs + Time spent = 0.000354767 secs pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 pair_coeff * * lj/cut 1.0 1.0 @@ -66,20 +67,20 @@ Step Temp E_pair E_mol TotEng Press 15 1.0376519 -4.84599 0 -3.2899013 -4.0278711 20 1.0382257 -4.8478854 0 -3.2909361 -3.9368052 25 1.0347886 -4.84473 0 -3.2929351 -3.8044469 -Loop time of 15.95 on 1 procs for 25 steps with 4000 atoms +Loop time of 11.3218 on 1 procs for 25 steps with 4000 atoms -Performance: 270.846 tau/day, 1.567 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 381.565 tau/day, 2.208 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.946 | 15.946 | 15.946 | 0.0 | 99.97 +Pair | 11.319 | 11.319 | 11.319 | 0.0 | 99.98 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0015042 | 0.0015042 | 0.0015042 | 0.0 | 0.01 -Output | 0.00013781 | 0.00013781 | 0.00013781 | 0.0 | 0.00 -Modify | 0.0017776 | 0.0017776 | 0.0017776 | 0.0 | 0.01 -Other | | 0.0006771 | | | 0.00 +Comm | 0.0010235 | 0.0010235 | 0.0010235 | 0.0 | 0.01 +Output | 0.00010943 | 0.00010943 | 0.00010943 | 0.0 | 0.00 +Modify | 0.0012162 | 0.0012162 | 0.0012162 | 0.0 | 0.01 +Other | | 0.0004497 | | | 0.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -97,4 +98,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:16 +Total wall time: 0:00:11 diff --git a/examples/atm/log.27Aug18.g++.4 b/examples/atm/log.27Nov18.atm.g++.4 similarity index 81% rename from examples/atm/log.27Aug18.g++.4 rename to examples/atm/log.27Nov18.atm.g++.4 index d84f17ee2b..1248040847 100644 --- a/examples/atm/log.27Aug18.g++.4 +++ b/examples/atm/log.27Nov18.atm.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (22 Aug 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Axilrod-Teller-Muto potential example variable x index 1 @@ -26,7 +27,7 @@ Created orthogonal box = (0 0 0) to (18.3252 18.3252 18.3252) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms - Time spent = 0.000900984 secs + Time spent = 0.000210762 secs pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 pair_coeff * * lj/cut 1.0 1.0 @@ -66,20 +67,20 @@ Step Temp E_pair E_mol TotEng Press 15 1.0376519 -4.84599 0 -3.2899013 -4.0278711 20 1.0382257 -4.8478854 0 -3.2909361 -3.9368052 25 1.0347886 -4.84473 0 -3.2929351 -3.8044469 -Loop time of 4.34636 on 4 procs for 25 steps with 4000 atoms +Loop time of 2.95263 on 4 procs for 25 steps with 4000 atoms -Performance: 993.935 tau/day, 5.752 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1463.102 tau/day, 8.467 timesteps/s +99.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.9977 | 4.1036 | 4.209 | 4.9 | 94.41 +Pair | 2.8823 | 2.9082 | 2.9447 | 1.4 | 98.49 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.13588 | 0.24134 | 0.34722 | 20.4 | 5.55 -Output | 0.00013757 | 0.00015104 | 0.00016761 | 0.0 | 0.00 -Modify | 0.00087953 | 0.00091547 | 0.00095582 | 0.0 | 0.02 -Other | | 0.0003656 | | | 0.01 +Comm | 0.0066586 | 0.043249 | 0.069202 | 11.8 | 1.46 +Output | 7.3671e-05 | 0.00015199 | 0.00038099 | 0.0 | 0.01 +Modify | 0.00061488 | 0.0006243 | 0.00063872 | 0.0 | 0.02 +Other | | 0.0004148 | | | 0.01 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -97,4 +98,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:04 +Total wall time: 0:00:03 From c428088554516061a34a75835690056ee1b95071 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 14:40:20 -0500 Subject: [PATCH 204/273] update logfiles for balance examples --- .../log.27Nov18.balance.bond.fast.g++.2 | 242 ++++++++ .../log.27Nov18.balance.bond.fast.g++.4 | 242 ++++++++ .../log.27Nov18.balance.bond.slow.g++.2 | 541 ++++++++++++++++++ ....4 => log.27Nov18.balance.bond.slow.g++.4} | 305 +++++----- .../log.27Nov18.balance.clock.dynamic.g++.2 | 227 ++++++++ ...> log.27Nov18.balance.clock.dynamic.g++.4} | 161 +++--- .../log.27Nov18.balance.clock.static.g++.2 | 195 +++++++ ...=> log.27Nov18.balance.clock.static.g++.4} | 115 ++-- examples/balance/log.27Nov18.balance.g++.2 | 209 +++++++ examples/balance/log.27Nov18.balance.g++.4 | 209 +++++++ .../log.27Nov18.balance.group.dynamic.g++.2 | 110 ++++ ...> log.27Nov18.balance.group.dynamic.g++.4} | 35 +- .../log.27Nov18.balance.group.static.g++.2 | 146 +++++ ...=> log.27Nov18.balance.group.static.g++.4} | 43 +- .../balance/log.27Nov18.balance.kspace.g++.2 | 117 ++++ ...g++.4 => log.27Nov18.balance.kspace.g++.4} | 61 +- .../log.27Nov18.balance.neigh.dynamic.g++.2 | 228 ++++++++ ...> log.27Nov18.balance.neigh.dynamic.g++.4} | 97 ++-- .../log.27Nov18.balance.neigh.rcb.g++.2 | 141 +++++ ....4 => log.27Nov18.balance.neigh.rcb.g++.4} | 79 +-- .../log.27Nov18.balance.neigh.static.g++.2 | 211 +++++++ ...=> log.27Nov18.balance.neigh.static.g++.4} | 114 ++-- ... => log.27Nov18.balance.var.dynamic.g++.2} | 151 ++--- .../log.27Nov18.balance.var.dynamic.g++.4 | 257 +++++++++ .../log.5Oct16.balance.bond.fast.g++.4 | 225 -------- examples/balance/log.5Oct16.balance.g++.4 | 202 ------- 26 files changed, 3694 insertions(+), 969 deletions(-) create mode 100644 examples/balance/log.27Nov18.balance.bond.fast.g++.2 create mode 100644 examples/balance/log.27Nov18.balance.bond.fast.g++.4 create mode 100644 examples/balance/log.27Nov18.balance.bond.slow.g++.2 rename examples/balance/{log.5Oct16.balance.bond.slow.g++.4 => log.27Nov18.balance.bond.slow.g++.4} (85%) create mode 100644 examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 rename examples/balance/{log.5Oct16.balance.clock.dynamic.g++.4 => log.27Nov18.balance.clock.dynamic.g++.4} (57%) create mode 100644 examples/balance/log.27Nov18.balance.clock.static.g++.2 rename examples/balance/{log.5Oct16.balance.clock.static.g++.4 => log.27Nov18.balance.clock.static.g++.4} (59%) create mode 100644 examples/balance/log.27Nov18.balance.g++.2 create mode 100644 examples/balance/log.27Nov18.balance.g++.4 create mode 100644 examples/balance/log.27Nov18.balance.group.dynamic.g++.2 rename examples/balance/{log.5Oct16.balance.group.dynamic.g++.4 => log.27Nov18.balance.group.dynamic.g++.4} (73%) create mode 100644 examples/balance/log.27Nov18.balance.group.static.g++.2 rename examples/balance/{log.5Oct16.balance.group.static.g++.4 => log.27Nov18.balance.group.static.g++.4} (74%) create mode 100644 examples/balance/log.27Nov18.balance.kspace.g++.2 rename examples/balance/{log.5Oct16.balance.kspace.g++.4 => log.27Nov18.balance.kspace.g++.4} (58%) create mode 100644 examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 rename examples/balance/{log.5Oct16.balance.neigh.dynamic.g++.4 => log.27Nov18.balance.neigh.dynamic.g++.4} (71%) create mode 100644 examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 rename examples/balance/{log.5Oct16.balance.neigh.rcb.g++.4 => log.27Nov18.balance.neigh.rcb.g++.4} (60%) create mode 100644 examples/balance/log.27Nov18.balance.neigh.static.g++.2 rename examples/balance/{log.5Oct16.balance.neigh.static.g++.4 => log.27Nov18.balance.neigh.static.g++.4} (64%) rename examples/balance/{log.5Oct16.balance.var.dynamic.g++.2 => log.27Nov18.balance.var.dynamic.g++.2} (61%) create mode 100644 examples/balance/log.27Nov18.balance.var.dynamic.g++.4 delete mode 100644 examples/balance/log.5Oct16.balance.bond.fast.g++.4 delete mode 100644 examples/balance/log.5Oct16.balance.g++.4 diff --git a/examples/balance/log.27Nov18.balance.bond.fast.g++.2 b/examples/balance/log.27Nov18.balance.bond.fast.g++.2 new file mode 100644 index 0000000000..0cc1495368 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.bond.fast.g++.2 @@ -0,0 +1,242 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + Time spent = 0.000778913 secs +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +# need to preserve 1-3, 1-4 pairwise interactions during hard collisions + +special_bonds lj/coul 0 1 1 + 0 = max # of 1-2 neighbors + 1 = max # of special neighbors +create_bonds many all all 1 1.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Added 1014 bonds, new total = 1014 + 6 = max # of 1-2 neighbors + 6 = max # of special neighbors + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +comm_modify cutoff 10.0 # because bonds stretch a long ways +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 10 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.156 | 5.167 | 5.177 Mbytes +Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -2.2032569 3.1039469 2 1.0193906 + 100 27.623422 -6.228166 2.6542136 1.0803324 1.0027701 + 200 33.35302 -15.746749 3.2018248 1.1246537 1.0027701 + 300 39.17734 -24.1557 4.9116986 1.1468144 1.0027701 + 400 41.660701 -27.615203 8.6214678 1.2077562 1.0027701 + 500 37.154935 -24.096954 3.2656298 1.2243767 1.0083102 + 600 35.062196 -21.527799 2.3688444 1.1800554 1.0027701 + 700 36.962955 -22.265373 3.0233424 1.1800554 1.0083102 + 800 38.514356 -24.625735 5.2876402 1.2077562 1.0027701 + 900 37.840168 -24.069158 4.443617 1.2022161 1.0083102 + 1000 36.429396 -23.978878 7.2603394 1.1966759 1.0027701 + 1100 34.75827 -22.743232 6.6304628 1.1745152 1.0083102 + 1200 31.057199 -21.46544 3.7869701 1.1634349 1.0083102 + 1300 33.127345 -22.426161 5.824726 1.0858726 1.0027701 + 1400 31.678654 -21.604473 3.2219261 1.0360111 1.0083102 + 1500 28.345212 -18.030807 0.93335223 1.1191136 1.0027701 + 1600 26.031412 -15.389052 0.82549542 1.1080332 1.0027701 + 1700 25.082832 -13.48625 1.0006592 1.0858726 1.0027701 + 1800 25.673875 -13.965883 0.54607043 1.0692521 1.0027701 + 1900 26.530842 -13.979318 2.0285449 1.1024931 1.0027701 + 2000 25.910771 -14.244515 1.9592232 1.1191136 1.0027701 + 2100 28.505636 -16.220559 1.7154775 1.1191136 1.0027701 + 2200 28.142753 -15.564302 2.9946076 1.1135734 1.0027701 + 2300 26.606225 -13.734442 1.4589278 1.0083102 1.0083102 + 2400 25.664988 -12.389759 1.3450183 1.0360111 1.0027701 + 2500 25.145328 -11.815173 0.48162788 1.0360111 1.0027701 + 2600 26.654868 -13.916929 2.8361012 1.0581717 1.0083102 + 2700 27.3758 -15.495452 4.1206412 1.0360111 1.0027701 + 2800 23.60864 -14.520038 1.8948923 1.0193906 1.0027701 + 2900 20.604557 -12.901121 0.17526991 1.0138504 1.0027701 + 3000 20.852473 -12.756946 -0.44987285 1.0360111 1.0027701 + 3100 21.934986 -12.797691 0.76186765 1.0415512 1.0027701 + 3200 23.293263 -12.368233 0.021937309 1.0526316 1.0027701 + 3300 22.091492 -10.88605 0.013006632 1.0415512 1.0083102 + 3400 23.535429 -10.937804 2.0738989 1.0360111 1.0027701 + 3500 24.503573 -12.202994 1.126785 1.0581717 1.0027701 + 3600 23.54503 -12.745709 0.39022194 1.0858726 1.0027701 + 3700 22.658187 -10.986188 -0.18869692 1.0692521 1.0027701 + 3800 21.282045 -9.7879088 -0.061253454 1.0193906 1.0027701 + 3900 20.571754 -9.1157993 -1.0178917 1.0526316 1.0027701 + 4000 23.779702 -10.230328 1.0778525 1.0581717 1.0083102 + 4100 23.675854 -10.63724 0.59402249 1.0415512 1.0027701 + 4200 24.058963 -11.89505 0.3866378 1.0526316 1.0027701 + 4300 22.683721 -11.358978 1.8269036 1.0470914 1.0083102 + 4400 23.002345 -11.081443 0.4529456 1.0415512 1.0027701 + 4500 21.984542 -10.233276 -0.60718244 1.0415512 1.0083102 + 4600 22.079237 -9.979061 0.53013572 1.0415512 1.0027701 + 4700 22.336961 -10.323583 -0.37512832 1.0249307 1.0027701 + 4800 23.351699 -10.143724 0.95694397 1.0470914 1.0027701 + 4900 23.643954 -10.687354 1.6062522 1.0858726 1.0083102 + 5000 25.158132 -11.532398 1.3083639 1.0914127 1.0027701 + 5100 23.755521 -10.978548 0.60587307 1.0470914 1.0027701 + 5200 21.842692 -10.443216 -0.41185899 1.0637119 1.0027701 + 5300 22.828066 -10.871114 1.1754353 1.0470914 1.0027701 + 5400 24.883977 -12.39165 0.65101173 1.0470914 1.0027701 + 5500 22.908286 -11.419431 1.4712698 1.0637119 1.0027701 + 5600 22.718634 -12.083974 1.5706808 1.0526316 1.0027701 + 5700 23.080763 -11.464882 1.2979578 1.0304709 1.0083102 + 5800 21.877026 -11.483185 0.279772 1.0360111 1.0027701 + 5900 22.526809 -10.868636 0.37121786 1.0637119 1.0083102 + 6000 22.908857 -10.311118 0.58244569 1.0526316 1.0083102 + 6100 22.399847 -10.222706 0.87875674 1.0858726 1.0027701 + 6200 22.623463 -10.035541 -0.25811274 1.0304709 1.0027701 + 6300 21.518006 -10.017552 -0.98187611 1.0470914 1.0083102 + 6400 21.269816 -11.297716 0.20058535 1.0138504 1.0027701 + 6500 23.362834 -11.263306 0.47670072 1.0692521 1.0027701 + 6600 23.705236 -12.358492 -0.63286237 1.0027701 1.0027701 + 6700 22.410623 -10.849516 0.57027834 1.0581717 1.0083102 + 6800 21.661639 -9.3981379 0.38726515 1.0470914 1.0027701 + 6900 21.856521 -8.8451751 0.053822789 1.0304709 1.0027701 + 7000 21.069495 -8.6443387 -0.10412144 1.0193906 1.0027701 + 7100 22.305494 -10.098469 -0.22662961 1.0581717 1.0027701 + 7200 23.52884 -11.055929 -0.099869868 1.0692521 1.0027701 + 7300 24.042008 -11.411758 2.0528788 1.0415512 1.0027701 + 7400 22.870777 -12.408763 0.33346225 1.0249307 1.0027701 + 7500 21.290152 -10.963058 0.26940112 1.0083102 1.0027701 + 7600 21.702686 -10.36214 0.84057004 1.0083102 1.0027701 + 7700 22.478034 -10.832724 -0.70855164 1.0747922 1.0027701 + 7800 22.856853 -11.161008 -0.88354803 1.0083102 1.0083102 + 7900 22.579842 -10.789899 0.40865274 1.0360111 1.0027701 + 8000 24.364281 -12.116023 -0.44788445 1.0249307 1.0083102 + 8100 22.993409 -10.261331 0.44712215 1.0193906 1.0027701 + 8200 23.006207 -10.723372 1.2357091 1.0415512 1.0083102 + 8300 23.292233 -10.041314 2.143692 1.0581717 1.0027701 + 8400 21.658087 -10.089378 -0.25838681 1.0083102 1.0027701 + 8500 23.268456 -10.356603 0.089787317 1.0526316 1.0083102 + 8600 22.572019 -10.32801 0.12320758 1.0526316 1.0027701 + 8700 22.970465 -10.662456 0.57027398 1.0581717 1.0083102 + 8800 23.515552 -10.415842 1.0048598 1.0138504 1.0083102 + 8900 22.733961 -10.343495 0.19917627 1.0360111 1.0083102 + 9000 21.835458 -9.8740971 -1.0653164 1.0193906 1.0027701 + 9100 22.062821 -9.2303832 0.21428267 1.0415512 1.0083102 + 9200 23.020404 -10.321542 -0.48757848 1.0193906 1.0083102 + 9300 22.529362 -9.2916938 0.57056277 1.0415512 1.0027701 + 9400 23.301911 -10.538876 0.80637627 1.0138504 1.0027701 + 9500 21.984286 -9.4754676 -0.19048233 1.0193906 1.0027701 + 9600 23.710224 -10.274983 0.72268146 1.0249307 1.0027701 + 9700 22.317038 -9.3509008 -0.45727658 1.0360111 1.0027701 + 9800 23.41615 -10.026331 -0.45909049 1.0415512 1.0027701 + 9900 22.130299 -11.18528 -0.15359132 1.0747922 1.0027701 + 10000 23.273859 -11.337403 0.4036321 1.0304709 1.0083102 +Loop time of 1.18289 on 2 procs for 10000 steps with 361 atoms + +Performance: 3652073.393 tau/day, 8453.874 timesteps/s +97.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.25191 | 0.25685 | 0.2618 | 1.0 | 21.71 +Bond | 0.097655 | 0.098332 | 0.099009 | 0.2 | 8.31 +Neigh | 0.53258 | 0.53993 | 0.54728 | 1.0 | 45.65 +Comm | 0.13457 | 0.15372 | 0.17288 | 4.9 | 13.00 +Output | 0.0013587 | 0.0016007 | 0.0018427 | 0.6 | 0.14 +Modify | 0.074109 | 0.074314 | 0.074518 | 0.1 | 6.28 +Other | | 0.05813 | | | 4.91 + +Nlocal: 180.5 ave 182 max 179 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 172.5 ave 175 max 170 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 1421 ave 1488 max 1354 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 2842 +Ave neighs/atom = 7.87258 +Ave special neighs/atom = 5.61773 +Neighbor list builds = 4884 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.bond.fast.g++.4 b/examples/balance/log.27Nov18.balance.bond.fast.g++.4 new file mode 100644 index 0000000000..5cd072cf66 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.bond.fast.g++.4 @@ -0,0 +1,242 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) + 2 by 2 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + Time spent = 0.00067687 secs +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +# need to preserve 1-3, 1-4 pairwise interactions during hard collisions + +special_bonds lj/coul 0 1 1 + 0 = max # of 1-2 neighbors + 1 = max # of special neighbors +create_bonds many all all 1 1.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Added 1014 bonds, new total = 1014 + 6 = max # of 1-2 neighbors + 6 = max # of special neighbors + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +comm_modify cutoff 10.0 # because bonds stretch a long ways +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 10 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.122 | 5.141 | 5.174 Mbytes +Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -2.2032569 3.1039469 3.2354571 1.0526316 + 100 27.623422 -6.228166 2.6542136 1.2631579 1.0083102 + 200 33.35302 -15.746749 3.2018248 1.2963989 1.0193906 + 300 39.17734 -24.1557 4.9116986 1.2963989 1.0193906 + 400 41.660701 -27.615203 8.6214679 1.3518006 1.0083102 + 500 37.154928 -24.096946 3.2656177 1.3296399 1.0304709 + 600 35.059873 -21.524223 2.3729526 1.3296399 1.0083102 + 700 36.735117 -22.012675 3.266197 1.3296399 1.0083102 + 800 39.218223 -25.076176 4.7162461 1.4182825 1.0193906 + 900 38.003628 -24.598176 3.4651756 1.4958449 1.0083102 + 1000 37.599298 -25.117714 4.6714491 1.2963989 1.0193906 + 1100 35.587211 -24.476201 4.8766816 1.2077562 1.0083102 + 1200 33.05745 -21.457847 4.7304313 1.2188366 1.0193906 + 1300 35.505899 -20.103017 7.0543469 1.1523546 1.0193906 + 1400 32.687958 -18.411286 2.8022421 1.1523546 1.0083102 + 1500 30.681103 -13.979491 1.5780815 1.1523546 1.0083102 + 1600 28.134276 -12.408217 1.4370834 1.2188366 1.0193906 + 1700 29.150676 -12.486223 1.7118526 1.1745152 1.0083102 + 1800 29.456937 -11.386522 2.0484739 1.1966759 1.0193906 + 1900 28.029998 -11.168436 0.38519481 1.1080332 1.0193906 + 2000 29.476997 -12.337678 1.8878345 1.1523546 1.0083102 + 2100 30.113294 -12.201714 2.8003366 1.1634349 1.0193906 + 2200 31.599067 -13.710787 2.5654923 1.2188366 1.0083102 + 2300 31.333799 -12.269386 1.9573739 1.1412742 1.0193906 + 2400 28.587094 -10.98229 2.090581 1.1745152 1.0083102 + 2500 28.012332 -11.416553 2.3293146 1.1855956 1.0083102 + 2600 28.703189 -13.33369 2.7247345 1.1080332 1.0083102 + 2700 26.933934 -13.546384 0.71447362 1.0415512 1.0304709 + 2800 24.556936 -12.231427 0.012081842 1.0526316 1.0193906 + 2900 24.362943 -10.921093 -0.6063159 1.0858726 1.0193906 + 3000 24.583358 -10.025143 0.35975315 1.0637119 1.0083102 + 3100 26.119046 -10.124317 0.75140102 1.0415512 1.0193906 + 3200 27.665317 -11.418452 0.39942176 1.1301939 1.0083102 + 3300 27.771434 -9.9777413 0.94693011 1.1080332 1.0083102 + 3400 25.692188 -9.9016885 2.2582772 1.0415512 1.0083102 + 3500 27.009276 -10.504438 0.98279258 1.1301939 1.0083102 + 3600 26.082843 -9.4359595 -0.030819747 1.1301939 1.0083102 + 3700 23.956851 -8.4601884 -0.45748969 1.0858726 1.0304709 + 3800 24.92141 -8.3315871 -0.19512647 1.0969529 1.0083102 + 3900 26.048044 -9.6299934 0.40522014 1.0858726 1.0083102 + 4000 26.558961 -10.032084 0.56213613 1.1745152 1.0083102 + 4100 26.949686 -10.133598 1.0140825 1.0747922 1.0083102 + 4200 25.868196 -9.3971859 1.2758465 1.0969529 1.0083102 + 4300 24.563369 -9.5992996 0.17389949 1.1191136 1.0193906 + 4400 24.032818 -10.002668 0.10233743 1.0969529 1.0083102 + 4500 25.281577 -9.948799 0.7590423 1.1523546 1.0083102 + 4600 25.010901 -10.195479 -0.24424931 1.0747922 1.0193906 + 4700 25.062368 -9.2973021 1.1755931 1.0858726 1.0193906 + 4800 25.70912 -8.890895 1.0780397 1.1080332 1.0193906 + 4900 26.027757 -10.205469 1.0644859 1.1080332 1.0083102 + 5000 25.845739 -9.8511049 0.49059257 1.1301939 1.0193906 + 5100 25.614064 -9.0396911 0.40825814 1.0526316 1.0304709 + 5200 25.548135 -9.000613 0.81571441 1.1080332 1.0083102 + 5300 26.592601 -9.2385129 1.4983434 1.0637119 1.0193906 + 5400 26.230779 -9.8226036 1.0072462 1.0858726 1.0083102 + 5500 26.809887 -9.9569954 1.4074968 1.0415512 1.0083102 + 5600 25.722206 -10.240487 -0.5216434 1.0747922 1.0193906 + 5700 24.973866 -9.0820997 0.92104357 1.0193906 1.0083102 + 5800 24.257134 -9.5439897 -0.75290789 1.0858726 1.0083102 + 5900 25.524917 -8.9920216 1.2049479 1.1191136 1.0083102 + 6000 24.816532 -9.5865764 -0.66634446 1.0637119 1.0193906 + 6100 27.034385 -9.4017037 1.0769494 1.0969529 1.0083102 + 6200 24.19144 -8.2292864 0.97913204 1.0415512 1.0193906 + 6300 26.112877 -9.1531212 0.77578963 1.0526316 1.0193906 + 6400 25.820541 -9.9662231 -0.092724413 1.0969529 1.0193906 + 6500 26.181404 -9.5875764 -0.30106405 1.1634349 1.0083102 + 6600 27.770851 -8.8366116 0.94545206 1.0304709 1.0193906 + 6700 26.065489 -9.8223382 0.24640067 1.0526316 1.0193906 + 6800 27.468165 -10.160923 2.7263738 1.0747922 1.0304709 + 6900 27.317955 -10.356911 1.131609 1.0526316 1.0304709 + 7000 26.343789 -9.9153453 1.0385354 1.0858726 1.0193906 + 7100 24.366577 -8.9243936 0.37685043 1.0526316 1.0193906 + 7200 25.570042 -8.9195237 0.44206575 1.0637119 1.0193906 + 7300 24.635046 -8.4524117 -0.20581694 1.0193906 1.0193906 + 7400 27.161863 -7.9885934 1.1323072 1.0858726 1.0193906 + 7500 26.8044 -9.5703931 0.69476535 1.0858726 1.0193906 + 7600 27.381006 -10.702178 -0.20230101 1.0526316 1.0083102 + 7700 26.507406 -9.828117 0.50115907 1.0415512 1.0193906 + 7800 25.945271 -8.9912842 0.89121191 1.0747922 1.0083102 + 7900 24.498681 -7.7193231 -0.63874494 1.0858726 1.0083102 + 8000 24.517408 -7.6046107 -0.91642337 1.0415512 1.0083102 + 8100 26.388387 -8.1883906 0.093136981 1.1080332 1.0193906 + 8200 26.261054 -8.7223732 -0.086859057 1.0747922 1.0083102 + 8300 26.287026 -9.2583895 0.79506804 1.0858726 1.0083102 + 8400 24.691375 -9.0701909 -0.40058151 1.0637119 1.0193906 + 8500 25.390612 -7.9499801 0.59874113 1.1412742 1.0193906 + 8600 26.84383 -8.5520984 0.37618599 1.0637119 1.0083102 + 8700 25.685137 -7.688836 0.035978149 1.0415512 1.0193906 + 8800 26.614591 -9.0444146 0.20671465 1.0193906 1.0083102 + 8900 25.782718 -8.2594705 0.54378816 1.0747922 1.0304709 + 9000 26.026886 -8.6777252 0.25418163 1.1191136 1.0083102 + 9100 27.246916 -9.0307861 1.211131 1.0526316 1.0193906 + 9200 27.282948 -9.180029 -0.0056269613 1.0747922 1.0083102 + 9300 27.029692 -8.7791461 0.35971649 1.0304709 1.0083102 + 9400 26.549013 -7.5083174 0.77607249 1.0969529 1.0193906 + 9500 25.533731 -9.2763668 0.28360762 1.0969529 1.0083102 + 9600 27.997538 -9.2766769 1.6968428 1.0637119 1.0083102 + 9700 26.977436 -9.21372 1.8007256 1.0637119 1.0083102 + 9800 25.547091 -9.1024445 -0.29158273 1.0969529 1.0193906 + 9900 26.378841 -8.7645665 1.0385835 1.1080332 1.0083102 + 10000 26.699368 -8.5450739 0.19591452 1.0526316 1.0193906 +Loop time of 0.916576 on 4 procs for 10000 steps with 361 atoms + +Performance: 4713193.307 tau/day, 10910.170 timesteps/s +92.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.10915 | 0.12374 | 0.14167 | 3.5 | 13.50 +Bond | 0.047075 | 0.049849 | 0.054161 | 1.2 | 5.44 +Neigh | 0.31176 | 0.3246 | 0.3384 | 1.7 | 35.41 +Comm | 0.24271 | 0.26717 | 0.30549 | 4.9 | 29.15 +Output | 0.0017068 | 0.0021075 | 0.0031145 | 1.3 | 0.23 +Modify | 0.064639 | 0.065705 | 0.067641 | 0.5 | 7.17 +Other | | 0.08341 | | | 9.10 + +Nlocal: 90.25 ave 92 max 89 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +Nghost: 248.25 ave 264 max 230 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 569.5 ave 657 max 519 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 2278 +Ave neighs/atom = 6.31025 +Ave special neighs/atom = 5.61773 +Neighbor list builds = 4964 +Dangerous builds = 14 +Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.bond.slow.g++.2 b/examples/balance/log.27Nov18.balance.bond.slow.g++.2 new file mode 100644 index 0000000000..5e23613f1f --- /dev/null +++ b/examples/balance/log.27Nov18.balance.bond.slow.g++.2 @@ -0,0 +1,541 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 + +# careful not to slam into wall too hard + +variable v index 0.3 +variable w index 0.08 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + Time spent = 0.000762701 secs +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 0.3 $w 0 sum yes +velocity all set 0.3 0.08 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +create_bonds many all all 1 1.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Added 1014 bonds, new total = 1014 + 6 = max # of 1-2 neighbors + 30 = max # of 1-3 neighbors + 180 = max # of 1-4 neighbors + 36 = max # of special neighbors + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 200 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 + +run 40000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.079 | 7.108 | 7.137 Mbytes +Step Temp E_pair Press f_10[3] f_10 + 0 0.57437856 0 0.26099453 2 1.0193906 + 100 0.29756515 0 0.10149401 1.0027701 1.0027701 + 200 0.35394813 0 0.075159099 1.0027701 1.0083102 + 300 0.39245849 0 0.033002384 1.0027701 1.0027701 + 400 0.34078347 0 -0.020825841 1.0083102 1.0027701 + 500 0.35201095 0 -0.062637506 1.0027701 1.0027701 + 600 0.34014717 0 -0.11122965 1.0249307 1.0027701 + 700 0.3323524 0 -0.11598015 1.0083102 1.0027701 + 800 0.35116047 0 -0.096162395 1.0138504 1.0027701 + 900 0.35695352 0 -0.01385176 1.0249307 1.0027701 + 1000 0.36986539 0 0.056772858 1.0027701 1.0027701 + 1100 0.34584644 0 0.084941323 1.0138504 1.0027701 + 1200 0.31921435 0 0.10545078 1.0138504 1.0027701 + 1300 0.32952819 0 0.124902 1.0027701 1.0027701 + 1400 0.34497365 0 0.12662081 1.0138504 1.0027701 + 1500 0.33429243 0 0.096230972 1.0193906 1.0027701 + 1600 0.33765387 0 0.025800542 1.0193906 1.0027701 + 1700 0.35134464 0 -0.04422593 1.0083102 1.0027701 + 1800 0.35003859 0 -0.096745576 1.0083102 1.0083102 + 1900 0.33839618 0 -0.095465943 1.0027701 1.0027701 + 2000 0.33732078 0 -0.094652802 1.0027701 1.0027701 + 2100 0.34552238 0 -0.076729261 1.0083102 1.0027701 + 2200 0.34893142 0 -0.036853228 1.0083102 1.0083102 + 2300 0.35379341 0 0.021124847 1.0193906 1.0027701 + 2400 0.34829744 0 0.09230184 1.0027701 1.0027701 + 2500 0.33038141 0 0.1399855 1.0027701 1.0083102 + 2600 0.30983019 0 0.12754742 1.0083102 1.0027701 + 2700 0.32992561 0 0.10485138 1.0193906 1.0027701 + 2800 0.34604747 0 0.066174138 1.0083102 1.0027701 + 2900 0.3444791 0 0.036590652 1.0083102 1.0083102 + 3000 0.34721342 0 -0.023793368 1.0138504 1.0027701 + 3100 0.33404314 0 -0.08374223 1.0083102 1.0027701 + 3200 0.33019355 0 -0.12715599 1.0083102 1.0027701 + 3300 0.33515177 0 -0.12217394 1.0083102 1.0027701 + 3400 0.33628481 0 -0.070877624 1.0083102 1.0027701 + 3500 0.34257038 0 -0.021612062 1.0027701 1.0027701 + 3600 0.32838009 0 0.030131228 1.0027701 1.0027701 + 3700 0.34462142 0 0.074586378 1.0138504 1.0027701 + 3800 0.30891825 0 0.10605673 1.0138504 1.0027701 + 3900 0.33847951 0 0.13956139 1.0027701 1.0027701 + 4000 0.32952079 0 0.12688129 1.0027701 1.0027701 + 4100 0.32646772 0 0.081089042 1.0083102 1.0027701 + 4200 0.35399503 0 0.013422873 1.0027701 1.0027701 + 4300 0.33154914 0 -0.050919508 1.0027701 1.0083102 + 4400 0.34113556 0 -0.083171 1.0249307 1.0027701 + 4500 0.32651708 0 -0.1063133 1.0193906 1.0027701 + 4600 0.34359609 0 -0.1076395 1.0027701 1.0027701 + 4700 0.34973537 0 -0.088231606 1.0138504 1.0027701 + 4800 0.35198515 0 -0.020901044 1.0027701 1.0027701 + 4900 0.35187284 0 0.043645941 1.0193906 1.0027701 + 5000 0.34887336 0 0.095698609 1.0027701 1.0027701 + 5100 0.30308163 0 0.11649328 1.0138504 1.0027701 + 5200 0.32401285 0 0.12072411 1.0083102 1.0083102 + 5300 0.33025072 0 0.10933161 1.0138504 1.0027701 + 5400 0.33288012 0 0.078356448 1.0083102 1.0027701 + 5500 0.35142492 0 0.036958063 1.0027701 1.0027701 + 5600 0.35125368 0 -0.041371343 1.0193906 1.0027701 + 5700 0.34547744 0 -0.096450846 1.0193906 1.0027701 + 5800 0.30939887 0 -0.12356656 1.0027701 1.0083102 + 5900 0.32315628 0 -0.11338676 1.0083102 1.0027701 + 6000 0.34117485 0 -0.066198961 1.0027701 1.0027701 + 6100 0.35298043 0 -0.016172816 1.0138504 1.0027701 + 6200 0.35130653 0 0.027660468 1.0027701 1.0027701 + 6300 0.35398766 0 0.087221238 1.0027701 1.0027701 + 6400 0.30963379 0 0.11990957 1.0138504 1.0027701 + 6500 0.3174541 0 0.14103528 1.0083102 1.0083102 + 6600 0.31989791 0 0.11575506 1.0083102 1.0083102 + 6700 0.33811477 0 0.060747353 1.0083102 1.0083102 + 6800 0.3424043 0 0.010357152 1.0083102 1.0027701 + 6900 0.34804319 0 -0.042621786 1.0083102 1.0027701 + 7000 0.35357865 0 -0.067248959 1.0027701 1.0027701 + 7100 0.33556885 0 -0.10983726 1.0083102 1.0027701 + 7200 0.33531101 0 -0.112179 1.0027701 1.0027701 + 7300 0.35742607 0 -0.078405267 1.0083102 1.0027701 + 7400 0.34577559 0 -0.01985432 1.0027701 1.0083102 + 7500 0.3498641 0 0.052289439 1.0027701 1.0027701 + 7600 0.33773715 0 0.092939035 1.0027701 1.0027701 + 7700 0.33093497 0 0.11924405 1.0083102 1.0027701 + 7800 0.31435814 0 0.12701724 1.0027701 1.0027701 + 7900 0.33132217 0 0.10793075 1.0083102 1.0027701 + 8000 0.33451798 0 0.077993125 1.0027701 1.0027701 + 8100 0.35188371 0 0.019929977 1.0083102 1.0083102 + 8200 0.33645742 0 -0.039302079 1.0027701 1.0027701 + 8300 0.3415632 0 -0.098067982 1.0138504 1.0027701 + 8400 0.30619282 0 -0.12952879 1.0138504 1.0027701 + 8500 0.34446484 0 -0.098084709 1.0027701 1.0027701 + 8600 0.33761673 0 -0.07069818 1.0027701 1.0027701 + 8700 0.34495452 0 -0.022458056 1.0083102 1.0027701 + 8800 0.33502983 0 0.027742411 1.0027701 1.0027701 + 8900 0.35418591 0 0.092390134 1.0083102 1.0083102 + 9000 0.31648387 0 0.12467398 1.0083102 1.0027701 + 9100 0.33994825 0 0.14460327 1.0138504 1.0027701 + 9200 0.33822571 0 0.11273284 1.0027701 1.0027701 + 9300 0.33260773 0 0.060063671 1.0083102 1.0083102 + 9400 0.36140305 0 0.021427642 1.0138504 1.0027701 + 9500 0.34273562 0 -0.034064202 1.0083102 1.0027701 + 9600 0.33867054 0 -0.089076906 1.0138504 1.0027701 + 9700 0.32088235 0 -0.12027075 1.0138504 1.0083102 + 9800 0.3320823 0 -0.11602794 1.0138504 1.0027701 + 9900 0.33916442 0 -0.080281044 1.0083102 1.0027701 + 10000 0.34852268 0 -0.01000914 1.0083102 1.0083102 + 10100 0.32955942 0 0.04258493 1.0027701 1.0083102 + 10200 0.34487898 0 0.086971308 1.0083102 1.0027701 + 10300 0.32325593 0 0.11558149 1.0138504 1.0027701 + 10400 0.30927871 0 0.12239437 1.0027701 1.0027701 + 10500 0.33176799 0 0.12285937 1.0138504 1.0083102 + 10600 0.35120027 0 0.084897432 1.0027701 1.0027701 + 10700 0.33129697 0 0.0053089279 1.0138504 1.0027701 + 10800 0.36028769 0 -0.04280715 1.0083102 1.0027701 + 10900 0.35552287 0 -0.084955999 1.0138504 1.0027701 + 11000 0.3406024 0 -0.096554577 1.0027701 1.0027701 + 11100 0.33041202 0 -0.10703492 1.0138504 1.0027701 + 11200 0.32442686 0 -0.084328121 1.0193906 1.0027701 + 11300 0.35952468 0 -0.020191965 1.0083102 1.0027701 + 11400 0.34610624 0 0.03440148 1.0138504 1.0027701 + 11500 0.3415612 0 0.1041929 1.0027701 1.0027701 + 11600 0.34040042 0 0.13215705 1.0138504 1.0027701 + 11700 0.33555094 0 0.12738686 1.0193906 1.0027701 + 11800 0.3458647 0 0.10963398 1.0027701 1.0083102 + 11900 0.33836678 0 0.067253864 1.0138504 1.0027701 + 12000 0.34853314 0 0.03201448 1.0027701 1.0027701 + 12100 0.34600048 0 -0.034833402 1.0083102 1.0027701 + 12200 0.33145631 0 -0.09865675 1.0083102 1.0027701 + 12300 0.32848884 0 -0.1248489 1.0083102 1.0027701 + 12400 0.3321344 0 -0.11266575 1.0027701 1.0083102 + 12500 0.32622305 0 -0.061634993 1.0083102 1.0083102 + 12600 0.36213537 0 -0.0090593315 1.0138504 1.0027701 + 12700 0.34673866 0 0.036734645 1.0138504 1.0027701 + 12800 0.34606618 0 0.086267678 1.0138504 1.0027701 + 12900 0.34271431 0 0.12415522 1.0027701 1.0027701 + 13000 0.31993287 0 0.13879926 1.0027701 1.0083102 + 13100 0.3422918 0 0.11978905 1.0083102 1.0027701 + 13200 0.33055236 0 0.062620483 1.0083102 1.0027701 + 13300 0.34652207 0 0.0043833459 1.0138504 1.0027701 + 13400 0.33574661 0 -0.04691024 1.0027701 1.0027701 + 13500 0.33940837 0 -0.074241604 1.0027701 1.0083102 + 13600 0.32093414 0 -0.1078027 1.0138504 1.0083102 + 13700 0.34336597 0 -0.10544097 1.0027701 1.0027701 + 13800 0.35806461 0 -0.072531559 1.0027701 1.0027701 + 13900 0.35209713 0 -0.018851408 1.0083102 1.0083102 + 14000 0.35702629 0 0.061046366 1.0027701 1.0027701 + 14100 0.33234093 0 0.094086465 1.0027701 1.0027701 + 14200 0.3459466 0 0.12186656 1.0027701 1.0027701 + 14300 0.3327428 0 0.11396572 1.0027701 1.0027701 + 14400 0.32409443 0 0.10658903 1.0083102 1.0083102 + 14500 0.35022184 0 0.083558031 1.0083102 1.0083102 + 14600 0.34823843 0 0.024605569 1.0083102 1.0083102 + 14700 0.35298973 0 -0.040418888 1.0027701 1.0027701 + 14800 0.33679845 0 -0.10067728 1.0027701 1.0027701 + 14900 0.32790966 0 -0.10925568 1.0083102 1.0027701 + 15000 0.34208495 0 -0.09568004 1.0193906 1.0027701 + 15100 0.33647529 0 -0.055652929 1.0027701 1.0027701 + 15200 0.35328398 0 -0.020236536 1.0083102 1.0027701 + 15300 0.34252669 0 0.026434179 1.0083102 1.0027701 + 15400 0.34409435 0 0.094410599 1.0027701 1.0027701 + 15500 0.32288994 0 0.12034455 1.0083102 1.0027701 + 15600 0.32109689 0 0.13645185 1.0083102 1.0027701 + 15700 0.33681572 0 0.098607746 1.0083102 1.0027701 + 15800 0.33635195 0 0.05570715 1.0083102 1.0083102 + 15900 0.34289757 0 0.013849092 1.0083102 1.0027701 + 16000 0.34225547 0 -0.035597548 1.0193906 1.0027701 + 16100 0.33660991 0 -0.076931881 1.0027701 1.0027701 + 16200 0.32802152 0 -0.12765884 1.0083102 1.0027701 + 16300 0.3469374 0 -0.10785455 1.0083102 1.0083102 + 16400 0.34053641 0 -0.070259853 1.0027701 1.0027701 + 16500 0.34610591 0 -0.014315306 1.0083102 1.0027701 + 16600 0.35109001 0 0.041251169 1.0138504 1.0027701 + 16700 0.34336905 0 0.077996627 1.0193906 1.0027701 + 16800 0.33277414 0 0.11053634 1.0027701 1.0083102 + 16900 0.32183338 0 0.11680626 1.0027701 1.0027701 + 17000 0.34044352 0 0.10806555 1.0138504 1.0027701 + 17100 0.32967873 0 0.067759786 1.0138504 1.0027701 + 17200 0.36172278 0 -0.0048631904 1.0083102 1.0083102 + 17300 0.35619435 0 -0.04215545 1.0027701 1.0027701 + 17400 0.34540936 0 -0.093994174 1.0083102 1.0027701 + 17500 0.33193585 0 -0.098831315 1.0083102 1.0027701 + 17600 0.3544756 0 -0.085660403 1.0083102 1.0083102 + 17700 0.34505209 0 -0.069640515 1.0193906 1.0083102 + 17800 0.36291124 0 -0.0063088133 1.0027701 1.0027701 + 17900 0.34255705 0 0.046794555 1.0027701 1.0027701 + 18000 0.34163238 0 0.11767705 1.0138504 1.0027701 + 18100 0.3466445 0 0.1351712 1.0193906 1.0083102 + 18200 0.33037668 0 0.12703659 1.0027701 1.0027701 + 18300 0.33677404 0 0.10956306 1.0027701 1.0083102 + 18400 0.34978954 0 0.087193072 1.0027701 1.0027701 + 18500 0.33354363 0 0.051095814 1.0138504 1.0027701 + 18600 0.34651729 0 0.0056245561 1.0027701 1.0027701 + 18700 0.32622232 0 -0.047319269 1.0027701 1.0083102 + 18800 0.32978847 0 -0.054929416 1.0138504 1.0027701 + 18900 0.34192451 0 -0.037252471 1.0027701 1.0027701 + 19000 0.34061294 0 -0.001167235 1.0083102 1.0027701 + 19100 0.34194478 0 0.016945224 1.0083102 1.0027701 + 19200 0.33321765 0 0.050665354 1.0193906 1.0027701 + 19300 0.33197783 0 0.080470585 1.0138504 1.0027701 + 19400 0.33284715 0 0.12423599 1.0193906 1.0027701 + 19500 0.33867856 0 0.12689524 1.0027701 1.0027701 + 19600 0.36092786 0 0.11417704 1.0027701 1.0027701 + 19700 0.34270183 0 0.069038291 1.0249307 1.0083102 + 19800 0.34880695 0 0.042483681 1.0083102 1.0083102 + 19900 0.33903644 0 0.034788638 1.0027701 1.0027701 + 20000 0.32590125 0 0.011383785 1.0083102 1.0083102 + 20100 0.30358859 0 0.0030743554 1.0138504 1.0027701 + 20200 0.31830224 0 0.017637826 1.0027701 1.0027701 + 20300 0.34195438 0 0.072811099 1.0193906 1.0083102 + 20400 0.31249563 0 0.10063541 1.0083102 1.0027701 + 20500 0.31544938 0 0.1405794 1.0027701 1.0027701 + 20600 0.30071644 0 0.12763486 1.0027701 1.0027701 + 20700 0.2890265 0 0.1136651 1.0083102 1.0027701 + 20800 0.28962296 0 0.094481978 1.0083102 1.0027701 + 20900 0.29447212 0 0.0967165 1.0138504 1.0083102 + 21000 0.31159961 0 0.067307231 1.0027701 1.0027701 + 21100 0.30490648 0 0.017689358 1.0027701 1.0083102 + 21200 0.30687262 0 -0.016055512 1.0027701 1.0083102 + 21300 0.30083286 0 -0.0014988997 1.0083102 1.0027701 + 21400 0.32070426 0 0.015960302 1.0083102 1.0083102 + 21500 0.31439311 0 0.038170385 1.0083102 1.0083102 + 21600 0.32617832 0 0.043263788 1.0083102 1.0027701 + 21700 0.35151793 0 0.066302727 1.0083102 1.0083102 + 21800 0.35912885 0 0.070099103 1.0027701 1.0027701 + 21900 0.32451958 0 0.068935768 1.0083102 1.0027701 + 22000 0.35219298 0 0.067161227 1.0138504 1.0083102 + 22100 0.34857705 0 0.032731746 1.0138504 1.0027701 + 22200 0.34750227 0 0.0056917695 1.0027701 1.0027701 + 22300 0.34766017 0 -0.0027090483 1.0027701 1.0083102 + 22400 0.33426062 0 -0.023196063 1.0027701 1.0083102 + 22500 0.34174625 0 -0.025019717 1.0083102 1.0027701 + 22600 0.3356145 0 -0.029707418 1.0138504 1.0027701 + 22700 0.3362653 0 -0.035815733 1.0083102 1.0027701 + 22800 0.33973405 0 -0.0024705835 1.0193906 1.0027701 + 22900 0.33813085 0 0.0077527467 1.0027701 1.0027701 + 23000 0.33339981 0 0.028340744 1.0027701 1.0027701 + 23100 0.34079832 0 0.018521302 1.0249307 1.0027701 + 23200 0.33074548 0 0.032378405 1.0138504 1.0083102 + 23300 0.32965664 0 0.035989589 1.0138504 1.0027701 + 23400 0.30927749 0 0.024581106 1.0083102 1.0027701 + 23500 0.32890632 0 0.01092479 1.0138504 1.0083102 + 23600 0.34137438 0 0.0094839745 1.0083102 1.0027701 + 23700 0.34512638 0 -0.012392771 1.0138504 1.0027701 + 23800 0.31781354 0 -0.012908449 1.0027701 1.0027701 + 23900 0.32405513 0 -0.015018071 1.0027701 1.0027701 + 24000 0.33549728 0 -0.012812915 1.0083102 1.0083102 + 24100 0.31368736 0 -0.020818372 1.0027701 1.0027701 + 24200 0.33533836 0 0.0056121057 1.0027701 1.0027701 + 24300 0.32530627 0 0.018183931 1.0249307 1.0027701 + 24400 0.31930662 0 0.027446878 1.0027701 1.0083102 + 24500 0.33540302 0 0.040307455 1.0193906 1.0027701 + 24600 0.34020431 0 0.027403921 1.0027701 1.0027701 + 24700 0.3291814 0 0.01204865 1.0083102 1.0027701 + 24800 0.31552604 0 0.019654111 1.0083102 1.0083102 + 24900 0.34727253 0 0.01670543 1.0027701 1.0027701 + 25000 0.35120105 0 0.0038617562 1.0083102 1.0027701 + 25100 0.32706871 0 -0.021196623 1.0193906 1.0083102 + 25200 0.32915282 0 -0.017146508 1.0083102 1.0027701 + 25300 0.32577518 0 -0.01312495 1.0083102 1.0027701 + 25400 0.33286855 0 0.0014726193 1.0138504 1.0027701 + 25500 0.33002601 0 0.0080974022 1.0083102 1.0027701 + 25600 0.34127655 0 0.014296091 1.0138504 1.0083102 + 25700 0.34048065 0 0.022513032 1.0083102 1.0027701 + 25800 0.33029079 0 0.038733531 1.0138504 1.0027701 + 25900 0.33031324 0 0.026156982 1.0027701 1.0027701 + 26000 0.32967371 0 0.028727383 1.0027701 1.0083102 + 26100 0.33775718 0 0.015607478 1.0027701 1.0083102 + 26200 0.35097144 0 0.012291703 1.0027701 1.0027701 + 26300 0.34303792 0 0.00094823191 1.0027701 1.0083102 + 26400 0.33632665 0 -0.0026904889 1.0027701 1.0083102 + 26500 0.33580127 0 -0.0074168555 1.0138504 1.0083102 + 26600 0.33063188 0 -0.020378601 1.0027701 1.0083102 + 26700 0.33581846 0 -0.00084397268 1.0027701 1.0027701 + 26800 0.32998532 0 0.015932208 1.0083102 1.0083102 + 26900 0.33825444 0 0.010428603 1.0193906 1.0027701 + 27000 0.32081518 0 0.019818223 1.0083102 1.0083102 + 27100 0.31448098 0 0.020093416 1.0027701 1.0027701 + 27200 0.32643684 0 0.021934917 1.0083102 1.0027701 + 27300 0.33289466 0 0.023713072 1.0138504 1.0083102 + 27400 0.32310744 0 0.024110945 1.0193906 1.0027701 + 27500 0.33115619 0 0.0025776713 1.0193906 1.0027701 + 27600 0.33295887 0 -0.010710764 1.0083102 1.0083102 + 27700 0.32968876 0 -0.0064595905 1.0083102 1.0027701 + 27800 0.34064581 0 -0.0086519116 1.0027701 1.0027701 + 27900 0.33559187 0 -0.0055753593 1.0249307 1.0027701 + 28000 0.32300727 0 -0.0004153384 1.0138504 1.0027701 + 28100 0.32147461 0 -0.0058543412 1.0083102 1.0083102 + 28200 0.35532383 0 0.013646951 1.0083102 1.0083102 + 28300 0.31507942 0 0.026532255 1.0083102 1.0027701 + 28400 0.32711006 0 0.033214981 1.0083102 1.0027701 + 28500 0.34472462 0 0.028050837 1.0027701 1.0027701 + 28600 0.33708059 0 0.019115676 1.0027701 1.0027701 + 28700 0.34478087 0 0.023743689 1.0193906 1.0027701 + 28800 0.34546686 0 0.0081772997 1.0083102 1.0027701 + 28900 0.34004886 0 0.017771865 1.0138504 1.0027701 + 29000 0.33604232 0 -0.010505671 1.0027701 1.0027701 + 29100 0.33541374 0 -0.016273261 1.0027701 1.0027701 + 29200 0.34347489 0 -0.010002306 1.0083102 1.0027701 + 29300 0.34083904 0 0.0089701784 1.0083102 1.0027701 + 29400 0.34846892 0 0.020765104 1.0027701 1.0027701 + 29500 0.3416255 0 0.022650856 1.0083102 1.0027701 + 29600 0.33725496 0 0.020693083 1.0027701 1.0027701 + 29700 0.34480638 0 0.024317128 1.0138504 1.0027701 + 29800 0.31459471 0 0.023097895 1.0027701 1.0027701 + 29900 0.33014448 0 0.03114046 1.0138504 1.0027701 + 30000 0.33741498 0 0.015624314 1.0083102 1.0027701 + 30100 0.32598657 0 -0.0018860541 1.0138504 1.0027701 + 30200 0.34855815 0 0.0017983372 1.0027701 1.0027701 + 30300 0.33375921 0 0.0010991235 1.0083102 1.0083102 + 30400 0.35008944 0 -0.0027316177 1.0027701 1.0027701 + 30500 0.33279729 0 -0.0035788551 1.0027701 1.0027701 + 30600 0.33868746 0 -0.0016249482 1.0027701 1.0027701 + 30700 0.33597034 0 -0.0014524001 1.0193906 1.0083102 + 30800 0.3227257 0 0.016353457 1.0193906 1.0027701 + 30900 0.32676516 0 0.027396654 1.0027701 1.0027701 + 31000 0.34083982 0 0.031606413 1.0138504 1.0083102 + 31100 0.32165238 0 0.013583368 1.0027701 1.0027701 + 31200 0.3428492 0 0.020486611 1.0138504 1.0027701 + 31300 0.32372541 0 0.01215566 1.0027701 1.0027701 + 31400 0.32734692 0 0.016229397 1.0083102 1.0027701 + 31500 0.33089262 0 0.0060426618 1.0027701 1.0027701 + 31600 0.34273493 0 -0.013456537 1.0083102 1.0083102 + 31700 0.32723905 0 -0.019243766 1.0027701 1.0027701 + 31800 0.33636488 0 0.0027814902 1.0027701 1.0083102 + 31900 0.32834805 0 0.00706877 1.0083102 1.0027701 + 32000 0.33995148 0 0.0018383309 1.0083102 1.0083102 + 32100 0.33412282 0 0.0076455933 1.0027701 1.0083102 + 32200 0.34334884 0 0.023586129 1.0083102 1.0027701 + 32300 0.32778925 0 0.020564321 1.0193906 1.0083102 + 32400 0.33163443 0 0.038878463 1.0083102 1.0027701 + 32500 0.32290345 0 0.022247461 1.0027701 1.0027701 + 32600 0.34113954 0 0.010966365 1.0138504 1.0027701 + 32700 0.33390633 0 0.0037777555 1.0083102 1.0083102 + 32800 0.34385341 0 0.010556575 1.0138504 1.0083102 + 32900 0.32137047 0 0.00022027143 1.0138504 1.0027701 + 33000 0.32079172 0 -0.017261272 1.0083102 1.0027701 + 33100 0.33570882 0 -0.0051942206 1.0027701 1.0027701 + 33200 0.34320894 0 -0.011515281 1.0138504 1.0027701 + 33300 0.32794746 0 -0.0018153673 1.0027701 1.0027701 + 33400 0.33060982 0 0.027118146 1.0027701 1.0027701 + 33500 0.33641809 0 0.02143035 1.0083102 1.0027701 + 33600 0.33643061 0 0.020833068 1.0083102 1.0027701 + 33700 0.3485949 0 0.030918751 1.0083102 1.0027701 + 33800 0.3283985 0 0.01947613 1.0193906 1.0027701 + 33900 0.31959761 0 0.021128147 1.0027701 1.0027701 + 34000 0.33897984 0 0.015270986 1.0027701 1.0083102 + 34100 0.32392267 0 0.0020130852 1.0083102 1.0027701 + 34200 0.33084514 0 -0.024316708 1.0027701 1.0027701 + 34300 0.3342259 0 -0.0059047764 1.0138504 1.0027701 + 34400 0.33385098 0 0.0063818721 1.0027701 1.0027701 + 34500 0.33255603 0 -0.01023837 1.0027701 1.0083102 + 34600 0.34766173 0 0.0056703013 1.0083102 1.0027701 + 34700 0.339822 0 0.0061648559 1.0083102 1.0027701 + 34800 0.33902329 0 0.030037037 1.0027701 1.0083102 + 34900 0.3216153 0 0.027996689 1.0027701 1.0027701 + 35000 0.32701056 0 0.024778517 1.0083102 1.0027701 + 35100 0.3124942 0 0.011316548 1.0027701 1.0027701 + 35200 0.34486416 0 0.011670127 1.0027701 1.0027701 + 35300 0.33275353 0 0.020491246 1.0027701 1.0027701 + 35400 0.33618763 0 0.014678874 1.0083102 1.0027701 + 35500 0.32352282 0 -0.018568683 1.0027701 1.0027701 + 35600 0.32617903 0 -0.012796912 1.0083102 1.0027701 + 35700 0.32378048 0 -0.021318585 1.0027701 1.0083102 + 35800 0.3371086 0 -0.0023678632 1.0027701 1.0083102 + 35900 0.33818476 0 0.011197742 1.0083102 1.0027701 + 36000 0.35142144 0 0.022520935 1.0083102 1.0027701 + 36100 0.35147297 0 0.020277852 1.0083102 1.0027701 + 36200 0.33489465 0 0.014564878 1.0193906 1.0027701 + 36300 0.33841515 0 0.036439962 1.0027701 1.0027701 + 36400 0.32301096 0 0.019966746 1.0027701 1.0027701 + 36500 0.35612028 0 0.036509556 1.0027701 1.0027701 + 36600 0.33841597 0 -0.0042180605 1.0083102 1.0083102 + 36700 0.34477654 0 -0.0052770853 1.0193906 1.0083102 + 36800 0.33804317 0 -0.013751733 1.0027701 1.0027701 + 36900 0.35003816 0 -0.0021184393 1.0027701 1.0027701 + 37000 0.32965041 0 -0.020900951 1.0083102 1.0027701 + 37100 0.34653095 0 -0.013667977 1.0027701 1.0027701 + 37200 0.35019871 0 -0.0071740923 1.0027701 1.0027701 + 37300 0.34859745 0 0.02006041 1.0138504 1.0027701 + 37400 0.35739859 0 0.020892822 1.0083102 1.0027701 + 37500 0.34128859 0 0.041072111 1.0083102 1.0083102 + 37600 0.33781905 0 0.023376738 1.0083102 1.0083102 + 37700 0.32961874 0 0.030953741 1.0138504 1.0027701 + 37800 0.343987 0 0.029579795 1.0083102 1.0027701 + 37900 0.33610448 0 0.036836828 1.0138504 1.0027701 + 38000 0.32757228 0 0.020902031 1.0027701 1.0027701 + 38100 0.32735808 0 0.019544751 1.0138504 1.0083102 + 38200 0.35646953 0 0.044607528 1.0027701 1.0083102 + 38300 0.32509773 0 0.03610738 1.0138504 1.0027701 + 38400 0.32111741 0 0.034474043 1.0083102 1.0083102 + 38500 0.30590608 0 0.053461212 1.0083102 1.0027701 + 38600 0.32322402 0 0.053453832 1.0138504 1.0083102 + 38700 0.33843057 0 0.076264534 1.0027701 1.0027701 + 38800 0.31350741 0 0.064733869 1.0083102 1.0027701 + 38900 0.31943061 0 0.067836769 1.0083102 1.0027701 + 39000 0.33775583 0 0.0788316 1.0083102 1.0083102 + 39100 0.34256036 0 0.075874935 1.0027701 1.0027701 + 39200 0.33128527 0 0.071610976 1.0193906 1.0027701 + 39300 0.34519653 0 0.046257301 1.0083102 1.0083102 + 39400 0.34351844 0 0.052422917 1.0027701 1.0027701 + 39500 0.35716037 0 0.048916058 1.0083102 1.0027701 + 39600 0.34000737 0 0.016149089 1.0083102 1.0027701 + 39700 0.34587892 0 0.021619621 1.0083102 1.0083102 + 39800 0.34878036 0 0.0092881327 1.0083102 1.0027701 + 39900 0.35225411 0 -0.011341599 1.0083102 1.0027701 + 40000 0.36309266 0 0.0050869295 1.0304709 1.0027701 +Loop time of 1.30389 on 2 procs for 40000 steps with 361 atoms + +Performance: 13252650.572 tau/day, 30677.432 timesteps/s +97.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.041365 | 0.041785 | 0.042204 | 0.2 | 3.20 +Bond | 0.35501 | 0.37082 | 0.38664 | 2.6 | 28.44 +Neigh | 0.30901 | 0.31013 | 0.31125 | 0.2 | 23.78 +Comm | 0.12939 | 0.15871 | 0.18803 | 7.4 | 12.17 +Output | 0.00489 | 0.005671 | 0.0064521 | 1.0 | 0.43 +Modify | 0.28208 | 0.28362 | 0.28516 | 0.3 | 21.75 +Other | | 0.1332 | | | 10.21 + +Nlocal: 180.5 ave 181 max 180 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 52.5 ave 53 max 52 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Ave special neighs/atom = 31.0249 +Neighbor list builds = 3079 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/balance/log.5Oct16.balance.bond.slow.g++.4 b/examples/balance/log.27Nov18.balance.bond.slow.g++.4 similarity index 85% rename from examples/balance/log.5Oct16.balance.bond.slow.g++.4 rename to examples/balance/log.27Nov18.balance.bond.slow.g++.4 index 7e50516242..c799657e53 100644 --- a/examples/balance/log.5Oct16.balance.bond.slow.g++.4 +++ b/examples/balance/log.27Nov18.balance.bond.slow.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d circle of particles inside a box with LJ walls variable b index 0 @@ -31,6 +32,7 @@ region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) region circle sphere 11 6.7735026918962581988 0.0 10 create_atoms 1 region circle Created 361 atoms + Time spent = 0.000665188 secs mass 1 1.0 velocity all create 0.5 87287 loop geom @@ -44,14 +46,24 @@ pair_coeff 1 1 10.0 1.0 2.5 bond_style harmonic bond_coeff 1 10.0 1.2 -create_bonds all all 1 1.0 1.5 +create_bonds many all all 1 1.0 1.5 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 42 29 1 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard Added 1014 bonds, new total = 1014 6 = max # of 1-2 neighbors 30 = max # of 1-3 neighbors @@ -84,106 +96,111 @@ thermo 100 run 40000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 42 29 1 -Memory usage per processor = 6.41878 Mbytes + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.02 | 7.048 | 7.096 Mbytes Step Temp E_pair Press f_10[3] f_10 0 0.57437856 0 0.26099453 3.2354571 1.0526316 100 0.29756515 0 0.10149401 1.0193906 1.0083102 - 200 0.35394813 0 0.075159099 1.0304709 1.0083102 - 300 0.39245849 0 0.033002384 1.0304709 1.0193906 + 200 0.35394813 0 0.075159099 1.0304709 1.0193906 + 300 0.39245849 0 0.033002384 1.0083102 1.0193906 400 0.34078347 0 -0.020825841 1.0304709 1.0083102 500 0.35201095 0 -0.062637506 1.0193906 1.0083102 600 0.34014717 0 -0.11122965 1.0415512 1.0083102 700 0.3323524 0 -0.11598015 1.0193906 1.0083102 - 800 0.35116047 0 -0.096162395 1.0083102 1.0193906 + 800 0.35116047 0 -0.096162395 1.0193906 1.0193906 900 0.35695352 0 -0.01385176 1.0526316 1.0193906 1000 0.36986539 0 0.056772858 1.0083102 1.0083102 - 1100 0.34584644 0 0.084941323 1.0193906 1.0083102 - 1200 0.31921435 0 0.10545078 1.0415512 1.0193906 - 1300 0.32952819 0 0.124902 1.0083102 1.0083102 + 1100 0.34584644 0 0.084941323 1.0304709 1.0083102 + 1200 0.31921435 0 0.10545078 1.0415512 1.0083102 + 1300 0.32952819 0 0.124902 1.0083102 1.0193906 1400 0.34497365 0 0.12662081 1.0193906 1.0083102 - 1500 0.33429243 0 0.096230972 1.0526316 1.0193906 + 1500 0.33429243 0 0.096230972 1.0193906 1.0193906 1600 0.33765387 0 0.025800542 1.0304709 1.0083102 1700 0.35134464 0 -0.04422593 1.0415512 1.0083102 - 1800 0.35003859 0 -0.096745576 1.0304709 1.0193906 + 1800 0.35003859 0 -0.096745576 1.0304709 1.0083102 1900 0.33839618 0 -0.095465943 1.0193906 1.0083102 2000 0.33732078 0 -0.094652802 1.0083102 1.0083102 2100 0.34552238 0 -0.076729261 1.0304709 1.0083102 - 2200 0.34893142 0 -0.036853228 1.0304709 1.0193906 - 2300 0.35379341 0 0.021124847 1.0304709 1.0304709 - 2400 0.34829744 0 0.09230184 1.0304709 1.0193906 + 2200 0.34893142 0 -0.036853228 1.0304709 1.0083102 + 2300 0.35379341 0 0.021124847 1.0304709 1.0193906 + 2400 0.34829744 0 0.09230184 1.0304709 1.0083102 2500 0.33038141 0 0.1399855 1.0193906 1.0193906 - 2600 0.30983019 0 0.12754742 1.0193906 1.0083102 - 2700 0.32992561 0 0.10485138 1.0415512 1.0304709 + 2600 0.30983019 0 0.12754742 1.0083102 1.0083102 + 2700 0.32992561 0 0.10485138 1.0415512 1.0083102 2800 0.34604747 0 0.066174138 1.0083102 1.0083102 2900 0.3444791 0 0.036590652 1.0193906 1.0193906 - 3000 0.34721342 0 -0.023793368 1.0193906 1.0083102 + 3000 0.34721342 0 -0.023793368 1.0193906 1.0193906 3100 0.33404314 0 -0.08374223 1.0415512 1.0083102 - 3200 0.33019355 0 -0.12715599 1.0083102 1.0083102 + 3200 0.33019355 0 -0.12715599 1.0083102 1.0304709 3300 0.33515177 0 -0.12217394 1.0193906 1.0083102 3400 0.33628481 0 -0.070877624 1.0193906 1.0083102 3500 0.34257038 0 -0.021612062 1.0304709 1.0083102 3600 0.32838009 0 0.030131228 1.0083102 1.0083102 - 3700 0.34462142 0 0.074586378 1.0415512 1.0083102 + 3700 0.34462142 0 0.074586378 1.0526316 1.0193906 3800 0.30891825 0 0.10605673 1.0304709 1.0083102 - 3900 0.33847951 0 0.13956139 1.0415512 1.0193906 + 3900 0.33847951 0 0.13956139 1.0083102 1.0083102 4000 0.32952079 0 0.12688129 1.0193906 1.0304709 4100 0.32646772 0 0.081089042 1.0304709 1.0193906 4200 0.35399503 0 0.013422873 1.0083102 1.0083102 - 4300 0.33154914 0 -0.050919508 1.0083102 1.0193906 - 4400 0.34113556 0 -0.083171 1.0415512 1.0083102 - 4500 0.32651708 0 -0.1063133 1.0193906 1.0083102 - 4600 0.34359609 0 -0.1076395 1.0083102 1.0193906 + 4300 0.33154914 0 -0.050919508 1.0193906 1.0193906 + 4400 0.34113556 0 -0.083171 1.0304709 1.0083102 + 4500 0.32651708 0 -0.1063133 1.0304709 1.0083102 + 4600 0.34359609 0 -0.1076395 1.0083102 1.0083102 4700 0.34973537 0 -0.088231606 1.0415512 1.0083102 4800 0.35198515 0 -0.020901044 1.0415512 1.0083102 - 4900 0.35187284 0 0.043645941 1.0193906 1.0083102 + 4900 0.35187284 0 0.043645941 1.0415512 1.0083102 5000 0.34887336 0 0.095698609 1.0193906 1.0083102 - 5100 0.30308163 0 0.11649328 1.0083102 1.0083102 + 5100 0.30308163 0 0.11649328 1.0193906 1.0083102 5200 0.32401285 0 0.12072411 1.0193906 1.0083102 - 5300 0.33025072 0 0.10933161 1.0304709 1.0083102 + 5300 0.33025072 0 0.10933161 1.0193906 1.0083102 5400 0.33288012 0 0.078356448 1.0083102 1.0193906 5500 0.35142492 0 0.036958063 1.0193906 1.0083102 5600 0.35125368 0 -0.041371343 1.0304709 1.0083102 5700 0.34547744 0 -0.096450846 1.0637119 1.0083102 - 5800 0.30939887 0 -0.12356656 1.0083102 1.0083102 - 5900 0.32315628 0 -0.11338676 1.0193906 1.0304709 - 6000 0.34117485 0 -0.066198961 1.0193906 1.0193906 + 5800 0.30939887 0 -0.12356656 1.0083102 1.0193906 + 5900 0.32315628 0 -0.11338676 1.0193906 1.0193906 + 6000 0.34117485 0 -0.066198961 1.0193906 1.0083102 6100 0.35298043 0 -0.016172816 1.0304709 1.0193906 6200 0.35130653 0 0.027660468 1.0415512 1.0083102 - 6300 0.35398766 0 0.087221238 1.0083102 1.0193906 - 6400 0.30963379 0 0.11990957 1.0193906 1.0083102 + 6300 0.35398766 0 0.087221238 1.0083102 1.0083102 + 6400 0.30963379 0 0.11990957 1.0415512 1.0083102 6500 0.3174541 0 0.14103528 1.0193906 1.0193906 - 6600 0.31989791 0 0.11575506 1.0415512 1.0193906 - 6700 0.33811477 0 0.060747353 1.0083102 1.0193906 - 6800 0.3424043 0 0.010357152 1.0304709 1.0083102 + 6600 0.31989791 0 0.11575506 1.0304709 1.0193906 + 6700 0.33811477 0 0.060747353 1.0415512 1.0193906 + 6800 0.3424043 0 0.010357152 1.0193906 1.0083102 6900 0.34804319 0 -0.042621786 1.0193906 1.0083102 - 7000 0.35357865 0 -0.067248959 1.0304709 1.0083102 + 7000 0.35357865 0 -0.067248959 1.0083102 1.0083102 7100 0.33556885 0 -0.10983726 1.0193906 1.0083102 7200 0.33531101 0 -0.112179 1.0304709 1.0083102 7300 0.35742607 0 -0.078405267 1.0304709 1.0193906 7400 0.34577559 0 -0.01985432 1.0193906 1.0083102 7500 0.3498641 0 0.052289439 1.0526316 1.0083102 7600 0.33773715 0 0.092939035 1.0083102 1.0193906 - 7700 0.33093497 0 0.11924405 1.0193906 1.0083102 + 7700 0.33093497 0 0.11924405 1.0304709 1.0083102 7800 0.31435814 0 0.12701724 1.0083102 1.0304709 - 7900 0.33132217 0 0.10793075 1.0193906 1.0083102 - 8000 0.33451798 0 0.077993125 1.0304709 1.0083102 - 8100 0.35188371 0 0.019929977 1.0193906 1.0193906 + 7900 0.33132217 0 0.10793075 1.0083102 1.0083102 + 8000 0.33451798 0 0.077993125 1.0304709 1.0193906 + 8100 0.35188371 0 0.019929977 1.0193906 1.0083102 8200 0.33645742 0 -0.039302079 1.0193906 1.0193906 - 8300 0.3415632 0 -0.098067982 1.0304709 1.0083102 - 8400 0.30619282 0 -0.12952879 1.0193906 1.0193906 + 8300 0.3415632 0 -0.098067982 1.0193906 1.0083102 + 8400 0.30619282 0 -0.12952879 1.0304709 1.0193906 8500 0.34446484 0 -0.098084709 1.0083102 1.0083102 8600 0.33761673 0 -0.07069818 1.0193906 1.0083102 - 8700 0.34495452 0 -0.022458056 1.0193906 1.0193906 - 8800 0.33502983 0 0.027742411 1.0304709 1.0083102 - 8900 0.35418591 0 0.092390134 1.0083102 1.0083102 + 8700 0.34495452 0 -0.022458056 1.0193906 1.0083102 + 8800 0.33502983 0 0.027742411 1.0193906 1.0083102 + 8900 0.35418591 0 0.092390134 1.0083102 1.0193906 9000 0.31648387 0 0.12467398 1.0193906 1.0083102 - 9100 0.33994825 0 0.14460327 1.0193906 1.0193906 + 9100 0.33994825 0 0.14460327 1.0193906 1.0083102 9200 0.33822571 0 0.11273284 1.0193906 1.0083102 9300 0.33260773 0 0.060063671 1.0083102 1.0193906 9400 0.36140305 0 0.021427642 1.0193906 1.0083102 @@ -192,78 +209,78 @@ Step Temp E_pair Press f_10[3] f_10 9700 0.32088235 0 -0.12027075 1.0193906 1.0083102 9800 0.3320823 0 -0.11602794 1.0415512 1.0083102 9900 0.33916442 0 -0.080281044 1.0083102 1.0083102 - 10000 0.34852268 0 -0.01000914 1.0193906 1.0193906 + 10000 0.34852268 0 -0.01000914 1.0193906 1.0083102 10100 0.32955942 0 0.04258493 1.0083102 1.0083102 10200 0.34487898 0 0.086971308 1.0304709 1.0083102 - 10300 0.32325593 0 0.11558149 1.0304709 1.0083102 - 10400 0.30927871 0 0.12239437 1.0083102 1.0193906 + 10300 0.32325593 0 0.11558149 1.0304709 1.0193906 + 10400 0.30927871 0 0.12239437 1.0083102 1.0083102 10500 0.33176799 0 0.12285937 1.0193906 1.0083102 - 10600 0.35120027 0 0.084897432 1.0083102 1.0083102 + 10600 0.35120027 0 0.084897432 1.0415512 1.0083102 10700 0.33129697 0 0.0053089279 1.0193906 1.0193906 10800 0.36028769 0 -0.04280715 1.0193906 1.0083102 - 10900 0.35552287 0 -0.084955999 1.0193906 1.0304709 + 10900 0.35552287 0 -0.084955999 1.0193906 1.0193906 11000 0.3406024 0 -0.096554577 1.0083102 1.0083102 - 11100 0.33041202 0 -0.10703492 1.0304709 1.0083102 - 11200 0.32442686 0 -0.084328121 1.0304709 1.0083102 - 11300 0.35952468 0 -0.020191965 1.0304709 1.0193906 - 11400 0.34610624 0 0.03440148 1.0193906 1.0083102 - 11500 0.3415612 0 0.1041929 1.0193906 1.0193906 - 11600 0.34040042 0 0.13215705 1.0304709 1.0193906 - 11700 0.33555094 0 0.12738686 1.0083102 1.0304709 - 11800 0.3458647 0 0.10963398 1.0193906 1.0193906 + 11100 0.33041202 0 -0.10703492 1.0304709 1.0193906 + 11200 0.32442686 0 -0.084328121 1.0304709 1.0193906 + 11300 0.35952468 0 -0.020191965 1.0304709 1.0083102 + 11400 0.34610624 0 0.03440148 1.0193906 1.0193906 + 11500 0.3415612 0 0.1041929 1.0193906 1.0083102 + 11600 0.34040042 0 0.13215705 1.0304709 1.0083102 + 11700 0.33555094 0 0.12738686 1.0415512 1.0193906 + 11800 0.3458647 0 0.10963398 1.0083102 1.0193906 11900 0.33836678 0 0.067253864 1.0193906 1.0193906 12000 0.34853314 0 0.03201448 1.0193906 1.0083102 - 12100 0.34600048 0 -0.034833402 1.0304709 1.0083102 + 12100 0.34600048 0 -0.034833402 1.0304709 1.0193906 12200 0.33145631 0 -0.09865675 1.0193906 1.0193906 - 12300 0.32848884 0 -0.1248489 1.0193906 1.0193906 + 12300 0.32848884 0 -0.1248489 1.0193906 1.0083102 12400 0.3321344 0 -0.11266575 1.0083102 1.0083102 12500 0.32622305 0 -0.061634993 1.0304709 1.0083102 12600 0.36213537 0 -0.0090593315 1.0526316 1.0083102 12700 0.34673866 0 0.036734645 1.0193906 1.0083102 12800 0.34606618 0 0.086267678 1.0193906 1.0083102 - 12900 0.34271431 0 0.12415522 1.0304709 1.0083102 + 12900 0.34271431 0 0.12415522 1.0193906 1.0083102 13000 0.31993287 0 0.13879926 1.0193906 1.0193906 13100 0.3422918 0 0.11978905 1.0083102 1.0083102 - 13200 0.33055236 0 0.062620483 1.0193906 1.0083102 - 13300 0.34652207 0 0.0043833459 1.0304709 1.0193906 - 13400 0.33574661 0 -0.04691024 1.0304709 1.0193906 - 13500 0.33940837 0 -0.074241604 1.0304709 1.0193906 + 13200 0.33055236 0 0.062620483 1.0083102 1.0083102 + 13300 0.34652207 0 0.0043833459 1.0304709 1.0083102 + 13400 0.33574661 0 -0.04691024 1.0304709 1.0083102 + 13500 0.33940837 0 -0.074241604 1.0304709 1.0083102 13600 0.32093414 0 -0.1078027 1.0193906 1.0083102 13700 0.34336597 0 -0.10544097 1.0193906 1.0083102 13800 0.35806461 0 -0.072531559 1.0193906 1.0083102 - 13900 0.35209713 0 -0.018851408 1.0083102 1.0083102 + 13900 0.35209713 0 -0.018851408 1.0193906 1.0083102 14000 0.35702629 0 0.061046366 1.0083102 1.0083102 14100 0.33234093 0 0.094086465 1.0083102 1.0083102 - 14200 0.3459466 0 0.12186656 1.0193906 1.0083102 + 14200 0.3459466 0 0.12186656 1.0193906 1.0193906 14300 0.3327428 0 0.11396572 1.0193906 1.0083102 14400 0.32409443 0 0.10658903 1.0193906 1.0193906 - 14500 0.35022184 0 0.083558031 1.0083102 1.0193906 - 14600 0.34823843 0 0.024605569 1.0083102 1.0083102 + 14500 0.35022184 0 0.083558031 1.0083102 1.0083102 + 14600 0.34823843 0 0.024605569 1.0083102 1.0193906 14700 0.35298973 0 -0.040418888 1.0193906 1.0083102 14800 0.33679845 0 -0.10067728 1.0193906 1.0083102 - 14900 0.32790966 0 -0.10925568 1.0193906 1.0083102 + 14900 0.32790966 0 -0.10925568 1.0193906 1.0193906 15000 0.34208495 0 -0.09568004 1.0193906 1.0083102 15100 0.33647529 0 -0.055652929 1.0083102 1.0083102 - 15200 0.35328398 0 -0.020236536 1.0193906 1.0193906 - 15300 0.34252669 0 0.026434179 1.0083102 1.0193906 + 15200 0.35328398 0 -0.020236536 1.0415512 1.0193906 + 15300 0.34252669 0 0.026434179 1.0304709 1.0083102 15400 0.34409435 0 0.094410599 1.0304709 1.0083102 - 15500 0.32288994 0 0.12034455 1.0415512 1.0083102 + 15500 0.32288994 0 0.12034455 1.0304709 1.0193906 15600 0.32109689 0 0.13645185 1.0193906 1.0083102 - 15700 0.33681572 0 0.098607746 1.0415512 1.0083102 - 15800 0.33635195 0 0.05570715 1.0193906 1.0193906 - 15900 0.34289757 0 0.013849092 1.0304709 1.0193906 + 15700 0.33681572 0 0.098607746 1.0415512 1.0193906 + 15800 0.33635195 0 0.05570715 1.0193906 1.0083102 + 15900 0.34289757 0 0.013849092 1.0304709 1.0083102 16000 0.34225547 0 -0.035597548 1.0304709 1.0083102 16100 0.33660991 0 -0.076931881 1.0193906 1.0193906 - 16200 0.32802152 0 -0.12765884 1.0083102 1.0083102 + 16200 0.32802152 0 -0.12765884 1.0083102 1.0193906 16300 0.3469374 0 -0.10785455 1.0083102 1.0083102 16400 0.34053641 0 -0.070259853 1.0193906 1.0083102 - 16500 0.34610591 0 -0.014315306 1.0193906 1.0083102 + 16500 0.34610591 0 -0.014315306 1.0193906 1.0193906 16600 0.35109001 0 0.041251169 1.0304709 1.0083102 16700 0.34336905 0 0.077996627 1.0193906 1.0083102 16800 0.33277414 0 0.11053634 1.0083102 1.0083102 16900 0.32183338 0 0.11680626 1.0193906 1.0083102 17000 0.34044352 0 0.10806555 1.0193906 1.0083102 - 17100 0.32967873 0 0.067759786 1.0304709 1.0193906 + 17100 0.32967873 0 0.067759786 1.0193906 1.0193906 17200 0.36172278 0 -0.0048631904 1.0304709 1.0083102 17300 0.35619435 0 -0.04215545 1.0193906 1.0083102 17400 0.34540936 0 -0.093994174 1.0193906 1.0083102 @@ -271,13 +288,13 @@ Step Temp E_pair Press f_10[3] f_10 17600 0.3544756 0 -0.085660403 1.0193906 1.0083102 17700 0.34505209 0 -0.069640515 1.0304709 1.0193906 17800 0.36291124 0 -0.0063088133 1.0083102 1.0193906 - 17900 0.34255705 0 0.046794555 1.0304709 1.0083102 + 17900 0.34255705 0 0.046794555 1.0304709 1.0193906 18000 0.34163238 0 0.11767705 1.0193906 1.0193906 18100 0.3466445 0 0.1351712 1.0415512 1.0193906 18200 0.33037668 0 0.12703659 1.0083102 1.0083102 18300 0.33677404 0 0.10956306 1.0083102 1.0304709 18400 0.34978954 0 0.087193072 1.0193906 1.0193906 - 18500 0.33354363 0 0.051095814 1.0526316 1.0083102 + 18500 0.33354363 0 0.051095814 1.0526316 1.0193906 18600 0.34651729 0 0.0056245561 1.0304709 1.0193906 18700 0.32622232 0 -0.047319269 1.0083102 1.0193906 18800 0.32978847 0 -0.054929416 1.0304709 1.0193906 @@ -298,12 +315,12 @@ Step Temp E_pair Press f_10[3] f_10 20300 0.34195438 0 0.072811099 1.0304709 1.0193906 20400 0.31249563 0 0.10063541 1.0415512 1.0083102 20500 0.31544938 0 0.1405794 1.0083102 1.0083102 - 20600 0.30071644 0 0.12763486 1.0193906 1.0304709 + 20600 0.30071644 0 0.12763486 1.0193906 1.0193906 20700 0.2890265 0 0.1136651 1.0083102 1.0083102 20800 0.28962296 0 0.094481978 1.0193906 1.0083102 20900 0.29447212 0 0.0967165 1.0193906 1.0193906 21000 0.31159961 0 0.067307231 1.0083102 1.0083102 - 21100 0.30490648 0 0.017689358 1.0083102 1.0193906 + 21100 0.30490648 0 0.017689358 1.0083102 1.0304709 21200 0.30687262 0 -0.016055512 1.0193906 1.0193906 21300 0.30083286 0 -0.0014988997 1.0193906 1.0083102 21400 0.32070426 0 0.015960302 1.0083102 1.0083102 @@ -316,7 +333,7 @@ Step Temp E_pair Press f_10[3] f_10 22100 0.34857705 0 0.032731746 1.0193906 1.0083102 22200 0.34750227 0 0.0056917695 1.0193906 1.0083102 22300 0.34766017 0 -0.0027090483 1.0193906 1.0083102 - 22400 0.33426062 0 -0.023196063 1.0304709 1.0193906 + 22400 0.33426062 0 -0.023196063 1.0304709 1.0083102 22500 0.34174625 0 -0.025019717 1.0083102 1.0083102 22600 0.3356145 0 -0.029707418 1.0304709 1.0193906 22700 0.3362653 0 -0.035815733 1.0193906 1.0193906 @@ -328,13 +345,13 @@ Step Temp E_pair Press f_10[3] f_10 23300 0.32965664 0 0.035989589 1.0193906 1.0083102 23400 0.30927749 0 0.024581106 1.0193906 1.0083102 23500 0.32890632 0 0.01092479 1.0304709 1.0193906 - 23600 0.34137438 0 0.0094839745 1.0193906 1.0083102 + 23600 0.34137438 0 0.0094839745 1.0193906 1.0193906 23700 0.34512638 0 -0.012392771 1.0304709 1.0193906 - 23800 0.31781354 0 -0.012908449 1.0193906 1.0193906 + 23800 0.31781354 0 -0.012908449 1.0193906 1.0083102 23900 0.32405513 0 -0.015018071 1.0415512 1.0193906 24000 0.33549728 0 -0.012812915 1.0193906 1.0193906 - 24100 0.31368736 0 -0.020818372 1.0304709 1.0193906 - 24200 0.33533836 0 0.0056121057 1.0083102 1.0083102 + 24100 0.31368736 0 -0.020818372 1.0083102 1.0083102 + 24200 0.33533836 0 0.0056121057 1.0304709 1.0193906 24300 0.32530627 0 0.018183931 1.0415512 1.0083102 24400 0.31930662 0 0.027446878 1.0083102 1.0193906 24500 0.33540302 0 0.040307455 1.0304709 1.0083102 @@ -344,14 +361,14 @@ Step Temp E_pair Press f_10[3] f_10 24900 0.34727253 0 0.01670543 1.0193906 1.0083102 25000 0.35120105 0 0.0038617562 1.0193906 1.0083102 25100 0.32706871 0 -0.021196623 1.0415512 1.0193906 - 25200 0.32915282 0 -0.017146508 1.0193906 1.0083102 - 25300 0.32577518 0 -0.01312495 1.0193906 1.0304709 - 25400 0.33286855 0 0.0014726193 1.0193906 1.0193906 + 25200 0.32915282 0 -0.017146508 1.0083102 1.0193906 + 25300 0.32577518 0 -0.01312495 1.0193906 1.0083102 + 25400 0.33286855 0 0.0014726193 1.0415512 1.0193906 25500 0.33002601 0 0.0080974022 1.0193906 1.0083102 25600 0.34127655 0 0.014296091 1.0526316 1.0083102 - 25700 0.34048065 0 0.022513032 1.0193906 1.0193906 - 25800 0.33029079 0 0.038733531 1.0193906 1.0083102 - 25900 0.33031324 0 0.026156982 1.0304709 1.0193906 + 25700 0.34048065 0 0.022513032 1.0193906 1.0083102 + 25800 0.33029079 0 0.038733531 1.0526316 1.0083102 + 25900 0.33031324 0 0.026156982 1.0083102 1.0193906 26000 0.32967371 0 0.028727383 1.0083102 1.0193906 26100 0.33775718 0 0.015607478 1.0083102 1.0193906 26200 0.35097144 0 0.012291703 1.0083102 1.0083102 @@ -360,20 +377,20 @@ Step Temp E_pair Press f_10[3] f_10 26500 0.33580127 0 -0.0074168555 1.0193906 1.0193906 26600 0.33063188 0 -0.020378601 1.0083102 1.0193906 26700 0.33581846 0 -0.00084397268 1.0083102 1.0193906 - 26800 0.32998532 0 0.015932208 1.0304709 1.0304709 + 26800 0.32998532 0 0.015932208 1.0304709 1.0193906 26900 0.33825444 0 0.010428603 1.0304709 1.0083102 - 27000 0.32081518 0 0.019818223 1.0304709 1.0193906 + 27000 0.32081518 0 0.019818223 1.0415512 1.0193906 27100 0.31448098 0 0.020093416 1.0193906 1.0083102 - 27200 0.32643684 0 0.021934917 1.0083102 1.0083102 + 27200 0.32643684 0 0.021934917 1.0193906 1.0083102 27300 0.33289466 0 0.023713072 1.0415512 1.0083102 27400 0.32310744 0 0.024110945 1.0415512 1.0083102 - 27500 0.33115619 0 0.0025776713 1.0304709 1.0083102 - 27600 0.33295887 0 -0.010710764 1.0304709 1.0193906 - 27700 0.32968876 0 -0.0064595905 1.0193906 1.0083102 + 27500 0.33115619 0 0.0025776713 1.0304709 1.0193906 + 27600 0.33295887 0 -0.010710764 1.0193906 1.0193906 + 27700 0.32968876 0 -0.0064595905 1.0193906 1.0193906 27800 0.34064581 0 -0.0086519116 1.0193906 1.0083102 - 27900 0.33559187 0 -0.0055753593 1.0083102 1.0083102 + 27900 0.33559187 0 -0.0055753593 1.0526316 1.0083102 28000 0.32300727 0 -0.0004153384 1.0304709 1.0083102 - 28100 0.32147461 0 -0.0058543412 1.0083102 1.0193906 + 28100 0.32147461 0 -0.0058543412 1.0083102 1.0083102 28200 0.35532383 0 0.013646951 1.0304709 1.0083102 28300 0.31507942 0 0.026532255 1.0415512 1.0193906 28400 0.32711006 0 0.033214981 1.0193906 1.0083102 @@ -396,66 +413,66 @@ Step Temp E_pair Press f_10[3] f_10 30100 0.32598657 0 -0.0018860541 1.0415512 1.0193906 30200 0.34855815 0 0.0017983372 1.0083102 1.0083102 30300 0.33375921 0 0.0010991235 1.0083102 1.0193906 - 30400 0.35008944 0 -0.0027316177 1.0415512 1.0083102 + 30400 0.35008944 0 -0.0027316177 1.0193906 1.0083102 30500 0.33279729 0 -0.0035788551 1.0193906 1.0193906 30600 0.33868746 0 -0.0016249482 1.0083102 1.0193906 30700 0.33597034 0 -0.0014524001 1.0193906 1.0193906 - 30800 0.3227257 0 0.016353457 1.0415512 1.0193906 + 30800 0.3227257 0 0.016353457 1.0193906 1.0193906 30900 0.32676516 0 0.027396654 1.0193906 1.0083102 31000 0.34083982 0 0.031606413 1.0415512 1.0193906 - 31100 0.32165238 0 0.013583368 1.0193906 1.0083102 - 31200 0.3428492 0 0.020486611 1.0304709 1.0193906 + 31100 0.32165238 0 0.013583368 1.0083102 1.0083102 + 31200 0.3428492 0 0.020486611 1.0304709 1.0083102 31300 0.32372541 0 0.01215566 1.0083102 1.0083102 31400 0.32734692 0 0.016229397 1.0083102 1.0083102 31500 0.33089262 0 0.0060426618 1.0083102 1.0083102 31600 0.34273493 0 -0.013456537 1.0083102 1.0193906 - 31700 0.32723905 0 -0.019243766 1.0193906 1.0193906 + 31700 0.32723905 0 -0.019243766 1.0193906 1.0083102 31800 0.33636488 0 0.0027814902 1.0083102 1.0083102 - 31900 0.32834805 0 0.00706877 1.0083102 1.0083102 + 31900 0.32834805 0 0.00706877 1.0083102 1.0193906 32000 0.33995148 0 0.0018383309 1.0193906 1.0193906 32100 0.33412282 0 0.0076455933 1.0083102 1.0083102 32200 0.34334884 0 0.023586129 1.0083102 1.0083102 32300 0.32778925 0 0.020564321 1.0193906 1.0083102 32400 0.33163443 0 0.038878463 1.0193906 1.0083102 - 32500 0.32290345 0 0.022247461 1.0193906 1.0193906 - 32600 0.34113954 0 0.010966365 1.0304709 1.0083102 + 32500 0.32290345 0 0.022247461 1.0193906 1.0083102 + 32600 0.34113954 0 0.010966365 1.0304709 1.0193906 32700 0.33390633 0 0.0037777555 1.0193906 1.0083102 32800 0.34385341 0 0.010556575 1.0193906 1.0193906 - 32900 0.32137047 0 0.00022027143 1.0526316 1.0193906 - 33000 0.32079172 0 -0.017261272 1.0193906 1.0193906 + 32900 0.32137047 0 0.00022027143 1.0304709 1.0193906 + 33000 0.32079172 0 -0.017261272 1.0193906 1.0083102 33100 0.33570882 0 -0.0051942206 1.0083102 1.0083102 - 33200 0.34320894 0 -0.011515281 1.0304709 1.0193906 - 33300 0.32794746 0 -0.0018153673 1.0083102 1.0083102 + 33200 0.34320894 0 -0.011515281 1.0193906 1.0083102 + 33300 0.32794746 0 -0.0018153673 1.0083102 1.0193906 33400 0.33060982 0 0.027118146 1.0193906 1.0083102 - 33500 0.33641809 0 0.02143035 1.0083102 1.0083102 - 33600 0.33643061 0 0.020833068 1.0193906 1.0083102 + 33500 0.33641809 0 0.02143035 1.0083102 1.0193906 + 33600 0.33643061 0 0.020833068 1.0304709 1.0083102 33700 0.3485949 0 0.030918751 1.0193906 1.0083102 33800 0.3283985 0 0.01947613 1.0193906 1.0083102 - 33900 0.31959761 0 0.021128147 1.0083102 1.0193906 + 33900 0.31959761 0 0.021128147 1.0083102 1.0304709 34000 0.33897984 0 0.015270986 1.0193906 1.0083102 34100 0.32392267 0 0.0020130852 1.0304709 1.0193906 - 34200 0.33084514 0 -0.024316708 1.0193906 1.0083102 + 34200 0.33084514 0 -0.024316708 1.0193906 1.0193906 34300 0.3342259 0 -0.0059047764 1.0193906 1.0304709 34400 0.33385098 0 0.0063818721 1.0193906 1.0083102 34500 0.33255603 0 -0.01023837 1.0083102 1.0304709 34600 0.34766173 0 0.0056703013 1.0193906 1.0083102 - 34700 0.339822 0 0.0061648559 1.0083102 1.0193906 + 34700 0.339822 0 0.0061648559 1.0193906 1.0193906 34800 0.33902329 0 0.030037037 1.0415512 1.0193906 - 34900 0.3216153 0 0.027996689 1.0304709 1.0083102 - 35000 0.32701056 0 0.024778517 1.0193906 1.0193906 - 35100 0.3124942 0 0.011316548 1.0193906 1.0193906 - 35200 0.34486416 0 0.011670127 1.0193906 1.0193906 + 34900 0.3216153 0 0.027996689 1.0083102 1.0083102 + 35000 0.32701056 0 0.024778517 1.0193906 1.0083102 + 35100 0.3124942 0 0.011316548 1.0304709 1.0193906 + 35200 0.34486416 0 0.011670127 1.0083102 1.0083102 35300 0.33275353 0 0.020491246 1.0193906 1.0193906 35400 0.33618763 0 0.014678874 1.0083102 1.0083102 35500 0.32352282 0 -0.018568683 1.0193906 1.0193906 - 35600 0.32617903 0 -0.012796912 1.0193906 1.0193906 - 35700 0.32378048 0 -0.021318585 1.0193906 1.0083102 + 35600 0.32617903 0 -0.012796912 1.0193906 1.0304709 + 35700 0.32378048 0 -0.021318585 1.0193906 1.0193906 35800 0.3371086 0 -0.0023678632 1.0193906 1.0193906 35900 0.33818476 0 0.011197742 1.0193906 1.0083102 36000 0.35142144 0 0.022520935 1.0083102 1.0193906 36100 0.35147297 0 0.020277852 1.0193906 1.0083102 - 36200 0.33489465 0 0.014564878 1.0415512 1.0083102 - 36300 0.33841515 0 0.036439962 1.0193906 1.0193906 + 36200 0.33489465 0 0.014564878 1.0415512 1.0193906 + 36300 0.33841515 0 0.036439962 1.0193906 1.0083102 36400 0.32301096 0 0.019966746 1.0304709 1.0083102 36500 0.35612028 0 0.036509556 1.0083102 1.0083102 36600 0.33841597 0 -0.0042180605 1.0193906 1.0193906 @@ -464,9 +481,9 @@ Step Temp E_pair Press f_10[3] f_10 36900 0.35003816 0 -0.0021184393 1.0083102 1.0083102 37000 0.32965041 0 -0.020900951 1.0193906 1.0083102 37100 0.34653095 0 -0.013667977 1.0193906 1.0083102 - 37200 0.35019871 0 -0.0071740923 1.0083102 1.0193906 + 37200 0.35019871 0 -0.0071740923 1.0193906 1.0304709 37300 0.34859745 0 0.02006041 1.0304709 1.0083102 - 37400 0.35739859 0 0.020892822 1.0193906 1.0083102 + 37400 0.35739859 0 0.020892822 1.0304709 1.0083102 37500 0.34128859 0 0.041072111 1.0193906 1.0193906 37600 0.33781905 0 0.023376738 1.0193906 1.0083102 37700 0.32961874 0 0.030953741 1.0193906 1.0083102 @@ -493,21 +510,21 @@ Step Temp E_pair Press f_10[3] f_10 39800 0.34878036 0 0.0092881327 1.0083102 1.0193906 39900 0.35225411 0 -0.011341599 1.0083102 1.0193906 40000 0.36309266 0 0.0050869295 1.0304709 1.0083102 -Loop time of 1.17534 on 4 procs for 40000 steps with 361 atoms +Loop time of 1.12306 on 4 procs for 40000 steps with 361 atoms -Performance: 14702186.196 tau/day, 34032.838 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 15386559.518 tau/day, 35617.036 timesteps/s +90.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.019205 | 0.020313 | 0.022204 | 0.8 | 1.73 -Bond | 0.21255 | 0.23651 | 0.26839 | 4.9 | 20.12 -Neigh | 0.16301 | 0.16427 | 0.16578 | 0.3 | 13.98 -Comm | 0.33528 | 0.37951 | 0.4139 | 5.3 | 32.29 -Output | 0.0084457 | 0.0089972 | 0.010254 | 0.8 | 0.77 -Modify | 0.15906 | 0.16078 | 0.16308 | 0.4 | 13.68 -Other | | 0.205 | | | 17.44 +Pair | 0.023094 | 0.023348 | 0.023582 | 0.1 | 2.08 +Bond | 0.17827 | 0.19268 | 0.21984 | 3.7 | 17.16 +Neigh | 0.18144 | 0.18231 | 0.18323 | 0.1 | 16.23 +Comm | 0.23759 | 0.28095 | 0.30794 | 5.0 | 25.02 +Output | 0.0062952 | 0.013342 | 0.034226 | 10.4 | 1.19 +Modify | 0.2379 | 0.24327 | 0.25076 | 0.9 | 21.66 +Other | | 0.1871 | | | 16.66 Nlocal: 90.25 ave 91 max 89 min Histogram: 1 0 0 0 0 1 0 0 0 2 diff --git a/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 new file mode 100644 index 0000000000..781a609bd2 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 @@ -0,0 +1,227 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000549078 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 10 1.0 weight time 1.0 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.562 | 4.753 | 4.944 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 3.7099 on 2 procs for 500 steps with 4000 atoms + +Performance: 58222.644 tau/day, 134.775 timesteps/s +99.2% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5145 | 2.5951 | 2.6756 | 5.0 | 69.95 +Neigh | 0.8388 | 0.88634 | 0.93387 | 5.0 | 23.89 +Comm | 0.17027 | 0.20258 | 0.23489 | 7.2 | 5.46 +Output | 0.00029612 | 0.00032723 | 0.00035834 | 0.0 | 0.01 +Modify | 0.016136 | 0.017057 | 0.017979 | 0.7 | 0.46 +Other | | 0.008504 | | | 0.23 + +Nlocal: 2000 ave 2157 max 1843 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10465.5 ave 10840 max 10091 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 305706 max 290433 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.035 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.944 | 4.947 | 4.951 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 +Loop time of 3.70634 on 2 procs for 500 steps with 4000 atoms + +Performance: 58278.514 tau/day, 134.904 timesteps/s +99.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5536 | 2.6173 | 2.6811 | 3.9 | 70.62 +Neigh | 0.82942 | 0.88683 | 0.94424 | 6.1 | 23.93 +Comm | 0.16927 | 0.17474 | 0.1802 | 1.3 | 4.71 +Output | 0.00030422 | 0.00033307 | 0.00036192 | 0.0 | 0.01 +Modify | 0.016714 | 0.017824 | 0.018933 | 0.8 | 0.48 +Other | | 0.009277 | | | 0.25 + +Nlocal: 2000 ave 2136 max 1864 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10413.5 ave 10877 max 9950 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 312313 max 289358 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.418 +Neighbor list builds = 51 +Dangerous builds = 0 +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.951 | 5.142 | 5.334 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418133 4738.2137 + 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 + 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 + 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 + 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 +Loop time of 4.8272 on 2 procs for 500 steps with 4000 atoms + +Performance: 44746.478 tau/day, 103.580 timesteps/s +98.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.9951 | 2.6814 | 3.3676 | 41.9 | 55.55 +Neigh | 0.82826 | 0.90961 | 0.99095 | 8.5 | 18.84 +Comm | 0.44043 | 1.2083 | 1.9762 | 69.9 | 25.03 +Output | 0.00034881 | 0.0003655 | 0.00038218 | 0.0 | 0.01 +Modify | 0.016762 | 0.01755 | 0.018337 | 0.6 | 0.36 +Other | | 0.01001 | | | 0.21 + +Nlocal: 2000 ave 2564 max 1436 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10334 ave 10752 max 9916 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 302958 ave 499873 max 106044 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 605917 +Ave neighs/atom = 151.479 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.955 | 5.336 | 5.717 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 + 1550 0.53713591 -6.2504068 0 -5.4449044 -1.7647087 4738.2137 + 1600 0.5467956 -6.2646482 0 -5.4446599 -1.8115778 4738.2137 + 1650 0.53806575 -6.2519004 0 -5.4450036 -1.7409135 4738.2137 + 1700 0.5347949 -6.2468958 0 -5.444904 -1.7162322 4738.2137 + 1750 0.53714528 -6.2506529 0 -5.4451365 -1.7340402 4738.2137 + 1800 0.5274989 -6.2358675 0 -5.444817 -1.6874989 4738.2137 + 1850 0.54585906 -6.2629475 0 -5.4443636 -1.7758918 4738.2137 + 1900 0.5301071 -6.2387551 0 -5.4437932 -1.6381903 4738.2137 + 1950 0.54288149 -6.2582818 0 -5.4441632 -1.7367819 4738.2137 + 2000 0.52766162 -6.2348587 0 -5.4435642 -1.5589151 4738.2137 +Loop time of 4.90351 on 2 procs for 500 steps with 4000 atoms + +Performance: 44050.062 tau/day, 101.968 timesteps/s +98.1% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.9937 | 2.6502 | 3.3067 | 40.3 | 54.05 +Neigh | 0.81645 | 0.88655 | 0.95664 | 7.4 | 18.08 +Comm | 0.61197 | 1.3389 | 2.0659 | 62.8 | 27.31 +Output | 0.00036287 | 0.0003773 | 0.00039172 | 0.0 | 0.01 +Modify | 0.016585 | 0.017429 | 0.018274 | 0.6 | 0.36 +Other | | 0.01003 | | | 0.20 + +Nlocal: 2000 ave 2564 max 1436 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10256 ave 10620 max 9892 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 303988 ave 502064 max 105911 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 607975 +Ave neighs/atom = 151.994 +Neighbor list builds = 51 +Dangerous builds = 0 +Total wall time: 0:00:17 diff --git a/examples/balance/log.5Oct16.balance.clock.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 similarity index 57% rename from examples/balance/log.5Oct16.balance.clock.dynamic.g++.4 rename to examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 index f9b5f55ea2..94780b14df 100644 --- a/examples/balance/log.5Oct16.balance.clock.dynamic.g++.4 +++ b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000421762 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -51,13 +53,18 @@ fix 1 all nve thermo 50 run 500 Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 -Memory usage per processor = 3.0442 Mbytes + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.691 | 4.072 | 4.454 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 @@ -70,34 +77,34 @@ Step Temp E_pair E_mol TotEng Press Volume 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 2.33547 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.69458 on 4 procs for 500 steps with 4000 atoms -Performance: 92486.710 tau/day, 214.090 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 80160.913 tau/day, 185.558 timesteps/s +94.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1405 | 1.4342 | 1.6755 | 19.8 | 61.41 -Neigh | 0.26612 | 0.40331 | 0.57095 | 21.3 | 17.27 -Comm | 0.3676 | 0.47776 | 0.60114 | 14.4 | 20.46 -Output | 0.00025606 | 0.00029331 | 0.00032091 | 0.1 | 0.01 -Modify | 0.0068483 | 0.008993 | 0.012159 | 2.3 | 0.39 -Other | | 0.01091 | | | 0.47 +Pair | 1.0903 | 1.4509 | 1.7199 | 22.5 | 53.84 +Neigh | 0.31688 | 0.47906 | 0.71852 | 24.2 | 17.78 +Comm | 0.60463 | 0.72402 | 0.84257 | 12.7 | 26.87 +Output | 0.00035119 | 0.00067121 | 0.0015202 | 0.0 | 0.02 +Modify | 0.00811 | 0.010936 | 0.014029 | 2.7 | 0.41 +Other | | 0.02904 | | | 1.08 -Nlocal: 1000 ave 1541 max 597 min +Nlocal: 1000 ave 1504 max 634 min Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8756.5 ave 9859 max 8068 min +Nghost: 8759.25 ave 9896 max 8021 min Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149308 ave 164475 max 126288 min -Histogram: 1 0 0 0 1 0 0 0 0 2 +Neighs: 149308 ave 179946 max 116419 min +Histogram: 1 1 0 0 0 0 0 0 1 1 Total # of neighbors = 597231 Ave neighs/atom = 149.308 Neighbor list builds = 50 Dangerous builds = 0 run 500 -Memory usage per processor = 3.06519 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes Step Temp E_pair E_mol TotEng Press Volume 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 @@ -110,27 +117,27 @@ Step Temp E_pair E_mol TotEng Press Volume 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 -Loop time of 2.16422 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.64502 on 4 procs for 500 steps with 4000 atoms -Performance: 99804.786 tau/day, 231.030 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 81662.873 tau/day, 189.034 timesteps/s +93.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1704 | 1.3643 | 1.5256 | 13.9 | 63.04 -Neigh | 0.252 | 0.39989 | 0.57798 | 23.0 | 18.48 -Comm | 0.36005 | 0.38026 | 0.399 | 2.7 | 17.57 -Output | 0.00026989 | 0.00029516 | 0.00030947 | 0.1 | 0.01 -Modify | 0.0062692 | 0.0085821 | 0.011907 | 2.6 | 0.40 -Other | | 0.01089 | | | 0.50 +Pair | 1.1279 | 1.4127 | 1.6268 | 18.0 | 53.41 +Neigh | 0.32225 | 0.49572 | 0.76053 | 26.2 | 18.74 +Comm | 0.64504 | 0.6974 | 0.75498 | 5.7 | 26.37 +Output | 0.00035477 | 0.00062996 | 0.001343 | 0.0 | 0.02 +Modify | 0.0077929 | 0.010538 | 0.013856 | 2.6 | 0.40 +Other | | 0.02803 | | | 1.06 -Nlocal: 1000 ave 1546 max 611 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8720 ave 9802 max 8007 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 150170 ave 167512 max 125941 min -Histogram: 1 0 0 1 0 0 0 0 0 2 +Nlocal: 1000 ave 1437 max 597 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Nghost: 8674 ave 9370 max 8013 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 150170 ave 187030 max 102149 min +Histogram: 1 0 0 0 0 1 0 1 0 1 Total # of neighbors = 600678 Ave neighs/atom = 150.169 @@ -138,7 +145,7 @@ Neighbor list builds = 53 Dangerous builds = 0 fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT run 500 -Memory usage per processor = 3.04802 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.269 | 4.458 Mbytes Step Temp E_pair E_mol TotEng Press Volume 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 @@ -150,71 +157,71 @@ Step Temp E_pair E_mol TotEng Press Volume 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 -Loop time of 2.17454 on 4 procs for 500 steps with 4000 atoms + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 +Loop time of 2.61342 on 4 procs for 500 steps with 4000 atoms -Performance: 99331.198 tau/day, 229.933 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 82650.254 tau/day, 191.320 timesteps/s +93.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1909 | 1.3814 | 1.5474 | 12.7 | 63.53 -Neigh | 0.24882 | 0.38781 | 0.5563 | 22.6 | 17.83 -Comm | 0.35985 | 0.38559 | 0.4055 | 3.0 | 17.73 -Output | 0.00030994 | 0.00033677 | 0.00035214 | 0.1 | 0.02 -Modify | 0.0060136 | 0.008362 | 0.011491 | 2.6 | 0.38 -Other | | 0.01102 | | | 0.51 +Pair | 1.222 | 1.4442 | 1.5812 | 12.3 | 55.26 +Neigh | 0.29672 | 0.48201 | 0.73859 | 27.6 | 18.44 +Comm | 0.59138 | 0.65738 | 0.70906 | 6.5 | 25.15 +Output | 0.00036502 | 0.00091559 | 0.0020845 | 0.0 | 0.04 +Modify | 0.0095406 | 0.012674 | 0.017643 | 2.8 | 0.48 +Other | | 0.01621 | | | 0.62 -Nlocal: 1000 ave 1555 max 581 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8695.5 ave 9791 max 8011 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 150494 ave 160074 max 132359 min -Histogram: 1 0 0 0 0 0 1 0 0 2 +Nlocal: 1000 ave 1446 max 670 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8641 ave 9376 max 8019 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 150494 ave 184085 max 105390 min +Histogram: 1 0 1 0 0 0 0 0 0 2 Total # of neighbors = 601974 Ave neighs/atom = 150.494 Neighbor list builds = 51 Dangerous builds = 0 run 500 -Memory usage per processor = 3.06519 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.269 | 4.458 Mbytes Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 1550 0.55327018 -6.2750125 0 -5.4453148 -1.9506585 4738.2137 - 1600 0.54419003 -6.2612622 0 -5.4451812 -1.8559437 4738.2137 - 1650 0.54710035 -6.2661979 0 -5.4457525 -1.8882833 4738.2137 - 1700 0.53665692 -6.2504957 0 -5.4457116 -1.8068001 4738.2137 - 1750 0.54864726 -6.2681127 0 -5.4453476 -1.8662658 4738.2137 - 1800 0.54476256 -6.2615132 0 -5.4445736 -1.8352921 4738.2137 - 1850 0.54142913 -6.2555501 0 -5.4436094 -1.8005632 4738.2137 - 1900 0.53992543 -6.2541365 0 -5.4444509 -1.7768749 4738.2137 - 1950 0.54666257 -6.2641014 0 -5.4443125 -1.7947215 4738.2137 - 2000 0.54557432 -6.2625445 0 -5.4443876 -1.8072402 4738.2137 -Loop time of 2.13804 on 4 procs for 500 steps with 4000 atoms + 1600 0.5441901 -6.2612622 0 -5.4451811 -1.8559436 4738.2137 + 1650 0.54710046 -6.2661938 0 -5.4457483 -1.8882766 4738.2137 + 1700 0.5366569 -6.2504957 0 -5.4457116 -1.8067998 4738.2137 + 1750 0.5486468 -6.2681121 0 -5.4453476 -1.8662631 4738.2137 + 1800 0.54476176 -6.2615037 0 -5.4445653 -1.8352743 4738.2137 + 1850 0.5414305 -6.2555519 0 -5.4436091 -1.8005747 4738.2137 + 1900 0.53992655 -6.2541344 0 -5.444447 -1.7768718 4738.2137 + 1950 0.54666071 -6.2640943 0 -5.4443082 -1.7947052 4738.2137 + 2000 0.54556196 -6.2625262 0 -5.4443879 -1.8071631 4738.2137 +Loop time of 2.81593 on 4 procs for 500 steps with 4000 atoms -Performance: 101026.937 tau/day, 233.859 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 76706.532 tau/day, 177.561 timesteps/s +90.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2063 | 1.3671 | 1.4849 | 9.7 | 63.94 -Neigh | 0.25593 | 0.41674 | 0.59932 | 24.5 | 19.49 -Comm | 0.25287 | 0.33513 | 0.39698 | 9.9 | 15.67 -Output | 0.00024056 | 0.00026721 | 0.00028205 | 0.1 | 0.01 -Modify | 0.0058651 | 0.0082419 | 0.011365 | 2.7 | 0.39 -Other | | 0.01061 | | | 0.50 +Pair | 1.2508 | 1.4839 | 1.6521 | 13.4 | 52.70 +Neigh | 0.34188 | 0.54016 | 0.82358 | 27.6 | 19.18 +Comm | 0.70575 | 0.75254 | 0.80167 | 4.6 | 26.72 +Output | 0.00041604 | 0.001362 | 0.0041099 | 4.3 | 0.05 +Modify | 0.010564 | 0.013653 | 0.018 | 2.7 | 0.48 +Other | | 0.02432 | | | 0.86 -Nlocal: 1000 ave 1513 max 612 min +Nlocal: 1000 ave 1555 max 569 min Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8685.25 ave 9861 max 7992 min +Nghost: 8672.75 ave 9821 max 7993 min Histogram: 2 0 0 0 1 0 0 0 0 1 -Neighs: 151657 ave 173252 max 122114 min -Histogram: 1 0 0 0 1 0 0 0 1 1 +Neighs: 151656 ave 164603 max 133455 min +Histogram: 1 0 0 0 0 0 1 1 0 1 -Total # of neighbors = 606628 -Ave neighs/atom = 151.657 +Total # of neighbors = 606625 +Ave neighs/atom = 151.656 Neighbor list builds = 56 Dangerous builds = 0 -Total wall time: 0:00:08 +Total wall time: 0:00:10 diff --git a/examples/balance/log.27Nov18.balance.clock.static.g++.2 b/examples/balance/log.27Nov18.balance.clock.static.g++.2 new file mode 100644 index 0000000000..6f96ac4fef --- /dev/null +++ b/examples/balance/log.27Nov18.balance.clock.static.g++.2 @@ -0,0 +1,195 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000517368 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000522375 seconds + iteration count = 1 + time weight factor: 1 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 1.96356 on 2 procs for 250 steps with 4000 atoms + +Performance: 55002.186 tau/day, 127.320 timesteps/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.0024 | 1.243 | 1.4835 | 21.6 | 63.30 +Neigh | 0.3963 | 0.41601 | 0.43572 | 3.1 | 21.19 +Comm | 0.032948 | 0.29324 | 0.55353 | 48.1 | 14.93 +Output | 0.00013924 | 0.00014722 | 0.00015521 | 0.0 | 0.01 +Modify | 0.0072696 | 0.0073524 | 0.0074351 | 0.1 | 0.37 +Other | | 0.003842 | | | 0.20 + +Nlocal: 2000 ave 2051 max 1949 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10443 ave 10506 max 10380 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 363449 max 233215 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 24 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt + rebalancing time: 0.000424623 seconds + iteration count = 3 + time weight factor: 1 + initial/final max load/proc = 1.91926 1.6972 + initial/final imbalance factor = 1.15689 1.02304 + x cuts: 0 0.4375 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.685 Mbytes +Step Temp E_pair E_mol TotEng Press + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 +Loop time of 1.84751 on 2 procs for 250 steps with 4000 atoms + +Performance: 58457.127 tau/day, 135.317 timesteps/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1214 | 1.2291 | 1.3368 | 9.7 | 66.53 +Neigh | 0.37418 | 0.41926 | 0.46434 | 7.0 | 22.69 +Comm | 0.033842 | 0.18738 | 0.34091 | 35.5 | 10.14 +Output | 0.00016665 | 0.00018752 | 0.00020838 | 0.0 | 0.01 +Modify | 0.0062993 | 0.0072798 | 0.0082603 | 1.1 | 0.39 +Other | | 0.00428 | | | 0.23 + +Nlocal: 2000 ave 2284 max 1716 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10450 ave 10742 max 10158 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298063 ave 326003 max 270123 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596126 +Ave neighs/atom = 149.031 +Neighbor list builds = 25 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt + rebalancing time: 0.000502825 seconds + iteration count = 3 + time weight factor: 1 + initial/final max load/proc = 1.80118 1.79434 + initial/final imbalance factor = 1.0927 1.08854 + x cuts: 0 0.507812 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes +Step Temp E_pair E_mol TotEng Press + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 +Loop time of 2.03694 on 2 procs for 250 steps with 4000 atoms + +Performance: 53020.655 tau/day, 122.733 timesteps/s +99.3% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.92132 | 1.2301 | 1.5389 | 27.8 | 60.39 +Neigh | 0.3924 | 0.42313 | 0.45386 | 4.7 | 20.77 +Comm | 0.032816 | 0.37246 | 0.71211 | 55.7 | 18.29 +Output | 0.00013733 | 0.00014532 | 0.0001533 | 0.0 | 0.01 +Modify | 0.0069692 | 0.0072372 | 0.0075052 | 0.3 | 0.36 +Other | | 0.003856 | | | 0.19 + +Nlocal: 2000 ave 2097 max 1903 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10439.5 ave 10561 max 10318 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 299628 ave 378859 max 220397 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 599256 +Ave neighs/atom = 149.814 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/balance/log.5Oct16.balance.clock.static.g++.4 b/examples/balance/log.27Nov18.balance.clock.static.g++.4 similarity index 59% rename from examples/balance/log.5Oct16.balance.clock.static.g++.4 rename to examples/balance/log.27Nov18.balance.clock.static.g++.4 index 1348e396df..45bae5631f 100644 --- a/examples/balance/log.5Oct16.balance.clock.static.g++.4 +++ b/examples/balance/log.27Nov18.balance.clock.static.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000427961 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -36,13 +38,18 @@ group slow type 2 1400 atoms in group slow balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 - rebalancing time: 0.000463963 seconds + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000848055 seconds iteration count = 2 time weight factor: 1 initial/final max load/proc = 1200 1200 @@ -63,7 +70,7 @@ fix 1 all nve thermo 50 run 250 -Memory usage per processor = 2.77892 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.713 | 4.188 Mbytes Step Temp E_pair E_mol TotEng Press 0 1 -6.9453205 0 -5.4456955 -5.6812358 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 @@ -71,20 +78,20 @@ Step Temp E_pair E_mol TotEng Press 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.40211 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.50594 on 4 procs for 250 steps with 4000 atoms -Performance: 77026.670 tau/day, 178.302 timesteps/s -98.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 71716.080 tau/day, 166.009 timesteps/s +96.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.35738 | 0.65181 | 1.1696 | 41.3 | 46.49 -Neigh | 0.13196 | 0.17021 | 0.20914 | 7.5 | 12.14 -Comm | 0.034142 | 0.57176 | 0.88483 | 44.5 | 40.78 -Output | 0.0001142 | 0.0001266 | 0.00014806 | 0.1 | 0.01 -Modify | 0.0023732 | 0.0032824 | 0.0044029 | 1.3 | 0.23 -Other | | 0.004928 | | | 0.35 +Pair | 0.34764 | 0.66777 | 1.2288 | 43.4 | 44.34 +Neigh | 0.1594 | 0.20524 | 0.2451 | 7.5 | 13.63 +Comm | 0.039175 | 0.62421 | 0.93047 | 45.4 | 41.45 +Output | 0.00015855 | 0.00024235 | 0.00047231 | 0.0 | 0.02 +Modify | 0.0028908 | 0.0039527 | 0.0049407 | 1.2 | 0.26 +Other | | 0.004522 | | | 0.30 Nlocal: 1000 ave 1263 max 712 min Histogram: 1 0 0 0 1 0 1 0 0 1 @@ -98,16 +105,16 @@ Ave neighs/atom = 149.325 Neighbor list builds = 23 Dangerous builds = 0 balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000343084 seconds - iteration count = 5 + rebalancing time: 0.000421047 seconds + iteration count = 4 time weight factor: 1 - initial/final max load/proc = 1.35965 0.878579 - initial/final imbalance factor = 1.65405 1.06882 - x cuts: 0 0.304688 0.460938 0.634766 1 + initial/final max load/proc = 1.45871 0.956175 + initial/final imbalance factor = 1.6709 1.09526 + x cuts: 0 0.296875 0.453125 0.628906 1 y cuts: 0 1 z cuts: 0 1 run 250 -Memory usage per processor = 2.78273 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.787 | 3.907 | 4.192 Mbytes Step Temp E_pair E_mol TotEng Press 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 @@ -115,43 +122,43 @@ Step Temp E_pair E_mol TotEng Press 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 -Loop time of 1.06588 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.24397 on 4 procs for 250 steps with 4000 atoms -Performance: 101324.291 tau/day, 234.547 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 86819.073 tau/day, 200.970 timesteps/s +95.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.45977 | 0.64931 | 0.82184 | 17.0 | 60.92 -Neigh | 0.11586 | 0.17099 | 0.23942 | 12.5 | 16.04 -Comm | 0.10905 | 0.23692 | 0.35707 | 18.4 | 22.23 -Output | 0.00011897 | 0.00014734 | 0.00017262 | 0.2 | 0.01 -Modify | 0.0020723 | 0.0032738 | 0.0047829 | 2.0 | 0.31 -Other | | 0.005239 | | | 0.49 +Pair | 0.4612 | 0.67729 | 0.88321 | 20.9 | 54.45 +Neigh | 0.14175 | 0.20919 | 0.28903 | 13.7 | 16.82 +Comm | 0.19855 | 0.34785 | 0.48428 | 18.8 | 27.96 +Output | 0.00016665 | 0.00030792 | 0.00066757 | 0.0 | 0.02 +Modify | 0.0027177 | 0.0053391 | 0.010109 | 4.1 | 0.43 +Other | | 0.003992 | | | 0.32 -Nlocal: 1000 ave 1435 max 639 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8679.75 ave 9430 max 7994 min +Nlocal: 1000 ave 1462 max 652 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8657 ave 9421 max 7969 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 149356 ave 195930 max 106343 min Histogram: 1 1 0 0 0 0 0 1 0 1 -Neighs: 149356 ave 184268 max 102258 min -Histogram: 1 0 0 0 1 0 0 0 1 1 Total # of neighbors = 597424 Ave neighs/atom = 149.356 Neighbor list builds = 24 Dangerous builds = 0 balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000194073 seconds - iteration count = 4 + rebalancing time: 0.000288963 seconds + iteration count = 5 time weight factor: 1 - initial/final max load/proc = 0.948736 0.898491 - initial/final imbalance factor = 1.15657 1.09532 - x cuts: 0 0.314453 0.451172 0.602173 1 + initial/final max load/proc = 1.03814 0.978524 + initial/final imbalance factor = 1.17108 1.10383 + x cuts: 0 0.301758 0.448242 0.60144 1 y cuts: 0 1 z cuts: 0 1 run 250 -Memory usage per processor = 2.7999 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.804 | 3.927 | 4.209 Mbytes Step Temp E_pair E_mol TotEng Press 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 @@ -159,27 +166,27 @@ Step Temp E_pair E_mol TotEng Press 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 -Loop time of 1.02789 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.14445 on 4 procs for 250 steps with 4000 atoms -Performance: 105069.856 tau/day, 243.217 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 94368.537 tau/day, 218.446 timesteps/s +98.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.51012 | 0.64726 | 0.75553 | 11.2 | 62.97 -Neigh | 0.10374 | 0.17664 | 0.25597 | 15.7 | 17.19 -Comm | 0.10147 | 0.19583 | 0.28425 | 16.9 | 19.05 -Output | 0.00011802 | 0.000139 | 0.00015593 | 0.1 | 0.01 -Modify | 0.0017936 | 0.0032012 | 0.0047436 | 2.3 | 0.31 -Other | | 0.004817 | | | 0.47 +Pair | 0.52287 | 0.67351 | 0.79602 | 13.2 | 58.85 +Neigh | 0.14306 | 0.21848 | 0.31638 | 16.2 | 19.09 +Comm | 0.19457 | 0.24404 | 0.29562 | 7.2 | 21.32 +Output | 0.00016236 | 0.00029993 | 0.00065851 | 0.0 | 0.03 +Modify | 0.0024104 | 0.0038835 | 0.0057485 | 2.3 | 0.34 +Other | | 0.004232 | | | 0.37 -Nlocal: 1000 ave 1518 max 524 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Nghost: 8714.5 ave 9870 max 7980 min +Nlocal: 1000 ave 1522 max 593 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8754 ave 9866 max 8002 min Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149124 ave 173877 max 119242 min -Histogram: 1 0 0 1 0 0 0 1 0 1 +Neighs: 149124 ave 182694 max 120516 min +Histogram: 1 0 1 0 0 0 1 0 0 1 Total # of neighbors = 596497 Ave neighs/atom = 149.124 diff --git a/examples/balance/log.27Nov18.balance.g++.2 b/examples/balance/log.27Nov18.balance.g++.2 new file mode 100644 index 0000000000..6b0d0baa88 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.g++.2 @@ -0,0 +1,209 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style atomic +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box +Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + Time spent = 0.000478506 secs +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom c_1%10 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.061 | 3.065 | 3.07 Mbytes +Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -29.143179 -1.2407285 2 1.0193906 + 100 26.269576 -29.713313 7.9052334 1.1135734 1.0027701 + 200 26.368336 -29.809962 1.6412462 1.0803324 1.0027701 + 300 26.479082 -29.920083 2.3678653 1.1578947 1.0083102 + 400 26.522239 -29.965537 6.6787858 1.1578947 1.0083102 + 500 25.725591 -29.168034 0.67065285 1.1024931 1.0083102 + 600 26.247693 -29.692706 7.9887712 1.1301939 1.0027701 + 700 26.237368 -29.676926 1.5987214 1.1578947 1.0027701 + 800 25.889643 -29.431589 4.6160859 1.1523546 1.0027701 + 900 23.635295 -27.372963 9.029962 1.1468144 1.0027701 + 1000 22.571904 -25.87422 1.8936085 1.1191136 1.0083102 + 1100 17.493795 -21.447274 9.502619 1.0747922 1.0027701 + 1200 17.214459 -20.726965 6.3578919 1.0193906 1.0083102 + 1300 16.424217 -19.757401 3.9026861 1.0083102 1.0027701 + 1400 15.051731 -18.13464 1.7558146 1.0249307 1.0027701 + 1500 13.966718 -17.051915 1.4843674 1.0470914 1.0027701 + 1600 13.615641 -16.582695 1.7845355 1.0415512 1.0027701 + 1700 13.278822 -16.278248 1.8263176 1.0470914 1.0083102 + 1800 12.680841 -15.81089 2.0096239 1.0415512 1.0027701 + 1900 12.039167 -14.99225 1.4379549 1.0360111 1.0027701 + 2000 12.298923 -15.188233 1.6287319 1.0249307 1.0027701 + 2100 12.048347 -14.947484 1.0583787 1.0304709 1.0027701 + 2200 12.024664 -14.91864 1.0617555 1.0304709 1.0027701 + 2300 11.878263 -14.769923 1.2892425 1.0360111 1.0027701 + 2400 11.578448 -14.525725 1.2925126 1.0083102 1.0027701 + 2500 11.948793 -14.736647 1.5473169 1.0249307 1.0027701 + 2600 11.933924 -14.725605 1.3673896 1.0249307 1.0027701 + 2700 11.622855 -14.414518 1.3035925 1.0304709 1.0083102 + 2800 10.600538 -13.451379 1.3422508 1.0138504 1.0027701 + 2900 10.404739 -13.242902 1.3070821 1.0083102 1.0027701 + 3000 10.73199 -13.60699 0.92518136 1.0138504 1.0027701 + 3100 10.807664 -13.624775 1.3037969 1.0193906 1.0027701 + 3200 10.393964 -13.212022 0.72081929 1.0027701 1.0027701 + 3300 9.8733371 -12.65719 1.1606833 1.0138504 1.0027701 + 3400 9.6206594 -12.349773 0.69859994 1.0138504 1.0027701 + 3500 9.5882688 -12.32291 1.0028888 1.0138504 1.0027701 + 3600 9.693129 -12.441628 0.94751509 1.0193906 1.0083102 + 3700 9.3727837 -12.162354 1.9639195 1.0027701 1.0027701 + 3800 9.1011581 -11.860999 1.0253876 1.0083102 1.0027701 + 3900 8.6637799 -11.44226 1.4848652 1.0027701 1.0027701 + 4000 9.0454579 -11.770928 0.82719098 1.0083102 1.0083102 + 4100 8.5574492 -11.30614 0.82422479 1.0193906 1.0027701 + 4200 8.5903538 -11.322978 0.45091349 1.0027701 1.0027701 + 4300 8.540208 -11.282844 0.55403945 1.0027701 1.0027701 + 4400 7.7043293 -10.372194 0.80170046 1.0027701 1.0027701 + 4500 7.3429905 -9.9970461 0.77097228 1.0193906 1.0027701 + 4600 7.35485 -9.9992837 0.66531873 1.0027701 1.0027701 + 4700 7.3278467 -9.9885021 0.99577458 1.0193906 1.0027701 + 4800 7.8179777 -10.468758 0.56434522 1.0138504 1.0083102 + 4900 7.571002 -10.215558 0.81064116 1.0138504 1.0027701 + 5000 7.5326417 -10.224594 0.86387082 1.0083102 1.0027701 + 5100 7.8120521 -10.468885 0.86739094 1.0027701 1.0027701 + 5200 7.2949975 -10.041278 1.0298349 1.0027701 1.0027701 + 5300 7.6564811 -10.297993 0.71060925 1.0027701 1.0083102 + 5400 7.7359804 -10.373635 0.61872932 1.0027701 1.0083102 + 5500 7.6511513 -10.279058 0.87569767 1.0027701 1.0027701 + 5600 7.2927879 -9.9378811 1.1573049 1.0083102 1.0083102 + 5700 7.1836162 -9.8357325 0.43012076 1.0083102 1.0083102 + 5800 7.3405818 -9.9780947 0.69346928 1.0083102 1.0027701 + 5900 7.6636501 -10.323536 0.82554433 1.0027701 1.0027701 + 6000 7.3515582 -9.9803466 1.09521 1.0138504 1.0027701 + 6100 7.0275875 -9.6739554 0.48460922 1.0027701 1.0027701 + 6200 7.1449226 -9.7541904 0.83007096 1.0193906 1.0083102 + 6300 7.036185 -9.6445595 1.0982599 1.0193906 1.0027701 + 6400 7.1288989 -9.7501637 1.0103414 1.0138504 1.0027701 + 6500 6.6559525 -9.256798 0.58741228 1.0027701 1.0027701 + 6600 7.0559949 -9.6563848 0.53504661 1.0027701 1.0027701 + 6700 7.124289 -9.7613906 0.70816625 1.0027701 1.0027701 + 6800 7.0141849 -9.6298357 0.55987809 1.0083102 1.0027701 + 6900 6.8617323 -9.4376408 0.62371253 1.0193906 1.0083102 + 7000 6.7496366 -9.3379578 0.83540012 1.0027701 1.0083102 + 7100 7.0418565 -9.664915 0.68231111 1.0083102 1.0027701 + 7200 6.6175362 -9.2066737 0.31371885 1.0138504 1.0027701 + 7300 7.076179 -9.6917457 1.0827515 1.0083102 1.0027701 + 7400 6.5263123 -9.1321276 1.1892921 1.0027701 1.0027701 + 7500 6.8072952 -9.3976358 0.60458526 1.0138504 1.0027701 + 7600 6.610006 -9.1934492 0.54359615 1.0193906 1.0027701 + 7700 6.3533198 -8.943515 0.91970357 1.0138504 1.0027701 + 7800 6.7226774 -9.3164434 0.81151352 1.0027701 1.0083102 + 7900 6.2329222 -8.8531998 0.59439797 1.0083102 1.0027701 + 8000 6.5818943 -9.2025911 0.66303132 1.0083102 1.0027701 + 8100 6.372739 -8.9403406 0.81325975 1.0138504 1.0027701 + 8200 6.462003 -9.0346265 0.54917879 1.0083102 1.0027701 + 8300 6.5947825 -9.2171877 0.9005455 1.0027701 1.0027701 + 8400 6.7803374 -9.4179158 0.37270772 1.0027701 1.0027701 + 8500 6.7122886 -9.3363107 0.77011047 1.0083102 1.0027701 + 8600 6.8286386 -9.4264779 0.35815593 1.0027701 1.0027701 + 8700 6.4796483 -9.0676554 0.84568363 1.0138504 1.0027701 + 8800 6.551896 -9.1793668 1.0319947 1.0083102 1.0027701 + 8900 6.1879163 -8.7590749 0.34445309 1.0027701 1.0027701 + 9000 6.2374494 -8.7872159 0.46749314 1.0027701 1.0027701 + 9100 6.3605933 -8.9335681 0.86786624 1.0027701 1.0027701 + 9200 6.4387791 -9.0144583 0.56089061 1.0083102 1.0027701 + 9300 6.2745383 -8.9019836 0.58565081 1.0083102 1.0027701 + 9400 6.1957924 -8.7638279 0.65785826 1.0027701 1.0083102 + 9500 6.079287 -8.6556289 0.47532552 1.0083102 1.0027701 + 9600 6.7679205 -9.3427341 0.48539851 1.0083102 1.0027701 + 9700 6.4007616 -8.9753463 0.58689382 1.0138504 1.0027701 + 9800 6.2137021 -8.7670545 0.80327882 1.0249307 1.0027701 + 9900 6.063559 -8.6359278 0.34977555 1.0083102 1.0027701 + 10000 6.5604562 -9.1417599 0.49589297 1.0083102 1.0027701 +Loop time of 0.469504 on 2 procs for 10000 steps with 361 atoms + +Performance: 9201197.252 tau/day, 21299.068 timesteps/s +94.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.13648 | 0.14553 | 0.15459 | 2.4 | 31.00 +Neigh | 0.13867 | 0.14128 | 0.1439 | 0.7 | 30.09 +Comm | 0.05533 | 0.06494 | 0.07455 | 3.8 | 13.83 +Output | 0.0012147 | 0.0013802 | 0.0015457 | 0.4 | 0.29 +Modify | 0.071393 | 0.071421 | 0.07145 | 0.0 | 15.21 +Other | | 0.04494 | | | 9.57 + +Nlocal: 180.5 ave 181 max 180 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 30 ave 34 max 26 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 579.5 ave 644 max 515 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 1159 +Ave neighs/atom = 3.21053 +Neighbor list builds = 3510 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.g++.4 b/examples/balance/log.27Nov18.balance.g++.4 new file mode 100644 index 0000000000..7889eff888 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.g++.4 @@ -0,0 +1,209 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style atomic +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box +Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) + 2 by 2 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + Time spent = 0.000404358 secs +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom c_1%10 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.041 | 3.047 | 3.059 Mbytes +Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -29.143179 -1.2407285 3.2354571 1.0526316 + 100 26.269576 -29.713313 7.9052334 1.2742382 1.0304709 + 200 26.368336 -29.809962 1.6412462 1.2520776 1.0083102 + 300 26.479082 -29.920083 2.3678653 1.2299169 1.0193906 + 400 26.522239 -29.965537 6.6787858 1.1855956 1.0083102 + 500 25.725591 -29.168034 0.67065285 1.2520776 1.0193906 + 600 26.247693 -29.692706 7.9887712 1.3074792 1.0193906 + 700 26.237368 -29.676926 1.5987214 1.2409972 1.0083102 + 800 25.889643 -29.431589 4.6160859 1.2631579 1.0083102 + 900 23.635295 -27.372963 9.029962 1.1634349 1.0083102 + 1000 22.571904 -25.87422 1.8936085 1.1301939 1.0193906 + 1100 17.493795 -21.447274 9.502619 1.0858726 1.0193906 + 1200 17.214459 -20.726965 6.3578918 1.0304709 1.0083102 + 1300 16.42412 -19.757358 3.9027527 1.1191136 1.0193906 + 1400 15.030721 -18.114099 1.7564242 1.1523546 1.0193906 + 1500 13.81681 -16.902783 1.1577715 1.0858726 1.0083102 + 1600 13.686443 -16.661545 1.5415714 1.0969529 1.0083102 + 1700 13.019794 -16.066239 2.0360985 1.0526316 1.0083102 + 1800 12.297559 -15.3505 2.3411708 1.0858726 1.0083102 + 1900 12.279142 -15.287559 1.6641576 1.0415512 1.0083102 + 2000 12.230052 -15.192836 1.0975388 1.0415512 1.0193906 + 2100 11.697549 -14.599737 1.6237216 1.0969529 1.0083102 + 2200 11.682062 -14.610972 1.4641234 1.0747922 1.0083102 + 2300 11.075799 -13.986408 1.3034228 1.0637119 1.0083102 + 2400 11.362073 -14.290331 1.4934327 1.0304709 1.0083102 + 2500 11.100258 -14.006922 1.5476543 1.0415512 1.0193906 + 2600 11.12995 -14.013738 1.648208 1.0526316 1.0193906 + 2700 10.709161 -13.560172 1.396234 1.0193906 1.0083102 + 2800 10.827433 -13.654426 1.0691842 1.0304709 1.0083102 + 2900 10.653946 -13.622298 1.0985321 1.0304709 1.0083102 + 3000 10.277755 -13.110194 0.80184675 1.0304709 1.0083102 + 3100 9.9099809 -12.702359 1.0351594 1.0304709 1.0193906 + 3200 9.7539825 -12.558768 0.54465848 1.0526316 1.0083102 + 3300 10.126666 -12.949441 0.64914734 1.0304709 1.0083102 + 3400 9.5324496 -12.338741 1.2896056 1.0193906 1.0193906 + 3500 9.4041639 -12.170248 0.72157285 1.0304709 1.0083102 + 3600 9.2601291 -12.094438 1.1638062 1.0415512 1.0193906 + 3700 9.7052324 -12.503428 1.0681965 1.0193906 1.0193906 + 3800 9.1757619 -11.95576 1.2517655 1.0637119 1.0083102 + 3900 9.2622488 -12.036744 0.49874718 1.0193906 1.0083102 + 4000 8.8510215 -11.634558 1.0887428 1.0415512 1.0193906 + 4100 8.3821331 -11.145234 0.91008971 1.0193906 1.0083102 + 4200 8.2295054 -10.970304 0.5181043 1.0304709 1.0083102 + 4300 8.2161013 -10.942353 0.42128421 1.0304709 1.0193906 + 4400 7.7366945 -10.4592 0.79646198 1.0304709 1.0193906 + 4500 7.6089407 -10.446852 1.0059975 1.0083102 1.0193906 + 4600 7.6662499 -10.406613 1.7369986 1.0193906 1.0083102 + 4700 7.9515739 -10.665324 0.73173058 1.0193906 1.0083102 + 4800 7.7580664 -10.520311 1.1065958 1.0304709 1.0083102 + 4900 7.561205 -10.291568 0.97923495 1.0083102 1.0193906 + 5000 7.4169102 -10.130439 1.1566293 1.0193906 1.0193906 + 5100 7.5994418 -10.310725 1.1081236 1.0193906 1.0193906 + 5200 7.4637026 -10.211945 0.46308591 1.0193906 1.0083102 + 5300 7.5864081 -10.289039 0.55146387 1.0415512 1.0083102 + 5400 7.2190688 -9.8943729 0.56255805 1.0193906 1.0193906 + 5500 7.3953465 -10.112294 0.49166363 1.0193906 1.0193906 + 5600 7.3584536 -10.027488 0.69227871 1.0193906 1.0193906 + 5700 6.932639 -9.6121874 0.67344283 1.0304709 1.0083102 + 5800 7.088604 -9.7715725 0.20307999 1.0193906 1.0193906 + 5900 6.9761247 -9.6446998 0.90406994 1.0083102 1.0083102 + 6000 6.8763621 -9.5236579 0.57873884 1.0415512 1.0083102 + 6100 6.939987 -9.5929188 0.36904108 1.0304709 1.0083102 + 6200 6.820038 -9.4635599 0.63193653 1.0304709 1.0083102 + 6300 6.8288347 -9.4833639 0.41971515 1.0415512 1.0304709 + 6400 6.8690672 -9.5446244 1.0201589 1.0415512 1.0193906 + 6500 6.4727631 -9.1148404 0.80775699 1.0193906 1.0193906 + 6600 6.7113328 -9.3554765 0.61684835 1.0083102 1.0083102 + 6700 6.5896516 -9.2696941 0.58593745 1.0526316 1.0193906 + 6800 6.5609717 -9.2314045 1.2897992 1.0193906 1.0083102 + 6900 6.6225137 -9.2809347 0.47677707 1.0415512 1.0083102 + 7000 6.6617661 -9.3147214 0.72415312 1.0304709 1.0193906 + 7100 6.5773856 -9.2843036 0.7800794 1.0304709 1.0083102 + 7200 6.7300254 -9.4233488 0.73403634 1.0193906 1.0193906 + 7300 6.8497011 -9.4992354 0.97755826 1.0304709 1.0193906 + 7400 6.5848304 -9.2649536 0.89449647 1.0526316 1.0193906 + 7500 6.6468599 -9.3004561 0.53259674 1.0304709 1.0083102 + 7600 6.7096387 -9.3824628 0.40095675 1.0193906 1.0083102 + 7700 6.6205931 -9.2612947 0.44113095 1.0083102 1.0083102 + 7800 6.444935 -9.073124 0.47355329 1.0193906 1.0083102 + 7900 6.6143353 -9.2763501 0.57936627 1.0193906 1.0083102 + 8000 6.5718284 -9.2099799 0.88048189 1.0637119 1.0083102 + 8100 6.9155381 -9.5644544 0.36029314 1.0415512 1.0083102 + 8200 6.4217261 -9.0582117 0.4577164 1.0193906 1.0193906 + 8300 6.4639521 -9.0911283 0.50560328 1.0193906 1.0193906 + 8400 6.2047897 -8.8357836 0.71150301 1.0083102 1.0083102 + 8500 6.5688691 -9.2701491 0.5963871 1.0193906 1.0083102 + 8600 6.6803448 -9.3311473 0.47008064 1.0304709 1.0083102 + 8700 6.4794219 -9.1136868 0.97764575 1.0193906 1.0193906 + 8800 6.3899651 -9.0655629 0.72557611 1.0083102 1.0193906 + 8900 6.4446062 -9.1121453 0.53050589 1.0193906 1.0083102 + 9000 6.7012614 -9.3365992 0.63041848 1.0415512 1.0083102 + 9100 6.3982388 -9.0510004 0.34575359 1.0415512 1.0083102 + 9200 6.9775773 -9.6647109 0.97993232 1.0304709 1.0193906 + 9300 6.5504231 -9.2113542 0.58697844 1.0193906 1.0193906 + 9400 6.6900283 -9.3954145 0.40867465 1.0083102 1.0193906 + 9500 6.3553229 -8.9965934 0.60133843 1.0526316 1.0193906 + 9600 6.4861076 -9.1404384 1.0033387 1.0193906 1.0193906 + 9700 6.469481 -9.1202491 0.85523385 1.0083102 1.0193906 + 9800 6.5508552 -9.188341 0.6068644 1.0304709 1.0083102 + 9900 6.4355199 -9.1044882 0.83288252 1.0304709 1.0193906 + 10000 6.4850092 -9.1433721 0.58691238 1.0193906 1.0193906 +Loop time of 0.418243 on 4 procs for 10000 steps with 361 atoms + +Performance: 10328920.895 tau/day, 23909.539 timesteps/s +87.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.062269 | 0.073833 | 0.096031 | 4.9 | 17.65 +Neigh | 0.066658 | 0.072882 | 0.084956 | 2.7 | 17.43 +Comm | 0.10814 | 0.13013 | 0.14677 | 4.4 | 31.11 +Output | 0.0015733 | 0.0017747 | 0.0023153 | 0.7 | 0.42 +Modify | 0.060045 | 0.060904 | 0.061674 | 0.3 | 14.56 +Other | | 0.07872 | | | 18.82 + +Nlocal: 90.25 ave 92 max 89 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 33.25 ave 57 max 13 min +Histogram: 1 0 0 0 2 0 0 0 0 1 +Neighs: 309.25 ave 496 max 125 min +Histogram: 1 0 0 1 0 0 1 0 0 1 + +Total # of neighbors = 1237 +Ave neighs/atom = 3.42659 +Neighbor list builds = 3620 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 new file mode 100644 index 0000000000..b88593b718 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 @@ -0,0 +1,110 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000552893 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000512123 seconds + iteration count = 1 + group weights: fast=1 slow=1 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.437 | 4.628 | 4.819 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 +Loop time of 1.95661 on 2 procs for 250 steps with 4000 atoms + +Performance: 55197.383 tau/day, 127.772 timesteps/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.0628 | 1.263 | 1.4632 | 17.8 | 64.55 +Neigh | 0.42332 | 0.43486 | 0.44639 | 1.7 | 22.22 +Comm | 0.033167 | 0.2449 | 0.45664 | 42.8 | 12.52 +Output | 0.00015879 | 0.00017142 | 0.00018406 | 0.0 | 0.01 +Modify | 0.010039 | 0.010042 | 0.010045 | 0.0 | 0.51 +Other | | 0.003658 | | | 0.19 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10441 ave 10457 max 10425 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 349156 max 247508 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/balance/log.5Oct16.balance.group.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.group.dynamic.g++.4 similarity index 73% rename from examples/balance/log.5Oct16.balance.group.dynamic.g++.4 rename to examples/balance/log.27Nov18.balance.group.dynamic.g++.4 index b7b893e5fd..ec6fc449c4 100644 --- a/examples/balance/log.5Oct16.balance.group.dynamic.g++.4 +++ b/examples/balance/log.27Nov18.balance.group.dynamic.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000427008 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -37,13 +39,18 @@ group slow type 2 balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 - rebalancing time: 0.000472069 seconds + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000735044 seconds iteration count = 2 group weights: fast=1 slow=1 initial/final max load/proc = 1200 1200 @@ -66,7 +73,7 @@ fix 1 all nve thermo 50 run 250 -Memory usage per processor = 2.9192 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.566 | 3.947 | 4.329 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 @@ -74,20 +81,20 @@ Step Temp E_pair E_mol TotEng Press Volume 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 -Loop time of 1.40299 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.48981 on 4 procs for 250 steps with 4000 atoms -Performance: 76978.657 tau/day, 178.191 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 72492.623 tau/day, 167.807 timesteps/s +96.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.22572 | 0.65681 | 1.1571 | 45.2 | 46.82 -Neigh | 0.16769 | 0.18555 | 0.20139 | 3.0 | 13.23 -Comm | 0.033973 | 0.55042 | 0.99983 | 51.1 | 39.23 -Output | 0.00012207 | 0.00013012 | 0.00014353 | 0.1 | 0.01 -Modify | 0.0053966 | 0.0054266 | 0.0054569 | 0.0 | 0.39 -Other | | 0.004645 | | | 0.33 +Pair | 0.22803 | 0.67101 | 1.1622 | 43.7 | 45.04 +Neigh | 0.20611 | 0.2259 | 0.23756 | 2.5 | 15.16 +Comm | 0.085412 | 0.58198 | 1.045 | 47.7 | 39.06 +Output | 0.00016332 | 0.00028861 | 0.0006516 | 0.0 | 0.02 +Modify | 0.0069213 | 0.0070978 | 0.0072331 | 0.1 | 0.48 +Other | | 0.003534 | | | 0.24 Nlocal: 1000 ave 1001 max 999 min Histogram: 1 0 0 0 0 2 0 0 0 1 diff --git a/examples/balance/log.27Nov18.balance.group.static.g++.2 b/examples/balance/log.27Nov18.balance.group.static.g++.2 new file mode 100644 index 0000000000..eb7a506e2c --- /dev/null +++ b/examples/balance/log.27Nov18.balance.group.static.g++.2 @@ -0,0 +1,146 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.00050807 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 5 1.1 # out unweighted.txt +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000545979 seconds + iteration count = 1 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform + rebalancing time: 0.000159502 seconds + iteration count = 0 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +variable weight atom (type==1)*1.0+(type==2)*v_factor +balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt + rebalancing time: 0.000320673 seconds + iteration count = 1 + weight variable: weight + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform + rebalancing time: 0.000132561 seconds + iteration count = 0 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 + rebalancing time: 0.000235796 seconds + iteration count = 1 + group weights: fast=1 slow=1 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 1.99136 on 2 procs for 250 steps with 4000 atoms + +Performance: 54234.216 tau/day, 125.542 timesteps/s +99.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.0081 | 1.262 | 1.5159 | 22.6 | 63.37 +Neigh | 0.40357 | 0.41713 | 0.43069 | 2.1 | 20.95 +Comm | 0.033287 | 0.30076 | 0.56822 | 48.8 | 15.10 +Output | 0.00014162 | 0.00015128 | 0.00016093 | 0.0 | 0.01 +Modify | 0.0072243 | 0.0073462 | 0.007468 | 0.1 | 0.37 +Other | | 0.003961 | | | 0.20 + +Nlocal: 2000 ave 2051 max 1949 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10443 ave 10506 max 10380 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 363449 max 233215 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 24 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/balance/log.5Oct16.balance.group.static.g++.4 b/examples/balance/log.27Nov18.balance.group.static.g++.4 similarity index 74% rename from examples/balance/log.5Oct16.balance.group.static.g++.4 rename to examples/balance/log.27Nov18.balance.group.static.g++.4 index be7a8dfc28..d792f1af93 100644 --- a/examples/balance/log.5Oct16.balance.group.static.g++.4 +++ b/examples/balance/log.27Nov18.balance.group.static.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000426769 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -32,13 +34,18 @@ neigh_modify every 2 delay 4 check yes balance 1.0 shift x 5 1.1 # out unweighted.txt Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 - rebalancing time: 0.00113606 seconds + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000867605 seconds iteration count = 2 initial/final max load/proc = 1200 1200 initial/final imbalance factor = 1.2 1.2 @@ -47,7 +54,7 @@ Neighbor list info ... z cuts: 0 1 balance 1.0 x uniform - rebalancing time: 0.00050211 seconds + rebalancing time: 0.000295401 seconds iteration count = 0 initial/final max load/proc = 1200 1200 initial/final imbalance factor = 1.2 1.2 @@ -57,7 +64,7 @@ balance 1.0 x uniform variable weight atom (type==1)*1.0+(type==2)*v_factor balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt - rebalancing time: 0.000926018 seconds + rebalancing time: 0.000428915 seconds iteration count = 2 weight variable: weight initial/final max load/proc = 1200 1200 @@ -67,7 +74,7 @@ balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt z cuts: 0 1 balance 1.0 x uniform - rebalancing time: 0.000455856 seconds + rebalancing time: 0.000236273 seconds iteration count = 0 initial/final max load/proc = 1200 1200 initial/final imbalance factor = 1.2 1.2 @@ -81,7 +88,7 @@ group slow type 2 1400 atoms in group slow balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 - rebalancing time: 0.00071907 seconds + rebalancing time: 0.000319958 seconds iteration count = 2 group weights: fast=1 slow=1 initial/final max load/proc = 1200 1200 @@ -102,7 +109,7 @@ fix 1 all nve thermo 50 run 250 -Memory usage per processor = 2.77892 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.713 | 4.188 Mbytes Step Temp E_pair E_mol TotEng Press 0 1 -6.9453205 0 -5.4456955 -5.6812358 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 @@ -110,20 +117,20 @@ Step Temp E_pair E_mol TotEng Press 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.42478 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.45972 on 4 procs for 250 steps with 4000 atoms -Performance: 75800.979 tau/day, 175.465 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 73986.752 tau/day, 171.266 timesteps/s +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.35155 | 0.65282 | 1.1868 | 42.1 | 45.82 -Neigh | 0.12951 | 0.16927 | 0.20492 | 7.4 | 11.88 -Comm | 0.03706 | 0.59419 | 0.90483 | 44.8 | 41.70 -Output | 0.00011921 | 0.00013947 | 0.00015664 | 0.1 | 0.01 -Modify | 0.0023413 | 0.0032853 | 0.0043154 | 1.2 | 0.23 -Other | | 0.005085 | | | 0.36 +Pair | 0.34936 | 0.66325 | 1.1729 | 40.9 | 45.44 +Neigh | 0.15811 | 0.20835 | 0.24806 | 7.4 | 14.27 +Comm | 0.04955 | 0.57875 | 0.86745 | 43.6 | 39.65 +Output | 0.00015831 | 0.00028872 | 0.00064492 | 0.0 | 0.02 +Modify | 0.0030367 | 0.0040676 | 0.0050561 | 1.1 | 0.28 +Other | | 0.005014 | | | 0.34 Nlocal: 1000 ave 1263 max 712 min Histogram: 1 0 0 0 1 0 1 0 0 1 diff --git a/examples/balance/log.27Nov18.balance.kspace.g++.2 b/examples/balance/log.27Nov18.balance.kspace.g++.2 new file mode 100644 index 0000000000..13e24ed17a --- /dev/null +++ b/examples/balance/log.27Nov18.balance.kspace.g++.2 @@ -0,0 +1,117 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +#atom_style charge +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000510931 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type +#set type 1:2 charge 0.0 + +velocity all create 1.0 87287 + +pair_style lj/long/coul/long long off 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +kspace_style pppm/disp 1.0e-4 +kspace_modify gewald/disp 0.1 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +fix 0 all balance 20 1.0 shift x 5 1.0 weight group 2 fast 1.0 slow 2.0 weight time 0.66 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +PPPMDisp initialization ... + Dispersion G vector (1/distance) = 0.1 + Dispersion grid = 2 2 2 + Dispersion stencil order = 5 + Dispersion estimated absolute RMS force accuracy = 1.01251 + Dispersion estimated absolute real space RMS force accuracy = 1.01251 + Dispersion estimated absolute kspace RMS force accuracy = 7.29446e-07 + Disperion estimated relative force accuracy = 1.01251 + using double precision FFTs + 3d grid and FFT values/proc dispersion = 294 4 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/long/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.846 | 5.014 | 5.182 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 52.148338 0 53.647963 94.09503 4738.2137 + 50 17.747599 42.836975 0 69.451719 143.44398 4738.2137 + 100 9.0390947 49.78615 0 63.341402 117.79296 4738.2137 + 150 13.456072 47.810527 0 67.989589 140.52068 4738.2137 + 200 11.358932 52.542448 0 69.576586 142.87196 4738.2137 + 250 13.204593 48.601437 0 68.403375 134.97484 4738.2137 + 300 12.061996 50.642194 0 68.730665 133.27077 4738.2137 + 350 14.107163 50.201375 0 71.356829 143.54662 4738.2137 + 400 12.053939 50.221116 0 68.297504 132.01999 4738.2137 + 450 13.523963 50.829687 0 71.11056 143.8183 4738.2137 + 500 13.135822 50.150114 0 69.848921 137.26364 4738.2137 +Loop time of 6.95261 on 2 procs for 500 steps with 4000 atoms + +Performance: 31067.471 tau/day, 71.915 timesteps/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.8521 | 3.0997 | 3.3472 | 14.1 | 44.58 +Kspace | 1.1859 | 1.303 | 1.4202 | 10.3 | 18.74 +Neigh | 2.2324 | 2.387 | 2.5417 | 10.0 | 34.33 +Comm | 0.1003 | 0.12513 | 0.14996 | 7.0 | 1.80 +Output | 0.00033641 | 0.00036693 | 0.00039744 | 0.0 | 0.01 +Modify | 0.026408 | 0.02737 | 0.028331 | 0.6 | 0.39 +Other | | 0.009989 | | | 0.14 + +Nlocal: 2000 ave 2316 max 1684 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 9543.5 ave 9675 max 9412 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 254445 ave 276022 max 232868 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 508890 +Ave neighs/atom = 127.222 +Neighbor list builds = 124 +Dangerous builds = 97 +Total wall time: 0:00:06 diff --git a/examples/balance/log.5Oct16.balance.kspace.g++.4 b/examples/balance/log.27Nov18.balance.kspace.g++.4 similarity index 58% rename from examples/balance/log.5Oct16.balance.kspace.g++.4 rename to examples/balance/log.27Nov18.balance.kspace.g++.4 index 0a98c0d14f..7745b3e602 100644 --- a/examples/balance/log.5Oct16.balance.kspace.g++.4 +++ b/examples/balance/log.27Nov18.balance.kspace.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000432491 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -61,50 +63,55 @@ PPPMDisp initialization ... using double precision FFTs 3d grid and FFT values/proc dispersion = 294 4 Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 -Memory usage per processor = 3.32692 Mbytes + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/long/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.291 | 4.423 | 4.656 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 52.148338 0 53.647963 94.09503 4738.2137 50 17.850656 42.620113 0 69.389403 142.80556 4738.2137 100 9.4607189 49.700118 0 63.887649 117.51739 4738.2137 150 13.992056 47.731988 0 68.714825 140.56926 4738.2137 - 200 11.617635 52.509395 0 69.931491 142.6933 4738.2137 - 250 13.536262 48.330072 0 68.629389 133.91619 4738.2137 - 300 12.619739 50.32635 0 69.251226 132.46483 4738.2137 - 350 14.513905 50.104058 0 71.869473 143.37708 4738.2137 - 400 12.410226 49.786147 0 68.396832 130.38693 4738.2137 - 450 13.812498 51.076195 0 71.789763 144.8252 4738.2137 - 500 13.278792 50.270368 0 70.183575 136.8547 4738.2137 -Loop time of 5.24456 on 4 procs for 500 steps with 4000 atoms + 200 11.617635 52.509394 0 69.93149 142.6933 4738.2137 + 250 13.536287 48.33108 0 68.630434 133.91794 4738.2137 + 300 12.619985 50.328139 0 69.253384 132.46719 4738.2137 + 350 14.497923 50.092405 0 71.833853 143.39356 4738.2137 + 400 12.228079 50.202361 0 68.539894 131.75614 4738.2137 + 450 14.01349 50.908526 0 71.923506 144.25732 4738.2137 + 500 13.277341 50.381613 0 70.292644 137.20282 4738.2137 +Loop time of 6.17838 on 4 procs for 500 steps with 4000 atoms -Performance: 41185.531 tau/day, 95.337 timesteps/s -98.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 34960.628 tau/day, 80.927 timesteps/s +93.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.64469 | 1.5898 | 2.5249 | 68.8 | 30.31 -Kspace | 0.63052 | 2.3872 | 3.9848 | 97.6 | 45.52 -Neigh | 0.2153 | 0.986 | 1.9625 | 76.8 | 18.80 -Comm | 0.094079 | 0.25333 | 0.3749 | 23.9 | 4.83 -Output | 0.0002811 | 0.00035048 | 0.00040078 | 0.3 | 0.01 -Modify | 0.013268 | 0.016651 | 0.021077 | 2.6 | 0.32 -Other | | 0.01122 | | | 0.21 +Pair | 0.74813 | 1.6453 | 2.5052 | 65.7 | 26.63 +Kspace | 1.036 | 2.9098 | 4.5974 | 94.8 | 47.10 +Neigh | 0.27464 | 1.2099 | 2.4155 | 84.8 | 19.58 +Comm | 0.1711 | 0.36843 | 0.5217 | 25.2 | 5.96 +Output | 0.00052595 | 0.0053349 | 0.0074508 | 3.8 | 0.09 +Modify | 0.023363 | 0.027308 | 0.032521 | 2.3 | 0.44 +Other | | 0.01228 | | | 0.20 -Nlocal: 1000 ave 2010 max 228 min +Nlocal: 1000 ave 2002 max 241 min Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 7559.75 ave 9255 max 5915 min +Nghost: 7608 ave 9312 max 5850 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 127415 ave 215720 max 45292 min +Neighs: 127345 ave 211903 max 47616 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Total # of neighbors = 509660 -Ave neighs/atom = 127.415 +Total # of neighbors = 509381 +Ave neighs/atom = 127.345 Neighbor list builds = 124 Dangerous builds = 97 -Total wall time: 0:00:05 +Total wall time: 0:00:06 diff --git a/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 new file mode 100644 index 0000000000..aef8d90889 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 @@ -0,0 +1,228 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000553608 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mp4 c_p type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 amap 0.0 2.0 cf 0.1 3 min blue 0.5 green max red + +thermo 50 +run 500 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 4.562 | 4.753 | 4.944 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 3.92718 on 2 procs for 500 steps with 4000 atoms + +Performance: 55001.290 tau/day, 127.318 timesteps/s +99.2% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.2902 | 2.6102 | 2.9303 | 19.8 | 66.47 +Neigh | 0.89715 | 0.89718 | 0.8972 | 0.0 | 22.85 +Comm | 0.074355 | 0.39408 | 0.7138 | 50.9 | 10.03 +Output | 0.0003202 | 0.00035989 | 0.00039959 | 0.0 | 0.01 +Modify | 0.016438 | 0.016832 | 0.017226 | 0.3 | 0.43 +Other | | 0.008523 | | | 0.22 + +Nlocal: 2000 ave 2056 max 1944 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10457.5 ave 10508 max 10407 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 333007 max 263132 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.035 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 +Loop time of 3.83028 on 2 procs for 500 steps with 4000 atoms + +Performance: 56392.741 tau/day, 130.539 timesteps/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.263 | 2.5605 | 2.858 | 18.6 | 66.85 +Neigh | 0.8789 | 0.88341 | 0.88791 | 0.5 | 23.06 +Comm | 0.068052 | 0.36076 | 0.65347 | 48.7 | 9.42 +Output | 0.0003016 | 0.0003438 | 0.000386 | 0.0 | 0.01 +Modify | 0.016381 | 0.016829 | 0.017277 | 0.3 | 0.44 +Other | | 0.008426 | | | 0.22 + +Nlocal: 2000 ave 2049 max 1951 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10389 ave 10436 max 10342 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 335987 max 265684 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.418 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 + 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 + 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 + 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 + 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 +Loop time of 3.81946 on 2 procs for 500 steps with 4000 atoms + +Performance: 56552.445 tau/day, 130.908 timesteps/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.2594 | 2.5549 | 2.8504 | 18.5 | 66.89 +Neigh | 0.86746 | 0.87203 | 0.8766 | 0.5 | 22.83 +Comm | 0.06715 | 0.36699 | 0.66684 | 49.5 | 9.61 +Output | 0.00029325 | 0.00033867 | 0.00038409 | 0.0 | 0.01 +Modify | 0.016529 | 0.016817 | 0.017105 | 0.2 | 0.44 +Other | | 0.008371 | | | 0.22 + +Nlocal: 2000 ave 2034 max 1966 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10386 ave 10936 max 9836 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 302958 ave 337188 max 268729 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 605917 +Ave neighs/atom = 151.479 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 + 1550 0.53713593 -6.2504069 0 -5.4449044 -1.764709 4738.2137 + 1600 0.54679556 -6.2646482 0 -5.4446599 -1.8115775 4738.2137 + 1650 0.53806577 -6.2519006 0 -5.4450037 -1.7409142 4738.2137 + 1700 0.5347951 -6.2468962 0 -5.4449041 -1.7162331 4738.2137 + 1750 0.53714568 -6.2506577 0 -5.4451406 -1.7340499 4738.2137 + 1800 0.52749839 -6.2358664 0 -5.4448167 -1.6874961 4738.2137 + 1850 0.54585956 -6.2629394 0 -5.4443547 -1.7758764 4738.2137 + 1900 0.53010831 -6.2387561 0 -5.4437925 -1.6381825 4738.2137 + 1950 0.54288557 -6.2583073 0 -5.4441826 -1.7368524 4738.2137 + 2000 0.52765923 -6.2348572 0 -5.4435663 -1.5588839 4738.2137 +Loop time of 3.78423 on 2 procs for 500 steps with 4000 atoms + +Performance: 57078.976 tau/day, 132.127 timesteps/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.2449 | 2.5388 | 2.8328 | 18.4 | 67.09 +Neigh | 0.85527 | 0.85828 | 0.86129 | 0.3 | 22.68 +Comm | 0.065453 | 0.36215 | 0.65885 | 49.3 | 9.57 +Output | 0.00030518 | 0.00032794 | 0.00035071 | 0.0 | 0.01 +Modify | 0.016444 | 0.016597 | 0.01675 | 0.1 | 0.44 +Other | | 0.008044 | | | 0.21 + +Nlocal: 2000 ave 2031 max 1969 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10334 ave 10921 max 9747 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 303988 ave 338808 max 269168 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 607976 +Ave neighs/atom = 151.994 +Neighbor list builds = 51 +Dangerous builds = 0 + +Total wall time: 0:00:15 diff --git a/examples/balance/log.5Oct16.balance.neigh.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 similarity index 71% rename from examples/balance/log.5Oct16.balance.neigh.dynamic.g++.4 rename to examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 index 979da10e6c..08a59785d4 100644 --- a/examples/balance/log.5Oct16.balance.neigh.dynamic.g++.4 +++ b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000430107 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -51,14 +53,19 @@ fix 1 all nve thermo 50 run 500 Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 -WARNING: Balance weight neigh skipped b/c no list found (../imbalance_neigh.cpp:67) -Memory usage per processor = 3.0442 Mbytes + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 3.691 | 4.072 | 4.454 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 @@ -71,20 +78,20 @@ Step Temp E_pair E_mol TotEng Press Volume 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 2.30888 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.45924 on 4 procs for 500 steps with 4000 atoms -Performance: 93551.974 tau/day, 216.555 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 87831.985 tau/day, 203.315 timesteps/s +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.0928 | 1.4128 | 1.6873 | 21.3 | 61.19 -Neigh | 0.26037 | 0.38342 | 0.55053 | 20.2 | 16.61 -Comm | 0.33912 | 0.49342 | 0.644 | 18.3 | 21.37 -Output | 0.00029206 | 0.00033247 | 0.00037789 | 0.2 | 0.01 -Modify | 0.0062437 | 0.0082552 | 0.010971 | 2.2 | 0.36 -Other | | 0.01067 | | | 0.46 +Pair | 1.1372 | 1.4179 | 1.6656 | 18.1 | 57.66 +Neigh | 0.30681 | 0.46841 | 0.69372 | 24.1 | 19.05 +Comm | 0.46019 | 0.55206 | 0.6052 | 7.7 | 22.45 +Output | 0.00034404 | 0.0005753 | 0.001132 | 0.0 | 0.02 +Modify | 0.007339 | 0.0099927 | 0.013719 | 2.7 | 0.41 +Other | | 0.01029 | | | 0.42 Nlocal: 1000 ave 1549 max 605 min Histogram: 2 0 0 0 0 0 1 0 0 1 @@ -98,7 +105,7 @@ Ave neighs/atom = 149.308 Neighbor list builds = 50 Dangerous builds = 0 run 500 -Memory usage per processor = 3.06519 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes Step Temp E_pair E_mol TotEng Press Volume 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 @@ -111,20 +118,20 @@ Step Temp E_pair E_mol TotEng Press Volume 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 -Loop time of 2.16949 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.389 on 4 procs for 500 steps with 4000 atoms -Performance: 99562.401 tau/day, 230.469 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 90414.542 tau/day, 209.293 timesteps/s +97.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1466 | 1.3644 | 1.5476 | 15.2 | 62.89 -Neigh | 0.25492 | 0.38744 | 0.57253 | 22.1 | 17.86 -Comm | 0.34836 | 0.39805 | 0.45037 | 6.7 | 18.35 -Output | 0.00028539 | 0.00031531 | 0.00037646 | 0.2 | 0.01 -Modify | 0.0060055 | 0.008239 | 0.011282 | 2.5 | 0.38 -Other | | 0.01107 | | | 0.51 +Pair | 1.2112 | 1.381 | 1.5214 | 11.0 | 57.81 +Neigh | 0.29746 | 0.48382 | 0.74669 | 27.5 | 20.25 +Comm | 0.40449 | 0.50032 | 0.57922 | 9.4 | 20.94 +Output | 0.00033617 | 0.00064272 | 0.0013907 | 0.0 | 0.03 +Modify | 0.0070128 | 0.010942 | 0.015494 | 3.7 | 0.46 +Other | | 0.01223 | | | 0.51 Nlocal: 1000 ave 1569 max 595 min Histogram: 2 0 0 0 0 0 1 0 0 1 @@ -138,7 +145,7 @@ Ave neighs/atom = 150.169 Neighbor list builds = 53 Dangerous builds = 0 run 500 -Memory usage per processor = 3.06519 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes Step Temp E_pair E_mol TotEng Press Volume 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 @@ -151,20 +158,20 @@ Step Temp E_pair E_mol TotEng Press Volume 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 -Loop time of 2.17283 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.45895 on 4 procs for 500 steps with 4000 atoms -Performance: 99409.423 tau/day, 230.114 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 87842.291 tau/day, 203.339 timesteps/s +95.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1581 | 1.3768 | 1.574 | 15.8 | 63.37 -Neigh | 0.24753 | 0.3727 | 0.54533 | 21.2 | 17.15 -Comm | 0.33306 | 0.40373 | 0.47481 | 9.3 | 18.58 -Output | 0.00036979 | 0.0003832 | 0.00039721 | 0.0 | 0.02 -Modify | 0.0059896 | 0.0082257 | 0.011168 | 2.5 | 0.38 -Other | | 0.01095 | | | 0.50 +Pair | 1.2592 | 1.4017 | 1.5327 | 11.0 | 57.01 +Neigh | 0.28831 | 0.47661 | 0.75988 | 28.7 | 19.38 +Comm | 0.41426 | 0.54907 | 0.6044 | 10.6 | 22.33 +Output | 0.0003705 | 0.00060898 | 0.0012109 | 0.0 | 0.02 +Modify | 0.014004 | 0.016774 | 0.020669 | 1.9 | 0.68 +Other | | 0.01415 | | | 0.58 Nlocal: 1000 ave 1543 max 605 min Histogram: 2 0 0 0 0 0 1 0 0 1 @@ -178,7 +185,7 @@ Ave neighs/atom = 150.494 Neighbor list builds = 51 Dangerous builds = 0 run 500 -Memory usage per processor = 3.06519 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes Step Temp E_pair E_mol TotEng Press Volume 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 1550 0.55327018 -6.2750126 0 -5.4453148 -1.9506585 4738.2137 @@ -191,20 +198,20 @@ Step Temp E_pair E_mol TotEng Press Volume 1900 0.53992511 -6.254136 0 -5.4444508 -1.7768715 4738.2137 1950 0.54665895 -6.2640958 0 -5.4443124 -1.7946993 4738.2137 2000 0.5455751 -6.2625337 0 -5.4443756 -1.8072242 4738.2137 -Loop time of 2.20474 on 4 procs for 500 steps with 4000 atoms +Loop time of 2.42708 on 4 procs for 500 steps with 4000 atoms -Performance: 97970.946 tau/day, 226.785 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 88995.678 tau/day, 206.009 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1731 | 1.3783 | 1.5498 | 14.7 | 62.51 -Neigh | 0.26429 | 0.40654 | 0.59777 | 22.6 | 18.44 -Comm | 0.36731 | 0.40043 | 0.44935 | 5.2 | 18.16 -Output | 0.00030565 | 0.00033122 | 0.00039625 | 0.2 | 0.02 -Modify | 0.0059974 | 0.008266 | 0.01132 | 2.6 | 0.37 -Other | | 0.01088 | | | 0.49 +Pair | 1.2482 | 1.3902 | 1.5329 | 10.6 | 57.28 +Neigh | 0.31099 | 0.50813 | 0.78451 | 28.1 | 20.94 +Comm | 0.37293 | 0.5011 | 0.58684 | 11.2 | 20.65 +Output | 0.00033593 | 0.00060582 | 0.0012991 | 0.0 | 0.02 +Modify | 0.007091 | 0.0097566 | 0.013303 | 2.7 | 0.40 +Other | | 0.01727 | | | 0.71 Nlocal: 1000 ave 1539 max 607 min Histogram: 2 0 0 0 0 0 1 0 0 1 @@ -218,4 +225,4 @@ Ave neighs/atom = 151.655 Neighbor list builds = 56 Dangerous builds = 0 -Total wall time: 0:00:08 +Total wall time: 0:00:09 diff --git a/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 new file mode 100644 index 0000000000..42b04f818c --- /dev/null +++ b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 @@ -0,0 +1,141 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000511885 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +comm_style tiled + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 rcb weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 + +run 250 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 4.138 | 4.329 | 4.52 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 +Loop time of 1.80309 on 2 procs for 250 steps with 4000 atoms + +Performance: 59897.213 tau/day, 138.651 timesteps/s +97.9% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2185 | 1.2646 | 1.3106 | 4.1 | 70.13 +Neigh | 0.43131 | 0.43248 | 0.43365 | 0.2 | 23.99 +Comm | 0.045418 | 0.090311 | 0.1352 | 14.9 | 5.01 +Output | 0.00017476 | 0.00021195 | 0.00024915 | 0.0 | 0.01 +Modify | 0.011012 | 0.01103 | 0.011048 | 0.0 | 0.61 +Other | | 0.004476 | | | 0.25 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10412.5 ave 10414 max 10411 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 299797 max 296867 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 25 +Dangerous builds = 0 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.929 | 4.929 | 4.93 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 1.77097 on 2 procs for 250 steps with 4000 atoms + +Performance: 60983.669 tau/day, 141.166 timesteps/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2353 | 1.2515 | 1.2678 | 1.5 | 70.67 +Neigh | 0.44235 | 0.44303 | 0.44371 | 0.1 | 25.02 +Comm | 0.045978 | 0.061555 | 0.077133 | 6.3 | 3.48 +Output | 0.0001564 | 0.00016713 | 0.00017786 | 0.0 | 0.01 +Modify | 0.010305 | 0.01031 | 0.010315 | 0.0 | 0.58 +Other | | 0.004365 | | | 0.25 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10466.5 ave 10470 max 10463 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 349236 max 246903 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.035 +Neighbor list builds = 26 +Dangerous builds = 0 + +Total wall time: 0:00:03 diff --git a/examples/balance/log.5Oct16.balance.neigh.rcb.g++.4 b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 similarity index 60% rename from examples/balance/log.5Oct16.balance.neigh.rcb.g++.4 rename to examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 index 0ab49c229f..4a2a747773 100644 --- a/examples/balance/log.5Oct16.balance.neigh.rcb.g++.4 +++ b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000440836 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -54,14 +56,19 @@ thermo 50 run 250 Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 -WARNING: Balance weight neigh skipped b/c no list found (../imbalance_neigh.cpp:67) -Memory usage per processor = 2.90262 Mbytes + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 3.917 | 3.927 | 3.945 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 @@ -69,34 +76,34 @@ Step Temp E_pair E_mol TotEng Press Volume 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 -Loop time of 0.956315 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.0693 on 4 procs for 250 steps with 4000 atoms -Performance: 112933.523 tau/day, 261.420 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 101000.295 tau/day, 233.797 timesteps/s +89.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.5859 | 0.6311 | 0.66986 | 4.1 | 65.99 -Neigh | 0.16996 | 0.18014 | 0.19678 | 2.4 | 18.84 -Comm | 0.078254 | 0.13416 | 0.18229 | 10.9 | 14.03 -Output | 0.00025582 | 0.0002594 | 0.00026608 | 0.0 | 0.03 -Modify | 0.0051248 | 0.0054137 | 0.0057077 | 0.3 | 0.57 -Other | | 0.005242 | | | 0.55 +Pair | 0.58255 | 0.65493 | 0.72281 | 8.3 | 61.25 +Neigh | 0.214 | 0.22344 | 0.23158 | 1.4 | 20.90 +Comm | 0.10451 | 0.17801 | 0.25967 | 17.3 | 16.65 +Output | 0.00015521 | 0.00020903 | 0.00034142 | 0.0 | 0.02 +Modify | 0.007113 | 0.0073407 | 0.0076027 | 0.2 | 0.69 +Other | | 0.005369 | | | 0.50 -Nlocal: 1000 ave 1103 max 932 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Nghost: 7617 ave 7871 max 7360 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 149349 ave 169737 max 137211 min -Histogram: 2 0 0 0 1 0 0 0 0 1 +Nlocal: 1000 ave 1005 max 996 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 7674 ave 7679 max 7670 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Neighs: 149349 ave 149991 max 147960 min +Histogram: 1 0 0 0 0 0 0 1 0 2 Total # of neighbors = 597396 Ave neighs/atom = 149.349 Neighbor list builds = 25 Dangerous builds = 0 run 250 -Memory usage per processor = 2.90266 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.922 | 4.004 | 4.078 Mbytes Step Temp E_pair E_mol TotEng Press Volume 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 @@ -104,31 +111,31 @@ Step Temp E_pair E_mol TotEng Press Volume 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 0.97826 on 4 procs for 250 steps with 4000 atoms +Loop time of 0.999028 on 4 procs for 250 steps with 4000 atoms -Performance: 110400.094 tau/day, 255.556 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 108105.088 tau/day, 250.243 timesteps/s +93.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.62013 | 0.63258 | 0.63864 | 0.9 | 64.66 -Neigh | 0.17712 | 0.18068 | 0.18788 | 1.0 | 18.47 -Comm | 0.14206 | 0.15504 | 0.17108 | 2.7 | 15.85 -Output | 0.00014997 | 0.00018102 | 0.000247 | 0.3 | 0.02 -Modify | 0.0047612 | 0.0049355 | 0.0050402 | 0.1 | 0.50 -Other | | 0.004845 | | | 0.50 +Pair | 0.60256 | 0.6507 | 0.68091 | 3.8 | 65.13 +Neigh | 0.21602 | 0.21945 | 0.22516 | 0.8 | 21.97 +Comm | 0.087366 | 0.11787 | 0.16957 | 9.6 | 11.80 +Output | 0.00016737 | 0.00028127 | 0.00057006 | 0.0 | 0.03 +Modify | 0.0065138 | 0.0066211 | 0.0067828 | 0.1 | 0.66 +Other | | 0.004103 | | | 0.41 -Nlocal: 1000 ave 1003 max 997 min +Nlocal: 1000 ave 1005 max 994 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Nghost: 7675.75 ave 7703 max 7648 min Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 7662.75 ave 7668 max 7656 min -Histogram: 1 0 0 0 1 0 0 0 1 1 -Neighs: 149308 ave 151009 max 146887 min -Histogram: 1 0 0 1 0 0 0 0 0 2 +Neighs: 149308 ave 173909 max 124842 min +Histogram: 2 0 0 0 0 0 0 0 0 2 Total # of neighbors = 597231 Ave neighs/atom = 149.308 Neighbor list builds = 25 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/balance/log.27Nov18.balance.neigh.static.g++.2 b/examples/balance/log.27Nov18.balance.neigh.static.g++.2 new file mode 100644 index 0000000000..de3aae921c --- /dev/null +++ b/examples/balance/log.27Nov18.balance.neigh.static.g++.2 @@ -0,0 +1,211 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000495195 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) + rebalancing time: 0.000623703 seconds + iteration count = 1 + neigh weight factor: 0.8 + initial/final max load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 post no +Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 1.97176 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 + rebalancing time: 0.000482321 seconds + iteration count = 10 + neigh weight factor: 0.8 + initial/final max load/proc = 290759 262123 + initial/final imbalance factor = 1.10982 1.00052 + x cuts: 0 0.45166 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Per MPI rank memory allocation (min/avg/max) = 4.304 | 4.492 | 4.681 Mbytes +Step Temp E_pair E_mol TotEng Press + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 +Loop time of 1.77716 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 + rebalancing time: 0.000497341 seconds + iteration count = 10 + neigh weight factor: 0.8 + initial/final max load/proc = 296648 269016 + initial/final imbalance factor = 1.10642 1.00336 + x cuts: 0 0.501461 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes +Step Temp E_pair E_mol TotEng Press + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 +Loop time of 2.0039 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 + rebalancing time: 0.000368118 seconds + iteration count = 10 + neigh weight factor: 0.8 + time weight factor: 0.6 + initial/final max load/proc = 168.493 167.093 + initial/final imbalance factor = 1.00948 1.00109 + x cuts: 0 0.499991 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes +Step Temp E_pair E_mol TotEng Press + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 +Loop time of 2.0382 on 2 procs for 250 steps with 4000 atoms + +Performance: 52987.998 tau/day, 122.657 timesteps/s +98.9% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.96918 | 1.257 | 1.5449 | 25.7 | 61.67 +Neigh | 0.40421 | 0.42672 | 0.44923 | 3.4 | 20.94 +Comm | 0.032542 | 0.34306 | 0.65358 | 53.0 | 16.83 +Output | 0.00014377 | 0.00015366 | 0.00016356 | 0.0 | 0.01 +Modify | 0.0070617 | 0.007337 | 0.0076122 | 0.3 | 0.36 +Other | | 0.003878 | | | 0.19 + +Nlocal: 2000 ave 2056 max 1944 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10403.5 ave 10525 max 10282 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 365656 max 236015 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.418 +Neighbor list builds = 25 +Dangerous builds = 0 +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 + rebalancing time: 0.000344753 seconds + iteration count = 10 + neigh weight factor: 0.8 + time weight factor: 0.6 + initial/final max load/proc = 170.235 168.809 + initial/final imbalance factor = 1.01037 1.00191 + x cuts: 0 0.49755 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes +Step Temp E_pair E_mol TotEng Press + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 +Loop time of 2.01086 on 2 procs for 250 steps with 4000 atoms + +Performance: 53708.387 tau/day, 124.325 timesteps/s +98.9% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.0037 | 1.2615 | 1.5192 | 23.0 | 62.73 +Neigh | 0.40846 | 0.4277 | 0.44695 | 2.9 | 21.27 +Comm | 0.033029 | 0.31012 | 0.5872 | 49.8 | 15.42 +Output | 0.00014424 | 0.00015259 | 0.00016093 | 0.0 | 0.01 +Modify | 0.007298 | 0.0074347 | 0.0075715 | 0.2 | 0.37 +Other | | 0.003999 | | | 0.20 + +Nlocal: 2000 ave 2038 max 1962 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10391 ave 10489 max 10293 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 301104 ave 358264 max 243943 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 602207 +Ave neighs/atom = 150.552 +Neighbor list builds = 25 +Dangerous builds = 0 + +Total wall time: 0:00:09 diff --git a/examples/balance/log.5Oct16.balance.neigh.static.g++.4 b/examples/balance/log.27Nov18.balance.neigh.static.g++.4 similarity index 64% rename from examples/balance/log.5Oct16.balance.neigh.static.g++.4 rename to examples/balance/log.27Nov18.balance.neigh.static.g++.4 index 0e9550ceb5..3a9ab43cb1 100644 --- a/examples/balance/log.5Oct16.balance.neigh.static.g++.4 +++ b/examples/balance/log.27Nov18.balance.neigh.static.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000429153 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -32,14 +34,19 @@ neigh_modify every 2 delay 4 check yes balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 -WARNING: Balance weight neigh skipped b/c no list found (../imbalance_neigh.cpp:67) - rebalancing time: 0.00039506 seconds + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) + rebalancing time: 0.000684023 seconds iteration count = 3 neigh weight factor: 0.8 initial/final max load/proc = 1200 1000 @@ -60,7 +67,7 @@ fix 1 all nve thermo 50 run 250 post no -Memory usage per processor = 2.77892 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.802 | 4.188 Mbytes Step Temp E_pair E_mol TotEng Press 0 1 -6.9453205 0 -5.4456955 -5.6812358 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 @@ -68,11 +75,10 @@ Step Temp E_pair E_mol TotEng Press 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.41104 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.44749 on 4 procs for 250 steps with 4000 atoms -98.7% CPU use with 4 MPI tasks x no OpenMP threads balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000409126 seconds + rebalancing time: 0.000543356 seconds iteration count = 10 neigh weight factor: 0.8 initial/final max load/proc = 220132 125739 @@ -81,7 +87,7 @@ balance 1.0 shift x 10 1.0 weight neigh 0.8 y cuts: 0 1 z cuts: 0 1 run 250 post no -Memory usage per processor = 2.78273 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.814 | 3.999 | 4.192 Mbytes Step Temp E_pair E_mol TotEng Press 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 @@ -89,11 +95,10 @@ Step Temp E_pair E_mol TotEng Press 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 -Loop time of 1.06236 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.19834 on 4 procs for 250 steps with 4000 atoms -99.4% CPU use with 4 MPI tasks x no OpenMP threads balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000265121 seconds + rebalancing time: 0.000308752 seconds iteration count = 10 neigh weight factor: 0.8 initial/final max load/proc = 147109 128929 @@ -102,7 +107,7 @@ balance 1.0 shift x 10 1.0 weight neigh 0.8 y cuts: 0 1 z cuts: 0 1 run 250 post no -Memory usage per processor = 2.7999 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.018 | 4.209 Mbytes Step Temp E_pair E_mol TotEng Press 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 @@ -110,21 +115,20 @@ Step Temp E_pair E_mol TotEng Press 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 -Loop time of 1.02794 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.23246 on 4 procs for 250 steps with 4000 atoms -99.6% CPU use with 4 MPI tasks x no OpenMP threads balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000314951 seconds + rebalancing time: 0.000306845 seconds iteration count = 10 neigh weight factor: 0.8 time weight factor: 0.6 - initial/final max load/proc = 109.37 93.2369 - initial/final imbalance factor = 1.17599 1.00252 - x cuts: 0 0.31323 0.448651 0.560211 1 + initial/final max load/proc = 114.116 101.665 + initial/final imbalance factor = 1.12567 1.00285 + x cuts: 0 0.30983 0.449501 0.588031 1 y cuts: 0 1 z cuts: 0 1 run 250 -Memory usage per processor = 2.7999 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.018 | 4.209 Mbytes Step Temp E_pair E_mol TotEng Press 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 @@ -132,44 +136,44 @@ Step Temp E_pair E_mol TotEng Press 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 -Loop time of 1.0482 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.13265 on 4 procs for 250 steps with 4000 atoms -Performance: 103033.455 tau/day, 238.503 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 95351.673 tau/day, 220.721 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.59706 | 0.65768 | 0.71098 | 5.8 | 62.74 -Neigh | 0.094988 | 0.17834 | 0.28455 | 19.8 | 17.01 -Comm | 0.057361 | 0.20341 | 0.34531 | 28.7 | 19.41 -Output | 0.00013709 | 0.00020045 | 0.0002768 | 0.4 | 0.02 -Modify | 0.0016088 | 0.0032223 | 0.0052993 | 2.8 | 0.31 -Other | | 0.005343 | | | 0.51 +Pair | 0.64092 | 0.67347 | 0.70289 | 3.5 | 59.46 +Neigh | 0.11654 | 0.22172 | 0.35287 | 22.2 | 19.58 +Comm | 0.068215 | 0.22827 | 0.36221 | 28.0 | 20.15 +Output | 0.00016975 | 0.00031555 | 0.00065875 | 0.0 | 0.03 +Modify | 0.00214 | 0.004007 | 0.0062947 | 3.0 | 0.35 +Other | | 0.004862 | | | 0.43 -Nlocal: 1000 ave 1684 max 506 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8706.25 ave 10207 max 7655 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Neighs: 150170 ave 163204 max 140236 min +Nlocal: 1000 ave 1651 max 529 min Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8692.5 ave 9709 max 8037 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 150170 ave 154877 max 145634 min +Histogram: 1 0 0 1 0 0 1 0 0 1 Total # of neighbors = 600681 Ave neighs/atom = 150.17 Neighbor list builds = 25 Dangerous builds = 0 balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000258207 seconds + rebalancing time: 0.000319719 seconds iteration count = 10 neigh weight factor: 0.8 time weight factor: 0.6 - initial/final max load/proc = 96.6033 94.7484 - initial/final imbalance factor = 1.0231 1.00345 - x cuts: 0 0.315478 0.450068 0.579538 1 + initial/final max load/proc = 102.192 99.2749 + initial/final imbalance factor = 1.03206 1.0026 + x cuts: 0 0.312695 0.449907 0.587625 1 y cuts: 0 1 z cuts: 0 1 run 250 -Memory usage per processor = 2.7999 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.019 | 4.209 Mbytes Step Temp E_pair E_mol TotEng Press 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 @@ -177,31 +181,31 @@ Step Temp E_pair E_mol TotEng Press 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 -Loop time of 1.02694 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.16447 on 4 procs for 250 steps with 4000 atoms -Performance: 105166.691 tau/day, 243.441 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 92745.661 tau/day, 214.689 timesteps/s +97.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.6025 | 0.64932 | 0.70125 | 5.6 | 63.23 -Neigh | 0.093299 | 0.17549 | 0.27782 | 19.3 | 17.09 -Comm | 0.05188 | 0.19352 | 0.31909 | 28.5 | 18.84 -Output | 0.00022793 | 0.00024354 | 0.00027609 | 0.1 | 0.02 -Modify | 0.0016394 | 0.0032356 | 0.0052338 | 2.8 | 0.32 -Other | | 0.005129 | | | 0.50 +Pair | 0.61612 | 0.67903 | 0.73112 | 5.1 | 58.31 +Neigh | 0.11722 | 0.22257 | 0.35236 | 22.3 | 19.11 +Comm | 0.099441 | 0.25198 | 0.42338 | 28.4 | 21.64 +Output | 0.00018501 | 0.0012686 | 0.0040495 | 4.5 | 0.11 +Modify | 0.0020952 | 0.0044899 | 0.0086782 | 4.0 | 0.39 +Other | | 0.005134 | | | 0.44 -Nlocal: 1000 ave 1659 max 494 min +Nlocal: 1000 ave 1631 max 523 min Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8646.75 ave 9782 max 7837 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Neighs: 149995 ave 165511 max 134186 min -Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 8693.75 ave 9752 max 8002 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 149995 ave 161500 max 141963 min +Histogram: 2 0 0 0 0 0 1 0 0 1 Total # of neighbors = 599979 Ave neighs/atom = 149.995 Neighbor list builds = 25 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:06 diff --git a/examples/balance/log.5Oct16.balance.var.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.var.dynamic.g++.2 similarity index 61% rename from examples/balance/log.5Oct16.balance.var.dynamic.g++.2 rename to examples/balance/log.27Nov18.balance.var.dynamic.g++.2 index 8015823c6d..c488a725e0 100644 --- a/examples/balance/log.5Oct16.balance.var.dynamic.g++.2 +++ b/examples/balance/log.27Nov18.balance.var.dynamic.g++.2 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 2 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000491142 secs mass * 1.0 region long block 3 6 0 10 0 10 @@ -36,13 +38,18 @@ group slow type 2 1400 atoms in group slow balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT Neighbor list info ... - 1 neighbor list requests update every 2 steps, delay 4 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 7 7 7 - rebalancing time: 0.001688 seconds + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.000805378 seconds iteration count = 10 group weights: fast=0.8 slow=2.5 storing weight in atom property d_WEIGHT @@ -74,7 +81,7 @@ fix 1 all nve thermo 50 run 500 -Memory usage per processor = 3.23652 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.708 | 4.876 | 5.044 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 @@ -87,26 +94,26 @@ Step Temp E_pair E_mol TotEng Press Volume 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 -Loop time of 4.87829 on 2 procs for 500 steps with 4000 atoms +Loop time of 5.01752 on 2 procs for 500 steps with 4000 atoms -Performance: 44277.854 tau/day, 102.495 timesteps/s -99.2% CPU use with 2 MPI tasks x no OpenMP threads +Performance: 43049.176 tau/day, 99.651 timesteps/s +98.5% CPU use with 2 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.4978 | 2.6788 | 3.8597 | 72.2 | 54.91 -Neigh | 0.6012 | 0.75888 | 0.91656 | 18.1 | 15.56 -Comm | 0.073541 | 1.4134 | 2.7532 | 112.7 | 28.97 -Output | 0.00026584 | 0.00027144 | 0.00027704 | 0.0 | 0.01 -Modify | 0.013387 | 0.015078 | 0.01677 | 1.4 | 0.31 -Other | | 0.01191 | | | 0.24 +Pair | 1.4325 | 2.6317 | 3.8309 | 73.9 | 52.45 +Neigh | 0.72307 | 0.89995 | 1.0768 | 18.6 | 17.94 +Comm | 0.08143 | 1.4587 | 2.836 | 114.0 | 29.07 +Output | 0.00034356 | 0.00034773 | 0.00035191 | 0.0 | 0.01 +Modify | 0.015713 | 0.017661 | 0.01961 | 1.5 | 0.35 +Other | | 0.009141 | | | 0.18 -Nlocal: 2000 ave 2452 max 1548 min +Nlocal: 2000 ave 2500 max 1500 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10456.5 ave 11082 max 9831 min +Nghost: 10457 ave 11055 max 9859 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298070 ave 470560 max 125579 min +Neighs: 298070 ave 483758 max 112381 min Histogram: 1 0 0 0 0 0 0 0 0 1 Total # of neighbors = 596139 @@ -114,7 +121,7 @@ Ave neighs/atom = 149.035 Neighbor list builds = 51 Dangerous builds = 0 run 500 -Memory usage per processor = 3.24422 Mbytes +Per MPI rank memory allocation (min/avg/max) = 5.092 | 5.269 | 5.445 Mbytes Step Temp E_pair E_mol TotEng Press Volume 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 @@ -127,26 +134,26 @@ Step Temp E_pair E_mol TotEng Press Volume 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 -Loop time of 5.11308 on 2 procs for 500 steps with 4000 atoms +Loop time of 5.38962 on 2 procs for 500 steps with 4000 atoms -Performance: 42244.620 tau/day, 97.788 timesteps/s -98.9% CPU use with 2 MPI tasks x no OpenMP threads +Performance: 40077.052 tau/day, 92.771 timesteps/s +98.0% CPU use with 2 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.0421 | 2.5613 | 4.0806 | 94.9 | 50.09 -Neigh | 0.51289 | 0.72321 | 0.93354 | 24.7 | 14.14 -Comm | 0.069973 | 1.8016 | 3.5332 | 129.0 | 35.24 -Output | 0.000283 | 0.00028694 | 0.00029087 | 0.0 | 0.01 -Modify | 0.012173 | 0.015003 | 0.017834 | 2.3 | 0.29 -Other | | 0.01164 | | | 0.23 +Pair | 0.93627 | 2.5477 | 4.1591 | 101.0 | 47.27 +Neigh | 0.61458 | 0.87078 | 1.127 | 27.5 | 16.16 +Comm | 0.072418 | 1.9424 | 3.8124 | 134.2 | 36.04 +Output | 0.00034833 | 0.00035048 | 0.00035262 | 0.0 | 0.01 +Modify | 0.014652 | 0.018169 | 0.021687 | 2.6 | 0.34 +Other | | 0.01024 | | | 0.19 -Nlocal: 2000 ave 2497 max 1503 min +Nlocal: 2000 ave 2561 max 1439 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10396.5 ave 10916 max 9877 min +Nghost: 10257 ave 11109 max 9405 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 300836 ave 484375 max 117296 min +Neighs: 300836 ave 498670 max 103001 min Histogram: 1 0 0 0 0 0 0 0 0 1 Total # of neighbors = 601671 @@ -155,20 +162,20 @@ Neighbor list builds = 51 Dangerous builds = 0 balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT - rebalancing time: 0.000527143 seconds + rebalancing time: 0.000744104 seconds iteration count = 10 group weights: fast=0.8 slow=2.5 storing weight in atom property d_WEIGHT - initial/final max load/proc = 4318.1 2791.9 - initial/final imbalance factor = 1.54771 1.00068 - x cuts: 0 0.454292 1 + initial/final max load/proc = 4428.8 2798.1 + initial/final imbalance factor = 1.58738 1.0029 + x cuts: 0 0.45485 1 y cuts: 0 1 z cuts: 0 1 fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT run 500 -Memory usage per processor = 3.24422 Mbytes +Per MPI rank memory allocation (min/avg/max) = 5.098 | 5.464 | 5.83 Mbytes Step Temp E_pair E_mol TotEng Press Volume 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 @@ -179,22 +186,22 @@ Step Temp E_pair E_mol TotEng Press Volume 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 - 1450 0.54218439 -6.2574683 0 -5.444395 -1.7901188 4738.2137 - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 -Loop time of 5.31552 on 2 procs for 500 steps with 4000 atoms + 1450 0.54218439 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 +Loop time of 5.50675 on 2 procs for 500 steps with 4000 atoms -Performance: 40635.746 tau/day, 94.064 timesteps/s -98.8% CPU use with 2 MPI tasks x no OpenMP threads +Performance: 39224.584 tau/day, 90.798 timesteps/s +98.0% CPU use with 2 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.157 | 2.6457 | 4.1345 | 91.5 | 49.77 -Neigh | 0.42836 | 0.74879 | 1.0692 | 37.0 | 14.09 -Comm | 0.079503 | 1.8922 | 3.7049 | 131.8 | 35.60 -Output | 0.000386 | 0.00045156 | 0.00051713 | 0.3 | 0.01 -Modify | 0.010813 | 0.015272 | 0.019732 | 3.6 | 0.29 -Other | | 0.01305 | | | 0.25 +Pair | 1.1091 | 2.6165 | 4.124 | 93.2 | 47.51 +Neigh | 0.49666 | 0.88338 | 1.2701 | 41.1 | 16.04 +Comm | 0.079062 | 1.9768 | 3.8745 | 135.0 | 35.90 +Output | 0.00032926 | 0.00041151 | 0.00049376 | 0.0 | 0.01 +Modify | 0.012776 | 0.018102 | 0.023428 | 4.0 | 0.33 +Other | | 0.01156 | | | 0.21 Nlocal: 2000 ave 3010 max 990 min Histogram: 1 0 0 0 0 0 0 0 0 1 @@ -208,43 +215,43 @@ Ave neighs/atom = 151.479 Neighbor list builds = 51 Dangerous builds = 0 run 500 -Memory usage per processor = 3.26138 Mbytes +Per MPI rank memory allocation (min/avg/max) = 5.847 | 5.872 | 5.897 Mbytes Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 + 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 1550 0.5371361 -6.250403 0 -5.4449003 -1.7647032 4738.2137 - 1600 0.54679572 -6.2646443 0 -5.4446558 -1.8115723 4738.2137 - 1650 0.5380659 -6.2519009 0 -5.4450038 -1.7409149 4738.2137 - 1700 0.53479444 -6.2469033 0 -5.4449122 -1.7162442 4738.2137 - 1750 0.53714076 -6.2506512 0 -5.4451415 -1.7340198 4738.2137 - 1800 0.5275053 -6.2358817 0 -5.4448216 -1.6875364 4738.2137 - 1850 0.54585433 -6.2629377 0 -5.4443609 -1.7758622 4738.2137 - 1900 0.53011157 -6.2387715 0 -5.4438029 -1.6382145 4738.2137 - 1950 0.54287707 -6.2583052 0 -5.4441932 -1.7367502 4738.2137 - 2000 0.52771203 -6.2349621 0 -5.443592 -1.5593714 4738.2137 -Loop time of 5.52542 on 2 procs for 500 steps with 4000 atoms + 1600 0.54679571 -6.2646443 0 -5.4446558 -1.8115722 4738.2137 + 1650 0.53806587 -6.2519009 0 -5.4450039 -1.7409152 4738.2137 + 1700 0.53479436 -6.2469032 0 -5.4449122 -1.7162441 4738.2137 + 1750 0.53714071 -6.2506513 0 -5.4451416 -1.7340205 4738.2137 + 1800 0.52750533 -6.2358819 0 -5.4448217 -1.687537 4738.2137 + 1850 0.54585346 -6.262937 0 -5.4443615 -1.7758597 4738.2137 + 1900 0.53011247 -6.2387653 0 -5.4437954 -1.6382086 4738.2137 + 1950 0.54287683 -6.2583097 0 -5.4441981 -1.7367469 4738.2137 + 2000 0.52771288 -6.2349676 0 -5.4435962 -1.5593804 4738.2137 +Loop time of 5.80884 on 2 procs for 500 steps with 4000 atoms -Performance: 39092.050 tau/day, 90.491 timesteps/s -98.9% CPU use with 2 MPI tasks x no OpenMP threads +Performance: 37184.695 tau/day, 86.076 timesteps/s +97.7% CPU use with 2 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.71557 | 2.5165 | 4.3174 | 113.5 | 45.54 -Neigh | 0.33034 | 0.71217 | 1.094 | 45.2 | 12.89 -Comm | 0.079871 | 2.2671 | 4.4544 | 145.3 | 41.03 -Output | 0.00027609 | 0.00034881 | 0.00042152 | 0.4 | 0.01 -Modify | 0.0095153 | 0.015319 | 0.021122 | 4.7 | 0.28 -Other | | 0.01399 | | | 0.25 +Pair | 0.71314 | 2.5435 | 4.3738 | 114.8 | 43.79 +Neigh | 0.39935 | 0.85806 | 1.3168 | 49.5 | 14.77 +Comm | 0.082629 | 2.3761 | 4.6695 | 148.8 | 40.90 +Output | 0.00034571 | 0.00044024 | 0.00053477 | 0.0 | 0.01 +Modify | 0.011643 | 0.018227 | 0.024811 | 4.9 | 0.31 +Other | | 0.01257 | | | 0.22 -Nlocal: 2000 ave 3030 max 970 min +Nlocal: 2000 ave 3032 max 968 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10272.5 ave 12222 max 8323 min +Nghost: 10266 ave 12245 max 8287 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 303996 ave 524806 max 83185 min +Neighs: 303998 ave 525128 max 82868 min Histogram: 1 0 0 0 0 0 0 0 0 1 -Total # of neighbors = 607991 -Ave neighs/atom = 151.998 +Total # of neighbors = 607996 +Ave neighs/atom = 151.999 Neighbor list builds = 51 Dangerous builds = 0 -Total wall time: 0:00:20 +Total wall time: 0:00:21 diff --git a/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 new file mode 100644 index 0000000000..66c1183481 --- /dev/null +++ b/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 @@ -0,0 +1,257 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000424862 secs +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + rebalancing time: 0.00115108 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final max load/proc = 2160 1620 + initial/final imbalance factor = 1.54839 1.16129 + x cuts: 0 0.300049 0.449951 0.599854 1 + y cuts: 0 1 + z cuts: 0 1 +variable lastweight atom c_p + +fix 0 all balance 50 1.0 shift x 10 1.0 weight var lastweight weight time 0.5 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.132 | 4.192 | 4.274 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 +Loop time of 2.66424 on 4 procs for 500 steps with 4000 atoms + +Performance: 81073.650 tau/day, 187.670 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1083 | 1.3909 | 1.7318 | 24.2 | 52.21 +Neigh | 0.19732 | 0.45425 | 0.7722 | 38.2 | 17.05 +Comm | 0.24921 | 0.79627 | 1.3351 | 60.3 | 29.89 +Output | 0.00041294 | 0.00065368 | 0.0011899 | 0.0 | 0.02 +Modify | 0.0071657 | 0.010935 | 0.015748 | 3.6 | 0.41 +Other | | 0.01124 | | | 0.42 + +Nlocal: 1000 ave 1870 max 299 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8679.25 ave 10190 max 7374 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Neighs: 149308 ave 215125 max 81132 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 597231 +Ave neighs/atom = 149.308 +Neighbor list builds = 50 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.134 | 4.387 | 4.664 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 + 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 + 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 + 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 + 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 +Loop time of 3.02509 on 4 procs for 500 steps with 4000 atoms + +Performance: 71402.836 tau/day, 165.284 timesteps/s +96.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.6808 | 1.3385 | 1.959 | 52.5 | 44.25 +Neigh | 0.13127 | 0.4678 | 0.86924 | 48.5 | 15.46 +Comm | 0.19735 | 1.1921 | 2.1903 | 85.9 | 39.41 +Output | 0.00045371 | 0.00090569 | 0.0013952 | 0.0 | 0.03 +Modify | 0.0062041 | 0.011167 | 0.01691 | 4.5 | 0.37 +Other | | 0.01462 | | | 0.48 + +Nlocal: 1000 ave 1935 max 262 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8739.75 ave 10498 max 7333 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 150170 ave 231608 max 72161 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 600678 +Ave neighs/atom = 150.169 +Neighbor list builds = 53 +Dangerous builds = 0 + +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT + rebalancing time: 0.000575304 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final max load/proc = 2318.1 1408.1 + initial/final imbalance factor = 1.66172 1.00939 + x cuts: 0 0.337054 0.454419 0.59556 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT + +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.393 | 4.673 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 + 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 + 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 + 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 + 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 + 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 + 1300 0.54134321 -6.2590728 0 -5.447261 -1.917027 4738.2137 + 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 + 1400 0.53726925 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 + 1450 0.54525929 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 + 1500 0.54223341 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 +Loop time of 3.07108 on 4 procs for 500 steps with 4000 atoms + +Performance: 70333.514 tau/day, 162.809 timesteps/s +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.77463 | 1.3897 | 2.1328 | 51.3 | 45.25 +Neigh | 0.13416 | 0.45546 | 0.80534 | 46.9 | 14.83 +Comm | 0.17763 | 1.2036 | 2.1448 | 83.6 | 39.19 +Output | 0.00039482 | 0.00067067 | 0.0013118 | 0.0 | 0.02 +Modify | 0.0058403 | 0.010695 | 0.015841 | 4.5 | 0.35 +Other | | 0.01099 | | | 0.36 + +Nlocal: 1000 ave 1955 max 199 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 8729 ave 10472 max 7399 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 150494 ave 251670 max 54664 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 601974 +Ave neighs/atom = 150.494 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.393 | 4.673 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54223341 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 + 1550 0.55327047 -6.2750129 0 -5.4453147 -1.9506601 4738.2137 + 1600 0.54419056 -6.2612631 0 -5.4451813 -1.8559469 4738.2137 + 1650 0.54710007 -6.2661977 0 -5.4457528 -1.8882828 4738.2137 + 1700 0.53665429 -6.250492 0 -5.4457118 -1.8067907 4738.2137 + 1750 0.54864943 -6.2681198 0 -5.4453514 -1.8662924 4738.2137 + 1800 0.54477002 -6.2615118 0 -5.4445611 -1.835304 4738.2137 + 1850 0.54143129 -6.2555621 0 -5.4436182 -1.8005839 4738.2137 + 1900 0.53994573 -6.254175 0 -5.4444588 -1.7770422 4738.2137 + 1950 0.54665379 -6.2640981 0 -5.4443224 -1.7946205 4738.2137 + 2000 0.54548501 -6.2623919 0 -5.4443689 -1.8063177 4738.2137 +Loop time of 3.48709 on 4 procs for 500 steps with 4000 atoms + +Performance: 61942.848 tau/day, 143.386 timesteps/s +96.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.42099 | 1.3571 | 2.3564 | 80.4 | 38.92 +Neigh | 0.083965 | 0.4942 | 0.96204 | 58.6 | 14.17 +Comm | 0.25895 | 1.6131 | 2.9631 | 106.2 | 46.26 +Output | 0.00042915 | 0.00068706 | 0.0012567 | 0.0 | 0.02 +Modify | 0.0051193 | 0.010964 | 0.017898 | 5.5 | 0.31 +Other | | 0.01109 | | | 0.32 + +Nlocal: 1000 ave 2036 max 127 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 8722.75 ave 10448 max 7456 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 151642 ave 269558 max 35372 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 606566 +Ave neighs/atom = 151.642 +Neighbor list builds = 56 +Dangerous builds = 0 +Total wall time: 0:00:12 diff --git a/examples/balance/log.5Oct16.balance.bond.fast.g++.4 b/examples/balance/log.5Oct16.balance.bond.fast.g++.4 deleted file mode 100644 index 17df4227b4..0000000000 --- a/examples/balance/log.5Oct16.balance.bond.fast.g++.4 +++ /dev/null @@ -1,225 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style bond -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box bond/types 1 extra/bond/per/atom 6 -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 2 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -bond_style harmonic -bond_coeff 1 10.0 1.2 - -# need to preserve 1-3, 1-4 pairwise interactions during hard collisions - -special_bonds lj/coul 0 1 1 - 0 = max # of 1-2 neighbors - 1 = max # of special neighbors -create_bonds all all 1 1.0 1.5 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 42 29 1 -Added 1014 bonds, new total = 1014 - 6 = max # of 1-2 neighbors - 6 = max # of special neighbors - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -comm_modify cutoff 10.0 # because bonds stretch a long ways -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom (c_1%10)+1 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 10 - binsize = 1.4 -> bins = 42 29 1 -Memory usage per processor = 4.49479 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -2.2032569 3.1039469 3.2354571 1.0526316 - 100 27.623422 -6.228166 2.6542136 1.2631579 1.0083102 - 200 33.35302 -15.746749 3.2018248 1.2963989 1.0193906 - 300 39.17734 -24.1557 4.9116986 1.2963989 1.0193906 - 400 41.660701 -27.615203 8.6214679 1.3518006 1.0083102 - 500 37.154928 -24.096947 3.2656178 1.3296399 1.0193906 - 600 35.05989 -21.524279 2.3728488 1.3296399 1.0083102 - 700 36.705654 -21.984526 3.2984899 1.3296399 1.0083102 - 800 39.631254 -25.783472 4.1595658 1.3961219 1.0083102 - 900 38.122407 -24.836728 5.3619155 1.3628809 1.0083102 - 1000 38.369965 -25.098561 4.5613077 1.3074792 1.0083102 - 1100 36.448264 -25.295817 4.0134469 1.1966759 1.0193906 - 1200 33.216313 -21.813423 4.48954 1.1634349 1.0304709 - 1300 30.361077 -20.323335 4.8079549 1.0637119 1.0083102 - 1400 29.368132 -18.532543 3.8449914 1.1191136 1.0083102 - 1500 27.699395 -15.990271 2.1565226 1.1523546 1.0304709 - 1600 25.304973 -14.626675 0.91025038 1.1301939 1.0083102 - 1700 26.335273 -14.499134 1.2878263 1.1855956 1.0083102 - 1800 25.755278 -13.121269 0.78425366 1.1745152 1.0193906 - 1900 25.454743 -13.903724 -0.16644734 1.1080332 1.0083102 - 2000 25.54829 -13.271068 1.9214248 1.0969529 1.0083102 - 2100 26.663083 -13.423796 1.9699997 1.1080332 1.0083102 - 2200 27.707332 -13.759474 1.5528121 1.1412742 1.0304709 - 2300 26.649636 -14.246313 0.91466777 1.1412742 1.0193906 - 2400 25.92802 -13.16271 1.0298936 1.1301939 1.0193906 - 2500 24.992275 -12.299161 1.3078979 1.1301939 1.0083102 - 2600 26.235185 -13.363142 2.0756764 1.2188366 1.0083102 - 2700 27.235116 -15.57943 2.1120604 1.1745152 1.0083102 - 2800 25.313585 -14.352196 2.1442169 1.0637119 1.0083102 - 2900 23.472278 -13.686216 0.69404738 1.0637119 1.0193906 - 3000 21.02552 -11.646464 0.56287643 1.0747922 1.0083102 - 3100 20.746946 -10.721207 -0.67351842 1.0858726 1.0193906 - 3200 20.330655 -10.307715 -0.30221601 1.0637119 1.0083102 - 3300 22.84995 -11.104879 0.0039310975 1.1191136 1.0083102 - 3400 23.23878 -11.827018 0.80792932 1.1301939 1.0193906 - 3500 25.262491 -12.191616 0.83249221 1.0747922 1.0193906 - 3600 25.08542 -13.10456 1.3164581 1.0969529 1.0193906 - 3700 22.649046 -11.300822 0.20123604 1.0526316 1.0193906 - 3800 20.516849 -9.7738907 -0.45160364 1.0637119 1.0083102 - 3900 20.227823 -9.8156456 -1.4386994 1.0637119 1.0083102 - 4000 21.511004 -9.6074826 0.83933362 1.1080332 1.0083102 - 4100 24.569081 -12.671563 0.60105671 1.0858726 1.0193906 - 4200 24.739215 -11.654269 0.66172409 1.0969529 1.0083102 - 4300 22.433043 -10.921392 1.2813391 1.1634349 1.0083102 - 4400 22.520504 -10.59901 0.10799908 1.0193906 1.0083102 - 4500 21.799185 -9.5801426 0.057062661 1.1191136 1.0193906 - 4600 22.537171 -9.9647087 -0.70915155 1.1412742 1.0083102 - 4700 22.380783 -10.974234 -0.73703011 1.0858726 1.0083102 - 4800 23.991602 -11.171402 1.3314176 1.0415512 1.0193906 - 4900 23.077116 -12.281132 0.73818416 1.0858726 1.0083102 - 5000 23.180253 -11.702364 0.84176858 1.1080332 1.0193906 - 5100 21.079712 -11.204743 0.50038687 1.0747922 1.0083102 - 5200 21.348945 -10.802581 -0.28651467 1.1634349 1.0193906 - 5300 21.332913 -10.352697 0.46738209 1.0858726 1.0193906 - 5400 22.283885 -10.635637 -0.31446485 1.0415512 1.0083102 - 5500 21.404737 -9.7733531 0.61106958 1.0858726 1.0193906 - 5600 23.013417 -10.291315 1.0562031 1.0969529 1.0083102 - 5700 22.087964 -10.931365 0.071180576 1.0415512 1.0193906 - 5800 24.011278 -11.080032 1.3901123 1.0637119 1.0193906 - 5900 22.320482 -10.616071 0.57726663 1.1412742 1.0193906 - 6000 23.348377 -12.116776 0.59306932 1.1191136 1.0193906 - 6100 22.20822 -11.545749 0.035299394 1.0747922 1.0193906 - 6200 22.810467 -10.598645 0.3296656 1.0415512 1.0083102 - 6300 21.398957 -10.058479 0.66795602 1.0415512 1.0193906 - 6400 21.945005 -10.358622 -1.0094405 1.0415512 1.0083102 - 6500 22.906408 -10.767788 1.0948374 1.0858726 1.0083102 - 6600 23.326617 -11.264481 0.82773039 1.0747922 1.0083102 - 6700 22.491386 -10.27014 0.043938534 1.0526316 1.0193906 - 6800 22.294374 -10.664685 0.048726237 1.1191136 1.0083102 - 6900 22.221286 -10.697394 1.0354647 1.0415512 1.0193906 - 7000 21.693738 -10.009277 0.64426437 1.0858726 1.0083102 - 7100 22.775615 -11.372061 0.069159076 1.1191136 1.0193906 - 7200 22.274683 -11.583382 -0.35907789 1.0858726 1.0193906 - 7300 21.410706 -11.005479 -0.66394825 1.1080332 1.0083102 - 7400 21.910735 -9.9354265 0.78899083 1.0526316 1.0083102 - 7500 21.526738 -9.7787506 -0.38232161 1.0415512 1.0083102 - 7600 21.833898 -10.289457 0.058939882 1.0747922 1.0193906 - 7700 21.606736 -9.6807332 0.50127515 1.0526316 1.0083102 - 7800 22.294657 -10.790285 0.8685065 1.0637119 1.0083102 - 7900 23.269713 -11.375434 0.84634431 1.0969529 1.0304709 - 8000 22.865151 -10.960251 1.0270422 1.0526316 1.0304709 - 8100 21.656008 -10.504825 1.2228537 1.0304709 1.0193906 - 8200 24.494122 -12.282009 0.16316531 1.0526316 1.0193906 - 8300 22.974267 -11.287149 -0.035076799 1.0747922 1.0193906 - 8400 21.052237 -11.243181 -0.099450689 1.0747922 1.0193906 - 8500 22.661383 -11.090107 -0.22913242 1.0969529 1.0193906 - 8600 21.403272 -9.5267458 -0.28047198 1.0637119 1.0193906 - 8700 22.786699 -10.403836 0.40752047 1.0415512 1.0193906 - 8800 24.504694 -10.706052 1.1870205 1.0969529 1.0193906 - 8900 23.22256 -11.182967 0.64166445 1.0747922 1.0304709 - 9000 23.734203 -10.422277 1.3143506 1.1191136 1.0304709 - 9100 23.517258 -11.247418 -0.13540081 1.0193906 1.0193906 - 9200 23.128204 -9.9181617 1.0928284 1.1412742 1.0083102 - 9300 23.281107 -10.523942 0.011923998 1.0969529 1.0193906 - 9400 21.800282 -10.359413 -0.62145559 1.1412742 1.0193906 - 9500 24.910955 -11.786562 1.6227559 1.1301939 1.0193906 - 9600 24.331432 -11.802048 0.62882542 1.1191136 1.0083102 - 9700 22.340782 -10.531555 0.29842716 1.0415512 1.0193906 - 9800 22.371239 -10.384104 0.34253854 1.0415512 1.0083102 - 9900 22.289367 -9.9488634 0.29499176 1.1412742 1.0083102 - 10000 22.518865 -10.279548 -0.48356734 1.1745152 1.0083102 -Loop time of 0.879172 on 4 procs for 10000 steps with 361 atoms - -Performance: 4913715.115 tau/day, 11374.341 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.11586 | 0.13009 | 0.14055 | 2.7 | 14.80 -Bond | 0.054003 | 0.058475 | 0.063238 | 1.8 | 6.65 -Neigh | 0.2865 | 0.29554 | 0.3049 | 1.2 | 33.62 -Comm | 0.20988 | 0.24193 | 0.27748 | 4.9 | 27.52 -Output | 0.0021532 | 0.0023131 | 0.00266 | 0.4 | 0.26 -Modify | 0.043945 | 0.045592 | 0.047122 | 0.6 | 5.19 -Other | | 0.1052 | | | 11.97 - -Nlocal: 90.25 ave 91 max 90 min -Histogram: 3 0 0 0 0 0 0 0 0 1 -Nghost: 250.25 ave 257 max 247 min -Histogram: 1 1 1 0 0 0 0 0 0 1 -Neighs: 624.75 ave 739 max 519 min -Histogram: 1 0 0 1 0 0 1 0 0 1 - -Total # of neighbors = 2499 -Ave neighs/atom = 6.92244 -Ave special neighs/atom = 5.61773 -Neighbor list builds = 4881 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/balance/log.5Oct16.balance.g++.4 b/examples/balance/log.5Oct16.balance.g++.4 deleted file mode 100644 index 692666c3f8..0000000000 --- a/examples/balance/log.5Oct16.balance.g++.4 +++ /dev/null @@ -1,202 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style atomic -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 2 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom c_1%10 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 42 29 1 -Memory usage per processor = 2.48839 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -29.143179 -1.2407285 3.2354571 1.0526316 - 100 26.269576 -29.713313 7.9052334 1.2742382 1.0304709 - 200 26.368336 -29.809962 1.6412462 1.2520776 1.0083102 - 300 26.479082 -29.920083 2.3678653 1.2299169 1.0193906 - 400 26.522239 -29.965537 6.6787858 1.1855956 1.0083102 - 500 25.725591 -29.168034 0.67065285 1.2520776 1.0083102 - 600 26.247693 -29.692706 7.9887712 1.3074792 1.0083102 - 700 26.237368 -29.676926 1.5987214 1.2409972 1.0083102 - 800 25.889643 -29.431589 4.6160859 1.2631579 1.0083102 - 900 23.635295 -27.372963 9.029962 1.1634349 1.0083102 - 1000 22.571904 -25.87422 1.8936085 1.1301939 1.0193906 - 1100 17.493795 -21.447274 9.502619 1.0858726 1.0193906 - 1200 17.214458 -20.726965 6.3578918 1.0304709 1.0193906 - 1300 16.42404 -19.757268 3.9028429 1.1191136 1.0083102 - 1400 15.012286 -18.095045 1.7699868 1.0858726 1.0193906 - 1500 13.853156 -16.929243 1.0730365 1.0858726 1.0193906 - 1600 13.655251 -16.659753 2.1723498 1.0747922 1.0083102 - 1700 12.675328 -15.550697 1.8710911 1.0415512 1.0193906 - 1800 12.657349 -15.825827 1.9350712 1.0193906 1.0193906 - 1900 12.857141 -15.773 1.7624119 1.0193906 1.0304709 - 2000 11.856547 -14.727128 1.7186493 1.1080332 1.0083102 - 2100 12.113322 -14.953592 1.4400251 1.0415512 1.0193906 - 2200 11.545208 -14.363826 1.1597272 1.0969529 1.0083102 - 2300 11.433966 -14.302533 1.5537689 1.0969529 1.0083102 - 2400 11.577739 -14.385288 1.3175128 1.0526316 1.0193906 - 2500 11.308903 -14.130976 1.0372 1.0304709 1.0193906 - 2600 11.03881 -13.846505 1.498497 1.0304709 1.0083102 - 2700 10.70089 -13.790867 1.4450907 1.0637119 1.0083102 - 2800 10.805792 -13.563219 1.2192081 1.0415512 1.0083102 - 2900 10.421157 -13.168851 1.402862 1.0304709 1.0083102 - 3000 10.400588 -13.097548 1.0337744 1.0526316 1.0083102 - 3100 10.358923 -13.069844 0.90449608 1.0637119 1.0304709 - 3200 10.006549 -12.712754 1.2690601 1.0415512 1.0083102 - 3300 9.6601046 -12.398878 0.9892202 1.0193906 1.0083102 - 3400 9.8691691 -12.644347 1.0763164 1.0526316 1.0193906 - 3500 9.4257858 -12.095325 1.3422009 1.0747922 1.0193906 - 3600 9.8117461 -12.559789 1.0175443 1.0415512 1.0083102 - 3700 9.1821286 -11.849911 1.4515013 1.0415512 1.0083102 - 3800 9.3099882 -12.081373 0.90072272 1.0193906 1.0193906 - 3900 9.478143 -12.141401 1.0850242 1.0193906 1.0083102 - 4000 9.2104886 -11.866265 0.69822096 1.0304709 1.0083102 - 4100 8.8886161 -11.56296 0.89116764 1.0083102 1.0083102 - 4200 8.7477884 -11.435867 1.155131 1.0415512 1.0083102 - 4300 8.8404671 -11.475073 0.73376033 1.0193906 1.0083102 - 4400 9.0720052 -11.722172 1.1153459 1.0193906 1.0193906 - 4500 8.4943391 -11.10353 0.98158121 1.0304709 1.0193906 - 4600 8.6208392 -11.25783 0.52722218 1.0304709 1.0304709 - 4700 8.355727 -10.974506 0.9215792 1.0526316 1.0083102 - 4800 7.9464294 -10.531082 0.96217105 1.0193906 1.0193906 - 4900 8.1538037 -10.74077 0.93322839 1.0526316 1.0083102 - 5000 8.0560766 -10.668117 0.89914093 1.0083102 1.0083102 - 5100 7.8109289 -10.391977 0.89999269 1.0637119 1.0083102 - 5200 7.5452618 -10.199853 0.85038647 1.0415512 1.0083102 - 5300 7.5551774 -10.134568 0.48669864 1.0193906 1.0193906 - 5400 7.5427574 -10.109261 0.51382249 1.0304709 1.0083102 - 5500 7.3322385 -9.8794018 0.39341727 1.0304709 1.0193906 - 5600 7.1576966 -9.7228317 0.49695339 1.0637119 1.0193906 - 5700 6.9753083 -9.5665538 0.63845281 1.0637119 1.0193906 - 5800 7.2002518 -9.7545436 0.8869362 1.0304709 1.0083102 - 5900 6.7877615 -9.4201982 1.150461 1.0415512 1.0083102 - 6000 7.2316113 -9.7609318 0.56956179 1.0083102 1.0083102 - 6100 6.8517997 -9.3662525 0.69127091 1.0083102 1.0193906 - 6200 6.7332571 -9.2601934 0.64092541 1.0747922 1.0193906 - 6300 7.2653962 -9.812989 1.0089331 1.0415512 1.0193906 - 6400 6.9924469 -9.5198187 0.50623927 1.0193906 1.0083102 - 6500 6.7976268 -9.3171977 0.37708413 1.0304709 1.0193906 - 6600 7.1400261 -9.6453688 0.51672188 1.0415512 1.0193906 - 6700 7.0874791 -9.6159675 0.23431446 1.0193906 1.0083102 - 6800 7.0934248 -9.6288017 0.73112796 1.0083102 1.0193906 - 6900 7.0402806 -9.6881643 0.65441466 1.0193906 1.0193906 - 7000 6.6077988 -9.1981347 0.81515889 1.0193906 1.0083102 - 7100 6.6804693 -9.1892523 0.46231433 1.0193906 1.0083102 - 7200 6.7050761 -9.2536735 0.68422675 1.0083102 1.0083102 - 7300 6.6980524 -9.2116982 0.77722939 1.0083102 1.0193906 - 7400 6.9237141 -9.4504319 0.50584321 1.0083102 1.0193906 - 7500 6.7457236 -9.2517367 0.41774845 1.0193906 1.0083102 - 7600 6.140572 -8.6271314 0.47012282 1.0193906 1.0193906 - 7700 6.3154289 -8.8060017 0.30256453 1.0193906 1.0083102 - 7800 6.4817555 -9.0034539 0.48964815 1.0193906 1.0193906 - 7900 6.5509105 -9.046808 0.26620539 1.0304709 1.0083102 - 8000 6.1907919 -8.7009493 0.36431296 1.0193906 1.0083102 - 8100 6.6773106 -9.1825184 0.63034715 1.0193906 1.0083102 - 8200 6.3651832 -8.865283 0.41221098 1.0193906 1.0193906 - 8300 6.5319342 -9.0474918 0.50861431 1.0193906 1.0193906 - 8400 6.0026097 -8.4829924 0.61261898 1.0304709 1.0193906 - 8500 6.264053 -8.7484184 0.22150916 1.0193906 1.0193906 - 8600 6.4822013 -8.9786803 0.79519176 1.0415512 1.0083102 - 8700 6.1133663 -8.5901382 0.66131133 1.0193906 1.0193906 - 8800 5.7750595 -8.2366077 0.54475083 1.0415512 1.0193906 - 8900 5.7948059 -8.2720683 0.66374336 1.0083102 1.0083102 - 9000 6.0180401 -8.4602116 0.35964058 1.0193906 1.0083102 - 9100 5.6468037 -8.1226322 0.33562506 1.0083102 1.0083102 - 9200 6.0286609 -8.4948458 0.81948932 1.0083102 1.0083102 - 9300 5.3272121 -7.7564142 0.59727196 1.0193906 1.0083102 - 9400 5.3686107 -7.8108198 0.49158335 1.0193906 1.0083102 - 9500 5.5578127 -7.9767984 0.54325782 1.0083102 1.0083102 - 9600 5.3535292 -7.7952435 0.51871219 1.0083102 1.0083102 - 9700 5.2229146 -7.6572219 0.82526944 1.0193906 1.0193906 - 9800 5.5316834 -7.9694409 -0.06268606 1.0193906 1.0083102 - 9900 5.3195142 -7.7834343 0.98223661 1.0083102 1.0083102 - 10000 5.4133458 -7.8543365 0.23338829 1.0304709 1.0083102 -Loop time of 0.41562 on 4 procs for 10000 steps with 361 atoms - -Performance: 10394107.789 tau/day, 24060.435 timesteps/s -98.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.061998 | 0.074455 | 0.095533 | 4.7 | 17.91 -Neigh | 0.065831 | 0.070617 | 0.081226 | 2.4 | 16.99 -Comm | 0.11365 | 0.14064 | 0.16052 | 5.3 | 33.84 -Output | 0.0021498 | 0.0023028 | 0.0026829 | 0.5 | 0.55 -Modify | 0.040329 | 0.04214 | 0.043329 | 0.5 | 10.14 -Other | | 0.08546 | | | 20.56 - -Nlocal: 90.25 ave 91 max 90 min -Histogram: 3 0 0 0 0 0 0 0 0 1 -Nghost: 22 ave 25 max 18 min -Histogram: 1 0 0 0 1 0 0 0 1 1 -Neighs: 252.75 ave 342 max 132 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 1011 -Ave neighs/atom = 2.80055 -Neighbor list builds = 3495 -Dangerous builds = 0 -Total wall time: 0:00:00 From 2ed90c166977933da8f95b32bfa7911e5ff19d70 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 14:46:47 -0500 Subject: [PATCH 205/273] update log files for body examples --- examples/body/data.squares | 0 examples/body/in.squares | 0 examples/body/in.wall2d | 0 ...ct16.body.g++.1 => log.27Nov18.body.g++.1} | 36 +-- ...ct16.body.g++.4 => log.27Nov18.body.g++.4} | 34 +-- ...dy.cubes.g++.1 => log.27Nov18.cubes.g++.1} | 27 ++- ...dy.cubes.g++.4 => log.27Nov18.cubes.g++.4} | 25 +- examples/body/log.27Nov18.pour3d.g++.1 | 74 ++++++ examples/body/log.27Nov18.pour3d.g++.4 | 74 ++++++ examples/body/log.27Nov18.squares.g++.1 | 222 +++++++++++++++++ examples/body/log.27Nov18.squares.g++.4 | 222 +++++++++++++++++ examples/body/log.27Nov18.wall2d.g++.1 | 224 ++++++++++++++++++ examples/body/log.27Nov18.wall2d.g++.4 | 224 ++++++++++++++++++ examples/body/log.9Jul18.body.pour3d.g++.1 | 138 ----------- examples/body/log.9Jul18.body.squares.g++.1 | 221 ----------------- examples/body/log.9Jul18.body.squares.g++.4 | 221 ----------------- examples/body/log.9Jul18.body.wall2d.g++.1 | 223 ----------------- examples/body/log.9Jul18.body.wall2d.g++.4 | 223 ----------------- 18 files changed, 1108 insertions(+), 1080 deletions(-) mode change 100755 => 100644 examples/body/data.squares mode change 100755 => 100644 examples/body/in.squares mode change 100755 => 100644 examples/body/in.wall2d rename examples/body/{log.5Oct16.body.g++.1 => log.27Nov18.body.g++.1} (90%) rename examples/body/{log.5Oct16.body.g++.4 => log.27Nov18.body.g++.4} (90%) rename examples/body/{log.9Jul18.body.cubes.g++.1 => log.27Nov18.cubes.g++.1} (82%) rename examples/body/{log.9Jul18.body.cubes.g++.4 => log.27Nov18.cubes.g++.4} (84%) create mode 100644 examples/body/log.27Nov18.pour3d.g++.1 create mode 100644 examples/body/log.27Nov18.pour3d.g++.4 create mode 100644 examples/body/log.27Nov18.squares.g++.1 create mode 100644 examples/body/log.27Nov18.squares.g++.4 create mode 100644 examples/body/log.27Nov18.wall2d.g++.1 create mode 100644 examples/body/log.27Nov18.wall2d.g++.4 delete mode 100644 examples/body/log.9Jul18.body.pour3d.g++.1 delete mode 100644 examples/body/log.9Jul18.body.squares.g++.1 delete mode 100644 examples/body/log.9Jul18.body.squares.g++.4 delete mode 100644 examples/body/log.9Jul18.body.wall2d.g++.1 delete mode 100644 examples/body/log.9Jul18.body.wall2d.g++.4 diff --git a/examples/body/data.squares b/examples/body/data.squares old mode 100755 new mode 100644 diff --git a/examples/body/in.squares b/examples/body/in.squares old mode 100755 new mode 100644 diff --git a/examples/body/in.wall2d b/examples/body/in.wall2d old mode 100755 new mode 100644 diff --git a/examples/body/log.5Oct16.body.g++.1 b/examples/body/log.27Nov18.body.g++.1 similarity index 90% rename from examples/body/log.5Oct16.body.g++.1 rename to examples/body/log.27Nov18.body.g++.1 index e7b7b381c3..adb2c5dd6f 100644 --- a/examples/body/log.5Oct16.body.g++.1 +++ b/examples/body/log.27Nov18.body.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d polygon nparticle bodies units lj @@ -14,7 +15,7 @@ read_data data.body velocity all create 1.44 87287 loop geom -pair_style body 5.0 +pair_style body/nparticle 5.0 pair_coeff * * 1.0 1.0 neighbor 0.5 bin @@ -33,13 +34,18 @@ fix 2 all enforce2d thermo 100 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.5 ghost atom cutoff = 5.5 - binsize = 2.75 -> bins = 12 12 1 -Memory usage per processor = 4.44944 Mbytes + binsize = 2.75, bins = 12 12 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/nparticle, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.772 | 4.772 | 4.772 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -0.63799525 0 0.78760475 -0.15028724 100 1.642337 -1.0003869 0 0.62552682 0.16140818 @@ -142,20 +148,20 @@ Step Temp E_pair E_mol TotEng Press 9800 1.6713187 -1.6842507 0 -0.029645137 0.17982115 9900 1.7707351 -1.6638268 0 0.089200949 0.2983883 10000 1.6466807 -1.592436 0 0.037777866 0.12761693 -Loop time of 2.33651 on 1 procs for 10000 steps with 100 atoms +Loop time of 1.76365 on 1 procs for 10000 steps with 100 atoms -Performance: 1848909.758 tau/day, 4279.884 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 2449465.017 tau/day, 5670.058 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.1308 | 2.1308 | 2.1308 | 0.0 | 91.20 -Neigh | 0.011168 | 0.011168 | 0.011168 | 0.0 | 0.48 -Comm | 0.02469 | 0.02469 | 0.02469 | 0.0 | 1.06 -Output | 0.00063729 | 0.00063729 | 0.00063729 | 0.0 | 0.03 -Modify | 0.15896 | 0.15896 | 0.15896 | 0.0 | 6.80 -Other | | 0.01025 | | | 0.44 +Pair | 1.5533 | 1.5533 | 1.5533 | 0.0 | 88.08 +Neigh | 0.01155 | 0.01155 | 0.01155 | 0.0 | 0.65 +Comm | 0.042146 | 0.042146 | 0.042146 | 0.0 | 2.39 +Output | 0.00089574 | 0.00089574 | 0.00089574 | 0.0 | 0.05 +Modify | 0.14124 | 0.14124 | 0.14124 | 0.0 | 8.01 +Other | | 0.01448 | | | 0.82 Nlocal: 100 ave 100 max 100 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -168,4 +174,4 @@ Total # of neighbors = 467 Ave neighs/atom = 4.67 Neighbor list builds = 468 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:01 diff --git a/examples/body/log.5Oct16.body.g++.4 b/examples/body/log.27Nov18.body.g++.4 similarity index 90% rename from examples/body/log.5Oct16.body.g++.4 rename to examples/body/log.27Nov18.body.g++.4 index 2a2e17ccba..24ed0a5436 100644 --- a/examples/body/log.5Oct16.body.g++.4 +++ b/examples/body/log.27Nov18.body.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d polygon nparticle bodies units lj @@ -14,7 +15,7 @@ read_data data.body velocity all create 1.44 87287 loop geom -pair_style body 5.0 +pair_style body/nparticle 5.0 pair_coeff * * 1.0 1.0 neighbor 0.5 bin @@ -33,13 +34,18 @@ fix 2 all enforce2d thermo 100 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.5 ghost atom cutoff = 5.5 - binsize = 2.75 -> bins = 12 12 1 -Memory usage per processor = 4.43864 Mbytes + binsize = 2.75, bins = 12 12 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/nparticle, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.759 | 4.759 | 4.759 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -0.63799525 0 0.78760475 -0.15028724 100 1.642337 -1.0003869 0 0.62552682 0.16140818 @@ -142,20 +148,20 @@ Step Temp E_pair E_mol TotEng Press 9800 1.7799071 -1.7889616 0 -0.026853542 0.3169291 9900 1.5838158 -1.718909 0 -0.15093133 0.46050618 10000 1.6100625 -1.7018091 0 -0.10784725 0.10312591 -Loop time of 0.849795 on 4 procs for 10000 steps with 100 atoms +Loop time of 0.715445 on 4 procs for 10000 steps with 100 atoms -Performance: 5083579.790 tau/day, 11767.546 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 6038199.147 tau/day, 13977.313 timesteps/s +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.47067 | 0.53757 | 0.61119 | 7.9 | 63.26 -Neigh | 0.0030298 | 0.0032511 | 0.0035295 | 0.3 | 0.38 -Comm | 0.1592 | 0.23416 | 0.30247 | 12.4 | 27.56 -Output | 0.0015244 | 0.0016521 | 0.0018895 | 0.4 | 0.19 -Modify | 0.039954 | 0.0415 | 0.044199 | 0.8 | 4.88 -Other | | 0.03166 | | | 3.73 +Pair | 0.35395 | 0.40307 | 0.45588 | 5.9 | 56.34 +Neigh | 0.0033705 | 0.0036112 | 0.0039394 | 0.4 | 0.50 +Comm | 0.17564 | 0.22399 | 0.26912 | 7.8 | 31.31 +Output | 0.0014601 | 0.0024824 | 0.0054784 | 3.5 | 0.35 +Modify | 0.038037 | 0.039219 | 0.04163 | 0.7 | 5.48 +Other | | 0.04308 | | | 6.02 Nlocal: 25 ave 28 max 23 min Histogram: 1 0 1 0 1 0 0 0 0 1 diff --git a/examples/body/log.9Jul18.body.cubes.g++.1 b/examples/body/log.27Nov18.cubes.g++.1 similarity index 82% rename from examples/body/log.9Jul18.body.cubes.g++.1 rename to examples/body/log.27Nov18.cubes.g++.1 index c9a799c0b5..588f95f69d 100644 --- a/examples/body/log.9Jul18.body.cubes.g++.1 +++ b/examples/body/log.27Nov18.cubes.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (29 Jun 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d rounded cubes variable r index 3 @@ -23,7 +24,7 @@ replicate 3 3 3 orthogonal box = (0 0 0) to (18 18 18) 1 by 1 by 1 MPI processor grid 54 atoms - Time spent = 0.000217915 secs + Time spent = 0.000426769 secs velocity all create 1.2 187287 dist gaussian mom yes rot yes @@ -82,7 +83,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.952 | 4.952 | 4.952 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.953 | 4.953 | 4.953 Mbytes Step KinEng PotEng TotEng c_p2 c_1_temp 0 1.7666667 0 1.7666667 0.01090535 0.59439252 1000 3.1462962 0.17392649 3.3202227 0.02361912 1.1654694 @@ -95,20 +96,20 @@ Step KinEng PotEng TotEng c_p2 c_1_temp 8000 3.0101226 0.28825968 3.2983823 0.027273454 1.2138056 9000 3.0164253 0.1901733 3.2065986 0.033228915 1.3095914 10000 2.3780401 0.34082434 2.7188644 0.031838531 1.0208679 -Loop time of 38.5686 on 1 procs for 10000 steps with 54 atoms +Loop time of 51.5779 on 1 procs for 10000 steps with 54 atoms -Performance: 22401.653 tau/day, 259.278 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 16751.376 tau/day, 193.882 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 38.426 | 38.426 | 38.426 | 0.0 | 99.63 -Neigh | 0.0043154 | 0.0043154 | 0.0043154 | 0.0 | 0.01 -Comm | 0.047616 | 0.047616 | 0.047616 | 0.0 | 0.12 -Output | 0.00017595 | 0.00017595 | 0.00017595 | 0.0 | 0.00 -Modify | 0.082948 | 0.082948 | 0.082948 | 0.0 | 0.22 -Other | | 0.007761 | | | 0.02 +Pair | 51.377 | 51.377 | 51.377 | 0.0 | 99.61 +Neigh | 0.0063686 | 0.0063686 | 0.0063686 | 0.0 | 0.01 +Comm | 0.072127 | 0.072127 | 0.072127 | 0.0 | 0.14 +Output | 0.0002768 | 0.0002768 | 0.0002768 | 0.0 | 0.00 +Modify | 0.10849 | 0.10849 | 0.10849 | 0.0 | 0.21 +Other | | 0.01404 | | | 0.03 Nlocal: 54 ave 54 max 54 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -122,4 +123,4 @@ Ave neighs/atom = 1.85185 Neighbor list builds = 268 Dangerous builds = 0 -Total wall time: 0:00:38 +Total wall time: 0:00:51 diff --git a/examples/body/log.9Jul18.body.cubes.g++.4 b/examples/body/log.27Nov18.cubes.g++.4 similarity index 84% rename from examples/body/log.9Jul18.body.cubes.g++.4 rename to examples/body/log.27Nov18.cubes.g++.4 index e2407e9725..f10a4c8a0a 100644 --- a/examples/body/log.9Jul18.body.cubes.g++.4 +++ b/examples/body/log.27Nov18.cubes.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (29 Jun 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d rounded cubes variable r index 3 @@ -23,7 +24,7 @@ replicate 3 3 3 orthogonal box = (0 0 0) to (18 18 18) 1 by 2 by 2 MPI processor grid 54 atoms - Time spent = 0.00103807 secs + Time spent = 0.000776052 secs velocity all create 1.2 187287 dist gaussian mom yes rot yes @@ -95,20 +96,20 @@ Step KinEng PotEng TotEng c_p2 c_1_temp 8000 3.0101226 0.28825968 3.2983823 0.027273454 1.2138056 9000 3.0164253 0.1901733 3.2065986 0.033228915 1.3095914 10000 2.3780401 0.34082434 2.7188644 0.031838531 1.0208679 -Loop time of 20.5306 on 4 procs for 10000 steps with 54 atoms +Loop time of 25.5798 on 4 procs for 10000 steps with 54 atoms -Performance: 42083.509 tau/day, 487.078 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 33776.718 tau/day, 390.934 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.5288 | 10.878 | 19.952 | 159.0 | 52.98 -Neigh | 0.0014424 | 0.0016552 | 0.0021195 | 0.7 | 0.01 -Comm | 0.50623 | 9.5805 | 12.93 | 169.4 | 46.66 -Output | 0.00011921 | 0.00014341 | 0.00021386 | 0.0 | 0.00 -Modify | 0.044663 | 0.047684 | 0.05382 | 1.6 | 0.23 -Other | | 0.023 | | | 0.11 +Pair | 9.256 | 13.423 | 24.653 | 177.1 | 52.47 +Neigh | 0.0021949 | 0.0024942 | 0.0031152 | 0.7 | 0.01 +Comm | 0.73678 | 11.948 | 16.096 | 187.4 | 46.71 +Output | 0.00023246 | 0.00041932 | 0.0009768 | 0.0 | 0.00 +Modify | 0.12505 | 0.15661 | 0.18165 | 6.0 | 0.61 +Other | | 0.04968 | | | 0.19 Nlocal: 13.5 ave 17 max 9 min Histogram: 1 0 0 1 0 0 0 0 1 1 @@ -122,4 +123,4 @@ Ave neighs/atom = 1.85185 Neighbor list builds = 268 Dangerous builds = 0 -Total wall time: 0:00:20 +Total wall time: 0:00:25 diff --git a/examples/body/log.27Nov18.pour3d.g++.1 b/examples/body/log.27Nov18.pour3d.g++.1 new file mode 100644 index 0000000000..10a4999d14 --- /dev/null +++ b/examples/body/log.27Nov18.pour3d.g++.1 @@ -0,0 +1,74 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# pouring 3d rounded polyhedron bodies + +variable steps index 6000 + +units lj +boundary p p fm +comm_modify vel yes + +atom_style body rounded/polyhedron 1 8 +atom_modify map array + +region reg block 0 50 0 50 0 50 units box +create_box 4 reg +Created orthogonal box = (0 0 0) to (50 50 50) + 1 by 1 by 1 MPI processor grid + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 5 +variable c_n equal 20 +variable c_t equal 5 +variable mu equal 0 +variable A_ua equal 1 + +pair_style body/rounded/polyhedron ${c_n} ${c_t} ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 ${c_t} ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 1 ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 1 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 5 + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +fix 1 all nve/body +fix 2 all gravity 1.0 spherical 0.0 -180.0 + +molecule object molecule.cube molecule.tetra toff 1 molecule.rod3d toff 2 molecule.point3d toff 3 +Read molecule object: + 1 atoms with max type 1 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 2 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 3 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 4 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 + +region slab block 5 45 5 45 25 35 units box +fix ins all pour 500 0 4767548 vol 0.4 10 region slab mol object molfrac 0.25 0.25 0.25 0.25 +ERROR: Unknown fix style pour (src/modify.cpp:898) +Last command: fix ins all pour 500 0 4767548 vol 0.4 10 region slab mol object molfrac 0.25 0.25 0.25 0.25 diff --git a/examples/body/log.27Nov18.pour3d.g++.4 b/examples/body/log.27Nov18.pour3d.g++.4 new file mode 100644 index 0000000000..eb65f99bc2 --- /dev/null +++ b/examples/body/log.27Nov18.pour3d.g++.4 @@ -0,0 +1,74 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# pouring 3d rounded polyhedron bodies + +variable steps index 6000 + +units lj +boundary p p fm +comm_modify vel yes + +atom_style body rounded/polyhedron 1 8 +atom_modify map array + +region reg block 0 50 0 50 0 50 units box +create_box 4 reg +Created orthogonal box = (0 0 0) to (50 50 50) + 1 by 2 by 2 MPI processor grid + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 5 +variable c_n equal 20 +variable c_t equal 5 +variable mu equal 0 +variable A_ua equal 1 + +pair_style body/rounded/polyhedron ${c_n} ${c_t} ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 ${c_t} ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 ${mu} ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 ${A_ua} ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 1 ${cut_inner} +pair_style body/rounded/polyhedron 20 5 0 1 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 5 + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +fix 1 all nve/body +fix 2 all gravity 1.0 spherical 0.0 -180.0 + +molecule object molecule.cube molecule.tetra toff 1 molecule.rod3d toff 2 molecule.point3d toff 3 +Read molecule object: + 1 atoms with max type 1 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 2 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 3 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +Read molecule object: + 1 atoms with max type 4 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 + +region slab block 5 45 5 45 25 35 units box +fix ins all pour 500 0 4767548 vol 0.4 10 region slab mol object molfrac 0.25 0.25 0.25 0.25 +ERROR: Unknown fix style pour (src/modify.cpp:898) +Last command: fix ins all pour 500 0 4767548 vol 0.4 10 region slab mol object molfrac 0.25 0.25 0.25 0.25 diff --git a/examples/body/log.27Nov18.squares.g++.1 b/examples/body/log.27Nov18.squares.g++.1 new file mode 100644 index 0000000000..cc334b416c --- /dev/null +++ b/examples/body/log.27Nov18.squares.g++.1 @@ -0,0 +1,222 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d rounded polygon bodies + +variable r index 4 +variable steps index 100000 +variable T index 0.5 +variable P index 0.1 +variable seed index 980411 + +units lj +dimension 2 + +atom_style body rounded/polygon 1 6 +atom_modify map array +read_data data.squares + orthogonal box = (0 0 -0.5) to (12 12 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2 atoms + 2 bodies + +replicate $r $r 1 +replicate 4 $r 1 +replicate 4 4 1 + orthogonal box = (0 0 -0.5) to (48 48 0.5) + 1 by 1 by 1 MPI processor grid + 32 atoms + Time spent = 0.000279665 secs + +velocity all create $T ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 980411 dist gaussian mom yes rot yes + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 2 +variable c_n equal 1 +variable c_t equal 1 +variable mu equal 0.1 +variable delta_ua equal 0.5 + +pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 0.5 ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 0.5 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 2 + +comm_modify vel yes + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +#fix 1 all nve/body +#fix 1 all nvt/body temp $T $T 1.0 +fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 0.1 1.0 couple xy fixedpoint 0 0 0 + +fix 2 all enforce2d + +#compute 1 all body/local id 1 2 3 +#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] + +thermo_style custom step ke pe etotal press +thermo 1000 + +#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 +#dump_modify 2 pad 6 + +run ${steps} +run 100000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.15685 + ghost atom cutoff = 6.15685 + binsize = 3.07843, bins = 16 16 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/rounded/polygon, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.781 | 4.781 | 4.781 Mbytes +Step KinEng PotEng TotEng Press + 0 0.484375 0.25 0.734375 0.0067274306 + 1000 0.38428256 0.0014168922 0.38569945 0.0020468171 + 2000 0.41372193 0.015263236 0.42898517 0.0029343462 + 3000 0.54844547 0.014870378 0.56331585 0.001978353 + 4000 0.73816048 0.031668204 0.76982869 0.0025939718 + 5000 0.84536165 0.011504649 0.8568663 0.0037990517 + 6000 0.73776478 0.14445932 0.8822241 0.0086538113 + 7000 0.52022565 0.069507637 0.58973329 0.0072098694 + 8000 0.72653213 0.12783368 0.85436581 0.023907183 + 9000 0.87685727 0.1239819 1.0008392 0.0064590959 + 10000 0.7250918 0.097243508 0.82233531 0.0012448267 + 11000 0.62302234 0.05597557 0.67899791 0.00080239872 + 12000 0.57159363 0.18199602 0.75358965 0.01033626 + 13000 0.7505295 0.071545266 0.82207477 0.011480236 + 14000 0.84703598 0.15914379 1.0061798 0.032814039 + 15000 0.41905013 0.090552572 0.5096027 0.015717153 + 16000 0.41805189 0.042916881 0.46096877 0.020702707 + 17000 0.59966233 0.05285043 0.65251275 0.016526024 + 18000 0.54282285 0.20835047 0.75117332 0.036414059 + 19000 0.777922 0.034754101 0.8126761 0.036467537 + 20000 0.54703924 0.14633506 0.6933743 0.012917248 + 21000 0.49337931 0.1858754 0.67925471 0.037890735 + 22000 0.64916623 0.19281344 0.84197967 0.011996773 + 23000 0.66958738 0.20459682 0.8741842 0.023639466 + 24000 0.63729755 0.1111959 0.74849345 0.025049919 + 25000 0.60094316 0.13375799 0.73470115 0.035286376 + 26000 0.35419589 0.22049451 0.5746904 0.0024215291 + 27000 0.33789786 0.18494942 0.52284728 0.0066457643 + 28000 0.32376056 0.13151726 0.45527782 0.010773856 + 29000 0.36198203 0.11044834 0.47243037 0.063012638 + 30000 0.22624436 0.19690087 0.42314523 0.037422734 + 31000 0.32284312 0.059623656 0.38246677 0.0287682 + 32000 0.4457193 0.042396136 0.48811544 0.022025252 + 33000 0.61078662 0.059447221 0.67023384 0.030335089 + 34000 0.63157762 0.062056279 0.6936339 0.044624352 + 35000 0.69577644 0.086216204 0.78199264 0.0319995 + 36000 0.76814336 0.062105963 0.83024933 0.044316891 + 37000 0.58641664 0.095034548 0.68145119 0.03234133 + 38000 0.48772813 0.12911854 0.61684667 0.038732146 + 39000 0.74957742 0.09823432 0.84781174 0.053181162 + 40000 0.57881374 0.2932491 0.87206284 0.065740126 + 41000 0.4415176 0.22899179 0.67050939 0.026159841 + 42000 0.5260339 0.2048105 0.7308444 0.046294432 + 43000 0.33493572 0.32500572 0.65994144 -0.01250241 + 44000 0.46467243 0.07907132 0.54374375 0.13386238 + 45000 0.48135518 0.2618908 0.74324598 -0.016767159 + 46000 0.27223209 0.24562643 0.51785852 0.052118439 + 47000 0.26402739 0.1838767 0.44790409 -0.0015878764 + 48000 0.10229166 0.25519169 0.35748335 -0.033927088 + 49000 0.24313495 0.16578185 0.40891679 0.12414926 + 50000 0.27400066 0.27688032 0.55088098 0.10421157 + 51000 0.43081855 0.18111733 0.61193587 0.16373371 + 52000 0.81969298 0.060995894 0.88068887 0.057285357 + 53000 0.99936159 0.029137886 1.0284995 0.19425015 + 54000 0.69750047 0.038079774 0.73558024 -0.089236384 + 55000 0.54823746 0.056369886 0.60460734 -0.021320579 + 56000 0.6752322 0.050322917 0.72555512 0.25303548 + 57000 0.90328009 0.061107142 0.96438723 -0.1962713 + 58000 0.81463148 0.050387847 0.86501933 0.35952157 + 59000 0.61636455 0.064910223 0.68127478 -0.27208497 + 60000 0.62573918 0.052264617 0.67800379 0.4493407 + 61000 0.81065726 0.071269668 0.88192693 -0.34643283 + 62000 0.86420318 0.052799365 0.91700254 0.48308047 + 63000 0.67848508 0.069087342 0.74757242 -0.31814526 + 64000 0.61430417 0.052109373 0.66641354 0.38336646 + 65000 0.75782937 0.063488206 0.82131757 -0.19113322 + 66000 0.88735857 0.051779306 0.93913787 0.29410996 + 67000 0.70684373 0.061786313 0.76863005 -0.16503578 + 68000 0.58571951 0.052402151 0.63812166 0.30173228 + 69000 0.64997491 0.064435462 0.71441037 -0.1920633 + 70000 0.75071821 0.053416991 0.8041352 0.3846747 + 71000 0.8124718 0.06877986 0.88125166 -0.26852566 + 72000 0.71352066 0.05358784 0.7671085 0.41321806 + 73000 0.55151827 0.066470642 0.61798891 -0.2211738 + 74000 0.65473635 0.061946814 0.71668316 0.29536873 + 75000 0.88704613 0.059476353 0.94652248 -0.0312656 + 76000 0.76899803 0.057351665 0.8263497 0.017885214 + 77000 0.65149455 0.05407174 0.70556629 0.25192449 + 78000 0.68614394 0.074251169 0.76039511 -0.19369404 + 79000 0.97451567 0.06262739 1.0371431 0.4217182 + 80000 0.88207775 0.070157004 0.95223476 -0.27318477 + 81000 0.69294455 0.062623957 0.75556851 0.40150141 + 82000 0.70748016 0.073924331 0.78140449 -0.17128794 + 83000 0.78180774 0.063513978 0.84532172 0.22033652 + 84000 0.80170993 0.065812223 0.86752216 0.083202913 + 85000 0.64788122 0.070348079 0.7182293 -0.066913668 + 86000 0.56575431 0.064865112 0.63061942 0.33905786 + 87000 0.78205358 0.07983702 0.8618906 -0.22844912 + 88000 0.87426443 0.065703482 0.93996791 0.448573 + 89000 0.73269893 0.079827385 0.81252632 -0.24183162 + 90000 0.66703106 0.065630146 0.73266121 0.35410109 + 91000 0.73107154 0.07402702 0.80509856 -0.085492997 + 92000 1.043635 0.067156523 1.1107915 0.14311135 + 93000 0.86063344 0.065607238 0.92624068 0.20750649 + 94000 0.68304235 0.075962239 0.75900459 -0.14594625 + 95000 0.7069191 0.067125732 0.77404483 0.39459759 + 96000 0.79860046 0.090957588 0.88955805 -0.24202125 + 97000 0.81366777 0.071387081 0.88505485 0.32217266 + 98000 0.61885746 0.041524228 0.66038169 0.31635364 + 99000 0.57007759 0.055438456 0.62551604 -0.21172902 + 100000 0.80462394 0.045542313 0.85016626 0.099207503 +Loop time of 6.34495 on 1 procs for 100000 steps with 32 atoms + +Performance: 1361713.788 tau/day, 15760.576 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.0158 | 5.0158 | 5.0158 | 0.0 | 79.05 +Neigh | 0.0072868 | 0.0072868 | 0.0072868 | 0.0 | 0.11 +Comm | 0.18669 | 0.18669 | 0.18669 | 0.0 | 2.94 +Output | 0.00098681 | 0.00098681 | 0.00098681 | 0.0 | 0.02 +Modify | 1.0417 | 1.0417 | 1.0417 | 0.0 | 16.42 +Other | | 0.09245 | | | 1.46 + +Nlocal: 32 ave 32 max 32 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 35 ave 35 max 35 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 61 ave 61 max 61 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 61 +Ave neighs/atom = 1.90625 +Neighbor list builds = 1545 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/body/log.27Nov18.squares.g++.4 b/examples/body/log.27Nov18.squares.g++.4 new file mode 100644 index 0000000000..62c6206677 --- /dev/null +++ b/examples/body/log.27Nov18.squares.g++.4 @@ -0,0 +1,222 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d rounded polygon bodies + +variable r index 4 +variable steps index 100000 +variable T index 0.5 +variable P index 0.1 +variable seed index 980411 + +units lj +dimension 2 + +atom_style body rounded/polygon 1 6 +atom_modify map array +read_data data.squares + orthogonal box = (0 0 -0.5) to (12 12 0.5) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 2 atoms + 2 bodies + +replicate $r $r 1 +replicate 4 $r 1 +replicate 4 4 1 + orthogonal box = (0 0 -0.5) to (48 48 0.5) + 2 by 2 by 1 MPI processor grid + 32 atoms + Time spent = 0.000400782 secs + +velocity all create $T ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 980411 dist gaussian mom yes rot yes + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 2 +variable c_n equal 1 +variable c_t equal 1 +variable mu equal 0.1 +variable delta_ua equal 0.5 + +pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 0.5 ${cut_inner} +pair_style body/rounded/polygon 1 1 0.1 0.5 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 2 + +comm_modify vel yes + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +#fix 1 all nve/body +#fix 1 all nvt/body temp $T $T 1.0 +fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 0.1 1.0 couple xy fixedpoint 0 0 0 + +fix 2 all enforce2d + +#compute 1 all body/local id 1 2 3 +#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] + +thermo_style custom step ke pe etotal press +thermo 1000 + +#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 +#dump_modify 2 pad 6 + +run ${steps} +run 100000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.15685 + ghost atom cutoff = 6.15685 + binsize = 3.07843, bins = 16 16 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/rounded/polygon, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.774 | 4.774 | 4.774 Mbytes +Step KinEng PotEng TotEng Press + 0 0.484375 0.25 0.734375 0.0067274306 + 1000 0.38428256 0.0014168922 0.38569945 0.0020468171 + 2000 0.41372193 0.015263236 0.42898517 0.0029343462 + 3000 0.54844547 0.014870378 0.56331585 0.001978353 + 4000 0.73816048 0.031668204 0.76982869 0.0025939718 + 5000 0.84536165 0.011504649 0.8568663 0.0037990517 + 6000 0.73776478 0.14445932 0.8822241 0.0086538113 + 7000 0.52022565 0.069507637 0.58973329 0.0072098694 + 8000 0.72653213 0.12783367 0.85436581 0.023907185 + 9000 0.87685728 0.12398193 1.0008392 0.0064591005 + 10000 0.72509641 0.097241969 0.82233837 0.0012418726 + 11000 0.62314955 0.056042914 0.67919247 0.0018880786 + 12000 0.57157436 0.18187429 0.75344865 0.0096135623 + 13000 0.7489742 0.08262775 0.83160195 0.009183917 + 14000 0.78835138 0.18761048 0.97596186 0.023684357 + 15000 0.40408761 0.079431327 0.48351893 0.025285348 + 16000 0.4071013 0.13207058 0.53917188 0.02015488 + 17000 0.48417067 0.16699781 0.65116848 0.059188189 + 18000 0.60038567 0.18317457 0.78356024 -0.046456387 + 19000 0.73796958 0.064271521 0.8022411 0.090257204 + 20000 0.62508659 0.14486336 0.76994994 0.04948543 + 21000 0.5596837 0.10018831 0.65987201 0.044961962 + 22000 0.30731517 0.1386103 0.44592547 0.015096596 + 23000 0.34371843 0.1486761 0.49239453 0.026100892 + 24000 0.33484204 0.25428479 0.58912683 0.01974393 + 25000 0.48714744 0.32743616 0.8145836 0.037925893 + 26000 0.33255994 0.29851422 0.63107417 0.049419529 + 27000 0.21735889 0.18816203 0.40552093 0.050622152 + 28000 0.31911317 0.12559898 0.44471215 -0.0036236361 + 29000 0.53280161 0.055185441 0.58798705 0.083856225 + 30000 0.52916941 0.28697284 0.81614225 0.055873213 + 31000 0.47861645 0.21932568 0.69794214 0.02762301 + 32000 0.46786314 0.041856438 0.50971958 0.029923804 + 33000 0.69944716 0.039356744 0.7388039 0.028174645 + 34000 0.39964317 0.1027175 0.50236068 0.039495865 + 35000 0.70199237 0.10421859 0.80621095 0.015943417 + 36000 0.45053533 0.078626602 0.52916193 0.0073950287 + 37000 0.41587918 0.056551665 0.47243084 0.034091318 + 38000 0.58663473 0.039228671 0.6258634 0.033093641 + 39000 0.72480658 0.14792564 0.87273222 0.030903741 + 40000 0.51163285 0.13445292 0.64608577 -0.03114559 + 41000 0.56273761 0.16720374 0.72994135 0.027968528 + 42000 0.61850184 0.10584389 0.72434573 -0.036301799 + 43000 0.60039772 0.11984289 0.72024062 0.080894236 + 44000 0.57499839 0.068211092 0.64320948 0.049726122 + 45000 0.69937239 0.16287141 0.8622438 0.044921114 + 46000 0.23303785 0.2391726 0.47221045 0.021668935 + 47000 0.27051781 0.10690378 0.37742159 0.11963476 + 48000 0.408895 0.079919688 0.48881469 0.087484004 + 49000 0.74363181 0.040819422 0.78445123 0.011937456 + 50000 0.84482316 0.10205256 0.94687572 0.064133262 + 51000 0.84923574 0.089882984 0.93911872 0.062696388 + 52000 0.66278324 0.0331554 0.69593864 0.035150337 + 53000 0.64737251 0.039608076 0.68698058 0.057687461 + 54000 0.68931435 0.042661403 0.73197576 0.069664795 + 55000 0.84523308 0.10293275 0.94816583 0.047343755 + 56000 0.80033937 0.1534797 0.95381907 0.070206074 + 57000 0.6214799 0.1174575 0.7389374 0.078530452 + 58000 0.64228495 0.088089896 0.73037485 0.060245994 + 59000 0.89376363 0.065171887 0.95893552 0.071658895 + 60000 0.90162992 0.016564761 0.91819468 0.089245946 + 61000 0.72439995 0.0076508835 0.73205083 0.031430213 + 62000 0.71590702 0.0046728326 0.72057986 0.10153514 + 63000 0.74491219 0.0046757926 0.74958798 0.077145851 + 64000 0.77173614 0.008265632 0.78000178 -0.049932265 + 65000 0.72789092 0.0053605745 0.73325149 0.27060389 + 66000 0.63001101 0.013871945 0.64388296 -0.17766692 + 67000 0.65887071 0.0069105692 0.66578128 0.31632918 + 68000 0.89042862 0.0026334652 0.89306209 -0.050495873 + 69000 0.83442374 0.0059232957 0.84034703 -0.21871692 + 70000 0.65149642 0.004885383 0.65638181 0.50428108 + 71000 0.66888808 0.01125057 0.68013865 -0.29575772 + 72000 0.74941609 0.0026616299 0.75207772 0.34800716 + 73000 0.7898844 0.0048982026 0.7947826 -0.096872644 + 74000 0.68823538 0.0021467794 0.69038216 0.12272852 + 75000 0.5238808 0.0046112795 0.52849208 0.25760316 + 76000 0.65512889 0.014567969 0.66969686 -0.24622674 + 77000 0.82292373 0.0092471048 0.83217083 0.4002304 + 78000 0.76305221 0.01101937 0.77407158 -0.10704945 + 79000 0.66279814 0.0090486405 0.67184678 0.037466134 + 80000 0.65808885 0.010000569 0.66808942 0.31742291 + 81000 0.91357798 0.046226814 0.95980479 -0.20945693 + 82000 0.87611859 -0.016794871 0.85932372 0.31759733 + 83000 0.66285455 -0.017921021 0.64493353 0.27065273 + 84000 0.67460715 -0.0076174891 0.66698966 -0.024772659 + 85000 0.77786135 0.0014316505 0.779293 -0.21635327 + 86000 0.83246393 0.087489797 0.91995372 -0.13431455 + 87000 0.62935573 0.045088823 0.67444455 0.037766395 + 88000 0.55264538 -0.024625272 0.52802011 0.18121213 + 89000 0.74171392 -0.012629926 0.729084 -0.27666424 + 90000 0.82542165 -0.02296567 0.80245598 -0.30497174 + 91000 0.72958657 -0.026275093 0.70331147 -0.27624518 + 92000 0.6319558 0.022568297 0.65452409 -0.33539318 + 93000 0.66685301 0.021889807 0.68874282 -0.39890762 + 94000 0.91243243 0.0078218509 0.92025428 -0.27213648 + 95000 0.81125179 -0.0096756295 0.80157616 -0.099802335 + 96000 0.63354907 -0.018329423 0.61521965 0.18199604 + 97000 0.66812347 -0.016650228 0.65147324 0.49878257 + 98000 0.81490013 -0.0049164866 0.80998365 -0.13473106 + 99000 0.82131147 0.0043198846 0.82563136 -0.3083957 + 100000 0.50880983 -0.010467027 0.4983428 0.060606332 +Loop time of 4.3169 on 4 procs for 100000 steps with 32 atoms + +Performance: 2001435.573 tau/day, 23164.764 timesteps/s +95.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2078 | 1.3972 | 1.6653 | 15.1 | 32.36 +Neigh | 0.0030954 | 0.003284 | 0.0034814 | 0.3 | 0.08 +Comm | 1.074 | 1.3595 | 1.6003 | 16.2 | 31.49 +Output | 0.001703 | 0.0030067 | 0.0068843 | 4.1 | 0.07 +Modify | 1.2071 | 1.2647 | 1.3062 | 3.6 | 29.30 +Other | | 0.2893 | | | 6.70 + +Nlocal: 8 ave 9 max 6 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 17.75 ave 20 max 16 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Neighs: 14 ave 18 max 7 min +Histogram: 1 0 0 0 0 0 0 1 1 1 + +Total # of neighbors = 56 +Ave neighs/atom = 1.75 +Neighbor list builds = 1566 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/body/log.27Nov18.wall2d.g++.1 b/examples/body/log.27Nov18.wall2d.g++.1 new file mode 100644 index 0000000000..1987280bee --- /dev/null +++ b/examples/body/log.27Nov18.wall2d.g++.1 @@ -0,0 +1,224 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d rounded polygon bodies + +variable r index 4 +variable steps index 100000 +variable T index 0.5 +variable P index 0.1 +variable seed index 980411 + +units lj +dimension 2 + +atom_style body rounded/polygon 1 6 +atom_modify map array +read_data data.squares + orthogonal box = (0 0 -0.5) to (12 12 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2 atoms + 2 bodies + +replicate $r $r 1 +replicate 4 $r 1 +replicate 4 4 1 + orthogonal box = (0 0 -0.5) to (48 48 0.5) + 1 by 1 by 1 MPI processor grid + 32 atoms + Time spent = 0.000318766 secs + +velocity all create $T ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 980411 dist gaussian mom yes rot yes + +change_box all boundary p f p + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 2 +variable c_n equal 0.1 +variable c_t equal 0.1 +variable mu equal 0.1 +variable delta_ua equal 0.5 + +pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 2 + +comm_modify vel yes + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +#fix 1 all nve/body +#fix 1 all nvt/body temp $T $T 1.0 +fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 fixedpoint 0 0 0 + +fix 2 all enforce2d +fix 3 all wall/body/polygon 2000 50 50 yplane 0.0 48.0 + +#compute 1 all body/local id 1 2 3 +#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] + +thermo_style custom step ke pe etotal press +thermo 1000 + +#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 +#dump_modify 2 pad 6 + +run ${steps} +run 100000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.15685 + ghost atom cutoff = 6.15685 + binsize = 3.07843, bins = 16 16 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/rounded/polygon, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.771 | 4.771 | 4.771 Mbytes +Step KinEng PotEng TotEng Press + 0 0.484375 0.25 0.734375 0.0067274306 + 1000 0.51467204 0.00099202506 0.51566407 0.013452386 + 2000 0.55674899 0.0040762275 0.56082522 0.0034529066 + 3000 0.7546177 0.02259362 0.77721132 0.003650781 + 4000 0.72710218 0.10284108 0.82994326 0.0059629371 + 5000 0.5771012 0.069052145 0.64615335 0.00053937622 + 6000 0.53848154 0.041891239 0.58037277 0.0018693312 + 7000 0.61777556 0.033379829 0.65115538 0.0027584418 + 8000 0.47427227 0.059558934 0.5338312 0.017087187 + 9000 0.46822364 0.064382578 0.53260622 0.023258465 + 10000 0.46511051 0.027799371 0.49290988 0.015319493 + 11000 0.58686703 0.088016891 0.67488392 0.0088428936 + 12000 0.49962603 0.09879099 0.59841702 0.00074311497 + 13000 0.53160049 0.069625775 0.60122626 0.017019775 + 14000 0.49574902 0.041214164 0.53696318 0.0060355978 + 15000 0.56620415 0.13621516 0.70241931 0.045583297 + 16000 0.40942564 0.11469877 0.52412441 0.029905784 + 17000 0.608066 0.096938921 0.70500493 0.018509814 + 18000 0.45622168 0.057018077 0.51323975 0.0034035281 + 19000 0.48763322 0.057832224 0.54546545 0.0022972169 + 20000 0.41577025 0.14480819 0.56057844 0.023882542 + 21000 0.58565738 0.1601676 0.74582498 0.01702799 + 22000 0.60430354 0.16740706 0.7717106 -0.0047632836 + 23000 0.45659601 0.13740896 0.59400497 0.0191143 + 24000 0.42741367 0.25490516 0.68231884 0.051459175 + 25000 0.40851048 0.077823072 0.48633355 0.024392284 + 26000 0.53392894 0.14504323 0.67897217 0.028964572 + 27000 0.39775205 0.13101153 0.52876358 0.0080564916 + 28000 0.63138106 0.17706612 0.80844718 0.017594524 + 29000 0.57897788 0.26855503 0.84753292 0.019310624 + 30000 0.37401002 0.2274666 0.60147663 0.0044804008 + 31000 0.60924323 0.23142663 0.84066986 0.088271242 + 32000 0.60310397 0.35719837 0.96030234 0.0096762289 + 33000 0.47468105 0.17727177 0.65195282 0.0078486602 + 34000 0.42270829 0.20131235 0.62402064 0.090216203 + 35000 0.49578606 0.1697981 0.66558416 0.079099134 + 36000 0.50744538 0.29600416 0.80344954 0.018819487 + 37000 0.66728184 0.28166655 0.94894838 -0.01679437 + 38000 0.38972905 0.25798163 0.64771068 0.040442456 + 39000 0.38292839 0.21774389 0.60067228 0.016754932 + 40000 0.61770336 0.34202184 0.9597252 0.10986262 + 41000 0.42252651 0.13424708 0.5567736 0.040987711 + 42000 0.67513868 0.29515562 0.9702943 0.0013757417 + 43000 0.36768915 0.20349753 0.57118668 0.031443504 + 44000 0.49371025 0.095615653 0.5893259 0.032289477 + 45000 0.42144079 0.28894639 0.71038718 0.040302569 + 46000 0.36360136 0.33117431 0.69477567 0.010881881 + 47000 0.4206309 0.19557595 0.61620685 0.051137535 + 48000 0.4131465 0.37027912 0.78342561 0.11903042 + 49000 0.544703 0.38013565 0.92483865 0.054939742 + 50000 0.47394272 0.32384493 0.79778764 0.088363602 + 51000 0.55377533 0.38103395 0.93480927 0.097981664 + 52000 0.60648433 0.30877364 0.91525797 0.088877781 + 53000 0.62933509 0.33187159 0.96120668 0.10275954 + 54000 0.55077522 0.39050008 0.94127529 0.066721412 + 55000 0.41646397 0.34545572 0.76191969 0.011056796 + 56000 0.44244954 0.39274744 0.83519698 0.039963853 + 57000 0.41963092 0.33483982 0.75447073 0.032555938 + 58000 0.37941475 0.36905323 0.74846798 0.043952263 + 59000 0.53008564 0.32843795 0.85852359 0.080787301 + 60000 0.43408908 0.19840268 0.63249176 0.06421165 + 61000 0.56287814 0.31500577 0.87788391 0.12031895 + 62000 0.5185192 0.18275672 0.70127592 -0.0086212356 + 63000 0.57275413 0.45147395 1.0242281 0.054617465 + 64000 0.28322907 0.33687722 0.62010629 0.07268947 + 65000 0.40230876 0.37989067 0.78219943 -0.029604066 + 66000 0.58601209 0.52721274 1.1132248 -0.00037054404 + 67000 0.52669356 0.44276199 0.96945554 0.18969356 + 68000 0.41566831 0.47320489 0.8888732 0.040635264 + 69000 0.52140574 0.4261935 0.94759923 0.016566201 + 70000 0.42034133 0.55867009 0.97901142 0.047465899 + 71000 0.48720036 0.43749264 0.924693 0.15984789 + 72000 0.5244238 0.55854139 1.0829652 0.10155994 + 73000 0.69990219 0.57313852 1.2730407 0.11108648 + 74000 0.38274347 0.23359664 0.61634011 0.027968087 + 75000 0.47493369 0.49472607 0.96965976 0.10961568 + 76000 0.57064727 0.37996383 0.9506111 0.034746271 + 77000 0.50401727 0.34437588 0.84839315 0.015116686 + 78000 0.59504118 0.44154772 1.0365889 0.059341875 + 79000 0.4920801 0.58935767 1.0814378 0.12139906 + 80000 0.56992818 0.38916606 0.95909424 0.073618074 + 81000 0.38446945 0.77314417 1.1576136 0.12173381 + 82000 0.48734531 0.56198203 1.0493273 0.1080115 + 83000 0.5516933 0.56743096 1.1191243 0.13936805 + 84000 0.53336893 0.62914863 1.1625176 0.0084970895 + 85000 0.46456977 0.77446084 1.2390306 0.18024688 + 86000 0.58067599 0.53109608 1.1117721 0.012492021 + 87000 0.55096446 0.61715622 1.1681207 0.13264723 + 88000 0.56548774 0.74463701 1.3101247 0.14491188 + 89000 0.52492634 0.58482194 1.1097483 0.21155245 + 90000 0.64973565 0.85514474 1.5048804 0.036911953 + 91000 0.55367722 0.74046971 1.2941469 0.23918851 + 92000 0.44863249 0.56773761 1.0163701 0.00042860088 + 93000 0.64728356 0.66594086 1.3132244 0.0022850006 + 94000 0.65255497 0.82136644 1.4739214 0.10037643 + 95000 0.62266654 0.82642147 1.449088 0.11964602 + 96000 0.50656004 0.83312844 1.3396885 0.078491084 + 97000 0.47126712 0.70469684 1.175964 0.12956056 + 98000 0.48661103 1.0121726 1.4987837 0.043537851 + 99000 0.48379797 0.9520931 1.4358911 0.082047522 + 100000 0.54266361 1.0959698 1.6386334 -0.13092175 +Loop time of 3.8532 on 1 procs for 100000 steps with 32 atoms + +Performance: 2242290.202 tau/day, 25952.433 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.3917 | 2.3917 | 2.3917 | 0.0 | 62.07 +Neigh | 0.012386 | 0.012386 | 0.012386 | 0.0 | 0.32 +Comm | 0.11307 | 0.11307 | 0.11307 | 0.0 | 2.93 +Output | 0.0010369 | 0.0010369 | 0.0010369 | 0.0 | 0.03 +Modify | 1.246 | 1.246 | 1.246 | 0.0 | 32.34 +Other | | 0.08895 | | | 2.31 + +Nlocal: 32 ave 32 max 32 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 21 ave 21 max 21 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 55 ave 55 max 55 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 55 +Ave neighs/atom = 1.71875 +Neighbor list builds = 2886 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/body/log.27Nov18.wall2d.g++.4 b/examples/body/log.27Nov18.wall2d.g++.4 new file mode 100644 index 0000000000..d9a27cb1e4 --- /dev/null +++ b/examples/body/log.27Nov18.wall2d.g++.4 @@ -0,0 +1,224 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d rounded polygon bodies + +variable r index 4 +variable steps index 100000 +variable T index 0.5 +variable P index 0.1 +variable seed index 980411 + +units lj +dimension 2 + +atom_style body rounded/polygon 1 6 +atom_modify map array +read_data data.squares + orthogonal box = (0 0 -0.5) to (12 12 0.5) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 2 atoms + 2 bodies + +replicate $r $r 1 +replicate 4 $r 1 +replicate 4 4 1 + orthogonal box = (0 0 -0.5) to (48 48 0.5) + 2 by 2 by 1 MPI processor grid + 32 atoms + Time spent = 0.000329733 secs + +velocity all create $T ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 ${seed} dist gaussian mom yes rot yes +velocity all create 0.5 980411 dist gaussian mom yes rot yes + +change_box all boundary p f p + +variable cut_inner equal 0.5 +variable k_n equal 100 +variable k_na equal 2 +variable c_n equal 0.1 +variable c_t equal 0.1 +variable mu equal 0.1 +variable delta_ua equal 0.5 + +pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 ${c_t} ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 ${mu} ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 ${delta_ua} ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 ${cut_inner} +pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 0.5 +pair_coeff * * ${k_n} ${k_na} +pair_coeff * * 100 ${k_na} +pair_coeff * * 100 2 + +comm_modify vel yes + +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +timestep 0.001 + +#fix 1 all nve/body +#fix 1 all nvt/body temp $T $T 1.0 +fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 +fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 fixedpoint 0 0 0 + +fix 2 all enforce2d +fix 3 all wall/body/polygon 2000 50 50 yplane 0.0 48.0 + +#compute 1 all body/local id 1 2 3 +#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] + +thermo_style custom step ke pe etotal press +thermo 1000 + +#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 +#dump_modify 2 pad 6 + +run ${steps} +run 100000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.15685 + ghost atom cutoff = 6.15685 + binsize = 3.07843, bins = 16 16 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair body/rounded/polygon, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.773 | 4.773 | 4.773 Mbytes +Step KinEng PotEng TotEng Press + 0 0.484375 0.25 0.734375 0.0067274306 + 1000 0.51467204 0.00099202506 0.51566407 0.013452386 + 2000 0.55674899 0.0040762275 0.56082522 0.0034529066 + 3000 0.7546177 0.02259362 0.77721132 0.003650781 + 4000 0.72710218 0.10284108 0.82994326 0.0059629371 + 5000 0.57710119 0.069052154 0.64615335 0.00053937664 + 6000 0.53848104 0.041891152 0.58037219 0.0018693259 + 7000 0.61777485 0.033380825 0.65115568 0.0027584782 + 8000 0.47427732 0.059553658 0.53383098 0.017087698 + 9000 0.46820943 0.064379697 0.53258913 0.02325702 + 10000 0.46605511 0.02332689 0.489382 0.013699209 + 11000 0.57547516 0.090133398 0.66560855 0.0083913962 + 12000 0.465348 0.084853345 0.55020135 0.006231552 + 13000 0.55340889 0.07116165 0.62457054 0.030622563 + 14000 0.58866362 0.052281859 0.64094548 0.0079106838 + 15000 0.51757672 0.12255618 0.6401329 0.014005369 + 16000 0.42696011 0.086987541 0.51394765 -0.0017128649 + 17000 0.37612579 0.13054778 0.50667357 0.0046284992 + 18000 0.47659682 0.14670523 0.62330205 0.02206928 + 19000 0.47897909 0.15540332 0.63438241 0.02544138 + 20000 0.59377323 0.15357757 0.7473508 0.030262926 + 21000 0.52781204 0.22074491 0.74855695 -0.0022170167 + 22000 0.44843285 0.12779345 0.5762263 0.0097268482 + 23000 0.60400735 0.18098124 0.78498858 0.05778325 + 24000 0.58254338 0.1570243 0.73956769 0.022530491 + 25000 0.60524318 0.23660272 0.8418459 0.062530421 + 26000 0.45892702 0.34294121 0.80186823 0.038657393 + 27000 0.58418023 0.19551937 0.7796996 -0.0055396645 + 28000 0.45655369 0.26718934 0.72374303 0.006593108 + 29000 0.50277299 0.1747088 0.67748179 0.016059369 + 30000 0.38640717 0.1631573 0.54956447 0.036055723 + 31000 0.46944541 0.22076826 0.69021367 0.014334038 + 32000 0.53862858 0.26867594 0.80730452 0.057406282 + 33000 0.45666352 0.21796554 0.67462906 0.056555205 + 34000 0.51644038 0.21866786 0.73510824 0.015713 + 35000 0.50489584 0.1596236 0.66451945 0.040400644 + 36000 0.41723489 0.16227853 0.57951342 0.02863261 + 37000 0.481638 0.28830624 0.76994424 0.038381986 + 38000 0.6036094 0.33479287 0.93840227 0.0032059452 + 39000 0.47822122 0.18876355 0.66698476 0.029252649 + 40000 0.54949607 0.35011086 0.89960693 0.093909148 + 41000 0.54876522 0.27501735 0.82378257 -0.0084167014 + 42000 0.67801592 0.18102522 0.85904114 -0.0058395209 + 43000 0.54342066 0.34322081 0.88664146 0.12263806 + 44000 0.46672513 0.29749157 0.76421671 0.051073701 + 45000 0.4679867 0.25820875 0.72619545 0.069790993 + 46000 0.59598501 0.22285276 0.81883777 0.050578807 + 47000 0.48858341 0.29811577 0.78669917 0.080971431 + 48000 0.41238073 0.29362937 0.7060101 0.031893588 + 49000 0.61516435 0.33082609 0.94599044 -0.010710982 + 50000 0.57576635 0.37137185 0.94713819 0.062160249 + 51000 0.54614001 0.36960628 0.91574629 -0.0083424769 + 52000 0.42232354 0.25214442 0.67446796 0.028666126 + 53000 0.43025129 0.24479385 0.67504514 0.030342054 + 54000 0.54614922 0.29602426 0.84217348 0.083070642 + 55000 0.60719748 0.3577285 0.96492598 0.053799744 + 56000 0.47073149 0.31070429 0.78143579 0.083895368 + 57000 0.56861582 0.33249784 0.90111366 0.032324233 + 58000 0.75061035 0.33313728 1.0837476 0.031039937 + 59000 0.59473893 0.48870773 1.0834467 0.039503585 + 60000 0.55252481 0.38350562 0.93603043 0.0027643882 + 61000 0.45010855 0.43945065 0.8895592 0.028168222 + 62000 0.63942467 0.53372899 1.1731537 0.13790959 + 63000 0.69407873 0.37980402 1.0738828 0.035919608 + 64000 0.54898275 0.39910419 0.94808693 0.0015016851 + 65000 0.58229838 0.42300361 1.005302 0.089787193 + 66000 0.53443537 0.5597136 1.094149 -0.015781756 + 67000 0.59212426 0.56172146 1.1538457 0.030464683 + 68000 0.68164926 0.48724393 1.1688932 0.071465948 + 69000 0.59721737 0.49476309 1.0919805 0.07575647 + 70000 0.52314551 0.31950477 0.84265028 0.11206672 + 71000 0.53230509 0.53846575 1.0707708 0.0047204701 + 72000 0.71341933 0.4924749 1.2058942 0.116568 + 73000 0.70498496 0.54121008 1.246195 0.11210249 + 74000 0.54188682 0.61729607 1.1591829 0.044083048 + 75000 0.44073609 0.42072284 0.86145893 -0.041508511 + 76000 0.51225567 0.36848317 0.88073884 -0.028636748 + 77000 0.6517329 0.5503086 1.2020415 0.049605026 + 78000 0.60053898 0.52760266 1.1281416 0.094361256 + 79000 0.51560788 0.46563043 0.98123832 -0.03336136 + 80000 0.53357884 0.60743981 1.1410186 0.027259883 + 81000 0.6256228 0.40412923 1.029752 0.083274981 + 82000 0.6903519 0.69599412 1.386346 0.168747 + 83000 0.62621394 0.50082841 1.1270424 0.12294403 + 84000 0.5682146 0.73827702 1.3064916 0.085884707 + 85000 0.48179077 0.73669563 1.2184864 0.065002035 + 86000 0.61101399 0.80673836 1.4177523 0.037555163 + 87000 0.52278725 0.71608722 1.2388745 0.020943688 + 88000 0.53318823 0.50916748 1.0423557 -0.01946691 + 89000 0.56428713 0.56042234 1.1247095 0.040998134 + 90000 0.58720508 0.66023073 1.2474358 0.040313529 + 91000 0.61509407 0.86254343 1.4776375 0.15215034 + 92000 0.5640475 0.57694543 1.1409929 0.10238679 + 93000 0.60586378 0.67978456 1.2856483 -0.043948113 + 94000 0.75406595 0.74795347 1.5020194 0.015341415 + 95000 0.4974314 0.60192267 1.0993541 -0.018173218 + 96000 0.50048302 0.82845218 1.3289352 0.045394283 + 97000 0.65335222 0.6470855 1.3004377 0.011624967 + 98000 0.65693072 0.45222133 1.109152 0.13763684 + 99000 0.60573344 0.50284289 1.1085763 0.12853674 + 100000 0.50677068 0.58143063 1.0882013 0.11351254 +Loop time of 3.24642 on 4 procs for 100000 steps with 32 atoms + +Performance: 2661396.711 tau/day, 30803.203 timesteps/s +94.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.64148 | 0.70244 | 0.76391 | 6.5 | 21.64 +Neigh | 0.0049012 | 0.0050417 | 0.0052478 | 0.2 | 0.16 +Comm | 0.79447 | 0.88412 | 0.97443 | 8.1 | 27.23 +Output | 0.001776 | 0.0031438 | 0.0072262 | 4.2 | 0.10 +Modify | 1.325 | 1.3684 | 1.4049 | 2.4 | 42.15 +Other | | 0.2833 | | | 8.73 + +Nlocal: 8 ave 9 max 7 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 14 ave 15 max 13 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 13.25 ave 16 max 11 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 53 +Ave neighs/atom = 1.65625 +Neighbor list builds = 2654 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/body/log.9Jul18.body.pour3d.g++.1 b/examples/body/log.9Jul18.body.pour3d.g++.1 deleted file mode 100644 index 213dd2e18f..0000000000 --- a/examples/body/log.9Jul18.body.pour3d.g++.1 +++ /dev/null @@ -1,138 +0,0 @@ -LAMMPS (29 Jun 2018) -# pouring 3d rounded polyhedron bodies - -variable steps index 6000 - -units lj -boundary p p fm -comm_modify vel yes - -atom_style body rounded/polyhedron 1 8 -atom_modify map array - -region reg block 0 50 0 50 0 50 units box -create_box 4 reg -Created orthogonal box = (0 0 0) to (50 50 50) - 1 by 1 by 1 MPI processor grid - -variable cut_inner equal 0.5 -variable k_n equal 100 -variable k_na equal 5 -variable c_n equal 20 -variable c_t equal 5 -variable mu equal 0 -variable A_ua equal 1 - -pair_style body/rounded/polyhedron ${c_n} ${c_t} ${mu} ${A_ua} ${cut_inner} -pair_style body/rounded/polyhedron 20 ${c_t} ${mu} ${A_ua} ${cut_inner} -pair_style body/rounded/polyhedron 20 5 ${mu} ${A_ua} ${cut_inner} -pair_style body/rounded/polyhedron 20 5 0 ${A_ua} ${cut_inner} -pair_style body/rounded/polyhedron 20 5 0 1 ${cut_inner} -pair_style body/rounded/polyhedron 20 5 0 1 0.5 -pair_coeff * * ${k_n} ${k_na} -pair_coeff * * 100 ${k_na} -pair_coeff * * 100 5 - -neighbor 0.5 bin -neigh_modify every 1 delay 0 check yes - -timestep 0.001 - -fix 1 all nve/body -fix 2 all gravity 1.0 spherical 0.0 -180.0 - -molecule object molecule.cube molecule.tetra toff 1 molecule.rod3d toff 2 molecule.point3d toff 3 -Read molecule object: - 1 atoms with max type 1 - 0 bonds with max type 0 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -Read molecule object: - 1 atoms with max type 2 - 0 bonds with max type 0 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -Read molecule object: - 1 atoms with max type 3 - 0 bonds with max type 0 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -Read molecule object: - 1 atoms with max type 4 - 0 bonds with max type 0 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 - -region slab block 5 45 5 45 25 35 units box -fix ins all pour 500 0 4767548 vol 0.4 10 region slab mol object molfrac 0.25 0.25 0.25 0.25 -Particle insertion: 134 every 4472 steps, 500 by step 13417 - -fix 4 all wall/body/polyhedron 2000 50 50 zplane 0.0 NULL - -#compute 1 all body/local type 1 2 3 -#dump 1 all local 1000 dump.polyhedron index c_1[1] c_1[2] c_1[3] c_1[4] -#dump 10 all custom 1000 tmp.dump id type x y z radius - -thermo_style custom step atoms ke pe etotal press - -thermo 1000 - -#dump 2 all image 500 image.*.jpg type type # zoom 1.5 adiam 1.5 body type 0 0 view 75 15 -#dump_modify 2 pad 6 - -run ${steps} -run 6000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5 - ghost atom cutoff = 5 - binsize = 2.5, bins = 20 20 20 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair body/rounded/polyhedron, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 0.5065 | 0.5065 | 0.5065 Mbytes -Step Atoms KinEng PotEng TotEng Press - 0 0 -0 0 0 0 - 1000 134 -0 0.00083010524 0.00083010524 -2.1515152e-06 - 2000 134 -0 -0.00069962476 -0.00069962476 -1.4170663e-08 - 3000 134 -0 -0.00069962687 -0.00069962687 -4.1478181e-11 - 4000 134 -0 -0.00069962687 -0.00069962687 -1.2141026e-13 - 5000 268 -0 0.014969705 0.014969705 3.0797164e-05 - 6000 268 -0 0.042467887 0.042467887 0.00056148005 -Loop time of 0.634737 on 1 procs for 6000 steps with 268 atoms - -Performance: 816716.196 tau/day, 9452.734 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.41391 | 0.41391 | 0.41391 | 0.0 | 65.21 -Neigh | 0.010547 | 0.010547 | 0.010547 | 0.0 | 1.66 -Comm | 0.0030921 | 0.0030921 | 0.0030921 | 0.0 | 0.49 -Output | 0.00011492 | 0.00011492 | 0.00011492 | 0.0 | 0.02 -Modify | 0.19736 | 0.19736 | 0.19736 | 0.0 | 31.09 -Other | | 0.009719 | | | 1.53 - -Nlocal: 268 ave 268 max 268 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 3 ave 3 max 3 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 68 ave 68 max 68 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 68 -Ave neighs/atom = 0.253731 -Neighbor list builds = 168 -Dangerous builds = 0 - - -Total wall time: 0:00:00 diff --git a/examples/body/log.9Jul18.body.squares.g++.1 b/examples/body/log.9Jul18.body.squares.g++.1 deleted file mode 100644 index 7b539797bd..0000000000 --- a/examples/body/log.9Jul18.body.squares.g++.1 +++ /dev/null @@ -1,221 +0,0 @@ -LAMMPS (29 Jun 2018) -# 2d rounded polygon bodies - -variable r index 4 -variable steps index 100000 -variable T index 0.5 -variable P index 0.1 -variable seed index 980411 - -units lj -dimension 2 - -atom_style body rounded/polygon 1 6 -atom_modify map array -read_data data.squares - orthogonal box = (0 0 -0.5) to (12 12 0.5) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2 atoms - 2 bodies - -replicate $r $r 1 -replicate 4 $r 1 -replicate 4 4 1 - orthogonal box = (0 0 -0.5) to (48 48 0.5) - 1 by 1 by 1 MPI processor grid - 32 atoms - Time spent = 0.00020504 secs - -velocity all create $T ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 980411 dist gaussian mom yes rot yes - -variable cut_inner equal 0.5 -variable k_n equal 100 -variable k_na equal 2 -variable c_n equal 1 -variable c_t equal 1 -variable mu equal 0.1 -variable delta_ua equal 0.5 - -pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 0.5 ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 0.5 0.5 -pair_coeff * * ${k_n} ${k_na} -pair_coeff * * 100 ${k_na} -pair_coeff * * 100 2 - -comm_modify vel yes - -neighbor 0.5 bin -neigh_modify every 1 delay 0 check yes - -timestep 0.001 - -#fix 1 all nve/body -#fix 1 all nvt/body temp $T $T 1.0 -fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 0.1 1.0 couple xy fixedpoint 0 0 0 - -fix 2 all enforce2d - -#compute 1 all body/local id 1 2 3 -#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] - -thermo_style custom step ke pe etotal press -thermo 1000 - -#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 -#dump_modify 2 pad 6 - -run ${steps} -run 100000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.15685 - ghost atom cutoff = 6.15685 - binsize = 3.07843, bins = 16 16 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair body/rounded/polygon, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.781 | 4.781 | 4.781 Mbytes -Step KinEng PotEng TotEng Press - 0 0.484375 0.25 0.734375 0.0067274306 - 1000 0.39423376 0.0017918048 0.39602557 0.0021941612 - 2000 0.42284177 0.01346585 0.43630762 0.0029377883 - 3000 0.58154405 0.011321689 0.59286574 0.003667871 - 4000 0.73518304 0.034603175 0.76978621 0.0018689207 - 5000 0.84367476 0.025292163 0.86896692 0.0089161373 - 6000 0.70803236 0.0085631016 0.71659546 0.0045552895 - 7000 0.56206452 0.10453031 0.66659483 0.010255161 - 8000 0.64538994 0.088817673 0.73420761 0.0037633655 - 9000 0.90540819 0.063696004 0.96910419 0.0077673359 - 10000 0.68632042 0.093265016 0.77958544 0.0057864838 - 11000 0.59118074 0.025654748 0.61683549 0.012518759 - 12000 0.67522767 0.038176401 0.71340407 0.01741153 - 13000 0.7644843 0.10429844 0.86878274 0.013161339 - 14000 0.56152694 0.067836655 0.62936359 0.016852121 - 15000 0.41895506 0.019513348 0.43846841 0.015225695 - 16000 0.55799421 0.1564559 0.71445011 0.011703561 - 17000 0.59391964 0.034450221 0.62836986 0.026215002 - 18000 0.75911858 0.030885726 0.7900043 0.018396366 - 19000 0.64417995 0.12110912 0.76528907 0.010247952 - 20000 0.57751435 0.16965651 0.74717086 0.023392323 - 21000 0.7613368 0.13405354 0.89539034 0.021498982 - 22000 0.57676692 0.18011879 0.75688571 0.024469161 - 23000 0.54043723 0.11842026 0.65885749 0.019799067 - 24000 0.62276061 0.038967924 0.66172853 0.019080086 - 25000 0.53157536 0.11651937 0.64809473 0.017019298 - 26000 0.72213293 0.039012448 0.76114538 0.015434904 - 27000 0.62157832 0.13697494 0.75855326 0.028711011 - 28000 0.41323738 0.16301101 0.57624839 0.041792632 - 29000 0.45774328 0.17569066 0.63343394 0.019975231 - 30000 0.78901796 0.099791386 0.88880934 0.024116947 - 31000 0.85205397 0.11977547 0.97182945 0.026667489 - 32000 0.37137095 0.1232622 0.49463315 0.00087637364 - 33000 0.26860871 0.26056381 0.52917252 0.036110517 - 34000 0.3018636 0.21336905 0.51523265 0.040315549 - 35000 0.39915129 0.28245957 0.68161085 0.034876856 - 36000 0.25761236 0.2352705 0.49288286 0.022772767 - 37000 0.1071233 0.31692858 0.42405188 0.017994666 - 38000 0.083729577 0.28473145 0.36846103 -0.0045370431 - 39000 0.070355565 0.26682083 0.33717639 0.017921556 - 40000 0.075894079 0.20077896 0.27667304 0.014873186 - 41000 0.05891028 0.15989064 0.21880092 0.025547873 - 42000 0.1225107 0.16583605 0.28834675 0.038842785 - 43000 0.17049189 0.14323991 0.3137318 0.029550161 - 44000 0.26823939 0.15208257 0.42032196 0.028113612 - 45000 0.10172203 0.1729706 0.27469264 -0.013769913 - 46000 0.14841355 0.19085074 0.33926429 -0.00073741985 - 47000 0.27654927 0.19097937 0.46752864 0.04021431 - 48000 0.53432331 0.080769923 0.61509323 0.029932845 - 49000 0.69111634 0.13064951 0.82176585 0.028985406 - 50000 0.24520806 0.18317453 0.42838258 0.05179746 - 51000 0.23541368 0.14281364 0.37822732 0.071884238 - 52000 0.25464996 0.095730242 0.3503802 0.034488204 - 53000 0.53677633 0.1058745 0.64265084 0.059932498 - 54000 0.32970921 0.27979128 0.60950049 0.062869716 - 55000 0.49094054 0.096735015 0.58767556 0.04728005 - 56000 0.54398249 0.2216472 0.76562969 0.056712022 - 57000 0.60869068 0.2338422 0.84253288 0.077143302 - 58000 0.72175509 0.18687368 0.90862877 0.019357656 - 59000 0.79442757 0.092502981 0.88693055 0.066882632 - 60000 0.6810555 0.077699385 0.75875488 0.095975173 - 61000 0.63178834 0.05071143 0.68249977 0.043586668 - 62000 0.76589344 0.044615704 0.81050914 0.085718411 - 63000 0.84815889 0.030527848 0.87868674 0.053072795 - 64000 0.7309043 0.051938637 0.78284294 0.058887766 - 65000 0.62498816 0.034474465 0.65946262 0.068446407 - 66000 0.69817494 0.068546004 0.76672094 0.062634433 - 67000 0.86444275 0.010184259 0.87462701 0.073635055 - 68000 0.77820319 0.0079319524 0.78613515 0.090330925 - 69000 0.56938919 0.0092629332 0.57865213 0.061838729 - 70000 0.61870712 0.010047381 0.6287545 0.066501338 - 71000 0.71651803 0.0088366199 0.72535465 0.079136316 - 72000 0.76278925 0.008828151 0.77161741 0.063672771 - 73000 0.75447428 0.0083985526 0.76287283 0.078256913 - 74000 0.66185251 0.0091910052 0.67104351 0.069840511 - 75000 0.58458829 0.0097671568 0.59435544 0.076123422 - 76000 0.7487564 0.0100022 0.7587586 0.076171741 - 77000 0.89505465 0.009250681 0.90430533 0.074921699 - 78000 0.73738164 0.0092029279 0.74658457 0.078835344 - 79000 0.65735281 0.010099528 0.66745233 0.077940627 - 80000 0.70247542 0.010306464 0.71278189 0.079560093 - 81000 0.74839505 0.010199092 0.75859415 0.080835104 - 82000 0.75193767 0.010274058 0.76221173 0.081086684 - 83000 0.71392598 0.010495573 0.72442156 0.082746145 - 84000 0.58498928 0.011027388 0.59601667 0.08356465 - 85000 0.59022869 0.011729474 0.60195817 0.084519397 - 86000 0.81753578 0.011208964 0.82874475 0.085490261 - 87000 0.83480682 0.010542579 0.8453494 0.086268527 - 88000 0.67322538 0.011170734 0.68439611 0.08751623 - 89000 0.62637389 0.012033316 0.6384072 0.088548094 - 90000 0.92828557 0.011750388 0.94003596 0.089199823 - 91000 0.96072564 0.010324509 0.97105015 0.090204803 - 92000 0.72105071 0.011484152 0.73253486 0.09140819 - 93000 0.65762527 0.012558219 0.67018349 0.092453474 - 94000 0.73991591 0.01261909 0.752535 0.093373477 - 95000 0.91791653 0.011980455 0.92989699 0.094182136 - 96000 0.76562561 0.011807085 0.7774327 0.095323684 - 97000 0.57292104 0.013610205 0.58653124 0.096505977 - 98000 0.68141076 0.013863204 0.69527396 0.097380069 - 99000 0.82390969 0.013002341 0.83691203 0.098235926 - 100000 0.77639728 0.012989342 0.78938662 0.099274147 -Loop time of 3.88899 on 1 procs for 100000 steps with 32 atoms - -Performance: 2221655.884 tau/day, 25713.610 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.056 | 3.056 | 3.056 | 0.0 | 78.58 -Neigh | 0.0051048 | 0.0051048 | 0.0051048 | 0.0 | 0.13 -Comm | 0.091444 | 0.091444 | 0.091444 | 0.0 | 2.35 -Output | 0.0011995 | 0.0011995 | 0.0011995 | 0.0 | 0.03 -Modify | 0.69909 | 0.69909 | 0.69909 | 0.0 | 17.98 -Other | | 0.03616 | | | 0.93 - -Nlocal: 32 ave 32 max 32 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 21 ave 21 max 21 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 57 ave 57 max 57 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 57 -Ave neighs/atom = 1.78125 -Neighbor list builds = 1445 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/body/log.9Jul18.body.squares.g++.4 b/examples/body/log.9Jul18.body.squares.g++.4 deleted file mode 100644 index 56d7734b7b..0000000000 --- a/examples/body/log.9Jul18.body.squares.g++.4 +++ /dev/null @@ -1,221 +0,0 @@ -LAMMPS (29 Jun 2018) -# 2d rounded polygon bodies - -variable r index 4 -variable steps index 100000 -variable T index 0.5 -variable P index 0.1 -variable seed index 980411 - -units lj -dimension 2 - -atom_style body rounded/polygon 1 6 -atom_modify map array -read_data data.squares - orthogonal box = (0 0 -0.5) to (12 12 0.5) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 2 atoms - 2 bodies - -replicate $r $r 1 -replicate 4 $r 1 -replicate 4 4 1 - orthogonal box = (0 0 -0.5) to (48 48 0.5) - 2 by 2 by 1 MPI processor grid - 32 atoms - Time spent = 0.000324011 secs - -velocity all create $T ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 980411 dist gaussian mom yes rot yes - -variable cut_inner equal 0.5 -variable k_n equal 100 -variable k_na equal 2 -variable c_n equal 1 -variable c_t equal 1 -variable mu equal 0.1 -variable delta_ua equal 0.5 - -pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 0.5 ${cut_inner} -pair_style body/rounded/polygon 1 1 0.1 0.5 0.5 -pair_coeff * * ${k_n} ${k_na} -pair_coeff * * 100 ${k_na} -pair_coeff * * 100 2 - -comm_modify vel yes - -neighbor 0.5 bin -neigh_modify every 1 delay 0 check yes - -timestep 0.001 - -#fix 1 all nve/body -#fix 1 all nvt/body temp $T $T 1.0 -fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 $P 1.0 couple xy fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 y 0.001 0.1 1.0 couple xy fixedpoint 0 0 0 - -fix 2 all enforce2d - -#compute 1 all body/local id 1 2 3 -#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] - -thermo_style custom step ke pe etotal press -thermo 1000 - -#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 -#dump_modify 2 pad 6 - -run ${steps} -run 100000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.15685 - ghost atom cutoff = 6.15685 - binsize = 3.07843, bins = 16 16 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair body/rounded/polygon, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.774 | 4.774 | 4.774 Mbytes -Step KinEng PotEng TotEng Press - 0 0.484375 0.25 0.734375 0.0067274306 - 1000 0.39423376 0.0017918048 0.39602557 0.0021941612 - 2000 0.42284177 0.01346585 0.43630762 0.0029377883 - 3000 0.58154405 0.011321689 0.59286574 0.003667871 - 4000 0.73518304 0.034603175 0.76978621 0.0018689207 - 5000 0.84367476 0.025292163 0.86896692 0.0089161373 - 6000 0.70803236 0.0085631016 0.71659546 0.0045552895 - 7000 0.56206452 0.10453031 0.66659483 0.010255161 - 8000 0.64538994 0.088817673 0.73420761 0.0037633655 - 9000 0.90540819 0.063696004 0.96910419 0.0077673359 - 10000 0.68632042 0.093265016 0.77958544 0.0057864837 - 11000 0.59118074 0.025654748 0.61683549 0.012518759 - 12000 0.67522767 0.038176401 0.71340407 0.01741153 - 13000 0.7644843 0.10429844 0.86878274 0.013161339 - 14000 0.56152694 0.067836656 0.6293636 0.016852113 - 15000 0.41895505 0.019513353 0.43846841 0.015225696 - 16000 0.55799443 0.15645637 0.7144508 0.011703646 - 17000 0.59385248 0.03451986 0.62837234 0.025482966 - 18000 0.75902169 0.031103586 0.79012527 0.018263354 - 19000 0.64266826 0.12535314 0.76802141 0.014884119 - 20000 0.57836261 0.16581188 0.74417449 0.024667165 - 21000 0.78281936 0.11877527 0.90159464 -0.0090089213 - 22000 0.5312006 0.13300874 0.66420934 0.025797278 - 23000 0.56458861 0.084369128 0.64895774 0.024630917 - 24000 0.65126875 0.06122992 0.71249867 0.034377198 - 25000 0.55173441 0.15694886 0.70868327 0.021634086 - 26000 0.59121615 0.17071182 0.76192797 0.024758366 - 27000 0.6394843 0.17442949 0.81391378 0.034919937 - 28000 0.31144221 0.41243036 0.72387256 0.074115225 - 29000 0.13516917 0.3075419 0.44271107 0.023861298 - 30000 0.14094934 0.24407203 0.38502137 0.037030438 - 31000 0.26313749 0.087395422 0.35053291 0.042347005 - 32000 0.51602457 0.063012079 0.57903664 0.018550299 - 33000 0.55628829 0.200213 0.75650129 0.026507686 - 34000 0.97399408 0.082504517 1.0564986 0.037889878 - 35000 0.64710533 0.17662002 0.82372535 0.058295508 - 36000 0.45769083 0.08241194 0.54010277 0.014957415 - 37000 0.72850105 0.053874061 0.78237512 0.037194593 - 38000 0.44177995 0.28939498 0.73117493 0.045194029 - 39000 0.46828451 0.077630686 0.54591519 0.089849009 - 40000 0.46786451 0.092828423 0.56069294 0.028042052 - 41000 0.71861856 0.097085715 0.81570427 0.036473296 - 42000 0.74121021 0.10553127 0.84674148 0.054058843 - 43000 0.62945489 0.12770673 0.75716161 0.047267994 - 44000 0.49900638 0.085150056 0.58415644 0.054798793 - 45000 0.70199572 0.063415877 0.7654116 0.038363546 - 46000 0.49513142 0.10649384 0.60162526 0.059392561 - 47000 0.3858898 0.079458749 0.46534855 0.051825764 - 48000 0.62585854 0.028585902 0.65444444 0.054074424 - 49000 0.65934482 0.51865062 1.1779954 -0.035272836 - 50000 0.5420438 0.082056756 0.62410056 0.031187494 - 51000 0.36685223 0.14224019 0.50909241 0.073790397 - 52000 0.19044627 0.15368389 0.34413016 0.059034266 - 53000 0.26847678 0.075693324 0.3441701 0.032276915 - 54000 0.3593711 0.19034549 0.54971659 0.070827883 - 55000 0.21659198 0.1929074 0.40949939 0.035916364 - 56000 0.28242715 0.12313241 0.40555956 0.062083926 - 57000 0.34067475 0.14711992 0.48779467 0.059321458 - 58000 0.4842796 0.16143425 0.64571385 0.059048247 - 59000 0.84438871 0.076546849 0.92093556 0.048046901 - 60000 0.92794849 0.054331626 0.98228012 0.058392272 - 61000 0.6916736 0.076168342 0.76784194 0.058654987 - 62000 0.63317965 0.094506389 0.72768604 0.061044719 - 63000 0.63317266 0.038785593 0.67195825 0.097236147 - 64000 0.81696668 0.121811 0.93877769 0.064935373 - 65000 0.82644758 0.25188344 1.078331 0.093352359 - 66000 0.64975019 0.17930857 0.82905876 0.058805254 - 67000 0.63487678 0.16877059 0.80364737 0.070254696 - 68000 0.79140717 0.11631004 0.9077172 0.064646394 - 69000 0.85687272 0.057835331 0.91470805 0.071057291 - 70000 0.67785976 0.040686768 0.71854653 0.074687222 - 71000 0.60594577 0.032193155 0.63813893 0.069349268 - 72000 0.77586745 0.024068533 0.79993598 0.083394193 - 73000 0.88877625 0.025746326 0.91452258 0.081511105 - 74000 0.73507888 0.036574786 0.77165367 0.075360233 - 75000 0.68787782 0.042098622 0.72997644 0.068651098 - 76000 0.72515745 0.04360868 0.76876613 0.069594624 - 77000 0.77580944 0.041826702 0.81763614 0.071937144 - 78000 0.76640394 0.039285046 0.80568899 0.074274921 - 79000 0.62504309 0.039593585 0.66463667 0.076443295 - 80000 0.60001642 0.043468215 0.64348464 0.094547719 - 81000 0.82175037 0.045608873 0.86735924 0.080186295 - 82000 0.85783276 0.042692576 0.90052534 0.081576548 - 83000 0.71367707 0.042172193 0.75584926 0.08256625 - 84000 0.68532406 0.044724759 0.73004882 0.083672013 - 85000 0.72576789 0.046982462 0.77275035 0.084789331 - 86000 0.75597701 0.04765086 0.80362787 0.085758056 - 87000 0.74190598 0.047629096 0.78953507 0.086679976 - 88000 0.60967704 0.049906172 0.65958321 0.085526191 - 89000 0.54490288 0.054768238 0.59967112 0.090604027 - 90000 0.75398341 0.057153453 0.81113686 0.091900858 - 91000 0.84577472 0.052753512 0.89852823 0.091913909 - 92000 0.7176235 0.050677427 0.76830093 0.092032507 - 93000 0.61699446 0.054097013 0.67109147 0.092071275 - 94000 0.76330752 0.057398618 0.82070614 0.092435043 - 95000 0.98754458 0.053801311 1.0413459 0.093526707 - 96000 0.7405897 0.052135628 0.79272533 0.095011929 - 97000 0.65587599 0.057011962 0.71288795 0.096692123 - 98000 0.72345634 0.060700171 0.78415651 0.097510345 - 99000 0.88283624 0.061795247 0.94463149 0.09799633 - 100000 0.86303812 0.058912988 0.92195111 0.09892993 -Loop time of 2.80074 on 4 procs for 100000 steps with 32 atoms - -Performance: 3084895.573 tau/day, 35704.810 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.81169 | 0.89466 | 0.97669 | 8.4 | 31.94 -Neigh | 0.0017524 | 0.0018129 | 0.0018773 | 0.1 | 0.06 -Comm | 0.91307 | 0.99193 | 1.0691 | 7.3 | 35.42 -Output | 0.00076914 | 0.00093722 | 0.0013936 | 0.0 | 0.03 -Modify | 0.75335 | 0.75779 | 0.76346 | 0.4 | 27.06 -Other | | 0.1536 | | | 5.48 - -Nlocal: 8 ave 10 max 4 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 17.25 ave 19 max 15 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 13.5 ave 21 max 5 min -Histogram: 1 0 0 0 1 0 1 0 0 1 - -Total # of neighbors = 54 -Ave neighs/atom = 1.6875 -Neighbor list builds = 1443 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/body/log.9Jul18.body.wall2d.g++.1 b/examples/body/log.9Jul18.body.wall2d.g++.1 deleted file mode 100644 index f22c366380..0000000000 --- a/examples/body/log.9Jul18.body.wall2d.g++.1 +++ /dev/null @@ -1,223 +0,0 @@ -LAMMPS (29 Jun 2018) -# 2d rounded polygon bodies - -variable r index 4 -variable steps index 100000 -variable T index 0.5 -variable P index 0.1 -variable seed index 980411 - -units lj -dimension 2 - -atom_style body rounded/polygon 1 6 -atom_modify map array -read_data data.squares - orthogonal box = (0 0 -0.5) to (12 12 0.5) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2 atoms - 2 bodies - -replicate $r $r 1 -replicate 4 $r 1 -replicate 4 4 1 - orthogonal box = (0 0 -0.5) to (48 48 0.5) - 1 by 1 by 1 MPI processor grid - 32 atoms - Time spent = 0.00029707 secs - -velocity all create $T ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 980411 dist gaussian mom yes rot yes - -change_box all boundary p f p - -variable cut_inner equal 0.5 -variable k_n equal 100 -variable k_na equal 2 -variable c_n equal 0.1 -variable c_t equal 0.1 -variable mu equal 0.1 -variable delta_ua equal 0.5 - -pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 0.5 -pair_coeff * * ${k_n} ${k_na} -pair_coeff * * 100 ${k_na} -pair_coeff * * 100 2 - -comm_modify vel yes - -neighbor 0.5 bin -neigh_modify every 1 delay 0 check yes - -timestep 0.001 - -#fix 1 all nve/body -#fix 1 all nvt/body temp $T $T 1.0 -fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 fixedpoint 0 0 0 - -fix 2 all enforce2d -fix 3 all wall/body/polygon 2000 50 50 yplane 0.0 48.0 - -#compute 1 all body/local id 1 2 3 -#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] - -thermo_style custom step ke pe etotal press -thermo 1000 - -#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 -#dump_modify 2 pad 6 - -run ${steps} -run 100000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.15685 - ghost atom cutoff = 6.15685 - binsize = 3.07843, bins = 16 16 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair body/rounded/polygon, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.771 | 4.771 | 4.771 Mbytes -Step KinEng PotEng TotEng Press - 0 0.484375 0.25 0.734375 0.0067274306 - 1000 0.49241101 0.0031318767 0.49554289 0.017768281 - 2000 0.56118632 0.0026068888 0.56379321 0.003410416 - 3000 0.75565115 0.025578366 0.78122951 0.0071862988 - 4000 0.72298647 0.093150646 0.81613712 0.003190158 - 5000 0.51684166 0.049164868 0.56600653 0.0096960168 - 6000 0.56627905 0.048132853 0.6144119 0.020733586 - 7000 0.58122129 0.018223718 0.59944501 0.0038160759 - 8000 0.64297977 0.025934821 0.66891459 0.0041091784 - 9000 0.41748404 0.0077890042 0.42527305 0.0039270065 - 10000 0.35738377 0.078487805 0.43587158 3.9079782e-05 - 11000 0.41529308 0.13619284 0.55148592 -0.0067482285 - 12000 0.43274718 0.071315497 0.50406268 0.007006378 - 13000 0.4748331 0.069904647 0.54473775 0.0010384372 - 14000 0.6287791 0.12721033 0.75598943 0.0047792448 - 15000 0.4692413 0.12344005 0.59268136 0.018033616 - 16000 0.43157074 0.14306789 0.57463862 0.042356676 - 17000 0.53085999 0.22126296 0.75212294 0.027509646 - 18000 0.52688968 0.13225282 0.6591425 0.0021558013 - 19000 0.55032328 0.12513047 0.67545375 0.025036251 - 20000 0.48465097 0.1431055 0.62775647 0.017193781 - 21000 0.53166734 0.21928574 0.75095307 0.011564317 - 22000 0.62177353 0.09296159 0.71473512 0.017660922 - 23000 0.6972939 0.12434123 0.82163514 0.024432327 - 24000 0.42767372 0.22152311 0.64919684 -0.013712449 - 25000 0.4816037 0.19272865 0.67433236 0.052386055 - 26000 0.72642579 0.19697046 0.92339625 0.020407694 - 27000 0.39649144 0.15058326 0.5470747 0.023705766 - 28000 0.44896324 0.18500106 0.6339643 -0.0089410286 - 29000 0.5565759 0.11085772 0.66743362 0.048437166 - 30000 0.58173584 0.21773281 0.79946865 0.0057357773 - 31000 0.49199415 0.23601982 0.72801397 0.046744152 - 32000 0.55665496 0.20542161 0.76207658 -0.0038756805 - 33000 0.62730739 0.24460524 0.87191263 0.045330682 - 34000 0.58107044 0.16395278 0.74502322 -0.0049496051 - 35000 0.56838849 0.21842922 0.78681771 0.0062086036 - 36000 0.45910273 0.28464172 0.74374445 -0.011700747 - 37000 0.37092037 0.27646862 0.647389 0.022305679 - 38000 0.7278047 0.30674438 1.0345491 0.07698342 - 39000 0.5132923 0.27395066 0.78724295 0.026898634 - 40000 0.62348649 0.24424644 0.86773293 0.039403899 - 41000 0.3658401 0.15512326 0.52096337 0.022559003 - 42000 0.4912253 0.35712978 0.84835508 -0.010336341 - 43000 0.70225957 0.36314638 1.0654059 0.004148866 - 44000 0.56958157 0.25488927 0.82447084 0.067537066 - 45000 0.45854352 0.30149439 0.76003791 -0.017002401 - 46000 0.62787247 0.34567995 0.97355242 0.11894801 - 47000 0.61348914 0.29378625 0.90727539 0.067873976 - 48000 0.71301829 0.34135284 1.0543711 0.021077736 - 49000 0.53520804 0.30593196 0.84113999 0.0059257647 - 50000 0.44966403 0.35370793 0.80337195 0.0020395669 - 51000 0.5236113 0.32296924 0.84658054 -0.051011506 - 52000 0.53905573 0.351771 0.89082672 0.013720106 - 53000 0.55978158 0.41293947 0.97272106 0.068558589 - 54000 0.52170459 0.2718066 0.7935112 0.0093138985 - 55000 0.61078876 0.43353897 1.0443277 0.045377392 - 56000 0.51300655 0.33182278 0.84482933 -0.018418487 - 57000 0.54882822 0.38380093 0.93262915 0.10249946 - 58000 0.72106212 0.45361279 1.1746749 0.030313481 - 59000 0.55871447 0.63823029 1.1969448 0.019079703 - 60000 0.49395192 0.58283102 1.0767829 0.0179349 - 61000 0.45991079 0.62540573 1.0853165 0.074398804 - 62000 0.4655788 0.60862262 1.0742014 0.11472976 - 63000 0.55634524 0.63069255 1.1870378 -0.0025676135 - 64000 0.57688903 0.45435264 1.0312417 0.0083813852 - 65000 0.57168922 0.42217005 0.99385927 0.044931269 - 66000 0.6206044 0.46727538 1.0878798 0.019686229 - 67000 0.61037155 0.41840109 1.0287726 0.0195109 - 68000 0.63848598 0.41305347 1.0515395 0.072940144 - 69000 0.49244916 0.3834095 0.87585866 0.07963677 - 70000 0.41847062 0.51907975 0.93755037 0.18447904 - 71000 0.45198986 0.52973709 0.98172695 0.078419371 - 72000 0.47064262 0.37808165 0.84872427 -0.00046308054 - 73000 0.6690143 0.37549359 1.0445079 0.061208432 - 74000 0.60444955 0.33779636 0.94224592 -0.068840321 - 75000 0.61762382 0.3916421 1.0092659 0.16253292 - 76000 0.63657961 0.50277989 1.1393595 0.013857508 - 77000 0.52524028 0.43597896 0.96121924 -0.03296482 - 78000 0.43803533 0.33172284 0.76975817 0.078763029 - 79000 0.67156089 0.55272177 1.2242827 0.080822223 - 80000 0.68678238 0.46061627 1.1473987 0.0027036992 - 81000 0.64956678 0.44959229 1.0991591 0.11201483 - 82000 0.51060477 0.43508342 0.9456882 0.028000608 - 83000 0.59550548 0.69026083 1.2857663 -0.0015809004 - 84000 0.64222145 0.38768816 1.0299096 0.014153173 - 85000 0.7661229 0.43445261 1.2005755 0.048034534 - 86000 0.60025257 0.53027929 1.1305319 0.0056865157 - 87000 0.46220939 0.47470035 0.93690974 0.075311946 - 88000 0.54123847 0.62899839 1.1702369 0.13260162 - 89000 0.61212272 0.6114241 1.2235468 0.033284822 - 90000 0.63924773 0.6916249 1.3308726 0.045088296 - 91000 0.49316865 0.51037033 1.003539 0.023203598 - 92000 0.57572123 0.43496319 1.0106844 0.297092 - 93000 0.65187559 0.56815972 1.2200353 0.1538215 - 94000 0.64107331 0.58948521 1.2305585 0.031117778 - 95000 0.64584158 0.6364688 1.2823104 0.096154676 - 96000 0.60509093 0.601487 1.2065779 0.03457172 - 97000 0.68837218 0.77974186 1.468114 0.17801164 - 98000 0.62725266 0.64137144 1.2686241 0.17449001 - 99000 0.46861221 0.67000291 1.1386151 0.2429588 - 100000 0.5879119 0.7140612 1.3019731 0.064634257 -Loop time of 2.50594 on 1 procs for 100000 steps with 32 atoms - -Performance: 3447804.126 tau/day, 39905.140 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.5639 | 1.5639 | 1.5639 | 0.0 | 62.41 -Neigh | 0.0086911 | 0.0086911 | 0.0086911 | 0.0 | 0.35 -Comm | 0.058926 | 0.058926 | 0.058926 | 0.0 | 2.35 -Output | 0.0012379 | 0.0012379 | 0.0012379 | 0.0 | 0.05 -Modify | 0.83537 | 0.83537 | 0.83537 | 0.0 | 33.34 -Other | | 0.03781 | | | 1.51 - -Nlocal: 32 ave 32 max 32 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 20 ave 20 max 20 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 57 ave 57 max 57 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 57 -Ave neighs/atom = 1.78125 -Neighbor list builds = 2705 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/body/log.9Jul18.body.wall2d.g++.4 b/examples/body/log.9Jul18.body.wall2d.g++.4 deleted file mode 100644 index 7239fd4dcd..0000000000 --- a/examples/body/log.9Jul18.body.wall2d.g++.4 +++ /dev/null @@ -1,223 +0,0 @@ -LAMMPS (29 Jun 2018) -# 2d rounded polygon bodies - -variable r index 4 -variable steps index 100000 -variable T index 0.5 -variable P index 0.1 -variable seed index 980411 - -units lj -dimension 2 - -atom_style body rounded/polygon 1 6 -atom_modify map array -read_data data.squares - orthogonal box = (0 0 -0.5) to (12 12 0.5) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 2 atoms - 2 bodies - -replicate $r $r 1 -replicate 4 $r 1 -replicate 4 4 1 - orthogonal box = (0 0 -0.5) to (48 48 0.5) - 2 by 2 by 1 MPI processor grid - 32 atoms - Time spent = 0.000386 secs - -velocity all create $T ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 ${seed} dist gaussian mom yes rot yes -velocity all create 0.5 980411 dist gaussian mom yes rot yes - -change_box all boundary p f p - -variable cut_inner equal 0.5 -variable k_n equal 100 -variable k_na equal 2 -variable c_n equal 0.1 -variable c_t equal 0.1 -variable mu equal 0.1 -variable delta_ua equal 0.5 - -pair_style body/rounded/polygon ${c_n} ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 ${c_t} ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 ${mu} ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 ${delta_ua} ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 ${cut_inner} -pair_style body/rounded/polygon 0.1 0.1 0.1 0.5 0.5 -pair_coeff * * ${k_n} ${k_na} -pair_coeff * * 100 ${k_na} -pair_coeff * * 100 2 - -comm_modify vel yes - -neighbor 0.5 bin -neigh_modify every 1 delay 0 check yes - -timestep 0.001 - -#fix 1 all nve/body -#fix 1 all nvt/body temp $T $T 1.0 -fix 1 all npt/body temp $T $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 $T 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 $P 1.0 fixedpoint 0 0 0 -fix 1 all npt/body temp 0.5 0.5 1.0 x 0.001 0.1 1.0 fixedpoint 0 0 0 - -fix 2 all enforce2d -fix 3 all wall/body/polygon 2000 50 50 yplane 0.0 48.0 - -#compute 1 all body/local id 1 2 3 -#dump 1 all local 100000 dump.polygon.* index c_1[1] c_1[2] c_1[3] c_1[4] - -thermo_style custom step ke pe etotal press -thermo 1000 - -#dump 2 all image 10000 image.*.jpg type type zoom 2.0 # adiam 1.5 body type 0 0 -#dump_modify 2 pad 6 - -run ${steps} -run 100000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.15685 - ghost atom cutoff = 6.15685 - binsize = 3.07843, bins = 16 16 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair body/rounded/polygon, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.773 | 4.773 | 4.773 Mbytes -Step KinEng PotEng TotEng Press - 0 0.484375 0.25 0.734375 0.0067274306 - 1000 0.49241101 0.0031318767 0.49554289 0.017768281 - 2000 0.56118632 0.0026068888 0.56379321 0.003410416 - 3000 0.75565115 0.025578366 0.78122951 0.0071862988 - 4000 0.72298647 0.093150646 0.81613712 0.003190158 - 5000 0.51684166 0.049164868 0.56600653 0.0096960168 - 6000 0.56627905 0.048132853 0.6144119 0.020733586 - 7000 0.58122129 0.018223718 0.59944501 0.0038160759 - 8000 0.64297977 0.025934821 0.66891459 0.0041091784 - 9000 0.41748404 0.0077890042 0.42527305 0.0039270065 - 10000 0.35738377 0.078487805 0.43587158 3.9079865e-05 - 11000 0.41529307 0.13619284 0.55148591 -0.0067482285 - 12000 0.43274718 0.071315527 0.50406271 0.007006369 - 13000 0.4748324 0.069905666 0.54473807 0.0010385254 - 14000 0.62603727 0.098905625 0.7249429 0.0048876764 - 15000 0.44512086 0.10415235 0.54927321 0.01902062 - 16000 0.47460177 0.18053316 0.65513493 0.045013976 - 17000 0.52742676 0.10110706 0.62853382 0.013615471 - 18000 0.46111734 0.096118795 0.55723613 0.0073676834 - 19000 0.59668439 0.13652292 0.73320731 0.029403553 - 20000 0.46840192 0.11611719 0.58451911 -0.00034412499 - 21000 0.53550533 0.096457461 0.6319628 0.0019785732 - 22000 0.46599715 0.13206373 0.59806087 0.031970672 - 23000 0.49280776 0.20404726 0.69685501 0.03657433 - 24000 0.60901688 0.18255214 0.79156902 0.044955017 - 25000 0.47345185 0.13671357 0.61016542 0.020313539 - 26000 0.47653832 0.12448225 0.60102057 0.01878099 - 27000 0.50008212 0.24740634 0.74748845 0.021862639 - 28000 0.41627204 0.2519463 0.66821834 0.054683701 - 29000 0.55608273 0.23100212 0.78708485 -0.0043318497 - 30000 0.53884537 0.3001584 0.83900377 -0.012838186 - 31000 0.53036238 0.2300328 0.76039518 -0.0061688449 - 32000 0.42666792 0.20536256 0.63203048 0.045305282 - 33000 0.62908185 0.1652033 0.79428515 0.0072777588 - 34000 0.47028154 0.388736 0.85901754 0.04332288 - 35000 0.54602322 0.2775624 0.82358562 0.02898206 - 36000 0.59860544 0.21824655 0.81685199 0.0025936194 - 37000 0.62467827 0.11983499 0.74451326 0.050052743 - 38000 0.72594229 0.36584781 1.0917901 0.04280621 - 39000 0.51129656 0.23859043 0.74988699 0.050817447 - 40000 0.53263836 0.24212889 0.77476725 0.036245922 - 41000 0.50288088 0.36668283 0.86956371 0.018381415 - 42000 0.46653688 0.21974887 0.68628574 0.012661062 - 43000 0.61738785 0.32131037 0.93869821 0.012709433 - 44000 0.56603903 0.26515554 0.83119457 0.03315102 - 45000 0.56231638 0.32111693 0.88343331 0.06079756 - 46000 0.7096208 0.2570131 0.96663391 0.048770468 - 47000 0.588755 0.1880748 0.7768298 0.035962604 - 48000 0.56296339 0.25783519 0.82079858 0.053019928 - 49000 0.419885 0.42328618 0.84317118 0.038105269 - 50000 0.63073351 0.41426285 1.0449964 0.0015271048 - 51000 0.59357935 0.184222 0.77780136 0.015996218 - 52000 0.60608471 0.36247533 0.96856003 0.10984665 - 53000 0.5227842 0.27686739 0.79965159 0.02761699 - 54000 0.39435923 0.34197355 0.73633278 0.061183263 - 55000 0.46748455 0.34230903 0.80979358 0.077441382 - 56000 0.59819827 0.29212061 0.89031889 0.043772353 - 57000 0.61682559 0.32788566 0.94471124 0.03992069 - 58000 0.52702478 0.24891506 0.77593984 0.058480883 - 59000 0.66925719 0.4109031 1.0801603 0.072434423 - 60000 0.66807714 0.39233068 1.0604078 0.082370324 - 61000 0.5724275 0.43308567 1.0055132 0.0072945426 - 62000 0.49433556 0.38453743 0.87887299 0.0036097443 - 63000 0.57575143 0.54067119 1.1164226 0.073339638 - 64000 0.68045383 0.38246533 1.0629192 0.025314593 - 65000 0.59843527 0.42928622 1.0277215 -0.030096445 - 66000 0.60274797 0.50186417 1.1046121 0.069797184 - 67000 0.47450407 0.52689807 1.0014021 0.008758012 - 68000 0.5514135 0.64113187 1.1925454 0.093863314 - 69000 0.52008074 0.45749565 0.97757639 -0.066061381 - 70000 0.69042662 0.50416006 1.1945867 0.014128617 - 71000 0.63925854 0.35153425 0.9907928 -0.01134957 - 72000 0.52088835 0.47626986 0.99715821 0.10198133 - 73000 0.46333852 0.5515537 1.0148922 0.00060582772 - 74000 0.53481418 0.50409531 1.0389095 0.00919451 - 75000 0.67182749 0.50380162 1.1756291 0.043301985 - 76000 0.70492289 0.4112122 1.1161351 0.14880484 - 77000 0.59781817 0.50197661 1.0997948 -0.057111711 - 78000 0.51677429 0.4348232 0.95159749 -0.0074619446 - 79000 0.50663297 0.55000424 1.0566372 0.0052071216 - 80000 0.59392006 0.48394003 1.0778601 -0.018990234 - 81000 0.66323593 0.40358336 1.0668193 -0.02961345 - 82000 0.61596979 0.49177944 1.1077492 0.1314853 - 83000 0.63917554 0.61656584 1.2557414 0.11908351 - 84000 0.49305291 0.46161646 0.95466937 0.033558488 - 85000 0.52552044 0.54250555 1.068026 0.13015174 - 86000 0.55140914 0.38924725 0.94065638 0.047412499 - 87000 0.60952504 0.52603688 1.1355619 0.039230066 - 88000 0.50119735 0.547539 1.0487364 0.019659933 - 89000 0.40331401 0.50331134 0.90662535 -0.056906034 - 90000 0.47067839 0.51306911 0.9837475 0.11918166 - 91000 0.45564995 0.38693455 0.8425845 0.12040045 - 92000 0.64163032 0.34232532 0.98395564 0.0057051641 - 93000 0.70375593 0.53646186 1.2402178 0.16044241 - 94000 0.53378112 0.51971406 1.0534952 0.11389004 - 95000 0.47055342 0.50396004 0.97451346 0.079424215 - 96000 0.59543473 0.40204536 0.99748009 0.096813093 - 97000 0.64821917 0.50051728 1.1487365 0.054071312 - 98000 0.55723937 0.4945909 1.0518303 0.047316424 - 99000 0.56044424 0.50773312 1.0681774 0.0149959 - 100000 0.68254229 0.32704484 1.0095871 0.0069212661 -Loop time of 2.20043 on 4 procs for 100000 steps with 32 atoms - -Performance: 3926501.701 tau/day, 45445.622 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.41008 | 0.41366 | 0.41719 | 0.4 | 18.80 -Neigh | 0.0027823 | 0.0030481 | 0.0034747 | 0.5 | 0.14 -Comm | 0.74581 | 0.7675 | 0.78684 | 2.0 | 34.88 -Output | 0.00082111 | 0.0010884 | 0.0016899 | 1.1 | 0.05 -Modify | 0.83828 | 0.85329 | 0.86656 | 1.4 | 38.78 -Other | | 0.1618 | | | 7.36 - -Nlocal: 8 ave 9 max 7 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 12.75 ave 14 max 12 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 11 ave 19 max 5 min -Histogram: 1 0 0 2 0 0 0 0 0 1 - -Total # of neighbors = 44 -Ave neighs/atom = 1.375 -Neighbor list builds = 2663 -Dangerous builds = 0 -Total wall time: 0:00:02 From d0a83e9e1275c512bdae6b2f61670cb26a7029d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 14:51:19 -0500 Subject: [PATCH 206/273] update cmap example logfiles --- examples/cmap/log.11Apr17.cmap.g++.1 | 205 -------------------------- examples/cmap/log.11Apr17.cmap.g++.4 | 205 -------------------------- examples/cmap/log.27Nov18.cmap.g++.1 | 207 +++++++++++++++++++++++++++ examples/cmap/log.27Nov18.cmap.g++.4 | 207 +++++++++++++++++++++++++++ 4 files changed, 414 insertions(+), 410 deletions(-) delete mode 100644 examples/cmap/log.11Apr17.cmap.g++.1 delete mode 100644 examples/cmap/log.11Apr17.cmap.g++.4 create mode 100644 examples/cmap/log.27Nov18.cmap.g++.1 create mode 100644 examples/cmap/log.27Nov18.cmap.g++.4 diff --git a/examples/cmap/log.11Apr17.cmap.g++.1 b/examples/cmap/log.11Apr17.cmap.g++.1 deleted file mode 100644 index 9b4fc29991..0000000000 --- a/examples/cmap/log.11Apr17.cmap.g++.1 +++ /dev/null @@ -1,205 +0,0 @@ -LAMMPS (31 Mar 2017) -# Created by charmm2lammps v1.8.2.6 beta on Thu Mar 3 20:56:57 EST 2016 - -units real -neigh_modify delay 2 every 1 -#newton off - -boundary p p p - -atom_style full -bond_style harmonic -angle_style charmm -dihedral_style charmmfsw -improper_style harmonic - -pair_style lj/charmmfsw/coul/charmmfsh 8 12 -pair_modify mix arithmetic - -fix cmap all cmap charmm22.cmap -Reading potential file charmm22.cmap with DATE: 2016-09-26 -fix_modify cmap energy yes - -read_data gagg.data fix cmap crossterm CMAP - orthogonal box = (-34.4147 -36.1348 -39.3491) to (45.5853 43.8652 40.6509) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 34 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 12 = max dihedrals/atom - scanning impropers ... - 1 = max impropers/atom - reading bonds ... - 33 bonds - reading angles ... - 57 angles - reading dihedrals ... - 75 dihedrals - reading impropers ... - 7 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 13 = max # of 1-4 neighbors - 16 = max # of special neighbors - -special_bonds charmm -fix 1 all nve - -#fix 1 all nvt temp 300 300 100.0 -#fix 2 all shake 1e-9 500 0 m 1.0 - -velocity all create 0.0 12345678 dist uniform - -thermo 1000 -thermo_style custom step ecoul evdwl ebond eangle edihed f_cmap eimp -timestep 2.0 - -run 100000 -Neighbor list info ... - update every 1 steps, delay 2 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 12 12 12 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/charmmfsw/coul/charmmfsh, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 14.96 | 14.96 | 14.96 Mbytes -Step E_coul E_vdwl E_bond E_angle E_dihed f_cmap E_impro - 0 16.287573 -0.85933785 1.2470497 4.8441789 4.5432816 -1.473352 0.10453023 - 1000 18.816462 -0.84379243 0.78931817 2.7554247 4.4371421 -2.7762038 0.12697656 - 2000 18.091571 -1.045888 0.72306589 3.0951524 4.6725102 -2.3580092 0.22712496 - 3000 17.835596 -1.2171641 0.72666403 2.6696491 5.4373798 -2.0737041 0.075101693 - 4000 16.211232 -0.42713611 0.99472642 3.8961462 5.2009895 -2.5626866 0.17356243 - 5000 17.72183 -0.57081189 0.90733068 3.4376382 4.5457582 -2.3727543 0.12354518 - 6000 18.753977 -1.5772499 0.81468321 2.9236782 4.6033216 -2.3380859 0.12835782 - 7000 18.186024 -0.84205608 0.58996182 3.0329585 4.7221473 -2.5733243 0.10047631 - 8000 18.214306 -1.1360938 0.72597611 3.7493028 4.7319958 -2.8957969 0.2006046 - 9000 17.248408 -0.48641993 0.90266229 2.9721743 4.7651056 -2.1473354 0.1302043 - 10000 17.760655 -1.2968444 0.92384663 3.7007455 4.7378947 -2.2147779 0.06940579 - 11000 17.633929 -0.57368413 0.84872849 3.4277114 4.285393 -2.236944 0.17204973 - 12000 18.305835 -1.0675148 0.75879532 2.8853173 4.685027 -2.409087 0.087538866 - 13000 17.391558 -0.9975291 0.66671947 3.8065638 5.2285578 -2.4198822 0.06253594 - 14000 17.483387 -0.67727643 0.91966477 3.7317031 4.7770445 -2.6080027 0.11487095 - 15000 18.131749 -1.1918751 1.0025684 3.1238131 4.789742 -2.2546745 0.13782813 - 16000 16.972343 -0.43926531 0.60644597 3.7551592 4.8658618 -2.2627659 0.12353145 - 17000 18.080785 -1.2073565 0.7867072 3.5671106 4.43754 -2.5092904 0.17429146 - 18000 17.474576 -0.97836065 0.8678524 3.7961537 4.3409032 -1.8922572 0.134048 - 19000 17.000911 -1.2286864 0.83615834 3.9322908 4.9319492 -2.3281576 0.056689619 - 20000 17.043286 -0.8506561 0.80966589 3.5087339 4.8603878 -2.3365263 0.096794824 - 21000 17.314495 -1.1430889 0.95363892 4.2446032 4.2756745 -2.1829483 0.17119518 - 22000 18.954881 -0.998673 0.58688334 2.71536 4.6634319 -2.6862804 0.20328442 - 23000 17.160427 -0.97803282 0.86894041 4.0897736 4.3146238 -2.1962289 0.075339092 - 24000 17.602026 -1.0833323 0.94888776 3.7341878 4.3084335 -2.1640414 0.081493681 - 25000 17.845584 -1.3432612 0.93497086 3.8911043 4.468032 -2.3475883 0.093204333 - 26000 17.833261 -1.1020534 0.77931087 3.7628141 4.512381 -2.3134761 0.15568465 - 27000 17.68607 -1.3222026 1.1985872 3.5817624 4.6360755 -2.3492774 0.08427906 - 28000 18.326649 -1.2669291 0.74809075 3.2624429 4.4698564 -2.3679076 0.14677293 - 29000 17.720933 -1.0773886 0.83099482 3.7652834 4.6584594 -2.8255303 0.23092596 - 30000 18.201999 -1.0168706 1.0637455 3.453095 4.3738593 -2.8063214 0.18658217 - 31000 17.823502 -1.2685768 0.84805585 3.8600661 4.2195821 -2.1169716 0.12517101 - 32000 16.883133 -0.62062648 0.84434922 3.5042683 5.1264906 -2.2674699 0.030138165 - 33000 17.805715 -1.679553 1.2430372 4.314677 4.2523894 -2.3008321 0.18591872 - 34000 16.723767 -0.54189072 1.1282827 3.8542159 4.3026559 -2.2186336 0.05392425 - 35000 17.976909 -0.72092075 0.5876319 2.9726396 5.0881439 -2.491692 0.17356291 - 36000 18.782492 -1.514246 0.63237955 3.2777164 4.6077164 -2.502574 0.082537318 - 37000 17.247716 -0.6344626 0.79885976 3.452491 4.7618281 -2.3902444 0.11450271 - 38000 17.996494 -1.6712877 1.0111769 4.1689136 4.46963 -2.4076725 0.11875756 - 39000 17.586857 -0.74508086 0.95970486 3.7395038 4.6011357 -2.9854953 0.30143284 - 40000 17.494879 -0.30772446 0.72047991 3.2604877 4.7283734 -2.3812495 0.16399034 - 41000 15.855772 -0.49642605 0.82496448 4.5139653 4.76884 -2.214141 0.10899661 - 42000 17.898568 -1.3078863 1.1505144 4.0429873 4.3889581 -2.8696559 0.23336417 - 43000 19.014372 -1.6325979 1.1553166 3.5660772 4.4047997 -2.9302044 0.13672127 - 44000 18.250782 -0.97211613 0.72714301 3.2258362 4.7257298 -2.5533613 0.11968073 - 45000 17.335174 0.24746331 1.0415866 3.3220992 4.5251095 -3.0415216 0.24453084 - 46000 17.72846 -0.9541418 0.88153841 3.7893452 4.5251883 -2.4003613 0.051809816 - 47000 18.226762 -0.67057787 0.84352989 3.0609522 4.5449078 -2.4694254 0.073703949 - 48000 17.838074 -0.88768441 1.3812262 3.5890492 4.5827868 -3.0137515 0.21417113 - 49000 17.973733 -0.75118705 0.69667886 3.3989025 4.7058886 -2.8243945 0.26665792 - 50000 17.461583 -0.65040016 0.68943524 2.9374743 5.6971777 -2.4438011 0.1697603 - 51000 16.79766 -0.010684434 0.89795555 3.959039 4.56763 -2.5101098 0.15048853 - 52000 17.566543 -0.7262764 0.74354418 3.3423185 4.8426523 -2.4187649 0.16908776 - 53000 17.964274 -0.9270914 1.065952 3.0397181 4.4682262 -2.2179503 0.07873406 - 54000 17.941256 -0.5807578 0.76516121 3.7262371 4.6975126 -3.179899 0.24433708 - 55000 17.079478 -0.48559832 0.95364453 3.0414645 5.2811414 -2.7064882 0.30102814 - 56000 17.632179 -0.75403299 0.97577942 3.3672363 4.4851336 -2.3683659 0.051117638 - 57000 16.17128 -0.44699325 0.76341543 4.267716 5.0881056 -2.4122329 0.16671692 - 58000 16.899276 -0.76481024 1.0400825 3.973493 4.8823309 -2.4270284 0.048716383 - 59000 18.145412 -0.84968335 0.71698306 3.2024358 4.6115739 -2.2520353 0.19466966 - 60000 17.578258 -1.0067331 0.72822527 3.5375208 4.9110255 -2.2319607 0.11922362 - 61000 17.434762 -1.0244393 0.90593099 3.8446915 4.8571191 -2.6228357 0.23259208 - 62000 17.580489 -1.1135917 0.79577432 3.7043524 4.6058114 -2.351492 0.042904152 - 63000 18.207335 -1.1512268 0.82684507 3.4114738 4.351069 -2.1878441 0.082922105 - 64000 18.333083 -1.1182287 0.74058959 3.6905164 4.3226172 -2.7110393 0.14721704 - 65000 16.271579 -0.7122151 1.0200168 4.6983643 4.3681131 -2.194921 0.12831024 - 66000 17.316444 -0.5729385 0.85254108 3.5769963 4.5526705 -2.3321328 0.040452643 - 67000 17.19011 -0.8814312 1.1381258 3.8605789 4.4183813 -2.299607 0.091527355 - 68000 18.223367 -1.362189 0.74472056 3.259165 4.486512 -2.2181134 0.048952796 - 69000 17.646348 -0.91647162 0.73990335 3.9313692 5.2663097 -3.3816778 0.27769877 - 70000 18.173493 -1.3107718 0.96484426 3.219728 4.5045124 -2.3349534 0.082327407 - 71000 17.0627 -0.58509083 0.85964129 3.8490884 4.437895 -2.1673348 0.24151404 - 72000 17.809764 -0.35128902 0.65479258 3.3945008 4.6160508 -2.5486166 0.10829531 - 73000 18.27769 -1.0739758 0.80890957 3.6070901 4.6256762 -2.4576547 0.080025736 - 74000 18.109437 -1.0691837 0.66679323 3.5923203 4.4825716 -2.5048169 0.21372319 - 75000 17.914569 -1.3500765 1.2993494 3.362421 4.4160377 -2.1278163 0.19397641 - 76000 16.563928 -0.16539261 1.0067302 3.5742755 4.8581915 -2.1362429 0.059822408 - 77000 18.130477 -0.38361279 0.43406954 3.4725995 4.7005855 -2.8836242 0.11958174 - 78000 16.746204 -1.1732959 0.7455507 3.6296638 5.6344113 -2.459208 0.16099803 - 79000 18.243999 -1.5850155 1.0108545 3.4727867 4.3367411 -2.316686 0.070480814 - 80000 16.960715 -0.84100929 0.91604996 3.862215 4.780949 -2.3711596 0.073916605 - 81000 17.697722 -1.1126605 0.952804 3.7114455 4.4216316 -2.2770085 0.091372066 - 82000 17.835901 -1.3091474 0.71867629 3.8168122 5.0150205 -2.4730634 0.062592852 - 83000 19.168418 -1.476938 0.75592316 3.2304519 4.3946471 -2.2991395 0.13083324 - 84000 17.945778 -1.5223622 1.0859941 3.4334011 5.0286682 -2.7550892 0.2476269 - 85000 17.950251 -0.85843846 0.86888218 3.3101287 4.5511879 -2.3640013 0.12080834 - 86000 17.480699 -0.97493649 0.85049761 3.4973085 4.6344922 -2.343121 0.2009677 - 87000 17.980244 -1.114983 0.88796989 3.4113329 4.3535853 -2.2535412 0.14494917 - 88000 18.023866 -1.226683 0.62339706 3.7649269 4.5923973 -2.3923523 0.10464375 - 89000 16.362829 -0.311462 1.0265375 4.0101723 4.4184777 -2.0314129 0.056570704 - 90000 17.533149 -0.41526788 1.0362029 3.4247412 4.2734431 -2.4776658 0.16960663 - 91000 17.719099 -1.1956801 1.0069945 3.2380672 4.8982805 -2.2154906 0.12950936 - 92000 17.762654 -1.170027 0.95814525 3.5217717 4.5405343 -2.5983677 0.15037754 - 93000 17.393958 -0.45641026 0.6579069 3.6002204 4.5942053 -2.5559641 0.12026544 - 94000 16.8182 -0.92962066 0.86801362 4.2914398 4.659848 -2.5251987 0.18000415 - 95000 17.642086 -0.7994896 0.7003756 3.8036697 4.5252487 -2.4166307 0.15686517 - 96000 18.114292 -1.5102104 1.2635908 3.2764427 5.0659496 -2.2777806 0.054309645 - 97000 18.575765 -1.6015311 0.69500699 3.1649317 4.9945742 -2.4012125 0.067373724 - 98000 16.578893 -0.78030229 0.91524222 4.4429655 4.4622392 -2.4052655 0.15355705 - 99000 17.26063 -0.57832833 0.7098846 3.9000046 4.5576484 -2.5333026 0.25517222 - 100000 18.377235 -0.89109577 0.68988617 2.8751751 4.4115591 -2.3560731 0.12185212 -Loop time of 2.96043 on 1 procs for 100000 steps with 34 atoms - -Performance: 5836.990 ns/day, 0.004 hours/ns, 33778.875 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.074 | 1.074 | 1.074 | 0.0 | 36.28 -Bond | 1.6497 | 1.6497 | 1.6497 | 0.0 | 55.72 -Neigh | 0.007576 | 0.007576 | 0.007576 | 0.0 | 0.26 -Comm | 0.012847 | 0.012847 | 0.012847 | 0.0 | 0.43 -Output | 0.0010746 | 0.0010746 | 0.0010746 | 0.0 | 0.04 -Modify | 0.16485 | 0.16485 | 0.16485 | 0.0 | 5.57 -Other | | 0.05037 | | | 1.70 - -Nlocal: 34 ave 34 max 34 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 395 ave 395 max 395 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 395 -Ave neighs/atom = 11.6176 -Ave special neighs/atom = 9.52941 -Neighbor list builds = 253 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/cmap/log.11Apr17.cmap.g++.4 b/examples/cmap/log.11Apr17.cmap.g++.4 deleted file mode 100644 index ec471d5a7e..0000000000 --- a/examples/cmap/log.11Apr17.cmap.g++.4 +++ /dev/null @@ -1,205 +0,0 @@ -LAMMPS (31 Mar 2017) -# Created by charmm2lammps v1.8.2.6 beta on Thu Mar 3 20:56:57 EST 2016 - -units real -neigh_modify delay 2 every 1 -#newton off - -boundary p p p - -atom_style full -bond_style harmonic -angle_style charmm -dihedral_style charmmfsw -improper_style harmonic - -pair_style lj/charmmfsw/coul/charmmfsh 8 12 -pair_modify mix arithmetic - -fix cmap all cmap charmm22.cmap -Reading potential file charmm22.cmap with DATE: 2016-09-26 -fix_modify cmap energy yes - -read_data gagg.data fix cmap crossterm CMAP - orthogonal box = (-34.4147 -36.1348 -39.3491) to (45.5853 43.8652 40.6509) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 34 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 12 = max dihedrals/atom - scanning impropers ... - 1 = max impropers/atom - reading bonds ... - 33 bonds - reading angles ... - 57 angles - reading dihedrals ... - 75 dihedrals - reading impropers ... - 7 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 13 = max # of 1-4 neighbors - 16 = max # of special neighbors - -special_bonds charmm -fix 1 all nve - -#fix 1 all nvt temp 300 300 100.0 -#fix 2 all shake 1e-9 500 0 m 1.0 - -velocity all create 0.0 12345678 dist uniform - -thermo 1000 -thermo_style custom step ecoul evdwl ebond eangle edihed f_cmap eimp -timestep 2.0 - -run 100000 -Neighbor list info ... - update every 1 steps, delay 2 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 12 12 12 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/charmmfsw/coul/charmmfsh, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 14.94 | 15.57 | 16.2 Mbytes -Step E_coul E_vdwl E_bond E_angle E_dihed f_cmap E_impro - 0 16.287573 -0.85933785 1.2470497 4.8441789 4.5432816 -1.473352 0.10453023 - 1000 18.816462 -0.84379243 0.78931817 2.7554247 4.4371421 -2.7762038 0.12697656 - 2000 18.091571 -1.045888 0.72306589 3.0951524 4.6725102 -2.3580092 0.22712496 - 3000 17.835596 -1.2171641 0.72666403 2.6696491 5.4373798 -2.0737041 0.075101693 - 4000 16.211232 -0.42713611 0.99472642 3.8961462 5.2009895 -2.5626866 0.17356243 - 5000 17.72183 -0.57081189 0.90733068 3.4376382 4.5457582 -2.3727543 0.12354518 - 6000 18.753977 -1.5772499 0.81468321 2.9236782 4.6033216 -2.3380859 0.12835782 - 7000 18.186024 -0.84205609 0.58996181 3.0329584 4.7221473 -2.5733244 0.10047631 - 8000 18.214306 -1.1360934 0.72597583 3.7493032 4.7319959 -2.8957975 0.20060467 - 9000 17.248415 -0.48642024 0.90266262 2.9721744 4.7651003 -2.1473349 0.13020438 - 10000 17.760663 -1.2968458 0.92384687 3.7007432 4.7378917 -2.2147799 0.06940514 - 11000 17.63395 -0.57366075 0.84871737 3.4276851 4.2853865 -2.2369491 0.17205075 - 12000 18.305713 -1.0672299 0.75876262 2.8852171 4.6850229 -2.4090072 0.087568888 - 13000 17.383367 -0.99678627 0.66712651 3.8060954 5.233865 -2.4180629 0.062014239 - 14000 17.510901 -0.68723297 0.92448551 3.7550867 4.7321218 -2.6059088 0.11504409 - 15000 18.080165 -1.13316 0.99982253 3.09947 4.8171402 -2.2713372 0.14580371 - 16000 17.383245 -0.4535296 0.57826268 3.6453593 4.6541138 -2.2434512 0.13285609 - 17000 17.111153 -0.3414839 0.73667584 3.7485311 4.6262965 -2.6166049 0.12635815 - 18000 16.862046 -1.3592061 1.2371142 4.4878937 4.2937117 -2.2112584 0.066145125 - 19000 18.313891 -1.654238 0.90644101 3.3934089 4.550735 -2.1862171 0.081267736 - 20000 19.083561 -1.3081747 0.56257812 2.7633848 4.6211438 -2.5196707 0.13763071 - 21000 18.23741 -1.051353 0.64408722 3.1735565 4.6912533 -2.2491947 0.099394904 - 22000 17.914515 -0.89769621 0.61793801 3.1224992 4.8683543 -2.282475 0.14524537 - 23000 16.756122 -0.98277883 1.2554905 3.7916115 4.7301443 -2.3094994 0.10226772 - 24000 16.109857 -0.54593177 0.86934462 4.4293574 4.926985 -2.2652264 0.11414331 - 25000 18.590559 -1.497327 1.1898361 2.9134403 4.7854107 -2.4437918 0.067416154 - 26000 18.493391 -1.0533797 0.4889578 3.6563013 4.6171721 -2.3240835 0.11607829 - 27000 18.646522 -1.1229601 0.67956815 2.7937638 4.8991207 -2.4068997 0.10109147 - 28000 18.545103 -1.7237438 0.72488022 3.8041665 4.6459974 -2.4339333 0.21943258 - 29000 17.840505 -1.0909667 0.88133248 3.3698456 5.0311644 -2.5116617 0.08102693 - 30000 17.649527 -0.65409177 0.86781692 3.24112 4.9903073 -2.6234925 0.14799777 - 31000 18.156812 -0.77476556 0.83192789 2.9620784 4.9160635 -2.8571635 0.22283201 - 32000 18.251583 -1.3384075 0.8059007 3.2588176 4.4365328 -2.1875071 0.087883637 - 33000 17.702785 -0.88311587 0.98573641 3.4645713 4.2650091 -2.0909158 0.14233004 - 34000 17.123413 -1.4873429 1.0419563 4.2628178 4.6318762 -2.2292095 0.105354 - 35000 18.162061 -1.0136007 0.82436129 3.6365024 4.5801677 -2.6856989 0.28648222 - 36000 17.65618 -1.094718 0.8872444 3.5075241 4.6382423 -2.3895134 0.18116961 - 37000 17.336475 -1.0657995 0.98869254 3.9252927 4.4383632 -2.2048244 0.22285949 - 38000 17.369467 -0.97623132 0.6712095 4.1349304 4.597754 -2.4088341 0.14608514 - 39000 18.170206 -1.2344285 0.77546195 3.6451049 4.7482287 -2.9895286 0.25768859 - 40000 16.210866 -0.81407781 0.99246271 4.2676233 5.0253763 -2.2929865 0.13348624 - 41000 17.641798 -1.0868157 0.80119513 3.4302526 5.280872 -2.4025406 0.22747391 - 42000 18.349848 -1.613759 1.1497004 3.7800682 4.3237683 -2.8676401 0.2120425 - 43000 19.130245 -1.196778 0.71845659 2.9325758 4.3684415 -2.433424 0.12240982 - 44000 18.061321 -1.2410101 1.0329373 3.0751569 4.7138313 -2.2880904 0.075814461 - 45000 18.162713 -1.4414622 1.009159 4.2298758 4.589593 -2.8502298 0.21606844 - 46000 18.591574 -0.99730412 1.0955215 3.3965004 4.359466 -3.1049731 0.17322629 - 47000 18.380259 -1.2717381 0.72291269 3.3958016 4.6099628 -2.4605065 0.19825185 - 48000 18.130478 -1.5051279 1.2087492 3.2488529 4.6690881 -2.2518174 0.05633061 - 49000 16.419912 -0.89320635 0.98926144 4.0388252 4.9919488 -2.1699511 0.15646479 - 50000 16.453196 -1.0433497 0.778346 4.6078069 4.7320614 -2.3760788 0.17161976 - 51000 18.245221 -0.89550444 0.9310446 3.0758194 4.3944595 -2.3082379 0.19983428 - 52000 17.839632 -1.0221781 0.76425017 3.3331547 4.5368437 -2.0988773 0.21098435 - 53000 18.693035 -1.4231915 0.76333082 3.1612761 4.583242 -2.4485762 0.089191206 - 54000 16.334672 -0.36309884 1.0200365 4.6700448 4.1628702 -2.1713841 0.11431995 - 55000 17.33842 -0.61522682 0.89847366 3.4970659 4.673495 -2.4743036 0.068004878 - 56000 17.790294 -1.0150845 0.73697112 3.6000297 4.5988343 -2.4822509 0.11434632 - 57000 18.913486 -1.0985507 1.0231848 2.7483267 4.4421755 -2.574424 0.1763388 - 58000 17.586896 -0.98284126 0.96965633 3.3330357 4.5325543 -2.1936869 0.083230915 - 59000 17.77788 -1.1649953 0.83092298 3.8004148 4.3940176 -2.3136642 0.017207608 - 60000 17.013042 -0.21728023 1.1688832 3.5374476 4.5462244 -2.4425301 0.15028297 - 61000 17.236242 -1.1342147 1.0301086 3.685948 4.6842331 -2.328108 0.070210812 - 62000 17.529852 -1.2961547 1.0323133 3.4474598 5.1435839 -2.4553423 0.060842687 - 63000 18.754704 -1.1816999 0.51806039 3.140172 4.5832701 -2.2713213 0.06327871 - 64000 17.54594 -1.3592836 0.9694558 4.1363258 4.3547729 -2.3818433 0.12634448 - 65000 16.962312 -0.54192775 0.90321315 4.0788618 4.2008255 -2.1376711 0.039504515 - 66000 18.078619 -1.3552947 1.0716861 3.3285374 4.7229362 -2.3331115 0.21978698 - 67000 17.132732 -1.4376876 0.91486534 4.4461852 4.6894176 -2.3655045 0.068150385 - 68000 18.69286 -1.2856207 0.3895394 3.0620063 4.9922992 -2.3459189 0.079879643 - 69000 18.329552 -1.1545957 0.88632275 3.1741058 4.4562418 -2.7094867 0.25329613 - 70000 16.681168 -0.94434373 1.2450393 4.5737944 4.4902996 -2.4581775 0.15313095 - 71000 17.375032 -1.0514442 1.0741595 3.4896146 4.8407713 -2.5302576 0.13640847 - 72000 17.833013 -0.9047134 0.87067876 3.1658924 4.8825932 -2.4398117 0.2343991 - 73000 17.421411 -1.2190741 0.73706811 4.2895 4.6464636 -2.3872727 0.19696525 - 74000 17.383158 -0.34208984 0.71333984 3.2718891 4.2718495 -2.2484281 0.10827022 - 75000 17.20885 -1.2710479 1.125102 3.8414467 5.3222741 -2.375505 0.12910797 - 76000 16.811578 -0.545162 0.59076961 3.9118604 4.8031296 -2.2777895 0.063015508 - 77000 16.679231 -0.080955983 0.7253398 3.4203454 5.0987608 -2.379614 0.12961874 - 78000 18.164524 -1.3115525 0.92526408 3.5764487 4.3814882 -2.3712488 0.073436724 - 79000 17.738686 -1.0697859 1.2186866 3.0593848 4.6551053 -2.2505871 0.075340661 - 80000 16.767483 -0.84777477 1.03128 4.1982958 4.6992227 -2.4146425 0.079774219 - 81000 16.257265 0.62803774 0.84032194 3.3873471 5.0961071 -2.7219776 0.20467848 - 82000 18.232082 -1.2129302 0.50746051 3.9207128 4.5073437 -2.599371 0.094522372 - 83000 16.618985 -0.60917055 0.8825847 3.805497 4.9560959 -2.2194726 0.14852687 - 84000 17.90762 -0.82336075 0.90504161 3.0324198 4.7444271 -2.5036073 0.15860682 - 85000 16.699883 -0.50297228 0.83405307 3.8598996 4.7971968 -2.2427788 0.10338668 - 86000 16.353038 -0.0096880616 0.80705167 4.0865115 4.5364338 -2.4548873 0.098456203 - 87000 17.887331 -0.75281219 1.0030148 4.0117123 4.3443074 -2.9774392 0.16190152 - 88000 18.583708 -1.4867053 0.86324814 3.3971237 4.3526221 -2.221239 0.14459352 - 89000 17.684828 -1.283764 1.0021118 3.5426808 4.9057005 -2.3921967 0.05844702 - 90000 17.2597 -0.84306489 0.99797936 3.8896866 4.4315457 -2.5662899 0.18270206 - 91000 16.705581 -0.44704047 0.75239556 3.470805 4.976868 -2.1894571 0.12312848 - 92000 17.548071 -1.2222664 0.92898812 4.0813773 4.3432647 -2.1631158 0.14071343 - 93000 17.163675 -0.94994776 0.96876981 3.9137692 4.4388666 -2.1260232 0.13187968 - 94000 18.842071 -1.2822113 0.58767049 3.1393475 4.5820965 -2.7264682 0.10406266 - 95000 18.112287 -1.1011381 0.63546648 3.4672667 4.486275 -2.2991936 0.041589685 - 96000 17.102713 -0.6877313 0.8389032 3.6892719 4.5676004 -2.1905327 0.13507011 - 97000 16.778253 -1.2902153 1.1588744 4.2820083 4.9537657 -2.4798159 0.35696636 - 98000 18.34638 -1.2908146 1.185356 3.0739807 4.4575453 -2.3959144 0.22407922 - 99000 17.995148 -1.3939639 0.7727299 3.8774144 4.4345458 -2.1142776 0.13550099 - 100000 18.444746 -1.2456693 0.86061526 3.468696 4.5264336 -2.4239851 0.074369539 -Loop time of 2.52011 on 4 procs for 100000 steps with 34 atoms - -Performance: 6856.851 ns/day, 0.004 hours/ns, 39680.850 timesteps/s -98.8% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.072506 | 0.28131 | 0.69088 | 46.2 | 11.16 -Bond | 0.050544 | 0.45307 | 0.9416 | 57.6 | 17.98 -Neigh | 0.0060885 | 0.0061619 | 0.0062056 | 0.1 | 0.24 -Comm | 0.44686 | 1.3679 | 2.0111 | 53.5 | 54.28 -Output | 0.0028057 | 0.0029956 | 0.003264 | 0.3 | 0.12 -Modify | 0.028202 | 0.095174 | 0.15782 | 19.8 | 3.78 -Other | | 0.3135 | | | 12.44 - -Nlocal: 8.5 ave 14 max 2 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Nghost: 25.5 ave 32 max 20 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 98.75 ave 242 max 31 min -Histogram: 2 0 1 0 0 0 0 0 0 1 - -Total # of neighbors = 395 -Ave neighs/atom = 11.6176 -Ave special neighs/atom = 9.52941 -Neighbor list builds = 246 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/cmap/log.27Nov18.cmap.g++.1 b/examples/cmap/log.27Nov18.cmap.g++.1 new file mode 100644 index 0000000000..c2c90059c4 --- /dev/null +++ b/examples/cmap/log.27Nov18.cmap.g++.1 @@ -0,0 +1,207 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Created by charmm2lammps v1.8.2.6 beta on Thu Mar 3 20:56:57 EST 2016 + +units real +neigh_modify delay 2 every 1 +#newton off + +boundary p p p + +atom_style full +bond_style harmonic +angle_style charmm +dihedral_style charmmfsw +improper_style harmonic + +pair_style lj/charmmfsw/coul/charmmfsh 8 12 +Switching to CHARMM coulomb energy conversion constant (src/MOLECULE/pair_lj_charmmfsw_coul_charmmfsh.cpp:55) +pair_modify mix arithmetic + +fix cmap all cmap charmm22.cmap +Reading potential file charmm22.cmap with DATE: 2016-09-26 +fix_modify cmap energy yes + +read_data gagg.data fix cmap crossterm CMAP + orthogonal box = (-34.4147 -36.1348 -39.3491) to (45.5853 43.8652 40.6509) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 34 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 12 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 33 bonds + reading angles ... + 57 angles + reading dihedrals ... + 75 dihedrals + reading impropers ... + 7 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 13 = max # of 1-4 neighbors + 16 = max # of special neighbors + +special_bonds charmm +fix 1 all nve + +#fix 1 all nvt temp 300 300 100.0 +#fix 2 all shake 1e-9 500 0 m 1.0 + +velocity all create 0.0 12345678 dist uniform + +thermo 1000 +thermo_style custom step ecoul evdwl ebond eangle edihed f_cmap eimp +timestep 2.0 + +run 100000 +Neighbor list info ... + update every 1 steps, delay 2 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmmfsw/coul/charmmfsh, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 14.96 | 14.96 | 14.96 Mbytes +Step E_coul E_vdwl E_bond E_angle E_dihed f_cmap E_impro + 0 16.28796 -0.85933785 1.2470497 4.8441789 4.5432816 -1.473352 0.10453023 + 1000 18.817034 -0.84376064 0.78927748 2.7554954 4.4369572 -2.7762224 0.12700913 + 2000 18.091506 -1.0458619 0.72328506 3.0956514 4.6724302 -2.3582544 0.22717594 + 3000 17.841047 -1.2177066 0.72658478 2.6693344 5.4322049 -2.0735857 0.075472354 + 4000 16.203768 -0.43010212 0.99813471 3.9020929 5.2015958 -2.562376 0.17393693 + 5000 17.74278 -0.58387686 0.9095749 3.4440437 4.5474453 -2.3771369 0.12369887 + 6000 18.84065 -1.5987004 0.81046711 2.9214019 4.5243733 -2.3180496 0.12365723 + 7000 18.84546 -0.96510756 0.57164583 3.0069325 4.6579161 -2.8966842 0.186473 + 8000 16.965729 -0.85937109 0.62698075 3.6416157 5.2427548 -2.4812956 0.14018019 + 9000 16.847152 -0.23916172 0.76630295 3.8009862 4.4066861 -2.2021529 0.1798796 + 10000 17.553635 -1.2829068 1.1657706 3.9123497 5.0547767 -2.9598952 0.34416632 + 11000 17.985843 -1.5465483 0.84770758 3.3368358 5.662125 -2.6329553 0.24353243 + 12000 17.803319 -1.0407393 0.74246545 3.6148795 4.7651004 -2.5084817 0.10619442 + 13000 18.979266 -1.3899293 0.54141439 2.8249302 4.7550121 -2.5037554 0.11955235 + 14000 17.009105 -0.79638876 0.94514282 3.8784001 4.5107273 -2.2861709 0.076774568 + 15000 16.52792 -0.099911028 0.73468109 3.6878436 5.0897919 -2.6694045 0.1846061 + 16000 18.602333 -1.2207715 0.73683889 3.5724426 4.2967652 -2.1185335 0.14454439 + 17000 18.548631 -1.4459452 0.87132388 3.1082541 4.4173372 -2.1488103 0.05085499 + 18000 18.274944 -0.9082365 0.78279222 3.2003259 4.2230915 -2.0279073 0.067678678 + 19000 18.363395 -1.5446376 0.84278631 3.5192748 4.5827839 -2.3655766 0.16111203 + 20000 17.92959 -0.78977685 0.83244452 3.3573732 4.5008538 -2.7568218 0.18551385 + 21000 16.294685 -0.43068016 1.0820062 4.1094083 4.6392086 -2.4608104 0.1504371 + 22000 17.945194 -1.12622 0.86476498 3.3577152 4.673294 -2.4760964 0.081229709 + 23000 18.59629 -1.3692394 0.67592321 3.493029 4.5943035 -2.221834 0.13764568 + 24000 17.636587 -0.46892268 0.59584902 3.2114851 4.7133747 -2.4081857 0.26633414 + 25000 16.620668 -0.75136289 1.0243884 4.0835198 5.1451753 -2.6824535 0.24777903 + 26000 18.59225 -1.0967117 0.56177724 3.2556596 4.3523235 -2.4816091 0.1788868 + 27000 19.188088 -1.871277 0.96616357 3.0120122 4.3122826 -2.2148745 0.10347086 + 28000 17.912724 -0.90553766 1.1257482 3.2754041 4.2225708 -2.4365707 0.1807316 + 29000 17.81248 -1.1502128 0.95470623 3.4118416 4.6659831 -2.1613317 0.11462518 + 30000 17.018989 -0.89064809 0.84950442 4.1712342 4.4636021 -2.3306882 0.15623897 + 31000 18.547066 -1.5339831 0.89944952 3.3517223 4.7396826 -2.6121868 0.15212539 + 32000 17.200059 -1.0016932 0.81295912 4.0695758 4.5595904 -2.3605079 0.1387539 + 33000 17.531814 -0.70849955 0.75743835 3.226091 4.476408 -2.1190694 0.055884538 + 34000 18.325131 -1.2897672 0.89479605 3.1671187 4.2968993 -1.9697837 0.17312732 + 35000 18.289817 -1.0149458 0.75194781 3.4275427 4.5914578 -2.3206357 0.12126296 + 36000 17.111721 -0.59386121 0.84127598 3.5534448 5.0274338 -2.36455 0.090112107 + 37000 17.748767 -0.91029178 0.77689229 3.8018169 4.7249541 -2.4255194 0.054726961 + 38000 17.2172 -0.43070288 0.88086005 3.5586613 4.3203841 -2.0587465 0.050764106 + 39000 18.482481 -0.75351762 0.87677942 2.9007389 4.7178108 -2.6463003 0.25313342 + 40000 18.465192 -1.4076534 0.92705504 3.3546181 4.4030743 -2.3873054 0.071878288 + 41000 18.12592 -1.5839327 0.6979962 3.2851401 5.2815413 -2.3054411 0.11390788 + 42000 18.376705 -1.0077349 0.70647799 2.9499245 4.6421626 -2.3504786 0.17673009 + 43000 16.929642 -0.72975766 0.90203733 3.7176511 4.7292387 -2.2860424 0.084829761 + 44000 17.271104 -0.99868378 1.0201679 4.1153184 4.2727269 -2.1172719 0.1029166 + 45000 18.230889 -1.0093287 0.85777597 2.8550682 4.3913999 -2.0720155 0.073553812 + 46000 18.241544 -1.7077516 0.95512232 3.8878131 4.3812806 -2.3031674 0.10194331 + 47000 18.12818 -0.83919194 0.71483948 2.7541388 4.7432398 -2.2644558 0.053413336 + 48000 17.965762 -0.92946694 0.70540637 3.4567259 4.5010549 -2.3038276 0.15002746 + 49000 16.815211 0.19052416 1.0076747 3.1045662 4.9638411 -2.3712162 0.1057081 + 50000 17.193025 -0.89817177 1.2261029 3.7515175 4.4880145 -2.2643247 0.29712734 + 51000 18.665005 -0.84670757 0.56076732 3.0839868 4.458076 -2.2261738 0.046374416 + 52000 17.619937 -0.89986585 0.64159147 3.7530936 4.8769799 -2.3791391 0.13429701 + 53000 16.916466 -0.58872911 0.96495189 3.6755814 4.7419669 -2.3886804 0.20915197 + 54000 17.199476 -0.88155666 0.64336469 3.927811 4.8019389 -2.2773601 0.18734294 + 55000 18.158496 -0.81126798 0.68333055 2.9741959 4.4463001 -2.1864535 0.071857857 + 56000 17.860471 -1.6993 1.2366001 3.7857634 4.7701817 -2.4192649 0.15619688 + 57000 18.444698 -0.82854071 0.63506471 3.1823771 4.4432216 -2.2987011 0.1407306 + 58000 18.047238 -1.4404915 1.0095109 3.7328328 4.6385391 -2.1656547 0.068584173 + 59000 16.990212 -0.81630542 0.73745944 4.2847598 5.1556617 -2.4218952 0.044901478 + 60000 18.164864 -0.68273809 0.60589655 3.1085907 4.5637459 -2.2379342 0.11464892 + 61000 17.772457 -1.1890999 0.80411722 3.7218185 4.7750335 -2.4439724 0.11358571 + 62000 17.192042 -0.095008686 0.71713238 3.2284848 4.9345758 -2.4377098 0.12788027 + 63000 16.877969 -0.62181425 0.8931036 3.6147379 5.3541158 -2.302381 0.072736635 + 64000 17.934695 -1.1664658 0.74610888 3.5102215 4.6537266 -2.3495291 0.18818648 + 65000 17.034947 -0.59670985 0.7590603 3.4896411 5.0725358 -2.3057016 0.067650159 + 66000 18.259418 -0.57940688 0.55125252 3.2917088 4.4949827 -2.3128319 0.17052154 + 67000 16.656512 -1.1797815 0.88985636 4.3326457 4.7143632 -2.4187476 0.35820295 + 68000 18.218359 -0.98502226 0.8053151 2.8694875 4.6774476 -2.2750794 0.027475615 + 69000 18.591716 -1.2961393 0.85778116 3.4232791 4.3626988 -2.2150059 0.047420611 + 70000 18.282862 -1.5115081 1.1486318 3.1099158 4.5945816 -2.1742452 0.15701805 + 71000 17.722244 -1.3606013 0.98913854 3.9050958 4.4617942 -2.1980629 0.16665753 + 72000 17.578225 -1.0672968 1.1898075 3.3110576 4.6292013 -2.1893929 0.15802869 + 73000 17.700619 -1.1203382 0.68447774 3.7617044 4.5508307 -2.2031338 0.046795482 + 74000 18.864586 -1.3377627 0.54243736 3.1047677 4.6094993 -2.2506839 0.0618695 + 75000 17.252732 -0.75791613 0.79934329 3.6289993 4.8336985 -2.3716023 0.048355835 + 76000 15.625117 -0.17710917 1.0083339 4.5957493 4.3952808 -2.0145142 0.2165007 + 77000 18.663599 -1.214034 0.73808593 3.1282966 4.1967921 -2.04274 0.20129707 + 78000 16.687112 -0.81273153 1.0670946 3.5384094 5.3755076 -2.1922472 0.025711096 + 79000 18.169502 -1.443215 1.1859821 3.4043489 4.3415317 -2.3447052 0.11854425 + 80000 18.787124 -1.6654307 1.0501597 3.0298408 4.2077733 -1.9985344 0.26128514 + 81000 17.807683 -1.3429276 0.83231514 3.8051489 4.659607 -2.3866437 0.20196892 + 82000 17.331324 -0.78827019 0.95190013 3.7412416 4.3529018 -2.307155 0.073785492 + 83000 17.597954 -0.36573657 0.84239516 3.1227374 4.5709276 -2.2732398 0.12571923 + 84000 17.961063 -1.2301714 0.65709128 3.5308724 4.5505295 -2.4116051 0.14784451 + 85000 18.034924 -1.1445169 1.1114893 3.2704327 4.4570221 -2.3336871 0.084147643 + 86000 18.35847 -1.0687438 0.71638387 3.2994265 4.7224093 -2.6523985 0.2338977 + 87000 17.297387 -0.36290631 0.67031988 3.9566445 4.6234059 -2.8008118 0.22786876 + 88000 17.179923 -0.40756603 1.0448818 3.4777257 4.454146 -2.420876 0.18845717 + 89000 17.548178 -1.2104623 0.81223923 3.8553959 4.8092953 -2.3606086 0.16057241 + 90000 18.203445 -1.2476535 0.93776844 3.3519306 4.5880767 -2.3299626 0.13273664 + 91000 17.577661 -0.9536919 0.98278572 3.6805268 4.269043 -2.2758847 0.16458677 + 92000 17.249982 -1.2620718 1.2379068 4.077245 4.6893055 -2.3623079 0.080584665 + 93000 17.263474 -1.1194017 0.56075789 3.9937658 4.9398469 -2.458799 0.1178667 + 94000 17.794002 -0.94808955 0.82296171 3.4988835 4.723922 -2.4525227 0.093849723 + 95000 17.380526 -1.3184326 1.2273125 4.01341 4.3749028 -2.1577427 0.12183053 + 96000 17.421883 -1.0247407 0.98739686 4.1656417 4.5509065 -2.5533884 0.15050166 + 97000 18.097453 -0.82643049 0.58678318 3.5934164 4.2844244 -2.187686 0.1173314 + 98000 17.110826 -0.9875292 1.1047966 3.5373119 4.9434687 -2.3951197 0.051018748 + 99000 17.497671 -0.72505537 1.1343346 3.3335263 4.7133241 -2.3170405 0.18322857 + 100000 17.502653 -1.2246734 0.85121721 4.132924 4.6912393 -2.605162 0.24425609 +Loop time of 2.20757 on 1 procs for 100000 steps with 34 atoms + +Performance: 7827.606 ns/day, 0.003 hours/ns, 45298.646 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.80344 | 0.80344 | 0.80344 | 0.0 | 36.39 +Bond | 1.0867 | 1.0867 | 1.0867 | 0.0 | 49.22 +Neigh | 0.0081377 | 0.0081377 | 0.0081377 | 0.0 | 0.37 +Comm | 0.017823 | 0.017823 | 0.017823 | 0.0 | 0.81 +Output | 0.0011017 | 0.0011017 | 0.0011017 | 0.0 | 0.05 +Modify | 0.21444 | 0.21444 | 0.21444 | 0.0 | 9.71 +Other | | 0.07595 | | | 3.44 + +Nlocal: 34 ave 34 max 34 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 395 ave 395 max 395 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 395 +Ave neighs/atom = 11.6176 +Ave special neighs/atom = 9.52941 +Neighbor list builds = 230 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/cmap/log.27Nov18.cmap.g++.4 b/examples/cmap/log.27Nov18.cmap.g++.4 new file mode 100644 index 0000000000..63d94b86c8 --- /dev/null +++ b/examples/cmap/log.27Nov18.cmap.g++.4 @@ -0,0 +1,207 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Created by charmm2lammps v1.8.2.6 beta on Thu Mar 3 20:56:57 EST 2016 + +units real +neigh_modify delay 2 every 1 +#newton off + +boundary p p p + +atom_style full +bond_style harmonic +angle_style charmm +dihedral_style charmmfsw +improper_style harmonic + +pair_style lj/charmmfsw/coul/charmmfsh 8 12 +Switching to CHARMM coulomb energy conversion constant (src/MOLECULE/pair_lj_charmmfsw_coul_charmmfsh.cpp:55) +pair_modify mix arithmetic + +fix cmap all cmap charmm22.cmap +Reading potential file charmm22.cmap with DATE: 2016-09-26 +fix_modify cmap energy yes + +read_data gagg.data fix cmap crossterm CMAP + orthogonal box = (-34.4147 -36.1348 -39.3491) to (45.5853 43.8652 40.6509) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 34 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 12 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 33 bonds + reading angles ... + 57 angles + reading dihedrals ... + 75 dihedrals + reading impropers ... + 7 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 13 = max # of 1-4 neighbors + 16 = max # of special neighbors + +special_bonds charmm +fix 1 all nve + +#fix 1 all nvt temp 300 300 100.0 +#fix 2 all shake 1e-9 500 0 m 1.0 + +velocity all create 0.0 12345678 dist uniform + +thermo 1000 +thermo_style custom step ecoul evdwl ebond eangle edihed f_cmap eimp +timestep 2.0 + +run 100000 +Neighbor list info ... + update every 1 steps, delay 2 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmmfsw/coul/charmmfsh, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 14.94 | 15.57 | 16.2 Mbytes +Step E_coul E_vdwl E_bond E_angle E_dihed f_cmap E_impro + 0 16.28796 -0.85933785 1.2470497 4.8441789 4.5432816 -1.473352 0.10453023 + 1000 18.817034 -0.84376064 0.78927748 2.7554954 4.4369572 -2.7762224 0.12700913 + 2000 18.091506 -1.0458619 0.72328506 3.0956514 4.6724302 -2.3582544 0.22717594 + 3000 17.841047 -1.2177066 0.72658478 2.6693344 5.4322049 -2.0735857 0.075472354 + 4000 16.203768 -0.43010212 0.99813471 3.9020929 5.2015958 -2.562376 0.17393693 + 5000 17.74278 -0.58387686 0.9095749 3.4440437 4.5474453 -2.3771369 0.12369887 + 6000 18.84065 -1.5987004 0.81046711 2.9214019 4.5243733 -2.3180496 0.12365723 + 7000 18.84546 -0.96510756 0.57164583 3.0069325 4.6579161 -2.8966842 0.186473 + 8000 16.965729 -0.85937109 0.62698075 3.6416157 5.2427548 -2.4812956 0.14018019 + 9000 16.847152 -0.23916171 0.76630294 3.8009862 4.406686 -2.2021529 0.17987959 + 10000 17.553634 -1.2829064 1.1657706 3.91235 5.0547763 -2.9598949 0.34416627 + 11000 17.985844 -1.546548 0.84770734 3.3368355 5.6621242 -2.6329556 0.24353209 + 12000 17.803315 -1.0407428 0.74246591 3.6148861 4.7651023 -2.5084818 0.10619443 + 13000 18.979298 -1.3899069 0.54140353 2.824908 4.7549927 -2.5037439 0.1195534 + 14000 17.009076 -0.79641495 0.94514807 3.8784683 4.5107542 -2.2861686 0.076775119 + 15000 16.527651 -0.10009622 0.73467885 3.6878968 5.0899041 -2.6692893 0.18460865 + 16000 18.604151 -1.2210802 0.73655927 3.5718605 4.2964962 -2.1189359 0.14449313 + 17000 18.546852 -1.4467993 0.87198724 3.1105181 4.4184817 -2.1495741 0.051004484 + 18000 18.269987 -0.90581341 0.7831269 3.2002375 4.2239607 -2.0289403 0.067912952 + 19000 18.365165 -1.5425052 0.84132905 3.5171046 4.582444 -2.3624811 0.15993488 + 20000 17.919207 -0.79257338 0.83410115 3.3693164 4.4968189 -2.7465541 0.1841698 + 21000 16.278922 -0.44214815 1.0902282 4.1142335 4.6450522 -2.4508096 0.14648872 + 22000 17.980488 -1.1391025 0.8652074 3.3488636 4.6605505 -2.4768211 0.082465921 + 23000 18.89971 -1.3694963 0.64862919 3.3841726 4.4302445 -2.2592268 0.13555028 + 24000 17.161166 -0.55945806 0.69448645 3.4675689 5.0748468 -2.5837022 0.2986302 + 25000 17.156172 -0.68212797 0.95625815 3.9473369 4.6696376 -2.597154 0.27829376 + 26000 17.825866 -0.73781842 0.75572313 3.303994 4.6064489 -2.4678257 0.1101394 + 27000 18.616198 -1.1970872 0.74929218 2.7266748 4.5928796 -2.3031488 0.10452726 + 28000 17.263879 -1.1343882 1.3560474 3.5869107 4.954875 -2.3468498 0.055318117 + 29000 18.218484 -0.64810872 0.68572616 3.3763474 4.5347093 -2.5532561 0.044134638 + 30000 17.213834 -1.1463665 0.81650849 4.5021522 4.5992871 -2.40695 0.04205291 + 31000 17.8559 -0.99467757 0.71511439 3.5755686 4.9305642 -2.6691079 0.15067927 + 32000 17.632612 -0.8302854 1.2248328 3.4735959 4.6212801 -2.7231143 0.34288338 + 33000 17.176657 -0.64567669 0.97026796 3.3935778 4.5587216 -2.2673303 0.14591296 + 34000 17.928014 -0.78865694 0.54309368 3.508016 4.7763531 -2.4383684 0.18688827 + 35000 17.961344 -1.3258434 0.79791264 3.6021659 4.7174496 -2.4153924 0.14281974 + 36000 17.363519 -0.87152419 0.86057615 3.9176779 4.3965038 -2.1041204 0.12738842 + 37000 16.06135 -1.0007854 1.3152379 4.9256357 4.4181047 -2.2698823 0.20913478 + 38000 16.980479 -0.95646429 0.81311125 3.9783382 5.1047807 -2.5399437 0.20183215 + 39000 18.494869 -0.90369184 0.71368 2.9713413 4.7252974 -2.4204755 0.15716213 + 40000 17.879106 -0.86166372 0.89882312 3.4726397 4.3971385 -2.3460741 0.13021249 + 41000 18.035763 -1.2809432 0.91931903 3.4005222 4.5201606 -2.411653 0.10482408 + 42000 17.688254 -1.0984284 0.93541053 3.723003 4.6284132 -2.2978157 0.098932073 + 43000 17.162211 -1.2347977 1.0781323 4.0892528 4.6269303 -2.3550598 0.05480233 + 44000 17.368788 -0.62753591 0.95568557 3.2537525 4.6683551 -2.316093 0.17116275 + 45000 17.28803 -0.76881568 0.92524577 3.6089685 4.3707256 -2.2940853 0.054227805 + 46000 17.659642 -1.0636933 0.62134856 3.7988149 4.642663 -2.2567824 0.059618876 + 47000 17.520356 -0.73678104 0.65813025 3.5138815 4.6758778 -2.2989321 0.099899312 + 48000 16.812802 -0.88677379 0.9634123 3.5723247 5.1067533 -2.3228969 0.1375947 + 49000 16.689302 -0.84108162 0.97663708 4.5288711 4.2042907 -2.0960932 0.12712083 + 50000 17.34708 -0.99417589 0.74282621 4.0884892 4.4655725 -2.3445562 0.040137606 + 51000 18.386747 -1.4258618 0.7415682 3.5702618 4.3472793 -2.3531028 0.076627832 + 52000 18.62586 -1.3545312 0.8226399 2.8749248 4.6581056 -2.1415891 0.074885964 + 53000 18.142099 -1.0903937 1.0355955 3.39219 4.3761473 -2.3714216 0.12991324 + 54000 18.452949 -1.2117507 0.79702906 3.0176388 4.4872416 -2.3195176 0.073698473 + 55000 17.317369 -0.89629461 0.7135235 4.0285995 4.8471482 -2.3306208 0.067829904 + 56000 17.331139 -0.70400555 0.92933471 3.1428751 5.1938451 -2.3960347 0.10207963 + 57000 17.769688 -0.69097945 0.6761737 3.6233451 4.3309071 -2.588033 0.33444943 + 58000 17.808019 -0.50062525 0.84330344 3.0780006 4.4191107 -2.2626852 0.23176683 + 59000 16.974427 -0.22275961 1.1171381 3.6002905 4.8457806 -2.4506404 0.086485736 + 60000 18.426097 -1.1640712 0.89526359 3.0738119 4.3475275 -2.2585607 0.17344541 + 61000 18.347861 -1.1389796 0.94799071 3.3858595 4.3778565 -2.4264935 0.022565214 + 62000 17.472407 -0.054270199 0.78119769 3.5192829 4.5922308 -2.7152004 0.077668809 + 63000 18.451352 -0.99265328 0.65501446 3.1607389 4.4871585 -2.3972756 0.1095194 + 64000 17.664837 -1.3148668 0.94502551 3.7697825 4.6332111 -2.4479629 0.2841013 + 65000 17.857844 -0.82183909 0.94533467 3.3987595 4.7509642 -2.9322189 0.15667848 + 66000 16.809282 -0.11096144 0.79005552 4.2974065 4.667357 -2.85833 0.08678995 + 67000 18.331716 -0.77668223 0.85848669 2.630497 4.6984372 -2.6328844 0.20335427 + 68000 17.818595 -0.93709899 0.87885516 3.3973927 4.4542279 -2.2667437 0.18791512 + 69000 18.115509 -1.440213 1.347904 3.3737104 4.3392351 -2.3748603 0.15273089 + 70000 17.230663 -0.76722679 0.77580436 3.920298 4.3064374 -2.057197 0.1064338 + 71000 17.972819 -0.56240735 0.69337989 3.2513062 4.5245288 -2.5597279 0.27216928 + 72000 18.432872 -1.3313091 0.84535471 3.1727393 4.483952 -2.4128395 0.1378963 + 73000 17.697723 -0.97837773 1.0529842 3.8074009 4.72378 -2.7174621 0.17825868 + 74000 18.504521 -1.1231346 0.88277801 3.0479334 4.3481094 -2.2732739 0.086093125 + 75000 17.934978 -1.4213334 0.9145673 3.8583169 4.5864462 -2.3243695 0.081450732 + 76000 18.508287 -0.98310739 0.64131006 3.2474703 4.4350548 -2.2768941 0.11216496 + 77000 16.846831 -1.1997156 0.97525037 4.5115234 4.4822983 -2.2271894 0.15009063 + 78000 18.298764 -0.89093904 1.151268 2.9546969 4.5531473 -2.6022807 0.17136053 + 79000 17.440102 -0.84471365 0.79902079 3.7146172 4.5874272 -2.3161711 0.074592893 + 80000 16.96787 -0.76797183 1.1525337 3.4597685 5.140513 -2.6897182 0.21382322 + 81000 17.081167 -1.0035883 0.9417994 4.3325391 4.7180405 -2.6083103 0.19511734 + 82000 16.507622 -1.05195 1.1260094 4.2926577 4.7646789 -2.4006964 0.14462259 + 83000 17.693074 -0.86921671 0.78469232 3.2635421 4.7625581 -2.1472473 0.089898176 + 84000 17.485199 -0.63086362 0.84462236 3.7419011 4.3478352 -2.2855255 0.12993625 + 85000 17.791978 -1.2653364 0.83896065 3.8569475 4.7233956 -2.4464365 0.10326311 + 86000 17.859089 -0.81401354 0.81139105 3.4899076 4.5074402 -2.3756207 0.13928587 + 87000 17.922335 -1.381674 1.1201002 4.0246458 4.8013529 -3.0706282 0.14319694 + 88000 17.891848 -1.1065441 0.95945646 3.8687633 4.2747388 -2.2353028 0.2196999 + 89000 17.618833 -0.74803168 1.0695045 2.8694377 4.9185961 -2.2867946 0.14163937 + 90000 18.321207 -1.332528 0.81671672 3.921007 4.2555562 -2.4712797 0.071633057 + 91000 18.553104 -1.3004122 0.9317915 3.1911912 4.3221185 -2.2542173 0.090485864 + 92000 17.39548 -0.87272071 0.96671708 3.8750471 4.3904352 -2.5461358 0.1301959 + 93000 17.706773 -1.0859407 0.96681042 3.5302332 4.5674911 -2.2899428 0.051797638 + 94000 18.315271 -1.0896814 0.82594056 3.253212 4.6972747 -2.3528794 0.14073237 + 95000 17.512959 -1.2251671 1.1726435 3.870858 4.2950784 -2.3334602 0.063946067 + 96000 17.196402 -1.350795 1.0149203 4.5463081 4.46194 -2.2969009 0.057997074 + 97000 18.119424 -1.1822278 1.0710466 2.9669136 4.5028366 -2.3136825 0.10116804 + 98000 18.611528 -1.1675308 0.86166718 3.8663186 4.5385301 -3.2887663 0.17772415 + 99000 17.221377 -0.72476724 1.0463603 3.2816006 4.9591142 -2.6471303 0.23335447 + 100000 17.500556 -1.0148716 1.2155656 3.5359122 4.5111603 -2.2594507 0.14328565 +Loop time of 2.16745 on 4 procs for 100000 steps with 34 atoms + +Performance: 7972.502 ns/day, 0.003 hours/ns, 46137.167 timesteps/s +94.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.058708 | 0.22252 | 0.54183 | 40.5 | 10.27 +Bond | 0.038348 | 0.31503 | 0.66653 | 48.0 | 14.53 +Neigh | 0.0070002 | 0.007808 | 0.0096803 | 1.2 | 0.36 +Comm | 0.42884 | 1.1121 | 1.5566 | 42.8 | 51.31 +Output | 0.002564 | 0.0036213 | 0.0063593 | 2.6 | 0.17 +Modify | 0.036094 | 0.12956 | 0.22792 | 25.9 | 5.98 +Other | | 0.3768 | | | 17.38 + +Nlocal: 8.5 ave 15 max 2 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 25.5 ave 32 max 19 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 98.75 ave 271 max 18 min +Histogram: 2 0 1 0 0 0 0 0 0 1 + +Total # of neighbors = 395 +Ave neighs/atom = 11.6176 +Ave special neighs/atom = 9.52941 +Neighbor list builds = 236 +Dangerous builds = 0 +Total wall time: 0:00:02 From 852916983a12bf83619ce3011b47146cae9aa68f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 14:53:29 -0500 Subject: [PATCH 207/273] update logs for colloid example --- examples/colloid/log.27Nov18.colloid.g++.1 | 153 +++++++++++++++++++++ examples/colloid/log.27Nov18.colloid.g++.4 | 153 +++++++++++++++++++++ examples/colloid/log.5Oct16.colloid.g++.1 | 146 -------------------- examples/colloid/log.5Oct16.colloid.g++.4 | 146 -------------------- 4 files changed, 306 insertions(+), 292 deletions(-) create mode 100644 examples/colloid/log.27Nov18.colloid.g++.1 create mode 100644 examples/colloid/log.27Nov18.colloid.g++.4 delete mode 100644 examples/colloid/log.5Oct16.colloid.g++.1 delete mode 100644 examples/colloid/log.5Oct16.colloid.g++.4 diff --git a/examples/colloid/log.27Nov18.colloid.g++.1 b/examples/colloid/log.27Nov18.colloid.g++.1 new file mode 100644 index 0000000000..7eae97eff6 --- /dev/null +++ b/examples/colloid/log.27Nov18.colloid.g++.1 @@ -0,0 +1,153 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Big colloid particles and small LJ particles + +units lj +atom_style sphere +dimension 2 + +lattice sq 0.01 +Lattice spacing in x,y,z = 10 10 10 +region box block 0 30 0 30 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -5) to (300 300 5) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 900 atoms + Time spent = 0.000598431 secs + +set group all type/fraction 2 0.96 23984 + 861 settings made for type/fraction + +set type 1 mass 9 + 39 settings made for mass +set type 2 mass 1 + 861 settings made for mass + +velocity all create 1.44 87287 loop geom + +# multi neighbor and comm for efficiency + +neighbor 1 multi +neigh_modify delay 0 +comm_modify mode multi + +# colloid potential + +pair_style colloid 12.5 +pair_coeff 1 1 1.0 1.0 5.0 5.0 12.5 +pair_coeff 1 2 5.0 1.0 5.0 0.0 7.0 +pair_coeff 2 2 10.0 1.0 0.0 0.0 2.5 + +fix 1 all npt temp 2.0 2.0 1.0 iso 0.0 1.0 10.0 drag 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +#dump 1 all atom 1000 dump.colloid + +#dump 2 all image 1000 image.*.jpg type type # zoom 1.5 center d 0.5 0.5 0.5 +#dump_modify 2 pad 5 adiam 1 5.0 adiam 2 1.5 + +#dump 3 all movie 1000 movie.mpg type type # zoom 1.5 center d 0.5 0.5 0.5 +#dump_modify 3 pad 5 adiam 1 5.0 adiam 2 1.5 + +thermo_style custom step temp epair etotal press vol +thermo 1000 + +timestep 0.005 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13.5 + ghost atom cutoff = 13.5 + binsize = 1.75, bins = 172 172 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair colloid, perpetual + attributes: half, newton on + pair build: half/multi/newton + stencil: half/multi/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.445 | 4.445 | 4.445 Mbytes +Step Temp E_pair TotEng Press Volume + 0 1.44 -2.2136534e-06 1.4383978 0.014383923 90000 + 1000 1.9572809 -0.00036743274 1.9547388 0.017982269 98935.161 + 2000 2.068567 -0.0010518227 2.0652168 0.019466739 96307.439 + 3000 2.1787472 0.0045846363 2.180911 0.029249545 68560.31 + 4000 2.1979309 0.0017234058 2.1972121 0.048831814 42699.657 + 5000 2.1541368 0.0068842503 2.1586276 0.07471981 28571.492 + 6000 2.1113173 0.0024196693 2.1113911 0.091799816 21611.61 + 7000 2.0788416 0.0060975475 2.0826293 0.11638141 17868.699 + 8000 2.0587325 0.011431711 2.0678767 0.136977 15515.134 + 9000 2.0608274 0.00084150047 2.0593791 0.1448357 13890.944 + 10000 2.0446145 0.016230031 2.0585728 0.17785946 12557.927 + 11000 2.0481772 0.008961682 2.0548631 0.1925805 11482.879 + 12000 2.0536702 0.0065675004 2.0579558 0.19987216 10543.356 + 13000 2.0483659 0.0071445135 2.0532344 0.22867229 9777.939 + 14000 2.0334727 0.020440289 2.0516536 0.25700656 9138.0619 + 15000 2.0221794 0.032212195 2.0521448 0.28477019 8585.7952 + 16000 2.029058 0.024040298 2.0508438 0.28585812 8095.1269 + 17000 2.0270567 0.025118634 2.049923 0.30905216 7689.7819 + 18000 2.0123899 0.037421737 2.0475757 0.3636938 7364.3469 + 19000 2.019082 0.032220518 2.0490591 0.35887838 7063.0831 + 20000 2.0383387 0.013928928 2.0500028 0.35029696 6810.6189 + 21000 2.0113975 0.039874446 2.0490371 0.41652382 6555.842 + 22000 2.0292399 0.029463117 2.0564483 0.40823941 6292.2335 + 23000 2.0271279 0.033537888 2.0584134 0.4359853 6051.2547 + 24000 2.0075928 0.044388917 2.0497511 0.46590892 5890.69 + 25000 2.0345451 0.017490239 2.0497748 0.44508598 5798.4911 + 26000 1.9933171 0.070984054 2.0620863 0.53325353 5618.279 + 27000 2.0437208 0.022615819 2.0640658 0.50130607 5440.3246 + 28000 2.0101461 0.054907742 2.0628204 0.55318766 5304.6714 + 29000 2.0231122 0.043194685 2.0640589 0.54438745 5197.9144 + 30000 2.0036611 0.062982451 2.0644173 0.5791539 5071.4318 + 31000 2.0118619 0.055674047 2.0653006 0.63370324 4956.3038 + 32000 2.0291738 0.035314054 2.0622333 0.59475403 4852.8359 + 33000 1.9954345 0.075707165 2.0689245 0.6809065 4761.5146 + 34000 2.0141897 0.04990827 2.0618599 0.61183102 4681.1535 + 35000 2.0002914 0.072549616 2.0706185 0.78205667 4595.2138 + 36000 2.0048956 0.065248982 2.067917 0.74763198 4502.7759 + 37000 2.0229016 0.049698006 2.070352 0.6949933 4422.5382 + 38000 2.0291924 0.048408539 2.0753463 0.67746901 4353.6336 + 39000 2.0057251 0.071071345 2.0745679 0.781985 4293.9239 + 40000 2.0314588 0.052600075 2.0818017 0.71759858 4247.5894 + 41000 2.0229153 0.059717009 2.0803846 0.73068778 4179.9404 + 42000 2.003508 0.080215578 2.0814975 0.81505369 4124.3279 + 43000 2.0034351 0.079898162 2.0811072 0.81862672 4075.4928 + 44000 2.0151423 0.074554369 2.0874576 0.84679645 4014.0973 + 45000 2.0210784 0.073589668 2.0924224 0.82507573 3960.3663 + 46000 2.0192162 0.069599489 2.0865721 0.87813695 3915.513 + 47000 2.019728 0.071103706 2.0885875 0.90918917 3864.3408 + 48000 2.0138563 0.073940136 2.0855588 0.86312211 3819.3487 + 49000 2.0257679 0.066368453 2.0898855 0.99155677 3794.5614 + 50000 2.0054884 0.089153801 2.0924139 0.99114819 3770.4528 +Loop time of 9.13278 on 1 procs for 50000 steps with 900 atoms + +Performance: 2365106.031 tau/day, 5474.782 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.0125 | 4.0125 | 4.0125 | 0.0 | 43.93 +Neigh | 1.4242 | 1.4242 | 1.4242 | 0.0 | 15.59 +Comm | 0.45633 | 0.45633 | 0.45633 | 0.0 | 5.00 +Output | 0.00083971 | 0.00083971 | 0.00083971 | 0.0 | 0.01 +Modify | 2.8978 | 2.8978 | 2.8978 | 0.0 | 31.73 +Other | | 0.3412 | | | 3.74 + +Nlocal: 900 ave 900 max 900 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 571 ave 571 max 571 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5952 ave 5952 max 5952 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 5952 +Ave neighs/atom = 6.61333 +Neighbor list builds = 3099 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:09 diff --git a/examples/colloid/log.27Nov18.colloid.g++.4 b/examples/colloid/log.27Nov18.colloid.g++.4 new file mode 100644 index 0000000000..af1e412ae9 --- /dev/null +++ b/examples/colloid/log.27Nov18.colloid.g++.4 @@ -0,0 +1,153 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Big colloid particles and small LJ particles + +units lj +atom_style sphere +dimension 2 + +lattice sq 0.01 +Lattice spacing in x,y,z = 10 10 10 +region box block 0 30 0 30 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -5) to (300 300 5) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 900 atoms + Time spent = 0.000492334 secs + +set group all type/fraction 2 0.96 23984 + 861 settings made for type/fraction + +set type 1 mass 9 + 39 settings made for mass +set type 2 mass 1 + 861 settings made for mass + +velocity all create 1.44 87287 loop geom + +# multi neighbor and comm for efficiency + +neighbor 1 multi +neigh_modify delay 0 +comm_modify mode multi + +# colloid potential + +pair_style colloid 12.5 +pair_coeff 1 1 1.0 1.0 5.0 5.0 12.5 +pair_coeff 1 2 5.0 1.0 5.0 0.0 7.0 +pair_coeff 2 2 10.0 1.0 0.0 0.0 2.5 + +fix 1 all npt temp 2.0 2.0 1.0 iso 0.0 1.0 10.0 drag 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +#dump 1 all atom 1000 dump.colloid + +#dump 2 all image 1000 image.*.jpg type type # zoom 1.5 center d 0.5 0.5 0.5 +#dump_modify 2 pad 5 adiam 1 5.0 adiam 2 1.5 + +#dump 3 all movie 1000 movie.mpg type type # zoom 1.5 center d 0.5 0.5 0.5 +#dump_modify 3 pad 5 adiam 1 5.0 adiam 2 1.5 + +thermo_style custom step temp epair etotal press vol +thermo 1000 + +timestep 0.005 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13.5 + ghost atom cutoff = 13.5 + binsize = 1.75, bins = 172 172 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair colloid, perpetual + attributes: half, newton on + pair build: half/multi/newton + stencil: half/multi/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.344 | 4.344 | 4.345 Mbytes +Step Temp E_pair TotEng Press Volume + 0 1.44 -2.2136534e-06 1.4383978 0.014383923 90000 + 1000 1.9572809 -0.00036743274 1.9547388 0.017982269 98935.161 + 2000 2.068567 -0.0010518227 2.0652168 0.019466739 96307.439 + 3000 2.1787472 0.0045846363 2.180911 0.029249545 68560.31 + 4000 2.1979309 0.0017234058 2.1972121 0.048831814 42699.657 + 5000 2.1541368 0.0068842504 2.1586276 0.07471981 28571.492 + 6000 2.1113175 0.0024194723 2.1113911 0.091799767 21611.61 + 7000 2.0788795 0.0060577432 2.0826274 0.11639395 17868.707 + 8000 2.0537762 0.01651572 2.0680099 0.13601134 15517.28 + 9000 2.0427394 0.019556597 2.0600262 0.15430942 13881.26 + 10000 2.050769 0.010396598 2.058887 0.16312819 12594.101 + 11000 2.0439348 0.018189464 2.0598533 0.2172647 11494.35 + 12000 2.0493504 0.010908719 2.0579821 0.21333624 10567.11 + 13000 2.0474606 0.013141328 2.0583269 0.2321885 9768.8239 + 14000 2.0370325 0.020936303 2.0557055 0.27034432 9105.9607 + 15000 2.0077835 0.045753549 2.0513062 0.3078643 8580.9799 + 16000 2.0184593 0.035585101 2.0518017 0.28738263 8120.9005 + 17000 2.0071721 0.044732393 2.0496743 0.32368949 7762.8875 + 18000 2.0085194 0.043117932 2.0494056 0.35526658 7442.6597 + 19000 2.0263547 0.029022667 2.0531258 0.3691966 7124.1683 + 20000 2.0285624 0.03264145 2.0589499 0.39783282 6810.1273 + 21000 2.0212924 0.039016129 2.0580626 0.42089074 6535.8717 + 22000 2.0285415 0.030259995 2.0565475 0.42080619 6301.8013 + 23000 2.0344885 0.02346797 2.0556959 0.4345206 6100.1797 + 24000 2.0219939 0.031317084 2.0510643 0.41301645 5921.1948 + 25000 2.034277 0.023680834 2.0556976 0.47443175 5749.5789 + 26000 2.0143035 0.051903569 2.063969 0.47278476 5570.3177 + 27000 2.0091763 0.054826231 2.0617701 0.53731629 5405.5081 + 28000 2.0306603 0.030512009 2.058916 0.50158605 5292.5739 + 29000 1.9905878 0.063609393 2.0519854 0.62105081 5217.6324 + 30000 2.0047307 0.057002418 2.0595056 0.59872107 5125.6009 + 31000 2.0076871 0.064365243 2.0698216 0.56914126 4971.7382 + 32000 2.0399769 0.031886115 2.0695964 0.55523269 4850.6347 + 33000 2.0196607 0.042847913 2.0602646 0.5749789 4770.7458 + 34000 2.0079696 0.067168038 2.0729066 0.70228842 4704.8088 + 35000 2.0264945 0.043126775 2.0673696 0.62754917 4625.3307 + 36000 2.029471 0.050993168 2.0782092 0.65985012 4513.2576 + 37000 2.0211356 0.053873626 2.0727635 0.75743646 4426.8691 + 38000 1.9933609 0.08028105 2.0714271 0.729473 4388.5022 + 39000 2.0046836 0.076855879 2.079312 0.83705993 4291.7229 + 40000 2.0321953 0.046360451 2.0762978 0.71726696 4229.9223 + 41000 2.0332458 0.051512927 2.0824996 0.78613181 4157.4167 + 42000 1.9750553 0.097198273 2.0700591 0.84569229 4123.0833 + 43000 2.0234742 0.056757566 2.0779835 0.78732804 4096.6281 + 44000 1.9966481 0.094296711 2.0887263 0.86811037 4021.0355 + 45000 2.0099144 0.077843813 2.085525 0.87222128 3961.2649 + 46000 1.9959281 0.090282388 2.0839928 0.90564582 3916.4041 + 47000 2.0174181 0.067872225 2.0830488 0.86559533 3889.8008 + 48000 2.0066047 0.094875259 2.0992504 0.99089696 3835.3328 + 49000 2.0031392 0.094024663 2.0949381 1.0600075 3789.3375 + 50000 2.0307693 0.059124989 2.0876379 0.85398261 3770.4556 +Loop time of 4.0156 on 4 procs for 50000 steps with 900 atoms + +Performance: 5379021.062 tau/day, 12451.438 timesteps/s +94.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.8857 | 0.95678 | 0.99748 | 4.6 | 23.83 +Neigh | 0.34187 | 0.39239 | 0.42858 | 5.1 | 9.77 +Comm | 0.95431 | 1.0287 | 1.1204 | 6.3 | 25.62 +Output | 0.0010757 | 0.0037161 | 0.011632 | 7.5 | 0.09 +Modify | 1.3279 | 1.3522 | 1.3823 | 1.7 | 33.67 +Other | | 0.2818 | | | 7.02 + +Nlocal: 225 ave 251 max 186 min +Histogram: 1 0 0 0 0 0 1 1 0 1 +Nghost: 302.75 ave 330 max 288 min +Histogram: 1 1 1 0 0 0 0 0 0 1 +Neighs: 1487.5 ave 1689 max 1191 min +Histogram: 1 0 0 0 0 1 0 0 1 1 + +Total # of neighbors = 5950 +Ave neighs/atom = 6.61111 +Neighbor list builds = 3097 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/colloid/log.5Oct16.colloid.g++.1 b/examples/colloid/log.5Oct16.colloid.g++.1 deleted file mode 100644 index e4c31be124..0000000000 --- a/examples/colloid/log.5Oct16.colloid.g++.1 +++ /dev/null @@ -1,146 +0,0 @@ -LAMMPS (5 Oct 2016) -# Big colloid particles and small LJ particles - -units lj -atom_style sphere -dimension 2 - -lattice sq 0.01 -Lattice spacing in x,y,z = 10 10 10 -region box block 0 30 0 30 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -5) to (300 300 5) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 900 atoms - -set group all type/fraction 2 0.96 23984 - 861 settings made for type/fraction - -set type 1 mass 9 - 39 settings made for mass -set type 2 mass 1 - 861 settings made for mass - -velocity all create 1.44 87287 loop geom - -# multi neighbor and comm for efficiency - -neighbor 1 multi -neigh_modify delay 0 -comm_modify mode multi - -# colloid potential - -pair_style colloid 12.5 -pair_coeff 1 1 1.0 1.0 5.0 5.0 12.5 -pair_coeff 1 2 5.0 1.0 5.0 0.0 7.0 -pair_coeff 2 2 10.0 1.0 0.0 0.0 2.5 - -fix 1 all npt temp 2.0 2.0 1.0 iso 0.0 1.0 10.0 drag 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -#dump 1 all atom 1000 dump.colloid - -#dump 2 all image 1000 image.*.jpg type type # zoom 1.5 center d 0.5 0.5 0.5 -#dump_modify 2 pad 5 adiam 1 5.0 adiam 2 1.5 - -#dump 3 all movie 1000 movie.mpg type type # zoom 1.5 center d 0.5 0.5 0.5 -#dump_modify 3 pad 5 adiam 1 5.0 adiam 2 1.5 - -thermo_style custom step temp epair etotal press vol -thermo 1000 - -timestep 0.005 - -run 50000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 13.5 - ghost atom cutoff = 13.5 - binsize = 1.75 -> bins = 172 172 6 -Memory usage per processor = 3.86192 Mbytes -Step Temp E_pair TotEng Press Volume - 0 1.44 -2.2136534e-06 1.4383978 0.014383923 90000 - 1000 1.9572355 -0.00037176804 1.954689 0.017979461 98945.011 - 2000 2.0686234 -0.0010137498 2.0653112 0.01947028 96310.014 - 3000 2.1785689 0.0049562211 2.1811045 0.029298361 68537.78 - 4000 2.200053 0.00039100896 2.1979995 0.048071724 42672.579 - 5000 2.1407629 0.016107912 2.1544922 0.076141728 28576.1 - 6000 2.1131357 0.00050904012 2.1112969 0.095060602 21598.175 - 7000 2.0717026 0.013639823 2.0830406 0.11782618 17864.757 - 8000 2.0557671 0.015637275 2.0691201 0.13461012 15542.602 - 9000 2.052181 0.011294709 2.0611955 0.15150744 13852.149 - 10000 2.0531753 0.005995461 2.0568894 0.17005868 12487.961 - 11000 2.0458212 0.013960278 2.0575083 0.18853479 11391.15 - 12000 2.0405323 0.01846093 2.056726 0.20856764 10532.913 - 13000 2.0169788 0.041436672 2.0561744 0.23593917 9743.2413 - 14000 2.0381291 0.017030208 2.0528947 0.23907374 9093.804 - 15000 2.0400498 0.010140701 2.0479238 0.27667462 8571.3248 - 16000 2.0280005 0.024278921 2.0500261 0.31642444 8133.8701 - 17000 2.0330813 0.018237365 2.0490597 0.30128788 7764.8228 - 18000 2.0239878 0.02723825 2.0489771 0.30818234 7455.765 - 19000 2.0213402 0.035515393 2.0546096 0.39654991 7096.9286 - 20000 2.024466 0.032163441 2.0543801 0.37550172 6782.3498 - 21000 2.033932 0.017240839 2.0489129 0.39674508 6520.0345 - 22000 2.0204921 0.033630164 2.0518773 0.41617948 6306.7194 - 23000 2.0103922 0.046109389 2.0542679 0.44503939 6108.8439 - 24000 2.0063543 0.049507774 2.0536328 0.4949354 5923.2093 - 25000 1.9953872 0.066107231 2.0592773 0.5424389 5746.6695 - 26000 2.0416248 0.020853398 2.0602097 0.46642685 5593.8186 - 27000 2.0280574 0.037040684 2.0628447 0.49730884 5433.376 - 28000 2.0039648 0.055918617 2.0576568 0.56893257 5281.5584 - 29000 2.0042398 0.056161548 2.0581744 0.55361133 5164.0991 - 30000 2.031788 0.030776854 2.0603073 0.58478846 5056.2821 - 31000 2.0220647 0.044025601 2.0638435 0.60571441 4939.9798 - 32000 2.0115578 0.0548283 2.064151 0.62749615 4859.2601 - 33000 1.9905768 0.071616735 2.0599817 0.64066244 4787.7818 - 34000 2.0209823 0.052197269 2.0709341 0.68260584 4705.5825 - 35000 1.995165 0.078611977 2.0715601 0.69333031 4599.9346 - 36000 1.994471 0.079545726 2.0718006 0.7510532 4523.7494 - 37000 1.9939754 0.083417982 2.0751779 0.73746747 4449.8485 - 38000 1.9808613 0.098188975 2.0768493 0.89305039 4362.0588 - 39000 2.0056223 0.070537588 2.0739314 0.75049166 4320.201 - 40000 2.0490165 0.033488307 2.0802281 0.71809099 4259.8017 - 41000 2.0170375 0.066555481 2.0813519 0.80145545 4165.276 - 42000 2.034609 0.050123688 2.082472 0.7318767 4099.5342 - 43000 2.027217 0.053657298 2.0786218 0.79779536 4050.1962 - 44000 2.0107551 0.07427185 2.0827928 0.88949517 4022.2995 - 45000 2.035579 0.054511708 2.087829 0.85058092 3982.0592 - 46000 1.9855666 0.1079948 2.0913552 0.96268676 3937.279 - 47000 1.9938397 0.095380271 2.0870046 0.94036115 3882.9266 - 48000 2.0056151 0.087885527 2.0912722 0.94935203 3824.2309 - 49000 2.0079615 0.089440768 2.0951712 0.97596247 3781.8079 - 50000 1.9875181 0.10628651 2.0915963 1.1315334 3749.1501 -Loop time of 8.34943 on 1 procs for 50000 steps with 900 atoms - -Performance: 2587004.175 tau/day, 5988.436 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.9819 | 3.9819 | 3.9819 | 0.0 | 47.69 -Neigh | 1.3743 | 1.3743 | 1.3743 | 0.0 | 16.46 -Comm | 0.31324 | 0.31324 | 0.31324 | 0.0 | 3.75 -Output | 0.00052619 | 0.00052619 | 0.00052619 | 0.0 | 0.01 -Modify | 2.3748 | 2.3748 | 2.3748 | 0.0 | 28.44 -Other | | 0.3047 | | | 3.65 - -Nlocal: 900 ave 900 max 900 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 548 ave 548 max 548 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 6073 ave 6073 max 6073 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 6073 -Ave neighs/atom = 6.74778 -Neighbor list builds = 3122 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:08 diff --git a/examples/colloid/log.5Oct16.colloid.g++.4 b/examples/colloid/log.5Oct16.colloid.g++.4 deleted file mode 100644 index d3ce819286..0000000000 --- a/examples/colloid/log.5Oct16.colloid.g++.4 +++ /dev/null @@ -1,146 +0,0 @@ -LAMMPS (5 Oct 2016) -# Big colloid particles and small LJ particles - -units lj -atom_style sphere -dimension 2 - -lattice sq 0.01 -Lattice spacing in x,y,z = 10 10 10 -region box block 0 30 0 30 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -5) to (300 300 5) - 2 by 2 by 1 MPI processor grid -create_atoms 1 box -Created 900 atoms - -set group all type/fraction 2 0.96 23984 - 861 settings made for type/fraction - -set type 1 mass 9 - 39 settings made for mass -set type 2 mass 1 - 861 settings made for mass - -velocity all create 1.44 87287 loop geom - -# multi neighbor and comm for efficiency - -neighbor 1 multi -neigh_modify delay 0 -comm_modify mode multi - -# colloid potential - -pair_style colloid 12.5 -pair_coeff 1 1 1.0 1.0 5.0 5.0 12.5 -pair_coeff 1 2 5.0 1.0 5.0 0.0 7.0 -pair_coeff 2 2 10.0 1.0 0.0 0.0 2.5 - -fix 1 all npt temp 2.0 2.0 1.0 iso 0.0 1.0 10.0 drag 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -#dump 1 all atom 1000 dump.colloid - -#dump 2 all image 1000 image.*.jpg type type # zoom 1.5 center d 0.5 0.5 0.5 -#dump_modify 2 pad 5 adiam 1 5.0 adiam 2 1.5 - -#dump 3 all movie 1000 movie.mpg type type # zoom 1.5 center d 0.5 0.5 0.5 -#dump_modify 3 pad 5 adiam 1 5.0 adiam 2 1.5 - -thermo_style custom step temp epair etotal press vol -thermo 1000 - -timestep 0.005 - -run 50000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 13.5 - ghost atom cutoff = 13.5 - binsize = 1.75 -> bins = 172 172 6 -Memory usage per processor = 3.76692 Mbytes -Step Temp E_pair TotEng Press Volume - 0 1.44 -2.2136534e-06 1.4383978 0.014383923 90000 - 1000 1.9572355 -0.00037176804 1.954689 0.017979461 98945.011 - 2000 2.0686234 -0.0010137498 2.0653112 0.01947028 96310.014 - 3000 2.1785689 0.0049562211 2.1811045 0.029298361 68537.78 - 4000 2.200053 0.00039100896 2.1979995 0.048071724 42672.579 - 5000 2.1407629 0.016107891 2.1544922 0.076141723 28576.1 - 6000 2.1131348 0.00051000844 2.1112968 0.095061489 21598.174 - 7000 2.0735911 0.011894403 2.0831815 0.11729552 17864.933 - 8000 2.0619661 0.0060168177 2.0656919 0.1295732 15547.781 - 9000 2.0595354 0.0024157411 2.0596627 0.14657861 13836.694 - 10000 2.0425447 0.018278949 2.0585541 0.1740235 12474.354 - 11000 2.0460068 0.012079252 2.0558127 0.19227728 11392.874 - 12000 2.0372027 0.019110617 2.0540498 0.21648482 10523.896 - 13000 2.0416804 0.015790699 2.0552026 0.24604625 9785.1314 - 14000 2.0466943 0.0064454505 2.0508656 0.22777839 9165.8411 - 15000 2.0436536 0.015576669 2.0569595 0.28266826 8582.5053 - 16000 2.0335541 0.01998798 2.0512825 0.2894612 8114.5044 - 17000 2.0109406 0.039132968 2.0478392 0.34665262 7758.9312 - 18000 2.016964 0.038362354 2.0530852 0.37108874 7399.6774 - 19000 2.0399584 0.012731426 2.0504232 0.32979629 7081.8066 - 20000 2.0260154 0.027880228 2.0516445 0.36371005 6812.6037 - 21000 2.0321966 0.023814364 2.053753 0.36376888 6556.4552 - 22000 1.9850947 0.072749763 2.0556388 0.52542507 6293.5003 - 23000 2.0360536 0.02395391 2.0577452 0.42540507 6061.6557 - 24000 2.0237181 0.032711377 2.0541809 0.43998497 5883.2886 - 25000 2.0145711 0.042376354 2.0547091 0.54706192 5715.4423 - 26000 2.00533 0.049986982 2.0530888 0.55453953 5564.0132 - 27000 2.0266398 0.035044901 2.0594329 0.51842026 5431.0259 - 28000 2.0321757 0.029913711 2.0598314 0.49663872 5305.2909 - 29000 1.9964359 0.066498777 2.0607164 0.56461185 5174.9947 - 30000 1.982908 0.082624709 2.0633294 0.65815484 5046.1903 - 31000 2.0141773 0.049027808 2.0609671 0.58512256 4980.1474 - 32000 1.9938427 0.076695158 2.0683225 0.64309333 4844.0907 - 33000 2.012869 0.054851302 2.0654838 0.63073652 4749.9868 - 34000 1.9867827 0.083467738 2.0680429 0.7840696 4656.3038 - 35000 2.0013706 0.067630614 2.0667775 0.72991936 4566.7052 - 36000 2.0106349 0.063148106 2.071549 0.73927159 4495.7351 - 37000 2.0245299 0.053399546 2.07568 0.7189467 4423.018 - 38000 2.0133929 0.062427506 2.0735833 0.74002573 4351.9277 - 39000 1.9874796 0.088021324 2.0732926 0.79349127 4293.1815 - 40000 2.0240342 0.057908137 2.0796935 0.75182186 4235.9306 - 41000 1.9973584 0.077969812 2.0731089 0.83868109 4218.8397 - 42000 2.0034131 0.079826384 2.0810134 0.78010078 4179.2254 - 43000 2.0438594 0.047617472 2.0892059 0.77402823 4089.0577 - 44000 2.021871 0.066506327 2.0861308 0.82593265 3999.9932 - 45000 2.0052391 0.07876379 2.0817748 0.84100298 3958.8163 - 46000 2.0163501 0.073621087 2.0877308 0.8621767 3920.4982 - 47000 2.020619 0.067706551 2.0860804 0.92651509 3885.827 - 48000 2.0168306 0.082111421 2.0967011 0.9214563 3829.1155 - 49000 2.0007804 0.098241181 2.0967985 0.93140657 3755.3901 - 50000 2.0213773 0.071280328 2.0904116 0.9408025 3734.5105 -Loop time of 3.66837 on 4 procs for 50000 steps with 900 atoms - -Performance: 5888181.024 tau/day, 13630.049 timesteps/s -98.8% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0038 | 1.0256 | 1.0441 | 1.4 | 27.96 -Neigh | 0.33784 | 0.35406 | 0.36994 | 2.1 | 9.65 -Comm | 0.82073 | 0.85742 | 0.88285 | 2.5 | 23.37 -Output | 0.00096369 | 0.0010209 | 0.0011663 | 0.3 | 0.03 -Modify | 1.178 | 1.1807 | 1.1825 | 0.1 | 32.19 -Other | | 0.2496 | | | 6.80 - -Nlocal: 225 ave 234 max 208 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 305.25 ave 313 max 299 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Neighs: 1501.75 ave 1627 max 1408 min -Histogram: 1 0 1 0 1 0 0 0 0 1 - -Total # of neighbors = 6007 -Ave neighs/atom = 6.67444 -Neighbor list builds = 3071 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 From ab924e4f1dfa88037d8fe8a393b99852023549f8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 15:36:16 -0500 Subject: [PATCH 208/273] update log files for comb examples --- examples/comb/ffield.comb | 99 +--- examples/comb/ffield.comb3 | 524 +----------------- ...omb.Cu.g++.1 => log.27Nov18.comb.Cu.g++.1} | 31 +- ...omb.Cu.g++.4 => log.27Nov18.comb.Cu.g++.4} | 31 +- ....1 => log.27Nov18.comb.Cu2O.elastic.g++.1} | 158 +++--- ....4 => log.27Nov18.comb.Cu2O.elastic.g++.4} | 156 +++--- ...HfO2.g++.1 => log.27Nov18.comb.HfO2.g++.1} | 98 ++-- ...HfO2.g++.4 => log.27Nov18.comb.HfO2.g++.4} | 96 ++-- ...++.1 => log.27Nov18.comb.Si.elastic.g++.1} | 132 ++--- ...++.4 => log.27Nov18.comb.Si.elastic.g++.4} | 130 ++--- ...omb.Si.g++.1 => log.27Nov18.comb.Si.g++.1} | 31 +- ...omb.Si.g++.4 => log.27Nov18.comb.Si.g++.4} | 31 +- ...16.comb3.g++.1 => log.27Nov18.comb3.g++.1} | 34 +- ...16.comb3.g++.4 => log.27Nov18.comb3.g++.4} | 32 +- 14 files changed, 486 insertions(+), 1097 deletions(-) mode change 100644 => 120000 examples/comb/ffield.comb mode change 100644 => 120000 examples/comb/ffield.comb3 rename examples/comb/{log.5Oct16.comb.Cu.g++.1 => log.27Nov18.comb.Cu.g++.1} (80%) rename examples/comb/{log.5Oct16.comb.Cu.g++.4 => log.27Nov18.comb.Cu.g++.4} (80%) rename examples/comb/{log.5Oct16.comb.Cu2O.elastic.g++.1 => log.27Nov18.comb.Cu2O.elastic.g++.1} (81%) rename examples/comb/{log.5Oct16.comb.Cu2O.elastic.g++.4 => log.27Nov18.comb.Cu2O.elastic.g++.4} (81%) rename examples/comb/{log.5Oct16.comb.HfO2.g++.1 => log.27Nov18.comb.HfO2.g++.1} (76%) rename examples/comb/{log.5Oct16.comb.HfO2.g++.4 => log.27Nov18.comb.HfO2.g++.4} (76%) rename examples/comb/{log.5Oct16.comb.Si.elastic.g++.1 => log.27Nov18.comb.Si.elastic.g++.1} (80%) rename examples/comb/{log.5Oct16.comb.Si.elastic.g++.4 => log.27Nov18.comb.Si.elastic.g++.4} (79%) rename examples/comb/{log.5Oct16.comb.Si.g++.1 => log.27Nov18.comb.Si.g++.1} (80%) rename examples/comb/{log.5Oct16.comb.Si.g++.4 => log.27Nov18.comb.Si.g++.4} (80%) rename examples/comb/{log.5Oct16.comb3.g++.1 => log.27Nov18.comb3.g++.1} (77%) rename examples/comb/{log.5Oct16.comb3.g++.4 => log.27Nov18.comb3.g++.4} (79%) diff --git a/examples/comb/ffield.comb b/examples/comb/ffield.comb deleted file mode 100644 index 2e685a9ed4..0000000000 --- a/examples/comb/ffield.comb +++ /dev/null @@ -1,98 +0,0 @@ -# DATE: 2011-02-22 DATE: 2010-12-17 CONTRIBUTOR: Tzu-Ray Shan, tnshan@sandia.gov CITATION: Shan, Devine, Sinnott and Phillpot, Phys Rev B, 81, 125328 (2010) -# COMB parameters for various elements (Si, Cu, Hf, Ti, O) and mixtures (their oxides and alloys) -# Edited by Tzu-Ray Shan from MSE, Univ. FL in Apr 2010 -# -# Elements currently available: Si, Cu, Hf, Ti -# Oxides currently available: Si-O, Cu-O, Hf-O, Ti-O -# Other interactions available: Cu-Ti, Cu-Si, Si-Hf -# -# Si parameter set from (JG Yu, SB Sinnott, SR Phillpot, Phys. Rev. B 75 085311 2007) -# ,and (TR Shan, BD Devine, SR Phillpot, SB Sinnott, to be sub to Phys. Rev. B) -# O parameter set from (TR Shan, BD Devine, SB Sinnott, SR Phillpot, Phys. Rev. B 81 125328 2010) -# Cu parameter set from (BD Devine, TR Shan, SB Sinnott, SR Phillpot, to be sub to Phys. Rev. B) -# Hf parameter set from (TR Shan, BD Devine, SB Sinnott, SR Phillpot, Phys. Rev. B 81 125328 2010) -# Ti parameter set from (TR Shan, SR Phillpot, SB Sinnott, in preparation) -# -# Multiple entries can be added to this file, LAMMPS reads the ones it needs -# Only M-O are added in the potential table, using mixing rules to generate desired alloy (A-B) parameters -# 8 entries for a desired A-B type: AAA, BBB, AAB, ABA, ABB, BAA, BBA, BBA -# 27 entries for a system containing three elements A, B and C -# These entries are in LAMMPS "metal" units -# -Hf Hf Hf 1 0 1 0 1.011011 0.046511 0.959614 0.959614 55.9421 55.9421 3.85 0.20 2.069563 2.069563 707.53 707.53 0 0 0.008 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 0.26152 -0.25918 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 -Ti Ti Ti 1 0 1 0 1.255016 0.089078 1.226342 1.226342 99.3916 99.3916 3.43 0.05 2.082408 2.082408 546.386 546.386 0 0 0.0084 0 0 0 1 1 1 1 -4 4 2.508854 -2.511416 -4 4 2.508854 -2.511416 0 2.46820415900968 0 0.151351003255176 0 0.873685 0.392632 0.392632 1.78349 1.78349 12 0 -O O O 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.8 0.2 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0 -Cu Cu Cu 1 0 1 0 1 0.140835 1.681711 1.681711 146.987 146.987 3.0 0.05 2.794608 2.794608 952.693 952.693 0.077 0.0095 0 0 0 0 1 1 1 1 -6 2 0.1677645 -0.161007 -6 2 0.1677645 -0.161007 0 5.946437 0 0 0 0.454784 0.72571 0.72571 0.274649 0.274649 12 0 -Si Si Si 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.7322 471.18 471.18 2.90 0.10 2.4799 2.4799 1830.8 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 1.651725 -1.658949 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -0.499378 2.999911 2.999911 12 0 -Zr Zr Zr 1 0 1 0 1 0 0.929 0.929 39.9454 39.9454 3.8 0.31 1.857 1.857 382.6 382.6 0 0 0 0 0 0 1 1 1 1 -4 4 1.64 -1.5 -4 4 1.64 -1.5 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 -U U U 1 0 1 0 4.346966 0.77617 0.832 0.832 162.6 162.6 3.9 0.15 1.835 1.835 795.6 795.6 0 0 0 0 0 0 1 1 1 1 -4 4 2 -2 -4 4 2 -2 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 -# -Si O O 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 2.68 471.18 260.893 2.80 0.25 2.4799 5.36 1830.8 3326.69 0 0 0 109.47 0.3122 0 1 1 1 1 -4 4 1.651725 -1.658949 -1.8349 5.5046 0.00148 -0.00112 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.922011 2.999911 0.971086 12 0 -O Si Si 1 6.6 1 -0.229 1 2 2.68 1.7322 260.893 471.18 2.80 0.25 5.36 2.4799 3326.69 1830.8 0 0 0 143.73 2.6 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 1.651725 -1.658949 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -0.499378 0.971086 2.999911 12 0 -Si O Si 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 2.68 471.18 260.893 2.80 0.25 2.4799 5.36 1830.8 3326.69 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -1.8349 5.5046 0.00148 -0.00112 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.922011 2.999911 0.971086 12 0 -O Si O 1 6.6 1 -0.229 1 2 2.68 1.7322 260.893 471.18 3.20 0.25 5.36 2.4799 3326.69 1830.8 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 1.651725 -1.658949 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -0.499378 0.971086 2.999911 12 0 -Si Si O 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.7322 471.18 471.18 2.80 0.25 2.4799 2.4799 1830.8 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 1.651725 -1.658949 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -0.499378 2.999911 2.999911 12 0 -O O Si 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.80 0.25 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0 -# -Si Cu Cu 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.681711 471.18 146.987 3.05 0.15 2.4799 2.794608 1830.8 952.693 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -7 1 0.1677645 -0.161007 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 0.72571 2.999911 0.274649 12 0 -Cu Si Si 1 0 1 0 1 0.140835 1.681711 1.7322 146.987 471.18 3.05 0.15 2.794608 2.4799 952.693 1830.8 0 0 0 0 0 0 1 1 1 1 -7 1 0.1677645 -0.161007 -4 4 1.651725 -1.658949 0 5.946437 0 0 0 0.454784 0.72571 -0.499378 0.274649 2.999911 12 0 -Si Cu Si 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.681711 471.18 146.987 3.05 0.15 2.4799 2.794608 1830.8 952.693 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -7 1 0.1677645 -0.161007 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 0.72571 2.999911 0.274649 12 0 -Cu Si Cu 1 0 1 0 1 0.140835 1.681711 1.7322 146.987 471.18 3.05 0.15 2.794608 2.4799 952.693 1830.8 0 0 0 0 0 0 1 1 1 1 -7 1 0.1677645 -0.161007 -4 4 1.651725 -1.658949 0 5.946437 0 0 0 0.454784 0.72571 -0.499378 0.274649 2.999911 12 0 -Si Si Cu 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.7322 471.18 471.18 2.90 0.10 2.4799 2.4799 1830.8 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 1.651725 -1.658949 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -0.499378 2.999911 2.999911 12 0 -Cu Cu Si 1 0 1 0 1 0.140835 1.681711 1.681711 146.987 146.987 3.25 0.10 2.794608 2.794608 952.693 952.693 0 0 0 0 0 0 1 1 1 1 -7 1 0.1677645 -0.161007 -7 1 0.1677645 -0.161007 0 5.946437 0 0 0 0.454784 0.72571 0.72571 0.274649 0.274649 12 0 -# -Si O Cu 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 2.68 471.18 260.893 2.80 0.25 2.4799 5.36 1830.8 3326.69 0 0 0 0 0 0 1.276957 0.452693 1.032042 1.354486 -4 4 1.651725 -1.658949 -1.8349 5.5046 0.00148 -0.00112 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.922011 2.999911 0.971086 12 0 -Cu O Si 1 0 1 0 1 0.140835 1.681711 2.68 146.987 260.893 2.55 0.10 2.794608 5.36 952.693 3326.69 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -7 1 0.1677645 -0.161007 -1.8349 5.5046 0.00148 -0.00112 0 5.946437 0 0 0 0.454784 0.72571 -3.922011 0.274649 0.971086 12 0 -Si Cu O 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.681711 471.18 146.987 3.05 0.15 2.4799 2.794608 1830.8 952.693 0 0 0 0 0 0 1.276957 0.452693 1.032042 1.354486 -4 4 1.651725 -1.658949 -7 1 0.1677645 -0.161007 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 0.72571 2.999911 0.274649 12 0 -Cu Si O 1 0 1 0 1 0.140835 1.681711 1.7322 146.987 471.18 3.05 0.15 2.794608 2.4799 952.693 1830.8 0 0 0 0 0 0 1.0 1.0 1.0 1.0 -7 1 0.1677645 -0.161007 -4 4 1.651725 -1.658949 0 5.946437 0 0 0 0.454784 0.72571 -0.499378 0.274649 2.999911 12 0 -O Si Cu 1 6.6 1 -0.229 1 2 2.68 1.7322 260.893 471.18 2.80 0.25 5.36 2.4799 3326.69 1830.8 0 0 0 0 0 0 1.0 1.0 1.0 1.0 -1.8349 5.5046 0.00148 -0.00112 -4 4 1.651725 -1.658949 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -0.499378 0.971086 2.999911 12 0 -O Cu Si 1 6.6 1 -0.229 1 2 2.68 1.681711 260.893 146.987 2.55 0.10 5.36 2.794608 3326.69 952.693 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -1.8349 5.5046 0.00148 -0.00112 -7 1 0.1677645 -0.161007 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.72571 0.971086 0.274649 12 0 -# -Cu O O 1 0 1 0 1 0.140835 1.681711 2.68 146.987 260.893 2.80 0.15 2.794608 5.36 952.693 3326.69 0 0 0 180.0 2.518789 0 0.100000 1.097775 0.584713 1.666072 -6 2 0.1677645 -0.161007 -1.8349 5.5046 0.00148 -0.00112 0 5.946437 0 0 0 0.454784 0.72571 -3.922011 0.274649 0.971086 12 0 -O Cu Cu 1 6.6 1 -0.229 1 2 2.68 1.681711 260.893 146.987 2.80 0.15 5.36 2.794608 3326.69 952.693 0 0 0 109.47 0.007858 0 0.100000 1.097775 0.584713 1.666072 -1.8349 5.5046 0.00148 -0.00112 -6 2 0.1677645 -0.161007 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.72571 0.971086 0.274649 12 0 -Cu O Cu 1 0 1 0 1 0.140835 1.681711 2.68 146.987 260.893 2.80 0.15 2.794608 5.36 952.693 3326.69 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -6 2 0.1677645 -0.161007 -1.8349 5.5046 0.00148 -0.00112 0 5.946437 0 0 0 0.454784 0.72571 -3.922011 0.274649 0.971086 12 0 -O Cu O 1 6.6 1 -0.229 1 2 2.68 1.681711 260.893 146.987 2.80 0.15 5.36 2.794608 3326.69 952.693 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -1.8349 5.5046 0.00148 -0.00112 -6 2 0.1677645 -0.161007 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.72571 0.971086 0.274649 12 0 -Cu Cu O 1 0 1 0 1 0.140835 1.681711 1.681711 146.987 146.987 3.30 0.15 2.794608 2.794608 952.693 952.693 0 0 0 0 0 0 1 1 1 1 -6 2 0.1677645 -0.161007 -6 2 0.1677645 -0.161007 0 5.946437 0 0 0 0.454784 0.72571 0.72571 0.274649 0.274649 12 0 -O O Cu 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.80 0.20 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0 -# -Si Hf Hf 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 0.959614 471.18 55.9421 3.26 0.15 2.4799 2.069563 1830.8 707.53 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 0.26152 -0.25918 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.92875 2.999911 4.83958 12 0 -Hf Si Si 1 0 1 0 1.011011 0.046511 0.959614 1.7322 55.9421 471.18 3.26 0.15 2.069563 2.4799 707.53 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 1.651725 -1.658949 0 3.13952 0 0.00941 0 0.719131 -3.92875 -0.499378 4.83958 2.999911 12 0 -Si Hf Si 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 0.959614 471.18 55.9421 3.26 0.15 2.4799 2.069563 1830.8 707.53 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 0.26152 -0.25918 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.92875 2.999911 4.83958 12 0 -Hf Si Hf 1 0 1 0 1.011011 0.046511 0.959614 1.7322 55.9421 471.18 3.26 0.15 2.069563 2.4799 707.53 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 1.651725 -1.658949 0 3.13952 0 0.00941 0 0.719131 -3.92875 -0.499378 4.83958 2.999911 12 0 -Si Si Hf 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.7322 471.18 471.18 3.26 0.15 2.4799 2.4799 1830.8 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 1.651725 -1.658949 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -0.499378 2.999911 2.999911 12 0 -Hf Hf Si 1 0 1 0 1.011011 0.046511 0.959614 0.959614 55.9421 55.9421 3.26 0.15 2.069563 2.069563 707.53 707.53 0 0 0 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 0.26152 -0.25918 0 3.13952 0 0.00941 0 0.719131 -3.92875 -3.92875 4.83958 4.83958 12 0 -# -Si O Hf 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 2.68 471.18 260.893 3.196 0.21 2.4799 5.36 1830.8 3326.69 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -1.8349 5.5046 0.00148 -0.00112 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.922011 2.999911 0.971086 12 0 -Hf O Si 1 0 1 0 1.011011 0.046511 0.959614 2.68 55.9421 260.893 3.196 0.21 2.069563 5.36 707.53 3326.69 0 0 0 0 0 0.28 1 1 1 1 -4 4 0.26152 -0.25918 -1.8349 5.5046 0.00148 -0.00112 0 3.13952 0 0.00941 0 0.719131 -3.92875 -3.922011 4.83958 0.971086 12 0.32 -Si Hf O 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 0.959614 471.18 55.9421 3.26 0.15 2.4799 2.069563 1830.8 707.53 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 0.26152 -0.25918 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.92875 2.999911 4.83958 12 0 -Hf Si O 1 0 1 0 1.011011 0.046511 0.959614 1.7322 55.9421 471.18 3.26 0.15 2.069563 2.4799 707.53 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 1.651725 -1.658949 0 3.13952 0 0.00941 0 0.719131 -3.92875 -0.499378 4.83958 2.999911 12 0 -O Si Hf 1 6.6 1 -0.229 1 2 2.68 1.7322 260.893 471.18 3.196 0.21 5.36 2.4799 3326.69 1830.8 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 1.651725 -1.658949 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -0.499378 0.971086 2.999911 12 0 -O Hf Si 1 6.6 1 -0.229 1 2 2.68 0.959614 260.893 55.9421 3.196 0.21 5.36 2.069563 3326.69 707.53 0 0 0 0 0 0.28 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 0.26152 -0.25918 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.92875 0.971086 4.83958 12 0.30 -# -Hf O O 1 0 1 0 1.011011 0.046511 0.959614 2.68 55.9421 260.893 3.30 0.075 2.069563 5.36 707.53 3326.69 0 0 0 0 0 0.28 1 1 1 1 -4 4 0.26152 -0.25918 -1.8349 5.5046 0.00148 -0.00112 0 3.13952 0 0.00941 0 0.679131 -3.92875 -3.922011 4.83958 0.971086 12 0.32 -O Hf Hf 1 6.6 1 -0.229 1 2 2.68 0.959614 260.893 55.9421 3.30 0.075 5.36 2.069563 3326.69 707.53 0 0 0 0 0 0.28 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 0.26152 -0.25918 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.92875 0.971086 4.83958 12 0.32 -Hf O Hf 1 0 1 0 1.011011 0.046511 0.959614 2.68 55.9421 260.893 3.30 0.075 2.069563 5.36 707.53 3326.69 0 0 0 0 0 0.28 1 1 1 1 -4 4 0.26152 -0.25918 -1.8349 5.5046 0.00148 -0.00112 0 3.13952 0 0.00941 0 0.679131 -3.92875 -3.922011 4.83958 0.971086 12 0.32 -O Hf O 1 6.6 1 -0.229 1 2 2.68 0.959614 260.893 55.9421 3.30 0.075 5.36 2.069563 3326.69 707.53 0 0 0 0 0 0.28 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 0.26152 -0.25918 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.92875 0.971086 4.83958 12 0.32 -Hf Hf O 1 0 1 0 1.011011 0.046511 0.959614 0.959614 55.9421 55.9421 3.30 0.075 2.069563 2.069563 707.53 707.53 0 0 0 0 0 0.0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 0.26152 -0.25918 0 3.13952 0 0.00941 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0.0 -O O Hf 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.80 0.10 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0.0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0.0 -# -Ti O O 1 0 1 0 1.255016 0.089078 1.226342 2.68 99.3916 260.893 3.25 0.10 2.082408 5.36 546.386 3326.69 0 0 0 90 0.403105 8.45 0.088406 0.969934 0.296577 1.326746 -4 4 2.508854 -2.511416 -1.8349 5.5046 0.00148 -0.00112 0 1.943430774 0 0.254695274 0 0.873685 0.392632 -3.922011 1.78349 0.971086 12 0 -O Ti Ti 1 6.6 1 -0.229 1 2 2.68 1.226342 260.893 99.3916 3.25 0.10 5.36 2.082408 3326.69 546.386 0 0 0 130.54 0.202777 8.45 0.088406 0.969934 0.296577 1.326746 -1.8349 5.5046 0.00148 -0.00112 -4 4 2.508854 -2.511416 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.392632 0.971086 1.78349 12 0 -Ti O Ti 1 0 1 0 1.255016 0.089078 1.226342 2.68 99.3916 260.893 3.25 0.10 2.082408 5.36 546.386 3326.69 0 0 0 0 0 8.45 0.088406 0.969934 0.296577 1.326746 -4 4 2.508854 -2.511416 -1.8349 5.5046 0.00148 -0.00112 0 1.943430774 0 0.254695274 0 0.873685 0.392632 -3.922011 1.78349 0.971086 12 0 -O Ti O 1 6.6 1 -0.229 1 2 2.68 1.226342 260.893 99.3916 3.25 0.10 5.36 2.082408 3326.69 546.386 0 0 0 0 0 8.45 0.088406 0.969934 0.296577 1.326746 -1.8349 5.5046 0.00148 -0.00112 -4 4 2.508854 -2.511416 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.392632 0.971086 1.78349 12 0 -Ti Ti O 1 0 1 0 1.255016 0.089078 1.226342 1.226342 99.3916 99.3916 3.43 0.05 2.082408 2.082408 546.386 546.386 0 0 0 0 0 0 1 1 1 1 -4 4 2.508854 -2.511416 -4 4 2.508854 -2.511416 0 1.943430774 0 0.254695274 0 0.873685 0.392632 0.392632 1.78349 1.78349 12 0 -O O Ti 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.80 0.10 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0 -# -Ti Cu Cu 1 0 1 0 1.255016 0.089078 1.226342 1.681711 99.3916 146.987 4.45 0.10 2.082408 2.794608 546.386 952.693 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -4 4 2.508854 -2.511416 -7.2 0.8 0.1677645 -0.161007 0 1.943430774 0 0.254695274 0 0.873685 0.392632 0.72571 1.78349 0.274649 12 0 -Cu Ti Ti 1 0 1 0 1 0.140835 1.681711 1.226342 146.987 99.3916 4.45 0.10 2.794608 2.082408 952.693 546.386 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -7.2 0.8 0.1677645 -0.161007 -4 4 2.508854 -2.511416 0 5.946437 0 0 0 0.454784 0.72571 0.392632 0.274649 1.78349 12 0 -Ti Cu Ti 1 0 1 0 1.255016 0.089078 1.226342 1.681711 99.3916 146.987 4.45 0.10 2.082408 2.794608 546.386 952.693 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -4 4 2.508854 -2.511416 -7.2 0.8 0.1677645 -0.161007 0 1.943430774 0 0.254695274 0 0.873685 0.392632 0.72571 1.78349 0.274649 12 0 -Cu Ti Cu 1 0 1 0 1 0.140835 1.681711 1.226342 146.987 99.3916 4.45 0.10 2.794608 2.082408 952.693 546.386 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -7.2 0.8 0.1677645 -0.161007 -4 4 2.508854 -2.511416 0 5.946437 0 0 0 0.454784 0.72571 0.392632 0.274649 1.78349 12 0 -Ti Ti Cu 1 0 1 0 1.255016 0.089078 1.226342 1.226342 99.3916 99.3916 3.41 0.15 2.082408 2.082408 546.386 546.386 0 0 0 0 0 0 1 1 1 1 -4 4 2.508854 -2.511416 -4 4 2.508854 -2.511416 0 1.943430774 0 0.254695274 0 0.873685 0.392632 0.392632 1.78349 1.78349 12 0 -Cu Cu Ti 1 0 1 0 1 0.140835 1.681711 1.681711 146.987 146.987 3.25 0.10 2.794608 2.794608 952.693 952.693 0 0 0 0 0 0 1 1 1 1 -7.2 0.8 0.1677645 -0.161007 -7.2 0.8 0.1677645 -0.161007 0 5.946437 0 0 0 0.454784 0.72571 0.72571 0.274649 0.274649 12 0 -# -Ti O Cu 1 0 1 0 1.255016 0.089078 1.226342 2.68 99.3916 260.893 3.25 0.10 2.082408 5.36 546.386 3326.69 0 0 0 0 0 8.45 0.088406 0.969934 0.296577 1.326746 -4 4 2.508854 -2.511416 -1.8349 5.5046 0.00148 -0.00112 0 1.943430774 0 0.254695274 0 0.873685 0.392632 -3.922011 1.78349 0.971086 12 0 -Cu O Ti 1 0 1 0 1 0.140835 1.681711 2.68 146.987 260.893 2.55 0.10 2.794608 5.36 952.693 3326.69 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -7.2 0.8 0.1677645 -0.161007 -1.8349 5.5046 0.00148 -0.00112 0 5.946437 0 0 0 0.454784 0.72571 -3.922011 0.274649 0.971086 12 0 -Ti Cu O 1 0 1 0 1.255016 0.089078 1.226342 1.681711 99.3916 146.987 4.45 0.10 2.082408 2.794608 546.386 952.693 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -4 4 2.508854 -2.511416 -7.2 0.8 0.1677645 -0.161007 0 1.943430774 0 0.254695274 0 0.873685 0.392632 0.72571 1.78349 0.274649 12 0 -Cu Ti O 1 0 1 0 1 0.140835 1.681711 1.226342 146.987 99.3916 4.45 0.10 2.794608 2.082408 952.693 546.386 0 0 0 0 0 0 0.098179 1.662238 0.104821 10.000363 -7.2 0.8 0.1677645 -0.161007 -4 4 2.508854 -2.511416 0 5.946437 0 0 0 0.454784 0.72571 0.392632 0.274649 1.78349 12 0 -O Ti Cu 1 6.6 1 -0.229 1 2 2.68 1.226342 260.893 99.3916 3.25 0.10 5.36 2.082408 3326.69 546.386 0 0 0 0 0 0.00 0.088406 0.969934 0.296577 1.326746 -1.8349 5.5046 0.00148 -0.00112 -4 4 2.508854 -2.511416 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.392632 0.971086 1.78349 12 0 -O Cu Ti 1 6.6 1 -0.229 1 2 2.68 1.681711 260.893 146.987 2.55 0.10 5.36 2.794608 3326.69 952.693 0 0 0 0 0 0 0.100000 1.097775 0.584713 1.666072 -1.8349 5.5046 0.00148 -0.00112 -7.2 0.8 0.1677645 -0.161007 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 0.72571 0.971086 0.274649 12 0 diff --git a/examples/comb/ffield.comb b/examples/comb/ffield.comb new file mode 120000 index 0000000000..09ef443f91 --- /dev/null +++ b/examples/comb/ffield.comb @@ -0,0 +1 @@ +../../potentials/ffield.comb \ No newline at end of file diff --git a/examples/comb/ffield.comb3 b/examples/comb/ffield.comb3 deleted file mode 100644 index 3c69fe9a2b..0000000000 --- a/examples/comb/ffield.comb3 +++ /dev/null @@ -1,523 +0,0 @@ - # DATE: 2014-02-01 DATE: 2013-11-04 CONTRIBUTOR: Tzu-Ray Shan, tnshan@sandia.gov CITATION: Liang, Shan, Cheng, Devine, Noordhoek, Li, Lu, Phillpot and Sinnott, Mater Sci Eng Rep, 74, 255-279 (2013) - # ffield.comb3 file for LAMMPS/COMB3, converted from COMB3 code parameters O Cu N C H Ti Zn Zr - # Converted on: 2014-01-30 - # - # Please cite the following publication for the use of LAMMPS-COMB3. - # Tao Liang, Tzu-Ray Shan, Yu-Ting Cheng, Bryce D. Devine, Mark Noordhoek, Yangzhong Li, Zhize Lu, Simon R. Phillpot,and Susan B. Sinnott, "Classical atomistic simulations of surfaces and heterogeneous interfaces with the charge-optimized many body (COMB) potentials", Materials Science and Engineering: Reports, 74 (2013) 255-279. - # List of Changes since 2013-Sep: - # 1) CH4 has been changed. - # 2) Include ZrO2 force fields - # 3) Change correction terms from Legendre polynomials and bond bending to 6th order polynomials. - # -O O O 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O Cu 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O N 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O C 3 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O H 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O Ti 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O Zn 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O O Zr 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1966411E+01 0.2521788E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3258854E+01 0.6881635E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5295119E+01 0.4956339E+04 0.3258854E+01 0.2600000E+01 0.2000000E+00 0.1417783E+02 0.1600164E+02 0.1257097E+01 -0.5652039E+01 -0.2046884E+00 0.1826597E+01 0.8565567E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.1823933E+00 0.9323800E-02 -0.1534590E-01 0.1691170E-01 -0.1317600E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Cu Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2435700E+00 0.8576372E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2253174E+01 0.2450000E+01 0.1500000E+00 0.2251128E-02 0.1783032E-02 0.1816425E-01 0.3013329E-02 0.2789347E-02 0.4218284E-02 0.7035424E-03 0.3486652E-01 -0.1232266E-01 0.1965112E-01 -0.2119645E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N O 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N Cu 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N N 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.1575000E-03 0.3750000E-04 -0.4190000E-03 -0.5357000E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N C 3 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N H 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N Ti 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N Zn 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O N Zr 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.1608740E-02 0.1000000E-02 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.2889513E+01 0.2250000E+01 0.1500000E+00 0.9974699E+01 0.2683124E+02 0.5129581E+01 -0.1687901E+02 0.1929454E+01 0.2064311E+00 0.2644439E+00 -0.2525391E-03 -0.3838929E-03 -0.8530755E-04 -0.2072918E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C O 3 1 3 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C Cu 3 1 2 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1401642E+01 -0.2773900E-01 -0.3006750E+00 0.3683200E-02 -0.1136480E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C N 3 1 3 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C C 3 1 1 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C H 3 1 2 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C Ti 3 1 2 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C Zn 3 1 2 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O C Zr 3 1 2 0 1 1 0 0 1 0.0000000E+00 0.3950000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.8969574E-01 0.1694354E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.4729859E-02 0.1750000E+01 0.1500000E+00 0.9882114E-01 0.1756465E-01 -0.2570172E-01 -0.1543155E+01 -0.9607860E-03 -0.7667515E+00 0.2371642E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O H Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2198296E+01 0.4749058E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 0.1491702E+01 0.4463727E+01 0.5355258E+01 0.2997975E+01 0.1203065E+01 0.2486002E+00 0.2085342E-01 -0.4874351E-01 0.6218981E-01 0.2217044E-01 0.6755488E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Ti Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.2557314E+01 0.3000000E+01 0.2000000E+00 0.1507608E+00 0.1577119E+00 -0.1090460E-01 0.9747670E-01 0.6867960E-01 -0.1901485E+00 0.1307987E+00 -0.2052220E-01 -0.2807440E-01 0.6452240E-01 -0.2657330E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zn Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 0.2381800E+00 0.3970778E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1072713E+01 0.2800000E+01 0.2000001E+00 -0.3040657E-01 0.2652378E+00 -0.1582586E+00 -0.4621471E+00 0.9702852E+00 0.8742132E+00 0.5556172E+00 0.1379238E-01 0.1333006E+00 0.1067606E+00 0.1178399E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -O Zr Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.4956339E+04 0.6881635E+03 0.5295119E+01 0.3258854E+01 0.1000000E+01 -0.2000000E+01 0.6000000E+01 0.7664409E-02 -0.1213951E+01 -0.2000000E+01 0.6000000E+01 0.6599630E+01 0.5955097E+01 0.7604334E+00 0.9388015E-02 0.1371794E+01 -0.3053592E+01 0.4378990E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3056900E+00 -0.1539170E+01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.4694136E+01 0.2900000E+01 0.1999999E+00 0.2725394E+02 0.2296021E+02 0.1245935E+02 -0.1753586E+02 0.5192187E+01 -0.1653414E+01 0.1298779E+01 0.1225438E+00 -0.4639774E+01 -0.2839011E+00 0.4639774E+01 -0.2061724E+00 0.6113230E-01 0.2061476E+01 0.3501339E+00 -0.3704719E+01 -0.6328295E+00 0.1819703E+01 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 -0.1261294E+01 0.1861535E+00 -0.1392390E-01 -0.9679700E-02 0.5166700E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu O Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 -0.2288704E+00 0.5307763E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2092751E+01 0.9347170E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2353223E+01 0.1336466E+04 0.2229919E+01 0.2450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 -0.1082528E-01 0.9698014E-02 -0.4508018E-01 0.2173814E-01 0.1557732E+00 -0.9365586E-02 0.1494216E+00 -0.9015916E-02 -0.9550571E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu O 2 2 3 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu Cu 2 2 2 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4356100E-01 0.0000000E+00 0.4919500E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu N 2 2 3 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu C 2 2 1 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu H 2 2 2 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu Ti 2 2 2 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu Zn 2 2 2 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Cu Zr 2 2 2 0 0 0 0 4 1 0.1000000E-01 0.3450000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1467089E+01 0.1028261E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2712035E+01 0.7123527E+03 0.1467089E+01 0.3350000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu N Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C O 2 1 3 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 -0.1098346E+00 0.4752372E+00 -0.8442600E-02 0.8754500E-02 0.3760100E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C Cu 2 1 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C N 2 1 3 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C C 2 1 1 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C H 2 1 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C Ti 2 1 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C Zn 2 1 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu C Zr 2 1 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3345035E-02 0.1000000E-01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.3178819E+00 0.2650000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.9062441E+00 -0.9880102E-03 0.5560993E-02 -0.8710045E-01 -0.7891008E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H O 2 2 3 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H Cu 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H N 2 2 3 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H C 2 2 1 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H H 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H Ti 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H Zn 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu H Zr 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3034638E+00 0.1016911E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8454920E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Ti Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zn Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2474687E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Cu Zr Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7123527E+03 0.1028261E+03 0.2712035E+01 0.1467089E+01 0.1000000E+01 -0.2000000E+01 0.2000000E+01 0.3490214E+00 -0.1339472E+00 -0.2000000E+01 0.2000000E+01 0.3652316E+01 0.3213926E+01 0.7478102E+00 0.1172919E+00 0.1397263E+01 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3051574E+00 0.4677531E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2310550E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O O 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O Cu 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O N 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O C 3 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O H 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O Ti 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O Zn 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N O Zr 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.2068698E+00 0.2696627E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4703396E+01 0.3251258E+03 0.4798425E+01 0.3778823E+03 0.2951760E+01 0.3111556E+03 0.6118996E+01 0.7859391E+04 0.4700678E+00 0.2250000E+01 0.1500000E+00 0.4957188E-03 -0.2765761E-03 0.1006819E+01 0.9564232E+00 0.2767543E+00 0.3123805E+00 0.2343152E+00 0.4471950E-04 0.6936042E-03 -0.1032065E-03 0.4032635E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Cu Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2602819E+01 0.4649418E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3965036E+01 0.2335175E+04 0.2602819E+01 0.2683537E+01 0.1537150E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N O 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N Cu 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N N 3 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N C 3 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N H 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N Ti 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N Zn 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N N Zr 3 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3738549E+01 0.2102296E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5218037E+01 0.7654973E+04 0.3738549E+01 0.2150000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C O 3 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C Cu 3 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C N 3 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C C 3 1 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C H 3 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C Ti 3 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C Zn 3 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N C Zr 3 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.2942366E+01 0.1994335E+01 0.1504261E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N H Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1242126E+01 0.9436434E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5143069E+00 0.1950000E+01 0.1500000E+00 0.1508833E+00 -0.3508835E+00 0.1879419E+01 -0.6135678E-01 0.1018086E-01 0.1773759E+00 0.3381936E-01 -0.8757369E-03 0.4295447E-03 -0.4655969E-03 -0.6389393E-03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Ti Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.5066036E+01 0.2800000E+01 0.2000000E+00 0.0000000E+00 0.2300000E-04 0.1728730E-01 0.4126639E+00 0.2633349E+00 -0.1032680E+00 0.2487740E-01 -0.5651670E-01 -0.3633110E-01 0.7137000E-02 0.6461960E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zn Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr O 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr Cu 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr N 3 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr C 3 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr H 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr Ti 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr Zn 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -N Zr Zr 3 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.7654973E+04 0.2102296E+04 0.5218037E+01 0.3738549E+01 0.1000000E+01 -0.3000000E+01 0.5000000E+01 0.1969380E+00 -0.6887839E+00 -0.3000000E+01 0.5000000E+01 0.6209731E+01 0.9292255E+01 -0.1254466E+01 0.2863502E+00 0.1438711E+01 0.1048322E+01 0.3911805E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.5167863E+00 -0.5521364E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.0000000E+00 0.0000000E+00 0.8126646E+00 0.1724015E+01 0.6985961E+00 0.2838323E+00 0.1691325E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O O 1 3 3 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O Cu 1 3 2 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1927749E+01 0.4492100E-02 0.7269000E-03 -0.1982700E-02 0.3811860E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O N 1 3 3 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O C 1 3 1 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O H 1 3 2 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O Ti 1 3 2 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O Zn 1 3 2 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C O Zr 1 3 2 0 2 2 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.2210059E+00 0.1105030E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.5384622E+00 0.1027172E+02 0.6728805E+00 0.5247337E+01 0.7520943E+00 0.8011457E+01 0.7713576E+01 0.4546971E+04 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.2502470E+01 0.6121492E-02 0.4192692E-01 -0.2181554E-02 0.6907540E+01 0.5222031E+01 0.2132357E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu O 1 2 3 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 -0.4855090E+00 0.3652260E-01 -0.9130700E-02 -0.1658200E-02 0.2825080E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu Cu 1 2 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu N 1 2 3 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu C 1 2 1 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu H 1 2 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu Ti 1 2 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu Zn 1 2 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Cu Zr 1 2 2 0 0 0 0 2 1 0.1128090E-01 0.3425000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 -0.1166463E+00 0.5832316E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3178819E+00 0.6046844E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4030754E+01 0.7480554E+03 0.0000000E+00 0.2650000E+01 0.1500000E+00 -0.2404352E+00 -0.2745729E+00 0.3905948E+00 0.5023326E+00 0.1194375E+00 0.1717656E+00 0.1214693E+00 -0.1153438E-02 -0.1318113E-02 -0.1081672E-02 0.7362141E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N O 1 3 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N Cu 1 3 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N N 1 3 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N C 1 3 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N H 1 3 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N Ti 1 3 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N Zn 1 3 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C N Zr 1 3 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2942366E+01 0.1068239E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3956221E+01 0.2620968E+04 0.0000000E+00 0.1994335E+01 0.1504261E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C O 1 1 3 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C Cu 1 1 2 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C N 1 1 3 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C C 1 1 1 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C H 1 1 2 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C Ti 1 1 2 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C Zn 1 1 2 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C C Zr 1 1 2 1 3 3 1 1 1 0.1272586E-01 0.3400000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4794940E+01 0.1321954E+05 0.1496616E+01 0.3181490E+02 0.1508583E+01 0.2818426E+02 0.4965431E+01 0.1705446E+05 0.0000000E+00 0.1850000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H O 1 2 3 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H Cu 1 2 2 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H N 1 2 3 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H C 1 2 1 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H H 1 2 2 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H Ti 1 2 2 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H Zn 1 2 2 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C H Zr 1 2 2 2 4 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.1232245E+01 0.9390230E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.0000000E+00 0.1750000E+01 0.1500000E+00 -0.1555865E+00 -0.1104684E-01 0.2070231E+00 -0.2066751E-01 0.1739971E+00 0.4435496E+00 -0.4620521E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti O 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti Cu 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti N 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti C 1 2 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti H 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti Ti 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti Zn 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Ti Zr 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.0000000E+00 0.2719221E+01 0.1443428E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn O 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn Cu 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn N 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn C 1 2 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn H 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn Ti 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn Zn 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zn Zr 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.0000000E+00 0.2543722E+01 0.1395593E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr O 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr Cu 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr N 1 2 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr C 1 2 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr H 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr Ti 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr Zn 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -C Zr Zr 1 2 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.8973872E+03 0.5428043E+03 0.2694404E+01 0.2146183E+01 0.1000000E+01 -0.4000000E+01 0.4000000E+01 0.3059601E+00 -0.1186725E+00 -0.4000000E+01 0.4000000E+01 0.5372531E+01 0.5914404E+01 0.3946687E+00 0.3059477E-01 0.1112389E+01 0.8166928E+00 0.2681866E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.8065243E+00 0.2346083E-01 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.0000000E+00 0.2790000E+01 0.1500000E+00 0.4672280E+00 0.8021770E+00 -0.1693873E+00 -0.7132275E+00 -0.8606539E-01 0.3610864E+00 0.2482604E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H O Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2043225E+01 0.9434805E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3043947E+01 0.1634356E+03 0.2043225E+01 0.1650000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu O 2 2 3 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu Cu 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu N 2 2 3 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu C 2 2 1 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu H 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu Ti 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu Zn 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Cu Zr 2 2 2 0 0 0 0 2 1 0.7190967E-02 0.3130000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.9027938E+00 0.1628007E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3444484E+01 0.2208881E+03 0.9027938E+00 0.2150000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H N Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1077726E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1134424E+01 0.3847649E+01 0.1026156E+01 0.4294827E+01 0.9793743E+00 0.3877552E+01 0.7588333E+01 0.1407592E+04 0.5436308E+00 0.1950000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C O 2 1 3 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C Cu 2 1 2 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C N 2 1 3 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C C 2 1 1 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6366328E+00 -0.1273266E+01 0.6366328E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C H 2 1 2 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.5145789E+00 -0.1029158E+01 0.5145789E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C Ti 2 1 2 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C Zn 2 1 2 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H C Zr 2 1 2 0 0 0 0 1 1 0.8112054E-02 0.3105000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.4187692E+00 0.5977828E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.6260171E+01 0.2731344E+03 0.3251163E+00 0.1750000E+01 0.1500000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H O 2 2 3 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H Cu 2 2 2 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H N 2 2 3 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H C 2 2 1 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2172531E+00 -0.4345062E+00 0.2172531E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H H 2 2 2 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H Ti 2 2 2 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H Zn 2 2 2 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H H Zr 2 2 2 0 0 0 0 1 1 0.5171000E-02 0.2810000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1948353E+01 0.3572707E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.4216932E+01 0.8906987E+02 0.1948353E+01 0.1300000E+01 0.2000000E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Ti Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zn Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 -0.1000000E-02 0.1000000E-02 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 -0.6979045E+00 -0.2515194E+00 0.1477481E+01 0.2298515E+00 -0.9541016E+00 0.3823360E+00 0.6759455E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -H Zr Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.8906987E+02 0.3572707E+02 0.4216932E+01 0.1948353E+01 0.1000000E+01 -0.5366516E+00 0.1000000E+01 0.5000000E-02 -0.5000000E-02 -0.5000000E+00 0.5000000E+00 0.5359305E+01 0.8240603E+01 0.0000000E+00 0.0000000E+00 0.2000000E+01 0.1005881E+01 0.9799900E-01 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 0.1000000E+01 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.4498000E-03 0.2800000E+01 0.2000001E+00 0.4379410E+00 0.9582117E+00 0.1036535E+00 -0.7001700E+00 0.2999763E+00 0.1651448E+00 0.1011453E+00 -0.1624493E+00 0.4351683E+01 -0.2971600E-02 -0.4351683E+01 -0.2179000E-01 0.8986300E-02 0.3036884E+00 -0.2740163E+00 -0.9159242E+00 0.3626548E+00 0.7262178E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti O Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2129506E+01 0.2125257E+03 0.2142030E+01 0.1834730E+03 0.2030774E+01 0.1819432E+03 0.2868830E+01 0.1556206E+04 0.7912737E+00 0.3000000E+01 0.2000000E+00 0.4997810E-01 0.1546093E+00 0.4452330E-01 0.1693955E+00 0.1796268E+00 -0.2398841E+00 0.1848422E+00 -0.3457300E-02 -0.2265040E-01 0.1666560E-01 -0.3002200E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Cu Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1322960E+01 0.1097041E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2424023E+01 0.6066238E+03 0.1322960E+01 0.3660422E+01 0.1277175E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti N Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.2453223E+01 0.1048055E+03 0.1766886E+01 0.1359923E+03 0.2439896E+01 0.3011201E+02 0.3178150E+01 0.1661766E+04 0.2297286E+01 0.2800000E+01 0.2000000E+00 0.2600000E-05 0.2240000E-04 -0.1131598E+00 0.3359560E-01 0.2616125E+00 0.2691128E+00 0.2251859E+00 -0.3203870E-01 -0.8235410E-01 0.2447850E-01 -0.7318660E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C O 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C Cu 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C N 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C C 2 1 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C H 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C Ti 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C Zn 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti C Zr 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1662507E+01 0.2520535E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2415207E+01 0.6808662E+03 0.1662507E+01 0.2719221E+01 0.1443428E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti H Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1563592E+01 0.6466508E+02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3176471E+01 0.2145049E+03 0.1563592E+01 0.2275575E+01 0.2043439E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.4356100E-01 0.0000000E+00 0.4919500E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Ti Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1178831E+01 0.1170421E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2136010E+01 0.5165873E+03 0.1178831E+01 0.4000000E+01 0.1000000E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zn Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Ti Zr Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5165873E+03 0.1170421E+03 0.2136010E+01 0.1178831E+01 0.5660482E+00 -0.4000000E+01 0.4000000E+01 0.5000000E-02 -0.5000020E-01 -0.4000000E+01 0.4000000E+01 0.3095768E+01 0.4230280E+01 -0.1039759E+01 0.3574280E+00 0.7243519E+00 0.3656345E+00 0.7648498E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.3350000E+00 0.3022933E+01 0.0000000E+00 0.3000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5504001E-01 -0.6554936E-01 -0.1304334E+00 0.9305440E-01 0.2266737E+00 0.1466059E+00 0.7718281E-01 -0.1231823E-01 0.1750793E+00 0.6608536E-01 -0.7610935E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn O Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.2592011E+01 0.1898343E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1986354E+01 0.4237569E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2842371E+01 0.1369285E+04 0.1549384E+01 0.2800000E+01 0.2000001E+00 0.2288437E-01 -0.9920014E-02 0.1147701E-01 -0.1995657E-01 0.3955190E-01 -0.1381147E-01 0.4348548E-01 -0.1052353E-01 0.1368662E-01 0.1795660E-01 0.1337706E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Cu Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3090363E+00 0.9266199E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1900813E+01 0.4166952E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774643E+01 0.1318299E+04 0.1900813E+01 0.3450000E+01 0.1500000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2275729E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn N Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.3051554E+01 0.1839526E+04 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3928305E+01 0.4525937E+04 0.3051554E+01 0.2742590E+01 0.1349090E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C O 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C Cu 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C N 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C C 2 1 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C H 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C Ti 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C Zn 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn C Zr 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2370800E+01 0.6135085E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3034762E+01 0.1858657E+04 0.2370800E+01 0.2543722E+01 0.1395593E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn H Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2728951E+01 0.1190255E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3725902E+01 0.5775554E+03 0.2728951E+01 0.2450000E+01 0.1500001E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Ti Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1771695E+01 0.4340405E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2387291E+01 0.1175732E+04 0.1771695E+01 0.3741651E+01 0.1002231E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 -0.6320000E-04 0.0000000E+00 0.1327400E-02 0.0000000E+00 -0.3982300E-02 0.0000000E+00 0.2920300E-02 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zn Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2352653E+01 0.4948113E+03 0.2330411E+01 0.5107761E+03 0.2288269E+01 0.5300215E+03 0.2626286E+01 0.2842165E+04 0.2364559E+01 0.3500000E+01 0.9999990E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774000E-02 0.2783000E-02 0.1013400E-02 -0.2212800E-02 0.1191400E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zn Zr Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.2675921E+04 0.1609601E+04 0.2638572E+01 0.2364559E+01 0.6267391E+00 -0.4000000E+01 0.4000000E+01 0.5296103E+00 -0.5004044E+00 -0.4000000E+01 0.4000000E+01 0.3389925E+01 0.8162758E+01 -0.3381140E+01 0.9216813E+00 0.6734390E+00 0.3398138E+00 0.6702070E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2221666E+00 0.6200000E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2774033E-02 0.2783002E-02 0.1013396E-02 -0.2212792E-02 0.1191381E-02 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.1739881E+00 0.6254329E+00 -0.1630934E+00 -0.3571056E+01 -0.5984732E+00 0.3540135E+01 0.4969000E-03 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr O Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.2106498E+01 0.4591872E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1347245E+01 0.1273479E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3598641E+01 0.4490868E+04 0.2460319E+01 0.2900000E+01 0.1999999E+00 0.5639262E+00 0.9034689E+00 -0.6173013E+00 -0.1188079E+01 0.7078418E+00 0.2547006E+00 0.1393767E+00 -0.2532790E-01 0.5551324E+00 -0.2268834E+01 -0.5551324E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Cu Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3975000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1264685E+01 0.1080820E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2266721E+01 0.5995921E+03 0.1769288E+01 0.3577135E+01 0.1269172E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N O 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N Cu 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N N 2 3 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N C 2 3 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N H 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N Ti 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N Zn 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr N Zr 2 3 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.2400415E+01 0.4887068E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3519722E+01 0.1965532E+04 0.2905018E+01 0.2865151E+01 0.1375146E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C O 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C Cu 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C N 2 1 3 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C C 2 1 1 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C H 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C Ti 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C Zn 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr C Zr 2 1 2 0 0 0 0 0 1 0.0000000E+00 0.3950000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2417269E+00 0.3186964E+00 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1840783E+01 0.6151236E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2570545E+01 0.1860857E+04 0.1840783E+01 0.2790000E+01 0.1500000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.4712600E-02 0.2093370E-01 -0.7103100E-02 -0.3243851E+00 -0.2322519E+00 0.4052940E+00 0.3087387E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr H Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.3655000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 0.2037481E+00 0.3441370E+00 0.2500000E+00 0.2500000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1510666E+01 0.1549729E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2029568E+01 0.2697819E+03 0.3073955E+01 0.2800000E+01 0.2000001E+00 0.3429514E+00 0.6663283E+00 0.1049756E+00 -0.4112560E+00 0.6595730E-01 0.2261460E+00 0.2079405E+00 -0.2629300E-02 0.3765639E+00 -0.4999754E+01 -0.3765639E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Ti Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1120556E+01 0.1153115E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1978709E+01 0.5105993E+03 0.1625159E+01 0.3908963E+01 0.1000265E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zn Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1713420E+01 0.4276226E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.2229990E+01 0.1162104E+04 0.2218023E+01 0.3656498E+01 0.1000958E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr O 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr Cu 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr N 2 2 3 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr C 2 2 1 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr H 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr Ti 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr Zn 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 -Zr Zr Zr 2 2 2 0 0 0 0 0 1 0.0000000E+00 0.4500000E+01 0.5046808E+03 0.1136065E+03 0.1821408E+01 0.1062282E+01 0.1000000E+01 -0.2000000E+01 0.4000000E+01 0.1999880E+01 -0.1040199E+00 -0.2000000E+01 0.4000000E+01 0.3302770E+01 0.2957410E+01 0.1331500E+00 0.3161000E-01 0.1831535E+01 -0.1791861E+01 0.1228965E+01 0.5000000E+00 0.5000000E+00 0.1100000E+02 0.2000000E+00 0.3871027E+00 0.0000000E+00 0.1000000E+01 0.5000000E+00 0.1062282E+01 0.1136065E+03 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1821408E+01 0.5046808E+03 0.2071488E+01 0.3820000E+01 0.1000000E+00 0.5764650E+00 0.6403220E+00 0.4243000E-02 0.5968300E-01 0.4370760E+00 0.5652700E-01 0.7202000E-02 -0.5879890E-02 0.1010734E+01 -0.6194480E-02 -0.9101515E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.1000000E+01 0.0000000E+00 0.1000000E+01 diff --git a/examples/comb/ffield.comb3 b/examples/comb/ffield.comb3 new file mode 120000 index 0000000000..5adce311f5 --- /dev/null +++ b/examples/comb/ffield.comb3 @@ -0,0 +1 @@ +../../potentials/ffield.comb3 \ No newline at end of file diff --git a/examples/comb/log.5Oct16.comb.Cu.g++.1 b/examples/comb/log.27Nov18.comb.Cu.g++.1 similarity index 80% rename from examples/comb/log.5Oct16.comb.Cu.g++.1 rename to examples/comb/log.27Nov18.comb.Cu.g++.1 index 0c419fa142..d5a334a1b5 100644 --- a/examples/comb/log.5Oct16.comb.Cu.g++.1 +++ b/examples/comb/log.27Nov18.comb.Cu.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Cu crystal, structure created by LAMMPS, qeq off units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (14.46 14.46 14.46) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 256 atoms + Time spent = 0.000869274 secs mass 1 63.54 pair_style comb @@ -42,13 +44,18 @@ thermo 1 run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 1 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 3 3 3 -Memory usage per processor = 6.4805 Mbytes + binsize = 6.25, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.469 | 7.469 | 7.469 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 0 10.1 -3.5063151 -3.5076155 -3.5076155 0 27.496055 3023.4645 14.46 14.46 14.46 0 1 10.099643 -3.5063151 -3.5076155 -3.5076155 0 27.512983 3023.4645 14.46 14.46 14.46 0 @@ -61,20 +68,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 8 10.077179 -3.5063151 -3.5076126 -3.5076126 0 28.578403 3023.4645 14.46 14.46 14.46 0 9 10.071123 -3.5063151 -3.5076118 -3.5076118 0 28.865545 3023.4645 14.46 14.46 14.46 0 10 10.06436 -3.5063151 -3.5076109 -3.5076109 0 29.186292 3023.4645 14.46 14.46 14.46 0 -Loop time of 0.244011 on 1 procs for 10 steps with 256 atoms +Loop time of 0.169334 on 1 procs for 10 steps with 256 atoms -Performance: 0.708 ns/day, 33.890 hours/ns, 40.982 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.020 ns/day, 23.519 hours/ns, 59.055 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.24357 | 0.24357 | 0.24357 | 0.0 | 99.82 +Pair | 0.16875 | 0.16875 | 0.16875 | 0.0 | 99.65 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00023103 | 0.00023103 | 0.00023103 | 0.0 | 0.09 -Output | 0.00011086 | 0.00011086 | 0.00011086 | 0.0 | 0.05 -Modify | 4.7445e-05 | 4.7445e-05 | 4.7445e-05 | 0.0 | 0.02 -Other | | 5.651e-05 | | | 0.02 +Comm | 0.00034857 | 0.00034857 | 0.00034857 | 0.0 | 0.21 +Output | 0.0001359 | 0.0001359 | 0.0001359 | 0.0 | 0.08 +Modify | 4.1485e-05 | 4.1485e-05 | 4.1485e-05 | 0.0 | 0.02 +Other | | 5.889e-05 | | | 0.03 Nlocal: 256 ave 256 max 256 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/comb/log.5Oct16.comb.Cu.g++.4 b/examples/comb/log.27Nov18.comb.Cu.g++.4 similarity index 80% rename from examples/comb/log.5Oct16.comb.Cu.g++.4 rename to examples/comb/log.27Nov18.comb.Cu.g++.4 index d9b3aed9b0..bd37372709 100644 --- a/examples/comb/log.5Oct16.comb.Cu.g++.4 +++ b/examples/comb/log.27Nov18.comb.Cu.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Cu crystal, structure created by LAMMPS, qeq off units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (14.46 14.46 14.46) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 256 atoms + Time spent = 0.000329494 secs mass 1 63.54 pair_style comb @@ -42,13 +44,18 @@ thermo 1 run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 1 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 3 3 3 -Memory usage per processor = 6.35565 Mbytes + binsize = 6.25, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.951 | 6.951 | 6.951 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 0 10.1 -3.5063151 -3.5076155 -3.5076155 0 27.496055 3023.4645 14.46 14.46 14.46 0 1 10.099638 -3.5063151 -3.5076155 -3.5076155 0 27.513531 3023.4645 14.46 14.46 14.46 0 @@ -61,20 +68,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 8 10.076864 -3.5063151 -3.5076125 -3.5076125 0 28.613454 3023.4645 14.46 14.46 14.46 0 9 10.070725 -3.5063151 -3.5076118 -3.5076118 0 28.909893 3023.4645 14.46 14.46 14.46 0 10 10.063868 -3.5063151 -3.5076109 -3.5076109 0 29.241022 3023.4645 14.46 14.46 14.46 0 -Loop time of 0.0643001 on 4 procs for 10 steps with 256 atoms +Loop time of 0.0479479 on 4 procs for 10 steps with 256 atoms -Performance: 2.687 ns/day, 8.931 hours/ns, 155.521 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.604 ns/day, 6.659 hours/ns, 208.560 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.062855 | 0.063074 | 0.063304 | 0.1 | 98.09 +Pair | 0.043196 | 0.044313 | 0.045375 | 0.4 | 92.42 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00061822 | 0.00085837 | 0.0010862 | 0.6 | 1.33 -Output | 0.00021434 | 0.00023013 | 0.00025868 | 0.1 | 0.36 -Modify | 1.4782e-05 | 1.6153e-05 | 1.7405e-05 | 0.0 | 0.03 -Other | | 0.0001218 | | | 0.19 +Comm | 0.0020213 | 0.0028703 | 0.0042944 | 1.7 | 5.99 +Output | 0.00023198 | 0.00052303 | 0.00077415 | 0.0 | 1.09 +Modify | 1.4782e-05 | 1.657e-05 | 1.812e-05 | 0.0 | 0.03 +Other | | 0.0002254 | | | 0.47 Nlocal: 64 ave 64 max 64 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.1 b/examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.1 similarity index 81% rename from examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.1 rename to examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.1 index 0a1d16e25f..3c44febf60 100644 --- a/examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.1 +++ b/examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Cu2O crystal, qeq on, minimizes, then calculates elastic constants units metal @@ -44,31 +45,36 @@ fix 2 all qeq/comb 1 0.0001 run 2 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.39852 Mbytes + binsize = 6.25, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 9.865 | 9.865 | 9.865 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 0 1 -2.9288959 -2.9290251 -0.23839068 -2.6906344 0.79666672 -1.5933334 25.62 25.62 25.62 16816.568 1 1.0007128 -3.0464056 -3.0465348 0.40404394 -3.4505788 0.79666635 -1.5933327 25.62 25.62 25.62 16816.568 2 1.0028587 -3.0464056 -3.0465351 0.40404056 -3.4505757 0.79666516 -1.5933303 25.62 25.62 25.62 16816.568 -Loop time of 0.661607 on 1 procs for 2 steps with 1296 atoms +Loop time of 0.598454 on 1 procs for 2 steps with 1296 atoms -Performance: 0.052 ns/day, 459.449 hours/ns, 3.023 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.058 ns/day, 415.593 hours/ns, 3.342 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.26068 | 0.26068 | 0.26068 | 0.0 | 39.40 +Pair | 0.17797 | 0.17797 | 0.17797 | 0.0 | 29.74 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00010204 | 0.00010204 | 0.00010204 | 0.0 | 0.02 -Output | 5.4836e-05 | 5.4836e-05 | 5.4836e-05 | 0.0 | 0.01 -Modify | 0.40072 | 0.40072 | 0.40072 | 0.0 | 60.57 -Other | | 4.601e-05 | | | 0.01 +Comm | 0.00016093 | 0.00016093 | 0.00016093 | 0.0 | 0.03 +Output | 9.1314e-05 | 9.1314e-05 | 9.1314e-05 | 0.0 | 0.02 +Modify | 0.42019 | 0.42019 | 0.42019 | 0.0 | 70.21 +Other | | 3.576e-05 | | | 0.01 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -87,15 +93,8 @@ Dangerous builds not checked unfix 1 fix 1 all box/relax aniso 0.0 vmax 0.001 minimize 1.0e-14 1.0e-20 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 8.27781 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 11.74 | 11.74 | 11.74 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 2 1.0028587 -3.0464056 -3.0465351 0.40403069 -3.4505658 0.79666516 -1.5933303 25.62 25.62 25.62 16816.568 3 1.0028587 -3.0917245 -3.091854 0.36260063 -3.4544547 0.79642968 -1.5928594 25.59438 25.59438 25.59438 16766.169 @@ -122,9 +121,9 @@ Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 24 1.0028587 -3.966498 -3.9666275 -0.4616679 -3.5049596 0.79285787 -1.5857157 25.05636 25.05636 25.05636 15730.913 25 1.0028587 -3.9686392 -3.9687687 -0.46014255 -3.5086261 0.79286937 -1.5857387 25.034573 25.034573 25.034573 15689.914 26 1.0028587 -3.9686392 -3.9687687 -0.46018211 -3.5085866 0.79286471 -1.5857294 25.034573 25.034573 25.034573 15689.914 -Loop time of 29.3376 on 1 procs for 24 steps with 1296 atoms +Loop time of 28.4763 on 1 procs for 24 steps with 1296 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -138,12 +137,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.5417 | 7.5417 | 7.5417 | 0.0 | 25.71 -Neigh | 0.071155 | 0.071155 | 0.071155 | 0.0 | 0.24 -Comm | 0.0031855 | 0.0031855 | 0.0031855 | 0.0 | 0.01 -Output | 0.00070429 | 0.00070429 | 0.00070429 | 0.0 | 0.00 -Modify | 21.709 | 21.709 | 21.709 | 0.0 | 74.00 -Other | | 0.01167 | | | 0.04 +Pair | 5.1932 | 5.1932 | 5.1932 | 0.0 | 18.24 +Neigh | 0.078665 | 0.078665 | 0.078665 | 0.0 | 0.28 +Comm | 0.0045877 | 0.0045877 | 0.0045877 | 0.0 | 0.02 +Output | 0.0010743 | 0.0010743 | 0.0010743 | 0.0 | 0.00 +Modify | 23.184 | 23.184 | 23.184 | 0.0 | 81.42 +Other | | 0.0143 | | | 0.05 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -163,31 +162,24 @@ min_modify dmax 0.2 line quadratic unfix 1 fix 1 all nve run 1 -Neighbor list info ... - 1 neighbor list requests - update every 20 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.65281 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.12 | 10.12 | 10.12 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 26 1.0028587 -3.9686392 -3.9687687 -0.46018211 -3.5085866 0.79286471 -1.5857294 25.034573 25.034573 25.034573 15689.914 27 0.98924824 -3.9686392 -3.9687669 -0.46018036 -3.5085866 0.79286575 -1.5857315 25.034573 25.034573 25.034573 15689.914 -Loop time of 0.273439 on 1 procs for 1 steps with 1296 atoms +Loop time of 0.236144 on 1 procs for 1 steps with 1296 atoms -Performance: 0.063 ns/day, 379.776 hours/ns, 3.657 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.073 ns/day, 327.978 hours/ns, 4.235 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.14151 | 0.14151 | 0.14151 | 0.0 | 51.75 +Pair | 0.097929 | 0.097929 | 0.097929 | 0.0 | 41.47 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 4.8876e-05 | 4.8876e-05 | 4.8876e-05 | 0.0 | 0.02 -Output | 2.3127e-05 | 2.3127e-05 | 2.3127e-05 | 0.0 | 0.01 -Modify | 0.13185 | 0.13185 | 0.13185 | 0.0 | 48.22 -Other | | 1.192e-05 | | | 0.00 +Comm | 6.8903e-05 | 6.8903e-05 | 6.8903e-05 | 0.0 | 0.03 +Output | 4.673e-05 | 4.673e-05 | 4.673e-05 | 0.0 | 0.02 +Modify | 0.13809 | 0.13809 | 0.13809 | 0.0 | 58.48 +Other | | 1.216e-05 | | | 0.01 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -216,9 +208,9 @@ fix 2 all deform 1 x scale 1.0001 remap x compute perfx all stress/atom NULL pair compute fx all reduce sum c_perfx[1] c_perfx[2] c_perfx[3] c_perfx[4] c_perfx[5] c_perfx[6] thermo_style custom step lx ly lz xy xz yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) run 10 -Memory usage per processor = 7.02781 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.49 | 10.49 | 10.49 Mbytes Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 27 25.034573 25.034573 25.034573 0 0 0 -1.0598299e+08 -1.0598276e+08 -1.0598269e+08 -126504.69 -147668.13 -107881.81 28 25.034823 25.034573 25.034573 0 0 0 -1.0598299e+08 -1.0598276e+08 -1.0598269e+08 -126504.69 -147668.13 -107881.81 @@ -231,20 +223,20 @@ Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 35 25.036576 25.034573 25.034573 0 0 0 26482035 -39227675 -39227600 -126479.96 -147632.87 -107857.27 36 25.036826 25.034573 25.034573 0 0 0 45406330 -29692031 -29691956 -126476.43 -147627.84 -107853.76 37 25.037076 25.034573 25.034573 0 0 0 64330788 -20156596 -20156520 -126472.9 -147622.8 -107850.25 -Loop time of 1.55219 on 1 procs for 10 steps with 1296 atoms +Loop time of 1.09542 on 1 procs for 10 steps with 1296 atoms -Performance: 0.111 ns/day, 215.582 hours/ns, 6.443 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.158 ns/day, 152.141 hours/ns, 9.129 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5493 | 1.5493 | 1.5493 | 0.0 | 99.81 +Pair | 1.0913 | 1.0913 | 1.0913 | 0.0 | 99.62 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00050259 | 0.00050259 | 0.00050259 | 0.0 | 0.03 -Output | 0.0021405 | 0.0021405 | 0.0021405 | 0.0 | 0.14 -Modify | 0.00018573 | 0.00018573 | 0.00018573 | 0.0 | 0.01 -Other | | 0.0001054 | | | 0.01 +Comm | 0.00068784 | 0.00068784 | 0.00068784 | 0.0 | 0.06 +Output | 0.0030589 | 0.0030589 | 0.0030589 | 0.0 | 0.28 +Modify | 0.0003252 | 0.0003252 | 0.0003252 | 0.0 | 0.03 +Other | | 8.798e-05 | | | 0.01 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -267,7 +259,7 @@ compute perfz all stress/atom NULL pair compute fz all reduce sum c_perfz[1] c_perfz[2] c_perfz[3] c_perfz[4] c_perfz[5] c_perfz[6] thermo_style custom step lx ly lz xy xz yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] run 10 -Memory usage per processor = 7.77781 Mbytes +Per MPI rank memory allocation (min/avg/max) = 11.24 | 11.24 | 11.24 Mbytes Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 37 25.037076 25.034573 25.034573 0 0 0 83255401 -10621373 -10621296 -126469.36 -147617.76 -107846.74 38 25.037076 25.034573 25.034823 0 0 0 83255401 -10621373 -10621296 -126469.36 -147617.76 -107846.74 @@ -280,20 +272,20 @@ Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 45 25.037076 25.034573 25.036576 0 0 0 1.5000248e+08 56152550 1.2183572e+08 -126437.47 -147579.98 -107829.23 46 25.037076 25.034573 25.036826 0 0 0 1.5953685e+08 65690906 1.4075876e+08 -126432.91 -147574.58 -107826.72 47 25.037076 25.034573 25.037076 0 0 0 1.69071e+08 75229058 1.5968192e+08 -126428.35 -147569.18 -107824.22 -Loop time of 1.55291 on 1 procs for 10 steps with 1296 atoms +Loop time of 1.09885 on 1 procs for 10 steps with 1296 atoms -Performance: 0.111 ns/day, 215.682 hours/ns, 6.440 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.157 ns/day, 152.618 hours/ns, 9.100 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5499 | 1.5499 | 1.5499 | 0.0 | 99.81 +Pair | 1.0947 | 1.0947 | 1.0947 | 0.0 | 99.62 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00050187 | 0.00050187 | 0.00050187 | 0.0 | 0.03 -Output | 0.0021739 | 0.0021739 | 0.0021739 | 0.0 | 0.14 -Modify | 0.00018835 | 0.00018835 | 0.00018835 | 0.0 | 0.01 -Other | | 0.0001068 | | | 0.01 +Comm | 0.00070024 | 0.00070024 | 0.00070024 | 0.0 | 0.06 +Output | 0.0030808 | 0.0030808 | 0.0030808 | 0.0 | 0.28 +Modify | 0.00032425 | 0.00032425 | 0.00032425 | 0.0 | 0.03 +Other | | 8.869e-05 | | | 0.01 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -316,7 +308,7 @@ compute perfyz all stress/atom NULL pair compute fyz all reduce sum c_perfyz[1] c_perfyz[2] c_perfyz[3] c_perfyz[4] c_perfyz[5] c_perfyz[6] thermo_style custom step lx ly lz xy xz yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] run 10 -Memory usage per processor = 8.54308 Mbytes +Per MPI rank memory allocation (min/avg/max) = 12.01 | 12.01 | 12.01 Mbytes Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 47 25.037076 25.034573 25.037076 0 0 0 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.79 -107821.72 48 25.037076 25.034573 25.037076 0 0 5.0074153e-07 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.79 -107821.72 @@ -329,20 +321,20 @@ Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 55 25.037076 25.034573 25.037076 0 0 4.0059322e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.75 25114.443 56 25.037076 25.034573 25.037076 0 0 4.5066738e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.74 44105.323 57 25.037076 25.034573 25.037076 0 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.74 63096.203 -Loop time of 1.55278 on 1 procs for 10 steps with 1296 atoms +Loop time of 1.09597 on 1 procs for 10 steps with 1296 atoms -Performance: 0.111 ns/day, 215.664 hours/ns, 6.440 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.158 ns/day, 152.219 hours/ns, 9.124 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5499 | 1.5499 | 1.5499 | 0.0 | 99.81 +Pair | 1.0917 | 1.0917 | 1.0917 | 0.0 | 99.61 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00050759 | 0.00050759 | 0.00050759 | 0.0 | 0.03 -Output | 0.0021291 | 0.0021291 | 0.0021291 | 0.0 | 0.14 -Modify | 0.00018358 | 0.00018358 | 0.00018358 | 0.0 | 0.01 -Other | | 0.0001001 | | | 0.01 +Comm | 0.00068474 | 0.00068474 | 0.00068474 | 0.0 | 0.06 +Output | 0.0030637 | 0.0030637 | 0.0030637 | 0.0 | 0.28 +Modify | 0.00032473 | 0.00032473 | 0.00032473 | 0.0 | 0.03 +Other | | 0.0001802 | | | 0.02 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -365,7 +357,7 @@ compute perfxy all stress/atom NULL pair compute fxy all reduce sum c_perfxy[1] c_perfxy[2] c_perfxy[3] c_perfxy[4] c_perfxy[5] c_perfxy[6] thermo_style custom step lx ly lz xy xz yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] run 10 -Memory usage per processor = 9.29308 Mbytes +Per MPI rank memory allocation (min/avg/max) = 12.76 | 12.76 | 12.76 Mbytes Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 57 25.037076 25.034573 25.037076 0 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.73 82087.083 58 25.037076 25.034573 25.037076 5.0069146e-07 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.73 82087.083 @@ -378,20 +370,20 @@ Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 65 25.037076 25.034573 25.037076 4.0055317e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 6499.2334 -147563.69 82087.109 66 25.037076 25.034573 25.037076 4.5062231e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 25488.236 -147563.69 82087.113 67 25.037076 25.034573 25.037076 5.0069146e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 44477.239 -147563.68 82087.116 -Loop time of 1.55248 on 1 procs for 10 steps with 1296 atoms +Loop time of 1.09696 on 1 procs for 10 steps with 1296 atoms -Performance: 0.111 ns/day, 215.622 hours/ns, 6.441 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.158 ns/day, 152.356 hours/ns, 9.116 timesteps/s +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5495 | 1.5495 | 1.5495 | 0.0 | 99.81 +Pair | 1.0927 | 1.0927 | 1.0927 | 0.0 | 99.61 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00049877 | 0.00049877 | 0.00049877 | 0.0 | 0.03 -Output | 0.0021408 | 0.0021408 | 0.0021408 | 0.0 | 0.14 -Modify | 0.00018549 | 0.00018549 | 0.00018549 | 0.0 | 0.01 -Other | | 0.0001054 | | | 0.01 +Comm | 0.0007906 | 0.0007906 | 0.0007906 | 0.0 | 0.07 +Output | 0.0030892 | 0.0030892 | 0.0030892 | 0.0 | 0.28 +Modify | 0.00032568 | 0.00032568 | 0.00032568 | 0.0 | 0.03 +Other | | 8.726e-05 | | | 0.01 Nlocal: 1296 ave 1296 max 1296 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -406,4 +398,4 @@ Total # of neighbors = 862272 Ave neighs/atom = 665.333 Neighbor list builds = 0 Dangerous builds not checked -Total wall time: 0:00:43 +Total wall time: 0:00:40 diff --git a/examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.4 b/examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.4 similarity index 81% rename from examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.4 rename to examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.4 index 453a7e0e6c..30c4e79a9e 100644 --- a/examples/comb/log.5Oct16.comb.Cu2O.elastic.g++.4 +++ b/examples/comb/log.27Nov18.comb.Cu2O.elastic.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Cu2O crystal, qeq on, minimizes, then calculates elastic constants units metal @@ -44,31 +45,36 @@ fix 2 all qeq/comb 1 0.0001 run 2 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.28094 Mbytes + binsize = 6.25, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.411 | 7.411 | 7.411 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 0 1 -2.9288959 -2.9290251 -0.23839068 -2.6906344 0.79666672 -1.5933334 25.62 25.62 25.62 16816.568 1 1.0007128 -3.0464056 -3.0465348 0.40404394 -3.4505788 0.79666635 -1.5933327 25.62 25.62 25.62 16816.568 2 1.0028587 -3.0464056 -3.0465351 0.40404056 -3.4505757 0.79666516 -1.5933303 25.62 25.62 25.62 16816.568 -Loop time of 0.168944 on 4 procs for 2 steps with 1296 atoms +Loop time of 0.198435 on 4 procs for 2 steps with 1296 atoms -Performance: 0.205 ns/day, 117.322 hours/ns, 11.838 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.174 ns/day, 137.802 hours/ns, 10.079 timesteps/s +92.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.064867 | 0.065282 | 0.065606 | 0.1 | 38.64 +Pair | 0.043778 | 0.049896 | 0.064625 | 3.9 | 25.14 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00026083 | 0.00059474 | 0.001004 | 1.1 | 0.35 -Output | 7.1049e-05 | 7.3791e-05 | 8.1062e-05 | 0.0 | 0.04 -Modify | 0.10295 | 0.10296 | 0.10297 | 0.0 | 60.94 -Other | | 3.177e-05 | | | 0.02 +Comm | 0.0020771 | 0.016784 | 0.022921 | 6.6 | 8.46 +Output | 7.4863e-05 | 0.00012481 | 0.00026703 | 0.0 | 0.06 +Modify | 0.13153 | 0.13154 | 0.13155 | 0.0 | 66.29 +Other | | 8.988e-05 | | | 0.05 Nlocal: 324 ave 324 max 324 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -87,15 +93,8 @@ Dangerous builds not checked unfix 1 fix 1 all box/relax aniso 0.0 vmax 0.001 minimize 1.0e-14 1.0e-20 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 8.15594 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 9.286 | 9.286 | 9.286 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 2 1.0028587 -3.0464056 -3.0465351 0.40403069 -3.4505658 0.79666516 -1.5933303 25.62 25.62 25.62 16816.568 3 1.0028587 -3.0917245 -3.091854 0.36260063 -3.4544547 0.79642968 -1.5928594 25.59438 25.59438 25.59438 16766.169 @@ -122,9 +121,9 @@ Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 24 1.0028587 -3.966498 -3.9666275 -0.4616679 -3.5049596 0.79285787 -1.5857157 25.05636 25.05636 25.05636 15730.913 25 1.0028587 -3.9686392 -3.9687687 -0.46014255 -3.5086261 0.79286937 -1.5857387 25.034573 25.034573 25.034573 15689.914 26 1.0028587 -3.9686392 -3.9687687 -0.46018211 -3.5085866 0.79286471 -1.5857294 25.034573 25.034573 25.034573 15689.914 -Loop time of 7.60393 on 4 procs for 24 steps with 1296 atoms +Loop time of 7.68847 on 4 procs for 24 steps with 1296 atoms -99.9% CPU use with 4 MPI tasks x no OpenMP threads +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -138,12 +137,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.8378 | 1.8844 | 1.9098 | 2.1 | 24.78 -Neigh | 0.017217 | 0.01784 | 0.018236 | 0.3 | 0.23 -Comm | 0.011872 | 0.03777 | 0.08501 | 14.8 | 0.50 -Output | 0.00087929 | 0.00090992 | 0.00099182 | 0.2 | 0.01 -Modify | 5.6557 | 5.6558 | 5.6559 | 0.0 | 74.38 -Other | | 0.007261 | | | 0.10 +Pair | 1.2491 | 1.3017 | 1.3281 | 2.7 | 16.93 +Neigh | 0.019151 | 0.019765 | 0.020248 | 0.3 | 0.26 +Comm | 0.037999 | 0.064493 | 0.11782 | 12.3 | 0.84 +Output | 0.0011022 | 0.0016249 | 0.0031886 | 2.2 | 0.02 +Modify | 6.2904 | 6.2905 | 6.2907 | 0.0 | 81.82 +Other | | 0.01031 | | | 0.13 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -163,31 +162,24 @@ min_modify dmax 0.2 line quadratic unfix 1 fix 1 all nve run 1 -Neighbor list info ... - 1 neighbor list requests - update every 20 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.53094 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.661 | 7.661 | 7.661 Mbytes Step Temp TotEng PotEng E_vdwl E_coul c_q1 c_q2 Lx Ly Lz Volume 26 1.0028587 -3.9686392 -3.9687687 -0.46018211 -3.5085866 0.79286471 -1.5857294 25.034573 25.034573 25.034573 15689.914 27 0.98924824 -3.9686392 -3.9687669 -0.46018036 -3.5085866 0.79286575 -1.5857315 25.034573 25.034573 25.034573 15689.914 -Loop time of 0.0698364 on 4 procs for 1 steps with 1296 atoms +Loop time of 0.0626205 on 4 procs for 1 steps with 1296 atoms -Performance: 0.247 ns/day, 96.995 hours/ns, 14.319 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.276 ns/day, 86.973 hours/ns, 15.969 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.034876 | 0.035652 | 0.036197 | 0.3 | 51.05 +Pair | 0.024917 | 0.025476 | 0.025981 | 0.2 | 40.68 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00012708 | 0.00067472 | 0.0014517 | 2.0 | 0.97 -Output | 3.5048e-05 | 3.6299e-05 | 3.9101e-05 | 0.0 | 0.05 -Modify | 0.033457 | 0.033461 | 0.033464 | 0.0 | 47.91 -Other | | 1.24e-05 | | | 0.02 +Comm | 9.3937e-05 | 0.00060064 | 0.0011597 | 0.0 | 0.96 +Output | 4.5061e-05 | 6.8903e-05 | 0.00013781 | 0.0 | 0.11 +Modify | 0.036391 | 0.036391 | 0.036393 | 0.0 | 58.11 +Other | | 8.357e-05 | | | 0.13 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -216,9 +208,9 @@ fix 2 all deform 1 x scale 1.0001 remap x compute perfx all stress/atom NULL pair compute fx all reduce sum c_perfx[1] c_perfx[2] c_perfx[3] c_perfx[4] c_perfx[5] c_perfx[6] thermo_style custom step lx ly lz xy xz yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) run 10 -Memory usage per processor = 6.90594 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.036 | 8.036 | 8.036 Mbytes Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 27 25.034573 25.034573 25.034573 0 0 0 -1.0598299e+08 -1.0598276e+08 -1.0598269e+08 -126504.69 -147668.13 -107881.81 28 25.034823 25.034573 25.034573 0 0 0 -1.0598299e+08 -1.0598276e+08 -1.0598269e+08 -126504.69 -147668.13 -107881.81 @@ -231,20 +223,20 @@ Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 35 25.036576 25.034573 25.034573 0 0 0 26482035 -39227675 -39227600 -126479.96 -147632.87 -107857.27 36 25.036826 25.034573 25.034573 0 0 0 45406330 -29692031 -29691956 -126476.43 -147627.84 -107853.76 37 25.037076 25.034573 25.034573 0 0 0 64330788 -20156596 -20156520 -126472.9 -147622.8 -107850.25 -Loop time of 0.395692 on 4 procs for 10 steps with 1296 atoms +Loop time of 0.296792 on 4 procs for 10 steps with 1296 atoms -Performance: 0.437 ns/day, 54.957 hours/ns, 25.272 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.582 ns/day, 41.221 hours/ns, 33.694 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.37577 | 0.38538 | 0.39123 | 1.0 | 97.39 +Pair | 0.26413 | 0.27686 | 0.29205 | 2.0 | 93.28 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0016012 | 0.0074702 | 0.017095 | 7.0 | 1.89 -Output | 0.0026791 | 0.0027133 | 0.0027606 | 0.1 | 0.69 -Modify | 5.6028e-05 | 5.8174e-05 | 6.1035e-05 | 0.0 | 0.01 -Other | | 7.373e-05 | | | 0.02 +Comm | 0.00092983 | 0.016655 | 0.029568 | 8.3 | 5.61 +Output | 0.0028515 | 0.003047 | 0.0036252 | 0.6 | 1.03 +Modify | 0.00010395 | 0.00011069 | 0.00011992 | 0.0 | 0.04 +Other | | 0.0001195 | | | 0.04 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -267,7 +259,7 @@ compute perfz all stress/atom NULL pair compute fz all reduce sum c_perfz[1] c_perfz[2] c_perfz[3] c_perfz[4] c_perfz[5] c_perfz[6] thermo_style custom step lx ly lz xy xz yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] run 10 -Memory usage per processor = 7.65594 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.786 | 8.786 | 8.786 Mbytes Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 37 25.037076 25.034573 25.034573 0 0 0 83255401 -10621373 -10621296 -126469.36 -147617.76 -107846.74 38 25.037076 25.034573 25.034823 0 0 0 83255401 -10621373 -10621296 -126469.36 -147617.76 -107846.74 @@ -280,20 +272,20 @@ Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 45 25.037076 25.034573 25.036576 0 0 0 1.5000248e+08 56152550 1.2183572e+08 -126437.47 -147579.98 -107829.23 46 25.037076 25.034573 25.036826 0 0 0 1.5953685e+08 65690906 1.4075876e+08 -126432.91 -147574.58 -107826.72 47 25.037076 25.034573 25.037076 0 0 0 1.69071e+08 75229058 1.5968192e+08 -126428.35 -147569.18 -107824.22 -Loop time of 0.395265 on 4 procs for 10 steps with 1296 atoms +Loop time of 0.298517 on 4 procs for 10 steps with 1296 atoms -Performance: 0.437 ns/day, 54.898 hours/ns, 25.300 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.579 ns/day, 41.461 hours/ns, 33.499 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.37558 | 0.38392 | 0.39002 | 1.0 | 97.13 +Pair | 0.26417 | 0.27784 | 0.29233 | 1.9 | 93.07 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0023744 | 0.0084905 | 0.016869 | 6.7 | 2.15 -Output | 0.0026851 | 0.0027224 | 0.0027671 | 0.1 | 0.69 -Modify | 5.3167e-05 | 5.6148e-05 | 5.8651e-05 | 0.0 | 0.01 -Other | | 7.594e-05 | | | 0.02 +Comm | 0.0020907 | 0.017109 | 0.030962 | 7.9 | 5.73 +Output | 0.0031412 | 0.003336 | 0.003916 | 0.6 | 1.12 +Modify | 0.00010443 | 0.00010878 | 0.00011301 | 0.0 | 0.04 +Other | | 0.0001191 | | | 0.04 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -316,7 +308,7 @@ compute perfyz all stress/atom NULL pair compute fyz all reduce sum c_perfyz[1] c_perfyz[2] c_perfyz[3] c_perfyz[4] c_perfyz[5] c_perfyz[6] thermo_style custom step lx ly lz xy xz yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] run 10 -Memory usage per processor = 8.42123 Mbytes +Per MPI rank memory allocation (min/avg/max) = 9.552 | 9.552 | 9.552 Mbytes Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 47 25.037076 25.034573 25.037076 0 0 0 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.79 -107821.72 48 25.037076 25.034573 25.037076 0 0 5.0074153e-07 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.79 -107821.72 @@ -329,20 +321,20 @@ Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 55 25.037076 25.034573 25.037076 0 0 4.0059322e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.75 25114.443 56 25.037076 25.034573 25.037076 0 0 4.5066738e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.74 44105.323 57 25.037076 25.034573 25.037076 0 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.74 63096.203 -Loop time of 0.395982 on 4 procs for 10 steps with 1296 atoms +Loop time of 0.313155 on 4 procs for 10 steps with 1296 atoms -Performance: 0.436 ns/day, 54.997 hours/ns, 25.254 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.552 ns/day, 43.494 hours/ns, 31.933 timesteps/s +95.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.37606 | 0.38505 | 0.39068 | 1.0 | 97.24 +Pair | 0.26394 | 0.28147 | 0.29254 | 2.1 | 89.88 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0021853 | 0.0078424 | 0.016867 | 6.7 | 1.98 -Output | 0.0029173 | 0.0029593 | 0.0030072 | 0.1 | 0.75 -Modify | 5.3167e-05 | 5.4538e-05 | 5.722e-05 | 0.0 | 0.01 -Other | | 7.403e-05 | | | 0.02 +Comm | 0.01504 | 0.027947 | 0.046101 | 7.0 | 8.92 +Output | 0.0028515 | 0.0034934 | 0.0053933 | 1.9 | 1.12 +Modify | 0.0001061 | 0.00010973 | 0.00011516 | 0.0 | 0.04 +Other | | 0.0001362 | | | 0.04 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -365,7 +357,7 @@ compute perfxy all stress/atom NULL pair compute fxy all reduce sum c_perfxy[1] c_perfxy[2] c_perfxy[3] c_perfxy[4] c_perfxy[5] c_perfxy[6] thermo_style custom step lx ly lz xy xz yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] run 10 -Memory usage per processor = 9.17123 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 57 25.037076 25.034573 25.037076 0 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.73 82087.083 58 25.037076 25.034573 25.037076 5.0069146e-07 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 -126423.79 -147563.73 82087.083 @@ -378,20 +370,20 @@ Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 65 25.037076 25.034573 25.037076 4.0055317e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 6499.2334 -147563.69 82087.109 66 25.037076 25.034573 25.037076 4.5062231e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 25488.236 -147563.69 82087.113 67 25.037076 25.034573 25.037076 5.0069146e-06 0 5.0074153e-06 1.7860489e+08 84767004 1.7860521e+08 44477.239 -147563.68 82087.116 -Loop time of 0.393499 on 4 procs for 10 steps with 1296 atoms +Loop time of 0.298849 on 4 procs for 10 steps with 1296 atoms -Performance: 0.439 ns/day, 54.653 hours/ns, 25.413 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.578 ns/day, 41.507 hours/ns, 33.462 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.37563 | 0.38304 | 0.38942 | 1.0 | 97.34 +Pair | 0.26403 | 0.27705 | 0.29235 | 2.0 | 92.71 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0013115 | 0.0077351 | 0.015176 | 6.8 | 1.97 -Output | 0.002558 | 0.0025953 | 0.0026426 | 0.1 | 0.66 -Modify | 5.1975e-05 | 5.4598e-05 | 5.8174e-05 | 0.0 | 0.01 -Other | | 7.737e-05 | | | 0.02 +Comm | 0.00092888 | 0.017273 | 0.030558 | 8.4 | 5.78 +Output | 0.0032196 | 0.0042848 | 0.0053816 | 1.2 | 1.43 +Modify | 0.00010204 | 0.00010765 | 0.0001123 | 0.0 | 0.04 +Other | | 0.0001339 | | | 0.04 Nlocal: 324 ave 328 max 318 min Histogram: 1 0 0 0 1 0 0 0 0 2 diff --git a/examples/comb/log.5Oct16.comb.HfO2.g++.1 b/examples/comb/log.27Nov18.comb.HfO2.g++.1 similarity index 76% rename from examples/comb/log.5Oct16.comb.HfO2.g++.1 rename to examples/comb/log.27Nov18.comb.HfO2.g++.1 index 2db94329dd..2844a91523 100644 --- a/examples/comb/log.5Oct16.comb.HfO2.g++.1 +++ b/examples/comb/log.27Nov18.comb.HfO2.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task units metal atom_style charge dimension 3 @@ -39,30 +40,35 @@ fix 1 all nvt temp 300.0 300.0 0.1 thermo 1 run 1 Neighbor list info ... - 1 neighbor list requests update every 10 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.5933 Mbytes + binsize = 6.25, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.84 | 10.84 | 10.84 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 0 0 -9.3995049 -9.3995049 5.256221 -14.655726 60985.254 17627.802 25.642 25.957 26.4845 -4.46691 3.6 -1.8 1 0.039315732 -9.3995035 -9.3995086 5.2562201 -14.655729 60983.797 17627.802 25.642 25.957 26.4845 -4.46691 3.6 -1.8 -Loop time of 0.165626 on 1 procs for 1 steps with 1500 atoms +Loop time of 0.128487 on 1 procs for 1 steps with 1500 atoms -Performance: 0.104 ns/day, 230.036 hours/ns, 6.038 timesteps/s -100.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.134 ns/day, 178.455 hours/ns, 7.783 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.16548 | 0.16548 | 0.16548 | 0.0 | 99.91 +Pair | 0.12826 | 0.12826 | 0.12826 | 0.0 | 99.82 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 6.8188e-05 | 6.8188e-05 | 6.8188e-05 | 0.0 | 0.04 -Output | 2.8133e-05 | 2.8133e-05 | 2.8133e-05 | 0.0 | 0.02 -Modify | 3.5763e-05 | 3.5763e-05 | 3.5763e-05 | 0.0 | 0.02 -Other | | 1.597e-05 | | | 0.01 +Comm | 9.5367e-05 | 9.5367e-05 | 9.5367e-05 | 0.0 | 0.07 +Output | 4.8399e-05 | 4.8399e-05 | 4.8399e-05 | 0.0 | 0.04 +Modify | 7.1526e-05 | 7.1526e-05 | 7.1526e-05 | 0.0 | 0.06 +Other | | 1.192e-05 | | | 0.01 Nlocal: 1500 ave 1500 max 1500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -79,7 +85,7 @@ Neighbor list builds = 0 Dangerous builds = 0 fix 2 all qeq/comb 1 0.003 file fq.out run 5 -Memory usage per processor = 7.2183 Mbytes +Per MPI rank memory allocation (min/avg/max) = 11.47 | 11.47 | 11.47 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 1 0.039315732 -9.3995035 -9.3995086 5.2562201 -14.655729 60983.797 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 2 0.13734003 -10.041396 -10.041413 2.7214902 -12.762903 -130794.11 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 @@ -87,20 +93,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 4 0.44445358 -10.041379 -10.041436 2.7214924 -12.762929 -130808.63 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 5 0.66458606 -10.041367 -10.041453 2.7214941 -12.762947 -130818.84 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 6 0.92875014 -10.041353 -10.041473 2.721496 -12.762969 -130831 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 -Loop time of 1.12494 on 1 procs for 5 steps with 1500 atoms +Loop time of 0.95807 on 1 procs for 5 steps with 1500 atoms -Performance: 0.077 ns/day, 312.485 hours/ns, 4.445 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.090 ns/day, 266.130 hours/ns, 5.219 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.82774 | 0.82774 | 0.82774 | 0.0 | 73.58 +Pair | 0.64289 | 0.64289 | 0.64289 | 0.0 | 67.10 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00032425 | 0.00032425 | 0.00032425 | 0.0 | 0.03 -Output | 0.00013924 | 0.00013924 | 0.00013924 | 0.0 | 0.01 -Modify | 0.29665 | 0.29665 | 0.29665 | 0.0 | 26.37 -Other | | 8.941e-05 | | | 0.01 +Comm | 0.00040817 | 0.00040817 | 0.00040817 | 0.0 | 0.04 +Output | 0.00024867 | 0.00024867 | 0.00024867 | 0.0 | 0.03 +Modify | 0.31447 | 0.31447 | 0.31447 | 0.0 | 32.82 +Other | | 5.698e-05 | | | 0.01 Nlocal: 1500 ave 1500 max 1500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -123,21 +129,14 @@ fix 1 all box/relax aniso 0.0 vmax 0.0002 #minimize 1.0e-12 1.0e-18 1000 10000 minimize 1.0e-4 1.0e-6 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 8.3433 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 12.59 | 12.59 | 12.59 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 6 0.92875014 -10.041353 -10.041473 2.721496 -12.762969 -130831 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 7 0.92875014 -10.041833 -10.041953 2.7196698 -12.761623 -130754.01 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 -Loop time of 0.628066 on 1 procs for 1 steps with 1500 atoms +Loop time of 0.57271 on 1 procs for 1 steps with 1500 atoms -100.0% CPU use with 1 MPI tasks x no OpenMP threads +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -151,12 +150,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.33072 | 0.33072 | 0.33072 | 0.0 | 52.66 +Pair | 0.25711 | 0.25711 | 0.25711 | 0.0 | 44.89 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00013089 | 0.00013089 | 0.00013089 | 0.0 | 0.02 +Comm | 0.00016379 | 0.00016379 | 0.00016379 | 0.0 | 0.03 Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0.29688 | 0.29688 | 0.29688 | 0.0 | 47.27 -Other | | 0.0003412 | | | 0.05 +Modify | 0.31493 | 0.31493 | 0.31493 | 0.0 | 54.99 +Other | | 0.0005131 | | | 0.09 Nlocal: 1500 ave 1500 max 1500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -184,14 +183,7 @@ min_modify dmax 0.005 line quadratic velocity all create 300.1 2398378 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 10 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 7.2183 Mbytes +Per MPI rank memory allocation (min/avg/max) = 11.47 | 11.47 | 11.47 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 7 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 8 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 @@ -204,20 +196,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 15 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 16 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 17 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 -Loop time of 2.25256 on 1 procs for 10 steps with 1500 atoms +Loop time of 1.93286 on 1 procs for 10 steps with 1500 atoms -Performance: 0.077 ns/day, 312.855 hours/ns, 4.439 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.089 ns/day, 268.453 hours/ns, 5.174 timesteps/s +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.6582 | 1.6582 | 1.6582 | 0.0 | 73.62 +Pair | 1.2975 | 1.2975 | 1.2975 | 0.0 | 67.13 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00064015 | 0.00064015 | 0.00064015 | 0.0 | 0.03 -Output | 0.00028682 | 0.00028682 | 0.00028682 | 0.0 | 0.01 -Modify | 0.59326 | 0.59326 | 0.59326 | 0.0 | 26.34 -Other | | 0.0001378 | | | 0.01 +Comm | 0.00082493 | 0.00082493 | 0.00082493 | 0.0 | 0.04 +Output | 0.00050569 | 0.00050569 | 0.00050569 | 0.0 | 0.03 +Modify | 0.63389 | 0.63389 | 0.63389 | 0.0 | 32.80 +Other | | 0.0001204 | | | 0.01 Nlocal: 1500 ave 1500 max 1500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -232,4 +224,4 @@ Total # of neighbors = 1037500 Ave neighs/atom = 691.667 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:10 +Total wall time: 0:00:09 diff --git a/examples/comb/log.5Oct16.comb.HfO2.g++.4 b/examples/comb/log.27Nov18.comb.HfO2.g++.4 similarity index 76% rename from examples/comb/log.5Oct16.comb.HfO2.g++.4 rename to examples/comb/log.27Nov18.comb.HfO2.g++.4 index 370982c81e..07f8f00521 100644 --- a/examples/comb/log.5Oct16.comb.HfO2.g++.4 +++ b/examples/comb/log.27Nov18.comb.HfO2.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task units metal atom_style charge dimension 3 @@ -39,30 +40,35 @@ fix 1 all nvt temp 300.0 300.0 0.1 thermo 1 run 1 Neighbor list info ... - 1 neighbor list requests update every 10 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 6.45428 Mbytes + binsize = 6.25, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.595 | 7.595 | 7.596 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 0 0 -9.3995049 -9.3995049 5.256221 -14.655726 60985.254 17627.802 25.642 25.957 26.4845 -4.46691 3.6 -1.8 1 0.039315732 -9.3995035 -9.3995086 5.2562201 -14.655729 60983.797 17627.802 25.642 25.957 26.4845 -4.46691 3.6 -1.8 -Loop time of 0.0431705 on 4 procs for 1 steps with 1500 atoms +Loop time of 0.0343346 on 4 procs for 1 steps with 1500 atoms -Performance: 0.400 ns/day, 59.959 hours/ns, 23.164 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.503 ns/day, 47.687 hours/ns, 29.125 timesteps/s +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.041113 | 0.041747 | 0.04291 | 0.3 | 96.70 +Pair | 0.032358 | 0.033033 | 0.034117 | 0.4 | 96.21 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00016999 | 0.0013372 | 0.001966 | 1.9 | 3.10 -Output | 4.2915e-05 | 4.4703e-05 | 4.7922e-05 | 0.0 | 0.10 -Modify | 1.502e-05 | 2.3365e-05 | 2.9087e-05 | 0.1 | 0.05 -Other | | 1.83e-05 | | | 0.04 +Comm | 0.00012684 | 0.0012044 | 0.0018878 | 2.0 | 3.51 +Output | 4.3392e-05 | 4.6432e-05 | 5.1737e-05 | 0.0 | 0.14 +Modify | 2.1935e-05 | 2.3842e-05 | 2.5511e-05 | 0.0 | 0.07 +Other | | 2.718e-05 | | | 0.08 Nlocal: 375 ave 375 max 375 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -79,7 +85,7 @@ Neighbor list builds = 0 Dangerous builds = 0 fix 2 all qeq/comb 1 0.003 file fq.out run 5 -Memory usage per processor = 7.07928 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.22 | 8.22 | 8.221 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 1 0.039315732 -9.3995035 -9.3995086 5.2562201 -14.655729 60983.797 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 2 0.13734003 -10.041396 -10.041413 2.7214902 -12.762903 -130794.11 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 @@ -87,20 +93,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 4 0.44445358 -10.041379 -10.041436 2.7214924 -12.762929 -130808.63 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 5 0.66458606 -10.041367 -10.041453 2.7214941 -12.762947 -130818.84 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 6 0.92875014 -10.041353 -10.041473 2.721496 -12.762969 -130831 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 -Loop time of 0.282798 on 4 procs for 5 steps with 1500 atoms +Loop time of 0.264002 on 4 procs for 5 steps with 1500 atoms -Performance: 0.306 ns/day, 78.555 hours/ns, 17.680 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.327 ns/day, 73.334 hours/ns, 18.939 timesteps/s +96.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.20467 | 0.20595 | 0.20674 | 0.2 | 72.83 +Pair | 0.16374 | 0.17099 | 0.17738 | 1.2 | 64.77 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0016997 | 0.0024779 | 0.003768 | 1.7 | 0.88 -Output | 0.00022483 | 0.00023055 | 0.00024247 | 0.0 | 0.08 -Modify | 0.074072 | 0.074082 | 0.074091 | 0.0 | 26.20 -Other | | 5.567e-05 | | | 0.02 +Comm | 0.0030768 | 0.0093628 | 0.016711 | 5.1 | 3.55 +Output | 0.00022531 | 0.00034034 | 0.00068116 | 0.0 | 0.13 +Modify | 0.083183 | 0.083188 | 0.083197 | 0.0 | 31.51 +Other | | 0.0001165 | | | 0.04 Nlocal: 375 ave 375 max 375 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -123,21 +129,14 @@ fix 1 all box/relax aniso 0.0 vmax 0.0002 #minimize 1.0e-12 1.0e-18 1000 10000 minimize 1.0e-4 1.0e-6 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 8.20428 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 9.345 | 9.345 | 9.346 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 6 0.92875014 -10.041353 -10.041473 2.721496 -12.762969 -130831 17627.802 25.642 25.957 26.4845 -4.46691 3.3579959 -1.678998 7 0.92875014 -10.041833 -10.041953 2.7196698 -12.761623 -130754.01 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 -Loop time of 0.159283 on 4 procs for 1 steps with 1500 atoms +Loop time of 0.15331 on 4 procs for 1 steps with 1500 atoms -99.8% CPU use with 4 MPI tasks x no OpenMP threads +97.6% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -151,12 +150,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.082013 | 0.082956 | 0.083975 | 0.3 | 52.08 +Pair | 0.065077 | 0.066851 | 0.06825 | 0.5 | 43.61 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0003221 | 0.0013521 | 0.0022871 | 2.2 | 0.85 +Comm | 0.0013995 | 0.0027977 | 0.0045724 | 2.4 | 1.82 Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0.074703 | 0.074712 | 0.074719 | 0.0 | 46.91 -Other | | 0.000263 | | | 0.17 +Modify | 0.083279 | 0.083284 | 0.083293 | 0.0 | 54.32 +Other | | 0.0003769 | | | 0.25 Nlocal: 375 ave 375 max 375 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -184,14 +183,7 @@ min_modify dmax 0.005 line quadratic velocity all create 300.1 2398378 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 10 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 5 5 5 -Memory usage per processor = 7.07928 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.22 | 8.22 | 8.221 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 7 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 8 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 @@ -204,20 +196,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz c_q1 c_q2 15 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 16 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 17 300.1 -10.003188 -10.041953 2.7196698 -12.761623 -127240 17619.854 25.636872 25.952628 26.482314 -4.4665414 3.3577845 -1.6788923 -Loop time of 0.572819 on 4 procs for 10 steps with 1500 atoms +Loop time of 0.555816 on 4 procs for 10 steps with 1500 atoms -Performance: 0.302 ns/day, 79.558 hours/ns, 17.458 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.311 ns/day, 77.197 hours/ns, 17.992 timesteps/s +92.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.41014 | 0.41529 | 0.42112 | 0.6 | 72.50 +Pair | 0.33358 | 0.35381 | 0.36898 | 2.2 | 63.66 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0017653 | 0.0076357 | 0.012777 | 4.8 | 1.33 -Output | 0.00045943 | 0.00046003 | 0.00046039 | 0.0 | 0.08 -Modify | 0.1493 | 0.14933 | 0.14935 | 0.0 | 26.07 -Other | | 0.0001076 | | | 0.02 +Comm | 0.005245 | 0.02059 | 0.041362 | 9.1 | 3.70 +Output | 0.00058889 | 0.00082082 | 0.0015032 | 0.0 | 0.15 +Modify | 0.1798 | 0.18018 | 0.18053 | 0.1 | 32.42 +Other | | 0.0004114 | | | 0.07 Nlocal: 375 ave 375 max 375 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/comb/log.5Oct16.comb.Si.elastic.g++.1 b/examples/comb/log.27Nov18.comb.Si.elastic.g++.1 similarity index 80% rename from examples/comb/log.5Oct16.comb.Si.elastic.g++.1 rename to examples/comb/log.27Nov18.comb.Si.elastic.g++.1 index 939210b353..47d1f5f03d 100644 --- a/examples/comb/log.5Oct16.comb.Si.elastic.g++.1 +++ b/examples/comb/log.27Nov18.comb.Si.elastic.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Si crystal, qeq off, calculates stress-strain, no out.*.cfg units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 512 atoms + Time spent = 0.000361919 secs mass 1 29.0 change_box all triclinic triclinic box = (0 0 0) to (21.724 21.724 21.724) with tilt (0 0 0) @@ -34,15 +36,20 @@ thermo_style custom step temp etotal pe evdwl ecoul #lx ly lz vol pxx pyy pzz thermo_modify norm yes thermo 1 minimize 1.0e-14 1.0e-20 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 7.60455 Mbytes + binsize = 6.25, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 8.98 | 8.98 | 8.98 Mbytes Step Temp TotEng PotEng E_vdwl E_coul 0 1 -4.6295947 -4.6297237 -4.6297237 0 1 1 -4.6295965 -4.6297255 -4.6297255 0 @@ -50,9 +57,9 @@ Step Temp TotEng PotEng E_vdwl E_coul 3 1 -4.6295965 -4.6297255 -4.6297255 0 4 1 -4.6295965 -4.6297255 -4.6297255 0 5 1 -4.6295965 -4.6297255 -4.6297255 0 -Loop time of 0.201077 on 1 procs for 5 steps with 512 atoms +Loop time of 0.150557 on 1 procs for 5 steps with 512 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +98.6% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -66,12 +73,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.1996 | 0.1996 | 0.1996 | 0.0 | 99.27 +Pair | 0.14823 | 0.14823 | 0.14823 | 0.0 | 98.45 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00029564 | 0.00029564 | 0.00029564 | 0.0 | 0.15 -Output | 2.861e-05 | 2.861e-05 | 2.861e-05 | 0.0 | 0.01 +Comm | 0.00061703 | 0.00061703 | 0.00061703 | 0.0 | 0.41 +Output | 6.8903e-05 | 6.8903e-05 | 6.8903e-05 | 0.0 | 0.05 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.001153 | | | 0.57 +Other | | 0.001645 | | | 1.09 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -90,32 +97,25 @@ min_modify dmax 0.2 line quadratic unfix 1 run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Neighbor list info ... - 1 neighbor list requests - update every 20 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 5.97955 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.355 | 7.355 | 7.355 Mbytes Step Temp TotEng PotEng E_vdwl E_coul 5 1 -4.6295965 -4.6297255 -4.6297255 0 6 1 -4.6295965 -4.6297255 -4.6297255 0 -Loop time of 0.018162 on 1 procs for 1 steps with 512 atoms +Loop time of 0.0137405 on 1 procs for 1 steps with 512 atoms -Performance: 0.951 ns/day, 25.225 hours/ns, 55.060 timesteps/s -99.1% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.258 ns/day, 19.084 hours/ns, 72.777 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.018118 | 0.018118 | 0.018118 | 0.0 | 99.76 +Pair | 0.013664 | 0.013664 | 0.013664 | 0.0 | 99.44 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 2.6941e-05 | 2.6941e-05 | 2.6941e-05 | 0.0 | 0.15 -Output | 8.1062e-06 | 8.1062e-06 | 8.1062e-06 | 0.0 | 0.04 -Modify | 2.1458e-06 | 2.1458e-06 | 2.1458e-06 | 0.0 | 0.01 -Other | | 6.914e-06 | | | 0.04 +Comm | 4.2915e-05 | 4.2915e-05 | 4.2915e-05 | 0.0 | 0.31 +Output | 2.4319e-05 | 2.4319e-05 | 2.4319e-05 | 0.0 | 0.18 +Modify | 2.3842e-07 | 2.3842e-07 | 2.3842e-07 | 0.0 | 0.00 +Other | | 8.821e-06 | | | 0.06 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -140,9 +140,9 @@ fix 2 all deform 1 x scale 1.0001 remap x compute perfx all stress/atom NULL pair compute fx all reduce sum c_perfx[1] c_perfx[2] c_perfx[3] c_perfx[4] c_perfx[5] c_perfx[6] thermo_style custom step lx ly lz xy xz yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) run 10 -Memory usage per processor = 6.72955 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.105 | 8.105 | 8.105 Mbytes Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 6 21.727916 21.727916 21.727916 0 0 0 -4.5569391e-06 -9.3041736e-06 -3.863262e-06 5.3686749e-06 -1.5078216e-06 5.1674734e-06 7 21.728133 21.727916 21.727916 0 0 0 -2.4800435e-06 -9.5067314e-06 -2.1562734e-06 5.5972954e-06 -2.3715124e-06 3.9555507e-06 @@ -155,20 +155,20 @@ Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 14 21.729654 21.727916 21.727916 0 0 0 1023414.2 541206.18 541206.18 5.6537455e-06 -1.9222461e-06 4.3649131e-06 15 21.729871 21.727916 21.727916 0 0 0 1169613.3 618507.19 618507.19 5.5850663e-06 -2.204341e-06 6.1719985e-06 16 21.730089 21.727916 21.727916 0 0 0 1315811.8 695804.66 695804.66 -1.3406996e-05 2.5348334e-06 6.2581356e-06 -Loop time of 0.199118 on 1 procs for 10 steps with 512 atoms +Loop time of 0.15253 on 1 procs for 10 steps with 512 atoms -Performance: 0.868 ns/day, 27.655 hours/ns, 50.221 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.133 ns/day, 21.185 hours/ns, 65.561 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.19755 | 0.19755 | 0.19755 | 0.0 | 99.21 +Pair | 0.15014 | 0.15014 | 0.15014 | 0.0 | 98.44 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00027704 | 0.00027704 | 0.00027704 | 0.0 | 0.14 -Output | 0.0011551 | 0.0011551 | 0.0011551 | 0.0 | 0.58 -Modify | 7.8201e-05 | 7.8201e-05 | 7.8201e-05 | 0.0 | 0.04 -Other | | 5.865e-05 | | | 0.03 +Comm | 0.00041151 | 0.00041151 | 0.00041151 | 0.0 | 0.27 +Output | 0.0017772 | 0.0017772 | 0.0017772 | 0.0 | 1.17 +Modify | 0.00014377 | 0.00014377 | 0.00014377 | 0.0 | 0.09 +Other | | 5.341e-05 | | | 0.04 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -191,7 +191,7 @@ compute perfz all stress/atom NULL pair compute fz all reduce sum c_perfz[1] c_perfz[2] c_perfz[3] c_perfz[4] c_perfz[5] c_perfz[6] thermo_style custom step lx ly lz xy xz yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] run 10 -Memory usage per processor = 7.47955 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.855 | 8.855 | 8.855 Mbytes Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 16 21.730089 21.727916 21.727916 0 0 0 1462009.5 773098.59 773098.59 4.2549849e-06 -8.3746497e-07 7.0310015e-06 17 21.730089 21.727916 21.728133 0 0 0 1462009.5 773098.59 773098.59 5.1784721e-06 -2.3038152e-06 5.7172699e-06 @@ -204,20 +204,20 @@ Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 24 21.730089 21.727916 21.729654 0 0 0 2003022 1314132.4 1796319.1 2.3497113e-06 -2.3680104e-06 4.7932602e-06 25 21.730089 21.727916 21.729871 0 0 0 2080295.4 1391408.8 1942490.6 6.941166e-06 -1.1601937e-06 4.9355658e-06 26 21.730089 21.727916 21.730089 0 0 0 2157565.2 1468681.6 2088661.4 5.7633476e-06 -8.4264935e-07 4.0350137e-06 -Loop time of 0.199616 on 1 procs for 10 steps with 512 atoms +Loop time of 0.152854 on 1 procs for 10 steps with 512 atoms -Performance: 0.866 ns/day, 27.724 hours/ns, 50.096 timesteps/s -100.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.130 ns/day, 21.230 hours/ns, 65.422 timesteps/s +98.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.19798 | 0.19798 | 0.19798 | 0.0 | 99.18 +Pair | 0.15047 | 0.15047 | 0.15047 | 0.0 | 98.44 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00028658 | 0.00028658 | 0.00028658 | 0.0 | 0.14 -Output | 0.0012088 | 0.0012088 | 0.0012088 | 0.0 | 0.61 -Modify | 7.987e-05 | 7.987e-05 | 7.987e-05 | 0.0 | 0.04 -Other | | 5.698e-05 | | | 0.03 +Comm | 0.00043082 | 0.00043082 | 0.00043082 | 0.0 | 0.28 +Output | 0.0017312 | 0.0017312 | 0.0017312 | 0.0 | 1.13 +Modify | 0.00015283 | 0.00015283 | 0.00015283 | 0.0 | 0.10 +Other | | 7.296e-05 | | | 0.05 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -240,7 +240,7 @@ compute perfyz all stress/atom NULL pair compute fyz all reduce sum c_perfyz[1] c_perfyz[2] c_perfyz[3] c_perfyz[4] c_perfyz[5] c_perfyz[6] thermo_style custom step lx ly lz xy xz yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] run 10 -Memory usage per processor = 8.24482 Mbytes +Per MPI rank memory allocation (min/avg/max) = 9.621 | 9.621 | 9.621 Mbytes Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 26 21.730089 21.727916 21.730089 0 0 0 2234831.5 1545950.9 2234831.5 4.8476018e-06 4.2828413e-07 5.75372e-06 27 21.730089 21.727916 21.730089 0 0 4.3460177e-07 2234831.5 1545950.9 2234831.5 5.088922e-06 -2.3012471e-06 5.6950612e-06 @@ -253,20 +253,20 @@ Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 34 21.730089 21.727916 21.730089 0 0 3.4768142e-06 2234831.5 1545950.9 2234831.5 4.8447261e-06 -1.9614792e-06 1705.6275 35 21.730089 21.727916 21.730089 0 0 3.911416e-06 2234831.5 1545950.9 2234831.5 5.1297449e-06 -2.114135e-06 1949.2885 36 21.730089 21.727916 21.730089 0 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 4.5571577e-06 -1.8415232e-06 2192.9496 -Loop time of 0.199427 on 1 procs for 10 steps with 512 atoms +Loop time of 0.149663 on 1 procs for 10 steps with 512 atoms -Performance: 0.866 ns/day, 27.698 hours/ns, 50.144 timesteps/s -100.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.155 ns/day, 20.787 hours/ns, 66.817 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.19785 | 0.19785 | 0.19785 | 0.0 | 99.21 +Pair | 0.14745 | 0.14745 | 0.14745 | 0.0 | 98.52 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00027561 | 0.00027561 | 0.00027561 | 0.0 | 0.14 -Output | 0.0011613 | 0.0011613 | 0.0011613 | 0.0 | 0.58 -Modify | 7.6056e-05 | 7.6056e-05 | 7.6056e-05 | 0.0 | 0.04 -Other | | 6.199e-05 | | | 0.03 +Comm | 0.00038886 | 0.00038886 | 0.00038886 | 0.0 | 0.26 +Output | 0.0016539 | 0.0016539 | 0.0016539 | 0.0 | 1.11 +Modify | 0.00012946 | 0.00012946 | 0.00012946 | 0.0 | 0.09 +Other | | 4.387e-05 | | | 0.03 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -289,7 +289,7 @@ compute perfxy all stress/atom NULL pair compute fxy all reduce sum c_perfxy[1] c_perfxy[2] c_perfxy[3] c_perfxy[4] c_perfxy[5] c_perfxy[6] thermo_style custom step lx ly lz xy xz yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] run 10 -Memory usage per processor = 8.99482 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.37 | 10.37 | 10.37 Mbytes Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 36 21.730089 21.727916 21.730089 0 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 5.1293854e-06 -1.6748595e-06 2436.6106 37 21.730089 21.727916 21.730089 4.3455832e-07 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 5.1236563e-06 -3.3624188e-06 2436.6106 @@ -302,20 +302,20 @@ Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 44 21.730089 21.727916 21.730089 3.4764665e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 1705.531 -0.00091806693 2436.6106 45 21.730089 21.727916 21.730089 3.9110248e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 1949.1783 -0.001049945 2436.6106 46 21.730089 21.727916 21.730089 4.3455832e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 2192.8256 -0.0011787861 2436.6106 -Loop time of 0.200513 on 1 procs for 10 steps with 512 atoms +Loop time of 0.150095 on 1 procs for 10 steps with 512 atoms -Performance: 0.862 ns/day, 27.849 hours/ns, 49.872 timesteps/s -100.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.151 ns/day, 20.847 hours/ns, 66.624 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.19893 | 0.19893 | 0.19893 | 0.0 | 99.21 +Pair | 0.14786 | 0.14786 | 0.14786 | 0.0 | 98.51 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00027752 | 0.00027752 | 0.00027752 | 0.0 | 0.14 -Output | 0.0011744 | 0.0011744 | 0.0011744 | 0.0 | 0.59 -Modify | 7.4387e-05 | 7.4387e-05 | 7.4387e-05 | 0.0 | 0.04 -Other | | 6.08e-05 | | | 0.03 +Comm | 0.00038791 | 0.00038791 | 0.00038791 | 0.0 | 0.26 +Output | 0.0016763 | 0.0016763 | 0.0016763 | 0.0 | 1.12 +Modify | 0.00012708 | 0.00012708 | 0.00012708 | 0.0 | 0.08 +Other | | 4.101e-05 | | | 0.03 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -330,4 +330,4 @@ Total # of neighbors = 212992 Ave neighs/atom = 416 Neighbor list builds = 0 Dangerous builds not checked -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/comb/log.5Oct16.comb.Si.elastic.g++.4 b/examples/comb/log.27Nov18.comb.Si.elastic.g++.4 similarity index 79% rename from examples/comb/log.5Oct16.comb.Si.elastic.g++.4 rename to examples/comb/log.27Nov18.comb.Si.elastic.g++.4 index b539f2ec17..96e7a86615 100644 --- a/examples/comb/log.5Oct16.comb.Si.elastic.g++.4 +++ b/examples/comb/log.27Nov18.comb.Si.elastic.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Si crystal, qeq off, calculates stress-strain, no out.*.cfg units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 512 atoms + Time spent = 0.000349045 secs mass 1 29.0 change_box all triclinic triclinic box = (0 0 0) to (21.724 21.724 21.724) with tilt (0 0 0) @@ -34,23 +36,28 @@ thermo_style custom step temp etotal pe evdwl ecoul #lx ly lz vol pxx pyy pzz thermo_modify norm yes thermo 1 minimize 1.0e-14 1.0e-20 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 7.52233 Mbytes + binsize = 6.25, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 8.115 | 8.117 | 8.119 Mbytes Step Temp TotEng PotEng E_vdwl E_coul 0 1 -4.6295947 -4.6297237 -4.6297237 0 1 1 -4.6295965 -4.6297255 -4.6297255 0 2 1 -4.6295965 -4.6297255 -4.6297255 0 3 1 -4.6295965 -4.6297255 -4.6297255 0 -Loop time of 0.0423422 on 4 procs for 3 steps with 512 atoms +Loop time of 0.0321558 on 4 procs for 3 steps with 512 atoms -97.4% CPU use with 4 MPI tasks x no OpenMP threads +96.0% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -64,12 +71,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.026049 | 0.03263 | 0.041219 | 3.0 | 77.06 +Pair | 0.018856 | 0.024412 | 0.030752 | 2.7 | 75.92 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00049615 | 0.0090721 | 0.015641 | 5.7 | 21.43 -Output | 3.314e-05 | 3.5107e-05 | 4.1008e-05 | 0.1 | 0.08 +Comm | 0.00067329 | 0.0070035 | 0.012553 | 5.0 | 21.78 +Output | 2.9802e-05 | 3.8147e-05 | 6.2227e-05 | 0.0 | 0.12 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.0006052 | | | 1.43 +Other | | 0.0007022 | | | 2.18 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 @@ -88,32 +95,25 @@ min_modify dmax 0.2 line quadratic unfix 1 run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Neighbor list info ... - 1 neighbor list requests - update every 20 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 5.89733 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 6.49 | 6.492 | 6.494 Mbytes Step Temp TotEng PotEng E_vdwl E_coul 3 1 -4.6295965 -4.6297255 -4.6297255 0 4 1 -4.6295965 -4.6297255 -4.6297255 0 -Loop time of 0.00589204 on 4 procs for 1 steps with 512 atoms +Loop time of 0.00449681 on 4 procs for 1 steps with 512 atoms -Performance: 2.933 ns/day, 8.183 hours/ns, 169.721 timesteps/s -101.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.843 ns/day, 6.246 hours/ns, 222.380 timesteps/s +86.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.003751 | 0.0046486 | 0.0057852 | 1.1 | 78.90 +Pair | 0.0026906 | 0.003392 | 0.0043435 | 1.0 | 75.43 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 7.391e-05 | 0.001206 | 0.0021 | 2.1 | 20.47 -Output | 1.9073e-05 | 2.0742e-05 | 2.1935e-05 | 0.0 | 0.35 -Modify | 0 | 7.1526e-07 | 1.9073e-06 | 0.1 | 0.01 -Other | | 1.597e-05 | | | 0.27 +Comm | 0.00013089 | 0.0010685 | 0.0017493 | 1.8 | 23.76 +Output | 1.6212e-05 | 1.9789e-05 | 2.7895e-05 | 0.0 | 0.44 +Modify | 0 | 2.9802e-07 | 4.7684e-07 | 0.0 | 0.01 +Other | | 1.621e-05 | | | 0.36 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 @@ -138,9 +138,9 @@ fix 2 all deform 1 x scale 1.0001 remap x compute perfx all stress/atom NULL pair compute fx all reduce sum c_perfx[1] c_perfx[2] c_perfx[3] c_perfx[4] c_perfx[5] c_perfx[6] thermo_style custom step lx ly lz xy xz yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) run 10 -Memory usage per processor = 6.64733 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.24 | 7.242 | 7.244 Mbytes Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 4 21.727916 21.727916 21.727916 0 0 0 0.036618297 0.036625051 0.036618342 -1.7136998e-07 -3.2302114e-06 -1.7543151e-06 5 21.728133 21.727916 21.727916 0 0 0 0.036618988 0.036625612 0.036619564 -1.1309366e-06 -2.412817e-06 -2.6316468e-06 @@ -153,20 +153,20 @@ Step Lx Ly Lz Xy Xz Yz c_fx[1] c_fx[2] c_fx[3] c_fx[4] c_fx[5] c_fx[6] 12 21.729654 21.727916 21.727916 0 0 0 1023414.2 541206.21 541206.21 -9.1665744e-07 -1.59238e-06 -7.7617215e-06 13 21.729871 21.727916 21.727916 0 0 0 1169613.4 618507.22 618507.22 -1.1565806e-06 -2.0309366e-06 -6.6873647e-06 14 21.730089 21.727916 21.727916 0 0 0 1315811.8 695804.69 695804.69 1.8915845e-06 7.7289624e-06 -6.2492306e-06 -Loop time of 0.0653707 on 4 procs for 10 steps with 512 atoms +Loop time of 0.0540967 on 4 procs for 10 steps with 512 atoms -Performance: 2.643 ns/day, 9.079 hours/ns, 152.974 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.194 ns/day, 7.513 hours/ns, 184.854 timesteps/s +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.041152 | 0.050811 | 0.063103 | 3.5 | 77.73 +Pair | 0.03044 | 0.038641 | 0.049502 | 3.5 | 71.43 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00078726 | 0.013075 | 0.02272 | 6.9 | 20.00 -Output | 0.0013869 | 0.0014045 | 0.0014176 | 0.0 | 2.15 -Modify | 2.9087e-05 | 3.32e-05 | 3.5048e-05 | 0.0 | 0.05 -Other | | 4.774e-05 | | | 0.07 +Comm | 0.0010123 | 0.011967 | 0.020209 | 6.4 | 22.12 +Output | 0.0033484 | 0.0033884 | 0.0034938 | 0.1 | 6.26 +Modify | 3.7432e-05 | 4.5538e-05 | 5.2452e-05 | 0.0 | 0.08 +Other | | 5.442e-05 | | | 0.10 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 @@ -189,7 +189,7 @@ compute perfz all stress/atom NULL pair compute fz all reduce sum c_perfz[1] c_perfz[2] c_perfz[3] c_perfz[4] c_perfz[5] c_perfz[6] thermo_style custom step lx ly lz xy xz yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] run 10 -Memory usage per processor = 7.39733 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.99 | 7.992 | 7.994 Mbytes Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 14 21.730089 21.727916 21.727916 0 0 0 1462009.6 773098.62 773098.62 -6.2271887e-07 -3.134065e-06 -1.4448086e-06 15 21.730089 21.727916 21.728133 0 0 0 1462009.6 773098.62 773098.62 -1.4749588e-06 -2.1972704e-06 -2.7974026e-06 @@ -202,20 +202,20 @@ Step Lx Ly Lz Xy Xz Yz c_fz[1] c_fz[2] c_fz[3] c_fz[4] c_fz[5] c_fz[6] 22 21.730089 21.727916 21.729654 0 0 0 2003022.1 1314132.4 1796319.1 -2.1981227e-06 -2.7285159e-06 -2.0486576e-06 23 21.730089 21.727916 21.729871 0 0 0 2080295.4 1391408.8 1942490.6 -3.6986662e-06 -2.430512e-06 -2.6914988e-06 24 21.730089 21.727916 21.730089 0 0 0 2157565.2 1468681.6 2088661.4 -7.1345705e-06 -2.6113355e-06 -1.261254e-06 -Loop time of 0.065423 on 4 procs for 10 steps with 512 atoms +Loop time of 0.0533404 on 4 procs for 10 steps with 512 atoms -Performance: 2.641 ns/day, 9.087 hours/ns, 152.851 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.240 ns/day, 7.408 hours/ns, 187.475 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.041187 | 0.050801 | 0.063128 | 3.5 | 77.65 +Pair | 0.030974 | 0.038825 | 0.04982 | 3.5 | 72.79 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00077367 | 0.013104 | 0.022709 | 6.9 | 20.03 -Output | 0.0014305 | 0.0014462 | 0.0014589 | 0.0 | 2.21 -Modify | 2.0504e-05 | 2.7299e-05 | 3.1233e-05 | 0.1 | 0.04 -Other | | 4.494e-05 | | | 0.07 +Comm | 0.0017583 | 0.012849 | 0.020708 | 6.1 | 24.09 +Output | 0.0015182 | 0.0015638 | 0.0016725 | 0.2 | 2.93 +Modify | 4.1723e-05 | 4.7386e-05 | 5.3883e-05 | 0.0 | 0.09 +Other | | 5.519e-05 | | | 0.10 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 @@ -238,7 +238,7 @@ compute perfyz all stress/atom NULL pair compute fyz all reduce sum c_perfyz[1] c_perfyz[2] c_perfyz[3] c_perfyz[4] c_perfyz[5] c_perfyz[6] thermo_style custom step lx ly lz xy xz yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] run 10 -Memory usage per processor = 8.16262 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.755 | 8.757 | 8.759 Mbytes Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 24 21.730089 21.727916 21.730089 0 0 0 2234831.5 1545950.9 2234831.5 -3.9610575e-06 -3.188829e-06 -5.7973926e-07 25 21.730089 21.727916 21.730089 0 0 4.3460177e-07 2234831.5 1545950.9 2234831.5 -4.4960939e-06 -2.549801e-06 -1.5603844e-06 @@ -251,20 +251,20 @@ Step Lx Ly Lz Xy Xz Yz c_fyz[1] c_fyz[2] c_fyz[3] c_fyz[4] c_fyz[5] c_fyz[6] 32 21.730089 21.727916 21.730089 0 0 3.4768142e-06 2234831.5 1545950.9 2234831.5 -6.62009e-06 -8.621625e-06 1705.6275 33 21.730089 21.727916 21.730089 0 0 3.911416e-06 2234831.5 1545950.9 2234831.5 -6.712501e-06 -8.7315457e-06 1949.2885 34 21.730089 21.727916 21.730089 0 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 -6.3958831e-06 -7.1670331e-06 2192.9496 -Loop time of 0.0656388 on 4 procs for 10 steps with 512 atoms +Loop time of 0.0527849 on 4 procs for 10 steps with 512 atoms -Performance: 2.633 ns/day, 9.116 hours/ns, 152.349 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.274 ns/day, 7.331 hours/ns, 189.448 timesteps/s +96.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.040685 | 0.050668 | 0.063339 | 3.6 | 77.19 +Pair | 0.031353 | 0.038631 | 0.04922 | 3.3 | 73.19 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00077748 | 0.013466 | 0.023423 | 7.0 | 20.52 -Output | 0.0013893 | 0.0014307 | 0.001461 | 0.1 | 2.18 -Modify | 2.1935e-05 | 2.6524e-05 | 3.0994e-05 | 0.1 | 0.04 -Other | | 4.733e-05 | | | 0.07 +Comm | 0.0018575 | 0.012532 | 0.019807 | 5.9 | 23.74 +Output | 0.0014849 | 0.0015269 | 0.0016224 | 0.1 | 2.89 +Modify | 3.624e-05 | 4.2975e-05 | 5.0306e-05 | 0.0 | 0.08 +Other | | 5.269e-05 | | | 0.10 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 @@ -287,7 +287,7 @@ compute perfxy all stress/atom NULL pair compute fxy all reduce sum c_perfxy[1] c_perfxy[2] c_perfxy[3] c_perfxy[4] c_perfxy[5] c_perfxy[6] thermo_style custom step lx ly lz xy xz yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] run 10 -Memory usage per processor = 8.91262 Mbytes +Per MPI rank memory allocation (min/avg/max) = 9.505 | 9.507 | 9.509 Mbytes Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 34 21.730089 21.727916 21.730089 0 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 -6.1581426e-06 -1.1350015e-05 2436.6106 35 21.730089 21.727916 21.730089 4.3455832e-07 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 -6.7014652e-06 -1.1032048e-05 2436.6106 @@ -300,20 +300,20 @@ Step Lx Ly Lz Xy Xz Yz c_fxy[1] c_fxy[2] c_fxy[3] c_fxy[4] c_fxy[5] c_fxy[6] 42 21.730089 21.727916 21.730089 3.4764665e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 1705.531 -0.00093156087 2436.6106 43 21.730089 21.727916 21.730089 3.9110248e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 1949.1783 -0.0010618138 2436.6106 44 21.730089 21.727916 21.730089 4.3455832e-06 0 4.3460177e-06 2234831.5 1545950.9 2234831.5 2192.8256 -0.0011926577 2436.6106 -Loop time of 0.0657181 on 4 procs for 10 steps with 512 atoms +Loop time of 0.0532025 on 4 procs for 10 steps with 512 atoms -Performance: 2.629 ns/day, 9.128 hours/ns, 152.165 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.248 ns/day, 7.389 hours/ns, 187.961 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.040015 | 0.050405 | 0.063468 | 3.7 | 76.70 +Pair | 0.031092 | 0.039043 | 0.049599 | 3.4 | 73.39 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00079203 | 0.013852 | 0.024224 | 7.1 | 21.08 -Output | 0.0013652 | 0.001386 | 0.0014119 | 0.1 | 2.11 -Modify | 2.0981e-05 | 2.5392e-05 | 3.2902e-05 | 0.1 | 0.04 -Other | | 4.965e-05 | | | 0.08 +Comm | 0.0009048 | 0.012022 | 0.020445 | 6.4 | 22.60 +Output | 0.0015302 | 0.0020386 | 0.0026102 | 1.1 | 3.83 +Modify | 3.8862e-05 | 4.4942e-05 | 5.1498e-05 | 0.0 | 0.08 +Other | | 5.406e-05 | | | 0.10 Nlocal: 128 ave 164 max 100 min Histogram: 1 0 0 2 0 0 0 0 0 1 diff --git a/examples/comb/log.5Oct16.comb.Si.g++.1 b/examples/comb/log.27Nov18.comb.Si.g++.1 similarity index 80% rename from examples/comb/log.5Oct16.comb.Si.g++.1 rename to examples/comb/log.27Nov18.comb.Si.g++.1 index 517c7ba306..1a37d41a9a 100644 --- a/examples/comb/log.5Oct16.comb.Si.g++.1 +++ b/examples/comb/log.27Nov18.comb.Si.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Si crystal, structure created by LAMMPS, qeq off units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (21.72 21.72 21.72) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 512 atoms + Time spent = 0.000380754 secs mass 1 29.0 pair_style comb @@ -42,13 +44,18 @@ thermo 1 run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 1 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 6.47955 Mbytes + binsize = 6.25, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.855 | 7.855 | 7.855 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 0 10.1 -4.6284152 -4.6297182 -4.6297182 0 1140.7851 10246.592 21.72 21.72 21.72 0 1 10.097843 -4.6284152 -4.6297179 -4.6297179 0 1140.8131 10246.592 21.72 21.72 21.72 0 @@ -61,20 +68,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 8 9.9628496 -4.6284152 -4.6297005 -4.6297005 0 1142.5666 10246.592 21.72 21.72 21.72 0 9 9.9267173 -4.6284152 -4.6296958 -4.6296958 0 1143.0353 10246.592 21.72 21.72 21.72 0 10 9.8864817 -4.6284152 -4.6296906 -4.6296906 0 1143.5568 10246.592 21.72 21.72 21.72 0 -Loop time of 0.187379 on 1 procs for 10 steps with 512 atoms +Loop time of 0.135568 on 1 procs for 10 steps with 512 atoms -Performance: 0.922 ns/day, 26.025 hours/ns, 53.368 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.275 ns/day, 18.829 hours/ns, 73.764 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.18685 | 0.18685 | 0.18685 | 0.0 | 99.72 +Pair | 0.13472 | 0.13472 | 0.13472 | 0.0 | 99.37 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00025797 | 0.00025797 | 0.00025797 | 0.0 | 0.14 -Output | 0.00011826 | 0.00011826 | 0.00011826 | 0.0 | 0.06 -Modify | 8.297e-05 | 8.297e-05 | 8.297e-05 | 0.0 | 0.04 -Other | | 7.2e-05 | | | 0.04 +Comm | 0.00044823 | 0.00044823 | 0.00044823 | 0.0 | 0.33 +Output | 0.00023055 | 0.00023055 | 0.00023055 | 0.0 | 0.17 +Modify | 8.7976e-05 | 8.7976e-05 | 8.7976e-05 | 0.0 | 0.06 +Other | | 8.512e-05 | | | 0.06 Nlocal: 512 ave 512 max 512 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/comb/log.5Oct16.comb.Si.g++.4 b/examples/comb/log.27Nov18.comb.Si.g++.4 similarity index 80% rename from examples/comb/log.5Oct16.comb.Si.g++.4 rename to examples/comb/log.27Nov18.comb.Si.g++.4 index 0c91786f20..2cbe145f85 100644 --- a/examples/comb/log.5Oct16.comb.Si.g++.4 +++ b/examples/comb/log.27Nov18.comb.Si.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pure Si crystal, structure created by LAMMPS, qeq off units metal @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 0) to (21.72 21.72 21.72) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 512 atoms + Time spent = 0.000349522 secs mass 1 29.0 pair_style comb @@ -42,13 +44,18 @@ thermo 1 run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 1 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12.5 ghost atom cutoff = 12.5 - binsize = 6.25 -> bins = 4 4 4 -Memory usage per processor = 6.39352 Mbytes + binsize = 6.25, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.99 | 6.99 | 6.99 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 0 10.1 -4.6284152 -4.6297182 -4.6297182 0 1140.7851 10246.592 21.72 21.72 21.72 0 1 10.097841 -4.6284152 -4.6297179 -4.6297179 0 1140.8134 10246.592 21.72 21.72 21.72 0 @@ -61,20 +68,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz Xz 8 9.9627224 -4.6284152 -4.6297005 -4.6297005 0 1142.5835 10246.592 21.72 21.72 21.72 0 9 9.9265602 -4.6284152 -4.6296958 -4.6296958 0 1143.0565 10246.592 21.72 21.72 21.72 0 10 9.8862927 -4.6284152 -4.6296906 -4.6296906 0 1143.5829 10246.592 21.72 21.72 21.72 0 -Loop time of 0.0527902 on 4 procs for 10 steps with 512 atoms +Loop time of 0.0424338 on 4 procs for 10 steps with 512 atoms -Performance: 3.273 ns/day, 7.332 hours/ns, 189.429 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 4.072 ns/day, 5.894 hours/ns, 235.661 timesteps/s +93.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.045993 | 0.047917 | 0.051259 | 0.9 | 90.77 +Pair | 0.034115 | 0.035889 | 0.040149 | 1.3 | 84.58 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0010545 | 0.0044153 | 0.0063219 | 3.0 | 8.36 -Output | 0.00030351 | 0.00033081 | 0.00036931 | 0.1 | 0.63 -Modify | 2.3365e-05 | 2.6286e-05 | 2.8372e-05 | 0.0 | 0.05 -Other | | 0.0001011 | | | 0.19 +Comm | 0.0015998 | 0.0058764 | 0.0076761 | 3.2 | 13.85 +Output | 0.00023532 | 0.00029427 | 0.00042939 | 0.0 | 0.69 +Modify | 2.7418e-05 | 2.9385e-05 | 3.1948e-05 | 0.0 | 0.07 +Other | | 0.0003446 | | | 0.81 Nlocal: 128 ave 128 max 128 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/comb/log.5Oct16.comb3.g++.1 b/examples/comb/log.27Nov18.comb3.g++.1 similarity index 77% rename from examples/comb/log.5Oct16.comb3.g++.1 rename to examples/comb/log.27Nov18.comb3.g++.1 index d6342dbf54..10120130d1 100644 --- a/examples/comb/log.5Oct16.comb3.g++.1 +++ b/examples/comb/log.27Nov18.comb3.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Graphene-OH on Cu2O (110) surface units metal @@ -40,18 +41,23 @@ velocity all create 300.0 2398378 thermo 10 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 4 6 -Memory usage per processor = 4.95036 Mbytes + binsize = 6.5, bins = 4 4 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb3, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 12.04 | 12.04 | 12.04 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz 0 300 -4.5167776 -4.5554988 -3.9875717 -0.56792713 -19801.669 17719.012 21.3 24.6 33.8162 10 467.10265 -4.5167723 -4.5770615 -4.0093169 -0.56774462 -15438.86 17719.012 21.3 24.6 33.8162 20 732.82159 -4.5169309 -4.6115167 -4.0435338 -0.56798291 -12197.607 17719.012 21.3 24.6 33.8162 - 30 906.42366 -4.517088 -4.6340807 -4.0657272 -0.56835345 -8825.2434 17719.012 21.3 24.6 33.8162 + 30 906.42367 -4.517088 -4.6340807 -4.0657272 -0.56835345 -8825.2434 17719.012 21.3 24.6 33.8162 40 957.57065 -4.5172533 -4.6408475 -4.0717295 -0.56911807 -12551.812 17719.012 21.3 24.6 33.8162 50 920.31413 -4.517436 -4.6362215 -4.0660108 -0.57021068 -11911.093 17719.012 21.3 24.6 33.8162 60 1003.2 -4.5176403 -4.647124 -4.0757679 -0.57135607 1337.5658 17719.012 21.3 24.6 33.8162 @@ -59,20 +65,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz 80 1188.3196 -4.518095 -4.6714721 -4.0978283 -0.57364387 12411.934 17719.012 21.3 24.6 33.8162 90 1193.9207 -4.5183329 -4.672433 -4.0976379 -0.57479504 15405.848 17719.012 21.3 24.6 33.8162 100 1197.343 -4.5185478 -4.6730896 -4.0971431 -0.57594648 17853.038 17719.012 21.3 24.6 33.8162 -Loop time of 44.821 on 1 procs for 100 steps with 682 atoms +Loop time of 32.3303 on 1 procs for 100 steps with 682 atoms -Performance: 0.039 ns/day, 622.513 hours/ns, 2.231 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.053 ns/day, 449.032 hours/ns, 3.093 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 10.702 | 10.702 | 10.702 | 0.0 | 23.88 +Pair | 8.3833 | 8.3833 | 8.3833 | 0.0 | 25.93 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0028968 | 0.0028968 | 0.0028968 | 0.0 | 0.01 -Output | 0.00018311 | 0.00018311 | 0.00018311 | 0.0 | 0.00 -Modify | 34.115 | 34.115 | 34.115 | 0.0 | 76.11 -Other | | 0.001503 | | | 0.00 +Comm | 0.003716 | 0.003716 | 0.003716 | 0.0 | 0.01 +Output | 0.00026011 | 0.00026011 | 0.00026011 | 0.0 | 0.00 +Modify | 23.942 | 23.942 | 23.942 | 0.0 | 74.05 +Other | | 0.001301 | | | 0.00 Nlocal: 682 ave 682 max 682 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -87,4 +93,4 @@ Total # of neighbors = 355216 Ave neighs/atom = 520.845 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:47 +Total wall time: 0:00:34 diff --git a/examples/comb/log.5Oct16.comb3.g++.4 b/examples/comb/log.27Nov18.comb3.g++.4 similarity index 79% rename from examples/comb/log.5Oct16.comb3.g++.4 rename to examples/comb/log.27Nov18.comb3.g++.4 index 39c032b9c5..2e87771f1f 100644 --- a/examples/comb/log.5Oct16.comb3.g++.4 +++ b/examples/comb/log.27Nov18.comb3.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Graphene-OH on Cu2O (110) surface units metal @@ -40,13 +41,18 @@ velocity all create 300.0 2398378 thermo 10 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 4 6 -Memory usage per processor = 4.95436 Mbytes + binsize = 6.5, bins = 4 4 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair comb3, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 8.978 | 9.688 | 10.4 Mbytes Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz 0 300 -4.5167776 -4.5554988 -3.9875717 -0.56792713 -19801.669 17719.012 21.3 24.6 33.8162 10 467.10265 -4.5167723 -4.5770615 -4.0093169 -0.56774462 -15438.86 17719.012 21.3 24.6 33.8162 @@ -59,20 +65,20 @@ Step Temp TotEng PotEng E_vdwl E_coul Press Volume Lx Ly Lz 80 1188.3196 -4.518095 -4.6714721 -4.0978283 -0.57364387 12411.934 17719.012 21.3 24.6 33.8162 90 1193.9207 -4.5183329 -4.672433 -4.0976379 -0.57479504 15405.848 17719.012 21.3 24.6 33.8162 100 1197.343 -4.5185478 -4.6730896 -4.0971431 -0.57594648 17853.038 17719.012 21.3 24.6 33.8162 -Loop time of 20.2521 on 4 procs for 100 steps with 682 atoms +Loop time of 15.9617 on 4 procs for 100 steps with 682 atoms -Performance: 0.085 ns/day, 281.279 hours/ns, 4.938 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.108 ns/day, 221.691 hours/ns, 6.265 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.1898 | 3.3988 | 4.7081 | 65.6 | 16.78 +Pair | 2.2602 | 3.3385 | 4.4367 | 57.4 | 20.92 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013637 | 1.3219 | 2.5298 | 105.1 | 6.53 -Output | 0.00034475 | 0.00035816 | 0.00038099 | 0.1 | 0.00 -Modify | 15.528 | 15.528 | 15.529 | 0.0 | 76.68 -Other | | 0.002504 | | | 0.01 +Comm | 0.09019 | 1.1876 | 2.265 | 96.2 | 7.44 +Output | 0.00035334 | 0.0005967 | 0.0013168 | 0.0 | 0.00 +Modify | 11.432 | 11.432 | 11.432 | 0.0 | 71.62 +Other | | 0.002874 | | | 0.02 Nlocal: 170.5 ave 245 max 100 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -87,4 +93,4 @@ Total # of neighbors = 355216 Ave neighs/atom = 520.845 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:21 +Total wall time: 0:00:16 From 296cab0b092be321983e6b96df20f388a30c89e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 15:40:14 -0500 Subject: [PATCH 209/273] update log files for controller example --- ...ler.g++.1 => log.27Nov18.controller.g++.1} | 53 +++++++++++-------- ...ler.g++.4 => log.27Nov18.controller.g++.4} | 53 +++++++++++-------- 2 files changed, 60 insertions(+), 46 deletions(-) rename examples/controller/{log.5Oct16.controller.g++.1 => log.27Nov18.controller.g++.1} (81%) rename examples/controller/{log.5Oct16.controller.g++.4 => log.27Nov18.controller.g++.4} (81%) diff --git a/examples/controller/log.5Oct16.controller.g++.1 b/examples/controller/log.27Nov18.controller.g++.1 similarity index 81% rename from examples/controller/log.5Oct16.controller.g++.1 rename to examples/controller/log.27Nov18.controller.g++.1 index 5b30a14007..64b9beda3b 100644 --- a/examples/controller/log.5Oct16.controller.g++.1 +++ b/examples/controller/log.27Nov18.controller.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt, thermostatted by fix controller units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.00062418 secs mass 1 1.0 velocity all create 1.44 87287 loop geom @@ -32,13 +34,18 @@ fix tstat all langevin v_tcontrol 0.5 0.5 2938940 thermo 50 run 500 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.19271 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -6.7733681 0 -4.6139081 -5.0199732 50 0.61784238 -5.9328913 0 -5.0063594 -0.8309723 @@ -51,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 400 0.49885979 -6.157314 0 -5.4092114 -2.1544075 450 0.50261633 -6.1458076 0 -5.3920716 -2.1080502 500 0.51198903 -6.1441158 0 -5.3763242 -2.0677941 -Loop time of 1.51804 on 1 procs for 500 steps with 4000 atoms +Loop time of 1.55006 on 1 procs for 500 steps with 4000 atoms -Performance: 142288.277 tau/day, 329.371 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 139349.249 tau/day, 322.568 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2152 | 1.2152 | 1.2152 | 0.0 | 80.05 -Neigh | 0.16464 | 0.16464 | 0.16464 | 0.0 | 10.85 -Comm | 0.022342 | 0.022342 | 0.022342 | 0.0 | 1.47 -Output | 0.00020981 | 0.00020981 | 0.00020981 | 0.0 | 0.01 -Modify | 0.10936 | 0.10936 | 0.10936 | 0.0 | 7.20 -Other | | 0.006292 | | | 0.41 +Pair | 1.2115 | 1.2115 | 1.2115 | 0.0 | 78.16 +Neigh | 0.18784 | 0.18784 | 0.18784 | 0.0 | 12.12 +Comm | 0.027217 | 0.027217 | 0.027217 | 0.0 | 1.76 +Output | 0.00033712 | 0.00033712 | 0.00033712 | 0.0 | 0.02 +Modify | 0.1171 | 0.1171 | 0.1171 | 0.0 | 7.55 +Other | | 0.006078 | | | 0.39 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -90,7 +97,7 @@ fix 10 all controller 100 1.0 0.5 0.0 0.0 c_thermo_t # run with controller run 2500 -Memory usage per processor = 2.19271 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes Step Temp E_pair E_mol TotEng Press 500 0.51198903 -6.1441158 0 -5.3763242 -2.0677941 550 0.50342035 -6.1446822 0 -5.3897404 -2.0872641 @@ -143,20 +150,20 @@ Step Temp E_pair E_mol TotEng Press 2900 1.5287303 -4.8393493 0 -2.546827 5.3276564 2950 1.5175567 -4.8779763 0 -2.6022104 5.1592321 3000 1.5038518 -4.8714664 0 -2.6162526 5.1494048 -Loop time of 7.82673 on 1 procs for 2500 steps with 4000 atoms +Loop time of 7.9877 on 1 procs for 2500 steps with 4000 atoms -Performance: 137988.733 tau/day, 319.418 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 135207.915 tau/day, 312.981 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.2774 | 6.2774 | 6.2774 | 0.0 | 80.21 -Neigh | 0.85491 | 0.85491 | 0.85491 | 0.0 | 10.92 -Comm | 0.11304 | 0.11304 | 0.11304 | 0.0 | 1.44 -Output | 0.00090504 | 0.00090504 | 0.00090504 | 0.0 | 0.01 -Modify | 0.55013 | 0.55013 | 0.55013 | 0.0 | 7.03 -Other | | 0.0303 | | | 0.39 +Pair | 6.2628 | 6.2628 | 6.2628 | 0.0 | 78.41 +Neigh | 0.97669 | 0.97669 | 0.97669 | 0.0 | 12.23 +Comm | 0.13389 | 0.13389 | 0.13389 | 0.0 | 1.68 +Output | 0.0015631 | 0.0015631 | 0.0015631 | 0.0 | 0.02 +Modify | 0.58344 | 0.58344 | 0.58344 | 0.0 | 7.30 +Other | | 0.02927 | | | 0.37 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/controller/log.5Oct16.controller.g++.4 b/examples/controller/log.27Nov18.controller.g++.4 similarity index 81% rename from examples/controller/log.5Oct16.controller.g++.4 rename to examples/controller/log.27Nov18.controller.g++.4 index 21e1f58f36..9584c0a8a0 100644 --- a/examples/controller/log.5Oct16.controller.g++.4 +++ b/examples/controller/log.27Nov18.controller.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt, thermostatted by fix controller units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000405788 secs mass 1 1.0 velocity all create 1.44 87287 loop geom @@ -32,13 +34,18 @@ fix tstat all langevin v_tcontrol 0.5 0.5 2938940 thermo 50 run 500 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.10344 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -6.7733681 0 -4.6139081 -5.0199732 50 0.61546984 -5.9273631 0 -5.0043892 -0.80234884 @@ -51,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 400 0.50869337 -6.1435002 0 -5.3806509 -2.0654599 450 0.50821435 -6.1436659 0 -5.381535 -2.0660991 500 0.51057155 -6.138733 0 -5.3730671 -2.0305015 -Loop time of 0.474689 on 4 procs for 500 steps with 4000 atoms +Loop time of 0.469437 on 4 procs for 500 steps with 4000 atoms -Performance: 455034.992 tau/day, 1053.322 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 460125.812 tau/day, 1065.106 timesteps/s +97.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.31692 | 0.32816 | 0.35039 | 2.3 | 69.13 -Neigh | 0.042872 | 0.044288 | 0.046693 | 0.7 | 9.33 -Comm | 0.043676 | 0.070658 | 0.084897 | 6.0 | 14.89 -Output | 0.00025439 | 0.0002867 | 0.00030446 | 0.1 | 0.06 -Modify | 0.02728 | 0.028604 | 0.030571 | 0.8 | 6.03 -Other | | 0.002697 | | | 0.57 +Pair | 0.31917 | 0.32582 | 0.32979 | 0.7 | 69.41 +Neigh | 0.048915 | 0.051251 | 0.053828 | 0.8 | 10.92 +Comm | 0.054731 | 0.059151 | 0.069726 | 2.5 | 12.60 +Output | 0.00028014 | 0.00033808 | 0.00048709 | 0.0 | 0.07 +Modify | 0.02967 | 0.031206 | 0.033305 | 0.8 | 6.65 +Other | | 0.00167 | | | 0.36 Nlocal: 1000 ave 1027 max 969 min Histogram: 1 0 0 1 0 0 0 0 1 1 @@ -90,7 +97,7 @@ fix 10 all controller 100 1.0 0.5 0.0 0.0 c_thermo_t # run with controller run 2500 -Memory usage per processor = 2.10344 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes Step Temp E_pair E_mol TotEng Press 500 0.51057155 -6.138733 0 -5.3730671 -2.0305015 550 0.50420106 -6.1501845 0 -5.394072 -2.095219 @@ -143,20 +150,20 @@ Step Temp E_pair E_mol TotEng Press 2900 1.4994026 -4.8400966 0 -2.591555 5.3231654 2950 1.5057915 -4.8842358 0 -2.6261131 5.1645778 3000 1.5038806 -4.8661399 0 -2.610883 5.2228747 -Loop time of 2.33203 on 4 procs for 2500 steps with 4000 atoms +Loop time of 2.39888 on 4 procs for 2500 steps with 4000 atoms -Performance: 463116.726 tau/day, 1072.029 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 450209.527 tau/day, 1042.152 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.6173 | 1.6621 | 1.7135 | 3.2 | 71.27 -Neigh | 0.2201 | 0.22394 | 0.23011 | 0.9 | 9.60 -Comm | 0.22619 | 0.29012 | 0.33801 | 8.8 | 12.44 -Output | 0.001302 | 0.0013426 | 0.0013707 | 0.1 | 0.06 -Modify | 0.13805 | 0.14195 | 0.14664 | 0.9 | 6.09 -Other | | 0.01257 | | | 0.54 +Pair | 1.6469 | 1.6659 | 1.7027 | 1.7 | 69.45 +Neigh | 0.25338 | 0.26008 | 0.26833 | 1.2 | 10.84 +Comm | 0.24458 | 0.30644 | 0.33939 | 6.6 | 12.77 +Output | 0.0012605 | 0.0020466 | 0.0043511 | 2.9 | 0.09 +Modify | 0.15009 | 0.15611 | 0.16933 | 2.0 | 6.51 +Other | | 0.008278 | | | 0.35 Nlocal: 1000 ave 1014 max 988 min Histogram: 2 0 0 0 0 0 0 0 1 1 From 98c8f220465e1f34321e6b8885d5d4b27d682293 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 15:56:58 -0500 Subject: [PATCH 210/273] update log files for coreshell examples --- ....g++.1 => log.27Nov18.coreshell.dsf.g++.1} | 58 ++-- ....g++.4 => log.27Nov18.coreshell.dsf.g++.4} | 52 ++-- .../coreshell/log.27Nov18.coreshell.g++.1 | 218 ++++++++++++++ .../coreshell/log.27Nov18.coreshell.g++.4 | 218 ++++++++++++++ .../log.27Nov18.coreshell.thermostats.g++.1 | 278 ++++++++++++++++++ .../log.27Nov18.coreshell.thermostats.g++.4 | 278 ++++++++++++++++++ ...g++.1 => log.27Nov18.coreshell.wolf.g++.1} | 107 +++---- ...g++.4 => log.27Nov18.coreshell.wolf.g++.4} | 103 +++---- examples/coreshell/log.5Oct16.coreshell.g++.1 | 209 ------------- examples/coreshell/log.5Oct16.coreshell.g++.4 | 209 ------------- 10 files changed, 1157 insertions(+), 573 deletions(-) rename examples/coreshell/{log.9Nov16.coreshell.dsf.g++.1 => log.27Nov18.coreshell.dsf.g++.1} (84%) rename examples/coreshell/{log.9Nov16.coreshell.dsf.g++.4 => log.27Nov18.coreshell.dsf.g++.4} (85%) create mode 100644 examples/coreshell/log.27Nov18.coreshell.g++.1 create mode 100644 examples/coreshell/log.27Nov18.coreshell.g++.4 create mode 100644 examples/coreshell/log.27Nov18.coreshell.thermostats.g++.1 create mode 100644 examples/coreshell/log.27Nov18.coreshell.thermostats.g++.4 rename examples/coreshell/{log.22Sep17.coreshell.wolf.g++.1 => log.27Nov18.coreshell.wolf.g++.1} (51%) rename examples/coreshell/{log.22Sep17.coreshell.wolf.g++.4 => log.27Nov18.coreshell.wolf.g++.4} (54%) delete mode 100644 examples/coreshell/log.5Oct16.coreshell.g++.1 delete mode 100644 examples/coreshell/log.5Oct16.coreshell.g++.4 diff --git a/examples/coreshell/log.9Nov16.coreshell.dsf.g++.1 b/examples/coreshell/log.27Nov18.coreshell.dsf.g++.1 similarity index 84% rename from examples/coreshell/log.9Nov16.coreshell.dsf.g++.1 rename to examples/coreshell/log.27Nov18.coreshell.dsf.g++.1 index f58970fff0..12fd548f02 100644 --- a/examples/coreshell/log.9Nov16.coreshell.dsf.g++.1 +++ b/examples/coreshell/log.27Nov18.coreshell.dsf.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (27 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Testsystem for core-shell model compared to Mitchel and Finchham # Hendrik Heenen, June 2014 @@ -68,12 +69,17 @@ thermo_modify temp CSequ velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CSequ Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 22 ghost atom cutoff = 22 - binsize = 11 -> bins = 3 3 3 + binsize = 11, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair born/coul/dsf/cs, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard velocity all scale 1427 temp CSequ fix thermoberendsen all temp/berendsen 1427 1427 0.4 @@ -84,7 +90,7 @@ fix_modify thermoberendsen temp CSequ timestep 0.002 run 500 -Memory usage per processor = 7.04355 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.59 | 8.59 | 8.59 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume 0 -635.80596 -675.46362 39.657659 1427 -21302.622 -675.46362 1.6320365 -677.09565 0 0 1.3517686e-14 2.942091e-15 13990.5 50 -633.9898 -666.02679 32.03699 1152.7858 -4578.5681 -668.50431 37.800204 -706.30452 0 2.4775226 14.568073 4.3012389 13990.5 @@ -97,21 +103,21 @@ Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fm 400 -625.02586 -661.46042 36.434568 1311.0236 -868.2031 -664.40231 43.21398 -707.61629 0 2.9418875 14.945389 2.7493413 13990.5 450 -624.3278 -660.50844 36.180639 1301.8865 -2203.3944 -663.49896 40.008669 -703.50763 0 2.9905179 14.158866 1.7299899 13990.5 500 -623.56254 -661.33839 37.775849 1359.2869 -810.50736 -664.11652 42.993999 -707.11052 0 2.7781274 13.68709 2.9115277 13990.5 -Loop time of 10.7162 on 1 procs for 500 steps with 432 atoms +Loop time of 8.43387 on 1 procs for 500 steps with 432 atoms -Performance: 8.063 ns/day, 2.977 hours/ns, 46.658 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 10.244 ns/day, 2.343 hours/ns, 59.285 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 10.478 | 10.478 | 10.478 | 0.0 | 97.78 -Bond | 0.0029511 | 0.0029511 | 0.0029511 | 0.0 | 0.03 -Neigh | 0.14159 | 0.14159 | 0.14159 | 0.0 | 1.32 -Comm | 0.074382 | 0.074382 | 0.074382 | 0.0 | 0.69 -Output | 0.00054097 | 0.00054097 | 0.00054097 | 0.0 | 0.01 -Modify | 0.010588 | 0.010588 | 0.010588 | 0.0 | 0.10 -Other | | 0.007748 | | | 0.07 +Pair | 8.1175 | 8.1175 | 8.1175 | 0.0 | 96.25 +Bond | 0.0019796 | 0.0019796 | 0.0019796 | 0.0 | 0.02 +Neigh | 0.21242 | 0.21242 | 0.21242 | 0.0 | 2.52 +Comm | 0.085533 | 0.085533 | 0.085533 | 0.0 | 1.01 +Output | 0.00041103 | 0.00041103 | 0.00041103 | 0.0 | 0.00 +Modify | 0.012187 | 0.012187 | 0.012187 | 0.0 | 0.14 +Other | | 0.003863 | | | 0.05 Nlocal: 432 ave 432 max 432 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -131,7 +137,7 @@ unfix thermoberendsen # ------------------------ Dynamic Run ------------------------------- run 1000 -Memory usage per processor = 7.04355 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.59 | 8.59 | 8.59 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume 500 -623.56254 -661.33839 37.775849 1359.2869 -810.50736 -664.11652 42.993999 -707.11052 0 2.7781274 13.68709 2.9115277 13990.5 550 -623.5004 -660.74472 37.244326 1340.1611 -1413.4326 -663.99669 41.875014 -705.8717 0 3.2519651 15.097948 2.278405 13990.5 @@ -154,21 +160,21 @@ Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fm 1400 -623.50803 -660.03912 36.53109 1314.4968 362.97431 -663.24909 45.772904 -709.02199 0 3.2099708 14.566488 1.9170714 13990.5 1450 -623.51243 -659.65548 36.143052 1300.534 2853.0755 -663.0534 51.355353 -714.40875 0 3.3979157 15.890282 2.5251359 13990.5 1500 -623.51621 -661.87741 38.361201 1380.3496 740.04973 -665.00896 46.208742 -711.2177 0 3.1315492 15.168927 2.4710846 13990.5 -Loop time of 22.2766 on 1 procs for 1000 steps with 432 atoms +Loop time of 16.907 on 1 procs for 1000 steps with 432 atoms -Performance: 7.757 ns/day, 3.094 hours/ns, 44.890 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 10.221 ns/day, 2.348 hours/ns, 59.147 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 21.8 | 21.8 | 21.8 | 0.0 | 97.86 -Bond | 0.005852 | 0.005852 | 0.005852 | 0.0 | 0.03 -Neigh | 0.30423 | 0.30423 | 0.30423 | 0.0 | 1.37 -Comm | 0.14388 | 0.14388 | 0.14388 | 0.0 | 0.65 -Output | 0.0010855 | 0.0010855 | 0.0010855 | 0.0 | 0.00 -Modify | 0.0064189 | 0.0064189 | 0.0064189 | 0.0 | 0.03 -Other | | 0.01527 | | | 0.07 +Pair | 16.247 | 16.247 | 16.247 | 0.0 | 96.09 +Bond | 0.0039518 | 0.0039518 | 0.0039518 | 0.0 | 0.02 +Neigh | 0.46795 | 0.46795 | 0.46795 | 0.0 | 2.77 +Comm | 0.17146 | 0.17146 | 0.17146 | 0.0 | 1.01 +Output | 0.00082397 | 0.00082397 | 0.00082397 | 0.0 | 0.00 +Modify | 0.0065799 | 0.0065799 | 0.0065799 | 0.0 | 0.04 +Other | | 0.009467 | | | 0.06 Nlocal: 432 ave 432 max 432 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -182,4 +188,4 @@ Ave neighs/atom = 687.803 Ave special neighs/atom = 1 Neighbor list builds = 44 Dangerous builds = 0 -Total wall time: 0:00:33 +Total wall time: 0:00:25 diff --git a/examples/coreshell/log.9Nov16.coreshell.dsf.g++.4 b/examples/coreshell/log.27Nov18.coreshell.dsf.g++.4 similarity index 85% rename from examples/coreshell/log.9Nov16.coreshell.dsf.g++.4 rename to examples/coreshell/log.27Nov18.coreshell.dsf.g++.4 index ccf1b4b035..fddddee49b 100644 --- a/examples/coreshell/log.9Nov16.coreshell.dsf.g++.4 +++ b/examples/coreshell/log.27Nov18.coreshell.dsf.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (26 Jan 2017) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Testsystem for core-shell model compared to Mitchel and Finchham # Hendrik Heenen, June 2014 @@ -74,7 +75,8 @@ Neighbor list info ... ghost atom cutoff = 22 binsize = 11, bins = 3 3 3 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair born/coul/dsf/cs, half, perpetual + (1) pair born/coul/dsf/cs, perpetual + attributes: half, newton on pair build: half/bin/newton stencil: half/bin/3d/newton bin: standard @@ -88,7 +90,7 @@ fix_modify thermoberendsen temp CSequ timestep 0.002 run 500 -Memory usage per processor = 6.8559 Mbytes +Per MPI rank memory allocation (min/avg/max) = 6.881 | 6.881 | 6.881 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume 0 -635.80596 -675.46362 39.657659 1427 -21302.622 -675.46362 1.6320365 -677.09565 0 0 1.5814015e-14 3.2317898e-15 13990.5 50 -634.07021 -666.11867 32.048452 1153.1982 -4560.945 -668.28236 37.756542 -706.0389 0 2.163691 13.802484 3.022372 13990.5 @@ -101,21 +103,21 @@ Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fm 400 -625.09344 -661.26404 36.1706 1301.5253 -729.96729 -664.10334 43.468765 -707.57211 0 2.8392963 13.663555 1.9067551 13990.5 450 -624.46214 -660.01362 35.551477 1279.2474 -1617.7158 -663.06571 41.644856 -704.71057 0 3.0520921 14.527005 1.7280213 13990.5 500 -623.49246 -659.2527 35.76024 1286.7593 -935.99238 -662.32953 43.038808 -705.36834 0 3.0768302 14.099593 1.9831106 13990.5 -Loop time of 4.09864 on 4 procs for 500 steps with 432 atoms +Loop time of 2.44013 on 4 procs for 500 steps with 432 atoms -Performance: 21.080 ns/day, 1.139 hours/ns, 121.992 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 35.408 ns/day, 0.678 hours/ns, 204.907 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.3804 | 3.568 | 3.8354 | 8.9 | 87.05 -Bond | 0.00074339 | 0.00079519 | 0.00087976 | 0.0 | 0.02 -Neigh | 0.045851 | 0.046084 | 0.046361 | 0.1 | 1.12 -Comm | 0.20413 | 0.47123 | 0.65875 | 24.3 | 11.50 -Output | 0.00044298 | 0.00046057 | 0.00051165 | 0.0 | 0.01 -Modify | 0.0064909 | 0.0067219 | 0.0069766 | 0.2 | 0.16 -Other | | 0.005345 | | | 0.13 +Pair | 2.0321 | 2.1124 | 2.1759 | 3.6 | 86.57 +Bond | 0.00069523 | 0.00071579 | 0.00074148 | 0.0 | 0.03 +Neigh | 0.060491 | 0.060606 | 0.060709 | 0.0 | 2.48 +Comm | 0.19263 | 0.25562 | 0.33556 | 10.4 | 10.48 +Output | 0.00041246 | 0.00057316 | 0.0010512 | 0.0 | 0.02 +Modify | 0.0059495 | 0.0062472 | 0.006577 | 0.4 | 0.26 +Other | | 0.00394 | | | 0.16 Nlocal: 108 ave 114 max 105 min Histogram: 1 1 1 0 0 0 0 0 0 1 @@ -135,7 +137,7 @@ unfix thermoberendsen # ------------------------ Dynamic Run ------------------------------- run 1000 -Memory usage per processor = 6.85787 Mbytes +Per MPI rank memory allocation (min/avg/max) = 6.883 | 6.948 | 7.138 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume 500 -623.49319 -659.2527 35.759511 1286.7331 -936.04802 -662.32953 43.038808 -705.36834 0 3.0768302 14.099593 1.9831106 13990.5 550 -623.44059 -663.57938 40.138795 1444.3127 -935.73484 -666.2789 42.563337 -708.84224 0 2.6995167 13.918509 2.3189805 13990.5 @@ -158,21 +160,21 @@ Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fm 1400 -623.47124 -661.45375 37.982513 1366.7233 -379.56023 -664.6321 43.788306 -708.42041 0 3.1783497 14.251126 1.7415409 13990.5 1450 -623.46671 -660.17518 36.708464 1320.8792 -374.37056 -662.92706 44.083648 -707.01071 0 2.7518803 15.210167 1.9984277 13990.5 1500 -623.50515 -659.06488 35.559725 1279.5442 260.37822 -662.39548 45.779764 -708.17524 0 3.3306005 14.682396 2.4201107 13990.5 -Loop time of 8.26746 on 4 procs for 1000 steps with 432 atoms +Loop time of 5.16152 on 4 procs for 1000 steps with 432 atoms -Performance: 20.901 ns/day, 1.148 hours/ns, 120.956 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 33.478 ns/day, 0.717 hours/ns, 193.741 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.706 | 7.1568 | 7.6597 | 12.7 | 86.57 -Bond | 0.0014617 | 0.0015531 | 0.0016506 | 0.2 | 0.02 -Neigh | 0.10511 | 0.10522 | 0.10532 | 0.0 | 1.27 -Comm | 0.48547 | 0.98841 | 1.4393 | 34.0 | 11.96 -Output | 0.0012085 | 0.0012462 | 0.0013196 | 0.1 | 0.02 -Modify | 0.0021446 | 0.0021989 | 0.0022545 | 0.1 | 0.03 -Other | | 0.01204 | | | 0.15 +Pair | 4.0761 | 4.2795 | 4.6259 | 10.9 | 82.91 +Bond | 0.0013907 | 0.0014481 | 0.0015037 | 0.1 | 0.03 +Neigh | 0.13612 | 0.13618 | 0.13624 | 0.0 | 2.64 +Comm | 0.38391 | 0.73074 | 0.93346 | 26.3 | 14.16 +Output | 0.00096703 | 0.0014517 | 0.0028937 | 2.2 | 0.03 +Modify | 0.0022988 | 0.0024452 | 0.0025537 | 0.2 | 0.05 +Other | | 0.009786 | | | 0.19 Nlocal: 108 ave 114 max 94 min Histogram: 1 0 0 0 0 0 0 0 1 2 @@ -186,4 +188,4 @@ Ave neighs/atom = 687.484 Ave special neighs/atom = 1 Neighbor list builds = 46 Dangerous builds = 0 -Total wall time: 0:00:12 +Total wall time: 0:00:07 diff --git a/examples/coreshell/log.27Nov18.coreshell.g++.1 b/examples/coreshell/log.27Nov18.coreshell.g++.1 new file mode 100644 index 0000000000..ac37069a1d --- /dev/null +++ b/examples/coreshell/log.27Nov18.coreshell.g++.1 @@ -0,0 +1,218 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Testsystem for core-shell model compared to Mitchel and Finchham +# Hendrik Heenen, June 2014 + +# ------------------------ INITIALIZATION ---------------------------- + +units metal +dimension 3 +boundary p p p +atom_style full + +# ----------------------- ATOM DEFINITION ---------------------------- + +fix csinfo all property/atom i_CSID +read_data data.coreshell fix csinfo NULL CS-Info + orthogonal box = (0 0 0) to (24.096 24.096 24.096) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 432 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 216 bonds + 1 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + +group cores type 1 2 +216 atoms in group cores +group shells type 3 4 +216 atoms in group shells + +neighbor 2.0 bin +comm_modify vel yes + +# ------------------------ FORCE FIELDS ------------------------------ + +kspace_style ewald 1.0e-6 +pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D +pair_coeff * * 0.0 1.000 0.00 0.00 0.00 +pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na +pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl +pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl + +bond_style harmonic +bond_coeff 1 63.014 0.0 +bond_coeff 2 25.724 0.0 + +# ------------------------ Equilibration Run ------------------------------- + +reset_timestep 0 + +thermo 50 +thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol + +compute CStemp all temp/cs cores shells +compute thermo_press_lmp all pressure thermo_temp # press for correct kinetic scalar + +# output via chunk method + +#compute prop all property/atom i_CSID +#compute cs_chunk all chunk/atom c_prop +#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 +#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector + +thermo_modify temp CStemp press thermo_press_lmp + +# velocity bias option + +velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CStemp +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 22 + ghost atom cutoff = 22 + binsize = 11, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair born/coul/long/cs, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +velocity all scale 1427 temp CStemp + +# thermostating using the core/shell decoupling + +fix thermoberendsen all temp/berendsen 1427 1427 0.4 +fix nve all nve +fix_modify thermoberendsen temp CStemp + +# 2 fmsec timestep + +timestep 0.002 +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 17.29 | 17.29 | 17.29 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.7895988e-14 3.594347e-15 13990.5 + 50 -634.17327 -666.17818 32.004909 1151.6314 -4029.8418 -667.9562 37.809071 989.23283 -1694.9981 1.7780231 9.7133792 2.191797 13990.5 + 100 -631.93507 -661.91226 29.977186 1078.6679 -3171.7799 -664.06719 39.33341 991.36934 -1694.7699 2.1549313 11.091423 2.1704389 13990.5 + 150 -630.16811 -663.12417 32.956056 1185.8565 143.26508 -665.48036 46.253769 982.97454 -1694.7087 2.3561935 11.467913 2.1652595 13990.5 + 200 -628.62323 -663.64922 35.025998 1260.3391 -1622.4126 -665.96878 41.661879 986.81675 -1694.4474 2.3195587 10.597709 2.9538262 13990.5 + 250 -627.31045 -662.01825 34.7078 1248.8894 -1509.6621 -664.50312 42.101718 987.90197 -1694.5068 2.4848739 10.392757 1.6933711 13990.5 + 300 -626.57622 -660.97494 34.39872 1237.7678 -1637.8094 -663.48087 41.653234 989.53228 -1694.6664 2.5059303 11.204361 2.2809738 13990.5 + 350 -625.91962 -665.35837 39.438749 1419.123 -1351.4779 -667.6167 41.582456 985.53382 -1694.733 2.2583289 10.83106 1.8963347 13990.5 + 400 -625.24849 -660.77642 35.527934 1278.4003 -424.45104 -663.12602 43.890331 987.75201 -1694.7684 2.3495966 11.521966 2.175931 13990.5 + 450 -624.67743 -662.88678 38.209353 1374.8857 1109.0155 -665.43212 46.964803 982.35208 -1694.749 2.5453383 11.002405 2.0014356 13990.5 + 500 -624.30215 -661.97859 37.676437 1355.7098 -998.57286 -664.60382 42.373117 987.59021 -1694.5671 2.625227 11.153883 2.8270306 13990.5 +Loop time of 6.53907 on 1 procs for 500 steps with 432 atoms + +Performance: 13.213 ns/day, 1.816 hours/ns, 76.463 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.6198 | 5.6198 | 5.6198 | 0.0 | 85.94 +Bond | 0.0020258 | 0.0020258 | 0.0020258 | 0.0 | 0.03 +Kspace | 0.57813 | 0.57813 | 0.57813 | 0.0 | 8.84 +Neigh | 0.23532 | 0.23532 | 0.23532 | 0.0 | 3.60 +Comm | 0.086898 | 0.086898 | 0.086898 | 0.0 | 1.33 +Output | 0.00044823 | 0.00044823 | 0.00044823 | 0.0 | 0.01 +Modify | 0.012434 | 0.012434 | 0.012434 | 0.0 | 0.19 +Other | | 0.004004 | | | 0.06 + +Nlocal: 432 ave 432 max 432 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9338 ave 9338 max 9338 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 297354 ave 297354 max 297354 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 297354 +Ave neighs/atom = 688.319 +Ave special neighs/atom = 1 +Neighbor list builds = 22 +Dangerous builds = 0 + +unfix thermoberendsen + +# ------------------------ Dynamic Run ------------------------------- + +run 1000 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 17.29 | 17.29 | 17.29 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 500 -624.30215 -661.97859 37.676437 1355.7098 -998.57286 -664.60382 42.373117 987.59021 -1694.5671 2.625227 11.153883 2.8270306 13990.5 + 550 -624.30709 -662.13368 37.826594 1361.1129 327.40639 -664.76823 45.306662 984.72847 -1694.8034 2.6345475 10.879928 1.9751611 13990.5 + 600 -624.30993 -661.84513 37.535201 1350.6277 -983.48045 -664.36158 42.366067 987.87918 -1694.6068 2.5164439 10.210733 1.7891188 13990.5 + 650 -624.30501 -659.20528 34.90027 1255.8151 556.10903 -661.96404 46.567866 986.0511 -1694.583 2.7587602 13.154392 2.1649995 13990.5 + 700 -624.30909 -661.85126 37.54217 1350.8784 -134.38128 -664.38499 44.382232 985.80624 -1694.5735 2.5337309 10.991718 2.0394718 13990.5 + 750 -624.30994 -660.52853 36.218591 1303.2522 1197.4475 -663.29728 47.437035 984.08807 -1694.8224 2.7687507 11.683138 2.075797 13990.5 + 800 -624.30475 -659.88119 35.576433 1280.1454 358.11619 -662.81702 45.487454 986.41325 -1694.7177 2.9358301 11.519677 3.7837385 13990.5 + 850 -624.3061 -663.63946 39.333359 1415.3307 -33.011248 -666.10531 44.296094 984.32445 -1694.7258 2.4658499 11.039607 1.9232237 13990.5 + 900 -624.3004 -659.038 34.737607 1249.962 373.33796 -662.10263 45.838541 986.93651 -1694.8777 3.0646238 12.13843 2.4692874 13990.5 + 950 -624.30802 -663.36014 39.052124 1405.2111 290.61832 -665.78004 45.269372 983.76386 -1694.8133 2.4198995 11.723515 2.0708786 13990.5 + 1000 -624.30213 -659.49404 35.191918 1266.3094 -920.00206 -662.25664 42.950066 989.20183 -1694.4085 2.7625985 11.442653 1.8492839 13990.5 + 1050 -624.30371 -659.3839 35.080191 1262.2891 284.04674 -662.15204 45.828093 986.77381 -1694.7539 2.7681351 12.123317 1.8741591 13990.5 + 1100 -624.3052 -660.69507 36.389872 1309.4153 -282.65356 -663.18011 44.45192 987.28618 -1694.9182 2.4850386 11.032596 1.9763392 13990.5 + 1150 -624.30478 -657.75327 33.448496 1203.5759 1331.9067 -660.51356 48.445972 985.91346 -1694.873 2.7602894 13.583395 2.4702797 13990.5 + 1200 -624.30892 -664.76096 40.452036 1455.5841 -1970.8297 -666.85506 39.983487 988.02113 -1694.8597 2.0941031 9.5654747 1.9888352 13990.5 + 1250 -624.30486 -661.48101 37.176152 1337.708 1864.8469 -664.22952 48.84895 981.57501 -1694.6535 2.7485121 11.090466 1.9610957 13990.5 + 1300 -624.3122 -662.74179 38.429588 1382.8104 1775.1061 -665.4945 48.300257 980.84489 -1694.6396 2.7527096 11.276872 1.7562916 13990.5 + 1350 -624.30198 -659.95211 35.65013 1282.7973 -154.85356 -662.68735 44.54654 987.24605 -1694.4799 2.7352371 11.229424 2.4657127 13990.5 + 1400 -624.30362 -659.14451 34.840882 1253.6781 -159.66669 -662.01516 44.455993 988.18506 -1694.6562 2.87065 11.536771 1.6678 13990.5 + 1450 -624.30238 -661.91803 37.615642 1353.5222 993.97328 -664.55469 46.579213 983.57987 -1694.7138 2.6366597 11.343434 2.3751981 13990.5 + 1500 -624.31198 -659.70757 35.395599 1273.6385 2948.584 -662.67607 51.30697 980.45677 -1694.4398 2.9684904 11.953269 2.2096873 13990.5 +Loop time of 13.2154 on 1 procs for 1000 steps with 432 atoms + +Performance: 13.076 ns/day, 1.835 hours/ns, 75.669 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.363 | 11.363 | 11.363 | 0.0 | 85.98 +Bond | 0.0040638 | 0.0040638 | 0.0040638 | 0.0 | 0.03 +Kspace | 1.1573 | 1.1573 | 1.1573 | 0.0 | 8.76 +Neigh | 0.50039 | 0.50039 | 0.50039 | 0.0 | 3.79 +Comm | 0.17365 | 0.17365 | 0.17365 | 0.0 | 1.31 +Output | 0.00093961 | 0.00093961 | 0.00093961 | 0.0 | 0.01 +Modify | 0.0068541 | 0.0068541 | 0.0068541 | 0.0 | 0.05 +Other | | 0.009295 | | | 0.07 + +Nlocal: 432 ave 432 max 432 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9380 ave 9380 max 9380 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 296922 ave 296922 max 296922 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 296922 +Ave neighs/atom = 687.319 +Ave special neighs/atom = 1 +Neighbor list builds = 47 +Dangerous builds = 0 +Total wall time: 0:00:19 diff --git a/examples/coreshell/log.27Nov18.coreshell.g++.4 b/examples/coreshell/log.27Nov18.coreshell.g++.4 new file mode 100644 index 0000000000..597ffc2660 --- /dev/null +++ b/examples/coreshell/log.27Nov18.coreshell.g++.4 @@ -0,0 +1,218 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Testsystem for core-shell model compared to Mitchel and Finchham +# Hendrik Heenen, June 2014 + +# ------------------------ INITIALIZATION ---------------------------- + +units metal +dimension 3 +boundary p p p +atom_style full + +# ----------------------- ATOM DEFINITION ---------------------------- + +fix csinfo all property/atom i_CSID +read_data data.coreshell fix csinfo NULL CS-Info + orthogonal box = (0 0 0) to (24.096 24.096 24.096) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 432 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 216 bonds + 1 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + +group cores type 1 2 +216 atoms in group cores +group shells type 3 4 +216 atoms in group shells + +neighbor 2.0 bin +comm_modify vel yes + +# ------------------------ FORCE FIELDS ------------------------------ + +kspace_style ewald 1.0e-6 +pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D +pair_coeff * * 0.0 1.000 0.00 0.00 0.00 +pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na +pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl +pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl + +bond_style harmonic +bond_coeff 1 63.014 0.0 +bond_coeff 2 25.724 0.0 + +# ------------------------ Equilibration Run ------------------------------- + +reset_timestep 0 + +thermo 50 +thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol + +compute CStemp all temp/cs cores shells +compute thermo_press_lmp all pressure thermo_temp # press for correct kinetic scalar + +# output via chunk method + +#compute prop all property/atom i_CSID +#compute cs_chunk all chunk/atom c_prop +#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 +#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector + +thermo_modify temp CStemp press thermo_press_lmp + +# velocity bias option + +velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CStemp +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 22 + ghost atom cutoff = 22 + binsize = 11, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair born/coul/long/cs, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +velocity all scale 1427 temp CStemp + +# thermostating using the core/shell decoupling + +fix thermoberendsen all temp/berendsen 1427 1427 0.4 +fix nve all nve +fix_modify thermoberendsen temp CStemp + +# 2 fmsec timestep + +timestep 0.002 +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 15.58 | 15.58 | 15.58 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.9851021e-14 4.2188475e-15 13990.5 + 50 -634.17349 -666.17817 32.004686 1151.6234 -4029.8405 -667.9562 37.809075 989.23283 -1694.9981 1.778024 9.7133822 2.1917966 13990.5 + 100 -631.93517 -661.91227 29.977104 1078.665 -3171.8044 -664.0672 39.333371 991.36937 -1694.7699 2.1549315 11.091441 2.1704346 13990.5 + 150 -630.16822 -663.12423 32.956001 1185.8545 143.24615 -665.48041 46.253736 982.97453 -1694.7087 2.3561828 11.467862 2.1651517 13990.5 + 200 -628.6223 -663.6493 35.026994 1260.375 -1622.4428 -665.96885 41.661825 986.81675 -1694.4474 2.3195537 10.597709 2.9538132 13990.5 + 250 -627.31146 -662.01843 34.706968 1248.8595 -1509.7149 -664.50329 42.10159 987.90193 -1694.5068 2.4848612 10.392642 1.693337 13990.5 + 300 -626.57661 -660.97479 34.398178 1237.7483 -1637.8266 -663.48071 41.653258 989.53241 -1694.6664 2.5059269 11.20455 2.2814851 13990.5 + 350 -625.91971 -665.3583 39.438589 1419.1172 -1351.5076 -667.61665 41.582479 985.53388 -1694.733 2.2583457 10.831559 1.8963688 13990.5 + 400 -625.24855 -660.7758 35.527253 1278.3758 -423.70384 -663.1256 43.89223 987.7506 -1694.7684 2.349799 11.523597 2.1775994 13990.5 + 450 -624.6774 -662.88749 38.210092 1374.9123 1108.7784 -665.43272 46.964156 982.35233 -1694.7492 2.5452316 11.002239 2.001871 13990.5 + 500 -624.30227 -661.97992 37.677648 1355.7533 -998.38049 -664.60501 42.373269 987.58935 -1694.5676 2.6250971 11.151918 2.8270144 13990.5 +Loop time of 1.9801 on 4 procs for 500 steps with 432 atoms + +Performance: 43.634 ns/day, 0.550 hours/ns, 252.513 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.3316 | 1.4349 | 1.5717 | 7.8 | 72.46 +Bond | 0.00071955 | 0.00073642 | 0.00075316 | 0.0 | 0.04 +Kspace | 0.20621 | 0.33644 | 0.43824 | 15.7 | 16.99 +Neigh | 0.065812 | 0.065825 | 0.065829 | 0.0 | 3.32 +Comm | 0.11763 | 0.12492 | 0.12828 | 1.2 | 6.31 +Output | 0.0004766 | 0.0020956 | 0.0069461 | 6.1 | 0.11 +Modify | 0.0063045 | 0.0071256 | 0.0079646 | 1.0 | 0.36 +Other | | 0.008101 | | | 0.41 + +Nlocal: 108 ave 119 max 102 min +Histogram: 1 1 1 0 0 0 0 0 0 1 +Nghost: 6516 ave 6545 max 6491 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 74337.8 ave 81248 max 69989 min +Histogram: 1 0 2 0 0 0 0 0 0 1 + +Total # of neighbors = 297351 +Ave neighs/atom = 688.312 +Ave special neighs/atom = 1 +Neighbor list builds = 22 +Dangerous builds = 0 + +unfix thermoberendsen + +# ------------------------ Dynamic Run ------------------------------- + +run 1000 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 15.59 | 15.65 | 15.84 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 500 -624.30215 -661.97992 37.677763 1355.7575 -998.38049 -664.60501 42.373269 987.58935 -1694.5676 2.6250971 11.151918 2.8270144 13990.5 + 550 -624.307 -662.13312 37.826117 1361.0957 331.61441 -664.76755 45.316291 984.7202 -1694.804 2.6344363 10.876847 1.9725627 13990.5 + 600 -624.30999 -661.82604 37.516052 1349.9386 -977.02006 -664.34278 42.382897 987.88146 -1694.6071 2.5167365 10.214195 1.7874159 13990.5 + 650 -624.30519 -659.19917 34.89398 1255.5887 549.29026 -661.95827 46.555452 986.06834 -1694.5821 2.7590968 13.15971 2.150802 13990.5 + 700 -624.30925 -661.91134 37.60209 1353.0346 -173.75617 -664.45296 44.284848 985.83333 -1694.5711 2.5416162 10.971743 1.9844905 13990.5 + 750 -624.30957 -660.4111 36.101528 1299.0399 1224.7615 -663.20844 47.513495 984.09149 -1694.8134 2.7973427 11.760288 2.1436426 13990.5 + 800 -624.30443 -660.29859 35.994159 1295.1764 274.44426 -663.2484 45.216978 986.25498 -1694.7204 2.9498134 11.512509 4.0054687 13990.5 + 850 -624.30771 -663.64907 39.341363 1415.6187 339.0107 -666.13161 45.126833 983.39086 -1694.6493 2.4825413 11.020953 2.1719529 13990.5 + 900 -624.30318 -658.79061 34.487426 1240.9597 326.93573 -661.83606 45.870868 987.13858 -1694.8455 3.0454534 12.639272 1.9516031 13990.5 + 950 -624.30275 -663.63565 39.332892 1415.3139 -668.82258 -665.98818 43.090661 985.63359 -1694.7124 2.3525337 11.014784 2.0742438 13990.5 + 1000 -624.30302 -660.58037 36.27735 1305.3665 -725.43356 -663.2066 42.991534 988.36047 -1694.5586 2.6262239 10.521127 1.8763991 13990.5 + 1050 -624.30291 -660.75751 36.454601 1311.7445 834.87442 -663.66586 46.551242 984.37581 -1694.5929 2.908347 11.20897 2.1312758 13990.5 + 1100 -624.30709 -663.05705 38.749955 1394.3381 -709.57897 -665.5853 42.840927 986.33077 -1694.757 2.5282501 10.630015 2.6077838 13990.5 + 1150 -624.31167 -663.16861 38.856933 1398.1875 -202.93169 -665.68694 43.83137 985.37199 -1694.8903 2.5183367 10.924515 2.9847813 13990.5 + 1200 -624.30447 -660.45656 36.152088 1300.8592 -490.40029 -663.44614 43.512278 987.25887 -1694.2173 2.9895748 11.017505 2.1685389 13990.5 + 1250 -624.3046 -661.95895 37.654347 1354.9149 -1405.9374 -664.49438 41.407094 988.59571 -1694.4972 2.5354305 11.05786 2.0138426 13990.5 + 1300 -624.30002 -659.01152 34.711493 1249.0223 414.13124 -661.65532 45.873988 986.98863 -1694.5179 2.6438076 11.612439 2.2823703 13990.5 + 1350 -624.31114 -659.05277 34.741631 1250.1068 795.03396 -661.48604 46.584896 986.7784 -1694.8493 2.43327 10.382832 1.616191 13990.5 + 1400 -624.30512 -661.30058 36.995459 1331.2062 -1144.6328 -663.78961 41.970109 989.12976 -1694.8895 2.4890256 9.9264597 2.1371617 13990.5 + 1450 -624.30479 -657.8718 33.567014 1207.8406 980.42716 -660.87614 47.207833 986.87048 -1694.9545 3.004339 11.783025 2.7986076 13990.5 + 1500 -624.30058 -658.54923 34.248643 1232.3676 -728.22612 -661.1865 43.605107 989.73327 -1694.5249 2.6372721 11.688084 2.5466244 13990.5 +Loop time of 4.08004 on 4 procs for 1000 steps with 432 atoms + +Performance: 42.353 ns/day, 0.567 hours/ns, 245.096 timesteps/s +97.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.7379 | 2.8952 | 3.2162 | 11.5 | 70.96 +Bond | 0.0014176 | 0.0015033 | 0.0016136 | 0.2 | 0.04 +Kspace | 0.47825 | 0.7808 | 0.93251 | 20.9 | 19.14 +Neigh | 0.13731 | 0.13815 | 0.13904 | 0.2 | 3.39 +Comm | 0.23139 | 0.25066 | 0.2586 | 2.2 | 6.14 +Output | 0.0010233 | 0.0015535 | 0.0031006 | 2.3 | 0.04 +Modify | 0.0025311 | 0.0026742 | 0.0028279 | 0.2 | 0.07 +Other | | 0.00951 | | | 0.23 + +Nlocal: 108 ave 116 max 98 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 6461.75 ave 6504 max 6437 min +Histogram: 2 0 0 0 1 0 0 0 0 1 +Neighs: 74412.8 ave 81159 max 68634 min +Histogram: 1 0 0 1 1 0 0 0 0 1 + +Total # of neighbors = 297651 +Ave neighs/atom = 689.007 +Ave special neighs/atom = 1 +Neighbor list builds = 46 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.1 b/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.1 new file mode 100644 index 0000000000..109e556b7a --- /dev/null +++ b/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.1 @@ -0,0 +1,278 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Testsystem for core-shell model compared to Mitchell and Fincham +# Hendrik Heenen, June 2014 + +# ------------------------ INITIALIZATION ---------------------------- + +units metal +dimension 3 +boundary p p p +atom_style full + +# ----------------------- ATOM DEFINITION ---------------------------- + +fix csinfo all property/atom i_CSID +read_data data.coreshell fix csinfo NULL CS-Info + orthogonal box = (0 0 0) to (24.096 24.096 24.096) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 432 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 216 bonds + 1 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + +group cores type 1 2 +216 atoms in group cores +group shells type 3 4 +216 atoms in group shells + +neighbor 2.0 bin +comm_modify vel yes + +# ------------------------ FORCE FIELDS ------------------------------ + +kspace_style ewald 1.0e-6 +pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D +pair_coeff * * 0.0 1.000 0.00 0.00 0.00 +pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na +pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl +pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl + +bond_style harmonic +bond_coeff 1 63.014 0.0 +bond_coeff 2 25.724 0.0 + +# ------------------------ Equilibration Run ------------------------------- + +reset_timestep 0 + +thermo 50 +thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol + +compute CStemp all temp/cs cores shells +compute thermo_press_lmp all pressure thermo_temp # press for correct kinetic scalar + +# output via chunk method + +#compute prop all property/atom i_CSID +#compute cs_chunk all chunk/atom c_prop +#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 +#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector + +thermo_modify temp CStemp press thermo_press_lmp + +# 2 fmsec timestep + +timestep 0.002 + +# velocity bias option + +velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CStemp +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 22 + ghost atom cutoff = 22 + binsize = 11, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair born/coul/long/cs, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +velocity all scale 1427 temp CStemp + +# thermostating using the core/shell decoupling + +fix thermoberendsen all temp/berendsen 1427 1427 0.4 +fix nve all nve +fix_modify thermoberendsen temp CStemp + +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 17.29 | 17.29 | 17.29 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.7895988e-14 3.594347e-15 13990.5 + 50 -634.17327 -666.17818 32.004909 1151.6314 -4029.8418 -667.9562 37.809071 989.23283 -1694.9981 1.7780231 9.7133792 2.191797 13990.5 + 100 -631.93507 -661.91226 29.977186 1078.6679 -3171.7799 -664.06719 39.33341 991.36934 -1694.7699 2.1549313 11.091423 2.1704389 13990.5 + 150 -630.16811 -663.12417 32.956056 1185.8565 143.26508 -665.48036 46.253769 982.97454 -1694.7087 2.3561935 11.467913 2.1652595 13990.5 + 200 -628.62323 -663.64922 35.025998 1260.3391 -1622.4126 -665.96878 41.661879 986.81675 -1694.4474 2.3195587 10.597709 2.9538262 13990.5 + 250 -627.31045 -662.01825 34.7078 1248.8894 -1509.6621 -664.50312 42.101718 987.90197 -1694.5068 2.4848739 10.392757 1.6933711 13990.5 + 300 -626.57622 -660.97494 34.39872 1237.7678 -1637.8094 -663.48087 41.653234 989.53228 -1694.6664 2.5059303 11.204361 2.2809738 13990.5 + 350 -625.91962 -665.35837 39.438749 1419.123 -1351.4779 -667.6167 41.582456 985.53382 -1694.733 2.2583289 10.83106 1.8963347 13990.5 + 400 -625.24849 -660.77642 35.527934 1278.4003 -424.45104 -663.12602 43.890331 987.75201 -1694.7684 2.3495966 11.521966 2.175931 13990.5 + 450 -624.67743 -662.88678 38.209353 1374.8857 1109.0155 -665.43212 46.964803 982.35208 -1694.749 2.5453383 11.002405 2.0014356 13990.5 + 500 -624.30215 -661.97859 37.676437 1355.7098 -998.57286 -664.60382 42.373117 987.59021 -1694.5671 2.625227 11.153883 2.8270306 13990.5 +Loop time of 6.42035 on 1 procs for 500 steps with 432 atoms + +Performance: 13.457 ns/day, 1.783 hours/ns, 77.877 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.5082 | 5.5082 | 5.5082 | 0.0 | 85.79 +Bond | 0.0019779 | 0.0019779 | 0.0019779 | 0.0 | 0.03 +Kspace | 0.57472 | 0.57472 | 0.57472 | 0.0 | 8.95 +Neigh | 0.23256 | 0.23256 | 0.23256 | 0.0 | 3.62 +Comm | 0.086275 | 0.086275 | 0.086275 | 0.0 | 1.34 +Output | 0.00044322 | 0.00044322 | 0.00044322 | 0.0 | 0.01 +Modify | 0.012263 | 0.012263 | 0.012263 | 0.0 | 0.19 +Other | | 0.003893 | | | 0.06 + +Nlocal: 432 ave 432 max 432 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9338 ave 9338 max 9338 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 297354 ave 297354 max 297354 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 297354 +Ave neighs/atom = 688.319 +Ave special neighs/atom = 1 +Neighbor list builds = 22 +Dangerous builds = 0 + +unfix thermoberendsen +unfix nve + +fix npt_equ all npt temp 1427 1427 0.04 iso 0 0 0.4 +fix_modify npt_equ temp CStemp press thermo_press_lmp # pressure for correct kinetic scalar + +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 17.29 | 17.29 | 17.29 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 500 -624.30215 -661.97859 37.676437 1355.7098 -998.57286 -664.60382 42.373117 987.59021 -1694.5671 2.625227 11.153883 2.8270306 13990.5 + 550 -615.79469 -659.53309 43.738406 1573.8374 1470.2728 -662.39233 46.796275 985.55051 -1694.7391 2.8592421 11.816222 2.0435827 13959.536 + 600 -620.1583 -658.0606 37.902298 1363.8369 -1976.0423 -660.62151 39.901722 994.0484 -1694.5716 2.5609098 10.333069 1.7024274 14344.949 + 650 -614.79177 -655.16909 40.377318 1452.8955 1369.3632 -658.06385 47.296696 989.25356 -1694.6141 2.8947623 12.7805 2.1488232 14305.838 + 700 -619.96986 -659.64497 39.675118 1427.6282 455.78012 -662.19977 45.29754 986.93209 -1694.4294 2.554791 10.780261 2.0068563 14432.96 + 750 -616.0691 -654.36205 38.29295 1377.8937 -241.86552 -657.41633 43.727007 993.62088 -1694.7642 3.0542755 11.706048 3.3689413 14829.924 + 800 -614.16673 -652.57617 38.409441 1382.0854 -552.93403 -655.00904 42.769389 996.79939 -1694.5778 2.4328709 11.05387 1.3686986 15324.864 + 850 -611.92307 -653.97912 42.056053 1513.3013 -685.21581 -656.44468 42.244804 996.03742 -1694.7269 2.4655655 11.681335 1.9879277 15467.594 + 900 -615.2753 -658.9358 43.660499 1571.034 -243.69139 -661.50959 43.098716 989.8049 -1694.4132 2.573788 10.674681 1.6541594 14964.747 + 950 -617.05845 -655.42907 38.370623 1380.6886 607.78657 -658.13583 45.497112 991.02201 -1694.6549 2.7067567 12.70332 2.4561886 14472.808 + 1000 -618.16527 -657.57073 39.405466 1417.9254 416.69904 -660.62844 45.155689 988.77163 -1694.5558 3.0577092 11.730529 1.8247965 14362.255 +Loop time of 6.22988 on 1 procs for 500 steps with 432 atoms + +Performance: 13.869 ns/day, 1.731 hours/ns, 80.258 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.2759 | 5.2759 | 5.2759 | 0.0 | 84.69 +Bond | 0.0028615 | 0.0028615 | 0.0028615 | 0.0 | 0.05 +Kspace | 0.57661 | 0.57661 | 0.57661 | 0.0 | 9.26 +Neigh | 0.24735 | 0.24735 | 0.24735 | 0.0 | 3.97 +Comm | 0.083591 | 0.083591 | 0.083591 | 0.0 | 1.34 +Output | 0.0004077 | 0.0004077 | 0.0004077 | 0.0 | 0.01 +Modify | 0.03937 | 0.03937 | 0.03937 | 0.0 | 0.63 +Other | | 0.003794 | | | 0.06 + +Nlocal: 432 ave 432 max 432 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9025 ave 9025 max 9025 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 290026 ave 290026 max 290026 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 290026 +Ave neighs/atom = 671.356 +Ave special neighs/atom = 1 +Neighbor list builds = 24 +Dangerous builds = 0 + +unfix npt_equ + +# ------------------------ Dynamic Run ------------------------------- + +fix npt_dyn all npt temp 1427 1427 0.04 iso 0 0 0.4 +fix_modify npt_dyn temp CStemp press thermo_press_lmp # pressure for correct kinetic scalar +run 1000 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175163 + estimated absolute RMS force accuracy = 1.51081e-05 + estimated relative force accuracy = 1.0492e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 17.29 | 17.29 | 17.29 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 1000 -618.16527 -657.57073 39.405466 1417.9254 428.20902 -660.62844 45.155689 987.86858 -1693.6527 3.0577092 11.730529 1.8247964 14362.255 + 1050 -624.47216 -659.74932 35.277161 1269.3767 1023.4005 -662.65642 47.132969 983.86865 -1693.658 2.9071018 11.128238 2.4855361 14240.043 + 1100 -617.14258 -658.07887 40.936282 1473.0087 -664.49152 -660.92582 42.224469 990.57675 -1693.727 2.8469569 11.75658 2.4149634 14408.926 + 1150 -619.61978 -657.61169 37.991909 1367.0614 -465.46433 -660.31084 43.105221 989.99318 -1693.4092 2.699159 10.782062 2.1690057 14554.158 + 1200 -615.99237 -657.2408 41.248432 1484.2407 -813.35983 -660.07564 41.678196 991.8399 -1693.5937 2.8348373 10.545446 2.1121233 14555.425 + 1250 -626.68392 -658.41883 31.734906 1141.9159 -539.79478 -660.84299 44.20365 988.80199 -1693.8486 2.4241661 11.395962 2.135851 14575.926 + 1300 -617.50678 -657.21802 39.711239 1428.928 1685.6002 -659.90723 48.138182 985.72575 -1693.7712 2.6892077 12.721388 1.8776177 14369.009 + 1350 -622.21239 -658.79581 36.583414 1316.3796 -799.75314 -661.51494 42.733724 989.2771 -1693.5258 2.7191347 11.211319 2.3809801 14613.392 + 1400 -614.34638 -654.89562 40.549232 1459.0815 1192.2924 -657.82292 46.886633 988.93592 -1693.6455 2.927306 11.818277 2.0357932 15050.984 + 1450 -614.74459 -651.08463 36.340044 1307.6224 -941.42354 -653.80733 42.373988 997.48406 -1693.6654 2.7226961 11.57117 1.9107106 15667.952 + 1500 -608.59499 -648.39988 39.804894 1432.2979 -1036.978 -651.42193 41.284322 1000.5742 -1693.2804 3.0220531 10.965804 1.9225015 15657.799 + 1550 -616.75971 -653.701 36.941282 1329.2567 956.80287 -656.37213 46.958724 990.63147 -1693.9623 2.6711387 11.270035 2.1646421 15283.769 + 1600 -614.00249 -655.22129 41.218796 1483.1743 162.86851 -658.03388 44.578553 990.97117 -1693.5836 2.8125894 12.001595 2.1613558 15014.979 + 1650 -620.21853 -658.7696 38.551071 1387.1817 -15.994219 -661.3575 44.417732 988.12137 -1693.8966 2.5879024 11.60402 2.2188998 14421.685 + 1700 -621.65896 -660.14043 38.481472 1384.6773 374.01196 -662.88364 45.046442 985.61668 -1693.5468 2.7432107 11.020422 2.0354876 13843.115 + 1750 -626.52363 -662.7125 36.188873 1302.1828 246.87832 -665.23873 45.613954 983.17191 -1694.0246 2.5262291 12.801515 2.4291407 13584.377 + 1800 -620.84342 -658.64915 37.805737 1360.3624 1419.6927 -661.54346 47.476679 984.72199 -1693.7421 2.8943029 13.331926 2.1690676 13249.778 + 1850 -618.96345 -661.03809 42.074638 1513.9701 1692.1613 -663.74409 47.099139 982.71413 -1693.5574 2.7060076 11.521214 1.6552929 13269.978 + 1900 -622.60007 -658.68592 36.085857 1298.476 -1580.4079 -661.4614 41.163528 991.0778 -1693.7027 2.7754739 10.427911 1.946547 14057.045 + 1950 -613.97975 -656.9327 42.952955 1545.5745 -1163.9497 -659.48701 40.688202 993.61603 -1693.7912 2.5543044 10.621596 2.2183688 14489.331 + 2000 -613.52562 -654.78948 41.263864 1484.796 646.07695 -657.76756 45.489785 990.40525 -1693.6626 2.978081 12.135455 2.3293 14760.827 +Loop time of 12.672 on 1 procs for 1000 steps with 432 atoms + +Performance: 13.636 ns/day, 1.760 hours/ns, 78.914 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 10.73 | 10.73 | 10.73 | 0.0 | 84.67 +Bond | 0.0057325 | 0.0057325 | 0.0057325 | 0.0 | 0.05 +Kspace | 1.1532 | 1.1532 | 1.1532 | 0.0 | 9.10 +Neigh | 0.52571 | 0.52571 | 0.52571 | 0.0 | 4.15 +Comm | 0.17069 | 0.17069 | 0.17069 | 0.0 | 1.35 +Output | 0.00081754 | 0.00081754 | 0.00081754 | 0.0 | 0.01 +Modify | 0.078469 | 0.078469 | 0.078469 | 0.0 | 0.62 +Other | | 0.007788 | | | 0.06 + +Nlocal: 432 ave 432 max 432 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 8927 ave 8927 max 8927 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 281696 ave 281696 max 281696 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 281696 +Ave neighs/atom = 652.074 +Ave special neighs/atom = 1 +Neighbor list builds = 50 +Dangerous builds = 0 +Total wall time: 0:00:25 diff --git a/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.4 b/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.4 new file mode 100644 index 0000000000..679ee19a39 --- /dev/null +++ b/examples/coreshell/log.27Nov18.coreshell.thermostats.g++.4 @@ -0,0 +1,278 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Testsystem for core-shell model compared to Mitchell and Fincham +# Hendrik Heenen, June 2014 + +# ------------------------ INITIALIZATION ---------------------------- + +units metal +dimension 3 +boundary p p p +atom_style full + +# ----------------------- ATOM DEFINITION ---------------------------- + +fix csinfo all property/atom i_CSID +read_data data.coreshell fix csinfo NULL CS-Info + orthogonal box = (0 0 0) to (24.096 24.096 24.096) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 432 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 216 bonds + 1 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + +group cores type 1 2 +216 atoms in group cores +group shells type 3 4 +216 atoms in group shells + +neighbor 2.0 bin +comm_modify vel yes + +# ------------------------ FORCE FIELDS ------------------------------ + +kspace_style ewald 1.0e-6 +pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D +pair_coeff * * 0.0 1.000 0.00 0.00 0.00 +pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na +pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl +pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl + +bond_style harmonic +bond_coeff 1 63.014 0.0 +bond_coeff 2 25.724 0.0 + +# ------------------------ Equilibration Run ------------------------------- + +reset_timestep 0 + +thermo 50 +thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol + +compute CStemp all temp/cs cores shells +compute thermo_press_lmp all pressure thermo_temp # press for correct kinetic scalar + +# output via chunk method + +#compute prop all property/atom i_CSID +#compute cs_chunk all chunk/atom c_prop +#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 +#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector + +thermo_modify temp CStemp press thermo_press_lmp + +# 2 fmsec timestep + +timestep 0.002 + +# velocity bias option + +velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CStemp +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 22 + ghost atom cutoff = 22 + binsize = 11, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair born/coul/long/cs, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +velocity all scale 1427 temp CStemp + +# thermostating using the core/shell decoupling + +fix thermoberendsen all temp/berendsen 1427 1427 0.4 +fix nve all nve +fix_modify thermoberendsen temp CStemp + +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 15.58 | 15.58 | 15.58 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.9851021e-14 4.2188475e-15 13990.5 + 50 -634.17349 -666.17817 32.004686 1151.6234 -4029.8405 -667.9562 37.809075 989.23283 -1694.9981 1.778024 9.7133822 2.1917966 13990.5 + 100 -631.93517 -661.91227 29.977104 1078.665 -3171.8044 -664.0672 39.333371 991.36937 -1694.7699 2.1549315 11.091441 2.1704346 13990.5 + 150 -630.16822 -663.12423 32.956001 1185.8545 143.24615 -665.48041 46.253736 982.97453 -1694.7087 2.3561828 11.467862 2.1651517 13990.5 + 200 -628.6223 -663.6493 35.026994 1260.375 -1622.4428 -665.96885 41.661825 986.81675 -1694.4474 2.3195537 10.597709 2.9538132 13990.5 + 250 -627.31146 -662.01843 34.706968 1248.8595 -1509.7149 -664.50329 42.10159 987.90193 -1694.5068 2.4848612 10.392642 1.693337 13990.5 + 300 -626.57661 -660.97479 34.398178 1237.7483 -1637.8266 -663.48071 41.653258 989.53241 -1694.6664 2.5059269 11.20455 2.2814851 13990.5 + 350 -625.91971 -665.3583 39.438589 1419.1172 -1351.5076 -667.61665 41.582479 985.53388 -1694.733 2.2583457 10.831559 1.8963688 13990.5 + 400 -625.24855 -660.7758 35.527253 1278.3758 -423.70384 -663.1256 43.89223 987.7506 -1694.7684 2.349799 11.523597 2.1775994 13990.5 + 450 -624.6774 -662.88749 38.210092 1374.9123 1108.7784 -665.43272 46.964156 982.35233 -1694.7492 2.5452316 11.002239 2.001871 13990.5 + 500 -624.30227 -661.97992 37.677648 1355.7533 -998.38049 -664.60501 42.373269 987.58935 -1694.5676 2.6250971 11.151918 2.8270144 13990.5 +Loop time of 1.9161 on 4 procs for 500 steps with 432 atoms + +Performance: 45.092 ns/day, 0.532 hours/ns, 260.946 timesteps/s +98.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.3101 | 1.4046 | 1.5088 | 5.9 | 73.31 +Bond | 0.00073409 | 0.00074953 | 0.00076699 | 0.0 | 0.04 +Kspace | 0.20996 | 0.30779 | 0.39708 | 12.0 | 16.06 +Neigh | 0.065428 | 0.065516 | 0.065591 | 0.0 | 3.42 +Comm | 0.12002 | 0.12628 | 0.13124 | 1.2 | 6.59 +Output | 0.00047278 | 0.00062203 | 0.0010662 | 0.0 | 0.03 +Modify | 0.0061893 | 0.0064721 | 0.0066924 | 0.2 | 0.34 +Other | | 0.004042 | | | 0.21 + +Nlocal: 108 ave 119 max 102 min +Histogram: 1 1 1 0 0 0 0 0 0 1 +Nghost: 6516 ave 6545 max 6491 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 74337.8 ave 81248 max 69989 min +Histogram: 1 0 2 0 0 0 0 0 0 1 + +Total # of neighbors = 297351 +Ave neighs/atom = 688.312 +Ave special neighs/atom = 1 +Neighbor list builds = 22 +Dangerous builds = 0 + +unfix thermoberendsen +unfix nve + +fix npt_equ all npt temp 1427 1427 0.04 iso 0 0 0.4 +fix_modify npt_equ temp CStemp press thermo_press_lmp # pressure for correct kinetic scalar + +run 500 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.175257 + estimated absolute RMS force accuracy = 1.49563e-05 + estimated relative force accuracy = 1.03866e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 15.59 | 15.65 | 15.84 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 500 -624.30215 -661.97992 37.677763 1355.7575 -998.38049 -664.60501 42.373269 987.58935 -1694.5676 2.6250971 11.151918 2.8270144 13990.5 + 550 -615.79609 -659.53283 43.736746 1573.7776 1474.8922 -662.39181 46.806896 985.54114 -1694.7399 2.858983 11.812288 2.0388938 13959.445 + 600 -620.14312 -658.02816 37.88504 1363.2159 -1969.137 -660.59055 39.918958 994.06227 -1694.5718 2.5623852 10.344301 1.7265857 14345.491 + 650 -614.8194 -655.14772 40.328319 1451.1323 1362.2165 -658.04338 47.289196 989.28021 -1694.6128 2.8956629 12.77476 2.1533941 14308.181 + 700 -620.02982 -659.67169 39.641877 1426.4321 437.18253 -662.22416 45.260412 986.94645 -1694.431 2.5524634 10.78512 2.0136405 14434.476 + 750 -616.07569 -654.50017 38.424477 1382.6265 -256.57498 -657.55133 43.657506 993.54515 -1694.754 3.0511562 11.572553 3.3391993 14823.696 + 800 -614.14966 -652.72914 38.579477 1388.2038 -584.44437 -655.14057 42.618194 996.80921 -1694.568 2.4114337 10.916418 1.4113651 15315.148 + 850 -612.16455 -653.84169 41.677135 1499.6667 -441.98725 -656.42973 42.922374 995.29998 -1694.6521 2.5880353 11.829353 2.135168 15445.115 + 900 -615.1092 -656.96201 41.85281 1505.988 374.2354 -659.60969 44.82627 989.96538 -1694.4013 2.6476821 11.074704 1.5105804 14959.613 + 950 -620.11829 -657.30032 37.18203 1337.9196 237.21273 -659.92487 44.925824 990.04501 -1694.8957 2.6245445 11.636019 2.6504684 14536.194 + 1000 -614.74144 -660.36077 45.619322 1641.5183 890.12037 -663.18359 45.139971 986.56616 -1694.8897 2.8228194 11.867666 2.4545613 14093.503 +Loop time of 1.93169 on 4 procs for 500 steps with 432 atoms + +Performance: 44.728 ns/day, 0.537 hours/ns, 258.841 timesteps/s +98.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.239 | 1.3639 | 1.4951 | 8.2 | 70.61 +Bond | 0.0009706 | 0.0010555 | 0.0010962 | 0.2 | 0.05 +Kspace | 0.22414 | 0.34623 | 0.46491 | 15.4 | 17.92 +Neigh | 0.069416 | 0.069507 | 0.06959 | 0.0 | 3.60 +Comm | 0.11461 | 0.12363 | 0.13004 | 1.6 | 6.40 +Output | 0.00040793 | 0.0006547 | 0.001394 | 0.0 | 0.03 +Modify | 0.022097 | 0.022964 | 0.023674 | 0.4 | 1.19 +Other | | 0.003751 | | | 0.19 + +Nlocal: 108 ave 130 max 94 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Nghost: 6344.5 ave 6406 max 6272 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Neighs: 72679.5 ave 88315 max 61830 min +Histogram: 1 0 1 0 1 0 0 0 0 1 + +Total # of neighbors = 290718 +Ave neighs/atom = 672.958 +Ave special neighs/atom = 1 +Neighbor list builds = 24 +Dangerous builds = 0 + +unfix npt_equ + +# ------------------------ Dynamic Run ------------------------------- + +fix npt_dyn all npt temp 1427 1427 0.04 iso 0 0 0.4 +fix_modify npt_dyn temp CStemp press thermo_press_lmp # pressure for correct kinetic scalar +run 1000 +Ewald initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.17523 + estimated absolute RMS force accuracy = 1.49925e-05 + estimated relative force accuracy = 1.04117e-06 + KSpace vectors: actual max1d max3d = 257 5 665 + kxmax kymax kzmax = 5 5 5 +Per MPI rank memory allocation (min/avg/max) = 15.59 | 15.71 | 15.84 Mbytes +Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume + 1000 -614.74144 -660.36077 45.619322 1641.5183 897.55556 -663.18359 45.139971 986.31352 -1694.6371 2.8228194 11.867665 2.4545613 14093.503 + 1050 -618.94984 -658.03173 39.081888 1406.2821 5.4174147 -660.68647 43.84377 989.81944 -1694.3497 2.6547475 10.009866 1.6559553 14124.735 + 1100 -616.115 -652.50083 36.385826 1309.2698 246.27221 -655.60386 44.678646 993.96562 -1694.2481 3.1030335 12.845497 2.1365385 14269.044 + 1150 -612.77698 -655.40444 42.627458 1533.8622 -394.23637 -658.16511 42.232098 993.95417 -1694.3514 2.7606635 10.588799 2.0797438 14526.576 + 1200 -614.12785 -652.61572 38.487865 1384.9074 -1232.5709 -655.35877 40.844849 997.88225 -1694.0859 2.7430549 11.246738 2.4837618 14939.435 + 1250 -612.01665 -651.53067 39.514016 1421.8313 -532.88057 -654.28679 42.767165 997.1403 -1694.1943 2.7561288 12.258706 3.8726564 15369.672 + 1300 -616.56459 -654.91454 38.349957 1379.945 -41.331568 -657.57515 44.211159 992.57496 -1694.3613 2.6606091 11.147615 2.3545887 15492.237 + 1350 -609.61162 -652.77366 43.162036 1553.0979 672.33089 -655.82423 44.690532 993.39227 -1693.907 3.0505702 11.680426 1.9918324 15294.141 + 1400 -616.08355 -652.13969 36.056138 1297.4066 -1202.7428 -654.77053 41.470863 998.3537 -1694.5951 2.6308398 10.12054 1.9139605 15206.436 + 1450 -613.53416 -655.92542 42.391264 1525.3632 -225.70273 -658.53945 42.800387 993.30095 -1694.6408 2.61403 10.475263 1.5543043 14786.088 + 1500 -618.90281 -658.01769 39.114877 1407.4691 1689.1895 -660.56762 47.983304 985.87237 -1694.4233 2.5499298 12.160031 2.121879 14225.24 + 1550 -619.95625 -660.95261 40.996357 1475.1703 162.48311 -663.63715 44.435076 986.14893 -1694.2212 2.6845396 11.400162 2.1028833 14097.469 + 1600 -621.01142 -658.90113 37.889708 1363.3839 -1426.7573 -661.45407 41.336331 991.32904 -1694.1194 2.5529431 10.96667 1.8785672 14124.398 + 1650 -616.93204 -657.21145 40.27941 1449.3725 1600.8152 -659.95623 47.433021 987.26391 -1694.6532 2.7447834 12.068379 2.0232824 13868.26 + 1700 -613.94971 -656.25711 42.307399 1522.3455 -17.243012 -658.67143 43.416284 992.19931 -1694.287 2.4143179 10.33501 1.9231274 14268.199 + 1750 -614.52671 -652.83727 38.310551 1378.5271 -1505.7623 -655.2978 40.639683 998.21477 -1694.1523 2.4605373 10.777496 1.8915025 14892.754 + 1800 -608.85779 -650.27052 41.412727 1490.1526 -426.82921 -653.21627 42.824093 998.13559 -1694.176 2.9457492 12.624136 2.1758155 15177.014 + 1850 -614.3254 -653.44307 39.117675 1407.5698 -10.449183 -656.43604 44.1397 993.33969 -1693.9154 2.992966 11.306721 2.0406266 14987.262 + 1900 -617.0898 -655.8162 38.726395 1393.4904 -810.27608 -658.56819 42.357417 993.51569 -1694.4413 2.751989 11.117505 1.8829772 14850.207 + 1950 -615.58194 -657.41631 41.834372 1505.3246 1466.9904 -660.21529 47.446402 986.51421 -1694.1759 2.7989828 12.408148 2.0449602 14609.998 + 2000 -617.98223 -655.26933 37.287095 1341.7001 -728.80528 -658.12982 42.660772 993.38817 -1694.1788 2.8604933 11.117049 2.0691895 14608.511 +Loop time of 4.08624 on 4 procs for 1000 steps with 432 atoms + +Performance: 42.288 ns/day, 0.568 hours/ns, 244.724 timesteps/s +97.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5272 | 2.7629 | 3.169 | 14.9 | 67.62 +Bond | 0.001961 | 0.0021452 | 0.0023017 | 0.3 | 0.05 +Kspace | 0.48303 | 0.85591 | 1.0735 | 24.7 | 20.95 +Neigh | 0.14933 | 0.14943 | 0.14956 | 0.0 | 3.66 +Comm | 0.22499 | 0.25699 | 0.27433 | 3.8 | 6.29 +Output | 0.00085068 | 0.001357 | 0.0028689 | 2.4 | 0.03 +Modify | 0.048769 | 0.049731 | 0.051893 | 0.6 | 1.22 +Other | | 0.00775 | | | 0.19 + +Nlocal: 108 ave 118 max 100 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 6291.25 ave 6323 max 6256 min +Histogram: 1 1 0 0 0 0 0 0 0 2 +Neighs: 71221.2 ave 77896 max 66643 min +Histogram: 1 1 0 0 1 0 0 0 0 1 + +Total # of neighbors = 284885 +Ave neighs/atom = 659.456 +Ave special neighs/atom = 1 +Neighbor list builds = 50 +Dangerous builds = 0 +Total wall time: 0:00:07 diff --git a/examples/coreshell/log.22Sep17.coreshell.wolf.g++.1 b/examples/coreshell/log.27Nov18.coreshell.wolf.g++.1 similarity index 51% rename from examples/coreshell/log.22Sep17.coreshell.wolf.g++.1 rename to examples/coreshell/log.27Nov18.coreshell.wolf.g++.1 index 35c30913fc..de23733aca 100644 --- a/examples/coreshell/log.22Sep17.coreshell.wolf.g++.1 +++ b/examples/coreshell/log.27Nov18.coreshell.wolf.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (22 Sep 2017) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Testsystem for core-shell model compared to Mitchel and Finchham # Shamelessly copied from in.coreshell.dsf but this script uses Wolf summation. @@ -92,31 +93,31 @@ run 500 Per MPI rank memory allocation (min/avg/max) = 8.59 | 8.59 | 8.59 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume 0 -637.41039 -677.06805 39.657659 1427 -21302.622 -677.06805 1.6320365 -678.70009 0 0 1.2935454e-14 3.3306691e-15 13990.5 - 50 -635.62711 -667.67134 32.044236 1153.0465 -4533.0717 -669.45724 37.76997 -707.22721 0 1.7858939 9.6844521 2.2001656 13990.5 + 50 -635.62711 -667.67134 32.044236 1153.0465 -4533.0717 -669.45724 37.76997 -707.22721 0 1.7858938 9.684452 2.2001656 13990.5 100 -632.76337 -662.83035 30.066977 1081.8989 -3492.8736 -664.98454 39.197093 -704.18164 0 2.1541967 11.063962 2.1543406 13990.5 - 150 -630.82538 -663.70056 32.875182 1182.9464 -74.330324 -666.12202 46.263665 -712.38569 0 2.4214607 11.739683 2.7558416 13990.5 + 150 -630.82538 -663.70056 32.875182 1182.9464 -74.33032 -666.12202 46.263665 -712.38569 0 2.4214607 11.739683 2.7558416 13990.5 200 -629.1541 -664.54637 35.39227 1273.5187 -1707.5508 -666.87772 41.796197 -708.67391 0 2.3313445 10.594804 3.0025376 13990.5 - 250 -627.86587 -662.60879 34.742918 1250.1531 -1258.7537 -665.21416 43.017024 -708.23118 0 2.6053655 10.576999 1.8400986 13990.5 + 250 -627.86587 -662.60879 34.742918 1250.1531 -1258.7537 -665.21416 43.017024 -708.23118 0 2.6053655 10.576999 1.8400987 13990.5 300 -627.10755 -664.12897 37.021419 1332.1403 -1891.3466 -666.39618 40.769593 -707.16577 0 2.2672094 9.412943 1.2434258 13990.5 - 350 -626.27558 -665.04303 38.767448 1394.9676 -1436.8514 -667.47081 41.854746 -709.32556 0 2.4277827 10.304721 1.977594 13990.5 + 350 -626.27558 -665.04303 38.767449 1394.9676 -1436.8514 -667.47081 41.854746 -709.32556 0 2.4277827 10.304721 1.977594 13990.5 400 -625.55098 -661.86388 36.312896 1306.6455 -331.92076 -664.4632 44.426542 -708.88975 0 2.599325 11.081635 2.1734468 13990.5 - 450 -624.88626 -661.07359 36.187328 1302.1272 -2325.834 -663.6031 39.662697 -703.26579 0 2.5295037 9.9810051 1.3068929 13990.5 - 500 -623.87093 -660.24145 36.370525 1308.7192 410.85324 -662.86944 45.869201 -708.73864 0 2.6279856 10.592785 1.8162326 13990.5 -Loop time of 11.7065 on 1 procs for 500 steps with 432 atoms + 450 -624.88626 -661.07359 36.187328 1302.1272 -2325.834 -663.6031 39.662697 -703.26579 0 2.5295037 9.9810051 1.3068928 13990.5 + 500 -623.87093 -660.24145 36.370525 1308.7192 410.85327 -662.86944 45.869201 -708.73864 0 2.6279857 10.592786 1.8162328 13990.5 +Loop time of 9.56959 on 1 procs for 500 steps with 432 atoms -Performance: 7.381 ns/day, 3.252 hours/ns, 42.711 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 9.029 ns/day, 2.658 hours/ns, 52.249 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 11.535 | 11.535 | 11.535 | 0.0 | 98.54 -Bond | 0.001443 | 0.001443 | 0.001443 | 0.0 | 0.01 -Neigh | 0.10952 | 0.10952 | 0.10952 | 0.0 | 0.94 -Comm | 0.048796 | 0.048796 | 0.048796 | 0.0 | 0.42 -Output | 0.00038695 | 0.00038695 | 0.00038695 | 0.0 | 0.00 -Modify | 0.0067511 | 0.0067511 | 0.0067511 | 0.0 | 0.06 -Other | | 0.004243 | | | 0.04 +Pair | 9.2366 | 9.2366 | 9.2366 | 0.0 | 96.52 +Bond | 0.0020828 | 0.0020828 | 0.0020828 | 0.0 | 0.02 +Neigh | 0.22581 | 0.22581 | 0.22581 | 0.0 | 2.36 +Comm | 0.087387 | 0.087387 | 0.087387 | 0.0 | 0.91 +Output | 0.00043035 | 0.00043035 | 0.00043035 | 0.0 | 0.00 +Modify | 0.013176 | 0.013176 | 0.013176 | 0.0 | 0.14 +Other | | 0.004087 | | | 0.04 Nlocal: 432 ave 432 max 432 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -138,53 +139,53 @@ unfix thermoberendsen run 1000 Per MPI rank memory allocation (min/avg/max) = 8.59 | 8.59 | 8.59 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 500 -623.87093 -660.24145 36.370525 1308.7192 410.85324 -662.86944 45.869201 -708.73864 0 2.6279856 10.592785 1.8162326 13990.5 - 550 -623.95762 -659.99899 36.041371 1296.8752 -442.62446 -662.68699 44.004419 -706.69141 0 2.6879934 10.936057 1.7358509 13990.5 - 600 -624.04214 -661.21748 37.175332 1337.6785 47.615854 -663.76133 45.009742 -708.77107 0 2.5438549 11.431366 2.1185464 13990.5 - 650 -623.98279 -661.85255 37.86976 1362.6661 -1708.3823 -664.31138 40.933446 -705.24482 0 2.4588298 9.7960191 1.4159904 13990.5 - 700 -624.02941 -661.57484 37.54543 1350.9958 -124.09512 -663.95322 44.666402 -708.61962 0 2.3783801 10.518712 2.0854584 13990.5 - 750 -624.03935 -661.11619 37.076837 1334.1344 -1163.2721 -663.82553 42.1219 -705.94743 0 2.7093404 10.634859 1.9381654 13990.5 - 800 -623.98709 -659.43647 35.44938 1275.5737 -285.65702 -662.23782 44.650233 -706.88805 0 2.8013482 11.83459 3.4506407 13990.5 - 850 -623.96081 -661.77923 37.818422 1360.8188 -814.33212 -664.38161 42.860208 -707.24181 0 2.6023728 10.766451 2.9211132 13990.5 - 900 -623.96136 -662.98419 39.022831 1404.157 308.13105 -665.65877 45.053188 -710.71195 0 2.6745786 11.028799 1.8494322 13990.5 - 950 -623.91048 -660.63828 36.7278 1321.575 -445.31526 -663.79806 43.94833 -707.74639 0 3.1597729 11.852051 1.8238458 13990.5 - 1000 -623.90541 -661.03474 37.129332 1336.0233 522.57958 -663.50212 45.863261 -709.36538 0 2.4673781 10.949291 1.8614095 13990.5 - 1050 -624.01134 -660.99076 36.979422 1330.6291 -1710.2829 -663.67762 41.056102 -704.73372 0 2.6868521 10.86533 2.2154165 13990.5 - 1100 -624.02639 -660.86661 36.840225 1325.6204 1151.0236 -663.5066 47.207185 -710.71378 0 2.6399847 11.298044 1.8900703 13990.5 - 1150 -624.04418 -661.29819 37.254006 1340.5094 161.09847 -663.73735 45.222561 -708.95991 0 2.4391651 11.261119 2.2245673 13990.5 - 1200 -624.08628 -662.39932 38.313043 1378.6168 -1405.0927 -664.93121 41.728112 -706.65933 0 2.5318927 10.458041 2.1153159 13990.5 - 1250 -624.03036 -661.25661 37.226248 1339.5106 63.407721 -663.72719 45.086961 -708.81415 0 2.4705832 11.766021 2.2297809 13990.5 - 1300 -623.97475 -661.55998 37.585229 1352.4278 -763.66781 -663.80645 42.870244 -706.6767 0 2.2464703 10.098322 1.7614596 13990.5 - 1350 -623.93123 -660.30786 36.376631 1308.9389 -2389.8052 -663.04725 39.749029 -702.79628 0 2.7393936 10.879364 2.6622521 13990.5 - 1400 -623.86468 -658.44644 34.581765 1244.3543 2262.7586 -660.95368 50.10608 -711.05976 0 2.5072434 11.528291 1.7861906 13990.5 - 1450 -623.85494 -661.47216 37.617217 1353.5789 -1435.0174 -664.13587 41.701767 -705.83764 0 2.6637191 11.297444 2.0038345 13990.5 - 1500 -623.79928 -659.70124 35.901959 1291.8588 -198.39562 -662.57415 44.358482 -706.93263 0 2.872907 11.075746 2.2821286 13990.5 -Loop time of 23.4119 on 1 procs for 1000 steps with 432 atoms + 500 -623.87093 -660.24145 36.370525 1308.7192 410.85327 -662.86944 45.869201 -708.73864 0 2.6279857 10.592786 1.8162328 13990.5 + 550 -623.95762 -659.99899 36.041371 1296.8752 -442.62441 -662.68699 44.004419 -706.69141 0 2.6879934 10.936057 1.7358509 13990.5 + 600 -624.04214 -661.21748 37.175332 1337.6785 47.61587 -663.76133 45.009742 -708.77107 0 2.5438549 11.431366 2.1185465 13990.5 + 650 -623.98279 -661.85255 37.86976 1362.6661 -1708.3824 -664.31138 40.933446 -705.24482 0 2.4588297 9.7960192 1.4159906 13990.5 + 700 -624.02941 -661.57484 37.545431 1350.9958 -124.09619 -663.95322 44.666399 -708.61962 0 2.3783802 10.518712 2.0854583 13990.5 + 750 -624.03935 -661.11619 37.076842 1334.1346 -1163.274 -663.82553 42.121895 -705.94743 0 2.70934 10.634855 1.9381646 13990.5 + 800 -623.98709 -659.43647 35.449379 1275.5736 -285.65541 -662.23781 44.650237 -706.88805 0 2.8013481 11.83459 3.4506393 13990.5 + 850 -623.96081 -661.77923 37.81842 1360.8187 -814.33165 -664.3816 42.860208 -707.24181 0 2.6023716 10.766441 2.9211138 13990.5 + 900 -623.96136 -662.9842 39.02284 1404.1573 308.1419 -665.65877 45.053211 -710.71198 0 2.674576 11.028802 1.8494293 13990.5 + 950 -623.91049 -660.63827 36.727782 1321.5743 -445.29549 -663.79804 43.948376 -707.74641 0 3.1597692 11.852029 1.8238312 13990.5 + 1000 -623.90541 -661.03472 37.129304 1336.0223 522.59285 -663.50211 45.8633 -709.36541 0 2.4673901 10.949322 1.8613502 13990.5 + 1050 -624.01134 -660.99086 36.979522 1330.6327 -1710.3266 -663.6777 41.055997 -704.7337 0 2.6868396 10.865335 2.2154562 13990.5 + 1100 -624.02639 -660.86653 36.840144 1325.6175 1151.2194 -663.50657 47.207655 -710.71423 0 2.6400422 11.298226 1.8901962 13990.5 + 1150 -624.04418 -661.29792 37.253732 1340.4996 161.18555 -663.7371 45.222823 -708.95992 0 2.4391845 11.26132 2.2249572 13990.5 + 1200 -624.08629 -662.39857 38.312276 1378.5891 -1404.3216 -664.93056 41.729944 -706.6605 0 2.5319943 10.45796 2.1150356 13990.5 + 1250 -624.03031 -661.25639 37.226081 1339.5046 61.673399 -663.72681 45.083327 -708.81014 0 2.4704185 11.764377 2.2300033 13990.5 + 1300 -623.97477 -661.56221 37.587436 1352.5072 -766.14948 -663.8091 42.864064 -706.67316 0 2.2468911 10.098925 1.7609776 13990.5 + 1350 -623.93106 -660.2936 36.362535 1308.4317 -2387.7331 -663.03485 39.756427 -702.79127 0 2.7412491 10.88663 2.66284 13990.5 + 1400 -623.86405 -658.43845 34.574407 1244.0896 2274.8627 -660.9465 50.133006 -711.0795 0 2.5080438 11.530504 1.7943496 13990.5 + 1450 -623.85491 -661.52972 37.674807 1355.6511 -1417.2183 -664.20085 41.731022 -705.93187 0 2.6711331 11.299254 1.9911762 13990.5 + 1500 -623.80036 -659.86071 36.060348 1297.5581 -193.90288 -662.71759 44.340486 -707.05807 0 2.8568759 11.042693 2.2234298 13990.5 +Loop time of 19.4477 on 1 procs for 1000 steps with 432 atoms -Performance: 7.381 ns/day, 3.252 hours/ns, 42.713 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 8.885 ns/day, 2.701 hours/ns, 51.420 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 23.069 | 23.069 | 23.069 | 0.0 | 98.54 -Bond | 0.0029275 | 0.0029275 | 0.0029275 | 0.0 | 0.01 -Neigh | 0.22821 | 0.22821 | 0.22821 | 0.0 | 0.97 -Comm | 0.097941 | 0.097941 | 0.097941 | 0.0 | 0.42 -Output | 0.00074033 | 0.00074033 | 0.00074033 | 0.0 | 0.00 -Modify | 0.0042015 | 0.0042015 | 0.0042015 | 0.0 | 0.02 -Other | | 0.00865 | | | 0.04 +Pair | 18.754 | 18.754 | 18.754 | 0.0 | 96.43 +Bond | 0.0046136 | 0.0046136 | 0.0046136 | 0.0 | 0.02 +Neigh | 0.49116 | 0.49116 | 0.49116 | 0.0 | 2.53 +Comm | 0.17734 | 0.17734 | 0.17734 | 0.0 | 0.91 +Output | 0.00094318 | 0.00094318 | 0.00094318 | 0.0 | 0.00 +Modify | 0.007426 | 0.007426 | 0.007426 | 0.0 | 0.04 +Other | | 0.0122 | | | 0.06 Nlocal: 432 ave 432 max 432 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 9388 ave 9388 max 9388 min +Nghost: 9382 ave 9382 max 9382 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 297212 ave 297212 max 297212 min +Neighs: 297191 ave 297191 max 297191 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 297212 -Ave neighs/atom = 687.991 +Total # of neighbors = 297191 +Ave neighs/atom = 687.942 Ave special neighs/atom = 1 Neighbor list builds = 45 Dangerous builds = 0 -Total wall time: 0:00:35 +Total wall time: 0:00:29 diff --git a/examples/coreshell/log.22Sep17.coreshell.wolf.g++.4 b/examples/coreshell/log.27Nov18.coreshell.wolf.g++.4 similarity index 54% rename from examples/coreshell/log.22Sep17.coreshell.wolf.g++.4 rename to examples/coreshell/log.27Nov18.coreshell.wolf.g++.4 index 84f854cf67..e099e7ca4e 100644 --- a/examples/coreshell/log.22Sep17.coreshell.wolf.g++.4 +++ b/examples/coreshell/log.27Nov18.coreshell.wolf.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (22 Sep 2017) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Testsystem for core-shell model compared to Mitchel and Finchham # Shamelessly copied from in.coreshell.dsf but this script uses Wolf summation. @@ -94,29 +95,29 @@ Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fm 0 -637.41039 -677.06805 39.657659 1427 -21302.622 -677.06805 1.6320365 -678.70009 0 0 1.3530839e-14 3.6429193e-15 13990.5 50 -635.62704 -667.67108 32.044047 1153.0397 -4532.6842 -669.45828 37.771018 -707.2293 0 1.787201 9.6848095 2.2028349 13990.5 100 -632.76343 -662.83014 30.066711 1081.8893 -3493.0827 -664.98212 39.195967 -704.17809 0 2.151977 11.060773 2.1578583 13990.5 - 150 -630.82533 -663.70172 32.876385 1182.9897 -75.706974 -666.12608 46.261038 -712.38712 0 2.4243598 11.746728 2.7663319 13990.5 + 150 -630.82533 -663.70172 32.876385 1182.9897 -75.706966 -666.12608 46.261038 -712.38712 0 2.4243598 11.746728 2.7663319 13990.5 200 -629.15463 -664.55009 35.395466 1273.6337 -1707.9185 -666.88117 41.794868 -708.67604 0 2.331082 10.596229 3.0031523 13990.5 - 250 -627.86625 -662.60876 34.742511 1250.1384 -1263.5726 -665.214 43.005742 -708.21974 0 2.6052329 10.572641 1.841604 13990.5 - 300 -627.10829 -664.12159 37.013298 1331.8481 -1884.8587 -666.39136 40.786141 -707.1775 0 2.2697693 9.4160685 1.2472271 13990.5 + 250 -627.86625 -662.60876 34.742511 1250.1384 -1263.5726 -665.214 43.005742 -708.21974 0 2.6052329 10.572641 1.8416041 13990.5 + 300 -627.10829 -664.12159 37.013298 1331.8481 -1884.8587 -666.39136 40.786141 -707.1775 0 2.2697693 9.4160684 1.2472271 13990.5 350 -626.2729 -665.01858 38.745682 1394.1844 -1433.1302 -667.44315 41.864785 -709.30793 0 2.4245625 10.312641 1.9815612 13990.5 - 400 -625.54274 -661.84438 36.301638 1306.2404 -355.45544 -664.4483 44.370671 -708.81897 0 2.6039276 11.076154 2.1819703 13990.5 - 450 -624.88802 -661.12299 36.234964 1303.8413 -2356.6101 -663.6463 39.57847 -703.22477 0 2.523314 9.8995886 1.3113549 13990.5 - 500 -623.86344 -660.20235 36.338906 1307.5814 462.72862 -662.8515 45.983055 -708.83455 0 2.6491489 10.523732 1.6709561 13990.5 -Loop time of 4.63313 on 4 procs for 500 steps with 432 atoms + 400 -625.54274 -661.84438 36.301638 1306.2404 -355.45544 -664.4483 44.370671 -708.81897 0 2.6039277 11.076154 2.1819702 13990.5 + 450 -624.88802 -661.12299 36.234964 1303.8413 -2356.6102 -663.6463 39.57847 -703.22477 0 2.523314 9.8995886 1.3113549 13990.5 + 500 -623.86344 -660.20235 36.338906 1307.5814 462.72863 -662.8515 45.983055 -708.83455 0 2.6491489 10.523732 1.6709561 13990.5 +Loop time of 3.06159 on 4 procs for 500 steps with 432 atoms -Performance: 18.648 ns/day, 1.287 hours/ns, 107.919 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 28.221 ns/day, 0.850 hours/ns, 163.314 timesteps/s +95.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.8133 | 3.5934 | 4.4255 | 36.3 | 77.56 -Bond | 0.00042245 | 0.00050305 | 0.00059825 | 0.0 | 0.01 -Neigh | 0.0411 | 0.041561 | 0.04202 | 0.2 | 0.90 -Comm | 0.15622 | 0.9884 | 1.7686 | 69.2 | 21.33 -Output | 0.00028311 | 0.00031345 | 0.00040011 | 0.0 | 0.01 -Modify | 0.0039899 | 0.00403 | 0.0040654 | 0.0 | 0.09 -Other | | 0.004911 | | | 0.11 +Pair | 2.3967 | 2.4786 | 2.5323 | 3.3 | 80.96 +Bond | 0.00078011 | 0.00080734 | 0.00087595 | 0.0 | 0.03 +Neigh | 0.065675 | 0.065807 | 0.06593 | 0.0 | 2.15 +Comm | 0.43311 | 0.49538 | 0.58587 | 8.0 | 16.18 +Output | 0.00041747 | 0.00060827 | 0.0011797 | 0.0 | 0.02 +Modify | 0.0073676 | 0.016077 | 0.024872 | 6.9 | 0.53 +Other | | 0.004283 | | | 0.14 Nlocal: 108 ave 112 max 106 min Histogram: 2 0 0 1 0 0 0 0 0 1 @@ -138,53 +139,53 @@ unfix thermoberendsen run 1000 Per MPI rank memory allocation (min/avg/max) = 6.884 | 7.01 | 7.138 Mbytes Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 500 -623.86344 -660.20235 36.338906 1307.5814 462.72862 -662.8515 45.983055 -708.83455 0 2.6491489 10.523732 1.6709561 13990.5 - 550 -623.95339 -660.07946 36.126069 1299.9229 -362.67288 -662.8047 44.180832 -706.98553 0 2.725239 11.07199 2.0461377 13990.5 - 600 -624.04508 -661.27298 37.227902 1339.5701 110.39823 -663.90927 45.166569 -709.07584 0 2.6362911 11.747923 2.1846828 13990.5 + 500 -623.86344 -660.20235 36.338906 1307.5814 462.72863 -662.8515 45.983055 -708.83455 0 2.6491489 10.523732 1.6709561 13990.5 + 550 -623.95339 -660.07946 36.126069 1299.9229 -362.67285 -662.8047 44.180832 -706.98553 0 2.725239 11.07199 2.0461376 13990.5 + 600 -624.04508 -661.27298 37.227902 1339.5701 110.39822 -663.90927 45.166569 -709.07584 0 2.6362911 11.747923 2.1846828 13990.5 650 -623.9608 -661.50573 37.544934 1350.9779 -1594.4701 -663.91531 41.226571 -705.14188 0 2.4095736 10.022027 1.6264014 13990.5 - 700 -624.00658 -663.55636 39.549777 1423.1181 -588.9804 -665.88666 43.124023 -709.01068 0 2.3302979 9.924587 2.1027837 13990.5 - 750 -623.99813 -659.97695 35.978816 1294.6243 -364.1415 -662.75959 43.973556 -706.73315 0 2.782646 11.487832 1.8799695 13990.5 - 800 -624.01235 -661.04908 37.036728 1332.6911 -85.655852 -663.49204 44.570117 -708.06215 0 2.4429547 11.213149 1.6792926 13990.5 - 850 -624.02581 -659.39933 35.373519 1272.844 -1090.9179 -662.11969 42.375064 -704.49476 0 2.7203673 11.214629 2.2907474 13990.5 - 900 -624.09244 -663.33386 39.241421 1412.0225 303.76207 -666.00593 45.332458 -711.33839 0 2.6720667 11.897188 2.0599033 13990.5 - 950 -624.04544 -661.11578 37.070341 1333.9007 1637.6438 -663.61305 48.65892 -712.27197 0 2.49727 12.343774 2.429225 13990.5 - 1000 -623.95457 -661.51816 37.563586 1351.6491 -851.77182 -663.83594 42.813468 -706.64941 0 2.317782 10.251422 1.6922864 13990.5 - 1050 -623.98731 -662.01988 38.032562 1368.5242 -2123.9075 -664.72609 39.917382 -704.64348 0 2.706218 9.600838 1.7365559 13990.5 - 1100 -623.9653 -659.32023 35.354929 1272.1751 -436.90576 -662.14454 44.057776 -706.20232 0 2.8243167 11.267546 2.6807602 13990.5 - 1150 -624.02273 -665.13902 41.116293 1479.486 -128.13268 -667.4769 44.013761 -711.49066 0 2.3378768 10.406604 1.5102324 13990.5 - 1200 -623.97328 -663.08042 39.107135 1407.1905 -539.63284 -665.67946 43.319308 -708.99877 0 2.599042 10.632657 1.4608707 13990.5 - 1250 -623.92529 -661.81902 37.893723 1363.5284 1708.0621 -664.63624 48.396874 -713.03311 0 2.8172251 11.369352 1.8836979 13990.5 - 1300 -623.99283 -662.19734 38.204509 1374.7114 -820.77291 -664.34556 42.656202 -707.00176 0 2.1482151 10.186898 1.7081329 13990.5 - 1350 -623.99798 -658.70752 34.709535 1248.9519 776.28486 -662.01647 46.925412 -708.94188 0 3.3089536 12.457581 2.5027978 13990.5 - 1400 -623.96941 -662.15959 38.190183 1374.1959 880.21756 -664.90452 46.628183 -711.5327 0 2.7449282 11.918894 3.0466188 13990.5 - 1450 -623.95068 -662.25435 38.303671 1378.2795 -391.56711 -664.7631 43.644066 -708.40716 0 2.5087493 10.465803 1.8744864 13990.5 - 1500 -624.00637 -661.48756 37.481185 1348.684 430.69453 -664.32151 45.704366 -710.02587 0 2.8339501 11.650821 2.0752813 13990.5 -Loop time of 6.7003 on 4 procs for 1000 steps with 432 atoms + 700 -624.00658 -663.55636 39.549777 1423.1181 -588.98052 -665.88666 43.124023 -709.01068 0 2.3302979 9.9245872 2.1027837 13990.5 + 750 -623.99813 -659.97694 35.978814 1294.6243 -364.14087 -662.75959 43.973558 -706.73315 0 2.782646 11.487833 1.8799696 13990.5 + 800 -624.01235 -661.04908 37.03673 1332.6912 -85.65751 -663.49204 44.570113 -708.06215 0 2.4429544 11.213146 1.6792935 13990.5 + 850 -624.02581 -659.39932 35.373517 1272.8439 -1090.9176 -662.11969 42.375065 -704.49476 0 2.7203674 11.21463 2.2907477 13990.5 + 900 -624.09244 -663.33388 39.241435 1412.0231 303.76293 -666.00594 45.332457 -711.3384 0 2.6720661 11.89718 2.0599025 13990.5 + 950 -624.04544 -661.11578 37.070343 1333.9007 1637.6353 -663.61305 48.6589 -712.27195 0 2.4972693 12.343765 2.4292305 13990.5 + 1000 -623.95457 -661.51817 37.563599 1351.6495 -851.76774 -663.83595 42.813476 -706.64943 0 2.3177804 10.251415 1.6922809 13990.5 + 1050 -623.98731 -662.01986 38.032541 1368.5235 -2123.915 -664.72608 39.917367 -704.64345 0 2.7062234 9.6008351 1.7364324 13990.5 + 1100 -623.9653 -659.3203 35.355002 1272.1777 -436.97572 -662.14462 44.05761 -706.20223 0 2.8243234 11.267511 2.6807914 13990.5 + 1150 -624.02272 -665.13875 41.116028 1479.4764 -128.02349 -667.47666 44.014064 -711.49073 0 2.337912 10.406786 1.5105446 13990.5 + 1200 -623.97327 -663.08066 39.107391 1407.1997 -539.90459 -665.67972 43.318696 -708.99842 0 2.5990577 10.632743 1.4609102 13990.5 + 1250 -623.92529 -661.81994 37.894649 1363.5617 1707.6307 -664.63708 48.39571 -713.03279 0 2.8171362 11.368475 1.8834293 13990.5 + 1300 -623.99279 -662.19655 38.203765 1374.6846 -820.5362 -664.34485 42.656892 -707.00174 0 2.1482931 10.187738 1.7086422 13990.5 + 1350 -623.99805 -658.70847 34.710418 1248.9836 775.25351 -662.01721 46.922474 -708.93969 0 3.3087449 12.454651 2.5036539 13990.5 + 1400 -623.96952 -662.16086 38.191338 1374.2374 880.29949 -664.90588 46.628569 -711.53444 0 2.7450171 11.920421 3.0464811 13990.5 + 1450 -623.9503 -662.26105 38.310754 1378.5344 -394.54404 -664.76894 43.635444 -708.40439 0 2.5078923 10.460115 1.8699789 13990.5 + 1500 -624.00558 -661.4861 37.480516 1348.66 438.34419 -664.32045 45.721579 -710.04203 0 2.8343497 11.655942 2.0688262 13990.5 +Loop time of 6.53617 on 4 procs for 1000 steps with 432 atoms -Performance: 25.790 ns/day, 0.931 hours/ns, 149.247 timesteps/s -99.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 26.438 ns/day, 0.908 hours/ns, 152.995 timesteps/s +93.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.9613 | 6.0752 | 6.2064 | 4.1 | 90.67 -Bond | 0.00087095 | 0.00088993 | 0.00091671 | 0.0 | 0.01 -Neigh | 0.06494 | 0.064964 | 0.064987 | 0.0 | 0.97 -Comm | 0.41743 | 0.54863 | 0.6626 | 13.8 | 8.19 -Output | 0.00053867 | 0.00059268 | 0.00074867 | 0.0 | 0.01 -Modify | 0.0013288 | 0.0013592 | 0.0013841 | 0.1 | 0.02 -Other | | 0.008613 | | | 0.13 +Pair | 4.8738 | 5.0908 | 5.4162 | 10.1 | 77.89 +Bond | 0.0016415 | 0.0017839 | 0.0019331 | 0.3 | 0.03 +Neigh | 0.15882 | 0.15886 | 0.15894 | 0.0 | 2.43 +Comm | 0.93524 | 1.2478 | 1.4524 | 19.3 | 19.09 +Output | 0.00097799 | 0.0018684 | 0.0036883 | 2.5 | 0.03 +Modify | 0.0027459 | 0.0028836 | 0.0030859 | 0.2 | 0.04 +Other | | 0.03211 | | | 0.49 Nlocal: 108 ave 116 max 102 min Histogram: 2 0 0 0 0 0 0 1 0 1 Nghost: 6504.5 ave 6624 max 6380 min Histogram: 1 1 0 0 0 0 0 0 1 1 -Neighs: 74267 ave 79230 max 70993 min +Neighs: 74267.8 ave 79232 max 70988 min Histogram: 2 0 0 0 0 1 0 0 0 1 -Total # of neighbors = 297068 -Ave neighs/atom = 687.657 +Total # of neighbors = 297071 +Ave neighs/atom = 687.664 Ave special neighs/atom = 1 Neighbor list builds = 45 Dangerous builds = 0 -Total wall time: 0:00:11 +Total wall time: 0:00:09 diff --git a/examples/coreshell/log.5Oct16.coreshell.g++.1 b/examples/coreshell/log.5Oct16.coreshell.g++.1 deleted file mode 100644 index e1caf994b9..0000000000 --- a/examples/coreshell/log.5Oct16.coreshell.g++.1 +++ /dev/null @@ -1,209 +0,0 @@ -LAMMPS (5 Oct 2016) -# Testsystem for core-shell model compared to Mitchel and Finchham -# Hendrik Heenen, June 2014 - -# ------------------------ INITIALIZATION ---------------------------- - -units metal -dimension 3 -boundary p p p -atom_style full - -# ----------------------- ATOM DEFINITION ---------------------------- - -fix csinfo all property/atom i_CSID -read_data data.coreshell fix csinfo NULL CS-Info - orthogonal box = (0 0 0) to (24.096 24.096 24.096) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 432 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 216 bonds - 1 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors - -group cores type 1 2 -216 atoms in group cores -group shells type 3 4 -216 atoms in group shells - -neighbor 2.0 bin -comm_modify vel yes - -# ------------------------ FORCE FIELDS ------------------------------ - -kspace_style ewald 1.0e-6 -pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D -pair_coeff * * 0.0 1.000 0.00 0.00 0.00 -pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na -pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl -pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl - -bond_style harmonic -bond_coeff 1 63.014 0.0 -bond_coeff 2 25.724 0.0 - -# ------------------------ Equilibration Run ------------------------------- - -reset_timestep 0 - -thermo 50 -thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol - -compute CSequ all temp/cs cores shells - -# output via chunk method - -#compute prop all property/atom i_CSID -#compute cs_chunk all chunk/atom c_prop -#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 -#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector - -thermo_modify temp CSequ - -# velocity bias option - -velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CSequ -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 22 - ghost atom cutoff = 22 - binsize = 11 -> bins = 3 3 3 -velocity all scale 1427 temp CSequ - -fix thermoberendsen all temp/berendsen 1427 1427 0.4 -fix nve all nve -fix_modify thermoberendsen temp CSequ - -# 2 fmsec timestep - -timestep 0.002 -run 500 -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Memory usage per processor = 15.7472 Mbytes -Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.7895988e-14 3.594347e-15 13990.5 - 50 -634.17327 -666.17818 32.004909 1151.6314 -4030.3308 -667.95621 37.809071 989.23282 -1694.9981 1.7780231 9.7133792 2.1917971 13990.5 - 100 -631.93508 -661.91226 29.977186 1078.6679 -3172.6296 -664.0672 39.333409 991.36934 -1694.7699 2.1549314 11.091424 2.1704389 13990.5 - 150 -630.1681 -663.12416 32.956057 1185.8565 142.25543 -665.48036 46.253767 982.97455 -1694.7087 2.3561935 11.467914 2.1652594 13990.5 - 200 -628.62323 -663.64923 35.025998 1260.3391 -1623.5465 -665.96879 41.661877 986.81675 -1694.4474 2.3195587 10.597709 2.9538263 13990.5 - 250 -627.31045 -662.01825 34.707801 1248.8894 -1510.5567 -664.50313 42.101716 987.90197 -1694.5068 2.4848735 10.392755 1.6933702 13990.5 - 300 -626.57622 -660.97494 34.398716 1237.7677 -1638.6653 -663.48087 41.653234 989.53228 -1694.6664 2.5059308 11.204363 2.2809764 13990.5 - 350 -625.91962 -665.35838 39.438756 1419.1232 -1352.4038 -667.6167 41.582459 985.53381 -1694.733 2.2583269 10.83105 1.8963306 13990.5 - 400 -625.24851 -660.77642 35.527912 1278.3995 -425.3358 -663.12602 43.890329 987.75201 -1694.7684 2.3495978 11.521967 2.1759207 13990.5 - 450 -624.67742 -662.88674 38.209317 1374.8844 1108.0844 -665.43207 46.964873 982.35206 -1694.749 2.5453361 11.002418 2.0014401 13990.5 - 500 -624.30218 -661.97851 37.676336 1355.7061 -999.37887 -664.60374 42.373166 987.59022 -1694.5671 2.6252269 11.153982 2.8270477 13990.5 -Loop time of 8.64071 on 1 procs for 500 steps with 432 atoms - -Performance: 9.999 ns/day, 2.400 hours/ns, 57.866 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 7.824 | 7.824 | 7.824 | 0.0 | 90.55 -Bond | 0.0024104 | 0.0024104 | 0.0024104 | 0.0 | 0.03 -Kspace | 0.53534 | 0.53534 | 0.53534 | 0.0 | 6.20 -Neigh | 0.19522 | 0.19522 | 0.19522 | 0.0 | 2.26 -Comm | 0.066091 | 0.066091 | 0.066091 | 0.0 | 0.76 -Output | 0.0003643 | 0.0003643 | 0.0003643 | 0.0 | 0.00 -Modify | 0.011435 | 0.011435 | 0.011435 | 0.0 | 0.13 -Other | | 0.005869 | | | 0.07 - -Nlocal: 432 ave 432 max 432 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 9338 ave 9338 max 9338 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 297354 ave 297354 max 297354 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 297354 -Ave neighs/atom = 688.319 -Ave special neighs/atom = 1 -Neighbor list builds = 22 -Dangerous builds = 0 - -unfix thermoberendsen - -# ------------------------ Dynamic Run ------------------------------- - -run 1000 -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Memory usage per processor = 15.7472 Mbytes -Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 500 -624.30218 -661.97851 37.676336 1355.7061 -999.37887 -664.60374 42.373166 987.59022 -1694.5671 2.6252269 11.153982 2.8270477 13990.5 - 550 -624.30708 -662.13355 37.826467 1361.1083 326.46254 -664.76811 45.306636 984.72863 -1694.8034 2.6345547 10.879989 1.9751675 13990.5 - 600 -624.30994 -661.8449 37.534969 1350.6193 -984.35215 -664.36139 42.366573 987.8789 -1694.6069 2.516489 10.211098 1.7890339 13990.5 - 650 -624.30501 -659.20596 34.900952 1255.8396 554.8226 -661.96471 46.567453 986.05088 -1694.583 2.7587454 13.15403 2.1657286 13990.5 - 700 -624.30907 -661.85064 37.541572 1350.8569 -135.38668 -664.3843 44.382641 985.80654 -1694.5735 2.5336521 10.991882 2.0402026 13990.5 - 750 -624.30999 -660.52853 36.21854 1303.2503 1196.4145 -663.29701 47.437312 984.08773 -1694.822 2.7684838 11.681986 2.0756933 13990.5 - 800 -624.30488 -659.87594 35.571053 1279.9518 361.87762 -662.81183 45.49882 986.40712 -1694.7178 2.935891 11.519352 3.7801343 13990.5 - 850 -624.30607 -663.64735 39.341278 1415.6157 -42.214824 -666.11278 44.277011 984.33678 -1694.7266 2.4654311 11.03941 1.9211474 13990.5 - 900 -624.30048 -659.04455 34.744072 1250.1946 386.10592 -662.10941 45.864611 986.90301 -1694.877 3.0648637 12.126864 2.467969 13990.5 - 950 -624.30795 -663.3468 39.038856 1404.7337 289.90291 -665.76693 45.27444 983.7762 -1694.8176 2.420128 11.735744 2.053808 13990.5 - 1000 -624.303 -659.5513 35.248296 1268.3381 -896.7132 -662.30776 42.985505 989.11655 -1694.4098 2.7564586 11.38686 1.8136876 13990.5 - 1050 -624.30433 -659.21593 34.911606 1256.223 273.26272 -661.98578 45.834363 986.93885 -1694.759 2.7698415 12.201066 1.9804734 13990.5 - 1100 -624.3035 -660.37975 36.076254 1298.1305 40.2604 -662.88712 45.266447 986.77782 -1694.9314 2.5073688 11.366839 2.2452799 13990.5 - 1150 -624.30832 -658.16356 33.855242 1218.2119 905.45817 -660.85689 47.381273 986.61927 -1694.8574 2.6933378 13.157497 2.3062872 13990.5 - 1200 -624.30971 -665.57285 41.263142 1484.77 -2010.9356 -667.71783 39.858615 987.32002 -1694.8965 2.1449751 9.3563352 1.7115187 13990.5 - 1250 -624.3069 -662.41936 38.112468 1371.3994 223.85833 -665.01906 45.021425 984.67299 -1694.7135 2.5997021 10.137667 1.8129534 13990.5 - 1300 -624.3116 -661.73044 37.418835 1346.4405 524.83698 -664.46475 45.716001 983.98856 -1694.1693 2.734311 11.475107 2.5468008 13990.5 - 1350 -624.30917 -661.34529 37.036121 1332.6693 399.81653 -663.86813 45.373759 985.3362 -1694.5781 2.5228434 10.819603 2.2048214 13990.5 - 1400 -624.31545 -660.75213 36.43668 1311.0996 193.18853 -663.43944 45.172084 985.90744 -1694.519 2.6873128 10.597955 1.9090871 13990.5 - 1450 -624.30419 -660.88131 36.577122 1316.1532 530.40423 -663.62017 46.21726 984.89723 -1694.7347 2.7388564 12.015146 2.6454091 13990.5 - 1500 -624.30236 -660.40336 36.100999 1299.0209 -759.2259 -663.48374 43.382233 987.65506 -1694.521 3.0803837 12.48163 2.2113083 13990.5 -Loop time of 17.2383 on 1 procs for 1000 steps with 432 atoms - -Performance: 10.024 ns/day, 2.394 hours/ns, 58.011 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 15.619 | 15.619 | 15.619 | 0.0 | 90.61 -Bond | 0.0048032 | 0.0048032 | 0.0048032 | 0.0 | 0.03 -Kspace | 1.068 | 1.068 | 1.068 | 0.0 | 6.20 -Neigh | 0.39623 | 0.39623 | 0.39623 | 0.0 | 2.30 -Comm | 0.13052 | 0.13052 | 0.13052 | 0.0 | 0.76 -Output | 0.00067472 | 0.00067472 | 0.00067472 | 0.0 | 0.00 -Modify | 0.0071197 | 0.0071197 | 0.0071197 | 0.0 | 0.04 -Other | | 0.01175 | | | 0.07 - -Nlocal: 432 ave 432 max 432 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 9327 ave 9327 max 9327 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 297525 ave 297525 max 297525 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 297525 -Ave neighs/atom = 688.715 -Ave special neighs/atom = 1 -Neighbor list builds = 45 -Dangerous builds = 0 -Total wall time: 0:00:25 diff --git a/examples/coreshell/log.5Oct16.coreshell.g++.4 b/examples/coreshell/log.5Oct16.coreshell.g++.4 deleted file mode 100644 index 117b6e08d5..0000000000 --- a/examples/coreshell/log.5Oct16.coreshell.g++.4 +++ /dev/null @@ -1,209 +0,0 @@ -LAMMPS (5 Oct 2016) -# Testsystem for core-shell model compared to Mitchel and Finchham -# Hendrik Heenen, June 2014 - -# ------------------------ INITIALIZATION ---------------------------- - -units metal -dimension 3 -boundary p p p -atom_style full - -# ----------------------- ATOM DEFINITION ---------------------------- - -fix csinfo all property/atom i_CSID -read_data data.coreshell fix csinfo NULL CS-Info - orthogonal box = (0 0 0) to (24.096 24.096 24.096) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 432 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 216 bonds - 1 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors - -group cores type 1 2 -216 atoms in group cores -group shells type 3 4 -216 atoms in group shells - -neighbor 2.0 bin -comm_modify vel yes - -# ------------------------ FORCE FIELDS ------------------------------ - -kspace_style ewald 1.0e-6 -pair_style born/coul/long/cs 20.0 20.0 # A, rho, sigma=0, C, D -pair_coeff * * 0.0 1.000 0.00 0.00 0.00 -pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na -pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl -pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl - -bond_style harmonic -bond_coeff 1 63.014 0.0 -bond_coeff 2 25.724 0.0 - -# ------------------------ Equilibration Run ------------------------------- - -reset_timestep 0 - -thermo 50 -thermo_style custom step etotal pe ke temp press epair evdwl ecoul elong ebond fnorm fmax vol - -compute CSequ all temp/cs cores shells - -# output via chunk method - -#compute prop all property/atom i_CSID -#compute cs_chunk all chunk/atom c_prop -#compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 -#fix ave_chunk all ave/time 100 1 100 c_cstherm file chunk.dump mode vector - -thermo_modify temp CSequ - -# velocity bias option - -velocity all create 1427 134 dist gaussian mom yes rot no bias yes temp CSequ -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 22 - ghost atom cutoff = 22 - binsize = 11 -> bins = 3 3 3 -velocity all scale 1427 temp CSequ - -fix thermoberendsen all temp/berendsen 1427 1427 0.4 -fix nve all nve -fix_modify thermoberendsen temp CSequ - -# 2 fmsec timestep - -timestep 0.002 -run 500 -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Memory usage per processor = 15.2111 Mbytes -Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 0 -635.44099 -675.09865 39.657659 1427 -20613.612 -675.09865 1.6320365 1018.8211 -1695.5518 0 2.9851021e-14 4.2188475e-15 13990.5 - 50 -634.17349 -666.17817 32.004686 1151.6234 -4030.346 -667.9562 37.809075 989.23283 -1694.9981 1.7780241 9.7133824 2.1917971 13990.5 - 100 -631.93518 -661.91229 29.977104 1078.665 -3172.6554 -664.06722 39.333371 991.36935 -1694.7699 2.1549316 11.09144 2.1704351 13990.5 - 150 -630.16821 -663.12421 32.956001 1185.8545 142.23746 -665.48039 46.253735 982.97455 -1694.7087 2.3561823 11.467862 2.1651502 13990.5 - 200 -628.62229 -663.64928 35.026994 1260.375 -1623.495 -665.96883 41.661825 986.81676 -1694.4474 2.3195535 10.597709 2.9538127 13990.5 - 250 -627.31146 -662.01843 34.706969 1248.8595 -1510.677 -664.50329 42.10159 987.90193 -1694.5068 2.4848607 10.392642 1.6933333 13990.5 - 300 -626.57662 -660.97479 34.398174 1237.7482 -1638.7013 -663.48072 41.653268 989.53239 -1694.6664 2.5059279 11.204558 2.2814875 13990.5 - 350 -625.91972 -665.3583 39.438581 1419.1169 -1352.428 -667.61665 41.5825 985.53386 -1694.733 2.2583465 10.831573 1.8963653 13990.5 - 400 -625.24854 -660.77581 35.527271 1278.3764 -424.57407 -663.12561 43.89225 987.75056 -1694.7684 2.3497967 11.523588 2.1775908 13990.5 - 450 -624.67739 -662.88749 38.210098 1374.9125 1107.8255 -665.43273 46.964166 982.35231 -1694.7492 2.5452345 11.00224 2.0018738 13990.5 - 500 -624.30227 -661.98003 37.677766 1355.7576 -999.27326 -664.60512 42.373091 987.58943 -1694.5676 2.6250858 11.151835 2.8270448 13990.5 -Loop time of 2.40619 on 4 procs for 500 steps with 432 atoms - -Performance: 35.907 ns/day, 0.668 hours/ns, 207.797 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.7876 | 1.9016 | 2.0542 | 7.0 | 79.03 -Bond | 0.00064754 | 0.0006901 | 0.00074625 | 0.1 | 0.03 -Kspace | 0.16854 | 0.31596 | 0.42594 | 16.5 | 13.13 -Neigh | 0.051607 | 0.051768 | 0.051931 | 0.1 | 2.15 -Comm | 0.11933 | 0.12412 | 0.12769 | 0.9 | 5.16 -Output | 0.00039911 | 0.00042087 | 0.00047565 | 0.2 | 0.02 -Modify | 0.0059447 | 0.0063215 | 0.0067348 | 0.4 | 0.26 -Other | | 0.005341 | | | 0.22 - -Nlocal: 108 ave 119 max 102 min -Histogram: 1 1 1 0 0 0 0 0 0 1 -Nghost: 6516 ave 6545 max 6491 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Neighs: 74337.8 ave 81248 max 69989 min -Histogram: 1 0 2 0 0 0 0 0 0 1 - -Total # of neighbors = 297351 -Ave neighs/atom = 688.312 -Ave special neighs/atom = 1 -Neighbor list builds = 22 -Dangerous builds = 0 - -unfix thermoberendsen - -# ------------------------ Dynamic Run ------------------------------- - -run 1000 -Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.175257 - estimated absolute RMS force accuracy = 1.49563e-05 - estimated relative force accuracy = 1.03866e-06 - KSpace vectors: actual max1d max3d = 257 5 665 - kxmax kymax kzmax = 5 5 5 -Memory usage per processor = 15.213 Mbytes -Step TotEng PotEng KinEng Temp Press E_pair E_vdwl E_coul E_long E_bond Fnorm Fmax Volume - 500 -624.30215 -661.98003 37.677882 1355.7618 -999.26443 -664.60512 42.373091 987.58943 -1694.5676 2.6250858 11.151835 2.8270448 13990.5 - 550 -624.30702 -662.13315 37.826126 1361.096 330.71041 -664.76759 45.316349 984.7201 -1694.804 2.6344423 10.876902 1.9726348 13990.5 - 600 -624.31001 -661.82602 37.516015 1349.9373 -978.11503 -664.34272 42.382797 987.88159 -1694.6071 2.5166949 10.21416 1.787289 13990.5 - 650 -624.30516 -659.19843 34.893268 1255.5631 548.43865 -661.95754 46.556222 986.06829 -1694.582 2.7591048 13.16005 2.1511562 13990.5 - 700 -624.30926 -661.91108 37.601819 1353.0248 -175.1339 -664.4528 44.284398 985.834 -1694.5712 2.5417263 10.972065 1.9847042 13990.5 - 750 -624.30955 -660.4096 36.100048 1298.9866 1222.5932 -663.20741 47.511377 984.09471 -1694.8135 2.7978144 11.761903 2.1481489 13990.5 - 800 -624.30447 -660.30683 36.002357 1295.4714 270.6639 -663.25589 45.210122 986.25515 -1694.7212 2.9490566 11.50988 4.0037749 13990.5 - 850 -624.30774 -663.65149 39.343757 1415.7049 339.356 -666.13397 45.12874 983.38616 -1694.6489 2.4824719 11.01305 2.1691298 13990.5 - 900 -624.30311 -658.78647 34.483353 1240.8132 309.88983 -661.8322 45.836842 987.17541 -1694.8445 3.045732 12.635589 1.9594437 13990.5 - 950 -624.303 -663.59545 39.292454 1413.8588 -649.78872 -665.94289 43.141981 985.63193 -1694.7168 2.347436 11.012602 2.0685819 13990.5 - 1000 -624.3032 -660.59776 36.294555 1305.9856 -753.87453 -663.22012 42.930848 988.41708 -1694.568 2.6223608 10.526403 1.8887197 13990.5 - 1050 -624.3023 -660.7017 36.399405 1309.7584 790.88591 -663.6376 46.453299 984.4785 -1694.5694 2.9359001 11.210429 2.1822375 13990.5 - 1100 -624.30545 -662.76291 38.457457 1383.8132 -853.19698 -665.29416 42.533854 986.84955 -1694.6776 2.5312537 10.517674 2.6445601 13990.5 - 1150 -624.31539 -663.03811 38.722722 1393.3582 -380.13868 -665.58847 43.476852 985.81618 -1694.8815 2.5503626 10.818389 1.9559813 13990.5 - 1200 -624.3093 -659.85835 35.549055 1279.1603 44.140107 -662.93041 44.773497 986.67501 -1694.3789 3.0720506 11.310516 2.2601607 13990.5 - 1250 -624.30277 -663.46462 39.161852 1409.1594 -352.57297 -666.0144 43.477124 984.93408 -1694.4256 2.5497829 10.720231 1.8458373 13990.5 - 1300 -624.30329 -660.15937 35.85608 1290.2079 -348.83001 -662.73568 43.884677 988.07413 -1694.6945 2.5763161 11.369766 2.2580977 13990.5 - 1350 -624.30469 -662.72631 38.421619 1382.5236 1338.9038 -665.20399 47.35379 982.28307 -1694.8408 2.4776776 10.587886 1.7677665 13990.5 - 1400 -624.30499 -662.12513 37.820139 1360.8806 132.00801 -664.73589 44.55252 985.34275 -1694.6312 2.6107622 11.193448 2.1613441 13990.5 - 1450 -624.30207 -661.42856 37.126485 1335.9209 2069.8075 -664.07373 49.544418 981.20445 -1694.8226 2.6451763 13.011189 3.3987593 13990.5 - 1500 -624.29727 -656.99924 32.701969 1176.7137 504.56835 -660.08591 46.605885 987.7602 -1694.452 3.0866635 13.271242 3.025272 13990.5 -Loop time of 4.96339 on 4 procs for 1000 steps with 432 atoms - -Performance: 34.815 ns/day, 0.689 hours/ns, 201.475 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.6491 | 3.8484 | 4.2642 | 12.4 | 77.54 -Bond | 0.0013638 | 0.0014506 | 0.0016019 | 0.2 | 0.03 -Kspace | 0.3347 | 0.73521 | 0.92903 | 27.3 | 14.81 -Neigh | 0.10979 | 0.11008 | 0.11042 | 0.1 | 2.22 -Comm | 0.23785 | 0.25289 | 0.2601 | 1.8 | 5.10 -Output | 0.0008378 | 0.00088245 | 0.00098872 | 0.2 | 0.02 -Modify | 0.0022187 | 0.0024077 | 0.0026662 | 0.3 | 0.05 -Other | | 0.01206 | | | 0.24 - -Nlocal: 108 ave 112 max 102 min -Histogram: 1 0 0 0 1 0 0 0 0 2 -Nghost: 6500.75 ave 6612 max 6392 min -Histogram: 1 0 1 0 0 0 0 1 0 1 -Neighs: 74275 ave 77543 max 69706 min -Histogram: 1 0 0 0 0 1 0 1 0 1 - -Total # of neighbors = 297100 -Ave neighs/atom = 687.731 -Ave special neighs/atom = 1 -Neighbor list builds = 45 -Dangerous builds = 0 -Total wall time: 0:00:07 From 3ce61c42d6ffc703c25d5afe9df95826e3709efd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 16:01:42 -0500 Subject: [PATCH 211/273] update log files for crack and deposit examples --- examples/controller/in.controller | 0 ...16.crack.g++.1 => log.27Nov18.crack.g++.1} | 37 ++++++++------ ...16.crack.g++.4 => log.27Nov18.crack.g++.4} | 37 ++++++++------ ...m.g++.1 => log.27Nov18.deposit.atom.g++.1} | 39 ++++++++------ ...m.g++.4 => log.27Nov18.deposit.atom.g++.4} | 39 ++++++++------ ...+.1 => log.27Nov18.deposit.molecule.g++.1} | 51 +++++++++++-------- ...+.4 => log.27Nov18.deposit.molecule.g++.4} | 51 +++++++++++-------- ... log.27Nov18.deposit.molecule.shake.g++.1} | 51 +++++++++++-------- ... log.27Nov18.deposit.molecule.shake.g++.4} | 51 +++++++++++-------- 9 files changed, 206 insertions(+), 150 deletions(-) mode change 100755 => 100644 examples/controller/in.controller rename examples/crack/{log.5Oct16.crack.g++.1 => log.27Nov18.crack.g++.1} (81%) rename examples/crack/{log.5Oct16.crack.g++.4 => log.27Nov18.crack.g++.4} (81%) rename examples/deposit/{log.5Oct16.deposit.atom.g++.1 => log.27Nov18.deposit.atom.g++.1} (89%) rename examples/deposit/{log.5Oct16.deposit.atom.g++.4 => log.27Nov18.deposit.atom.g++.4} (89%) rename examples/deposit/{log.5Oct16.deposit.molecule.g++.1 => log.27Nov18.deposit.molecule.g++.1} (87%) rename examples/deposit/{log.5Oct16.deposit.molecule.g++.4 => log.27Nov18.deposit.molecule.g++.4} (87%) rename examples/deposit/{log.5Oct16.deposit.molecule.shake.g++.1 => log.27Nov18.deposit.molecule.shake.g++.1} (88%) rename examples/deposit/{log.5Oct16.deposit.molecule.shake.g++.4 => log.27Nov18.deposit.molecule.shake.g++.4} (88%) diff --git a/examples/controller/in.controller b/examples/controller/in.controller old mode 100755 new mode 100644 diff --git a/examples/crack/log.5Oct16.crack.g++.1 b/examples/crack/log.27Nov18.crack.g++.1 similarity index 81% rename from examples/crack/log.5Oct16.crack.g++.1 rename to examples/crack/log.27Nov18.crack.g++.1 index b65db9dda6..418b5fc0f6 100644 --- a/examples/crack/log.5Oct16.crack.g++.1 +++ b/examples/crack/log.27Nov18.crack.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d LJ crack simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.278569) to (111.428 77.1994 0.278569) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 8141 atoms + Time spent = 0.00162196 secs mass 1 1.0 mass 2 1.0 @@ -76,7 +78,7 @@ fix 2 boundary setforce NULL 0.0 0.0 timestep 0.003 thermo 200 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) neigh_modify exclude type 2 3 @@ -90,13 +92,18 @@ neigh_modify exclude type 2 3 run 5000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 80 56 1 -Memory usage per processor = 2.48017 Mbytes + binsize = 1.4, bins = 80 56 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.112 | 3.112 | 3.112 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.065651733 -3.2595015 0 -3.1987287 -0.036239172 8605.5917 200 0.060086376 -3.2531936 0 -3.1975725 -0.23125026 8638.8101 @@ -124,20 +131,20 @@ Step Temp E_pair E_mol TotEng Press Volume 4600 0.086766447 -3.0437627 0 -2.9634443 -1.0208785 9361.9925 4800 0.088195149 -3.0328502 0 -2.9512093 -1.0272063 9395.6122 5000 0.089415266 -3.0228825 0 -2.9401122 -1.0215336 9436.1637 -Loop time of 6.89346 on 1 procs for 5000 steps with 8141 atoms +Loop time of 7.02888 on 1 procs for 5000 steps with 8141 atoms -Performance: 188004.255 tau/day, 725.325 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 184382.046 tau/day, 711.350 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.8036 | 5.8036 | 5.8036 | 0.0 | 84.19 -Neigh | 0.37434 | 0.37434 | 0.37434 | 0.0 | 5.43 -Comm | 0.004128 | 0.004128 | 0.004128 | 0.0 | 0.06 -Output | 0.00077105 | 0.00077105 | 0.00077105 | 0.0 | 0.01 -Modify | 0.53619 | 0.53619 | 0.53619 | 0.0 | 7.78 -Other | | 0.1744 | | | 2.53 +Pair | 5.8668 | 5.8668 | 5.8668 | 0.0 | 83.47 +Neigh | 0.29717 | 0.29717 | 0.29717 | 0.0 | 4.23 +Comm | 0.0045955 | 0.0045955 | 0.0045955 | 0.0 | 0.07 +Output | 0.0011108 | 0.0011108 | 0.0011108 | 0.0 | 0.02 +Modify | 0.65277 | 0.65277 | 0.65277 | 0.0 | 9.29 +Other | | 0.2064 | | | 2.94 Nlocal: 8141 ave 8141 max 8141 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -150,4 +157,4 @@ Total # of neighbors = 71389 Ave neighs/atom = 8.76907 Neighbor list builds = 100 Dangerous builds = 0 -Total wall time: 0:00:06 +Total wall time: 0:00:07 diff --git a/examples/crack/log.5Oct16.crack.g++.4 b/examples/crack/log.27Nov18.crack.g++.4 similarity index 81% rename from examples/crack/log.5Oct16.crack.g++.4 rename to examples/crack/log.27Nov18.crack.g++.4 index 00fb8d3e49..998f560b85 100644 --- a/examples/crack/log.5Oct16.crack.g++.4 +++ b/examples/crack/log.27Nov18.crack.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d LJ crack simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.278569) to (111.428 77.1994 0.278569) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 8141 atoms + Time spent = 0.00064826 secs mass 1 1.0 mass 2 1.0 @@ -76,7 +78,7 @@ fix 2 boundary setforce NULL 0.0 0.0 timestep 0.003 thermo 200 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) neigh_modify exclude type 2 3 @@ -90,13 +92,18 @@ neigh_modify exclude type 2 3 run 5000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 80 56 1 -Memory usage per processor = 2.48163 Mbytes + binsize = 1.4, bins = 80 56 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.069 | 3.069 | 3.069 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.065993465 -3.2595015 0 -3.1984123 -0.035939913 8605.5917 200 0.060035253 -3.2531886 0 -3.1976149 -0.22757684 8638.5331 @@ -124,20 +131,20 @@ Step Temp E_pair E_mol TotEng Press Volume 4600 0.088763719 -3.0446018 0 -2.9624346 -1.027693 9391.6949 4800 0.089467982 -3.0337452 0 -2.950926 -1.0232092 9427.4155 5000 0.089910902 -3.0237571 0 -2.9405279 -1.0174796 9452.031 -Loop time of 1.97398 on 4 procs for 5000 steps with 8141 atoms +Loop time of 2.06204 on 4 procs for 5000 steps with 8141 atoms -Performance: 656540.037 tau/day, 2532.948 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 628504.111 tau/day, 2424.784 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.4909 | 1.5203 | 1.5671 | 2.3 | 77.02 -Neigh | 0.10125 | 0.10271 | 0.10657 | 0.7 | 5.20 -Comm | 0.076516 | 0.13066 | 0.15771 | 8.8 | 6.62 -Output | 0.00077796 | 0.00082064 | 0.00091672 | 0.2 | 0.04 -Modify | 0.13725 | 0.14082 | 0.14325 | 0.6 | 7.13 -Other | | 0.07865 | | | 3.98 +Pair | 1.4844 | 1.5266 | 1.5909 | 3.6 | 74.03 +Neigh | 0.081047 | 0.085878 | 0.093027 | 1.5 | 4.16 +Comm | 0.12993 | 0.19571 | 0.25179 | 11.6 | 9.49 +Output | 0.00072265 | 0.00096798 | 0.0016601 | 0.0 | 0.05 +Modify | 0.16787 | 0.17024 | 0.17234 | 0.4 | 8.26 +Other | | 0.0826 | | | 4.01 Nlocal: 2035.25 ave 2064 max 2015 min Histogram: 1 1 0 0 0 1 0 0 0 1 @@ -150,4 +157,4 @@ Total # of neighbors = 71400 Ave neighs/atom = 8.77042 Neighbor list builds = 106 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/deposit/log.5Oct16.deposit.atom.g++.1 b/examples/deposit/log.27Nov18.deposit.atom.g++.1 similarity index 89% rename from examples/deposit/log.5Oct16.deposit.atom.g++.1 rename to examples/deposit/log.27Nov18.deposit.atom.g++.1 index 0ce6ac3c9c..2ed7f60dbe 100644 --- a/examples/deposit/log.5Oct16.deposit.atom.g++.1 +++ b/examples/deposit/log.27Nov18.deposit.atom.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for atoms units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000444174 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -30,7 +32,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 1.0 1.0 0.1 587283 @@ -43,7 +45,7 @@ fix 5 addatoms wall/reflect zhi EDGE thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -55,13 +57,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 -Memory usage per processor = 2.54053 Mbytes + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.126 | 3.126 | 3.126 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 351 0.83994737 -6.3459678 -6.3423783 -0.12047746 @@ -164,20 +171,20 @@ Step Atoms Temp E_pair TotEng Press 9800 448 0.97167962 -5.185173 -4.8663406 -0.56989109 9900 449 1.0038671 -5.1540302 -4.8220162 -0.56356384 10000 450 0.95642062 -5.2046982 -4.8858913 -0.70500643 -Loop time of 5.63963 on 1 procs for 10000 steps with 450 atoms +Loop time of 6.17726 on 1 procs for 10000 steps with 450 atoms -Performance: 766007.688 tau/day, 1773.166 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 699339.360 tau/day, 1618.841 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.1973 | 3.1973 | 3.1973 | 0.0 | 56.69 -Neigh | 2.1646 | 2.1646 | 2.1646 | 0.0 | 38.38 -Comm | 0.11922 | 0.11922 | 0.11922 | 0.0 | 2.11 -Output | 0.00081301 | 0.00081301 | 0.00081301 | 0.0 | 0.01 -Modify | 0.11702 | 0.11702 | 0.11702 | 0.0 | 2.07 -Other | | 0.04063 | | | 0.72 +Pair | 3.1708 | 3.1708 | 3.1708 | 0.0 | 51.33 +Neigh | 2.6376 | 2.6376 | 2.6376 | 0.0 | 42.70 +Comm | 0.18927 | 0.18927 | 0.18927 | 0.0 | 3.06 +Output | 0.0013239 | 0.0013239 | 0.0013239 | 0.0 | 0.02 +Modify | 0.13663 | 0.13663 | 0.13663 | 0.0 | 2.21 +Other | | 0.04162 | | | 0.67 Nlocal: 450 ave 450 max 450 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -190,4 +197,4 @@ Total # of neighbors = 29176 Ave neighs/atom = 64.8356 Neighbor list builds = 1143 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:06 diff --git a/examples/deposit/log.5Oct16.deposit.atom.g++.4 b/examples/deposit/log.27Nov18.deposit.atom.g++.4 similarity index 89% rename from examples/deposit/log.5Oct16.deposit.atom.g++.4 rename to examples/deposit/log.27Nov18.deposit.atom.g++.4 index 34b855f2ed..dd41ecedbd 100644 --- a/examples/deposit/log.5Oct16.deposit.atom.g++.4 +++ b/examples/deposit/log.27Nov18.deposit.atom.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for atoms units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000353813 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -30,7 +32,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 1.0 1.0 0.1 587283 @@ -43,7 +45,7 @@ fix 5 addatoms wall/reflect zhi EDGE thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -55,13 +57,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 -Memory usage per processor = 2.60645 Mbytes + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.4396 | 2.389 | 3.192 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 351 0.83994737 -6.3596932 -6.3561037 -0.10696131 @@ -164,20 +171,20 @@ Step Atoms Temp E_pair TotEng Press 9800 448 1.187781 -5.1672598 -4.7775192 -0.55482592 9900 449 0.99538785 -5.1593424 -4.8301329 -0.5886329 10000 450 0.95030539 -5.1408028 -4.8240344 -0.4992403 -Loop time of 4.38653 on 4 procs for 10000 steps with 450 atoms +Loop time of 5.30178 on 4 procs for 10000 steps with 450 atoms -Performance: 984832.436 tau/day, 2279.705 timesteps/s -98.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 814820.053 tau/day, 1886.158 timesteps/s +94.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0022979 | 0.81396 | 2.0831 | 95.7 | 18.56 -Neigh | 0.0083807 | 0.57856 | 1.7676 | 93.7 | 13.19 -Comm | 0.3792 | 2.1868 | 3.8575 | 85.0 | 49.85 -Output | 0.001919 | 0.008881 | 0.025856 | 10.5 | 0.20 -Modify | 0.0053477 | 0.035994 | 0.08146 | 16.2 | 0.82 -Other | | 0.7623 | | | 17.38 +Pair | 0.0030358 | 0.8503 | 2.2484 | 100.1 | 16.04 +Neigh | 0.0085447 | 0.74813 | 2.3721 | 111.4 | 14.11 +Comm | 0.50519 | 2.6696 | 4.6851 | 95.8 | 50.35 +Output | 0.0024836 | 0.012219 | 0.029616 | 9.5 | 0.23 +Modify | 0.014966 | 0.047625 | 0.094656 | 14.8 | 0.90 +Other | | 0.9739 | | | 18.37 Nlocal: 112.5 ave 250 max 9 min Histogram: 2 0 0 0 0 0 1 0 0 1 @@ -190,4 +197,4 @@ Total # of neighbors = 29661 Ave neighs/atom = 65.9133 Neighbor list builds = 1164 Dangerous builds = 0 -Total wall time: 0:00:04 +Total wall time: 0:00:05 diff --git a/examples/deposit/log.5Oct16.deposit.molecule.g++.1 b/examples/deposit/log.27Nov18.deposit.molecule.g++.1 similarity index 87% rename from examples/deposit/log.5Oct16.deposit.molecule.g++.1 rename to examples/deposit/log.27Nov18.deposit.molecule.g++.1 index 3c8aa85d92..c006119370 100644 --- a/examples/deposit/log.5Oct16.deposit.molecule.g++.1 +++ b/examples/deposit/log.27Nov18.deposit.molecule.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for molecules units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000686646 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -33,7 +35,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 0.1 0.1 0.1 587283 @@ -41,11 +43,11 @@ fix 3 mobile nve molecule dimer molecule.dimer Read molecule dimer: - 2 atoms with 3 types - 1 bonds with 1 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 2 atoms with max type 3 + 1 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 region slab block 0 5 0 5 8 9 fix 4 addatoms deposit 100 0 100 12345 region slab near 1.0 mol dimer vz -1.0 -1.0 fix 5 addatoms wall/reflect zhi EDGE @@ -53,7 +55,7 @@ fix 5 addatoms wall/reflect zhi EDGE thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add lost/bond ignore lost warn -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -65,13 +67,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 -Memory usage per processor = 3.56565 Mbytes + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.152 | 4.152 | 4.152 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 352 0.83994737 -6.8875167 -6.8803581 -0.73353914 @@ -174,21 +181,21 @@ Step Atoms Temp E_pair TotEng Press 9800 546 0.26835398 -7.2214231 -6.8757262 -0.86029096 9900 548 0.31676744 -7.264604 -6.884266 -0.74053962 10000 550 0.31368419 -7.2759575 -6.8979611 -0.76153366 -Loop time of 6.51779 on 1 procs for 10000 steps with 550 atoms +Loop time of 7.42799 on 1 procs for 10000 steps with 550 atoms -Performance: 662801.655 tau/day, 1534.263 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 581583.611 tau/day, 1346.258 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.0744 | 4.0744 | 4.0744 | 0.0 | 62.51 -Bond | 0.01209 | 0.01209 | 0.01209 | 0.0 | 0.19 -Neigh | 2.1316 | 2.1316 | 2.1316 | 0.0 | 32.70 -Comm | 0.13266 | 0.13266 | 0.13266 | 0.0 | 2.04 -Output | 0.0008409 | 0.0008409 | 0.0008409 | 0.0 | 0.01 -Modify | 0.12403 | 0.12403 | 0.12403 | 0.0 | 1.90 -Other | | 0.04216 | | | 0.65 +Pair | 4.1961 | 4.1961 | 4.1961 | 0.0 | 56.49 +Bond | 0.011222 | 0.011222 | 0.011222 | 0.0 | 0.15 +Neigh | 2.8258 | 2.8258 | 2.8258 | 0.0 | 38.04 +Comm | 0.20406 | 0.20406 | 0.20406 | 0.0 | 2.75 +Output | 0.0014198 | 0.0014198 | 0.0014198 | 0.0 | 0.02 +Modify | 0.14606 | 0.14606 | 0.14606 | 0.0 | 1.97 +Other | | 0.04341 | | | 0.58 Nlocal: 550 ave 550 max 550 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -202,4 +209,4 @@ Ave neighs/atom = 72.2 Ave special neighs/atom = 0.363636 Neighbor list builds = 877 Dangerous builds = 0 -Total wall time: 0:00:06 +Total wall time: 0:00:07 diff --git a/examples/deposit/log.5Oct16.deposit.molecule.g++.4 b/examples/deposit/log.27Nov18.deposit.molecule.g++.4 similarity index 87% rename from examples/deposit/log.5Oct16.deposit.molecule.g++.4 rename to examples/deposit/log.27Nov18.deposit.molecule.g++.4 index c2affc26e3..c0c3ae35ff 100644 --- a/examples/deposit/log.5Oct16.deposit.molecule.g++.4 +++ b/examples/deposit/log.27Nov18.deposit.molecule.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for molecules units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000594139 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -33,7 +35,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 0.1 0.1 0.1 587283 @@ -41,11 +43,11 @@ fix 3 mobile nve molecule dimer molecule.dimer Read molecule dimer: - 2 atoms with 3 types - 1 bonds with 1 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 2 atoms with max type 3 + 1 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 region slab block 0 5 0 5 8 9 fix 4 addatoms deposit 100 0 100 12345 region slab near 1.0 mol dimer vz -1.0 -1.0 fix 5 addatoms wall/reflect zhi EDGE @@ -53,7 +55,7 @@ fix 5 addatoms wall/reflect zhi EDGE thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add lost/bond ignore lost warn -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -65,13 +67,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 -Memory usage per processor = 3.63985 Mbytes + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.441 | 3.16 | 4.226 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 352 0.83994737 -6.8946578 -6.8874992 -0.73775337 @@ -174,21 +181,21 @@ Step Atoms Temp E_pair TotEng Press 9800 546 0.28129876 -7.3140275 -6.9098746 -0.82726219 9900 548 0.28891495 -7.3235633 -6.9092268 -0.88128702 10000 550 0.29861445 -7.3507915 -6.9161229 -0.73192335 -Loop time of 5.59197 on 4 procs for 10000 steps with 550 atoms +Loop time of 6.59998 on 4 procs for 10000 steps with 550 atoms -Performance: 772536.289 tau/day, 1788.278 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 654547.468 tau/day, 1515.156 timesteps/s +95.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0012441 | 1.0454 | 2.9987 | 119.8 | 18.70 -Bond | 0.0012348 | 0.0039268 | 0.010973 | 6.5 | 0.07 -Neigh | 0.0049584 | 0.57381 | 1.8059 | 96.8 | 10.26 -Comm | 0.62167 | 2.892 | 5.0562 | 98.9 | 51.72 -Output | 0.0021472 | 0.014835 | 0.048822 | 16.2 | 0.27 -Modify | 0.0069871 | 0.038206 | 0.074167 | 15.4 | 0.68 -Other | | 1.024 | | | 18.31 +Pair | 0.0020502 | 1.124 | 3.2865 | 126.5 | 17.03 +Bond | 0.0019848 | 0.0045845 | 0.011024 | 5.5 | 0.07 +Neigh | 0.0055914 | 0.79469 | 2.5826 | 118.4 | 12.04 +Comm | 0.541 | 3.3411 | 6.0178 | 116.5 | 50.62 +Output | 0.0026808 | 0.018505 | 0.055692 | 15.9 | 0.28 +Modify | 0.017398 | 0.054306 | 0.10289 | 15.9 | 0.82 +Other | | 1.263 | | | 19.13 Nlocal: 137.5 ave 299 max 2 min Histogram: 2 0 0 0 0 0 0 1 0 1 @@ -202,4 +209,4 @@ Ave neighs/atom = 71.9345 Ave special neighs/atom = 0.363636 Neighbor list builds = 884 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:06 diff --git a/examples/deposit/log.5Oct16.deposit.molecule.shake.g++.1 b/examples/deposit/log.27Nov18.deposit.molecule.shake.g++.1 similarity index 88% rename from examples/deposit/log.5Oct16.deposit.molecule.shake.g++.1 rename to examples/deposit/log.27Nov18.deposit.molecule.shake.g++.1 index 508aaa9df1..e2150860d1 100644 --- a/examples/deposit/log.5Oct16.deposit.molecule.shake.g++.1 +++ b/examples/deposit/log.27Nov18.deposit.molecule.shake.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for molecules units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000657082 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -33,7 +35,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 0.1 0.1 0.1 587283 @@ -41,11 +43,11 @@ fix 3 mobile nve molecule dimer molecule.dimer.shake Read molecule dimer: - 2 atoms with 3 types - 1 bonds with 1 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 2 atoms with max type 3 + 1 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 region slab block 0 5 0 5 8 9 fix 4 addatoms deposit 100 0 100 12345 region slab near 1.0 mol dimer vz -1.0 -1.0 shake 6 fix 5 addatoms wall/reflect zhi EDGE @@ -58,7 +60,7 @@ fix 6 all shake 0.0001 20 1000 b 1 mol dimer thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add lost/bond ignore lost warn -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -70,14 +72,19 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard SHAKE stats (type/ave/delta) on step 0 -Memory usage per processor = 4.44065 Mbytes +Per MPI rank memory allocation (min/avg/max) = 5.027 | 5.027 | 5.027 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 352 1.0079368 -6.8875167 -6.8803581 -0.73353914 @@ -200,21 +207,21 @@ SHAKE stats (type/ave/delta) on step 9000 SHAKE stats (type/ave/delta) on step 10000 1 1 2.44249e-15 10000 550 0.31059632 -6.7463923 -6.6052122 -0.75225652 -Loop time of 6.31791 on 1 procs for 10000 steps with 550 atoms +Loop time of 7.11276 on 1 procs for 10000 steps with 550 atoms -Performance: 683770.197 tau/day, 1582.801 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 607358.878 tau/day, 1405.923 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.9451 | 3.9451 | 3.9451 | 0.0 | 62.44 -Bond | 0.012146 | 0.012146 | 0.012146 | 0.0 | 0.19 -Neigh | 2.0103 | 2.0103 | 2.0103 | 0.0 | 31.82 -Comm | 0.13071 | 0.13071 | 0.13071 | 0.0 | 2.07 -Output | 0.00093651 | 0.00093651 | 0.00093651 | 0.0 | 0.01 -Modify | 0.1759 | 0.1759 | 0.1759 | 0.0 | 2.78 -Other | | 0.04281 | | | 0.68 +Pair | 3.9705 | 3.9705 | 3.9705 | 0.0 | 55.82 +Bond | 0.011102 | 0.011102 | 0.011102 | 0.0 | 0.16 +Neigh | 2.6732 | 2.6732 | 2.6732 | 0.0 | 37.58 +Comm | 0.20071 | 0.20071 | 0.20071 | 0.0 | 2.82 +Output | 0.0015368 | 0.0015368 | 0.0015368 | 0.0 | 0.02 +Modify | 0.21124 | 0.21124 | 0.21124 | 0.0 | 2.97 +Other | | 0.0444 | | | 0.62 Nlocal: 550 ave 550 max 550 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -228,4 +235,4 @@ Ave neighs/atom = 66.2873 Ave special neighs/atom = 0.363636 Neighbor list builds = 839 Dangerous builds = 0 -Total wall time: 0:00:06 +Total wall time: 0:00:07 diff --git a/examples/deposit/log.5Oct16.deposit.molecule.shake.g++.4 b/examples/deposit/log.27Nov18.deposit.molecule.shake.g++.4 similarity index 88% rename from examples/deposit/log.5Oct16.deposit.molecule.shake.g++.4 rename to examples/deposit/log.27Nov18.deposit.molecule.shake.g++.4 index 3947e4eec1..066d6f78a5 100644 --- a/examples/deposit/log.5Oct16.deposit.molecule.shake.g++.4 +++ b/examples/deposit/log.27Nov18.deposit.molecule.shake.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # sample surface deposition script for molecules units lj @@ -15,6 +16,7 @@ Created orthogonal box = (0 0 0) to (7.93701 7.93701 15.874) region substrate block INF INF INF INF INF 3 create_atoms 1 region substrate Created 350 atoms + Time spent = 0.000810623 secs pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 @@ -33,7 +35,7 @@ group mobile region mobile 150 atoms in group mobile compute add addatoms temp -compute_modify add dynamic yes extra 0 +compute_modify add dynamic/dof yes extra/dof 0 fix 1 addatoms nve fix 2 mobile langevin 0.1 0.1 0.1 587283 @@ -41,11 +43,11 @@ fix 3 mobile nve molecule dimer molecule.dimer.shake Read molecule dimer: - 2 atoms with 3 types - 1 bonds with 1 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 2 atoms with max type 3 + 1 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 region slab block 0 5 0 5 8 9 fix 4 addatoms deposit 100 0 100 12345 region slab near 1.0 mol dimer vz -1.0 -1.0 shake 6 fix 5 addatoms wall/reflect zhi EDGE @@ -58,7 +60,7 @@ fix 6 all shake 0.0001 20 1000 b 1 mol dimer thermo_style custom step atoms temp epair etotal press thermo 100 thermo_modify temp add lost/bond ignore lost warn -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 50 dump.deposit.atom @@ -70,14 +72,19 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.3 ghost atom cutoff = 5.3 - binsize = 2.65 -> bins = 3 3 6 + binsize = 2.65, bins = 3 3 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard SHAKE stats (type/ave/delta) on step 0 -Memory usage per processor = 4.51485 Mbytes +Per MPI rank memory allocation (min/avg/max) = 0.4411 | 3.816 | 5.101 Mbytes Step Atoms Temp E_pair TotEng Press 0 350 0 -6.9215833 -6.9215833 -1.0052629 100 352 1.0079368 -6.8946578 -6.8874992 -0.73775337 @@ -200,21 +207,21 @@ SHAKE stats (type/ave/delta) on step 9000 SHAKE stats (type/ave/delta) on step 10000 1 1 2.55351e-15 10000 550 0.30296128 -6.7756768 -6.6379672 -0.84420968 -Loop time of 5.7633 on 4 procs for 10000 steps with 550 atoms +Loop time of 6.71355 on 4 procs for 10000 steps with 550 atoms -Performance: 749570.876 tau/day, 1735.118 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 643474.692 tau/day, 1489.525 timesteps/s +95.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0014243 | 1.0038 | 2.9203 | 118.9 | 17.42 -Bond | 0.001431 | 0.004068 | 0.010644 | 6.0 | 0.07 -Neigh | 0.0053701 | 0.53209 | 1.6663 | 92.7 | 9.23 -Comm | 0.60632 | 2.7675 | 4.853 | 97.7 | 48.02 -Output | 0.0026648 | 0.003988 | 0.0067949 | 2.6 | 0.07 -Modify | 0.43492 | 1.2606 | 3.3556 | 108.4 | 21.87 -Other | | 0.1912 | | | 3.32 +Pair | 0.0023715 | 1.0684 | 3.1403 | 123.9 | 15.91 +Bond | 0.0018587 | 0.0045958 | 0.011149 | 5.6 | 0.07 +Neigh | 0.0059454 | 0.74298 | 2.4218 | 114.9 | 11.07 +Comm | 0.53191 | 3.1926 | 5.7443 | 113.9 | 47.55 +Output | 0.0028977 | 0.0060919 | 0.010627 | 4.2 | 0.09 +Modify | 0.47242 | 1.5021 | 4.1679 | 126.1 | 22.37 +Other | | 0.1969 | | | 2.93 Nlocal: 137.5 ave 300 max 2 min Histogram: 2 0 0 0 0 0 0 1 0 1 @@ -228,4 +235,4 @@ Ave neighs/atom = 66.8055 Ave special neighs/atom = 0.363636 Neighbor list builds = 833 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:06 From 37289f74766922155367bb88e3b9c7dcabdc74d2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 16:07:12 -0500 Subject: [PATCH 212/273] update log files for dipole and dreiding example inputs. add running some MD steps for dreiding --- ....dipole.g++.1 => log.27Nov18.dipole.g++.1} | 35 ++-- ....dipole.g++.4 => log.27Nov18.dipole.g++.4} | 33 +-- examples/dreiding/in.dreiding | 40 ++-- examples/dreiding/log.27Nov18.dreiding.g++.1 | 198 ++++++++++++++++++ examples/dreiding/log.27Nov18.dreiding.g++.4 | 198 ++++++++++++++++++ examples/dreiding/log.5Oct16.dreiding.g++.1 | 118 ----------- examples/dreiding/log.5Oct16.dreiding.g++.4 | 118 ----------- 7 files changed, 459 insertions(+), 281 deletions(-) rename examples/dipole/{log.5Oct16.dipole.g++.1 => log.27Nov18.dipole.g++.1} (76%) rename examples/dipole/{log.5Oct16.dipole.g++.4 => log.27Nov18.dipole.g++.4} (77%) create mode 100644 examples/dreiding/log.27Nov18.dreiding.g++.1 create mode 100644 examples/dreiding/log.27Nov18.dreiding.g++.4 delete mode 100644 examples/dreiding/log.5Oct16.dreiding.g++.1 delete mode 100644 examples/dreiding/log.5Oct16.dreiding.g++.4 diff --git a/examples/dipole/log.5Oct16.dipole.g++.1 b/examples/dipole/log.27Nov18.dipole.g++.1 similarity index 76% rename from examples/dipole/log.5Oct16.dipole.g++.1 rename to examples/dipole/log.27Nov18.dipole.g++.1 index fc620f23fd..cc82422a9c 100644 --- a/examples/dipole/log.5Oct16.dipole.g++.1 +++ b/examples/dipole/log.27Nov18.dipole.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 -0.845154) to (16.9031 16.9031 0.845154) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 200 atoms + Time spent = 0.00140882 secs # need both mass settings due to hybrid atom style @@ -46,13 +48,18 @@ thermo 500 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 13 13 2 -Memory usage per processor = 4.47689 Mbytes + binsize = 1.4, bins = 13 13 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/dipole/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.049 | 5.049 | 5.049 Mbytes Step Temp E_pair c_erot TotEng Press 0 0 -2.1909822 0 -2.1909822 -2.5750971 500 0.39335419 -2.7940623 0.20683255 -2.4026749 -0.24768899 @@ -75,20 +82,20 @@ Step Temp E_pair c_erot TotEng Press 9000 0.42532413 -2.748856 0.21378021 -2.3256584 0.015079949 9500 0.42237159 -2.7266142 0.20255034 -2.3063545 -0.15538561 10000 0.40758268 -2.778401 0.2746675 -2.3728562 -0.20811978 -Loop time of 1.05484 on 1 procs for 10000 steps with 200 atoms +Loop time of 0.851938 on 1 procs for 10000 steps with 200 atoms -Performance: 4095400.088 tau/day, 9480.093 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 5070791.481 tau/day, 11737.943 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.88325 | 0.88325 | 0.88325 | 0.0 | 83.73 -Neigh | 0.038596 | 0.038596 | 0.038596 | 0.0 | 3.66 -Comm | 0.034257 | 0.034257 | 0.034257 | 0.0 | 3.25 -Output | 0.00013828 | 0.00013828 | 0.00013828 | 0.0 | 0.01 -Modify | 0.083041 | 0.083041 | 0.083041 | 0.0 | 7.87 -Other | | 0.01556 | | | 1.48 +Pair | 0.64889 | 0.64889 | 0.64889 | 0.0 | 76.17 +Neigh | 0.04038 | 0.04038 | 0.04038 | 0.0 | 4.74 +Comm | 0.058003 | 0.058003 | 0.058003 | 0.0 | 6.81 +Output | 0.00021219 | 0.00021219 | 0.00021219 | 0.0 | 0.02 +Modify | 0.083454 | 0.083454 | 0.083454 | 0.0 | 9.80 +Other | | 0.021 | | | 2.47 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -101,4 +108,4 @@ Total # of neighbors = 1625 Ave neighs/atom = 8.125 Neighbor list builds = 673 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/dipole/log.5Oct16.dipole.g++.4 b/examples/dipole/log.27Nov18.dipole.g++.4 similarity index 77% rename from examples/dipole/log.5Oct16.dipole.g++.4 rename to examples/dipole/log.27Nov18.dipole.g++.4 index b573253fbc..f33bfde451 100644 --- a/examples/dipole/log.5Oct16.dipole.g++.4 +++ b/examples/dipole/log.27Nov18.dipole.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 -0.845154) to (16.9031 16.9031 0.845154) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 200 atoms + Time spent = 0.00139761 secs # need both mass settings due to hybrid atom style @@ -46,13 +48,18 @@ thermo 500 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 13 13 2 -Memory usage per processor = 4.47621 Mbytes + binsize = 1.4, bins = 13 13 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/dipole/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.047 | 5.047 | 5.047 Mbytes Step Temp E_pair c_erot TotEng Press 0 0 -2.1909822 0 -2.1909822 -2.5750971 500 0.39335419 -2.7940623 0.20683255 -2.4026749 -0.24768899 @@ -75,20 +82,20 @@ Step Temp E_pair c_erot TotEng Press 9000 0.42318631 -2.7600929 0.25229644 -2.3390225 0.36820391 9500 0.42857449 -2.6958592 0.18686752 -2.2694276 0.15379721 10000 0.43323126 -2.71981 0.22185737 -2.2887449 0.038354509 -Loop time of 0.406978 on 4 procs for 10000 steps with 200 atoms +Loop time of 0.396069 on 4 procs for 10000 steps with 200 atoms -Performance: 10614834.981 tau/day, 24571.377 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 10907185.759 tau/day, 25248.115 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.18518 | 0.23558 | 0.25487 | 6.0 | 57.88 -Neigh | 0.0090437 | 0.011033 | 0.011971 | 1.1 | 2.71 -Comm | 0.086857 | 0.10807 | 0.16262 | 9.6 | 26.56 -Output | 0.00029182 | 0.00031263 | 0.00035739 | 0.1 | 0.08 -Modify | 0.022396 | 0.025649 | 0.026865 | 1.2 | 6.30 -Other | | 0.02633 | | | 6.47 +Pair | 0.13746 | 0.17338 | 0.19067 | 5.1 | 43.77 +Neigh | 0.0096052 | 0.011424 | 0.012275 | 1.0 | 2.88 +Comm | 0.12394 | 0.14718 | 0.1914 | 7.1 | 37.16 +Output | 0.00037861 | 0.00056618 | 0.0011225 | 0.0 | 0.14 +Modify | 0.021838 | 0.024665 | 0.026625 | 1.1 | 6.23 +Other | | 0.03886 | | | 9.81 Nlocal: 50 ave 53 max 41 min Histogram: 1 0 0 0 0 0 0 0 0 3 diff --git a/examples/dreiding/in.dreiding b/examples/dreiding/in.dreiding index 4b811248d4..db0738fd32 100644 --- a/examples/dreiding/in.dreiding +++ b/examples/dreiding/in.dreiding @@ -2,28 +2,28 @@ units real atom_style full boundary p p p dielectric 1 -special_bonds lj/coul 0.0 0.0 1.0 +special_bonds lj/coul 0.0 0.0 1.0 pair_style hybrid/overlay hbond/dreiding/lj 2 6 6.5 90 lj/cut/coul/long 8.50000 11.5 -bond_style harmonic -angle_style harmonic +bond_style harmonic +angle_style harmonic dihedral_style harmonic improper_style none -kspace_style pppm 0.001 +kspace_style pppm 0.001 read_data data.dreiding -pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 -pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 -pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 -pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 -pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 -pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 -pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 -pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 -pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 -pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 -pair_coeff 4 4 hbond/dreiding/lj 2 i 0.4000E+01 2.750000000000000 4 +pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 +pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 +pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 +pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 +pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 +pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 +pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 +pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 +pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 +pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 +pair_coeff 4 4 hbond/dreiding/lj 2 i 4.000 2.750000000000000 4 pair_modify mix arithmetic neighbor 2.0 multi neigh_modify every 2 delay 4 check yes @@ -33,7 +33,11 @@ variable sname index ch3oh.box.dreiding compute hb all pair hbond/dreiding/lj variable C_hbond equal c_hb[1] #number hbonds variable E_hbond equal c_hb[2] #hbond energy -thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol -thermo_modify line multi format float %14.6f +thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol +thermo_modify line multi format float %14.6f -run 0 +fix 1 all nve + +thermo 10 + +run 100 diff --git a/examples/dreiding/log.27Nov18.dreiding.g++.1 b/examples/dreiding/log.27Nov18.dreiding.g++.1 new file mode 100644 index 0000000000..bbc2105238 --- /dev/null +++ b/examples/dreiding/log.27Nov18.dreiding.g++.1 @@ -0,0 +1,198 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +atom_style full +boundary p p p +dielectric 1 +special_bonds lj/coul 0.0 0.0 1.0 + +pair_style hybrid/overlay hbond/dreiding/lj 2 6 6.5 90 lj/cut/coul/long 8.50000 11.5 +bond_style harmonic +angle_style harmonic +dihedral_style harmonic +improper_style none +kspace_style pppm 0.001 + +read_data data.dreiding + orthogonal box = (0 0 0) to (19.9969 19.1282 19.4697) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 384 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 3 = max dihedrals/atom + reading bonds ... + 320 bonds + reading angles ... + 448 angles + reading dihedrals ... + 192 dihedrals + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 5 = max # of special neighbors + +pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 +pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 +pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 +pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 +pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 +pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 +pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 +pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 +pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 +pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 +pair_coeff 4 4 hbond/dreiding/lj 2 i 4.000 2.750000000000000 4 +pair_modify mix arithmetic +neighbor 2.0 multi +neigh_modify every 2 delay 4 check yes +variable input index in.ch3oh.box.dreiding +variable sname index ch3oh.box.dreiding + +compute hb all pair hbond/dreiding/lj +variable C_hbond equal c_hb[1] #number hbonds +variable E_hbond equal c_hb[2] #hbond energy +thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol +thermo_modify line multi format float %14.6f + +fix 1 all nve + +thermo 10 + +run 100 +PPPM initialization ... +WARNING: System is not charge neutral, net charge = -0.00064 (src/kspace.cpp:302) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.142073 + grid = 3 3 3 + stencil order = 5 + estimated absolute RMS force accuracy = 0.154715 + estimated relative force accuracy = 0.00046592 + using double precision FFTs + 3d grid and FFT values/proc = 512 27 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13.5 + ghost atom cutoff = 13.5 + binsize = 6.75, bins = 3 3 3 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair hbond/dreiding/lj, perpetual, skip from (3) + attributes: full, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/coul/long, perpetual, half/full from (3) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: full, newton on + pair build: full/multi + stencil: full/multi/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.47 | 11.47 | 11.47 Mbytes +---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- +TotEng = 113.723601 KinEng = 0.000000 Temp = 0.000000 +PotEng = 113.723601 E_bond = 0.535673 E_angle = 1.281880 +E_dihed = 1.232497 E_impro = 0.000000 E_vdwl = -125.381324 +E_coul = 597.219740 E_long = -361.164864 v_E_hbond = -69.322152 +v_C_hbond = 235.000000 Press = -328.847347 Volume = 7447.236335 +---------------- Step 10 ----- CPU = 0.0306 (sec) ---------------- +TotEng = 113.773202 KinEng = 1.537257 Temp = 1.346522 +PotEng = 112.235945 E_bond = 0.530880 E_angle = 1.407481 +E_dihed = 1.084172 E_impro = 0.000000 E_vdwl = -126.339883 +E_coul = 596.742306 E_long = -361.189011 v_E_hbond = -69.944278 +v_C_hbond = 240.000000 Press = -395.900496 Volume = 7447.236335 +---------------- Step 20 ----- CPU = 0.0597 (sec) ---------------- +TotEng = 113.879292 KinEng = 2.999580 Temp = 2.627407 +PotEng = 110.879711 E_bond = 0.549156 E_angle = 1.323582 +E_dihed = 1.357398 E_impro = 0.000000 E_vdwl = -127.482103 +E_coul = 596.318729 E_long = -361.187051 v_E_hbond = -70.088343 +v_C_hbond = 237.000000 Press = -487.150418 Volume = 7447.236335 +---------------- Step 30 ----- CPU = 0.0889 (sec) ---------------- +TotEng = 113.587474 KinEng = 4.369566 Temp = 3.827412 +PotEng = 109.217908 E_bond = 0.416485 E_angle = 1.294630 +E_dihed = 1.710254 E_impro = 0.000000 E_vdwl = -128.565697 +E_coul = 595.560846 E_long = -361.198612 v_E_hbond = -69.848068 +v_C_hbond = 238.000000 Press = -423.966898 Volume = 7447.236335 +---------------- Step 40 ----- CPU = 0.1178 (sec) ---------------- +TotEng = 113.915503 KinEng = 6.466349 Temp = 5.664037 +PotEng = 107.449154 E_bond = 0.514530 E_angle = 1.342583 +E_dihed = 1.536929 E_impro = 0.000000 E_vdwl = -129.858713 +E_coul = 595.186400 E_long = -361.272576 v_E_hbond = -69.871393 +v_C_hbond = 237.000000 Press = -498.152652 Volume = 7447.236335 +---------------- Step 50 ----- CPU = 0.1467 (sec) ---------------- +TotEng = 113.787839 KinEng = 8.050614 Temp = 7.051734 +PotEng = 105.737226 E_bond = 0.652153 E_angle = 1.416041 +E_dihed = 1.363560 E_impro = 0.000000 E_vdwl = -130.513518 +E_coul = 594.139769 E_long = -361.320780 v_E_hbond = -69.593967 +v_C_hbond = 233.000000 Press = -557.299799 Volume = 7447.236335 +---------------- Step 60 ----- CPU = 0.1755 (sec) ---------------- +TotEng = 114.120941 KinEng = 10.318793 Temp = 9.038489 +PotEng = 103.802148 E_bond = 0.576578 E_angle = 1.285008 +E_dihed = 1.123936 E_impro = 0.000000 E_vdwl = -131.268312 +E_coul = 593.450009 E_long = -361.365070 v_E_hbond = -70.107165 +v_C_hbond = 238.000000 Press = -571.907188 Volume = 7447.236335 +---------------- Step 70 ----- CPU = 0.2044 (sec) ---------------- +TotEng = 113.836161 KinEng = 11.873184 Temp = 10.400019 +PotEng = 101.962977 E_bond = 0.633521 E_angle = 1.315999 +E_dihed = 1.055318 E_impro = 0.000000 E_vdwl = -131.673572 +E_coul = 592.039194 E_long = -361.407483 v_E_hbond = -70.518544 +v_C_hbond = 240.000000 Press = -576.731444 Volume = 7447.236335 +---------------- Step 80 ----- CPU = 0.2333 (sec) ---------------- +TotEng = 113.589436 KinEng = 13.546467 Temp = 11.865689 +PotEng = 100.042970 E_bond = 0.637759 E_angle = 1.439918 +E_dihed = 1.020307 E_impro = 0.000000 E_vdwl = -131.980346 +E_coul = 590.365879 E_long = -361.440548 v_E_hbond = -71.174370 +v_C_hbond = 245.000000 Press = -735.254308 Volume = 7447.236335 +---------------- Step 90 ----- CPU = 0.2622 (sec) ---------------- +TotEng = 114.100567 KinEng = 15.870735 Temp = 13.901574 +PotEng = 98.229832 E_bond = 0.724671 E_angle = 1.435914 +E_dihed = 1.028167 E_impro = 0.000000 E_vdwl = -132.680267 +E_coul = 589.225626 E_long = -361.504279 v_E_hbond = -72.653223 +v_C_hbond = 245.000000 Press = -820.598954 Volume = 7447.236335 +---------------- Step 100 ----- CPU = 0.2911 (sec) ---------------- +TotEng = 113.670041 KinEng = 17.406803 Temp = 15.247054 +PotEng = 96.263238 E_bond = 0.711253 E_angle = 1.338059 +E_dihed = 1.474770 E_impro = 0.000000 E_vdwl = -132.917719 +E_coul = 587.219020 E_long = -361.562145 v_E_hbond = -74.299795 +v_C_hbond = 246.000000 Press = -786.245946 Volume = 7447.236335 +Loop time of 0.291149 on 1 procs for 100 steps with 384 atoms + +Performance: 29.676 ns/day, 0.809 hours/ns, 343.467 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.255 | 0.255 | 0.255 | 0.0 | 87.59 +Bond | 0.0042725 | 0.0042725 | 0.0042725 | 0.0 | 1.47 +Kspace | 0.027151 | 0.027151 | 0.027151 | 0.0 | 9.33 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0034399 | 0.0034399 | 0.0034399 | 0.0 | 1.18 +Output | 0.00025988 | 0.00025988 | 0.00025988 | 0.0 | 0.09 +Modify | 0.00059223 | 0.00059223 | 0.00059223 | 0.0 | 0.20 +Other | | 0.0004294 | | | 0.15 + +Nlocal: 384 ave 384 max 384 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 4637 ave 4637 max 4637 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 101854 ave 101854 max 101854 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 5624 ave 5624 max 5624 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 101854 +Ave neighs/atom = 265.245 +Ave special neighs/atom = 4 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/dreiding/log.27Nov18.dreiding.g++.4 b/examples/dreiding/log.27Nov18.dreiding.g++.4 new file mode 100644 index 0000000000..f765d71fbe --- /dev/null +++ b/examples/dreiding/log.27Nov18.dreiding.g++.4 @@ -0,0 +1,198 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +atom_style full +boundary p p p +dielectric 1 +special_bonds lj/coul 0.0 0.0 1.0 + +pair_style hybrid/overlay hbond/dreiding/lj 2 6 6.5 90 lj/cut/coul/long 8.50000 11.5 +bond_style harmonic +angle_style harmonic +dihedral_style harmonic +improper_style none +kspace_style pppm 0.001 + +read_data data.dreiding + orthogonal box = (0 0 0) to (19.9969 19.1282 19.4697) + 2 by 1 by 2 MPI processor grid + reading atoms ... + 384 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 3 = max dihedrals/atom + reading bonds ... + 320 bonds + reading angles ... + 448 angles + reading dihedrals ... + 192 dihedrals + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 5 = max # of special neighbors + +pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 +pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 +pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 +pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 +pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 +pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 +pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 +pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 +pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 +pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 +pair_coeff 4 4 hbond/dreiding/lj 2 i 4.000 2.750000000000000 4 +pair_modify mix arithmetic +neighbor 2.0 multi +neigh_modify every 2 delay 4 check yes +variable input index in.ch3oh.box.dreiding +variable sname index ch3oh.box.dreiding + +compute hb all pair hbond/dreiding/lj +variable C_hbond equal c_hb[1] #number hbonds +variable E_hbond equal c_hb[2] #hbond energy +thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol +thermo_modify line multi format float %14.6f + +fix 1 all nve + +thermo 10 + +run 100 +PPPM initialization ... +WARNING: System is not charge neutral, net charge = -0.00064 (src/kspace.cpp:302) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.142073 + grid = 3 3 3 + stencil order = 5 + estimated absolute RMS force accuracy = 0.154715 + estimated relative force accuracy = 0.00046592 + using double precision FFTs + 3d grid and FFT values/proc = 392 12 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13.5 + ghost atom cutoff = 13.5 + binsize = 6.75, bins = 3 3 3 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair hbond/dreiding/lj, perpetual, skip from (3) + attributes: full, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/coul/long, perpetual, half/full from (3) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: full, newton on + pair build: full/multi + stencil: full/multi/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.17 | 10.17 | 10.17 Mbytes +---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- +TotEng = 113.723601 KinEng = 0.000000 Temp = 0.000000 +PotEng = 113.723601 E_bond = 0.535673 E_angle = 1.281880 +E_dihed = 1.232497 E_impro = 0.000000 E_vdwl = -125.381324 +E_coul = 597.219740 E_long = -361.164864 v_E_hbond = -69.322152 +v_C_hbond = 235.000000 Press = -328.847347 Volume = 7447.236335 +---------------- Step 10 ----- CPU = 0.0112 (sec) ---------------- +TotEng = 113.773202 KinEng = 1.537257 Temp = 1.346522 +PotEng = 112.235945 E_bond = 0.530880 E_angle = 1.407481 +E_dihed = 1.084172 E_impro = 0.000000 E_vdwl = -126.339883 +E_coul = 596.742306 E_long = -361.189011 v_E_hbond = -69.944278 +v_C_hbond = 240.000000 Press = -395.900496 Volume = 7447.236335 +---------------- Step 20 ----- CPU = 0.0206 (sec) ---------------- +TotEng = 113.879292 KinEng = 2.999580 Temp = 2.627407 +PotEng = 110.879711 E_bond = 0.549156 E_angle = 1.323582 +E_dihed = 1.357398 E_impro = 0.000000 E_vdwl = -127.482103 +E_coul = 596.318729 E_long = -361.187051 v_E_hbond = -70.088343 +v_C_hbond = 237.000000 Press = -487.150418 Volume = 7447.236335 +---------------- Step 30 ----- CPU = 0.0299 (sec) ---------------- +TotEng = 113.587474 KinEng = 4.369566 Temp = 3.827412 +PotEng = 109.217908 E_bond = 0.416485 E_angle = 1.294630 +E_dihed = 1.710254 E_impro = 0.000000 E_vdwl = -128.565697 +E_coul = 595.560846 E_long = -361.198612 v_E_hbond = -69.848068 +v_C_hbond = 238.000000 Press = -423.966898 Volume = 7447.236335 +---------------- Step 40 ----- CPU = 0.0403 (sec) ---------------- +TotEng = 113.915503 KinEng = 6.466349 Temp = 5.664037 +PotEng = 107.449154 E_bond = 0.514530 E_angle = 1.342583 +E_dihed = 1.536929 E_impro = 0.000000 E_vdwl = -129.858713 +E_coul = 595.186400 E_long = -361.272576 v_E_hbond = -69.871393 +v_C_hbond = 237.000000 Press = -498.152652 Volume = 7447.236335 +---------------- Step 50 ----- CPU = 0.0494 (sec) ---------------- +TotEng = 113.787839 KinEng = 8.050614 Temp = 7.051734 +PotEng = 105.737226 E_bond = 0.652153 E_angle = 1.416041 +E_dihed = 1.363560 E_impro = 0.000000 E_vdwl = -130.513518 +E_coul = 594.139769 E_long = -361.320780 v_E_hbond = -69.593967 +v_C_hbond = 233.000000 Press = -557.299799 Volume = 7447.236335 +---------------- Step 60 ----- CPU = 0.0588 (sec) ---------------- +TotEng = 114.120941 KinEng = 10.318793 Temp = 9.038489 +PotEng = 103.802148 E_bond = 0.576578 E_angle = 1.285008 +E_dihed = 1.123936 E_impro = 0.000000 E_vdwl = -131.268312 +E_coul = 593.450009 E_long = -361.365070 v_E_hbond = -70.107165 +v_C_hbond = 238.000000 Press = -571.907188 Volume = 7447.236335 +---------------- Step 70 ----- CPU = 0.0680 (sec) ---------------- +TotEng = 113.836161 KinEng = 11.873184 Temp = 10.400019 +PotEng = 101.962977 E_bond = 0.633521 E_angle = 1.315999 +E_dihed = 1.055318 E_impro = 0.000000 E_vdwl = -131.673572 +E_coul = 592.039194 E_long = -361.407483 v_E_hbond = -70.518544 +v_C_hbond = 240.000000 Press = -576.731444 Volume = 7447.236335 +---------------- Step 80 ----- CPU = 0.0790 (sec) ---------------- +TotEng = 113.589436 KinEng = 13.546467 Temp = 11.865689 +PotEng = 100.042970 E_bond = 0.637759 E_angle = 1.439918 +E_dihed = 1.020307 E_impro = 0.000000 E_vdwl = -131.980346 +E_coul = 590.365879 E_long = -361.440548 v_E_hbond = -71.174370 +v_C_hbond = 245.000000 Press = -735.254308 Volume = 7447.236335 +---------------- Step 90 ----- CPU = 0.0883 (sec) ---------------- +TotEng = 114.100567 KinEng = 15.870735 Temp = 13.901574 +PotEng = 98.229832 E_bond = 0.724671 E_angle = 1.435914 +E_dihed = 1.028167 E_impro = 0.000000 E_vdwl = -132.680267 +E_coul = 589.225626 E_long = -361.504279 v_E_hbond = -72.653223 +v_C_hbond = 245.000000 Press = -820.598954 Volume = 7447.236335 +---------------- Step 100 ----- CPU = 0.0976 (sec) ---------------- +TotEng = 113.670041 KinEng = 17.406803 Temp = 15.247054 +PotEng = 96.263238 E_bond = 0.711253 E_angle = 1.338059 +E_dihed = 1.474770 E_impro = 0.000000 E_vdwl = -132.917719 +E_coul = 587.219020 E_long = -361.562145 v_E_hbond = -74.299795 +v_C_hbond = 246.000000 Press = -786.245946 Volume = 7447.236335 +Loop time of 0.0976357 on 4 procs for 100 steps with 384 atoms + +Performance: 88.492 ns/day, 0.271 hours/ns, 1024.215 timesteps/s +96.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.055383 | 0.065178 | 0.07438 | 2.7 | 66.76 +Bond | 0.00099874 | 0.0011503 | 0.001229 | 0.3 | 1.18 +Kspace | 0.013823 | 0.022918 | 0.032308 | 4.4 | 23.47 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0064669 | 0.0072899 | 0.0078194 | 0.6 | 7.47 +Output | 0.00039268 | 0.00043893 | 0.00056481 | 0.0 | 0.45 +Modify | 0.000175 | 0.00019002 | 0.00020623 | 0.0 | 0.19 +Other | | 0.0004706 | | | 0.48 + +Nlocal: 96 ave 104 max 87 min +Histogram: 1 1 0 0 0 0 0 0 0 2 +Nghost: 3063.25 ave 3108 max 3024 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Neighs: 25463.5 ave 28799 max 22471 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +FullNghs: 1406 ave 1664 max 1237 min +Histogram: 1 0 1 1 0 0 0 0 0 1 + +Total # of neighbors = 101854 +Ave neighs/atom = 265.245 +Ave special neighs/atom = 4 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/dreiding/log.5Oct16.dreiding.g++.1 b/examples/dreiding/log.5Oct16.dreiding.g++.1 deleted file mode 100644 index 5208fe7d1c..0000000000 --- a/examples/dreiding/log.5Oct16.dreiding.g++.1 +++ /dev/null @@ -1,118 +0,0 @@ -LAMMPS (5 Oct 2016) -units real -atom_style full -boundary p p p -dielectric 1 -special_bonds lj/coul 0.0 0.0 1.0 - -pair_style hybrid/overlay hbond/dreiding/lj 2 6 6.5 90 lj/cut/coul/long 8.50000 11.5 -bond_style harmonic -angle_style harmonic -dihedral_style harmonic -improper_style none -kspace_style pppm 0.001 - -read_data data.dreiding - orthogonal box = (0 0 0) to (19.9969 19.1282 19.4697) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 384 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 3 = max dihedrals/atom - reading bonds ... - 320 bonds - reading angles ... - 448 angles - reading dihedrals ... - 192 dihedrals - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 5 = max # of special neighbors - -pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 -pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 -pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 -pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 -pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 -pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 -pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 -pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 -pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 -pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 -pair_coeff 4 4 hbond/dreiding/lj 2 i 0.4000E+01 2.750000000000000 4 -pair_modify mix arithmetic -neighbor 2.0 multi -neigh_modify every 2 delay 4 check yes -variable input index in.ch3oh.box.dreiding -variable sname index ch3oh.box.dreiding - -compute hb all pair hbond/dreiding/lj -variable C_hbond equal c_hb[1] #number hbonds -variable E_hbond equal c_hb[2] #hbond energy -thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol -thermo_modify line multi format float %14.6f - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -PPPM initialization ... -WARNING: System is not charge neutral, net charge = -0.00064 (../kspace.cpp:297) -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.142073 - grid = 3 3 3 - stencil order = 5 - estimated absolute RMS force accuracy = 0.154715 - estimated relative force accuracy = 0.00046592 - using double precision FFTs - 3d grid and FFT values/proc = 512 27 -Neighbor list info ... - 3 neighbor list requests - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 13.5 - ghost atom cutoff = 13.5 - binsize = 6.75 -> bins = 3 3 3 -Memory usage per processor = 9.19186 Mbytes ----------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- -TotEng = 113.723601 KinEng = 0.000000 Temp = 0.000000 -PotEng = 113.723601 E_bond = 0.535673 E_angle = 1.281880 -E_dihed = 1.232497 E_impro = 0.000000 E_vdwl = -125.381324 -E_coul = 597.219740 E_long = -361.164864 v_E_hbond = -69.322152 -v_C_hbond = 235.000000 Press = -328.847347 Volume = 7447.236335 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 384 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Bond | 0 | 0 | 0 | 0.0 | 0.00 -Kspace | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 384 ave 384 max 384 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 4637 ave 4637 max 4637 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 101854 ave 101854 max 101854 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 203708 ave 203708 max 203708 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 203708 -Ave neighs/atom = 530.49 -Ave special neighs/atom = 4 -Neighbor list builds = 0 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:00 diff --git a/examples/dreiding/log.5Oct16.dreiding.g++.4 b/examples/dreiding/log.5Oct16.dreiding.g++.4 deleted file mode 100644 index 551b8cbb1b..0000000000 --- a/examples/dreiding/log.5Oct16.dreiding.g++.4 +++ /dev/null @@ -1,118 +0,0 @@ -LAMMPS (5 Oct 2016) -units real -atom_style full -boundary p p p -dielectric 1 -special_bonds lj/coul 0.0 0.0 1.0 - -pair_style hybrid/overlay hbond/dreiding/lj 2 6 6.5 90 lj/cut/coul/long 8.50000 11.5 -bond_style harmonic -angle_style harmonic -dihedral_style harmonic -improper_style none -kspace_style pppm 0.001 - -read_data data.dreiding - orthogonal box = (0 0 0) to (19.9969 19.1282 19.4697) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 384 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 3 = max dihedrals/atom - reading bonds ... - 320 bonds - reading angles ... - 448 angles - reading dihedrals ... - 192 dihedrals - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 5 = max # of special neighbors - -pair_coeff 1 1 lj/cut/coul/long 0.015200000256300 2.846421344984478 -pair_coeff 1 2 lj/cut/coul/long 0.001232882795416 2.846421344984478 -pair_coeff 1 3 lj/cut/coul/long 0.038019995160237 3.159705878878677 -pair_coeff 1 4 lj/cut/coul/long 0.038139744011598 2.939787518071103 -pair_coeff 2 2 lj/cut/coul/long 9.99999974737875e-05 2.846421344984478 -pair_coeff 2 3 lj/cut/coul/long 0.003083828758188 3.159705878878677 -pair_coeff 2 4 lj/cut/coul/long 0.003093541672406 2.939787518071103 -pair_coeff 3 3 lj/cut/coul/long 0.095100000500679 3.472990412772877 -pair_coeff 3 4 lj/cut/coul/long 0.095399530150179 3.253072051965302 -pair_coeff 4 4 lj/cut/coul/long 0.095700003206730 3.033153691157727 -pair_coeff 4 4 hbond/dreiding/lj 2 i 0.4000E+01 2.750000000000000 4 -pair_modify mix arithmetic -neighbor 2.0 multi -neigh_modify every 2 delay 4 check yes -variable input index in.ch3oh.box.dreiding -variable sname index ch3oh.box.dreiding - -compute hb all pair hbond/dreiding/lj -variable C_hbond equal c_hb[1] #number hbonds -variable E_hbond equal c_hb[2] #hbond energy -thermo_style custom etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong v_E_hbond v_C_hbond press vol -thermo_modify line multi format float %14.6f - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -PPPM initialization ... -WARNING: System is not charge neutral, net charge = -0.00064 (../kspace.cpp:297) -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) - G vector (1/distance) = 0.142073 - grid = 3 3 3 - stencil order = 5 - estimated absolute RMS force accuracy = 0.154715 - estimated relative force accuracy = 0.00046592 - using double precision FFTs - 3d grid and FFT values/proc = 392 12 -Neighbor list info ... - 3 neighbor list requests - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 13.5 - ghost atom cutoff = 13.5 - binsize = 6.75 -> bins = 3 3 3 -Memory usage per processor = 9.05502 Mbytes ----------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- -TotEng = 113.723601 KinEng = 0.000000 Temp = 0.000000 -PotEng = 113.723601 E_bond = 0.535673 E_angle = 1.281880 -E_dihed = 1.232497 E_impro = 0.000000 E_vdwl = -125.381324 -E_coul = 597.219740 E_long = -361.164864 v_E_hbond = -69.322152 -v_C_hbond = 235.000000 Press = -328.847347 Volume = 7447.236335 -Loop time of 4.52995e-06 on 4 procs for 0 steps with 384 atoms - -0.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Bond | 0 | 0 | 0 | 0.0 | 0.00 -Kspace | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 4.53e-06 | | |100.00 - -Nlocal: 96 ave 104 max 87 min -Histogram: 1 1 0 0 0 0 0 0 0 2 -Nghost: 3063.25 ave 3108 max 3024 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Neighs: 25463.5 ave 28799 max 22471 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -FullNghs: 50927 ave 55516 max 46073 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 203708 -Ave neighs/atom = 530.49 -Ave special neighs/atom = 4 -Neighbor list builds = 0 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:00 From 4a8f1a7a088bbf4867a981ca964b334f4a8c9355 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 16:11:15 -0500 Subject: [PATCH 213/273] update log files for eim example --- examples/eim/ffield.eim | 146 +---------------------------- examples/eim/log.27Nov18.eim.g++.1 | 94 +++++++++++++++++++ examples/eim/log.27Nov18.eim.g++.4 | 94 +++++++++++++++++++ examples/eim/log.5Oct16.eim.g++.1 | 88 ----------------- examples/eim/log.5Oct16.eim.g++.4 | 88 ----------------- 5 files changed, 189 insertions(+), 321 deletions(-) mode change 100644 => 120000 examples/eim/ffield.eim create mode 100644 examples/eim/log.27Nov18.eim.g++.1 create mode 100644 examples/eim/log.27Nov18.eim.g++.4 delete mode 100644 examples/eim/log.5Oct16.eim.g++.1 delete mode 100644 examples/eim/log.5Oct16.eim.g++.4 diff --git a/examples/eim/ffield.eim b/examples/eim/ffield.eim deleted file mode 100644 index b29bee83a4..0000000000 --- a/examples/eim/ffield.eim +++ /dev/null @@ -1,145 +0,0 @@ - global: 2.0000e+00 -1.6450e+00 1.6450e+00 ### DATE: 2010-08-31 CONTRIBUTOR: Xiaowang Zhou, xzhou@sandia.gov CITATION: Zhou, unknown -element: Li 3 6.9410e+00 9.8000e-01 1.1220e+00 1.1220e+00 -1.6500e+00 0.0000e+00 -element: Na 11 2.2990e+01 9.3000e-01 1.3690e+00 1.3690e+00 -1.1100e+00 0.0000e+00 -element: K 19 3.9100e+01 8.2000e-01 1.6910e+00 1.6910e+00 -9.3400e-01 0.0000e+00 -element: Rb 37 8.5470e+01 8.2000e-01 1.8350e+00 1.8350e+00 -8.9200e-01 0.0000e+00 -element: Cs 55 1.3290e+02 7.9000e-01 2.0040e+00 2.0040e+00 -8.2000e-01 0.0000e+00 -element: F 9 1.9000e+01 3.9800e+00 9.5600e-01 9.5600e-01 -8.2000e-01 0.0000e+00 -element: Cl 17 3.5450e+01 3.1600e+00 1.4470e+00 1.4470e+00 -1.2660e+00 0.0000e+00 -element: Br 35 7.9900e+01 2.9600e+00 1.6070e+00 1.6070e+00 -1.1620e+00 0.0000e+00 -element: Id 53 1.2690e+02 2.6600e+00 1.8500e+00 1.8500e+00 -1.1100e+00 0.0000e+00 - pair: Li Li 6.0490e+00 6.0490e+00 -2.5330e-01 3.6176e+00 7.5536e+00 & - 3.5017e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.0637e+00 & - 3.3271e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Li Na 6.2550e+00 6.2550e+00 -2.1173e-01 3.8107e+00 7.6502e+00 & - 3.9066e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.2391e+00 & - 4.1481e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Li K 6.5500e+00 6.5500e+00 -1.9593e-01 4.1243e+00 8.3560e+00 & - 4.1457e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.4670e+00 & - 3.1840e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Li Rb 6.6870e+00 6.6870e+00 -1.8748e-01 4.2997e+00 8.8253e+00 & - 4.1380e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.5690e+00 & - 4.7482e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Li Cs 6.1460e+00 6.1460e+00 -1.8290e-01 3.9687e+00 9.7602e+00 & - 5.5766e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.3351e+00 & - 5.9605e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Li F 4.5000e+00 4.5000e+00 -1.2681e+00 1.9644e+00 1.3467e+01 & - 5.2272e+00 5.4300e+00 2.1778e-02 2.0090e+00 5.4840e+00 & - 6.9987e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Li Cl 4.5000e+00 4.5000e+00 -1.1727e+00 2.3957e+00 1.3116e+01 & - 5.0004e+00 6.9360e+00 2.1778e-02 2.5660e+00 5.9750e+00 & - 1.5717e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Li Br 4.7580e+00 4.7580e+00 -8.5748e-01 2.6727e+00 1.4436e+01 & - 9.1593e+00 7.4250e+00 2.1778e-02 2.7470e+00 6.1350e+00 & - 1.9827e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Li Id 5.2390e+00 5.2390e+00 -8.7986e-01 2.9537e+00 1.7362e+01 & - 1.0904e+01 8.1770e+00 2.1778e-02 3.0250e+00 6.3780e+00 & - 1.9661e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Na Na 6.4610e+00 6.4610e+00 -1.7698e-01 4.0039e+00 7.7467e+00 & - 4.3115e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.4144e+00 & - 5.1719e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Na K 6.7560e+00 6.7560e+00 -1.6377e-01 4.3174e+00 8.4525e+00 & - 4.5506e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.6423e+00 & - 3.9698e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Na Rb 6.8930e+00 6.8930e+00 -1.5671e-01 4.4929e+00 8.9219e+00 & - 4.5430e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.7443e+00 & - 5.9200e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Na Cs 6.3520e+00 6.3520e+00 -1.5288e-01 4.1619e+00 9.8567e+00 & - 5.9816e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.5104e+00 & - 7.4315e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Na F 4.5000e+00 4.5000e+00 -1.1620e+00 2.1974e+00 1.1049e+01 & - 4.1424e+00 6.2360e+00 2.1778e-02 2.3070e+00 5.7310e+00 & - 4.9728e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Na Cl 4.8740e+00 4.8740e+00 -8.9972e-01 2.6668e+00 9.4654e+00 & - 4.9503e+00 7.6060e+00 2.1778e-02 2.8140e+00 6.2220e+00 & - 7.7787e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Na Br 5.1630e+00 5.1630e+00 -8.0673e-01 2.7422e+00 8.1178e+00 & - 3.3460e+00 8.0580e+00 2.1778e-02 2.9810e+00 6.3820e+00 & - 4.0042e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Na Id 5.5960e+00 5.5960e+00 -7.2203e-01 3.0252e+00 9.7019e+00 & - 4.4260e+00 8.7330e+00 2.1778e-02 3.2310e+00 6.6250e+00 & - 5.9680e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: K K 7.0510e+00 7.0510e+00 -1.5155e-01 4.6310e+00 9.1583e+00 & - 4.7898e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.8702e+00 & - 3.0471e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: K Rb 7.1880e+00 7.1880e+00 -1.4502e-01 4.8065e+00 9.6276e+00 & - 4.7821e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.9722e+00 & - 4.5441e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: K Cs 6.6460e+00 6.6460e+00 -1.4147e-01 4.4755e+00 1.0563e+01 & - 6.2207e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.7383e+00 & - 5.7043e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: K F 4.6140e+00 4.6140e+00 -1.0775e+00 2.5856e+00 1.0225e+01 & - 5.4019e+00 7.2010e+00 2.1778e-02 2.6640e+00 6.0530e+00 & - 1.0410e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: K Cl 5.4370e+00 5.4370e+00 -8.1301e-01 3.0910e+00 1.2573e+01 & - 7.0710e+00 8.4850e+00 2.1778e-02 3.1390e+00 6.5440e+00 & - 1.4487e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: K Br 5.7030e+00 5.7030e+00 -6.7522e-01 3.2878e+00 1.7293e+01 & - 1.0996e+01 8.9010e+00 2.1778e-02 3.2930e+00 6.7040e+00 & - 1.1194e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: K Id 6.1070e+00 6.1070e+00 -6.0446e-01 3.5269e+00 1.4089e+01 & - 9.0912e+00 9.5310e+00 2.1778e-02 3.5260e+00 6.9470e+00 & - 3.0858e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Rb Rb 7.3250e+00 7.3250e+00 -1.3877e-01 4.9819e+00 1.0097e+01 & - 4.7744e+00 0.0000e+00 2.1778e-02 2.0000e+00 8.0742e+00 & - 6.7765e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Rb Cs 6.7840e+00 6.7840e+00 -1.3538e-01 4.6509e+00 1.1032e+01 & - 6.2130e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.8403e+00 & - 8.5066e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Rb F 4.8760e+00 4.8760e+00 -1.0823e+00 2.7541e+00 1.3747e+01 & - 7.6226e+00 7.6090e+00 2.1778e-02 2.8150e+00 6.1970e+00 & - 1.6872e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Rb Cl 5.6900e+00 5.6900e+00 -7.8153e-01 3.2541e+00 1.5328e+01 & - 7.5403e+00 8.8790e+00 2.1778e-02 3.2850e+00 6.6880e+00 & - 5.1848e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Rb Br 5.9480e+00 5.9480e+00 -6.4488e-01 3.4287e+00 1.4880e+01 & - 9.5493e+00 9.2820e+00 2.1778e-02 3.4340e+00 6.8480e+00 & - 1.3768e-02 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Rb Id 6.3440e+00 6.3440e+00 -5.3162e-01 3.6720e+00 1.5074e+01 & - 9.7627e+00 9.9010e+00 2.1778e-02 3.6630e+00 7.0910e+00 & - 7.4616e-02 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Cs Cs 6.2420e+00 6.2420e+00 -1.3207e-01 4.3199e+00 1.1967e+01 & - 7.6516e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.6064e+00 & - 1.0679e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Cs F 5.2050e+00 5.2050e+00 -9.8283e-01 3.0007e+00 1.3854e+01 & - 7.7871e+00 8.1230e+00 2.1778e-02 3.0050e+00 6.3660e+00 & - 2.3092e-01 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Cs Cl 5.9750e+00 5.9750e+00 -5.8967e-01 3.4958e+00 1.1434e+01 & - 6.9253e+00 9.3250e+00 2.1778e-02 3.4500e+00 6.8570e+00 & - 2.1629e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Cs Br 6.2320e+00 6.2320e+00 -5.5406e-01 3.6322e+00 1.2533e+01 & - 8.0448e+00 9.7250e+00 2.1778e-02 3.5980e+00 7.0170e+00 & - 2.1997e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: Cs Id 6.6210e+00 6.6210e+00 -5.3436e-01 3.8333e+00 1.2407e+01 & - 7.9302e+00 1.0334e+01 2.1778e-02 3.8230e+00 7.2600e+00 & - 2.0446e+00 6.0000e-01 2.0000e+00 2.0000e+00 - pair: F F 6.0090e+00 6.0090e+00 -1.3323e-01 4.0026e+00 7.7698e+00 & - 2.9898e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.0273e+00 & - 1.0029e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: F Cl 6.2890e+00 6.2890e+00 -1.6693e-01 4.3780e+00 8.0429e+00 & - 3.2973e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.2844e+00 & - 4.0767e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: F Br 6.4380e+00 6.4380e+00 -1.6007e-01 4.3642e+00 8.0224e+00 & - 4.1481e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.3941e+00 & - 4.3519e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: F Id 6.6670e+00 6.6670e+00 -1.5664e-01 4.6057e+00 8.3941e+00 & - 4.1673e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.5606e+00 & - 3.8866e-01 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Cl Cl 6.5690e+00 6.5690e+00 -2.0915e-01 4.7534e+00 8.3161e+00 & - 3.6047e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.5415e+00 & - 1.6571e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Cl Br 6.7180e+00 6.7180e+00 -2.0056e-01 4.7396e+00 8.2956e+00 & - 4.4555e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.6512e+00 & - 1.7690e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Cl Id 6.9470e+00 6.9470e+00 -1.9626e-01 4.9811e+00 8.6672e+00 & - 4.4747e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.8177e+00 & - 1.5798e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Br Br 6.8670e+00 6.8670e+00 -1.9232e-01 4.7259e+00 8.2751e+00 & - 5.3064e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.7610e+00 & - 1.8884e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Br Id 7.0960e+00 7.0960e+00 -1.8820e-01 4.9674e+00 8.6467e+00 & - 5.3256e+00 0.0000e+00 2.1778e-02 2.0000e+00 7.9274e+00 & - 1.6865e+00 6.0000e-01 2.0000e+00 1.0000e+00 - pair: Id Id 7.3250e+00 7.3250e+00 -1.8417e-01 5.2089e+00 9.0184e+00 & - 5.3448e+00 0.0000e+00 2.1778e-02 2.0000e+00 8.0939e+00 & - 1.5062e+00 6.0000e-01 2.0000e+00 1.0000e+00 diff --git a/examples/eim/ffield.eim b/examples/eim/ffield.eim new file mode 120000 index 0000000000..46a319baeb --- /dev/null +++ b/examples/eim/ffield.eim @@ -0,0 +1 @@ +../../potentials/ffield.eim \ No newline at end of file diff --git a/examples/eim/log.27Nov18.eim.g++.1 b/examples/eim/log.27Nov18.eim.g++.1 new file mode 100644 index 0000000000..e36d3f4d5f --- /dev/null +++ b/examples/eim/log.27Nov18.eim.g++.1 @@ -0,0 +1,94 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# NaCl test problem for embedded atom method (EIM) potential + +units metal +atom_style atomic + +boundary p p p + +lattice diamond 5.0 +Lattice spacing in x,y,z = 5 5 5 +read_data data.eim + orthogonal box = (-0.5 -0.5 -0.5) to (35.54 35.54 35.54) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2000 atoms + reading velocities ... + 2000 velocities + +pair_style eim +pair_coeff * * Na Cl ffield.eim Na Cl +Reading potential file ffield.eim with DATE: 2010-08-31 + +neighbor 0.3 bin +neigh_modify delay 0 + +timestep 0.001 +thermo_style custom step pe pxx pyy pzz temp +thermo 50 + +velocity all create 1400.0 43454 dist gaussian mom yes +fix int all npt temp 1400.0 300.0 0.1 aniso 0.0 0.0 0.1 + +#dump id all atom 100 dump.eim + +#dump 2 all image 25 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 element Na Cl + +#dump 3 all movie 25 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 element Na Cl + +run 500 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.906 + ghost atom cutoff = 7.906 + binsize = 3.953, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eim, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.169 | 3.169 | 3.169 Mbytes +Step PotEng Pxx Pyy Pzz Temp + 0 -5660.4738 -118151.29 -117613.39 -118064.41 1400 + 50 -5773.8755 1024.91 1034.0269 838.0568 891.54632 + 100 -5742.8536 806.6806 769.72456 836.8687 838.72572 + 150 -5738.7736 -355.86552 -362.389 -155.34159 900.47212 + 200 -5704.2318 -227.29937 -538.51196 -762.1005 834.64611 + 250 -5724.4788 502.49466 657.68817 529.01376 966.07978 + 300 -5718.6085 457.03928 186.13362 725.43587 934.80653 + 350 -5722.7713 -318.51677 -377.15809 125.76892 865.12488 + 400 -5743.7387 -2.3555301 61.330533 -402.22943 840.67167 + 450 -5751.2518 -437.13614 -374.77859 236.60865 743.10367 + 500 -5780.5268 -750.96919 -793.62966 -1722.9652 712.74134 +Loop time of 6.10824 on 1 procs for 500 steps with 2000 atoms + +Performance: 7.072 ns/day, 3.393 hours/ns, 81.857 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.5778 | 5.5778 | 5.5778 | 0.0 | 91.32 +Neigh | 0.43316 | 0.43316 | 0.43316 | 0.0 | 7.09 +Comm | 0.027343 | 0.027343 | 0.027343 | 0.0 | 0.45 +Output | 0.00038743 | 0.00038743 | 0.00038743 | 0.0 | 0.01 +Modify | 0.060761 | 0.060761 | 0.060761 | 0.0 | 0.99 +Other | | 0.008835 | | | 0.14 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 4198 ave 4198 max 4198 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 99451 ave 99451 max 99451 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 99451 +Ave neighs/atom = 49.7255 +Neighbor list builds = 90 +Dangerous builds = 10 +Total wall time: 0:00:06 diff --git a/examples/eim/log.27Nov18.eim.g++.4 b/examples/eim/log.27Nov18.eim.g++.4 new file mode 100644 index 0000000000..08abee78b5 --- /dev/null +++ b/examples/eim/log.27Nov18.eim.g++.4 @@ -0,0 +1,94 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# NaCl test problem for embedded atom method (EIM) potential + +units metal +atom_style atomic + +boundary p p p + +lattice diamond 5.0 +Lattice spacing in x,y,z = 5 5 5 +read_data data.eim + orthogonal box = (-0.5 -0.5 -0.5) to (35.54 35.54 35.54) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2000 atoms + reading velocities ... + 2000 velocities + +pair_style eim +pair_coeff * * Na Cl ffield.eim Na Cl +Reading potential file ffield.eim with DATE: 2010-08-31 + +neighbor 0.3 bin +neigh_modify delay 0 + +timestep 0.001 +thermo_style custom step pe pxx pyy pzz temp +thermo 50 + +velocity all create 1400.0 43454 dist gaussian mom yes +fix int all npt temp 1400.0 300.0 0.1 aniso 0.0 0.0 0.1 + +#dump id all atom 100 dump.eim + +#dump 2 all image 25 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 element Na Cl + +#dump 3 all movie 25 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 element Na Cl + +run 500 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.906 + ghost atom cutoff = 7.906 + binsize = 3.953, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eim, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.051 | 3.051 | 3.051 Mbytes +Step PotEng Pxx Pyy Pzz Temp + 0 -5660.4738 -118151.29 -117613.39 -118064.41 1400 + 50 -5773.8755 1024.91 1034.0269 838.0568 891.54632 + 100 -5742.8536 806.6806 769.72456 836.8687 838.72572 + 150 -5738.7736 -355.86552 -362.389 -155.34159 900.47212 + 200 -5704.2318 -227.29937 -538.51196 -762.1005 834.64611 + 250 -5724.4788 502.49466 657.68817 529.01376 966.07978 + 300 -5718.6085 457.03928 186.13362 725.43587 934.80653 + 350 -5722.7713 -318.51677 -377.15809 125.76892 865.12488 + 400 -5743.7387 -2.3555301 61.330533 -402.22943 840.67167 + 450 -5751.2518 -437.13614 -374.77859 236.60865 743.10367 + 500 -5780.5268 -750.96919 -793.62966 -1722.9652 712.74134 +Loop time of 1.79017 on 4 procs for 500 steps with 2000 atoms + +Performance: 24.132 ns/day, 0.995 hours/ns, 279.303 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.5775 | 1.584 | 1.5959 | 0.6 | 88.48 +Neigh | 0.10838 | 0.10882 | 0.10955 | 0.1 | 6.08 +Comm | 0.050677 | 0.062797 | 0.069371 | 2.9 | 3.51 +Output | 0.00031972 | 0.00056875 | 0.0013139 | 0.0 | 0.03 +Modify | 0.027115 | 0.02819 | 0.028965 | 0.4 | 1.57 +Other | | 0.005774 | | | 0.32 + +Nlocal: 500 ave 501 max 499 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 2180.25 ave 2183 max 2177 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 24862.8 ave 25154 max 24659 min +Histogram: 1 0 1 1 0 0 0 0 0 1 + +Total # of neighbors = 99451 +Ave neighs/atom = 49.7255 +Neighbor list builds = 90 +Dangerous builds = 10 +Total wall time: 0:00:01 diff --git a/examples/eim/log.5Oct16.eim.g++.1 b/examples/eim/log.5Oct16.eim.g++.1 deleted file mode 100644 index 7963101f8e..0000000000 --- a/examples/eim/log.5Oct16.eim.g++.1 +++ /dev/null @@ -1,88 +0,0 @@ -LAMMPS (5 Oct 2016) -# NaCl test problem for embedded atom method (EIM) potential - -units metal -atom_style atomic - -boundary p p p - -lattice diamond 5.0 -Lattice spacing in x,y,z = 5 5 5 -read_data data.eim - orthogonal box = (-0.5 -0.5 -0.5) to (35.54 35.54 35.54) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2000 atoms - reading velocities ... - 2000 velocities - -pair_style eim -pair_coeff * * Na Cl ffield.eim Na Cl -Reading potential file ffield.eim with DATE: 2010-08-31 - -neighbor 0.3 bin -neigh_modify delay 0 - -timestep 0.001 -thermo_style custom step pe pxx pyy pzz temp -thermo 50 - -velocity all create 1400.0 43454 dist gaussian mom yes -fix int all npt temp 1400.0 300.0 0.1 aniso 0.0 0.0 0.1 - -#dump id all atom 100 dump.eim - -#dump 2 all image 25 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 element Na Cl - -#dump 3 all movie 25 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 element Na Cl - -run 500 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.906 - ghost atom cutoff = 7.906 - binsize = 3.953 -> bins = 10 10 10 -Memory usage per processor = 2.76959 Mbytes -Step PotEng Pxx Pyy Pzz Temp - 0 -5660.4738 -118151.29 -117613.39 -118064.41 1400 - 50 -5773.8661 889.73924 898.43321 703.5365 891.68472 - 100 -5742.8192 866.6183 817.86837 889.72898 838.77403 - 150 -5738.752 -335.23317 -345.69716 -123.3196 900.54672 - 200 -5704.2444 -172.01932 -508.83888 -654.45947 834.82705 - 250 -5724.4679 375.50199 546.99196 405.29298 966.14585 - 300 -5718.5442 428.47856 361.93998 752.00729 934.57116 - 350 -5722.7694 -409.40162 -484.53168 42.702482 865.13075 - 400 -5743.6862 173.43552 288.02324 107.96614 840.48912 - 450 -5751.3366 -752.54635 -762.07316 -591.45022 743.42176 - 500 -5780.5266 -157.23981 84.510897 -52.426827 712.64129 -Loop time of 5.86191 on 1 procs for 500 steps with 2000 atoms - -Performance: 7.370 ns/day, 3.257 hours/ns, 85.296 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.4001 | 5.4001 | 5.4001 | 0.0 | 92.12 -Neigh | 0.37572 | 0.37572 | 0.37572 | 0.0 | 6.41 -Comm | 0.019177 | 0.019177 | 0.019177 | 0.0 | 0.33 -Output | 0.00028348 | 0.00028348 | 0.00028348 | 0.0 | 0.00 -Modify | 0.057656 | 0.057656 | 0.057656 | 0.0 | 0.98 -Other | | 0.008926 | | | 0.15 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 4194 ave 4194 max 4194 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 99537 ave 99537 max 99537 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 99537 -Ave neighs/atom = 49.7685 -Neighbor list builds = 89 -Dangerous builds = 10 -Total wall time: 0:00:05 diff --git a/examples/eim/log.5Oct16.eim.g++.4 b/examples/eim/log.5Oct16.eim.g++.4 deleted file mode 100644 index 57713509e2..0000000000 --- a/examples/eim/log.5Oct16.eim.g++.4 +++ /dev/null @@ -1,88 +0,0 @@ -LAMMPS (5 Oct 2016) -# NaCl test problem for embedded atom method (EIM) potential - -units metal -atom_style atomic - -boundary p p p - -lattice diamond 5.0 -Lattice spacing in x,y,z = 5 5 5 -read_data data.eim - orthogonal box = (-0.5 -0.5 -0.5) to (35.54 35.54 35.54) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 2000 atoms - reading velocities ... - 2000 velocities - -pair_style eim -pair_coeff * * Na Cl ffield.eim Na Cl -Reading potential file ffield.eim with DATE: 2010-08-31 - -neighbor 0.3 bin -neigh_modify delay 0 - -timestep 0.001 -thermo_style custom step pe pxx pyy pzz temp -thermo 50 - -velocity all create 1400.0 43454 dist gaussian mom yes -fix int all npt temp 1400.0 300.0 0.1 aniso 0.0 0.0 0.1 - -#dump id all atom 100 dump.eim - -#dump 2 all image 25 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 element Na Cl - -#dump 3 all movie 25 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 element Na Cl - -run 500 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.906 - ghost atom cutoff = 7.906 - binsize = 3.953 -> bins = 10 10 10 -Memory usage per processor = 2.70056 Mbytes -Step PotEng Pxx Pyy Pzz Temp - 0 -5660.4738 -118151.29 -117613.39 -118064.41 1400 - 50 -5773.8661 889.73924 898.43321 703.5365 891.68472 - 100 -5742.8192 866.6183 817.86837 889.72898 838.77403 - 150 -5738.752 -335.23317 -345.69716 -123.3196 900.54672 - 200 -5704.2444 -172.01932 -508.83888 -654.45947 834.82705 - 250 -5724.4679 375.50199 546.99196 405.29298 966.14585 - 300 -5718.5442 428.47856 361.93998 752.00729 934.57116 - 350 -5722.7694 -409.40162 -484.53168 42.702482 865.13075 - 400 -5743.6862 173.43552 288.02324 107.96614 840.48912 - 450 -5751.3366 -752.54635 -762.07316 -591.45022 743.42176 - 500 -5780.5266 -157.23981 84.510897 -52.426827 712.64129 -Loop time of 1.56761 on 4 procs for 500 steps with 2000 atoms - -Performance: 27.558 ns/day, 0.871 hours/ns, 318.957 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.3749 | 1.3896 | 1.4073 | 1.1 | 88.65 -Neigh | 0.093211 | 0.094616 | 0.096788 | 0.5 | 6.04 -Comm | 0.034484 | 0.05451 | 0.070809 | 6.2 | 3.48 -Output | 0.00025511 | 0.00026953 | 0.00029612 | 0.1 | 0.02 -Modify | 0.023773 | 0.023898 | 0.024043 | 0.1 | 1.52 -Other | | 0.004684 | | | 0.30 - -Nlocal: 500 ave 501 max 498 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 2179.25 ave 2182 max 2175 min -Histogram: 1 0 0 0 0 1 0 0 1 1 -Neighs: 24884.2 ave 25164 max 24622 min -Histogram: 1 0 0 1 0 1 0 0 0 1 - -Total # of neighbors = 99537 -Ave neighs/atom = 49.7685 -Neighbor list builds = 89 -Dangerous builds = 10 -Total wall time: 0:00:01 From 8e07aaf00555458826e2d22f844d4c85003718fb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 16:16:19 -0500 Subject: [PATCH 214/273] update log files for ellipse and flow examples --- .../log.27Nov18.ellipse.gayberne.g++.1 | 192 ++++++++++++++++++ .../log.27Nov18.ellipse.gayberne.g++.4 | 192 ++++++++++++++++++ .../log.27Nov18.ellipse.resquared.g++.1 | 189 +++++++++++++++++ .../log.27Nov18.ellipse.resquared.g++.4 | 189 +++++++++++++++++ .../ellipse/log.5Oct16.ellipse.gayberne.g++.1 | 185 ----------------- .../ellipse/log.5Oct16.ellipse.gayberne.g++.4 | 185 ----------------- .../log.5Oct16.ellipse.resquared.g++.1 | 182 ----------------- .../log.5Oct16.ellipse.resquared.g++.4 | 182 ----------------- ...e.g++.1 => log.27Nov18.flow.couette.g++.1} | 35 ++-- ...e.g++.4 => log.27Nov18.flow.couette.g++.4} | 35 ++-- ...pois.g++.1 => log.27Nov18.flow.pois.g++.1} | 35 ++-- ...pois.g++.4 => log.27Nov18.flow.pois.g++.4} | 35 ++-- 12 files changed, 846 insertions(+), 790 deletions(-) create mode 100644 examples/ellipse/log.27Nov18.ellipse.gayberne.g++.1 create mode 100644 examples/ellipse/log.27Nov18.ellipse.gayberne.g++.4 create mode 100644 examples/ellipse/log.27Nov18.ellipse.resquared.g++.1 create mode 100644 examples/ellipse/log.27Nov18.ellipse.resquared.g++.4 delete mode 100644 examples/ellipse/log.5Oct16.ellipse.gayberne.g++.1 delete mode 100644 examples/ellipse/log.5Oct16.ellipse.gayberne.g++.4 delete mode 100644 examples/ellipse/log.5Oct16.ellipse.resquared.g++.1 delete mode 100644 examples/ellipse/log.5Oct16.ellipse.resquared.g++.4 rename examples/flow/{log.5Oct16.flow.couette.g++.1 => log.27Nov18.flow.couette.g++.1} (80%) rename examples/flow/{log.5Oct16.flow.couette.g++.4 => log.27Nov18.flow.couette.g++.4} (80%) rename examples/flow/{log.5Oct16.flow.pois.g++.1 => log.27Nov18.flow.pois.g++.1} (80%) rename examples/flow/{log.5Oct16.flow.pois.g++.4 => log.27Nov18.flow.pois.g++.4} (80%) diff --git a/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.1 b/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.1 new file mode 100644 index 0000000000..cf7d851f64 --- /dev/null +++ b/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.1 @@ -0,0 +1,192 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# GayBerne ellipsoids in LJ background fluid + +units lj +atom_style ellipsoid +dimension 2 + +lattice sq 0.02 +Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 +region box block 0 20 0 20 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 400 atoms + Time spent = 0.000507116 secs + +set group all type/fraction 2 0.1 95392 + 45 settings made for type/fraction +set type 1 mass 1.0 + 355 settings made for mass +set type 2 mass 1.5 + 45 settings made for mass +set type 1 shape 1 1 1 + 355 settings made for shape +set type 2 shape 3 1 1 + 45 settings made for shape +set group all quat/random 18238 + 400 settings made for quat/random + +compute rot all temp/asphere +group spheroid type 1 +355 atoms in group spheroid +variable dof equal count(spheroid)+2 +compute_modify rot extra/dof ${dof} +compute_modify rot extra/dof 357 + +velocity all create 2.4 87287 loop geom + +pair_style gayberne 1.0 3.0 1.0 4.0 +pair_coeff 1 1 3.0 1.0 1 1 1 1 1 1 2.5 +pair_coeff 1 2 3.0 1.0 1 1 1 0 0 0 +pair_coeff 2 2 1.0 1.0 1 1 0.2 0 0 0 + +neighbor 0.8 bin + +thermo_style custom step c_rot epair etotal press vol +thermo 100 + +timestep 0.002 + +compute q all property/atom quatw quati quatj quatk + +#dump 1 all custom 100 dump.ellipse.gayberne # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] + +#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 + +#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 + +fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +compute_modify 1_temp extra/dof ${dof} +compute_modify 1_temp extra/dof 357 + +# equilibrate to shrink box around dilute system + +run 2000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 59 59 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gayberne, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.752 | 4.752 | 4.752 Mbytes +Step c_rot E_pair TotEng Press Volume + 0 2.2718861 0 2.394 0.04788 20000 + 100 1.7443419 0 1.8381003 0.035765442 20557.278 + 200 2.2768798 0 2.3992621 0.046544845 20618.928 + 300 1.8573086 0 1.9571389 0.04239709 18464.842 + 400 2.1707875 -0.00045989278 2.2870073 0.066725499 13701.839 + 500 1.9710982 -0.014545321 2.0486111 0.12205188 8490.5214 + 600 2.0818888 -0.21572832 1.8356955 0.22333255 4697.3035 + 700 2.1551458 -0.68175426 1.4003368 0.60385996 2541.157 + 800 1.8879651 -1.6357045 0.21794544 1.0826917 1444.4484 + 900 2.1993533 -3.0664068 -0.91036919 3.2142529 925.96691 + 1000 1.4285977 -4.3962037 -2.9651113 3.1830461 744.91324 + 1100 1.933074 -4.9398703 -3.0147256 1.4694937 715.30906 + 1200 2.0872875 -4.5711608 -2.4689861 1.4091154 757.68606 + 1300 1.8950043 -4.1568789 -2.2487345 0.19138859 846.69407 + 1400 2.1773467 -3.7905723 -1.6164698 0.55639059 930.77026 + 1500 1.934954 -3.5505876 -1.6187812 0.2572587 1020.2803 + 1600 2.083004 -3.2707357 -1.1794873 0.68661802 1088.5587 + 1700 1.9434093 -3.2434441 -1.3043926 0.72465776 1136.9866 + 1800 1.9731416 -3.2692426 -1.3364608 0.52887378 1162.1022 + 1900 2.0618126 -3.2264372 -1.162807 0.93455596 1155.8306 + 2000 1.894614 -3.3964158 -1.4932323 0.69021871 1125.7713 +Loop time of 0.950695 on 1 procs for 2000 steps with 400 atoms + +Performance: 363523.513 tau/day, 2103.724 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.72638 | 0.72638 | 0.72638 | 0.0 | 76.40 +Neigh | 0.015026 | 0.015026 | 0.015026 | 0.0 | 1.58 +Comm | 0.015169 | 0.015169 | 0.015169 | 0.0 | 1.60 +Output | 0.0004487 | 0.0004487 | 0.0004487 | 0.0 | 0.05 +Modify | 0.18921 | 0.18921 | 0.18921 | 0.0 | 19.90 +Other | | 0.004463 | | | 0.47 + +Nlocal: 400 ave 400 max 400 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 247 ave 247 max 247 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3021 ave 3021 max 3021 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3021 +Ave neighs/atom = 7.5525 +Neighbor list builds = 137 +Dangerous builds = 80 + +# run dynamics on dense system + +unfix 1 +fix 1 all nve/asphere + +run 2000 +Per MPI rank memory allocation (min/avg/max) = 4.763 | 4.763 | 4.763 Mbytes +Step c_rot E_pair TotEng Press Volume + 2000 1.894614 -3.3964158 -1.4932323 0.69021871 1125.7713 + 2100 1.8880098 -3.3875135 -1.4857102 0.21017294 1125.7713 + 2200 1.9098636 -3.4103342 -1.5286928 0.58806422 1125.7713 + 2300 1.9069018 -3.4099451 -1.6100279 0.63472569 1125.7713 + 2400 1.9773111 -3.4856999 -1.5268537 0.68904663 1125.7713 + 2500 2.0027582 -3.5144592 -1.4900208 0.59925433 1125.7713 + 2600 1.9616623 -3.4744355 -1.5230915 0.26873349 1125.7713 + 2700 1.8601168 -3.3625754 -1.4872109 0.68399005 1125.7713 + 2800 1.8194253 -3.319084 -1.5148077 0.62537226 1125.7713 + 2900 1.8465082 -3.3451652 -1.5508026 0.60163613 1125.7713 + 3000 1.8894551 -3.3918005 -1.5180435 0.61243969 1125.7713 + 3100 1.866554 -3.3662479 -1.5275331 0.54334005 1125.7713 + 3200 1.8233715 -3.3204693 -1.5180055 0.82717864 1125.7713 + 3300 1.7945158 -3.2898507 -1.4976351 0.56745564 1125.7713 + 3400 1.8242025 -3.3242538 -1.5070312 1.0550995 1125.7713 + 3500 1.860405 -3.3595757 -1.5138968 0.56959347 1125.7713 + 3600 1.76951 -3.2635375 -1.5302852 0.47091998 1125.7713 + 3700 1.7874111 -3.2838743 -1.4858244 0.74507678 1125.7713 + 3800 1.8084002 -3.3081089 -1.5294313 0.63717641 1125.7713 + 3900 1.9201118 -3.4261733 -1.4874713 0.4111663 1125.7713 + 4000 1.9130445 -3.4170846 -1.49357 0.35783848 1125.7713 +Loop time of 1.05944 on 1 procs for 2000 steps with 400 atoms + +Performance: 326208.857 tau/day, 1887.783 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.91753 | 0.91753 | 0.91753 | 0.0 | 86.60 +Neigh | 0.0072479 | 0.0072479 | 0.0072479 | 0.0 | 0.68 +Comm | 0.016155 | 0.016155 | 0.016155 | 0.0 | 1.52 +Output | 0.00042105 | 0.00042105 | 0.00042105 | 0.0 | 0.04 +Modify | 0.11222 | 0.11222 | 0.11222 | 0.0 | 10.59 +Other | | 0.005868 | | | 0.55 + +Nlocal: 400 ave 400 max 400 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 243 ave 243 max 243 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3073 ave 3073 max 3073 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3073 +Ave neighs/atom = 7.6825 +Neighbor list builds = 46 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.4 b/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.4 new file mode 100644 index 0000000000..e15ce8474f --- /dev/null +++ b/examples/ellipse/log.27Nov18.ellipse.gayberne.g++.4 @@ -0,0 +1,192 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# GayBerne ellipsoids in LJ background fluid + +units lj +atom_style ellipsoid +dimension 2 + +lattice sq 0.02 +Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 +region box block 0 20 0 20 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 400 atoms + Time spent = 0.000466347 secs + +set group all type/fraction 2 0.1 95392 + 45 settings made for type/fraction +set type 1 mass 1.0 + 355 settings made for mass +set type 2 mass 1.5 + 45 settings made for mass +set type 1 shape 1 1 1 + 355 settings made for shape +set type 2 shape 3 1 1 + 45 settings made for shape +set group all quat/random 18238 + 400 settings made for quat/random + +compute rot all temp/asphere +group spheroid type 1 +355 atoms in group spheroid +variable dof equal count(spheroid)+2 +compute_modify rot extra/dof ${dof} +compute_modify rot extra/dof 357 + +velocity all create 2.4 87287 loop geom + +pair_style gayberne 1.0 3.0 1.0 4.0 +pair_coeff 1 1 3.0 1.0 1 1 1 1 1 1 2.5 +pair_coeff 1 2 3.0 1.0 1 1 1 0 0 0 +pair_coeff 2 2 1.0 1.0 1 1 0.2 0 0 0 + +neighbor 0.8 bin + +thermo_style custom step c_rot epair etotal press vol +thermo 100 + +timestep 0.002 + +compute q all property/atom quatw quati quatj quatk + +#dump 1 all custom 100 dump.ellipse.gayberne # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] + +#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 + +#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 + +fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +compute_modify 1_temp extra/dof ${dof} +compute_modify 1_temp extra/dof 357 + +# equilibrate to shrink box around dilute system + +run 2000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 59 59 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gayberne, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.738 | 4.738 | 4.738 Mbytes +Step c_rot E_pair TotEng Press Volume + 0 2.2718861 0 2.394 0.04788 20000 + 100 1.7443419 0 1.8381003 0.035765442 20557.278 + 200 2.2768798 0 2.3992621 0.046544845 20618.928 + 300 1.8573086 0 1.9571389 0.04239709 18464.842 + 400 2.1707875 -0.00045989278 2.2870073 0.066725499 13701.839 + 500 1.9710982 -0.014545321 2.0486111 0.12205188 8490.5214 + 600 2.0818888 -0.21572832 1.8356955 0.22333255 4697.3035 + 700 2.1551458 -0.68175426 1.4003368 0.60385996 2541.157 + 800 1.8879651 -1.6357045 0.21794544 1.0826917 1444.4484 + 900 2.1993533 -3.0664068 -0.91036919 3.2142529 925.96691 + 1000 1.4285977 -4.3962037 -2.9651113 3.1830461 744.91324 + 1100 1.933074 -4.9398703 -3.0147256 1.4694937 715.30906 + 1200 2.0872875 -4.5711608 -2.4689861 1.4091154 757.68606 + 1300 1.8950043 -4.1568789 -2.2487345 0.19138859 846.69407 + 1400 2.1773467 -3.7905723 -1.6164698 0.55639059 930.77026 + 1500 1.934954 -3.5505876 -1.6187812 0.2572587 1020.2803 + 1600 2.083004 -3.2707357 -1.1794873 0.68661802 1088.5587 + 1700 1.9434093 -3.2434441 -1.3043926 0.72465775 1136.9866 + 1800 1.9731416 -3.2692426 -1.3364608 0.52887379 1162.1022 + 1900 2.0618126 -3.2264372 -1.162807 0.93455596 1155.8306 + 2000 1.894614 -3.3964158 -1.4932323 0.69021875 1125.7713 +Loop time of 0.349687 on 4 procs for 2000 steps with 400 atoms + +Performance: 988313.640 tau/day, 5719.408 timesteps/s +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.17051 | 0.19038 | 0.20513 | 3.1 | 54.44 +Neigh | 0.0039656 | 0.0043136 | 0.0049045 | 0.6 | 1.23 +Comm | 0.054327 | 0.071206 | 0.087044 | 4.9 | 20.36 +Output | 0.00043106 | 0.00062788 | 0.0012097 | 0.0 | 0.18 +Modify | 0.072846 | 0.077488 | 0.081302 | 1.2 | 22.16 +Other | | 0.005673 | | | 1.62 + +Nlocal: 100 ave 112 max 84 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Nghost: 146.75 ave 156 max 137 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 755.25 ave 889 max 589 min +Histogram: 1 0 1 0 0 0 0 0 0 2 + +Total # of neighbors = 3021 +Ave neighs/atom = 7.5525 +Neighbor list builds = 137 +Dangerous builds = 80 + +# run dynamics on dense system + +unfix 1 +fix 1 all nve/asphere + +run 2000 +Per MPI rank memory allocation (min/avg/max) = 4.74 | 4.74 | 4.74 Mbytes +Step c_rot E_pair TotEng Press Volume + 2000 1.894614 -3.3964158 -1.4932323 0.69021875 1125.7713 + 2100 1.8880098 -3.3875135 -1.4857102 0.21017294 1125.7713 + 2200 1.9098636 -3.4103342 -1.5286928 0.58806421 1125.7713 + 2300 1.9069019 -3.4099452 -1.610028 0.63472573 1125.7713 + 2400 1.9773106 -3.4856993 -1.5268537 0.68904883 1125.7713 + 2500 2.0027578 -3.5144588 -1.4900205 0.59925475 1125.7713 + 2600 1.9616631 -3.4744364 -1.5230915 0.26873516 1125.7713 + 2700 1.8601136 -3.362572 -1.487211 0.68399725 1125.7713 + 2800 1.8194391 -3.3190986 -1.5148092 0.62533318 1125.7713 + 2900 1.846505 -3.3451617 -1.5508267 0.60156074 1125.7713 + 3000 1.8894747 -3.3918215 -1.5180241 0.61210219 1125.7713 + 3100 1.866832 -3.3665537 -1.5276291 0.54222093 1125.7713 + 3200 1.8233362 -3.320323 -1.5177672 0.82891257 1125.7713 + 3300 1.7946952 -3.2899252 -1.4974666 0.56782835 1125.7713 + 3400 1.8283468 -3.3286169 -1.5065958 1.0370934 1125.7713 + 3500 1.8538134 -3.3526037 -1.5116661 0.58945341 1125.7713 + 3600 1.7851382 -3.2811082 -1.5306837 0.462114 1125.7713 + 3700 1.7664573 -3.2622701 -1.4774432 0.86540402 1125.7713 + 3800 1.8574677 -3.3592552 -1.5196884 0.45146881 1125.7713 + 3900 1.9139087 -3.4196718 -1.5054647 0.79636137 1125.7713 + 4000 1.9081675 -3.4146407 -1.5285325 0.69377107 1125.7713 +Loop time of 0.379139 on 4 procs for 2000 steps with 400 atoms + +Performance: 911539.742 tau/day, 5275.114 timesteps/s +96.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.20177 | 0.23758 | 0.28816 | 7.4 | 62.66 +Neigh | 0.0015984 | 0.001946 | 0.0022459 | 0.6 | 0.51 +Comm | 0.046169 | 0.093409 | 0.13456 | 11.9 | 24.64 +Output | 0.00048614 | 0.00087821 | 0.0016096 | 0.0 | 0.23 +Modify | 0.02563 | 0.029633 | 0.034698 | 2.0 | 7.82 +Other | | 0.01569 | | | 4.14 + +Nlocal: 100 ave 117 max 87 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Nghost: 152.5 ave 169 max 131 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Neighs: 771.25 ave 988 max 612 min +Histogram: 1 0 1 0 1 0 0 0 0 1 + +Total # of neighbors = 3085 +Ave neighs/atom = 7.7125 +Neighbor list builds = 45 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/ellipse/log.27Nov18.ellipse.resquared.g++.1 b/examples/ellipse/log.27Nov18.ellipse.resquared.g++.1 new file mode 100644 index 0000000000..be1a711218 --- /dev/null +++ b/examples/ellipse/log.27Nov18.ellipse.resquared.g++.1 @@ -0,0 +1,189 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# RESquared ellipsoids in LJ background fluid + +units lj +atom_style ellipsoid +dimension 2 + +lattice sq 0.02 +Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 +region box block 0 20 0 20 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 400 atoms + Time spent = 0.000540733 secs + +set group all type/fraction 2 0.1 95392 + 45 settings made for type/fraction +set type 1 mass 1.0 + 355 settings made for mass +set type 2 mass 1.5 + 45 settings made for mass +set type 1 shape 1 1 1 + 355 settings made for shape +set type 2 shape 3 1 1 + 45 settings made for shape +set group all quat/random 18238 + 400 settings made for quat/random + +compute rot all temp/asphere +group spheroid type 1 +355 atoms in group spheroid +variable dof equal count(spheroid)+2 +compute_modify rot extra/dof ${dof} +compute_modify rot extra/dof 357 + +velocity all create 2.4 87287 loop geom + +pair_style resquared 4.0 +pair_coeff 1 1 3.0 1 1 1 1 1 1 1 2.5 +pair_coeff 1 2 3.0 1 1 1 1 0 0 0 +pair_coeff 2 2 1.0 1 1 1 0.2 0 0 0 + +neighbor 0.8 bin + +thermo_style custom step c_rot epair etotal press vol +thermo 100 + +timestep 0.002 + +compute q all property/atom quatw quati quatj quatk + +#dump 1 all custom 100 dump.ellipse.resquared # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] + +#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 + +#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 + +fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +compute_modify 1_temp extra/dof ${dof} +compute_modify 1_temp extra/dof 357 + +# equilibrate to shrink box around dilute system + +run 2000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 59 59 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair resquared, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.752 | 4.752 | 4.752 Mbytes +Step c_rot E_pair TotEng Press Volume + 0 2.2718861 0 2.394 0.04788 20000 + 100 1.7443419 0 1.8381003 0.035765442 20557.278 + 200 2.2768798 0 2.3992621 0.046544845 20618.928 + 300 1.8573086 0 1.9571389 0.04239709 18464.842 + 400 2.1706741 -2.5275641e-05 2.2873225 0.066771565 13701.864 + 500 2.012561 0.0079467721 2.063898 0.10816504 8501.4958 + 600 2.1428003 0.083982458 2.2020759 0.3340759 4786.6892 + 700 2.0449292 0.17309565 2.1718849 0.78086274 2774.9262 + 800 1.9528849 0.31804014 2.2520272 1.8059473 1826.0933 + 900 1.6296095 0.24347613 1.8589813 1.7120274 1518.1139 + 1000 1.9349826 0.13913538 2.1125467 1.3044646 1519.7133 + 1100 2.1040629 0.11218748 2.2384236 1.0097965 1751.5229 + 1200 1.7801858 0.051922127 1.8564589 0.54836207 2198.0187 + 1300 2.3147158 0.049339841 2.390002 0.48871848 2754.4057 + 1400 1.754921 0.025804182 1.785499 0.28804529 3305.8359 + 1500 2.3701432 0.070771258 2.4523449 0.42290556 3531.1976 + 1600 1.7628065 0.054682596 1.830609 0.36138713 3319.2576 + 1700 2.2969598 0.130209 2.454872 0.73541699 2721.9102 + 1800 1.8253139 0.23039663 2.0810243 1.2065009 2155.7953 + 1900 2.017999 0.16257657 2.1664889 1.1654021 1815.9914 + 2000 1.973946 0.17086654 2.1754835 1.2957284 1669.0751 +Loop time of 1.62265 on 1 procs for 2000 steps with 400 atoms + +Performance: 212984.850 tau/day, 1232.551 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4048 | 1.4048 | 1.4048 | 0.0 | 86.57 +Neigh | 0.014643 | 0.014643 | 0.014643 | 0.0 | 0.90 +Comm | 0.011678 | 0.011678 | 0.011678 | 0.0 | 0.72 +Output | 0.00046086 | 0.00046086 | 0.00046086 | 0.0 | 0.03 +Modify | 0.18748 | 0.18748 | 0.18748 | 0.0 | 11.55 +Other | | 0.003623 | | | 0.22 + +Nlocal: 400 ave 400 max 400 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 213 ave 213 max 213 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1884 ave 1884 max 1884 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1884 +Ave neighs/atom = 4.71 +Neighbor list builds = 177 +Dangerous builds = 144 + +# run dynamics on dense system + +unfix 1 +fix 1 all nve/asphere + +run 2000 +Per MPI rank memory allocation (min/avg/max) = 4.754 | 4.754 | 4.754 Mbytes +Step c_rot E_pair TotEng Press Volume + 2000 1.973946 0.17086654 2.1754835 1.2957284 1669.0751 + 2100 2.0234333 0.11888043 2.165674 1.056689 1669.0751 + 2200 1.9652317 0.18018588 2.1288332 1.3191509 1669.0751 + 2300 1.9982484 0.1453846 2.1438911 1.2670661 1669.0751 + 2400 1.9752559 0.16967804 2.1177286 1.3037679 1669.0751 + 2500 1.978203 0.16642164 2.1631435 1.2908362 1669.0751 + 2600 1.9587508 0.18695272 2.1506896 1.3513902 1669.0751 + 2700 1.9654455 0.17997217 2.1247901 1.3360491 1669.0751 + 2800 1.9870267 0.15716583 2.1207709 1.2045103 1669.0751 + 2900 1.923066 0.22448724 2.1353571 1.4964299 1669.0751 + 3000 2.0042113 0.13903206 2.1149788 1.2100652 1669.0751 + 3100 1.9543697 0.19149442 2.0984704 1.3409703 1669.0751 + 3200 1.9991114 0.14441985 2.1292353 1.175647 1669.0751 + 3300 1.9629782 0.18246606 2.1463675 1.3162684 1669.0751 + 3400 1.9403528 0.2063029 2.1687044 1.4952816 1669.0751 + 3500 1.9887416 0.15531264 2.1485278 1.2530419 1669.0751 + 3600 1.9732723 0.1717156 2.1755741 1.2958545 1669.0751 + 3700 2.0072829 0.13576753 2.1212377 1.1421359 1669.0751 + 3800 1.9581273 0.18762532 2.1743415 1.3711091 1669.0751 + 3900 1.9761639 0.16862987 2.1429576 1.3036491 1669.0751 + 4000 1.9615823 0.18390729 2.12447 1.4179639 1669.0751 +Loop time of 2.70201 on 1 procs for 2000 steps with 400 atoms + +Performance: 127904.684 tau/day, 740.189 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.563 | 2.563 | 2.563 | 0.0 | 94.85 +Neigh | 0.0056589 | 0.0056589 | 0.0056589 | 0.0 | 0.21 +Comm | 0.014635 | 0.014635 | 0.014635 | 0.0 | 0.54 +Output | 0.00045729 | 0.00045729 | 0.00045729 | 0.0 | 0.02 +Modify | 0.11246 | 0.11246 | 0.11246 | 0.0 | 4.16 +Other | | 0.00584 | | | 0.22 + +Nlocal: 400 ave 400 max 400 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 206 ave 206 max 206 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1872 ave 1872 max 1872 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1872 +Ave neighs/atom = 4.68 +Neighbor list builds = 50 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/ellipse/log.27Nov18.ellipse.resquared.g++.4 b/examples/ellipse/log.27Nov18.ellipse.resquared.g++.4 new file mode 100644 index 0000000000..c32aa28653 --- /dev/null +++ b/examples/ellipse/log.27Nov18.ellipse.resquared.g++.4 @@ -0,0 +1,189 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# RESquared ellipsoids in LJ background fluid + +units lj +atom_style ellipsoid +dimension 2 + +lattice sq 0.02 +Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 +region box block 0 20 0 20 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 400 atoms + Time spent = 0.00047946 secs + +set group all type/fraction 2 0.1 95392 + 45 settings made for type/fraction +set type 1 mass 1.0 + 355 settings made for mass +set type 2 mass 1.5 + 45 settings made for mass +set type 1 shape 1 1 1 + 355 settings made for shape +set type 2 shape 3 1 1 + 45 settings made for shape +set group all quat/random 18238 + 400 settings made for quat/random + +compute rot all temp/asphere +group spheroid type 1 +355 atoms in group spheroid +variable dof equal count(spheroid)+2 +compute_modify rot extra/dof ${dof} +compute_modify rot extra/dof 357 + +velocity all create 2.4 87287 loop geom + +pair_style resquared 4.0 +pair_coeff 1 1 3.0 1 1 1 1 1 1 1 2.5 +pair_coeff 1 2 3.0 1 1 1 1 0 0 0 +pair_coeff 2 2 1.0 1 1 1 0.2 0 0 0 + +neighbor 0.8 bin + +thermo_style custom step c_rot epair etotal press vol +thermo 100 + +timestep 0.002 + +compute q all property/atom quatw quati quatj quatk + +#dump 1 all custom 100 dump.ellipse.resquared # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] + +#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 + +#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 +#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 + +fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 +fix 2 all enforce2d + +compute_modify 1_temp extra/dof ${dof} +compute_modify 1_temp extra/dof 357 + +# equilibrate to shrink box around dilute system + +run 2000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 59 59 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair resquared, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.738 | 4.738 | 4.738 Mbytes +Step c_rot E_pair TotEng Press Volume + 0 2.2718861 0 2.394 0.04788 20000 + 100 1.7443419 0 1.8381003 0.035765442 20557.278 + 200 2.2768798 0 2.3992621 0.046544845 20618.928 + 300 1.8573086 0 1.9571389 0.04239709 18464.842 + 400 2.1706741 -2.5275641e-05 2.2873225 0.066771565 13701.864 + 500 2.012561 0.0079467721 2.063898 0.10816504 8501.4958 + 600 2.1428003 0.083982458 2.2020759 0.3340759 4786.6892 + 700 2.0449292 0.17309565 2.1718849 0.78086274 2774.9262 + 800 1.9528849 0.31804014 2.2520272 1.8059473 1826.0933 + 900 1.6296095 0.24347613 1.8589813 1.7120274 1518.1139 + 1000 1.9349826 0.13913538 2.1125467 1.3044646 1519.7133 + 1100 2.1040629 0.11218748 2.2384236 1.0097965 1751.5229 + 1200 1.7801858 0.051922127 1.8564589 0.54836207 2198.0187 + 1300 2.3147158 0.049339841 2.390002 0.48871848 2754.4057 + 1400 1.754921 0.025804182 1.785499 0.28804529 3305.8359 + 1500 2.3701432 0.070771258 2.4523449 0.42290556 3531.1976 + 1600 1.7628065 0.054682596 1.830609 0.36138713 3319.2576 + 1700 2.2969598 0.130209 2.454872 0.73541699 2721.9102 + 1800 1.8253139 0.23039663 2.0810243 1.2065009 2155.7953 + 1900 2.017999 0.16257657 2.1664889 1.1654021 1815.9914 + 2000 1.973946 0.17086654 2.1754835 1.2957284 1669.0751 +Loop time of 0.513811 on 4 procs for 2000 steps with 400 atoms + +Performance: 672620.799 tau/day, 3892.481 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.3553 | 0.36778 | 0.37737 | 1.4 | 71.58 +Neigh | 0.0039301 | 0.0040173 | 0.004127 | 0.1 | 0.78 +Comm | 0.056627 | 0.065564 | 0.076112 | 3.0 | 12.76 +Output | 0.00041318 | 0.00061768 | 0.0012202 | 0.0 | 0.12 +Modify | 0.070257 | 0.072503 | 0.074547 | 0.6 | 14.11 +Other | | 0.003331 | | | 0.65 + +Nlocal: 100 ave 108 max 96 min +Histogram: 1 2 0 0 0 0 0 0 0 1 +Nghost: 123.5 ave 125 max 122 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 471 ave 518 max 433 min +Histogram: 1 0 1 0 0 1 0 0 0 1 + +Total # of neighbors = 1884 +Ave neighs/atom = 4.71 +Neighbor list builds = 177 +Dangerous builds = 144 + +# run dynamics on dense system + +unfix 1 +fix 1 all nve/asphere + +run 2000 +Per MPI rank memory allocation (min/avg/max) = 4.739 | 4.739 | 4.739 Mbytes +Step c_rot E_pair TotEng Press Volume + 2000 1.973946 0.17086654 2.1754835 1.2957284 1669.0751 + 2100 2.0234333 0.11888043 2.165674 1.056689 1669.0751 + 2200 1.9652317 0.18018588 2.1288332 1.3191509 1669.0751 + 2300 1.9982484 0.1453846 2.1438911 1.2670661 1669.0751 + 2400 1.9752559 0.16967804 2.1177286 1.303768 1669.0751 + 2500 1.978203 0.16642165 2.1631435 1.2908362 1669.0751 + 2600 1.9587508 0.18695271 2.1506896 1.3513902 1669.0751 + 2700 1.9654455 0.17997218 2.1247901 1.3360492 1669.0751 + 2800 1.9870267 0.15716584 2.1207709 1.2045104 1669.0751 + 2900 1.9230662 0.22448703 2.1353571 1.4964289 1669.0751 + 3000 2.0042113 0.13903204 2.1149787 1.210065 1669.0751 + 3100 1.9543694 0.19149467 2.0984705 1.3409714 1669.0751 + 3200 1.9991114 0.14441984 2.1292354 1.1756471 1669.0751 + 3300 1.9629781 0.18246618 2.1463676 1.3162687 1669.0751 + 3400 1.940353 0.20630269 2.1687038 1.4952819 1669.0751 + 3500 1.9887413 0.15531296 2.1485274 1.2530446 1669.0751 + 3600 1.9732704 0.17171758 2.1755757 1.295861 1669.0751 + 3700 2.0072863 0.13576402 2.1212392 1.1421254 1669.0751 + 3800 1.9581337 0.18761851 2.1743384 1.3710796 1669.0751 + 3900 1.9761519 0.16864273 2.142963 1.3037308 1669.0751 + 4000 1.9615865 0.18390288 2.1244667 1.4179575 1669.0751 +Loop time of 0.846017 on 4 procs for 2000 steps with 400 atoms + +Performance: 408502.313 tau/day, 2364.018 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.63647 | 0.67097 | 0.74711 | 5.4 | 79.31 +Neigh | 0.0015061 | 0.0015807 | 0.0017054 | 0.2 | 0.19 +Comm | 0.058258 | 0.1341 | 0.16808 | 12.1 | 15.85 +Output | 0.00045156 | 0.00077933 | 0.0016997 | 0.0 | 0.09 +Modify | 0.028721 | 0.029793 | 0.03152 | 0.6 | 3.52 +Other | | 0.0088 | | | 1.04 + +Nlocal: 100 ave 106 max 97 min +Histogram: 1 1 1 0 0 0 0 0 0 1 +Nghost: 114 ave 117 max 111 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 468 ave 528 max 431 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 1872 +Ave neighs/atom = 4.68 +Neighbor list builds = 50 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.1 b/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.1 deleted file mode 100644 index ad23b08f43..0000000000 --- a/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.1 +++ /dev/null @@ -1,185 +0,0 @@ -LAMMPS (5 Oct 2016) -# GayBerne ellipsoids in LJ background fluid - -units lj -atom_style ellipsoid -dimension 2 - -lattice sq 0.02 -Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 -region box block 0 20 0 20 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 400 atoms - -set group all type/fraction 2 0.1 95392 - 45 settings made for type/fraction -set type 1 mass 1.0 - 355 settings made for mass -set type 2 mass 1.5 - 45 settings made for mass -set type 1 shape 1 1 1 - 355 settings made for shape -set type 2 shape 3 1 1 - 45 settings made for shape -set group all quat/random 18238 - 400 settings made for quat/random - -compute rot all temp/asphere -group spheroid type 1 -355 atoms in group spheroid -variable dof equal count(spheroid)+2 -compute_modify rot extra ${dof} -compute_modify rot extra 357 - -velocity all create 2.4 87287 loop geom - -pair_style gayberne 1.0 3.0 1.0 4.0 -pair_coeff 1 1 3.0 1.0 1 1 1 1 1 1 2.5 -pair_coeff 1 2 3.0 1.0 1 1 1 0 0 0 -pair_coeff 2 2 1.0 1.0 1 1 0.2 0 0 0 - -neighbor 0.8 bin - -thermo_style custom step c_rot epair etotal press vol -thermo 100 - -timestep 0.002 - -compute q all property/atom quatw quati quatj quatk - -#dump 1 all custom 100 dump.ellipse.gayberne # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] - -#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 - -#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 - -fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -compute_modify 1_temp extra ${dof} -compute_modify 1_temp extra 357 - -# equilibrate to shrink box around dilute system - -run 2000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 4.8 - ghost atom cutoff = 4.8 - binsize = 2.4 -> bins = 59 59 3 -Memory usage per processor = 4.17878 Mbytes -Step c_rot E_pair TotEng Press Volume - 0 2.2718861 0 2.394 0.04788 20000 - 100 1.7443002 0 1.8380563 0.03576216 20558.672 - 200 2.2770454 0 2.3994366 0.046545139 20620.298 - 300 1.8573283 0 1.9571597 0.04240689 18460.771 - 400 2.1709732 -0.00046172705 2.2872012 0.066791266 13689.473 - 500 1.9712384 -0.014365021 2.0484832 0.12263116 8475.3548 - 600 2.0811163 -0.21654179 1.8340664 0.22433913 4685.3955 - 700 2.1578657 -0.68696192 1.3974517 0.60188995 2533.8873 - 800 1.8843124 -1.6343111 0.2143696 1.105687 1440.5961 - 900 2.1968489 -3.0749104 -0.92393949 3.2168763 924.62895 - 1000 1.4196808 -4.3944118 -2.972349 3.1895485 744.95136 - 1100 1.9354395 -4.9265904 -2.9959864 1.5434922 715.87574 - 1200 2.1063417 -4.5664569 -2.4467911 1.2012289 760.07454 - 1300 1.859493 -4.1043918 -2.2530918 0.35847277 846.54577 - 1400 2.1430322 -3.7414541 -1.6163368 0.7461639 928.96639 - 1500 1.9056885 -3.5118131 -1.5910333 0.35347839 1021.0387 - 1600 2.1297675 -3.2577617 -1.119554 0.73265236 1087.6271 - 1700 1.9341135 -3.2121534 -1.2832848 0.46406018 1140.8473 - 1800 2.0861201 -3.2382735 -1.1460071 0.6058924 1161.1051 - 1900 1.9976529 -3.2494581 -1.2698889 0.69257341 1151.4372 - 2000 1.9791754 -3.3850065 -1.3653244 0.88473341 1121.7026 -Loop time of 1.01022 on 1 procs for 2000 steps with 400 atoms - -Performance: 342102.068 tau/day, 1979.757 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.80465 | 0.80465 | 0.80465 | 0.0 | 79.65 -Neigh | 0.014326 | 0.014326 | 0.014326 | 0.0 | 1.42 -Comm | 0.011179 | 0.011179 | 0.011179 | 0.0 | 1.11 -Output | 0.00032926 | 0.00032926 | 0.00032926 | 0.0 | 0.03 -Modify | 0.17561 | 0.17561 | 0.17561 | 0.0 | 17.38 -Other | | 0.004126 | | | 0.41 - -Nlocal: 400 ave 400 max 400 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 249 ave 249 max 249 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3031 ave 3031 max 3031 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3031 -Ave neighs/atom = 7.5775 -Neighbor list builds = 140 -Dangerous builds = 80 - -# run dynamics on dense system - -unfix 1 -fix 1 all nve/asphere - -run 2000 -Memory usage per processor = 4.18892 Mbytes -Step c_rot E_pair TotEng Press Volume - 2000 1.9791754 -3.3850065 -1.3653244 0.88473341 1121.7026 - 2100 2.0067383 -3.4164295 -1.402453 0.63163512 1121.7026 - 2200 2.0298976 -3.4415998 -1.4231421 0.91861985 1121.7026 - 2300 2.0418707 -3.4552616 -1.4277716 0.58834236 1121.7026 - 2400 2.0126621 -3.424202 -1.3839096 0.80723942 1121.7026 - 2500 1.9403964 -3.3489489 -1.3995215 0.79492719 1121.7026 - 2600 2.0459304 -3.4600931 -1.4229608 0.69699402 1121.7026 - 2700 2.0032293 -3.4126492 -1.429784 0.44210814 1121.7026 - 2800 1.9367905 -3.345688 -1.4171068 0.6872734 1121.7026 - 2900 1.9870908 -3.3983385 -1.4218501 0.42402247 1121.7026 - 3000 1.9654849 -3.3767671 -1.3835149 0.6611643 1121.7026 - 3100 1.9308462 -3.3343018 -1.3895992 0.45213534 1121.7026 - 3200 1.8924656 -3.2956948 -1.4157919 0.56524685 1121.7026 - 3300 1.8802888 -3.2822198 -1.4071878 0.86030365 1121.7026 - 3400 1.8847013 -3.2852796 -1.4162404 0.91660541 1121.7026 - 3500 1.9290452 -3.3332356 -1.3889879 0.70770119 1121.7026 - 3600 1.9223314 -3.32413 -1.3896278 0.56763748 1121.7026 - 3700 1.9185132 -3.3197222 -1.3913701 0.66889312 1121.7026 - 3800 1.877321 -3.2796045 -1.4050964 0.67335591 1121.7026 - 3900 1.9250447 -3.3313033 -1.3872185 0.64573122 1121.7026 - 4000 1.8574113 -3.2592142 -1.3807543 0.46117918 1121.7026 -Loop time of 1.13656 on 1 procs for 2000 steps with 400 atoms - -Performance: 304074.636 tau/day, 1759.691 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0076 | 1.0076 | 1.0076 | 0.0 | 88.65 -Neigh | 0.0065663 | 0.0065663 | 0.0065663 | 0.0 | 0.58 -Comm | 0.011639 | 0.011639 | 0.011639 | 0.0 | 1.02 -Output | 0.00035858 | 0.00035858 | 0.00035858 | 0.0 | 0.03 -Modify | 0.10463 | 0.10463 | 0.10463 | 0.0 | 9.21 -Other | | 0.00581 | | | 0.51 - -Nlocal: 400 ave 400 max 400 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 219 ave 219 max 219 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3046 ave 3046 max 3046 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3046 -Ave neighs/atom = 7.615 -Neighbor list builds = 47 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:02 diff --git a/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.4 b/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.4 deleted file mode 100644 index 7217a863d3..0000000000 --- a/examples/ellipse/log.5Oct16.ellipse.gayberne.g++.4 +++ /dev/null @@ -1,185 +0,0 @@ -LAMMPS (5 Oct 2016) -# GayBerne ellipsoids in LJ background fluid - -units lj -atom_style ellipsoid -dimension 2 - -lattice sq 0.02 -Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 -region box block 0 20 0 20 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) - 2 by 2 by 1 MPI processor grid -create_atoms 1 box -Created 400 atoms - -set group all type/fraction 2 0.1 95392 - 45 settings made for type/fraction -set type 1 mass 1.0 - 355 settings made for mass -set type 2 mass 1.5 - 45 settings made for mass -set type 1 shape 1 1 1 - 355 settings made for shape -set type 2 shape 3 1 1 - 45 settings made for shape -set group all quat/random 18238 - 400 settings made for quat/random - -compute rot all temp/asphere -group spheroid type 1 -355 atoms in group spheroid -variable dof equal count(spheroid)+2 -compute_modify rot extra ${dof} -compute_modify rot extra 357 - -velocity all create 2.4 87287 loop geom - -pair_style gayberne 1.0 3.0 1.0 4.0 -pair_coeff 1 1 3.0 1.0 1 1 1 1 1 1 2.5 -pair_coeff 1 2 3.0 1.0 1 1 1 0 0 0 -pair_coeff 2 2 1.0 1.0 1 1 0.2 0 0 0 - -neighbor 0.8 bin - -thermo_style custom step c_rot epair etotal press vol -thermo 100 - -timestep 0.002 - -compute q all property/atom quatw quati quatj quatk - -#dump 1 all custom 100 dump.ellipse.gayberne # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] - -#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 - -#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 - -fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -compute_modify 1_temp extra ${dof} -compute_modify 1_temp extra 357 - -# equilibrate to shrink box around dilute system - -run 2000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 4.8 - ghost atom cutoff = 4.8 - binsize = 2.4 -> bins = 59 59 3 -Memory usage per processor = 4.16784 Mbytes -Step c_rot E_pair TotEng Press Volume - 0 2.2718861 0 2.394 0.04788 20000 - 100 1.7443002 0 1.8380563 0.03576216 20558.672 - 200 2.2770454 0 2.3994366 0.046545139 20620.298 - 300 1.8573283 0 1.9571597 0.04240689 18460.771 - 400 2.1709732 -0.00046172705 2.2872012 0.066791266 13689.473 - 500 1.9712384 -0.014365021 2.0484832 0.12263116 8475.3548 - 600 2.0811163 -0.21654179 1.8340664 0.22433913 4685.3955 - 700 2.1578657 -0.68696192 1.3974517 0.60188995 2533.8873 - 800 1.8843124 -1.6343111 0.2143696 1.105687 1440.5961 - 900 2.1968489 -3.0749104 -0.92393949 3.2168763 924.62895 - 1000 1.4196808 -4.3944118 -2.972349 3.1895485 744.95136 - 1100 1.9354395 -4.9265904 -2.9959864 1.5434922 715.87574 - 1200 2.1063417 -4.5664569 -2.4467911 1.2012289 760.07454 - 1300 1.859493 -4.1043918 -2.2530918 0.35847277 846.54577 - 1400 2.1430322 -3.7414541 -1.6163368 0.7461639 928.96639 - 1500 1.9056885 -3.5118131 -1.5910333 0.35347839 1021.0387 - 1600 2.1297675 -3.2577617 -1.119554 0.73265236 1087.6271 - 1700 1.9341135 -3.2121534 -1.2832848 0.46406018 1140.8473 - 1800 2.0861201 -3.2382735 -1.1460071 0.6058924 1161.1051 - 1900 1.9976529 -3.2494581 -1.2698889 0.69257341 1151.4372 - 2000 1.9791754 -3.3850065 -1.3653244 0.88473343 1121.7026 -Loop time of 0.348825 on 4 procs for 2000 steps with 400 atoms - -Performance: 990754.062 tau/day, 5733.530 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.18317 | 0.20567 | 0.22597 | 3.3 | 58.96 -Neigh | 0.0036285 | 0.0038322 | 0.0039773 | 0.2 | 1.10 -Comm | 0.043543 | 0.06339 | 0.085499 | 5.9 | 18.17 -Output | 0.00044894 | 0.00046825 | 0.00051665 | 0.1 | 0.13 -Modify | 0.069605 | 0.070677 | 0.071795 | 0.3 | 20.26 -Other | | 0.004791 | | | 1.37 - -Nlocal: 100 ave 113 max 85 min -Histogram: 1 0 0 1 0 0 0 1 0 1 -Nghost: 149.75 ave 160 max 141 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Neighs: 757.75 ave 885 max 592 min -Histogram: 1 0 0 1 0 0 0 0 1 1 - -Total # of neighbors = 3031 -Ave neighs/atom = 7.5775 -Neighbor list builds = 140 -Dangerous builds = 80 - -# run dynamics on dense system - -unfix 1 -fix 1 all nve/asphere - -run 2000 -Memory usage per processor = 4.16867 Mbytes -Step c_rot E_pair TotEng Press Volume - 2000 1.9791754 -3.3850065 -1.3653244 0.88473343 1121.7026 - 2100 2.0067383 -3.4164295 -1.402453 0.63163513 1121.7026 - 2200 2.0298976 -3.4415998 -1.4231421 0.91861985 1121.7026 - 2300 2.0418708 -3.4552617 -1.4277716 0.58834191 1121.7026 - 2400 2.0126625 -3.4242024 -1.3839097 0.80723766 1121.7026 - 2500 1.9403968 -3.3489494 -1.3995212 0.79492647 1121.7026 - 2600 2.0459318 -3.4600945 -1.4229599 0.69698729 1121.7026 - 2700 2.0032338 -3.4126541 -1.4297892 0.44208354 1121.7026 - 2800 1.9367789 -3.3456765 -1.4171038 0.6873665 1121.7026 - 2900 1.9870979 -3.3983434 -1.4218523 0.42398659 1121.7026 - 3000 1.965491 -3.376773 -1.3835208 0.66112051 1121.7026 - 3100 1.9307633 -3.3342121 -1.3895745 0.45224657 1121.7026 - 3200 1.8918453 -3.2949278 -1.4157216 0.56825582 1121.7026 - 3300 1.8824584 -3.2844031 -1.4066487 0.85795659 1121.7026 - 3400 1.8871451 -3.2878452 -1.4156691 0.91410213 1121.7026 - 3500 1.9297625 -3.3340904 -1.3901995 0.6754809 1121.7026 - 3600 1.8994197 -3.3009141 -1.3964162 0.58676937 1121.7026 - 3700 1.9181765 -3.3204193 -1.3956433 0.54632736 1121.7026 - 3800 1.9278078 -3.3300748 -1.3999307 0.48904879 1121.7026 - 3900 1.888321 -3.2896024 -1.3848249 0.49521159 1121.7026 - 4000 1.8372182 -3.2347372 -1.4091759 0.61895915 1121.7026 -Loop time of 0.380732 on 4 procs for 2000 steps with 400 atoms - -Performance: 907726.114 tau/day, 5253.045 timesteps/s -98.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.24119 | 0.25802 | 0.28318 | 3.0 | 67.77 -Neigh | 0.001538 | 0.0017161 | 0.0018811 | 0.3 | 0.45 -Comm | 0.055332 | 0.081399 | 0.098741 | 5.6 | 21.38 -Output | 0.0005157 | 0.00053984 | 0.00058794 | 0.1 | 0.14 -Modify | 0.026189 | 0.027282 | 0.029091 | 0.7 | 7.17 -Other | | 0.01177 | | | 3.09 - -Nlocal: 100 ave 106 max 92 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Nghost: 148 ave 152 max 145 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Neighs: 760.25 ave 815 max 713 min -Histogram: 1 1 0 0 0 0 1 0 0 1 - -Total # of neighbors = 3041 -Ave neighs/atom = 7.6025 -Neighbor list builds = 46 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:00 diff --git a/examples/ellipse/log.5Oct16.ellipse.resquared.g++.1 b/examples/ellipse/log.5Oct16.ellipse.resquared.g++.1 deleted file mode 100644 index 51028b326e..0000000000 --- a/examples/ellipse/log.5Oct16.ellipse.resquared.g++.1 +++ /dev/null @@ -1,182 +0,0 @@ -LAMMPS (5 Oct 2016) -# RESquared ellipsoids in LJ background fluid - -units lj -atom_style ellipsoid -dimension 2 - -lattice sq 0.02 -Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 -region box block 0 20 0 20 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 400 atoms - -set group all type/fraction 2 0.1 95392 - 45 settings made for type/fraction -set type 1 mass 1.0 - 355 settings made for mass -set type 2 mass 1.5 - 45 settings made for mass -set type 1 shape 1 1 1 - 355 settings made for shape -set type 2 shape 3 1 1 - 45 settings made for shape -set group all quat/random 18238 - 400 settings made for quat/random - -compute rot all temp/asphere -group spheroid type 1 -355 atoms in group spheroid -variable dof equal count(spheroid)+2 -compute_modify rot extra ${dof} -compute_modify rot extra 357 - -velocity all create 2.4 87287 loop geom - -pair_style resquared 4.0 -pair_coeff 1 1 3.0 1 1 1 1 1 1 1 2.5 -pair_coeff 1 2 3.0 1 1 1 1 0 0 0 -pair_coeff 2 2 1.0 1 1 1 0.2 0 0 0 - -neighbor 0.8 bin - -thermo_style custom step c_rot epair etotal press vol -thermo 100 - -timestep 0.002 - -compute q all property/atom quatw quati quatj quatk - -#dump 1 all custom 100 dump.ellipse.resquared # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] - -#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 - -#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 - -fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -compute_modify 1_temp extra ${dof} -compute_modify 1_temp extra 357 - -# equilibrate to shrink box around dilute system - -run 2000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 4.8 - ghost atom cutoff = 4.8 - binsize = 2.4 -> bins = 59 59 3 -Memory usage per processor = 4.17878 Mbytes -Step c_rot E_pair TotEng Press Volume - 0 2.2718861 0 2.394 0.04788 20000 - 100 1.7443002 0 1.8380563 0.03576216 20558.672 - 200 2.2770454 0 2.3994366 0.046545139 20620.298 - 300 1.8573283 0 1.9571597 0.04240689 18460.771 - 400 2.1708593 -2.5387568e-05 2.2875176 0.066837565 13689.499 - 500 2.012121 0.0083622744 2.0637959 0.10893231 8486.4241 - 600 2.1416108 0.08602656 2.2040317 0.34087235 4775.2723 - 700 2.0419962 0.17405962 2.1702488 0.78836378 2768.5757 - 800 1.9520613 0.31921669 2.2528751 1.813059 1823.5943 - 900 1.6291778 0.2415422 1.8569794 1.7008233 1518.2585 - 1000 1.9412761 0.13859576 2.1184352 1.3019342 1521.7058 - 1100 2.1016581 0.10912963 2.2356017 0.99454361 1756.0608 - 1200 1.7849978 0.049963029 1.8591867 0.54025938 2204.358 - 1300 2.3125867 0.046557089 2.3849986 0.47599584 2761.2014 - 1400 1.757077 0.026326047 1.7889269 0.28604209 3309.8144 - 1500 2.392565 0.048563131 2.4533846 0.37917665 3530.6855 - 1600 1.7590832 0.050490264 1.8168201 0.33612171 3313.4472 - 1700 2.252414 0.17372984 2.4394491 0.85851343 2716.0401 - 1800 1.7966767 0.28338104 2.0779465 1.4326114 2152.4099 - 1900 1.9682759 0.2168566 2.1183362 1.3383729 1806.7221 - 2000 1.9694503 0.17559901 2.14777 1.3281701 1654.9587 -Loop time of 1.69003 on 1 procs for 2000 steps with 400 atoms - -Performance: 204492.823 tau/day, 1183.408 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.4827 | 1.4827 | 1.4827 | 0.0 | 87.73 -Neigh | 0.014216 | 0.014216 | 0.014216 | 0.0 | 0.84 -Comm | 0.0084538 | 0.0084538 | 0.0084538 | 0.0 | 0.50 -Output | 0.0003345 | 0.0003345 | 0.0003345 | 0.0 | 0.02 -Modify | 0.18062 | 0.18062 | 0.18062 | 0.0 | 10.69 -Other | | 0.003745 | | | 0.22 - -Nlocal: 400 ave 400 max 400 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 216 ave 216 max 216 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1929 ave 1929 max 1929 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1929 -Ave neighs/atom = 4.8225 -Neighbor list builds = 177 -Dangerous builds = 146 - -# run dynamics on dense system - -unfix 1 -fix 1 all nve/asphere - -run 2000 -Memory usage per processor = 4.18079 Mbytes -Step c_rot E_pair TotEng Press Volume - 2000 1.9694503 0.17559901 2.14777 1.3281701 1654.9587 - 2100 1.978918 0.16562152 2.1632874 1.3092233 1654.9587 - 2200 1.9820406 0.16230289 2.1750657 1.2612976 1654.9587 - 2300 1.9577019 0.18791066 2.1531422 1.3478385 1654.9587 - 2400 2.0271146 0.11480565 2.1721336 1.0619428 1654.9587 - 2500 1.9894838 0.1544598 2.1329407 1.2325572 1654.9587 - 2600 1.998697 0.14468753 2.1485209 1.1903357 1654.9587 - 2700 1.9608664 0.18459944 2.1483889 1.3461095 1654.9587 - 2800 2.005755 0.13729992 2.1214078 1.1596182 1654.9587 - 2900 1.9080687 0.24019772 2.1661723 1.5974752 1654.9587 - 3000 1.9606374 0.18480425 2.1301691 1.3280548 1654.9587 - 3100 1.9824235 0.16187644 2.1284432 1.2590072 1654.9587 - 3200 1.9389485 0.20774117 2.106322 1.4587341 1654.9587 - 3300 1.9849309 0.15929459 2.1301897 1.2415172 1654.9587 - 3400 1.9596863 0.18578944 2.1215072 1.3738214 1654.9587 - 3500 1.9671171 0.17804546 2.0934254 1.3147204 1654.9587 - 3600 1.9702641 0.17471582 2.1569255 1.3331099 1654.9587 - 3700 1.9103961 0.23792935 2.1305401 1.5832203 1654.9587 - 3800 1.9129619 0.23512654 2.1445946 1.5657403 1654.9587 - 3900 1.9868018 0.15725404 2.1658135 1.2582197 1654.9587 - 4000 2.0058784 0.13726837 2.1534352 1.1351359 1654.9587 -Loop time of 2.86686 on 1 procs for 2000 steps with 400 atoms - -Performance: 120550.133 tau/day, 697.628 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.7349 | 2.7349 | 2.7349 | 0.0 | 95.40 -Neigh | 0.0052247 | 0.0052247 | 0.0052247 | 0.0 | 0.18 -Comm | 0.011207 | 0.011207 | 0.011207 | 0.0 | 0.39 -Output | 0.00036931 | 0.00036931 | 0.00036931 | 0.0 | 0.01 -Modify | 0.10925 | 0.10925 | 0.10925 | 0.0 | 3.81 -Other | | 0.005949 | | | 0.21 - -Nlocal: 400 ave 400 max 400 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 204 ave 204 max 204 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1857 ave 1857 max 1857 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1857 -Ave neighs/atom = 4.6425 -Neighbor list builds = 48 -Dangerous builds = 0 -Total wall time: 0:00:04 diff --git a/examples/ellipse/log.5Oct16.ellipse.resquared.g++.4 b/examples/ellipse/log.5Oct16.ellipse.resquared.g++.4 deleted file mode 100644 index fa93b41fa3..0000000000 --- a/examples/ellipse/log.5Oct16.ellipse.resquared.g++.4 +++ /dev/null @@ -1,182 +0,0 @@ -LAMMPS (5 Oct 2016) -# RESquared ellipsoids in LJ background fluid - -units lj -atom_style ellipsoid -dimension 2 - -lattice sq 0.02 -Lattice spacing in x,y,z = 7.07107 7.07107 7.07107 -region box block 0 20 0 20 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -3.53553) to (141.421 141.421 3.53553) - 2 by 2 by 1 MPI processor grid -create_atoms 1 box -Created 400 atoms - -set group all type/fraction 2 0.1 95392 - 45 settings made for type/fraction -set type 1 mass 1.0 - 355 settings made for mass -set type 2 mass 1.5 - 45 settings made for mass -set type 1 shape 1 1 1 - 355 settings made for shape -set type 2 shape 3 1 1 - 45 settings made for shape -set group all quat/random 18238 - 400 settings made for quat/random - -compute rot all temp/asphere -group spheroid type 1 -355 atoms in group spheroid -variable dof equal count(spheroid)+2 -compute_modify rot extra ${dof} -compute_modify rot extra 357 - -velocity all create 2.4 87287 loop geom - -pair_style resquared 4.0 -pair_coeff 1 1 3.0 1 1 1 1 1 1 1 2.5 -pair_coeff 1 2 3.0 1 1 1 1 0 0 0 -pair_coeff 2 2 1.0 1 1 1 0.2 0 0 0 - -neighbor 0.8 bin - -thermo_style custom step c_rot epair etotal press vol -thermo 100 - -timestep 0.002 - -compute q all property/atom quatw quati quatj quatk - -#dump 1 all custom 100 dump.ellipse.resquared # id type x y z c_q[1] c_q[2] c_q[3] c_q[4] - -#dump 2 all image 100 image.*.jpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 2 pad 4 adiam 1 1.0 adiam 2 2.0 - -#dump 3 all movie 100 movie.mpg type type # zoom 1.6 center d 0.5 0.5 0.5 -#dump_modify 3 pad 4 adiam 1 1.0 adiam 2 2.0 - -fix 1 all npt/asphere temp 2.0 2.0 0.1 iso 0.0 1.0 1.0 mtk no pchain 0 tchain 1 -fix 2 all enforce2d - -compute_modify 1_temp extra ${dof} -compute_modify 1_temp extra 357 - -# equilibrate to shrink box around dilute system - -run 2000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 4.8 - ghost atom cutoff = 4.8 - binsize = 2.4 -> bins = 59 59 3 -Memory usage per processor = 4.16784 Mbytes -Step c_rot E_pair TotEng Press Volume - 0 2.2718861 0 2.394 0.04788 20000 - 100 1.7443002 0 1.8380563 0.03576216 20558.672 - 200 2.2770454 0 2.3994366 0.046545139 20620.298 - 300 1.8573283 0 1.9571597 0.04240689 18460.771 - 400 2.1708593 -2.5387568e-05 2.2875176 0.066837565 13689.499 - 500 2.012121 0.0083622744 2.0637959 0.10893231 8486.4241 - 600 2.1416108 0.08602656 2.2040317 0.34087235 4775.2723 - 700 2.0419962 0.17405962 2.1702488 0.78836378 2768.5757 - 800 1.9520613 0.31921669 2.2528751 1.813059 1823.5943 - 900 1.6291778 0.2415422 1.8569794 1.7008233 1518.2585 - 1000 1.9412761 0.13859576 2.1184352 1.3019342 1521.7058 - 1100 2.1016581 0.10912963 2.2356017 0.99454361 1756.0608 - 1200 1.7849978 0.049963029 1.8591867 0.54025938 2204.358 - 1300 2.3125867 0.046557089 2.3849986 0.47599584 2761.2014 - 1400 1.757077 0.026326047 1.7889269 0.28604209 3309.8144 - 1500 2.392565 0.048563131 2.4533846 0.37917665 3530.6855 - 1600 1.7590832 0.050490264 1.8168201 0.33612171 3313.4472 - 1700 2.252414 0.17372984 2.4394491 0.85851343 2716.0401 - 1800 1.7966767 0.28338104 2.0779465 1.4326114 2152.4099 - 1900 1.9682759 0.2168566 2.1183362 1.3383729 1806.7221 - 2000 1.9694503 0.17559901 2.14777 1.3281701 1654.9587 -Loop time of 0.529177 on 4 procs for 2000 steps with 400 atoms - -Performance: 653089.670 tau/day, 3779.454 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.36797 | 0.3809 | 0.38796 | 1.2 | 71.98 -Neigh | 0.0037003 | 0.0038002 | 0.0038807 | 0.1 | 0.72 -Comm | 0.057266 | 0.063631 | 0.076821 | 3.1 | 12.02 -Output | 0.00050998 | 0.00052881 | 0.00056648 | 0.1 | 0.10 -Modify | 0.075577 | 0.076514 | 0.078309 | 0.4 | 14.46 -Other | | 0.0038 | | | 0.72 - -Nlocal: 100 ave 108 max 95 min -Histogram: 1 0 1 1 0 0 0 0 0 1 -Nghost: 125.75 ave 128 max 123 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 482.25 ave 535 max 442 min -Histogram: 1 1 0 0 0 1 0 0 0 1 - -Total # of neighbors = 1929 -Ave neighs/atom = 4.8225 -Neighbor list builds = 177 -Dangerous builds = 146 - -# run dynamics on dense system - -unfix 1 -fix 1 all nve/asphere - -run 2000 -Memory usage per processor = 4.16867 Mbytes -Step c_rot E_pair TotEng Press Volume - 2000 1.9694503 0.17559901 2.14777 1.3281701 1654.9587 - 2100 1.978918 0.16562152 2.1632874 1.3092233 1654.9587 - 2200 1.9820406 0.16230289 2.1750657 1.2612976 1654.9587 - 2300 1.9577019 0.18791066 2.1531422 1.3478385 1654.9587 - 2400 2.0271146 0.11480565 2.1721336 1.0619428 1654.9587 - 2500 1.9894838 0.1544598 2.1329407 1.2325572 1654.9587 - 2600 1.998697 0.14468753 2.1485209 1.1903357 1654.9587 - 2700 1.9608664 0.18459944 2.1483889 1.3461096 1654.9587 - 2800 2.005755 0.13729992 2.1214078 1.1596183 1654.9587 - 2900 1.9080687 0.24019772 2.1661723 1.5974752 1654.9587 - 3000 1.9606373 0.18480426 2.1301691 1.3280548 1654.9587 - 3100 1.9824235 0.16187647 2.1284433 1.2590074 1654.9587 - 3200 1.9389485 0.20774113 2.1063219 1.4587339 1654.9587 - 3300 1.984931 0.15929453 2.1301897 1.2415169 1654.9587 - 3400 1.9596864 0.18578934 2.1215072 1.3738204 1654.9587 - 3500 1.9671165 0.17804604 2.0934256 1.3147236 1654.9587 - 3600 1.9702644 0.17471548 2.156925 1.3331072 1654.9587 - 3700 1.9104013 0.2379238 2.1305421 1.5831938 1654.9587 - 3800 1.9129623 0.23512612 2.1445951 1.565741 1654.9587 - 3900 1.9868116 0.15724371 2.1658058 1.2581725 1654.9587 - 4000 2.0058633 0.13728433 2.1534403 1.1352037 1654.9587 -Loop time of 0.822603 on 4 procs for 2000 steps with 400 atoms - -Performance: 420129.522 tau/day, 2431.305 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.67029 | 0.69125 | 0.73659 | 3.2 | 84.03 -Neigh | 0.0013115 | 0.0014372 | 0.0016122 | 0.3 | 0.17 -Comm | 0.046684 | 0.092118 | 0.1133 | 9.0 | 11.20 -Output | 0.00053906 | 0.00055629 | 0.00059342 | 0.1 | 0.07 -Modify | 0.026623 | 0.027991 | 0.029785 | 0.8 | 3.40 -Other | | 0.009251 | | | 1.12 - -Nlocal: 100 ave 103 max 96 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Nghost: 118 ave 122 max 115 min -Histogram: 1 0 1 0 1 0 0 0 0 1 -Neighs: 464.25 ave 489 max 449 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 1857 -Ave neighs/atom = 4.6425 -Neighbor list builds = 48 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/flow/log.5Oct16.flow.couette.g++.1 b/examples/flow/log.27Nov18.flow.couette.g++.1 similarity index 80% rename from examples/flow/log.5Oct16.flow.couette.g++.1 rename to examples/flow/log.27Nov18.flow.couette.g++.1 index a9d3a9929f..9045771f7c 100644 --- a/examples/flow/log.5Oct16.flow.couette.g++.1 +++ b/examples/flow/log.27Nov18.flow.couette.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2-d LJ flow simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (25.6871 22.2457 0.321089) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.000395536 secs mass 1 1.0 mass 2 1.0 @@ -75,7 +77,7 @@ fix 4 all enforce2d timestep 0.003 thermo 500 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.flow @@ -87,13 +89,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 37 32 1 -Memory usage per processor = 2.47395 Mbytes + binsize = 0.71123, bins = 37 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.047 | 3.047 | 3.047 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 0 0 0.71190476 0.52314537 571.54286 500 1.0644427 -0.31382888 0 0.44395296 3.0013076 571.54286 @@ -116,20 +123,20 @@ Step Temp E_pair E_mol TotEng Press Volume 9000 1 -0.402333 0 0.30957177 2.4852035 571.54286 9500 0.99889786 -0.46870263 0 0.24241751 2.3763314 571.54286 10000 1 -0.43338695 0 0.27851782 2.405424 571.54286 -Loop time of 0.281614 on 1 procs for 10000 steps with 420 atoms +Loop time of 0.293461 on 1 procs for 10000 steps with 420 atoms -Performance: 9204085.735 tau/day, 35509.590 timesteps/s -100.1% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 8832531.296 tau/day, 34076.124 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.12437 | 0.12437 | 0.12437 | 0.0 | 44.16 -Neigh | 0.062146 | 0.062146 | 0.062146 | 0.0 | 22.07 -Comm | 0.0076008 | 0.0076008 | 0.0076008 | 0.0 | 2.70 -Output | 0.00014687 | 0.00014687 | 0.00014687 | 0.0 | 0.05 -Modify | 0.067444 | 0.067444 | 0.067444 | 0.0 | 23.95 -Other | | 0.01991 | | | 7.07 +Pair | 0.11085 | 0.11085 | 0.11085 | 0.0 | 37.77 +Neigh | 0.059952 | 0.059952 | 0.059952 | 0.0 | 20.43 +Comm | 0.010563 | 0.010563 | 0.010563 | 0.0 | 3.60 +Output | 0.00021076 | 0.00021076 | 0.00021076 | 0.0 | 0.07 +Modify | 0.089026 | 0.089026 | 0.089026 | 0.0 | 30.34 +Other | | 0.02286 | | | 7.79 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/flow/log.5Oct16.flow.couette.g++.4 b/examples/flow/log.27Nov18.flow.couette.g++.4 similarity index 80% rename from examples/flow/log.5Oct16.flow.couette.g++.4 rename to examples/flow/log.27Nov18.flow.couette.g++.4 index 84bd03560d..01f1e81d46 100644 --- a/examples/flow/log.5Oct16.flow.couette.g++.4 +++ b/examples/flow/log.27Nov18.flow.couette.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2-d LJ flow simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (25.6871 22.2457 0.321089) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.00031352 secs mass 1 1.0 mass 2 1.0 @@ -75,7 +77,7 @@ fix 4 all enforce2d timestep 0.003 thermo 500 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.flow @@ -87,13 +89,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 37 32 1 -Memory usage per processor = 2.47768 Mbytes + binsize = 0.71123, bins = 37 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.048 | 3.048 | 3.048 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 0 0 0.71190476 0.52314537 571.54286 500 1.0951876 -0.33403931 0 0.44562996 3.2502319 571.54286 @@ -116,20 +123,20 @@ Step Temp E_pair E_mol TotEng Press Volume 9000 1 -0.45171969 0 0.26018507 2.5525861 571.54286 9500 1.0322994 -0.40989898 0 0.32499991 2.6021234 571.54286 10000 1 -0.42489516 0 0.28700961 2.619505 571.54286 -Loop time of 0.134939 on 4 procs for 10000 steps with 420 atoms +Loop time of 0.172876 on 4 procs for 10000 steps with 420 atoms -Performance: 19208643.416 tau/day, 74107.421 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 14993379.796 tau/day, 57844.829 timesteps/s +95.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.024453 | 0.030829 | 0.036954 | 3.5 | 22.85 -Neigh | 0.0152 | 0.016832 | 0.018415 | 1.2 | 12.47 -Comm | 0.040894 | 0.049385 | 0.058308 | 3.7 | 36.60 -Output | 0.00027037 | 0.00029039 | 0.0003438 | 0.2 | 0.22 -Modify | 0.017885 | 0.018734 | 0.019774 | 0.6 | 13.88 -Other | | 0.01887 | | | 13.98 +Pair | 0.024842 | 0.030136 | 0.036735 | 3.1 | 17.43 +Neigh | 0.014276 | 0.015892 | 0.017287 | 1.1 | 9.19 +Comm | 0.065952 | 0.075937 | 0.084912 | 3.2 | 43.93 +Output | 0.00034285 | 0.00042874 | 0.00067973 | 0.0 | 0.25 +Modify | 0.024682 | 0.026202 | 0.028216 | 1.0 | 15.16 +Other | | 0.02428 | | | 14.05 Nlocal: 105 ave 113 max 97 min Histogram: 2 0 0 0 0 0 0 0 0 2 diff --git a/examples/flow/log.5Oct16.flow.pois.g++.1 b/examples/flow/log.27Nov18.flow.pois.g++.1 similarity index 80% rename from examples/flow/log.5Oct16.flow.pois.g++.1 rename to examples/flow/log.27Nov18.flow.pois.g++.1 index 8a8748f984..45eed1d841 100644 --- a/examples/flow/log.5Oct16.flow.pois.g++.1 +++ b/examples/flow/log.27Nov18.flow.pois.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2-d LJ flow simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (25.6871 22.2457 0.321089) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.000394583 secs mass 1 1.0 mass 2 1.0 @@ -75,7 +77,7 @@ fix 7 all enforce2d timestep 0.003 thermo 500 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.flow @@ -87,13 +89,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 37 32 1 -Memory usage per processor = 2.47395 Mbytes + binsize = 0.71123, bins = 37 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.047 | 3.047 | 3.047 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 0 0 0.71190476 0.52314537 571.54286 500 1.0990751 -0.36396768 0 0.41846911 2.522517 575.55806 @@ -116,20 +123,20 @@ Step Temp E_pair E_mol TotEng Press Volume 9000 1 -0.74461165 0 -0.032706889 2.574656 498.14523 9500 1.2047533 -0.75768848 0 0.09998113 2.4174997 501.8877 10000 1 -0.67361996 0 0.038284798 2.2310948 507.57444 -Loop time of 0.313724 on 1 procs for 10000 steps with 420 atoms +Loop time of 0.353337 on 1 procs for 10000 steps with 420 atoms -Performance: 8262038.165 tau/day, 31875.147 timesteps/s -100.1% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 7335771.903 tau/day, 28301.589 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.13662 | 0.13662 | 0.13662 | 0.0 | 43.55 -Neigh | 0.034956 | 0.034956 | 0.034956 | 0.0 | 11.14 -Comm | 0.0064242 | 0.0064242 | 0.0064242 | 0.0 | 2.05 -Output | 0.00014639 | 0.00014639 | 0.00014639 | 0.0 | 0.05 -Modify | 0.11616 | 0.11616 | 0.11616 | 0.0 | 37.03 -Other | | 0.01941 | | | 6.19 +Pair | 0.12053 | 0.12053 | 0.12053 | 0.0 | 34.11 +Neigh | 0.033673 | 0.033673 | 0.033673 | 0.0 | 9.53 +Comm | 0.00895 | 0.00895 | 0.00895 | 0.0 | 2.53 +Output | 0.00023317 | 0.00023317 | 0.00023317 | 0.0 | 0.07 +Modify | 0.16577 | 0.16577 | 0.16577 | 0.0 | 46.92 +Other | | 0.02418 | | | 6.84 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/flow/log.5Oct16.flow.pois.g++.4 b/examples/flow/log.27Nov18.flow.pois.g++.4 similarity index 80% rename from examples/flow/log.5Oct16.flow.pois.g++.4 rename to examples/flow/log.27Nov18.flow.pois.g++.4 index 20c3293b82..6e0c58614a 100644 --- a/examples/flow/log.5Oct16.flow.pois.g++.4 +++ b/examples/flow/log.27Nov18.flow.pois.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2-d LJ flow simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (25.6871 22.2457 0.321089) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.00031805 secs mass 1 1.0 mass 2 1.0 @@ -75,7 +77,7 @@ fix 7 all enforce2d timestep 0.003 thermo 500 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.flow @@ -87,13 +89,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 10000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 37 32 1 -Memory usage per processor = 2.47768 Mbytes + binsize = 0.71123, bins = 37 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.048 | 3.048 | 3.048 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1 0 0 0.71190476 0.52314537 571.54286 500 1.0758737 -0.36090417 0 0.40501541 2.7822308 575.0659 @@ -116,20 +123,20 @@ Step Temp E_pair E_mol TotEng Press Volume 9000 1 -0.8200207 0 -0.10811593 2.6210027 502.60511 9500 1.2167146 -0.77385956 0 0.092325373 2.5938179 500.86068 10000 1 -0.73082779 0 -0.018923029 2.735112 505.69856 -Loop time of 0.225282 on 4 procs for 10000 steps with 420 atoms +Loop time of 0.208663 on 4 procs for 10000 steps with 420 atoms -Performance: 11505578.988 tau/day, 44388.808 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 12421919.467 tau/day, 47924.072 timesteps/s +95.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.032012 | 0.033154 | 0.035252 | 0.7 | 14.72 -Neigh | 0.0094411 | 0.0097138 | 0.010069 | 0.2 | 4.31 -Comm | 0.080785 | 0.085431 | 0.088782 | 1.0 | 37.92 -Output | 0.0003736 | 0.00039834 | 0.00046349 | 0.2 | 0.18 -Modify | 0.062812 | 0.064686 | 0.066481 | 0.6 | 28.71 -Other | | 0.0319 | | | 14.16 +Pair | 0.031368 | 0.032216 | 0.033688 | 0.5 | 15.44 +Neigh | 0.0093348 | 0.0097306 | 0.010144 | 0.3 | 4.66 +Comm | 0.059824 | 0.065823 | 0.07057 | 1.8 | 31.55 +Output | 0.00033283 | 0.00043827 | 0.00073981 | 0.0 | 0.21 +Modify | 0.067317 | 0.071492 | 0.075636 | 1.3 | 34.26 +Other | | 0.02896 | | | 13.88 Nlocal: 105 ave 106 max 103 min Histogram: 1 0 0 0 0 0 1 0 0 2 From 48a408bb19c61607ae50a51996db5b11cf075375 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 18:42:48 -0500 Subject: [PATCH 215/273] update log files for friction example --- ...ction.g++.1 => log.27Nov18.friction.g++.1} | 38 ++++++++++++------- ...ction.g++.4 => log.27Nov18.friction.g++.4} | 38 ++++++++++++------- 2 files changed, 48 insertions(+), 28 deletions(-) rename examples/friction/{log.5Oct16.friction.g++.1 => log.27Nov18.friction.g++.1} (81%) rename examples/friction/{log.5Oct16.friction.g++.4 => log.27Nov18.friction.g++.4} (81%) diff --git a/examples/friction/log.5Oct16.friction.g++.1 b/examples/friction/log.27Nov18.friction.g++.1 similarity index 81% rename from examples/friction/log.5Oct16.friction.g++.1 rename to examples/friction/log.27Nov18.friction.g++.1 index 27c3d34dcc..6e7422b4f8 100644 --- a/examples/friction/log.5Oct16.friction.g++.1 +++ b/examples/friction/log.27Nov18.friction.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d friction simulation dimension 2 @@ -39,12 +40,16 @@ region hi-half-sphere intersect 2 hi-asperity below-hi create_atoms 1 region lo-slab Created 750 atoms + Time spent = 0.000692606 secs create_atoms 1 region hi-slab Created 750 atoms + Time spent = 0.000464201 secs create_atoms 2 region lo-half-sphere Created 112 atoms + Time spent = 0.000610352 secs create_atoms 3 region hi-half-sphere Created 112 atoms + Time spent = 0.000571966 secs # LJ potentials @@ -94,7 +99,7 @@ fix 4 all enforce2d timestep 0.0025 thermo 1000 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.friction @@ -106,13 +111,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 20000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 41 31 1 -Memory usage per processor = 2.47434 Mbytes + binsize = 1.4, bins = 41 31 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.058 | 3.058 | 3.058 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.1 -3.1333672 0 -3.0920969 -1.1437663 2444.9333 1000 0.1 -3.0915072 0 -3.0502369 0.0099866805 2444.9333 @@ -135,20 +145,20 @@ Step Temp E_pair E_mol TotEng Press Volume 18000 0.11159326 -3.0416392 0 -2.9955843 -0.22725121 2444.9333 19000 0.11530974 -3.0457005 0 -2.9981118 -0.36488457 2444.9333 20000 0.1131733 -3.0417814 0 -2.9950744 -0.27902539 2444.9333 -Loop time of 5.78572 on 1 procs for 20000 steps with 1724 atoms +Loop time of 5.95046 on 1 procs for 20000 steps with 1724 atoms -Performance: 746665.546 tau/day, 3456.785 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 725993.862 tau/day, 3361.083 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.7167 | 4.7167 | 4.7167 | 0.0 | 81.52 -Neigh | 0.30734 | 0.30734 | 0.30734 | 0.0 | 5.31 -Comm | 0.036082 | 0.036082 | 0.036082 | 0.0 | 0.62 -Output | 0.00039339 | 0.00039339 | 0.00039339 | 0.0 | 0.01 -Modify | 0.57194 | 0.57194 | 0.57194 | 0.0 | 9.89 -Other | | 0.1533 | | | 2.65 +Pair | 4.7314 | 4.7314 | 4.7314 | 0.0 | 79.51 +Neigh | 0.3022 | 0.3022 | 0.3022 | 0.0 | 5.08 +Comm | 0.046376 | 0.046376 | 0.046376 | 0.0 | 0.78 +Output | 0.00047255 | 0.00047255 | 0.00047255 | 0.0 | 0.01 +Modify | 0.69477 | 0.69477 | 0.69477 | 0.0 | 11.68 +Other | | 0.1752 | | | 2.94 Nlocal: 1724 ave 1724 max 1724 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/friction/log.5Oct16.friction.g++.4 b/examples/friction/log.27Nov18.friction.g++.4 similarity index 81% rename from examples/friction/log.5Oct16.friction.g++.4 rename to examples/friction/log.27Nov18.friction.g++.4 index 7dbecb1bc7..1ac945bb8a 100644 --- a/examples/friction/log.5Oct16.friction.g++.4 +++ b/examples/friction/log.27Nov18.friction.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d friction simulation dimension 2 @@ -39,12 +40,16 @@ region hi-half-sphere intersect 2 hi-asperity below-hi create_atoms 1 region lo-slab Created 750 atoms + Time spent = 0.000427008 secs create_atoms 1 region hi-slab Created 750 atoms + Time spent = 0.000396729 secs create_atoms 2 region lo-half-sphere Created 112 atoms + Time spent = 0.000207663 secs create_atoms 3 region hi-half-sphere Created 112 atoms + Time spent = 0.000194788 secs # LJ potentials @@ -94,7 +99,7 @@ fix 4 all enforce2d timestep 0.0025 thermo 1000 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 500 dump.friction @@ -106,13 +111,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 20000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 41 31 1 -Memory usage per processor = 2.47775 Mbytes + binsize = 1.4, bins = 41 31 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.051 | 3.051 | 3.052 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.1 -3.1333672 0 -3.0920969 -1.1437663 2444.9333 1000 0.081947197 -3.0926906 0 -3.0588707 -0.021905504 2444.9333 @@ -135,20 +145,20 @@ Step Temp E_pair E_mol TotEng Press Volume 18000 0.11086121 -3.0462098 0 -3.0004571 -0.19272619 2444.9333 19000 0.11407977 -3.046791 0 -2.99971 -0.29824356 2444.9333 20000 0.11532037 -3.0463959 0 -2.9988028 -0.3435294 2444.9333 -Loop time of 1.90668 on 4 procs for 20000 steps with 1724 atoms +Loop time of 1.98982 on 4 procs for 20000 steps with 1724 atoms -Performance: 2265719.994 tau/day, 10489.444 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2171051.815 tau/day, 10051.166 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.0349 | 1.1944 | 1.3574 | 10.5 | 62.64 -Neigh | 0.070767 | 0.082252 | 0.094675 | 3.0 | 4.31 -Comm | 0.19432 | 0.3776 | 0.54764 | 20.4 | 19.80 -Output | 0.00043559 | 0.00045842 | 0.00052333 | 0.2 | 0.02 -Modify | 0.12252 | 0.14002 | 0.15438 | 3.1 | 7.34 -Other | | 0.112 | | | 5.87 +Pair | 1.0746 | 1.214 | 1.3479 | 8.9 | 61.01 +Neigh | 0.073977 | 0.083197 | 0.096277 | 2.9 | 4.18 +Comm | 0.22466 | 0.37933 | 0.52711 | 17.6 | 19.06 +Output | 0.00045776 | 0.00078875 | 0.0017807 | 0.0 | 0.04 +Modify | 0.16952 | 0.18621 | 0.20218 | 2.8 | 9.36 +Other | | 0.1263 | | | 6.35 Nlocal: 431 ave 479 max 377 min Histogram: 1 1 0 0 0 0 0 0 0 2 From 9646d4614f59a253887ed770776af607ab502aeb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 18:45:32 -0500 Subject: [PATCH 216/273] plug small memory leak in fix gcmc --- src/MC/fix_gcmc.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index b40ce6a1b3..ebfb17390d 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -406,6 +406,8 @@ FixGCMC::~FixGCMC() memory->destroy(local_gas_list); memory->destroy(molcoords); + memory->destroy(molq); + memory->destroy(molimage); delete [] idrigid; delete [] idshake; From 3508eca33768bb715b5d6b24f3cb49ffe4033dc6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 18:49:37 -0500 Subject: [PATCH 217/273] make sure all local Tree pointers are initialized, either to a newly allocated Tree() or NULL --- src/variable.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/variable.cpp b/src/variable.cpp index af5f647b74..f83d3ebc20 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -956,7 +956,7 @@ double Variable::compute_equal(char *str) void Variable::compute_atom(int ivar, int igroup, double *result, int stride, int sumflag) { - Tree *tree; + Tree *tree = NULL; double *vstore; if (eval_in_progress[ivar]) @@ -1028,7 +1028,7 @@ void Variable::compute_atom(int ivar, int igroup, int Variable::compute_vector(int ivar, double **result) { - Tree *tree; + Tree *tree = NULL; if (vecs[ivar].currentstep == update->ntimestep) { *result = vecs[ivar].values; return vecs[ivar].n; @@ -1215,7 +1215,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) // evaluate contents and push on stack if (tree) { - Tree *newtree; + Tree *newtree = NULL; evaluate(contents,&newtree,ivar); treestack[ntreestack++] = newtree; } else argstack[nargstack++] = evaluate(contents,NULL,ivar); @@ -1915,7 +1915,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Atom-style variable in " "vector-style variable formula",ivar); - Tree *newtree; + Tree *newtree = NULL; evaluate(data[ivar][0],&newtree,ivar); treestack[ntreestack++] = newtree; @@ -3325,7 +3325,7 @@ int Variable::math_function(char *word, char *contents, Tree **tree, char *args[MAXFUNCARG]; int narg = parse_args(contents,args); - Tree *newtree; + Tree *newtree = NULL; double value1,value2; double values[MAXFUNCARG-2]; @@ -3333,7 +3333,7 @@ int Variable::math_function(char *word, char *contents, Tree **tree, newtree = new Tree(); newtree->first = newtree->second = NULL; newtree->nextra = 0; - Tree *argtree; + Tree *argtree = NULL; evaluate(args[0],&argtree,ivar); newtree->first = argtree; if (narg > 1) { From 798f098e4aa4ea2840e6b137694ab9f3015f0858 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 18:57:26 -0500 Subject: [PATCH 218/273] remove USER-OMP version of fix nphug, which had intermittant and difficult to track down memory corruption issues with multiple threads. --- src/USER-OMP/fix_nphug_omp.cpp | 460 --------------------------------- src/USER-OMP/fix_nphug_omp.h | 98 ------- 2 files changed, 558 deletions(-) delete mode 100644 src/USER-OMP/fix_nphug_omp.cpp delete mode 100644 src/USER-OMP/fix_nphug_omp.h diff --git a/src/USER-OMP/fix_nphug_omp.cpp b/src/USER-OMP/fix_nphug_omp.cpp deleted file mode 100644 index a2ed8eb7aa..0000000000 --- a/src/USER-OMP/fix_nphug_omp.cpp +++ /dev/null @@ -1,460 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_nphug_omp.h" -#include "modify.h" -#include "error.h" -#include "update.h" -#include "compute.h" -#include "force.h" -#include "domain.h" -#include "group.h" -#include "memory.h" -#include "comm.h" - -using namespace LAMMPS_NS; -using namespace FixConst; - -enum{ISO,ANISO,TRICLINIC}; // same as fix_nh.cpp - -/* ---------------------------------------------------------------------- */ - -FixNPHugOMP::FixNPHugOMP(LAMMPS *lmp, int narg, char **arg) : - FixNHOMP(lmp, narg, arg), pe(NULL), id_pe(NULL) -{ - - // Prevent masses from being updated every timestep - - eta_mass_flag = 0; - omega_mass_flag = 0; - etap_mass_flag = 0; - - // extend vector of base-class computes - - size_vector += 3; - - // turn off deviatoric flag and remove strain energy from vector - - deviatoric_flag = 0; - size_vector -= 1; - - // use initial state as reference state - - v0_set = p0_set = e0_set = 0; - - // check pressure settings - - if (p_start[0] != p_stop[0] || - p_start[1] != p_stop[1] || - p_start[2] != p_stop[2]) - error->all(FLERR,"Pstart and Pstop must have the same value"); - - // uniaxial = 0 means hydrostatic compression - // uniaxial = 1 means uniaxial compression - // in x, y, or z (idir = 0, 1, or 2) - - // isotropic hydrostatic compression - - if (pstyle == ISO) { - uniaxial = 0; - - // anisotropic compression - - } else if (pstyle == ANISO) { - - // anisotropic hydrostatic compression - - if (p_start[0] == p_start[1] && - p_start[0] == p_start[2] ) - uniaxial = 0; - - // uniaxial compression - - else if (p_flag[0] == 1 && p_flag[1] == 0 - && p_flag[2] == 0) { - uniaxial = 1; - idir = 0; - } else if (p_flag[0] == 0 && p_flag[1] == 1 - && p_flag[2] == 0) { - uniaxial = 1; - idir = 1; - } else if (p_flag[0] == 0 && p_flag[1] == 0 - && p_flag[2] == 1) { - uniaxial = 1; - idir = 2; - - } else error->all(FLERR,"Specified target stress must be uniaxial or hydrostatic"); - - // triclinic hydrostatic compression - - } else if (pstyle == TRICLINIC) { - - if (p_start[0] == p_start[1] && - p_start[0] == p_start[2] && - p_start[3] == 0.0 && - p_start[4] == 0.0 && - p_start[5] == 0.0 ) - uniaxial = 0; - - else error->all(FLERR,"For triclinic deformation, specified target stress must be hydrostatic"); - } - - if (!tstat_flag) - error->all(FLERR,"Temperature control must be used with fix nphug/omp"); - if (!pstat_flag) - error->all(FLERR,"Pressure control must be used with fix nphug/omp"); - - // create a new compute temp style - // id = fix-ID + temp - // compute group = all since pressure is always global (group all) - // and thus its KE/temperature contribution should use group all - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[3]; - newarg[0] = id_temp; - newarg[1] = (char *) "all"; - newarg[2] = (char *) "temp"; - - modify->add_compute(3,newarg); - delete [] newarg; - tcomputeflag = 1; - - // create a new compute pressure style - // id = fix-ID + press, compute group = all - // pass id_temp as 4th arg to pressure constructor - - n = strlen(id) + 7; - id_press = new char[n]; - strcpy(id_press,id); - strcat(id_press,"_press"); - - newarg = new char*[4]; - newarg[0] = id_press; - newarg[1] = (char *) "all"; - newarg[2] = (char *) "pressure"; - newarg[3] = id_temp; - modify->add_compute(4,newarg); - delete [] newarg; - pcomputeflag = 1; - - // create a new compute potential energy compute - - n = strlen(id) + 4; - id_pe = new char[n]; - strcpy(id_pe,id); - strcat(id_pe,"_pe"); - - newarg = new char*[3]; - newarg[0] = id_pe; - newarg[1] = (char*)"all"; - newarg[2] = (char*)"pe"; - modify->add_compute(3,newarg); - delete [] newarg; - peflag = 1; -} - -/* ---------------------------------------------------------------------- */ - -FixNPHugOMP::~FixNPHugOMP() -{ - - // temp and press computes handled by base class - // delete pe compute - - if (peflag) modify->delete_compute(id_pe); - delete [] id_pe; - -} - -/* ---------------------------------------------------------------------- */ - -void FixNPHugOMP::init() -{ - // Call base class init() - - FixNHOMP::init(); - - // set pe ptr - - int icompute = modify->find_compute(id_pe); - if (icompute < 0) - error->all(FLERR,"Potential energy ID for fix nvt/nph/npt does not exist"); - pe = modify->compute[icompute]; -} - - -/* ---------------------------------------------------------------------- - compute initial state before integrator starts -------------------------------------------------------------------------- */ - -void FixNPHugOMP::setup(int vflag) -{ - FixNHOMP::setup(vflag); - - if ( v0_set == 0 ) { - v0 = compute_vol(); - v0_set = 1; - } - - if ( p0_set == 0 ) { - p0_set = 1; - if (uniaxial == 1) - p0 = p_current[idir]; - else - p0 = (p_current[0]+p_current[1]+p_current[2])/3.0; - } - - if ( e0_set == 0 ) { - e0 = compute_etotal(); - e0_set = 1; - } - - double masstot = group->mass(igroup); - rho0 = nktv2p*force->mvv2e*masstot/v0; - - t_target = 0.01; - - pe->addstep(update->ntimestep+1); -} - -/* ---------------------------------------------------------------------- - compute target temperature and kinetic energy ------------------------------------------------------------------------*/ - -void FixNPHugOMP::compute_temp_target() -{ - t_target = t_current + compute_hugoniot(); - ke_target = tdof * boltz * t_target; - pe->addstep(update->ntimestep+1); -} - -/* ---------------------------------------------------------------------- */ - -double FixNPHugOMP::compute_etotal() -{ - double epot,ekin,etot; - epot = pe->compute_scalar(); - if (thermo_energy) epot -= compute_scalar(); - ekin = temperature->compute_scalar(); - ekin *= 0.5 * tdof * force->boltz; - etot = epot+ekin; - return etot; -} - -/* ---------------------------------------------------------------------- */ - -double FixNPHugOMP::compute_vol() -{ - if (domain->dimension == 3) - return domain->xprd * domain->yprd * domain->zprd; - else - return domain->xprd * domain->yprd; -} - -/* ---------------------------------------------------------------------- - Computes the deviation of the current point - from the Hugoniot in temperature units. -------------------------------------------------------------------------- */ - -double FixNPHugOMP::compute_hugoniot() -{ - double v,e,p; - double dhugo; - - e = compute_etotal(); - - temperature->compute_vector(); - - - if (uniaxial == 1) { - pressure->compute_vector(); - p = pressure->vector[idir]; - } else - p = pressure->compute_scalar(); - - v = compute_vol(); - - dhugo = (0.5 * (p + p0 ) * ( v0 - v)) / - force->nktv2p + e0 - e; - - dhugo /= tdof * boltz; - - return dhugo; -} - -/* ---------------------------------------------------------------------- - Compute shock velocity is distance/time units -------------------------------------------------------------------------- */ - -double FixNPHugOMP::compute_us() -{ - double v,p; - double eps,us; - - temperature->compute_vector(); - - if (uniaxial == 1) { - pressure->compute_vector(); - p = pressure->vector[idir]; - } else - p = pressure->compute_scalar(); - - v = compute_vol(); - - // Us^2 = (p-p0)/(rho0*eps) - - eps = 1.0 - v/v0; - if (eps < 1.0e-10) us = 0.0; - else if (p < p0) us = 0.0; - else us = sqrt((p-p0)/(rho0*eps)); - - return us; -} - -/* ---------------------------------------------------------------------- - Compute particle velocity is distance/time units -------------------------------------------------------------------------- */ - -double FixNPHugOMP::compute_up() -{ - double v; - double eps,us,up; - - v = compute_vol(); - us = compute_us(); - - // u = eps*Us - - eps = 1.0 - v/v0; - up = us*eps; - - return up; -} - -// look for index in local class -// if index not found, look in base class - -double FixNPHugOMP::compute_vector(int n) -{ - int ilen; - - // n = 0: Hugoniot energy difference (temperature units) - - ilen = 1; - if (n < ilen) return compute_hugoniot(); - n -= ilen; - - // n = 1: Shock velocity - - ilen = 1; - if (n < ilen) return compute_us(); - n -= ilen; - - // n = 2: Particle velocity - - ilen = 1; - if (n < ilen) return compute_up(); - n -= ilen; - - // index not found, look in base class - - return FixNHOMP::compute_vector(n); -} - -/* ---------------------------------------------------------------------- - pack restart data -------------------------------------------------------------------------- */ - -int FixNPHugOMP::pack_restart_data(double *list) -{ - int n = 0; - - list[n++] = e0; - list[n++] = v0; - list[n++] = p0; - - // call the base class function - - n += FixNHOMP::pack_restart_data(list+n); - - return n; -} - -/* ---------------------------------------------------------------------- - calculate the number of data to be packed -------------------------------------------------------------------------- */ - -int FixNPHugOMP::size_restart_global() -{ - int nsize = 3; - - // call the base class function - - nsize += FixNHOMP::size_restart_global(); - - return nsize; -} - -/* ---------------------------------------------------------------------- - use state info from restart file to restart the Fix -------------------------------------------------------------------------- */ - -void FixNPHugOMP::restart(char *buf) -{ - int n = 0; - double *list = (double *) buf; - e0 = list[n++]; - v0 = list[n++]; - p0 = list[n++]; - - e0_set = 1; - v0_set = 1; - p0_set = 1; - - // call the base class function - - buf += n*sizeof(double); - FixNHOMP::restart(buf); - -} - -/* ---------------------------------------------------------------------- */ - -int FixNPHugOMP::modify_param(int narg, char **arg) -{ - if (strcmp(arg[0],"e0") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix nphug/omp command"); - e0 = force->numeric(FLERR,arg[1]); - e0_set = 1; - return 2; - } else if (strcmp(arg[0],"v0") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix nphug/omp command"); - v0 = force->numeric(FLERR,arg[1]); - v0_set = 1; - return 2; - } else if (strcmp(arg[0],"p0") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix nphug/omp command"); - p0 = force->numeric(FLERR,arg[1]); - p0_set = 1; - return 2; - } - - return 0; -} diff --git a/src/USER-OMP/fix_nphug_omp.h b/src/USER-OMP/fix_nphug_omp.h deleted file mode 100644 index 4a4db63440..0000000000 --- a/src/USER-OMP/fix_nphug_omp.h +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(nphug/omp,FixNPHugOMP) - -#else - -#ifndef LMP_FIX_NPHUG_OMP_H -#define LMP_FIX_NPHUG_OMP_H - -#include "fix_nh_omp.h" - -namespace LAMMPS_NS { - -class FixNPHugOMP : public FixNHOMP { - public: - FixNPHugOMP(class LAMMPS *, int, char **); - virtual ~FixNPHugOMP(); - - virtual void init(); - virtual void setup(int); - virtual int modify_param(int, char **); - virtual int pack_restart_data(double *); // pack restart data - virtual void restart(char *); - - private: - class Compute *pe; // PE compute pointer - - void compute_temp_target(); - double compute_vector(int); - double compute_etotal(); - double compute_vol(); - double compute_hugoniot(); - double compute_us(); - double compute_up(); - - char *id_pe; - int peflag; - int v0_set,p0_set,e0_set; - double v0,p0,e0,rho0; - int idir; - int uniaxial; - - int size_restart_global(); -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Pstart and Pstop must have the same value - -Self-explanatory. - -E: Specified target stress must be uniaxial or hydrostatic - -Self-explanatory. - -E: For triclinic deformation, specified target stress must be hydrostatic - -Triclinic pressure control is allowed using the tri keyword, but -non-hydrostatic pressure control can not be used in this case. - -E: Temperature control must be used with fix nphug - -The temp keyword must be provided. - -E: Pressure control must be used with fix nphug - -A pressure control keyword (iso, aniso, tri, x, y, or z) must be -provided. - -E: Potential energy ID for fix nvt/nph/npt does not exist - -A compute for potential energy must be defined. - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -*/ From c763916f9e8709774f16bd517a2aaa3c4e5bf90f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 21:21:54 -0500 Subject: [PATCH 219/273] update log files for granregion hugoniostat and indent examples --- .../log.27Nov18.granregion.box.g++.1 | 475 ++++++++++++++ .../log.27Nov18.granregion.box.g++.4 | 475 ++++++++++++++ .../log.27Nov18.granregion.funnel.g++.1 | 601 +++++++++++++++++ .../log.27Nov18.granregion.funnel.g++.4 | 601 +++++++++++++++++ .../log.27Nov18.granregion.mixer.g++.1 | 602 +++++++++++++++++ .../log.27Nov18.granregion.mixer.g++.4 | 602 +++++++++++++++++ .../log.6Oct16.granregion.box.g++.1 | 468 -------------- .../log.6Oct16.granregion.box.g++.4 | 468 -------------- .../log.6Oct16.granregion.funnel.g++.1 | 608 ----------------- .../log.6Oct16.granregion.funnel.g++.4 | 608 ----------------- .../log.6Oct16.granregion.mixer.g++.1 | 609 ------------------ .../log.6Oct16.granregion.mixer.g++.4 | 609 ------------------ examples/hugoniostat/in.hugoniostat | 32 +- .../hugoniostat/log.27Nov18.hugoniostat.g++.1 | 401 ++++++++++++ .../hugoniostat/log.27Nov18.hugoniostat.g++.4 | 401 ++++++++++++ ....indent.g++.1 => log.27Nov18.indent.g++.1} | 55 +- ....indent.g++.4 => log.27Nov18.indent.g++.4} | 57 +- ...min.g++.1 => log.27Nov18.indent.min.g++.1} | 153 ++--- ...min.g++.4 => log.27Nov18.indent.min.g++.4} | 153 ++--- 19 files changed, 4394 insertions(+), 3584 deletions(-) create mode 100644 examples/granregion/log.27Nov18.granregion.box.g++.1 create mode 100644 examples/granregion/log.27Nov18.granregion.box.g++.4 create mode 100644 examples/granregion/log.27Nov18.granregion.funnel.g++.1 create mode 100644 examples/granregion/log.27Nov18.granregion.funnel.g++.4 create mode 100644 examples/granregion/log.27Nov18.granregion.mixer.g++.1 create mode 100644 examples/granregion/log.27Nov18.granregion.mixer.g++.4 delete mode 100644 examples/granregion/log.6Oct16.granregion.box.g++.1 delete mode 100644 examples/granregion/log.6Oct16.granregion.box.g++.4 delete mode 100644 examples/granregion/log.6Oct16.granregion.funnel.g++.1 delete mode 100644 examples/granregion/log.6Oct16.granregion.funnel.g++.4 delete mode 100644 examples/granregion/log.6Oct16.granregion.mixer.g++.1 delete mode 100644 examples/granregion/log.6Oct16.granregion.mixer.g++.4 create mode 100644 examples/hugoniostat/log.27Nov18.hugoniostat.g++.1 create mode 100644 examples/hugoniostat/log.27Nov18.hugoniostat.g++.4 rename examples/indent/{log.5Oct16.indent.g++.1 => log.27Nov18.indent.g++.1} (82%) rename examples/indent/{log.5Oct16.indent.g++.4 => log.27Nov18.indent.g++.4} (82%) rename examples/indent/{log.5Oct16.indent.min.g++.1 => log.27Nov18.indent.min.g++.1} (77%) rename examples/indent/{log.5Oct16.indent.min.g++.4 => log.27Nov18.indent.min.g++.4} (76%) diff --git a/examples/granregion/log.27Nov18.granregion.box.g++.1 b/examples/granregion/log.27Nov18.granregion.box.g++.1 new file mode 100644 index 0000000000..ef004b7398 --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.box.g++.1 @@ -0,0 +1,475 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# pouring spheres into container box + +units lj +atom_style sphere +boundary f f f +dimension 3 +comm_modify vel yes + +region box block -10 10 -10 10 -10 10 units box +create_box 2 box +Created orthogonal box = (-10 -10 -10) to (10 10 10) + 1 by 1 by 1 MPI processor grid + +pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 +pair_coeff * * gran/hooke + +region container block -6 6 -6 6 -6 6 units box +fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 2 all nve/sphere +fix 3 all gravity 1.0 vector 0 0 -1 + +region slab block -2 2 -2 2 -2 2 units box +fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore +Particle insertion: 48 every 566 steps, 100 by step 1133 + +timestep 0.005 + +compute 1 all temp +compute_modify 1 dynamic/dof yes + +compute 2 all temp/sphere +compute_modify 2 dynamic/dof yes + +thermo 100 +thermo_style custom step atoms temp c_1 c_2 press +thermo_modify lost ignore +compute_modify thermo_temp dynamic/dof yes + +#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 +#dump_modify 2 pad 5 + +run 5000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 31 31 31 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke, perpetual + attributes: half, newton on, size + pair build: half/size/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.5855 | 0.5855 | 0.5855 Mbytes +Step Atoms Temp c_1 c_2 Press + 0 0 0 0 0 0 + 100 21 0.54270729 0.54270729 0.26473526 0.0013567682 + 200 21 0.87606961 0.87606961 0.42735103 0.002190174 + 300 21 1.1428374 1.1428374 0.55748167 0.0028570936 + 400 21 1.3543103 1.3543103 0.66829516 0.0033857758 + 500 21 1.0677786 1.0677786 0.53582407 0.0045048164 + 600 56 0.6744286 0.6744286 0.3502938 0.0047464584 + 700 56 0.75569283 0.75569283 0.39779462 0.0051953882 + 800 56 0.61597505 0.61597505 0.32943642 0.0086022783 + 900 56 0.65260802 0.65260802 0.34474044 0.0059298996 + 1000 56 0.51624952 0.51624952 0.28326898 0.0067827337 + 1100 56 0.46050076 0.46050076 0.25656319 0.0061891094 + 1200 81 0.39112346 0.39112346 0.21690172 0.0086559316 + 1300 81 0.33302617 0.33302617 0.19109398 0.0033381104 + 1400 81 0.3933533 0.3933533 0.21221692 0.004135078 + 1500 81 0.35495297 0.35495297 0.19925984 0.0037374946 + 1600 81 0.34150606 0.34150606 0.19025811 0.0053492835 + 1700 100 0.2561647 0.2561647 0.14186278 0.0090767057 + 1800 100 0.21124278 0.21124278 0.12154878 0.0028545759 + 1900 100 0.21793955 0.21793955 0.12173867 0.0029049155 + 2000 100 0.25530858 0.25530858 0.13892272 0.0035528009 + 2100 100 0.24671808 0.24671808 0.13687783 0.0076812435 + 2200 100 0.22465216 0.22465216 0.12513603 0.0042528715 + 2300 100 0.19362854 0.19362854 0.10914305 0.0061173739 + 2400 100 0.061627608 0.061627608 0.045907717 0.0010422721 + 2500 100 0.052700901 0.052700901 0.038883014 0.0019341647 + 2600 100 0.037332018 0.037332018 0.028357146 0.0028364476 + 2700 100 0.033526602 0.033526602 0.024609055 0.00044524562 + 2800 100 0.0194148 0.0194148 0.014491377 0.00056526591 + 2900 100 0.012346108 0.012346108 0.009857017 0.00081855699 + 3000 100 0.0107344 0.0107344 0.008669364 0.00040371396 + 3100 100 0.0092678291 0.0092678291 0.0073003108 0.00033287397 + 3200 100 0.0085847001 0.0085847001 0.0064045591 0.00023253547 + 3300 100 0.0049475182 0.0049475182 0.0041173627 0.00019876269 + 3400 100 0.0030471097 0.0030471097 0.0026940466 0.00013462604 + 3500 100 0.0031188371 0.0031188371 0.002612223 0.00026148578 + 3600 100 0.0017616584 0.0017616584 0.0017464137 0.00019049724 + 3700 100 0.0015475923 0.0015475923 0.0015560356 0.00025062814 + 3800 100 0.0012547887 0.0012547887 0.0012622678 0.00014132236 + 3900 100 0.0010047282 0.0010047282 0.0010379262 9.7665594e-05 + 4000 100 0.00080895307 0.00080895307 0.00088263027 8.1278842e-05 + 4100 100 0.00079078739 0.00079078739 0.00085810727 8.1271694e-05 + 4200 100 0.00075192318 0.00075192318 0.00083085046 8.9352453e-05 + 4300 100 0.00063546457 0.00063546457 0.00073222177 8.9264255e-05 + 4400 100 0.00062398391 0.00062398391 0.00071312118 8.4200615e-05 + 4500 100 0.00056464934 0.00056464934 0.00066087801 9.2097641e-05 + 4600 100 0.00066951894 0.00066951894 0.00071633313 8.2457941e-05 + 4700 100 0.001128837 0.001128837 0.00095293877 0.00011716361 + 4800 100 0.00049580391 0.00049580391 0.00056710488 0.00010718794 + 4900 100 0.00054374371 0.00054374371 0.00058671699 5.6580257e-05 + 5000 100 0.00043016232 0.00043016232 0.00050264172 2.8640786e-05 +Loop time of 0.0807264 on 1 procs for 5000 steps with 100 atoms + +Performance: 26757050.955 tau/day, 61937.618 timesteps/s +97.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0089066 | 0.0089066 | 0.0089066 | 0.0 | 11.03 +Neigh | 0.017107 | 0.017107 | 0.017107 | 0.0 | 21.19 +Comm | 0.00091505 | 0.00091505 | 0.00091505 | 0.0 | 1.13 +Output | 0.00051451 | 0.00051451 | 0.00051451 | 0.0 | 0.64 +Modify | 0.047671 | 0.047671 | 0.047671 | 0.0 | 59.05 +Other | | 0.005612 | | | 6.95 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 158 ave 158 max 158 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 158 +Ave neighs/atom = 1.58 +Neighbor list builds = 310 +Dangerous builds = 0 + +region container delete +variable theta equal (step-5000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.836 | 5.836 | 5.836 Mbytes +Step Atoms Temp c_1 c_2 Press + 5000 100 0.00043016232 0.00043016232 0.00050264172 2.8677624e-05 + 5100 100 0.56489668 0.56489668 0.31137762 0.011848041 + 5200 100 0.66068288 0.66068288 0.35915482 0.010199755 + 5300 100 0.74068022 0.74068022 0.39643217 0.010806409 + 5400 100 0.80913562 0.80913562 0.42748505 0.01190892 + 5500 100 0.89409135 0.89409135 0.46135116 0.013093474 + 5600 100 0.97585093 0.97585093 0.50021126 0.013588886 + 5700 100 1.0151954 1.0151954 0.5174624 0.01601347 + 5800 100 1.0452728 1.0452728 0.53122496 0.01879329 + 5900 100 1.0881689 1.0881689 0.55152229 0.017120714 + 6000 100 1.1133186 1.1133186 0.5638022 0.017284617 + 6100 100 1.1532099 1.1532099 0.58310076 0.017031384 + 6200 100 1.1798849 1.1798849 0.5959516 0.017971323 + 6300 100 1.19387 1.19387 0.60173877 0.020140984 + 6400 100 1.2126705 1.2126705 0.61086899 0.018426638 + 6500 100 1.2137646 1.2137646 0.61284198 0.019127381 + 6600 100 1.2339012 1.2339012 0.62199324 0.019378799 + 6700 100 1.2439326 1.2439326 0.62488425 0.021049447 + 6800 100 1.2489549 1.2489549 0.6278167 0.019552409 + 6900 100 1.2733303 1.2733303 0.63898149 0.020237284 + 7000 100 1.2835029 1.2835029 0.6440245 0.020798586 + 7100 100 1.2866111 1.2866111 0.64522896 0.020355019 + 7200 100 1.2886381 1.2886381 0.6467497 0.02062322 + 7300 100 1.2885085 1.2885085 0.64617988 0.020350755 + 7400 100 1.2912349 1.2912349 0.64691898 0.020197503 + 7500 100 1.2963062 1.2963062 0.64926335 0.020349791 + 7600 100 1.3016488 1.3016488 0.65150178 0.021001457 + 7700 100 1.3009311 1.3009311 0.65106234 0.021546471 + 7800 100 1.3016987 1.3016987 0.65143099 0.020994967 + 7900 100 1.3028811 1.3028811 0.65164558 0.022200425 + 8000 100 1.3087855 1.3087855 0.65439023 0.021310808 + 8100 100 1.3102001 1.3102001 0.65514941 0.021177764 + 8200 100 1.3133931 1.3133931 0.65681861 0.021591267 + 8300 100 1.3148898 1.3148898 0.65775353 0.021335384 + 8400 100 1.3160355 1.3160355 0.65845913 0.021238095 + 8500 100 1.3171797 1.3171797 0.65934185 0.021172983 + 8600 100 1.3176785 1.3176785 0.65964311 0.020747457 + 8700 100 1.3180425 1.3180425 0.66019624 0.021275913 + 8800 100 1.3287501 1.3287501 0.66444242 0.021832635 + 8900 100 1.3249847 1.3249847 0.6625848 0.021337451 + 9000 100 1.326216 1.326216 0.66297827 0.021470663 + 9100 100 1.3261662 1.3261662 0.66303852 0.021423573 + 9200 100 1.3312132 1.3312132 0.6653609 0.021385943 + 9300 100 1.3300976 1.3300976 0.66504574 0.021489888 + 9400 100 1.3377335 1.3377335 0.66820989 0.021565001 + 9500 100 1.3421956 1.3421956 0.67027168 0.022402346 + 9600 100 1.3464217 1.3464217 0.67228206 0.021991922 + 9700 100 1.3470623 1.3470623 0.67258349 0.022035729 + 9800 100 1.3446725 1.3446725 0.67135725 0.022295251 + 9900 100 1.343146 1.343146 0.67066672 0.022049041 + 10000 100 1.3435397 1.3435397 0.67093067 0.022451365 +Loop time of 0.247549 on 1 procs for 5000 steps with 100 atoms + +Performance: 8725560.044 tau/day, 20198.056 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.031783 | 0.031783 | 0.031783 | 0.0 | 12.84 +Neigh | 0.038383 | 0.038383 | 0.038383 | 0.0 | 15.51 +Comm | 0.0012343 | 0.0012343 | 0.0012343 | 0.0 | 0.50 +Output | 0.00056028 | 0.00056028 | 0.00056028 | 0.0 | 0.23 +Modify | 0.1687 | 0.1687 | 0.1687 | 0.0 | 68.15 +Other | | 0.00689 | | | 2.78 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 199 ave 199 max 199 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 199 +Ave neighs/atom = 1.99 +Neighbor list builds = 621 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.836 | 5.836 | 5.836 Mbytes +Step Atoms Temp c_1 c_2 Press + 10000 100 1.3435397 1.3435397 0.67093067 0.022411116 + 10100 100 0.31352763 0.31352763 0.18877908 0.01321582 + 10200 100 0.13367611 0.13367611 0.090010637 0.0074171016 + 10300 100 0.068195658 0.068195658 0.052632714 0.0019696287 + 10400 100 0.053814936 0.053814936 0.043037586 0.0017121584 + 10500 100 0.04032072 0.04032072 0.032944572 0.0011809154 + 10600 100 0.029178161 0.029178161 0.023951873 0.0007804529 + 10700 100 0.025978206 0.025978206 0.021045025 0.00099531465 + 10800 100 0.023205036 0.023205036 0.01898502 0.00040036401 + 10900 100 0.019994638 0.019994638 0.016451227 0.00027385559 + 11000 100 0.017838131 0.017838131 0.014730762 0.00040399762 + 11100 100 0.014863196 0.014863196 0.012314308 0.00019097464 + 11200 100 0.012131256 0.012131256 0.010102122 0.00018514926 + 11300 100 0.010881385 0.010881385 0.0090013541 0.00016579157 + 11400 100 0.0076519814 0.0076519814 0.0064604568 0.00035399997 + 11500 100 0.0067507315 0.0067507315 0.0057378868 0.00049116726 + 11600 100 0.0053146649 0.0053146649 0.0047005938 0.00019625233 + 11700 100 0.0044162463 0.0044162463 0.0039534657 0.00012548039 + 11800 100 0.0037025387 0.0037025387 0.0033604103 6.2969827e-05 + 11900 100 0.0032632211 0.0032632211 0.0030406641 8.1600622e-05 + 12000 100 0.0028944057 0.0028944057 0.0026875858 6.6435833e-05 + 12100 100 0.0027644728 0.0027644728 0.0025859762 5.5899271e-05 + 12200 100 0.002480367 0.002480367 0.0023685117 6.0201418e-05 + 12300 100 0.0024136475 0.0024136475 0.0023107986 4.4386874e-05 + 12400 100 0.0021911567 0.0021911567 0.0021413262 5.0213175e-05 + 12500 100 0.0019775905 0.0019775905 0.0019927698 0.00035250097 + 12600 100 0.0017410363 0.0017410363 0.001830428 5.7885177e-05 + 12700 100 0.0015749276 0.0015749276 0.0016816771 4.5530192e-05 + 12800 100 0.0015187705 0.0015187705 0.0016218625 4.0589413e-05 + 12900 100 0.0014778376 0.0014778376 0.001580232 4.0085455e-05 + 13000 100 0.0014693491 0.0014693491 0.0015681809 4.0407656e-05 + 13100 100 0.0014434495 0.0014434495 0.0015356278 5.7849212e-05 + 13200 100 0.0014121959 0.0014121959 0.0015058758 3.2720737e-05 + 13300 100 0.0012876041 0.0012876041 0.0013838998 3.7725702e-05 + 13400 100 0.0012304951 0.0012304951 0.0013373457 3.6784546e-05 + 13500 100 0.0011954303 0.0011954303 0.0012877627 3.6584963e-05 + 13600 100 0.0011028947 0.0011028947 0.0011955404 2.3767582e-05 + 13700 100 0.0010611762 0.0010611762 0.0011504675 3.485879e-05 + 13800 100 0.0010080835 0.0010080835 0.0010997919 3.7905404e-05 + 13900 100 0.00096495712 0.00096495712 0.0010530767 3.5273885e-05 + 14000 100 0.00094945029 0.00094945029 0.0010409175 3.3718395e-05 + 14100 100 0.00092386757 0.00092386757 0.0010217415 3.3313256e-05 + 14200 100 0.00088928389 0.00088928389 0.000983023 3.290941e-05 + 14300 100 0.00082696485 0.00082696485 0.00092690771 3.1651431e-05 + 14400 100 0.00081086188 0.00081086188 0.00091681096 3.1845632e-05 + 14500 100 0.00077732305 0.00077732305 0.00087592983 4.8087361e-05 + 14600 100 0.00073386005 0.00073386005 0.00082546873 3.0892065e-05 + 14700 100 0.00068701098 0.00068701098 0.00075953521 0.00010208859 + 14800 100 0.00065860451 0.00065860451 0.00073738846 2.9272912e-05 + 14900 100 0.00064706564 0.00064706564 0.00072748391 2.9817955e-05 + 15000 100 0.00064227996 0.00064227996 0.00070964586 3.2547768e-05 +Loop time of 0.0840213 on 1 procs for 5000 steps with 100 atoms + +Performance: 25707757.817 tau/day, 59508.699 timesteps/s +98.2% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.01004 | 0.01004 | 0.01004 | 0.0 | 11.95 +Neigh | 0.0057366 | 0.0057366 | 0.0057366 | 0.0 | 6.83 +Comm | 0.00086808 | 0.00086808 | 0.00086808 | 0.0 | 1.03 +Output | 0.00049472 | 0.00049472 | 0.00049472 | 0.0 | 0.59 +Modify | 0.060893 | 0.060893 | 0.060893 | 0.0 | 72.47 +Other | | 0.005989 | | | 7.13 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 151 ave 151 max 151 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 151 +Ave neighs/atom = 1.51 +Neighbor list builds = 92 +Dangerous builds = 0 + +region container delete +variable theta equal (step-15000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.836 | 5.836 | 5.836 Mbytes +Step Atoms Temp c_1 c_2 Press + 15000 100 0.00064227996 0.00064227996 0.00070964586 3.2291286e-05 + 15100 100 0.81230775 0.81230775 0.53266834 0.010948517 + 15200 100 0.87957637 0.87957637 0.57559572 0.012401402 + 15300 100 1.0262431 1.0262431 0.66535656 0.015239294 + 15400 100 1.2863564 1.2863564 0.82026439 0.020115365 + 15500 100 1.4721549 1.4721549 0.92138954 0.022400442 + 15600 100 1.7140429 1.7140429 1.0103822 0.02558084 + 15700 100 1.8963287 1.8963287 1.0916756 0.032032318 + 15800 100 2.0741177 2.0741177 1.1706233 0.034251942 + 15900 100 2.1434733 2.1434733 1.2054242 0.030132271 + 16000 100 2.1409892 2.1409892 1.2019761 0.030914205 + 16100 100 2.2496058 2.2496058 1.2476438 0.030939743 + 16200 100 2.233356 2.233356 1.2499888 0.030097445 + 16300 100 2.2673491 2.2673491 1.272321 0.030968524 + 16400 100 2.3735648 2.3735648 1.3126117 0.034532377 + 16500 100 2.4510087 2.4510087 1.3588349 0.036685351 + 16600 100 2.497406 2.497406 1.3811443 0.032019982 + 16700 100 2.6800518 2.6800518 1.4661941 0.037455527 + 16800 100 2.8673997 2.8673997 1.5558303 0.03606532 + 16900 100 3.1229488 3.1229488 1.6918439 0.039753213 + 17000 100 3.117815 3.117815 1.6996841 0.046210837 + 17100 100 3.3336225 3.3336225 1.7834517 0.047865361 + 17200 100 3.1773164 3.1773164 1.7113961 0.047778334 + 17300 100 3.4336759 3.4336759 1.8343073 0.049673718 + 17400 100 3.3142326 3.3142326 1.7796613 0.055329946 + 17500 100 3.3205493 3.3205493 1.7853946 0.043558145 + 17600 100 3.2764553 3.2764553 1.7640702 0.051463316 + 17700 100 3.1909643 3.1909643 1.7407995 0.043248948 + 17800 100 3.1958324 3.1958324 1.735056 0.050123145 + 17900 100 3.2431806 3.2431806 1.7380638 0.050838878 + 18000 100 3.2967417 3.2967417 1.7705821 0.042176084 + 18100 100 3.4270672 3.4270672 1.8459819 0.043589925 + 18200 100 3.3638494 3.3638494 1.8159436 0.048949648 + 18300 100 3.3192279 3.3192279 1.8122198 0.043629595 + 18400 100 3.2627211 3.2627211 1.796316 0.045504529 + 18500 100 3.5669172 3.5669172 1.9257062 0.048460393 + 18600 100 3.5546411 3.5546411 1.9154318 0.046890968 + 18700 100 3.7288485 3.7288485 2.011106 0.046906531 + 18800 100 3.6800347 3.6800347 1.9936406 0.049985172 + 18900 100 3.7151898 3.7151898 2.007659 0.050394561 + 19000 100 3.9693368 3.9693368 2.1311549 0.053710204 + 19100 100 3.6907732 3.6907732 1.9939387 0.05480136 + 19200 100 3.8808777 3.8808777 2.0790125 0.055093552 + 19300 100 3.8422142 3.8422142 2.0756951 0.058090774 + 19400 100 3.7836875 3.7836875 2.0399805 0.06965907 + 19500 100 4.0480195 4.0480195 2.169214 0.053420651 + 19600 100 3.965917 3.965917 2.1245227 0.059077084 + 19700 100 3.8980869 3.8980869 2.0956306 0.050857062 + 19800 100 4.008079 4.008079 2.1501421 0.054938689 + 19900 100 3.7244506 3.7244506 2.0080877 0.055481507 + 20000 100 3.8146094 3.8146094 2.0541416 0.053187111 +Loop time of 0.210396 on 1 procs for 5000 steps with 100 atoms + +Performance: 10266363.999 tau/day, 23764.731 timesteps/s +98.3% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.013991 | 0.013991 | 0.013991 | 0.0 | 6.65 +Neigh | 0.056947 | 0.056947 | 0.056947 | 0.0 | 27.07 +Comm | 0.0013928 | 0.0013928 | 0.0013928 | 0.0 | 0.66 +Output | 0.00054646 | 0.00054646 | 0.00054646 | 0.0 | 0.26 +Modify | 0.13027 | 0.13027 | 0.13027 | 0.0 | 61.92 +Other | | 0.007249 | | | 3.45 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 144 ave 144 max 144 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 144 +Ave neighs/atom = 1.44 +Neighbor list builds = 910 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.836 | 5.836 | 5.836 Mbytes +Step Atoms Temp c_1 c_2 Press + 20000 100 3.8146094 3.8146094 2.0541416 0.052956687 + 20100 100 1.3848453 1.3848453 0.82244153 0.017544632 + 20200 100 0.89469578 0.89469578 0.55929611 0.0111604 + 20300 100 0.83962013 0.83962013 0.52665461 0.010396174 + 20400 100 0.77264252 0.77264252 0.48961142 0.0095493901 + 20500 100 0.78613208 0.78613208 0.48683715 0.012166835 + 20600 100 0.88411633 0.88411633 0.52854942 0.011725323 + 20700 100 0.89833225 0.89833225 0.52549693 0.012193413 + 20800 100 0.90216089 0.90216089 0.51167019 0.014289685 + 20900 100 0.98665057 0.98665057 0.5468893 0.013794318 + 21000 100 0.7576342 0.7576342 0.42758791 0.011720156 + 21100 100 0.3821563 0.3821563 0.23426423 0.005324458 + 21200 100 0.17486973 0.17486973 0.12876582 0.0029726352 + 21300 100 0.17940562 0.17940562 0.12400155 0.0026179917 + 21400 100 0.15526876 0.15526876 0.10526802 0.002341177 + 21500 100 0.079493361 0.079493361 0.062289324 0.0017379534 + 21600 100 0.057299519 0.057299519 0.047939171 0.0020095941 + 21700 100 0.056900097 0.056900097 0.045799124 0.0017782068 + 21800 100 0.039847861 0.039847861 0.035138066 0.0018265057 + 21900 100 0.03919167 0.03919167 0.031815619 0.0012160098 + 22000 100 0.025499317 0.025499317 0.022126202 0.0010056809 + 22100 100 0.018956113 0.018956113 0.017843095 0.0016109368 + 22200 100 0.017337018 0.017337018 0.016063068 0.00042537508 + 22300 100 0.014785686 0.014785686 0.013007571 0.00049466367 + 22400 100 0.011754087 0.011754087 0.010399793 0.00042349151 + 22500 100 0.010362474 0.010362474 0.009077435 0.00025198478 + 22600 100 0.0089484896 0.0089484896 0.0079474121 0.00035239475 + 22700 100 0.0089936432 0.0089936432 0.0077908763 0.00018548371 + 22800 100 0.0068663718 0.0068663718 0.0064061667 0.00025641972 + 22900 100 0.0050272392 0.0050272392 0.0046676214 0.00040466013 + 23000 100 0.0049250142 0.0049250142 0.0044849467 0.00035704909 + 23100 100 0.0050508148 0.0050508148 0.0043117775 0.00030051828 + 23200 100 0.0037293467 0.0037293467 0.0033592517 0.00038108923 + 23300 100 0.0032823722 0.0032823722 0.0030511575 0.00040421775 + 23400 100 0.0026913866 0.0026913866 0.0025493429 9.2813733e-05 + 23500 100 0.0025590632 0.0025590632 0.0024466447 8.4695125e-05 + 23600 100 0.0025270441 0.0025270441 0.0024236554 8.4237376e-05 + 23700 100 0.0026406527 0.0026406527 0.0024501963 0.00015009901 + 23800 100 0.0024633391 0.0024633391 0.0023470594 3.8990761e-05 + 23900 100 0.0029505606 0.0029505606 0.0025122613 4.9810757e-05 + 24000 100 0.0019535519 0.0019535519 0.0019112421 3.5804751e-05 + 24100 100 0.0017505151 0.0017505151 0.001726233 2.380737e-05 + 24200 100 0.0015864857 0.0015864857 0.0015479949 1.963276e-05 + 24300 100 0.0014535898 0.0014535898 0.0014221262 3.6607862e-05 + 24400 100 0.0013744934 0.0013744934 0.0013523293 1.4522467e-05 + 24500 100 0.0013286378 0.0013286378 0.0013097089 3.2389792e-05 + 24600 100 0.0012093624 0.0012093624 0.0011617482 4.848694e-05 + 24700 100 0.0011817062 0.0011817062 0.0011409092 3.8898899e-05 + 24800 100 0.0011142524 0.0011142524 0.0010877723 1.4560662e-05 + 24900 100 0.0010941199 0.0010941199 0.0010614415 7.0209336e-05 + 25000 100 0.0010773559 0.0010773559 0.0010389783 1.3332279e-05 +Loop time of 0.0912137 on 1 procs for 5000 steps with 100 atoms + +Performance: 23680652.416 tau/day, 54816.325 timesteps/s +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.010053 | 0.010053 | 0.010053 | 0.0 | 11.02 +Neigh | 0.017597 | 0.017597 | 0.017597 | 0.0 | 19.29 +Comm | 0.00092912 | 0.00092912 | 0.00092912 | 0.0 | 1.02 +Output | 0.00049806 | 0.00049806 | 0.00049806 | 0.0 | 0.55 +Modify | 0.056085 | 0.056085 | 0.056085 | 0.0 | 61.49 +Other | | 0.006052 | | | 6.63 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 143 ave 143 max 143 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 143 +Ave neighs/atom = 1.43 +Neighbor list builds = 289 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/granregion/log.27Nov18.granregion.box.g++.4 b/examples/granregion/log.27Nov18.granregion.box.g++.4 new file mode 100644 index 0000000000..170c8be867 --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.box.g++.4 @@ -0,0 +1,475 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# pouring spheres into container box + +units lj +atom_style sphere +boundary f f f +dimension 3 +comm_modify vel yes + +region box block -10 10 -10 10 -10 10 units box +create_box 2 box +Created orthogonal box = (-10 -10 -10) to (10 10 10) + 1 by 2 by 2 MPI processor grid + +pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 +pair_coeff * * gran/hooke + +region container block -6 6 -6 6 -6 6 units box +fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 2 all nve/sphere +fix 3 all gravity 1.0 vector 0 0 -1 + +region slab block -2 2 -2 2 -2 2 units box +fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore +Particle insertion: 48 every 566 steps, 100 by step 1133 + +timestep 0.005 + +compute 1 all temp +compute_modify 1 dynamic/dof yes + +compute 2 all temp/sphere +compute_modify 2 dynamic/dof yes + +thermo 100 +thermo_style custom step atoms temp c_1 c_2 press +thermo_modify lost ignore +compute_modify thermo_temp dynamic/dof yes + +#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 +#dump_modify 2 pad 5 + +run 5000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 31 31 31 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke, perpetual + attributes: half, newton on, size + pair build: half/size/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.4834 | 0.4834 | 0.4834 Mbytes +Step Atoms Temp c_1 c_2 Press + 0 0 0 0 0 0 + 100 21 0.54270729 0.54270729 0.26473526 0.0013567682 + 200 21 0.87606961 0.87606961 0.42735103 0.002190174 + 300 21 1.1428374 1.1428374 0.55748167 0.0028570936 + 400 21 1.3543103 1.3543103 0.66829516 0.0033857758 + 500 21 1.0677786 1.0677786 0.53582407 0.0045048164 + 600 56 0.6744286 0.6744286 0.3502938 0.0047464584 + 700 56 0.75569283 0.75569283 0.39779462 0.0051953882 + 800 56 0.61597505 0.61597505 0.32943642 0.0086022783 + 900 56 0.65260802 0.65260802 0.34474044 0.0059298996 + 1000 56 0.51624952 0.51624952 0.28326898 0.0067827337 + 1100 56 0.46050076 0.46050076 0.25656319 0.0061891094 + 1200 81 0.39112346 0.39112346 0.21690172 0.0086559316 + 1300 81 0.33302617 0.33302617 0.19109398 0.0033381104 + 1400 81 0.3933533 0.3933533 0.21221692 0.004135078 + 1500 81 0.35495297 0.35495297 0.19925984 0.0037374946 + 1600 81 0.34150606 0.34150606 0.19025811 0.0053492835 + 1700 100 0.2561647 0.2561647 0.14186278 0.0090767057 + 1800 100 0.21124278 0.21124278 0.12154878 0.002854576 + 1900 100 0.21793955 0.21793955 0.12173867 0.0029049175 + 2000 100 0.25530858 0.25530858 0.13892272 0.0035528022 + 2100 100 0.24671805 0.24671805 0.13687782 0.0076812357 + 2200 100 0.22465212 0.22465212 0.12513612 0.0042526344 + 2300 100 0.19362805 0.19362805 0.10914275 0.0061175383 + 2400 100 0.061626039 0.061626039 0.045905953 0.0010393593 + 2500 100 0.052690575 0.052690575 0.038879745 0.0018543933 + 2600 100 0.037256691 0.037256691 0.02833916 0.0027683815 + 2700 100 0.033416362 0.033416362 0.024551243 0.00046725913 + 2800 100 0.019617758 0.019617758 0.014619416 0.00064550316 + 2900 100 0.012313874 0.012313874 0.0098188153 0.00033470181 + 3000 100 0.010948455 0.010948455 0.0087981878 0.00034401243 + 3100 100 0.009359431 0.009359431 0.0073642412 0.00045497356 + 3200 100 0.008129885 0.008129885 0.0061460516 0.00029944201 + 3300 100 0.0050682533 0.0050682533 0.0042692811 0.00026543293 + 3400 100 0.0031539312 0.0031539312 0.0027256511 0.00012475748 + 3500 100 0.0023621311 0.0023621311 0.0021691817 0.0001186392 + 3600 100 0.0018305354 0.0018305354 0.0018004128 0.00015926282 + 3700 100 0.0016522492 0.0016522492 0.0017231072 0.0002193159 + 3800 100 0.0011715102 0.0011715102 0.0012739973 0.0001747857 + 3900 100 0.0010607606 0.0010607606 0.0010974725 0.00012476088 + 4000 100 0.00087570802 0.00087570802 0.00095828935 6.5544103e-05 + 4100 100 0.00078598203 0.00078598203 0.00088068743 9.4560761e-05 + 4200 100 0.00088317454 0.00088317454 0.00092784605 8.1108122e-05 + 4300 100 0.0015013254 0.0015013254 0.0012069505 8.8289686e-05 + 4400 100 0.00070054041 0.00070054041 0.00079451193 5.195712e-05 + 4500 100 0.00096259073 0.00096259073 0.00091232511 3.4895669e-05 + 4600 100 0.00056641848 0.00056641848 0.00069083146 3.9657253e-05 + 4700 100 0.0005455099 0.0005455099 0.00064816699 2.8131762e-05 + 4800 100 0.00048254366 0.00048254366 0.00057192255 4.7914432e-05 + 4900 100 0.00037108125 0.00037108125 0.00048035333 6.4711817e-05 + 5000 100 0.00031290399 0.00031290399 0.00042398478 4.6025975e-05 +Loop time of 0.075416 on 4 procs for 5000 steps with 100 atoms + +Performance: 28641126.336 tau/day, 66298.904 timesteps/s +93.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0022948 | 0.0041364 | 0.0061705 | 2.8 | 5.48 +Neigh | 0.0043123 | 0.0057145 | 0.0070784 | 1.8 | 7.58 +Comm | 0.014259 | 0.018658 | 0.024313 | 3.3 | 24.74 +Output | 0.0011525 | 0.001404 | 0.0015383 | 0.4 | 1.86 +Modify | 0.0030508 | 0.014543 | 0.026602 | 9.5 | 19.28 +Other | | 0.03096 | | | 41.05 + +Nlocal: 25 ave 51 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 5.5 ave 12 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 39.75 ave 84 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 + +Total # of neighbors = 159 +Ave neighs/atom = 1.59 +Neighbor list builds = 310 +Dangerous builds = 0 + +region container delete +variable theta equal (step-5000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.733 | 5.733 | 5.734 Mbytes +Step Atoms Temp c_1 c_2 Press + 5000 100 0.00031290399 0.00031290399 0.00042398478 4.4282259e-05 + 5100 100 0.62661084 0.62661084 0.33840611 0.012020153 + 5200 100 0.67371678 0.67371678 0.36218522 0.0093514044 + 5300 100 0.75892331 0.75892331 0.4000747 0.010693252 + 5400 100 0.86207426 0.86207426 0.44630388 0.013540097 + 5500 100 0.96205334 0.96205334 0.49432848 0.017375079 + 5600 100 1.0261194 1.0261194 0.52203912 0.016045333 + 5700 100 1.0584366 1.0584366 0.53794336 0.018621676 + 5800 100 1.0881674 1.0881674 0.55300469 0.01930602 + 5900 100 1.1214233 1.1214233 0.56613492 0.021141141 + 6000 100 1.1666836 1.1666836 0.58759377 0.017655361 + 6100 100 1.1785775 1.1785775 0.59365148 0.01829443 + 6200 100 1.2092305 1.2092305 0.60798809 0.018752443 + 6300 100 1.2331787 1.2331787 0.62003386 0.020291021 + 6400 100 1.2561616 1.2561616 0.63143643 0.019899235 + 6500 100 1.284432 1.284432 0.6460504 0.02083284 + 6600 100 1.2678801 1.2678801 0.63882384 0.019456553 + 6700 100 1.2662641 1.2662641 0.63676836 0.020235578 + 6800 100 1.2785484 1.2785484 0.64129093 0.020335162 + 6900 100 1.2916608 1.2916608 0.64764298 0.020154225 + 7000 100 1.2907774 1.2907774 0.64724849 0.020550885 + 7100 100 1.3074473 1.3074473 0.65460147 0.020847362 + 7200 100 1.3124592 1.3124592 0.65641332 0.020897348 + 7300 100 1.3206191 1.3206191 0.66011491 0.021444077 + 7400 100 1.3273988 1.3273988 0.66350669 0.02129418 + 7500 100 1.3343911 1.3343911 0.66707269 0.021337376 + 7600 100 1.3368998 1.3368998 0.66869327 0.021415901 + 7700 100 1.330658 1.330658 0.66535295 0.021500761 + 7800 100 1.330801 1.330801 0.66555123 0.022806058 + 7900 100 1.3392828 1.3392828 0.66926796 0.02194009 + 8000 100 1.3432728 1.3432728 0.67142337 0.022393719 + 8100 100 1.3411612 1.3411612 0.66989302 0.022366895 + 8200 100 1.3427451 1.3427451 0.67054285 0.021966329 + 8300 100 1.3418147 1.3418147 0.67023132 0.022513459 + 8400 100 1.346493 1.346493 0.67247837 0.022705366 + 8500 100 1.3513958 1.3513958 0.6749092 0.022834077 + 8600 100 1.3520297 1.3520297 0.67506261 0.023227676 + 8700 100 1.3517157 1.3517157 0.67485073 0.023043414 + 8800 100 1.3530071 1.3530071 0.67547212 0.022933766 + 8900 100 1.3550454 1.3550454 0.67657277 0.022744182 + 9000 100 1.3554069 1.3554069 0.67673505 0.022802134 + 9100 100 1.3556675 1.3556675 0.67698335 0.022868449 + 9200 100 1.3534709 1.3534709 0.67600677 0.022537792 + 9300 100 1.3525103 1.3525103 0.67569499 0.022687849 + 9400 100 1.3612673 1.3612673 0.67967213 0.022703588 + 9500 100 1.3649439 1.3649439 0.68147385 0.023498539 + 9600 100 1.3629376 1.3629376 0.68063814 0.023515579 + 9700 100 1.3648924 1.3648924 0.68137104 0.023641856 + 9800 100 1.3662063 1.3662063 0.68196538 0.023576884 + 9900 100 1.3689695 1.3689695 0.68326751 0.023572622 + 10000 100 1.3701139 1.3701139 0.68383343 0.023720885 +Loop time of 0.174251 on 4 procs for 5000 steps with 100 atoms + +Performance: 12395939.906 tau/day, 28694.305 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0024631 | 0.010709 | 0.020461 | 8.0 | 6.15 +Neigh | 0.0078361 | 0.012368 | 0.016955 | 4.0 | 7.10 +Comm | 0.0059071 | 0.013641 | 0.023547 | 6.6 | 7.83 +Output | 0.0011749 | 0.0021775 | 0.0030091 | 1.4 | 1.25 +Modify | 0.015055 | 0.055709 | 0.097013 | 17.2 | 31.97 +Other | | 0.07965 | | | 45.71 + +Nlocal: 25 ave 51 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 4.5 ave 10 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 49.25 ave 101 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 197 +Ave neighs/atom = 1.97 +Neighbor list builds = 627 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.733 | 5.733 | 5.734 Mbytes +Step Atoms Temp c_1 c_2 Press + 10000 100 1.3701139 1.3701139 0.68383343 0.023895921 + 10100 100 0.25960098 0.25960098 0.15183967 0.0049554084 + 10200 100 0.15017576 0.15017576 0.10081112 0.0045433238 + 10300 100 0.10129671 0.10129671 0.078049099 0.0014012658 + 10400 100 0.06742425 0.06742425 0.055603816 0.0010184792 + 10500 100 0.053446366 0.053446366 0.045338293 0.00089291689 + 10600 100 0.041898231 0.041898231 0.036081995 0.00060703885 + 10700 100 0.03580041 0.03580041 0.031118724 0.00067731964 + 10800 100 0.030933755 0.030933755 0.026372348 0.00039362325 + 10900 100 0.027278004 0.027278004 0.022868898 0.0003680788 + 11000 100 0.021566952 0.021566952 0.017994879 0.0013056062 + 11100 100 0.019143625 0.019143625 0.015833865 0.00050998112 + 11200 100 0.015659868 0.015659868 0.013119379 0.00012755696 + 11300 100 0.013554605 0.013554605 0.01147808 0.00027393437 + 11400 100 0.01204033 0.01204033 0.010273026 0.00033430792 + 11500 100 0.010958991 0.010958991 0.0093924566 0.00049023273 + 11600 100 0.01012553 0.01012553 0.0084556996 0.00021457333 + 11700 100 0.0083584131 0.0083584131 0.0071118766 7.7149089e-05 + 11800 100 0.007044883 0.007044883 0.0058675523 0.00036165381 + 11900 100 0.0059875106 0.0059875106 0.0050610372 7.4095443e-05 + 12000 100 0.0045180275 0.0045180275 0.0039006565 0.00014607704 + 12100 100 0.0036631356 0.0036631356 0.0031154279 7.031064e-05 + 12200 100 0.0034443424 0.0034443424 0.0029190637 0.00020974475 + 12300 100 0.0030853504 0.0030853504 0.0026315266 3.4873541e-05 + 12400 100 0.0025451749 0.0025451749 0.0022290833 0.00041551536 + 12500 100 0.0021624857 0.0021624857 0.0019127734 2.6760761e-05 + 12600 100 0.0020637862 0.0020637862 0.0018186641 4.9446655e-05 + 12700 100 0.0019889538 0.0019889538 0.0017604689 3.326943e-05 + 12800 100 0.0018706349 0.0018706349 0.0016669237 2.3327318e-05 + 12900 100 0.0017472824 0.0017472824 0.001579469 8.816765e-05 + 13000 100 0.0016034824 0.0016034824 0.0014549852 3.5407524e-05 + 13100 100 0.00151798 0.00151798 0.0013826659 1.8754149e-05 + 13200 100 0.0013049781 0.0013049781 0.0012137907 0.00015263775 + 13300 100 0.0012270536 0.0012270536 0.0011590841 4.77636e-06 + 13400 100 0.0011395128 0.0011395128 0.0010860297 2.5606328e-05 + 13500 100 0.0010858414 0.0010858414 0.0010486713 5.8563931e-05 + 13600 100 0.0010474389 0.0010474389 0.001015904 1.4319658e-05 + 13700 100 0.00099241549 0.00099241549 0.00097825038 1.2281142e-05 + 13800 100 0.00084449252 0.00084449252 0.00084141963 1.0451215e-05 + 13900 100 0.00084004792 0.00084004792 0.00083755495 3.7174162e-05 + 14000 100 0.00082183505 0.00082183505 0.00082027058 1.0170209e-05 + 14100 100 0.00082377076 0.00082377076 0.00080489795 1.181976e-05 + 14200 100 0.00076903208 0.00076903208 0.00076216608 4.4590341e-05 + 14300 100 0.00075173269 0.00075173269 0.00074828209 2.2134371e-05 + 14400 100 0.00074379148 0.00074379148 0.00074072001 1.5746014e-05 + 14500 100 0.00072454029 0.00072454029 0.0007174429 8.9830398e-06 + 14600 100 0.00072372648 0.00072372648 0.00071678769 9.1111512e-06 + 14700 100 0.00071541587 0.00071541587 0.00070893868 7.8446375e-05 + 14800 100 0.0006820307 0.0006820307 0.00066675502 8.4401299e-06 + 14900 100 0.00067050627 0.00067050627 0.00065751846 0.0001228548 + 15000 100 0.00064977132 0.00064977132 0.00062305247 7.8887775e-06 +Loop time of 0.0746691 on 4 procs for 5000 steps with 100 atoms + +Performance: 28927619.905 tau/day, 66962.083 timesteps/s +96.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0021737 | 0.0042608 | 0.0063519 | 3.2 | 5.71 +Neigh | 0.0012126 | 0.0019009 | 0.0026193 | 1.6 | 2.55 +Comm | 0.0023425 | 0.0092477 | 0.016876 | 7.2 | 12.38 +Output | 0.0010619 | 0.0017995 | 0.0030522 | 1.8 | 2.41 +Modify | 0.00097013 | 0.017151 | 0.03415 | 12.3 | 22.97 +Other | | 0.04031 | | | 53.98 + +Nlocal: 25 ave 55 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 3.75 ave 9 max 0 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 42.5 ave 88 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 170 +Ave neighs/atom = 1.7 +Neighbor list builds = 97 +Dangerous builds = 0 + +region container delete +variable theta equal (step-15000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.733 | 5.733 | 5.734 Mbytes +Step Atoms Temp c_1 c_2 Press + 15000 100 0.00064977132 0.00064977132 0.00062305247 7.9405607e-06 + 15100 100 1.0123899 1.0123899 0.66185504 0.014587215 + 15200 100 1.0332828 1.0332828 0.67443308 0.014002815 + 15300 100 1.0804076 1.0804076 0.72450056 0.016985272 + 15400 100 1.2868163 1.2868163 0.8708132 0.022190597 + 15500 100 1.5180471 1.5180471 0.99613124 0.026761866 + 15600 100 1.5422016 1.5422016 1.0021746 0.024490139 + 15700 100 1.7142241 1.7142241 1.0611146 0.0301368 + 15800 100 1.8747057 1.8747057 1.1207858 0.027612699 + 15900 100 1.9294819 1.9294819 1.1289025 0.027270228 + 16000 100 1.953275 1.953275 1.1264475 0.031568811 + 16100 100 2.0434228 2.0434228 1.1665365 0.026358952 + 16200 100 2.2129393 2.2129393 1.2448327 0.029613382 + 16300 100 2.2558224 2.2558224 1.2373264 0.028306021 + 16400 100 2.367398 2.367398 1.293448 0.029659303 + 16500 100 2.4221549 2.4221549 1.3198966 0.032541712 + 16600 100 2.510283 2.510283 1.3618001 0.034740544 + 16700 100 2.6776293 2.6776293 1.4508262 0.034556341 + 16800 100 2.8095841 2.8095841 1.5190571 0.035183782 + 16900 100 2.8485646 2.8485646 1.5344387 0.037153336 + 17000 100 3.0298285 3.0298285 1.6321623 0.040745906 + 17100 100 3.0218054 3.0218054 1.6187189 0.042082135 + 17200 100 3.1981705 3.1981705 1.7090597 0.041770208 + 17300 100 3.3178559 3.3178559 1.7723201 0.044604756 + 17400 100 3.3940903 3.3940903 1.8229846 0.049231759 + 17500 100 3.3274817 3.3274817 1.7870996 0.051649102 + 17600 100 3.3204358 3.3204358 1.791527 0.043875639 + 17700 100 3.2185649 3.2185649 1.7480866 0.049941218 + 17800 100 3.2507826 3.2507826 1.7727758 0.048622479 + 17900 100 3.2432767 3.2432767 1.7796296 0.044343902 + 18000 100 3.0841272 3.0841272 1.6978832 0.045344433 + 18100 100 3.0953909 3.0953909 1.699898 0.040070963 + 18200 100 3.1405704 3.1405704 1.7316463 0.042528194 + 18300 100 3.1904871 3.1904871 1.7555188 0.041141165 + 18400 100 3.3256779 3.3256779 1.8243767 0.043908318 + 18500 100 3.5161823 3.5161823 1.9150861 0.045165166 + 18600 100 3.5668273 3.5668273 1.9217975 0.048127705 + 18700 100 3.6648305 3.6648305 1.9685241 0.051205352 + 18800 100 3.9000502 3.9000502 2.0886668 0.05262835 + 18900 100 4.0217758 4.0217758 2.1465498 0.054502839 + 19000 100 3.8431174 3.8431174 2.0581611 0.054852333 + 19100 100 4.1721454 4.1721454 2.2221193 0.053831555 + 19200 100 3.9061181 3.9061181 2.096323 0.058077678 + 19300 100 4.0191085 4.0191085 2.1408069 0.05475437 + 19400 100 3.8840871 3.8840871 2.0887677 0.061905092 + 19500 100 3.8388062 3.8388062 2.0567095 0.051076414 + 19600 100 3.6331742 3.6331742 1.9574769 0.04748008 + 19700 100 3.6996954 3.6996954 1.9887285 0.053305043 + 19800 100 3.8649872 3.8649872 2.0827424 0.060484008 + 19900 100 3.8305733 3.8305733 2.0700281 0.052926584 + 20000 100 3.7948463 3.7948463 2.0657301 0.048516953 +Loop time of 0.156359 on 4 procs for 5000 steps with 100 atoms + +Performance: 13814330.011 tau/day, 31977.616 timesteps/s +94.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0040646 | 0.0058124 | 0.0074518 | 1.6 | 3.72 +Neigh | 0.014813 | 0.018389 | 0.020829 | 1.6 | 11.76 +Comm | 0.031892 | 0.034103 | 0.036658 | 1.0 | 21.81 +Output | 0.0013497 | 0.0019822 | 0.003484 | 2.0 | 1.27 +Modify | 0.031006 | 0.046878 | 0.056364 | 4.5 | 29.98 +Other | | 0.0492 | | | 31.46 + +Nlocal: 25 ave 37 max 10 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 3.75 ave 6 max 2 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Neighs: 36.25 ave 57 max 9 min +Histogram: 1 0 0 0 0 0 2 0 0 1 + +Total # of neighbors = 145 +Ave neighs/atom = 1.45 +Neighbor list builds = 921 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Per MPI rank memory allocation (min/avg/max) = 5.733 | 5.734 | 5.734 Mbytes +Step Atoms Temp c_1 c_2 Press + 20000 100 3.7948463 3.7948463 2.0657301 0.048381317 + 20100 100 1.1359931 1.1359931 0.70170151 0.015300556 + 20200 100 0.87354617 0.87354617 0.55969299 0.012181983 + 20300 100 0.84424484 0.84424484 0.52849351 0.017724782 + 20400 100 0.82422562 0.82422562 0.50175766 0.0098154181 + 20500 100 0.83731289 0.83731289 0.49814627 0.010465327 + 20600 100 0.93125924 0.93125924 0.53803834 0.011624902 + 20700 100 1.0810919 1.0810919 0.60974741 0.01425935 + 20800 100 1.0646343 1.0646343 0.60037545 0.013418132 + 20900 100 1.0608055 1.0608055 0.58353908 0.015119612 + 21000 100 0.68173094 0.68173094 0.3941588 0.0099947535 + 21100 100 0.35407592 0.35407592 0.21306735 0.0043859494 + 21200 100 0.19247432 0.19247432 0.12989264 0.0031808422 + 21300 100 0.13493768 0.13493768 0.093987634 0.0025990872 + 21400 100 0.085735857 0.085735857 0.062091707 0.001434207 + 21500 100 0.074307566 0.074307566 0.05224051 0.0022163094 + 21600 100 0.069932382 0.069932382 0.045388838 0.0020296572 + 21700 100 0.041749712 0.041749712 0.031422931 0.001211155 + 21800 100 0.03378055 0.03378055 0.026248846 0.0020596463 + 21900 100 0.030608528 0.030608528 0.022868294 0.0016282878 + 22000 100 0.025632448 0.025632448 0.019606402 0.0011659657 + 22100 100 0.013785062 0.013785062 0.011561769 0.00069006322 + 22200 100 0.013139066 0.013139066 0.010559726 0.00038424576 + 22300 100 0.01455318 0.01455318 0.011094558 0.00054735929 + 22400 100 0.0096885414 0.0096885414 0.008012617 0.00055875777 + 22500 100 0.0081193116 0.0081193116 0.006802973 0.00052914932 + 22600 100 0.0057159621 0.0057159621 0.0048680253 0.00054864875 + 22700 100 0.0052344376 0.0052344376 0.0045511708 0.00026333033 + 22800 100 0.0054554177 0.0054554177 0.0045005479 0.0002085972 + 22900 100 0.0039455776 0.0039455776 0.0035287888 0.00022514017 + 23000 100 0.0042620461 0.0042620461 0.0035747729 0.00020030999 + 23100 100 0.0035303095 0.0035303095 0.0031995108 0.00016007298 + 23200 100 0.0029747457 0.0029747457 0.0027095904 0.00029775807 + 23300 100 0.0032404433 0.0032404433 0.002769389 0.00019627995 + 23400 100 0.0024965262 0.0024965262 0.0022343473 0.00018870133 + 23500 100 0.00251617 0.00251617 0.0022533604 0.0002661237 + 23600 100 0.0025923653 0.0025923653 0.0022887204 0.00018475201 + 23700 100 0.0023016545 0.0023016545 0.0019829032 0.00014888334 + 23800 100 0.0028358441 0.0028358441 0.0021790504 0.00064613131 + 23900 100 0.0016682403 0.0016682403 0.0014930521 8.8407075e-05 + 24000 100 0.0016341577 0.0016341577 0.0014597606 0.00011262081 + 24100 100 0.0015433636 0.0015433636 0.0013981581 8.364568e-05 + 24200 100 0.0015033978 0.0015033978 0.0013582013 8.4539006e-05 + 24300 100 0.0014513098 0.0014513098 0.0012943981 0.00010546194 + 24400 100 0.0013293352 0.0013293352 0.001206366 8.4967509e-05 + 24500 100 0.0013732518 0.0013732518 0.001202532 0.00014787559 + 24600 100 0.00091890041 0.00091890041 0.00084499923 0.00010080638 + 24700 100 0.00083467915 0.00083467915 0.00077071316 5.3934025e-05 + 24800 100 0.00080701934 0.00080701934 0.0007477161 5.3982095e-05 + 24900 100 0.00080620771 0.00080620771 0.0007471026 5.3581294e-05 + 25000 100 0.00080568604 0.00080568604 0.00074625735 5.3574637e-05 +Loop time of 0.0792506 on 4 procs for 5000 steps with 100 atoms + +Performance: 27255302.560 tau/day, 63090.978 timesteps/s +95.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0023611 | 0.0047854 | 0.0077851 | 3.4 | 6.04 +Neigh | 0.0042653 | 0.005571 | 0.0067258 | 1.5 | 7.03 +Comm | 0.0077977 | 0.013373 | 0.019515 | 4.4 | 16.87 +Output | 0.0010924 | 0.0017727 | 0.0030222 | 1.8 | 2.24 +Modify | 0.0023608 | 0.015964 | 0.030545 | 10.5 | 20.14 +Other | | 0.03778 | | | 47.68 + +Nlocal: 25 ave 50 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 5 ave 10 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 35.75 ave 78 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 + +Total # of neighbors = 143 +Ave neighs/atom = 1.43 +Neighbor list builds = 287 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/granregion/log.27Nov18.granregion.funnel.g++.1 b/examples/granregion/log.27Nov18.granregion.funnel.g++.1 new file mode 100644 index 0000000000..0268ed000a --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.funnel.g++.1 @@ -0,0 +1,601 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# pour particles into cone-shaped funnel, settle them, let them run out bottom + +variable name string funnel_pour + +thermo_modify flush yes +units si +variable PI equal 3.141592653589 +variable seed equal 14314 + +############################################### +# Geometry-related parameters +############################################### + +variable xlo equal 10 +variable xhi equal 40 +variable ylo equal 10 +variable yhi equal 40 +variable zlo equal -20 +variable zhi equal 50 + +variable xc equal 25 +variable yc equal 25 + +variable zconehi equal 50 +variable zconelo equal 10 +variable zcyllo equal 0 +variable radconelo equal 2 +variable radconehi equal 20 + +################################################ +# Particle sizes +################################################ + +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable skin equal ${rhi} +variable skin equal 0.5 + +############################################### +# Granular contact parameters +############################################### + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable density equal 1.0 +variable EYoung equal 10^5 +variable Poisson equal 2.0/7.0 +variable GShear equal ${EYoung}/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+0.285714285714286)) + +variable gravity equal 1.0 + +variable reff equal 0.5*(${rhi}+${rlo}) +variable reff equal 0.5*(0.5+${rlo}) +variable reff equal 0.5*(0.5+0.25) +variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 +variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 +variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 + +## Typical way to set kn, kt, etc.: +variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) +variable kt equal 4.0*${GShear}/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) + +variable a equal (-2.0*log(${coeffRes})/${PI})^2 +variable a equal (-2.0*log(0.1)/${PI})^2 +variable a equal (-2.0*log(0.1)/3.141592653589)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 903.503751814138*0.5 + +variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) + +variable dt equal ${tcol}*0.05 +variable dt equal 0.00210943016014969*0.05 +timestep ${dt} +timestep 0.000105471508007485 + +############################################### +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton off +atom_style sphere + +boundary p p f + +region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 40 ${zlo} ${zhi} +region boxreg block 10 40 10 40 -20 ${zhi} +region boxreg block 10 40 10 40 -20 50 +create_box 1 boxreg +Created orthogonal box = (10 10 -20) to (40 40 50) + 1 by 1 by 1 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 +pair_coeff * * + +neighbor ${skin} bin +neighbor 0.5 bin +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 30, bins = 1 1 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +# insertion region for fix/pour + +region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box +region insreg cylinder z 25 ${yc} 10 30 50 side in units box +region insreg cylinder z 25 25 10 30 50 side in units box + +# define cone and cylinder regions - see lammps doc on region command +# note new open options + +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 2 + +region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open +region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 + +region hopreg union 2 conereg cylreg + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + + +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 +Particle insertion: 3000 every 59965 steps, 2000 by step 1 + +#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) +thermo_modify flush yes lost warn + +# Initial run to fill up the cone + +run 20000 +Per MPI rank memory allocation (min/avg/max) = 6.649 | 6.649 | 6.649 Mbytes +Step CPU Atoms KinEng + 0 0 0 -0 + 1000 0.63593698 2000 -0 + 2000 1.0282419 2000 -0 + 3000 1.4184453 2000 -0 + 4000 1.8055785 2000 -0 + 5000 2.1941335 2000 -0 + 6000 2.5804653 2000 -0 + 7000 2.9660621 2000 -0 + 8000 3.3506265 2000 -0 + 9000 3.7344413 2000 -0 + 10000 4.1212304 2000 -0 + 11000 4.5044594 2000 -0 + 12000 4.8875456 2000 -0 + 13000 5.2698007 2000 -0 + 14000 5.6527214 2000 -0 + 15000 6.0349295 2000 -0 + 16000 6.4172938 2000 -0 + 17000 6.8001184 2000 -0 + 18000 7.1826644 2000 -0 + 19000 7.5654378 2000 -0 + 20000 7.9511659 2000 -0 +Loop time of 7.95118 on 1 procs for 20000 steps with 2000 atoms + +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.6189 | 0.6189 | 0.6189 | 0.0 | 7.78 +Neigh | 0.09361 | 0.09361 | 0.09361 | 0.0 | 1.18 +Comm | 0.016098 | 0.016098 | 0.016098 | 0.0 | 0.20 +Output | 0.00048828 | 0.00048828 | 0.00048828 | 0.0 | 0.01 +Modify | 6.9973 | 6.9973 | 6.9973 | 0.0 | 88.00 +Other | | 0.2248 | | | 2.83 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1537 ave 1537 max 1537 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1537 +Ave neighs/atom = 0.7685 +Neighbor list builds = 69 +Dangerous builds = 0 +unfix ins +run 150000 +Per MPI rank memory allocation (min/avg/max) = 12.77 | 12.77 | 12.77 Mbytes +Step CPU Atoms KinEng + 20000 0 2000 6443.7665 + 21000 0.3826313 2000 6572.3531 + 22000 0.76688981 2000 6723.8376 + 23000 1.1534231 2000 6853.1812 + 24000 1.5391715 2000 6976.0209 + 25000 1.9263508 2000 7096.9955 + 26000 2.3168406 2000 7215.5795 + 27000 2.7065961 2000 7349.2382 + 28000 3.096664 2000 7471.8719 + 29000 3.4905531 2000 7574.8228 + 30000 3.8877606 2000 7659.3836 + 31000 4.2839894 2000 7703.6856 + 32000 4.6859732 2000 7644.279 + 33000 5.0932801 2000 7526.6944 + 34000 5.5045564 2000 7370.0821 + 35000 5.9206297 2000 7193.0457 + 36000 6.343729 2000 6990.9899 + 37000 6.7719142 2000 6849.2841 + 38000 7.2016783 2000 6701.7433 + 39000 7.6354482 2000 6538.9557 + 40000 8.078445 2000 6381.9346 + 41000 8.5191586 2000 6217.5253 + 42000 8.9630713 2000 6093.5344 + 43000 9.4097741 2000 5943.0479 + 44000 9.8652256 2000 5841.0782 + 45000 10.331057 2000 5652.8319 + 46000 10.803253 2000 5476.1466 + 47000 11.278766 2000 5267.7855 + 48000 11.759121 2000 5131.4036 + 49000 12.248896 2000 4972.7696 + 50000 12.747719 2000 4867.0868 + 51000 13.246704 2000 4681.897 + 52000 13.757842 2000 4506.8185 + 53000 14.276078 2000 4346.8045 + 54000 14.795933 2000 4193.8194 + 55000 15.311241 2000 4058.2049 + 56000 15.828737 2000 3879.0325 + 57000 16.359453 2000 3696.3154 + 58000 16.905406 2000 3504.0399 + 59000 17.460454 2000 3284.6522 + 60000 18.027276 2000 3061.0727 + 61000 18.586931 2000 2874.2926 + 62000 19.158563 2000 2653.0722 + 63000 19.738442 2000 2437.4941 + 64000 20.331411 2000 2124.1876 + 65000 20.936204 2000 1864.5661 + 66000 21.547443 2000 1610.2335 + 67000 22.166888 2000 1390.0428 + 68000 22.789106 2000 1163.7679 + 69000 23.416016 2000 933.0928 + 70000 24.038879 2000 745.66667 + 71000 24.663115 2000 605.58458 + 72000 25.294193 2000 444.31183 + 73000 25.932019 2000 357.19162 + 74000 26.568184 2000 291.16762 + 75000 27.203393 2000 230.58362 + 76000 27.836079 2000 197.59502 + 77000 28.467344 2000 166.55702 + 78000 29.099997 2000 139.89052 + 79000 29.741694 2000 117.1145 + 80000 30.388097 2000 100.12353 + 81000 31.036193 2000 85.233155 + 82000 31.688463 2000 71.145302 + 83000 32.343411 2000 61.545348 + 84000 32.999346 2000 54.099358 + 85000 33.652976 2000 46.922028 + 86000 34.306931 2000 41.606645 + 87000 34.967787 2000 37.462793 + 88000 35.633721 2000 33.698298 + 89000 36.310035 2000 29.340455 + 90000 36.995441 2000 26.072122 + 91000 37.67904 2000 23.20848 + 92000 38.367699 2000 21.015862 + 93000 39.058641 2000 20.134175 + 94000 39.749342 2000 19.196075 + 95000 40.442651 2000 18.285127 + 96000 41.140177 2000 17.476411 + 97000 41.840761 2000 16.55882 + 98000 42.543845 2000 15.444541 + 99000 43.256415 2000 14.41642 + 100000 43.97382 2000 13.818738 + 101000 44.684596 2000 12.878373 + 102000 45.401082 2000 12.11804 + 103000 46.120936 2000 11.016885 + 104000 46.83935 2000 10.531044 + 105000 47.559419 2000 10.46735 + 106000 48.286016 2000 10.246007 + 107000 49.012266 2000 9.6423041 + 108000 49.74013 2000 9.3948808 + 109000 50.471961 2000 9.5178141 + 110000 51.206152 2000 9.4143884 + 111000 51.939123 2000 9.5058226 + 112000 52.673443 2000 9.6911516 + 113000 53.410485 2000 9.7756849 + 114000 54.152537 2000 9.3876232 + 115000 54.891784 2000 8.6725333 + 116000 55.631474 2000 8.6691065 + 117000 56.371762 2000 8.0156055 + 118000 57.110131 2000 7.9150786 + 119000 57.8533 2000 7.5310892 + 120000 58.599064 2000 7.2940498 + 121000 59.340753 2000 6.8347898 + 122000 60.084676 2000 6.696484 + 123000 60.826952 2000 6.7799146 + 124000 61.569413 2000 6.7901567 + 125000 62.316334 2000 6.7532108 + 126000 63.061374 2000 6.762162 + 127000 63.806385 2000 6.6317366 + 128000 64.555969 2000 6.8246399 + 129000 65.308131 2000 6.9130358 + 130000 66.060967 2000 7.1750566 + 131000 66.809725 2000 6.9507379 + 132000 67.559796 2000 6.7987445 + 133000 68.314249 2000 6.8535775 + 134000 69.065513 2000 7.0255144 + 135000 69.817604 2000 6.7381064 + 136000 70.572079 2000 6.5567748 + 137000 71.324444 2000 6.2655395 + 138000 72.079147 2000 6.1923013 + 139000 72.831323 2000 6.0958081 + 140000 73.59117 2000 5.9185709 + 141000 74.343753 2000 5.9151241 + 142000 75.096509 2000 5.4743035 + 143000 75.852151 2000 5.438642 + 144000 76.605005 2000 4.6646664 + 145000 77.357571 2000 4.6899837 + 146000 78.113125 2000 4.5357917 + 147000 78.867751 2000 4.5993842 + 148000 79.625344 2000 4.7076884 + 149000 80.37992 2000 4.8306642 + 150000 81.143175 2000 4.8282147 + 151000 81.899326 2000 4.546308 + 152000 82.658645 2000 4.6700755 + 153000 83.41837 2000 4.7557633 + 154000 84.17509 2000 4.9004538 + 155000 84.934161 2000 5.0552949 + 156000 85.695466 2000 4.0672495 + 157000 86.453115 2000 3.5819543 + 158000 87.212663 2000 3.3533477 + 159000 87.967768 2000 3.3281001 + 160000 88.729631 2000 3.0831743 + 161000 89.498983 2000 3.0519269 + 162000 90.259424 2000 3.0951675 + 163000 91.019656 2000 2.9868352 + 164000 91.776359 2000 2.9195788 + 165000 92.536374 2000 2.5637813 + 166000 93.296332 2000 2.5553272 + 167000 94.05653 2000 2.0752912 + 168000 94.814559 2000 1.9689845 + 169000 95.576005 2000 1.9117916 + 170000 96.337863 2000 1.8568914 +Loop time of 96.3379 on 1 procs for 150000 steps with 2000 atoms + +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 37.121 | 37.121 | 37.121 | 0.0 | 38.53 +Neigh | 0.8454 | 0.8454 | 0.8454 | 0.0 | 0.88 +Comm | 0.11506 | 0.11506 | 0.11506 | 0.0 | 0.12 +Output | 0.004431 | 0.004431 | 0.004431 | 0.0 | 0.00 +Modify | 56.517 | 56.517 | 56.517 | 0.0 | 58.67 +Other | | 1.735 | | | 1.80 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 15524 ave 15524 max 15524 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 15524 +Ave neighs/atom = 7.762 +Neighbor list builds = 388 +Dangerous builds = 0 + +# remove "plug" - need to redefine cylinder region & union + +region cylreg delete +region hopreg delete +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 + +region hopreg union 2 cylreg conereg + +unfix hopper3 +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +run 100000 +Per MPI rank memory allocation (min/avg/max) = 18.64 | 18.64 | 18.64 Mbytes +Step CPU Atoms KinEng + 170000 0 2000 1.8568914 + 171000 0.75704765 2000 2.4011583 + 172000 1.5101345 2000 3.176628 + 173000 2.2556529 2000 4.5364486 + 174000 2.9946566 2000 6.5494125 + 175000 3.7253478 2000 9.1934319 + 176000 4.4570525 2000 12.25765 + 177000 5.1876664 2000 15.799657 + 178000 5.9178619 2000 19.982558 + 179000 6.6439464 2000 24.927165 + 180000 7.3749168 2000 30.428362 + 181000 8.1011977 2000 36.74232 + 182000 8.8207343 2000 43.820448 + 183000 9.5397925 2000 50.903222 + 184000 10.253098 2000 59.425781 + 185000 10.965505 2000 69.143119 + 186000 11.673319 2000 79.210705 + 187000 12.373966 2000 90.411346 + 188000 13.075475 2000 102.35389 + 189000 13.770632 2000 114.93888 + 190000 14.469445 2000 128.63341 + 191000 15.158381 2000 143.44526 + 192000 15.846267 2000 159.04574 + 193000 16.527754 2000 174.3114 + 194000 17.204808 2000 190.42123 + 195000 17.881059 2000 207.70459 + 196000 18.556555 2000 224.90931 + 197000 19.229818 2000 242.64914 + 198000 19.905086 2000 261.48312 + 199000 20.578518 2000 281.28308 + 200000 21.25632 2000 302.95108 + 201000 21.921347 2000 325.95534 + 202000 22.583873 2000 350.6874 + 203000 23.244724 2000 376.31773 + 204000 23.904842 2000 404.21947 + 205000 24.562788 2000 432.96116 + 206000 25.217762 2000 462.4113 + 207000 25.875814 2000 491.91207 + 208000 26.531285 2000 522.15395 + 209000 27.184766 2000 553.1024 + 210000 27.842961 2000 585.7133 + 211000 28.489339 2000 619.96357 + 212000 29.139612 2000 653.96189 + 213000 29.783866 2000 689.8027 + 214000 30.426881 2000 727.28401 + 215000 31.06706 2000 766.40354 + 216000 31.706399 2000 805.65433 + 217000 32.343033 2000 845.40981 + 218000 32.989384 2000 884.24637 + 219000 33.633664 2000 923.5998 + 220000 34.285172 2000 965.01779 + 221000 34.931959 2000 1009.1763 + 222000 35.571624 2000 1054.7789 + 223000 36.207868 2000 1101.9922 + 224000 36.836062 2000 1151.1205 + 225000 37.464514 2000 1201.3979 + 226000 38.09746 2000 1252.4054 + 227000 38.732507 1999 1296.6784 + 228000 39.371367 1997 1342.3466 + 229000 40.012553 1992 1368.8559 + 230000 40.652111 1977 1360.2259 + 231000 41.275478 1965 1340.3793 + 232000 41.892734 1953 1318.8318 + 233000 42.50588 1938 1295.5667 + 234000 43.121427 1924 1270.0641 + 235000 43.740727 1914 1258.296 + 236000 44.359241 1902 1224.3945 + 237000 44.979463 1899 1248.3905 + 238000 45.597358 1885 1206.9229 + 239000 46.210114 1875 1195.5429 + 240000 46.818148 1861 1142.6591 + 241000 47.411079 1851 1131.5523 + 242000 48.002522 1841 1116.8741 + 243000 48.594254 1830 1099.9978 + 244000 49.191798 1822 1078.6068 + 245000 49.791332 1814 1072.1498 + 246000 50.389728 1803 1020.7842 + 247000 50.984212 1794 1000.1936 + 248000 51.571047 1781 942.02462 + 249000 52.149428 1772 916.83697 + 250000 52.726202 1758 825.10751 + 251000 53.29913 1748 789.06351 + 252000 53.871912 1739 753.92258 + 253000 54.441009 1729 697.83686 + 254000 55.010203 1718 648.98541 + 255000 55.573602 1710 620.38129 + 256000 56.134709 1705 622.43466 + 257000 56.701827 1700 595.79102 + 258000 57.264463 1698 608.49223 + 259000 57.827817 1695 614.0119 + 260000 58.398994 1690 601.50438 + 261000 58.964611 1687 608.5892 + 262000 59.526765 1683 597.07884 + 263000 60.082729 1682 618.65041 + 264000 60.640105 1678 615.47784 + 265000 61.195717 1675 605.27658 + 266000 61.751087 1671 583.69853 + 267000 62.305546 1669 600.11043 + 268000 62.86105 1666 598.79807 + 269000 63.417551 1663 588.40338 + 270000 63.974486 1660 579.59387 +Loop time of 63.9745 on 1 procs for 100000 steps with 1660 atoms + +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 26.514 | 26.514 | 26.514 | 0.0 | 41.44 +Neigh | 0.60324 | 0.60324 | 0.60324 | 0.0 | 0.94 +Comm | 0.075881 | 0.075881 | 0.075881 | 0.0 | 0.12 +Output | 0.0029137 | 0.0029137 | 0.0029137 | 0.0 | 0.00 +Modify | 35.686 | 35.686 | 35.686 | 0.0 | 55.78 +Other | | 1.092 | | | 1.71 + +Nlocal: 1660 ave 1660 max 1660 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 11681 ave 11681 max 11681 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 11681 +Ave neighs/atom = 7.03675 +Neighbor list builds = 249 +Dangerous builds = 0 +Total wall time: 0:02:48 diff --git a/examples/granregion/log.27Nov18.granregion.funnel.g++.4 b/examples/granregion/log.27Nov18.granregion.funnel.g++.4 new file mode 100644 index 0000000000..67c307d212 --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.funnel.g++.4 @@ -0,0 +1,601 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# pour particles into cone-shaped funnel, settle them, let them run out bottom + +variable name string funnel_pour + +thermo_modify flush yes +units si +variable PI equal 3.141592653589 +variable seed equal 14314 + +############################################### +# Geometry-related parameters +############################################### + +variable xlo equal 10 +variable xhi equal 40 +variable ylo equal 10 +variable yhi equal 40 +variable zlo equal -20 +variable zhi equal 50 + +variable xc equal 25 +variable yc equal 25 + +variable zconehi equal 50 +variable zconelo equal 10 +variable zcyllo equal 0 +variable radconelo equal 2 +variable radconehi equal 20 + +################################################ +# Particle sizes +################################################ + +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable skin equal ${rhi} +variable skin equal 0.5 + +############################################### +# Granular contact parameters +############################################### + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable density equal 1.0 +variable EYoung equal 10^5 +variable Poisson equal 2.0/7.0 +variable GShear equal ${EYoung}/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+0.285714285714286)) + +variable gravity equal 1.0 + +variable reff equal 0.5*(${rhi}+${rlo}) +variable reff equal 0.5*(0.5+${rlo}) +variable reff equal 0.5*(0.5+0.25) +variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 +variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 +variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 + +## Typical way to set kn, kt, etc.: +variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) +variable kt equal 4.0*${GShear}/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) + +variable a equal (-2.0*log(${coeffRes})/${PI})^2 +variable a equal (-2.0*log(0.1)/${PI})^2 +variable a equal (-2.0*log(0.1)/3.141592653589)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 903.503751814138*0.5 + +variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) + +variable dt equal ${tcol}*0.05 +variable dt equal 0.00210943016014969*0.05 +timestep ${dt} +timestep 0.000105471508007485 + +############################################### +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton off +atom_style sphere + +boundary p p f + +region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 40 ${zlo} ${zhi} +region boxreg block 10 40 10 40 -20 ${zhi} +region boxreg block 10 40 10 40 -20 50 +create_box 1 boxreg +Created orthogonal box = (10 10 -20) to (40 40 50) + 1 by 1 by 4 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 +pair_coeff * * + +neighbor ${skin} bin +neighbor 0.5 bin +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 30, bins = 1 1 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +# insertion region for fix/pour + +region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box +region insreg cylinder z 25 ${yc} 10 30 50 side in units box +region insreg cylinder z 25 25 10 30 50 side in units box + +# define cone and cylinder regions - see lammps doc on region command +# note new open options + +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 2 + +region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open +region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 + +region hopreg union 2 conereg cylreg + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + + +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 +Particle insertion: 3000 every 59965 steps, 2000 by step 1 + +#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) +thermo_modify flush yes lost warn + +# Initial run to fill up the cone + +run 20000 +Per MPI rank memory allocation (min/avg/max) = 6.05 | 6.05 | 6.05 Mbytes +Step CPU Atoms KinEng + 0 0 0 -0 + 1000 0.63366675 2000 -0 + 2000 1.0221362 2000 -0 + 3000 1.3905275 2000 -0 + 4000 1.7514329 2000 -0 + 5000 2.1040537 2000 -0 + 6000 2.4468088 2000 -0 + 7000 2.7853072 2000 -0 + 8000 3.1109948 2000 -0 + 9000 3.4281557 2000 -0 + 10000 3.7435207 2000 -0 + 11000 3.8612552 2000 -0 + 12000 3.9786677 2000 -0 + 13000 4.0988154 2000 -0 + 14000 4.2249811 2000 -0 + 15000 4.3562138 2000 -0 + 16000 4.4940333 2000 -0 + 17000 4.6394637 2000 -0 + 18000 4.7909062 2000 -0 + 19000 4.9482198 2000 -0 + 20000 5.1116607 2000 -0 +Loop time of 5.11176 on 4 procs for 20000 steps with 2000 atoms + +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.050997 | 0.14884 | 0.36048 | 32.0 | 2.91 +Neigh | 0.01374 | 0.025199 | 0.043743 | 7.0 | 0.49 +Comm | 0.063387 | 0.1781 | 0.29748 | 22.6 | 3.48 +Output | 0.0016627 | 0.0060938 | 0.015082 | 6.8 | 0.12 +Modify | 1.1198 | 1.987 | 3.7195 | 72.6 | 38.87 +Other | | 2.767 | | | 54.12 + +Nlocal: 500 ave 505 max 493 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 159.25 ave 254 max 71 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Neighs: 397.5 ave 616 max 214 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 1590 +Ave neighs/atom = 0.795 +Neighbor list builds = 69 +Dangerous builds = 0 +unfix ins +run 150000 +Per MPI rank memory allocation (min/avg/max) = 12.37 | 12.51 | 12.7 Mbytes +Step CPU Atoms KinEng + 20000 0 2000 6443.7665 + 21000 0.11261106 2000 6572.3531 + 22000 0.23091817 2000 6723.8376 + 23000 0.35577631 2000 6853.1812 + 24000 0.48790455 2000 6976.0209 + 25000 0.63509274 2000 7096.9955 + 26000 0.78251743 2000 7215.5795 + 27000 0.93707466 2000 7349.2382 + 28000 1.1032445 2000 7471.8719 + 29000 1.2721858 2000 7574.8228 + 30000 1.449265 2000 7659.3836 + 31000 1.5742557 2000 7703.6856 + 32000 1.7076068 2000 7644.279 + 33000 1.8527873 2000 7526.6944 + 34000 2.009855 2000 7370.0821 + 35000 2.1766446 2000 7193.0459 + 36000 2.3557482 2000 6990.9912 + 37000 2.5468907 2000 6849.286 + 38000 2.7480681 2000 6701.7548 + 39000 2.9574037 2000 6538.6915 + 40000 3.1807711 2000 6382.3209 + 41000 3.3486595 2000 6216.424 + 42000 3.5162592 2000 6091.29 + 43000 3.687057 2000 5945.3256 + 44000 3.8662596 2000 5840.875 + 45000 4.0557241 2000 5649.763 + 46000 4.2541051 2000 5476.2837 + 47000 4.4571214 2000 5277.0701 + 48000 4.6628008 2000 5123.9796 + 49000 4.8686502 2000 4968.3344 + 50000 5.0788848 2000 4869.5754 + 51000 5.2552598 2000 4704.8517 + 52000 5.4428713 2000 4522.8978 + 53000 5.6520596 2000 4393.8047 + 54000 5.8613031 2000 4235.438 + 55000 6.0776098 2000 4082.3073 + 56000 6.2998042 2000 3901.0483 + 57000 6.5321434 2000 3718.0882 + 58000 6.7745438 2000 3504.621 + 59000 7.0237701 2000 3285.7484 + 60000 7.2791855 2000 3047.3386 + 61000 7.489058 2000 2875.4032 + 62000 7.7044094 2000 2647.83 + 63000 7.9194827 2000 2396.5343 + 64000 8.1429474 2000 2107.2113 + 65000 8.3745618 2000 1858.1977 + 66000 8.610673 2000 1615.8096 + 67000 8.8505244 2000 1416.5065 + 68000 9.0955915 2000 1206.8534 + 69000 9.3609676 2000 953.93974 + 70000 9.6382594 2000 766.9148 + 71000 9.8719468 2000 611.45063 + 72000 10.095534 2000 464.94805 + 73000 10.317962 2000 364.31415 + 74000 10.547287 2000 298.77524 + 75000 10.764052 2000 245.73022 + 76000 10.978769 2000 207.8035 + 77000 11.199921 2000 179.1305 + 78000 11.410296 2000 151.21032 + 79000 11.624499 2000 124.49675 + 80000 11.849562 2000 106.71504 + 81000 12.077449 2000 93.299034 + 82000 12.306904 2000 81.220408 + 83000 12.539016 2000 67.383955 + 84000 12.773108 2000 57.287165 + 85000 13.009487 2000 49.255887 + 86000 13.252544 2000 44.082536 + 87000 13.502564 2000 40.193574 + 88000 13.747198 2000 36.903867 + 89000 13.993028 2000 33.55332 + 90000 14.240036 2000 30.730912 + 91000 14.472719 2000 28.650574 + 92000 14.708542 2000 26.377609 + 93000 14.948106 2000 24.433165 + 94000 15.186653 2000 22.933076 + 95000 15.428022 2000 22.31788 + 96000 15.676323 2000 20.829124 + 97000 15.916326 2000 19.401354 + 98000 16.160197 2000 18.943699 + 99000 16.404796 2000 17.690599 + 100000 16.659731 2000 17.215943 + 101000 16.904498 2000 15.948087 + 102000 17.150993 2000 15.140324 + 103000 17.39584 2000 14.885674 + 104000 17.643707 2000 14.414752 + 105000 17.889343 2000 14.270676 + 106000 18.136159 2000 13.943799 + 107000 18.383653 2000 13.840145 + 108000 18.630952 2000 12.826341 + 109000 18.878218 2000 12.209012 + 110000 19.125558 2000 11.916194 + 111000 19.3726 2000 11.970849 + 112000 19.621494 2000 11.56909 + 113000 19.869978 2000 11.390562 + 114000 20.123402 2000 11.276545 + 115000 20.370963 2000 11.171298 + 116000 20.619975 2000 11.686225 + 117000 20.869585 2000 11.379805 + 118000 21.118875 2000 10.539511 + 119000 21.36837 2000 10.064595 + 120000 21.629511 2000 10.003722 + 121000 21.877867 2000 9.6974586 + 122000 22.127922 2000 9.7156209 + 123000 22.378215 2000 9.615256 + 124000 22.630463 2000 8.8979008 + 125000 22.882154 2000 8.2220003 + 126000 23.135763 2000 8.3153866 + 127000 23.392389 2000 8.0945497 + 128000 23.645521 2000 7.8942467 + 129000 23.89965 2000 7.4794776 + 130000 24.153195 2000 7.3635341 + 131000 24.406239 2000 7.5757743 + 132000 24.66016 2000 7.7047492 + 133000 24.914093 2000 8.0142133 + 134000 25.173429 2000 8.1716714 + 135000 25.433318 2000 7.7803343 + 136000 25.692997 2000 6.3545482 + 137000 25.947787 2000 6.313769 + 138000 26.200427 2000 6.4948596 + 139000 26.452514 2000 6.6183259 + 140000 26.714963 2000 6.7922281 + 141000 26.968235 2000 7.0752448 + 142000 27.220962 2000 7.2328717 + 143000 27.474819 2000 7.626453 + 144000 27.728029 2000 7.4576787 + 145000 27.981958 2000 7.124435 + 146000 28.236591 2000 7.2581589 + 147000 28.489842 2000 7.0622049 + 148000 28.744432 2000 7.1672801 + 149000 28.998739 2000 7.3248363 + 150000 29.253511 2000 7.0092266 + 151000 29.50567 2000 6.8124438 + 152000 29.759836 2000 6.9808705 + 153000 30.015359 2000 7.1516731 + 154000 30.275488 2000 6.6245443 + 155000 30.533407 2000 5.5867165 + 156000 30.788683 2000 5.318949 + 157000 31.043126 2000 5.1195805 + 158000 31.297011 2000 5.2045485 + 159000 31.551327 2000 5.24992 + 160000 31.807728 2000 5.3270577 + 161000 32.061371 2000 4.995281 + 162000 32.315467 2000 5.0755874 + 163000 32.57628 2000 5.0788135 + 164000 32.83119 2000 4.5917317 + 165000 33.085634 2000 4.6255452 + 166000 33.344148 2000 4.2563299 + 167000 33.599342 2000 3.3808566 + 168000 33.853488 2000 3.218931 + 169000 34.121464 2000 3.0839289 + 170000 34.378727 2000 3.0358838 +Loop time of 34.3788 on 4 procs for 150000 steps with 2000 atoms + +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 6.5861 | 10.058 | 12.152 | 68.4 | 29.26 +Neigh | 0.17612 | 0.25274 | 0.30005 | 9.2 | 0.74 +Comm | 1.5024 | 2.6626 | 3.4174 | 44.9 | 7.74 +Output | 0.006542 | 0.019532 | 0.046425 | 11.5 | 0.06 +Modify | 11.945 | 14.674 | 16.29 | 42.7 | 42.68 +Other | | 6.711 | | | 19.52 + +Nlocal: 500 ave 508 max 489 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Nghost: 446.75 ave 708 max 191 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Neighs: 4498 ave 5441 max 3786 min +Histogram: 1 1 0 0 0 0 1 0 0 1 + +Total # of neighbors = 17992 +Ave neighs/atom = 8.996 +Neighbor list builds = 403 +Dangerous builds = 0 + +# remove "plug" - need to redefine cylinder region & union + +region cylreg delete +region hopreg delete +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 + +region hopreg union 2 cylreg conereg + +unfix hopper3 +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +run 100000 +Per MPI rank memory allocation (min/avg/max) = 13.68 | 15.35 | 16.59 Mbytes +Step CPU Atoms KinEng + 170000 0 2000 3.0358838 + 171000 0.25455499 2000 3.7725185 + 172000 0.50768304 2000 4.727285 + 173000 0.76122355 2000 5.9840449 + 174000 1.0141416 2000 8.0335022 + 175000 1.2750733 2000 10.177259 + 176000 1.5277736 2000 13.655163 + 177000 1.7810826 2000 17.987975 + 178000 2.0348532 2000 23.266471 + 179000 2.2915859 2000 29.266364 + 180000 2.547174 2000 35.84089 + 181000 2.8009758 2000 43.130989 + 182000 3.0531759 2000 51.177142 + 183000 3.3130636 2000 60.031831 + 184000 3.5651338 2000 69.52374 + 185000 3.8185399 2000 79.941907 + 186000 4.070199 2000 91.195382 + 187000 4.3204038 2000 102.1696 + 188000 4.5699775 2000 112.73657 + 189000 4.8184452 2000 123.57252 + 190000 5.0653601 2000 135.59942 + 191000 5.3119307 2000 147.37757 + 192000 5.5574484 2000 159.12931 + 193000 5.8029084 2000 170.90271 + 194000 6.0463562 2000 185.71189 + 195000 6.2883332 2000 201.83733 + 196000 6.5281694 2000 218.30785 + 197000 6.7682493 2000 236.05694 + 198000 7.0084231 2000 255.23099 + 199000 7.2519951 2000 273.94566 + 200000 7.5010133 2000 293.91107 + 201000 7.7396591 2000 316.52142 + 202000 7.9784184 2000 340.91391 + 203000 8.224021 2000 364.81801 + 204000 8.4597676 2000 390.06478 + 205000 8.6934731 2000 415.90918 + 206000 8.9342225 2000 441.0995 + 207000 9.1714027 2000 467.40314 + 208000 9.4081488 2000 494.93631 + 209000 9.6457636 2000 524.70539 + 210000 9.8831718 2000 556.52058 + 211000 10.118018 2000 589.36821 + 212000 10.3541 2000 622.6887 + 213000 10.587226 2000 657.05888 + 214000 10.820744 2000 691.14292 + 215000 11.055785 2000 726.94959 + 216000 11.298702 2000 762.92802 + 217000 11.534793 2000 801.23648 + 218000 11.769849 2000 841.1559 + 219000 12.000917 2000 882.4342 + 220000 12.232812 2000 924.8466 + 221000 12.461166 2000 968.86229 + 222000 12.698451 2000 1013.1381 + 223000 12.930287 2000 1058.2988 + 224000 13.172862 2000 1105.2911 + 225000 13.405001 2000 1152.8617 + 226000 13.633187 1999 1197.6777 + 227000 13.857126 1998 1243.1211 + 228000 14.079622 1992 1262.1402 + 229000 14.303362 1987 1281.9162 + 230000 14.530392 1973 1264.0674 + 231000 14.756486 1964 1277.8347 + 232000 14.984495 1953 1266.7926 + 233000 15.213102 1940 1244.0038 + 234000 15.441666 1925 1206.4472 + 235000 15.667547 1914 1193.33 + 236000 15.895047 1901 1160.4096 + 237000 16.120833 1890 1141.6816 + 238000 16.346628 1883 1149.1584 + 239000 16.573303 1877 1141.7514 + 240000 16.801035 1871 1146.8662 + 241000 17.024775 1866 1152.561 + 242000 17.248651 1858 1148.2529 + 243000 17.47241 1847 1114.7239 + 244000 17.70222 1832 1070.9996 + 245000 17.926477 1824 1066.7549 + 246000 18.157588 1813 1027.1865 + 247000 18.378868 1804 1011.5024 + 248000 18.599988 1797 993.10451 + 249000 18.819007 1787 951.89778 + 250000 19.044634 1777 926.30475 + 251000 19.254408 1764 875.07091 + 252000 19.465788 1755 824.89358 + 253000 19.676327 1742 742.51957 + 254000 19.887648 1731 708.30958 + 255000 20.094912 1722 690.09761 + 256000 20.299963 1713 638.00218 + 257000 20.506153 1705 596.86839 + 258000 20.713994 1701 583.71937 + 259000 20.919755 1691 549.0049 + 260000 21.123122 1688 549.4278 + 261000 21.332215 1684 535.35719 + 262000 21.533673 1682 546.74031 + 263000 21.737042 1678 532.69324 + 264000 21.941306 1676 537.89254 + 265000 22.15135 1676 559.50898 + 266000 22.358371 1670 540.21452 + 267000 22.563236 1668 557.19857 + 268000 22.764648 1665 569.52869 + 269000 22.96391 1658 543.77057 + 270000 23.172415 1656 550.23716 +Loop time of 23.1725 on 4 procs for 100000 steps with 1656 atoms + +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.3849 | 7.3002 | 10.192 | 91.3 | 31.50 +Neigh | 0.14271 | 0.16781 | 0.19054 | 4.5 | 0.72 +Comm | 1.086 | 1.9721 | 2.6157 | 42.7 | 8.51 +Output | 0.0018437 | 0.013918 | 0.041359 | 13.5 | 0.06 +Modify | 8.6598 | 9.3198 | 9.8874 | 16.6 | 40.22 +Other | | 4.399 | | | 18.98 + +Nlocal: 414 ave 454 max 385 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 395.25 ave 645 max 157 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Neighs: 3498.5 ave 4524 max 2034 min +Histogram: 1 0 0 0 1 0 0 0 0 2 + +Total # of neighbors = 13994 +Ave neighs/atom = 8.45048 +Neighbor list builds = 240 +Dangerous builds = 0 +Total wall time: 0:01:02 diff --git a/examples/granregion/log.27Nov18.granregion.mixer.g++.1 b/examples/granregion/log.27Nov18.granregion.mixer.g++.1 new file mode 100644 index 0000000000..f2ba9d7122 --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.mixer.g++.1 @@ -0,0 +1,602 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable name string mixer + +thermo_modify flush yes +variable seed equal 14314 + +############################################### +# Particle parameters +################################################ + +variable rlo equal 0.3 +variable rhi equal 0.6 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.3 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.6 +variable skin equal ${rhi} +variable skin equal 0.6 + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable kn equal 10^5 +variable kt equal 0.2*${kn} +variable kt equal 0.2*100000 + +variable gravity equal 1.0 +variable density equal 1.0 + +variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 +variable a equal (-2.0*log(${coeffRes})/PI)^2 +variable a equal (-2.0*log(0.1)/PI)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 806.699778405191*0.5 + +variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) + +variable dt equal ${tcol}*0.02 +variable dt equal 0.00236257621510454*0.02 +timestep ${dt} +timestep 4.72515243020908e-05 + +############################################### + +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton on +atom_style sphere + +boundary p p f + +region boxreg block 0 20 0 20 0 20 +create_box 1 boxreg +Created orthogonal box = (0 0 0) to (20 20 20) + 1 by 1 by 1 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 +pair_coeff * * + +neighbor ${skin} bin +neighbor 0.6 bin +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 20, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d/newton + bin: standard +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +region insreg cylinder z 10 10 8 10 18 side in units box +region cylreg cylinder z 10 10 10 0 20 side in units box + +variable theta equal (step/400000)*2*PI + +region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box +region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box + +region mixer intersect 3 cylreg b1 b2 side in + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + +fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer + +fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 +Particle insertion: 444 every 84653 steps, 1000 by step 169307 + +#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke v_theta +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) +thermo_modify flush yes lost warn + +run 200000 +Per MPI rank memory allocation (min/avg/max) = 5.862 | 5.862 | 5.862 Mbytes +Step CPU Atoms KinEng v_theta + 0 0 0 -0 0 + 1000 0.15327144 444 -0 0.015707963 + 2000 0.30070925 444 -0 0.031415927 + 3000 0.44653535 444 -0 0.04712389 + 4000 0.59226131 444 -0 0.062831853 + 5000 0.73794818 444 -0 0.078539816 + 6000 0.88327622 444 -0 0.09424778 + 7000 1.0286083 444 -0 0.10995574 + 8000 1.1740625 444 -0 0.12566371 + 9000 1.3224797 444 -0 0.14137167 + 10000 1.4717772 444 -0 0.15707963 + 11000 1.6204555 444 -0 0.1727876 + 12000 1.7690799 444 -0 0.18849556 + 13000 1.918304 444 -0 0.20420352 + 14000 2.0670426 444 -0 0.21991149 + 15000 2.2157068 444 -0 0.23561945 + 16000 2.3642888 444 -0 0.25132741 + 17000 2.5129776 444 -0 0.26703538 + 18000 2.6614521 444 -0 0.28274334 + 19000 2.8100598 444 -0 0.2984513 + 20000 2.9591351 444 -0 0.31415927 + 21000 3.1073661 444 -0 0.32986723 + 22000 3.2557554 444 -0 0.34557519 + 23000 3.4041324 444 -0 0.36128316 + 24000 3.5526814 444 -0 0.37699112 + 25000 3.700824 444 -0 0.39269908 + 26000 3.8496137 444 -0 0.40840704 + 27000 3.9986103 444 -0 0.42411501 + 28000 4.1475384 444 -0 0.43982297 + 29000 4.2963772 444 -0 0.45553093 + 30000 4.4454341 444 -0 0.4712389 + 31000 4.5942066 444 -0 0.48694686 + 32000 4.7434044 444 -0 0.50265482 + 33000 4.893549 444 -0 0.51836279 + 34000 5.0427935 444 -0 0.53407075 + 35000 5.1920972 444 -0 0.54977871 + 36000 5.3411844 444 -0 0.56548668 + 37000 5.4904606 444 -0 0.58119464 + 38000 5.6397707 444 -0 0.5969026 + 39000 5.7900345 444 -0 0.61261057 + 40000 5.9405882 444 -0 0.62831853 + 41000 6.089345 444 -0 0.64402649 + 42000 6.2388933 444 -0 0.65973446 + 43000 6.3888056 444 -0 0.67544242 + 44000 6.5379841 444 -0 0.69115038 + 45000 6.6875141 444 -0 0.70685835 + 46000 6.8370855 444 -0 0.72256631 + 47000 6.9866009 444 -0 0.73827427 + 48000 7.1364653 444 -0 0.75398224 + 49000 7.2859883 444 -0 0.7696902 + 50000 7.4368248 444 -0 0.78539816 + 51000 7.5870779 444 -0 0.80110613 + 52000 7.7370813 444 -0 0.81681409 + 53000 7.8879561 444 -0 0.83252205 + 54000 8.0383027 444 -0 0.84823002 + 55000 8.1916294 444 -0 0.86393798 + 56000 8.3458471 444 -0 0.87964594 + 57000 8.5010631 444 -0 0.89535391 + 58000 8.6560545 444 -0 0.91106187 + 59000 8.8110209 444 -0 0.92676983 + 60000 8.9674675 444 -0 0.9424778 + 61000 9.1231239 444 -0 0.95818576 + 62000 9.2785382 444 -0 0.97389372 + 63000 9.4343674 444 -0 0.98960169 + 64000 9.5911541 444 -0 1.0053096 + 65000 9.7477772 444 -0 1.0210176 + 66000 9.9050307 444 -0 1.0367256 + 67000 10.063978 444 -0 1.0524335 + 68000 10.221835 444 -0 1.0681415 + 69000 10.37944 444 -0 1.0838495 + 70000 10.537409 444 -0 1.0995574 + 71000 10.695649 444 -0 1.1152654 + 72000 10.85453 444 -0 1.1309734 + 73000 11.013438 444 -0 1.1466813 + 74000 11.172689 444 -0 1.1623893 + 75000 11.332172 444 -0 1.1780972 + 76000 11.492824 444 -0 1.1938052 + 77000 11.653915 444 -0 1.2095132 + 78000 11.815798 444 -0 1.2252211 + 79000 11.97868 444 -0 1.2409291 + 80000 12.141392 444 -0 1.2566371 + 81000 12.30536 444 -0 1.272345 + 82000 12.468797 444 -0 1.288053 + 83000 12.633028 444 -0 1.303761 + 84000 12.797936 444 -0 1.3194689 + 85000 13.019726 888 -0 1.3351769 + 86000 13.333436 888 -0 1.3508848 + 87000 13.648179 888 -0 1.3665928 + 88000 13.962435 888 -0 1.3823008 + 89000 14.276158 888 -0 1.3980087 + 90000 14.590669 888 -0 1.4137167 + 91000 14.904268 888 -0 1.4294247 + 92000 15.216788 888 -0 1.4451326 + 93000 15.529868 888 -0 1.4608406 + 94000 15.843157 888 -0 1.4765485 + 95000 16.156564 888 -0 1.4922565 + 96000 16.469569 888 -0 1.5079645 + 97000 16.784048 888 -0 1.5236724 + 98000 17.100451 888 -0 1.5393804 + 99000 17.416338 888 -0 1.5550884 + 100000 17.733482 888 -0 1.5707963 + 101000 18.052522 888 -0 1.5865043 + 102000 18.371428 888 -0 1.6022123 + 103000 18.690222 888 -0 1.6179202 + 104000 19.009665 888 -0 1.6336282 + 105000 19.328189 888 -0 1.6493361 + 106000 19.647804 888 -0 1.6650441 + 107000 19.96805 888 -0 1.6807521 + 108000 20.286857 888 -0 1.69646 + 109000 20.607965 888 -0 1.712168 + 110000 20.931749 888 -0 1.727876 + 111000 21.251903 888 -0 1.7435839 + 112000 21.572158 888 -0 1.7592919 + 113000 21.892612 888 -0 1.7749998 + 114000 22.214408 888 -0 1.7907078 + 115000 22.535498 888 -0 1.8064158 + 116000 22.856752 888 -0 1.8221237 + 117000 23.178885 888 -0 1.8378317 + 118000 23.501127 888 -0 1.8535397 + 119000 23.8241 888 -0 1.8692476 + 120000 24.147258 888 -0 1.8849556 + 121000 24.472969 888 -0 1.9006636 + 122000 24.799108 888 -0 1.9163715 + 123000 25.125275 888 -0 1.9320795 + 124000 25.453866 888 -0 1.9477874 + 125000 25.784766 888 -0 1.9634954 + 126000 26.117013 888 -0 1.9792034 + 127000 26.448734 888 -0 1.9949113 + 128000 26.780032 888 -0 2.0106193 + 129000 27.113678 888 -0 2.0263273 + 130000 27.450001 888 -0 2.0420352 + 131000 27.782047 888 -0 2.0577432 + 132000 28.114287 888 -0 2.0734512 + 133000 28.446648 888 -0 2.0891591 + 134000 28.780438 888 -0 2.1048671 + 135000 29.116443 888 -0 2.120575 + 136000 29.451848 888 -0 2.136283 + 137000 29.787778 888 -0 2.151991 + 138000 30.12804 888 -0 2.1676989 + 139000 30.46814 888 -0 2.1834069 + 140000 30.808946 888 -0 2.1991149 + 141000 31.147584 888 -0 2.2148228 + 142000 31.486475 888 -0 2.2305308 + 143000 31.826754 888 -0 2.2462387 + 144000 32.165796 888 -0 2.2619467 + 145000 32.506074 888 -0 2.2776547 + 146000 32.847604 888 -0 2.2933626 + 147000 33.188988 888 -0 2.3090706 + 148000 33.532869 888 -0 2.3247786 + 149000 33.876629 888 -0 2.3404865 + 150000 34.221172 888 -0 2.3561945 + 151000 34.562559 888 -0 2.3719025 + 152000 34.904679 888 -0 2.3876104 + 153000 35.247727 888 -0 2.4033184 + 154000 35.591228 888 -0 2.4190263 + 155000 35.949192 888 -0 2.4347343 + 156000 36.320157 888 -0 2.4504423 + 157000 36.693571 888 -0 2.4661502 + 158000 37.069463 888 -0 2.4818582 + 159000 37.44221 888 -0 2.4975662 + 160000 37.81863 888 -0 2.5132741 + 161000 38.195121 888 -0 2.5289821 + 162000 38.573424 888 -0 2.54469 + 163000 38.950044 888 -0 2.560398 + 164000 39.331977 888 -0 2.576106 + 165000 39.714367 888 -0 2.5918139 + 166000 40.097099 888 -0 2.6075219 + 167000 40.477443 888 -0 2.6232299 + 168000 40.860404 888 -0 2.6389378 + 169000 41.244357 888 -0 2.6546458 + 170000 41.658126 1000 -0 2.6703538 + 171000 42.082517 1000 -0 2.6860617 + 172000 42.507502 1000 -0 2.7017697 + 173000 42.93363 1000 -0 2.7174776 + 174000 43.361133 1000 -0 2.7331856 + 175000 43.792381 1000 -0 2.7488936 + 176000 44.223827 1000 -0 2.7646015 + 177000 44.656581 1000 -0 2.7803095 + 178000 45.087615 1000 -0 2.7960175 + 179000 45.521129 1000 -0 2.8117254 + 180000 45.957808 1000 -0 2.8274334 + 181000 46.391451 1000 -0 2.8431414 + 182000 46.825486 1000 -0 2.8588493 + 183000 47.26091 1000 -0 2.8745573 + 184000 47.694263 1000 -0 2.8902652 + 185000 48.123312 1000 -0 2.9059732 + 186000 48.554081 1000 -0 2.9216812 + 187000 48.982617 1000 -0 2.9373891 + 188000 49.414355 1000 -0 2.9530971 + 189000 49.84753 1000 -0 2.9688051 + 190000 50.284462 1000 -0 2.984513 + 191000 50.71899 1000 -0 3.000221 + 192000 51.157278 1000 -0 3.0159289 + 193000 51.586171 1000 -0 3.0316369 + 194000 52.011691 1000 -0 3.0473449 + 195000 52.437732 1000 -0 3.0630528 + 196000 52.863703 1000 -0 3.0787608 + 197000 53.290403 1000 -0 3.0944688 + 198000 53.7191 1000 -0 3.1101767 + 199000 54.147195 1000 -0 3.1258847 + 200000 54.575967 1000 -0 3.1415927 +Loop time of 54.576 on 1 procs for 200000 steps with 1000 atoms + +Performance: 14960.907 tau/day, 3664.615 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.7989 | 3.7989 | 3.7989 | 0.0 | 6.96 +Neigh | 0.067629 | 0.067629 | 0.067629 | 0.0 | 0.12 +Comm | 0.63734 | 0.63734 | 0.63734 | 0.0 | 1.17 +Output | 0.0049303 | 0.0049303 | 0.0049303 | 0.0 | 0.01 +Modify | 49.1 | 49.1 | 49.1 | 0.0 | 89.97 +Other | | 0.9668 | | | 1.77 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 196 ave 196 max 196 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3910 ave 3910 max 3910 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3910 +Ave neighs/atom = 3.91 +Neighbor list builds = 219 +Dangerous builds = 0 +unfix ins +run 200000 +Per MPI rank memory allocation (min/avg/max) = 12.65 | 12.65 | 12.65 Mbytes +Step CPU Atoms KinEng v_theta + 200000 0 1000 0.93873133 3.1415927 + 201000 0.4261198 1000 0.93239566 3.1573006 + 202000 0.84928846 1000 0.90333835 3.1730086 + 203000 1.2720087 1000 0.89351493 3.1887165 + 204000 1.6929317 1000 0.87648478 3.2044245 + 205000 2.114043 1000 0.86818482 3.2201325 + 206000 2.5357664 1000 0.86033251 3.2358404 + 207000 2.9579847 1000 0.85442625 3.2515484 + 208000 3.3812878 1000 0.8517451 3.2672564 + 209000 3.8124611 1000 0.84406987 3.2829643 + 210000 4.2440236 1000 0.83964642 3.2986723 + 211000 4.6781921 1000 0.82994066 3.3143802 + 212000 5.1116509 1000 0.82908369 3.3300882 + 213000 5.5468135 1000 0.83115482 3.3457962 + 214000 5.9802556 1000 0.82680518 3.3615041 + 215000 6.4107294 1000 0.8223909 3.3772121 + 216000 6.8419023 1000 0.81872537 3.3929201 + 217000 7.2763367 1000 0.82446065 3.408628 + 218000 7.7160695 1000 0.82278874 3.424336 + 219000 8.1540956 1000 0.83017397 3.440044 + 220000 8.5917952 1000 0.82232305 3.4557519 + 221000 9.0296218 1000 0.82584132 3.4714599 + 222000 9.4719794 1000 0.82143909 3.4871678 + 223000 9.9180939 1000 0.82925587 3.5028758 + 224000 10.361852 1000 0.84546265 3.5185838 + 225000 10.803539 1000 0.84436452 3.5342917 + 226000 11.248456 1000 0.84849375 3.5499997 + 227000 11.695092 1000 0.8409057 3.5657077 + 228000 12.136044 1000 0.83139305 3.5814156 + 229000 12.579807 1000 0.83098473 3.5971236 + 230000 13.02219 1000 0.81335147 3.6128316 + 231000 13.463863 1000 0.78946649 3.6285395 + 232000 13.906293 1000 0.78807613 3.6442475 + 233000 14.348807 1000 0.79086655 3.6599554 + 234000 14.793175 1000 0.79358862 3.6756634 + 235000 15.238316 1000 0.79444252 3.6913714 + 236000 15.683342 1000 0.79392156 3.7070793 + 237000 16.12611 1000 0.80416034 3.7227873 + 238000 16.5711 1000 0.80365093 3.7384953 + 239000 17.014355 1000 0.80860323 3.7542032 + 240000 17.454467 1000 0.80245788 3.7699112 + 241000 17.89162 1000 0.79602568 3.7856191 + 242000 18.330859 1000 0.79023692 3.8013271 + 243000 18.769301 1000 0.79066782 3.8170351 + 244000 19.211293 1000 0.77671368 3.832743 + 245000 19.651443 1000 0.77121874 3.848451 + 246000 20.092102 1000 0.74658977 3.864159 + 247000 20.532732 1000 0.73825017 3.8798669 + 248000 20.975646 1000 0.7187986 3.8955749 + 249000 21.418807 1000 0.71707058 3.9112829 + 250000 21.862497 1000 0.72983635 3.9269908 + 251000 22.311832 1000 0.7355358 3.9426988 + 252000 22.75883 1000 0.74427811 3.9584067 + 253000 23.203455 1000 0.74968093 3.9741147 + 254000 23.651472 1000 0.75350303 3.9898227 + 255000 24.102152 1000 0.75617916 4.0055306 + 256000 24.554236 1000 0.74949839 4.0212386 + 257000 25.008718 1000 0.73534118 4.0369466 + 258000 25.461913 1000 0.73761942 4.0526545 + 259000 25.916674 1000 0.75485851 4.0683625 + 260000 26.373941 1000 0.77147511 4.0840704 + 261000 26.832072 1000 0.76658917 4.0997784 + 262000 27.28741 1000 0.76441563 4.1154864 + 263000 27.742157 1000 0.74449444 4.1311943 + 264000 28.192718 1000 0.7403314 4.1469023 + 265000 28.642541 1000 0.74262656 4.1626103 + 266000 29.09406 1000 0.74117022 4.1783182 + 267000 29.547747 1000 0.73877643 4.1940262 + 268000 29.998243 1000 0.75062626 4.2097342 + 269000 30.449751 1000 0.74649396 4.2254421 + 270000 30.901232 1000 0.75371324 4.2411501 + 271000 31.354755 1000 0.75254842 4.256858 + 272000 31.810717 1000 0.74245946 4.272566 + 273000 32.265754 1000 0.73056023 4.288274 + 274000 32.719719 1000 0.72004393 4.3039819 + 275000 33.173929 1000 0.70665742 4.3196899 + 276000 33.628581 1000 0.69417262 4.3353979 + 277000 34.080936 1000 0.67343474 4.3511058 + 278000 34.532053 1000 0.66922758 4.3668138 + 279000 34.985569 1000 0.66239909 4.3825218 + 280000 35.443496 1000 0.66406486 4.3982297 + 281000 35.901536 1000 0.67123654 4.4139377 + 282000 36.357765 1000 0.67660885 4.4296456 + 283000 36.811956 1000 0.6809288 4.4453536 + 284000 37.266937 1000 0.69561154 4.4610616 + 285000 37.720866 1000 0.70874512 4.4767695 + 286000 38.177032 1000 0.72957833 4.4924775 + 287000 38.633109 1000 0.72891066 4.5081855 + 288000 39.086933 1000 0.72673285 4.5238934 + 289000 39.538699 1000 0.72583062 4.5396014 + 290000 39.991294 1000 0.7209406 4.5553093 + 291000 40.437987 1000 0.70642559 4.5710173 + 292000 40.885753 1000 0.69074151 4.5867253 + 293000 41.326601 1000 0.68041469 4.6024332 + 294000 41.763719 1000 0.6712034 4.6181412 + 295000 42.198532 1000 0.66140336 4.6338492 + 296000 42.635139 1000 0.65458145 4.6495571 + 297000 43.071132 1000 0.63884999 4.6652651 + 298000 43.507309 1000 0.63182296 4.6809731 + 299000 43.943936 1000 0.6324286 4.696681 + 300000 44.383148 1000 0.62640427 4.712389 + 301000 44.819379 1000 0.62138494 4.7280969 + 302000 45.260834 1000 0.62902694 4.7438049 + 303000 45.705719 1000 0.63308052 4.7595129 + 304000 46.14622 1000 0.63266845 4.7752208 + 305000 46.586693 1000 0.63464534 4.7909288 + 306000 47.028768 1000 0.62941378 4.8066368 + 307000 47.470183 1000 0.62801025 4.8223447 + 308000 47.914518 1000 0.62291875 4.8380527 + 309000 48.365654 1000 0.62529494 4.8537606 + 310000 48.817185 1000 0.62504442 4.8694686 + 311000 49.269423 1000 0.63074915 4.8851766 + 312000 49.722869 1000 0.64292914 4.9008845 + 313000 50.175859 1000 0.65319818 4.9165925 + 314000 50.630132 1000 0.66755513 4.9323005 + 315000 51.084836 1000 0.67585436 4.9480084 + 316000 51.539391 1000 0.67676226 4.9637164 + 317000 51.995233 1000 0.67394312 4.9794244 + 318000 52.453581 1000 0.67299959 4.9951323 + 319000 52.906322 1000 0.68074615 5.0108403 + 320000 53.362206 1000 0.67696004 5.0265482 + 321000 53.813824 1000 0.67899008 5.0422562 + 322000 54.264433 1000 0.67901671 5.0579642 + 323000 54.715627 1000 0.67620354 5.0736721 + 324000 55.168 1000 0.67165541 5.0893801 + 325000 55.620891 1000 0.67820953 5.1050881 + 326000 56.073685 1000 0.67490808 5.120796 + 327000 56.526012 1000 0.67238149 5.136504 + 328000 56.977525 1000 0.66885914 5.152212 + 329000 57.431088 1000 0.66876389 5.1679199 + 330000 57.886694 1000 0.66879597 5.1836279 + 331000 58.338381 1000 0.66577546 5.1993358 + 332000 58.791084 1000 0.6602875 5.2150438 + 333000 59.242965 1000 0.65879422 5.2307518 + 334000 59.698559 1000 0.6581474 5.2464597 + 335000 60.153261 1000 0.6521249 5.2621677 + 336000 60.605605 1000 0.63371979 5.2778757 + 337000 61.059824 1000 0.62373279 5.2935836 + 338000 61.510606 1000 0.6212013 5.3092916 + 339000 61.962049 1000 0.62303395 5.3249995 + 340000 62.413564 1000 0.63183785 5.3407075 + 341000 62.86366 1000 0.64387158 5.3564155 + 342000 63.317623 1000 0.65045982 5.3721234 + 343000 63.772034 1000 0.65401192 5.3878314 + 344000 64.225206 1000 0.65181077 5.4035394 + 345000 64.681317 1000 0.64098248 5.4192473 + 346000 65.136483 1000 0.63163559 5.4349553 + 347000 65.588996 1000 0.64182161 5.4506633 + 348000 66.042215 1000 0.65528889 5.4663712 + 349000 66.501687 1000 0.66603277 5.4820792 + 350000 66.960896 1000 0.67362185 5.4977871 + 351000 67.417316 1000 0.68867905 5.5134951 + 352000 67.876742 1000 0.6907547 5.5292031 + 353000 68.336836 1000 0.69043981 5.544911 + 354000 68.797396 1000 0.68676964 5.560619 + 355000 69.255062 1000 0.68019369 5.576327 + 356000 69.711663 1000 0.66189875 5.5920349 + 357000 70.172728 1000 0.65275709 5.6077429 + 358000 70.632655 1000 0.64560617 5.6234508 + 359000 71.091165 1000 0.63865266 5.6391588 + 360000 71.548341 1000 0.6366388 5.6548668 + 361000 72.006137 1000 0.63619567 5.6705747 + 362000 72.466621 1000 0.63986167 5.6862827 + 363000 72.928505 1000 0.656198 5.7019907 + 364000 73.391876 1000 0.66522563 5.7176986 + 365000 73.852366 1000 0.67330205 5.7334066 + 366000 74.317924 1000 0.67997811 5.7491146 + 367000 74.781431 1000 0.67734915 5.7648225 + 368000 75.24363 1000 0.66811078 5.7805305 + 369000 75.704319 1000 0.67232161 5.7962384 + 370000 76.165294 1000 0.67262944 5.8119464 + 371000 76.624971 1000 0.68614241 5.8276544 + 372000 77.085918 1000 0.70293842 5.8433623 + 373000 77.544679 1000 0.71889856 5.8590703 + 374000 78.007103 1000 0.7170296 5.8747783 + 375000 78.468913 1000 0.71258031 5.8904862 + 376000 78.93354 1000 0.70758873 5.9061942 + 377000 79.39396 1000 0.69486822 5.9219022 + 378000 79.850685 1000 0.68311194 5.9376101 + 379000 80.307228 1000 0.67317549 5.9533181 + 380000 80.767418 1000 0.67691049 5.969026 + 381000 81.227579 1000 0.69231691 5.984734 + 382000 81.686924 1000 0.69998609 6.000442 + 383000 82.145783 1000 0.69328258 6.0161499 + 384000 82.604827 1000 0.69903908 6.0318579 + 385000 83.056443 1000 0.69455744 6.0475659 + 386000 83.507131 1000 0.68865933 6.0632738 + 387000 83.95695 1000 0.68630439 6.0789818 + 388000 84.404079 1000 0.6800564 6.0946897 + 389000 84.851053 1000 0.66747339 6.1103977 + 390000 85.298614 1000 0.65695883 6.1261057 + 391000 85.744507 1000 0.65659359 6.1418136 + 392000 86.191348 1000 0.65933663 6.1575216 + 393000 86.632782 1000 0.65170236 6.1732296 + 394000 87.074105 1000 0.65631817 6.1889375 + 395000 87.5177 1000 0.66205838 6.2046455 + 396000 87.963111 1000 0.65512694 6.2203535 + 397000 88.408348 1000 0.65266011 6.2360614 + 398000 88.854042 1000 0.64593806 6.2517694 + 399000 89.298754 1000 0.64940473 6.2674773 + 400000 89.745445 1000 0.66033435 6.2831853 +Loop time of 89.7455 on 1 procs for 200000 steps with 1000 atoms + +Performance: 9098.023 tau/day, 2228.525 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 10.924 | 10.924 | 10.924 | 0.0 | 12.17 +Neigh | 0.10266 | 0.10266 | 0.10266 | 0.0 | 0.11 +Comm | 1.9424 | 1.9424 | 1.9424 | 0.0 | 2.16 +Output | 0.0056458 | 0.0056458 | 0.0056458 | 0.0 | 0.01 +Modify | 75.442 | 75.442 | 75.442 | 0.0 | 84.06 +Other | | 1.329 | | | 1.48 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 272 ave 272 max 272 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4933 ave 4933 max 4933 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4933 +Ave neighs/atom = 4.933 +Neighbor list builds = 171 +Dangerous builds = 0 +Total wall time: 0:02:24 diff --git a/examples/granregion/log.27Nov18.granregion.mixer.g++.4 b/examples/granregion/log.27Nov18.granregion.mixer.g++.4 new file mode 100644 index 0000000000..be690a7df5 --- /dev/null +++ b/examples/granregion/log.27Nov18.granregion.mixer.g++.4 @@ -0,0 +1,602 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable name string mixer + +thermo_modify flush yes +variable seed equal 14314 + +############################################### +# Particle parameters +################################################ + +variable rlo equal 0.3 +variable rhi equal 0.6 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.3 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.6 +variable skin equal ${rhi} +variable skin equal 0.6 + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable kn equal 10^5 +variable kt equal 0.2*${kn} +variable kt equal 0.2*100000 + +variable gravity equal 1.0 +variable density equal 1.0 + +variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 +variable a equal (-2.0*log(${coeffRes})/PI)^2 +variable a equal (-2.0*log(0.1)/PI)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 806.699778405191*0.5 + +variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) + +variable dt equal ${tcol}*0.02 +variable dt equal 0.00236257621510454*0.02 +timestep ${dt} +timestep 4.72515243020908e-05 + +############################################### + +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton on +atom_style sphere + +boundary p p f + +region boxreg block 0 20 0 20 0 20 +create_box 1 boxreg +Created orthogonal box = (0 0 0) to (20 20 20) + 1 by 2 by 2 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 +pair_coeff * * + +neighbor ${skin} bin +neighbor 0.6 bin +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 20, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d/newton + bin: standard +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +region insreg cylinder z 10 10 8 10 18 side in units box +region cylreg cylinder z 10 10 10 0 20 side in units box + +variable theta equal (step/400000)*2*PI + +region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box +region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box + +region mixer intersect 3 cylreg b1 b2 side in + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + +fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer + +fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 +Particle insertion: 444 every 84653 steps, 1000 by step 169307 + +#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke v_theta +WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:705) +thermo_modify flush yes lost warn + +run 200000 +Per MPI rank memory allocation (min/avg/max) = 5.817 | 5.817 | 5.817 Mbytes +Step CPU Atoms KinEng v_theta + 0 0 0 -0 0 + 1000 0.096722603 444 -0 0.015707963 + 2000 0.18796778 444 -0 0.031415927 + 3000 0.27916241 444 -0 0.04712389 + 4000 0.37111688 444 -0 0.062831853 + 5000 0.46224833 444 -0 0.078539816 + 6000 0.55190682 444 -0 0.09424778 + 7000 0.64120579 444 -0 0.10995574 + 8000 0.73025131 444 -0 0.12566371 + 9000 0.82121348 444 -0 0.14137167 + 10000 0.91006637 444 -0 0.15707963 + 11000 0.97034311 444 -0 0.1727876 + 12000 1.030247 444 -0 0.18849556 + 13000 1.0894752 444 -0 0.20420352 + 14000 1.1483686 444 -0 0.21991149 + 15000 1.2138393 444 -0 0.23561945 + 16000 1.2744856 444 -0 0.25132741 + 17000 1.3361425 444 -0 0.26703538 + 18000 1.3998857 444 -0 0.28274334 + 19000 1.4625463 444 -0 0.2984513 + 20000 1.5255082 444 -0 0.31415927 + 21000 1.5845048 444 -0 0.32986723 + 22000 1.6437175 444 -0 0.34557519 + 23000 1.7022173 444 -0 0.36128316 + 24000 1.7614172 444 -0 0.37699112 + 25000 1.8209105 444 -0 0.39269908 + 26000 1.8818901 444 -0 0.40840704 + 27000 1.9439991 444 -0 0.42411501 + 28000 2.0067189 444 -0 0.43982297 + 29000 2.0697014 444 -0 0.45553093 + 30000 2.1327429 444 -0 0.4712389 + 31000 2.1904151 444 -0 0.48694686 + 32000 2.2478669 444 -0 0.50265482 + 33000 2.3062997 444 -0 0.51836279 + 34000 2.3723967 444 -0 0.53407075 + 35000 2.4331915 444 -0 0.54977871 + 36000 2.4937904 444 -0 0.56548668 + 37000 2.5550685 444 -0 0.58119464 + 38000 2.6170652 444 -0 0.5969026 + 39000 2.6789875 444 -0 0.61261057 + 40000 2.7414019 444 -0 0.62831853 + 41000 2.799027 444 -0 0.64402649 + 42000 2.8570235 444 -0 0.65973446 + 43000 2.9140713 444 -0 0.67544242 + 44000 2.9702985 444 -0 0.69115038 + 45000 3.0274565 444 -0 0.70685835 + 46000 3.0860338 444 -0 0.72256631 + 47000 3.1450455 444 -0 0.73827427 + 48000 3.2057948 444 -0 0.75398224 + 49000 3.267339 444 -0 0.7696902 + 50000 3.3300545 444 -0 0.78539816 + 51000 3.3942592 444 -0 0.80110613 + 52000 3.4522727 444 -0 0.81681409 + 53000 3.5117693 444 -0 0.83252205 + 54000 3.5717957 444 -0 0.84823002 + 55000 3.6338761 444 -0 0.86393798 + 56000 3.7006576 444 -0 0.87964594 + 57000 3.7648654 444 -0 0.89535391 + 58000 3.829128 444 -0 0.91106187 + 59000 3.8930187 444 -0 0.92676983 + 60000 3.9581499 444 -0 0.9424778 + 61000 4.0213017 444 -0 0.95818576 + 62000 4.0822632 444 -0 0.97389372 + 63000 4.1443422 444 -0 0.98960169 + 64000 4.2072315 444 -0 1.0053096 + 65000 4.2711387 444 -0 1.0210176 + 66000 4.3361402 444 -0 1.0367256 + 67000 4.4031398 444 -0 1.0524335 + 68000 4.4698064 444 -0 1.0681415 + 69000 4.5374978 444 -0 1.0838495 + 70000 4.6051283 444 -0 1.0995574 + 71000 4.6694169 444 -0 1.1152654 + 72000 4.7335079 444 -0 1.1309734 + 73000 4.7967482 444 -0 1.1466813 + 74000 4.8603547 444 -0 1.1623893 + 75000 4.9250085 444 -0 1.1780972 + 76000 4.9909372 444 -0 1.1938052 + 77000 5.0578024 444 -0 1.2095132 + 78000 5.1250138 444 -0 1.2252211 + 79000 5.1929755 444 -0 1.2409291 + 80000 5.2627637 444 -0 1.2566371 + 81000 5.3280981 444 -0 1.272345 + 82000 5.3957336 444 -0 1.288053 + 83000 5.4648135 444 -0 1.303761 + 84000 5.5368683 444 -0 1.3194689 + 85000 5.6352935 888 -0 1.3351769 + 86000 5.7708502 888 -0 1.3508848 + 87000 5.9051492 888 -0 1.3665928 + 88000 6.0384896 888 -0 1.3823008 + 89000 6.1714747 888 -0 1.3980087 + 90000 6.3042989 888 -0 1.4137167 + 91000 6.4114611 888 -0 1.4294247 + 92000 6.5164247 888 -0 1.4451326 + 93000 6.6219602 888 -0 1.4608406 + 94000 6.728405 888 -0 1.4765485 + 95000 6.8411646 888 -0 1.4922565 + 96000 6.9479821 888 -0 1.5079645 + 97000 7.0569239 888 -0 1.5236724 + 98000 7.1673372 888 -0 1.5393804 + 99000 7.2778809 888 -0 1.5550884 + 100000 7.398834 888 -0 1.5707963 + 101000 7.5066864 888 -0 1.5865043 + 102000 7.6158357 888 -0 1.6022123 + 103000 7.725111 888 -0 1.6179202 + 104000 7.8344197 888 -0 1.6336282 + 105000 7.9532022 888 -0 1.6493361 + 106000 8.0643187 888 -0 1.6650441 + 107000 8.1765473 888 -0 1.6807521 + 108000 8.2890661 888 -0 1.69646 + 109000 8.4048562 888 -0 1.712168 + 110000 8.5208168 888 -0 1.727876 + 111000 8.6303153 888 -0 1.7435839 + 112000 8.7401052 888 -0 1.7592919 + 113000 8.8518219 888 -0 1.7749998 + 114000 8.9638157 888 -0 1.7907078 + 115000 9.0766122 888 -0 1.8064158 + 116000 9.1908746 888 -0 1.8221237 + 117000 9.306145 888 -0 1.8378317 + 118000 9.4229569 888 -0 1.8535397 + 119000 9.5407412 888 -0 1.8692476 + 120000 9.6574531 888 -0 1.8849556 + 121000 9.7683234 888 -0 1.9006636 + 122000 9.8812008 888 -0 1.9163715 + 123000 9.9952521 888 -0 1.9320795 + 124000 10.111879 888 -0 1.9477874 + 125000 10.228812 888 -0 1.9634954 + 126000 10.347842 888 -0 1.9792034 + 127000 10.47052 888 -0 1.9949113 + 128000 10.593136 888 -0 2.0106193 + 129000 10.718124 888 -0 2.0263273 + 130000 10.844211 888 -0 2.0420352 + 131000 10.959177 888 -0 2.0577432 + 132000 11.075781 888 -0 2.0734512 + 133000 11.191418 888 -0 2.0891591 + 134000 11.313376 888 -0 2.1048671 + 135000 11.432321 888 -0 2.120575 + 136000 11.551893 888 -0 2.136283 + 137000 11.672695 888 -0 2.151991 + 138000 11.793487 888 -0 2.1676989 + 139000 11.914089 888 -0 2.1834069 + 140000 12.037441 888 -0 2.1991149 + 141000 12.161974 888 -0 2.2148228 + 142000 12.286641 888 -0 2.2305308 + 143000 12.414012 888 -0 2.2462387 + 144000 12.540939 888 -0 2.2619467 + 145000 12.66985 888 -0 2.2776547 + 146000 12.79975 888 -0 2.2933626 + 147000 12.932702 888 -0 2.3090706 + 148000 13.066088 888 -0 2.3247786 + 149000 13.200814 888 -0 2.3404865 + 150000 13.33565 888 -0 2.3561945 + 151000 13.465995 888 -0 2.3719025 + 152000 13.586622 888 -0 2.3876104 + 153000 13.711423 888 -0 2.4033184 + 154000 13.835058 888 -0 2.4190263 + 155000 13.967661 888 -0 2.4347343 + 156000 14.100609 888 -0 2.4504423 + 157000 14.234485 888 -0 2.4661502 + 158000 14.373325 888 -0 2.4818582 + 159000 14.510608 888 -0 2.4975662 + 160000 14.651416 888 -0 2.5132741 + 161000 14.785767 888 -0 2.5289821 + 162000 14.921569 888 -0 2.54469 + 163000 15.058895 888 -0 2.560398 + 164000 15.198786 888 -0 2.576106 + 165000 15.341662 888 -0 2.5918139 + 166000 15.487128 888 -0 2.6075219 + 167000 15.649383 888 -0 2.6232299 + 168000 15.795388 888 -0 2.6389378 + 169000 15.942671 888 -0 2.6546458 + 170000 16.091824 1000 -0 2.6703538 + 171000 16.239863 1000 -0 2.6860617 + 172000 16.391118 1000 -0 2.7017697 + 173000 16.5417 1000 -0 2.7174776 + 174000 16.69479 1000 -0 2.7331856 + 175000 16.847412 1000 -0 2.7488936 + 176000 17.000374 1000 -0 2.7646015 + 177000 17.15471 1000 -0 2.7803095 + 178000 17.31284 1000 -0 2.7960175 + 179000 17.46991 1000 -0 2.8117254 + 180000 17.629018 1000 -0 2.8274334 + 181000 17.787736 1000 -0 2.8431414 + 182000 17.946197 1000 -0 2.8588493 + 183000 18.105271 1000 -0 2.8745573 + 184000 18.263731 1000 -0 2.8902652 + 185000 18.433277 1000 -0 2.9059732 + 186000 18.594456 1000 -0 2.9216812 + 187000 18.755532 1000 -0 2.9373891 + 188000 18.918447 1000 -0 2.9530971 + 189000 19.080359 1000 -0 2.9688051 + 190000 19.243927 1000 -0 2.984513 + 191000 19.395044 1000 -0 3.000221 + 192000 19.546837 1000 -0 3.0159289 + 193000 19.695827 1000 -0 3.0316369 + 194000 19.843856 1000 -0 3.0473449 + 195000 19.993821 1000 -0 3.0630528 + 196000 20.145787 1000 -0 3.0787608 + 197000 20.298114 1000 -0 3.0944688 + 198000 20.45074 1000 -0 3.1101767 + 199000 20.607595 1000 -0 3.1258847 + 200000 20.760979 1000 -0 3.1415927 +Loop time of 20.7611 on 4 procs for 200000 steps with 1000 atoms + +Performance: 39328.699 tau/day, 9633.409 timesteps/s +98.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.57172 | 0.93292 | 1.2995 | 37.1 | 4.49 +Neigh | 0.015648 | 0.018747 | 0.02175 | 2.1 | 0.09 +Comm | 3.17 | 3.6151 | 4.0856 | 23.0 | 17.41 +Output | 0.0051017 | 0.012686 | 0.033359 | 10.6 | 0.06 +Modify | 12.36 | 13.269 | 14.095 | 21.8 | 63.91 +Other | | 2.912 | | | 14.03 + +Nlocal: 250 ave 270 max 230 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 297 ave 337 max 234 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 982.5 ave 1580 max 496 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 3930 +Ave neighs/atom = 3.93 +Neighbor list builds = 218 +Dangerous builds = 0 +unfix ins +run 200000 +Per MPI rank memory allocation (min/avg/max) = 12 | 12.19 | 12.35 Mbytes +Step CPU Atoms KinEng v_theta + 200000 0 1000 0.89289812 3.1415927 + 201000 0.15554476 1000 0.90162438 3.1573006 + 202000 0.31118774 1000 0.89175077 3.1730086 + 203000 0.47266722 1000 0.88068523 3.1887165 + 204000 0.64758801 1000 0.88775074 3.2044245 + 205000 0.85137105 1000 0.89009449 3.2201325 + 206000 1.0712745 1000 0.89031724 3.2358404 + 207000 1.3620427 1000 0.90901476 3.2515484 + 208000 1.6051998 1000 0.91977358 3.2672564 + 209000 1.7975032 1000 0.92044257 3.2829643 + 210000 1.9654117 1000 0.90550844 3.2986723 + 211000 2.1186137 1000 0.90179135 3.3143802 + 212000 2.2714169 1000 0.90474936 3.3300882 + 213000 2.4236252 1000 0.9011002 3.3457962 + 214000 2.5737655 1000 0.89619815 3.3615041 + 215000 2.7326233 1000 0.89129064 3.3772121 + 216000 2.8794787 1000 0.88785486 3.3929201 + 217000 3.0264313 1000 0.89448821 3.408628 + 218000 3.1743443 1000 0.89323746 3.424336 + 219000 3.3225086 1000 0.88176869 3.440044 + 220000 3.4717121 1000 0.86989815 3.4557519 + 221000 3.6229391 1000 0.85900389 3.4714599 + 222000 3.7768724 1000 0.85440461 3.4871678 + 223000 3.9287963 1000 0.8604449 3.5028758 + 224000 4.082505 1000 0.84537374 3.5185838 + 225000 4.234731 1000 0.84526488 3.5342917 + 226000 4.3872988 1000 0.85877362 3.5499997 + 227000 4.5396216 1000 0.86762074 3.5657077 + 228000 4.7092509 1000 0.86460359 3.5814156 + 229000 4.8631954 1000 0.85409682 3.5971236 + 230000 5.0194352 1000 0.83902718 3.6128316 + 231000 5.1765387 1000 0.83908755 3.6285395 + 232000 5.3335299 1000 0.83178808 3.6442475 + 233000 5.4917257 1000 0.83369584 3.6599554 + 234000 5.654233 1000 0.8530074 3.6756634 + 235000 5.8163757 1000 0.86385009 3.6913714 + 236000 5.9791231 1000 0.86453337 3.7070793 + 237000 6.1401029 1000 0.86137572 3.7227873 + 238000 6.300632 1000 0.8656285 3.7384953 + 239000 6.4597898 1000 0.85993724 3.7542032 + 240000 6.6216707 1000 0.8484153 3.7699112 + 241000 6.7793672 1000 0.84624799 3.7856191 + 242000 6.939244 1000 0.83739227 3.8013271 + 243000 7.1013088 1000 0.83026469 3.8170351 + 244000 7.267416 1000 0.81060567 3.832743 + 245000 7.4318523 1000 0.81081038 3.848451 + 246000 7.6077905 1000 0.80857771 3.864159 + 247000 7.7763391 1000 0.80353315 3.8798669 + 248000 7.9485247 1000 0.80191903 3.8955749 + 249000 8.1208956 1000 0.79865102 3.9112829 + 250000 8.2921841 1000 0.79407385 3.9269908 + 251000 8.4614651 1000 0.7880275 3.9426988 + 252000 8.6266186 1000 0.79212521 3.9584067 + 253000 8.7913449 1000 0.78976714 3.9741147 + 254000 8.9596558 1000 0.79720779 3.9898227 + 255000 9.1278918 1000 0.79329363 4.0055306 + 256000 9.3016815 1000 0.80851295 4.0212386 + 257000 9.4701304 1000 0.82322071 4.0369466 + 258000 9.6399531 1000 0.83042211 4.0526545 + 259000 9.8090186 1000 0.82773068 4.0683625 + 260000 9.9798045 1000 0.8246773 4.0840704 + 261000 10.148952 1000 0.81374287 4.0997784 + 262000 10.318855 1000 0.79936963 4.1154864 + 263000 10.496092 1000 0.78124408 4.1311943 + 264000 10.671031 1000 0.77790646 4.1469023 + 265000 10.843052 1000 0.77212005 4.1626103 + 266000 11.01867 1000 0.77977752 4.1783182 + 267000 11.192151 1000 0.79237542 4.1940262 + 268000 11.362491 1000 0.80631398 4.2097342 + 269000 11.53223 1000 0.82380407 4.2254421 + 270000 11.7123 1000 0.82477127 4.2411501 + 271000 11.883593 1000 0.81655074 4.256858 + 272000 12.052348 1000 0.80678676 4.272566 + 273000 12.220196 1000 0.79162789 4.288274 + 274000 12.395164 1000 0.78896081 4.3039819 + 275000 12.569757 1000 0.77904648 4.3196899 + 276000 12.748754 1000 0.78252999 4.3353979 + 277000 12.91648 1000 0.78293295 4.3511058 + 278000 13.086087 1000 0.78311337 4.3668138 + 279000 13.260159 1000 0.77657634 4.3825218 + 280000 13.428503 1000 0.76835711 4.3982297 + 281000 13.596094 1000 0.75586438 4.4139377 + 282000 13.763325 1000 0.74600306 4.4296456 + 283000 13.932867 1000 0.73228762 4.4453536 + 284000 14.098865 1000 0.72344939 4.4610616 + 285000 14.269317 1000 0.72160289 4.4767695 + 286000 14.441196 1000 0.71321619 4.4924775 + 287000 14.614458 1000 0.72631772 4.5081855 + 288000 14.783358 1000 0.74390396 4.5238934 + 289000 14.953564 1000 0.77320352 4.5396014 + 290000 15.12428 1000 0.77249469 4.5553093 + 291000 15.283974 1000 0.7583723 4.5710173 + 292000 15.449553 1000 0.74568347 4.5867253 + 293000 15.611965 1000 0.74108034 4.6024332 + 294000 15.770807 1000 0.72706174 4.6181412 + 295000 15.927151 1000 0.71122597 4.6338492 + 296000 16.086734 1000 0.70272297 4.6495571 + 297000 16.245418 1000 0.6945394 4.6652651 + 298000 16.406617 1000 0.69541258 4.6809731 + 299000 16.568989 1000 0.71696092 4.696681 + 300000 16.754911 1000 0.72939561 4.712389 + 301000 16.919453 1000 0.73621801 4.7280969 + 302000 17.07794 1000 0.72052605 4.7438049 + 303000 17.234397 1000 0.71057318 4.7595129 + 304000 17.39014 1000 0.70014814 4.7752208 + 305000 17.550789 1000 0.68855925 4.7909288 + 306000 17.718802 1000 0.68665019 4.8066368 + 307000 17.874036 1000 0.6831349 4.8223447 + 308000 18.029367 1000 0.67929468 4.8380527 + 309000 18.188065 1000 0.67833006 4.8537606 + 310000 18.348243 1000 0.67764037 4.8694686 + 311000 18.512475 1000 0.68271978 4.8851766 + 312000 18.676519 1000 0.69021026 4.9008845 + 313000 18.836426 1000 0.68795473 4.9165925 + 314000 18.997681 1000 0.68308892 4.9323005 + 315000 19.158794 1000 0.68086977 4.9480084 + 316000 19.318186 1000 0.67879169 4.9637164 + 317000 19.479364 1000 0.68128526 4.9794244 + 318000 19.645085 1000 0.68718719 4.9951323 + 319000 19.806831 1000 0.68419901 5.0108403 + 320000 19.97005 1000 0.68045269 5.0265482 + 321000 20.130643 1000 0.68430036 5.0422562 + 322000 20.291637 1000 0.68195368 5.0579642 + 323000 20.457605 1000 0.67964011 5.0736721 + 324000 20.621699 1000 0.67681293 5.0893801 + 325000 20.78525 1000 0.67601868 5.1050881 + 326000 20.950321 1000 0.67600265 5.120796 + 327000 21.11346 1000 0.68484094 5.136504 + 328000 21.276964 1000 0.68526189 5.152212 + 329000 21.440971 1000 0.67602072 5.1679199 + 330000 21.609791 1000 0.68222852 5.1836279 + 331000 21.773574 1000 0.68825647 5.1993358 + 332000 21.93854 1000 0.68168415 5.2150438 + 333000 22.102281 1000 0.67460357 5.2307518 + 334000 22.265741 1000 0.67747925 5.2464597 + 335000 22.436954 1000 0.681763 5.2621677 + 336000 22.614367 1000 0.67611867 5.2778757 + 337000 22.779064 1000 0.66903217 5.2935836 + 338000 22.945739 1000 0.6684293 5.3092916 + 339000 23.111375 1000 0.66465194 5.3249995 + 340000 23.278674 1000 0.66226848 5.3407075 + 341000 23.444642 1000 0.66407188 5.3564155 + 342000 23.614615 1000 0.65762812 5.3721234 + 343000 23.785007 1000 0.66936507 5.3878314 + 344000 23.956265 1000 0.67424224 5.4035394 + 345000 24.129057 1000 0.684271 5.4192473 + 346000 24.303073 1000 0.68294352 5.4349553 + 347000 24.475812 1000 0.69795697 5.4506633 + 348000 24.652771 1000 0.69818863 5.4663712 + 349000 24.830973 1000 0.69578798 5.4820792 + 350000 25.00923 1000 0.69377251 5.4977871 + 351000 25.185421 1000 0.69638202 5.5134951 + 352000 25.363647 1000 0.70115823 5.5292031 + 353000 25.540517 1000 0.70891635 5.544911 + 354000 25.718709 1000 0.70876639 5.560619 + 355000 25.893633 1000 0.71130235 5.576327 + 356000 26.068423 1000 0.69380913 5.5920349 + 357000 26.243801 1000 0.67934899 5.6077429 + 358000 26.418883 1000 0.67024516 5.6234508 + 359000 26.594722 1000 0.66145645 5.6391588 + 360000 26.770322 1000 0.65335546 5.6548668 + 361000 26.946396 1000 0.65495192 5.6705747 + 362000 27.12296 1000 0.64973833 5.6862827 + 363000 27.298461 1000 0.64532381 5.7019907 + 364000 27.473586 1000 0.64282855 5.7176986 + 365000 27.653872 1000 0.64451862 5.7334066 + 366000 27.830317 1000 0.64366439 5.7491146 + 367000 28.007037 1000 0.64395479 5.7648225 + 368000 28.184079 1000 0.65827587 5.7805305 + 369000 28.376009 1000 0.66311341 5.7962384 + 370000 28.557287 1000 0.66165026 5.8119464 + 371000 28.736569 1000 0.66878374 5.8276544 + 372000 28.91063 1000 0.66944548 5.8433623 + 373000 29.084648 1000 0.66061945 5.8590703 + 374000 29.258649 1000 0.65320954 5.8747783 + 375000 29.433156 1000 0.64641195 5.8904862 + 376000 29.611781 1000 0.64631388 5.9061942 + 377000 29.78531 1000 0.64232398 5.9219022 + 378000 29.955917 1000 0.63805257 5.9376101 + 379000 30.126378 1000 0.63666047 5.9533181 + 380000 30.297285 1000 0.63651856 5.969026 + 381000 30.471635 1000 0.6377374 5.984734 + 382000 30.644813 1000 0.64750107 6.000442 + 383000 30.816208 1000 0.65655138 6.0161499 + 384000 30.986444 1000 0.65408935 6.0318579 + 385000 31.156501 1000 0.64437236 6.0475659 + 386000 31.327665 1000 0.63862174 6.0632738 + 387000 31.49731 1000 0.64133807 6.0789818 + 388000 31.682031 1000 0.64174374 6.0946897 + 389000 31.85148 1000 0.64480071 6.1103977 + 390000 32.020336 1000 0.64982943 6.1261057 + 391000 32.187634 1000 0.6461109 6.1418136 + 392000 32.357282 1000 0.64044412 6.1575216 + 393000 32.527796 1000 0.64662995 6.1732296 + 394000 32.704323 1000 0.65330527 6.1889375 + 395000 32.880643 1000 0.66026265 6.2046455 + 396000 33.048614 1000 0.6718969 6.2203535 + 397000 33.222059 1000 0.66481385 6.2360614 + 398000 33.391738 1000 0.66685494 6.2517694 + 399000 33.560431 1000 0.6612594 6.2674773 + 400000 33.729715 1000 0.65289572 6.2831853 +Loop time of 33.7298 on 4 procs for 200000 steps with 1000 atoms + +Performance: 24207.249 tau/day, 5929.470 timesteps/s +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.6748 | 2.6848 | 3.6646 | 58.4 | 7.96 +Neigh | 0.021206 | 0.026438 | 0.03191 | 3.1 | 0.08 +Comm | 6.133 | 7.3745 | 8.6652 | 45.0 | 21.86 +Output | 0.0053763 | 0.016101 | 0.044719 | 13.0 | 0.05 +Modify | 18.26 | 20.115 | 22.413 | 39.2 | 59.64 +Other | | 3.513 | | | 10.42 + +Nlocal: 250 ave 266 max 230 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 401.5 ave 476 max 325 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 1264 ave 1634 max 895 min +Histogram: 1 0 1 0 0 0 0 1 0 1 + +Total # of neighbors = 5056 +Ave neighs/atom = 5.056 +Neighbor list builds = 160 +Dangerous builds = 0 +Total wall time: 0:00:54 diff --git a/examples/granregion/log.6Oct16.granregion.box.g++.1 b/examples/granregion/log.6Oct16.granregion.box.g++.1 deleted file mode 100644 index ae2ec694e9..0000000000 --- a/examples/granregion/log.6Oct16.granregion.box.g++.1 +++ /dev/null @@ -1,468 +0,0 @@ -LAMMPS (5 Oct 2016) -# pouring spheres into container box - -units lj -atom_style sphere -boundary f f f -dimension 3 -comm_modify vel yes - -region box block -10 10 -10 10 -10 10 units box -create_box 2 box -Created orthogonal box = (-10 -10 -10) to (10 10 10) - 1 by 1 by 1 MPI processor grid - -pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 -pair_coeff * * gran/hooke - -region container block -6 6 -6 6 -6 6 units box -fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 2 all nve/sphere -fix 3 all gravity 1.0 vector 0 0 -1 - -region slab block -2 2 -2 2 -2 2 units box -fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore -Particle insertion: 48 every 566 steps, 100 by step 1133 - -timestep 0.005 - -compute 1 all temp -compute_modify 1 dynamic yes - -compute 2 all temp/sphere -compute_modify 2 dynamic yes - -thermo 100 -thermo_style custom step atoms temp c_1 c_2 press -thermo_modify lost ignore -compute_modify thermo_temp dynamic yes - -#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 -#dump_modify 2 pad 5 - -run 5000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 31 31 31 -Memory usage per processor = 0.201172 Mbytes -Step Atoms Temp c_1 c_2 Press - 0 0 0 0 0 0 - 100 21 0.54270729 0.54270729 0.26473526 0.0013567682 - 200 21 0.87606961 0.87606961 0.42735103 0.002190174 - 300 21 1.1428374 1.1428374 0.55748167 0.0028570936 - 400 21 1.3543103 1.3543103 0.66829516 0.0033857758 - 500 21 1.0677786 1.0677786 0.53582407 0.0045048164 - 600 56 0.6744286 0.6744286 0.3502938 0.0047464584 - 700 56 0.75569283 0.75569283 0.39779462 0.0051953882 - 800 56 0.61597505 0.61597505 0.32943642 0.0086022783 - 900 56 0.65260802 0.65260802 0.34474044 0.0059298996 - 1000 56 0.51624952 0.51624952 0.28326898 0.0067827337 - 1100 56 0.46050076 0.46050076 0.25656319 0.0061891094 - 1200 81 0.39112377 0.39112377 0.21690744 0.0086559347 - 1300 81 0.33302801 0.33302801 0.19110222 0.0033381288 - 1400 81 0.39333146 0.39333146 0.21220965 0.0041348597 - 1500 81 0.35493951 0.35493951 0.19924958 0.00373736 - 1600 81 0.34154491 0.34154491 0.19031147 0.005349672 - 1700 100 0.25598828 0.25598828 0.14171498 0.0092236643 - 1800 100 0.2114074 0.2114074 0.12162965 0.0027213483 - 1900 100 0.21810423 0.21810423 0.12176698 0.0036436034 - 2000 100 0.2553198 0.2553198 0.13900087 0.0032844504 - 2100 100 0.24809937 0.24809937 0.13753654 0.0088764373 - 2200 100 0.22455642 0.22455642 0.12500977 0.0043517009 - 2300 100 0.19586874 0.19586874 0.11064996 0.0055178814 - 2400 100 0.059619074 0.059619074 0.045535036 0.00079051539 - 2500 100 0.052222462 0.052222462 0.038563852 0.00098981299 - 2600 100 0.036930777 0.036930777 0.027579114 0.0012285499 - 2700 100 0.027937818 0.027937818 0.020587353 0.00063085447 - 2800 100 0.02103783 0.02103783 0.015469157 0.00050316582 - 2900 100 0.010408128 0.010408128 0.0084894275 0.00035440391 - 3000 100 0.0077664382 0.0077664382 0.0068149074 0.0011153614 - 3100 100 0.0088789208 0.0088789208 0.0070143391 0.00032679783 - 3200 100 0.0077683432 0.0077683432 0.0059711038 0.00044762363 - 3300 100 0.00411 0.00411 0.00372409 0.00015328221 - 3400 100 0.0039192171 0.0039192171 0.0032409072 9.3603399e-05 - 3500 100 0.0023532199 0.0023532199 0.0020924799 0.00049044152 - 3600 100 0.0022544513 0.0022544513 0.0019545724 8.1086108e-05 - 3700 100 0.0012696379 0.0012696379 0.0013134108 5.0058058e-05 - 3800 100 0.0012035225 0.0012035225 0.0012490584 6.0331967e-05 - 3900 100 0.00080361803 0.00080361803 0.00094424552 6.7229227e-05 - 4000 100 0.00060715659 0.00060715659 0.00076521759 6.7029916e-05 - 4100 100 0.00058510487 0.00058510487 0.00073844578 5.5867098e-05 - 4200 100 0.00046832309 0.00046832309 0.00060848748 5.3853715e-05 - 4300 100 0.00045207186 0.00045207186 0.00057825336 4.8367831e-05 - 4400 100 0.00041874845 0.00041874845 0.00053103589 8.666037e-05 - 4500 100 0.00041136295 0.00041136295 0.00052246056 6.0456585e-05 - 4600 100 0.00041021147 0.00041021147 0.0005190668 4.8701604e-05 - 4700 100 0.00037176253 0.00037176253 0.00049156279 5.8874891e-05 - 4800 100 0.0003262417 0.0003262417 0.00045551846 5.0610728e-05 - 4900 100 0.00028093583 0.00028093583 0.00042099654 4.6558605e-05 - 5000 100 0.00027730599 0.00027730599 0.00041664922 4.7053044e-05 -Loop time of 0.081454 on 1 procs for 5000 steps with 100 atoms - -Performance: 26518022.146 tau/day, 61384.311 timesteps/s -99.4% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0085223 | 0.0085223 | 0.0085223 | 0.0 | 10.46 -Neigh | 0.01466 | 0.01466 | 0.01466 | 0.0 | 18.00 -Comm | 0.00076532 | 0.00076532 | 0.00076532 | 0.0 | 0.94 -Output | 0.00052285 | 0.00052285 | 0.00052285 | 0.0 | 0.64 -Modify | 0.05317 | 0.05317 | 0.05317 | 0.0 | 65.28 -Other | | 0.003814 | | | 4.68 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 158 ave 158 max 158 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 158 -Ave neighs/atom = 1.58 -Neighbor list builds = 306 -Dangerous builds = 0 - -region container delete -variable theta equal (step-5000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 -run 5000 -Memory usage per processor = 5.26337 Mbytes -Step Atoms Temp c_1 c_2 Press - 5000 100 0.00027730599 0.00027730599 0.00041664922 4.705763e-05 - 5100 100 0.60717077 0.60717077 0.33118944 0.010686501 - 5200 100 0.64991179 0.64991179 0.35498767 0.011370453 - 5300 100 0.72038713 0.72038713 0.38745069 0.010507667 - 5400 100 0.81357499 0.81357499 0.42946808 0.012920419 - 5500 100 0.90488411 0.90488411 0.46803321 0.015077428 - 5600 100 0.99065617 0.99065617 0.50811954 0.015556572 - 5700 100 1.0701203 1.0701203 0.54641187 0.016464366 - 5800 100 1.1351242 1.1351242 0.57607707 0.017832476 - 5900 100 1.1883602 1.1883602 0.60022389 0.019571838 - 6000 100 1.2153421 1.2153421 0.61245652 0.020549414 - 6100 100 1.2369293 1.2369293 0.62229634 0.01827529 - 6200 100 1.2556883 1.2556883 0.63207905 0.020286322 - 6300 100 1.2618555 1.2618555 0.63610311 0.019844583 - 6400 100 1.2671678 1.2671678 0.63873131 0.019817249 - 6500 100 1.2875312 1.2875312 0.64728693 0.020097362 - 6600 100 1.3014055 1.3014055 0.65413071 0.020000886 - 6700 100 1.2904021 1.2904021 0.6485358 0.020009625 - 6800 100 1.2962767 1.2962767 0.65088367 0.021340143 - 6900 100 1.3056081 1.3056081 0.65490644 0.020455771 - 7000 100 1.3116731 1.3116731 0.65766216 0.020475061 - 7100 100 1.319457 1.319457 0.66105016 0.020937651 - 7200 100 1.3213585 1.3213585 0.66207982 0.02120792 - 7300 100 1.3232411 1.3232411 0.66392391 0.021040683 - 7400 100 1.3300163 1.3300163 0.66599805 0.021202273 - 7500 100 1.3350122 1.3350122 0.66894534 0.021161833 - 7600 100 1.3344633 1.3344633 0.6688403 0.020871936 - 7700 100 1.3492825 1.3492825 0.6751371 0.021415859 - 7800 100 1.3539647 1.3539647 0.67757279 0.021306442 - 7900 100 1.3527157 1.3527157 0.67722774 0.021793531 - 8000 100 1.3526931 1.3526931 0.67713399 0.022973395 - 8100 100 1.3568279 1.3568279 0.67936578 0.021422428 - 8200 100 1.3599258 1.3599258 0.68113142 0.021397012 - 8300 100 1.3601893 1.3601893 0.68165656 0.021643375 - 8400 100 1.3752164 1.3752164 0.68788213 0.022208765 - 8500 100 1.3821458 1.3821458 0.69165274 0.022015877 - 8600 100 1.3784691 1.3784691 0.68964478 0.022144188 - 8700 100 1.3801422 1.3801422 0.6904093 0.0220402 - 8800 100 1.3900051 1.3900051 0.6947875 0.02216362 - 8900 100 1.3897902 1.3897902 0.69427134 0.023078569 - 9000 100 1.3909918 1.3909918 0.69456955 0.022043699 - 9100 100 1.3925028 1.3925028 0.69519141 0.022180156 - 9200 100 1.3923277 1.3923277 0.69512657 0.022113729 - 9300 100 1.3945193 1.3945193 0.69625374 0.022344694 - 9400 100 1.3960782 1.3960782 0.69705144 0.022181158 - 9500 100 1.3932407 1.3932407 0.69560365 0.022129998 - 9600 100 1.3925489 1.3925489 0.69532399 0.022124653 - 9700 100 1.3935299 1.3935299 0.69581607 0.022258368 - 9800 100 1.3933949 1.3933949 0.69579137 0.022209028 - 9900 100 1.3934712 1.3934712 0.69587898 0.022214942 - 10000 100 1.3935828 1.3935828 0.69598655 0.022231414 -Loop time of 0.261407 on 1 procs for 5000 steps with 100 atoms - -Performance: 8262972.563 tau/day, 19127.251 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.042233 | 0.042233 | 0.042233 | 0.0 | 16.16 -Neigh | 0.035131 | 0.035131 | 0.035131 | 0.0 | 13.44 -Comm | 0.0010462 | 0.0010462 | 0.0010462 | 0.0 | 0.40 -Output | 0.00051785 | 0.00051785 | 0.00051785 | 0.0 | 0.20 -Modify | 0.17687 | 0.17687 | 0.17687 | 0.0 | 67.66 -Other | | 0.00561 | | | 2.15 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 187 ave 187 max 187 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 187 -Ave neighs/atom = 1.87 -Neighbor list builds = 634 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Memory usage per processor = 5.26337 Mbytes -Step Atoms Temp c_1 c_2 Press - 10000 100 1.3935828 1.3935828 0.69598655 0.02230659 - 10100 100 0.3402861 0.3402861 0.19584226 0.014767914 - 10200 100 0.19064555 0.19064555 0.12536788 0.0025413789 - 10300 100 0.13281358 0.13281358 0.10275768 0.002843208 - 10400 100 0.10124671 0.10124671 0.077914135 0.0017745353 - 10500 100 0.082636734 0.082636734 0.063857622 0.001419336 - 10600 100 0.066744462 0.066744462 0.051927437 0.0010830674 - 10700 100 0.060778462 0.060778462 0.047461784 0.0011418844 - 10800 100 0.043437178 0.043437178 0.032805669 0.0017050393 - 10900 100 0.036483219 0.036483219 0.027387805 0.00086936813 - 11000 100 0.027639076 0.027639076 0.021221241 0.00054920607 - 11100 100 0.023614696 0.023614696 0.018445634 0.00058724552 - 11200 100 0.020103248 0.020103248 0.015933089 0.00072830275 - 11300 100 0.018645345 0.018645345 0.014559759 0.0002319388 - 11400 100 0.015499672 0.015499672 0.01248828 0.00036020862 - 11500 100 0.013421296 0.013421296 0.010743248 0.00043093929 - 11600 100 0.011214892 0.011214892 0.0089653924 0.00059789544 - 11700 100 0.0086660806 0.0086660806 0.0070563902 0.00029684573 - 11800 100 0.0064777244 0.0064777244 0.0052946156 0.00046466386 - 11900 100 0.0059360881 0.0059360881 0.0048568813 8.361561e-05 - 12000 100 0.0045341025 0.0045341025 0.003883229 0.00016408047 - 12100 100 0.0042504415 0.0042504415 0.0036944958 6.5005147e-05 - 12200 100 0.0041367637 0.0041367637 0.0035928232 7.3025698e-05 - 12300 100 0.0037700129 0.0037700129 0.003283398 6.381318e-05 - 12400 100 0.0033494476 0.0033494476 0.0029274495 4.7731105e-05 - 12500 100 0.0030903175 0.0030903175 0.0027068073 6.797313e-05 - 12600 100 0.0026406999 0.0026406999 0.0023315387 0.0002371331 - 12700 100 0.0025020713 0.0025020713 0.0022367855 4.2787276e-05 - 12800 100 0.0022977381 0.0022977381 0.0020778307 3.9744567e-05 - 12900 100 0.002039634 0.002039634 0.0018862012 0.00011669223 - 13000 100 0.0018044702 0.0018044702 0.00171399 0.00013835538 - 13100 100 0.0016600965 0.0016600965 0.0015553191 3.2320019e-05 - 13200 100 0.0015596204 0.0015596204 0.001486374 1.9246911e-05 - 13300 100 0.001316505 0.001316505 0.0012105249 9.1469679e-05 - 13400 100 0.0012517536 0.0012517536 0.0011525753 4.815292e-05 - 13500 100 0.0010827608 0.0010827608 0.001038339 2.0913017e-05 - 13600 100 0.0009863908 0.0009863908 0.00095924929 9.7716736e-05 - 13700 100 0.00094543599 0.00094543599 0.00092425645 1.378887e-05 - 13800 100 0.00087893271 0.00087893271 0.00086801608 1.8981177e-05 - 13900 100 0.00080241572 0.00080241572 0.0007930026 5.0987122e-05 - 14000 100 0.00070705631 0.00070705631 0.00069238137 1.2900066e-05 - 14100 100 0.0006525032 0.0006525032 0.000637991 0.00010838464 - 14200 100 0.00059338444 0.00059338444 0.00057560454 7.3431324e-06 - 14300 100 0.00058641228 0.00058641228 0.00056944735 7.256852e-06 - 14400 100 0.00056221112 0.00056221112 0.00054625666 8.1343426e-06 - 14500 100 0.00055493127 0.00055493127 0.00053957583 1.1713058e-05 - 14600 100 0.00052854921 0.00052854921 0.00051816618 8.6527225e-06 - 14700 100 0.00052630581 0.00052630581 0.00051584277 6.4890475e-06 - 14800 100 0.00052563819 0.00052563819 0.00051493123 1.2687153e-05 - 14900 100 0.00052131364 0.00052131364 0.00050917244 7.4589995e-08 - 15000 100 0.00051902191 0.00051902191 0.00050725364 6.4228962e-06 -Loop time of 0.0895741 on 1 procs for 5000 steps with 100 atoms - -Performance: 24114113.723 tau/day, 55819.708 timesteps/s -99.3% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0098987 | 0.0098987 | 0.0098987 | 0.0 | 11.05 -Neigh | 0.0061045 | 0.0061045 | 0.0061045 | 0.0 | 6.81 -Comm | 0.00069976 | 0.00069976 | 0.00069976 | 0.0 | 0.78 -Output | 0.00049758 | 0.00049758 | 0.00049758 | 0.0 | 0.56 -Modify | 0.068435 | 0.068435 | 0.068435 | 0.0 | 76.40 -Other | | 0.003939 | | | 4.40 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 160 ave 160 max 160 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 160 -Ave neighs/atom = 1.6 -Neighbor list builds = 111 -Dangerous builds = 0 - -region container delete -variable theta equal (step-15000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 -run 5000 -Memory usage per processor = 5.26337 Mbytes -Step Atoms Temp c_1 c_2 Press - 15000 100 0.00051902191 0.00051902191 0.00050725364 6.4228962e-06 - 15100 100 1.1235353 1.1235353 0.72003773 0.013686681 - 15200 100 1.0778556 1.0778556 0.69137925 0.013478363 - 15300 100 1.069015 1.069015 0.69798184 0.014165255 - 15400 100 1.2249943 1.2249943 0.79096059 0.020933395 - 15500 100 1.5225664 1.5225664 0.94822282 0.023932611 - 15600 100 1.5867194 1.5867194 0.98143504 0.024565132 - 15700 100 1.6595267 1.6595267 1.0203985 0.025152432 - 15800 100 1.8188027 1.8188027 1.0857586 0.031597641 - 15900 100 1.9234102 1.9234102 1.1099361 0.032381895 - 16000 100 2.039435 2.039435 1.1656948 0.032501981 - 16100 100 2.17315 2.17315 1.2265552 0.032675825 - 16200 100 2.2017279 2.2017279 1.23995 0.028634878 - 16300 100 2.3510902 2.3510902 1.3055642 0.03248003 - 16400 100 2.373932 2.373932 1.3059254 0.031292969 - 16500 100 2.5010862 2.5010862 1.3607219 0.032322054 - 16600 100 2.4815092 2.4815092 1.3524159 0.031223889 - 16700 100 2.6549226 2.6549226 1.4383508 0.033713507 - 16800 100 2.8087564 2.8087564 1.5261538 0.036598837 - 16900 100 2.8653588 2.8653588 1.5649123 0.035890231 - 17000 100 2.903748 2.903748 1.5907716 0.038038745 - 17100 100 2.9679376 2.9679376 1.6195577 0.051771432 - 17200 100 2.9632377 2.9632377 1.6233074 0.039825751 - 17300 100 3.0436883 3.0436883 1.6591248 0.042862982 - 17400 100 3.0969015 3.0969015 1.6811582 0.042104811 - 17500 100 3.0827135 3.0827135 1.691414 0.045839327 - 17600 100 3.0854805 3.0854805 1.689399 0.041770144 - 17700 100 3.07523 3.07523 1.6685518 0.045104715 - 17800 100 2.9610899 2.9610899 1.6349099 0.039060791 - 17900 100 2.8002989 2.8002989 1.5665223 0.037917927 - 18000 100 2.9139644 2.9139644 1.6206891 0.050841302 - 18100 100 3.0134757 3.0134757 1.6673916 0.040967255 - 18200 100 3.0731184 3.0731184 1.6777507 0.043503474 - 18300 100 3.0915242 3.0915242 1.6843452 0.040157898 - 18400 100 3.098896 3.098896 1.6904524 0.039629218 - 18500 100 3.1651814 3.1651814 1.7290259 0.042604953 - 18600 100 3.353247 3.353247 1.8236992 0.045132486 - 18700 100 3.540156 3.540156 1.9078363 0.046602063 - 18800 100 3.6395129 3.6395129 1.9578976 0.045659959 - 18900 100 3.7638134 3.7638134 2.0179445 0.051061068 - 19000 100 3.7603453 3.7603453 2.003355 0.057123184 - 19100 100 3.9218495 3.9218495 2.0968869 0.057671742 - 19200 100 3.9924222 3.9924222 2.1321955 0.051824898 - 19300 100 3.9690887 3.9690887 2.1270643 0.054832867 - 19400 100 3.9408481 3.9408481 2.1146593 0.057020024 - 19500 100 3.8313782 3.8313782 2.0610797 0.055164704 - 19600 100 3.8317496 3.8317496 2.0668123 0.049840804 - 19700 100 3.6068628 3.6068628 1.964227 0.05142407 - 19800 100 3.5477437 3.5477437 1.9314948 0.051076014 - 19900 100 3.6526881 3.6526881 1.9855353 0.047130029 - 20000 100 3.7243709 3.7243709 2.0380212 0.048446835 -Loop time of 0.206397 on 1 procs for 5000 steps with 100 atoms - -Performance: 10465265.522 tau/day, 24225.152 timesteps/s -100.3% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.014297 | 0.014297 | 0.014297 | 0.0 | 6.93 -Neigh | 0.050213 | 0.050213 | 0.050213 | 0.0 | 24.33 -Comm | 0.0011115 | 0.0011115 | 0.0011115 | 0.0 | 0.54 -Output | 0.00051141 | 0.00051141 | 0.00051141 | 0.0 | 0.25 -Modify | 0.13415 | 0.13415 | 0.13415 | 0.0 | 65.00 -Other | | 0.006114 | | | 2.96 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 142 ave 142 max 142 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 142 -Ave neighs/atom = 1.42 -Neighbor list builds = 899 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Memory usage per processor = 5.26337 Mbytes -Step Atoms Temp c_1 c_2 Press - 20000 100 3.7243709 3.7243709 2.0380212 0.048156434 - 20100 100 1.1186527 1.1186527 0.69104385 0.014964891 - 20200 100 0.91445605 0.91445605 0.57005236 0.011324474 - 20300 100 0.8936601 0.8936601 0.55534411 0.011071843 - 20400 100 0.90773143 0.90773143 0.55999953 0.011254101 - 20500 100 0.91995508 0.91995508 0.55837916 0.011548541 - 20600 100 0.91682167 0.91682167 0.54095261 0.012563797 - 20700 100 0.97806337 0.97806337 0.56016442 0.012396925 - 20800 100 0.97778738 0.97778738 0.55606194 0.015441479 - 20900 100 0.77253213 0.77253213 0.44636799 0.011428992 - 21000 100 0.63053468 0.63053468 0.35995394 0.01005502 - 21100 100 0.25437539 0.25437539 0.16544433 0.004628738 - 21200 100 0.11828032 0.11828032 0.087911985 0.0037076362 - 21300 100 0.11219312 0.11219312 0.080957112 0.0015847347 - 21400 100 0.10765357 0.10765357 0.074676159 0.0022823419 - 21500 100 0.060787093 0.060787093 0.046135213 0.00091422949 - 21600 100 0.040447932 0.040447932 0.033050575 0.0013404194 - 21700 100 0.035227782 0.035227782 0.02916621 0.00138779 - 21800 100 0.03309101 0.03309101 0.026613861 0.00058184323 - 21900 100 0.031461843 0.031461843 0.024751985 0.0013090333 - 22000 100 0.021624144 0.021624144 0.017872639 0.0010893822 - 22100 100 0.016728267 0.016728267 0.01403934 0.00049128736 - 22200 100 0.016256915 0.016256915 0.013763903 0.00047288638 - 22300 100 0.01349256 0.01349256 0.011498343 0.0013508309 - 22400 100 0.010027007 0.010027007 0.0087924966 0.00030117996 - 22500 100 0.0107355 0.0107355 0.0088715062 0.001043188 - 22600 100 0.0095852245 0.0095852245 0.007965421 0.00028464236 - 22700 100 0.0072956464 0.0072956464 0.0062403843 0.00061636772 - 22800 100 0.0060874415 0.0060874415 0.0054788049 0.00021135824 - 22900 100 0.0059688159 0.0059688159 0.0049530273 0.00022094116 - 23000 100 0.0050218996 0.0050218996 0.0043518404 0.00022527705 - 23100 100 0.005022208 0.005022208 0.0043118432 0.00052482006 - 23200 100 0.0047096056 0.0047096056 0.0039698638 0.00026423471 - 23300 100 0.0039510068 0.0039510068 0.0034773285 0.0001891104 - 23400 100 0.0037308781 0.0037308781 0.0031763304 0.00027163016 - 23500 100 0.0036278619 0.0036278619 0.0030371899 0.00017961072 - 23600 100 0.0033598677 0.0033598677 0.0027586323 0.00015034494 - 23700 100 0.0028530843 0.0028530843 0.0024809444 0.00012294415 - 23800 100 0.0025388819 0.0025388819 0.0022812799 0.00018946676 - 23900 100 0.0021129272 0.0021129272 0.0019905358 0.00015816903 - 24000 100 0.0021010978 0.0021010978 0.0019864539 0.00017086049 - 24100 100 0.0022189886 0.0022189886 0.0020466911 0.00030932562 - 24200 100 0.0019226314 0.0019226314 0.0017933042 9.3246067e-05 - 24300 100 0.0016875781 0.0016875781 0.0015999656 9.9935458e-05 - 24400 100 0.0015929611 0.0015929611 0.001531011 9.7429139e-05 - 24500 100 0.0015143044 0.0015143044 0.0014044175 9.807117e-05 - 24600 100 0.0018595492 0.0018595492 0.0014740944 7.4734729e-05 - 24700 100 0.0011646988 0.0011646988 0.0010881356 6.1197025e-05 - 24800 100 0.0014641612 0.0014641612 0.0012316664 8.81462e-05 - 24900 100 0.001024996 0.001024996 0.00094311114 5.8776472e-05 - 25000 100 0.00097890442 0.00097890442 0.00090302317 3.3980657e-05 -Loop time of 0.0954661 on 1 procs for 5000 steps with 100 atoms - -Performance: 22625823.872 tau/day, 52374.592 timesteps/s -99.5% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.01234 | 0.01234 | 0.01234 | 0.0 | 12.93 -Neigh | 0.015404 | 0.015404 | 0.015404 | 0.0 | 16.14 -Comm | 0.00077391 | 0.00077391 | 0.00077391 | 0.0 | 0.81 -Output | 0.000494 | 0.000494 | 0.000494 | 0.0 | 0.52 -Modify | 0.062222 | 0.062222 | 0.062222 | 0.0 | 65.18 -Other | | 0.004233 | | | 4.43 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 150 ave 150 max 150 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 150 -Ave neighs/atom = 1.5 -Neighbor list builds = 283 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/granregion/log.6Oct16.granregion.box.g++.4 b/examples/granregion/log.6Oct16.granregion.box.g++.4 deleted file mode 100644 index daaae2019e..0000000000 --- a/examples/granregion/log.6Oct16.granregion.box.g++.4 +++ /dev/null @@ -1,468 +0,0 @@ -LAMMPS (5 Oct 2016) -# pouring spheres into container box - -units lj -atom_style sphere -boundary f f f -dimension 3 -comm_modify vel yes - -region box block -10 10 -10 10 -10 10 units box -create_box 2 box -Created orthogonal box = (-10 -10 -10) to (10 10 10) - 1 by 2 by 2 MPI processor grid - -pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 -pair_coeff * * gran/hooke - -region container block -6 6 -6 6 -6 6 units box -fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 2 all nve/sphere -fix 3 all gravity 1.0 vector 0 0 -1 - -region slab block -2 2 -2 2 -2 2 units box -fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore -Particle insertion: 48 every 566 steps, 100 by step 1133 - -timestep 0.005 - -compute 1 all temp -compute_modify 1 dynamic yes - -compute 2 all temp/sphere -compute_modify 2 dynamic yes - -thermo 100 -thermo_style custom step atoms temp c_1 c_2 press -thermo_modify lost ignore -compute_modify thermo_temp dynamic yes - -#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 -#dump_modify 2 pad 5 - -run 5000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 31 31 31 -Memory usage per processor = 0.0990257 Mbytes -Step Atoms Temp c_1 c_2 Press - 0 0 0 0 0 0 - 100 21 0.54270729 0.54270729 0.26473526 0.0013567682 - 200 21 0.87606961 0.87606961 0.42735103 0.002190174 - 300 21 1.1428374 1.1428374 0.55748167 0.0028570936 - 400 21 1.3543103 1.3543103 0.66829516 0.0033857758 - 500 21 1.0677786 1.0677786 0.53582407 0.0045048164 - 600 56 0.6744286 0.6744286 0.3502938 0.0047464584 - 700 56 0.75569283 0.75569283 0.39779462 0.0051953882 - 800 56 0.61597505 0.61597505 0.32943642 0.0086022783 - 900 56 0.65260802 0.65260802 0.34474044 0.0059298996 - 1000 56 0.51624952 0.51624952 0.28326898 0.0067827337 - 1100 56 0.46050076 0.46050076 0.25656319 0.0061891094 - 1200 81 0.39112377 0.39112377 0.21690744 0.0086559347 - 1300 81 0.33302801 0.33302801 0.19110222 0.0033381288 - 1400 81 0.39333146 0.39333146 0.21220965 0.0041348597 - 1500 81 0.35493951 0.35493951 0.19924958 0.00373736 - 1600 81 0.34154491 0.34154491 0.19031147 0.005349672 - 1700 100 0.25598828 0.25598828 0.14171498 0.0092236643 - 1800 100 0.2114074 0.2114074 0.12162965 0.0027213483 - 1900 100 0.21810423 0.21810423 0.12176698 0.0036436054 - 2000 100 0.2553198 0.2553198 0.13900087 0.0032844518 - 2100 100 0.24809936 0.24809936 0.13753654 0.0088764777 - 2200 100 0.22455625 0.22455625 0.12500973 0.0043515755 - 2300 100 0.19586871 0.19586871 0.11064996 0.0055176298 - 2400 100 0.059621411 0.059621411 0.045535517 0.00079910861 - 2500 100 0.052217518 0.052217518 0.038542594 0.0009759424 - 2600 100 0.036907358 0.036907358 0.027550263 0.0014047668 - 2700 100 0.027926944 0.027926944 0.020599405 0.00063362027 - 2800 100 0.020876282 0.020876282 0.015385856 0.00066161626 - 2900 100 0.010390963 0.010390963 0.0085038611 0.00026222195 - 3000 100 0.0080105974 0.0080105974 0.006995365 0.00059521652 - 3100 100 0.0087388005 0.0087388005 0.0069051613 0.00028045343 - 3200 100 0.0078828927 0.0078828927 0.0060159861 0.00014819289 - 3300 100 0.0039336821 0.0039336821 0.0036525886 0.0001439482 - 3400 100 0.0037684472 0.0037684472 0.0031531439 0.00010653386 - 3500 100 0.0023527874 0.0023527874 0.0020983632 6.3797052e-05 - 3600 100 0.0018768162 0.0018768162 0.0017248798 0.00014904114 - 3700 100 0.00135595 0.00135595 0.0013962044 6.2461444e-05 - 3800 100 0.0012673777 0.0012673777 0.0013074364 0.00028034063 - 3900 100 0.00081311806 0.00081311806 0.00095642595 7.9543605e-05 - 4000 100 0.00059774673 0.00059774673 0.00074849615 6.8190201e-05 - 4100 100 0.00052811986 0.00052811986 0.00067263919 5.012633e-05 - 4200 100 0.00049555855 0.00049555855 0.00061736675 4.9888372e-05 - 4300 100 0.00048274473 0.00048274473 0.00059050389 5.1381757e-05 - 4400 100 0.00047341333 0.00047341333 0.00058083446 5.02623e-05 - 4500 100 0.00046792237 0.00046792237 0.00057416894 4.9019652e-05 - 4600 100 0.00046035378 0.00046035378 0.00056694823 6.0353699e-05 - 4700 100 0.00038114933 0.00038114933 0.0004980117 6.5173515e-05 - 4800 100 0.0003783967 0.0003783967 0.00049488428 4.8463898e-05 - 4900 100 0.00027940611 0.00027940611 0.00041517649 5.0979155e-05 - 5000 100 0.00026071989 0.00026071989 0.00040045214 5.151673e-05 -Loop time of 0.0799825 on 4 procs for 5000 steps with 100 atoms - -Performance: 27005901.076 tau/day, 62513.660 timesteps/s -96.6% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00093961 | 0.0032012 | 0.0054553 | 3.8 | 4.00 -Neigh | 0.0032456 | 0.0046872 | 0.0061908 | 2.0 | 5.86 -Comm | 0.014328 | 0.02121 | 0.029619 | 4.7 | 26.52 -Output | 0.0011828 | 0.0014142 | 0.0015574 | 0.4 | 1.77 -Modify | 0.002455 | 0.013876 | 0.026567 | 9.6 | 17.35 -Other | | 0.03559 | | | 44.50 - -Nlocal: 25 ave 51 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 4.75 ave 11 max 0 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 39.5 ave 85 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 158 -Ave neighs/atom = 1.58 -Neighbor list builds = 305 -Dangerous builds = 0 - -region container delete -variable theta equal (step-5000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 -run 5000 -Memory usage per processor = 5.16122 Mbytes -Step Atoms Temp c_1 c_2 Press - 5000 100 0.00026071989 0.00026071989 0.00040045214 5.1497323e-05 - 5100 100 0.66352492 0.66352492 0.35750241 0.015948709 - 5200 100 0.6922229 0.6922229 0.37176131 0.011025479 - 5300 100 0.76307067 0.76307067 0.40325027 0.010979511 - 5400 100 0.83871418 0.83871418 0.43756084 0.012600965 - 5500 100 0.93090048 0.93090048 0.4817574 0.012306942 - 5600 100 0.98338567 0.98338567 0.50374148 0.015434412 - 5700 100 1.0455442 1.0455442 0.53265847 0.017959409 - 5800 100 1.1081511 1.1081511 0.56112842 0.018832417 - 5900 100 1.1724309 1.1724309 0.59276447 0.019257973 - 6000 100 1.1914813 1.1914813 0.60201665 0.019694573 - 6100 100 1.2417733 1.2417733 0.62578893 0.019616524 - 6200 100 1.2612898 1.2612898 0.63503847 0.020442394 - 6300 100 1.2657345 1.2657345 0.63714395 0.020498843 - 6400 100 1.2678009 1.2678009 0.63828941 0.019900919 - 6500 100 1.284156 1.284156 0.64724666 0.020147256 - 6600 100 1.3090278 1.3090278 0.65925035 0.02136883 - 6700 100 1.3122075 1.3122075 0.66136807 0.020782325 - 6800 100 1.3147107 1.3147107 0.66026206 0.022887611 - 6900 100 1.3185295 1.3185295 0.66157265 0.021249838 - 7000 100 1.3232771 1.3232771 0.66334852 0.021738995 - 7100 100 1.3375003 1.3375003 0.67017176 0.021997185 - 7200 100 1.3349835 1.3349835 0.66895884 0.022149977 - 7300 100 1.3388711 1.3388711 0.67061163 0.021662545 - 7400 100 1.338676 1.338676 0.67074642 0.021076102 - 7500 100 1.3409052 1.3409052 0.67205098 0.021664853 - 7600 100 1.3499236 1.3499236 0.67612412 0.021653422 - 7700 100 1.3479719 1.3479719 0.67510646 0.021873569 - 7800 100 1.3489138 1.3489138 0.67563223 0.021419315 - 7900 100 1.357018 1.357018 0.6795804 0.022201202 - 8000 100 1.3540513 1.3540513 0.67843711 0.02275761 - 8100 100 1.3560429 1.3560429 0.67947065 0.022421723 - 8200 100 1.3590694 1.3590694 0.6806094 0.022004213 - 8300 100 1.3592154 1.3592154 0.68083948 0.021923269 - 8400 100 1.3601392 1.3601392 0.68121418 0.022155184 - 8500 100 1.3622149 1.3622149 0.6824182 0.022126924 - 8600 100 1.3651697 1.3651697 0.68397342 0.022195287 - 8700 100 1.3679254 1.3679254 0.68540978 0.023609651 - 8800 100 1.3686254 1.3686254 0.68559712 0.02242291 - 8900 100 1.3761277 1.3761277 0.68897201 0.023594162 - 9000 100 1.379968 1.379968 0.69045216 0.022516846 - 9100 100 1.3784732 1.3784732 0.68955121 0.022836115 - 9200 100 1.376848 1.376848 0.6885551 0.02279321 - 9300 100 1.3799231 1.3799231 0.68964009 0.023105818 - 9400 100 1.3817992 1.3817992 0.69057466 0.023062265 - 9500 100 1.3836544 1.3836544 0.69156755 0.024363244 - 9600 100 1.388032 1.388032 0.69348762 0.024930983 - 9700 100 1.3943738 1.3943738 0.6965703 0.024448451 - 9800 100 1.3963094 1.3963094 0.6971039 0.02341203 - 9900 100 1.3995489 1.3995489 0.69881652 0.023502542 - 10000 100 1.3974742 1.3974742 0.69765474 0.02340004 -Loop time of 0.18267 on 4 procs for 5000 steps with 100 atoms - -Performance: 11824571.055 tau/day, 27371.692 timesteps/s -99.1% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010765 | 0.012038 | 0.023519 | 9.9 | 6.59 -Neigh | 0.0057316 | 0.010541 | 0.015351 | 4.6 | 5.77 -Comm | 0.0067229 | 0.017007 | 0.028509 | 7.8 | 9.31 -Output | 0.0011928 | 0.002021 | 0.0027668 | 1.6 | 1.11 -Modify | 0.009697 | 0.053707 | 0.098413 | 19.0 | 29.40 -Other | | 0.08736 | | | 47.82 - -Nlocal: 25 ave 51 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 3.25 ave 8 max 0 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Neighs: 46.75 ave 104 max 0 min -Histogram: 2 0 0 0 0 0 0 1 0 1 - -Total # of neighbors = 187 -Ave neighs/atom = 1.87 -Neighbor list builds = 633 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Memory usage per processor = 5.16122 Mbytes -Step Atoms Temp c_1 c_2 Press - 10000 100 1.3974742 1.3974742 0.69765474 0.023347613 - 10100 100 0.34944285 0.34944285 0.20251378 0.019176827 - 10200 100 0.22524385 0.22524385 0.14368424 0.0033260831 - 10300 100 0.15243438 0.15243438 0.11070165 0.0064816535 - 10400 100 0.1143586 0.1143586 0.087867032 0.0024091961 - 10500 100 0.092025102 0.092025102 0.071291506 0.0030683413 - 10600 100 0.071051442 0.071051442 0.05700858 0.00100243 - 10700 100 0.058346771 0.058346771 0.04843626 0.0006073275 - 10800 100 0.048700232 0.048700232 0.039550383 0.00091511006 - 10900 100 0.036880936 0.036880936 0.029482183 0.0011698854 - 11000 100 0.028768807 0.028768807 0.023865852 0.0011980794 - 11100 100 0.022823005 0.022823005 0.018819891 0.0004639259 - 11200 100 0.016954703 0.016954703 0.014075803 0.00085142865 - 11300 100 0.015359685 0.015359685 0.01295219 0.00026241662 - 11400 100 0.012748378 0.012748378 0.011085291 0.00045626939 - 11500 100 0.010464459 0.010464459 0.0087024732 0.00029325411 - 11600 100 0.0099186727 0.0099186727 0.0080127406 0.00031388584 - 11700 100 0.0088308874 0.0088308874 0.0072317369 0.00017850972 - 11800 100 0.0081740195 0.0081740195 0.0066522963 0.00012282618 - 11900 100 0.0079005289 0.0079005289 0.0063346391 0.00010630403 - 12000 100 0.0066277573 0.0066277573 0.0054122601 5.4791661e-05 - 12100 100 0.00567928 0.00567928 0.0047331385 9.2668647e-05 - 12200 100 0.005282803 0.005282803 0.0043827202 8.7820361e-05 - 12300 100 0.0051590302 0.0051590302 0.0042806737 6.5433983e-05 - 12400 100 0.0049013329 0.0049013329 0.0040882737 6.2007733e-05 - 12500 100 0.0044725745 0.0044725745 0.0037535523 6.1132729e-05 - 12600 100 0.0043131884 0.0043131884 0.0035845765 5.3375706e-05 - 12700 100 0.0042020236 0.0042020236 0.0034902096 0.0001192142 - 12800 100 0.0041367453 0.0041367453 0.003433341 0.00011052418 - 12900 100 0.0039862367 0.0039862367 0.0033026224 5.2674711e-05 - 13000 100 0.0033163769 0.0033163769 0.0028118123 5.9042575e-05 - 13100 100 0.0030645983 0.0030645983 0.002571872 4.9521551e-05 - 13200 100 0.002808301 0.002808301 0.0023652684 3.4748246e-05 - 13300 100 0.002556475 0.002556475 0.0021699595 0.00042840611 - 13400 100 0.0023430405 0.0023430405 0.0019913198 2.2687303e-05 - 13500 100 0.0021422817 0.0021422817 0.0018017112 -6.7761855e-06 - 13600 100 0.0020993702 0.0020993702 0.001749657 2.5979707e-05 - 13700 100 0.0019871396 0.0019871396 0.0016647634 5.754995e-05 - 13800 100 0.0017311886 0.0017311886 0.0014696399 2.1585018e-05 - 13900 100 0.0016249641 0.0016249641 0.0013982224 2.0108931e-05 - 14000 100 0.0015874763 0.0015874763 0.0013613318 0.00018348921 - 14100 100 0.0013772541 0.0013772541 0.0012193388 1.9336869e-05 - 14200 100 0.0013587865 0.0013587865 0.0012054213 1.807845e-05 - 14300 100 0.0011824329 0.0011824329 0.0010348168 0.00017307518 - 14400 100 0.0011387278 0.0011387278 0.0010010725 1.4091757e-05 - 14500 100 0.0010441599 0.0010441599 0.00092205881 1.3630652e-05 - 14600 100 0.00096839518 0.00096839518 0.00086828535 1.2437299e-05 - 14700 100 0.00094215882 0.00094215882 0.00084418599 5.3989122e-05 - 14800 100 0.00077297853 0.00077297853 0.00070382005 8.5049867e-06 - 14900 100 0.00072181281 0.00072181281 0.00066110432 8.9324335e-06 - 15000 100 0.00070122327 0.00070122327 0.00063826734 3.4876262e-05 -Loop time of 0.0815294 on 4 procs for 5000 steps with 100 atoms - -Performance: 26493517.176 tau/day, 61327.586 timesteps/s -97.8% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00076294 | 0.0033154 | 0.0062585 | 4.3 | 4.07 -Neigh | 0.0010953 | 0.0020078 | 0.002914 | 2.0 | 2.46 -Comm | 0.0021389 | 0.012184 | 0.023433 | 9.1 | 14.94 -Output | 0.0011332 | 0.0014591 | 0.0017147 | 0.7 | 1.79 -Modify | 0.00083971 | 0.017889 | 0.035367 | 12.7 | 21.94 -Other | | 0.04467 | | | 54.79 - -Nlocal: 25 ave 54 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 3.75 ave 8 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 37.5 ave 97 max 0 min -Histogram: 2 0 0 0 0 1 0 0 0 1 - -Total # of neighbors = 150 -Ave neighs/atom = 1.5 -Neighbor list builds = 120 -Dangerous builds = 0 - -region container delete -variable theta equal (step-15000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 -run 5000 -Memory usage per processor = 5.16122 Mbytes -Step Atoms Temp c_1 c_2 Press - 15000 100 0.00070122327 0.00070122327 0.00063826734 3.4742207e-05 - 15100 100 1.1981004 1.1981004 0.74046013 0.017300203 - 15200 100 1.2197457 1.2197457 0.75847511 0.016724637 - 15300 100 1.1794198 1.1794198 0.77076582 0.017228755 - 15400 100 1.4027714 1.4027714 0.87950036 0.021028602 - 15500 100 1.5514702 1.5514702 0.95040716 0.019935207 - 15600 100 1.8360404 1.8360404 1.0987247 0.02494663 - 15700 100 2.0317625 2.0317625 1.2004001 0.029286087 - 15800 100 2.0478625 2.0478625 1.189893 0.031660426 - 15900 100 2.1289888 2.1289888 1.2083316 0.028754408 - 16000 100 2.2261493 2.2261493 1.2550891 0.030665647 - 16100 100 2.3005184 2.3005184 1.29238 0.036511242 - 16200 100 2.4515818 2.4515818 1.3563253 0.033787104 - 16300 100 2.4524614 2.4524614 1.3571527 0.031905963 - 16400 100 2.5592541 2.5592541 1.405001 0.035688651 - 16500 100 2.5311864 2.5311864 1.3918694 0.032451265 - 16600 100 2.6471904 2.6471904 1.4481739 0.034763978 - 16700 100 2.7024085 2.7024085 1.4785065 0.037514299 - 16800 100 2.8116979 2.8116979 1.5403269 0.03585152 - 16900 100 2.9095374 2.9095374 1.5962283 0.038244982 - 17000 100 2.9228985 2.9228985 1.5978628 0.037971615 - 17100 100 2.983589 2.983589 1.6205713 0.038332341 - 17200 100 3.1245984 3.1245984 1.6925827 0.042532223 - 17300 100 3.1060575 3.1060575 1.6713928 0.052589575 - 17400 100 3.2494904 3.2494904 1.7567188 0.044783721 - 17500 100 3.2313349 3.2313349 1.7549177 0.044959213 - 17600 100 3.3928412 3.3928412 1.822978 0.052512199 - 17700 100 3.3064729 3.3064729 1.7924768 0.046624738 - 17800 100 3.1907518 3.1907518 1.7406131 0.042864325 - 17900 100 3.0224556 3.0224556 1.6641648 0.040151025 - 18000 100 3.105271 3.105271 1.7045599 0.047137803 - 18100 100 3.0293425 3.0293425 1.6626024 0.04198758 - 18200 100 3.139773 3.139773 1.7310307 0.040137164 - 18300 100 2.9732894 2.9732894 1.6555933 0.03777758 - 18400 100 3.1250324 3.1250324 1.739812 0.038542298 - 18500 100 3.1687407 3.1687407 1.7593494 0.041591022 - 18600 100 3.2880821 3.2880821 1.8169373 0.042503015 - 18700 100 3.4877047 3.4877047 1.9049979 0.048156272 - 18800 100 3.7982973 3.7982973 2.055323 0.049805341 - 18900 100 3.9922267 3.9922267 2.1260665 0.062688073 - 19000 100 3.8620284 3.8620284 2.0652184 0.064418518 - 19100 100 3.8757665 3.8757665 2.0615465 0.058600317 - 19200 100 3.9425495 3.9425495 2.1030375 0.053714175 - 19300 100 3.8589133 3.8589133 2.0485568 0.05531747 - 19400 100 3.9202395 3.9202395 2.0904529 0.056324297 - 19500 100 3.9748628 3.9748628 2.1114492 0.055590699 - 19600 100 3.8876771 3.8876771 2.0918436 0.052415532 - 19700 100 3.8975921 3.8975921 2.0755799 0.050647718 - 19800 100 3.7488333 3.7488333 2.0024562 0.056966734 - 19900 100 3.7818574 3.7818574 2.00915 0.050079148 - 20000 100 3.4510736 3.4510736 1.8525818 0.053548452 -Loop time of 0.156607 on 4 procs for 5000 steps with 100 atoms - -Performance: 13792452.627 tau/day, 31926.974 timesteps/s -98.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0030923 | 0.0049732 | 0.0071678 | 2.1 | 3.18 -Neigh | 0.012225 | 0.015592 | 0.017859 | 1.7 | 9.96 -Comm | 0.034876 | 0.037526 | 0.040807 | 1.1 | 23.96 -Output | 0.0013812 | 0.0015668 | 0.0017419 | 0.3 | 1.00 -Modify | 0.026932 | 0.044011 | 0.054787 | 5.0 | 28.10 -Other | | 0.05294 | | | 33.80 - -Nlocal: 25 ave 41 max 12 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Nghost: 3.25 ave 6 max 1 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Neighs: 35.75 ave 59 max 9 min -Histogram: 1 0 0 0 0 1 1 0 0 1 - -Total # of neighbors = 143 -Ave neighs/atom = 1.43 -Neighbor list builds = 917 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Memory usage per processor = 5.16122 Mbytes -Step Atoms Temp c_1 c_2 Press - 20000 100 3.4510736 3.4510736 1.8525818 0.053182767 - 20100 100 0.99241675 0.99241675 0.61590164 0.015233656 - 20200 100 0.92799489 0.92799489 0.55540992 0.011885237 - 20300 100 0.9171573 0.9171573 0.54477252 0.012926388 - 20400 100 0.86718407 0.86718407 0.5145422 0.011384414 - 20500 100 0.84470122 0.84470122 0.50181203 0.010482207 - 20600 100 0.93025469 0.93025469 0.53939952 0.011377044 - 20700 100 0.96631348 0.96631348 0.55772027 0.015287231 - 20800 100 0.90708015 0.90708015 0.52037018 0.014854537 - 20900 100 0.73319001 0.73319001 0.42824847 0.0092980012 - 21000 100 0.3371096 0.3371096 0.21272171 0.0061783554 - 21100 100 0.21771022 0.21771022 0.14128887 0.0082147558 - 21200 100 0.18133275 0.18133275 0.11945636 0.0055722731 - 21300 100 0.17117199 0.17117199 0.11048263 0.0027980106 - 21400 100 0.15741047 0.15741047 0.10346676 0.0023057723 - 21500 100 0.10045855 0.10045855 0.069905343 0.0023941181 - 21600 100 0.066094864 0.066094864 0.051285108 0.0022519002 - 21700 100 0.048622069 0.048622069 0.040662255 0.00073951939 - 21800 100 0.046829799 0.046829799 0.037431722 0.0015913976 - 21900 100 0.025308514 0.025308514 0.02092076 0.00064225773 - 22000 100 0.016326886 0.016326886 0.013588504 0.00087416572 - 22100 100 0.011892981 0.011892981 0.010417133 0.00080132313 - 22200 100 0.011974602 0.011974602 0.010342276 0.00044437732 - 22300 100 0.012567486 0.012567486 0.010294969 0.00048413872 - 22400 100 0.011676022 0.011676022 0.0091714238 0.00066567365 - 22500 100 0.0098737136 0.0098737136 0.0079252142 0.00024081335 - 22600 100 0.0052495523 0.0052495523 0.0047802341 0.00029167814 - 22700 100 0.0049396543 0.0049396543 0.0043570686 0.00019793167 - 22800 100 0.004469254 0.004469254 0.0038657445 0.00052965165 - 22900 100 0.0043837877 0.0043837877 0.0034611363 0.00045595698 - 23000 100 0.003439309 0.003439309 0.0028031344 0.00025784869 - 23100 100 0.0034805091 0.0034805091 0.0027537344 0.00012746906 - 23200 100 0.0045502061 0.0045502061 0.0032298328 0.00024006432 - 23300 100 0.0028553043 0.0028553043 0.0023107483 0.00012803066 - 23400 100 0.0022736412 0.0022736412 0.0018560302 0.0002706771 - 23500 100 0.0020966521 0.0020966521 0.0017106541 0.00014239612 - 23600 100 0.0018760993 0.0018760993 0.0015415318 0.00010892634 - 23700 100 0.0022362451 0.0022362451 0.0017014519 0.00012547256 - 23800 100 0.0017603403 0.0017603403 0.0014681398 0.00023372731 - 23900 100 0.0023396747 0.0023396747 0.0016700312 0.00017014305 - 24000 100 0.0012059144 0.0012059144 0.0009982224 3.6215959e-05 - 24100 100 0.0011739433 0.0011739433 0.00097155852 3.6169918e-05 - 24200 100 0.0011071139 0.0011071139 0.00092095478 8.8000847e-05 - 24300 100 0.0011078659 0.0011078659 0.00092073833 4.8706222e-05 - 24400 100 0.0011037562 0.0011037562 0.00091673546 3.7548502e-05 - 24500 100 0.00098422752 0.00098422752 0.00083054499 9.1151844e-05 - 24600 100 0.00097403646 0.00097403646 0.00082364881 5.0914687e-05 - 24700 100 0.00093082012 0.00093082012 0.00079047801 3.2230016e-05 - 24800 100 0.0009138973 0.0009138973 0.00075880177 2.8780789e-05 - 24900 100 0.0012881027 0.0012881027 0.00093025416 1.6385252e-05 - 25000 100 0.00076099168 0.00076099168 0.00065175575 9.417272e-06 -Loop time of 0.0846543 on 4 procs for 5000 steps with 100 atoms - -Performance: 25515528.493 tau/day, 59063.723 timesteps/s -98.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010469 | 0.0037468 | 0.0067947 | 4.3 | 4.43 -Neigh | 0.0032442 | 0.0047541 | 0.0065064 | 2.0 | 5.62 -Comm | 0.0085762 | 0.016923 | 0.024509 | 5.8 | 19.99 -Output | 0.0011523 | 0.0014572 | 0.0016789 | 0.6 | 1.72 -Modify | 0.0017715 | 0.016296 | 0.031399 | 11.1 | 19.25 -Other | | 0.04148 | | | 49.00 - -Nlocal: 25 ave 50 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 6 ave 13 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 39 ave 80 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 156 -Ave neighs/atom = 1.56 -Neighbor list builds = 284 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/granregion/log.6Oct16.granregion.funnel.g++.1 b/examples/granregion/log.6Oct16.granregion.funnel.g++.1 deleted file mode 100644 index 86faeb3401..0000000000 --- a/examples/granregion/log.6Oct16.granregion.funnel.g++.1 +++ /dev/null @@ -1,608 +0,0 @@ -LAMMPS (5 Oct 2016) -# pour particles into cone-shaped funnel, settle them, let them run out bottom - -variable name string funnel_pour - -thermo_modify flush yes -units si -variable PI equal 3.141592653589 -variable seed equal 14314 - -############################################### -# Geometry-related parameters -############################################### - -variable xlo equal 10 -variable xhi equal 40 -variable ylo equal 10 -variable yhi equal 40 -variable zlo equal -20 -variable zhi equal 50 - -variable xc equal 25 -variable yc equal 25 - -variable zconehi equal 50 -variable zconelo equal 10 -variable zcyllo equal 0 -variable radconelo equal 2 -variable radconehi equal 20 - -################################################ -# Particle sizes -################################################ - -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable skin equal ${rhi} -variable skin equal 0.5 - -############################################### -# Granular contact parameters -############################################### - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable density equal 1.0 -variable EYoung equal 10^5 -variable Poisson equal 2.0/7.0 -variable GShear equal ${EYoung}/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+0.285714285714286)) - -variable gravity equal 1.0 - -variable reff equal 0.5*(${rhi}+${rlo}) -variable reff equal 0.5*(0.5+${rlo}) -variable reff equal 0.5*(0.5+0.25) -variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 -variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 -variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 - -## Typical way to set kn, kt, etc.: -variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) -variable kt equal 4.0*${GShear}/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) - -variable a equal (-2.0*log(${coeffRes})/${PI})^2 -variable a equal (-2.0*log(0.1)/${PI})^2 -variable a equal (-2.0*log(0.1)/3.141592653589)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 903.503751814138*0.5 - -variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) - -variable dt equal ${tcol}*0.05 -variable dt equal 0.00210943016014969*0.05 -timestep ${dt} -timestep 0.000105471508007485 - -############################################### -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton off -atom_style sphere - -boundary p p f - -region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 40 ${zlo} ${zhi} -region boxreg block 10 40 10 40 -20 ${zhi} -region boxreg block 10 40 10 40 -20 50 -create_box 1 boxreg -Created orthogonal box = (10 10 -20) to (40 40 50) - 1 by 1 by 1 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 -pair_coeff * * - -neighbor ${skin} bin -neighbor 0.5 bin -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 30 -> bins = 1 1 3 -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -# insertion region for fix/pour - -region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box -region insreg cylinder z 25 ${yc} 10 30 50 side in units box -region insreg cylinder z 25 25 10 30 50 side in units box - -# define cone and cylinder regions - see lammps doc on region command -# note new open options - -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 2 - -region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open -region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 - -region hopreg union 2 conereg cylreg - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - - -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 3000 every 59965 steps, 2000 by step 1 - -#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) -thermo_modify flush yes lost warn - -# Initial run to fill up the cone - -run 20000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.5 - ghost atom cutoff = 1.5 - binsize = 0.75 -> bins = 40 40 94 -Memory usage per processor = 3.59417 Mbytes -Step CPU Atoms KinEng - 0 0 0 -0 - 1000 0.54582715 2000 -0 - 2000 0.93155909 2000 -0 - 3000 1.3159981 2000 -0 - 4000 1.697911 2000 -0 - 5000 2.080133 2000 -0 - 6000 2.461525 2000 -0 - 7000 2.842278 2000 -0 - 8000 3.222302 2000 -0 - 9000 3.6018171 2000 -0 - 10000 3.9843922 2000 -0 - 11000 4.363066 2000 -0 - 12000 4.743022 2000 -0 - 13000 5.121953 2000 -0 - 14000 5.5021431 2000 -0 - 15000 5.8807089 2000 -0 - 16000 6.2604752 2000 -0 - 17000 6.640244 2000 -0 - 18000 7.0199981 2000 -0 - 19000 7.40029 2000 -0 - 20000 7.7834539 2000 -0 -Loop time of 7.78348 on 1 procs for 20000 steps with 2000 atoms - -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.64588 | 0.64588 | 0.64588 | 0.0 | 8.30 -Neigh | 0.097229 | 0.097229 | 0.097229 | 0.0 | 1.25 -Comm | 0.011505 | 0.011505 | 0.011505 | 0.0 | 0.15 -Output | 0.00041127 | 0.00041127 | 0.00041127 | 0.0 | 0.01 -Modify | 6.8117 | 6.8117 | 6.8117 | 0.0 | 87.51 -Other | | 0.2168 | | | 2.79 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1537 ave 1537 max 1537 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1537 -Ave neighs/atom = 0.7685 -Neighbor list builds = 69 -Dangerous builds = 0 -unfix ins -run 150000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.49993 - ghost atom cutoff = 1.49993 - binsize = 0.749963 -> bins = 41 41 94 -Memory usage per processor = 9.40639 Mbytes -Step CPU Atoms KinEng - 20000 0 2000 6443.7665 - 21000 0.37979388 2000 6572.3531 - 22000 0.76149178 2000 6723.8376 - 23000 1.1449339 2000 6853.1812 - 24000 1.529017 2000 6976.0209 - 25000 1.9145579 2000 7096.9955 - 26000 2.30124 2000 7215.5795 - 27000 2.6893978 2000 7349.2382 - 28000 3.0777299 2000 7471.8719 - 29000 3.4699018 2000 7574.7988 - 30000 3.8656738 2000 7660.2353 - 31000 4.2606828 2000 7703.5736 - 32000 4.6632309 2000 7643.5299 - 33000 5.0728998 2000 7520.14 - 34000 5.4878559 2000 7372.2247 - 35000 5.910604 2000 7192.1639 - 36000 6.340683 2000 6985.7075 - 37000 6.8159268 2000 6858.944 - 38000 7.2553098 2000 6717.0485 - 39000 7.699847 2000 6541.6874 - 40000 8.1524599 2000 6382.1661 - 41000 8.6083429 2000 6235.6681 - 42000 9.0669999 2000 6103.095 - 43000 9.5359929 2000 5951.0523 - 44000 10.012767 2000 5811.0158 - 45000 10.497891 2000 5627.7273 - 46000 10.988827 2000 5471.7262 - 47000 11.48741 2000 5299.1205 - 48000 11.990619 2000 5164.1642 - 49000 12.497663 2000 5006.5014 - 50000 13.020399 2000 4872.2336 - 51000 13.548012 2000 4694.5332 - 52000 14.082238 2000 4515.5164 - 53000 14.622731 2000 4384.7531 - 54000 15.170292 2000 4215.1354 - 55000 15.721908 2000 4063.0658 - 56000 16.285099 2000 3895.7872 - 57000 16.858606 2000 3693.0537 - 58000 17.440427 2000 3514.887 - 59000 18.03239 2000 3268.5625 - 60000 18.640969 2000 3049.7365 - 61000 19.245721 2000 2885.6786 - 62000 19.85574 2000 2652.9108 - 63000 20.47405 2000 2408.6484 - 64000 21.10165 2000 2126.9549 - 65000 21.743939 2000 1879.2829 - 66000 22.39462 2000 1645.0406 - 67000 23.059044 2000 1425.8023 - 68000 23.730976 2000 1160.2206 - 69000 24.410132 2000 961.78467 - 70000 25.096468 2000 785.64232 - 71000 25.778622 2000 626.09642 - 72000 26.474474 2000 468.40645 - 73000 27.171065 2000 358.58331 - 74000 27.860177 2000 299.43443 - 75000 28.544588 2000 246.40717 - 76000 29.226358 2000 206.30408 - 77000 29.902697 2000 176.97739 - 78000 30.577693 2000 144.25328 - 79000 31.269697 2000 115.11502 - 80000 31.977588 2000 97.780887 - 81000 32.685445 2000 82.593472 - 82000 33.397946 2000 72.226521 - 83000 34.114464 2000 62.978026 - 84000 34.831341 2000 55.350711 - 85000 35.545558 2000 51.162661 - 86000 36.266238 2000 46.100957 - 87000 36.99804 2000 41.19148 - 88000 37.743379 2000 36.31567 - 89000 38.499655 2000 32.456379 - 90000 39.270287 2000 30.16589 - 91000 40.035401 2000 27.36473 - 92000 40.799095 2000 25.488138 - 93000 41.564371 2000 23.674866 - 94000 42.335499 2000 22.219066 - 95000 43.114508 2000 20.982603 - 96000 43.897793 2000 19.840979 - 97000 44.685675 2000 19.092279 - 98000 45.483452 2000 18.20277 - 99000 46.282718 2000 17.512786 - 100000 47.085373 2000 16.921053 - 101000 47.888376 2000 16.228234 - 102000 48.698546 2000 15.958752 - 103000 49.51312 2000 15.640913 - 104000 50.330832 2000 14.016542 - 105000 51.146589 2000 13.484725 - 106000 51.96128 2000 13.369222 - 107000 52.781047 2000 12.965898 - 108000 53.604374 2000 12.268212 - 109000 54.424389 2000 11.492904 - 110000 55.253544 2000 11.110936 - 111000 56.077677 2000 10.05383 - 112000 56.904333 2000 10.159311 - 113000 57.729366 2000 10.071694 - 114000 58.559509 2000 9.820289 - 115000 59.391732 2000 9.4736012 - 116000 60.221045 2000 9.5616457 - 117000 61.052557 2000 8.6478552 - 118000 61.890195 2000 8.7425719 - 119000 62.726358 2000 8.4741204 - 120000 63.565646 2000 7.772287 - 121000 64.397804 2000 6.9466866 - 122000 65.231394 2000 6.7645153 - 123000 66.064887 2000 6.6568629 - 124000 66.901915 2000 6.7578346 - 125000 67.741833 2000 6.7845523 - 126000 68.582414 2000 6.8385357 - 127000 69.421944 2000 6.8984218 - 128000 70.262972 2000 7.031649 - 129000 71.108668 2000 6.5894805 - 130000 71.954121 2000 6.6452991 - 131000 72.795366 2000 6.7278453 - 132000 73.639866 2000 6.679577 - 133000 74.484945 2000 6.8049542 - 134000 75.326506 2000 6.9015567 - 135000 76.171268 2000 7.2052436 - 136000 77.015739 2000 7.5532841 - 137000 77.861613 2000 7.2577958 - 138000 78.706479 2000 7.5218509 - 139000 79.549466 2000 7.5221639 - 140000 80.398284 2000 7.6657717 - 141000 81.240794 2000 7.9761942 - 142000 82.087164 2000 8.2314258 - 143000 82.931215 2000 8.3019975 - 144000 83.777896 2000 8.0179905 - 145000 84.622383 2000 8.2517491 - 146000 85.469753 2000 6.9481522 - 147000 86.315756 2000 6.6131212 - 148000 87.164711 2000 6.7706881 - 149000 88.012004 2000 6.8104528 - 150000 88.861557 2000 6.7339102 - 151000 89.708494 2000 6.4777998 - 152000 90.558437 2000 6.3011889 - 153000 91.40365 2000 6.3101502 - 154000 92.249997 2000 6.5542552 - 155000 93.099774 2000 6.7687268 - 156000 93.945557 2000 6.7974687 - 157000 94.795065 2000 6.4615869 - 158000 95.645761 2000 6.5566144 - 159000 96.495711 2000 6.4371 - 160000 97.349979 2000 6.4540668 - 161000 98.19875 2000 6.6987231 - 162000 99.049934 2000 6.2464506 - 163000 99.902813 2000 4.7573102 - 164000 100.75416 2000 4.7782706 - 165000 101.60479 2000 4.9414064 - 166000 102.45183 2000 4.970526 - 167000 103.30172 2000 5.1492473 - 168000 104.15283 2000 5.3633229 - 169000 105.00583 2000 4.3464936 - 170000 105.85919 2000 3.6784016 -Loop time of 105.859 on 1 procs for 150000 steps with 2000 atoms - -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 46.786 | 46.786 | 46.786 | -nan | 44.20 -Neigh | 0.88556 | 0.88556 | 0.88556 | 0.0 | 0.84 -Comm | 0.080127 | 0.080127 | 0.080127 | 0.0 | 0.08 -Output | 0.0033967 | 0.0033967 | 0.0033967 | 0.0 | 0.00 -Modify | 56.418 | 56.418 | 56.418 | 0.0 | 53.29 -Other | | 1.687 | | | 1.59 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 15507 ave 15507 max 15507 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 15507 -Ave neighs/atom = 7.7535 -Neighbor list builds = 401 -Dangerous builds = 0 - -# remove "plug" - need to redefine cylinder region & union - -region cylreg delete -region hopreg delete -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 - -region hopreg union 2 cylreg conereg - -unfix hopper3 -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -run 100000 -Memory usage per processor = 9.40667 Mbytes -Step CPU Atoms KinEng - 170000 0 2000 3.6784016 - 171000 0.84847808 2000 4.3936331 - 172000 1.6901879 2000 5.5750342 - 173000 2.523411 2000 6.8205762 - 174000 3.3501492 2000 8.9700613 - 175000 4.1766891 2000 11.336633 - 176000 4.9954321 2000 14.225242 - 177000 5.814229 2000 17.653262 - 178000 6.630548 2000 21.796078 - 179000 7.4493361 2000 26.660801 - 180000 8.2656369 2000 32.428193 - 181000 9.069953 2000 39.229088 - 182000 9.8759181 2000 46.242732 - 183000 10.674972 2000 54.604245 - 184000 11.47082 2000 63.96931 - 185000 12.259916 2000 74.132316 - 186000 13.046788 2000 84.690798 - 187000 13.832446 2000 95.486707 - 188000 14.612976 2000 106.68052 - 189000 15.391779 2000 118.91376 - 190000 16.160107 2000 131.90023 - 191000 16.919573 2000 146.30664 - 192000 17.677855 2000 161.10142 - 193000 18.4352 2000 174.91947 - 194000 19.188156 2000 191.47629 - 195000 19.937255 2000 208.19912 - 196000 20.687716 2000 224.80045 - 197000 21.43754 2000 243.29637 - 198000 22.18579 2000 262.88685 - 199000 22.932473 2000 282.34797 - 200000 23.680828 2000 302.78689 - 201000 24.428559 2000 323.48767 - 202000 25.167341 2000 345.99414 - 203000 25.904465 2000 368.54389 - 204000 26.635727 2000 393.49643 - 205000 27.366891 2000 417.82722 - 206000 28.094282 2000 443.67976 - 207000 28.821021 2000 470.35934 - 208000 29.545596 2000 499.01368 - 209000 30.267439 2000 528.99746 - 210000 30.993287 2000 561.03931 - 211000 31.713729 2000 594.0482 - 212000 32.42933 2000 628.20118 - 213000 33.14608 2000 662.585 - 214000 33.863882 2000 697.41408 - 215000 34.580495 2000 733.36799 - 216000 35.302571 2000 770.46796 - 217000 36.023821 2000 806.72007 - 218000 36.74189 2000 844.06965 - 219000 37.460105 2000 884.31774 - 220000 38.177705 2000 926.23771 - 221000 38.886587 2000 970.02095 - 222000 39.594003 2000 1015.3938 - 223000 40.29579 2000 1061.1281 - 224000 41.001112 2000 1107.9962 - 225000 41.706489 2000 1155.3656 - 226000 42.417622 1998 1196.6939 - 227000 43.133238 1996 1240.8434 - 228000 43.844991 1990 1260.0436 - 229000 44.545565 1986 1280.0431 - 230000 45.246651 1974 1285.222 - 231000 45.934355 1970 1311.8189 - 232000 46.624066 1960 1300.7922 - 233000 47.310339 1943 1282.113 - 234000 47.993433 1932 1261.0871 - 235000 48.66937 1918 1211.0667 - 236000 49.332954 1911 1232.6411 - 237000 49.99742 1898 1209.112 - 238000 50.664096 1888 1189.4002 - 239000 51.336205 1875 1151.415 - 240000 52.010198 1863 1108.0821 - 241000 52.680788 1856 1090.2279 - 242000 53.343069 1843 1062.9726 - 243000 53.996768 1830 1016.0933 - 244000 54.635882 1825 1023.5568 - 245000 55.271259 1817 1012.2897 - 246000 55.902793 1811 1019.8355 - 247000 56.541437 1802 996.81934 - 248000 57.182244 1793 971.29353 - 249000 57.827453 1785 947.98166 - 250000 58.473311 1771 898.58408 - 251000 59.1075 1762 851.46342 - 252000 59.73473 1754 826.46301 - 253000 60.362094 1747 808.08292 - 254000 60.989489 1737 778.86892 - 255000 61.616293 1720 702.90046 - 256000 62.243096 1709 665.14293 - 257000 62.866596 1703 628.63036 - 258000 63.48969 1702 645.42118 - 259000 64.119075 1696 617.03362 - 260000 64.752187 1692 607.96874 - 261000 65.374973 1690 619.83155 - 262000 65.991365 1688 622.09585 - 263000 66.608686 1682 612.86762 - 264000 67.220696 1681 636.53769 - 265000 67.830797 1678 638.33305 - 266000 68.439964 1675 635.97419 - 267000 69.043459 1672 634.91103 - 268000 69.643043 1669 638.50196 - 269000 70.250146 1667 646.16045 - 270000 70.86361 1664 659.62209 -Loop time of 70.8636 on 1 procs for 100000 steps with 1664 atoms - -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 33.501 | 33.501 | 33.501 | 0.0 | 47.27 -Neigh | 0.63279 | 0.63279 | 0.63279 | 0.0 | 0.89 -Comm | 0.055495 | 0.055495 | 0.055495 | 0.0 | 0.08 -Output | 0.0021648 | 0.0021648 | 0.0021648 | 0.0 | 0.00 -Modify | 35.602 | 35.602 | 35.602 | 0.0 | 50.24 -Other | | 1.07 | | | 1.51 - -Nlocal: 1664 ave 1664 max 1664 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 11687 ave 11687 max 11687 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 11687 -Ave neighs/atom = 7.02344 -Neighbor list builds = 261 -Dangerous builds = 0 -Total wall time: 0:03:04 diff --git a/examples/granregion/log.6Oct16.granregion.funnel.g++.4 b/examples/granregion/log.6Oct16.granregion.funnel.g++.4 deleted file mode 100644 index fcbd050b76..0000000000 --- a/examples/granregion/log.6Oct16.granregion.funnel.g++.4 +++ /dev/null @@ -1,608 +0,0 @@ -LAMMPS (5 Oct 2016) -# pour particles into cone-shaped funnel, settle them, let them run out bottom - -variable name string funnel_pour - -thermo_modify flush yes -units si -variable PI equal 3.141592653589 -variable seed equal 14314 - -############################################### -# Geometry-related parameters -############################################### - -variable xlo equal 10 -variable xhi equal 40 -variable ylo equal 10 -variable yhi equal 40 -variable zlo equal -20 -variable zhi equal 50 - -variable xc equal 25 -variable yc equal 25 - -variable zconehi equal 50 -variable zconelo equal 10 -variable zcyllo equal 0 -variable radconelo equal 2 -variable radconehi equal 20 - -################################################ -# Particle sizes -################################################ - -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable skin equal ${rhi} -variable skin equal 0.5 - -############################################### -# Granular contact parameters -############################################### - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable density equal 1.0 -variable EYoung equal 10^5 -variable Poisson equal 2.0/7.0 -variable GShear equal ${EYoung}/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+0.285714285714286)) - -variable gravity equal 1.0 - -variable reff equal 0.5*(${rhi}+${rlo}) -variable reff equal 0.5*(0.5+${rlo}) -variable reff equal 0.5*(0.5+0.25) -variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 -variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 -variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 - -## Typical way to set kn, kt, etc.: -variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) -variable kt equal 4.0*${GShear}/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) - -variable a equal (-2.0*log(${coeffRes})/${PI})^2 -variable a equal (-2.0*log(0.1)/${PI})^2 -variable a equal (-2.0*log(0.1)/3.141592653589)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 903.503751814138*0.5 - -variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) - -variable dt equal ${tcol}*0.05 -variable dt equal 0.00210943016014969*0.05 -timestep ${dt} -timestep 0.000105471508007485 - -############################################### -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton off -atom_style sphere - -boundary p p f - -region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 40 ${zlo} ${zhi} -region boxreg block 10 40 10 40 -20 ${zhi} -region boxreg block 10 40 10 40 -20 50 -create_box 1 boxreg -Created orthogonal box = (10 10 -20) to (40 40 50) - 1 by 1 by 4 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 -pair_coeff * * - -neighbor ${skin} bin -neighbor 0.5 bin -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 30 -> bins = 1 1 3 -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -# insertion region for fix/pour - -region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box -region insreg cylinder z 25 ${yc} 10 30 50 side in units box -region insreg cylinder z 25 25 10 30 50 side in units box - -# define cone and cylinder regions - see lammps doc on region command -# note new open options - -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 2 - -region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open -region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 - -region hopreg union 2 conereg cylreg - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - - -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 3000 every 59965 steps, 2000 by step 1 - -#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) -thermo_modify flush yes lost warn - -# Initial run to fill up the cone - -run 20000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.5 - ghost atom cutoff = 1.5 - binsize = 0.75 -> bins = 40 40 94 -Memory usage per processor = 2.99539 Mbytes -Step CPU Atoms KinEng - 0 0 0 -0 - 1000 0.53632808 2000 -0 - 2000 0.90599012 2000 -0 - 3000 1.2640941 2000 -0 - 4000 1.6225331 2000 -0 - 5000 1.9735272 2000 -0 - 6000 2.3156731 2000 -0 - 7000 2.6499262 2000 -0 - 8000 2.9751072 2000 -0 - 9000 3.2918322 2000 -0 - 10000 3.597712 2000 -0 - 11000 3.7157061 2000 -0 - 12000 3.833451 2000 -0 - 13000 3.9541111 2000 -0 - 14000 4.081727 2000 -0 - 15000 4.2142782 2000 -0 - 16000 4.3530872 2000 -0 - 17000 4.4987361 2000 -0 - 18000 4.6507492 2000 -0 - 19000 4.807373 2000 -0 - 20000 4.9710512 2000 -0 -Loop time of 4.97109 on 4 procs for 20000 steps with 2000 atoms - -98.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.067799 | 0.17326 | 0.37341 | 28.4 | 3.49 -Neigh | 0.013881 | 0.025808 | 0.045841 | 7.5 | 0.52 -Comm | 0.078163 | 0.1808 | 0.2915 | 21.0 | 3.64 -Output | 0.0011413 | 0.0027029 | 0.0036721 | 1.8 | 0.05 -Modify | 1.0146 | 1.8605 | 3.562 | 73.8 | 37.43 -Other | | 2.728 | | | 54.88 - -Nlocal: 500 ave 505 max 493 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Nghost: 159.25 ave 254 max 71 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -Neighs: 397.5 ave 616 max 214 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 1590 -Ave neighs/atom = 0.795 -Neighbor list builds = 69 -Dangerous builds = 0 -unfix ins -run 150000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.49993 - ghost atom cutoff = 1.49993 - binsize = 0.749963 -> bins = 41 41 94 -Memory usage per processor = 9.39737 Mbytes -Step CPU Atoms KinEng - 20000 0 2000 6443.7665 - 21000 0.11240888 2000 6572.3531 - 22000 0.23014092 2000 6723.8376 - 23000 0.35371184 2000 6853.1812 - 24000 0.4838469 2000 6976.0209 - 25000 0.62193394 2000 7096.9955 - 26000 0.76781893 2000 7215.5795 - 27000 0.92212081 2000 7349.2382 - 28000 1.0841098 2000 7471.8719 - 29000 1.2593179 2000 7574.7988 - 30000 1.4459748 2000 7660.2353 - 31000 1.5759299 2000 7703.5736 - 32000 1.7189329 2000 7643.5299 - 33000 1.876133 2000 7520.14 - 34000 2.0453629 2000 7372.2247 - 35000 2.2281299 2000 7192.1638 - 36000 2.4208269 2000 6985.7056 - 37000 2.6258228 2000 6858.9422 - 38000 2.839473 2000 6717.0655 - 39000 3.065336 2000 6541.5809 - 40000 3.3090389 2000 6381.8513 - 41000 3.4969938 2000 6236.4297 - 42000 3.6888108 2000 6104.2528 - 43000 3.8874888 2000 5951.0314 - 44000 4.0956569 2000 5819.0972 - 45000 4.312974 2000 5620.6457 - 46000 4.5343778 2000 5479.332 - 47000 4.757262 2000 5295.328 - 48000 4.9850328 2000 5179.9559 - 49000 5.2210319 2000 5022.5562 - 50000 5.4699879 2000 4899.1332 - 51000 5.6774018 2000 4699.4456 - 52000 5.8900218 2000 4522.5719 - 53000 6.110677 2000 4402.8664 - 54000 6.3361218 2000 4256.1664 - 55000 6.5778289 2000 4093.6265 - 56000 6.8319149 2000 3933.0179 - 57000 7.0925779 2000 3738.4628 - 58000 7.3578169 2000 3535.7866 - 59000 7.6344049 2000 3298.4079 - 60000 7.9258108 2000 3058.9356 - 61000 8.1758959 2000 2888.0074 - 62000 8.4278228 2000 2652.4613 - 63000 8.6815088 2000 2435.0991 - 64000 8.9371588 2000 2147.9441 - 65000 9.208025 2000 1898.0657 - 66000 9.4795358 2000 1650.5794 - 67000 9.7519388 2000 1425.7284 - 68000 10.025867 2000 1193.3786 - 69000 10.313816 2000 940.55767 - 70000 10.610488 2000 761.5312 - 71000 10.879718 2000 599.1989 - 72000 11.154029 2000 453.25929 - 73000 11.424376 2000 345.73222 - 74000 11.697359 2000 273.72167 - 75000 11.966099 2000 222.44251 - 76000 12.230213 2000 190.79993 - 77000 12.481982 2000 157.71153 - 78000 12.73433 2000 131.99208 - 79000 12.986017 2000 111.10589 - 80000 13.243904 2000 96.736337 - 81000 13.500538 2000 81.24169 - 82000 13.765755 2000 66.640863 - 83000 14.032985 2000 53.07725 - 84000 14.308284 2000 45.942738 - 85000 14.586721 2000 38.811918 - 86000 14.861759 2000 34.59113 - 87000 15.135665 2000 31.04487 - 88000 15.417487 2000 27.659144 - 89000 15.698281 2000 24.596119 - 90000 15.97969 2000 22.004865 - 91000 16.266118 2000 20.541665 - 92000 16.557007 2000 18.938077 - 93000 16.846745 2000 17.293956 - 94000 17.133408 2000 16.443596 - 95000 17.42023 2000 15.518083 - 96000 17.709025 2000 14.264343 - 97000 18.001337 2000 13.410217 - 98000 18.292414 2000 13.036621 - 99000 18.583887 2000 12.523214 - 100000 18.880312 2000 12.371509 - 101000 19.176964 2000 11.828077 - 102000 19.474371 2000 11.510333 - 103000 19.770957 2000 11.289304 - 104000 20.070744 2000 10.370661 - 105000 20.372617 2000 10.217921 - 106000 20.673949 2000 9.3275222 - 107000 20.9765 2000 8.9156372 - 108000 21.276062 2000 8.5850821 - 109000 21.585305 2000 8.5326934 - 110000 21.89079 2000 8.0579504 - 111000 22.194207 2000 8.1084595 - 112000 22.501593 2000 7.9190174 - 113000 22.81251 2000 8.0127499 - 114000 23.118514 2000 8.1791911 - 115000 23.432862 2000 8.3333032 - 116000 23.735549 2000 8.4833817 - 117000 24.038329 2000 8.315498 - 118000 24.343247 2000 7.9460007 - 119000 24.643288 2000 7.5922134 - 120000 24.94731 2000 7.4089143 - 121000 25.253605 2000 7.5790659 - 122000 25.56672 2000 7.3778204 - 123000 25.870958 2000 7.1384456 - 124000 26.180729 2000 6.9151887 - 125000 26.493089 2000 6.4671685 - 126000 26.806734 2000 5.6773128 - 127000 27.10969 2000 5.5603057 - 128000 27.410973 2000 5.6376136 - 129000 27.712398 2000 5.5578044 - 130000 28.015943 2000 5.4632646 - 131000 28.319002 2000 4.9669466 - 132000 28.620558 2000 5.0191026 - 133000 28.923233 2000 4.7146653 - 134000 29.235178 2000 4.4835803 - 135000 29.542816 2000 4.5469703 - 136000 29.8518 2000 4.3349926 - 137000 30.159096 2000 4.423031 - 138000 30.464283 2000 4.3680646 - 139000 30.769279 2000 4.2461787 - 140000 31.074457 2000 4.4140001 - 141000 31.380334 2000 4.3991236 - 142000 31.683855 2000 4.572989 - 143000 31.987308 2000 4.7601702 - 144000 32.28998 2000 4.7790587 - 145000 32.594971 2000 4.8127728 - 146000 32.89855 2000 4.8750003 - 147000 33.205142 2000 4.9830109 - 148000 33.509096 2000 4.9960037 - 149000 33.812951 2000 5.2151503 - 150000 34.117585 2000 5.2745187 - 151000 34.420995 2000 4.8959892 - 152000 34.725788 2000 4.7600627 - 153000 35.032001 2000 4.6944719 - 154000 35.337093 2000 4.7647384 - 155000 35.645299 2000 4.312228 - 156000 35.953225 2000 3.8513036 - 157000 36.258107 2000 3.8798947 - 158000 36.570122 2000 3.7116749 - 159000 36.880424 2000 3.7246469 - 160000 37.187331 2000 3.8165318 - 161000 37.491939 2000 3.8954595 - 162000 37.806365 2000 4.0109691 - 163000 38.122006 2000 3.3864369 - 164000 38.437246 2000 3.4533589 - 165000 38.753073 2000 3.4967205 - 166000 39.068713 2000 3.5758702 - 167000 39.376388 2000 2.8913997 - 168000 39.685628 2000 2.507523 - 169000 39.99294 2000 2.4910068 - 170000 40.302393 2000 2.4992886 -Loop time of 40.3024 on 4 procs for 150000 steps with 2000 atoms - -99.2% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 7.9352 | 13.451 | 15.947 | 88.7 | 33.37 -Neigh | 0.15394 | 0.23292 | 0.28243 | 10.0 | 0.58 -Comm | 2.1471 | 3.534 | 4.4671 | 47.3 | 8.77 -Output | 0.0070386 | 0.011774 | 0.021483 | 5.4 | 0.03 -Modify | 10.816 | 14.404 | 16.047 | 55.2 | 35.74 -Other | | 8.669 | | | 21.51 - -Nlocal: 500 ave 542 max 430 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 449.5 ave 679 max 208 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Neighs: 4506.75 ave 5611 max 3508 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 18027 -Ave neighs/atom = 9.0135 -Neighbor list builds = 386 -Dangerous builds = 0 - -# remove "plug" - need to redefine cylinder region & union - -region cylreg delete -region hopreg delete -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 - -region hopreg union 2 cylreg conereg - -unfix hopper3 -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -run 100000 -Memory usage per processor = 9.41929 Mbytes -Step CPU Atoms KinEng - 170000 0 2000 2.4992886 - 171000 0.30864286 2000 3.6052039 - 172000 0.62273479 2000 4.8584577 - 173000 0.94411087 2000 6.5620833 - 174000 1.2588799 2000 8.8636423 - 175000 1.574302 2000 11.743197 - 176000 1.888201 2000 15.60405 - 177000 2.1948938 2000 20.29426 - 178000 2.508261 2000 25.069266 - 179000 2.8257489 2000 31.340924 - 180000 3.1444538 2000 38.454779 - 181000 3.4541628 2000 46.488676 - 182000 3.7632799 2000 55.279578 - 183000 4.0711808 2000 65.192327 - 184000 4.386853 2000 75.466011 - 185000 4.7000408 2000 86.06934 - 186000 5.00436 2000 97.157035 - 187000 5.3041189 2000 108.92242 - 188000 5.601872 2000 120.88599 - 189000 5.9027078 2000 134.09884 - 190000 6.2037618 2000 148.60143 - 191000 6.4879329 2000 163.96898 - 192000 6.7703898 2000 180.32931 - 193000 7.0603459 2000 198.83575 - 194000 7.3395619 2000 217.46631 - 195000 7.6245389 2000 235.34916 - 196000 7.911685 2000 253.61893 - 197000 8.1976559 2000 271.3908 - 198000 8.483418 2000 289.60064 - 199000 8.7664149 2000 309.44306 - 200000 9.0593698 2000 331.9367 - 201000 9.3373818 2000 354.86646 - 202000 9.612149 2000 380.56766 - 203000 9.8876739 2000 406.97399 - 204000 10.152671 2000 435.69917 - 205000 10.415859 2000 465.1954 - 206000 10.67967 2000 494.6045 - 207000 10.941435 2000 522.71704 - 208000 11.205367 2000 550.56072 - 209000 11.471415 2000 580.10547 - 210000 11.738137 2000 610.36222 - 211000 12.006432 2000 641.99128 - 212000 12.270102 2000 676.0736 - 213000 12.531937 2000 711.70118 - 214000 12.797442 2000 747.84561 - 215000 13.062646 2000 785.59575 - 216000 13.33019 2000 826.36549 - 217000 13.598467 2000 868.35085 - 218000 13.863022 2000 911.07041 - 219000 14.127777 2000 953.70251 - 220000 14.391496 2000 997.5717 - 221000 14.655347 2000 1043.5565 - 222000 14.923357 2000 1090.7944 - 223000 15.193349 2000 1140.1324 - 224000 15.462326 2000 1190.6956 - 225000 15.729748 1999 1238.1536 - 226000 15.996867 1998 1286.8076 - 227000 16.261762 1995 1326.9895 - 228000 16.527382 1989 1349.5997 - 229000 16.788356 1984 1370.593 - 230000 17.05426 1968 1344.3763 - 231000 17.320126 1962 1363.7958 - 232000 17.58387 1949 1340.1482 - 233000 17.850221 1940 1348.409 - 234000 18.116595 1929 1335.9703 - 235000 18.383276 1918 1328.201 - 236000 18.650066 1905 1309.6469 - 237000 18.916963 1896 1292.9758 - 238000 19.185209 1884 1266.3598 - 239000 19.453402 1872 1221.0069 - 240000 19.722178 1855 1166.1488 - 241000 19.98987 1842 1126.9482 - 242000 20.257783 1828 1107.128 - 243000 20.523743 1815 1060.6573 - 244000 20.793404 1805 1026.0259 - 245000 21.061462 1797 1009.4924 - 246000 21.325574 1790 995.26136 - 247000 21.587046 1782 976.04886 - 248000 21.840234 1778 989.11589 - 249000 22.09455 1762 903.62508 - 250000 22.356228 1748 852.03257 - 251000 22.602243 1738 807.41049 - 252000 22.852106 1722 738.82529 - 253000 23.097209 1712 706.05657 - 254000 23.341263 1696 626.53135 - 255000 23.58614 1692 613.89548 - 256000 23.83122 1686 598.9367 - 257000 24.076937 1683 589.27487 - 258000 24.321166 1681 591.42793 - 259000 24.566143 1678 595.25383 - 260000 24.820743 1677 617.50379 - 261000 25.057835 1675 623.39319 - 262000 25.294068 1673 627.08829 - 263000 25.526724 1669 623.52963 - 264000 25.766729 1667 626.44957 - 265000 26.005453 1664 631.58936 - 266000 26.244549 1660 605.22452 - 267000 26.478879 1657 611.76935 - 268000 26.71252 1655 611.73538 - 269000 26.951368 1652 624.58227 - 270000 27.186447 1648 625.97446 -Loop time of 27.1865 on 4 procs for 100000 steps with 1648 atoms - -99.2% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.6257 | 9.631 | 13.049 | 100.0 | 35.43 -Neigh | 0.1522 | 0.17549 | 0.19588 | 4.3 | 0.65 -Comm | 1.5797 | 2.7289 | 3.602 | 48.7 | 10.04 -Output | 0.0014181 | 0.007208 | 0.016675 | 6.8 | 0.03 -Modify | 7.7129 | 9.0949 | 10.256 | 31.9 | 33.45 -Other | | 5.549 | | | 20.41 - -Nlocal: 412 ave 436 max 388 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 391 ave 629 max 158 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -Neighs: 3406 ave 4479 max 2040 min -Histogram: 1 0 0 0 1 0 0 1 0 1 - -Total # of neighbors = 13624 -Ave neighs/atom = 8.26699 -Neighbor list builds = 260 -Dangerous builds = 0 -Total wall time: 0:01:12 diff --git a/examples/granregion/log.6Oct16.granregion.mixer.g++.1 b/examples/granregion/log.6Oct16.granregion.mixer.g++.1 deleted file mode 100644 index 3cfa3eb0fc..0000000000 --- a/examples/granregion/log.6Oct16.granregion.mixer.g++.1 +++ /dev/null @@ -1,609 +0,0 @@ -LAMMPS (5 Oct 2016) -variable name string mixer - -thermo_modify flush yes -variable seed equal 14314 - -############################################### -# Particle parameters -################################################ - -variable rlo equal 0.3 -variable rhi equal 0.6 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.3 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.6 -variable skin equal ${rhi} -variable skin equal 0.6 - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable kn equal 10^5 -variable kt equal 0.2*${kn} -variable kt equal 0.2*100000 - -variable gravity equal 1.0 -variable density equal 1.0 - -variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 -variable a equal (-2.0*log(${coeffRes})/PI)^2 -variable a equal (-2.0*log(0.1)/PI)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 806.699778405191*0.5 - -variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) - -variable dt equal ${tcol}*0.02 -variable dt equal 0.00236257621510454*0.02 -timestep ${dt} -timestep 4.72515243020908e-05 - -############################################### - -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton on -atom_style sphere - -boundary p p f - -region boxreg block 0 20 0 20 0 20 -create_box 1 boxreg -Created orthogonal box = (0 0 0) to (20 20 20) - 1 by 1 by 1 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 -pair_coeff * * - -neighbor ${skin} bin -neighbor 0.6 bin -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 20 -> bins = 1 1 1 -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -region insreg cylinder z 10 10 8 10 18 side in units box -region cylreg cylinder z 10 10 10 0 20 side in units box - -variable theta equal (step/400000)*2*PI - -region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box -region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box - -region mixer intersect 3 cylreg b1 b2 side in - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - -fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer - -fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 -Particle insertion: 444 every 84653 steps, 1000 by step 169307 - -#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke v_theta -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) -thermo_modify flush yes lost warn - -run 200000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.8 - ghost atom cutoff = 1.8 - binsize = 0.9 -> bins = 23 23 23 -Memory usage per processor = 2.80779 Mbytes -Step CPU Atoms KinEng v_theta - 0 0 0 -0 0 - 1000 0.16771817 444 -0 0.015707963 - 2000 0.33019304 444 -0 0.031415927 - 3000 0.4894321 444 -0 0.04712389 - 4000 0.64879322 444 -0 0.062831853 - 5000 0.80816507 444 -0 0.078539816 - 6000 0.96711302 444 -0 0.09424778 - 7000 1.1265812 444 -0 0.10995574 - 8000 1.286129 444 -0 0.12566371 - 9000 1.445487 444 -0 0.14137167 - 10000 1.6056392 444 -0 0.15707963 - 11000 1.7650061 444 -0 0.1727876 - 12000 1.9249642 444 -0 0.18849556 - 13000 2.0851831 444 -0 0.20420352 - 14000 2.244523 444 -0 0.21991149 - 15000 2.4043641 444 -0 0.23561945 - 16000 2.5638251 444 -0 0.25132741 - 17000 2.7155962 444 -0 0.26703538 - 18000 2.866904 444 -0 0.28274334 - 19000 3.0188181 444 -0 0.2984513 - 20000 3.17047 444 -0 0.31415927 - 21000 3.3214712 444 -0 0.32986723 - 22000 3.472692 444 -0 0.34557519 - 23000 3.6240032 444 -0 0.36128316 - 24000 3.7753551 444 -0 0.37699112 - 25000 3.926239 444 -0 0.39269908 - 26000 4.0782132 444 -0 0.40840704 - 27000 4.2301712 444 -0 0.42411501 - 28000 4.382267 444 -0 0.43982297 - 29000 4.5339992 444 -0 0.45553093 - 30000 4.6860211 444 -0 0.4712389 - 31000 4.8376751 444 -0 0.48694686 - 32000 4.989748 444 -0 0.50265482 - 33000 5.1418142 444 -0 0.51836279 - 34000 5.294476 444 -0 0.53407075 - 35000 5.4472861 444 -0 0.54977871 - 36000 5.5999811 444 -0 0.56548668 - 37000 5.7526181 444 -0 0.58119464 - 38000 5.9061031 444 -0 0.5969026 - 39000 6.0593271 444 -0 0.61261057 - 40000 6.2123802 444 -0 0.62831853 - 41000 6.3652351 444 -0 0.64402649 - 42000 6.5186551 444 -0 0.65973446 - 43000 6.672132 444 -0 0.67544242 - 44000 6.8245611 444 -0 0.69115038 - 45000 6.9778051 444 -0 0.70685835 - 46000 7.131258 444 -0 0.72256631 - 47000 7.2841291 444 -0 0.73827427 - 48000 7.4379101 444 -0 0.75398224 - 49000 7.5915 444 -0 0.7696902 - 50000 7.7461231 444 -0 0.78539816 - 51000 7.9047191 444 -0 0.80110613 - 52000 8.0634432 444 -0 0.81681409 - 53000 8.2226322 444 -0 0.83252205 - 54000 8.3817451 444 -0 0.84823002 - 55000 8.5419021 444 -0 0.86393798 - 56000 8.701194 444 -0 0.87964594 - 57000 8.8613491 444 -0 0.89535391 - 58000 9.0211501 444 -0 0.91106187 - 59000 9.180917 444 -0 0.92676983 - 60000 9.341964 444 -0 0.9424778 - 61000 9.5026722 444 -0 0.95818576 - 62000 9.6630561 444 -0 0.97389372 - 63000 9.8236201 444 -0 0.98960169 - 64000 9.9854801 444 -0 1.0053096 - 65000 10.148318 444 -0 1.0210176 - 66000 10.311267 444 -0 1.0367256 - 67000 10.476498 444 -0 1.0524335 - 68000 10.640768 444 -0 1.0681415 - 69000 10.804709 444 -0 1.0838495 - 70000 10.969271 444 -0 1.0995574 - 71000 11.133451 444 -0 1.1152654 - 72000 11.299253 444 -0 1.1309734 - 73000 11.463999 444 -0 1.1466813 - 74000 11.62903 444 -0 1.1623893 - 75000 11.795109 444 -0 1.1780972 - 76000 11.962154 444 -0 1.1938052 - 77000 12.1292 444 -0 1.2095132 - 78000 12.298106 444 -0 1.2252211 - 79000 12.46744 444 -0 1.2409291 - 80000 12.637916 444 -0 1.2566371 - 81000 12.808494 444 -0 1.272345 - 82000 12.97813 444 -0 1.288053 - 83000 13.149135 444 -0 1.303761 - 84000 13.32082 444 -0 1.3194689 - 85000 13.56205 888 -0 1.3351769 - 86000 13.908699 888 -0 1.3508848 - 87000 14.254615 888 -0 1.3665928 - 88000 14.600851 888 -0 1.3823008 - 89000 14.946295 888 -0 1.3980087 - 90000 15.291315 888 -0 1.4137167 - 91000 15.637396 888 -0 1.4294247 - 92000 15.981426 888 -0 1.4451326 - 93000 16.327519 888 -0 1.4608406 - 94000 16.675434 888 -0 1.4765485 - 95000 17.023515 888 -0 1.4922565 - 96000 17.372152 888 -0 1.5079645 - 97000 17.719346 888 -0 1.5236724 - 98000 18.067159 888 -0 1.5393804 - 99000 18.414599 888 -0 1.5550884 - 100000 18.764775 888 -0 1.5707963 - 101000 19.114239 888 -0 1.5865043 - 102000 19.464285 888 -0 1.6022123 - 103000 19.813956 888 -0 1.6179202 - 104000 20.163276 888 -0 1.6336282 - 105000 20.553808 888 -0 1.6493361 - 106000 20.904093 888 -0 1.6650441 - 107000 21.25918 888 -0 1.6807521 - 108000 21.615056 888 -0 1.69646 - 109000 21.971067 888 -0 1.712168 - 110000 22.326407 888 -0 1.727876 - 111000 22.68062 888 -0 1.7435839 - 112000 23.03653 888 -0 1.7592919 - 113000 23.39161 888 -0 1.7749998 - 114000 23.751273 888 -0 1.7907078 - 115000 24.106946 888 -0 1.8064158 - 116000 24.461182 888 -0 1.8221237 - 117000 24.797533 888 -0 1.8378317 - 118000 25.133924 888 -0 1.8535397 - 119000 25.472617 888 -0 1.8692476 - 120000 25.810786 888 -0 1.8849556 - 121000 26.147399 888 -0 1.9006636 - 122000 26.485868 888 -0 1.9163715 - 123000 26.82395 888 -0 1.9320795 - 124000 27.162345 888 -0 1.9477874 - 125000 27.501503 888 -0 1.9634954 - 126000 27.843318 888 -0 1.9792034 - 127000 28.183379 888 -0 1.9949113 - 128000 28.525406 888 -0 2.0106193 - 129000 28.869601 888 -0 2.0263273 - 130000 29.216232 888 -0 2.0420352 - 131000 29.562432 888 -0 2.0577432 - 132000 29.95624 888 -0 2.0734512 - 133000 30.308919 888 -0 2.0891591 - 134000 30.662184 888 -0 2.1048671 - 135000 31.015509 888 -0 2.120575 - 136000 31.366132 888 -0 2.136283 - 137000 31.71887 888 -0 2.151991 - 138000 32.0723 888 -0 2.1676989 - 139000 32.428657 888 -0 2.1834069 - 140000 32.781484 888 -0 2.1991149 - 141000 33.133593 888 -0 2.2148228 - 142000 33.487376 888 -0 2.2305308 - 143000 33.838656 888 -0 2.2462387 - 144000 34.188723 888 -0 2.2619467 - 145000 34.540083 888 -0 2.2776547 - 146000 34.895624 888 -0 2.2933626 - 147000 35.25153 888 -0 2.3090706 - 148000 35.607482 888 -0 2.3247786 - 149000 35.9642 888 -0 2.3404865 - 150000 36.321759 888 -0 2.3561945 - 151000 36.667172 888 -0 2.3719025 - 152000 37.013822 888 -0 2.3876104 - 153000 37.362735 888 -0 2.4033184 - 154000 37.712576 888 -0 2.4190263 - 155000 38.063528 888 -0 2.4347343 - 156000 38.414666 888 -0 2.4504423 - 157000 38.766119 888 -0 2.4661502 - 158000 39.115828 888 -0 2.4818582 - 159000 39.470874 888 -0 2.4975662 - 160000 39.827871 888 -0 2.5132741 - 161000 40.184885 888 -0 2.5289821 - 162000 40.543838 888 -0 2.54469 - 163000 40.901814 888 -0 2.560398 - 164000 41.258631 888 -0 2.576106 - 165000 41.619086 888 -0 2.5918139 - 166000 41.977332 888 -0 2.6075219 - 167000 42.33775 888 -0 2.6232299 - 168000 42.701344 888 -0 2.6389378 - 169000 43.067663 888 -0 2.6546458 - 170000 43.461687 1000 -0 2.6703538 - 171000 43.866086 1000 -0 2.6860617 - 172000 44.271406 1000 -0 2.7017697 - 173000 44.677085 1000 -0 2.7174776 - 174000 45.082441 1000 -0 2.7331856 - 175000 45.491593 1000 -0 2.7488936 - 176000 45.903002 1000 -0 2.7646015 - 177000 46.315031 1000 -0 2.7803095 - 178000 46.726531 1000 -0 2.7960175 - 179000 47.140818 1000 -0 2.8117254 - 180000 47.553784 1000 -0 2.8274334 - 181000 47.964021 1000 -0 2.8431414 - 182000 48.376739 1000 -0 2.8588493 - 183000 48.789612 1000 -0 2.8745573 - 184000 49.204073 1000 -0 2.8902652 - 185000 49.642401 1000 -0 2.9059732 - 186000 50.083479 1000 -0 2.9216812 - 187000 50.523357 1000 -0 2.9373891 - 188000 50.963685 1000 -0 2.9530971 - 189000 51.404166 1000 -0 2.9688051 - 190000 51.849094 1000 -0 2.984513 - 191000 52.291805 1000 -0 3.000221 - 192000 52.731855 1000 -0 3.0159289 - 193000 53.174104 1000 -0 3.0316369 - 194000 53.619739 1000 -0 3.0473449 - 195000 54.061019 1000 -0 3.0630528 - 196000 54.501149 1000 -0 3.0787608 - 197000 54.940486 1000 -0 3.0944688 - 198000 55.381843 1000 -0 3.1101767 - 199000 55.822243 1000 -0 3.1258847 - 200000 56.264319 1000 -0 3.1415927 -Loop time of 56.2643 on 1 procs for 200000 steps with 1000 atoms - -Performance: 14511.970 tau/day, 3554.650 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.6309 | 4.6309 | 4.6309 | 0.0 | 8.23 -Neigh | 0.071456 | 0.071456 | 0.071456 | 0.0 | 0.13 -Comm | 0.50064 | 0.50064 | 0.50064 | 0.0 | 0.89 -Output | 0.0039163 | 0.0039163 | 0.0039163 | 0.0 | 0.01 -Modify | 50.189 | 50.189 | 50.189 | 0.0 | 89.20 -Other | | 0.8688 | | | 1.54 - -Nlocal: 1000 ave 1000 max 1000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 183 ave 183 max 183 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3926 ave 3926 max 3926 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3926 -Ave neighs/atom = 3.926 -Neighbor list builds = 217 -Dangerous builds = 0 -unfix ins -run 200000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.79826 - ghost atom cutoff = 1.79826 - binsize = 0.899132 -> bins = 23 23 23 -Memory usage per processor = 8.62017 Mbytes -Step CPU Atoms KinEng v_theta - 200000 0 1000 0.90078559 3.1415927 - 201000 0.44072509 1000 0.90377135 3.1573006 - 202000 0.8800211 1000 0.89194106 3.1730086 - 203000 1.3210881 1000 0.8940532 3.1887165 - 204000 1.762887 1000 0.8967696 3.2044245 - 205000 2.2080901 1000 0.89758718 3.2201325 - 206000 2.6548181 1000 0.89434418 3.2358404 - 207000 3.1002531 1000 0.87633906 3.2515484 - 208000 3.547334 1000 0.86721615 3.2672564 - 209000 3.993988 1000 0.86214817 3.2829643 - 210000 4.4423161 1000 0.85463743 3.2986723 - 211000 4.889446 1000 0.85744914 3.3143802 - 212000 5.3357229 1000 0.84702799 3.3300882 - 213000 5.780273 1000 0.84375104 3.3457962 - 214000 6.2249129 1000 0.83820701 3.3615041 - 215000 6.670651 1000 0.83566708 3.3772121 - 216000 7.113143 1000 0.83620798 3.3929201 - 217000 7.5359521 1000 0.83581605 3.408628 - 218000 7.9623129 1000 0.84045719 3.424336 - 219000 8.3878851 1000 0.85410521 3.440044 - 220000 8.8153811 1000 0.84336839 3.4557519 - 221000 9.244349 1000 0.85145747 3.4714599 - 222000 9.6728511 1000 0.8476916 3.4871678 - 223000 10.104052 1000 0.8412701 3.5028758 - 224000 10.532736 1000 0.8390277 3.5185838 - 225000 10.959564 1000 0.8359107 3.5342917 - 226000 11.38617 1000 0.83920631 3.5499997 - 227000 11.814104 1000 0.83930526 3.5657077 - 228000 12.241758 1000 0.83152308 3.5814156 - 229000 12.67198 1000 0.81211079 3.5971236 - 230000 13.101597 1000 0.80395018 3.6128316 - 231000 13.532943 1000 0.79991397 3.6285395 - 232000 13.969412 1000 0.80828959 3.6442475 - 233000 14.403885 1000 0.80892923 3.6599554 - 234000 14.833452 1000 0.82048914 3.6756634 - 235000 15.266211 1000 0.8174713 3.6913714 - 236000 15.697822 1000 0.81898551 3.7070793 - 237000 16.133023 1000 0.82034714 3.7227873 - 238000 16.569559 1000 0.81950728 3.7384953 - 239000 17.006308 1000 0.82152915 3.7542032 - 240000 17.445493 1000 0.83217597 3.7699112 - 241000 17.885585 1000 0.83464253 3.7856191 - 242000 18.324268 1000 0.84326166 3.8013271 - 243000 18.763748 1000 0.84235055 3.8170351 - 244000 19.203869 1000 0.83325408 3.832743 - 245000 19.645 1000 0.82577315 3.848451 - 246000 20.08666 1000 0.83923456 3.864159 - 247000 20.530596 1000 0.84153419 3.8798669 - 248000 20.971984 1000 0.85768309 3.8955749 - 249000 21.413571 1000 0.86910799 3.9112829 - 250000 21.854153 1000 0.8775521 3.9269908 - 251000 22.302884 1000 0.87299296 3.9426988 - 252000 22.753789 1000 0.86613861 3.9584067 - 253000 23.202458 1000 0.85513456 3.9741147 - 254000 23.655372 1000 0.84629733 3.9898227 - 255000 24.108225 1000 0.84154885 4.0055306 - 256000 24.561535 1000 0.84162715 4.0212386 - 257000 25.012338 1000 0.83959672 4.0369466 - 258000 25.466506 1000 0.83577695 4.0526545 - 259000 25.919168 1000 0.83021368 4.0683625 - 260000 26.37215 1000 0.81106893 4.0840704 - 261000 26.823834 1000 0.79884608 4.0997784 - 262000 27.276505 1000 0.78360303 4.1154864 - 263000 27.728503 1000 0.77030843 4.1311943 - 264000 28.181969 1000 0.76127974 4.1469023 - 265000 28.636329 1000 0.75553065 4.1626103 - 266000 29.090593 1000 0.75332019 4.1783182 - 267000 29.549547 1000 0.74670528 4.1940262 - 268000 30.008774 1000 0.74216141 4.2097342 - 269000 30.463826 1000 0.74564756 4.2254421 - 270000 30.920159 1000 0.7416035 4.2411501 - 271000 31.377192 1000 0.73061389 4.256858 - 272000 31.836268 1000 0.71620113 4.272566 - 273000 32.291662 1000 0.70840181 4.288274 - 274000 32.743646 1000 0.70946906 4.3039819 - 275000 33.197723 1000 0.70418049 4.3196899 - 276000 33.651405 1000 0.69591327 4.3353979 - 277000 34.106289 1000 0.69499716 4.3511058 - 278000 34.564324 1000 0.69242545 4.3668138 - 279000 35.020887 1000 0.69690811 4.3825218 - 280000 35.478222 1000 0.70402124 4.3982297 - 281000 35.938226 1000 0.71936578 4.4139377 - 282000 36.39808 1000 0.72439386 4.4296456 - 283000 36.855587 1000 0.72221632 4.4453536 - 284000 37.309629 1000 0.70387029 4.4610616 - 285000 37.791869 1000 0.70505716 4.4767695 - 286000 38.277853 1000 0.70731734 4.4924775 - 287000 38.764774 1000 0.71149743 4.5081855 - 288000 39.24815 1000 0.70994023 4.5238934 - 289000 39.728005 1000 0.69794225 4.5396014 - 290000 40.206798 1000 0.6905751 4.5553093 - 291000 40.678802 1000 0.68652972 4.5710173 - 292000 41.147991 1000 0.6743341 4.5867253 - 293000 41.618836 1000 0.67357205 4.6024332 - 294000 42.08982 1000 0.66465346 4.6181412 - 295000 42.561323 1000 0.65587678 4.6338492 - 296000 43.034196 1000 0.65455827 4.6495571 - 297000 43.505748 1000 0.65135145 4.6652651 - 298000 43.975299 1000 0.65400349 4.6809731 - 299000 44.447556 1000 0.66186899 4.696681 - 300000 44.926073 1000 0.66844193 4.712389 - 301000 45.402658 1000 0.67720506 4.7280969 - 302000 45.880643 1000 0.68554918 4.7438049 - 303000 46.359444 1000 0.69321489 4.7595129 - 304000 46.841542 1000 0.70345329 4.7752208 - 305000 47.323539 1000 0.70172137 4.7909288 - 306000 47.809358 1000 0.70989191 4.8066368 - 307000 48.291664 1000 0.70546377 4.8223447 - 308000 48.770327 1000 0.70820389 4.8380527 - 309000 49.248974 1000 0.69637815 4.8537606 - 310000 49.72965 1000 0.68679532 4.8694686 - 311000 50.204503 1000 0.68824984 4.8851766 - 312000 50.683502 1000 0.68647935 4.9008845 - 313000 51.161407 1000 0.68289956 4.9165925 - 314000 51.638365 1000 0.68356788 4.9323005 - 315000 52.114341 1000 0.68269829 4.9480084 - 316000 52.590791 1000 0.67961769 4.9637164 - 317000 53.043198 1000 0.67437047 4.9794244 - 318000 53.499062 1000 0.66534726 4.9951323 - 319000 53.954004 1000 0.66052125 5.0108403 - 320000 54.409776 1000 0.65351962 5.0265482 - 321000 54.867935 1000 0.64155441 5.0422562 - 322000 55.324528 1000 0.63463177 5.0579642 - 323000 55.780399 1000 0.62945691 5.0736721 - 324000 56.239189 1000 0.63156746 5.0893801 - 325000 56.697767 1000 0.63883759 5.1050881 - 326000 57.155746 1000 0.64703516 5.120796 - 327000 57.618744 1000 0.65532057 5.136504 - 328000 58.083021 1000 0.66697061 5.152212 - 329000 58.547646 1000 0.66896271 5.1679199 - 330000 59.011518 1000 0.66551963 5.1836279 - 331000 59.478689 1000 0.65083894 5.1993358 - 332000 59.94887 1000 0.65171641 5.2150438 - 333000 60.416096 1000 0.65122777 5.2307518 - 334000 60.889826 1000 0.65844334 5.2464597 - 335000 61.363105 1000 0.66931264 5.2621677 - 336000 61.832482 1000 0.66847415 5.2778757 - 337000 62.300731 1000 0.65863495 5.2935836 - 338000 62.769011 1000 0.64977739 5.3092916 - 339000 63.232862 1000 0.6454395 5.3249995 - 340000 63.699228 1000 0.63484999 5.3407075 - 341000 64.165101 1000 0.62753448 5.3564155 - 342000 64.631118 1000 0.62781442 5.3721234 - 343000 65.099469 1000 0.63813963 5.3878314 - 344000 65.576568 1000 0.6485183 5.4035394 - 345000 66.054068 1000 0.67111606 5.4192473 - 346000 66.531747 1000 0.68435581 5.4349553 - 347000 67.007296 1000 0.69526046 5.4506633 - 348000 67.478242 1000 0.6876531 5.4663712 - 349000 67.944422 1000 0.67962108 5.4820792 - 350000 68.410281 1000 0.6800934 5.4977871 - 351000 68.862112 1000 0.67658657 5.5134951 - 352000 69.316476 1000 0.67043355 5.5292031 - 353000 69.76356 1000 0.66863154 5.544911 - 354000 70.212144 1000 0.65806572 5.560619 - 355000 70.658375 1000 0.6498301 5.576327 - 356000 71.103688 1000 0.64384284 5.5920349 - 357000 71.551545 1000 0.64228421 5.6077429 - 358000 72.001238 1000 0.6408188 5.6234508 - 359000 72.45158 1000 0.64388002 5.6391588 - 360000 72.906369 1000 0.64347896 5.6548668 - 361000 73.358316 1000 0.65055455 5.6705747 - 362000 73.814119 1000 0.65545061 5.6862827 - 363000 74.277034 1000 0.6667431 5.7019907 - 364000 74.737593 1000 0.6869856 5.7176986 - 365000 75.20209 1000 0.69651407 5.7334066 - 366000 75.667448 1000 0.70824091 5.7491146 - 367000 76.132389 1000 0.7144853 5.7648225 - 368000 76.596067 1000 0.71780876 5.7805305 - 369000 77.059749 1000 0.7159398 5.7962384 - 370000 77.519236 1000 0.70648968 5.8119464 - 371000 77.977404 1000 0.69796557 5.8276544 - 372000 78.434017 1000 0.69876891 5.8433623 - 373000 78.887217 1000 0.70908957 5.8590703 - 374000 79.341658 1000 0.70831124 5.8747783 - 375000 79.802381 1000 0.70631178 5.8904862 - 376000 80.265165 1000 0.70533876 5.9061942 - 377000 80.727821 1000 0.70097225 5.9219022 - 378000 81.187538 1000 0.70139806 5.9376101 - 379000 81.645627 1000 0.69691027 5.9533181 - 380000 82.105692 1000 0.69163881 5.969026 - 381000 82.56483 1000 0.68973183 5.984734 - 382000 83.025126 1000 0.68059207 6.000442 - 383000 83.482786 1000 0.68096466 6.0161499 - 384000 83.939808 1000 0.6698933 6.0318579 - 385000 84.418408 1000 0.66795846 6.0475659 - 386000 84.898757 1000 0.66153854 6.0632738 - 387000 85.376756 1000 0.66560025 6.0789818 - 388000 85.853575 1000 0.66671699 6.0946897 - 389000 86.32865 1000 0.66013733 6.1103977 - 390000 86.807772 1000 0.66181942 6.1261057 - 391000 87.290335 1000 0.66281334 6.1418136 - 392000 87.773899 1000 0.66657879 6.1575216 - 393000 88.248567 1000 0.66608992 6.1732296 - 394000 88.723817 1000 0.66128929 6.1889375 - 395000 89.200089 1000 0.65764538 6.2046455 - 396000 89.671826 1000 0.65073015 6.2203535 - 397000 90.142595 1000 0.64967355 6.2360614 - 398000 90.616654 1000 0.65193957 6.2517694 - 399000 91.093856 1000 0.64936977 6.2674773 - 400000 91.571678 1000 0.65849743 6.2831853 -Loop time of 91.5717 on 1 procs for 200000 steps with 1000 atoms - -Performance: 8916.580 tau/day, 2184.081 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 13.827 | 13.827 | 13.827 | 0.0 | 15.10 -Neigh | 0.097679 | 0.097679 | 0.097679 | 0.0 | 0.11 -Comm | 1.5668 | 1.5668 | 1.5668 | 0.0 | 1.71 -Output | 0.0042615 | 0.0042615 | 0.0042615 | 0.0 | 0.00 -Modify | 74.804 | 74.804 | 74.804 | 0.0 | 81.69 -Other | | 1.273 | | | 1.39 - -Nlocal: 1000 ave 1000 max 1000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 289 ave 289 max 289 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5091 ave 5091 max 5091 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 5091 -Ave neighs/atom = 5.091 -Neighbor list builds = 160 -Dangerous builds = 0 -Total wall time: 0:02:27 diff --git a/examples/granregion/log.6Oct16.granregion.mixer.g++.4 b/examples/granregion/log.6Oct16.granregion.mixer.g++.4 deleted file mode 100644 index 726b31f8fe..0000000000 --- a/examples/granregion/log.6Oct16.granregion.mixer.g++.4 +++ /dev/null @@ -1,609 +0,0 @@ -LAMMPS (5 Oct 2016) -variable name string mixer - -thermo_modify flush yes -variable seed equal 14314 - -############################################### -# Particle parameters -################################################ - -variable rlo equal 0.3 -variable rhi equal 0.6 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.3 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.6 -variable skin equal ${rhi} -variable skin equal 0.6 - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable kn equal 10^5 -variable kt equal 0.2*${kn} -variable kt equal 0.2*100000 - -variable gravity equal 1.0 -variable density equal 1.0 - -variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 -variable a equal (-2.0*log(${coeffRes})/PI)^2 -variable a equal (-2.0*log(0.1)/PI)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 806.699778405191*0.5 - -variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) - -variable dt equal ${tcol}*0.02 -variable dt equal 0.00236257621510454*0.02 -timestep ${dt} -timestep 4.72515243020908e-05 - -############################################### - -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton on -atom_style sphere - -boundary p p f - -region boxreg block 0 20 0 20 0 20 -create_box 1 boxreg -Created orthogonal box = (0 0 0) to (20 20 20) - 1 by 2 by 2 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 -pair_coeff * * - -neighbor ${skin} bin -neighbor 0.6 bin -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 20 -> bins = 1 1 1 -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -region insreg cylinder z 10 10 8 10 18 side in units box -region cylreg cylinder z 10 10 10 0 20 side in units box - -variable theta equal (step/400000)*2*PI - -region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box -region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box - -region mixer intersect 3 cylreg b1 b2 side in - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - -fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer - -fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 -Particle insertion: 444 every 84653 steps, 1000 by step 169307 - -#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke v_theta -WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690) -thermo_modify flush yes lost warn - -run 200000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.8 - ghost atom cutoff = 1.8 - binsize = 0.9 -> bins = 23 23 23 -Memory usage per processor = 2.76258 Mbytes -Step CPU Atoms KinEng v_theta - 0 0 0 -0 0 - 1000 0.10398197 444 -0 0.015707963 - 2000 0.20485091 444 -0 0.031415927 - 3000 0.3069241 444 -0 0.04712389 - 4000 0.40875912 444 -0 0.062831853 - 5000 0.50989199 444 -0 0.078539816 - 6000 0.60949397 444 -0 0.09424778 - 7000 0.708915 444 -0 0.10995574 - 8000 0.80870605 444 -0 0.12566371 - 9000 0.90752602 444 -0 0.14137167 - 10000 1.0054469 444 -0 0.15707963 - 11000 1.072515 444 -0 0.1727876 - 12000 1.139096 444 -0 0.18849556 - 13000 1.2049479 444 -0 0.20420352 - 14000 1.2707851 444 -0 0.21991149 - 15000 1.3377919 444 -0 0.23561945 - 16000 1.405757 444 -0 0.25132741 - 17000 1.471797 444 -0 0.26703538 - 18000 1.538343 444 -0 0.28274334 - 19000 1.6035659 444 -0 0.2984513 - 20000 1.6690421 444 -0 0.31415927 - 21000 1.729399 444 -0 0.32986723 - 22000 1.7885301 444 -0 0.34557519 - 23000 1.8496239 444 -0 0.36128316 - 24000 1.913486 444 -0 0.37699112 - 25000 1.977428 444 -0 0.39269908 - 26000 2.04282 444 -0 0.40840704 - 27000 2.1089439 444 -0 0.42411501 - 28000 2.1759491 444 -0 0.43982297 - 29000 2.243813 444 -0 0.45553093 - 30000 2.312156 444 -0 0.4712389 - 31000 2.3742449 444 -0 0.48694686 - 32000 2.435447 444 -0 0.50265482 - 33000 2.495765 444 -0 0.51836279 - 34000 2.556865 444 -0 0.53407075 - 35000 2.6201291 444 -0 0.54977871 - 36000 2.6843281 444 -0 0.56548668 - 37000 2.7505059 444 -0 0.58119464 - 38000 2.817348 444 -0 0.5969026 - 39000 2.8837919 444 -0 0.61261057 - 40000 2.951216 444 -0 0.62831853 - 41000 3.012845 444 -0 0.64402649 - 42000 3.074688 444 -0 0.65973446 - 43000 3.13556 444 -0 0.67544242 - 44000 3.1965449 444 -0 0.69115038 - 45000 3.2582009 444 -0 0.70685835 - 46000 3.3201971 444 -0 0.72256631 - 47000 3.3819821 444 -0 0.73827427 - 48000 3.4455171 444 -0 0.75398224 - 49000 3.508738 444 -0 0.7696902 - 50000 3.5734961 444 -0 0.78539816 - 51000 3.6333289 444 -0 0.80110613 - 52000 3.694531 444 -0 0.81681409 - 53000 3.757041 444 -0 0.83252205 - 54000 3.820612 444 -0 0.84823002 - 55000 3.8852711 444 -0 0.86393798 - 56000 3.950211 444 -0 0.87964594 - 57000 4.015795 444 -0 0.89535391 - 58000 4.0818441 444 -0 0.91106187 - 59000 4.1476641 444 -0 0.92676983 - 60000 4.2141221 444 -0 0.9424778 - 61000 4.276612 444 -0 0.95818576 - 62000 4.339952 444 -0 0.97389372 - 63000 4.404351 444 -0 0.98960169 - 64000 4.4700999 444 -0 1.0053096 - 65000 4.5364759 444 -0 1.0210176 - 66000 4.605715 444 -0 1.0367256 - 67000 4.677629 444 -0 1.0524335 - 68000 4.7494669 444 -0 1.0681415 - 69000 4.8212609 444 -0 1.0838495 - 70000 4.894326 444 -0 1.0995574 - 71000 4.9639831 444 -0 1.1152654 - 72000 5.0345671 444 -0 1.1309734 - 73000 5.1048689 444 -0 1.1466813 - 74000 5.175498 444 -0 1.1623893 - 75000 5.2477591 444 -0 1.1780972 - 76000 5.3205409 444 -0 1.1938052 - 77000 5.394573 444 -0 1.2095132 - 78000 5.4685309 444 -0 1.2252211 - 79000 5.5431759 444 -0 1.2409291 - 80000 5.6212411 444 -0 1.2566371 - 81000 5.6890731 444 -0 1.272345 - 82000 5.7582159 444 -0 1.288053 - 83000 5.8298571 444 -0 1.303761 - 84000 5.9029069 444 -0 1.3194689 - 85000 6.0061591 888 -0 1.3351769 - 86000 6.1541281 888 -0 1.3508848 - 87000 6.3004079 888 -0 1.3665928 - 88000 6.4460659 888 -0 1.3823008 - 89000 6.591886 888 -0 1.3980087 - 90000 6.7376239 888 -0 1.4137167 - 91000 6.850734 888 -0 1.4294247 - 92000 6.9631939 888 -0 1.4451326 - 93000 7.0786369 888 -0 1.4608406 - 94000 7.1958089 888 -0 1.4765485 - 95000 7.3130219 888 -0 1.4922565 - 96000 7.430867 888 -0 1.5079645 - 97000 7.5498819 888 -0 1.5236724 - 98000 7.673686 888 -0 1.5393804 - 99000 7.7966969 888 -0 1.5550884 - 100000 7.921546 888 -0 1.5707963 - 101000 8.0396931 888 -0 1.5865043 - 102000 8.1583791 888 -0 1.6022123 - 103000 8.276613 888 -0 1.6179202 - 104000 8.3952639 888 -0 1.6336282 - 105000 8.514308 888 -0 1.6493361 - 106000 8.6361439 888 -0 1.6650441 - 107000 8.762326 888 -0 1.6807521 - 108000 8.8900061 888 -0 1.69646 - 109000 9.0179789 888 -0 1.712168 - 110000 9.1496761 888 -0 1.727876 - 111000 9.2728269 888 -0 1.7435839 - 112000 9.398078 888 -0 1.7592919 - 113000 9.519841 888 -0 1.7749998 - 114000 9.642343 888 -0 1.7907078 - 115000 9.7643859 888 -0 1.8064158 - 116000 9.8893411 888 -0 1.8221237 - 117000 10.01295 888 -0 1.8378317 - 118000 10.137574 888 -0 1.8535397 - 119000 10.263738 888 -0 1.8692476 - 120000 10.388673 888 -0 1.8849556 - 121000 10.507599 888 -0 1.9006636 - 122000 10.623901 888 -0 1.9163715 - 123000 10.740251 888 -0 1.9320795 - 124000 10.857467 888 -0 1.9477874 - 125000 10.975856 888 -0 1.9634954 - 126000 11.096002 888 -0 1.9792034 - 127000 11.217218 888 -0 1.9949113 - 128000 11.341925 888 -0 2.0106193 - 129000 11.467607 888 -0 2.0263273 - 130000 11.59517 888 -0 2.0420352 - 131000 11.71358 888 -0 2.0577432 - 132000 11.833024 888 -0 2.0734512 - 133000 11.954967 888 -0 2.0891591 - 134000 12.078482 888 -0 2.1048671 - 135000 12.202435 888 -0 2.120575 - 136000 12.327202 888 -0 2.136283 - 137000 12.453334 888 -0 2.151991 - 138000 12.583142 888 -0 2.1676989 - 139000 12.718396 888 -0 2.1834069 - 140000 12.854459 888 -0 2.1991149 - 141000 12.981024 888 -0 2.2148228 - 142000 13.108875 888 -0 2.2305308 - 143000 13.236802 888 -0 2.2462387 - 144000 13.36691 888 -0 2.2619467 - 145000 13.500126 888 -0 2.2776547 - 146000 13.633748 888 -0 2.2933626 - 147000 13.769077 888 -0 2.3090706 - 148000 13.90522 888 -0 2.3247786 - 149000 14.040417 888 -0 2.3404865 - 150000 14.176483 888 -0 2.3561945 - 151000 14.303389 888 -0 2.3719025 - 152000 14.432187 888 -0 2.3876104 - 153000 14.559857 888 -0 2.4033184 - 154000 14.691256 888 -0 2.4190263 - 155000 14.823413 888 -0 2.4347343 - 156000 14.956581 888 -0 2.4504423 - 157000 15.090666 888 -0 2.4661502 - 158000 15.228012 888 -0 2.4818582 - 159000 15.364569 888 -0 2.4975662 - 160000 15.501847 888 -0 2.5132741 - 161000 15.642772 888 -0 2.5289821 - 162000 15.783889 888 -0 2.54469 - 163000 15.926508 888 -0 2.560398 - 164000 16.07293 888 -0 2.576106 - 165000 16.221293 888 -0 2.5918139 - 166000 16.371738 888 -0 2.6075219 - 167000 16.523027 888 -0 2.6232299 - 168000 16.675525 888 -0 2.6389378 - 169000 16.830527 888 -0 2.6546458 - 170000 16.989955 1000 -0 2.6703538 - 171000 17.14772 1000 -0 2.6860617 - 172000 17.305565 1000 -0 2.7017697 - 173000 17.463517 1000 -0 2.7174776 - 174000 17.623862 1000 -0 2.7331856 - 175000 17.788165 1000 -0 2.7488936 - 176000 17.952028 1000 -0 2.7646015 - 177000 18.119269 1000 -0 2.7803095 - 178000 18.285714 1000 -0 2.7960175 - 179000 18.452439 1000 -0 2.8117254 - 180000 18.621119 1000 -0 2.8274334 - 181000 18.777982 1000 -0 2.8431414 - 182000 18.940248 1000 -0 2.8588493 - 183000 19.105385 1000 -0 2.8745573 - 184000 19.273934 1000 -0 2.8902652 - 185000 19.450922 1000 -0 2.9059732 - 186000 19.625563 1000 -0 2.9216812 - 187000 19.801329 1000 -0 2.9373891 - 188000 19.976869 1000 -0 2.9530971 - 189000 20.151134 1000 -0 2.9688051 - 190000 20.319214 1000 -0 2.984513 - 191000 20.485033 1000 -0 3.000221 - 192000 20.652254 1000 -0 3.0159289 - 193000 20.820876 1000 -0 3.0316369 - 194000 20.988597 1000 -0 3.0473449 - 195000 21.154705 1000 -0 3.0630528 - 196000 21.322634 1000 -0 3.0787608 - 197000 21.489394 1000 -0 3.0944688 - 198000 21.659512 1000 -0 3.1101767 - 199000 21.833228 1000 -0 3.1258847 - 200000 22.006487 1000 -0 3.1415927 -Loop time of 22.0065 on 4 procs for 200000 steps with 1000 atoms - -Performance: 37102.953 tau/day, 9088.222 timesteps/s -99.1% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.67692 | 1.166 | 1.6704 | 44.4 | 5.30 -Neigh | 0.01562 | 0.018723 | 0.0222 | 2.3 | 0.09 -Comm | 3.845 | 4.4454 | 5.0282 | 26.1 | 20.20 -Output | 0.0043464 | 0.0052906 | 0.0056455 | 0.8 | 0.02 -Modify | 12.239 | 13.152 | 14.347 | 25.1 | 59.76 -Other | | 3.22 | | | 14.63 - -Nlocal: 250 ave 257 max 244 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Nghost: 305.75 ave 372 max 242 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -Neighs: 982.5 ave 1380 max 572 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 3930 -Ave neighs/atom = 3.93 -Neighbor list builds = 216 -Dangerous builds = 0 -unfix ins -run 200000 -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.79826 - ghost atom cutoff = 1.79826 - binsize = 0.899132 -> bins = 23 23 23 -Memory usage per processor = 8.63577 Mbytes -Step CPU Atoms KinEng v_theta - 200000 0 1000 0.90316284 3.1415927 - 201000 0.16518497 1000 0.8867387 3.1573006 - 202000 0.33065486 1000 0.88745316 3.1730086 - 203000 0.4991529 1000 0.87793424 3.1887165 - 204000 0.6695168 1000 0.87009551 3.2044245 - 205000 0.83599901 1000 0.86431259 3.2201325 - 206000 1.001833 1000 0.85039776 3.2358404 - 207000 1.166487 1000 0.82897867 3.2515484 - 208000 1.3331649 1000 0.82069182 3.2672564 - 209000 1.5031869 1000 0.82349024 3.2829643 - 210000 1.6751509 1000 0.81859611 3.2986723 - 211000 1.846776 1000 0.82053992 3.3143802 - 212000 2.0198569 1000 0.82832647 3.3300882 - 213000 2.1932938 1000 0.82676865 3.3457962 - 214000 2.3676898 1000 0.82425781 3.3615041 - 215000 2.5424879 1000 0.83127148 3.3772121 - 216000 2.715348 1000 0.83925992 3.3929201 - 217000 2.8844988 1000 0.84390181 3.408628 - 218000 3.0485029 1000 0.85705713 3.424336 - 219000 3.211767 1000 0.85325946 3.440044 - 220000 3.3767338 1000 0.85641557 3.4557519 - 221000 3.5419538 1000 0.86922287 3.4714599 - 222000 3.710084 1000 0.89591143 3.4871678 - 223000 3.880873 1000 0.90395821 3.5028758 - 224000 4.054816 1000 0.91161431 3.5185838 - 225000 4.2260928 1000 0.92716425 3.5342917 - 226000 4.3996999 1000 0.91664886 3.5499997 - 227000 4.5679309 1000 0.9128853 3.5657077 - 228000 4.7353978 1000 0.91063998 3.5814156 - 229000 4.9045198 1000 0.90616712 3.5971236 - 230000 5.079206 1000 0.9042797 3.6128316 - 231000 5.252316 1000 0.91588137 3.6285395 - 232000 5.4218178 1000 0.92322871 3.6442475 - 233000 5.592988 1000 0.92370885 3.6599554 - 234000 5.753634 1000 0.91531408 3.6756634 - 235000 5.9159088 1000 0.91016621 3.6913714 - 236000 6.0817358 1000 0.89501073 3.7070793 - 237000 6.249059 1000 0.88504426 3.7227873 - 238000 6.4182718 1000 0.88268268 3.7384953 - 239000 6.5897119 1000 0.87811868 3.7542032 - 240000 6.758353 1000 0.88272663 3.7699112 - 241000 6.928581 1000 0.87751512 3.7856191 - 242000 7.0978079 1000 0.87017281 3.8013271 - 243000 7.268832 1000 0.86587613 3.8170351 - 244000 7.439904 1000 0.85157794 3.832743 - 245000 7.6105168 1000 0.8291738 3.848451 - 246000 7.7830069 1000 0.82315948 3.864159 - 247000 7.9578128 1000 0.81231703 3.8798669 - 248000 8.134944 1000 0.79931415 3.8955749 - 249000 8.3061719 1000 0.78877578 3.9112829 - 250000 8.476692 1000 0.78519942 3.9269908 - 251000 8.6525538 1000 0.78837716 3.9426988 - 252000 8.8288019 1000 0.79621044 3.9584067 - 253000 9.006846 1000 0.78744385 3.9741147 - 254000 9.1839809 1000 0.78810047 3.9898227 - 255000 9.3600328 1000 0.79053484 4.0055306 - 256000 9.538172 1000 0.79976932 4.0212386 - 257000 9.7188668 1000 0.81724577 4.0369466 - 258000 9.9032769 1000 0.81135963 4.0526545 - 259000 10.084928 1000 0.82017101 4.0683625 - 260000 10.266693 1000 0.82352898 4.0840704 - 261000 10.449515 1000 0.81662689 4.0997784 - 262000 10.630166 1000 0.82707216 4.1154864 - 263000 10.812056 1000 0.82001278 4.1311943 - 264000 10.991668 1000 0.81136264 4.1469023 - 265000 11.172162 1000 0.80507755 4.1626103 - 266000 11.353101 1000 0.80247583 4.1783182 - 267000 11.533476 1000 0.78870449 4.1940262 - 268000 11.716022 1000 0.77775428 4.2097342 - 269000 11.900351 1000 0.78170639 4.2254421 - 270000 12.083609 1000 0.78023258 4.2411501 - 271000 12.266298 1000 0.76257507 4.256858 - 272000 12.449454 1000 0.75871195 4.272566 - 273000 12.633748 1000 0.75909277 4.288274 - 274000 12.820916 1000 0.76329234 4.3039819 - 275000 13.004197 1000 0.76188557 4.3196899 - 276000 13.188507 1000 0.75974847 4.3353979 - 277000 13.372202 1000 0.75392834 4.3511058 - 278000 13.557712 1000 0.74837333 4.3668138 - 279000 13.747933 1000 0.74268307 4.3825218 - 280000 13.934871 1000 0.73840427 4.3982297 - 281000 14.11717 1000 0.73817851 4.4139377 - 282000 14.30208 1000 0.73666069 4.4296456 - 283000 14.485039 1000 0.74064713 4.4453536 - 284000 14.671087 1000 0.73916222 4.4610616 - 285000 14.863267 1000 0.73225442 4.4767695 - 286000 15.050005 1000 0.7312283 4.4924775 - 287000 15.234556 1000 0.72947519 4.5081855 - 288000 15.422593 1000 0.72469992 4.5238934 - 289000 15.609153 1000 0.70843645 4.5396014 - 290000 15.797906 1000 0.69731415 4.5553093 - 291000 15.983677 1000 0.69099822 4.5710173 - 292000 16.168935 1000 0.68855366 4.5867253 - 293000 16.355853 1000 0.69826256 4.6024332 - 294000 16.544831 1000 0.70211589 4.6181412 - 295000 16.733875 1000 0.7055847 4.6338492 - 296000 16.918698 1000 0.69692413 4.6495571 - 297000 17.100869 1000 0.68027227 4.6652651 - 298000 17.280404 1000 0.67254493 4.6809731 - 299000 17.46406 1000 0.67767946 4.696681 - 300000 17.652748 1000 0.68480172 4.712389 - 301000 17.84199 1000 0.67864643 4.7280969 - 302000 18.025759 1000 0.67656342 4.7438049 - 303000 18.208747 1000 0.67719641 4.7595129 - 304000 18.391225 1000 0.68049491 4.7752208 - 305000 18.576276 1000 0.68230722 4.7909288 - 306000 18.764125 1000 0.67985 4.8066368 - 307000 18.956063 1000 0.67790944 4.8223447 - 308000 19.147159 1000 0.6836647 4.8380527 - 309000 19.339173 1000 0.69705355 4.8537606 - 310000 19.530591 1000 0.69858847 4.8694686 - 311000 19.720214 1000 0.69448554 4.8851766 - 312000 19.907717 1000 0.68878539 4.9008845 - 313000 20.088793 1000 0.68810484 4.9165925 - 314000 20.268118 1000 0.68483484 4.9323005 - 315000 20.445564 1000 0.67732034 4.9480084 - 316000 20.627415 1000 0.67943319 4.9637164 - 317000 20.807826 1000 0.67326868 4.9794244 - 318000 20.983587 1000 0.67762092 4.9951323 - 319000 21.156655 1000 0.68914624 5.0108403 - 320000 21.331391 1000 0.69872806 5.0265482 - 321000 21.506313 1000 0.71510434 5.0422562 - 322000 21.679505 1000 0.71452122 5.0579642 - 323000 21.85396 1000 0.71765429 5.0736721 - 324000 22.02904 1000 0.72748838 5.0893801 - 325000 22.205191 1000 0.72974854 5.1050881 - 326000 22.38063 1000 0.73324928 5.120796 - 327000 22.555817 1000 0.72479525 5.136504 - 328000 22.729859 1000 0.71942855 5.152212 - 329000 22.903234 1000 0.71890587 5.1679199 - 330000 23.078575 1000 0.73495891 5.1836279 - 331000 23.252865 1000 0.74306733 5.1993358 - 332000 23.427175 1000 0.75274051 5.2150438 - 333000 23.604881 1000 0.75981346 5.2307518 - 334000 23.789045 1000 0.75410165 5.2464597 - 335000 23.971105 1000 0.74802374 5.2621677 - 336000 24.150954 1000 0.73111266 5.2778757 - 337000 24.331991 1000 0.72226021 5.2935836 - 338000 24.515157 1000 0.70866271 5.3092916 - 339000 24.69639 1000 0.70253496 5.3249995 - 340000 24.879524 1000 0.69381505 5.3407075 - 341000 25.061928 1000 0.68285569 5.3564155 - 342000 25.2437 1000 0.67262303 5.3721234 - 343000 25.423809 1000 0.67160137 5.3878314 - 344000 25.605531 1000 0.67658439 5.4035394 - 345000 25.78848 1000 0.67113748 5.4192473 - 346000 25.969866 1000 0.67506296 5.4349553 - 347000 26.152485 1000 0.67686518 5.4506633 - 348000 26.335445 1000 0.68878941 5.4663712 - 349000 26.522271 1000 0.70728493 5.4820792 - 350000 26.709942 1000 0.70870657 5.4977871 - 351000 26.889998 1000 0.71541489 5.5134951 - 352000 27.069872 1000 0.71827633 5.5292031 - 353000 27.249259 1000 0.7099127 5.544911 - 354000 27.428386 1000 0.70507946 5.560619 - 355000 27.607797 1000 0.70709703 5.576327 - 356000 27.788887 1000 0.70637714 5.5920349 - 357000 27.975344 1000 0.7088694 5.6077429 - 358000 28.164236 1000 0.70907948 5.6234508 - 359000 28.352999 1000 0.71504714 5.6391588 - 360000 28.539172 1000 0.71417205 5.6548668 - 361000 28.722691 1000 0.70716852 5.6705747 - 362000 28.906856 1000 0.70193967 5.6862827 - 363000 29.087598 1000 0.69786793 5.7019907 - 364000 29.268141 1000 0.68714789 5.7176986 - 365000 29.450765 1000 0.68170443 5.7334066 - 366000 29.633131 1000 0.67832571 5.7491146 - 367000 29.816219 1000 0.67809457 5.7648225 - 368000 29.999479 1000 0.66886004 5.7805305 - 369000 30.182675 1000 0.67233336 5.7962384 - 370000 30.36698 1000 0.67433369 5.8119464 - 371000 30.550787 1000 0.67478226 5.8276544 - 372000 30.736018 1000 0.67882814 5.8433623 - 373000 30.922576 1000 0.68494254 5.8590703 - 374000 31.107558 1000 0.69046765 5.8747783 - 375000 31.291329 1000 0.69398953 5.8904862 - 376000 31.474582 1000 0.68692367 5.9061942 - 377000 31.656979 1000 0.674184 5.9219022 - 378000 31.83851 1000 0.65899449 5.9376101 - 379000 32.019869 1000 0.65198402 5.9533181 - 380000 32.200375 1000 0.64366122 5.969026 - 381000 32.381651 1000 0.64443345 5.984734 - 382000 32.561897 1000 0.64655912 6.000442 - 383000 32.743947 1000 0.64894161 6.0161499 - 384000 32.927231 1000 0.65259561 6.0318579 - 385000 33.11882 1000 0.65230446 6.0475659 - 386000 33.311072 1000 0.64177598 6.0632738 - 387000 33.50435 1000 0.63900349 6.0789818 - 388000 33.695734 1000 0.64611067 6.0946897 - 389000 33.885915 1000 0.64943993 6.1103977 - 390000 34.076093 1000 0.66303716 6.1261057 - 391000 34.264909 1000 0.68916583 6.1418136 - 392000 34.45411 1000 0.71501556 6.1575216 - 393000 34.644116 1000 0.73685375 6.1732296 - 394000 34.834608 1000 0.74461041 6.1889375 - 395000 35.025693 1000 0.75251204 6.2046455 - 396000 35.217372 1000 0.75493054 6.2203535 - 397000 35.407008 1000 0.77028775 6.2360614 - 398000 35.594868 1000 0.7686439 6.2517694 - 399000 35.778411 1000 0.75167376 6.2674773 - 400000 35.962646 1000 0.73505917 6.2831853 -Loop time of 35.9627 on 4 procs for 200000 steps with 1000 atoms - -Performance: 22704.278 tau/day, 5561.323 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.0549 | 3.4094 | 4.9773 | 72.1 | 9.48 -Neigh | 0.022087 | 0.026923 | 0.032716 | 2.9 | 0.07 -Comm | 7.3555 | 9.2143 | 10.854 | 53.0 | 25.62 -Output | 0.0046289 | 0.0058927 | 0.0071292 | 1.4 | 0.02 -Modify | 17.504 | 19.601 | 22.342 | 44.9 | 54.50 -Other | | 3.705 | | | 10.30 - -Nlocal: 250 ave 269 max 225 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Nghost: 408.5 ave 500 max 320 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 1262.25 ave 1665 max 880 min -Histogram: 1 0 1 0 0 0 0 1 0 1 - -Total # of neighbors = 5049 -Ave neighs/atom = 5.049 -Neighbor list builds = 166 -Dangerous builds = 0 -Total wall time: 0:00:57 diff --git a/examples/hugoniostat/in.hugoniostat b/examples/hugoniostat/in.hugoniostat index affc97980c..01c2a246fc 100644 --- a/examples/hugoniostat/in.hugoniostat +++ b/examples/hugoniostat/in.hugoniostat @@ -15,7 +15,7 @@ units lj boundary p p p -atom_style atomic +atom_style atomic # Set up FCC lattice with z axis along <110> @@ -39,10 +39,10 @@ pair_coeff * * 1.0 0.8908987 fix 3 all box/relax aniso 0.0 vmax 1.0e-4 nreset 100 thermo 100 -thermo_style custom step temp pe etotal pxx pyy pzz lx ly lz +thermo_style custom step temp pe etotal pxx pyy pzz lx ly lz min_modify line quadratic -minimize 0.0 1.0e-6 10000 100000 +minimize 0.0 1.0e-6 10000 100000 # Define initial velocity @@ -51,8 +51,6 @@ write_restart restart.equil # Start Run #1 -log log.nodrag - clear read_restart restart.equil @@ -87,22 +85,20 @@ thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (no drag)' -#dump id all atom 500 dump.hugoniostat +#dump id all atom 500 dump.hugoniostat -#dump 2 all image 500 image.*.jpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 5 +#dump 2 all image 500 image.*.jpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 -#dump 3 all movie 500 movie.mpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 5 +#dump 3 all movie 500 movie.mpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 -run 10000 +run 10000 # Start Run #2 -log log.drag - clear read_restart restart.equil @@ -137,12 +133,10 @@ thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (with drag)' -run 10000 +run 10000 # Start Run #3 -log log.nhchains - clear read_restart restart.equil @@ -177,5 +171,5 @@ thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (Nose-Hoover chain)' -run 10000 +run 10000 diff --git a/examples/hugoniostat/log.27Nov18.hugoniostat.g++.1 b/examples/hugoniostat/log.27Nov18.hugoniostat.g++.1 new file mode 100644 index 0000000000..2473641dea --- /dev/null +++ b/examples/hugoniostat/log.27Nov18.hugoniostat.g++.1 @@ -0,0 +1,401 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# This script reproduces stress trajectories from Fig. 1 in +# Ravelo, Holian, Germann, and Lomdahl, PRB 70 014103 (2004) +# +# Three thermostatting scenarios are visited: undamped (nodrag), +# damped (drag) and Nose-Hoover chain (nhchains). +# +# The axial and shear stress trajectories are printed to the +# file "stress_vs_t.dat". For the damped case, the original figure +# seems to be a plot of 2*tau, rather than tau. +# +# The script also demonstrates how to +# orient a crystal along <110>, +# and how to use the lj/cubic pair style. + +units lj +boundary p p p + +atom_style atomic + +# Set up FCC lattice with z axis along <110> + +lattice fcc 1.4142136 orient x 0 0 1 orient y 1 -1 0 orient z 1 1 0 +Lattice spacing in x,y,z = 1.41421 2 2 + +region mycell block 0.0 5.0 0.0 5.0 0.0 5.0 units lattice +create_box 1 mycell +Created orthogonal box = (0 0 0) to (7.07107 10 10) + 1 by 1 by 1 MPI processor grid +mass * 1.0 +create_atoms 1 box +Created 1000 atoms + Time spent = 0.000465155 secs + +# Using units of Rmin, so sigma = 2^-1/6 = 0.8908987 + +pair_style lj/cubic +pair_coeff * * 1.0 0.8908987 + +# Relax box dimensions + +fix 3 all box/relax aniso 0.0 vmax 1.0e-4 nreset 100 + +thermo 100 +thermo_style custom step temp pe etotal pxx pyy pzz lx ly lz + +min_modify line quadratic +minimize 0.0 1.0e-6 10000 100000 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.84754 + ghost atom cutoff = 1.84754 + binsize = 0.923769, bins = 8 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.247 | 4.247 | 4.247 Mbytes +Step Temp PotEng TotEng Pxx Pyy Pzz Lx Ly Lz + 0 0 -6.2937539 -6.2937539 -2.7722431 -2.7722431 -2.7722431 7.0710677 9.9999999 9.9999999 + 100 0 -6.3319018 -6.3319018 -0.75971321 -0.75971321 -0.75971321 7.0003571 9.8999999 9.8999999 + 134 0 -6.3344257 -6.3344257 -4.5005818e-13 -4.9677973e-13 -4.9219424e-13 6.9780266 9.8684199 9.8684199 +Loop time of 0.0724094 on 1 procs for 134 steps with 1000 atoms + +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +Minimization stats: + Stopping criterion = force tolerance + Energy initial, next-to-last, final = + -6.2937539309 -6.33442568056 -6.33442568056 + Force two-norm initial, final = 3395.29 5.83329e-10 + Force max component initial, final = 1960.27 3.42093e-10 + Final line search alpha, max atom move = 1 3.42093e-10 + Iterations, force evaluations = 134 137 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.054599 | 0.054599 | 0.054599 | 0.0 | 75.40 +Neigh | 0.0011106 | 0.0011106 | 0.0011106 | 0.0 | 1.53 +Comm | 0.002012 | 0.002012 | 0.002012 | 0.0 | 2.78 +Output | 1.955e-05 | 1.955e-05 | 1.955e-05 | 0.0 | 0.03 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.01467 | | | 20.26 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1724 ave 1724 max 1724 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 21000 ave 21000 max 21000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 21000 +Ave neighs/atom = 21 +Neighbor list builds = 1 +Dangerous builds = 0 + +# Define initial velocity + +velocity all create 0.01 87287 mom yes rot yes dist gaussian +write_restart restart.equil + +# Start Run #1 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 1 by 1 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term off + +fix myhug all nphug temp 1.0 1.0 10.0 z 40.0 40.0 70.0 drag 0.0 tchain 1 pchain 0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (no drag)' + +#dump id all atom 500 dump.hugoniostat + +#dump 2 all image 500 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 500 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.771 | 2.771 | 2.771 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014381062 -0.0002397183 9.8684199 0 -0.0048551451 2.3814196 0.0041108654 + 1000 0.0093381489 0.013993216 -2.170443 -6.3381216 129.15286 58.544417 8.3142516 -4.1816719 0.93744258 23.519053 3.7381989 + 2000 0.24794909 0.37155171 -5.8915802 -6.0429087 8.3850692 1.3744507 9.5938765 -0.5228803 -0.2435043 13.910468 0.4103393 + 3000 0.38920701 0.5832267 -3.768677 -6.6246124 72.742761 28.486747 8.623805 -3.439162 0.003825459 19.697379 2.5139668 + 4000 0.67009971 1.0041444 -4.2080644 -6.1365367 35.596179 3.9344133 8.7508422 -2.9326167 -0.58039603 14.529822 1.6677129 + 5000 0.41848975 0.62710689 -4.8393088 -6.1026724 30.626544 4.6387208 8.7827245 -1.8904705 -0.31996439 13.670884 1.5250343 + 6000 0.22410139 0.33581594 -3.7652941 -6.0923259 50.807437 7.2229456 8.2549488 -2.6628477 -0.017396966 14.4806 2.3884652 + 7000 0.095001485 0.14235972 -4.5436753 -6.7307217 35.8743 3.4938089 8.4476287 -2.3294061 -0.052272192 12.957528 1.8846881 + 8000 0.043277437 0.064851239 -4.6264096 -6.2447456 39.658659 6.7266325 8.4327483 -1.6831873 0.070488482 13.553882 1.9918311 + 9000 0.018271956 0.027380526 -4.4239627 -6.3085661 41.708324 5.9081923 8.3463321 -1.9119839 0.091057512 13.503882 2.1025305 + 10000 0.0082840001 0.012413574 -4.622252 -6.3316699 39.830379 6.5596321 8.4109569 -1.7218314 0.099435465 13.482451 2.0110543 +Loop time of 6.20702 on 1 procs for 10000 steps with 1000 atoms + +Performance: 139197.321 tau/day, 1611.080 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.0198 | 5.0198 | 5.0198 | 0.0 | 80.87 +Neigh | 0.21405 | 0.21405 | 0.21405 | 0.0 | 3.45 +Comm | 0.16164 | 0.16164 | 0.16164 | 0.0 | 2.60 +Output | 0.00053501 | 0.00053501 | 0.00053501 | 0.0 | 0.01 +Modify | 0.7419 | 0.7419 | 0.7419 | 0.0 | 11.95 +Other | | 0.06911 | | | 1.11 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1886 ave 1886 max 1886 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 20874 ave 20874 max 20874 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 20874 +Ave neighs/atom = 20.874 +Neighbor list builds = 188 +Dangerous builds = 0 + +# Start Run #2 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 1 by 1 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term on + +fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0 drag 200.0 tchain 1 pchain 0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (with drag)' + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.771 | 2.771 | 2.771 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014381062 -0.0002397183 9.8684199 0 -0.0048551451 2.3814196 0.0041108654 + 1000 0.0062572991 0.0093765627 -5.9890874 -7.64465 18.918117 7.5844397 9.2338165 -1.6649392 0.02341947 13.976996 0.92138738 + 2000 0.006845108 0.010257394 -5.4565813 -7.9786876 37.064254 15.537266 8.9496404 -2.5323637 0.1023062 16.325405 1.5455017 + 3000 0.0073276109 0.010980425 -5.3663425 -7.9938818 39.907292 16.807488 8.9154852 -2.6385197 0.11818131 16.639049 1.6326833 + 4000 0.0069296915 0.010384143 -5.3623404 -8.0023271 40.010741 16.851482 8.9144328 -2.6503708 0.11868152 16.651571 1.6356847 + 5000 0.0076142476 0.01140995 -5.3631447 -8.0108329 39.997648 16.846756 8.9145416 -2.6590981 0.11841154 16.649778 1.6353255 + 6000 0.0077053839 0.011546518 -5.3628542 -8.0192007 39.991597 16.840313 8.9145803 -2.6678931 0.11818376 16.648851 1.6351691 + 7000 0.0077405662 0.011599239 -5.3623534 -8.0275624 40.000448 16.844008 8.9145774 -2.6768081 0.11809914 16.650669 1.6353525 + 8000 0.008067359 0.012088937 -5.3623759 -8.0359471 39.995327 16.840134 8.9146099 -2.6856601 0.11787118 16.649881 1.6352204 + 9000 0.0083223114 0.012470984 -5.3622992 -8.0443714 40.00571 16.847763 8.9146503 -2.6945431 0.11781538 16.652389 1.6353987 + 10000 0.0091249143 0.013673684 -5.3630142 -8.0529573 39.987196 16.837314 8.9146848 -2.7036168 0.11743028 16.648831 1.6349911 +Loop time of 5.48047 on 1 procs for 10000 steps with 1000 atoms + +Performance: 157650.687 tau/day, 1824.661 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.5166 | 4.5166 | 4.5166 | 0.0 | 82.41 +Neigh | 0.012162 | 0.012162 | 0.012162 | 0.0 | 0.22 +Comm | 0.14168 | 0.14168 | 0.14168 | 0.0 | 2.59 +Output | 0.00053787 | 0.00053787 | 0.00053787 | 0.0 | 0.01 +Modify | 0.74394 | 0.74394 | 0.74394 | 0.0 | 13.57 +Other | | 0.06553 | | | 1.20 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1724 ave 1724 max 1724 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 21000 ave 21000 max 21000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 21000 +Ave neighs/atom = 21 +Neighbor list builds = 11 +Dangerous builds = 0 + +# Start Run #3 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 1 by 1 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term off, Nose-Hoover chains + +fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (Nose-Hoover chain)' + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.771 | 2.771 | 2.771 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014381062 -0.0002397183 9.8684199 0 -0.0048551451 2.3814196 0.0041108654 + 1000 0.0083300394 0.012482564 -5.5023188 -6.3233387 35.610076 14.886667 8.9677982 -0.83350251 0.093761848 16.159481 1.500112 + 2000 0.020386462 0.030549113 -5.2949349 -6.2805556 41.760388 17.563305 8.896033 -1.0161699 0.11780863 16.85284 1.6868235 + 3000 0.049693152 0.074465188 -5.3469434 -6.2493961 39.030372 16.123483 8.9325594 -0.9769179 0.073097387 16.601986 1.6003716 + 4000 0.11859514 0.17771482 -5.207077 -6.3242752 40.941558 16.507785 8.9213147 -1.2949131 0.018189678 16.904156 1.6487282 + 5000 0.13014573 0.19502337 -5.2610248 -6.269279 39.059628 15.609345 8.9431685 -1.2032776 -0.00023747376 16.701437 1.5920344 + 6000 0.1381307 0.20698886 -5.171005 -6.2931942 40.904837 16.242165 8.9222854 -1.3291781 -0.0044770368 16.905086 1.6471589 + 7000 0.12107326 0.18142828 -5.2602554 -6.2438099 39.060928 15.57765 8.9397525 -1.1649827 0.0055890257 16.671524 1.594944 + 8000 0.14333636 0.21478954 -5.1717123 -6.304602 40.876188 16.205815 8.9218142 -1.3476793 -0.0069396327 16.895033 1.6469846 + 9000 0.12159663 0.18221255 -5.2591911 -6.2587685 39.228648 15.677869 8.9376641 -1.18179 0.0077357066 16.688862 1.6001283 + 10000 0.15321883 0.22959841 -5.1881787 -6.3448453 40.666451 16.146177 8.922851 -1.386265 -0.0091929687 16.860705 1.6418699 +Loop time of 5.6426 on 1 procs for 10000 steps with 1000 atoms + +Performance: 153120.907 tau/day, 1772.233 timesteps/s +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.5653 | 4.5653 | 4.5653 | 0.0 | 80.91 +Neigh | 0.10885 | 0.10885 | 0.10885 | 0.0 | 1.93 +Comm | 0.14695 | 0.14695 | 0.14695 | 0.0 | 2.60 +Output | 0.00055218 | 0.00055218 | 0.00055218 | 0.0 | 0.01 +Modify | 0.75364 | 0.75364 | 0.75364 | 0.0 | 13.36 +Other | | 0.0673 | | | 1.19 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1724 ave 1724 max 1724 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 20654 ave 20654 max 20654 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 20654 +Ave neighs/atom = 20.654 +Neighbor list builds = 94 +Dangerous builds = 0 + +Total wall time: 0:00:17 diff --git a/examples/hugoniostat/log.27Nov18.hugoniostat.g++.4 b/examples/hugoniostat/log.27Nov18.hugoniostat.g++.4 new file mode 100644 index 0000000000..30f1335ea9 --- /dev/null +++ b/examples/hugoniostat/log.27Nov18.hugoniostat.g++.4 @@ -0,0 +1,401 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# This script reproduces stress trajectories from Fig. 1 in +# Ravelo, Holian, Germann, and Lomdahl, PRB 70 014103 (2004) +# +# Three thermostatting scenarios are visited: undamped (nodrag), +# damped (drag) and Nose-Hoover chain (nhchains). +# +# The axial and shear stress trajectories are printed to the +# file "stress_vs_t.dat". For the damped case, the original figure +# seems to be a plot of 2*tau, rather than tau. +# +# The script also demonstrates how to +# orient a crystal along <110>, +# and how to use the lj/cubic pair style. + +units lj +boundary p p p + +atom_style atomic + +# Set up FCC lattice with z axis along <110> + +lattice fcc 1.4142136 orient x 0 0 1 orient y 1 -1 0 orient z 1 1 0 +Lattice spacing in x,y,z = 1.41421 2 2 + +region mycell block 0.0 5.0 0.0 5.0 0.0 5.0 units lattice +create_box 1 mycell +Created orthogonal box = (0 0 0) to (7.07107 10 10) + 1 by 2 by 2 MPI processor grid +mass * 1.0 +create_atoms 1 box +Created 1000 atoms + Time spent = 0.0003438 secs + +# Using units of Rmin, so sigma = 2^-1/6 = 0.8908987 + +pair_style lj/cubic +pair_coeff * * 1.0 0.8908987 + +# Relax box dimensions + +fix 3 all box/relax aniso 0.0 vmax 1.0e-4 nreset 100 + +thermo 100 +thermo_style custom step temp pe etotal pxx pyy pzz lx ly lz + +min_modify line quadratic +minimize 0.0 1.0e-6 10000 100000 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.84754 + ghost atom cutoff = 1.84754 + binsize = 0.923769, bins = 8 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.211 | 4.211 | 4.211 Mbytes +Step Temp PotEng TotEng Pxx Pyy Pzz Lx Ly Lz + 0 0 -6.2937539 -6.2937539 -2.7722431 -2.7722431 -2.7722431 7.0710677 9.9999999 9.9999999 + 100 0 -6.3319018 -6.3319018 -0.75971321 -0.75971321 -0.75971321 7.0003571 9.8999999 9.8999999 + 134 0 -6.3344257 -6.3344257 -4.5046204e-13 -4.92206e-13 -4.9610344e-13 6.9780266 9.8684199 9.8684199 +Loop time of 0.0269771 on 4 procs for 134 steps with 1000 atoms + +94.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +Minimization stats: + Stopping criterion = force tolerance + Energy initial, next-to-last, final = + -6.2937539309 -6.33442568056 -6.33442568056 + Force two-norm initial, final = 3395.29 5.80609e-10 + Force max component initial, final = 1960.27 3.41627e-10 + Final line search alpha, max atom move = 1 3.41627e-10 + Iterations, force evaluations = 134 137 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.011534 | 0.013897 | 0.016008 | 1.3 | 51.51 +Neigh | 0.00024176 | 0.00029498 | 0.00035191 | 0.0 | 1.09 +Comm | 0.0029764 | 0.0050126 | 0.0073018 | 2.2 | 18.58 +Output | 1.8835e-05 | 1.9968e-05 | 2.2888e-05 | 0.0 | 0.07 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.007753 | | | 28.74 + +Nlocal: 250 ave 305 max 205 min +Histogram: 1 0 0 0 2 0 0 0 0 1 +Nghost: 829 ave 874 max 774 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 5250 ave 6445 max 4305 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 21000 +Ave neighs/atom = 21 +Neighbor list builds = 1 +Dangerous builds = 0 + +# Define initial velocity + +velocity all create 0.01 87287 mom yes rot yes dist gaussian +write_restart restart.equil + +# Start Run #1 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 2 by 2 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term off + +fix myhug all nphug temp 1.0 1.0 10.0 z 40.0 40.0 70.0 drag 0.0 tchain 1 pchain 0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (no drag)' + +#dump id all atom 500 dump.hugoniostat + +#dump 2 all image 500 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 500 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.717 | 2.809 | 3.086 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014347835 -0.00026463907 9.8684199 0 -0.0048551516 2.3786668 0.0041061135 + 1000 0.010586668 0.015864122 -2.1721826 -6.3380886 129.03334 58.456626 8.3141284 -4.1817701 0.93542408 23.507246 3.7366154 + 2000 0.3321368 0.49770699 -5.584787 -6.0546694 12.097343 1.2026972 9.4615963 -0.96758935 -0.3571439 13.858218 0.5942385 + 3000 0.46981685 0.70402055 -3.9208474 -6.3911005 63.005989 22.559106 8.6828663 -3.1742737 -0.16958917 18.776521 2.2842567 + 4000 0.54866493 0.82217439 -4.1703408 -6.2427645 38.408608 4.9066022 8.6573289 -2.894598 -0.45434132 14.506935 1.8023166 + 5000 0.30625495 0.45892304 -4.7355785 -6.186448 35.000599 6.2097986 8.6658098 -1.9097925 -0.19603125 13.896448 1.7145489 + 6000 0.13938196 0.20886386 -4.303964 -5.7629121 50.370681 12.189231 8.3966581 -1.6678119 0.11451271 15.088809 2.2724852 + 7000 0.055349516 0.082941249 -5.2031342 -6.8043199 30.859256 6.5562297 8.6850282 -1.684127 0.020586458 13.152479 1.5971879 + 8000 0.027926794 0.0418483 -4.5281656 -5.4484008 48.145681 12.229919 8.4107051 -0.96208352 0.19922201 14.821877 2.2112219 + 9000 0.018195086 0.027265336 -4.9847444 -6.5712684 37.347655 8.7291385 8.5606968 -1.6137894 0.10912534 13.773573 1.8458438 + 10000 0.0082893467 0.012421586 -5.0130076 -6.6821423 36.46118 8.3386716 8.5689995 -1.6815563 0.1065388 13.651975 1.8180818 +Loop time of 2.01177 on 4 procs for 10000 steps with 1000 atoms + +Performance: 429472.539 tau/day, 4970.747 timesteps/s +98.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2437 | 1.2651 | 1.2843 | 1.7 | 62.89 +Neigh | 0.051696 | 0.052503 | 0.053247 | 0.3 | 2.61 +Comm | 0.24826 | 0.26724 | 0.28867 | 3.5 | 13.28 +Output | 0.00058603 | 0.00085759 | 0.0016623 | 0.0 | 0.04 +Modify | 0.37363 | 0.37671 | 0.38189 | 0.5 | 18.73 +Other | | 0.04935 | | | 2.45 + +Nlocal: 250 ave 260 max 240 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 927.5 ave 934 max 921 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 5048.5 ave 5203 max 4889 min +Histogram: 1 1 0 0 0 0 0 0 1 1 + +Total # of neighbors = 20194 +Ave neighs/atom = 20.194 +Neighbor list builds = 175 +Dangerous builds = 0 + +# Start Run #2 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 2 by 2 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term on + +fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0 drag 200.0 tchain 1 pchain 0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (with drag)' + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.717 | 2.809 | 3.086 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014347835 -0.00026463907 9.8684199 0 -0.0048551516 2.3786668 0.0041061135 + 1000 0.0063089138 0.0094539073 -5.9892326 -7.6448129 18.914956 7.5823222 9.2337797 -1.6650342 0.023426454 13.975434 0.92133642 + 2000 0.0068813683 0.01031173 -5.4566765 -7.9789037 37.064192 15.537213 8.9495783 -2.5325388 0.10234565 16.32485 1.5455517 + 3000 0.0072427316 0.010853233 -5.3662818 -7.9940958 39.906002 16.80569 8.9154322 -2.6386672 0.11821344 16.638326 1.6327015 + 4000 0.0070936522 0.010629838 -5.3626164 -8.0025859 40.007994 16.850321 8.9143648 -2.6505993 0.11869226 16.650416 1.6356859 + 5000 0.0074091958 0.01110268 -5.3628943 -8.0110325 39.998199 16.845204 8.9144816 -2.6592409 0.11846422 16.649379 1.6353872 + 6000 0.0077388573 0.011596678 -5.3629264 -8.0194804 39.995216 16.842807 8.9145056 -2.6681507 0.11826582 16.648964 1.635306 + 7000 0.0076023298 0.011392091 -5.3621083 -8.0277598 39.998343 16.839762 8.9144789 -2.6770435 0.11810824 16.649386 1.6353924 + 8000 0.007691692 0.011526001 -5.361706 -8.0360632 40.000701 16.839078 8.9144843 -2.6858833 0.11795313 16.649923 1.6354361 + 9000 0.0082153298 0.012310672 -5.3620899 -8.0446091 40.006134 16.845865 8.914544 -2.6948299 0.11785259 16.651566 1.6354969 + 10000 0.0088368792 0.013242063 -5.3625357 -8.0530825 39.989575 16.835079 8.914577 -2.7037888 0.1174907 16.648402 1.6351306 +Loop time of 1.80214 on 4 procs for 10000 steps with 1000 atoms + +Performance: 479429.980 tau/day, 5548.958 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1353 | 1.1591 | 1.1787 | 1.5 | 64.32 +Neigh | 0.0028975 | 0.0029137 | 0.0029218 | 0.0 | 0.16 +Comm | 0.20882 | 0.22752 | 0.25213 | 3.4 | 12.62 +Output | 0.00058103 | 0.0007953 | 0.0014329 | 0.0 | 0.04 +Modify | 0.36598 | 0.36908 | 0.37078 | 0.3 | 20.48 +Other | | 0.04277 | | | 2.37 + +Nlocal: 250 ave 258 max 239 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Nghost: 829 ave 840 max 821 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Neighs: 5250 ave 5360 max 5090 min +Histogram: 1 0 0 0 1 0 0 0 0 2 + +Total # of neighbors = 21000 +Ave neighs/atom = 21 +Neighbor list builds = 10 +Dangerous builds = 0 + +# Start Run #3 + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0.0465206 0.06579 0.06579) to (7.02455 9.93421 9.93421) + 1 by 2 by 2 MPI processor grid + restoring pair style lj/cubic from restart + 1000 atoms + +neighbor 0.2 bin +neigh_modify every 1 delay 0 check yes +timestep 0.001 +reset_timestep 0 + +# Pzz = 40.0, drag/damping term off, Nose-Hoover chains + +fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0 + +# Specify reference state from paper, times 1000 atoms + +fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519 + +# Add fix energy to ouput etotal + +fix_modify myhug energy yes + +# Define output + +variable dele equal f_myhug[1] # energy delta [temperature] +variable us equal f_myhug[2] # shock velocity [distance/time] +variable up equal f_myhug[3] # particle velocity [distance/time] +variable pzz equal pzz # axial stress +variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress +variable time equal dt*step + +thermo 1000 +thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up + +fix stress all print 10 "${time} ${pzz} ${tau} " screen no append stress_vs_t.dat title '#time pzz tau (Nose-Hoover chain)' + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.74754 + ghost atom cutoff = 1.74754 + binsize = 0.873769, bins = 8 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.717 | 2.809 | 3.086 Mbytes +Step Temp KinEng E_pair TotEng Pzz v_tau Lz f_myhug v_dele v_us v_up + 0 0.01 0.014985 -6.3344257 -6.3194407 0.014347835 -0.00026463907 9.8684199 0 -0.0048551516 2.3786668 0.0041061135 + 1000 0.0078345827 0.011740122 -5.501714 -6.3232649 35.616592 14.888101 8.9677603 -0.833291 0.093891974 16.160626 1.5002802 + 2000 0.019260469 0.028861813 -5.2936047 -6.2784351 41.771445 17.563018 8.895899 -1.0136922 0.11811779 16.853929 1.687161 + 3000 0.048111305 0.072094791 -5.3454082 -6.2447367 39.061491 16.137184 8.932261 -0.97142325 0.073850675 16.606004 1.6012602 + 4000 0.11854629 0.17764161 -5.2071426 -6.3210422 40.843054 16.426156 8.9202992 -1.2915412 0.017621345 16.874925 1.6476105 + 5000 0.13634167 0.204308 -5.2645153 -6.3135608 39.098316 15.628006 8.9407716 -1.2533534 -0.00067532215 16.688495 1.5948471 + 6000 0.14222646 0.21312635 -5.1774703 -6.3289809 40.888616 16.260775 8.9214855 -1.3646369 -0.0041713956 16.89472 1.6475159 + 7000 0.12683662 0.19006468 -5.2679846 -6.2838171 39.084233 15.633883 8.939337 -1.2058972 0.0057260888 16.672835 1.5957701 + 8000 0.14531516 0.21775476 -5.1737923 -6.3237483 40.861161 16.191124 8.9199968 -1.3677107 -0.0065481979 16.876021 1.6482339 + 9000 0.12123357 0.18166851 -5.2546748 -6.2570254 39.276123 15.677988 8.9363522 -1.1840191 0.0075191856 16.687414 1.6022039 + 10000 0.14771416 0.22134967 -5.1833988 -6.3104954 40.578265 16.080163 8.9245634 -1.3484463 -0.0098090911 16.857414 1.6386293 +Loop time of 1.8702 on 4 procs for 10000 steps with 1000 atoms + +Performance: 461983.152 tau/day, 5347.027 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1723 | 1.1812 | 1.1956 | 0.9 | 63.16 +Neigh | 0.028221 | 0.030409 | 0.035555 | 1.7 | 1.63 +Comm | 0.22963 | 0.24139 | 0.25155 | 1.6 | 12.91 +Output | 0.00055218 | 0.00077897 | 0.0014515 | 0.0 | 0.04 +Modify | 0.37165 | 0.37241 | 0.3732 | 0.1 | 19.91 +Other | | 0.04404 | | | 2.35 + +Nlocal: 250 ave 257 max 244 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 832.25 ave 840 max 822 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 5144.25 ave 5282 max 4949 min +Histogram: 1 0 0 0 0 1 0 1 0 1 + +Total # of neighbors = 20577 +Ave neighs/atom = 20.577 +Neighbor list builds = 95 +Dangerous builds = 0 + +Total wall time: 0:00:05 diff --git a/examples/indent/log.5Oct16.indent.g++.1 b/examples/indent/log.27Nov18.indent.g++.1 similarity index 82% rename from examples/indent/log.5Oct16.indent.g++.1 rename to examples/indent/log.27Nov18.indent.g++.1 index 8c718d44b1..746f1322fb 100644 --- a/examples/indent/log.5Oct16.indent.g++.1 +++ b/examples/indent/log.27Nov18.indent.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d indenter simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.283174) to (22.6539 19.6189 0.283174) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.000351191 secs mass 1 1.0 mass 2 1.0 @@ -57,7 +59,7 @@ fix 5 all enforce2d thermo 1000 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 250 dump.indent @@ -69,13 +71,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 30000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 17 15 1 -Memory usage per processor = 2.4697 Mbytes + binsize = 1.4, bins = 17 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.043 | 3.043 | 3.043 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.2 -3.1727576 0 -3.0018052 -1.436185 444.53333 1000 0.11974254 -3.0876892 0 -2.9853378 -0.037059247 440.78771 @@ -108,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press Volume 28000 0.1183178 -3.0017823 0 -2.9006488 1.3477212 474.08453 29000 0.118332 -2.9855957 0 -2.88445 1.4002777 478.49231 30000 0.11691453 -2.9721091 0 -2.872175 1.6266108 479.0394 -Loop time of 2.36919 on 1 procs for 30000 steps with 420 atoms +Loop time of 2.58797 on 1 procs for 30000 steps with 420 atoms -Performance: 3282134.431 tau/day, 12662.556 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3004676.853 tau/day, 11592.117 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.7824 | 1.7824 | 1.7824 | 0.0 | 75.23 -Neigh | 0.073035 | 0.073035 | 0.073035 | 0.0 | 3.08 -Comm | 0.023414 | 0.023414 | 0.023414 | 0.0 | 0.99 -Output | 0.00027108 | 0.00027108 | 0.00027108 | 0.0 | 0.01 -Modify | 0.42744 | 0.42744 | 0.42744 | 0.0 | 18.04 -Other | | 0.06268 | | | 2.65 +Pair | 1.7803 | 1.7803 | 1.7803 | 0.0 | 68.79 +Neigh | 0.074505 | 0.074505 | 0.074505 | 0.0 | 2.88 +Comm | 0.038266 | 0.038266 | 0.038266 | 0.0 | 1.48 +Output | 0.00033927 | 0.00033927 | 0.00033927 | 0.0 | 0.01 +Modify | 0.61562 | 0.61562 | 0.61562 | 0.0 | 23.79 +Other | | 0.07897 | | | 3.05 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -139,7 +146,7 @@ Dangerous builds = 0 unfix 4 run 30000 -Memory usage per processor = 2.46978 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.043 | 3.043 | 3.043 Mbytes Step Temp E_pair E_mol TotEng Press Volume 30000 0.11691453 -2.9721091 0 -2.872175 1.6267079 479.0108 31000 0.10925212 -3.0270482 0 -2.9336637 -0.33277278 488.93429 @@ -172,20 +179,20 @@ Step Temp E_pair E_mol TotEng Press Volume 58000 0.10703451 -3.04105 0 -2.949561 -0.2673909 482.03847 59000 0.11041464 -3.0439806 0 -2.9496023 -0.17616699 481.33957 60000 0.12014097 -3.05226 0 -2.949568 -0.21176633 481.15213 -Loop time of 2.11008 on 1 procs for 30000 steps with 420 atoms +Loop time of 2.20628 on 1 procs for 30000 steps with 420 atoms -Performance: 3685166.663 tau/day, 14217.464 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3524485.426 tau/day, 13597.552 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.7612 | 1.7612 | 1.7612 | 0.0 | 83.46 -Neigh | 0.072587 | 0.072587 | 0.072587 | 0.0 | 3.44 -Comm | 0.023835 | 0.023835 | 0.023835 | 0.0 | 1.13 -Output | 0.00023365 | 0.00023365 | 0.00023365 | 0.0 | 0.01 -Modify | 0.19556 | 0.19556 | 0.19556 | 0.0 | 9.27 -Other | | 0.05669 | | | 2.69 +Pair | 1.7599 | 1.7599 | 1.7599 | 0.0 | 79.77 +Neigh | 0.074152 | 0.074152 | 0.074152 | 0.0 | 3.36 +Comm | 0.037216 | 0.037216 | 0.037216 | 0.0 | 1.69 +Output | 0.00033259 | 0.00033259 | 0.00033259 | 0.0 | 0.02 +Modify | 0.25688 | 0.25688 | 0.25688 | 0.0 | 11.64 +Other | | 0.07779 | | | 3.53 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/indent/log.5Oct16.indent.g++.4 b/examples/indent/log.27Nov18.indent.g++.4 similarity index 82% rename from examples/indent/log.5Oct16.indent.g++.4 rename to examples/indent/log.27Nov18.indent.g++.4 index 3d96cf6185..1f0556475b 100644 --- a/examples/indent/log.5Oct16.indent.g++.4 +++ b/examples/indent/log.27Nov18.indent.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d indenter simulation dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.283174) to (22.6539 19.6189 0.283174) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.00031352 secs mass 1 1.0 mass 2 1.0 @@ -57,7 +59,7 @@ fix 5 all enforce2d thermo 1000 thermo_modify temp new -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 250 dump.indent @@ -69,13 +71,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 30000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 17 15 1 -Memory usage per processor = 2.47636 Mbytes + binsize = 1.4, bins = 17 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.047 | 3.047 | 3.047 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0.2 -3.1727576 0 -3.0018052 -1.436185 444.53333 1000 0.11573595 -3.0964873 0 -2.9975606 -0.20448672 441.83732 @@ -108,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press Volume 28000 0.11718062 -2.993818 0 -2.8936565 1.143781 478.94786 29000 0.10922042 -2.9873887 0 -2.8940313 1.6184815 473.13968 30000 0.11475456 -2.9749758 0 -2.876888 1.8682946 472.49357 -Loop time of 1.05783 on 4 procs for 30000 steps with 420 atoms +Loop time of 1.15893 on 4 procs for 30000 steps with 420 atoms -Performance: 7350928.409 tau/day, 28360.063 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 6709635.246 tau/day, 25885.938 timesteps/s +97.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.40826 | 0.46628 | 0.5198 | 6.6 | 44.08 -Neigh | 0.017807 | 0.019817 | 0.021682 | 1.1 | 1.87 -Comm | 0.22255 | 0.26884 | 0.31893 | 8.2 | 25.41 -Output | 0.0005722 | 0.00060749 | 0.00070214 | 0.2 | 0.06 -Modify | 0.18744 | 0.19364 | 0.20341 | 1.5 | 18.31 -Other | | 0.1086 | | | 10.27 +Pair | 0.39848 | 0.4603 | 0.53798 | 8.6 | 39.72 +Neigh | 0.018286 | 0.020391 | 0.022765 | 1.4 | 1.76 +Comm | 0.18903 | 0.27493 | 0.34712 | 13.2 | 23.72 +Output | 0.00055623 | 0.00077116 | 0.0014129 | 0.0 | 0.07 +Modify | 0.28166 | 0.29302 | 0.30362 | 1.5 | 25.28 +Other | | 0.1095 | | | 9.45 Nlocal: 105 ave 115 max 90 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -139,7 +146,7 @@ Dangerous builds = 0 unfix 4 run 30000 -Memory usage per processor = 2.47641 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.047 | 3.048 | 3.048 Mbytes Step Temp E_pair E_mol TotEng Press Volume 30000 0.11475456 -2.9749758 0 -2.876888 1.8675667 472.67773 31000 0.11574891 -3.0442299 0 -2.9452921 -0.72600606 489.16618 @@ -172,20 +179,20 @@ Step Temp E_pair E_mol TotEng Press Volume 58000 0.11858604 -3.0812503 0 -2.9798874 -0.17502776 463.2168 59000 0.11344551 -3.0768536 0 -2.9798847 -0.32382437 465.29204 60000 0.11637998 -3.0793607 0 -2.9798836 -0.45942931 466.04868 -Loop time of 0.87344 on 4 procs for 30000 steps with 420 atoms +Loop time of 0.903556 on 4 procs for 30000 steps with 420 atoms -Performance: 8902734.020 tau/day, 34346.968 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 8605992.311 tau/day, 33202.131 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.38824 | 0.45201 | 0.49914 | 6.9 | 51.75 -Neigh | 0.0175 | 0.020234 | 0.022472 | 1.5 | 2.32 -Comm | 0.21322 | 0.26426 | 0.33067 | 10.0 | 30.25 -Output | 0.00049305 | 0.00051773 | 0.00058699 | 0.2 | 0.06 -Modify | 0.04793 | 0.053404 | 0.05745 | 1.8 | 6.11 -Other | | 0.08302 | | | 9.50 +Pair | 0.3899 | 0.45567 | 0.53041 | 8.7 | 50.43 +Neigh | 0.017401 | 0.021048 | 0.024747 | 2.1 | 2.33 +Comm | 0.17915 | 0.26432 | 0.34168 | 13.8 | 29.25 +Output | 0.00051928 | 0.00093985 | 0.0021935 | 0.0 | 0.10 +Modify | 0.067609 | 0.075224 | 0.08228 | 2.4 | 8.33 +Other | | 0.08635 | | | 9.56 Nlocal: 105 ave 112 max 98 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -198,4 +205,4 @@ Total # of neighbors = 3569 Ave neighs/atom = 8.49762 Neighbor list builds = 634 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/indent/log.5Oct16.indent.min.g++.1 b/examples/indent/log.27Nov18.indent.min.g++.1 similarity index 77% rename from examples/indent/log.5Oct16.indent.min.g++.1 rename to examples/indent/log.27Nov18.indent.min.g++.1 index e988892da1..ce5b0b1b61 100644 --- a/examples/indent/log.5Oct16.indent.min.g++.1 +++ b/examples/indent/log.27Nov18.indent.min.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d indenter simulation with minimization instead of dynamics dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.283174) to (22.6539 19.6189 0.283174) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.000453234 secs mass * 1.0 @@ -57,24 +59,29 @@ thermo 10 #dump_modify 3 pad 4 minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 17 15 1 -Memory usage per processor = 3.5947 Mbytes + binsize = 1.4, bins = 17 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 -3.1727576 0 -3.1727576 -1.5977027 444.53333 10 0 -3.1815908 0 -3.1815908 -1.1226904 440.57558 20 0 -3.1895471 0 -3.1895471 -0.86027602 436.93033 30 0 -3.1908366 0 -3.1908366 -0.72179223 436.93033 35 0 -3.1909386 0 -3.1909386 -0.69788745 433.53082 -Loop time of 0.00874686 on 1 procs for 35 steps with 420 atoms +Loop time of 0.00889349 on 1 procs for 35 steps with 420 atoms -102.9% CPU use with 1 MPI tasks x no OpenMP threads +98.1% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -88,12 +95,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0074182 | 0.0074182 | 0.0074182 | 0.0 | 84.81 -Neigh | 0.00042582 | 0.00042582 | 0.00042582 | 0.0 | 4.87 -Comm | 7.2718e-05 | 7.2718e-05 | 7.2718e-05 | 0.0 | 0.83 -Output | 2.2173e-05 | 2.2173e-05 | 2.2173e-05 | 0.0 | 0.25 -Modify | 0.00011134 | 0.00011134 | 0.00011134 | 0.0 | 1.27 -Other | | 0.0006967 | | | 7.96 +Pair | 0.0073352 | 0.0073352 | 0.0073352 | 0.0 | 82.48 +Neigh | 0.00039649 | 0.00039649 | 0.00039649 | 0.0 | 4.46 +Comm | 9.8944e-05 | 9.8944e-05 | 9.8944e-05 | 0.0 | 1.11 +Output | 2.718e-05 | 2.718e-05 | 2.718e-05 | 0.0 | 0.31 +Modify | 0.00016856 | 0.00016856 | 0.00016856 | 0.0 | 1.90 +Other | | 0.0008671 | | | 9.75 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -114,8 +121,8 @@ fix 4 all indent $k sphere 10 13.0 0 6.0 fix 4 all indent 4414.24643457407 sphere 10 13.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.5947 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 35 0 -3.1909386 0 -2.174369 -0.6944516 435.67574 40 0 -3.1462704 0 -3.1261242 -0.20646557 435.67534 @@ -127,9 +134,9 @@ Step Temp E_pair E_mol TotEng Press Volume 100 0 -3.1812307 0 -3.1805381 -0.15305004 434.96379 110 0 -3.1812588 0 -3.1805938 -0.12504604 432.50683 111 0 -3.1812728 0 -3.1805961 -0.12407116 432.50683 -Loop time of 0.02054 on 1 procs for 76 steps with 420 atoms +Loop time of 0.0211506 on 1 procs for 76 steps with 420 atoms -97.4% CPU use with 1 MPI tasks x no OpenMP threads +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -143,12 +150,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.015534 | 0.015534 | 0.015534 | 0.0 | 75.63 -Neigh | 0.0021462 | 0.0021462 | 0.0021462 | 0.0 | 10.45 -Comm | 0.00019169 | 0.00019169 | 0.00019169 | 0.0 | 0.93 -Output | 6.2704e-05 | 6.2704e-05 | 6.2704e-05 | 0.0 | 0.31 -Modify | 0.00095463 | 0.00095463 | 0.00095463 | 0.0 | 4.65 -Other | | 0.001651 | | | 8.04 +Pair | 0.015347 | 0.015347 | 0.015347 | 0.0 | 72.56 +Neigh | 0.002106 | 0.002106 | 0.002106 | 0.0 | 9.96 +Comm | 0.00025511 | 0.00025511 | 0.00025511 | 0.0 | 1.21 +Output | 7.1287e-05 | 7.1287e-05 | 7.1287e-05 | 0.0 | 0.34 +Modify | 0.0013864 | 0.0013864 | 0.0013864 | 0.0 | 6.55 +Other | | 0.001985 | | | 9.38 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -166,8 +173,8 @@ fix 4 all indent ${k1} sphere 10 12.5 0 6.0 fix 4 all indent 882.849286914813 sphere 10 12.5 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.5947 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 111 0 -3.1812728 0 -0.21796953 -0.12362158 434.07977 120 0 -2.9592755 0 -2.8003562 1.9418398 434.0832 @@ -179,9 +186,9 @@ Step Temp E_pair E_mol TotEng Press Volume 180 0 -3.1041304 0 -3.0969544 1.3751461 430.37017 190 0 -3.1043441 0 -3.0970791 1.392095 430.37017 193 0 -3.1043345 0 -3.0970891 1.3934777 430.37017 -Loop time of 0.0210519 on 1 procs for 82 steps with 420 atoms +Loop time of 0.0218823 on 1 procs for 82 steps with 420 atoms -104.5% CPU use with 1 MPI tasks x no OpenMP threads +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -195,12 +202,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.01655 | 0.01655 | 0.01655 | 0.0 | 78.62 -Neigh | 0.0016158 | 0.0016158 | 0.0016158 | 0.0 | 7.68 -Comm | 0.00016141 | 0.00016141 | 0.00016141 | 0.0 | 0.77 -Output | 5.4359e-05 | 5.4359e-05 | 5.4359e-05 | 0.0 | 0.26 -Modify | 0.0010245 | 0.0010245 | 0.0010245 | 0.0 | 4.87 -Other | | 0.001646 | | | 7.82 +Pair | 0.016445 | 0.016445 | 0.016445 | 0.0 | 75.15 +Neigh | 0.0015912 | 0.0015912 | 0.0015912 | 0.0 | 7.27 +Comm | 0.00024986 | 0.00024986 | 0.00024986 | 0.0 | 1.14 +Output | 7.1526e-05 | 7.1526e-05 | 7.1526e-05 | 0.0 | 0.33 +Modify | 0.0014741 | 0.0014741 | 0.0014741 | 0.0 | 6.74 +Other | | 0.002051 | | | 9.37 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -218,8 +225,8 @@ fix 4 all indent ${k1} sphere 10 12.0 0 6.0 fix 4 all indent 882.849286914813 sphere 10 12.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.5947 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 193 0 -3.1043345 0 2.0111862 1.3910056 431.13503 200 0 -2.5918177 0 -1.931934 5.51119 430.91952 @@ -235,9 +242,9 @@ Step Temp E_pair E_mol TotEng Press Volume 300 0 -3.1107855 0 -3.1043751 1.0663324 470.76888 310 0 -3.1124671 0 -3.1059633 1.0375877 473.02275 316 0 -3.1126981 0 -3.1061297 1.0266662 473.02275 -Loop time of 0.0372601 on 1 procs for 123 steps with 420 atoms +Loop time of 0.0387044 on 1 procs for 123 steps with 420 atoms -99.3% CPU use with 1 MPI tasks x no OpenMP threads +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -251,12 +258,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.028822 | 0.028822 | 0.028822 | 0.0 | 77.35 -Neigh | 0.0035007 | 0.0035007 | 0.0035007 | 0.0 | 9.40 -Comm | 0.00031781 | 0.00031781 | 0.00031781 | 0.0 | 0.85 -Output | 8.1539e-05 | 8.1539e-05 | 8.1539e-05 | 0.0 | 0.22 -Modify | 0.0017815 | 0.0017815 | 0.0017815 | 0.0 | 4.78 -Other | | 0.002757 | | | 7.40 +Pair | 0.028596 | 0.028596 | 0.028596 | 0.0 | 73.88 +Neigh | 0.0035679 | 0.0035679 | 0.0035679 | 0.0 | 9.22 +Comm | 0.00047278 | 0.00047278 | 0.00047278 | 0.0 | 1.22 +Output | 0.0001111 | 0.0001111 | 0.0001111 | 0.0 | 0.29 +Modify | 0.0025539 | 0.0025539 | 0.0025539 | 0.0 | 6.60 +Other | | 0.003402 | | | 8.79 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -274,8 +281,8 @@ fix 4 all indent ${k1} sphere 10 11.4 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.4 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.5947 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 316 0 -3.1126981 0 5.3552772 1.0307152 471.16452 320 0 -2.7131804 0 0.70918694 3.910187 471.16482 @@ -294,9 +301,9 @@ Step Temp E_pair E_mol TotEng Press Volume 450 0 -3.0420658 0 -3.0294992 1.6461313 493.96169 460 0 -3.0443144 0 -3.0312966 1.6701433 493.56812 465 0 -3.0444584 0 -3.0313908 1.6713796 493.56812 -Loop time of 0.0447221 on 1 procs for 149 steps with 420 atoms +Loop time of 0.046638 on 1 procs for 149 steps with 420 atoms -96.1% CPU use with 1 MPI tasks x no OpenMP threads +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -310,12 +317,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.034669 | 0.034669 | 0.034669 | 0.0 | 77.52 -Neigh | 0.0041096 | 0.0041096 | 0.0041096 | 0.0 | 9.19 -Comm | 0.00039029 | 0.00039029 | 0.00039029 | 0.0 | 0.87 -Output | 0.00010586 | 0.00010586 | 0.00010586 | 0.0 | 0.24 -Modify | 0.0021372 | 0.0021372 | 0.0021372 | 0.0 | 4.78 -Other | | 0.00331 | | | 7.40 +Pair | 0.034523 | 0.034523 | 0.034523 | 0.0 | 74.02 +Neigh | 0.0042307 | 0.0042307 | 0.0042307 | 0.0 | 9.07 +Comm | 0.00056744 | 0.00056744 | 0.00056744 | 0.0 | 1.22 +Output | 0.00013828 | 0.00013828 | 0.00013828 | 0.0 | 0.30 +Modify | 0.0030701 | 0.0030701 | 0.0030701 | 0.0 | 6.58 +Other | | 0.004109 | | | 8.81 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -333,8 +340,8 @@ fix 4 all indent ${k1} sphere 10 11.2 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.2 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.59478 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.168 | 4.168 | 4.168 Mbytes Step Temp E_pair E_mol TotEng Press Volume 465 0 -3.0444584 0 -2.5580192 1.6715946 493.50462 470 0 -2.9426683 0 -2.8814986 2.6421083 493.54443 @@ -357,9 +364,9 @@ Step Temp E_pair E_mol TotEng Press Volume 640 0 -3.0778611 0 -3.0710808 1.1946248 520.31492 650 0 -3.0781525 0 -3.0715363 1.2031624 520.31492 651 0 -3.0781525 0 -3.0715363 1.2031624 520.31492 -Loop time of 0.055048 on 1 procs for 186 steps with 420 atoms +Loop time of 0.0571101 on 1 procs for 186 steps with 420 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -373,12 +380,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.042811 | 0.042811 | 0.042811 | 0.0 | 77.77 -Neigh | 0.0048847 | 0.0048847 | 0.0048847 | 0.0 | 8.87 -Comm | 0.00049543 | 0.00049543 | 0.00049543 | 0.0 | 0.90 -Output | 0.00013161 | 0.00013161 | 0.00013161 | 0.0 | 0.24 -Modify | 0.0026782 | 0.0026782 | 0.0026782 | 0.0 | 4.87 -Other | | 0.004047 | | | 7.35 +Pair | 0.042337 | 0.042337 | 0.042337 | 0.0 | 74.13 +Neigh | 0.0050063 | 0.0050063 | 0.0050063 | 0.0 | 8.77 +Comm | 0.00071383 | 0.00071383 | 0.00071383 | 0.0 | 1.25 +Output | 0.00017142 | 0.00017142 | 0.00017142 | 0.0 | 0.30 +Modify | 0.0038519 | 0.0038519 | 0.0038519 | 0.0 | 6.74 +Other | | 0.005029 | | | 8.81 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -396,8 +403,8 @@ fix 4 all indent ${k1} sphere 10 11.0 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.59487 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.169 | 4.169 | 4.169 Mbytes Step Temp E_pair E_mol TotEng Press Volume 651 0 -3.0781525 0 -2.6488207 1.2032064 520.29591 660 0 -3.0085949 0 -2.9796645 1.9715308 520.26872 @@ -415,9 +422,9 @@ Step Temp E_pair E_mol TotEng Press Volume 780 0 -3.065994 0 -3.0566273 1.931796 521.52157 790 0 -3.0675084 0 -3.0577936 1.9283059 520.99202 799 0 -3.0677005 0 -3.057959 1.9288603 520.99202 -Loop time of 0.043978 on 1 procs for 148 steps with 420 atoms +Loop time of 0.0457094 on 1 procs for 148 steps with 420 atoms -100.0% CPU use with 1 MPI tasks x no OpenMP threads +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -431,12 +438,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.034369 | 0.034369 | 0.034369 | 0.0 | 78.15 -Neigh | 0.0036526 | 0.0036526 | 0.0036526 | 0.0 | 8.31 -Comm | 0.00038934 | 0.00038934 | 0.00038934 | 0.0 | 0.89 -Output | 9.3699e-05 | 9.3699e-05 | 9.3699e-05 | 0.0 | 0.21 -Modify | 0.0021935 | 0.0021935 | 0.0021935 | 0.0 | 4.99 -Other | | 0.00328 | | | 7.46 +Pair | 0.03413 | 0.03413 | 0.03413 | 0.0 | 74.67 +Neigh | 0.0037162 | 0.0037162 | 0.0037162 | 0.0 | 8.13 +Comm | 0.00058603 | 0.00058603 | 0.00058603 | 0.0 | 1.28 +Output | 0.00012612 | 0.00012612 | 0.00012612 | 0.0 | 0.28 +Modify | 0.0031106 | 0.0031106 | 0.0031106 | 0.0 | 6.81 +Other | | 0.00404 | | | 8.84 Nlocal: 420 ave 420 max 420 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/indent/log.5Oct16.indent.min.g++.4 b/examples/indent/log.27Nov18.indent.min.g++.4 similarity index 76% rename from examples/indent/log.5Oct16.indent.min.g++.4 rename to examples/indent/log.27Nov18.indent.min.g++.4 index 4ea1a37d25..b0dca95501 100644 --- a/examples/indent/log.5Oct16.indent.min.g++.4 +++ b/examples/indent/log.27Nov18.indent.min.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d indenter simulation with minimization instead of dynamics dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.283174) to (22.6539 19.6189 0.283174) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 420 atoms + Time spent = 0.000312805 secs mass * 1.0 @@ -57,24 +59,29 @@ thermo 10 #dump_modify 3 pad 4 minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 17 15 1 -Memory usage per processor = 3.60136 Mbytes + binsize = 1.4, bins = 17 15 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.172 | 4.172 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 -3.1727576 0 -3.1727576 -1.5977027 444.53333 10 0 -3.1815908 0 -3.1815908 -1.1226904 440.57558 20 0 -3.1895471 0 -3.1895471 -0.86027602 436.93033 30 0 -3.1908366 0 -3.1908366 -0.72179223 436.93033 35 0 -3.1909386 0 -3.1909386 -0.69788745 433.53082 -Loop time of 0.00329685 on 4 procs for 35 steps with 420 atoms +Loop time of 0.00425965 on 4 procs for 35 steps with 420 atoms -75.8% CPU use with 4 MPI tasks x no OpenMP threads +91.0% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -88,12 +95,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0018942 | 0.0019329 | 0.0019758 | 0.1 | 58.63 -Neigh | 0.00011587 | 0.000121 | 0.00012612 | 0.0 | 3.67 -Comm | 0.00034523 | 0.00040966 | 0.00046587 | 0.3 | 12.43 -Output | 4.3869e-05 | 4.667e-05 | 5.2929e-05 | 0.1 | 1.42 -Modify | 2.4796e-05 | 3.7432e-05 | 5.0306e-05 | 0.2 | 1.14 -Other | | 0.0007492 | | | 22.73 +Pair | 0.0018404 | 0.0020409 | 0.002239 | 0.3 | 47.91 +Neigh | 0.00011182 | 0.00011867 | 0.00012565 | 0.0 | 2.79 +Comm | 0.00071144 | 0.0010059 | 0.0013125 | 0.7 | 23.62 +Output | 4.1723e-05 | 4.4882e-05 | 5.1022e-05 | 0.0 | 1.05 +Modify | 4.7445e-05 | 5.6326e-05 | 6.4611e-05 | 0.0 | 1.32 +Other | | 0.0009929 | | | 23.31 Nlocal: 105 ave 111 max 99 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -114,8 +121,8 @@ fix 4 all indent $k sphere 10 13.0 0 6.0 fix 4 all indent 4414.24643457407 sphere 10 13.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60136 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.172 | 4.172 Mbytes Step Temp E_pair E_mol TotEng Press Volume 35 0 -3.1909386 0 -2.174369 -0.6944516 435.67574 40 0 -3.1462704 0 -3.1261242 -0.20646557 435.67534 @@ -127,9 +134,9 @@ Step Temp E_pair E_mol TotEng Press Volume 100 0 -3.1812307 0 -3.1805381 -0.15305002 434.96379 110 0 -3.1812588 0 -3.1805938 -0.12504601 432.50683 111 0 -3.1812728 0 -3.1805961 -0.12407115 432.50683 -Loop time of 0.00908947 on 4 procs for 76 steps with 420 atoms +Loop time of 0.009408 on 4 procs for 76 steps with 420 atoms -96.2% CPU use with 4 MPI tasks x no OpenMP threads +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -143,12 +150,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0037253 | 0.0040306 | 0.0043435 | 0.5 | 44.34 -Neigh | 0.00058532 | 0.00061685 | 0.00064421 | 0.1 | 6.79 -Comm | 0.0012383 | 0.0015994 | 0.0019143 | 0.8 | 17.60 -Output | 0.00012493 | 0.0001325 | 0.00015235 | 0.1 | 1.46 -Modify | 0.00026274 | 0.00028539 | 0.00030255 | 0.1 | 3.14 -Other | | 0.002425 | | | 26.68 +Pair | 0.0035956 | 0.0040194 | 0.0043173 | 0.5 | 42.72 +Neigh | 0.00058937 | 0.00061256 | 0.00065064 | 0.0 | 6.51 +Comm | 0.0012782 | 0.0017276 | 0.0023015 | 1.0 | 18.36 +Output | 0.00012088 | 0.00013882 | 0.00018907 | 0.0 | 1.48 +Modify | 0.00037575 | 0.00040001 | 0.00041938 | 0.0 | 4.25 +Other | | 0.00251 | | | 26.68 Nlocal: 105 ave 111 max 99 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -166,8 +173,8 @@ fix 4 all indent ${k1} sphere 10 12.5 0 6.0 fix 4 all indent 882.849286914813 sphere 10 12.5 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60136 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.172 | 4.172 Mbytes Step Temp E_pair E_mol TotEng Press Volume 111 0 -3.1812728 0 -0.21796955 -0.12362156 434.07977 120 0 -2.9592755 0 -2.8003562 1.9418398 434.0832 @@ -179,9 +186,9 @@ Step Temp E_pair E_mol TotEng Press Volume 180 0 -3.1041304 0 -3.0969544 1.3751455 430.37021 190 0 -3.1043441 0 -3.0970791 1.3920926 430.37021 193 0 -3.1043346 0 -3.0970891 1.3934753 430.37021 -Loop time of 0.00948715 on 4 procs for 82 steps with 420 atoms +Loop time of 0.00970888 on 4 procs for 82 steps with 420 atoms -100.1% CPU use with 4 MPI tasks x no OpenMP threads +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -195,12 +202,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0037739 | 0.0042151 | 0.0046482 | 0.6 | 44.43 -Neigh | 0.00041008 | 0.0004425 | 0.00048161 | 0.1 | 4.66 -Comm | 0.0013449 | 0.0018466 | 0.0023468 | 1.1 | 19.46 -Output | 0.00012422 | 0.00013196 | 0.00015044 | 0.1 | 1.39 -Modify | 0.00026131 | 0.00028855 | 0.00030518 | 0.1 | 3.04 -Other | | 0.002563 | | | 27.01 +Pair | 0.0038064 | 0.0043663 | 0.0049345 | 0.7 | 44.97 +Neigh | 0.00041938 | 0.00044787 | 0.00046825 | 0.0 | 4.61 +Comm | 0.0012298 | 0.0018778 | 0.0025084 | 1.2 | 19.34 +Output | 0.00010872 | 0.00013095 | 0.00019455 | 0.0 | 1.35 +Modify | 0.0003829 | 0.00042218 | 0.00045204 | 0.0 | 4.35 +Other | | 0.002464 | | | 25.38 Nlocal: 105 ave 112 max 98 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -218,8 +225,8 @@ fix 4 all indent ${k1} sphere 10 12.0 0 6.0 fix 4 all indent 882.849286914813 sphere 10 12.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60136 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.172 | 4.172 Mbytes Step Temp E_pair E_mol TotEng Press Volume 193 0 -3.1043346 0 2.0111873 1.3910032 431.13505 200 0 -2.5918062 0 -1.93191 5.511262 430.91953 @@ -235,9 +242,9 @@ Step Temp E_pair E_mol TotEng Press Volume 300 0 -3.1109522 0 -3.1046995 1.064904 470.50807 310 0 -3.1123989 0 -3.105985 1.0430839 470.40952 313 0 -3.1125022 0 -3.1060453 1.0390872 470.40952 -Loop time of 0.016437 on 4 procs for 120 steps with 420 atoms +Loop time of 0.0169249 on 4 procs for 120 steps with 420 atoms -95.8% CPU use with 4 MPI tasks x no OpenMP threads +95.2% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -251,12 +258,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0060949 | 0.0071945 | 0.008219 | 1.2 | 43.77 -Neigh | 0.00081253 | 0.00092614 | 0.0010352 | 0.3 | 5.63 -Comm | 0.0022275 | 0.0035025 | 0.0047491 | 2.1 | 21.31 -Output | 0.00018907 | 0.00019854 | 0.00022316 | 0.1 | 1.21 -Modify | 0.00045967 | 0.00049853 | 0.0005331 | 0.1 | 3.03 -Other | | 0.004117 | | | 25.05 +Pair | 0.0061595 | 0.0073055 | 0.0083787 | 1.2 | 43.16 +Neigh | 0.00085759 | 0.00095439 | 0.0010619 | 0.0 | 5.64 +Comm | 0.0020378 | 0.0032984 | 0.0046635 | 2.1 | 19.49 +Output | 0.00016832 | 0.00020832 | 0.00032616 | 0.0 | 1.23 +Modify | 0.0006628 | 0.00078654 | 0.00090957 | 0.0 | 4.65 +Other | | 0.004372 | | | 25.83 Nlocal: 105 ave 123 max 90 min Histogram: 2 0 0 0 0 0 0 0 1 1 @@ -274,8 +281,8 @@ fix 4 all indent ${k1} sphere 10 11.4 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.4 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60136 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.172 | 4.173 Mbytes Step Temp E_pair E_mol TotEng Press Volume 313 0 -3.1125022 0 5.3341053 1.0377311 471.02427 320 0 -2.402824 0 -0.86170235 6.1550233 471.02943 @@ -289,9 +296,9 @@ Step Temp E_pair E_mol TotEng Press Volume 400 0 -3.0098108 0 -2.9963408 2.0798685 490.87751 410 0 -3.0142937 0 -3.0017605 2.0015139 491.52711 417 0 -3.0148998 0 -3.0024932 1.9909706 492.48053 -Loop time of 0.0132418 on 4 procs for 104 steps with 420 atoms +Loop time of 0.0135124 on 4 procs for 104 steps with 420 atoms -94.4% CPU use with 4 MPI tasks x no OpenMP threads +90.7% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -305,12 +312,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0043645 | 0.0054896 | 0.0065427 | 1.4 | 41.46 -Neigh | 0.00071716 | 0.00088716 | 0.0010509 | 0.5 | 6.70 -Comm | 0.0017078 | 0.0030243 | 0.0044179 | 2.3 | 22.84 -Output | 0.00015879 | 0.00016719 | 0.00018978 | 0.1 | 1.26 -Modify | 0.00033998 | 0.00038028 | 0.00042176 | 0.2 | 2.87 -Other | | 0.003293 | | | 24.87 +Pair | 0.0043001 | 0.0056325 | 0.0068884 | 1.5 | 41.68 +Neigh | 0.0007472 | 0.00091684 | 0.0010941 | 0.0 | 6.79 +Comm | 0.0015268 | 0.0030602 | 0.0046747 | 2.4 | 22.65 +Output | 0.00014591 | 0.00017387 | 0.00025606 | 0.0 | 1.29 +Modify | 0.00047064 | 0.00054699 | 0.00062537 | 0.0 | 4.05 +Other | | 0.003182 | | | 23.55 Nlocal: 105 ave 121 max 89 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -328,8 +335,8 @@ fix 4 all indent ${k1} sphere 10 11.2 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.2 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60141 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.173 | 4.173 Mbytes Step Temp E_pair E_mol TotEng Press Volume 417 0 -3.0148998 0 -2.4816986 1.9918498 492.26314 420 0 -2.9209943 0 -2.7871779 2.8201475 492.26417 @@ -352,9 +359,9 @@ Step Temp E_pair E_mol TotEng Press Volume 590 0 -3.114722 0 -3.1095528 0.90665975 515.99746 600 0 -3.1149189 0 -3.1096744 0.88783587 515.99746 605 0 -3.1149612 0 -3.1097106 0.88187936 515.99746 -Loop time of 0.0257494 on 4 procs for 188 steps with 420 atoms +Loop time of 0.0262601 on 4 procs for 188 steps with 420 atoms -98.0% CPU use with 4 MPI tasks x no OpenMP threads +95.8% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -368,12 +375,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0080748 | 0.010793 | 0.013608 | 2.6 | 41.91 -Neigh | 0.000983 | 0.0012598 | 0.0015397 | 0.8 | 4.89 -Comm | 0.003365 | 0.0064785 | 0.0095432 | 3.8 | 25.16 -Output | 0.0002985 | 0.00031477 | 0.00035667 | 0.1 | 1.22 -Modify | 0.00062346 | 0.0007531 | 0.00086522 | 0.4 | 2.92 -Other | | 0.00615 | | | 23.89 +Pair | 0.0080013 | 0.010975 | 0.013789 | 2.6 | 41.79 +Neigh | 0.001025 | 0.001315 | 0.0016329 | 0.8 | 5.01 +Comm | 0.0033126 | 0.0065627 | 0.010028 | 3.9 | 24.99 +Output | 0.00025845 | 0.00032175 | 0.00050783 | 0.0 | 1.23 +Modify | 0.00088954 | 0.0010915 | 0.0012805 | 0.6 | 4.16 +Other | | 0.005994 | | | 22.83 Nlocal: 105 ave 125 max 84 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -391,8 +398,8 @@ fix 4 all indent ${k1} sphere 10 11.0 0 6.0 fix 4 all indent 882.849286914813 sphere 10 11.0 0 6.0 fix_modify 4 energy yes minimize 1.0e-6 1.0e-6 1000 1000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) -Memory usage per processor = 3.60141 Mbytes +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Per MPI rank memory allocation (min/avg/max) = 4.172 | 4.173 | 4.173 Mbytes Step Temp E_pair E_mol TotEng Press Volume 605 0 -3.1149612 0 -2.7562264 0.88153856 516.19694 610 0 -3.0480145 0 -3.0046036 1.5377628 516.18952 @@ -408,9 +415,9 @@ Step Temp E_pair E_mol TotEng Press Volume 710 0 -3.0738836 0 -3.0635305 1.6674853 516.40455 720 0 -3.0744809 0 -3.0640016 1.6430059 516.40455 729 0 -3.074692 0 -3.0641622 1.6351234 517.12194 -Loop time of 0.017405 on 4 procs for 124 steps with 420 atoms +Loop time of 0.0187363 on 4 procs for 124 steps with 420 atoms -97.7% CPU use with 4 MPI tasks x no OpenMP threads +94.5% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = linesearch alpha is zero @@ -424,12 +431,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0049167 | 0.0073144 | 0.0095913 | 2.7 | 42.02 -Neigh | 0.00037408 | 0.00051659 | 0.00065827 | 0.6 | 2.97 -Comm | 0.0021894 | 0.0047411 | 0.0072858 | 3.6 | 27.24 -Output | 0.00018907 | 0.0001967 | 0.00021863 | 0.1 | 1.13 -Modify | 0.00040865 | 0.00051677 | 0.00060606 | 0.4 | 2.97 -Other | | 0.004119 | | | 23.67 +Pair | 0.0051301 | 0.0074221 | 0.0098505 | 2.6 | 39.61 +Neigh | 0.00038052 | 0.00054228 | 0.00068402 | 0.0 | 2.89 +Comm | 0.0018504 | 0.004572 | 0.007129 | 3.8 | 24.40 +Output | 0.00017834 | 0.00021213 | 0.00030828 | 0.0 | 1.13 +Modify | 0.00057554 | 0.00075471 | 0.00091839 | 0.0 | 4.03 +Other | | 0.005233 | | | 27.93 Nlocal: 105 ave 131 max 78 min Histogram: 2 0 0 0 0 0 0 0 0 2 From c42776e4e1d596d9fa4121e76fb343b4f774c9df Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 21:22:46 -0500 Subject: [PATCH 220/273] ignore valgrind core dumps --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1ce415678e..f9dda49da6 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ log.cite .*.swp *.orig *.rej +vgcore.* .vagrant \#*# .#* From cb2964af4cae6229f21201e523a9e473c0082ef6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 22:20:42 -0500 Subject: [PATCH 221/273] silence compiler warning about unused parameter --- src/USER-H5MD/dump_h5md.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-H5MD/dump_h5md.cpp b/src/USER-H5MD/dump_h5md.cpp index 393871ae0b..af77258780 100644 --- a/src/USER-H5MD/dump_h5md.cpp +++ b/src/USER-H5MD/dump_h5md.cpp @@ -346,7 +346,7 @@ void DumpH5MD::openfile() /* ---------------------------------------------------------------------- */ -void DumpH5MD::write_header(bigint nbig) +void DumpH5MD::write_header(bigint /* nbig */) { return; } From 78f86d5f16c82ffbf5b877bf89093bc18699b146 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 22:23:09 -0500 Subject: [PATCH 222/273] silence compiler warning about singed vs. unsigned --- src/universe.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/universe.cpp b/src/universe.cpp index 410d12dcb3..f078590103 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -174,9 +174,9 @@ void Universe::add_world(char *str) // str may not be empty and may only consist of digits or 'x' - int len = strlen(str); + size_t len = strlen(str); if (len < 1) valid = false; - for (int i=0; i < len; ++i) + for (size_t i=0; i < len; ++i) if (isdigit(str[i]) || str[i] == 'x') continue; else valid = false; From 6be4ce7137399f8d29b17a9e508f0f9384910a01 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 Nov 2018 23:14:45 -0500 Subject: [PATCH 223/273] found a new false positive word in docs with spellchecker --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 538ee2b8e3..de60206304 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -904,6 +904,7 @@ gcc gcmc gdot GeC +gencode georg Georg Germann From 09abc0c75a14e7b5ee99173f31b717e452e056f9 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 29 Nov 2018 00:41:40 -0500 Subject: [PATCH 224/273] Fix memory leak in Variable::compute_atom --- src/variable.cpp | 1 + src/variable.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/variable.cpp b/src/variable.cpp index f83d3ebc20..9c837719f2 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -971,6 +971,7 @@ void Variable::compute_atom(int ivar, int igroup, } else vstore = reader[ivar]->fixstore->vstore; if (result == NULL) { + if (style[ivar] == ATOM) free_tree(tree); eval_in_progress[ivar] = 0; return; } diff --git a/src/variable.h b/src/variable.h index b20eb7e6b9..9a6aa4c0b4 100644 --- a/src/variable.h +++ b/src/variable.h @@ -92,6 +92,13 @@ class Variable : protected Pointers { int nextra; // # of additional args beyond first 2 Tree *first,*second; // ptrs further down tree for first 2 args Tree **extra; // ptrs further down tree for nextra args + + Tree() : + array(NULL), iarray(NULL), barray(NULL), + selfalloc(0), nextra(0), + first(NULL), second(NULL), extra(NULL) + { + } }; int compute_python(int); From ea6d8a5dca9eab25fca041d63d0a67cf941ca8e3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 01:38:04 -0500 Subject: [PATCH 225/273] replace hard crash with disabling atom sorting, when no suitable binsize is found --- src/atom.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index 95f5406d95..72bdc8a0e7 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1884,11 +1884,19 @@ void Atom::setup_sort_bins() // user setting if explicitly set // default = 1/2 of neighbor cutoff // check if neighbor cutoff = 0.0 + // and in that case, disable sorting double binsize; if (userbinsize > 0.0) binsize = userbinsize; - else binsize = 0.5 * neighbor->cutneighmax; - if (binsize == 0.0) error->all(FLERR,"Atom sorting has bin size = 0.0"); + else if (neighbor->cutneighmax > 0.0) binsize = 0.5 * neighbor->cutneighmax; + + if ((binsize == 0.0) && (sortfreq > 0)) { + sortfreq = 0; + if (comm->me == 0) + error->warning(FLERR,"No pairwise cutoff or binsize set. " + "Atom sorting therefore disabled."); + return; + } double bininv = 1.0/binsize; From e3ddefb38bb255e2c874ce52358a0d0bec8eda48 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 02:03:56 -0500 Subject: [PATCH 226/273] update docs and header for removed error message --- doc/src/Errors_messages.txt | 6 ------ doc/src/atom_modify.txt | 3 ++- src/atom.h | 6 ------ 3 files changed, 2 insertions(+), 13 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index de6d974dde..d9a9f15ba0 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -279,12 +279,6 @@ multibody joint). The bodies you have defined exceed this limit. :dd This is an internal LAMMPS error. Please report it to the developers. :dd -{Atom sorting has bin size = 0.0} :dt - -The neighbor cutoff is being used as the bin size, but it is zero. -Thus you must explicitly list a bin size in the atom_modify sort -command or turn off sorting. :dd - {Atom style hybrid cannot have hybrid as an argument} :dt Self-explanatory. :dd diff --git a/doc/src/atom_modify.txt b/doc/src/atom_modify.txt index 0f0b241b76..d598b4697c 100644 --- a/doc/src/atom_modify.txt +++ b/doc/src/atom_modify.txt @@ -166,7 +166,8 @@ info), a map is used. The default map style is array if no atom ID is larger than 1 million, otherwise the default is hash. By default, a "first" group is not defined. By default, sorting is enabled with a frequency of 1000 and a binsize of 0.0, which means the neighbor -cutoff will be used to set the bin size. +cutoff will be used to set the bin size. If no neighbor cutoff is +defined, sorting will be turned off. :line diff --git a/src/atom.h b/src/atom.h index 7e003dff5e..324ad0f2d2 100644 --- a/src/atom.h +++ b/src/atom.h @@ -496,12 +496,6 @@ E: Atom sort did not operate correctly This is an internal LAMMPS error. Please report it to the developers. -E: Atom sorting has bin size = 0.0 - -The neighbor cutoff is being used as the bin size, but it is zero. -Thus you must explicitly list a bin size in the atom_modify sort -command or turn off sorting. - E: Too many atom sorting bins This is likely due to an immense simulation box that has blown up From 41e24f6e8be8395cda7e976a0ce991329117e08d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 12:35:07 -0500 Subject: [PATCH 227/273] update log files for gcmc example --- ...c.co2.g++.1 => log.27Nov18.gcmc.co2.g++.1} | 86 +++---- ...c.h2o.g++.1 => log.27Nov18.gcmc.h2o.g++.1} | 168 ++++++------- ...cmc.lj.g++.1 => log.27Nov18.gcmc.lj.g++.1} | 22 +- ...cmc.lj.g++.4 => log.27Nov18.gcmc.lj.g++.4} | 22 +- examples/gcmc/log.30Mar18.gcmc.co2.g++.4 | 131 ---------- examples/gcmc/log.30Mar18.gcmc.h2o.g++.4 | 237 ------------------ 6 files changed, 149 insertions(+), 517 deletions(-) rename examples/gcmc/{log.30Mar18.gcmc.co2.g++.1 => log.27Nov18.gcmc.co2.g++.1} (60%) rename examples/gcmc/{log.30Mar18.gcmc.h2o.g++.1 => log.27Nov18.gcmc.h2o.g++.1} (54%) rename examples/gcmc/{log.30Mar18.gcmc.lj.g++.1 => log.27Nov18.gcmc.lj.g++.1} (90%) rename examples/gcmc/{log.30Mar18.gcmc.lj.g++.4 => log.27Nov18.gcmc.lj.g++.4} (90%) delete mode 100644 examples/gcmc/log.30Mar18.gcmc.co2.g++.4 delete mode 100644 examples/gcmc/log.30Mar18.gcmc.h2o.g++.4 diff --git a/examples/gcmc/log.30Mar18.gcmc.co2.g++.1 b/examples/gcmc/log.27Nov18.gcmc.co2.g++.1 similarity index 60% rename from examples/gcmc/log.30Mar18.gcmc.co2.g++.1 rename to examples/gcmc/log.27Nov18.gcmc.co2.g++.1 index 46afe5ea2a..4ed9056d04 100644 --- a/examples/gcmc/log.30Mar18.gcmc.co2.g++.1 +++ b/examples/gcmc/log.27Nov18.gcmc.co2.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (30 Mar 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # GCMC for CO2 molecular fluid, rigid/small/nvt dynamics # Rigid CO2 TraPPE model @@ -46,7 +46,7 @@ Read molecule co2mol: 0 impropers with max type 0 create_atoms 0 box mol co2mol 464563 units box Created 24 atoms - Time spent = 0.00241756 secs + Time spent = 0.00134993 secs # rigid CO2 TraPPE model @@ -118,16 +118,16 @@ thermo 1000 run 20000 Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.164636 estimated absolute RMS force accuracy = 0.0332064 estimated relative force accuracy = 0.0001 KSpace vectors: actual max1d max3d = 16 2 62 kxmax kymax kzmax = 2 2 2 -WARNING: Fix gcmc using full_energy option (../fix_gcmc.cpp:485) +WARNING: Fix gcmc using full_energy option (src/MC/fix_gcmc.cpp:487) 0 atoms in group FixGCMC:gcmc_exclusion_group:mygcmc 0 atoms in group FixGCMC:rotation_gas_atoms:mygcmc -WARNING: Neighbor exclusions used with KSpace solver may give inconsistent Coulombic energies (../neighbor.cpp:472) +WARNING: Neighbor exclusions used with KSpace solver may give inconsistent Coulombic energies (src/neighbor.cpp:471) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -143,54 +143,54 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 15.62 | 15.62 | 15.62 Mbytes Step Temp Press PotEng KinEng Density Atoms v_iacc v_dacc v_tacc v_racc v_nC v_nO 0 364.27579 4238.8631 -9.6809388 13.391989 0.5846359 24 0 0 0 0 8 16 - 1000 330.05964 -376.0111 -13.936335 13.773831 0.65771539 27 0.21142067 0.21453147 0 0 9 18 - 2000 293.79769 -321.3209 -19.049256 13.720163 0.73079488 30 0.25170944 0.25426294 0 0 10 20 - 3000 348.9085 259.04079 -0.23347965 2.4267366 0.14615898 6 0.22016906 0.23200597 0 0 2 4 - 4000 360.54577 -329.12072 -16.584234 15.046059 0.65771539 27 0.19173099 0.19785362 0 0 9 18 - 5000 275.58628 -58.283006 -12.520856 11.500585 0.65771539 27 0.16490585 0.17329884 0 0 9 18 - 6000 338.59574 364.93514 -19.866569 17.494353 0.80387436 33 0.17971759 0.18331589 0 0 11 22 - 7000 286.11586 -1252.5069 -19.588667 13.361427 0.73079488 30 0.15729895 0.16220459 0 0 10 20 - 8000 454.86786 -642.89382 -20.818357 21.242037 0.73079488 30 0.15500235 0.15802382 0 0 10 20 - 9000 326.36695 -364.71382 -31.376162 18.48392 0.87695385 36 0.14203985 0.14510714 0 0 12 24 - 10000 348.46961 -387.75245 -21.068466 18.00451 0.80387436 33 0.14000907 0.14343389 0 0 11 22 - 11000 409.74257 -15.843895 -20.648252 21.170323 0.80387436 33 0.14689306 0.15117074 0 0 11 22 - 12000 523.93502 1003.0729 -6.0563102 14.055757 0.43847693 18 0.15337575 0.1580166 0 0 6 12 - 13000 278.14441 -717.1097 -2.3488496 4.6982087 0.29231795 12 0.15952356 0.16422306 0 0 4 8 - 14000 367.89375 1239.0841 -11.203323 13.524997 0.5846359 24 0.17002439 0.17460294 0 0 8 16 - 15000 197.05319 -471.14343 -9.3890758 6.2653668 0.51155641 21 0.17702612 0.18155802 0 0 7 14 - 16000 138.17147 -935.93437 -2.3846783 2.3338898 0.29231795 12 0.17884346 0.18268758 0 0 4 8 - 17000 245.61833 -166.1694 -5.0970057 5.3690384 0.36539744 15 0.18909252 0.19317817 0 0 5 10 - 18000 232.0142 -175.732 -14.320198 9.6822635 0.65771539 27 0.18977089 0.19280537 0 0 9 18 - 19000 362.01189 864.87258 -6.4515321 9.7117982 0.43847693 18 0.19207244 0.19488984 0 0 6 12 - 20000 441.19548 186.19779 -18.147268 20.603546 0.73079488 30 0.19713351 0.199073 0 0 10 20 -Loop time of 16.4949 on 1 procs for 20000 steps with 30 atoms + 1000 267.9799 -73.919548 -3.6735999 5.8578459 0.36539744 15 0.23663972 0.2494423 0 0 5 10 + 2000 409.06596 -98.033864 -6.7570039 10.974131 0.43847693 18 0.29379544 0.29816284 0 0 6 12 + 3000 279.3225 -836.47758 -26.434976 15.819539 0.87695385 36 0.23798567 0.24203908 0 0 12 24 + 4000 333.6181 606.63478 -30.35312 18.894592 0.87695385 36 0.19121778 0.19481508 0 0 12 24 + 5000 405.98741 -103.97582 -14.180277 16.942399 0.65771539 27 0.15272841 0.15982952 0 0 9 18 + 6000 283.5835 -240.01076 -6.7198093 7.607777 0.43847693 18 0.1606796 0.16536735 0 0 6 12 + 7000 142.00717 154.95914 -0.74192319 0.98769159 0.14615898 6 0.19501993 0.20103405 0 0 2 4 + 8000 376.67702 -118.12474 -10.774631 13.847899 0.5846359 24 0.20133396 0.20468352 0 0 8 16 + 9000 305.43166 -1095.8633 -10.388279 9.7112935 0.51155641 21 0.19445239 0.19869334 0 0 7 14 + 10000 244.08225 -179.31274 -12.974988 8.9732748 0.5846359 24 0.19098971 0.19586397 0 0 8 16 + 11000 305.03389 -568.94714 -21.745425 14.244887 0.73079488 30 0.18517522 0.18978828 0 0 10 20 + 12000 318.29735 767.76579 -37.184231 21.189508 1.0231128 42 0.17256426 0.17580267 0 0 14 28 + 13000 411.21707 433.01125 -4.5149215 8.9889065 0.36539744 15 0.16329385 0.16767604 0 0 5 10 + 14000 304.29535 148.28607 -2.3505844 6.6516754 0.36539744 15 0.17435868 0.17897674 0 0 5 10 + 15000 338.00555 2384.1424 -21.438264 17.463859 0.80387436 33 0.17237066 0.17634112 0 0 11 22 + 16000 613.56062 610.93867 -0.057364228 1.2192718 0.073079488 3 0.17128158 0.1758886 0 0 1 2 + 17000 432.63323 -980.52384 -15.79844 18.054365 0.65771539 27 0.17145651 0.17504846 0 0 9 18 + 18000 181.74572 -352.81765 -1.8617959 2.1669979 0.21923846 9 0.17292463 0.17654774 0 0 3 6 + 19000 208.55292 -248.38735 -4.2287767 4.5588154 0.36539744 15 0.18168324 0.18454331 0 0 5 10 + 20000 304.73317 -649.9896 -16.532405 12.716924 0.65771539 27 0.18085983 0.18345574 0 0 9 18 +Loop time of 21.0434 on 1 procs for 20000 steps with 27 atoms -Performance: 104.760 ns/day, 0.229 hours/ns, 1212.498 timesteps/s -99.4% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 82.116 ns/day, 0.292 hours/ns, 950.415 timesteps/s +98.5% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.8955 | 1.8955 | 1.8955 | 0.0 | 11.49 -Bond | 0.026564 | 0.026564 | 0.026564 | 0.0 | 0.16 -Kspace | 0.21215 | 0.21215 | 0.21215 | 0.0 | 1.29 -Neigh | 0.088336 | 0.088336 | 0.088336 | 0.0 | 0.54 -Comm | 0.19828 | 0.19828 | 0.19828 | 0.0 | 1.20 -Output | 0.001025 | 0.001025 | 0.001025 | 0.0 | 0.01 -Modify | 14.024 | 14.024 | 14.024 | 0.0 | 85.02 -Other | | 0.0491 | | | 0.30 +Pair | 2.2373 | 2.2373 | 2.2373 | 0.0 | 10.63 +Bond | 0.022895 | 0.022895 | 0.022895 | 0.0 | 0.11 +Kspace | 0.16756 | 0.16756 | 0.16756 | 0.0 | 0.80 +Neigh | 0.11436 | 0.11436 | 0.11436 | 0.0 | 0.54 +Comm | 0.26988 | 0.26988 | 0.26988 | 0.0 | 1.28 +Output | 0.0014684 | 0.0014684 | 0.0014684 | 0.0 | 0.01 +Modify | 18.193 | 18.193 | 18.193 | 0.0 | 86.45 +Other | | 0.03692 | | | 0.18 -Nlocal: 30 ave 30 max 30 min +Nlocal: 27 ave 27 max 27 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 2094 ave 2094 max 2094 min +Nghost: 2081 ave 2081 max 2081 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 7664 ave 7664 max 7664 min +Neighs: 6264 ave 6264 max 6264 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 7664 -Ave neighs/atom = 255.467 +Total # of neighbors = 6264 +Ave neighs/atom = 232 Ave special neighs/atom = 2 -Neighbor list builds = 20076 +Neighbor list builds = 20177 Dangerous builds = 0 -Total wall time: 0:00:16 +Total wall time: 0:00:21 diff --git a/examples/gcmc/log.30Mar18.gcmc.h2o.g++.1 b/examples/gcmc/log.27Nov18.gcmc.h2o.g++.1 similarity index 54% rename from examples/gcmc/log.30Mar18.gcmc.h2o.g++.1 rename to examples/gcmc/log.27Nov18.gcmc.h2o.g++.1 index 2f11cb116e..86b8fa7b45 100644 --- a/examples/gcmc/log.30Mar18.gcmc.h2o.g++.1 +++ b/examples/gcmc/log.27Nov18.gcmc.h2o.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (30 Mar 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # fix gcmc example with fix shake @@ -43,7 +43,7 @@ Read molecule h2omol: 0 impropers with max type 0 create_atoms 0 box mol h2omol 464563 units box Created 24 atoms - Time spent = 0.00204968 secs + Time spent = 0.00128841 secs # rigid SPC/E water model @@ -69,9 +69,9 @@ velocity all create 338.0 54654 timestep 1.0 minimize 0.0 0.0 100 1000 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.170448 estimated absolute RMS force accuracy = 0.0332064 estimated relative force accuracy = 0.0001 @@ -92,41 +92,41 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 11.88 | 11.88 | 11.88 Mbytes Step Temp E_pair E_mol TotEng Press 0 338 -4.1890564 9.2628112e-06 18.98377 739.06991 - 100 338 -30.182886 0.85607237 -6.1539961 -2535.3207 -Loop time of 0.0512006 on 1 procs for 100 steps with 24 atoms + 100 338 -36.122455 0.67828405 -12.271354 573.22675 +Loop time of 0.0461962 on 1 procs for 100 steps with 24 atoms -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +98.3% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations Energy initial, next-to-last, final = - -4.18904713252 -28.9258064504 -29.3268133965 - Force two-norm initial, final = 18.0027 42.4511 - Force max component initial, final = 5.8993 16.0523 - Final line search alpha, max atom move = 0.00353207 0.056698 - Iterations, force evaluations = 100 238 + -4.18904713252 -34.586018764 -35.4441713339 + Force two-norm initial, final = 18.0027 42.115 + Force max component initial, final = 5.8993 15.4907 + Final line search alpha, max atom move = 0.00127226 0.0197082 + Iterations, force evaluations = 100 239 MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.04303 | 0.04303 | 0.04303 | 0.0 | 84.04 -Bond | 0.00047088 | 0.00047088 | 0.00047088 | 0.0 | 0.92 -Kspace | 0.0029728 | 0.0029728 | 0.0029728 | 0.0 | 5.81 -Neigh | 0.00045919 | 0.00045919 | 0.00045919 | 0.0 | 0.90 -Comm | 0.003406 | 0.003406 | 0.003406 | 0.0 | 6.65 -Output | 2.265e-05 | 2.265e-05 | 2.265e-05 | 0.0 | 0.04 +Pair | 0.038526 | 0.038526 | 0.038526 | 0.0 | 83.40 +Bond | 0.00031209 | 0.00031209 | 0.00031209 | 0.0 | 0.68 +Kspace | 0.0019636 | 0.0019636 | 0.0019636 | 0.0 | 4.25 +Neigh | 0.00055456 | 0.00055456 | 0.00055456 | 0.0 | 1.20 +Comm | 0.0040288 | 0.0040288 | 0.0040288 | 0.0 | 8.72 +Output | 1.5259e-05 | 1.5259e-05 | 1.5259e-05 | 0.0 | 0.03 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.0008392 | | | 1.64 +Other | | 0.0007958 | | | 1.72 Nlocal: 24 ave 24 max 24 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 2047 ave 2047 max 2047 min +Nghost: 2011 ave 2011 max 2011 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 4936 ave 4936 max 4936 min +Neighs: 4921 ave 4921 max 4921 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 4936 -Ave neighs/atom = 205.667 +Total # of neighbors = 4921 +Ave neighs/atom = 205.042 Ave special neighs/atom = 2 Neighbor list builds = 2 Dangerous builds = 0 @@ -150,7 +150,7 @@ compute_modify mynvt_temp dynamic/dof yes run 1000 Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.170448 estimated absolute RMS force accuracy = 0.0332064 estimated relative force accuracy = 0.0001 @@ -158,36 +158,36 @@ Ewald initialization ... kxmax kymax kzmax = 2 2 2 Per MPI rank memory allocation (min/avg/max) = 11.63 | 11.63 | 11.63 Mbytes Step Temp E_pair E_mol TotEng Press - 0 518.26667 -30.182886 0 -7.0100684 993.1985 - 1000 326.9865 -62.258443 0 -47.638173 -5.3439918 -Loop time of 0.139436 on 1 procs for 1000 steps with 24 atoms + 0 518.26667 -36.122455 0 -12.949638 703.43827 + 1000 260.39219 -55.141232 0 -43.498537 -1698.672 +Loop time of 0.140376 on 1 procs for 1000 steps with 24 atoms -Performance: 619.641 ns/day, 0.039 hours/ns, 7171.773 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 615.489 ns/day, 0.039 hours/ns, 7123.720 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.10588 | 0.10588 | 0.10588 | 0.0 | 75.94 -Bond | 0.00015759 | 0.00015759 | 0.00015759 | 0.0 | 0.11 -Kspace | 0.011144 | 0.011144 | 0.011144 | 0.0 | 7.99 -Neigh | 0.00459 | 0.00459 | 0.00459 | 0.0 | 3.29 -Comm | 0.011396 | 0.011396 | 0.011396 | 0.0 | 8.17 -Output | 1.7166e-05 | 1.7166e-05 | 1.7166e-05 | 0.0 | 0.01 -Modify | 0.0043328 | 0.0043328 | 0.0043328 | 0.0 | 3.11 -Other | | 0.001914 | | | 1.37 +Pair | 0.10434 | 0.10434 | 0.10434 | 0.0 | 74.33 +Bond | 0.00013041 | 0.00013041 | 0.00013041 | 0.0 | 0.09 +Kspace | 0.008199 | 0.008199 | 0.008199 | 0.0 | 5.84 +Neigh | 0.0061581 | 0.0061581 | 0.0061581 | 0.0 | 4.39 +Comm | 0.015352 | 0.015352 | 0.015352 | 0.0 | 10.94 +Output | 1.4305e-05 | 1.4305e-05 | 1.4305e-05 | 0.0 | 0.01 +Modify | 0.004544 | 0.004544 | 0.004544 | 0.0 | 3.24 +Other | | 0.001639 | | | 1.17 Nlocal: 24 ave 24 max 24 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1660 ave 1660 max 1660 min +Nghost: 1776 ave 1776 max 1776 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5112 ave 5112 max 5112 min +Neighs: 5073 ave 5073 max 5073 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 5112 -Ave neighs/atom = 213 +Total # of neighbors = 5073 +Ave neighs/atom = 211.375 Ave special neighs/atom = 2 -Neighbor list builds = 25 +Neighbor list builds = 27 Dangerous builds = 0 reset_timestep 0 @@ -224,67 +224,67 @@ thermo 1000 run 20000 Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.170448 estimated absolute RMS force accuracy = 0.0332064 estimated relative force accuracy = 0.0001 KSpace vectors: actual max1d max3d = 16 2 62 kxmax kymax kzmax = 2 2 2 -WARNING: Fix gcmc using full_energy option (../fix_gcmc.cpp:485) +WARNING: Fix gcmc using full_energy option (src/MC/fix_gcmc.cpp:487) 0 atoms in group FixGCMC:gcmc_exclusion_group:mygcmc 0 atoms in group FixGCMC:rotation_gas_atoms:mygcmc -WARNING: Neighbor exclusions used with KSpace solver may give inconsistent Coulombic energies (../neighbor.cpp:472) +WARNING: Neighbor exclusions used with KSpace solver may give inconsistent Coulombic energies (src/neighbor.cpp:471) Per MPI rank memory allocation (min/avg/max) = 11.63 | 11.63 | 11.63 Mbytes Step Temp Press PotEng KinEng Density Atoms v_iacc v_dacc v_tacc v_racc v_nO v_nH - 0 326.9865 -4.3508819 -62.258443 14.62027 0.23910963 24 0 0 0 0 8 16 - 1000 354.423 -3760.1354 -235.34169 51.766914 0.74721761 75 0.046175467 0.011949811 0 0 25 50 - 2000 335.19661 -3018.659 -270.44089 52.955344 0.80699501 81 0.026473882 0.0068755525 0 0 27 54 - 3000 333.47175 2657.2052 -336.48359 64.611037 0.98632724 99 0.022634978 0.0060076096 0 0 33 66 - 4000 321.48504 2055.4786 -345.06113 62.288579 0.98632724 99 0.016897769 0.0045269353 0 0 33 66 - 5000 333.45735 1918.5375 -368.5463 66.596193 1.0162159 102 0.013784412 0.0036569014 0 0 34 68 - 6000 301.90666 -698.74074 -371.32122 60.295069 1.0162159 102 0.01160439 0.0030159847 0 0 34 68 - 7000 336.42505 1537.9483 -378.51731 69.194524 1.0461046 105 0.010174953 0.0025995783 0 0 35 70 - 8000 338.95331 -1032.1084 -390.7067 69.714524 1.0461046 105 0.0089594585 0.002260114 0 0 35 70 - 9000 311.44605 -1494.7788 -383.9272 64.056945 1.0461046 105 0.007938083 0.0020156323 0 0 35 70 - 10000 330.70877 2082.4597 -366.57249 68.018822 1.0461046 105 0.0071412985 0.0018148454 0 0 35 70 - 11000 286.34718 2238.3752 -370.91119 60.601806 1.0759934 108 0.0066641451 0.0016519521 0 0 36 72 - 12000 371.02522 3048.7157 -398.51333 78.522854 1.0759934 108 0.0061145907 0.0015128339 0 0 36 72 - 13000 392.87611 4486.1134 -387.07077 83.147323 1.0759934 108 0.0056427384 0.0013968431 0 0 36 72 - 14000 332.80747 3586.2698 -406.12151 70.434545 1.0759934 108 0.0052496417 0.0012945729 0 0 36 72 - 15000 325.61844 4198.3864 -387.5733 68.913077 1.0759934 108 0.0048934679 0.0012098238 0 0 36 72 - 16000 254.10285 1560.976 -409.98615 55.292559 1.1058821 111 0.0047204383 0.0011320612 0 0 37 74 - 17000 367.46414 2750.8283 -412.22037 79.959878 1.1058821 111 0.0044407568 0.0010659592 0 0 37 74 - 18000 407.74215 2308.5027 -408.73046 88.724338 1.1058821 111 0.0042016342 0.0010049017 0 0 37 74 - 19000 341.53799 5777.9814 -407.00637 74.31837 1.1058821 111 0.0039877848 0.00095025921 0 0 37 74 - 20000 395.75303 3159.4677 -403.82798 86.115516 1.1058821 111 0.0037874635 0.00090297077 0 0 37 74 -Loop time of 231.351 on 1 procs for 20000 steps with 111 atoms + 0 260.39219 -1699.3643 -55.141232 11.642695 0.23910963 24 0 0 0 0 8 16 + 1000 340.44409 -2560.1501 -280.70157 53.784356 0.80699501 81 0.054205983 0.015933081 0 0 27 54 + 2000 302.57602 592.41718 -310.37771 53.213377 0.89666113 90 0.030546787 0.0078577743 0 0 30 60 + 3000 270.18045 -817.18659 -346.75773 50.737466 0.95643854 96 0.021969243 0.0060076096 0 0 32 64 + 4000 334.17192 1153.3017 -335.25519 62.75449 0.95643854 96 0.016400775 0.0045269353 0 0 32 64 + 5000 360.36872 -647.99689 -336.2928 67.674015 0.95643854 96 0.012996731 0.0036569014 0 0 32 64 + 6000 282.37822 -986.51765 -341.91848 53.028098 0.95643854 96 0.010941282 0.0030159847 0 0 32 64 + 7000 363.01448 2952.0391 -358.72963 70.335018 0.98632724 99 0.0098923151 0.0028884203 0 0 33 66 + 8000 331.70391 323.34886 -382.04165 68.223498 1.0461046 105 0.0092083323 0.0025112378 0 0 35 70 + 9000 337.2032 -3637.5257 -390.66472 69.35457 1.0461046 105 0.0081585853 0.0022395915 0 0 35 70 + 10000 373.67063 3081.3271 -380.5107 76.855041 1.0461046 105 0.0073396679 0.0020164949 0 0 35 70 + 11000 336.64665 5535.9451 -405.21548 71.247059 1.0759934 108 0.0068442571 0.0018355023 0 0 36 72 + 12000 306.51164 1448.1757 -410.3655 64.869362 1.0759934 108 0.0062798499 0.0016809265 0 0 36 72 + 13000 319.03497 177.44405 -406.17113 67.519768 1.0759934 108 0.0057952448 0.0015520479 0 0 36 72 + 14000 309.89701 -1022.6798 -384.20239 65.585833 1.0759934 108 0.005391524 0.0014384143 0 0 36 72 + 15000 398.91559 2058.9251 -404.32604 84.425503 1.0759934 108 0.0050257238 0.0013442486 0 0 36 72 + 16000 318.98778 873.46142 -392.13338 67.50978 1.0759934 108 0.0047204383 0.0012578458 0 0 36 72 + 17000 333.16025 2347.0215 -387.73943 70.509206 1.0759934 108 0.0044407568 0.0011843991 0 0 36 72 + 18000 353.23789 -2305.787 -382.1633 74.758389 1.0759934 108 0.0042016342 0.0011165574 0 0 36 72 + 19000 322.70939 5619.9631 -381.81328 68.297412 1.0759934 108 0.0039877848 0.0010558436 0 0 36 72 + 20000 371.07261 3916.1113 -389.76357 78.532884 1.0759934 108 0.0037874635 0.0010033009 0 0 36 72 +Loop time of 242.59 on 1 procs for 20000 steps with 108 atoms -Performance: 7.469 ns/day, 3.213 hours/ns, 86.449 timesteps/s -99.4% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 7.123 ns/day, 3.369 hours/ns, 82.444 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 39.09 | 39.09 | 39.09 | 0.0 | 16.90 -Bond | 0.092728 | 0.092728 | 0.092728 | 0.0 | 0.04 -Kspace | 0.87751 | 0.87751 | 0.87751 | 0.0 | 0.38 -Neigh | 3.9658 | 3.9658 | 3.9658 | 0.0 | 1.71 -Comm | 1.0608 | 1.0608 | 1.0608 | 0.0 | 0.46 -Output | 0.00096035 | 0.00096035 | 0.00096035 | 0.0 | 0.00 -Modify | 186.07 | 186.07 | 186.07 | 0.0 | 80.43 -Other | | 0.1892 | | | 0.08 +Pair | 38.279 | 38.279 | 38.279 | 0.0 | 15.78 +Bond | 0.055672 | 0.055672 | 0.055672 | 0.0 | 0.02 +Kspace | 0.60623 | 0.60623 | 0.60623 | 0.0 | 0.25 +Neigh | 4.4189 | 4.4189 | 4.4189 | 0.0 | 1.82 +Comm | 1.2719 | 1.2719 | 1.2719 | 0.0 | 0.52 +Output | 0.00096583 | 0.00096583 | 0.00096583 | 0.0 | 0.00 +Modify | 197.85 | 197.85 | 197.85 | 0.0 | 81.56 +Other | | 0.1098 | | | 0.05 -Nlocal: 111 ave 111 max 111 min +Nlocal: 108 ave 108 max 108 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 8070 ave 8070 max 8070 min +Nghost: 8000 ave 8000 max 8000 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 105469 ave 105469 max 105469 min +Neighs: 100006 ave 100006 max 100006 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 105469 -Ave neighs/atom = 950.171 +Total # of neighbors = 100006 +Ave neighs/atom = 925.981 Ave special neighs/atom = 2 -Neighbor list builds = 20910 +Neighbor list builds = 20903 Dangerous builds = 0 -Total wall time: 0:03:51 +Total wall time: 0:04:02 diff --git a/examples/gcmc/log.30Mar18.gcmc.lj.g++.1 b/examples/gcmc/log.27Nov18.gcmc.lj.g++.1 similarity index 90% rename from examples/gcmc/log.30Mar18.gcmc.lj.g++.1 rename to examples/gcmc/log.27Nov18.gcmc.lj.g++.1 index 20a25c0f95..1a6651fd4e 100644 --- a/examples/gcmc/log.30Mar18.gcmc.lj.g++.1 +++ b/examples/gcmc/log.27Nov18.gcmc.lj.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (30 Mar 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # GCMC for LJ simple fluid, no dynamics # T = 2.0 @@ -112,20 +112,20 @@ Step Temp Press PotEng KinEng Density Atoms v_iacc v_dacc v_tacc v_rhoav v_pav v 8000 2.2135488 2.0878792 -3.0471089 3.2707661 0.536 67 0.067926473 0.067738312 0.1135594 0.52736 1.4348314 0.034380623 62.43 9000 1.8904287 0.52639383 -3.3548657 2.7920177 0.52 65 0.06818197 0.068003094 0.11356319 0.53072 1.4528143 0.021683615 63.23 10000 2.2353281 0.73275312 -3.2197702 3.3006016 0.512 64 0.068465059 0.068208485 0.11414748 0.52712 1.4143492 0.03497858 62.44 -Loop time of 21.2409 on 1 procs for 10000 steps with 64 atoms +Loop time of 27.8547 on 1 procs for 10000 steps with 64 atoms -Performance: 203381.368 tau/day, 470.790 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 155090.656 tau/day, 359.006 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.45931 | 0.45931 | 0.45931 | 0.0 | 2.16 -Neigh | 1.1637 | 1.1637 | 1.1637 | 0.0 | 5.48 -Comm | 0.17294 | 0.17294 | 0.17294 | 0.0 | 0.81 -Output | 0.00027394 | 0.00027394 | 0.00027394 | 0.0 | 0.00 -Modify | 19.416 | 19.416 | 19.416 | 0.0 | 91.41 -Other | | 0.02919 | | | 0.14 +Pair | 0.43892 | 0.43892 | 0.43892 | 0.0 | 1.58 +Neigh | 1.278 | 1.278 | 1.278 | 0.0 | 4.59 +Comm | 0.24105 | 0.24105 | 0.24105 | 0.0 | 0.87 +Output | 0.00032067 | 0.00032067 | 0.00032067 | 0.0 | 0.00 +Modify | 25.88 | 25.88 | 25.88 | 0.0 | 92.91 +Other | | 0.01693 | | | 0.06 Nlocal: 64 ave 64 max 64 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -138,4 +138,4 @@ Total # of neighbors = 2423 Ave neighs/atom = 37.8594 Neighbor list builds = 10000 Dangerous builds = 0 -Total wall time: 0:00:21 +Total wall time: 0:00:27 diff --git a/examples/gcmc/log.30Mar18.gcmc.lj.g++.4 b/examples/gcmc/log.27Nov18.gcmc.lj.g++.4 similarity index 90% rename from examples/gcmc/log.30Mar18.gcmc.lj.g++.4 rename to examples/gcmc/log.27Nov18.gcmc.lj.g++.4 index 819d0ed086..6e59f3d484 100644 --- a/examples/gcmc/log.30Mar18.gcmc.lj.g++.4 +++ b/examples/gcmc/log.27Nov18.gcmc.lj.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (30 Mar 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # GCMC for LJ simple fluid, no dynamics # T = 2.0 @@ -112,20 +112,20 @@ Step Temp Press PotEng KinEng Density Atoms v_iacc v_dacc v_tacc v_rhoav v_pav v 8000 1.947817 0.74570466 -3.0935809 2.8753489 0.504 63 0.068034071 0.067855883 0.11217045 0.53304 1.4924302 0.012298733 63.45 9000 1.8942389 1.3367401 -2.8925016 2.7962574 0.504 63 0.068117479 0.067943081 0.11236152 0.536 1.4091106 0.0011494886 63.73 10000 2.2092799 0.95517153 -2.9117781 3.2586879 0.48 60 0.068264792 0.068016591 0.11310789 0.52272 1.4774174 0.051284873 62.04 -Loop time of 29.2417 on 4 procs for 10000 steps with 60 atoms +Loop time of 26.0069 on 4 procs for 10000 steps with 60 atoms -Performance: 147733.999 tau/day, 341.977 timesteps/s -96.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 166109.741 tau/day, 384.513 timesteps/s +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.11648 | 0.1221 | 0.13001 | 1.5 | 0.42 -Neigh | 0.34452 | 0.35618 | 0.36328 | 1.2 | 1.22 -Comm | 0.63561 | 0.65617 | 0.67542 | 1.8 | 2.24 -Output | 0.00056601 | 0.00069755 | 0.00074744 | 0.0 | 0.00 -Modify | 28.069 | 28.076 | 28.082 | 0.1 | 96.01 -Other | | 0.03094 | | | 0.11 +Pair | 0.10309 | 0.115 | 0.1225 | 2.2 | 0.44 +Neigh | 0.3907 | 0.40447 | 0.41957 | 1.7 | 1.56 +Comm | 0.44236 | 0.46678 | 0.49472 | 2.8 | 1.79 +Output | 0.0011411 | 0.0062903 | 0.0080109 | 3.7 | 0.02 +Modify | 25 | 25.002 | 25.005 | 0.0 | 96.14 +Other | | 0.01231 | | | 0.05 Nlocal: 15 ave 16 max 14 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -138,4 +138,4 @@ Total # of neighbors = 2116 Ave neighs/atom = 35.2667 Neighbor list builds = 10000 Dangerous builds = 0 -Total wall time: 0:00:29 +Total wall time: 0:00:26 diff --git a/examples/gcmc/log.30Mar18.gcmc.co2.g++.4 b/examples/gcmc/log.30Mar18.gcmc.co2.g++.4 deleted file mode 100644 index a824945cbf..0000000000 --- a/examples/gcmc/log.30Mar18.gcmc.co2.g++.4 +++ /dev/null @@ -1,131 +0,0 @@ -LAMMPS (30 Mar 2018) - using 1 OpenMP thread(s) per MPI task -# GCMC for CO2 molecular fluid, rigid/small/nvt dynamics -# Rigid CO2 TraPPE model -# [Potoff and J.I. Siepmann, Vapor-liquid equilibria of -# mixtures containing alkanes, carbon dioxide and -# nitrogen AIChE J., 47,1676-1682 (2001)]. - -# variables available on command line - -variable mu index -8.1 -variable disp index 0.5 -variable temp index 338.0 -variable lbox index 10.0 -variable spacing index 5.0 - -# global model settings - -units real -atom_style full -boundary p p p -pair_style lj/cut/coul/long 14 -pair_modify mix arithmetic tail yes -kspace_style ewald 0.0001 -bond_style harmonic -angle_style harmonic - -# box, start molecules on simple cubic lattice - -lattice sc ${spacing} -lattice sc 5.0 -Lattice spacing in x,y,z = 5 5 5 -region box block 0 ${lbox} 0 ${lbox} 0 ${lbox} units box -region box block 0 10.0 0 ${lbox} 0 ${lbox} units box -region box block 0 10.0 0 10.0 0 ${lbox} units box -region box block 0 10.0 0 10.0 0 10.0 units box -create_box 2 box bond/types 1 angle/types 1 extra/bond/per/atom 2 extra/angle/per/atom 1 extra/special/per/atom 2 -Created orthogonal box = (0 0 0) to (10 10 10) - 1 by 2 by 2 MPI processor grid -molecule co2mol CO2.txt -Read molecule co2mol: - 3 atoms with max type 2 - 2 bonds with max type 1 - 1 angles with max type 1 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -create_atoms 0 box mol co2mol 464563 units box -Created 24 atoms - Time spent = 0.00257635 secs - -# rigid CO2 TraPPE model - -pair_coeff 1 1 0.053649 2.8 -pair_coeff 2 2 0.156973 3.05 -bond_coeff 1 0 1.16 -angle_coeff 1 0 180 - -# masses - -mass 1 12.0107 -mass 2 15.9994 - -# MD settings - -group co2 type 1 2 -24 atoms in group co2 -neighbor 2.0 bin -neigh_modify every 1 delay 10 check yes -velocity all create ${temp} 54654 -velocity all create 338.0 54654 -timestep 1.0 - -# rigid constraints with thermostat - -fix myrigidnvt co2 rigid/nvt/small molecule temp ${temp} ${temp} 100 mol co2mol -fix myrigidnvt co2 rigid/nvt/small molecule temp 338.0 ${temp} 100 mol co2mol -fix myrigidnvt co2 rigid/nvt/small molecule temp 338.0 338.0 100 mol co2mol -8 rigid bodies with 24 atoms - 1.16 = max distance from body owner to body atom - -# dynamically update fix rigid/nvt/small temperature ndof -fix_modify myrigidnvt dynamic/dof yes - -# gcmc - -variable tfac equal 5.0/3.0 # (3 trans + 2 rot)/(3 trans) -fix mygcmc co2 gcmc 100 100 0 0 54341 ${temp} ${mu} ${disp} mol co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt -fix mygcmc co2 gcmc 100 100 0 0 54341 338.0 ${mu} ${disp} mol co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt -fix mygcmc co2 gcmc 100 100 0 0 54341 338.0 -8.1 ${disp} mol co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt -fix mygcmc co2 gcmc 100 100 0 0 54341 338.0 -8.1 0.5 mol co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt -fix mygcmc co2 gcmc 100 100 0 0 54341 338.0 -8.1 0.5 mol co2mol tfac_insert 1.66666666666667 group co2 rigid myrigidnvt - -# atom counts - -variable carbon atom "type==1" -variable oxygen atom "type==2" -group carbon dynamic co2 var carbon -dynamic group carbon defined -group oxygen dynamic co2 var oxygen -dynamic group oxygen defined -variable nC equal count(carbon) -variable nO equal count(oxygen) - -# output - -variable tacc equal f_mygcmc[2]/(f_mygcmc[1]+0.1) -variable iacc equal f_mygcmc[4]/(f_mygcmc[3]+0.1) -variable dacc equal f_mygcmc[6]/(f_mygcmc[5]+0.1) -variable racc equal f_mygcmc[8]/(f_mygcmc[7]+0.1) - -# dynamically update default temperature ndof -compute_modify thermo_temp dynamic/dof yes - -thermo_style custom step temp press pe ke density atoms v_iacc v_dacc v_tacc v_racc v_nC v_nO -thermo 1000 - -# run - -run 20000 -Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.164636 - estimated absolute RMS force accuracy = 0.0332064 - estimated relative force accuracy = 0.0001 - KSpace vectors: actual max1d max3d = 16 2 62 - kxmax kymax kzmax = 2 2 2 -WARNING: Fix gcmc using full_energy option (../fix_gcmc.cpp:485) -0 atoms in group FixGCMC:gcmc_exclusion_group:mygcmc -0 atoms in group FixGCMC:rotation_gas_atoms:mygcmc -ERROR: fix gcmc does currently not support full_energy option with molecules on more than 1 MPI process. (../fix_gcmc.cpp:721) -Last command: run 20000 diff --git a/examples/gcmc/log.30Mar18.gcmc.h2o.g++.4 b/examples/gcmc/log.30Mar18.gcmc.h2o.g++.4 deleted file mode 100644 index c5caf57113..0000000000 --- a/examples/gcmc/log.30Mar18.gcmc.h2o.g++.4 +++ /dev/null @@ -1,237 +0,0 @@ -LAMMPS (30 Mar 2018) - using 1 OpenMP thread(s) per MPI task -# fix gcmc example with fix shake - -# variables available on command line - -variable mu index -8.1 -variable disp index 0.5 -variable temp index 338.0 -variable lbox index 10.0 -variable spacing index 5.0 - -# global model settings - -units real -atom_style full -boundary p p p -pair_style lj/cut/coul/long 14 -pair_modify mix arithmetic tail yes -kspace_style ewald 0.0001 -bond_style harmonic -angle_style harmonic - -# box, start molecules on simple cubic lattice - -lattice sc ${spacing} -lattice sc 5.0 -Lattice spacing in x,y,z = 5 5 5 -region box block 0 ${lbox} 0 ${lbox} 0 ${lbox} units box -region box block 0 10.0 0 ${lbox} 0 ${lbox} units box -region box block 0 10.0 0 10.0 0 ${lbox} units box -region box block 0 10.0 0 10.0 0 10.0 units box -create_box 2 box bond/types 1 angle/types 1 extra/bond/per/atom 2 extra/angle/per/atom 1 extra/special/per/atom 2 -Created orthogonal box = (0 0 0) to (10 10 10) - 1 by 2 by 2 MPI processor grid - -molecule h2omol H2O.txt -Read molecule h2omol: - 3 atoms with max type 2 - 2 bonds with max type 1 - 1 angles with max type 1 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -create_atoms 0 box mol h2omol 464563 units box -Created 24 atoms - Time spent = 0.00285625 secs - -# rigid SPC/E water model - -pair_coeff 1 1 0.15535 3.166 -pair_coeff * 2 0.0000 0.0000 - -bond_coeff 1 1000 1.0 -angle_coeff 1 100 109.47 - -# masses - -mass 1 15.9994 -mass 2 1.0 - -# MD settings - -group h2o type 1 2 -24 atoms in group h2o -neighbor 2.0 bin -neigh_modify every 1 delay 1 check yes -velocity all create ${temp} 54654 -velocity all create 338.0 54654 -timestep 1.0 - -minimize 0.0 0.0 100 1000 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) -Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.170448 - estimated absolute RMS force accuracy = 0.0332064 - estimated relative force accuracy = 0.0001 - KSpace vectors: actual max1d max3d = 16 2 62 - kxmax kymax kzmax = 2 2 2 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 16 - ghost atom cutoff = 16 - binsize = 8, bins = 2 2 2 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 11.85 | 11.85 | 11.85 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 338 -4.9610706 9.2628112e-06 18.211756 730.90791 - 100 338 -15.742442 0.14954269 7.579918 -637.49568 -Loop time of 0.0695416 on 4 procs for 100 steps with 24 atoms - -94.4% CPU use with 4 MPI tasks x 1 OpenMP threads - -Minimization stats: - Stopping criterion = max iterations - Energy initial, next-to-last, final = - -4.96106135393 -15.5388622715 -15.592899346 - Force two-norm initial, final = 15.474 18.1478 - Force max component initial, final = 5.80042 7.56514 - Final line search alpha, max atom move = 0.00151131 0.0114333 - Iterations, force evaluations = 100 328 - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0093951 | 0.017625 | 0.028943 | 5.3 | 25.34 -Bond | 0.00035357 | 0.00042325 | 0.00055075 | 0.0 | 0.61 -Kspace | 0.00664 | 0.019695 | 0.029924 | 6.1 | 28.32 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.022505 | 0.02509 | 0.027851 | 1.3 | 36.08 -Output | 3.3855e-05 | 3.5942e-05 | 4.1485e-05 | 0.0 | 0.05 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.006672 | | | 9.59 - -Nlocal: 6 ave 8 max 3 min -Histogram: 1 0 0 0 1 0 0 0 0 2 -Nghost: 1722 ave 1725 max 1720 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Neighs: 1256.75 ave 2101 max 667 min -Histogram: 1 0 1 0 1 0 0 0 0 1 - -Total # of neighbors = 5027 -Ave neighs/atom = 209.458 -Ave special neighs/atom = 2 -Neighbor list builds = 0 -Dangerous builds = 0 -reset_timestep 0 - -# rigid constraints with thermostat - -fix mynvt h2o nvt temp ${temp} ${temp} 100 -fix mynvt h2o nvt temp 338.0 ${temp} 100 -fix mynvt h2o nvt temp 338.0 338.0 100 -fix wshake h2o shake 0.0001 50 0 b 1 a 1 mol h2omol - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 8 = # of frozen angles - -# important to make temperature dofs dynamic - -compute_modify thermo_temp dynamic/dof yes -compute_modify mynvt_temp dynamic/dof yes - -run 1000 -Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.170448 - estimated absolute RMS force accuracy = 0.0332064 - estimated relative force accuracy = 0.0001 - KSpace vectors: actual max1d max3d = 16 2 62 - kxmax kymax kzmax = 2 2 2 -Per MPI rank memory allocation (min/avg/max) = 11.6 | 11.6 | 11.6 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 518.26667 -15.742442 0 7.4303753 -613.0781 - 1000 369.81793 -54.202682 0 -37.667327 294.98832 -Loop time of 0.191619 on 4 procs for 1000 steps with 24 atoms - -Performance: 450.894 ns/day, 0.053 hours/ns, 5218.680 timesteps/s -96.4% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.015873 | 0.028989 | 0.040172 | 5.3 | 15.13 -Bond | 0.00024271 | 0.00027657 | 0.00034404 | 0.0 | 0.14 -Kspace | 0.022896 | 0.034492 | 0.047924 | 5.1 | 18.00 -Neigh | 0.0025764 | 0.0025961 | 0.0026152 | 0.0 | 1.35 -Comm | 0.068467 | 0.070095 | 0.071535 | 0.4 | 36.58 -Output | 4.8161e-05 | 5.0783e-05 | 5.7936e-05 | 0.0 | 0.03 -Modify | 0.049141 | 0.049894 | 0.05072 | 0.3 | 26.04 -Other | | 0.005226 | | | 2.73 - -Nlocal: 6 ave 8 max 3 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 1331.5 ave 1369 max 1290 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 1259.75 ave 1642 max 428 min -Histogram: 1 0 0 0 0 0 0 1 0 2 - -Total # of neighbors = 5039 -Ave neighs/atom = 209.958 -Ave special neighs/atom = 2 -Neighbor list builds = 27 -Dangerous builds = 0 -reset_timestep 0 - -# gcmc - -variable tfac equal 5.0/3.0 # (3 trans + 2 rot)/(3 trans) -fix mygcmc h2o gcmc 100 100 0 0 54341 ${temp} ${mu} ${disp} mol h2omol tfac_insert ${tfac} group h2o shake wshake -fix mygcmc h2o gcmc 100 100 0 0 54341 338.0 ${mu} ${disp} mol h2omol tfac_insert ${tfac} group h2o shake wshake -fix mygcmc h2o gcmc 100 100 0 0 54341 338.0 -8.1 ${disp} mol h2omol tfac_insert ${tfac} group h2o shake wshake -fix mygcmc h2o gcmc 100 100 0 0 54341 338.0 -8.1 0.5 mol h2omol tfac_insert ${tfac} group h2o shake wshake -fix mygcmc h2o gcmc 100 100 0 0 54341 338.0 -8.1 0.5 mol h2omol tfac_insert 1.66666666666667 group h2o shake wshake - -# atom counts - -variable oxygen atom "type==1" -variable hydrogen atom "type==2" -group oxygen dynamic all var oxygen -dynamic group oxygen defined -group hydrogen dynamic all var hydrogen -dynamic group hydrogen defined -variable nO equal count(oxygen) -variable nH equal count(hydrogen) - -# output - -variable tacc equal f_mygcmc[2]/(f_mygcmc[1]+0.1) -variable iacc equal f_mygcmc[4]/(f_mygcmc[3]+0.1) -variable dacc equal f_mygcmc[6]/(f_mygcmc[5]+0.1) -variable racc equal f_mygcmc[8]/(f_mygcmc[7]+0.1) -thermo_style custom step temp press pe ke density atoms v_iacc v_dacc v_tacc v_racc v_nO v_nH -thermo 1000 - -# run - -run 20000 -Ewald initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.170448 - estimated absolute RMS force accuracy = 0.0332064 - estimated relative force accuracy = 0.0001 - KSpace vectors: actual max1d max3d = 16 2 62 - kxmax kymax kzmax = 2 2 2 -WARNING: Fix gcmc using full_energy option (../fix_gcmc.cpp:485) -0 atoms in group FixGCMC:gcmc_exclusion_group:mygcmc -0 atoms in group FixGCMC:rotation_gas_atoms:mygcmc -ERROR: fix gcmc does currently not support full_energy option with molecules on more than 1 MPI process. (../fix_gcmc.cpp:721) -Last command: run 20000 From d67dad9d673ad3eedb388561c9dcd10485d46767 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 12:47:15 -0500 Subject: [PATCH 228/273] update log files for meam examples --- examples/meam/Ni.meam | 4 +- examples/meam/SiC.meam | 13 +- examples/meam/library.meam | 179 +----------------- ...ay17.meam.g++.1 => log.27Nov18.meam.g++.1} | 21 +- ...ay17.meam.g++.4 => log.27Nov18.meam.g++.4} | 21 +- ...ear.g++.1 => log.27Nov18.meam.shear.g++.1} | 98 +++++----- ...ear.g++.4 => log.27Nov18.meam.shear.g++.4} | 110 +++++------ ...17.meamc.g++.1 => log.27Nov18.meamc.g++.1} | 20 +- ...17.meamc.g++.4 => log.27Nov18.meamc.g++.4} | 20 +- ...ar.g++.1 => log.27Nov18.meamc.shear.g++.1} | 99 +++++----- ...ar.g++.4 => log.27Nov18.meamc.shear.g++.4} | 103 +++++----- 11 files changed, 253 insertions(+), 435 deletions(-) mode change 100644 => 120000 examples/meam/Ni.meam mode change 100644 => 120000 examples/meam/SiC.meam mode change 100644 => 120000 examples/meam/library.meam rename examples/meam/{log.19May17.meam.g++.1 => log.27Nov18.meam.g++.1} (80%) rename examples/meam/{log.19May17.meam.g++.4 => log.27Nov18.meam.g++.4} (80%) rename examples/meam/{log.19May17.meam.shear.g++.1 => log.27Nov18.meam.shear.g++.1} (60%) rename examples/meam/{log.19May17.meam.shear.g++.4 => log.27Nov18.meam.shear.g++.4} (59%) rename examples/meam/{log.19May17.meamc.g++.1 => log.27Nov18.meamc.g++.1} (83%) rename examples/meam/{log.19May17.meamc.g++.4 => log.27Nov18.meamc.g++.4} (83%) rename examples/meam/{log.19May17.meamc.shear.g++.1 => log.27Nov18.meamc.shear.g++.1} (61%) rename examples/meam/{log.19May17.meamc.shear.g++.4 => log.27Nov18.meamc.shear.g++.4} (61%) diff --git a/examples/meam/Ni.meam b/examples/meam/Ni.meam deleted file mode 100644 index 7fd8d19f52..0000000000 --- a/examples/meam/Ni.meam +++ /dev/null @@ -1,3 +0,0 @@ -# DATE: 2007-06-11 CONTRIBUTOR: Greg Wagner, gjwagne@sandia.gov CITATION: Unknown -rc = 4.0 -delr = 0.1 diff --git a/examples/meam/Ni.meam b/examples/meam/Ni.meam new file mode 120000 index 0000000000..5283388f64 --- /dev/null +++ b/examples/meam/Ni.meam @@ -0,0 +1 @@ +../../potentials/Ni.meam \ No newline at end of file diff --git a/examples/meam/SiC.meam b/examples/meam/SiC.meam deleted file mode 100644 index d07903c52a..0000000000 --- a/examples/meam/SiC.meam +++ /dev/null @@ -1,12 +0,0 @@ -# DATE: 2007-06-11 CONTRIBUTOR: Greg Wagner, gjwagne@sandia.gov CITATION: Unknown -lattce(1,2) = 'dia' -Ec(1,2) = 6.4325 -alpha(1,2) = 4.37 -re(1,2) = 1.8878 -rho0(2) = 2.25 -rc = 4.0 -delr = 0.1 -Cmax(1,2,1) = 4.0 -Cmax(1,2,2) = 4.0 -Cmax(2,2,1) = 4.0 -Cmax(1,1,2) = 4.0 diff --git a/examples/meam/SiC.meam b/examples/meam/SiC.meam new file mode 120000 index 0000000000..288d5d0433 --- /dev/null +++ b/examples/meam/SiC.meam @@ -0,0 +1 @@ +../../potentials/SiC.meam \ No newline at end of file diff --git a/examples/meam/library.meam b/examples/meam/library.meam deleted file mode 100644 index 38a52bed0a..0000000000 --- a/examples/meam/library.meam +++ /dev/null @@ -1,178 +0,0 @@ -# DATE: 2012-06-29 DATE: 2007-06-11 CONTRIBUTOR: Greg Wagner, gjwagne@sandia.gov CITATION: Baskes, Phys Rev B, 46, 2727-2742 (1992) -# meam data from vax files fcc,bcc,dia 11/4/92 -# elt lat z ielement atwt -# alpha b0 b1 b2 b3 alat esub asub -# t0 t1 t2 t3 rozero ibar - -'AlS' 'fcc' 12. 13 26.9815 -4.64 2.04 3.00 6.0 1.50 4.05 3.353 1.07 -1.0 +4.50 -2.30 8.01 1.0 -5 -'SiS' 'dia' 4. 14 28.086 -4.87 4.4 5.5 5.5 5.5 5.431 4.63 1. -1.0 2.05 4.47 -1.80 2.2 -5 -'MgS' 'hcp' 12. 12 24.305 -5.52 4.0 3.0 0.2 1.2 3.194 1.51 0.80 -1.0 10.04 9.49 -4.3 0.63 -5 -'CuS' 'fcc' 12. 29 63.54 -5.11 3.634 2.20 6 2.20 3.62 3.54 1.07 -1.0 4.91 2.49 2.95 1.10 -5 -'FeS' 'bcc' 8 26 55.847 -5.0270 3.500 2 1.00 1 2.851 4.28 0.5550 -1 -1.6 12.5 -1.40 1.0 -5 -'Sn5' 'dia' 4. 50 118. -5.09 5.00 16.0 04.0 5.0 6.483 3.14 1.00 -1.0 2.00 5.756 -0.30 1. 0 -'Sn' 'dia' 4. 50 118. -5.09 5.42 8.0 5.0 6.0 6.483 3.14 1.12 -1.0 3.0 5.707 +0.30 1. 0 -'Cu' 'fcc' 12. 29 63.54 -5.10570729 3.634 2.20 6 2.20 3.62 3.54 1.07 -1.0 3.13803254 2.49438711 2.95269237 1. 0 -'Ag' 'fcc' 12. 47 107.870 -5.89222008 4.456 2.20 6 2.20 4.08 2.85 1.06 -1.0 5.54097609 2.45015783 1.28843988 1. 0 -'Au' 'fcc' 12. 79 196.967 -6.34090112 5.449 2.20 6 2.20 4.07 3.93 1.04 -1.0 1.58956328 1.50776392 2.60609758 1. 0 -'Ni1' 'fcc' 12. 28 58.71 -4.99 2.45 2.20 6 2.20 3.52 4.45 1.10 -1.0 3.57 1.60 3.70 1.0 0 -'Ni2' 'fcc' 12. 28 58.71 -4.99 2.45 2.20 6 2.20 3.52 4.45 1.10 -1.0 3.57 1.60 3.70 1.0 3 -'Ni3' 'fcc' 12. 28 58.71 -4.99 2.45 1.50 6 1.50 3.52 4.45 1.10 -1.0 3.57 1.60 3.70 1.0 3 -'Ni4' 'fcc' 12. 28 58.71 -4.99 2.45 1.50 6 1.50 3.52 4.45 1.10 -1.0 3.57 1.60 3.70 1.0 0 -'Ni' 'fcc' 12. 28 58.71 -4.99 2.64 1.50 4.50 1.50 3.52 4.45 1.10 -1.0 1.692 4.987 3.683 1.0 1 -'Nix' 'fcc' 12. 28 58.71 -4.99 2.64 1.50 4.50 1.50 3.52 4.45 1.10 -1.0 0.00 0.000 3.683 1.0 1 -'Ni' 'fcc' 12. 28 58.71 -4.99 3.25 0.80 4 1.50 3.52 4.45 1.07 -1.0 -4.052 13.14 3.786 1.0 1 -'Pd' 'fcc' 12. 46 106.4 -6.43230473 4.975 2.20 6 2.20 3.89 3.91 1.01 -1.0 2.33573516 1.38343023 4.47989049 1. 0 -'Pt' 'fcc' 12. 78 195.09 -6.44221724 4.673 2.20 6 2.20 3.92 5.77 1.04 -1.0 2.73335406 -1.3759593 3.29322278 1. 0 -'Al' 'fcc' 12. 13 26.9815 -4.61 2.21 2.20 6.0 2.20 4.05 3.58 1.07 -1.0 -1.78 -2.21 8.01 0.6 0 -'Al' 'fcc' 12. 13 26.9815 -4.69 1.56 4.00 5.5 0.60 4.05 3.36 1.09 -1.0 -0.251 -3.450 8.298 0.6 1 -'Al' 'fcc' 12. 13 26.9815 -4.69 1.58 1.00 6.0 0.60 4.05 3.36 1.09 -1.0 -0.808 -2.614 8.298 0.6 1 -'Pb' 'fcc' 12. 82 207.19 -6.0564428 5.306 2.20 6 2.20 4.95 2.04 1.01 -1.0 2.74022352 3.06323991 1.2 1. 0 -'Rh' 'fcc' 12. 45 102.905 -6.0045385 1.131 1.00 2 1.00 3.8 5.75 1.05 -1.0 2.9900 4.60231784 4.8 1. 0 -'Ir' 'fcc' 12. 77 192.2 -6.52315787 1.13 1.00 2 1.00 3.84 6.93 1.05 -1.0 1.50000 8.09942666 4.8 1. 0 -'Li' 'bcc' 8. 3 6.939 -2.97244804 1.425 1.00 1.00169907 1.00 3.509 1.65 0.87 -1.0 0.26395017 0.44431129 -0.2 1. 0 -'Na' 'bcc' 8. 11 22.9898 -3.64280541 2.313 1.00 1.00173951 1.00 4.291 1.13 0.9 -1.0 3.55398839 0.68807569 -0.2 1. 0 -'K' 'bcc' 8. 19 39.102 -3.90128376 2.687 1.00 1.00186667 1.00 5.344 0.94 0.92 -1.0 5.09756981 0.69413264 -0.2 1. 0 -'V' 'bcc' 8. 23 50.942 -4.83265262 4.113 1.00 1.00095022 1.00 3.04 5.3 1 -1.0 4.20161301 4.09946561 -1 1. 0 -'Nb' 'bcc' 8. 41 92.906 -4.79306197 4.374 1.00 1.00101441 1.00 3.301 7.47 1 -1.0 3.75762849 3.82514598 -1 1. 0 -'Ta' 'bcc' 8. 73 180.948 -4.89528669 3.709 1.00 1.00099783 1.00 3.303 8.09 0.99 -1.0 6.08617812 3.35255804 -2.9 1. 0 -'Cr' 'bcc' 8. 24 51.996 -5.12169218 3.224 1.00 1.00048646 1.00 2.885 4.1 0.94 -1.0 -0.207535 12.2600006 -1.9 1. 0 -'Mo' 'bcc' 8. 42 95.94 -5.84872871 4.481 1.00 1.00065204 1.00 3.15 6.81 0.99 -1.0 3.47727181 9.48582009 -2.9 1. 0 -'W' 'bcc' 8. 74 183.85 -5.62777409 3.978 1.00 1.00065894 1.00 3.165 8.66 0.98 -1.0 3.16353338 8.24586928 -2.7 1. 0 -'WL' 'bcc' 8 74 183.85 -5.6831 6.54 1 1 1 3.1639 8.66 0.4 -1 -0.6 0.3 -8.7 1 3 -'Fe' 'bcc' 8. 26 55.847 -5.07292627 2.935 1.00 1.00080073 1.00 2.866 4.29 0.89 -1.0 5.13579244 4.12042448 -2.7 1. 0 -'Si' 'dia' 4. 14 28.086 -4.87 4.8 4.8 4.8 4.8 5.431 4.63 1. -1.0 3.30 5.105 -0.80 1. 1 -'Si97' 'dia' 4. 14 28.086 -4.87 4.4 5.5 5.5 5.5 5.431 4.63 1. -1.0 3.13 4.47 -1.80 2.05 0 -'Si92' 'dia' 4. 14 28.086 -4.87 4.4 5.5 5.5 5.5 5.431 4.63 1. -1.0 3.13 4.47 -1.80 2.35 0 -'Six' 'dia' 4 14 28.086 -4.87 4.4 5.5 5.5 5.5 5.431 4.63 1.0 -1.0 2.05 4.47 -1.8 2.05 0 -'Sixb' 'dia' 4 14 28.086 -4.87 4.4 5.5 5.5 5.5 5.431 4.63 1.0 -1.0 2.05 4.47 -1.8 2.5 0 -'Mg' 'hcp' 12. 12 24.305 -5.45 2.70 0.0 0.35 3.0 3.20 1.55 1.11 -1.0 8.00 04.1 -02.0 1.0 0 -'C' 'dia' 4. 6 12.0111 -4.38 4.10 4.200 5.00 3.00 3.567 7.37 1.000 -1.0 5.0 9.34 -1.00 2.25 1 -'C' 'dia' 4. 6 12.0111 -4.38 5.20 3.87 4.00 4.50 3.567 7.37 1.278 -1.0 15. 2.09 -6.00 2.5 1 -'C' 'dia' 4. 6 12.0111 -4.38 4.50 4.00 3.50 4.80 3.567 7.37 1.00 -1.0 10.5 1.54 -8.75 3.2 1 -'C' 'dia' 4. 6 12.0111 -4.38 3.30 2.80 1.50 3.20 3.567 7.37 1.00 -1.0 10.3 1.54 -8.80 2.5 1 -'C' 'dia' 4. 6 12.0111 -4.38 4.60 3.45 4.00 4.20 3.567 7.37 1.061 -1.0 15.0 1.74 -8.00 2.5 1 -'C' 'dia' 4. 6 12.0111 -4.38 4.50 4.00 3.50 4.80 3.567 7.37 1.00 -1.0 10.5 1.54 -8.75 3.2 1 -'h' 'dim' 1. 1 1.0079 -2.96 2.70 3.5 3.4 3.4 0.74 2.235 2.27 -1.0 0.19 0.00 0.00 20.00 0 -'h' 'dim' 1. 1 1.0079 -2.96 2.00 4.0 4.0 0.0 0.74 2.235 1.00 -1.0 -0.60 -0.80 -0.0 01.0 1 -'H' 'dim' 1. 1 1.0079 -2.96 2.96 3.0 3.0 3.0 0.74 2.235 2.50 -1.0 0.20 -0.10 0.0 0.5 0 -'H' 'dim' 1. 1 1.0079 -2.96 2.0 3.0 4.0 0.0 0.74 2.225 1.00 -1.0 -0.5 -1.00 0.0 0.15 1 -'H' 'dim' 1. 1 1.0079 -2.96 2.00 2.0 2.0 2.0 0.74 2.235 1.00 -1.0 -0.60 -0.80 -0.0 01.0 2 -'Hni' 'dim' 1. 1 1.0079 -2.96 2.96 3.0 3.0 3.0 0.74 2.235 2.50 -1.0 0.2 -0.1 0.0 0.5 0 -'Hni' 'dim' 1. 1 1.0079 -2.96 2.96 3.0 2.0 3.0 0.74 2.235 36.4 -1.0 0.2 6.0 0.0 22.8 0 -'Vac' 'fcc' 12. 1 1. -0 0 0.0 0 0.0 1E+08 0 1 -0 0 0 0 1. 0 -'zz' 'zzz' 99. 1 1. -0 0 0.0 0 0.0 0. 0. 0. -0 0 0 0 1. 0 - diff --git a/examples/meam/library.meam b/examples/meam/library.meam new file mode 120000 index 0000000000..86fb601d6b --- /dev/null +++ b/examples/meam/library.meam @@ -0,0 +1 @@ +../../potentials/library.meam \ No newline at end of file diff --git a/examples/meam/log.19May17.meam.g++.1 b/examples/meam/log.27Nov18.meam.g++.1 similarity index 80% rename from examples/meam/log.19May17.meam.g++.1 rename to examples/meam/log.27Nov18.meam.g++.1 index a98de97f8e..502d919923 100644 --- a/examples/meam/log.19May17.meam.g++.1 +++ b/examples/meam/log.27Nov18.meam.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Test of MEAM potential for SiC system @@ -14,6 +14,7 @@ read_data data.meam 128 atoms pair_style meam +WARNING: THE pair_style meam COMMAND IS OBSOLETE AND WILL BE REMOVED VERY SOON. PLEASE USE meam/c (src/MEAM/pair_meam.cpp:51) pair_coeff * * library.meam Si C SiC.meam Si C Reading potential file library.meam with DATE: 2012-06-29 Reading potential file SiC.meam with DATE: 2007-06-11 @@ -64,20 +65,20 @@ Step Temp E_pair E_mol TotEng Press 80 2126.0903 -671.43755 0 -636.53557 -97475.831 90 2065.755 -670.4349 0 -636.52338 -95858.837 100 2051.4553 -670.20799 0 -636.53122 -107068.9 -Loop time of 0.0864418 on 1 procs for 100 steps with 128 atoms +Loop time of 0.0545483 on 1 procs for 100 steps with 128 atoms -Performance: 99.952 ns/day, 0.240 hours/ns, 1156.848 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 158.392 ns/day, 0.152 hours/ns, 1833.239 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.082592 | 0.082592 | 0.082592 | 0.0 | 95.55 -Neigh | 0.0028124 | 0.0028124 | 0.0028124 | 0.0 | 3.25 -Comm | 0.00049043 | 0.00049043 | 0.00049043 | 0.0 | 0.57 -Output | 0.00014329 | 0.00014329 | 0.00014329 | 0.0 | 0.17 -Modify | 0.00025415 | 0.00025415 | 0.00025415 | 0.0 | 0.29 -Other | | 0.0001497 | | | 0.17 +Pair | 0.050821 | 0.050821 | 0.050821 | 0.0 | 93.17 +Neigh | 0.0026484 | 0.0026484 | 0.0026484 | 0.0 | 4.86 +Comm | 0.0006423 | 0.0006423 | 0.0006423 | 0.0 | 1.18 +Output | 0.00011492 | 0.00011492 | 0.00011492 | 0.0 | 0.21 +Modify | 0.00021195 | 0.00021195 | 0.00021195 | 0.0 | 0.39 +Other | | 0.0001101 | | | 0.20 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/meam/log.19May17.meam.g++.4 b/examples/meam/log.27Nov18.meam.g++.4 similarity index 80% rename from examples/meam/log.19May17.meam.g++.4 rename to examples/meam/log.27Nov18.meam.g++.4 index adc34d08aa..d02591e122 100644 --- a/examples/meam/log.19May17.meam.g++.4 +++ b/examples/meam/log.27Nov18.meam.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Test of MEAM potential for SiC system @@ -14,6 +14,7 @@ read_data data.meam 128 atoms pair_style meam +WARNING: THE pair_style meam COMMAND IS OBSOLETE AND WILL BE REMOVED VERY SOON. PLEASE USE meam/c (src/MEAM/pair_meam.cpp:51) pair_coeff * * library.meam Si C SiC.meam Si C Reading potential file library.meam with DATE: 2012-06-29 Reading potential file SiC.meam with DATE: 2007-06-11 @@ -64,20 +65,20 @@ Step Temp E_pair E_mol TotEng Press 80 2126.0903 -671.43755 0 -636.53557 -97475.831 90 2065.755 -670.4349 0 -636.52338 -95858.837 100 2051.4553 -670.20799 0 -636.53122 -107068.9 -Loop time of 0.0389078 on 4 procs for 100 steps with 128 atoms +Loop time of 0.023721 on 4 procs for 100 steps with 128 atoms -Performance: 222.063 ns/day, 0.108 hours/ns, 2570.177 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 364.234 ns/day, 0.066 hours/ns, 4215.667 timesteps/s +95.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.031958 | 0.033267 | 0.034691 | 0.6 | 85.50 -Neigh | 0.00079155 | 0.00086409 | 0.00098801 | 0.0 | 2.22 -Comm | 0.0025704 | 0.0041765 | 0.005573 | 1.9 | 10.73 -Output | 0.0002749 | 0.00029588 | 0.00033569 | 0.0 | 0.76 -Modify | 9.4891e-05 | 0.00010347 | 0.00011587 | 0.0 | 0.27 -Other | | 0.000201 | | | 0.52 +Pair | 0.019888 | 0.020242 | 0.020626 | 0.2 | 85.33 +Neigh | 0.00071859 | 0.00076133 | 0.00082922 | 0.0 | 3.21 +Comm | 0.0019681 | 0.0022618 | 0.002651 | 0.5 | 9.53 +Output | 0.00018048 | 0.0002225 | 0.00034213 | 0.0 | 0.94 +Modify | 8.2016e-05 | 8.6308e-05 | 9.203e-05 | 0.0 | 0.36 +Other | | 0.000147 | | | 0.62 Nlocal: 32 ave 36 max 30 min Histogram: 1 2 0 0 0 0 0 0 0 1 diff --git a/examples/meam/log.19May17.meam.shear.g++.1 b/examples/meam/log.27Nov18.meam.shear.g++.1 similarity index 60% rename from examples/meam/log.19May17.meam.shear.g++.1 rename to examples/meam/log.27Nov18.meam.shear.g++.1 index 77b9688455..8eab38bc70 100644 --- a/examples/meam/log.19May17.meam.shear.g++.1 +++ b/examples/meam/log.27Nov18.meam.shear.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation @@ -17,8 +17,10 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.0007267 secs pair_style meam +WARNING: THE pair_style meam COMMAND IS OBSOLETE AND WILL BE REMOVED VERY SOON. PLEASE USE meam/c (src/MEAM/pair_meam.cpp:51) pair_coeff * * library.meam Ni4 Ni.meam Ni4 Ni4 Ni4 Reading potential file library.meam with DATE: 2012-06-29 Reading potential file Ni.meam with DATE: 2007-06-11 @@ -63,7 +65,7 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 @@ -91,20 +93,20 @@ Step Temp E_pair E_mol TotEng Press Volume 50 300 -8149.7654 0 -8096.1353 10633.141 19684.382 75 304.80657 -8163.4557 0 -8108.9665 7045.457 19759.745 100 300 -8173.6884 0 -8120.0584 5952.521 19886.589 -Loop time of 1.58103 on 1 procs for 100 steps with 1912 atoms +Loop time of 0.894544 on 1 procs for 100 steps with 1912 atoms -Performance: 5.465 ns/day, 4.392 hours/ns, 63.250 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 9.659 ns/day, 2.485 hours/ns, 111.789 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5561 | 1.5561 | 1.5561 | 0.0 | 98.42 -Neigh | 0.018544 | 0.018544 | 0.018544 | 0.0 | 1.17 -Comm | 0.0013864 | 0.0013864 | 0.0013864 | 0.0 | 0.09 -Output | 0.00011396 | 0.00011396 | 0.00011396 | 0.0 | 0.01 -Modify | 0.0038245 | 0.0038245 | 0.0038245 | 0.0 | 0.24 -Other | | 0.001096 | | | 0.07 +Pair | 0.87012 | 0.87012 | 0.87012 | 0.0 | 97.27 +Neigh | 0.01798 | 0.01798 | 0.01798 | 0.0 | 2.01 +Comm | 0.0016143 | 0.0016143 | 0.0016143 | 0.0 | 0.18 +Output | 0.00011492 | 0.00011492 | 0.00011492 | 0.0 | 0.01 +Modify | 0.0035381 | 0.0035381 | 0.0035381 | 0.0 | 0.40 +Other | | 0.001176 | | | 0.13 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -139,7 +141,7 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 @@ -156,52 +158,52 @@ Step Temp E_pair E_mol TotEng Press Volume 800 300 -8139.1821 0 -8103.4288 3628.3957 20509.519 900 305.03425 -8126.7734 0 -8090.4201 5316.2206 20638.992 1000 304.00321 -8112.1616 0 -8075.9311 7441.9638 20767.243 - 1100 304.14047 -8096.5041 0 -8060.2573 9646.6976 20888.167 - 1200 302.78457 -8080.5931 0 -8044.5079 11516.209 20995.917 - 1300 308.67054 -8061.6724 0 -8024.8857 11496.479 21130.013 - 1400 309.8301 -8046.27 0 -8009.3452 12926.835 21247.271 - 1500 300 -8035.0321 0 -7999.2788 15346.455 21370.637 - 1600 300 -8030.6657 0 -7994.9123 14802.869 21496.446 - 1700 300 -8024.5251 0 -7988.7718 13176.923 21611.262 - 1800 300 -8022.9963 0 -7987.243 10260.665 21741.956 - 1900 300 -8028.0522 0 -7992.2988 6955.1367 21867.765 - 2000 300 -8037.2708 0 -8001.5175 3520.3749 21987.467 - 2100 300 -8035.9945 0 -8000.2412 3237.6121 22109.611 - 2200 300 -8036.1882 0 -8000.4348 4295.1386 22223.205 - 2300 300 -8032.7689 0 -7997.0155 6231.2346 22355.121 - 2400 300 -8034.6621 0 -7998.9088 8585.3799 22468.716 - 2500 300 -8031.7774 0 -7996.0241 11627.871 22587.196 - 2600 300 -8024.032 0 -7988.2786 16254.69 22716.669 - 2700 308.64215 -8017.407 0 -7980.6237 18440.226 22835.149 - 2800 300 -8015.7348 0 -7979.9814 17601.716 22957.293 - 2900 305.82558 -8013.7448 0 -7977.2972 14123.494 23089.209 - 3000 300 -8011.0289 0 -7975.2755 9957.2884 23205.247 -Loop time of 51.9315 on 1 procs for 3000 steps with 1912 atoms + 1100 304.14041 -8096.5041 0 -8060.2573 9646.6972 20888.167 + 1200 302.78454 -8080.5931 0 -8044.5079 11516.208 20995.917 + 1300 308.67064 -8061.6724 0 -8024.8857 11496.471 21130.013 + 1400 309.82994 -8046.27 0 -8009.3451 12926.819 21247.271 + 1500 300 -8035.0317 0 -7999.2784 15346.797 21370.637 + 1600 300 -8030.6636 0 -7994.9102 14803.43 21496.446 + 1700 300 -8024.4819 0 -7988.7286 13175.257 21611.262 + 1800 300 -8022.8531 0 -7987.0998 10315.63 21743.178 + 1900 300 -8028.4095 0 -7992.6561 6882.0635 21855.551 + 2000 300 -8036.9005 0 -8001.1472 3508.9237 21983.802 + 2100 300 -8037.8224 0 -8002.0691 2724.0594 22112.054 + 2200 306.93248 -8035.3297 0 -7998.7501 4400.6008 22228.091 + 2300 306.24125 -8036.748 0 -8000.2508 6075.0546 22352.678 + 2400 300 -8038.8534 0 -8003.1 8701.8498 22465.051 + 2500 308.34129 -8034.0796 0 -7997.3322 10977.68 22600.632 + 2600 299.70072 -8028.8815 0 -7993.1638 15468.97 22715.447 + 2700 298.78276 -8019.1655 0 -7983.5572 18076.132 22844.921 + 2800 305.57845 -8014.3542 0 -7977.936 17573.035 22962.179 + 2900 300 -8015.7677 0 -7980.0144 13461.463 23087.988 + 3000 300 -8010.5908 0 -7974.8375 9333.4855 23199.139 +Loop time of 29.4592 on 1 procs for 3000 steps with 1912 atoms -Performance: 4.991 ns/day, 4.808 hours/ns, 57.768 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 8.799 ns/day, 2.728 hours/ns, 101.836 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 50.918 | 50.918 | 50.918 | 0.0 | 98.05 -Neigh | 0.81033 | 0.81033 | 0.81033 | 0.0 | 1.56 -Comm | 0.047331 | 0.047331 | 0.047331 | 0.0 | 0.09 -Output | 0.0011976 | 0.0011976 | 0.0011976 | 0.0 | 0.00 -Modify | 0.11889 | 0.11889 | 0.11889 | 0.0 | 0.23 -Other | | 0.03606 | | | 0.07 +Pair | 28.489 | 28.489 | 28.489 | 0.0 | 96.71 +Neigh | 0.77356 | 0.77356 | 0.77356 | 0.0 | 2.63 +Comm | 0.052517 | 0.052517 | 0.052517 | 0.0 | 0.18 +Output | 0.00095224 | 0.00095224 | 0.00095224 | 0.0 | 0.00 +Modify | 0.10813 | 0.10813 | 0.10813 | 0.0 | 0.37 +Other | | 0.03525 | | | 0.12 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1672 ave 1672 max 1672 min +Nghost: 1668 ave 1668 max 1668 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 23557 ave 23557 max 23557 min +Neighs: 23391 ave 23391 max 23391 min Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 47114 ave 47114 max 47114 min +FullNghs: 46782 ave 46782 max 46782 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 47114 -Ave neighs/atom = 24.6412 -Neighbor list builds = 221 +Total # of neighbors = 46782 +Ave neighs/atom = 24.4676 +Neighbor list builds = 219 Dangerous builds = 0 -Total wall time: 0:00:53 +Total wall time: 0:00:30 diff --git a/examples/meam/log.19May17.meam.shear.g++.4 b/examples/meam/log.27Nov18.meam.shear.g++.4 similarity index 59% rename from examples/meam/log.19May17.meam.shear.g++.4 rename to examples/meam/log.27Nov18.meam.shear.g++.4 index 84cb94f4b9..708e470925 100644 --- a/examples/meam/log.19May17.meam.shear.g++.4 +++ b/examples/meam/log.27Nov18.meam.shear.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation @@ -17,8 +17,10 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000408649 secs pair_style meam +WARNING: THE pair_style meam COMMAND IS OBSOLETE AND WILL BE REMOVED VERY SOON. PLEASE USE meam/c (src/MEAM/pair_meam.cpp:51) pair_coeff * * library.meam Ni4 Ni.meam Ni4 Ni4 Ni4 Reading potential file library.meam with DATE: 2012-06-29 Reading potential file Ni.meam with DATE: 2007-06-11 @@ -63,7 +65,7 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 @@ -91,20 +93,20 @@ Step Temp E_pair E_mol TotEng Press Volume 50 300 -8150.0685 0 -8096.4384 10317.407 19685.743 75 307.76021 -8164.6669 0 -8109.6496 6289.7138 19757.814 100 300 -8176.5141 0 -8122.884 4162.2559 19873.327 -Loop time of 0.482293 on 4 procs for 100 steps with 1912 atoms +Loop time of 0.263516 on 4 procs for 100 steps with 1912 atoms -Performance: 17.914 ns/day, 1.340 hours/ns, 207.343 timesteps/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 32.787 ns/day, 0.732 hours/ns, 379.483 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.44374 | 0.45604 | 0.46922 | 1.4 | 94.56 -Neigh | 0.0047338 | 0.0049097 | 0.0051899 | 0.2 | 1.02 -Comm | 0.0054841 | 0.019044 | 0.031472 | 6.9 | 3.95 -Output | 0.00012755 | 0.00013644 | 0.00015831 | 0.0 | 0.03 -Modify | 0.0011139 | 0.0011852 | 0.0012643 | 0.2 | 0.25 -Other | | 0.0009753 | | | 0.20 +Pair | 0.24401 | 0.2486 | 0.25128 | 0.6 | 94.34 +Neigh | 0.0046518 | 0.0047416 | 0.0048261 | 0.1 | 1.80 +Comm | 0.0054512 | 0.0082117 | 0.012793 | 3.1 | 3.12 +Output | 0.00010562 | 0.00013095 | 0.00019932 | 0.0 | 0.05 +Modify | 0.0010016 | 0.0010275 | 0.0010595 | 0.1 | 0.39 +Other | | 0.0008045 | | | 0.31 Nlocal: 478 ave 492 max 465 min Histogram: 2 0 0 0 0 0 0 0 1 1 @@ -139,7 +141,7 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 @@ -154,54 +156,54 @@ Step Temp E_pair E_mol TotEng Press Volume 600 304.23435 -8158.0946 0 -8121.8366 583.93595 20328.848 700 296.44479 -8149.7914 0 -8114.4618 1985.4155 20421.046 800 307.75738 -8139.1649 0 -8102.487 4319.078 20513.183 - 900 304.61422 -8126.9246 0 -8090.6214 6654.0963 20640.213 - 1000 300 -8113.8464 0 -8078.0931 7760.1239 20768.465 - 1100 300.17873 -8097.7469 0 -8061.9722 8438.126 20874.731 - 1200 306.01441 -8083.3367 0 -8046.8665 10835.586 20994.432 - 1300 300 -8067.022 0 -8031.2686 11216.067 21126.348 - 1400 300 -8053.223 0 -8017.4697 10570.206 21253.378 - 1500 300 -8043.4849 0 -8007.7315 11360.766 21375.523 - 1600 300 -8034.621 0 -7998.8676 11371.584 21498.889 - 1700 300 -8028.6783 0 -7992.925 9596.524 21613.705 - 1800 300 -8033.0818 0 -7997.3285 8767.2651 21743.178 - 1900 303.18912 -8035.194 0 -7999.0606 8059.9558 21859.215 - 2000 300 -8025.0327 0 -7989.2794 9305.7521 21980.138 - 2100 300 -8041.4626 0 -8005.7092 6623.8789 22108.39 - 2200 300 -8040.3133 0 -8004.5599 7512.9368 22225.648 - 2300 300 -8055.6567 0 -8019.9033 8281.354 22344.128 - 2400 304.05922 -8050.289 0 -8014.0518 11964.826 22476.044 - 2500 305.75646 -8037.0481 0 -8000.6087 16594.032 22595.746 - 2600 307.71105 -8031.2253 0 -7994.5529 18381.745 22708.119 - 2700 307.397 -8026.5338 0 -7989.8988 13944.653 22829.042 - 2800 309.3455 -8020.2305 0 -7983.3634 7037.4046 22954.851 - 2900 301.2859 -8010.4731 0 -7974.5665 3843.8972 23072.109 - 3000 303.29908 -8000.0395 0 -7963.8929 364.90172 23207.69 -Loop time of 14.5278 on 4 procs for 3000 steps with 1912 atoms + 900 304.61422 -8126.9246 0 -8090.6214 6654.0962 20640.213 + 1000 300 -8113.8464 0 -8078.0931 7760.1237 20768.465 + 1100 300.17873 -8097.7469 0 -8061.9722 8438.1259 20874.731 + 1200 306.01441 -8083.3367 0 -8046.8665 10835.588 20994.432 + 1300 300 -8067.022 0 -8031.2687 11216.061 21126.348 + 1400 300 -8053.223 0 -8017.4696 10570.211 21253.378 + 1500 300 -8043.4848 0 -8007.7314 11360.762 21375.523 + 1600 300 -8034.6201 0 -7998.8667 11371.282 21498.889 + 1700 300 -8028.6797 0 -7992.9263 9596.8454 21613.705 + 1800 300 -8033.0802 0 -7997.3268 8767.8176 21743.178 + 1900 303.23288 -8035.1821 0 -7999.0434 8065.2879 21859.215 + 2000 300 -8025.0795 0 -7989.3262 9321.8098 21980.138 + 2100 300 -8041.3621 0 -8005.6088 6674.2623 22108.39 + 2200 300 -8039.7261 0 -8003.9727 7548.8847 22225.648 + 2300 300 -8052.3497 0 -8016.5964 8936.4935 22352.678 + 2400 300 -8049.395 0 -8013.6416 12633.909 22476.044 + 2500 308.48099 -8039.9448 0 -8003.1807 16242.081 22593.303 + 2600 300 -8032.1953 0 -7996.442 18386.669 22722.776 + 2700 303.49413 -8027.6563 0 -7991.4865 14415.581 22829.042 + 2800 304.13476 -8017.3394 0 -7981.0933 7457.1076 22953.629 + 2900 300 -8010.3658 0 -7974.6124 2815.5155 23074.552 + 3000 309.49253 -7999.74 0 -7962.8553 756.7511 23210.132 +Loop time of 8.57528 on 4 procs for 3000 steps with 1912 atoms -Performance: 17.842 ns/day, 1.345 hours/ns, 206.500 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 30.226 ns/day, 0.794 hours/ns, 349.843 timesteps/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 13.872 | 13.929 | 13.998 | 1.4 | 95.88 -Neigh | 0.20891 | 0.21114 | 0.21272 | 0.3 | 1.45 -Comm | 0.25364 | 0.32377 | 0.37706 | 8.9 | 2.23 -Output | 0.0011427 | 0.0012097 | 0.0013931 | 0.3 | 0.01 -Modify | 0.033687 | 0.033991 | 0.034694 | 0.2 | 0.23 -Other | | 0.02871 | | | 0.20 +Pair | 8.0046 | 8.0451 | 8.1075 | 1.5 | 93.82 +Neigh | 0.20142 | 0.20699 | 0.21469 | 1.2 | 2.41 +Comm | 0.1972 | 0.2657 | 0.312 | 9.3 | 3.10 +Output | 0.00087762 | 0.0015897 | 0.0037148 | 3.1 | 0.02 +Modify | 0.030267 | 0.031624 | 0.032929 | 0.7 | 0.37 +Other | | 0.02427 | | | 0.28 -Nlocal: 478 ave 509 max 445 min +Nlocal: 478 ave 507 max 447 min Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 804 ave 845 max 759 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Neighs: 5827 ave 6177 max 5496 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -FullNghs: 11654 ave 12330 max 11039 min -Histogram: 1 0 0 1 0 1 0 0 0 1 +Nghost: 799.75 ave 842 max 763 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 5806.5 ave 6097 max 5507 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +FullNghs: 11613 ave 12159 max 11039 min +Histogram: 1 0 1 0 0 0 0 1 0 1 -Total # of neighbors = 46616 -Ave neighs/atom = 24.3808 -Neighbor list builds = 223 +Total # of neighbors = 46452 +Ave neighs/atom = 24.295 +Neighbor list builds = 224 Dangerous builds = 0 -Total wall time: 0:00:15 +Total wall time: 0:00:08 diff --git a/examples/meam/log.19May17.meamc.g++.1 b/examples/meam/log.27Nov18.meamc.g++.1 similarity index 83% rename from examples/meam/log.19May17.meamc.g++.1 rename to examples/meam/log.27Nov18.meamc.g++.1 index 4aa1f7bcc3..2fcd24077b 100644 --- a/examples/meam/log.19May17.meamc.g++.1 +++ b/examples/meam/log.27Nov18.meamc.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Test of MEAM potential for SiC system @@ -64,20 +64,20 @@ Step Temp E_pair E_mol TotEng Press 80 2126.0903 -671.43755 0 -636.53557 -97475.832 90 2065.7549 -670.4349 0 -636.52338 -95858.836 100 2051.4553 -670.20799 0 -636.53122 -107068.89 -Loop time of 0.0778153 on 1 procs for 100 steps with 128 atoms +Loop time of 0.0780671 on 1 procs for 100 steps with 128 atoms -Performance: 111.032 ns/day, 0.216 hours/ns, 1285.094 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 110.674 ns/day, 0.217 hours/ns, 1280.950 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.073801 | 0.073801 | 0.073801 | 0.0 | 94.84 -Neigh | 0.0029731 | 0.0029731 | 0.0029731 | 0.0 | 3.82 -Comm | 0.00047708 | 0.00047708 | 0.00047708 | 0.0 | 0.61 -Output | 0.00015664 | 0.00015664 | 0.00015664 | 0.0 | 0.20 -Modify | 0.00025702 | 0.00025702 | 0.00025702 | 0.0 | 0.33 -Other | | 0.0001504 | | | 0.19 +Pair | 0.074199 | 0.074199 | 0.074199 | 0.0 | 95.05 +Neigh | 0.0026548 | 0.0026548 | 0.0026548 | 0.0 | 3.40 +Comm | 0.00068045 | 0.00068045 | 0.00068045 | 0.0 | 0.87 +Output | 0.00020933 | 0.00020933 | 0.00020933 | 0.0 | 0.27 +Modify | 0.00021243 | 0.00021243 | 0.00021243 | 0.0 | 0.27 +Other | | 0.0001111 | | | 0.14 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/meam/log.19May17.meamc.g++.4 b/examples/meam/log.27Nov18.meamc.g++.4 similarity index 83% rename from examples/meam/log.19May17.meamc.g++.4 rename to examples/meam/log.27Nov18.meamc.g++.4 index 3701fb80d8..b97f18b25c 100644 --- a/examples/meam/log.19May17.meamc.g++.4 +++ b/examples/meam/log.27Nov18.meamc.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Test of MEAM potential for SiC system @@ -64,20 +64,20 @@ Step Temp E_pair E_mol TotEng Press 80 2126.0903 -671.43755 0 -636.53557 -97475.832 90 2065.7549 -670.4349 0 -636.52338 -95858.836 100 2051.4553 -670.20799 0 -636.53122 -107068.89 -Loop time of 0.037066 on 4 procs for 100 steps with 128 atoms +Loop time of 0.0317811 on 4 procs for 100 steps with 128 atoms -Performance: 233.097 ns/day, 0.103 hours/ns, 2697.887 timesteps/s -97.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 271.859 ns/day, 0.088 hours/ns, 3146.521 timesteps/s +96.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.029985 | 0.031596 | 0.033021 | 0.8 | 85.24 -Neigh | 0.0007906 | 0.00085384 | 0.00088596 | 0.0 | 2.30 -Comm | 0.0025654 | 0.0040313 | 0.0057514 | 2.2 | 10.88 -Output | 0.00027013 | 0.00029153 | 0.00033426 | 0.0 | 0.79 -Modify | 9.5367e-05 | 0.00010639 | 0.00012016 | 0.0 | 0.29 -Other | | 0.0001866 | | | 0.50 +Pair | 0.027395 | 0.027726 | 0.028188 | 0.2 | 87.24 +Neigh | 0.00073433 | 0.00077397 | 0.00084281 | 0.0 | 2.44 +Comm | 0.0024559 | 0.0028514 | 0.003237 | 0.5 | 8.97 +Output | 0.00018358 | 0.00020361 | 0.00026178 | 0.0 | 0.64 +Modify | 8.44e-05 | 9.0241e-05 | 9.5129e-05 | 0.0 | 0.28 +Other | | 0.0001359 | | | 0.43 Nlocal: 32 ave 36 max 30 min Histogram: 1 2 0 0 0 0 0 0 0 1 diff --git a/examples/meam/log.19May17.meamc.shear.g++.1 b/examples/meam/log.27Nov18.meamc.shear.g++.1 similarity index 61% rename from examples/meam/log.19May17.meamc.shear.g++.1 rename to examples/meam/log.27Nov18.meamc.shear.g++.1 index 5eb06592d8..4aff7d2399 100644 --- a/examples/meam/log.19May17.meamc.shear.g++.1 +++ b/examples/meam/log.27Nov18.meamc.shear.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation @@ -17,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000667334 secs pair_style meam/c pair_coeff * * library.meam Ni4 Ni.meam Ni4 Ni4 Ni4 @@ -63,7 +64,7 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 @@ -91,20 +92,20 @@ Step Temp E_pair E_mol TotEng Press Volume 50 300 -8149.7654 0 -8096.1353 10633.139 19684.382 75 304.80657 -8163.4557 0 -8108.9665 7045.4555 19759.745 100 300 -8173.6884 0 -8120.0584 5952.5197 19886.589 -Loop time of 1.46986 on 1 procs for 100 steps with 1912 atoms +Loop time of 1.24344 on 1 procs for 100 steps with 1912 atoms -Performance: 5.878 ns/day, 4.083 hours/ns, 68.034 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 6.948 ns/day, 3.454 hours/ns, 80.422 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.445 | 1.445 | 1.445 | 0.0 | 98.31 -Neigh | 0.018564 | 0.018564 | 0.018564 | 0.0 | 1.26 -Comm | 0.0012956 | 0.0012956 | 0.0012956 | 0.0 | 0.09 -Output | 0.00012612 | 0.00012612 | 0.00012612 | 0.0 | 0.01 -Modify | 0.0038197 | 0.0038197 | 0.0038197 | 0.0 | 0.26 -Other | | 0.001095 | | | 0.07 +Pair | 1.2191 | 1.2191 | 1.2191 | 0.0 | 98.05 +Neigh | 0.017918 | 0.017918 | 0.017918 | 0.0 | 1.44 +Comm | 0.0016081 | 0.0016081 | 0.0016081 | 0.0 | 0.13 +Output | 0.00010872 | 0.00010872 | 0.00010872 | 0.0 | 0.01 +Modify | 0.0035257 | 0.0035257 | 0.0035257 | 0.0 | 0.28 +Other | | 0.001145 | | | 0.09 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -139,7 +140,7 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 @@ -155,53 +156,53 @@ Step Temp E_pair E_mol TotEng Press Volume 700 300 -8148.1314 0 -8112.3781 3507.1949 20435.297 800 300 -8139.1805 0 -8103.4272 3628.5908 20509.519 900 305.03217 -8126.7741 0 -8090.421 5313.7881 20638.992 - 1000 303.7648 -8112.1574 0 -8075.9554 7433.3181 20767.243 - 1100 302.39719 -8096.1399 0 -8060.1009 9681.7685 20888.167 - 1200 304.04919 -8080.7022 0 -8044.4663 11621.974 21011.532 - 1300 303.56395 -8062.0984 0 -8025.9203 11410.793 21125.127 - 1400 309.92338 -8046.0008 0 -8009.0648 12408.158 21246.05 - 1500 300 -8034.7094 0 -7998.956 14845.312 21363.308 - 1600 300 -8028.4585 0 -7992.7051 15120.908 21489.117 - 1700 308.23904 -8015.9618 0 -7979.2265 14714.73 21612.483 - 1800 300 -8013.5458 0 -7977.7924 11955.065 21737.07 - 1900 300 -8012.2984 0 -7976.545 6667.1353 21854.329 - 2000 300 -8025.6019 0 -7989.8485 2006.6545 21981.359 - 2100 300 -8027.6823 0 -7991.9289 16.47633 22109.611 - 2200 300 -8029.6905 0 -7993.9372 -603.98293 22224.427 - 2300 300 -8033.2663 0 -7997.513 -464.68645 22351.457 - 2400 300 -8040.6863 0 -8004.9329 -640.54641 22467.494 - 2500 300 -8037.0332 0 -8001.2799 1504.2444 22587.196 - 2600 300 -8036.0909 0 -8000.3375 4190.2052 22708.119 - 2700 308.97892 -8028.5269 0 -7991.7035 5755.7418 22832.706 - 2800 305.27189 -8023.8286 0 -7987.4469 2611.7551 22962.179 - 2900 301.94251 -8017.4523 0 -7981.4675 358.11928 23078.216 - 3000 305.67682 -8009.853 0 -7973.4231 -2345.487 23197.918 -Loop time of 48.351 on 1 procs for 3000 steps with 1912 atoms + 1000 303.7648 -8112.1574 0 -8075.9554 7433.3182 20767.243 + 1100 302.39719 -8096.1399 0 -8060.1009 9681.7687 20888.167 + 1200 304.0492 -8080.7022 0 -8044.4663 11621.974 21011.532 + 1300 303.56399 -8062.0984 0 -8025.9203 11410.792 21125.127 + 1400 309.92342 -8046.0009 0 -8009.0649 12408.16 21246.05 + 1500 300 -8034.7095 0 -7998.9562 14845.279 21363.308 + 1600 300 -8028.4584 0 -7992.7051 15120.946 21489.117 + 1700 308.24098 -8015.9617 0 -7979.2262 14714.985 21612.483 + 1800 300 -8013.5445 0 -7977.7911 11955.097 21737.07 + 1900 300 -8012.2934 0 -7976.5401 6668.5401 21854.329 + 2000 300 -8025.5575 0 -7989.8041 1991.1401 21981.359 + 2100 300 -8027.6564 0 -7991.9031 15.137723 22109.611 + 2200 300 -8029.7898 0 -7994.0364 -583.82386 22225.648 + 2300 300 -8033.278 0 -7997.5247 -657.14777 22344.128 + 2400 300 -8040.6711 0 -8004.9178 -826.53135 22473.601 + 2500 300 -8037.7007 0 -8001.9473 547.23901 22594.524 + 2600 306.30094 -8036.6072 0 -8000.1029 2870.9529 22721.555 + 2700 309.00737 -8033.9906 0 -7997.1638 4440.4698 22832.706 + 2800 300 -8030.7816 0 -7995.0282 1519.7066 22956.072 + 2900 307.99687 -8026.5913 0 -7989.8849 -1143.0985 23089.209 + 3000 300 -8021.6011 0 -7985.8477 -4089.7884 23199.139 +Loop time of 40.4198 on 1 procs for 3000 steps with 1912 atoms -Performance: 5.361 ns/day, 4.477 hours/ns, 62.046 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 6.413 ns/day, 3.743 hours/ns, 74.221 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 47.356 | 47.356 | 47.356 | 0.0 | 97.94 -Neigh | 0.79977 | 0.79977 | 0.79977 | 0.0 | 1.65 -Comm | 0.043133 | 0.043133 | 0.043133 | 0.0 | 0.09 -Output | 0.0011899 | 0.0011899 | 0.0011899 | 0.0 | 0.00 -Modify | 0.11648 | 0.11648 | 0.11648 | 0.0 | 0.24 -Other | | 0.03404 | | | 0.07 +Pair | 39.44 | 39.44 | 39.44 | 0.0 | 97.58 +Neigh | 0.78059 | 0.78059 | 0.78059 | 0.0 | 1.93 +Comm | 0.0537 | 0.0537 | 0.0537 | 0.0 | 0.13 +Output | 0.00090766 | 0.00090766 | 0.00090766 | 0.0 | 0.00 +Modify | 0.1089 | 0.1089 | 0.1089 | 0.0 | 0.27 +Other | | 0.03561 | | | 0.09 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1662 ave 1662 max 1662 min +Nghost: 1658 ave 1658 max 1658 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 23143 ave 23143 max 23143 min +Neighs: 23146 ave 23146 max 23146 min Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 46286 ave 46286 max 46286 min +FullNghs: 46292 ave 46292 max 46292 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 46286 -Ave neighs/atom = 24.2082 -Neighbor list builds = 220 +Total # of neighbors = 46292 +Ave neighs/atom = 24.2113 +Neighbor list builds = 222 Dangerous builds = 0 -Total wall time: 0:00:49 +Total wall time: 0:00:41 diff --git a/examples/meam/log.19May17.meamc.shear.g++.4 b/examples/meam/log.27Nov18.meamc.shear.g++.4 similarity index 61% rename from examples/meam/log.19May17.meamc.shear.g++.4 rename to examples/meam/log.27Nov18.meamc.shear.g++.4 index 136459a44a..702e13f554 100644 --- a/examples/meam/log.19May17.meamc.shear.g++.4 +++ b/examples/meam/log.27Nov18.meamc.shear.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (19 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation @@ -17,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000405788 secs pair_style meam/c pair_coeff * * library.meam Ni4 Ni.meam Ni4 Ni4 Ni4 @@ -63,7 +64,7 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 @@ -91,20 +92,20 @@ Step Temp E_pair E_mol TotEng Press Volume 50 300 -8150.0685 0 -8096.4384 10317.406 19685.743 75 307.76021 -8164.6669 0 -8109.6496 6289.7123 19757.814 100 300 -8176.5141 0 -8122.884 4162.2548 19873.327 -Loop time of 0.435874 on 4 procs for 100 steps with 1912 atoms +Loop time of 0.360204 on 4 procs for 100 steps with 1912 atoms -Performance: 19.822 ns/day, 1.211 hours/ns, 229.424 timesteps/s -98.8% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 23.986 ns/day, 1.001 hours/ns, 277.621 timesteps/s +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.4092 | 0.41563 | 0.42184 | 0.7 | 95.35 -Neigh | 0.0048575 | 0.004932 | 0.0049984 | 0.1 | 1.13 -Comm | 0.0069079 | 0.013151 | 0.019513 | 4.2 | 3.02 -Output | 0.00012398 | 0.00013405 | 0.00015688 | 0.0 | 0.03 -Modify | 0.0011275 | 0.0011509 | 0.0011735 | 0.1 | 0.26 -Other | | 0.0008795 | | | 0.20 +Pair | 0.33423 | 0.33889 | 0.34311 | 0.7 | 94.08 +Neigh | 0.0045969 | 0.004706 | 0.0048506 | 0.1 | 1.31 +Comm | 0.010211 | 0.014394 | 0.019267 | 3.4 | 4.00 +Output | 0.00011277 | 0.00017589 | 0.00036049 | 0.0 | 0.05 +Modify | 0.0010302 | 0.0010442 | 0.0010614 | 0.0 | 0.29 +Other | | 0.0009908 | | | 0.28 Nlocal: 478 ave 492 max 465 min Histogram: 2 0 0 0 0 0 0 0 1 1 @@ -139,7 +140,7 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:489) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 @@ -156,52 +157,52 @@ Step Temp E_pair E_mol TotEng Press Volume 800 307.88628 -8139.1709 0 -8102.4776 4311.4142 20513.183 900 303.37209 -8126.9382 0 -8090.7829 6712.7316 20640.213 1000 300 -8113.7973 0 -8078.044 7630.2594 20750.143 - 1100 300.07815 -8098.1383 0 -8062.3756 8423.7063 20879.616 + 1100 300.07815 -8098.1383 0 -8062.3756 8423.7061 20879.616 1200 300 -8083.3163 0 -8047.563 10772.917 21000.539 - 1300 300 -8066.6741 0 -8030.9208 10834.336 21128.791 - 1400 300 -8050.8799 0 -8015.1265 10842.382 21257.043 - 1500 300 -8040.3206 0 -8004.5673 11852.589 21362.087 - 1600 300 -8033.2471 0 -7997.4937 11298.745 21492.782 - 1700 300 -8030.6375 0 -7994.8842 10850.43 21610.04 - 1800 300 -8035.1631 0 -7999.4097 9985.6107 21734.628 - 1900 308.56562 -8040.1954 0 -8003.4213 9865.7107 21859.215 - 2000 300 -8030.1651 0 -7994.4117 11817.502 21980.138 - 2100 300 -8031.6147 0 -7995.8613 12791.357 22101.061 - 2200 300 -8033.7793 0 -7998.0259 13823.043 22234.198 - 2300 300 -8040.5964 0 -8004.8431 16204.549 22350.236 - 2400 309.42867 -8045.9414 0 -8009.0644 18506.386 22465.051 - 2500 300 -8054.2629 0 -8018.5095 20099.612 22593.303 - 2600 300 -8054.9562 0 -8019.2028 20036.318 22721.555 - 2700 300 -8051.4788 0 -8015.7254 16993.437 22844.921 - 2800 300 -8050.6908 0 -8014.9374 9048.5896 22964.622 - 2900 309.90783 -8044.3096 0 -8007.3754 5017.0198 23080.659 - 3000 300 -8035.8165 0 -8000.0632 2084.8999 23207.69 -Loop time of 13.4901 on 4 procs for 3000 steps with 1912 atoms + 1300 300 -8066.6742 0 -8030.9208 10834.324 21128.791 + 1400 300 -8050.8799 0 -8015.1265 10842.369 21257.043 + 1500 300 -8040.3207 0 -8004.5673 11852.581 21362.087 + 1600 300 -8033.2463 0 -7997.493 11298.907 21492.782 + 1700 300 -8030.6375 0 -7994.8841 10850.25 21610.04 + 1800 300 -8035.1637 0 -7999.4104 9985.4993 21734.628 + 1900 308.60398 -8040.1957 0 -8003.417 9865.6907 21859.215 + 2000 300 -8030.1598 0 -7994.4064 11817.286 21980.138 + 2100 300 -8031.581 0 -7995.8276 12782.733 22101.061 + 2200 300 -8033.981 0 -7998.2276 13853.626 22220.762 + 2300 300 -8040.0125 0 -8004.2591 16329.98 22350.236 + 2400 308.4546 -8046.1468 0 -8009.3859 18839.675 22467.494 + 2500 300 -8051.022 0 -8015.2686 19977.441 22598.189 + 2600 300 -8049.9219 0 -8014.1686 20982.796 22720.333 + 2700 300 -8047.5121 0 -8011.7587 17432.464 22833.928 + 2800 300 -8047.4546 0 -8011.7013 10733.925 22967.065 + 2900 303.07072 -8039.2015 0 -8003.0822 6498.2787 23079.438 + 3000 300 -8033.2092 0 -7997.4558 2413.3858 23210.132 +Loop time of 11.5481 on 4 procs for 3000 steps with 1912 atoms -Performance: 19.214 ns/day, 1.249 hours/ns, 222.386 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 22.445 ns/day, 1.069 hours/ns, 259.782 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 12.851 | 12.919 | 12.945 | 1.1 | 95.76 -Neigh | 0.20449 | 0.20777 | 0.21169 | 0.6 | 1.54 -Comm | 0.27479 | 0.30264 | 0.36667 | 6.8 | 2.24 -Output | 0.0010171 | 0.0010971 | 0.0012388 | 0.3 | 0.01 -Modify | 0.033248 | 0.033878 | 0.034567 | 0.3 | 0.25 -Other | | 0.02594 | | | 0.19 +Pair | 10.828 | 10.919 | 11.062 | 2.7 | 94.55 +Neigh | 0.19748 | 0.20277 | 0.20818 | 0.9 | 1.76 +Comm | 0.21506 | 0.36705 | 0.46467 | 15.6 | 3.18 +Output | 0.0008328 | 0.0015925 | 0.0038536 | 3.3 | 0.01 +Modify | 0.030773 | 0.031848 | 0.033535 | 0.6 | 0.28 +Other | | 0.02569 | | | 0.22 -Nlocal: 478 ave 506 max 450 min +Nlocal: 478 ave 499 max 457 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 790.5 ave 822 max 751 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 5829.5 ave 6014 max 5672 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -FullNghs: 11659 ave 12027 max 11320 min -Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 796.5 ave 832 max 755 min +Histogram: 1 1 0 0 0 0 0 0 0 2 +Neighs: 5807.25 ave 5840 max 5774 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +FullNghs: 11614.5 ave 11687 max 11558 min +Histogram: 1 1 0 0 0 1 0 0 0 1 -Total # of neighbors = 46636 -Ave neighs/atom = 24.3912 -Neighbor list builds = 220 +Total # of neighbors = 46458 +Ave neighs/atom = 24.2981 +Neighbor list builds = 218 Dangerous builds = 0 -Total wall time: 0:00:13 +Total wall time: 0:00:11 From 074a9663cba7c727eebe0e237ac6e620451a5a15 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 14:05:28 -0500 Subject: [PATCH 229/273] update log files for melt and micelle example --- ...ct16.melt.g++.1 => log.27Nov18.melt.g++.1} | 33 ++- ...ct16.melt.g++.4 => log.27Nov18.melt.g++.4} | 33 ++- examples/micelle/log.27Nov18.micelle.g++.1 | 255 ++++++++++++++++++ examples/micelle/log.27Nov18.micelle.g++.4 | 255 ++++++++++++++++++ examples/micelle/log.5Oct16.micelle.g++.1 | 244 ----------------- examples/micelle/log.5Oct16.micelle.g++.4 | 244 ----------------- 6 files changed, 550 insertions(+), 514 deletions(-) rename examples/melt/{log.5Oct16.melt.g++.1 => log.27Nov18.melt.g++.1} (66%) rename examples/melt/{log.5Oct16.melt.g++.4 => log.27Nov18.melt.g++.4} (66%) create mode 100644 examples/micelle/log.27Nov18.micelle.g++.1 create mode 100644 examples/micelle/log.27Nov18.micelle.g++.4 delete mode 100644 examples/micelle/log.5Oct16.micelle.g++.1 delete mode 100644 examples/micelle/log.5Oct16.micelle.g++.4 diff --git a/examples/melt/log.5Oct16.melt.g++.1 b/examples/melt/log.27Nov18.melt.g++.1 similarity index 66% rename from examples/melt/log.5Oct16.melt.g++.1 rename to examples/melt/log.27Nov18.melt.g++.1 index b4aefdceb4..69b39e6011 100644 --- a/examples/melt/log.5Oct16.melt.g++.1 +++ b/examples/melt/log.27Nov18.melt.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000645638 secs mass 1 1.0 velocity all create 3.0 87287 @@ -35,13 +37,18 @@ fix 1 all nve thermo 50 run 250 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.19271 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 @@ -49,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 -Loop time of 0.724365 on 1 procs for 250 steps with 4000 atoms +Loop time of 0.729809 on 1 procs for 250 steps with 4000 atoms -Performance: 149096.106 tau/day, 345.130 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 147983.915 tau/day, 342.555 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.61654 | 0.61654 | 0.61654 | 0.0 | 85.11 -Neigh | 0.081313 | 0.081313 | 0.081313 | 0.0 | 11.23 -Comm | 0.010941 | 0.010941 | 0.010941 | 0.0 | 1.51 -Output | 9.4891e-05 | 9.4891e-05 | 9.4891e-05 | 0.0 | 0.01 -Modify | 0.012401 | 0.012401 | 0.012401 | 0.0 | 1.71 -Other | | 0.003077 | | | 0.42 +Pair | 0.60661 | 0.60661 | 0.60661 | 0.0 | 83.12 +Neigh | 0.092198 | 0.092198 | 0.092198 | 0.0 | 12.63 +Comm | 0.013581 | 0.013581 | 0.013581 | 0.0 | 1.86 +Output | 0.0001452 | 0.0001452 | 0.0001452 | 0.0 | 0.02 +Modify | 0.014395 | 0.014395 | 0.014395 | 0.0 | 1.97 +Other | | 0.002878 | | | 0.39 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/melt/log.5Oct16.melt.g++.4 b/examples/melt/log.27Nov18.melt.g++.4 similarity index 66% rename from examples/melt/log.5Oct16.melt.g++.4 rename to examples/melt/log.27Nov18.melt.g++.4 index 0335725187..927895b1cd 100644 --- a/examples/melt/log.5Oct16.melt.g++.4 +++ b/examples/melt/log.27Nov18.melt.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.00041604 secs mass 1 1.0 velocity all create 3.0 87287 @@ -35,13 +37,18 @@ fix 1 all nve thermo 50 run 250 Neighbor list info ... - 1 neighbor list requests update every 20 steps, delay 0 steps, check no max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.10344 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 @@ -49,20 +56,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 -Loop time of 0.210997 on 4 procs for 250 steps with 4000 atoms +Loop time of 0.223329 on 4 procs for 250 steps with 4000 atoms -Performance: 511855.365 tau/day, 1184.850 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 483592.231 tau/day, 1119.426 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.15475 | 0.16099 | 0.1682 | 1.2 | 76.30 -Neigh | 0.020829 | 0.021108 | 0.021522 | 0.2 | 10.00 -Comm | 0.01674 | 0.024412 | 0.030987 | 3.3 | 11.57 -Output | 0.00011587 | 0.0001238 | 0.00013185 | 0.1 | 0.06 -Modify | 0.0031242 | 0.0031361 | 0.0031476 | 0.0 | 1.49 -Other | | 0.001227 | | | 0.58 +Pair | 0.15881 | 0.16314 | 0.16859 | 0.9 | 73.05 +Neigh | 0.02472 | 0.025218 | 0.025828 | 0.3 | 11.29 +Comm | 0.025185 | 0.030091 | 0.034351 | 1.9 | 13.47 +Output | 0.00015163 | 0.00019169 | 0.00030899 | 0.0 | 0.09 +Modify | 0.0037532 | 0.0038366 | 0.0040054 | 0.2 | 1.72 +Other | | 0.00085 | | | 0.38 Nlocal: 1000 ave 1010 max 982 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/micelle/log.27Nov18.micelle.g++.1 b/examples/micelle/log.27Nov18.micelle.g++.1 new file mode 100644 index 0000000000..30a965e041 --- /dev/null +++ b/examples/micelle/log.27Nov18.micelle.g++.1 @@ -0,0 +1,255 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 + 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 + 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 + 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 + 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 + 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 + 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 + 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 + 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 + 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 + 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 + 600 0.45 0.58193041 0.088386617 1.119942 5.131481 + 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 + 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 + 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 + 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 + 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 + 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 + 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 + 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 +Loop time of 0.167265 on 1 procs for 1000 steps with 1200 atoms + +Performance: 2582728.958 tau/day, 5978.539 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.096171 | 0.096171 | 0.096171 | 0.0 | 57.50 +Bond | 0.006212 | 0.006212 | 0.006212 | 0.0 | 3.71 +Neigh | 0.024826 | 0.024826 | 0.024826 | 0.0 | 14.84 +Comm | 0.0047672 | 0.0047672 | 0.0047672 | 0.0 | 2.85 +Output | 0.00029063 | 0.00029063 | 0.00029063 | 0.0 | 0.17 +Modify | 0.028771 | 0.028771 | 0.028771 | 0.0 | 17.20 +Other | | 0.006227 | | | 3.72 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 195 ave 195 max 195 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3136 ave 3136 max 3136 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3136 +Ave neighs/atom = 2.61333 +Ave special neighs/atom = 0.5 +Neighbor list builds = 92 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 1000 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +run 60000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.024 | 4.024 | 4.024 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 + 1000 0.45 -1.9727655 0.058608715 -1.4645318 1.9982298 + 2000 0.46465361 -1.9897467 0.067008449 -1.4584719 1.5873463 + 3000 0.46175071 -2.0129279 0.057865385 -1.4936966 1.41269 + 4000 0.44386154 -2.0280304 0.067167835 -1.5173709 1.4022093 + 5000 0.46127582 -2.0556041 0.068318674 -1.526394 1.1416711 + 6000 0.45354052 -2.0463246 0.05461954 -1.5385425 1.1650258 + 7000 0.44082313 -2.040263 0.060218047 -1.5395891 1.3258681 + 8000 0.44353466 -2.0423792 0.061769402 -1.5374447 1.2696989 + 9000 0.46192977 -2.0761348 0.064999109 -1.5495908 0.9205826 + 10000 0.45278646 -2.0589872 0.059623919 -1.5469542 1.075581 + 11000 0.45583355 -2.0661957 0.058197558 -1.5525445 1.127643 + 12000 0.45881198 -2.0921508 0.066937896 -1.5667833 0.98383574 + 13000 0.45339481 -2.079088 0.06292782 -1.5631432 1.0188637 + 14000 0.43601312 -2.0624084 0.057999616 -1.568759 1.1452177 + 15000 0.45941503 -2.0746606 0.062523373 -1.553105 0.86928343 + 16000 0.45 -2.0743162 0.05517924 -1.569512 0.86849848 + 17000 0.45603004 -2.0657683 0.058711872 -1.5514064 0.95544551 + 18000 0.45320383 -2.1009711 0.060716634 -1.5874283 0.8343521 + 19000 0.44072983 -2.0846408 0.062893297 -1.581385 0.90776246 + 20000 0.44452441 -2.0921415 0.060341571 -1.587646 0.98180005 + 21000 0.45964557 -2.0837047 0.054459432 -1.5699827 1.0213779 + 22000 0.46351849 -2.1053613 0.058392027 -1.5838371 0.81579487 + 23000 0.45576065 -2.1001888 0.057646538 -1.5871614 0.76090085 + 24000 0.44671746 -2.0848717 0.058192801 -1.5803337 0.77003809 + 25000 0.44371239 -2.0870872 0.054804981 -1.5889396 0.92295746 + 26000 0.45381188 -2.097021 0.057195346 -1.586392 0.7743058 + 27000 0.46158533 -2.1071056 0.061289644 -1.5846153 0.78981802 + 28000 0.46534671 -2.1056151 0.054934755 -1.5857214 0.80778664 + 29000 0.4505804 -2.0949318 0.065503451 -1.5792234 0.78274755 + 30000 0.45730883 -2.1029161 0.063461968 -1.5825264 0.82507857 + 31000 0.4620071 -2.1124989 0.059980378 -1.5908964 0.78583986 + 32000 0.46934619 -2.1107818 0.056442616 -1.5853842 0.70535653 + 33000 0.45800203 -2.1062502 0.054317859 -1.594312 0.726293 + 34000 0.44634295 -2.110401 0.057764968 -1.606665 0.85401059 + 35000 0.4431929 -2.1274759 0.062048133 -1.6226042 0.64243758 + 36000 0.46049645 -2.1300979 0.068463634 -1.6015216 0.57252544 + 37000 0.45366344 -2.0977407 0.053788554 -1.5906668 0.78046879 + 38000 0.44155077 -2.1166674 0.056888683 -1.6185959 0.53429042 + 39000 0.45631012 -2.096949 0.04860872 -1.5924104 0.86494908 + 40000 0.44684402 -2.1229137 0.067190397 -1.6092516 0.65110818 + 41000 0.4479377 -2.1105264 0.059375259 -1.6035867 0.79092862 + 42000 0.46143191 -2.1174539 0.057418393 -1.5989882 0.69762908 + 43000 0.4356786 -2.085826 0.056534028 -1.5939764 0.89541946 + 44000 0.45806826 -2.126423 0.060905733 -1.6078307 0.66389027 + 45000 0.44343688 -2.1116384 0.065870114 -1.602701 0.83947585 + 46000 0.43844672 -2.1096265 0.064158652 -1.6073865 0.77278902 + 47000 0.45794928 -2.1142786 0.058919562 -1.5977914 0.62611933 + 48000 0.45412335 -2.1106058 0.059153304 -1.5977076 0.66190677 + 49000 0.45927883 -2.1197656 0.068354598 -1.5925149 0.56008845 + 50000 0.44117285 -2.1020783 0.064763249 -1.5965099 0.85935147 + 51000 0.45325398 -2.1125154 0.062295387 -1.5973438 0.80951782 + 52000 0.43896579 -2.1039004 0.057475908 -1.6078245 0.84753768 + 53000 0.45180671 -2.1092446 0.063528598 -1.5942857 0.67065038 + 54000 0.4554341 -2.1185135 0.059603337 -1.6038556 0.76399618 + 55000 0.43861159 -2.0986406 0.057733879 -1.6026606 0.77334084 + 56000 0.45522991 -2.1207166 0.063287543 -1.6025785 0.78669598 + 57000 0.46125513 -2.1150202 0.06026261 -1.5938868 0.78148646 + 58000 0.45236938 -2.1088894 0.062678374 -1.5942186 0.75643518 + 59000 0.43927269 -2.1274165 0.055355076 -1.6331548 0.63495311 + 60000 0.45331102 -2.1336193 0.051244399 -1.6294416 0.56706921 +Loop time of 13.9361 on 1 procs for 60000 steps with 1200 atoms + +Performance: 1859917.639 tau/day, 4305.365 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 9.2211 | 9.2211 | 9.2211 | 0.0 | 66.17 +Bond | 0.33763 | 0.33763 | 0.33763 | 0.0 | 2.42 +Neigh | 2.3772 | 2.3772 | 2.3772 | 0.0 | 17.06 +Comm | 0.37693 | 0.37693 | 0.37693 | 0.0 | 2.70 +Output | 0.0011795 | 0.0011795 | 0.0011795 | 0.0 | 0.01 +Modify | 1.2727 | 1.2727 | 1.2727 | 0.0 | 9.13 +Other | | 0.3493 | | | 2.51 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 405 ave 405 max 405 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9565 ave 9565 max 9565 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9565 +Ave neighs/atom = 7.97083 +Ave special neighs/atom = 0.5 +Neighbor list builds = 4876 +Dangerous builds = 0 +Total wall time: 0:00:14 diff --git a/examples/micelle/log.27Nov18.micelle.g++.4 b/examples/micelle/log.27Nov18.micelle.g++.4 new file mode 100644 index 0000000000..c9509df4b2 --- /dev/null +++ b/examples/micelle/log.27Nov18.micelle.g++.4 @@ -0,0 +1,255 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 + 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 + 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 + 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 + 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 + 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 + 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 + 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 + 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 + 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 + 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 + 600 0.45 0.58193041 0.088386617 1.119942 5.131481 + 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 + 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 + 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 + 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 + 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 + 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 + 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 + 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 +Loop time of 0.0641922 on 4 procs for 1000 steps with 1200 atoms + +Performance: 6729792.131 tau/day, 15578.223 timesteps/s +90.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.020663 | 0.021445 | 0.022477 | 0.5 | 33.41 +Bond | 0.0014422 | 0.0015128 | 0.001569 | 0.1 | 2.36 +Neigh | 0.0067129 | 0.0067645 | 0.0068202 | 0.1 | 10.54 +Comm | 0.018454 | 0.019275 | 0.020386 | 0.5 | 30.03 +Output | 0.00038171 | 0.00040019 | 0.00044632 | 0.0 | 0.62 +Modify | 0.010561 | 0.010904 | 0.011309 | 0.3 | 16.99 +Other | | 0.003891 | | | 6.06 + +Nlocal: 300 ave 305 max 292 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 100.25 ave 108 max 93 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Neighs: 784 ave 815 max 739 min +Histogram: 1 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 3136 +Ave neighs/atom = 2.61333 +Ave special neighs/atom = 0.5 +Neighbor list builds = 92 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 1000 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +run 60000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.001 | 4.032 | 4.124 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 + 1000 0.45 -1.9727661 0.05860859 -1.4645325 1.9982402 + 2000 0.45146247 -1.9766043 0.059408886 -1.4661092 1.7398826 + 3000 0.43338517 -2.0028125 0.059884381 -1.5099041 1.4716488 + 4000 0.46674519 -2.0200954 0.066548679 -1.4871905 1.2506693 + 5000 0.45 -2.0207125 0.055926205 -1.5151613 1.3047457 + 6000 0.45447759 -2.0585234 0.068004883 -1.5364197 1.1859762 + 7000 0.43183018 -2.0170545 0.060800296 -1.5247839 1.3074223 + 8000 0.46657547 -2.053224 0.063224367 -1.523813 1.1785643 + 9000 0.45 -2.0691221 0.054959029 -1.564538 1.1833657 + 10000 0.4428252 -2.0473987 0.054306905 -1.5506356 1.181794 + 11000 0.45407036 -2.0746151 0.065849667 -1.5550734 1.1008545 + 12000 0.46061944 -2.0580809 0.063129643 -1.5347156 1.0206491 + 13000 0.45159068 -2.0640832 0.060059758 -1.5528091 1.0813494 + 14000 0.44141594 -2.0467255 0.062785088 -1.5428923 1.1465772 + 15000 0.454361 -2.0908595 0.057471037 -1.5794061 0.84297781 + 16000 0.44061091 -2.0521452 0.064644196 -1.5472573 1.1478647 + 17000 0.45118383 -2.081348 0.058660999 -1.5718791 1.0101404 + 18000 0.44664866 -2.0845745 0.060435731 -1.5778623 0.96142277 + 19000 0.45515339 -2.0914006 0.062174016 -1.5744525 0.87623323 + 20000 0.45624408 -2.0837697 0.059263054 -1.5686428 0.92810644 + 21000 0.46791657 -2.1062007 0.067355929 -1.5713181 0.88318793 + 22000 0.43907391 -2.1005271 0.065885144 -1.5959339 0.77211644 + 23000 0.43967354 -2.0723459 0.057613471 -1.5754253 1.0371548 + 24000 0.45716384 -2.0987126 0.055157377 -1.5867723 0.89670061 + 25000 0.45828285 -2.1041616 0.057736138 -1.5885245 0.79952286 + 26000 0.45 -2.0743463 0.072455519 -1.5522658 0.88260204 + 27000 0.46581599 -2.0804974 0.058113258 -1.5569564 0.93053891 + 28000 0.46904194 -2.0920124 0.059748792 -1.5636125 0.79359618 + 29000 0.46093196 -2.118556 0.063942334 -1.5940659 0.67707604 + 30000 0.45733724 -2.1197827 0.066939064 -1.5958875 0.66886075 + 31000 0.44580762 -2.0977175 0.056969121 -1.5953123 0.81042562 + 32000 0.44403029 -2.1032264 0.063465127 -1.596101 0.71796412 + 33000 0.45834072 -2.0934132 0.066035391 -1.569419 0.77873998 + 34000 0.44981563 -2.0910902 0.07138738 -1.5702621 0.75679805 + 35000 0.45383392 -2.0926654 0.067553478 -1.5716562 0.9064517 + 36000 0.44447198 -2.1107114 0.062718917 -1.6038909 0.8538349 + 37000 0.45838527 -2.1166464 0.062442606 -1.5962005 0.7300635 + 38000 0.45014075 -2.1096258 0.059293718 -1.6005665 0.73988246 + 39000 0.44377026 -2.080309 0.063545781 -1.5733628 0.99775641 + 40000 0.44577324 -2.1134607 0.065271179 -1.6027878 0.64113168 + 41000 0.45 -2.0937983 0.060881377 -1.5832919 0.78849829 + 42000 0.46866695 -2.1142283 0.056417605 -1.5895343 0.73788436 + 43000 0.43211727 -2.0819893 0.061463358 -1.5887688 0.95853724 + 44000 0.44138397 -2.0921314 0.059643895 -1.5914713 0.89486208 + 45000 0.45 -2.117209 0.054804331 -1.6127797 0.78564885 + 46000 0.44285245 -2.1090975 0.057629006 -1.6089851 0.64549424 + 47000 0.45537009 -2.1164296 0.068582324 -1.5928567 0.73629413 + 48000 0.45046732 -2.1006362 0.057249591 -1.5932947 0.74317593 + 49000 0.45425966 -2.1191703 0.064247719 -1.6010414 0.70962368 + 50000 0.45506149 -2.1184671 0.064911797 -1.5988731 0.69958156 + 51000 0.46047417 -2.1019719 0.058468259 -1.5834132 0.87219271 + 52000 0.43808317 -2.092294 0.057280941 -1.597295 0.84156893 + 53000 0.45012337 -2.1175234 0.064002667 -1.6037725 0.64562439 + 54000 0.43854679 -2.1236444 0.061316257 -1.6241468 0.72478117 + 55000 0.46382438 -2.1016563 0.060724666 -1.5774938 0.83311209 + 56000 0.44951533 -2.0946157 0.055075217 -1.5903998 0.90066109 + 57000 0.45937401 -2.0983442 0.061558996 -1.577794 0.58606161 + 58000 0.446669 -2.1146838 0.062385166 -1.6060019 0.73443388 + 59000 0.43847747 -2.1197461 0.060460257 -1.6211738 0.7230937 + 60000 0.45294215 -2.1258513 0.061895006 -1.6113915 0.70722168 +Loop time of 4.56226 on 4 procs for 60000 steps with 1200 atoms + +Performance: 5681397.232 tau/day, 13151.382 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.2114 | 2.2527 | 2.3592 | 4.1 | 49.38 +Bond | 0.083713 | 0.09234 | 0.10244 | 2.3 | 2.02 +Neigh | 0.72491 | 0.7277 | 0.72957 | 0.2 | 15.95 +Comm | 0.79464 | 0.90036 | 0.94957 | 6.5 | 19.74 +Output | 0.0014119 | 0.0024976 | 0.0057502 | 3.8 | 0.05 +Modify | 0.33757 | 0.35202 | 0.36946 | 2.1 | 7.72 +Other | | 0.2346 | | | 5.14 + +Nlocal: 300 ave 306 max 289 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Nghost: 227.25 ave 250 max 216 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Neighs: 2373.25 ave 2489 max 2283 min +Histogram: 1 1 0 0 0 1 0 0 0 1 + +Total # of neighbors = 9493 +Ave neighs/atom = 7.91083 +Ave special neighs/atom = 0.5 +Neighbor list builds = 4888 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/micelle/log.5Oct16.micelle.g++.1 b/examples/micelle/log.5Oct16.micelle.g++.1 deleted file mode 100644 index 5dfc652d68..0000000000 --- a/examples/micelle/log.5Oct16.micelle.g++.1 +++ /dev/null @@ -1,244 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 51 51 1 -Memory usage per processor = 3.45296 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.192637 on 1 procs for 1000 steps with 1200 atoms - -Performance: 2242560.228 tau/day, 5191.112 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.13348 | 0.13348 | 0.13348 | 0.0 | 69.29 -Bond | 0.0066328 | 0.0066328 | 0.0066328 | 0.0 | 3.44 -Neigh | 0.023894 | 0.023894 | 0.023894 | 0.0 | 12.40 -Comm | 0.0032849 | 0.0032849 | 0.0032849 | 0.0 | 1.71 -Output | 0.00019765 | 0.00019765 | 0.00019765 | 0.0 | 0.10 -Modify | 0.020029 | 0.020029 | 0.020029 | 0.0 | 10.40 -Other | | 0.005115 | | | 2.66 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 195 ave 195 max 195 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3136 ave 3136 max 3136 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -run 60000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 26 26 1 -Memory usage per processor = 3.45296 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 - 1000 0.45 -1.9727655 0.058608718 -1.4645318 1.9982299 - 2000 0.4661092 -1.9963233 0.067084121 -1.4635184 1.5676107 - 3000 0.44946688 -2.0126501 0.070702998 -1.4928548 1.5636132 - 4000 0.45269674 -1.9944702 0.05825464 -1.4838961 1.6015127 - 5000 0.46281924 -2.0302807 0.058318349 -1.5095288 1.3929421 - 6000 0.45409991 -2.0339156 0.061724414 -1.5184697 1.1978692 - 7000 0.44058968 -2.0436374 0.060141133 -1.5432738 1.1877802 - 8000 0.4429781 -2.0508103 0.061300632 -1.5469007 1.1825472 - 9000 0.44909024 -2.0620769 0.063430248 -1.5499306 1.1841529 - 10000 0.44709728 -2.0337047 0.059176633 -1.5278033 1.1906481 - 11000 0.46222813 -2.0666276 0.053626157 -1.5511585 0.99322264 - 12000 0.45722371 -2.0527602 0.062728903 -1.5331886 1.1135813 - 13000 0.44844353 -2.0672473 0.07057216 -1.5486053 0.9416127 - 14000 0.44211202 -2.0804052 0.056164487 -1.5824971 0.99700319 - 15000 0.45659943 -2.0711771 0.059428792 -1.5555294 1.1123211 - 16000 0.45113626 -2.0895625 0.057848795 -1.5809534 1.0015991 - 17000 0.44423013 -2.0840859 0.06718595 -1.57304 0.92034012 - 18000 0.45279338 -2.0644167 0.058541719 -1.5534589 1.1560585 - 19000 0.44673847 -2.0729637 0.061474462 -1.565123 0.99627228 - 20000 0.44428193 -2.0937135 0.066588799 -1.583213 0.86154418 - 21000 0.45902797 -2.0821041 0.057286828 -1.5661718 0.76853595 - 22000 0.45733559 -2.0962718 0.064103239 -1.5752141 0.90967955 - 23000 0.44617227 -2.070896 0.061562573 -1.5635329 0.92864876 - 24000 0.45569898 -2.0843503 0.061015469 -1.5680156 0.90170833 - 25000 0.45952666 -2.0892064 0.058901296 -1.5711614 0.9123274 - 26000 0.44773853 -2.0896169 0.065994021 -1.5762575 0.8887526 - 27000 0.43541542 -2.0893237 0.060387783 -1.5938834 0.97604018 - 28000 0.44025187 -2.0937721 0.066174764 -1.5877124 0.98394478 - 29000 0.44695847 -2.0966733 0.064980967 -1.5851064 0.78278706 - 30000 0.44848319 -2.1017012 0.053308469 -1.6002833 0.85185298 - 31000 0.45215181 -2.0927324 0.057875178 -1.5830822 0.77068692 - 32000 0.44586981 -2.0962193 0.056970051 -1.593751 0.85672441 - 33000 0.43591379 -2.1069871 0.064934652 -1.6065019 0.87081371 - 34000 0.44153683 -2.0967535 0.061537811 -1.5940468 0.75497708 - 35000 0.45482946 -2.1045277 0.060250612 -1.5898266 0.80290163 - 36000 0.45 -2.1154856 0.052206018 -1.6136546 0.67520748 - 37000 0.44973679 -2.1076496 0.067371347 -1.5909163 0.83319072 - 38000 0.45549751 -2.1044983 0.061863351 -1.587517 0.6786145 - 39000 0.43927254 -2.1159446 0.057855173 -1.6191829 0.66483475 - 40000 0.43711657 -2.0941837 0.063039594 -1.5943918 0.90680301 - 41000 0.43992749 -2.0931285 0.063772204 -1.5897954 0.7538478 - 42000 0.44374588 -2.1029745 0.061963499 -1.5976349 0.74793466 - 43000 0.45 -2.0916744 0.055058096 -1.5869913 0.86069235 - 44000 0.45381626 -2.0984483 0.059995477 -1.5850147 0.74948091 - 45000 0.44547409 -2.1217483 0.058753101 -1.6178924 0.57348898 - 46000 0.43283033 -2.1054695 0.059343099 -1.6136567 0.77490901 - 47000 0.44310217 -2.1215687 0.066613901 -1.6122219 0.73014542 - 48000 0.44611257 -2.118313 0.05944897 -1.6131232 0.59077782 - 49000 0.44114725 -2.0911126 0.065639368 -1.5846936 0.78309201 - 50000 0.44572124 -2.0892024 0.065540869 -1.5783117 0.87647821 - 51000 0.4460699 -2.1142274 0.061090043 -1.6074391 0.61721581 - 52000 0.44799203 -2.1122931 0.056821256 -1.6078531 0.70734576 - 53000 0.44819437 -2.1098838 0.058117987 -1.6039449 0.71349136 - 54000 0.45 -2.1384776 0.051012047 -1.6378405 0.4810217 - 55000 0.43931842 -2.1053055 0.061275315 -1.6050778 0.58268948 - 56000 0.44126963 -2.1133637 0.057474037 -1.6149877 0.68063945 - 57000 0.45823746 -2.1205329 0.065224217 -1.5974531 0.73788456 - 58000 0.437031 -2.0998724 0.051717885 -1.6114877 0.86071379 - 59000 0.45070454 -2.1115874 0.053721754 -1.6075367 0.62358834 - 60000 0.44181643 -2.1243164 0.060489492 -1.6223786 0.6992428 -Loop time of 13.6136 on 1 procs for 60000 steps with 1200 atoms - -Performance: 1903978.372 tau/day, 4407.357 timesteps/s -99.5% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 9.3684 | 9.3684 | 9.3684 | 0.0 | 68.82 -Bond | 0.39461 | 0.39461 | 0.39461 | 0.0 | 2.90 -Neigh | 2.211 | 2.211 | 2.211 | 0.0 | 16.24 -Comm | 0.2552 | 0.2552 | 0.2552 | 0.0 | 1.87 -Output | 0.00065112 | 0.00065112 | 0.00065112 | 0.0 | 0.00 -Modify | 1.0819 | 1.0819 | 1.0819 | 0.0 | 7.95 -Other | | 0.3019 | | | 2.22 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 417 ave 417 max 417 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9495 ave 9495 max 9495 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9495 -Ave neighs/atom = 7.9125 -Ave special neighs/atom = 0.5 -Neighbor list builds = 4885 -Dangerous builds = 0 -Total wall time: 0:00:13 diff --git a/examples/micelle/log.5Oct16.micelle.g++.4 b/examples/micelle/log.5Oct16.micelle.g++.4 deleted file mode 100644 index 960489aad0..0000000000 --- a/examples/micelle/log.5Oct16.micelle.g++.4 +++ /dev/null @@ -1,244 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 51 51 1 -Memory usage per processor = 3.55365 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.0670803 on 4 procs for 1000 steps with 1200 atoms - -Performance: 6440046.660 tau/day, 14907.515 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.033971 | 0.034628 | 0.036162 | 0.5 | 51.62 -Bond | 0.001687 | 0.0017596 | 0.0018852 | 0.2 | 2.62 -Neigh | 0.0068789 | 0.0069902 | 0.0070932 | 0.1 | 10.42 -Comm | 0.011152 | 0.012883 | 0.013872 | 0.9 | 19.20 -Output | 0.00035501 | 0.00038034 | 0.00044274 | 0.2 | 0.57 -Modify | 0.0065997 | 0.0067009 | 0.0068605 | 0.1 | 9.99 -Other | | 0.003738 | | | 5.57 - -Nlocal: 300 ave 305 max 292 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 100.25 ave 108 max 93 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Neighs: 784 ave 815 max 739 min -Histogram: 1 0 0 0 0 0 1 1 0 1 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -run 60000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 26 26 1 -Memory usage per processor = 3.55365 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 - 1000 0.45 -1.9727663 0.058608449 -1.4645328 1.9982389 - 2000 0.45428051 -1.9704547 0.062434911 -1.4541178 1.7134222 - 3000 0.46748648 -2.0088544 0.065086237 -1.4766712 1.4648627 - 4000 0.45608936 -2.032563 0.057148422 -1.5197053 1.3833681 - 5000 0.46134038 -2.0250107 0.061983009 -1.5020718 1.3378201 - 6000 0.45254634 -2.0414745 0.071656389 -1.5176489 1.2670697 - 7000 0.46380932 -2.0463598 0.060057501 -1.5228795 1.1029258 - 8000 0.46495917 -2.0570216 0.058074076 -1.5343758 1.1187483 - 9000 0.45771237 -2.0510911 0.061803881 -1.5319563 1.1540073 - 10000 0.45 -2.0568306 0.06114562 -1.54606 1.128504 - 11000 0.43977142 -2.0442503 0.061128391 -1.543717 1.2268919 - 12000 0.4412548 -2.051046 0.065150223 -1.5450087 1.0681597 - 13000 0.46384147 -2.0657072 0.064678941 -1.5375734 0.99078604 - 14000 0.43330137 -2.0693058 0.06542588 -1.5709397 1.0252118 - 15000 0.44825078 -2.078972 0.059800283 -1.5712944 0.76305383 - 16000 0.45607271 -2.085101 0.058347214 -1.5710611 0.99903698 - 17000 0.45329523 -2.0865426 0.057674526 -1.5759505 0.90245709 - 18000 0.46719329 -2.076619 0.062698678 -1.5471164 0.95433376 - 19000 0.45253889 -2.0741652 0.06154596 -1.5604575 1.0606446 - 20000 0.43708811 -2.1005493 0.063453064 -1.6003723 0.65980174 - 21000 0.43630563 -2.0780131 0.05595505 -1.586116 0.86690426 - 22000 0.44050783 -2.0766368 0.057980992 -1.578515 0.99638367 - 23000 0.44657992 -2.0731942 0.058890194 -1.5680963 0.92620975 - 24000 0.45645869 -2.0957688 0.065464986 -1.5742255 0.88631971 - 25000 0.46007071 -2.0928226 0.058133397 -1.5750019 0.75468418 - 26000 0.46316546 -2.0945456 0.064110354 -1.5676557 0.84437166 - 27000 0.44780223 -2.0966995 0.063284428 -1.585986 0.89645525 - 28000 0.43945645 -2.0909433 0.062357411 -1.5894957 0.92336874 - 29000 0.44332217 -2.0885003 0.063832997 -1.5817146 0.86508766 - 30000 0.44865024 -2.0899642 0.057319345 -1.5843685 0.76862889 - 31000 0.45702135 -2.0941006 0.059669304 -1.5777908 0.76171188 - 32000 0.46630168 -2.1066612 0.051622888 -1.5891252 0.72214981 - 33000 0.44966822 -2.1086408 0.061298737 -1.5980486 0.7056562 - 34000 0.45599464 -2.11216 0.045835595 -1.6107098 0.75827582 - 35000 0.44021366 -2.1082791 0.066290667 -1.6021416 0.85079438 - 36000 0.46531913 -2.1228506 0.054779097 -1.6031402 0.60391389 - 37000 0.44777064 -2.1193684 0.062074675 -1.6098962 0.68654583 - 38000 0.46608897 -2.1243843 0.052889984 -1.6057938 0.6517974 - 39000 0.44921432 -2.1050268 0.059790015 -1.5963968 0.74248261 - 40000 0.44407222 -2.0930539 0.055687841 -1.5936639 0.69821332 - 41000 0.4377755 -2.0929451 0.056403441 -1.599131 0.90040574 - 42000 0.46403029 -2.1245032 0.058491534 -1.6023681 0.6984091 - 43000 0.45456147 -2.0966395 0.055922733 -1.5865341 0.86499812 - 44000 0.45619203 -2.1150101 0.054818604 -1.6043796 0.71197595 - 45000 0.44806278 -2.1067617 0.057539822 -1.6015324 0.7644258 - 46000 0.46326243 -2.1204997 0.060566953 -1.5970563 0.68822898 - 47000 0.43464277 -2.1257611 0.069053137 -1.6224273 0.60024032 - 48000 0.46986944 -2.1245871 0.058768355 -1.5963409 0.58191819 - 49000 0.4428734 -2.1203847 0.059089451 -1.6187909 0.60806508 - 50000 0.43813854 -2.12123 0.066218857 -1.6172377 0.42860822 - 51000 0.4514578 -2.1304644 0.057932769 -1.62145 0.62355123 - 52000 0.44155257 -2.1248047 0.062563155 -1.6210569 0.81276016 - 53000 0.4467801 -2.1254575 0.056774655 -1.6222751 0.6115287 - 54000 0.43972332 -2.1036785 0.061427338 -1.6028943 0.75225909 - 55000 0.44933771 -2.104883 0.058556755 -1.5973629 0.75480805 - 56000 0.45 -2.1212286 0.057392665 -1.614211 0.56759345 - 57000 0.43127001 -2.0978236 0.04986292 -1.61705 0.71828346 - 58000 0.43621486 -2.1097172 0.056706821 -1.617159 0.80497906 - 59000 0.44446312 -2.1103931 0.055606397 -1.610694 0.79904859 - 60000 0.43177211 -2.0985468 0.049687241 -1.6174473 0.81094066 -Loop time of 4.56204 on 4 procs for 60000 steps with 1200 atoms - -Performance: 5681665.051 tau/day, 13152.002 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.3705 | 2.4423 | 2.4948 | 2.9 | 53.54 -Bond | 0.084795 | 0.10292 | 0.11359 | 3.4 | 2.26 -Neigh | 0.63938 | 0.64418 | 0.64857 | 0.4 | 14.12 -Comm | 0.81947 | 0.8785 | 0.9618 | 5.7 | 19.26 -Output | 0.0012863 | 0.0013551 | 0.0015438 | 0.3 | 0.03 -Modify | 0.26717 | 0.27596 | 0.28816 | 1.5 | 6.05 -Other | | 0.2168 | | | 4.75 - -Nlocal: 300 ave 305 max 293 min -Histogram: 1 0 0 0 0 1 0 0 1 1 -Nghost: 211 ave 215 max 205 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Neighs: 2448.75 ave 2531 max 2414 min -Histogram: 2 1 0 0 0 0 0 0 0 1 - -Total # of neighbors = 9795 -Ave neighs/atom = 8.1625 -Ave special neighs/atom = 0.5 -Neighbor list builds = 4880 -Dangerous builds = 0 -Total wall time: 0:00:04 From cef41644604ac1c94ff753e3771e898995e1429d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 14:13:11 -0500 Subject: [PATCH 230/273] update log files for min, msst, nb3b, nemd, and obstacle examples --- ...in.box.g++.1 => log.27Nov18.min.box.g++.1} | 153 +++++++++--------- ...in.box.g++.4 => log.27Nov18.min.box.g++.4} | 151 ++++++++--------- ...5Oct16.min.g++.1 => log.27Nov18.min.g++.1} | 51 +++--- ...5Oct16.min.g++.4 => log.27Nov18.min.g++.4} | 51 +++--- ...ct16.msst.g++.1 => log.27Nov18.msst.g++.1} | 55 ++++--- ...ct16.msst.g++.4 => log.27Nov18.msst.g++.4} | 53 +++--- ...ct16.nb3b.g++.1 => log.27Nov18.nb3b.g++.1} | 90 ++++++----- ...ct16.nb3b.g++.4 => log.27Nov18.nb3b.g++.4} | 90 ++++++----- examples/nemd/log.27Nov18.nemd.g++.1 | 137 ++++++++++++++++ examples/nemd/log.27Nov18.nemd.g++.4 | 137 ++++++++++++++++ examples/nemd/log.5Oct16.nemd.g++.1 | 130 --------------- examples/nemd/log.5Oct16.nemd.g++.4 | 130 --------------- ...tacle.g++.1 => log.27Nov18.obstacle.g++.1} | 35 ++-- ...tacle.g++.4 => log.27Nov18.obstacle.g++.4} | 35 ++-- 14 files changed, 698 insertions(+), 600 deletions(-) rename examples/min/{log.5Oct16.min.box.g++.1 => log.27Nov18.min.box.g++.1} (84%) rename examples/min/{log.5Oct16.min.box.g++.4 => log.27Nov18.min.box.g++.4} (84%) rename examples/min/{log.5Oct16.min.g++.1 => log.27Nov18.min.g++.1} (73%) rename examples/min/{log.5Oct16.min.g++.4 => log.27Nov18.min.g++.4} (71%) rename examples/msst/{log.5Oct16.msst.g++.1 => log.27Nov18.msst.g++.1} (79%) rename examples/msst/{log.5Oct16.msst.g++.4 => log.27Nov18.msst.g++.4} (79%) rename examples/nb3b/{log.5Oct16.nb3b.g++.1 => log.27Nov18.nb3b.g++.1} (71%) rename examples/nb3b/{log.5Oct16.nb3b.g++.4 => log.27Nov18.nb3b.g++.4} (71%) create mode 100644 examples/nemd/log.27Nov18.nemd.g++.1 create mode 100644 examples/nemd/log.27Nov18.nemd.g++.4 delete mode 100644 examples/nemd/log.5Oct16.nemd.g++.1 delete mode 100644 examples/nemd/log.5Oct16.nemd.g++.4 rename examples/obstacle/{log.5Oct16.obstacle.g++.1 => log.27Nov18.obstacle.g++.1} (82%) rename examples/obstacle/{log.5Oct16.obstacle.g++.4 => log.27Nov18.obstacle.g++.4} (82%) diff --git a/examples/min/log.5Oct16.min.box.g++.1 b/examples/min/log.27Nov18.min.box.g++.1 similarity index 84% rename from examples/min/log.5Oct16.min.box.g++.1 rename to examples/min/log.27Nov18.min.box.g++.1 index 29294567ae..7e2151c6cb 100644 --- a/examples/min/log.5Oct16.min.box.g++.1 +++ b/examples/min/log.27Nov18.min.box.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d Lennard-Jones melt and subsequent energy minimization, # followed by box relaxation to a target stress state # @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 -0.153919) to (30.7838 30.7838 0.153919) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 800 atoms + Time spent = 0.000453234 secs mass 1 1.0 velocity all create 5.0 87287 loop geom @@ -40,13 +42,18 @@ thermo 100 run 1000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 22 22 1 -Memory usage per processor = 2.47843 Mbytes + binsize = 1.4, bins = 22 22 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.056 | 3.056 | 3.056 Mbytes Step Temp E_pair E_mol TotEng Press 0 5 -2.461717 0 2.532033 5.0190509 100 3.2788864 -0.74311698 0 2.5316708 15.912832 @@ -59,20 +66,20 @@ Step Temp E_pair E_mol TotEng Press 800 3.3016275 -0.76569171 0 2.5318087 15.639335 900 3.4639203 -0.92788002 0 2.5317104 14.765912 1000 3.3256788 -0.79078181 0 2.5307399 15.599298 -Loop time of 0.202646 on 1 procs for 1000 steps with 800 atoms +Loop time of 0.210142 on 1 procs for 1000 steps with 800 atoms -Performance: 2131796.155 tau/day, 4934.713 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 2055749.118 tau/day, 4758.679 timesteps/s +98.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.12926 | 0.12926 | 0.12926 | 0.0 | 63.79 -Neigh | 0.051169 | 0.051169 | 0.051169 | 0.0 | 25.25 -Comm | 0.0044918 | 0.0044918 | 0.0044918 | 0.0 | 2.22 -Output | 9.3222e-05 | 9.3222e-05 | 9.3222e-05 | 0.0 | 0.05 -Modify | 0.011879 | 0.011879 | 0.011879 | 0.0 | 5.86 -Other | | 0.005755 | | | 2.84 +Pair | 0.12951 | 0.12951 | 0.12951 | 0.0 | 61.63 +Neigh | 0.053642 | 0.053642 | 0.053642 | 0.0 | 25.53 +Comm | 0.0062521 | 0.0062521 | 0.0062521 | 0.0 | 2.98 +Output | 0.0001297 | 0.0001297 | 0.0001297 | 0.0 | 0.06 +Modify | 0.0142 | 0.0142 | 0.0142 | 0.0 | 6.76 +Other | | 0.006405 | | | 3.05 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -98,7 +105,7 @@ thermo 50 # atoms only minimize 1.0e-6 0.001 1000 10000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp E_pair E_mol TotEng Press 1000 0 -0.79078181 0 -0.79078181 12.79527 1050 0 -2.8361415 0 -2.8361415 -1.1950285 @@ -111,9 +118,9 @@ Step Temp E_pair E_mol TotEng Press 1400 0 -2.9131297 0 -2.9131297 -1.0962069 1450 0 -2.9167506 0 -2.9167506 -1.0259809 1475 0 -2.9169436 0 -2.9169436 -1.0125744 -Loop time of 0.232023 on 1 procs for 475 steps with 800 atoms +Loop time of 0.234897 on 1 procs for 475 steps with 800 atoms -100.0% CPU use with 1 MPI tasks x no OpenMP threads +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -127,12 +134,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.18865 | 0.18865 | 0.18865 | 0.0 | 81.30 -Neigh | 0.020881 | 0.020881 | 0.020881 | 0.0 | 9.00 -Comm | 0.0028429 | 0.0028429 | 0.0028429 | 0.0 | 1.23 -Output | 7.0095e-05 | 7.0095e-05 | 7.0095e-05 | 0.0 | 0.03 -Modify | 0.0020018 | 0.0020018 | 0.0020018 | 0.0 | 0.86 -Other | | 0.01758 | | | 7.58 +Pair | 0.18533 | 0.18533 | 0.18533 | 0.0 | 78.90 +Neigh | 0.02206 | 0.02206 | 0.02206 | 0.0 | 9.39 +Comm | 0.0041955 | 0.0041955 | 0.0041955 | 0.0 | 1.79 +Output | 0.000108 | 0.000108 | 0.000108 | 0.0 | 0.05 +Modify | 0.002362 | 0.002362 | 0.002362 | 0.0 | 1.01 +Other | | 0.02084 | | | 8.87 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -156,7 +163,7 @@ thermo_style custom step temp pe pxx pyy pxy f_3 v_emin # anisotropic volume relaxation to hydrostatic target minimize 0.0 10.0e0 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1475 0 -2.9169436 -1.0208231 -1.0043256 0.042048233 0 -2.9169436 1500 0 -2.9112018 1.4420862 1.4721681 0.065929095 -0.087730988 -2.9989327 @@ -164,9 +171,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1600 0 -2.924265 1.4545702 1.5281333 0.053590255 -0.12032598 -3.044591 1650 0 -2.9289538 1.4528452 1.5692678 0.038096542 -0.12516914 -3.054123 1699 0 -2.9334511 1.4447667 1.5587557 0.044510608 -0.12731783 -3.060769 -Loop time of 0.109303 on 1 procs for 224 steps with 800 atoms +Loop time of 0.112146 on 1 procs for 224 steps with 800 atoms -99.7% CPU use with 1 MPI tasks x no OpenMP threads +97.8% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -180,12 +187,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.086675 | 0.086675 | 0.086675 | 0.0 | 79.30 -Neigh | 0.0040114 | 0.0040114 | 0.0040114 | 0.0 | 3.67 -Comm | 0.0010419 | 0.0010419 | 0.0010419 | 0.0 | 0.95 -Output | 9.4891e-05 | 9.4891e-05 | 9.4891e-05 | 0.0 | 0.09 -Modify | 0.00085473 | 0.00085473 | 0.00085473 | 0.0 | 0.78 -Other | | 0.01662 | | | 15.21 +Pair | 0.084376 | 0.084376 | 0.084376 | 0.0 | 75.24 +Neigh | 0.0042746 | 0.0042746 | 0.0042746 | 0.0 | 3.81 +Comm | 0.0015385 | 0.0015385 | 0.0015385 | 0.0 | 1.37 +Output | 0.0001235 | 0.0001235 | 0.0001235 | 0.0 | 0.11 +Modify | 0.0011208 | 0.0011208 | 0.0011208 | 0.0 | 1.00 +Other | | 0.02071 | | | 18.47 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -202,13 +209,13 @@ Dangerous builds = 0 fix 3 all box/relax aniso 1.5 vmax 1.0e-3 minimize 0.0 10.0 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1699 0 -2.9334511 1.4447667 1.5587557 0.044510608 0 -2.9334511 1700 0 -2.9335996 1.4982915 1.4969508 0.044657372 9.09619e-05 -2.9335086 -Loop time of 0.000785828 on 1 procs for 1 steps with 800 atoms +Loop time of 0.000793934 on 1 procs for 1 steps with 800 atoms -127.3% CPU use with 1 MPI tasks x no OpenMP threads +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -222,12 +229,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00063896 | 0.00063896 | 0.00063896 | 0.0 | 81.31 +Pair | 0.00061846 | 0.00061846 | 0.00061846 | 0.0 | 77.90 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 5.9605e-06 | 5.9605e-06 | 5.9605e-06 | 0.0 | 0.76 +Comm | 1.0014e-05 | 1.0014e-05 | 1.0014e-05 | 0.0 | 1.26 Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 6.1989e-06 | 6.1989e-06 | 6.1989e-06 | 0.0 | 0.79 -Other | | 0.0001347 | | | 17.14 +Modify | 7.6294e-06 | 7.6294e-06 | 7.6294e-06 | 0.0 | 0.96 +Other | | 0.0001578 | | | 19.88 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -246,7 +253,7 @@ Dangerous builds = 0 fix 3 all box/relax x 1.0 y 2.0 vmax 1.0e-3 minimize 0.0 10.0 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1700 0 -2.9335996 1.4982915 1.4969508 0.044657372 -3.5527137e-17 -2.9335996 1750 0 -2.9306696 0.95043712 1.984164 0.04474671 -0.014282691 -2.9449523 @@ -254,9 +261,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1850 0 -2.935585 0.98224846 1.9920507 0.047038767 -0.021070874 -2.9566559 1900 0 -2.9380757 0.96811097 1.9677247 0.068809483 -0.024274947 -2.9623506 1913 0 -2.9391305 0.98238419 1.9782761 0.074400364 -0.025108208 -2.9642387 -Loop time of 0.0971339 on 1 procs for 213 steps with 800 atoms +Loop time of 0.0997889 on 1 procs for 213 steps with 800 atoms -100.9% CPU use with 1 MPI tasks x no OpenMP threads +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -270,12 +277,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.076124 | 0.076124 | 0.076124 | 0.0 | 78.37 -Neigh | 0.0027554 | 0.0027554 | 0.0027554 | 0.0 | 2.84 -Comm | 0.00085568 | 0.00085568 | 0.00085568 | 0.0 | 0.88 -Output | 0.00012589 | 0.00012589 | 0.00012589 | 0.0 | 0.13 -Modify | 0.00077486 | 0.00077486 | 0.00077486 | 0.0 | 0.80 -Other | | 0.0165 | | | 16.98 +Pair | 0.074305 | 0.074305 | 0.074305 | 0.0 | 74.46 +Neigh | 0.0028846 | 0.0028846 | 0.0028846 | 0.0 | 2.89 +Comm | 0.0012925 | 0.0012925 | 0.0012925 | 0.0 | 1.30 +Output | 0.00016117 | 0.00016117 | 0.00016117 | 0.0 | 0.16 +Modify | 0.00090647 | 0.00090647 | 0.00090647 | 0.0 | 0.91 +Other | | 0.02024 | | | 20.28 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -290,7 +297,7 @@ Neighbor list builds = 11 Dangerous builds = 0 minimize 0.0 1.0 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1913 0 -2.9391305 0.98238419 1.9782761 0.074400364 7.1054274e-17 -2.9391305 1950 0 -2.9397224 0.98880561 2.0105792 0.10042798 -0.0026601558 -2.9423825 @@ -382,9 +389,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 6250 0 -3.0378032 0.99964291 1.9971778 0.033045048 -0.037140636 -3.0749439 6300 0 -3.0377782 0.9965492 1.9980669 0.032201395 -0.037170252 -3.0749485 6314 0 -3.0377854 0.99649081 1.9975871 0.032243768 -0.037163869 -3.0749493 -Loop time of 2.27089 on 1 procs for 4401 steps with 800 atoms +Loop time of 2.33993 on 1 procs for 4401 steps with 800 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -398,12 +405,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.8251 | 1.8251 | 1.8251 | 0.0 | 80.37 -Neigh | 0.027037 | 0.027037 | 0.027037 | 0.0 | 1.19 -Comm | 0.019059 | 0.019059 | 0.019059 | 0.0 | 0.84 -Output | 0.0027676 | 0.0027676 | 0.0027676 | 0.0 | 0.12 -Modify | 0.018233 | 0.018233 | 0.018233 | 0.0 | 0.80 -Other | | 0.3786 | | | 16.67 +Pair | 1.7909 | 1.7909 | 1.7909 | 0.0 | 76.54 +Neigh | 0.028373 | 0.028373 | 0.028373 | 0.0 | 1.21 +Comm | 0.029514 | 0.029514 | 0.029514 | 0.0 | 1.26 +Output | 0.0037448 | 0.0037448 | 0.0037448 | 0.0 | 0.16 +Modify | 0.021746 | 0.021746 | 0.021746 | 0.0 | 0.93 +Other | | 0.4657 | | | 19.90 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -418,7 +425,7 @@ Neighbor list builds = 109 Dangerous builds = 0 minimize 0.0 1.0e-2 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 6314 0 -3.0377854 0.99649081 1.9975871 0.032243768 3.5527137e-17 -3.0377854 6350 0 -3.0377426 0.9995618 1.9997582 0.032364722 -4.5395813e-05 -3.037788 @@ -454,9 +461,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 7850 0 -3.0378352 1.0000397 2.0000524 0.033753896 -7.5318252e-05 -3.0379105 7900 0 -3.0378354 1.0000486 2.0000488 0.033742064 -7.5113089e-05 -3.0379105 7904 0 -3.0378356 1.0000321 2.0000425 0.033740786 -7.491864e-05 -3.0379105 -Loop time of 0.831561 on 1 procs for 1590 steps with 800 atoms +Loop time of 0.85351 on 1 procs for 1590 steps with 800 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -470,12 +477,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.67727 | 0.67727 | 0.67727 | 0.0 | 81.45 -Neigh | 0.0004921 | 0.0004921 | 0.0004921 | 0.0 | 0.06 -Comm | 0.0065284 | 0.0065284 | 0.0065284 | 0.0 | 0.79 -Output | 0.0010114 | 0.0010114 | 0.0010114 | 0.0 | 0.12 -Modify | 0.0067346 | 0.0067346 | 0.0067346 | 0.0 | 0.81 -Other | | 0.1395 | | | 16.78 +Pair | 0.66264 | 0.66264 | 0.66264 | 0.0 | 77.64 +Neigh | 0.00052071 | 0.00052071 | 0.00052071 | 0.0 | 0.06 +Comm | 0.010136 | 0.010136 | 0.010136 | 0.0 | 1.19 +Output | 0.0012524 | 0.0012524 | 0.0012524 | 0.0 | 0.15 +Modify | 0.0080862 | 0.0080862 | 0.0080862 | 0.0 | 0.95 +Other | | 0.1709 | | | 20.02 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -494,7 +501,7 @@ Dangerous builds = 0 fix 3 all box/relax x 1.0 y 2.0 vmax 1.0e-3 nreset 100 minimize 0.0 1.0e-4 10000 100000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 7904 0 -3.0378356 1.0000321 2.0000425 0.033740786 0 -3.0378356 7950 0 -3.0378364 1.000001 2.0000015 0.03373689 8.3404927e-07 -3.0378356 @@ -515,9 +522,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 8700 0 -3.0378364 1 1.9999997 0.033725586 4.9116894e-09 -3.0378364 8750 0 -3.0378364 0.99999991 2 0.033725386 7.3634181e-10 -3.0378364 8753 0 -3.0378364 1 2 0.033725385 -1.0901182e-09 -3.0378364 -Loop time of 0.445577 on 1 procs for 849 steps with 800 atoms +Loop time of 0.457836 on 1 procs for 849 steps with 800 atoms -99.9% CPU use with 1 MPI tasks x no OpenMP threads +99.2% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -531,12 +538,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.36325 | 0.36325 | 0.36325 | 0.0 | 81.52 +Pair | 0.3559 | 0.3559 | 0.3559 | 0.0 | 77.74 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0034921 | 0.0034921 | 0.0034921 | 0.0 | 0.78 -Output | 0.00052595 | 0.00052595 | 0.00052595 | 0.0 | 0.12 -Modify | 0.0036132 | 0.0036132 | 0.0036132 | 0.0 | 0.81 -Other | | 0.07469 | | | 16.76 +Comm | 0.0054362 | 0.0054362 | 0.0054362 | 0.0 | 1.19 +Output | 0.00070548 | 0.00070548 | 0.00070548 | 0.0 | 0.15 +Modify | 0.004298 | 0.004298 | 0.004298 | 0.0 | 0.94 +Other | | 0.09149 | | | 19.98 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/min/log.5Oct16.min.box.g++.4 b/examples/min/log.27Nov18.min.box.g++.4 similarity index 84% rename from examples/min/log.5Oct16.min.box.g++.4 rename to examples/min/log.27Nov18.min.box.g++.4 index 090b5ad79c..f6dacb0129 100644 --- a/examples/min/log.5Oct16.min.box.g++.4 +++ b/examples/min/log.27Nov18.min.box.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d Lennard-Jones melt and subsequent energy minimization, # followed by box relaxation to a target stress state # @@ -14,6 +15,7 @@ Created orthogonal box = (0 0 -0.153919) to (30.7838 30.7838 0.153919) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 800 atoms + Time spent = 0.000339985 secs mass 1 1.0 velocity all create 5.0 87287 loop geom @@ -40,13 +42,18 @@ thermo 100 run 1000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 22 22 1 -Memory usage per processor = 2.47676 Mbytes + binsize = 1.4, bins = 22 22 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.049 | 3.049 | 3.049 Mbytes Step Temp E_pair E_mol TotEng Press 0 5 -2.461717 0 2.532033 5.0190509 100 3.2788864 -0.74311698 0 2.5316708 15.912832 @@ -59,20 +66,20 @@ Step Temp E_pair E_mol TotEng Press 800 3.3016408 -0.76570603 0 2.5318077 15.639259 900 3.4621697 -0.92610292 0 2.5317391 14.773473 1000 3.3058424 -0.77076863 0 2.5309414 15.708171 -Loop time of 0.066087 on 4 procs for 1000 steps with 800 atoms +Loop time of 0.0739716 on 4 procs for 1000 steps with 800 atoms -Performance: 6536837.061 tau/day, 15131.567 timesteps/s -98.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 5840081.570 tau/day, 13518.707 timesteps/s +96.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.032169 | 0.032534 | 0.032995 | 0.2 | 49.23 -Neigh | 0.013092 | 0.013286 | 0.01348 | 0.1 | 20.10 -Comm | 0.011925 | 0.012799 | 0.013343 | 0.5 | 19.37 -Output | 0.00017333 | 0.00018448 | 0.00021172 | 0.1 | 0.28 -Modify | 0.0029421 | 0.0029953 | 0.0030239 | 0.1 | 4.53 -Other | | 0.004288 | | | 6.49 +Pair | 0.031443 | 0.032581 | 0.034717 | 0.7 | 44.04 +Neigh | 0.01403 | 0.014414 | 0.01483 | 0.2 | 19.49 +Comm | 0.013565 | 0.015975 | 0.01834 | 1.4 | 21.60 +Output | 0.00017476 | 0.00018531 | 0.00020695 | 0.0 | 0.25 +Modify | 0.0037742 | 0.0043355 | 0.0058382 | 1.3 | 5.86 +Other | | 0.006481 | | | 8.76 Nlocal: 200 ave 202 max 196 min Histogram: 1 0 0 0 0 0 0 0 2 1 @@ -98,7 +105,7 @@ thermo 50 # atoms only minimize 1.0e-6 0.001 1000 10000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp E_pair E_mol TotEng Press 1000 0 -0.77076863 0 -0.77076863 12.920868 1050 0 -2.8318266 0 -2.8318266 -1.1892931 @@ -107,9 +114,9 @@ Step Temp E_pair E_mol TotEng Press 1200 0 -2.8831122 0 -2.8831122 -1.1004001 1250 0 -2.8877971 0 -2.8877971 -1.0596414 1300 0 -2.8887969 0 -2.8887969 -1.0448381 -Loop time of 0.0501025 on 4 procs for 300 steps with 800 atoms +Loop time of 0.0533715 on 4 procs for 300 steps with 800 atoms -99.8% CPU use with 4 MPI tasks x no OpenMP threads +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -123,12 +130,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.030059 | 0.030357 | 0.030755 | 0.2 | 60.59 -Neigh | 0.0037379 | 0.0037849 | 0.0038264 | 0.1 | 7.55 -Comm | 0.0061991 | 0.0067289 | 0.0071735 | 0.5 | 13.43 -Output | 7.3195e-05 | 7.7724e-05 | 8.9407e-05 | 0.1 | 0.16 -Modify | 0.00036192 | 0.00037038 | 0.00037956 | 0.0 | 0.74 -Other | | 0.008784 | | | 17.53 +Pair | 0.029885 | 0.031269 | 0.033625 | 0.8 | 58.59 +Neigh | 0.0038524 | 0.0040049 | 0.0040805 | 0.1 | 7.50 +Comm | 0.0062668 | 0.0087315 | 0.010314 | 1.7 | 16.36 +Output | 7.9632e-05 | 8.3268e-05 | 9.346e-05 | 0.0 | 0.16 +Modify | 0.00043797 | 0.00044793 | 0.00045705 | 0.0 | 0.84 +Other | | 0.008835 | | | 16.55 Nlocal: 200 ave 202 max 196 min Histogram: 1 0 0 0 0 0 1 0 0 2 @@ -152,15 +159,15 @@ thermo_style custom step temp pe pxx pyy pxy f_3 v_emin # anisotropic volume relaxation to hydrostatic target minimize 0.0 10.0e0 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1300 0 -2.8887969 -0.93904343 -1.1506328 -0.0037265764 0 -2.8887969 1350 0 -2.889313 1.555657 1.4414453 -0.025585726 -0.10933729 -2.9986503 1400 0 -2.8958621 1.5320803 1.476774 0.0041557664 -0.1208966 -3.0167587 1403 0 -2.8962558 1.5290172 1.4743135 0.00471395 -0.12088872 -3.0171446 -Loop time of 0.0163901 on 4 procs for 103 steps with 800 atoms +Loop time of 0.0172202 on 4 procs for 103 steps with 800 atoms -97.6% CPU use with 4 MPI tasks x no OpenMP threads +96.4% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -174,12 +181,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0086238 | 0.0087494 | 0.0088425 | 0.1 | 53.38 -Neigh | 0.00099087 | 0.0010223 | 0.0010412 | 0.1 | 6.24 -Comm | 0.0017323 | 0.0018613 | 0.002028 | 0.3 | 11.36 -Output | 7.3195e-05 | 7.4625e-05 | 7.8917e-05 | 0.0 | 0.46 -Modify | 9.7513e-05 | 0.00010496 | 0.00011063 | 0.1 | 0.64 -Other | | 0.004578 | | | 27.93 +Pair | 0.0085471 | 0.0087811 | 0.0090215 | 0.2 | 50.99 +Neigh | 0.0010307 | 0.0011456 | 0.0013525 | 0.4 | 6.65 +Comm | 0.0017407 | 0.0020964 | 0.0024772 | 0.6 | 12.17 +Output | 7.5102e-05 | 7.695e-05 | 8.1301e-05 | 0.0 | 0.45 +Modify | 0.00012064 | 0.0001241 | 0.00012684 | 0.0 | 0.72 +Other | | 0.004996 | | | 29.01 Nlocal: 200 ave 202 max 198 min Histogram: 1 0 0 0 0 2 0 0 0 1 @@ -196,13 +203,13 @@ Dangerous builds = 0 fix 3 all box/relax aniso 1.5 vmax 1.0e-3 minimize 0.0 10.0 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1403 0 -2.8962558 1.5290172 1.4743135 0.00471395 0 -2.8962558 1404 0 -2.8963678 1.49615 1.499767 0.0037848845 9.6365079e-05 -2.8962714 -Loop time of 0.000319898 on 4 procs for 1 steps with 800 atoms +Loop time of 0.000330448 on 4 procs for 1 steps with 800 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -216,12 +223,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00016475 | 0.0001657 | 0.00016618 | 0.0 | 51.80 +Pair | 0.00016141 | 0.00016457 | 0.00016809 | 0.0 | 49.80 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 2.9802e-05 | 3.1531e-05 | 3.4094e-05 | 0.0 | 9.86 +Comm | 2.861e-05 | 3.3557e-05 | 3.7193e-05 | 0.0 | 10.16 Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 2.1458e-06 | 2.563e-06 | 3.3379e-06 | 0.0 | 0.80 -Other | | 0.0001201 | | | 37.54 +Modify | 2.1458e-06 | 2.3842e-06 | 2.6226e-06 | 0.0 | 0.72 +Other | | 0.0001299 | | | 39.32 Nlocal: 200 ave 202 max 197 min Histogram: 1 0 0 0 0 0 1 0 1 1 @@ -240,16 +247,16 @@ Dangerous builds = 0 fix 3 all box/relax x 1.0 y 2.0 vmax 1.0e-3 minimize 0.0 10.0 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1404 0 -2.8963678 1.49615 1.499767 0.0037848845 -7.1054274e-17 -2.8963678 1450 0 -2.8925305 0.94584654 2.0945709 -0.029336194 -0.016086454 -2.9086169 1500 0 -2.8975934 1.0123866 2.009477 -0.036498498 -0.01841842 -2.9160118 1550 0 -2.903576 1.0046986 1.9380791 -0.037683327 -0.020970768 -2.9245468 1592 0 -2.9061298 0.98518925 1.9835783 -0.048932212 -0.024234721 -2.9303646 -Loop time of 0.0294311 on 4 procs for 188 steps with 800 atoms +Loop time of 0.0321782 on 4 procs for 188 steps with 800 atoms -101.1% CPU use with 4 MPI tasks x no OpenMP threads +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -263,12 +270,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.016194 | 0.016255 | 0.0163 | 0.0 | 55.23 -Neigh | 0.00050688 | 0.0005179 | 0.00053 | 0.0 | 1.76 -Comm | 0.0030935 | 0.0031458 | 0.0031939 | 0.1 | 10.69 -Output | 0.00011897 | 0.00012201 | 0.00013018 | 0.0 | 0.41 -Modify | 0.00016952 | 0.0001781 | 0.00018668 | 0.0 | 0.61 -Other | | 0.009212 | | | 31.30 +Pair | 0.015791 | 0.016377 | 0.01695 | 0.3 | 50.90 +Neigh | 0.00053954 | 0.00056165 | 0.00057793 | 0.0 | 1.75 +Comm | 0.0027378 | 0.0033152 | 0.0039263 | 0.8 | 10.30 +Output | 0.00014901 | 0.00015163 | 0.00015783 | 0.0 | 0.47 +Modify | 0.00021982 | 0.00022542 | 0.0002315 | 0.0 | 0.70 +Other | | 0.01155 | | | 35.88 Nlocal: 200 ave 202 max 196 min Histogram: 1 0 0 0 0 0 0 0 2 1 @@ -283,7 +290,7 @@ Neighbor list builds = 8 Dangerous builds = 0 minimize 0.0 1.0 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 1592 0 -2.9061298 0.98518925 1.9835783 -0.048932212 3.5527137e-17 -2.9061298 1600 0 -2.9046586 1.0529014 2.0593731 -0.050860896 -0.0020973121 -2.9067559 @@ -378,9 +385,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 6050 0 -3.0313105 0.9590106 1.959899 0.10814531 -0.084790331 -3.1161008 6100 0 -3.0313244 0.9580272 1.9605104 0.10879691 -0.08493735 -3.1162617 6130 0 -3.0313384 0.95532497 1.9595324 0.10924759 -0.084945274 -3.1162837 -Loop time of 0.833589 on 4 procs for 4538 steps with 800 atoms +Loop time of 0.937381 on 4 procs for 4538 steps with 800 atoms -99.7% CPU use with 4 MPI tasks x no OpenMP threads +95.6% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -394,12 +401,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.45739 | 0.47006 | 0.47928 | 1.2 | 56.39 -Neigh | 0.006587 | 0.0068482 | 0.0069439 | 0.2 | 0.82 -Comm | 0.089155 | 0.097262 | 0.11111 | 2.7 | 11.67 -Output | 0.0035946 | 0.0036807 | 0.0039296 | 0.2 | 0.44 -Modify | 0.0051167 | 0.0053424 | 0.005434 | 0.2 | 0.64 -Other | | 0.2504 | | | 30.04 +Pair | 0.45297 | 0.47262 | 0.48939 | 2.1 | 50.42 +Neigh | 0.0071242 | 0.0072536 | 0.0073645 | 0.1 | 0.77 +Comm | 0.12672 | 0.1453 | 0.17041 | 4.8 | 15.50 +Output | 0.0040541 | 0.0063651 | 0.013254 | 5.0 | 0.68 +Modify | 0.0063808 | 0.0065207 | 0.0066283 | 0.1 | 0.70 +Other | | 0.2993 | | | 31.93 Nlocal: 200 ave 203 max 197 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -414,7 +421,7 @@ Neighbor list builds = 104 Dangerous builds = 0 minimize 0.0 1.0e-2 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 6130 0 -3.0313384 0.95532497 1.9595324 0.10924759 -3.5527137e-17 -3.0313384 6150 0 -3.0304428 0.9947235 1.9969091 0.10935746 -0.00091797415 -3.0313608 @@ -448,9 +455,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 7550 0 -3.0303533 1.0000018 1.9999949 0.10769873 -0.0010415749 -3.0313949 7600 0 -3.0303529 1.0000017 2.0000034 0.10770161 -0.0010419517 -3.0313949 7607 0 -3.0303527 1.0000104 2.0000131 0.10770259 -0.0010421819 -3.0313949 -Loop time of 0.279601 on 4 procs for 1477 steps with 800 atoms +Loop time of 0.311816 on 4 procs for 1477 steps with 800 atoms -99.9% CPU use with 4 MPI tasks x no OpenMP threads +96.2% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -464,12 +471,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.15759 | 0.16061 | 0.16246 | 0.5 | 57.44 +Pair | 0.16143 | 0.16413 | 0.16779 | 0.6 | 52.64 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.026405 | 0.029149 | 0.033293 | 1.5 | 10.43 -Output | 0.0011969 | 0.0012203 | 0.0012867 | 0.1 | 0.44 -Modify | 0.0017877 | 0.0018381 | 0.0019131 | 0.1 | 0.66 -Other | | 0.08679 | | | 31.04 +Comm | 0.03717 | 0.042433 | 0.05037 | 2.5 | 13.61 +Output | 0.0012872 | 0.0017485 | 0.0031171 | 1.9 | 0.56 +Modify | 0.0022309 | 0.0022756 | 0.002321 | 0.1 | 0.73 +Other | | 0.1012 | | | 32.46 Nlocal: 200 ave 203 max 197 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -488,7 +495,7 @@ Dangerous builds = 0 fix 3 all box/relax x 1.0 y 2.0 vmax 1.0e-3 nreset 100 minimize 0.0 1.0e-4 10000 100000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 7607 0 -3.0303527 1.0000104 2.0000131 0.10770259 3.5527137e-17 -3.0303527 7650 0 -3.030353 0.9999904 2.0000076 0.10770145 2.9878713e-07 -3.0303527 @@ -504,9 +511,9 @@ Step Temp PotEng Pxx Pyy Pxy f_3 v_emin 8150 0 -3.0303532 1.0000003 2.0000002 0.10770398 -1.4421314e-09 -3.0303532 8200 0 -3.0303532 1.0000001 2.0000001 0.10770407 7.0744514e-10 -3.0303532 8201 0 -3.0303532 0.99999993 2 0.10770406 3.9670625e-09 -3.0303532 -Loop time of 0.118568 on 4 procs for 594 steps with 800 atoms +Loop time of 0.129036 on 4 procs for 594 steps with 800 atoms -99.7% CPU use with 4 MPI tasks x no OpenMP threads +95.5% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = force tolerance @@ -520,12 +527,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.063769 | 0.065702 | 0.068746 | 0.7 | 55.41 +Pair | 0.06542 | 0.066275 | 0.068163 | 0.4 | 51.36 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.011877 | 0.015052 | 0.017311 | 1.6 | 12.69 -Output | 0.0004735 | 0.00048357 | 0.00051045 | 0.1 | 0.41 -Modify | 0.00073504 | 0.00075912 | 0.00081396 | 0.1 | 0.64 -Other | | 0.03657 | | | 30.84 +Comm | 0.015691 | 0.016819 | 0.018781 | 0.9 | 13.03 +Output | 0.00052595 | 0.00067312 | 0.0011091 | 0.0 | 0.52 +Modify | 0.00091577 | 0.0009293 | 0.0009408 | 0.0 | 0.72 +Other | | 0.04434 | | | 34.36 Nlocal: 200 ave 203 max 197 min Histogram: 1 0 0 1 0 0 1 0 0 1 diff --git a/examples/min/log.5Oct16.min.g++.1 b/examples/min/log.27Nov18.min.g++.1 similarity index 73% rename from examples/min/log.5Oct16.min.g++.1 rename to examples/min/log.27Nov18.min.g++.1 index 9d38693274..98c3ca3b93 100644 --- a/examples/min/log.5Oct16.min.g++.1 +++ b/examples/min/log.27Nov18.min.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d Lennard-Jones melt and subsequent energy minimization units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 -0.153919) to (30.7838 30.7838 0.153919) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 800 atoms + Time spent = 0.000434637 secs mass 1 1.0 velocity all create 5.0 87287 loop geom @@ -39,13 +41,18 @@ thermo 100 run 1000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 22 22 1 -Memory usage per processor = 2.47843 Mbytes + binsize = 1.4, bins = 22 22 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.056 | 3.056 | 3.056 Mbytes Step Temp E_pair E_mol TotEng Press 0 5 -2.461717 0 2.532033 5.0190509 100 3.2788864 -0.74311698 0 2.5316708 15.912832 @@ -58,20 +65,20 @@ Step Temp E_pair E_mol TotEng Press 800 3.3016275 -0.76569171 0 2.5318087 15.639335 900 3.4639203 -0.92788002 0 2.5317104 14.765912 1000 3.3256788 -0.79078181 0 2.5307399 15.599298 -Loop time of 0.201747 on 1 procs for 1000 steps with 800 atoms +Loop time of 0.206744 on 1 procs for 1000 steps with 800 atoms -Performance: 2141296.412 tau/day, 4956.705 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 2089538.727 tau/day, 4836.895 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.12879 | 0.12879 | 0.12879 | 0.0 | 63.84 -Neigh | 0.051049 | 0.051049 | 0.051049 | 0.0 | 25.30 -Comm | 0.0043695 | 0.0043695 | 0.0043695 | 0.0 | 2.17 -Output | 8.1301e-05 | 8.1301e-05 | 8.1301e-05 | 0.0 | 0.04 -Modify | 0.011838 | 0.011838 | 0.011838 | 0.0 | 5.87 -Other | | 0.005622 | | | 2.79 +Pair | 0.12643 | 0.12643 | 0.12643 | 0.0 | 61.15 +Neigh | 0.053694 | 0.053694 | 0.053694 | 0.0 | 25.97 +Comm | 0.0061328 | 0.0061328 | 0.0061328 | 0.0 | 2.97 +Output | 0.00011373 | 0.00011373 | 0.00011373 | 0.0 | 0.06 +Modify | 0.014107 | 0.014107 | 0.014107 | 0.0 | 6.82 +Other | | 0.006263 | | | 3.03 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -91,7 +98,7 @@ neigh_modify delay 0 every 1 check yes thermo 50 minimize 1.0e-6 0.001 1000 10000 -Memory usage per processor = 3.60343 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.182 | 4.182 | 4.182 Mbytes Step Temp E_pair E_mol TotEng Press 1000 3.3256788 -0.79078181 0 2.5307399 15.599298 1050 3.3256788 -2.8361415 0 0.48538014 1.6090001 @@ -104,9 +111,9 @@ Step Temp E_pair E_mol TotEng Press 1400 3.3256788 -2.9131297 0 0.40839199 1.7078217 1450 3.3256788 -2.9167506 0 0.40477104 1.7780477 1475 3.3256788 -2.9169436 0 0.4045781 1.7914542 -Loop time of 0.231352 on 1 procs for 475 steps with 800 atoms +Loop time of 0.233542 on 1 procs for 475 steps with 800 atoms -99.8% CPU use with 1 MPI tasks x no OpenMP threads +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -120,12 +127,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.18807 | 0.18807 | 0.18807 | 0.0 | 81.29 -Neigh | 0.02088 | 0.02088 | 0.02088 | 0.0 | 9.03 -Comm | 0.0028048 | 0.0028048 | 0.0028048 | 0.0 | 1.21 -Output | 6.9618e-05 | 6.9618e-05 | 6.9618e-05 | 0.0 | 0.03 -Modify | 0.0020773 | 0.0020773 | 0.0020773 | 0.0 | 0.90 -Other | | 0.01745 | | | 7.54 +Pair | 0.18404 | 0.18404 | 0.18404 | 0.0 | 78.80 +Neigh | 0.02204 | 0.02204 | 0.02204 | 0.0 | 9.44 +Comm | 0.0040922 | 0.0040922 | 0.0040922 | 0.0 | 1.75 +Output | 0.00010443 | 0.00010443 | 0.00010443 | 0.0 | 0.04 +Modify | 0.0023651 | 0.0023651 | 0.0023651 | 0.0 | 1.01 +Other | | 0.0209 | | | 8.95 Nlocal: 800 ave 800 max 800 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/min/log.5Oct16.min.g++.4 b/examples/min/log.27Nov18.min.g++.4 similarity index 71% rename from examples/min/log.5Oct16.min.g++.4 rename to examples/min/log.27Nov18.min.g++.4 index c58633b77c..43171cd28d 100644 --- a/examples/min/log.5Oct16.min.g++.4 +++ b/examples/min/log.27Nov18.min.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d Lennard-Jones melt and subsequent energy minimization units lj @@ -13,6 +14,7 @@ Created orthogonal box = (0 0 -0.153919) to (30.7838 30.7838 0.153919) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 800 atoms + Time spent = 0.000340223 secs mass 1 1.0 velocity all create 5.0 87287 loop geom @@ -39,13 +41,18 @@ thermo 100 run 1000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 22 22 1 -Memory usage per processor = 2.47676 Mbytes + binsize = 1.4, bins = 22 22 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.049 | 3.049 | 3.049 Mbytes Step Temp E_pair E_mol TotEng Press 0 5 -2.461717 0 2.532033 5.0190509 100 3.2788864 -0.74311698 0 2.5316708 15.912832 @@ -58,20 +65,20 @@ Step Temp E_pair E_mol TotEng Press 800 3.3016408 -0.76570603 0 2.5318077 15.639259 900 3.4621697 -0.92610292 0 2.5317391 14.773473 1000 3.3058424 -0.77076863 0 2.5309414 15.708171 -Loop time of 0.162444 on 4 procs for 1000 steps with 800 atoms +Loop time of 0.0730537 on 4 procs for 1000 steps with 800 atoms -Performance: 2659379.051 tau/day, 6155.970 timesteps/s -78.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 5913456.756 tau/day, 13688.557 timesteps/s +95.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.032602 | 0.033969 | 0.034999 | 0.5 | 20.91 -Neigh | 0.013433 | 0.013719 | 0.013862 | 0.1 | 8.45 -Comm | 0.08291 | 0.088224 | 0.099287 | 2.2 | 54.31 -Output | 0.00084209 | 0.00093055 | 0.00097394 | 0.2 | 0.57 -Modify | 0.0030942 | 0.0033001 | 0.0035179 | 0.3 | 2.03 -Other | | 0.0223 | | | 13.73 +Pair | 0.031481 | 0.031893 | 0.032234 | 0.2 | 43.66 +Neigh | 0.014234 | 0.014466 | 0.014672 | 0.1 | 19.80 +Comm | 0.017078 | 0.01775 | 0.018055 | 0.3 | 24.30 +Output | 0.00017548 | 0.00027454 | 0.00056386 | 0.0 | 0.38 +Modify | 0.0038447 | 0.0038754 | 0.0038893 | 0.0 | 5.30 +Other | | 0.004795 | | | 6.56 Nlocal: 200 ave 202 max 196 min Histogram: 1 0 0 0 0 0 0 0 2 1 @@ -91,7 +98,7 @@ neigh_modify delay 0 every 1 check yes thermo 50 minimize 1.0e-6 0.001 1000 10000 -Memory usage per processor = 3.60176 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.174 | 4.174 | 4.174 Mbytes Step Temp E_pair E_mol TotEng Press 1000 3.3058424 -0.77076863 0 2.5309414 15.708171 1050 3.3058424 -2.8318266 0 0.46988351 1.5980106 @@ -100,9 +107,9 @@ Step Temp E_pair E_mol TotEng Press 1200 3.3058424 -2.8831122 0 0.41859789 1.6869035 1250 3.3058424 -2.8877971 0 0.413913 1.7276622 1300 3.3058424 -2.8887969 0 0.41291311 1.7424655 -Loop time of 0.048058 on 4 procs for 300 steps with 800 atoms +Loop time of 0.055995 on 4 procs for 300 steps with 800 atoms -98.8% CPU use with 4 MPI tasks x no OpenMP threads +96.0% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -116,12 +123,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.03076 | 0.031581 | 0.032226 | 0.3 | 65.71 -Neigh | 0.0037913 | 0.0038914 | 0.0039353 | 0.1 | 8.10 -Comm | 0.004194 | 0.0049016 | 0.0058777 | 1.0 | 10.20 -Output | 6.3181e-05 | 6.6817e-05 | 7.7009e-05 | 0.1 | 0.14 -Modify | 0.00035 | 0.00036556 | 0.0003829 | 0.1 | 0.76 -Other | | 0.007252 | | | 15.09 +Pair | 0.029709 | 0.030492 | 0.031057 | 0.3 | 54.45 +Neigh | 0.0040245 | 0.0042111 | 0.0046084 | 0.4 | 7.52 +Comm | 0.010827 | 0.011703 | 0.012587 | 0.6 | 20.90 +Output | 9.8228e-05 | 0.00024104 | 0.00066733 | 0.0 | 0.43 +Modify | 0.0004456 | 0.00045222 | 0.00045633 | 0.0 | 0.81 +Other | | 0.008895 | | | 15.89 Nlocal: 200 ave 202 max 196 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/msst/log.5Oct16.msst.g++.1 b/examples/msst/log.27Nov18.msst.g++.1 similarity index 79% rename from examples/msst/log.5Oct16.msst.g++.1 rename to examples/msst/log.27Nov18.msst.g++.1 index 64af995896..4b18e67702 100644 --- a/examples/msst/log.5Oct16.msst.g++.1 +++ b/examples/msst/log.27Nov18.msst.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # LJ test of msst shock dynamics # Energy in eV, time in ps, distance in angstroms. @@ -20,6 +21,7 @@ Created orthogonal box = (0 0 0) to (96.4602 96.4602 96.4602) 1 by 1 by 1 MPI processor grid create_atoms 1 region box1 Created 23328 atoms + Time spent = 0.00902033 secs mass 1 40.00 @@ -37,13 +39,18 @@ thermo 10 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 17 17 17 -Memory usage per processor = 8.03726 Mbytes + binsize = 6, bins = 17 17 17 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 17.86 | 17.86 | 17.86 Mbytes Step Temp E_pair E_mol TotEng Press 0 600 -1943.9014 0 -134.75058 992.06384 10 586.44651 -1917.3971 0 -149.11346 1306.17 @@ -56,20 +63,20 @@ Step Temp E_pair E_mol TotEng Press 80 300.28534 -1056.589 0 -151.15321 8324.8812 90 305.83368 -1073.3097 0 -151.14426 8175.2478 100 304.06857 -1067.9843 0 -151.14112 8191.234 -Loop time of 3.5066 on 1 procs for 100 steps with 23328 atoms +Loop time of 3.49498 on 1 procs for 100 steps with 23328 atoms -Performance: 4.928 ns/day, 4.870 hours/ns, 28.518 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 4.944 ns/day, 4.854 hours/ns, 28.612 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.3534 | 3.3534 | 3.3534 | 0.0 | 95.63 -Neigh | 0.066456 | 0.066456 | 0.066456 | 0.0 | 1.90 -Comm | 0.01981 | 0.01981 | 0.01981 | 0.0 | 0.56 -Output | 0.00096083 | 0.00096083 | 0.00096083 | 0.0 | 0.03 -Modify | 0.037752 | 0.037752 | 0.037752 | 0.0 | 1.08 -Other | | 0.02825 | | | 0.81 +Pair | 3.354 | 3.354 | 3.354 | 0.0 | 95.97 +Neigh | 0.074059 | 0.074059 | 0.074059 | 0.0 | 2.12 +Comm | 0.020118 | 0.020118 | 0.020118 | 0.0 | 0.58 +Output | 0.0010924 | 0.0010924 | 0.0010924 | 0.0 | 0.03 +Modify | 0.034063 | 0.034063 | 0.034063 | 0.0 | 0.97 +Other | | 0.01168 | | | 0.33 Nlocal: 23328 ave 23328 max 23328 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -118,7 +125,7 @@ Fix MSST v0 = 8.97521e+05 Fix MSST p0 = 8.10679e+03 Fix MSST e0 = to be -1.51141e+02 Fix MSST initial strain rate of -3.20112e-02 established by reducing temperature by factor of 1.00000e-02 -Memory usage per processor = 8.04369 Mbytes +Per MPI rank memory allocation (min/avg/max) = 18.99 | 18.99 | 18.99 Mbytes Step Temp KinEng PotEng Lx Ly Lz Pxx Pyy Pzz TotEng v_dhug v_dray v_lgr_vel v_lgr_pos f_msst 100 301.02788 907.67474 -1058.8159 96.4602 96.4602 96.4602 8242.1214 8202.9779 8095.8693 -151.14112 1.5203428 -10.919311 0 0 9.1684318 110 297.71411 897.68288 -1048.8859 96.4602 96.4602 96.399397 8347.6253 8303.7121 8220.7572 -151.20299 1.439058 28.652258 0.017649501 -0.55980494 5.7336721 @@ -131,20 +138,20 @@ Step Temp KinEng PotEng Lx Ly Lz Pxx Pyy Pzz TotEng v_dhug v_dray v_lgr_vel v_lg 180 304.99 919.62151 -1071.3588 96.4602 96.4602 96.022824 8461.5542 8343.1436 8484.9824 -151.73733 0.99203387 -235.51793 0.12695926 -4.4693063 -15.685622 190 305.1148 919.99782 -1071.7807 96.4602 96.4602 95.9748 8498.7562 8371.4217 8514.4473 -151.78288 0.93937416 -273.43964 0.1408996 -5.0266132 -18.403999 200 306.45829 924.0488 -1075.8787 96.4602 96.4602 95.927931 8488.9509 8385.2408 8529.6443 -151.82991 0.88654815 -324.00777 0.15450451 -5.583645 -21.055149 -Loop time of 4.74363 on 1 procs for 100 steps with 23328 atoms +Loop time of 5.50267 on 1 procs for 100 steps with 23328 atoms -Performance: 3.643 ns/day, 6.588 hours/ns, 21.081 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.140 ns/day, 7.643 hours/ns, 18.173 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.366 | 3.366 | 3.366 | 0.0 | 70.96 -Neigh | 0.13476 | 0.13476 | 0.13476 | 0.0 | 2.84 -Comm | 0.017403 | 0.017403 | 0.017403 | 0.0 | 0.37 -Output | 0.011465 | 0.011465 | 0.011465 | 0.0 | 0.24 -Modify | 1.1866 | 1.1866 | 1.1866 | 0.0 | 25.01 -Other | | 0.02743 | | | 0.58 +Pair | 4.7512 | 4.7512 | 4.7512 | 0.0 | 86.34 +Neigh | 0.14916 | 0.14916 | 0.14916 | 0.0 | 2.71 +Comm | 0.020737 | 0.020737 | 0.020737 | 0.0 | 0.38 +Output | 0.010999 | 0.010999 | 0.010999 | 0.0 | 0.20 +Modify | 0.55965 | 0.55965 | 0.55965 | 0.0 | 10.17 +Other | | 0.01089 | | | 0.20 Nlocal: 23328 ave 23328 max 23328 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -157,4 +164,4 @@ Total # of neighbors = 2183494 Ave neighs/atom = 93.5997 Neighbor list builds = 2 Dangerous builds = 0 -Total wall time: 0:00:08 +Total wall time: 0:00:09 diff --git a/examples/msst/log.5Oct16.msst.g++.4 b/examples/msst/log.27Nov18.msst.g++.4 similarity index 79% rename from examples/msst/log.5Oct16.msst.g++.4 rename to examples/msst/log.27Nov18.msst.g++.4 index 6026141ace..c2ed0fcb5e 100644 --- a/examples/msst/log.5Oct16.msst.g++.4 +++ b/examples/msst/log.27Nov18.msst.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # LJ test of msst shock dynamics # Energy in eV, time in ps, distance in angstroms. @@ -20,6 +21,7 @@ Created orthogonal box = (0 0 0) to (96.4602 96.4602 96.4602) 1 by 2 by 2 MPI processor grid create_atoms 1 region box1 Created 23328 atoms + Time spent = 0.00104165 secs mass 1 40.00 @@ -37,13 +39,18 @@ thermo 10 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 17 17 17 -Memory usage per processor = 5.24184 Mbytes + binsize = 6, bins = 17 17 17 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.784 | 7.784 | 7.784 Mbytes Step Temp E_pair E_mol TotEng Press 0 600 -1943.9014 0 -134.75058 992.06384 10 586.47212 -1917.4465 0 -149.08565 1305.7368 @@ -56,20 +63,20 @@ Step Temp E_pair E_mol TotEng Press 80 299.37658 -1053.8476 0 -151.1519 8352.9467 90 304.24026 -1068.4941 0 -151.13319 8218.1594 100 301.9683 -1061.6332 0 -151.12284 8244.1277 -Loop time of 0.933851 on 4 procs for 100 steps with 23328 atoms +Loop time of 0.978562 on 4 procs for 100 steps with 23328 atoms -Performance: 18.504 ns/day, 1.297 hours/ns, 107.083 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 17.659 ns/day, 1.359 hours/ns, 102.191 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.83046 | 0.85727 | 0.86953 | 1.7 | 91.80 -Neigh | 0.01685 | 0.017314 | 0.017519 | 0.2 | 1.85 -Comm | 0.028471 | 0.041764 | 0.070721 | 8.3 | 4.47 -Output | 0.00049806 | 0.00062126 | 0.00067735 | 0.3 | 0.07 -Modify | 0.0090787 | 0.009689 | 0.0099437 | 0.4 | 1.04 -Other | | 0.007188 | | | 0.77 +Pair | 0.86406 | 0.88129 | 0.89922 | 1.4 | 90.06 +Neigh | 0.019231 | 0.019453 | 0.019816 | 0.2 | 1.99 +Comm | 0.043947 | 0.06197 | 0.079005 | 5.1 | 6.33 +Output | 0.00057197 | 0.00082499 | 0.0015628 | 0.0 | 0.08 +Modify | 0.0091414 | 0.0092927 | 0.0094769 | 0.1 | 0.95 +Other | | 0.005727 | | | 0.59 Nlocal: 5832 ave 5850 max 5813 min Histogram: 1 0 0 0 1 1 0 0 0 1 @@ -118,7 +125,7 @@ Fix MSST v0 = 8.97521e+05 Fix MSST p0 = 8.18624e+03 Fix MSST e0 = to be -1.51123e+02 Fix MSST initial strain rate of -3.19005e-02 established by reducing temperature by factor of 1.00000e-02 -Memory usage per processor = 5.24184 Mbytes +Per MPI rank memory allocation (min/avg/max) = 8.534 | 8.534 | 8.534 Mbytes Step Temp KinEng PotEng Lx Ly Lz Pxx Pyy Pzz TotEng v_dhug v_dray v_lgr_vel v_lgr_pos f_msst 100 298.94862 901.40524 -1052.5281 96.4602 96.4602 96.4602 8270.9151 8253.4662 8175.4946 -151.12284 1.5098415 -10.744684 0 0 9.1051034 110 296.49826 894.01679 -1045.224 96.4602 96.4602 96.399609 8338.4937 8340.5504 8294.9909 -151.20723 1.4327442 23.73173 0.017588167 -0.55980562 5.6560557 @@ -131,20 +138,20 @@ Step Temp KinEng PotEng Lx Ly Lz Pxx Pyy Pzz TotEng v_dhug v_dray v_lgr_vel v_lg 180 305.86343 922.25514 -1073.9633 96.4602 96.4602 96.023049 8345.1853 8432.5201 8461.3276 -151.70813 0.97863988 -338.30793 0.12689398 -4.4693274 -15.815462 190 307.44054 927.01052 -1078.7892 96.4602 96.4602 95.9747 8368.4081 8427.5109 8450.584 -151.77867 0.92329631 -416.89333 0.1409285 -5.0266346 -18.541801 200 308.43619 930.01265 -1081.8521 96.4602 96.4602 95.927349 8393.2058 8443.1265 8454.6733 -151.83947 0.8723277 -479.24592 0.1546734 -5.5836644 -21.20378 -Loop time of 1.23008 on 4 procs for 100 steps with 23328 atoms +Loop time of 1.57102 on 4 procs for 100 steps with 23328 atoms -Performance: 14.048 ns/day, 1.708 hours/ns, 81.295 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 10.999 ns/day, 2.182 hours/ns, 63.653 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.83631 | 0.84345 | 0.85189 | 0.8 | 68.57 -Neigh | 0.033866 | 0.03409 | 0.034339 | 0.1 | 2.77 -Comm | 0.029796 | 0.038609 | 0.045779 | 3.5 | 3.14 -Output | 0.0036259 | 0.0036446 | 0.0036905 | 0.0 | 0.30 -Modify | 0.30399 | 0.30447 | 0.30495 | 0.1 | 24.75 -Other | | 0.00582 | | | 0.47 +Pair | 1.2237 | 1.2543 | 1.3264 | 3.7 | 79.84 +Neigh | 0.038648 | 0.039684 | 0.041811 | 0.6 | 2.53 +Comm | 0.026617 | 0.10771 | 0.14194 | 14.3 | 6.86 +Output | 0.0035126 | 0.0045422 | 0.0076261 | 2.6 | 0.29 +Modify | 0.15787 | 0.15969 | 0.16403 | 0.6 | 10.16 +Other | | 0.005042 | | | 0.32 Nlocal: 5832 ave 5874 max 5803 min Histogram: 2 0 0 0 0 1 0 0 0 1 diff --git a/examples/nb3b/log.5Oct16.nb3b.g++.1 b/examples/nb3b/log.27Nov18.nb3b.g++.1 similarity index 71% rename from examples/nb3b/log.5Oct16.nb3b.g++.1 rename to examples/nb3b/log.27Nov18.nb3b.g++.1 index a156b3400c..d4a8cffc42 100644 --- a/examples/nb3b/log.5Oct16.nb3b.g++.1 +++ b/examples/nb3b/log.27Nov18.nb3b.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test of NB3B pair style with pair hybrid and KSpace solver units real @@ -57,26 +58,46 @@ thermo 50 ### Minimize forces in structure ### minimize 1.0e-06 1.0e-08 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) EwaldDisp initialization ... -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) - G vector = 0.269426 -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) + G vector = 0.269426 accuracy = 0.0332064 +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) Neighbor list info ... - 4 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 4 4 4 + binsize = 6, bins = 4 4 4 + 4 neighbor lists, perpetual/occasional/extra = 4 0 0 + (1) pair nb3b/harmonic, perpetual + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d + bin: standard + (2) pair lj/cut/coul/long, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) pair nb3b/harmonic, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none + (4) pair lj/cut/coul/long, perpetual, copy from (2) + attributes: half, newton on + pair build: copy + stencil: none + bin: none vectors: nbox = 6, nkvec = 478 -Memory usage per processor = 17.039 Mbytes +Per MPI rank memory allocation (min/avg/max) = 32.37 | 32.37 | 32.37 Mbytes Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume 0 -61505.983 0 0 -61505.983 198.11978 0 0 0 5426.6842 -20935.868 -46194.919 979.72822 22.5907 22.359 23.4708 0 0 0 11855.229 4 -61506.604 0 0 -61506.604 198.69671 0 0 0 5460.0893 -20970.348 -46195.042 1657.43 22.5907 22.359 23.4708 0 0 0 11855.229 -Loop time of 0.434716 on 1 procs for 4 steps with 1400 atoms +Loop time of 0.562063 on 1 procs for 4 steps with 1400 atoms -98.4% CPU use with 1 MPI tasks x no OpenMP threads +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -90,14 +111,14 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.35925 | 0.35925 | 0.35925 | 0.0 | 82.64 -Bond | 0.00031662 | 0.00031662 | 0.00031662 | 0.0 | 0.07 -Kspace | 0.074097 | 0.074097 | 0.074097 | 0.0 | 17.04 +Pair | 0.47517 | 0.47517 | 0.47517 | 0.0 | 84.54 +Bond | 0.00020051 | 0.00020051 | 0.00020051 | 0.0 | 0.04 +Kspace | 0.085509 | 0.085509 | 0.085509 | 0.0 | 15.21 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00059676 | 0.00059676 | 0.00059676 | 0.0 | 0.14 +Comm | 0.00077796 | 0.00077796 | 0.00077796 | 0.0 | 0.14 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.0004592 | | | 0.11 +Other | | 0.0004046 | | | 0.07 Nlocal: 1400 ave 1400 max 1400 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -123,38 +144,31 @@ fix 2 all temp/rescale 10 298.0 298.0 25.0 1.0 run 100 EwaldDisp initialization ... -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) - G vector = 0.269426 -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) -Neighbor list info ... - 4 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12 - ghost atom cutoff = 12 - binsize = 6 -> bins = 4 4 4 -Memory usage per processor = 16.664 Mbytes +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) + G vector = 0.269426 accuracy = 0.0332064 +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) +Per MPI rank memory allocation (min/avg/max) = 31.99 | 31.99 | 31.99 Mbytes Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume 4 -60263.898 1242.7057 298 -61506.604 198.69671 0 0 0 5460.0893 -20970.348 -46195.042 6449.1472 22.5907 22.359 23.4708 0 0 0 11855.229 50 -58769.885 1186.4036 284.49881 -59956.289 309.92499 0 0 0 6168.8458 -20249.062 -46185.998 21737.807 22.5907 22.359 23.4708 0 0 0 11855.229 100 -58865.196 1242.7057 298 -60107.902 371.56168 0 0 0 6422.4016 -20716.005 -46185.86 22887.006 22.5907 22.359 23.4708 0 0 0 11855.229 104 -58865.334 1260.1244 302.177 -60125.458 386.24491 0 0 0 6377.3686 -20705.327 -46183.745 19154.01 22.5907 22.359 23.4708 0 0 0 11855.229 -Loop time of 7.88523 on 1 procs for 100 steps with 1400 atoms +Loop time of 10.7036 on 1 procs for 100 steps with 1400 atoms -Performance: 1.096 ns/day, 21.903 hours/ns, 12.682 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.807 ns/day, 29.732 hours/ns, 9.343 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.9318 | 6.9318 | 6.9318 | 0.0 | 87.91 -Bond | 0.0063558 | 0.0063558 | 0.0063558 | 0.0 | 0.08 -Kspace | 0.81841 | 0.81841 | 0.81841 | 0.0 | 10.38 -Neigh | 0.1015 | 0.1015 | 0.1015 | 0.0 | 1.29 -Comm | 0.013201 | 0.013201 | 0.013201 | 0.0 | 0.17 -Output | 9.7752e-05 | 9.7752e-05 | 9.7752e-05 | 0.0 | 0.00 -Modify | 0.0064344 | 0.0064344 | 0.0064344 | 0.0 | 0.08 -Other | | 0.007411 | | | 0.09 +Pair | 9.5983 | 9.5983 | 9.5983 | 0.0 | 89.67 +Bond | 0.0037653 | 0.0037653 | 0.0037653 | 0.0 | 0.04 +Kspace | 0.95057 | 0.95057 | 0.95057 | 0.0 | 8.88 +Neigh | 0.11977 | 0.11977 | 0.11977 | 0.0 | 1.12 +Comm | 0.018144 | 0.018144 | 0.018144 | 0.0 | 0.17 +Output | 0.00011969 | 0.00011969 | 0.00011969 | 0.0 | 0.00 +Modify | 0.0061135 | 0.0061135 | 0.0061135 | 0.0 | 0.06 +Other | | 0.006855 | | | 0.06 Nlocal: 1400 ave 1400 max 1400 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -170,4 +184,4 @@ Ave neighs/atom = 850.439 Ave special neighs/atom = 0.8 Neighbor list builds = 2 Dangerous builds = 0 -Total wall time: 0:00:08 +Total wall time: 0:00:11 diff --git a/examples/nb3b/log.5Oct16.nb3b.g++.4 b/examples/nb3b/log.27Nov18.nb3b.g++.4 similarity index 71% rename from examples/nb3b/log.5Oct16.nb3b.g++.4 rename to examples/nb3b/log.27Nov18.nb3b.g++.4 index f63a40486d..e2c1f77844 100644 --- a/examples/nb3b/log.5Oct16.nb3b.g++.4 +++ b/examples/nb3b/log.27Nov18.nb3b.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test of NB3B pair style with pair hybrid and KSpace solver units real @@ -57,26 +58,46 @@ thermo 50 ### Minimize forces in structure ### minimize 1.0e-06 1.0e-08 1000 10000 -WARNING: Resetting reneighboring criteria during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) EwaldDisp initialization ... -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) - G vector = 0.269426 -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) + G vector = 0.269426 accuracy = 0.0332064 +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) Neighbor list info ... - 4 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 4 4 4 + binsize = 6, bins = 4 4 4 + 4 neighbor lists, perpetual/occasional/extra = 4 0 0 + (1) pair nb3b/harmonic, perpetual + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d + bin: standard + (2) pair lj/cut/coul/long, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) pair nb3b/harmonic, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none + (4) pair lj/cut/coul/long, perpetual, copy from (2) + attributes: half, newton on + pair build: copy + stencil: none + bin: none vectors: nbox = 6, nkvec = 478 -Memory usage per processor = 16.9507 Mbytes +Per MPI rank memory allocation (min/avg/max) = 20.64 | 21.18 | 22.02 Mbytes Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume 0 -61505.983 0 0 -61505.983 198.11978 0 0 0 5426.6842 -20935.868 -46194.919 979.72822 22.5907 22.359 23.4708 0 0 0 11855.229 4 -61506.604 0 0 -61506.604 198.69671 0 0 0 5460.0893 -20970.348 -46195.042 1657.43 22.5907 22.359 23.4708 0 0 0 11855.229 -Loop time of 0.129448 on 4 procs for 4 steps with 1400 atoms +Loop time of 0.164255 on 4 procs for 4 steps with 1400 atoms -99.4% CPU use with 4 MPI tasks x no OpenMP threads +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -90,14 +111,14 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.082641 | 0.0934 | 0.10605 | 3.3 | 72.15 -Bond | 7.2002e-05 | 7.9215e-05 | 8.6546e-05 | 0.1 | 0.06 -Kspace | 0.021445 | 0.032612 | 0.04218 | 4.9 | 25.19 +Pair | 0.11101 | 0.12473 | 0.13747 | 3.3 | 75.93 +Bond | 5.8889e-05 | 6.2823e-05 | 6.6757e-05 | 0.0 | 0.04 +Kspace | 0.025273 | 0.036047 | 0.047969 | 5.3 | 21.95 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0015318 | 0.0030052 | 0.0042045 | 2.1 | 2.32 +Comm | 0.001081 | 0.0030527 | 0.0048478 | 2.8 | 1.86 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.0003518 | | | 0.27 +Other | | 0.000367 | | | 0.22 Nlocal: 350 ave 399 max 305 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -123,38 +144,31 @@ fix 2 all temp/rescale 10 298.0 298.0 25.0 1.0 run 100 EwaldDisp initialization ... -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) - G vector = 0.269426 -WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:216) -Neighbor list info ... - 4 neighbor list requests - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12 - ghost atom cutoff = 12 - binsize = 6 -> bins = 4 4 4 -Memory usage per processor = 16.5757 Mbytes +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) + G vector = 0.269426 accuracy = 0.0332064 +WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:218) +Per MPI rank memory allocation (min/avg/max) = 20.26 | 20.8 | 21.65 Mbytes Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume 4 -60263.898 1242.7057 298 -61506.604 198.69671 0 0 0 5460.0893 -20970.348 -46195.042 6449.1472 22.5907 22.359 23.4708 0 0 0 11855.229 50 -58769.885 1186.4036 284.49881 -59956.289 309.92499 0 0 0 6168.8458 -20249.062 -46185.998 21737.807 22.5907 22.359 23.4708 0 0 0 11855.229 100 -58865.196 1242.7057 298 -60107.902 371.56168 0 0 0 6422.4016 -20716.005 -46185.86 22887.006 22.5907 22.359 23.4708 0 0 0 11855.229 104 -58865.334 1260.1244 302.177 -60125.458 386.24491 0 0 0 6377.3686 -20705.327 -46183.745 19154.01 22.5907 22.359 23.4708 0 0 0 11855.229 -Loop time of 2.3186 on 4 procs for 100 steps with 1400 atoms +Loop time of 3.0299 on 4 procs for 100 steps with 1400 atoms -Performance: 3.726 ns/day, 6.441 hours/ns, 43.129 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2.852 ns/day, 8.416 hours/ns, 33.004 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.7054 | 1.8352 | 1.9875 | 8.4 | 79.15 -Bond | 0.0015972 | 0.0017807 | 0.0019476 | 0.3 | 0.08 -Kspace | 0.21511 | 0.22245 | 0.23383 | 1.6 | 9.59 -Neigh | 0.026175 | 0.026182 | 0.026186 | 0.0 | 1.13 -Comm | 0.062151 | 0.21516 | 0.34573 | 24.7 | 9.28 -Output | 0.0001421 | 0.00016701 | 0.00020218 | 0.2 | 0.01 -Modify | 0.0021067 | 0.0031134 | 0.0037572 | 1.2 | 0.13 -Other | | 0.01456 | | | 0.63 +Pair | 2.424 | 2.5288 | 2.6552 | 6.3 | 83.46 +Bond | 0.0011241 | 0.0011699 | 0.0011907 | 0.1 | 0.04 +Kspace | 0.24584 | 0.25484 | 0.26259 | 1.5 | 8.41 +Neigh | 0.031059 | 0.031067 | 0.031075 | 0.0 | 1.03 +Comm | 0.070014 | 0.19745 | 0.30262 | 22.7 | 6.52 +Output | 0.00011683 | 0.0002265 | 0.00050616 | 0.0 | 0.01 +Modify | 0.0022085 | 0.0030763 | 0.0039916 | 1.3 | 0.10 +Other | | 0.01331 | | | 0.44 Nlocal: 350 ave 357 max 340 min Histogram: 1 0 0 0 0 0 1 1 0 1 @@ -170,4 +184,4 @@ Ave neighs/atom = 850.439 Ave special neighs/atom = 0.8 Neighbor list builds = 2 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:03 diff --git a/examples/nemd/log.27Nov18.nemd.g++.1 b/examples/nemd/log.27Nov18.nemd.g++.1 new file mode 100644 index 0000000000..c0989db969 --- /dev/null +++ b/examples/nemd/log.27Nov18.nemd.g++.1 @@ -0,0 +1,137 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d NEMD simulation + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000332355 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +#dump 1 all custom 5000 dump.nemd id type x y z + +#dump 2 all image 1000 image.*.jpg type type adiam 1.2 +#dump_modify 2 pad 5 + +#dump 3 all movie 1000 movie.mpg type type adiam 1.2 +#dump_modify 3 pad 5 + +thermo 1000 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.065 | 3.065 | 3.065 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1.44 0 0 1.431 1.2080502 189.52855 + 1000 1.1326992 0.25863754 0 1.3842573 6.0588079 189.52855 + 2000 0.99104643 0.37634349 0 1.3611959 7.8993387 189.52855 + 3000 1.0749743 0.21908728 0 1.2873429 6.2659517 189.52855 + 4000 1.0986742 0.27147022 0 1.3632777 5.8778262 189.52855 + 5000 1.071838 0.23413372 0 1.2992728 5.9120887 189.52855 + 6000 1.0013194 0.26923671 0 1.2642979 6.2802759 189.52855 + 7000 0.94110685 0.3224557 0 1.2576806 6.1864166 189.52855 + 8000 0.97391513 0.28793383 0 1.255762 6.5071893 189.52855 + 9000 0.95346063 0.31050593 0 1.2580074 6.3321512 189.52855 + 10000 0.96236447 0.26298203 0 1.2193317 6.4083918 189.52855 + 11000 0.9511149 0.27571527 0 1.2208857 6.0949768 189.52855 + 12000 1.0186935 0.18134918 0 1.1936758 5.1269128 189.52855 + 13000 0.96350682 0.23171507 0 1.1892 5.7367267 189.52855 + 14000 0.94740402 0.27357945 0 1.2150622 6.0156532 189.52855 + 15000 0.87951545 0.27745111 0 1.1514696 6.297405 189.52855 + 16000 0.93216196 0.27020559 0 1.1965415 6.6188833 189.52855 + 17000 0.94109936 0.24756193 0 1.1827794 5.8993088 189.52855 + 18000 0.97325239 0.27996398 0 1.2471335 6.1486561 189.52855 + 19000 1.0494686 0.27132686 0 1.3142363 6.6757065 189.52855 + 20000 1.0391862 0.25195457 0 1.2846459 6.143235 189.52855 + 21000 0.96407137 0.27359166 0 1.2316376 5.9577116 189.52855 + 22000 0.97954534 0.31920255 0 1.2926257 6.5320163 189.52855 + 23000 0.97585473 0.24154424 0 1.2112999 6.0839179 189.52855 + 24000 1.0522109 0.1646952 0 1.2103298 5.0388687 189.52855 + 25000 0.93707172 0.25655806 0 1.1877731 5.819887 189.52855 + 26000 0.89798775 0.26629627 0 1.1586716 6.0393558 189.52855 + 27000 0.93259926 0.24542428 0 1.1721948 5.3560986 189.52855 + 28000 0.8428223 0.20784302 0 1.0453977 4.956911 189.52855 + 29000 0.81653505 0.21924932 0 1.030681 5.271501 189.52855 + 30000 0.90157811 0.15070734 0 1.0466506 4.476142 189.52855 + 31000 0.86580039 0.21115151 0 1.0715407 5.0056915 189.52855 + 32000 0.89768096 0.28377249 0 1.1758429 5.8449711 189.52855 + 33000 1.0504011 0.29009694 0 1.333933 6.1319155 189.52855 + 34000 1.2009765 0.19137934 0 1.3848498 4.9643885 189.52855 + 35000 1.208705 0.27071222 0 1.4718628 6.2162389 189.52855 + 36000 1.2211309 0.28389521 0 1.497394 6.5090715 189.52855 + 37000 1.1384381 0.42795547 0 1.5592783 8.5129272 189.52855 + 38000 1.2198334 0.34335732 0 1.5555668 7.2940883 189.52855 + 39000 1.1562045 0.35783089 0 1.5068091 7.340999 189.52855 + 40000 1.2145924 0.28410558 0 1.4911068 6.234986 189.52855 + 41000 1.1240878 0.34663237 0 1.4636946 7.1720193 189.52855 + 42000 1.2491422 0.26815889 0 1.509494 6.1390803 189.52855 + 43000 1.1387564 0.33755832 0 1.4691975 7.0577597 189.52855 + 44000 1.0031598 0.4081807 0 1.4050708 8.2732113 189.52855 + 45000 1.0166213 0.29131017 0 1.3015776 6.1907807 189.52855 + 46000 0.96251302 0.31483519 0 1.2713325 6.6987235 189.52855 + 47000 0.89809294 0.30909884 0 1.2015787 6.3997583 189.52855 + 48000 0.86736217 0.31917648 0 1.1811176 7.1584774 189.52855 + 49000 0.91979053 0.21099403 0 1.1250359 5.4968259 189.52855 + 50000 0.87079959 0.24059333 0 1.1059504 5.6039305 189.52855 +Loop time of 1.54353 on 1 procs for 50000 steps with 160 atoms + +Performance: 13993916.675 tau/day, 32393.326 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.20172 | 0.20172 | 0.20172 | 0.0 | 13.07 +Neigh | 0.16634 | 0.16634 | 0.16634 | 0.0 | 10.78 +Comm | 0.068928 | 0.068928 | 0.068928 | 0.0 | 4.47 +Output | 0.00059891 | 0.00059891 | 0.00059891 | 0.0 | 0.04 +Modify | 1.0123 | 1.0123 | 1.0123 | 0.0 | 65.59 +Other | | 0.09361 | | | 6.06 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 73 ave 73 max 73 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 353 ave 353 max 353 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 353 +Ave neighs/atom = 2.20625 +Neighbor list builds = 5273 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/nemd/log.27Nov18.nemd.g++.4 b/examples/nemd/log.27Nov18.nemd.g++.4 new file mode 100644 index 0000000000..68543882b7 --- /dev/null +++ b/examples/nemd/log.27Nov18.nemd.g++.4 @@ -0,0 +1,137 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d NEMD simulation + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000308275 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +#dump 1 all custom 5000 dump.nemd id type x y z + +#dump 2 all image 1000 image.*.jpg type type adiam 1.2 +#dump_modify 2 pad 5 + +#dump 3 all movie 1000 movie.mpg type type adiam 1.2 +#dump_modify 3 pad 5 + +thermo 1000 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.062 | 3.062 | 3.062 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 1.44 0 0 1.431 1.2080502 189.52855 + 1000 1.1682693 0.24486562 0 1.4058332 5.8092954 189.52855 + 2000 1.0928734 0.27609364 0 1.3621366 6.2237017 189.52855 + 3000 1.09088 0.24816112 0 1.3322231 5.7001547 189.52855 + 4000 1.0110684 0.29868377 0 1.303433 7.3312319 189.52855 + 5000 0.91033678 0.28330698 0 1.1879542 6.1840352 189.52855 + 6000 0.93416074 0.22661127 0 1.1549335 5.3619735 189.52855 + 7000 0.93305734 0.19203739 0 1.1192631 5.2497547 189.52855 + 8000 0.88944438 0.19421381 0 1.0780992 4.9733446 189.52855 + 9000 0.86949257 0.21207681 0 1.0761351 5.4687076 189.52855 + 10000 0.80088203 0.24071142 0 1.0365879 5.334545 189.52855 + 11000 0.88899727 0.19972767 0 1.0831687 4.8832207 189.52855 + 12000 0.93045817 0.17883252 0 1.1034753 4.9081709 189.52855 + 13000 0.9724196 0.19089684 0 1.1572388 5.3460903 189.52855 + 14000 0.93902186 0.25513773 0 1.1882907 6.3338337 189.52855 + 15000 0.91879903 0.31605547 0 1.229112 6.2085671 189.52855 + 16000 0.9860058 0.26863362 0 1.2484769 6.514688 189.52855 + 17000 1.0354756 0.23445357 0 1.2634574 6.1519296 189.52855 + 18000 1.0244774 0.27511827 0 1.2931927 6.2230002 189.52855 + 19000 1.1581216 0.21558936 0 1.3664727 5.5458237 189.52855 + 20000 1.0552168 0.29344488 0 1.3420666 6.4880315 189.52855 + 21000 0.97925435 0.31583414 0 1.2889681 6.7584093 189.52855 + 22000 1.0112494 0.26246834 0 1.2673974 5.4112008 189.52855 + 23000 1.0463332 0.26049752 0 1.3002911 6.1359606 189.52855 + 24000 1.1130319 0.19848564 0 1.3045611 5.7088487 189.52855 + 25000 1.0355662 0.28048951 0 1.3095834 6.4596476 189.52855 + 26000 1.0823932 0.21784218 0 1.2934704 5.106334 189.52855 + 27000 0.99719525 0.32679678 0 1.3177596 6.7399277 189.52855 + 28000 1.0665868 0.25002709 0 1.3099477 6.2732557 189.52855 + 29000 1.0312798 0.30650087 0 1.3313351 7.0581024 189.52855 + 30000 1.0388277 0.29812912 0 1.3304641 6.2533028 189.52855 + 31000 1.0461658 0.21344416 0 1.2530714 5.3631154 189.52855 + 32000 1.0233681 0.27545017 0 1.2924222 5.9612896 189.52855 + 33000 1.1353086 0.20278244 0 1.3309953 5.7619128 189.52855 + 34000 1.0374791 0.29661216 0 1.327607 6.5124409 189.52855 + 35000 1.0752783 0.21684443 0 1.2854022 5.4759171 189.52855 + 36000 1.0383445 0.27068641 0 1.3025412 6.8367218 189.52855 + 37000 0.97341144 0.24034988 0 1.2076775 6.1335996 189.52855 + 38000 0.9285918 0.2737544 0 1.1965425 5.8750327 189.52855 + 39000 0.84869423 0.30079207 0 1.144182 6.8909326 189.52855 + 40000 0.88237131 0.26049171 0 1.1373482 6.3932981 189.52855 + 41000 0.90368591 0.21064132 0 1.1086792 5.5627232 189.52855 + 42000 0.93436749 0.20367569 0 1.1322034 5.1420052 189.52855 + 43000 0.91378588 0.26155533 0 1.16963 6.366756 189.52855 + 44000 0.91673608 0.25967314 0 1.1706796 6.0846334 189.52855 + 45000 1.0233334 0.25463562 0 1.2715732 6.0924255 189.52855 + 46000 0.96184729 0.35422095 0 1.3100567 7.0249175 189.52855 + 47000 1.134079 0.26196034 0 1.3889514 6.3476756 189.52855 + 48000 1.0552136 0.303812 0 1.3524305 6.6968927 189.52855 + 49000 1.1282184 0.2100955 0 1.3312626 5.8658659 189.52855 + 50000 1.0493816 0.31540438 0 1.3582274 6.6348173 189.52855 +Loop time of 1.09903 on 4 procs for 50000 steps with 160 atoms + +Performance: 19653623.953 tau/day, 45494.500 timesteps/s +94.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.057854 | 0.05974 | 0.062726 | 0.7 | 5.44 +Neigh | 0.047791 | 0.049863 | 0.054819 | 1.3 | 4.54 +Comm | 0.3581 | 0.38553 | 0.39784 | 2.6 | 35.08 +Output | 0.001116 | 0.0014414 | 0.0023859 | 1.4 | 0.13 +Modify | 0.41102 | 0.42642 | 0.4493 | 2.3 | 38.80 +Other | | 0.176 | | | 16.02 + +Nlocal: 40 ave 42 max 39 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Nghost: 36.5 ave 37 max 36 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 87.5 ave 94 max 81 min +Histogram: 1 1 0 0 0 0 0 0 1 1 + +Total # of neighbors = 350 +Ave neighs/atom = 2.1875 +Neighbor list builds = 5276 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/nemd/log.5Oct16.nemd.g++.1 b/examples/nemd/log.5Oct16.nemd.g++.1 deleted file mode 100644 index fb5abee6e2..0000000000 --- a/examples/nemd/log.5Oct16.nemd.g++.1 +++ /dev/null @@ -1,130 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d NEMD simulation - -units lj -atom_style atomic -dimension 2 - -lattice sq2 0.8442 -Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 -region box prism 0 10 0 8 -0.5 0.5 0 0 0 -create_box 2 box -Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 160 atoms -mass * 1.0 - -velocity all create 1.44 87287 loop geom - -region slice block 4 6 INF INF INF INF -set region slice type 2 - 40 settings made for type - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 1.0 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 - -fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 -fix 2 all deform 1 xy erate 0.01 remap v - -#dump 1 all custom 5000 dump.nemd id type x y z - -#dump 2 all image 1000 image.*.jpg type type adiam 1.2 -#dump_modify 2 pad 5 - -#dump 3 all movie 1000 movie.mpg type type adiam 1.2 -#dump_modify 3 pad 5 - -thermo 1000 - -run 50000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 24 19 3 -Memory usage per processor = 2.49357 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1.44 0 0 1.431 1.2080502 189.52855 - 1000 1.1326992 0.25863754 0 1.3842573 6.0588079 189.52855 - 2000 1.0158438 0.33502643 0 1.3445212 7.2638652 189.52855 - 3000 1.0968167 0.3149227 0 1.4048843 7.0653223 189.52855 - 4000 1.0070993 0.40611915 0 1.4069241 7.7283521 189.52855 - 5000 1.1153133 0.2674828 0 1.3758254 6.2949171 189.52855 - 6000 1.0170665 0.25843673 0 1.2691466 6.049412 189.52855 - 7000 1.0224605 0.20974914 0 1.2258193 5.5104976 189.52855 - 8000 0.96149374 0.24035439 0 1.1958388 5.4179146 189.52855 - 9000 0.87759014 0.2590493 0 1.1311545 5.8711239 189.52855 - 10000 0.83791968 0.23477897 0 1.0674617 5.666904 189.52855 - 11000 0.87702487 0.22958877 0 1.1011322 5.9068062 189.52855 - 12000 0.81507294 0.26375817 0 1.0737369 5.9166925 189.52855 - 13000 0.85655284 0.24676491 0 1.0979643 5.6918734 189.52855 - 14000 0.84369293 0.27818471 0 1.1166046 6.4146184 189.52855 - 15000 0.90052173 0.19836095 0 1.0932544 5.2690913 189.52855 - 16000 0.83836874 0.26921637 0 1.1023453 5.9579526 189.52855 - 17000 0.90492897 0.21933098 0 1.1186041 5.6042194 189.52855 - 18000 0.90113412 0.24880908 0 1.1443111 6.0634846 189.52855 - 19000 1.0160445 0.17252962 0 1.1822239 5.3149334 189.52855 - 20000 0.96217234 0.2414377 0 1.1975965 5.476653 189.52855 - 21000 0.98229664 0.27569118 0 1.2518485 5.9340174 189.52855 - 22000 1.0551763 0.26997615 0 1.3185576 6.2094112 189.52855 - 23000 1.051999 0.34076639 0 1.3861904 7.082385 189.52855 - 24000 1.1350071 0.23701844 0 1.3649317 6.1829742 189.52855 - 25000 1.0946409 0.33366032 0 1.4214597 7.1907559 189.52855 - 26000 1.1511799 0.24626808 0 1.3902531 5.8469984 189.52855 - 27000 1.1009203 0.25653085 0 1.3505704 6.1504287 189.52855 - 28000 1.0521302 0.2876798 0 1.3332342 5.9906187 189.52855 - 29000 1.0518465 0.21853 0 1.2638025 5.6577549 189.52855 - 30000 0.97264625 0.28758145 0 1.2541487 6.5769804 189.52855 - 31000 1.0133579 0.31575837 0 1.3227828 6.6650893 189.52855 - 32000 1.0714324 0.28757036 0 1.3523063 6.2682059 189.52855 - 33000 1.0739451 0.28062459 0 1.3478575 6.6862746 189.52855 - 34000 1.0056867 0.38289586 0 1.382297 7.1120131 189.52855 - 35000 1.0911349 0.26370939 0 1.3480247 6.1476048 189.52855 - 36000 1.0618618 0.28269593 0 1.3379211 6.9414608 189.52855 - 37000 1.0704991 0.29974994 0 1.3635585 7.0834346 189.52855 - 38000 1.1087507 0.2682201 0 1.3700411 5.8506019 189.52855 - 39000 1.1303733 0.22362416 0 1.3469326 5.2500269 189.52855 - 40000 1.0174248 0.28956571 0 1.3006316 6.4491571 189.52855 - 41000 0.95981887 0.29162143 0 1.2454414 6.4658646 189.52855 - 42000 0.88302144 0.30432252 0 1.1818251 6.7401923 189.52855 - 43000 0.93164419 0.25110308 0 1.1769245 5.9067383 189.52855 - 44000 0.98352598 0.23322873 0 1.2106077 5.5606585 189.52855 - 45000 1.0247245 0.26503082 0 1.2833508 6.533394 189.52855 - 46000 0.93004532 0.32277782 0 1.2470104 6.4689179 189.52855 - 47000 1.0653176 0.29185413 0 1.3505135 6.9534569 189.52855 - 48000 1.0401524 0.3420245 0 1.3756759 6.8016042 189.52855 - 49000 1.0023407 0.31833091 0 1.314407 6.7385662 189.52855 - 50000 1.0566272 0.28657142 0 1.3365947 6.261203 189.52855 -Loop time of 1.14585 on 1 procs for 50000 steps with 160 atoms - -Performance: 18850616.224 tau/day, 43635.686 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.19375 | 0.19375 | 0.19375 | 0.0 | 16.91 -Neigh | 0.17407 | 0.17407 | 0.17407 | 0.0 | 15.19 -Comm | 0.046638 | 0.046638 | 0.046638 | 0.0 | 4.07 -Output | 0.0003221 | 0.0003221 | 0.0003221 | 0.0 | 0.03 -Modify | 0.66586 | 0.66586 | 0.66586 | 0.0 | 58.11 -Other | | 0.06522 | | | 5.69 - -Nlocal: 160 ave 160 max 160 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 71 ave 71 max 71 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 362 ave 362 max 362 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 362 -Ave neighs/atom = 2.2625 -Neighbor list builds = 5256 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/nemd/log.5Oct16.nemd.g++.4 b/examples/nemd/log.5Oct16.nemd.g++.4 deleted file mode 100644 index 7738d64e2e..0000000000 --- a/examples/nemd/log.5Oct16.nemd.g++.4 +++ /dev/null @@ -1,130 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d NEMD simulation - -units lj -atom_style atomic -dimension 2 - -lattice sq2 0.8442 -Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 -region box prism 0 10 0 8 -0.5 0.5 0 0 0 -create_box 2 box -Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) - 2 by 2 by 1 MPI processor grid -create_atoms 1 box -Created 160 atoms -mass * 1.0 - -velocity all create 1.44 87287 loop geom - -region slice block 4 6 INF INF INF INF -set region slice type 2 - 40 settings made for type - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 1.0 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 - -fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 -fix 2 all deform 1 xy erate 0.01 remap v - -#dump 1 all custom 5000 dump.nemd id type x y z - -#dump 2 all image 1000 image.*.jpg type type adiam 1.2 -#dump_modify 2 pad 5 - -#dump 3 all movie 1000 movie.mpg type type adiam 1.2 -#dump_modify 3 pad 5 - -thermo 1000 - -run 50000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 24 19 3 -Memory usage per processor = 2.49198 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1.44 0 0 1.431 1.2080502 189.52855 - 1000 1.1682693 0.24486562 0 1.4058332 5.8092954 189.52855 - 2000 1.0928734 0.27609364 0 1.3621366 6.2237017 189.52855 - 3000 1.0895801 0.24812344 0 1.3308937 5.6987334 189.52855 - 4000 1.0231536 0.23938192 0 1.2561408 5.6395384 189.52855 - 5000 0.92980496 0.29549086 0 1.2194845 6.7361058 189.52855 - 6000 0.94654468 0.27175873 0 1.2123875 6.1830354 189.52855 - 7000 1.04513 0.19555104 0 1.234149 5.3099904 189.52855 - 8000 0.90165043 0.33774203 0 1.2337571 6.8441345 189.52855 - 9000 1.0559475 0.21527383 0 1.2646217 5.3936713 189.52855 - 10000 1.0316023 0.25162907 0 1.2767839 6.0630699 189.52855 - 11000 1.0057873 0.1929355 0 1.1924366 5.1939416 189.52855 - 12000 0.95976424 0.23631857 0 1.1900843 5.1197849 189.52855 - 13000 0.96228689 0.2359206 0 1.1921932 5.8485377 189.52855 - 14000 0.92347491 0.28934379 0 1.207047 6.7279587 189.52855 - 15000 0.98798195 0.25310368 0 1.2349107 5.5744542 189.52855 - 16000 0.93800257 0.39455603 0 1.3266961 7.5939651 189.52855 - 17000 1.1781148 0.21856228 0 1.3893138 5.8347428 189.52855 - 18000 1.1292943 0.26429204 0 1.3865283 6.0510955 189.52855 - 19000 1.1047406 0.37926848 0 1.4771045 8.1596576 189.52855 - 20000 1.1716353 0.34662527 0 1.5109379 7.4616642 189.52855 - 21000 1.1630831 0.35981763 0 1.5156314 7.1024447 189.52855 - 22000 1.1249714 0.28308559 0 1.4010259 6.4004855 189.52855 - 23000 1.1062056 0.28618757 0 1.3854794 6.4957851 189.52855 - 24000 1.0588756 0.31727536 0 1.369533 6.987661 189.52855 - 25000 1.0379506 0.30773124 0 1.3391947 6.3814122 189.52855 - 26000 1.0316899 0.25596718 0 1.281209 6.4851096 189.52855 - 27000 0.95909019 0.32282679 0 1.2759227 6.480673 189.52855 - 28000 1.0224651 0.24795447 0 1.2640291 5.5846145 189.52855 - 29000 0.98739892 0.24878333 0 1.230011 5.6749101 189.52855 - 30000 1.0099165 0.22964407 0 1.2332486 5.3791167 189.52855 - 31000 0.93350481 0.2879577 0 1.2156281 6.2148818 189.52855 - 32000 0.99089487 0.22340991 0 1.2081117 5.639 189.52855 - 33000 0.89519123 0.26943351 0 1.1590298 6.3869898 189.52855 - 34000 0.891093 0.28473528 0 1.1702589 6.0284238 189.52855 - 35000 0.83575157 0.25811245 0 1.0886406 6.4030425 189.52855 - 36000 0.81108815 0.26558543 0 1.0716043 6.3037393 189.52855 - 37000 0.92476501 0.18404704 0 1.1030323 5.3793557 189.52855 - 38000 0.85121163 0.2792429 0 1.1251345 5.9668051 189.52855 - 39000 0.90345348 0.2399627 0 1.1377696 6.1440023 189.52855 - 40000 0.93871579 0.2217328 0 1.1545816 4.9454727 189.52855 - 41000 1.0132854 0.25226008 0 1.2592124 6.2541531 189.52855 - 42000 0.98600788 0.27213553 0 1.2519809 6.0321859 189.52855 - 43000 1.0635948 0.27086236 0 1.3278097 6.6622232 189.52855 - 44000 1.0332292 0.36613701 0 1.3929085 7.4935675 189.52855 - 45000 1.1168224 0.3374366 0 1.4472788 7.3625776 189.52855 - 46000 1.0725949 0.37916007 0 1.4450513 6.8897095 189.52855 - 47000 1.0940234 0.35474661 0 1.4419324 7.4781317 189.52855 - 48000 1.1093597 0.26705754 0 1.3694837 5.8401116 189.52855 - 49000 1.0803976 0.29555751 0 1.3692026 6.4769008 189.52855 - 50000 1.0150244 0.29822696 0 1.3069075 6.4417197 189.52855 -Loop time of 0.89762 on 4 procs for 50000 steps with 160 atoms - -Performance: 24063642.337 tau/day, 55702.876 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.049302 | 0.050204 | 0.051269 | 0.3 | 5.59 -Neigh | 0.047954 | 0.048719 | 0.049847 | 0.3 | 5.43 -Comm | 0.32267 | 0.33536 | 0.34668 | 1.5 | 37.36 -Output | 0.00076675 | 0.00081015 | 0.00093508 | 0.3 | 0.09 -Modify | 0.30312 | 0.31088 | 0.31853 | 1.0 | 34.63 -Other | | 0.1516 | | | 16.89 - -Nlocal: 40 ave 42 max 38 min -Histogram: 1 0 1 0 0 0 0 1 0 1 -Nghost: 35.5 ave 37 max 34 min -Histogram: 1 0 0 1 0 0 1 0 0 1 -Neighs: 88.75 ave 96 max 79 min -Histogram: 1 0 1 0 0 0 0 0 0 2 - -Total # of neighbors = 355 -Ave neighs/atom = 2.21875 -Neighbor list builds = 5284 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/obstacle/log.5Oct16.obstacle.g++.1 b/examples/obstacle/log.27Nov18.obstacle.g++.1 similarity index 82% rename from examples/obstacle/log.5Oct16.obstacle.g++.1 rename to examples/obstacle/log.27Nov18.obstacle.g++.1 index 7d1a1a8c7d..68db45ee7e 100644 --- a/examples/obstacle/log.5Oct16.obstacle.g++.1 +++ b/examples/obstacle/log.27Nov18.obstacle.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d LJ obstacle flow dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (51.3743 22.2457 0.321089) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 840 atoms + Time spent = 0.0004704 secs mass 1 1.0 mass 2 1.0 @@ -80,7 +82,7 @@ fix 9 all enforce2d timestep 0.003 thermo 1000 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 100 dump.obstacle @@ -92,13 +94,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 25000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 73 32 1 -Memory usage per processor = 2.47903 Mbytes + binsize = 0.71123, bins = 73 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.055 | 3.055 | 3.055 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1.0027471 0 0 0.68849216 0.46317653 1143.0857 1000 1 -0.33689286 0 0.34971312 1.2905426 1286.7728 @@ -126,20 +133,20 @@ Step Temp E_pair E_mol TotEng Press Volume 23000 1 -0.39249509 0 0.29411089 0.97187435 1459.6771 24000 1 -0.33410442 0 0.35250156 0.93960021 1463.5903 25000 1 -0.37437615 0 0.31222983 0.9644765 1464.9391 -Loop time of 1.64517 on 1 procs for 25000 steps with 769 atoms +Loop time of 1.98053 on 1 procs for 25000 steps with 769 atoms -Performance: 3938793.608 tau/day, 15195.963 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3271856.949 tau/day, 12622.905 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.5054 | 0.5054 | 0.5054 | 0.0 | 30.72 -Neigh | 0.17887 | 0.17887 | 0.17887 | 0.0 | 10.87 -Comm | 0.022527 | 0.022527 | 0.022527 | 0.0 | 1.37 -Output | 0.00023794 | 0.00023794 | 0.00023794 | 0.0 | 0.01 -Modify | 0.85127 | 0.85127 | 0.85127 | 0.0 | 51.74 -Other | | 0.08687 | | | 5.28 +Pair | 0.46219 | 0.46219 | 0.46219 | 0.0 | 23.34 +Neigh | 0.17 | 0.17 | 0.17 | 0.0 | 8.58 +Comm | 0.029093 | 0.029093 | 0.029093 | 0.0 | 1.47 +Output | 0.00041389 | 0.00041389 | 0.00041389 | 0.0 | 0.02 +Modify | 1.22 | 1.22 | 1.22 | 0.0 | 61.60 +Other | | 0.09888 | | | 4.99 Nlocal: 769 ave 769 max 769 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/obstacle/log.5Oct16.obstacle.g++.4 b/examples/obstacle/log.27Nov18.obstacle.g++.4 similarity index 82% rename from examples/obstacle/log.5Oct16.obstacle.g++.4 rename to examples/obstacle/log.27Nov18.obstacle.g++.4 index 5bd84740e4..ed80fabf9b 100644 --- a/examples/obstacle/log.5Oct16.obstacle.g++.4 +++ b/examples/obstacle/log.27Nov18.obstacle.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d LJ obstacle flow dimension 2 @@ -18,6 +19,7 @@ Created orthogonal box = (0 0 -0.321089) to (51.3743 22.2457 0.321089) 4 by 1 by 1 MPI processor grid create_atoms 1 box Created 840 atoms + Time spent = 0.000343561 secs mass 1 1.0 mass 2 1.0 @@ -80,7 +82,7 @@ fix 9 all enforce2d timestep 0.003 thermo 1000 thermo_modify temp mobile -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) #dump 1 all atom 100 dump.obstacle @@ -92,13 +94,18 @@ WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474 run 25000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.42246 ghost atom cutoff = 1.42246 - binsize = 0.71123 -> bins = 73 32 1 -Memory usage per processor = 2.47142 Mbytes + binsize = 0.71123, bins = 73 32 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.043 | 3.043 | 3.043 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 1.0004177 0 0 0.68689281 0.46210058 1143.0857 1000 1 -0.32494012 0 0.36166587 1.2240503 1282.5239 @@ -126,20 +133,20 @@ Step Temp E_pair E_mol TotEng Press Volume 23000 1 -0.37327871 0 0.31332728 1.0623185 1453.1342 24000 1 -0.40040333 0 0.28620265 0.94983886 1459.4461 25000 1 -0.37645924 0 0.31014674 1.0526044 1458.7191 -Loop time of 0.821326 on 4 procs for 25000 steps with 769 atoms +Loop time of 0.950647 on 4 procs for 25000 steps with 769 atoms -Performance: 7889678.376 tau/day, 30438.574 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 6816413.742 tau/day, 26297.893 timesteps/s +95.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.064561 | 0.12703 | 0.20657 | 15.5 | 15.47 -Neigh | 0.036315 | 0.04798 | 0.06249 | 4.4 | 5.84 -Comm | 0.14793 | 0.21791 | 0.27951 | 10.6 | 26.53 -Output | 0.00043583 | 0.00046438 | 0.00054574 | 0.2 | 0.06 -Modify | 0.27754 | 0.31239 | 0.3371 | 3.9 | 38.03 -Other | | 0.1156 | | | 14.07 +Pair | 0.068658 | 0.11988 | 0.18819 | 13.5 | 12.61 +Neigh | 0.034307 | 0.046836 | 0.063159 | 5.0 | 4.93 +Comm | 0.1325 | 0.21714 | 0.27078 | 11.3 | 22.84 +Output | 0.00052547 | 0.00096804 | 0.0022867 | 0.0 | 0.10 +Modify | 0.37752 | 0.41834 | 0.48768 | 6.5 | 44.01 +Other | | 0.1475 | | | 15.51 Nlocal: 192.25 ave 243 max 151 min Histogram: 1 1 0 0 0 0 1 0 0 1 From 46bf4b7efb7952ff807d840df1d7dc29f9d0b2c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 14:51:25 -0500 Subject: [PATCH 231/273] update log files for peptide, peri, pour and python examples --- ...eptide.g++.1 => log.27Nov18.peptide.g++.1} | 92 +++---- ...eptide.g++.4 => log.27Nov18.peptide.g++.4} | 100 ++++---- ...i.eps.g++.1 => log.27Nov18.peri.eps.g++.1} | 45 ++-- ...i.eps.g++.4 => log.27Nov18.peri.eps.g++.4} | 53 ++-- ...i.lps.g++.1 => log.27Nov18.peri.lps.g++.1} | 43 ++-- ...i.lps.g++.4 => log.27Nov18.peri.lps.g++.4} | 55 +++-- ...i.pmb.g++.1 => log.27Nov18.peri.pmb.g++.1} | 29 +-- ...i.pmb.g++.4 => log.27Nov18.peri.pmb.g++.4} | 39 +-- ...i.ves.g++.1 => log.27Nov18.peri.ves.g++.1} | 45 ++-- ...i.ves.g++.4 => log.27Nov18.peri.ves.g++.4} | 55 +++-- ...our.2d.g++.1 => log.27Nov18.pour.2d.g++.1} | 36 +-- ...our.2d.g++.4 => log.27Nov18.pour.2d.g++.4} | 34 +-- ...+.1 => log.27Nov18.pour.2d.molecule.g++.1} | 46 ++-- ...+.4 => log.27Nov18.pour.2d.molecule.g++.4} | 46 ++-- ...ct16.pour.g++.1 => log.27Nov18.pour.g++.1} | 56 +++-- ...ct16.pour.g++.4 => log.27Nov18.pour.g++.4} | 54 ++-- .../log.27Nov18.fix_python_invoke.g++.1 | 100 ++++++++ .../log.27Nov18.fix_python_invoke.g++.4 | 100 ++++++++ ...log.27Nov18.fix_python_move_nve_melt.g++.1 | 77 ++++++ ...log.27Nov18.fix_python_move_nve_melt.g++.4 | 77 ++++++ ...27Nov18.fix_python_move_nve_melt_opt.g++.1 | 77 ++++++ ...27Nov18.fix_python_move_nve_melt_opt.g++.4 | 77 ++++++ .../log.27Nov18.pair_python_coulomb.g++.1 | 178 ++++++++++++++ .../log.27Nov18.pair_python_coulomb.g++.4 | 178 ++++++++++++++ ...1 => log.27Nov18.pair_python_hybrid.g++.1} | 111 ++++++--- ...4 => log.27Nov18.pair_python_hybrid.g++.4} | 111 ++++++--- ...+.1 => log.27Nov18.pair_python_long.g++.1} | 60 ++--- ...+.4 => log.27Nov18.pair_python_long.g++.4} | 60 ++--- ...+.1 => log.27Nov18.pair_python_melt.g++.1} | 67 ++--- ...+.4 => log.27Nov18.pair_python_melt.g++.4} | 67 ++--- ...+.1 => log.27Nov18.pair_python_spce.g++.1} | 30 +-- ...+.4 => log.27Nov18.pair_python_spce.g++.4} | 30 +-- ....1 => log.27Nov18.pair_python_table.g++.1} | 27 +- ....4 => log.27Nov18.pair_python_table.g++.4} | 25 +- ....python.g++.1 => log.27Nov18.python.g++.1} | 231 +++++++----------- ....python.g++.4 => log.27Nov18.python.g++.4} | 231 +++++++----------- .../python/log.4May17.pair_python_coulomb.1 | 178 -------------- .../log.4May17.pair_python_coulomb.g++.1 | 138 ----------- .../log.4May17.pair_python_coulomb.g++.4 | 138 ----------- 39 files changed, 1843 insertions(+), 1353 deletions(-) rename examples/peptide/{log.5Oct16.peptide.g++.1 => log.27Nov18.peptide.g++.1} (67%) rename examples/peptide/{log.5Oct16.peptide.g++.4 => log.27Nov18.peptide.g++.4} (64%) rename examples/peri/{log.6Jul17.peri.eps.g++.1 => log.27Nov18.peri.eps.g++.1} (65%) rename examples/peri/{log.6Jul17.peri.eps.g++.4 => log.27Nov18.peri.eps.g++.4} (62%) rename examples/peri/{log.6Jul17.peri.lps.g++.1 => log.27Nov18.peri.lps.g++.1} (66%) rename examples/peri/{log.6Jul17.peri.lps.g++.4 => log.27Nov18.peri.lps.g++.4} (61%) rename examples/peri/{log.6Jul17.peri.pmb.g++.1 => log.27Nov18.peri.pmb.g++.1} (80%) rename examples/peri/{log.6Jul17.peri.pmb.g++.4 => log.27Nov18.peri.pmb.g++.4} (77%) rename examples/peri/{log.6Jul17.peri.ves.g++.1 => log.27Nov18.peri.ves.g++.1} (65%) rename examples/peri/{log.6Jul17.peri.ves.g++.4 => log.27Nov18.peri.ves.g++.4} (61%) rename examples/pour/{log.5Oct16.pour.2d.g++.1 => log.27Nov18.pour.2d.g++.1} (78%) rename examples/pour/{log.5Oct16.pour.2d.g++.4 => log.27Nov18.pour.2d.g++.4} (78%) rename examples/pour/{log.5Oct16.pour.2d.molecule.g++.1 => log.27Nov18.pour.2d.molecule.g++.1} (78%) rename examples/pour/{log.5Oct16.pour.2d.molecule.g++.4 => log.27Nov18.pour.2d.molecule.g++.4} (78%) rename examples/pour/{log.5Oct16.pour.g++.1 => log.27Nov18.pour.g++.1} (77%) rename examples/pour/{log.5Oct16.pour.g++.4 => log.27Nov18.pour.g++.4} (77%) create mode 100644 examples/python/log.27Nov18.fix_python_invoke.g++.1 create mode 100644 examples/python/log.27Nov18.fix_python_invoke.g++.4 create mode 100644 examples/python/log.27Nov18.fix_python_move_nve_melt.g++.1 create mode 100644 examples/python/log.27Nov18.fix_python_move_nve_melt.g++.4 create mode 100644 examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.1 create mode 100644 examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.4 create mode 100644 examples/python/log.27Nov18.pair_python_coulomb.g++.1 create mode 100644 examples/python/log.27Nov18.pair_python_coulomb.g++.4 rename examples/python/{log.4May17.pair_python_hybrid.g++.1 => log.27Nov18.pair_python_hybrid.g++.1} (65%) rename examples/python/{log.4May17.pair_python_hybrid.g++.4 => log.27Nov18.pair_python_hybrid.g++.4} (65%) rename examples/python/{log.4May17.pair_python_long.g++.1 => log.27Nov18.pair_python_long.g++.1} (63%) rename examples/python/{log.4May17.pair_python_long.g++.4 => log.27Nov18.pair_python_long.g++.4} (63%) rename examples/python/{log.4May17.pair_python_melt.g++.1 => log.27Nov18.pair_python_melt.g++.1} (73%) rename examples/python/{log.4May17.pair_python_melt.g++.4 => log.27Nov18.pair_python_melt.g++.4} (73%) rename examples/python/{log.4May17.pair_python_spce.g++.1 => log.27Nov18.pair_python_spce.g++.1} (79%) rename examples/python/{log.4May17.pair_python_spce.g++.4 => log.27Nov18.pair_python_spce.g++.4} (79%) rename examples/python/{log.4May17.pair_python_table.g++.1 => log.27Nov18.pair_python_table.g++.1} (77%) rename examples/python/{log.4May17.pair_python_table.g++.4 => log.27Nov18.pair_python_table.g++.4} (78%) rename examples/python/{log.5Oct16.python.g++.1 => log.27Nov18.python.g++.1} (53%) rename examples/python/{log.5Oct16.python.g++.4 => log.27Nov18.python.g++.4} (53%) delete mode 100644 examples/python/log.4May17.pair_python_coulomb.1 delete mode 100644 examples/python/log.4May17.pair_python_coulomb.g++.1 delete mode 100644 examples/python/log.4May17.pair_python_coulomb.g++.4 diff --git a/examples/peptide/log.5Oct16.peptide.g++.1 b/examples/peptide/log.27Nov18.peptide.g++.1 similarity index 67% rename from examples/peptide/log.5Oct16.peptide.g++.1 rename to examples/peptide/log.27Nov18.peptide.g++.1 index 19b9646778..3999ca36cb 100644 --- a/examples/peptide/log.5Oct16.peptide.g++.1 +++ b/examples/peptide/log.27Nov18.peptide.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide units real @@ -70,7 +71,7 @@ group peptide type <= 12 run 300 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 @@ -79,12 +80,17 @@ WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) using double precision FFTs 3d grid and FFT values/proc = 10648 3375 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 5 5 5 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard SHAKE stats (type/ave/delta) on step 0 4 1.111 1.44264e-05 6 0.996998 7.26967e-06 @@ -94,13 +100,13 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Memory usage per processor = 15.5934 Mbytes +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes ---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- TotEng = -5237.4580 KinEng = 1134.9186 Temp = 282.1005 PotEng = -6372.3766 E_bond = 16.5572 E_angle = 36.3726 E_dihed = 15.5190 E_impro = 1.9426 E_vdwl = 692.8945 E_coul = 26772.2646 E_long = -33907.9271 Press = -837.0112 ----------------- Step 50 ----- CPU = 0.9457 (sec) ---------------- +---------------- Step 50 ----- CPU = 1.0190 (sec) ---------------- TotEng = -5247.5537 KinEng = 1132.4000 Temp = 281.4745 PotEng = -6379.9537 E_bond = 12.2118 E_angle = 31.7365 E_dihed = 18.8145 E_impro = 2.3611 E_vdwl = 658.1785 @@ -114,77 +120,77 @@ SHAKE stats (type/ave/delta) on step 100 14 0.96 0 18 0.957201 5.3796e-06 31 104.52 0.000502278 ----------------- Step 100 ----- CPU = 1.9163 (sec) ---------------- +---------------- Step 100 ----- CPU = 2.0505 (sec) ---------------- TotEng = -5257.9979 KinEng = 1078.0553 Temp = 267.9663 PotEng = -6336.0532 E_bond = 14.4829 E_angle = 43.4429 E_dihed = 15.2569 E_impro = 2.3160 E_vdwl = 708.3273 E_coul = 26786.6829 E_long = -33906.5621 Press = -648.6819 ----------------- Step 150 ----- CPU = 2.9286 (sec) ---------------- -TotEng = -5287.2798 KinEng = 1098.6028 Temp = 273.0737 +---------------- Step 150 ----- CPU = 3.1208 (sec) ---------------- +TotEng = -5287.2799 KinEng = 1098.6028 Temp = 273.0737 PotEng = -6385.8827 E_bond = 17.4925 E_angle = 32.8594 E_dihed = 15.1624 E_impro = 1.6522 E_vdwl = 736.9675 E_coul = 26717.2655 E_long = -33907.2821 Press = -333.1829 SHAKE stats (type/ave/delta) on step 200 4 1.111 2.18698e-07 - 6 0.997 1.50562e-07 - 8 1.08 6.57498e-08 + 6 0.997 1.50563e-07 + 8 1.08 6.57499e-08 10 1.111 5.54188e-07 - 12 1.08 1.98839e-07 + 12 1.08 1.9884e-07 14 0.96 0 18 0.957201 3.59627e-06 31 104.52 0.000388335 ----------------- Step 200 ----- CPU = 3.8703 (sec) ---------------- -TotEng = -5308.4467 KinEng = 1100.4874 Temp = 273.5421 +---------------- Step 200 ----- CPU = 4.1320 (sec) ---------------- +TotEng = -5308.4468 KinEng = 1100.4873 Temp = 273.5421 PotEng = -6408.9341 E_bond = 18.2714 E_angle = 33.3040 E_dihed = 16.8150 E_impro = 2.6051 E_vdwl = 686.3221 -E_coul = 26736.1319 E_long = -33902.3837 Press = -1470.3400 ----------------- Step 250 ----- CPU = 4.8652 (sec) ---------------- -TotEng = -5294.1569 KinEng = 1071.0938 Temp = 266.2359 -PotEng = -6365.2507 E_bond = 14.2013 E_angle = 39.1996 +E_coul = 26736.1319 E_long = -33902.3837 Press = -1470.3401 +---------------- Step 250 ----- CPU = 5.2131 (sec) ---------------- +TotEng = -5294.1568 KinEng = 1071.0940 Temp = 266.2360 +PotEng = -6365.2508 E_bond = 14.2013 E_angle = 39.1996 E_dihed = 19.4585 E_impro = 3.1407 E_vdwl = 753.4590 -E_coul = 26714.0040 E_long = -33908.7139 Press = -189.6059 +E_coul = 26714.0039 E_long = -33908.7139 Press = -189.6057 SHAKE stats (type/ave/delta) on step 300 - 4 1.111 3.79044e-06 + 4 1.111 3.79043e-06 6 0.997001 3.6052e-06 8 1.08 2.09369e-06 10 1.111 5.6484e-06 - 12 1.08 2.10677e-06 + 12 1.08 2.10676e-06 14 0.96 0 - 18 0.957202 7.72576e-06 - 31 104.52 0.000806204 ----------------- Step 300 ----- CPU = 5.8596 (sec) ---------------- -TotEng = -5251.3637 KinEng = 1123.7718 Temp = 279.3298 -PotEng = -6375.1355 E_bond = 14.2206 E_angle = 38.4274 -E_dihed = 18.1674 E_impro = 2.3734 E_vdwl = 715.3473 -E_coul = 26745.4074 E_long = -33909.0791 Press = -471.5505 -Loop time of 5.85959 on 1 procs for 300 steps with 2004 atoms + 18 0.957202 7.72571e-06 + 31 104.52 0.000806203 +---------------- Step 300 ----- CPU = 6.2919 (sec) ---------------- +TotEng = -5251.3662 KinEng = 1123.7719 Temp = 279.3299 +PotEng = -6375.1381 E_bond = 14.2206 E_angle = 38.4274 +E_dihed = 18.1674 E_impro = 2.3734 E_vdwl = 715.3476 +E_coul = 26745.4045 E_long = -33909.0791 Press = -471.5904 +Loop time of 6.29195 on 1 procs for 300 steps with 2004 atoms -Performance: 8.847 ns/day, 2.713 hours/ns, 51.198 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 8.239 ns/day, 2.913 hours/ns, 47.680 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.6289 | 4.6289 | 4.6289 | 0.0 | 79.00 -Bond | 0.013405 | 0.013405 | 0.013405 | 0.0 | 0.23 -Kspace | 0.47821 | 0.47821 | 0.47821 | 0.0 | 8.16 -Neigh | 0.64447 | 0.64447 | 0.64447 | 0.0 | 11.00 -Comm | 0.026137 | 0.026137 | 0.026137 | 0.0 | 0.45 -Output | 0.00018501 | 0.00018501 | 0.00018501 | 0.0 | 0.00 -Modify | 0.062095 | 0.062095 | 0.062095 | 0.0 | 1.06 -Other | | 0.006195 | | | 0.11 +Pair | 4.8228 | 4.8228 | 4.8228 | 0.0 | 76.65 +Bond | 0.0094063 | 0.0094063 | 0.0094063 | 0.0 | 0.15 +Kspace | 0.523 | 0.523 | 0.523 | 0.0 | 8.31 +Neigh | 0.82602 | 0.82602 | 0.82602 | 0.0 | 13.13 +Comm | 0.03742 | 0.03742 | 0.03742 | 0.0 | 0.59 +Output | 0.00022697 | 0.00022697 | 0.00022697 | 0.0 | 0.00 +Modify | 0.068182 | 0.068182 | 0.068182 | 0.0 | 1.08 +Other | | 0.00493 | | | 0.08 Nlocal: 2004 ave 2004 max 2004 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 11185 ave 11185 max 11185 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 708018 ave 708018 max 708018 min +Neighs: 708019 ave 708019 max 708019 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 708018 -Ave neighs/atom = 353.302 +Total # of neighbors = 708019 +Ave neighs/atom = 353.303 Ave special neighs/atom = 2.34032 Neighbor list builds = 26 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:06 diff --git a/examples/peptide/log.5Oct16.peptide.g++.4 b/examples/peptide/log.27Nov18.peptide.g++.4 similarity index 64% rename from examples/peptide/log.5Oct16.peptide.g++.4 rename to examples/peptide/log.27Nov18.peptide.g++.4 index 5d43e6e546..bb9e3771c4 100644 --- a/examples/peptide/log.5Oct16.peptide.g++.4 +++ b/examples/peptide/log.27Nov18.peptide.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide units real @@ -70,7 +71,7 @@ group peptide type <= 12 run 300 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 @@ -79,12 +80,17 @@ WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) using double precision FFTs 3d grid and FFT values/proc = 4312 960 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 - binsize = 6 -> bins = 5 5 5 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard SHAKE stats (type/ave/delta) on step 0 4 1.111 1.44264e-05 6 0.996998 7.26967e-06 @@ -94,13 +100,13 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Memory usage per processor = 14.8928 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes ---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- TotEng = -5237.4580 KinEng = 1134.9186 Temp = 282.1005 PotEng = -6372.3766 E_bond = 16.5572 E_angle = 36.3726 E_dihed = 15.5190 E_impro = 1.9426 E_vdwl = 692.8945 E_coul = 26772.2646 E_long = -33907.9271 Press = -837.0112 ----------------- Step 50 ----- CPU = 0.2741 (sec) ---------------- +---------------- Step 50 ----- CPU = 0.2858 (sec) ---------------- TotEng = -5247.5537 KinEng = 1132.4000 Temp = 281.4745 PotEng = -6379.9537 E_bond = 12.2118 E_angle = 31.7365 E_dihed = 18.8145 E_impro = 2.3611 E_vdwl = 658.1785 @@ -114,65 +120,65 @@ SHAKE stats (type/ave/delta) on step 100 14 0.96 0 18 0.957201 5.3796e-06 31 104.52 0.000502278 ----------------- Step 100 ----- CPU = 0.5371 (sec) ---------------- +---------------- Step 100 ----- CPU = 0.5744 (sec) ---------------- TotEng = -5257.9979 KinEng = 1078.0553 Temp = 267.9663 PotEng = -6336.0532 E_bond = 14.4829 E_angle = 43.4429 E_dihed = 15.2569 E_impro = 2.3160 E_vdwl = 708.3273 -E_coul = 26786.6829 E_long = -33906.5621 Press = -648.6819 ----------------- Step 150 ----- CPU = 0.8054 (sec) ---------------- -TotEng = -5287.2799 KinEng = 1098.6028 Temp = 273.0737 -PotEng = -6385.8827 E_bond = 17.4925 E_angle = 32.8594 +E_coul = 26786.6829 E_long = -33906.5621 Press = -648.6820 +---------------- Step 150 ----- CPU = 0.8756 (sec) ---------------- +TotEng = -5287.2798 KinEng = 1098.6028 Temp = 273.0737 +PotEng = -6385.8826 E_bond = 17.4925 E_angle = 32.8594 E_dihed = 15.1624 E_impro = 1.6522 E_vdwl = 736.9675 -E_coul = 26717.2655 E_long = -33907.2821 Press = -333.1830 +E_coul = 26717.2656 E_long = -33907.2821 Press = -333.1828 SHAKE stats (type/ave/delta) on step 200 4 1.111 2.18699e-07 6 0.997 1.50563e-07 - 8 1.08 6.57501e-08 - 10 1.111 5.54188e-07 - 12 1.08 1.98841e-07 + 8 1.08 6.575e-08 + 10 1.111 5.54187e-07 + 12 1.08 1.9884e-07 14 0.96 0 18 0.957201 3.59627e-06 - 31 104.52 0.000388336 ----------------- Step 200 ----- CPU = 1.0652 (sec) ---------------- -TotEng = -5308.4465 KinEng = 1100.4875 Temp = 273.5422 -PotEng = -6408.9340 E_bond = 18.2714 E_angle = 33.3040 + 31 104.52 0.000388335 +---------------- Step 200 ----- CPU = 1.1602 (sec) ---------------- +TotEng = -5308.4467 KinEng = 1100.4874 Temp = 273.5421 +PotEng = -6408.9341 E_bond = 18.2714 E_angle = 33.3040 E_dihed = 16.8150 E_impro = 2.6051 E_vdwl = 686.3221 -E_coul = 26736.1321 E_long = -33902.3837 Press = -1470.3400 ----------------- Step 250 ----- CPU = 1.3409 (sec) ---------------- -TotEng = -5294.1570 KinEng = 1071.0939 Temp = 266.2360 -PotEng = -6365.2509 E_bond = 14.2013 E_angle = 39.1996 -E_dihed = 19.4585 E_impro = 3.1407 E_vdwl = 753.4591 -E_coul = 26714.0037 E_long = -33908.7139 Press = -189.6059 +E_coul = 26736.1320 E_long = -33902.3837 Press = -1470.3400 +---------------- Step 250 ----- CPU = 1.4629 (sec) ---------------- +TotEng = -5294.1567 KinEng = 1071.0938 Temp = 266.2359 +PotEng = -6365.2505 E_bond = 14.2013 E_angle = 39.1996 +E_dihed = 19.4585 E_impro = 3.1407 E_vdwl = 753.4589 +E_coul = 26714.0043 E_long = -33908.7139 Press = -189.6068 SHAKE stats (type/ave/delta) on step 300 4 1.111 3.79043e-06 - 6 0.997001 3.60519e-06 - 8 1.08 2.09368e-06 - 10 1.111 5.64839e-06 - 12 1.08 2.10676e-06 + 6 0.997001 3.6052e-06 + 8 1.08 2.09369e-06 + 10 1.111 5.6484e-06 + 12 1.08 2.10677e-06 14 0.96 0 - 18 0.957202 7.72573e-06 - 31 104.52 0.000806208 ----------------- Step 300 ----- CPU = 1.6199 (sec) ---------------- -TotEng = -5251.3639 KinEng = 1123.7721 Temp = 279.3299 -PotEng = -6375.1360 E_bond = 14.2206 E_angle = 38.4274 -E_dihed = 18.1674 E_impro = 2.3734 E_vdwl = 715.3470 -E_coul = 26745.4071 E_long = -33909.0790 Press = -471.5569 -Loop time of 1.61992 on 4 procs for 300 steps with 2004 atoms + 18 0.957202 7.72579e-06 + 31 104.52 0.000806203 +---------------- Step 300 ----- CPU = 1.7662 (sec) ---------------- +TotEng = -5251.3662 KinEng = 1123.7712 Temp = 279.3297 +PotEng = -6375.1374 E_bond = 14.2206 E_angle = 38.4274 +E_dihed = 18.1674 E_impro = 2.3734 E_vdwl = 715.3474 +E_coul = 26745.4053 E_long = -33909.0790 Press = -471.5904 +Loop time of 1.76629 on 4 procs for 300 steps with 2004 atoms -Performance: 32.002 ns/day, 0.750 hours/ns, 185.194 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 29.350 ns/day, 0.818 hours/ns, 169.847 timesteps/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.1484 | 1.17 | 1.1865 | 1.5 | 72.23 -Bond | 0.0011752 | 0.003831 | 0.0069602 | 4.0 | 0.24 -Kspace | 0.16316 | 0.1798 | 0.20413 | 3.9 | 11.10 -Neigh | 0.16885 | 0.16895 | 0.16902 | 0.0 | 10.43 -Comm | 0.046479 | 0.047215 | 0.047759 | 0.2 | 2.91 -Output | 0.00024033 | 0.00025702 | 0.00030375 | 0.2 | 0.02 -Modify | 0.04556 | 0.045949 | 0.046353 | 0.2 | 2.84 -Other | | 0.003923 | | | 0.24 +Pair | 1.2044 | 1.2351 | 1.2721 | 2.3 | 69.92 +Bond | 0.0013924 | 0.0034139 | 0.0057151 | 3.2 | 0.19 +Kspace | 0.17476 | 0.21195 | 0.2407 | 5.3 | 12.00 +Neigh | 0.21273 | 0.21286 | 0.21293 | 0.0 | 12.05 +Comm | 0.042942 | 0.046074 | 0.047584 | 0.9 | 2.61 +Output | 0.00025845 | 0.00033492 | 0.00055695 | 0.0 | 0.02 +Modify | 0.049944 | 0.051619 | 0.054278 | 0.8 | 2.92 +Other | | 0.004988 | | | 0.28 Nlocal: 501 ave 508 max 490 min Histogram: 1 0 0 0 0 0 1 1 0 1 diff --git a/examples/peri/log.6Jul17.peri.eps.g++.1 b/examples/peri/log.27Nov18.peri.eps.g++.1 similarity index 65% rename from examples/peri/log.6Jul17.peri.eps.g++.1 rename to examples/peri/log.27Nov18.peri.eps.g++.1 index 6aa4314d53..379f3f75c9 100644 --- a/examples/peri/log.6Jul17.peri.eps.g++.1 +++ b/examples/peri/log.27Nov18.peri.eps.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 1 by 1 by 1 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.00100374 secs pair_style peri/eps pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 10.0e8 @@ -72,44 +73,44 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 50.29 | 50.29 | 50.29 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 8.3466308e+24 247103.03 0 849681.45 8.0295601e+11 5.0030006e-07 - 200 1.1784921e+27 1098605.6 0 86178912 1.0246967e+14 5.5353162e-07 - 300 2.6263212e+27 4118581.6 0 1.9372377e+08 1.662415e+14 7.6036043e-07 - 400 3.3085888e+27 9397203.3 0 2.4825816e+08 1.561692e+14 1.0196674e-06 - 500 3.9151799e+27 18408722 0 3.0106204e+08 1.5298661e+14 1.2317127e-06 - 600 6.2936721e+27 11346143 0 4.6571282e+08 1.9645007e+14 1.5419242e-06 - 700 1.2721597e+28 3830223.2 0 9.2225588e+08 3.0235577e+14 2.0250441e-06 - 800 1.3190107e+28 2831668.7 0 9.5508099e+08 2.4853932e+14 2.5542553e-06 - 900 1.3166045e+28 1911868.6 0 9.524241e+08 1.9729649e+14 3.2117896e-06 - 1000 1.3159578e+28 1995827.6 0 9.5204114e+08 1.6722163e+14 3.7875695e-06 -Loop time of 72.5574 on 1 procs for 1000 steps with 3487 atoms + 100 9.7403734e+24 248692.93 0 951891.49 9.3703576e+11 5.0030006e-07 + 200 1.220493e+27 1011231.9 0 89123756 1.0636834e+14 5.5224782e-07 + 300 2.7274231e+27 4549425.2 0 2.0145358e+08 1.7250255e+14 7.6097098e-07 + 400 3.3665092e+27 13347641 0 2.5639011e+08 1.5828139e+14 1.0236725e-06 + 500 3.8995641e+27 14196430 0 2.9572238e+08 1.5145191e+14 1.2392314e-06 + 600 4.6668832e+27 23135807 0 3.6005775e+08 1.478168e+14 1.5195473e-06 + 700 1.1847301e+28 8126622 0 8.6343315e+08 2.9204301e+14 1.9524671e-06 + 800 1.2328889e+28 4646514.3 0 8.9472087e+08 2.2467312e+14 2.6410944e-06 + 900 1.2277283e+28 2668877.7 0 8.8901759e+08 1.671177e+14 3.5358262e-06 + 1000 1.2260912e+28 1587002.9 0 8.8675386e+08 1.29707e+14 4.5495712e-06 +Loop time of 34.8143 on 1 procs for 1000 steps with 3487 atoms -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads +96.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 71.779 | 71.779 | 71.779 | 0.0 | 98.93 -Neigh | 0.5596 | 0.5596 | 0.5596 | 0.0 | 0.77 -Comm | 0.0040631 | 0.0040631 | 0.0040631 | 0.0 | 0.01 -Output | 0.00056624 | 0.00056624 | 0.00056624 | 0.0 | 0.00 -Modify | 0.18403 | 0.18403 | 0.18403 | 0.0 | 0.25 -Other | | 0.03016 | | | 0.04 +Pair | 34.045 | 34.045 | 34.045 | 0.0 | 97.79 +Neigh | 0.63254 | 0.63254 | 0.63254 | 0.0 | 1.82 +Comm | 0.0025852 | 0.0025852 | 0.0025852 | 0.0 | 0.01 +Output | 0.00035906 | 0.00035906 | 0.00035906 | 0.0 | 0.00 +Modify | 0.11784 | 0.11784 | 0.11784 | 0.0 | 0.34 +Other | | 0.01593 | | | 0.05 Nlocal: 3487 ave 3487 max 3487 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 569177 ave 569177 max 569177 min +Neighs: 546591 ave 546591 max 546591 min Histogram: 1 0 0 0 0 0 0 0 0 0 FullNghs: 1.20908e+06 ave 1.20908e+06 max 1.20908e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 1209076 Ave neighs/atom = 346.738 -Neighbor list builds = 40 +Neighbor list builds = 45 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:01:12 +Total wall time: 0:00:34 diff --git a/examples/peri/log.6Jul17.peri.eps.g++.4 b/examples/peri/log.27Nov18.peri.eps.g++.4 similarity index 62% rename from examples/peri/log.6Jul17.peri.eps.g++.4 rename to examples/peri/log.27Nov18.peri.eps.g++.4 index 1423ec4637..bccd5cd25a 100644 --- a/examples/peri/log.6Jul17.peri.eps.g++.4 +++ b/examples/peri/log.27Nov18.peri.eps.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 2 by 1 by 2 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000587225 secs pair_style peri/eps pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 10.0e8 @@ -72,44 +73,44 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 44.77 | 45.04 | 45.14 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 8.3466308e+24 247103.03 0 849681.45 8.0295601e+11 5.0030006e-07 - 200 1.1784921e+27 1098605.6 0 86178912 1.0246967e+14 5.5353162e-07 - 300 2.6263212e+27 4118581.6 0 1.9372377e+08 1.662415e+14 7.6036043e-07 - 400 3.3085888e+27 9397203.3 0 2.4825816e+08 1.561692e+14 1.0196674e-06 - 500 3.9151799e+27 18408722 0 3.0106204e+08 1.5298661e+14 1.2317127e-06 - 600 6.2936721e+27 11346143 0 4.6571282e+08 1.9645007e+14 1.5419242e-06 - 700 1.2721597e+28 3830223.2 0 9.2225588e+08 3.0235577e+14 2.0250441e-06 - 800 1.3190107e+28 2831668.7 0 9.5508099e+08 2.4853932e+14 2.5542553e-06 - 900 1.3166045e+28 1911869.3 0 9.524241e+08 1.9729649e+14 3.2117896e-06 - 1000 1.3159578e+28 1995833.9 0 9.5204114e+08 1.6722163e+14 3.7875695e-06 -Loop time of 29.6266 on 4 procs for 1000 steps with 3487 atoms + 100 2.3613868e+26 2297417.8 0 19345263 2.2716828e+13 5.0030006e-07 + 200 3.9573281e+27 28896934 0 3.1459311e+08 3.6928392e+14 5.1576607e-07 + 300 8.7809254e+27 38915502 0 6.7284747e+08 6.4053658e+14 6.5979263e-07 + 400 1.3210949e+28 35344681 0 9.8909868e+08 7.0953264e+14 8.9613355e-07 + 500 1.7324732e+28 21092574 0 1.2718379e+09 7.4083646e+14 1.1255254e-06 + 600 2.1194595e+28 11349855 0 1.5414769e+09 6.6250164e+14 1.5397467e-06 + 700 2.316318e+28 2515600.8 0 1.6747631e+09 5.0111859e+14 2.2246862e-06 + 800 2.363319e+28 1731461.2 0 1.7079109e+09 4.0277805e+14 2.8240193e-06 + 900 2.3668922e+28 870525.69 0 1.7096296e+09 3.1718257e+14 3.5915363e-06 + 1000 2.3654433e+28 789707.52 0 1.7085028e+09 2.5538989e+14 4.4577935e-06 +Loop time of 5.11902 on 4 procs for 1000 steps with 3487 atoms -98.8% CPU use with 4 MPI tasks x 1 OpenMP threads +90.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 25.905 | 26.18 | 26.326 | 3.2 | 88.37 -Neigh | 0.15352 | 0.1872 | 0.22394 | 7.6 | 0.63 -Comm | 3.0374 | 3.1471 | 3.3731 | 7.5 | 10.62 -Output | 0.00047588 | 0.00062978 | 0.00097752 | 0.0 | 0.00 -Modify | 0.073521 | 0.081854 | 0.093222 | 2.7 | 0.28 -Other | | 0.02989 | | | 0.10 +Pair | 3.1161 | 3.9019 | 4.7582 | 30.3 | 76.22 +Neigh | 0.0701 | 0.080061 | 0.089326 | 3.0 | 1.56 +Comm | 0.22296 | 1.0644 | 1.8357 | 57.0 | 20.79 +Output | 0.00028729 | 0.00058514 | 0.0013847 | 0.0 | 0.01 +Modify | 0.041605 | 0.043229 | 0.044626 | 0.6 | 0.84 +Other | | 0.02887 | | | 0.56 -Nlocal: 871.75 ave 908 max 838 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Nghost: 1368.25 ave 1402 max 1332 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Neighs: 142294 ave 159233 max 124729 min +Nlocal: 871.75 ave 947 max 799 min Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1011 ave 1087 max 936 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 91271.8 ave 92650 max 90045 min +Histogram: 1 1 0 0 0 0 1 0 0 1 FullNghs: 302269 ave 346070 max 260820 min Histogram: 1 0 0 0 2 0 0 0 0 1 Total # of neighbors = 1209076 Ave neighs/atom = 346.738 -Neighbor list builds = 40 +Neighbor list builds = 24 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:29 +Total wall time: 0:00:05 diff --git a/examples/peri/log.6Jul17.peri.lps.g++.1 b/examples/peri/log.27Nov18.peri.lps.g++.1 similarity index 66% rename from examples/peri/log.6Jul17.peri.lps.g++.1 rename to examples/peri/log.27Nov18.peri.lps.g++.1 index 4b2ac532d1..0b9f4b4e0b 100644 --- a/examples/peri/log.6Jul17.peri.lps.g++.1 +++ b/examples/peri/log.27Nov18.peri.lps.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 1 by 1 by 1 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.00101972 secs pair_style peri/lps pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 @@ -72,35 +73,35 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 34.91 | 34.91 | 34.91 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 1.684629e+24 133446.65 0 255067.11 1.6206343e+11 5.0030006e-07 - 200 1.1380148e+27 684478.05 0 82842557 9.9178307e+13 5.5225839e-07 - 300 2.5659218e+27 5944645.9 0 1.9118934e+08 1.6231114e+14 7.6086254e-07 - 400 2.9916164e+27 13677434 0 2.2965481e+08 1.4081705e+14 1.0224963e-06 - 500 3.3570343e+27 11130894 0 2.5348933e+08 1.2577633e+14 1.2846002e-06 - 600 3.9506165e+27 6986672.5 0 2.9219831e+08 1.2659956e+14 1.5019096e-06 - 700 7.8366157e+27 11716082 0 5.7747436e+08 1.9480124e+14 1.9361899e-06 - 800 8.2483231e+27 4671647.2 0 6.0015282e+08 1.7040064e+14 2.3297298e-06 - 900 8.2720965e+27 1249680.9 0 5.9844715e+08 1.4117116e+14 2.8202052e-06 - 1000 8.2441462e+27 2278265.6 0 5.9745788e+08 1.234652e+14 3.213751e-06 -Loop time of 62.3833 on 1 procs for 1000 steps with 3487 atoms + 100 2.0851116e+24 132640.06 0 283173.04 2.0059034e+11 5.0030006e-07 + 200 1.1421456e+27 733330.77 0 83189631 9.9580342e+13 5.5202528e-07 + 300 2.5694547e+27 6192900.7 0 1.9169265e+08 1.6253438e+14 7.6086363e-07 + 400 3.0375813e+27 7013786 0 2.2630957e+08 1.4286927e+14 1.0232935e-06 + 500 3.4006176e+27 5347550.9 0 2.5085245e+08 1.2727968e+14 1.2859078e-06 + 600 3.7690314e+27 8040942.9 0 2.8014319e+08 1.2082801e+14 1.5013199e-06 + 700 7.6688193e+27 8282231 0 5.6192658e+08 1.9074258e+14 1.935049e-06 + 800 8.2147783e+27 3439316.5 0 5.9649874e+08 1.6954721e+14 2.3319342e-06 + 900 8.1767735e+27 1827759 0 5.9214346e+08 1.38875e+14 2.8337987e-06 + 1000 8.1478191e+27 1415059 0 5.8964042e+08 1.2086486e+14 3.2445347e-06 +Loop time of 27.5943 on 1 procs for 1000 steps with 3487 atoms -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 61.608 | 61.608 | 61.608 | 0.0 | 98.76 -Neigh | 0.57177 | 0.57177 | 0.57177 | 0.0 | 0.92 -Comm | 0.0030825 | 0.0030825 | 0.0030825 | 0.0 | 0.00 -Output | 0.00051951 | 0.00051951 | 0.00051951 | 0.0 | 0.00 -Modify | 0.17278 | 0.17278 | 0.17278 | 0.0 | 0.28 -Other | | 0.02745 | | | 0.04 +Pair | 26.946 | 26.946 | 26.946 | 0.0 | 97.65 +Neigh | 0.52412 | 0.52412 | 0.52412 | 0.0 | 1.90 +Comm | 0.001683 | 0.001683 | 0.001683 | 0.0 | 0.01 +Output | 0.00032282 | 0.00032282 | 0.00032282 | 0.0 | 0.00 +Modify | 0.10716 | 0.10716 | 0.10716 | 0.0 | 0.39 +Other | | 0.01544 | | | 0.06 Nlocal: 3487 ave 3487 max 3487 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 576568 ave 576568 max 576568 min +Neighs: 578212 ave 578212 max 578212 min Histogram: 1 0 0 0 0 0 0 0 0 0 FullNghs: 1.20908e+06 ave 1.20908e+06 max 1.20908e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -112,4 +113,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:01:02 +Total wall time: 0:00:27 diff --git a/examples/peri/log.6Jul17.peri.lps.g++.4 b/examples/peri/log.27Nov18.peri.lps.g++.4 similarity index 61% rename from examples/peri/log.6Jul17.peri.lps.g++.4 rename to examples/peri/log.27Nov18.peri.lps.g++.4 index 04244f0123..4f8b53f246 100644 --- a/examples/peri/log.6Jul17.peri.lps.g++.4 +++ b/examples/peri/log.27Nov18.peri.lps.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 2 by 1 by 2 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000591278 secs pair_style peri/lps pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 @@ -72,44 +73,44 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 29.4 | 29.66 | 29.76 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 1.684629e+24 133446.65 0 255067.11 1.6206343e+11 5.0030006e-07 - 200 1.1380148e+27 684478.05 0 82842557 9.9178307e+13 5.5225839e-07 - 300 2.5659218e+27 5944645.9 0 1.9118934e+08 1.6231114e+14 7.6086254e-07 - 400 2.9916164e+27 13677434 0 2.2965481e+08 1.4081705e+14 1.0224963e-06 - 500 3.3570343e+27 11130894 0 2.5348933e+08 1.2577633e+14 1.2846002e-06 - 600 3.9506165e+27 6986672.5 0 2.9219831e+08 1.2659956e+14 1.5019096e-06 - 700 7.8366157e+27 11716082 0 5.7747436e+08 1.9480124e+14 1.9361899e-06 - 800 8.2483231e+27 4671647.2 0 6.0015282e+08 1.7040064e+14 2.3297298e-06 - 900 8.2720965e+27 1249680.9 0 5.9844715e+08 1.4117116e+14 2.8202052e-06 - 1000 8.2441489e+27 2277476.2 0 5.9745729e+08 1.2346524e+14 3.213751e-06 -Loop time of 23.2656 on 4 procs for 1000 steps with 3487 atoms + 100 2.1708413e+26 2019616.1 0 17691833 2.0883757e+13 5.0030006e-07 + 200 2.6858201e+27 23091889 0 2.1699255e+08 2.5837916e+14 5.0030006e-07 + 300 7.7773248e+27 36337377 0 5.9781519e+08 5.5903929e+14 6.6957466e-07 + 400 1.2392524e+28 26946130 0 9.2161463e+08 5.8015586e+14 1.0280783e-06 + 500 1.6748989e+28 24398485 0 1.2335785e+09 5.5317919e+14 1.4572494e-06 + 600 2.1137718e+28 12455731 0 1.5384766e+09 5.144781e+14 1.9774354e-06 + 700 2.2843381e+28 3012521.8 0 1.6521724e+09 4.1591669e+14 2.6434138e-06 + 800 2.30994e+28 1986584 0 1.6696295e+09 3.1911076e+14 3.4839376e-06 + 900 2.3325118e+28 935517.5 0 1.684874e+09 2.5083968e+14 4.4754707e-06 + 1000 2.3453028e+28 646658.88 0 1.6938195e+09 1.9996924e+14 5.6447777e-06 +Loop time of 3.68562 on 4 procs for 1000 steps with 3487 atoms -99.2% CPU use with 4 MPI tasks x 1 OpenMP threads +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.801 | 21.119 | 21.525 | 6.3 | 90.78 -Neigh | 0.13851 | 0.18557 | 0.22747 | 8.5 | 0.80 -Comm | 1.5175 | 1.8689 | 2.1386 | 18.0 | 8.03 -Output | 0.00049806 | 0.00059026 | 0.00071931 | 0.0 | 0.00 -Modify | 0.063441 | 0.066235 | 0.069135 | 0.9 | 0.28 -Other | | 0.02496 | | | 0.11 +Pair | 2.3895 | 2.9098 | 3.4454 | 22.8 | 78.95 +Neigh | 0.089031 | 0.10631 | 0.12931 | 5.1 | 2.88 +Comm | 0.084373 | 0.61215 | 1.1154 | 48.5 | 16.61 +Output | 0.00026274 | 0.00058717 | 0.0014296 | 0.0 | 0.02 +Modify | 0.030758 | 0.032229 | 0.034897 | 0.9 | 0.87 +Other | | 0.02456 | | | 0.67 -Nlocal: 871.75 ave 939 max 805 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Nghost: 1343.25 ave 1410 max 1276 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Neighs: 144142 ave 176488 max 113797 min -Histogram: 1 0 1 0 0 0 1 0 0 1 +Nlocal: 871.75 ave 955 max 804 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 1052.5 ave 1144 max 960 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 94652.8 ave 98974 max 91771 min +Histogram: 1 1 0 0 1 0 0 0 0 1 FullNghs: 302269 ave 346070 max 260820 min Histogram: 1 0 0 0 2 0 0 0 0 1 Total # of neighbors = 1209076 Ave neighs/atom = 346.738 -Neighbor list builds = 37 +Neighbor list builds = 31 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:23 +Total wall time: 0:00:03 diff --git a/examples/peri/log.6Jul17.peri.pmb.g++.1 b/examples/peri/log.27Nov18.peri.pmb.g++.1 similarity index 80% rename from examples/peri/log.6Jul17.peri.pmb.g++.1 rename to examples/peri/log.27Nov18.peri.pmb.g++.1 index 84a439674b..d00ff7e97c 100644 --- a/examples/peri/log.6Jul17.peri.pmb.g++.1 +++ b/examples/peri/log.27Nov18.peri.pmb.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 1 by 1 by 1 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000993729 secs pair_style peri/pmb pair_coeff * * 1.6863e22 0.0015001 0.0005 0.25 @@ -79,28 +80,28 @@ Step Temp E_pair E_mol TotEng Press Volume 500 4.2580877e+27 20212686 0 3.2762196e+08 1.6249923e+14 1.2611723e-06 600 5.5126512e+27 30861342 0 4.2884284e+08 1.7320038e+14 1.531873e-06 700 1.1807414e+28 23119941 0 8.7554687e+08 2.9477434e+14 1.9278632e-06 - 800 1.2424839e+28 2407365.1 0 8.994088e+08 2.3787786e+14 2.5138992e-06 - 900 1.2358397e+28 4532424.3 0 8.9673716e+08 1.9097316e+14 3.1145903e-06 - 1000 1.2341048e+28 3219355.8 0 8.9417154e+08 1.5968585e+14 3.7196039e-06 -Loop time of 28.565 on 1 procs for 1000 steps with 3487 atoms + 800 1.2424839e+28 2407361.6 0 8.994088e+08 2.3787786e+14 2.5138992e-06 + 900 1.2358395e+28 4532520.6 0 8.9673706e+08 1.9097312e+14 3.1145903e-06 + 1000 1.2341057e+28 3219939.5 0 8.9417279e+08 1.5968597e+14 3.7196039e-06 +Loop time of 15.3451 on 1 procs for 1000 steps with 3487 atoms -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 27.721 | 27.721 | 27.721 | 0.0 | 97.04 -Neigh | 0.66353 | 0.66353 | 0.66353 | 0.0 | 2.32 -Comm | 0.0027969 | 0.0027969 | 0.0027969 | 0.0 | 0.01 -Output | 0.00042295 | 0.00042295 | 0.00042295 | 0.0 | 0.00 -Modify | 0.1566 | 0.1566 | 0.1566 | 0.0 | 0.55 -Other | | 0.02086 | | | 0.07 +Pair | 14.575 | 14.575 | 14.575 | 0.0 | 94.98 +Neigh | 0.65203 | 0.65203 | 0.65203 | 0.0 | 4.25 +Comm | 0.0019367 | 0.0019367 | 0.0019367 | 0.0 | 0.01 +Output | 0.00032711 | 0.00032711 | 0.00032711 | 0.0 | 0.00 +Modify | 0.10225 | 0.10225 | 0.10225 | 0.0 | 0.67 +Other | | 0.01342 | | | 0.09 Nlocal: 3487 ave 3487 max 3487 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 567132 ave 567132 max 567132 min +Neighs: 567140 ave 567140 max 567140 min Histogram: 1 0 0 0 0 0 0 0 0 0 FullNghs: 1.20908e+06 ave 1.20908e+06 max 1.20908e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -112,4 +113,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:28 +Total wall time: 0:00:15 diff --git a/examples/peri/log.6Jul17.peri.pmb.g++.4 b/examples/peri/log.27Nov18.peri.pmb.g++.4 similarity index 77% rename from examples/peri/log.6Jul17.peri.pmb.g++.4 rename to examples/peri/log.27Nov18.peri.pmb.g++.4 index 637b2cc26a..da5b6e0e97 100644 --- a/examples/peri/log.6Jul17.peri.pmb.g++.4 +++ b/examples/peri/log.27Nov18.peri.pmb.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 2 by 1 by 2 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000591755 secs pair_style peri/pmb pair_coeff * * 1.6863e22 0.0015001 0.0005 0.25 @@ -79,29 +80,29 @@ Step Temp E_pair E_mol TotEng Press Volume 500 4.2580877e+27 20212686 0 3.2762196e+08 1.6249923e+14 1.2611723e-06 600 5.5126512e+27 30861342 0 4.2884284e+08 1.7320038e+14 1.531873e-06 700 1.1807414e+28 23119941 0 8.7554687e+08 2.9477434e+14 1.9278632e-06 - 800 1.2424839e+28 2407365.2 0 8.994088e+08 2.3787786e+14 2.5138992e-06 - 900 1.2358397e+28 4532423 0 8.9673716e+08 1.9097316e+14 3.1145903e-06 - 1000 1.2341048e+28 3219408.7 0 8.9417158e+08 1.5968585e+14 3.7196039e-06 -Loop time of 9.59889 on 4 procs for 1000 steps with 3487 atoms + 800 1.2424839e+28 2407361.5 0 8.994088e+08 2.3787786e+14 2.5138992e-06 + 900 1.2358395e+28 4532520.1 0 8.9673706e+08 1.9097312e+14 3.1145903e-06 + 1000 1.2341057e+28 3219974.3 0 8.9417286e+08 1.5968598e+14 3.7196039e-06 +Loop time of 4.86638 on 4 procs for 1000 steps with 3487 atoms -99.2% CPU use with 4 MPI tasks x 1 OpenMP threads +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.9131 | 8.1341 | 8.3286 | 6.7 | 84.74 -Neigh | 0.19736 | 0.22539 | 0.25643 | 5.6 | 2.35 -Comm | 0.92843 | 1.1536 | 1.402 | 18.4 | 12.02 -Output | 0.00053358 | 0.00059688 | 0.00070548 | 0.0 | 0.01 -Modify | 0.060774 | 0.06358 | 0.068375 | 1.2 | 0.66 -Other | | 0.02165 | | | 0.23 +Pair | 3.524 | 3.9207 | 4.4499 | 17.8 | 80.57 +Neigh | 0.12891 | 0.16928 | 0.21015 | 9.0 | 3.48 +Comm | 0.1204 | 0.70321 | 1.1349 | 46.1 | 14.45 +Output | 0.00028253 | 0.00053787 | 0.0012429 | 0.0 | 0.01 +Modify | 0.03231 | 0.033227 | 0.034578 | 0.5 | 0.68 +Other | | 0.03944 | | | 0.81 -Nlocal: 871.75 ave 920 max 829 min -Histogram: 1 0 0 0 2 0 0 0 0 1 -Nghost: 1343.25 ave 1386 max 1295 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 141783 ave 157099 max 127518 min -Histogram: 2 0 0 0 0 0 0 0 1 1 +Nlocal: 871.75 ave 920 max 824 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 1343.25 ave 1391 max 1295 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 141785 ave 170754 max 115891 min +Histogram: 1 1 0 0 0 0 0 1 0 1 FullNghs: 302269 ave 346070 max 260820 min Histogram: 1 0 0 0 2 0 0 0 0 1 @@ -112,4 +113,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:09 +Total wall time: 0:00:04 diff --git a/examples/peri/log.6Jul17.peri.ves.g++.1 b/examples/peri/log.27Nov18.peri.ves.g++.1 similarity index 65% rename from examples/peri/log.6Jul17.peri.ves.g++.1 rename to examples/peri/log.27Nov18.peri.ves.g++.1 index 3d1d156d4a..8f39af5bbb 100644 --- a/examples/peri/log.6Jul17.peri.ves.g++.1 +++ b/examples/peri/log.27Nov18.peri.ves.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 1 by 1 by 1 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000948906 secs pair_style peri/ves pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 0.5 0.001 @@ -72,44 +73,44 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 65.41 | 65.41 | 65.41 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 8.3392177e+24 247040.57 0 849083.8 8.0224286e+11 5.0030006e-07 - 200 1.1849022e+27 1158030.5 0 86701105 1.0301578e+14 5.5359205e-07 - 300 2.6287222e+27 4389155.1 0 1.9416767e+08 1.6636212e+14 7.6050375e-07 - 400 3.2718778e+27 7458219 0 2.4366885e+08 1.5439709e+14 1.0199269e-06 - 500 3.8413187e+27 6151611.4 0 2.8347258e+08 1.5008974e+14 1.2318007e-06 - 600 6.1409926e+27 18424316 0 4.6176842e+08 1.9507512e+14 1.5151227e-06 - 700 1.0046131e+28 11478344 0 7.3675086e+08 2.4228512e+14 1.9956447e-06 - 800 1.0402132e+28 4421233.6 0 7.5539495e+08 2.0512303e+14 2.4407262e-06 - 900 1.0419515e+28 7223261.3 0 7.594519e+08 1.6647307e+14 3.0124137e-06 - 1000 1.0503737e+28 2621490.6 0 7.6093049e+08 1.4315634e+14 3.5313793e-06 -Loop time of 77.2175 on 1 procs for 1000 steps with 3487 atoms + 100 9.7323839e+24 248625.39 0 951247.15 9.3626715e+11 5.0030006e-07 + 200 1.2061753e+27 1013477.4 0 88092352 1.0509747e+14 5.5236899e-07 + 300 2.7144154e+27 3853028.1 0 1.998181e+08 1.7162586e+14 7.6121038e-07 + 400 3.40253e+27 12536380 0 2.5817934e+08 1.5995767e+14 1.0237832e-06 + 500 3.9896399e+27 9604773.5 0 2.9763367e+08 1.5530851e+14 1.2363731e-06 + 600 5.1484768e+27 20065080 0 3.9175529e+08 1.6320898e+14 1.5182588e-06 + 700 1.1341683e+28 8156461.7 0 8.269603e+08 2.765964e+14 1.9735225e-06 + 800 1.1679489e+28 4475262.6 0 8.4766672e+08 2.1589017e+14 2.6037667e-06 + 900 1.1714785e+28 2839888 0 8.4857954e+08 1.7092697e+14 3.2986395e-06 + 1000 1.1716494e+28 1690965.6 0 8.4755402e+08 1.3801485e+14 4.0858554e-06 +Loop time of 27.0077 on 1 procs for 1000 steps with 3487 atoms -99.4% CPU use with 1 MPI tasks x 1 OpenMP threads +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 76.421 | 76.421 | 76.421 | 0.0 | 98.97 -Neigh | 0.56616 | 0.56616 | 0.56616 | 0.0 | 0.73 -Comm | 0.0038247 | 0.0038247 | 0.0038247 | 0.0 | 0.00 -Output | 0.00051951 | 0.00051951 | 0.00051951 | 0.0 | 0.00 -Modify | 0.19434 | 0.19434 | 0.19434 | 0.0 | 0.25 -Other | | 0.03197 | | | 0.04 +Pair | 26.294 | 26.294 | 26.294 | 0.0 | 97.36 +Neigh | 0.5863 | 0.5863 | 0.5863 | 0.0 | 2.17 +Comm | 0.0051315 | 0.0051315 | 0.0051315 | 0.0 | 0.02 +Output | 0.00033832 | 0.00033832 | 0.00033832 | 0.0 | 0.00 +Modify | 0.10736 | 0.10736 | 0.10736 | 0.0 | 0.40 +Other | | 0.01489 | | | 0.06 Nlocal: 3487 ave 3487 max 3487 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 561942 ave 561942 max 561942 min +Neighs: 539960 ave 539960 max 539960 min Histogram: 1 0 0 0 0 0 0 0 0 0 FullNghs: 1.20908e+06 ave 1.20908e+06 max 1.20908e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 1209076 Ave neighs/atom = 346.738 -Neighbor list builds = 37 +Neighbor list builds = 42 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:01:17 +Total wall time: 0:00:27 diff --git a/examples/peri/log.6Jul17.peri.ves.g++.4 b/examples/peri/log.27Nov18.peri.ves.g++.4 similarity index 61% rename from examples/peri/log.6Jul17.peri.ves.g++.4 rename to examples/peri/log.27Nov18.peri.ves.g++.4 index bd05d58e9f..c71d41da9c 100644 --- a/examples/peri/log.6Jul17.peri.ves.g++.4 +++ b/examples/peri/log.27Nov18.peri.ves.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (6 Jul 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # small Peridynamic cylinder hit by projectile @@ -18,6 +18,7 @@ Created orthogonal box = (-0.005 -0.005 -0.005) to (0.005 0 0.005) 2 by 1 by 2 MPI processor grid create_atoms 1 region target Created 3487 atoms + Time spent = 0.000587225 secs pair_style peri/ves pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 0.5 0.001 @@ -72,44 +73,44 @@ Peridynamic bonds: Per MPI rank memory allocation (min/avg/max) = 59.9 | 60.16 | 60.26 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 0 0 0 0 5.0030006e-07 - 100 8.3392177e+24 247040.57 0 849083.8 8.0224286e+11 5.0030006e-07 - 200 1.1849022e+27 1158030.5 0 86701105 1.0301578e+14 5.5359205e-07 - 300 2.6287222e+27 4389155.1 0 1.9416767e+08 1.6636212e+14 7.6050375e-07 - 400 3.2718778e+27 7458219 0 2.4366885e+08 1.5439709e+14 1.0199269e-06 - 500 3.8413187e+27 6151611.4 0 2.8347258e+08 1.5008974e+14 1.2318007e-06 - 600 6.1409926e+27 18424316 0 4.6176842e+08 1.9507512e+14 1.5151227e-06 - 700 1.0046131e+28 11478344 0 7.3675086e+08 2.4228512e+14 1.9956447e-06 - 800 1.0402132e+28 4421233.6 0 7.5539495e+08 2.0512303e+14 2.4407262e-06 - 900 1.0419515e+28 7223258.7 0 7.594519e+08 1.6647307e+14 3.0124137e-06 - 1000 1.0503738e+28 2621480.4 0 7.6093057e+08 1.4315636e+14 3.5313793e-06 -Loop time of 25.9768 on 4 procs for 1000 steps with 3487 atoms + 100 2.3611484e+26 2297126.2 0 19343251 2.2714535e+13 5.0030006e-07 + 200 3.9696282e+27 27477818 0 3.1406199e+08 3.7046187e+14 5.1572409e-07 + 300 8.8025822e+27 32485477 0 6.6798094e+08 7.1158578e+14 5.9537958e-07 + 400 1.3288413e+28 37587857 0 9.9693436e+08 7.7688957e+14 8.2323713e-07 + 500 1.777552e+28 24842920 0 1.3081325e+09 7.3838229e+14 1.1586497e-06 + 600 2.1408855e+28 11023553 0 1.5566189e+09 6.4536834e+14 1.5966028e-06 + 700 2.2659932e+28 3494159 0 1.63941e+09 4.9466351e+14 2.2047524e-06 + 800 2.285628e+28 2220143.6 0 1.6523112e+09 3.8214902e+14 2.8786171e-06 + 900 2.2903476e+28 904133.04 0 1.6544025e+09 2.790555e+14 3.9502258e-06 + 1000 2.29097e+28 617974.86 0 1.6545656e+09 2.2599918e+14 4.8789193e-06 +Loop time of 3.73704 on 4 procs for 1000 steps with 3487 atoms -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads +98.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 22.455 | 23.348 | 24.175 | 14.1 | 89.88 -Neigh | 0.14472 | 0.18294 | 0.2299 | 8.6 | 0.70 -Comm | 1.4715 | 2.3485 | 3.2075 | 44.8 | 9.04 -Output | 0.000489 | 0.00059682 | 0.0007987 | 0.0 | 0.00 -Modify | 0.063634 | 0.071411 | 0.076907 | 1.9 | 0.27 -Other | | 0.02506 | | | 0.10 +Pair | 2.3248 | 2.876 | 3.5364 | 25.9 | 76.96 +Neigh | 0.072288 | 0.081806 | 0.091866 | 3.1 | 2.19 +Comm | 0.078943 | 0.72589 | 1.2634 | 50.3 | 19.42 +Output | 0.00028825 | 0.00057435 | 0.001307 | 0.0 | 0.02 +Modify | 0.031366 | 0.032767 | 0.035145 | 0.8 | 0.88 +Other | | 0.02002 | | | 0.54 -Nlocal: 871.75 ave 896 max 852 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 1293.25 ave 1313 max 1269 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 140486 ave 167239 max 121255 min -Histogram: 2 0 0 0 0 0 1 0 0 1 +Nlocal: 871.75 ave 978 max 770 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 1004.75 ave 1107 max 906 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 90070.2 ave 94639 max 83936 min +Histogram: 1 0 0 0 0 1 0 1 0 1 FullNghs: 302269 ave 346070 max 260820 min Histogram: 1 0 0 0 2 0 0 0 0 1 Total # of neighbors = 1209076 Ave neighs/atom = 346.738 -Neighbor list builds = 37 +Neighbor list builds = 25 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:26 +Total wall time: 0:00:03 diff --git a/examples/pour/log.5Oct16.pour.2d.g++.1 b/examples/pour/log.27Nov18.pour.2d.g++.1 similarity index 78% rename from examples/pour/log.5Oct16.pour.2d.g++.1 rename to examples/pour/log.27Nov18.pour.2d.g++.1 index f80a61a55f..d8b615816f 100644 --- a/examples/pour/log.5Oct16.pour.2d.g++.1 +++ b/examples/pour/log.27Nov18.pour.2d.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour 2d granular particles into container dimension 2 @@ -40,7 +41,7 @@ compute 1 all erotate/sphere thermo_style custom step atoms ke c_1 vol thermo 1000 thermo_modify lost ignore norm no -compute_modify thermo_temp dynamic yes +compute_modify thermo_temp dynamic/dof yes #dump id all atom 250 dump.pour @@ -52,13 +53,18 @@ compute_modify thermo_temp dynamic yes run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 1.2 - binsize = 0.6 -> bins = 167 84 2 -Memory usage per processor = 2.75186 Mbytes + binsize = 0.6, bins = 167 84 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/2d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.804 | 5.804 | 5.804 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 5000 1000 224 201.77464 0 5000 @@ -86,20 +92,20 @@ Step Atoms KinEng c_1 Volume 23000 1000 16.115382 7.9435503 5000 24000 1000 11.971003 5.9411126 5000 25000 1000 10.404117 4.3811155 5000 -Loop time of 3.00132 on 1 procs for 25000 steps with 1000 atoms +Loop time of 2.72875 on 1 procs for 25000 steps with 1000 atoms -Performance: 719682.852 tau/day, 8329.663 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 791570.958 tau/day, 9161.701 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2554 | 1.2554 | 1.2554 | 0.0 | 41.83 -Neigh | 0.4288 | 0.4288 | 0.4288 | 0.0 | 14.29 -Comm | 0.0078034 | 0.0078034 | 0.0078034 | 0.0 | 0.26 -Output | 0.0003016 | 0.0003016 | 0.0003016 | 0.0 | 0.01 -Modify | 1.177 | 1.177 | 1.177 | 0.0 | 39.21 -Other | | 0.132 | | | 4.40 +Pair | 0.95597 | 0.95597 | 0.95597 | 0.0 | 35.03 +Neigh | 0.38475 | 0.38475 | 0.38475 | 0.0 | 14.10 +Comm | 0.010862 | 0.010862 | 0.010862 | 0.0 | 0.40 +Output | 0.00054383 | 0.00054383 | 0.00054383 | 0.0 | 0.02 +Modify | 1.2364 | 1.2364 | 1.2364 | 0.0 | 45.31 +Other | | 0.1402 | | | 5.14 Nlocal: 1000 ave 1000 max 1000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -112,4 +118,4 @@ Total # of neighbors = 2374 Ave neighs/atom = 2.374 Neighbor list builds = 2089 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:02 diff --git a/examples/pour/log.5Oct16.pour.2d.g++.4 b/examples/pour/log.27Nov18.pour.2d.g++.4 similarity index 78% rename from examples/pour/log.5Oct16.pour.2d.g++.4 rename to examples/pour/log.27Nov18.pour.2d.g++.4 index ee88b94284..a491cf4866 100644 --- a/examples/pour/log.5Oct16.pour.2d.g++.4 +++ b/examples/pour/log.27Nov18.pour.2d.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour 2d granular particles into container dimension 2 @@ -40,7 +41,7 @@ compute 1 all erotate/sphere thermo_style custom step atoms ke c_1 vol thermo 1000 thermo_modify lost ignore norm no -compute_modify thermo_temp dynamic yes +compute_modify thermo_temp dynamic/dof yes #dump id all atom 250 dump.pour @@ -52,13 +53,18 @@ compute_modify thermo_temp dynamic yes run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 1.2 - binsize = 0.6 -> bins = 167 84 2 -Memory usage per processor = 2.7174 Mbytes + binsize = 0.6, bins = 167 84 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/2d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.77 | 5.77 | 5.77 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 5000 1000 224 201.77464 0 5000 @@ -86,20 +92,20 @@ Step Atoms KinEng c_1 Volume 23000 1000 11.97674 5.2548063 5000 24000 1000 7.8974699 3.7396899 5000 25000 1000 6.1288038 2.2056805 5000 -Loop time of 0.974647 on 4 procs for 25000 steps with 1000 atoms +Loop time of 0.901039 on 4 procs for 25000 steps with 1000 atoms -Performance: 2216187.157 tau/day, 25650.314 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2397232.992 tau/day, 27745.752 timesteps/s +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.29556 | 0.31544 | 0.33654 | 3.0 | 32.36 -Neigh | 0.10012 | 0.10782 | 0.11355 | 1.7 | 11.06 -Comm | 0.081835 | 0.087606 | 0.098412 | 2.2 | 8.99 -Output | 0.00039244 | 0.00043273 | 0.0004766 | 0.2 | 0.04 -Modify | 0.28155 | 0.29814 | 0.31262 | 2.2 | 30.59 -Other | | 0.1652 | | | 16.95 +Pair | 0.21557 | 0.22754 | 0.23651 | 1.9 | 25.25 +Neigh | 0.098304 | 0.10178 | 0.10595 | 1.0 | 11.30 +Comm | 0.051792 | 0.066485 | 0.079589 | 3.8 | 7.38 +Output | 0.00052619 | 0.00061941 | 0.00082016 | 0.0 | 0.07 +Modify | 0.31782 | 0.32767 | 0.33815 | 1.5 | 36.37 +Other | | 0.1769 | | | 19.64 Nlocal: 250 ave 267 max 232 min Histogram: 1 0 0 0 1 1 0 0 0 1 diff --git a/examples/pour/log.5Oct16.pour.2d.molecule.g++.1 b/examples/pour/log.27Nov18.pour.2d.molecule.g++.1 similarity index 78% rename from examples/pour/log.5Oct16.pour.2d.molecule.g++.1 rename to examples/pour/log.27Nov18.pour.2d.molecule.g++.1 index c4533f3f0c..5eff1843e7 100644 --- a/examples/pour/log.5Oct16.pour.2d.molecule.g++.1 +++ b/examples/pour/log.27Nov18.pour.2d.molecule.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour 2d granular particles into container dimension 2 @@ -34,11 +35,11 @@ fix ywalls all wall/gran hertz/history 4000.0 NULL 100.0 NULL 0 1 yplane 0 NU molecule object molecule.vshape Read molecule object: - 5 atoms with 1 types - 0 bonds with 0 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 5 atoms with max type 1 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 fix 3 all rigid/small molecule mol object 0 rigid bodies with 0 atoms 2.23607 = max distance from body owner to body atom @@ -55,7 +56,7 @@ compute 1 all erotate/sphere compute Tsphere all temp/sphere thermo_style custom step atoms ke c_1 vol thermo_modify lost ignore norm no temp Tsphere -compute_modify Tsphere dynamic yes +compute_modify Tsphere dynamic/dof yes thermo 1000 @@ -73,13 +74,18 @@ thermo 1000 run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 2.5 - binsize = 0.6 -> bins = 167 84 2 -Memory usage per processor = 2.75807 Mbytes + binsize = 0.6, bins = 167 84 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/2d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.81 | 5.81 | 5.81 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 5000 1000 130 259.24123 2.3772821e-30 5000 @@ -106,21 +112,21 @@ Step Atoms KinEng c_1 Volume 22000 1040 1262.0253 1.6097601 5000 23000 1040 1042.7 3.1078701 5000 24000 1040 1167.4717 1.4954047 5000 - 25000 1170 1214.9087 2.4525541 5000 -Loop time of 3.19438 on 1 procs for 25000 steps with 1170 atoms + 25000 1170 1214.9087 2.4525535 5000 +Loop time of 3.36515 on 1 procs for 25000 steps with 1170 atoms -Performance: 676187.595 tau/day, 7826.245 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 641872.369 tau/day, 7429.078 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.87733 | 0.87733 | 0.87733 | 0.0 | 27.46 -Neigh | 0.25913 | 0.25913 | 0.25913 | 0.0 | 8.11 -Comm | 0.0095103 | 0.0095103 | 0.0095103 | 0.0 | 0.30 -Output | 0.00043368 | 0.00043368 | 0.00043368 | 0.0 | 0.01 -Modify | 1.941 | 1.941 | 1.941 | 0.0 | 60.76 -Other | | 0.107 | | | 3.35 +Pair | 0.73922 | 0.73922 | 0.73922 | 0.0 | 21.97 +Neigh | 0.22808 | 0.22808 | 0.22808 | 0.0 | 6.78 +Comm | 0.013331 | 0.013331 | 0.013331 | 0.0 | 0.40 +Output | 0.00082207 | 0.00082207 | 0.00082207 | 0.0 | 0.02 +Modify | 2.2694 | 2.2694 | 2.2694 | 0.0 | 67.44 +Other | | 0.1143 | | | 3.40 Nlocal: 1170 ave 1170 max 1170 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/pour/log.5Oct16.pour.2d.molecule.g++.4 b/examples/pour/log.27Nov18.pour.2d.molecule.g++.4 similarity index 78% rename from examples/pour/log.5Oct16.pour.2d.molecule.g++.4 rename to examples/pour/log.27Nov18.pour.2d.molecule.g++.4 index 604fd71673..2fae548aab 100644 --- a/examples/pour/log.5Oct16.pour.2d.molecule.g++.4 +++ b/examples/pour/log.27Nov18.pour.2d.molecule.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour 2d granular particles into container dimension 2 @@ -34,11 +35,11 @@ fix ywalls all wall/gran hertz/history 4000.0 NULL 100.0 NULL 0 1 yplane 0 NU molecule object molecule.vshape Read molecule object: - 5 atoms with 1 types - 0 bonds with 0 types - 0 angles with 0 types - 0 dihedrals with 0 types - 0 impropers with 0 types + 5 atoms with max type 1 + 0 bonds with max type 0 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 fix 3 all rigid/small molecule mol object 0 rigid bodies with 0 atoms 2.23607 = max distance from body owner to body atom @@ -55,7 +56,7 @@ compute 1 all erotate/sphere compute Tsphere all temp/sphere thermo_style custom step atoms ke c_1 vol thermo_modify lost ignore norm no temp Tsphere -compute_modify Tsphere dynamic yes +compute_modify Tsphere dynamic/dof yes thermo 1000 @@ -73,13 +74,18 @@ thermo 1000 run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 2.5 - binsize = 0.6 -> bins = 167 84 2 -Memory usage per processor = 2.72041 Mbytes + binsize = 0.6, bins = 167 84 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/2d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.773 | 5.773 | 5.773 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 5000 1000 130 259.24123 2.3773387e-30 5000 @@ -106,21 +112,21 @@ Step Atoms KinEng c_1 Volume 22000 1040 1226.7461 1.2299974 5000 23000 1040 1106.7165 3.1057108 5000 24000 1040 1161.9203 2.0994962 5000 - 25000 1170 1187.5093 2.959617 5000 -Loop time of 1.20622 on 4 procs for 25000 steps with 1170 atoms + 25000 1170 1187.5093 2.9596172 5000 +Loop time of 1.4211 on 4 procs for 25000 steps with 1170 atoms -Performance: 1790713.641 tau/day, 20725.852 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1519946.444 tau/day, 17591.973 timesteps/s +94.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.22275 | 0.23039 | 0.23778 | 1.1 | 19.10 -Neigh | 0.064599 | 0.067646 | 0.069656 | 0.7 | 5.61 -Comm | 0.079895 | 0.092342 | 0.10857 | 3.5 | 7.66 -Output | 0.00061584 | 0.00065601 | 0.00075412 | 0.2 | 0.05 -Modify | 0.69333 | 0.69728 | 0.70102 | 0.3 | 57.81 -Other | | 0.1179 | | | 9.78 +Pair | 0.19053 | 0.21869 | 0.23582 | 3.7 | 15.39 +Neigh | 0.06394 | 0.066575 | 0.070017 | 0.9 | 4.68 +Comm | 0.055579 | 0.070079 | 0.080658 | 3.4 | 4.93 +Output | 0.0012593 | 0.0031545 | 0.0088205 | 5.8 | 0.22 +Modify | 0.89034 | 0.9006 | 0.91315 | 0.9 | 63.37 +Other | | 0.162 | | | 11.40 Nlocal: 292.5 ave 296 max 285 min Histogram: 1 0 0 0 0 0 0 0 1 2 diff --git a/examples/pour/log.5Oct16.pour.g++.1 b/examples/pour/log.27Nov18.pour.g++.1 similarity index 77% rename from examples/pour/log.5Oct16.pour.g++.1 rename to examples/pour/log.27Nov18.pour.g++.1 index 23e2acd6dd..a1ebc335cd 100644 --- a/examples/pour/log.5Oct16.pour.g++.1 +++ b/examples/pour/log.27Nov18.pour.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour granular particles into chute container, then induce flow atom_style sphere @@ -36,7 +37,7 @@ compute 1 all erotate/sphere thermo_style custom step atoms ke c_1 vol thermo 1000 thermo_modify lost ignore norm no -compute_modify thermo_temp dynamic yes +compute_modify thermo_temp dynamic/dof yes #dump id all atom 1000 dump.pour @@ -48,13 +49,18 @@ compute_modify thermo_temp dynamic yes run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 1.2 - binsize = 0.6 -> bins = 34 34 28 -Memory usage per processor = 2.90017 Mbytes + binsize = 0.6, bins = 34 34 28 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.955 | 5.955 | 5.955 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 6600 1000 402 768.04606 0 6600 @@ -82,20 +88,20 @@ Step Atoms KinEng c_1 Volume 23000 3000 446.47658 39.719019 6600 24000 3000 331.57201 24.034747 6600 25000 3000 239.90493 18.457205 6600 -Loop time of 9.8391 on 1 procs for 25000 steps with 3000 atoms +Loop time of 8.66761 on 1 procs for 25000 steps with 3000 atoms -Performance: 219532.250 tau/day, 2540.883 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 249203.592 tau/day, 2884.301 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.5009 | 5.5009 | 5.5009 | 0.0 | 55.91 -Neigh | 1.57 | 1.57 | 1.57 | 0.0 | 15.96 -Comm | 0.20079 | 0.20079 | 0.20079 | 0.0 | 2.04 -Output | 0.00048852 | 0.00048852 | 0.00048852 | 0.0 | 0.00 -Modify | 2.2916 | 2.2916 | 2.2916 | 0.0 | 23.29 -Other | | 0.2752 | | | 2.80 +Pair | 4.5311 | 4.5311 | 4.5311 | 0.0 | 52.28 +Neigh | 1.4556 | 1.4556 | 1.4556 | 0.0 | 16.79 +Comm | 0.2322 | 0.2322 | 0.2322 | 0.0 | 2.68 +Output | 0.00084257 | 0.00084257 | 0.00084257 | 0.0 | 0.01 +Modify | 2.1642 | 2.1642 | 2.1642 | 0.0 | 24.97 +Other | | 0.2837 | | | 3.27 Nlocal: 3000 ave 3000 max 3000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -112,7 +118,7 @@ Dangerous builds = 0 unfix ins fix 2 all gravity 1.0 chute 26.0 run 25000 -Memory usage per processor = 7.31316 Mbytes +Per MPI rank memory allocation (min/avg/max) = 13.24 | 13.24 | 13.24 Mbytes Step Atoms KinEng c_1 Volume 25000 3000 239.90493 18.457205 6600 26000 3000 86.453151 19.990229 6600 @@ -140,20 +146,20 @@ Step Atoms KinEng c_1 Volume 48000 3000 16184.643 202.00907 6600 49000 3000 17573.204 215.30429 6600 50000 3000 19117.749 232.28939 6600 -Loop time of 18.9367 on 1 procs for 25000 steps with 3000 atoms +Loop time of 16.4345 on 1 procs for 25000 steps with 3000 atoms -Performance: 114064.182 tau/day, 1320.187 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 131430.508 tau/day, 1521.186 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 12.058 | 12.058 | 12.058 | 0.0 | 63.68 -Neigh | 2.3177 | 2.3177 | 2.3177 | 0.0 | 12.24 -Comm | 0.4221 | 0.4221 | 0.4221 | 0.0 | 2.23 -Output | 0.00076723 | 0.00076723 | 0.00076723 | 0.0 | 0.00 -Modify | 3.6817 | 3.6817 | 3.6817 | 0.0 | 19.44 -Other | | 0.4563 | | | 2.41 +Pair | 9.893 | 9.893 | 9.893 | 0.0 | 60.20 +Neigh | 2.1448 | 2.1448 | 2.1448 | 0.0 | 13.05 +Comm | 0.47991 | 0.47991 | 0.47991 | 0.0 | 2.92 +Output | 0.0011523 | 0.0011523 | 0.0011523 | 0.0 | 0.01 +Modify | 3.4635 | 3.4635 | 3.4635 | 0.0 | 21.07 +Other | | 0.4522 | | | 2.75 Nlocal: 3000 ave 3000 max 3000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -166,4 +172,4 @@ Total # of neighbors = 13997 Ave neighs/atom = 4.66567 Neighbor list builds = 836 Dangerous builds = 0 -Total wall time: 0:00:28 +Total wall time: 0:00:25 diff --git a/examples/pour/log.5Oct16.pour.g++.4 b/examples/pour/log.27Nov18.pour.g++.4 similarity index 77% rename from examples/pour/log.5Oct16.pour.g++.4 rename to examples/pour/log.27Nov18.pour.g++.4 index 28e463121a..004bf92608 100644 --- a/examples/pour/log.5Oct16.pour.g++.4 +++ b/examples/pour/log.27Nov18.pour.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Pour granular particles into chute container, then induce flow atom_style sphere @@ -36,7 +37,7 @@ compute 1 all erotate/sphere thermo_style custom step atoms ke c_1 vol thermo 1000 thermo_modify lost ignore norm no -compute_modify thermo_temp dynamic yes +compute_modify thermo_temp dynamic/dof yes #dump id all atom 1000 dump.pour @@ -48,13 +49,18 @@ compute_modify thermo_temp dynamic yes run 25000 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 1.2 ghost atom cutoff = 1.2 - binsize = 0.6 -> bins = 34 34 28 -Memory usage per processor = 2.7753 Mbytes + binsize = 0.6, bins = 34 34 28 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.83 | 5.83 | 5.83 Mbytes Step Atoms KinEng c_1 Volume 0 0 -0 0 6600 1000 402 768.04606 0 6600 @@ -82,20 +88,20 @@ Step Atoms KinEng c_1 Volume 23000 3000 456.26221 36.394458 6600 24000 3000 334.38331 26.256087 6600 25000 3000 233.7217 18.768345 6600 -Loop time of 3.00537 on 4 procs for 25000 steps with 3000 atoms +Loop time of 2.79912 on 4 procs for 25000 steps with 3000 atoms -Performance: 718714.211 tau/day, 8318.452 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 771671.423 tau/day, 8931.382 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.328 | 1.3659 | 1.4112 | 2.9 | 45.45 -Neigh | 0.39528 | 0.40948 | 0.42265 | 1.6 | 13.62 -Comm | 0.36134 | 0.36901 | 0.37668 | 0.9 | 12.28 -Output | 0.00052094 | 0.00060934 | 0.0006752 | 0.2 | 0.02 -Modify | 0.5892 | 0.60403 | 0.61671 | 1.3 | 20.10 -Other | | 0.2564 | | | 8.53 +Pair | 1.0916 | 1.1431 | 1.1982 | 4.0 | 40.84 +Neigh | 0.37439 | 0.39186 | 0.41149 | 2.6 | 14.00 +Comm | 0.32241 | 0.32795 | 0.33831 | 1.1 | 11.72 +Output | 0.00068283 | 0.0029467 | 0.0094671 | 6.9 | 0.11 +Modify | 0.5813 | 0.5952 | 0.60947 | 1.5 | 21.26 +Other | | 0.3381 | | | 12.08 Nlocal: 750 ave 765 max 730 min Histogram: 1 0 0 0 1 0 0 0 1 1 @@ -112,7 +118,7 @@ Dangerous builds = 0 unfix ins fix 2 all gravity 1.0 chute 26.0 run 25000 -Memory usage per processor = 7.16682 Mbytes +Per MPI rank memory allocation (min/avg/max) = 12.16 | 12.39 | 13.06 Mbytes Step Atoms KinEng c_1 Volume 25000 3000 233.7217 18.768345 6600 26000 3000 80.58756 21.114703 6600 @@ -140,20 +146,20 @@ Step Atoms KinEng c_1 Volume 48000 3000 15555.796 204.40316 6600 49000 3000 16694.338 208.98934 6600 50000 3000 17936.665 192.19442 6600 -Loop time of 5.5877 on 4 procs for 25000 steps with 3000 atoms +Loop time of 5.65089 on 4 procs for 25000 steps with 3000 atoms -Performance: 386563.121 tau/day, 4474.110 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 382240.368 tau/day, 4424.078 timesteps/s +94.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.9862 | 3.0411 | 3.0685 | 1.9 | 54.42 -Neigh | 0.58638 | 0.60065 | 0.61313 | 1.2 | 10.75 -Comm | 0.49186 | 0.50314 | 0.51344 | 1.2 | 9.00 -Output | 0.00076151 | 0.0010245 | 0.0012021 | 0.5 | 0.02 -Modify | 0.93086 | 0.95139 | 0.96527 | 1.3 | 17.03 -Other | | 0.4904 | | | 8.78 +Pair | 2.5656 | 2.5853 | 2.6068 | 0.9 | 45.75 +Neigh | 0.57736 | 0.59939 | 0.61824 | 1.9 | 10.61 +Comm | 0.58146 | 0.63908 | 0.70461 | 5.5 | 11.31 +Output | 0.00081015 | 0.002184 | 0.0061922 | 5.0 | 0.04 +Modify | 0.91975 | 0.93371 | 0.95875 | 1.5 | 16.52 +Other | | 0.8912 | | | 15.77 Nlocal: 750 ave 758 max 741 min Histogram: 1 0 0 0 0 2 0 0 0 1 diff --git a/examples/python/log.27Nov18.fix_python_invoke.g++.1 b/examples/python/log.27Nov18.fix_python_invoke.g++.1 new file mode 100644 index 0000000000..094c667a5d --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_invoke.g++.1 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000678539 secs +mass 1 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +python end_of_step_callback here """ +from __future__ import print_function +from lammps import lammps +def end_of_step_callback(lmp): + L = lammps(ptr=lmp) + t = L.extract_global("ntimestep", 0) + print("### END OF STEP ###", t) +def post_force_callback(lmp, v): + L = lammps(ptr=lmp) + t = L.extract_global("ntimestep", 0) + print("### POST_FORCE ###", t) +""" + +fix 1 all nve +fix 2 all python/invoke 50 end_of_step end_of_step_callback +fix 3 all python/invoke 50 post_force post_force_callback + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 + 100 1.6458363 -4.7492704 0 -2.2811332 5.8691042 + 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 + 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 + 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 +Loop time of 0.732007 on 1 procs for 250 steps with 4000 atoms + +Performance: 147539.519 tau/day, 341.527 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.60651 | 0.60651 | 0.60651 | 0.0 | 82.86 +Neigh | 0.092702 | 0.092702 | 0.092702 | 0.0 | 12.66 +Comm | 0.013686 | 0.013686 | 0.013686 | 0.0 | 1.87 +Output | 0.00016069 | 0.00016069 | 0.00016069 | 0.0 | 0.02 +Modify | 0.016055 | 0.016055 | 0.016055 | 0.0 | 2.19 +Other | | 0.00289 | | | 0.39 + +Nlocal: 4000 ave 4000 max 4000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5499 ave 5499 max 5499 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 151513 ave 151513 max 151513 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 151513 +Ave neighs/atom = 37.8783 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/python/log.27Nov18.fix_python_invoke.g++.4 b/examples/python/log.27Nov18.fix_python_invoke.g++.4 new file mode 100644 index 0000000000..17c48e0f48 --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_invoke.g++.4 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000408888 secs +mass 1 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +python end_of_step_callback here """ +from __future__ import print_function +from lammps import lammps +def end_of_step_callback(lmp): + L = lammps(ptr=lmp) + t = L.extract_global("ntimestep", 0) + print("### END OF STEP ###", t) +def post_force_callback(lmp, v): + L = lammps(ptr=lmp) + t = L.extract_global("ntimestep", 0) + print("### POST_FORCE ###", t) +""" + +fix 1 all nve +fix 2 all python/invoke 50 end_of_step end_of_step_callback +fix 3 all python/invoke 50 post_force post_force_callback + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 + 100 1.6503357 -4.756014 0 -2.2811293 5.8050524 + 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 + 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 + 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 +Loop time of 0.227907 on 4 procs for 250 steps with 4000 atoms + +Performance: 473877.870 tau/day, 1096.940 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.15923 | 0.16507 | 0.17227 | 1.2 | 72.43 +Neigh | 0.02438 | 0.025177 | 0.025757 | 0.4 | 11.05 +Comm | 0.022418 | 0.030157 | 0.036685 | 2.9 | 13.23 +Output | 0.00052595 | 0.00092125 | 0.0011675 | 0.0 | 0.40 +Modify | 0.0053911 | 0.0057266 | 0.006294 | 0.5 | 2.51 +Other | | 0.0008523 | | | 0.37 + +Nlocal: 1000 ave 1010 max 982 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 2703.75 ave 2713 max 2689 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +Neighs: 37915.5 ave 39239 max 36193 min +Histogram: 1 0 0 0 0 1 1 0 0 1 + +Total # of neighbors = 151662 +Ave neighs/atom = 37.9155 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.1 b/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.1 new file mode 100644 index 0000000000..414ac69747 --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.1 @@ -0,0 +1,77 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000658989 secs +mass * 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +fix 1 all python/move py_nve.NVE + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 + 100 1.6458363 -4.7492704 0 -2.2811332 5.8691042 + 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 + 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 + 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 +Loop time of 12.0574 on 1 procs for 250 steps with 4000 atoms + +Performance: 8957.186 tau/day, 20.734 timesteps/s +98.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.61686 | 0.61686 | 0.61686 | 0.0 | 5.12 +Neigh | 0.094026 | 0.094026 | 0.094026 | 0.0 | 0.78 +Comm | 0.015743 | 0.015743 | 0.015743 | 0.0 | 0.13 +Output | 0.00021815 | 0.00021815 | 0.00021815 | 0.0 | 0.00 +Modify | 11.328 | 11.328 | 11.328 | 0.0 | 93.95 +Other | | 0.002812 | | | 0.02 + +Nlocal: 4000 ave 4000 max 4000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5499 ave 5499 max 5499 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 151513 ave 151513 max 151513 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 151513 +Ave neighs/atom = 37.8783 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:12 diff --git a/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.4 b/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.4 new file mode 100644 index 0000000000..8a8f4e4f33 --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_move_nve_melt.g++.4 @@ -0,0 +1,77 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.00041604 secs +mass * 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +fix 1 all python/move py_nve.NVE + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 + 100 1.6503357 -4.756014 0 -2.2811293 5.8050524 + 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 + 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 + 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 +Loop time of 3.60532 on 4 procs for 250 steps with 4000 atoms + +Performance: 29955.711 tau/day, 69.342 timesteps/s +95.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.15953 | 0.16556 | 0.16945 | 0.9 | 4.59 +Neigh | 0.024014 | 0.024431 | 0.024704 | 0.2 | 0.68 +Comm | 0.10837 | 0.26844 | 0.38063 | 19.1 | 7.45 +Output | 0.00021553 | 0.0063262 | 0.0088348 | 4.5 | 0.18 +Modify | 3.0299 | 3.138 | 3.3038 | 5.7 | 87.04 +Other | | 0.002585 | | | 0.07 + +Nlocal: 1000 ave 1010 max 982 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 2703.75 ave 2713 max 2689 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +Neighs: 37915.5 ave 39239 max 36193 min +Histogram: 1 0 0 0 0 1 1 0 0 1 + +Total # of neighbors = 151662 +Ave neighs/atom = 37.9155 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:03 diff --git a/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.1 b/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.1 new file mode 100644 index 0000000000..e3c9ee4aa2 --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.1 @@ -0,0 +1,77 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000703096 secs +mass * 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +fix 1 all python/move py_nve.NVE_Opt + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 + 100 1.6458363 -4.7492704 0 -2.2811332 5.8691042 + 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 + 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 + 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 +Loop time of 0.806998 on 1 procs for 250 steps with 4000 atoms + +Performance: 133829.286 tau/day, 309.790 timesteps/s +95.2% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.60639 | 0.60639 | 0.60639 | 0.0 | 75.14 +Neigh | 0.092807 | 0.092807 | 0.092807 | 0.0 | 11.50 +Comm | 0.013782 | 0.013782 | 0.013782 | 0.0 | 1.71 +Output | 0.00021243 | 0.00021243 | 0.00021243 | 0.0 | 0.03 +Modify | 0.091672 | 0.091672 | 0.091672 | 0.0 | 11.36 +Other | | 0.00213 | | | 0.26 + +Nlocal: 4000 ave 4000 max 4000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5499 ave 5499 max 5499 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 151513 ave 151513 max 151513 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 151513 +Ave neighs/atom = 37.8783 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.4 b/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.4 new file mode 100644 index 0000000000..b4fbdcbc44 --- /dev/null +++ b/examples/python/log.27Nov18.fix_python_move_nve_melt_opt.g++.4 @@ -0,0 +1,77 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000407457 secs +mass * 1.0 + +velocity all create 3.0 87287 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify every 20 delay 0 check no + +fix 1 all python/move py_nve.NVE_Opt + +thermo 50 +run 250 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 3 -6.7733681 0 -2.2744931 -3.7033504 + 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 + 100 1.6503357 -4.756014 0 -2.2811293 5.8050524 + 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 + 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 + 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 +Loop time of 0.283796 on 4 procs for 250 steps with 4000 atoms + +Performance: 380554.630 tau/day, 880.913 timesteps/s +93.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.16068 | 0.16297 | 0.167 | 0.6 | 57.42 +Neigh | 0.024281 | 0.02511 | 0.027018 | 0.7 | 8.85 +Comm | 0.033199 | 0.035637 | 0.03814 | 1.3 | 12.56 +Output | 0.00044489 | 0.00057381 | 0.00065589 | 0.0 | 0.20 +Modify | 0.056902 | 0.058489 | 0.06128 | 0.7 | 20.61 +Other | | 0.001018 | | | 0.36 + +Nlocal: 1000 ave 1010 max 982 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 2703.75 ave 2713 max 2689 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +Neighs: 37915.5 ave 39239 max 36193 min +Histogram: 1 0 0 0 0 1 1 0 0 1 + +Total # of neighbors = 151662 +Ave neighs/atom = 37.9155 +Neighbor list builds = 12 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/python/log.27Nov18.pair_python_coulomb.g++.1 b/examples/python/log.27Nov18.pair_python_coulomb.g++.1 new file mode 100644 index 0000000000..e1f0aba1bf --- /dev/null +++ b/examples/python/log.27Nov18.pair_python_coulomb.g++.1 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +atom_style full + +read_data data.spce + orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 3000 bonds + reading angles ... + 1500 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + +pair_style hybrid/overlay coul/cut 12.0 python 12.0 + +pair_coeff * * coul/cut +pair_coeff * * python py_pot.LJCutSPCE OW NULL + +bond_style harmonic +angle_style harmonic +dihedral_style none +improper_style none + +bond_coeff 1 1000.00 1.000 +angle_coeff 1 100.0 109.47 + +special_bonds lj/coul 0.0 0.0 1.0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 2 = max # of special neighbors + +neighbor 2.0 bin + +fix 1 all shake 0.0001 20 0 b 1 a 1 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 1500 = # of frozen angles +fix 2 all nvt temp 300.0 300.0 100.0 + +# create combined lj/coul table for all atom types +# generate tabulated potential from python variant +pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW -0.8472 -0.8472 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +pair_write 1 2 2000 rsq 0.1 12 spce.table OW-HW -0.8472 0.4236 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +pair_write 2 2 2000 rsq 0.1 12 spce.table HW-HW 0.4236 0.4236 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + +# switch to tabulated potential +pair_style table linear 2000 pppm +pair_coeff 1 1 spce.table OW-OW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) +pair_coeff 1 2 spce.table OW-HW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) +pair_coeff 2 2 spce.table HW-HW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair table, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 25.18 | 25.18 | 25.18 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -18173.499 0 -18173.499 -2019.6011 + 10 146.87683 -19431.334 0 -18118.336 -4804.774 + 20 183.13008 -19192.694 0 -17555.612 -5105.075 + 30 205.91102 -18124.567 0 -16283.836 -4052.5955 + 40 241.34432 -18154.089 0 -15996.604 -3187.3994 + 50 265.93905 -19712.779 0 -17335.431 -2716.3264 + 60 273.67861 -21092.479 0 -18645.943 -2266.2648 + 70 288.39213 -19794.592 0 -17216.526 -1207.5782 + 80 300.36209 -20235.73 0 -17550.658 -1345.2669 + 90 303.8567 -21670.331 0 -18954.02 -2207.0831 + 100 304.10875 -19847.214 0 -17128.649 -1431.7749 +Loop time of 5.78394 on 1 procs for 100 steps with 4500 atoms + +Performance: 1.494 ns/day, 16.066 hours/ns, 17.289 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.4417 | 5.4417 | 5.4417 | 0.0 | 94.08 +Bond | 9.5844e-05 | 9.5844e-05 | 9.5844e-05 | 0.0 | 0.00 +Neigh | 0.26895 | 0.26895 | 0.26895 | 0.0 | 4.65 +Comm | 0.019179 | 0.019179 | 0.019179 | 0.0 | 0.33 +Output | 0.00039768 | 0.00039768 | 0.00039768 | 0.0 | 0.01 +Modify | 0.050508 | 0.050508 | 0.050508 | 0.0 | 0.87 +Other | | 0.003098 | | | 0.05 + +Nlocal: 4500 ave 4500 max 4500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 21269 ave 21269 max 21269 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.59772e+06 ave 2.59772e+06 max 2.59772e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2597720 +Ave neighs/atom = 577.271 +Ave special neighs/atom = 2 +Neighbor list builds = 3 +Dangerous builds = 0 + +shell rm spce.table + +Total wall time: 0:00:06 diff --git a/examples/python/log.27Nov18.pair_python_coulomb.g++.4 b/examples/python/log.27Nov18.pair_python_coulomb.g++.4 new file mode 100644 index 0000000000..6558085246 --- /dev/null +++ b/examples/python/log.27Nov18.pair_python_coulomb.g++.4 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +atom_style full + +read_data data.spce + orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 3000 bonds + reading angles ... + 1500 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + +pair_style hybrid/overlay coul/cut 12.0 python 12.0 + +pair_coeff * * coul/cut +pair_coeff * * python py_pot.LJCutSPCE OW NULL + +bond_style harmonic +angle_style harmonic +dihedral_style none +improper_style none + +bond_coeff 1 1000.00 1.000 +angle_coeff 1 100.0 109.47 + +special_bonds lj/coul 0.0 0.0 1.0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 2 = max # of special neighbors + +neighbor 2.0 bin + +fix 1 all shake 0.0001 20 0 b 1 a 1 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 1500 = # of frozen angles +fix 2 all nvt temp 300.0 300.0 100.0 + +# create combined lj/coul table for all atom types +# generate tabulated potential from python variant +pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW -0.8472 -0.8472 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +pair_write 1 2 2000 rsq 0.1 12 spce.table OW-HW -0.8472 0.4236 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +pair_write 2 2 2000 rsq 0.1 12 spce.table HW-HW 0.4236 0.4236 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair coul/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair python, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + +# switch to tabulated potential +pair_style table linear 2000 pppm +pair_coeff 1 1 spce.table OW-OW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) +pair_coeff 1 2 spce.table OW-HW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) +pair_coeff 2 2 spce.table HW-HW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair table, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.01 | 10.01 | 10.01 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -18173.499 0 -18173.499 -2019.6011 + 10 146.87683 -19431.334 0 -18118.336 -4804.774 + 20 183.13008 -19192.694 0 -17555.612 -5105.075 + 30 205.91102 -18124.567 0 -16283.836 -4052.5955 + 40 241.34432 -18154.089 0 -15996.604 -3187.3994 + 50 265.93905 -19712.779 0 -17335.431 -2716.3264 + 60 273.67861 -21092.479 0 -18645.943 -2266.2648 + 70 288.39213 -19794.592 0 -17216.526 -1207.5782 + 80 300.36209 -20235.73 0 -17550.658 -1345.2669 + 90 303.8567 -21670.331 0 -18954.02 -2207.0831 + 100 304.10875 -19847.214 0 -17128.649 -1431.7749 +Loop time of 1.64676 on 4 procs for 100 steps with 4500 atoms + +Performance: 5.247 ns/day, 4.574 hours/ns, 60.725 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4241 | 1.4506 | 1.5134 | 3.0 | 88.09 +Bond | 9.8705e-05 | 0.00010312 | 0.00010729 | 0.0 | 0.01 +Neigh | 0.071698 | 0.071712 | 0.07172 | 0.0 | 4.35 +Comm | 0.027696 | 0.090501 | 0.11691 | 12.1 | 5.50 +Output | 0.00032783 | 0.00048846 | 0.00096679 | 0.0 | 0.03 +Modify | 0.030543 | 0.030691 | 0.030788 | 0.1 | 1.86 +Other | | 0.002627 | | | 0.16 + +Nlocal: 1125 ave 1163 max 1097 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Nghost: 12265.5 ave 12299 max 12233 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Neighs: 649430 ave 681781 max 630283 min +Histogram: 1 0 2 0 0 0 0 0 0 1 + +Total # of neighbors = 2597720 +Ave neighs/atom = 577.271 +Ave special neighs/atom = 2 +Neighbor list builds = 3 +Dangerous builds = 0 + +shell rm spce.table + +Total wall time: 0:00:01 diff --git a/examples/python/log.4May17.pair_python_hybrid.g++.1 b/examples/python/log.27Nov18.pair_python_hybrid.g++.1 similarity index 65% rename from examples/python/log.4May17.pair_python_hybrid.g++.1 rename to examples/python/log.27Nov18.pair_python_hybrid.g++.1 index 718f794a57..bc56a98bba 100644 --- a/examples/python/log.4May17.pair_python_hybrid.g++.1 +++ b/examples/python/log.27Nov18.pair_python_hybrid.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones hybrid @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.00073123 secs mass * 1.0 region half block -0.1 4.9 0 10 0 10 set region half type 2 @@ -53,7 +54,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.446 | 4.446 | 4.446 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.484 | 4.484 | 4.484 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 @@ -61,20 +62,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 -Loop time of 10.0384 on 1 procs for 250 steps with 4000 atoms +Loop time of 5.56562 on 1 procs for 250 steps with 4000 atoms -Performance: 10758.705 tau/day, 24.904 timesteps/s -98.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 19404.856 tau/day, 44.919 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 9.913 | 9.913 | 9.913 | 0.0 | 98.75 -Neigh | 0.095569 | 0.095569 | 0.095569 | 0.0 | 0.95 -Comm | 0.012686 | 0.012686 | 0.012686 | 0.0 | 0.13 -Output | 0.00027537 | 0.00027537 | 0.00027537 | 0.0 | 0.00 -Modify | 0.01386 | 0.01386 | 0.01386 | 0.0 | 0.14 -Other | | 0.003027 | | | 0.03 +Pair | 5.4305 | 5.4305 | 5.4305 | 0.0 | 97.57 +Neigh | 0.10441 | 0.10441 | 0.10441 | 0.0 | 1.88 +Comm | 0.013915 | 0.013915 | 0.013915 | 0.0 | 0.25 +Output | 0.00019979 | 0.00019979 | 0.00019979 | 0.0 | 0.00 +Modify | 0.014502 | 0.014502 | 0.014502 | 0.0 | 0.26 +Other | | 0.002061 | | | 0.04 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -89,14 +90,60 @@ Neighbor list builds = 12 Dangerous builds not checked write_data hybrid.data +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair python, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard write_restart hybrid.restart +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair python, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard clear using 1 OpenMP thread(s) per MPI task read_restart hybrid.restart + restoring atom style atomic from restart orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid + restoring pair style hybrid from restart 4000 atoms pair_style hybrid lj/cut 2.5 python 2.5 @@ -129,7 +176,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.245 | 4.245 | 4.245 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.281 | 4.281 | 4.281 Mbytes Step Temp E_pair E_mol TotEng Press 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 300 1.645592 -4.7496711 0 -2.2819002 5.8734193 @@ -137,20 +184,20 @@ Step Temp E_pair E_mol TotEng Press 400 1.6540555 -4.7622999 0 -2.281837 5.8200413 450 1.6264734 -4.7200865 0 -2.2809863 5.9546991 500 1.6366891 -4.7350979 0 -2.2806781 5.9369284 -Loop time of 10.0803 on 1 procs for 250 steps with 4000 atoms +Loop time of 5.56525 on 1 procs for 250 steps with 4000 atoms -Performance: 10713.932 tau/day, 24.801 timesteps/s -98.7% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 19406.123 tau/day, 44.922 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 9.8479 | 9.8479 | 9.8479 | 0.0 | 97.69 -Neigh | 0.20002 | 0.20002 | 0.20002 | 0.0 | 1.98 -Comm | 0.01437 | 0.01437 | 0.01437 | 0.0 | 0.14 -Output | 0.00024033 | 0.00024033 | 0.00024033 | 0.0 | 0.00 -Modify | 0.013422 | 0.013422 | 0.013422 | 0.0 | 0.13 -Other | | 0.004348 | | | 0.04 +Pair | 5.3122 | 5.3122 | 5.3122 | 0.0 | 95.45 +Neigh | 0.21918 | 0.21918 | 0.21918 | 0.0 | 3.94 +Comm | 0.015959 | 0.015959 | 0.015959 | 0.0 | 0.29 +Output | 0.00018764 | 0.00018764 | 0.00018764 | 0.0 | 0.00 +Modify | 0.014443 | 0.014443 | 0.014443 | 0.0 | 0.26 +Other | | 0.00326 | | | 0.06 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -211,7 +258,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.745 | 3.745 | 3.745 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.781 | 3.781 | 3.781 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.6275257 -4.7224992 0 -2.281821 5.9567365 50 1.6454666 -4.7497515 0 -2.2821686 5.8729175 @@ -219,20 +266,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6537193 -4.7627023 0 -2.2827434 5.8177704 200 1.6258731 -4.7205017 0 -2.2823017 5.952511 250 1.6370862 -4.7373176 0 -2.2823022 5.925807 -Loop time of 9.93686 on 1 procs for 250 steps with 4000 atoms +Loop time of 5.44427 on 1 procs for 250 steps with 4000 atoms -Performance: 10868.626 tau/day, 25.159 timesteps/s -98.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 19837.379 tau/day, 45.920 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 9.8119 | 9.8119 | 9.8119 | 0.0 | 98.74 -Neigh | 0.096041 | 0.096041 | 0.096041 | 0.0 | 0.97 -Comm | 0.01243 | 0.01243 | 0.01243 | 0.0 | 0.13 -Output | 0.00028133 | 0.00028133 | 0.00028133 | 0.0 | 0.00 -Modify | 0.013261 | 0.013261 | 0.013261 | 0.0 | 0.13 -Other | | 0.002994 | | | 0.03 +Pair | 5.3082 | 5.3082 | 5.3082 | 0.0 | 97.50 +Neigh | 0.10536 | 0.10536 | 0.10536 | 0.0 | 1.94 +Comm | 0.01346 | 0.01346 | 0.01346 | 0.0 | 0.25 +Output | 0.00019431 | 0.00019431 | 0.00019431 | 0.0 | 0.00 +Modify | 0.015079 | 0.015079 | 0.015079 | 0.0 | 0.28 +Other | | 0.002012 | | | 0.04 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -247,4 +294,4 @@ Neighbor list builds = 12 Dangerous builds not checked shell rm hybrid.data hybrid.restart -Total wall time: 0:00:30 +Total wall time: 0:00:16 diff --git a/examples/python/log.4May17.pair_python_hybrid.g++.4 b/examples/python/log.27Nov18.pair_python_hybrid.g++.4 similarity index 65% rename from examples/python/log.4May17.pair_python_hybrid.g++.4 rename to examples/python/log.27Nov18.pair_python_hybrid.g++.4 index 32d9fc1740..b959f608ee 100644 --- a/examples/python/log.4May17.pair_python_hybrid.g++.4 +++ b/examples/python/log.27Nov18.pair_python_hybrid.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones hybrid @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000420809 secs mass * 1.0 region half block -0.1 4.9 0 10 0 10 set region half type 2 @@ -53,7 +54,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.953 | 3.953 | 3.953 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.968 | 3.968 | 3.968 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 @@ -61,20 +62,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 -Loop time of 2.71748 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.53377 on 4 procs for 250 steps with 4000 atoms -Performance: 39742.745 tau/day, 91.997 timesteps/s -98.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 70414.718 tau/day, 162.997 timesteps/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.4777 | 2.5639 | 2.6253 | 3.9 | 94.35 -Neigh | 0.024626 | 0.025331 | 0.02598 | 0.3 | 0.93 -Comm | 0.061933 | 0.12297 | 0.20987 | 18.0 | 4.53 -Output | 0.00026131 | 0.00027591 | 0.00031352 | 0.0 | 0.01 -Modify | 0.0036087 | 0.0036573 | 0.0037553 | 0.1 | 0.13 -Other | | 0.001337 | | | 0.05 +Pair | 1.3644 | 1.406 | 1.4448 | 3.2 | 91.67 +Neigh | 0.027066 | 0.027591 | 0.028437 | 0.3 | 1.80 +Comm | 0.055296 | 0.095109 | 0.13733 | 12.4 | 6.20 +Output | 0.00022817 | 0.00030088 | 0.00042033 | 0.0 | 0.02 +Modify | 0.0037878 | 0.0038549 | 0.0040336 | 0.2 | 0.25 +Other | | 0.0008861 | | | 0.06 Nlocal: 1000 ave 1010 max 982 min Histogram: 1 0 0 0 0 0 1 0 0 2 @@ -89,14 +90,60 @@ Neighbor list builds = 12 Dangerous builds not checked write_data hybrid.data +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair python, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard write_restart hybrid.restart +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair python, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard clear using 1 OpenMP thread(s) per MPI task read_restart hybrid.restart + restoring atom style atomic from restart orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid + restoring pair style hybrid from restart 4000 atoms pair_style hybrid lj/cut 2.5 python 2.5 @@ -129,7 +176,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.612 | 3.612 | 3.612 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.626 | 3.626 | 3.626 Mbytes Step Temp E_pair E_mol TotEng Press 250 1.6323462 -4.7292062 0 -2.2812991 5.9762168 300 1.6451788 -4.7488091 0 -2.2816578 5.8375485 @@ -137,20 +184,20 @@ Step Temp E_pair E_mol TotEng Press 400 1.6388136 -4.7387093 0 -2.2811035 5.9331084 450 1.6431295 -4.7452215 0 -2.2811435 5.8929898 500 1.643316 -4.7454222 0 -2.2810644 5.8454817 -Loop time of 2.75827 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.51785 on 4 procs for 250 steps with 4000 atoms -Performance: 39155.038 tau/day, 90.637 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 71153.411 tau/day, 164.707 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.3631 | 2.5412 | 2.6672 | 7.2 | 92.13 -Neigh | 0.050358 | 0.052316 | 0.053312 | 0.5 | 1.90 -Comm | 0.032793 | 0.15893 | 0.33904 | 29.1 | 5.76 -Output | 0.00018525 | 0.00020212 | 0.00024509 | 0.0 | 0.01 -Modify | 0.0034482 | 0.0035321 | 0.0036578 | 0.1 | 0.13 -Other | | 0.002039 | | | 0.07 +Pair | 1.2893 | 1.3741 | 1.416 | 4.2 | 90.53 +Neigh | 0.055474 | 0.056676 | 0.057363 | 0.3 | 3.73 +Comm | 0.039187 | 0.081666 | 0.16742 | 17.6 | 5.38 +Output | 0.00014877 | 0.0002687 | 0.00061893 | 0.0 | 0.02 +Modify | 0.003741 | 0.0037862 | 0.0038075 | 0.0 | 0.25 +Other | | 0.001315 | | | 0.09 Nlocal: 1000 ave 1012 max 983 min Histogram: 1 0 0 0 0 0 2 0 0 1 @@ -211,7 +258,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.112 | 3.112 | 3.112 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.126 | 3.126 | 3.126 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.6323462 -4.7292062 0 -2.2812991 5.9762168 50 1.6450626 -4.7488948 0 -2.2819177 5.8370409 @@ -219,20 +266,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6384234 -4.7389689 0 -2.2819482 5.9315273 200 1.6428814 -4.7460743 0 -2.2823683 5.8888228 250 1.6432631 -4.7466603 0 -2.2823818 5.8398819 -Loop time of 2.71936 on 4 procs for 250 steps with 4000 atoms +Loop time of 1.53622 on 4 procs for 250 steps with 4000 atoms -Performance: 39715.257 tau/day, 91.933 timesteps/s -98.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 70302.534 tau/day, 162.737 timesteps/s +97.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.3769 | 2.5432 | 2.6447 | 6.6 | 93.52 -Neigh | 0.024088 | 0.025093 | 0.025748 | 0.4 | 0.92 -Comm | 0.044614 | 0.14598 | 0.31339 | 27.5 | 5.37 -Output | 0.00026488 | 0.00028872 | 0.00034189 | 0.0 | 0.01 -Modify | 0.0034099 | 0.0035709 | 0.0036535 | 0.2 | 0.13 -Other | | 0.001215 | | | 0.04 +Pair | 1.2893 | 1.3875 | 1.4506 | 5.1 | 90.32 +Neigh | 0.026512 | 0.02714 | 0.027651 | 0.2 | 1.77 +Comm | 0.053684 | 0.11665 | 0.21515 | 17.6 | 7.59 +Output | 0.00017214 | 0.00029582 | 0.0006547 | 0.0 | 0.02 +Modify | 0.0037682 | 0.0037964 | 0.0038147 | 0.0 | 0.25 +Other | | 0.0008581 | | | 0.06 Nlocal: 1000 ave 1013 max 989 min Histogram: 1 0 0 1 0 1 0 0 0 1 @@ -247,4 +294,4 @@ Neighbor list builds = 12 Dangerous builds not checked shell rm hybrid.data hybrid.restart -Total wall time: 0:00:08 +Total wall time: 0:00:04 diff --git a/examples/python/log.4May17.pair_python_long.g++.1 b/examples/python/log.27Nov18.pair_python_long.g++.1 similarity index 63% rename from examples/python/log.4May17.pair_python_long.g++.1 rename to examples/python/log.27Nov18.pair_python_long.g++.1 index e2d7cf1bde..ad3532b2e8 100644 --- a/examples/python/log.4May17.pair_python_long.g++.1 +++ b/examples/python/log.27Nov18.pair_python_long.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real atom_style full @@ -48,8 +48,8 @@ fix 2 all nvt temp 300.0 300.0 100.0 # create only lj/cut table for the oxygen atoms from python shell rm -f spce.table -WARNING: Shell command 'rm' failed with error 'No such file or directory' (../input.cpp:1285) -WARNING: Shell command 'rm' failed with error 'No such file or directory' (../input.cpp:1285) +WARNING: Shell command 'rm' failed with error 'No such file or directory' (src/input.cpp:1308) +WARNING: Shell command 'rm' failed with error 'No such file or directory' (src/input.cpp:1308) pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW Neighbor list info ... update every 1 steps, delay 10 steps, check yes @@ -69,11 +69,13 @@ pair_style hybrid/overlay coul/long 12.0 table linear 2000 kspace_style pppm 1.0e-6 pair_coeff * * coul/long pair_coeff 1 1 table spce.table OW-OW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) thermo 10 run 100 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.279652 grid = 40 40 40 stencil order = 5 @@ -98,35 +100,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 36.47 | 36.47 | 36.47 Mbytes +Per MPI rank memory allocation (min/avg/max) = 36.57 | 36.57 | 36.57 Mbytes Step Temp E_pair E_mol TotEng Press - 0 0 -16690.032 0 -16690.032 -1268.9538 - 10 120.58553 -17767.504 0 -16689.536 -4063.8589 - 20 136.11736 -17882.557 0 -16665.742 -5124.6758 - 30 137.00764 -17872.318 0 -16647.545 -5337.2022 - 40 153.38868 -17999.269 0 -16628.059 -5213.6001 - 50 167.70342 -18103.06 0 -16603.883 -4460.6632 - 60 163.07134 -18034.856 0 -16577.088 -3285.0037 - 70 169.59286 -18064.636 0 -16548.57 -2606.407 - 80 182.92893 -18153.499 0 -16518.215 -2385.5152 - 90 191.2793 -18195.356 0 -16485.425 -2235.3701 - 100 194.68587 -18192.458 0 -16452.073 -1948.3746 -Loop time of 7.90705 on 1 procs for 100 steps with 4500 atoms + 0 0 -16690.019 0 -16690.019 -1268.9124 + 10 120.58553 -17767.489 0 -16689.521 -4063.8136 + 20 136.11736 -17882.538 0 -16665.724 -5124.6194 + 30 137.00764 -17872.302 0 -16647.529 -5337.1515 + 40 153.38867 -17999.256 0 -16628.046 -5213.5616 + 50 167.70342 -18103.046 0 -16603.87 -4460.6216 + 60 163.07134 -18034.842 0 -16577.074 -3284.9621 + 70 169.59286 -18064.622 0 -16548.556 -2606.3642 + 80 182.92892 -18153.485 0 -16518.202 -2385.4747 + 90 191.2793 -18195.343 0 -16485.411 -2235.3292 + 100 194.68587 -18192.446 0 -16452.061 -1948.3379 +Loop time of 7.00522 on 1 procs for 100 steps with 4500 atoms -Performance: 1.093 ns/day, 21.964 hours/ns, 12.647 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 1.233 ns/day, 19.459 hours/ns, 14.275 timesteps/s +98.3% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.0343 | 6.0343 | 6.0343 | 0.0 | 76.32 -Bond | 0.00019622 | 0.00019622 | 0.00019622 | 0.0 | 0.00 -Kspace | 1.5311 | 1.5311 | 1.5311 | 0.0 | 19.36 -Neigh | 0.246 | 0.246 | 0.246 | 0.0 | 3.11 -Comm | 0.023937 | 0.023937 | 0.023937 | 0.0 | 0.30 -Output | 0.00060368 | 0.00060368 | 0.00060368 | 0.0 | 0.01 -Modify | 0.065543 | 0.065543 | 0.065543 | 0.0 | 0.83 -Other | | 0.005364 | | | 0.07 +Pair | 5.5664 | 5.5664 | 5.5664 | 0.0 | 79.46 +Bond | 0.00011444 | 0.00011444 | 0.00011444 | 0.0 | 0.00 +Kspace | 1.0814 | 1.0814 | 1.0814 | 0.0 | 15.44 +Neigh | 0.28011 | 0.28011 | 0.28011 | 0.0 | 4.00 +Comm | 0.020573 | 0.020573 | 0.020573 | 0.0 | 0.29 +Output | 0.00045538 | 0.00045538 | 0.00045538 | 0.0 | 0.01 +Modify | 0.052692 | 0.052692 | 0.052692 | 0.0 | 0.75 +Other | | 0.003407 | | | 0.05 Nlocal: 4500 ave 4500 max 4500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -135,7 +137,7 @@ Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 2.60177e+06 ave 2.60177e+06 max 2.60177e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 2601769 +Total # of neighbors = 2601768 Ave neighs/atom = 578.171 Ave special neighs/atom = 2 Neighbor list builds = 3 @@ -143,4 +145,4 @@ Dangerous builds = 0 shell rm spce.table -Total wall time: 0:00:08 +Total wall time: 0:00:07 diff --git a/examples/python/log.4May17.pair_python_long.g++.4 b/examples/python/log.27Nov18.pair_python_long.g++.4 similarity index 63% rename from examples/python/log.4May17.pair_python_long.g++.4 rename to examples/python/log.27Nov18.pair_python_long.g++.4 index 35347da713..50ce2e5f3d 100644 --- a/examples/python/log.4May17.pair_python_long.g++.4 +++ b/examples/python/log.27Nov18.pair_python_long.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real atom_style full @@ -48,8 +48,8 @@ fix 2 all nvt temp 300.0 300.0 100.0 # create only lj/cut table for the oxygen atoms from python shell rm -f spce.table -WARNING: Shell command 'rm' failed with error 'No such file or directory' (../input.cpp:1285) -WARNING: Shell command 'rm' failed with error 'No such file or directory' (../input.cpp:1285) +WARNING: Shell command 'rm' failed with error 'No such file or directory' (src/input.cpp:1308) +WARNING: Shell command 'rm' failed with error 'No such file or directory' (src/input.cpp:1308) pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW Neighbor list info ... update every 1 steps, delay 10 steps, check yes @@ -69,11 +69,13 @@ pair_style hybrid/overlay coul/long 12.0 table linear 2000 kspace_style pppm 1.0e-6 pair_coeff * * coul/long pair_coeff 1 1 table spce.table OW-OW +WARNING: 1 of 2000 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (src/pair_table.cpp:481) thermo 10 run 100 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.279652 grid = 40 40 40 stencil order = 5 @@ -98,44 +100,44 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 13.45 | 13.45 | 13.45 Mbytes +Per MPI rank memory allocation (min/avg/max) = 13.5 | 13.5 | 13.5 Mbytes Step Temp E_pair E_mol TotEng Press - 0 0 -16690.032 0 -16690.032 -1268.9538 - 10 120.58553 -17767.504 0 -16689.536 -4063.8589 - 20 136.11736 -17882.557 0 -16665.742 -5124.6758 - 30 137.00764 -17872.318 0 -16647.545 -5337.2022 - 40 153.38868 -17999.269 0 -16628.059 -5213.6001 - 50 167.70342 -18103.06 0 -16603.883 -4460.6632 - 60 163.07134 -18034.856 0 -16577.088 -3285.0037 - 70 169.59286 -18064.636 0 -16548.57 -2606.407 - 80 182.92893 -18153.499 0 -16518.215 -2385.5152 - 90 191.2793 -18195.356 0 -16485.425 -2235.3701 - 100 194.68587 -18192.458 0 -16452.073 -1948.3746 -Loop time of 2.36748 on 4 procs for 100 steps with 4500 atoms + 0 0 -16690.019 0 -16690.019 -1268.9124 + 10 120.58553 -17767.489 0 -16689.521 -4063.8136 + 20 136.11736 -17882.538 0 -16665.724 -5124.6194 + 30 137.00764 -17872.302 0 -16647.529 -5337.1515 + 40 153.38867 -17999.256 0 -16628.046 -5213.5616 + 50 167.70342 -18103.046 0 -16603.87 -4460.6216 + 60 163.07134 -18034.842 0 -16577.074 -3284.9621 + 70 169.59286 -18064.622 0 -16548.556 -2606.3642 + 80 182.92892 -18153.485 0 -16518.202 -2385.4747 + 90 191.2793 -18195.343 0 -16485.411 -2235.3292 + 100 194.68587 -18192.446 0 -16452.061 -1948.3379 +Loop time of 2.26946 on 4 procs for 100 steps with 4500 atoms -Performance: 3.649 ns/day, 6.576 hours/ns, 42.239 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 3.807 ns/day, 6.304 hours/ns, 44.063 timesteps/s +95.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.5309 | 1.5977 | 1.6926 | 4.7 | 67.49 -Bond | 9.9182e-05 | 0.00012749 | 0.00016403 | 0.0 | 0.01 -Kspace | 0.52158 | 0.61232 | 0.67676 | 7.3 | 25.86 -Neigh | 0.066937 | 0.06702 | 0.067093 | 0.0 | 2.83 -Comm | 0.035882 | 0.039862 | 0.042244 | 1.2 | 1.68 -Output | 0.0004003 | 0.00044602 | 0.00057578 | 0.0 | 0.02 -Modify | 0.046088 | 0.046227 | 0.046315 | 0.0 | 1.95 -Other | | 0.003775 | | | 0.16 +Pair | 1.4676 | 1.53 | 1.6054 | 4.5 | 67.42 +Bond | 9.7752e-05 | 0.00012088 | 0.00013947 | 0.0 | 0.01 +Kspace | 0.51974 | 0.59375 | 0.65496 | 7.2 | 26.16 +Neigh | 0.075271 | 0.075279 | 0.075287 | 0.0 | 3.32 +Comm | 0.028602 | 0.029937 | 0.031052 | 0.5 | 1.32 +Output | 0.00035477 | 0.00062722 | 0.0014365 | 0.0 | 0.03 +Modify | 0.03581 | 0.035956 | 0.036059 | 0.1 | 1.58 +Other | | 0.003819 | | | 0.17 Nlocal: 1125 ave 1154 max 1092 min Histogram: 1 0 0 0 1 0 0 1 0 1 Nghost: 12256.2 ave 12296 max 12213 min Histogram: 1 0 1 0 0 0 0 0 1 1 -Neighs: 650442 ave 678831 max 626373 min +Neighs: 650442 ave 678830 max 626373 min Histogram: 1 0 0 0 2 0 0 0 0 1 -Total # of neighbors = 2601769 +Total # of neighbors = 2601768 Ave neighs/atom = 578.171 Ave special neighs/atom = 2 Neighbor list builds = 3 diff --git a/examples/python/log.4May17.pair_python_melt.g++.1 b/examples/python/log.27Nov18.pair_python_melt.g++.1 similarity index 73% rename from examples/python/log.4May17.pair_python_melt.g++.1 rename to examples/python/log.27Nov18.pair_python_melt.g++.1 index d234ce93b5..c656624fb1 100644 --- a/examples/python/log.4May17.pair_python_melt.g++.1 +++ b/examples/python/log.27Nov18.pair_python_melt.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000694513 secs mass * 1.0 velocity all create 3.0 87287 @@ -39,7 +40,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.184 | 3.184 | 3.184 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6758903 -4.7955425 0 -2.2823355 5.670064 @@ -47,20 +48,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6324555 -4.7286791 0 -2.280608 5.9589514 200 1.6630725 -4.7750988 0 -2.2811136 5.7364886 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 -Loop time of 20.9283 on 1 procs for 250 steps with 4000 atoms +Loop time of 11.5979 on 1 procs for 250 steps with 4000 atoms -Performance: 5160.475 tau/day, 11.946 timesteps/s -98.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 9312.020 tau/day, 21.556 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.809 | 20.809 | 20.809 | 0.0 | 99.43 -Neigh | 0.088638 | 0.088638 | 0.088638 | 0.0 | 0.42 -Comm | 0.013424 | 0.013424 | 0.013424 | 0.0 | 0.06 -Output | 0.0002737 | 0.0002737 | 0.0002737 | 0.0 | 0.00 -Modify | 0.014334 | 0.014334 | 0.014334 | 0.0 | 0.07 -Other | | 0.003089 | | | 0.01 +Pair | 11.474 | 11.474 | 11.474 | 0.0 | 98.94 +Neigh | 0.092903 | 0.092903 | 0.092903 | 0.0 | 0.80 +Comm | 0.01373 | 0.01373 | 0.01373 | 0.0 | 0.12 +Output | 0.00021935 | 0.00021935 | 0.00021935 | 0.0 | 0.00 +Modify | 0.014506 | 0.014506 | 0.014506 | 0.0 | 0.13 +Other | | 0.002072 | | | 0.02 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -81,8 +82,10 @@ clear using 1 OpenMP thread(s) per MPI task read_restart melt.restart + restoring atom style atomic from restart orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid + pair style python stores no restart info 4000 atoms pair_style python 2.5 @@ -104,7 +107,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.36 | 3.36 | 3.36 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.396 | 3.396 | 3.396 Mbytes Step Temp E_pair E_mol TotEng Press 250 1.6275257 -4.7224992 0 -2.281821 5.9567365 300 1.645592 -4.7496711 0 -2.2819002 5.8734193 @@ -112,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press 400 1.6540555 -4.7622999 0 -2.281837 5.8200413 450 1.6264734 -4.7200865 0 -2.2809863 5.9546991 500 1.6366891 -4.7350979 0 -2.2806781 5.9369284 -Loop time of 21.1422 on 1 procs for 250 steps with 4000 atoms +Loop time of 11.6299 on 1 procs for 250 steps with 4000 atoms -Performance: 5108.279 tau/day, 11.825 timesteps/s -98.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 9286.409 tau/day, 21.496 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.925 | 20.925 | 20.925 | 0.0 | 98.97 -Neigh | 0.18452 | 0.18452 | 0.18452 | 0.0 | 0.87 -Comm | 0.014836 | 0.014836 | 0.014836 | 0.0 | 0.07 -Output | 0.00027108 | 0.00027108 | 0.00027108 | 0.0 | 0.00 -Modify | 0.01366 | 0.01366 | 0.01366 | 0.0 | 0.06 -Other | | 0.004355 | | | 0.02 +Pair | 11.403 | 11.403 | 11.403 | 0.0 | 98.05 +Neigh | 0.19289 | 0.19289 | 0.19289 | 0.0 | 1.66 +Comm | 0.015828 | 0.015828 | 0.015828 | 0.0 | 0.14 +Output | 0.00018644 | 0.00018644 | 0.00018644 | 0.0 | 0.00 +Modify | 0.014582 | 0.014582 | 0.014582 | 0.0 | 0.13 +Other | | 0.003107 | | | 0.03 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -175,7 +178,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.86 | 2.86 | 2.86 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.896 | 2.896 | 2.896 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.6275257 -4.7224992 0 -2.281821 5.9567365 50 1.6454666 -4.7497515 0 -2.2821686 5.8729175 @@ -183,20 +186,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6537193 -4.7627023 0 -2.2827434 5.8177704 200 1.6258731 -4.7205017 0 -2.2823017 5.952511 250 1.6370862 -4.7373176 0 -2.2823022 5.925807 -Loop time of 21.1026 on 1 procs for 250 steps with 4000 atoms +Loop time of 11.6243 on 1 procs for 250 steps with 4000 atoms -Performance: 5117.845 tau/day, 11.847 timesteps/s -98.7% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 9290.855 tau/day, 21.507 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.984 | 20.984 | 20.984 | 0.0 | 99.44 -Neigh | 0.088639 | 0.088639 | 0.088639 | 0.0 | 0.42 -Comm | 0.012881 | 0.012881 | 0.012881 | 0.0 | 0.06 -Output | 0.00028563 | 0.00028563 | 0.00028563 | 0.0 | 0.00 -Modify | 0.013523 | 0.013523 | 0.013523 | 0.0 | 0.06 -Other | | 0.003033 | | | 0.01 +Pair | 11.501 | 11.501 | 11.501 | 0.0 | 98.94 +Neigh | 0.093333 | 0.093333 | 0.093333 | 0.0 | 0.80 +Comm | 0.013483 | 0.013483 | 0.013483 | 0.0 | 0.12 +Output | 0.00020981 | 0.00020981 | 0.00020981 | 0.0 | 0.00 +Modify | 0.014475 | 0.014475 | 0.014475 | 0.0 | 0.12 +Other | | 0.001968 | | | 0.02 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -211,4 +214,4 @@ Neighbor list builds = 12 Dangerous builds not checked shell rm melt.data melt.restart -Total wall time: 0:01:05 +Total wall time: 0:00:35 diff --git a/examples/python/log.4May17.pair_python_melt.g++.4 b/examples/python/log.27Nov18.pair_python_melt.g++.4 similarity index 73% rename from examples/python/log.4May17.pair_python_melt.g++.4 rename to examples/python/log.27Nov18.pair_python_melt.g++.4 index 58dae340bd..ca89640d30 100644 --- a/examples/python/log.4May17.pair_python_melt.g++.4 +++ b/examples/python/log.27Nov18.pair_python_melt.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000413418 secs mass * 1.0 velocity all create 3.0 87287 @@ -39,7 +40,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.69 | 2.69 | 2.69 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733681 0 -2.2744931 -3.7033504 50 1.6754119 -4.7947589 0 -2.2822693 5.6615925 @@ -47,20 +48,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6596605 -4.7699432 0 -2.2810749 5.7830138 200 1.6371874 -4.7365462 0 -2.2813789 5.9246674 250 1.6323462 -4.7292021 0 -2.2812949 5.9762238 -Loop time of 5.65922 on 4 procs for 250 steps with 4000 atoms +Loop time of 3.21263 on 4 procs for 250 steps with 4000 atoms -Performance: 19083.895 tau/day, 44.176 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 33617.340 tau/day, 77.818 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.4529 | 5.5207 | 5.5575 | 1.7 | 97.55 -Neigh | 0.023164 | 0.023376 | 0.023883 | 0.2 | 0.41 -Comm | 0.073318 | 0.1099 | 0.17804 | 12.2 | 1.94 -Output | 0.00023365 | 0.00026143 | 0.00030684 | 0.0 | 0.00 -Modify | 0.0036483 | 0.0037143 | 0.003896 | 0.2 | 0.07 -Other | | 0.001274 | | | 0.02 +Pair | 2.9309 | 2.9942 | 3.1071 | 3.9 | 93.20 +Neigh | 0.024111 | 0.024518 | 0.024765 | 0.2 | 0.76 +Comm | 0.075799 | 0.1889 | 0.25258 | 15.5 | 5.88 +Output | 0.00018406 | 0.00030106 | 0.00065088 | 0.0 | 0.01 +Modify | 0.0038259 | 0.0038511 | 0.0038726 | 0.0 | 0.12 +Other | | 0.0009047 | | | 0.03 Nlocal: 1000 ave 1010 max 982 min Histogram: 1 0 0 0 0 0 1 0 0 2 @@ -81,8 +82,10 @@ clear using 1 OpenMP thread(s) per MPI task read_restart melt.restart + restoring atom style atomic from restart orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid + pair style python stores no restart info 4000 atoms pair_style python 2.5 @@ -104,7 +107,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.815 | 2.816 | 2.816 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.829 | 2.83 | 2.83 Mbytes Step Temp E_pair E_mol TotEng Press 250 1.6323462 -4.7292062 0 -2.2812991 5.9762168 300 1.6451788 -4.7488091 0 -2.2816578 5.8375485 @@ -112,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press 400 1.6388136 -4.7387093 0 -2.2811035 5.9331084 450 1.6431295 -4.7452215 0 -2.2811435 5.8929898 500 1.643316 -4.7454222 0 -2.2810644 5.8454817 -Loop time of 5.70169 on 4 procs for 250 steps with 4000 atoms +Loop time of 3.16401 on 4 procs for 250 steps with 4000 atoms -Performance: 18941.760 tau/day, 43.847 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 34133.894 tau/day, 79.014 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.3919 | 5.4905 | 5.6136 | 3.7 | 96.30 -Neigh | 0.046791 | 0.047817 | 0.048795 | 0.3 | 0.84 -Comm | 0.034221 | 0.1575 | 0.25635 | 22.1 | 2.76 -Output | 0.00020409 | 0.00023448 | 0.00026131 | 0.0 | 0.00 -Modify | 0.0035028 | 0.0035674 | 0.0036926 | 0.1 | 0.06 -Other | | 0.002079 | | | 0.04 +Pair | 2.9254 | 2.9723 | 3.0639 | 3.2 | 93.94 +Neigh | 0.04915 | 0.050266 | 0.050704 | 0.3 | 1.59 +Comm | 0.044051 | 0.13579 | 0.18379 | 15.0 | 4.29 +Output | 0.00016141 | 0.00028008 | 0.00063109 | 0.0 | 0.01 +Modify | 0.0037544 | 0.003895 | 0.0041802 | 0.3 | 0.12 +Other | | 0.001474 | | | 0.05 Nlocal: 1000 ave 1012 max 983 min Histogram: 1 0 0 0 0 0 2 0 0 1 @@ -175,7 +178,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.315 | 2.316 | 2.316 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.329 | 2.33 | 2.33 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.6323462 -4.7292062 0 -2.2812991 5.9762168 50 1.6450626 -4.7488948 0 -2.2819177 5.8370409 @@ -183,20 +186,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6384234 -4.7389689 0 -2.2819482 5.9315273 200 1.6428814 -4.7460743 0 -2.2823683 5.8888228 250 1.6432631 -4.7466603 0 -2.2823818 5.8398819 -Loop time of 5.69568 on 4 procs for 250 steps with 4000 atoms +Loop time of 3.16461 on 4 procs for 250 steps with 4000 atoms -Performance: 18961.751 tau/day, 43.893 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 34127.383 tau/day, 78.999 timesteps/s +98.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.4041 | 5.5245 | 5.6139 | 3.2 | 96.99 -Neigh | 0.022658 | 0.022986 | 0.023398 | 0.2 | 0.40 -Comm | 0.053521 | 0.14309 | 0.26385 | 20.2 | 2.51 -Output | 0.00027037 | 0.00029504 | 0.00033665 | 0.0 | 0.01 -Modify | 0.0035288 | 0.0035585 | 0.0035827 | 0.0 | 0.06 -Other | | 0.001275 | | | 0.02 +Pair | 2.9135 | 2.9842 | 3.0594 | 3.1 | 94.30 +Neigh | 0.024132 | 0.024319 | 0.024553 | 0.1 | 0.77 +Comm | 0.075955 | 0.15106 | 0.22174 | 13.9 | 4.77 +Output | 0.00016856 | 0.00028443 | 0.00062919 | 0.0 | 0.01 +Modify | 0.0037944 | 0.0038335 | 0.0038977 | 0.1 | 0.12 +Other | | 0.0008717 | | | 0.03 Nlocal: 1000 ave 1013 max 989 min Histogram: 1 0 0 1 0 1 0 0 0 1 @@ -211,4 +214,4 @@ Neighbor list builds = 12 Dangerous builds not checked shell rm melt.data melt.restart -Total wall time: 0:00:17 +Total wall time: 0:00:09 diff --git a/examples/python/log.4May17.pair_python_spce.g++.1 b/examples/python/log.27Nov18.pair_python_spce.g++.1 similarity index 79% rename from examples/python/log.4May17.pair_python_spce.g++.1 rename to examples/python/log.27Nov18.pair_python_spce.g++.1 index 540c06853f..c64f599fc3 100644 --- a/examples/python/log.4May17.pair_python_spce.g++.1 +++ b/examples/python/log.27Nov18.pair_python_spce.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real atom_style full @@ -52,7 +52,7 @@ fix 2 all nvt temp 300.0 300.0 100.0 thermo 10 run 100 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.279652 grid = 40 40 40 stencil order = 5 @@ -77,7 +77,7 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 41.05 | 41.05 | 41.05 Mbytes +Per MPI rank memory allocation (min/avg/max) = 41.15 | 41.15 | 41.15 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -16692.369 0 -16692.369 -1289.222 10 120.56861 -17769.719 0 -16691.902 -4082.7098 @@ -90,22 +90,22 @@ Step Temp E_pair E_mol TotEng Press 80 182.94811 -18155.978 0 -16520.523 -2393.3156 90 191.29902 -18197.887 0 -16487.779 -2242.7104 100 194.70949 -18195.021 0 -16454.425 -1955.2916 -Loop time of 23.5385 on 1 procs for 100 steps with 4500 atoms +Loop time of 15.3744 on 1 procs for 100 steps with 4500 atoms -Performance: 0.367 ns/day, 65.385 hours/ns, 4.248 timesteps/s -98.9% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.562 ns/day, 42.707 hours/ns, 6.504 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 21.642 | 21.642 | 21.642 | 0.0 | 91.94 -Bond | 0.00021696 | 0.00021696 | 0.00021696 | 0.0 | 0.00 -Kspace | 1.5436 | 1.5436 | 1.5436 | 0.0 | 6.56 -Neigh | 0.25623 | 0.25623 | 0.25623 | 0.0 | 1.09 -Comm | 0.024325 | 0.024325 | 0.024325 | 0.0 | 0.10 -Output | 0.00064301 | 0.00064301 | 0.00064301 | 0.0 | 0.00 -Modify | 0.065919 | 0.065919 | 0.065919 | 0.0 | 0.28 -Other | | 0.005401 | | | 0.02 +Pair | 13.914 | 13.914 | 13.914 | 0.0 | 90.50 +Bond | 0.00013375 | 0.00013375 | 0.00013375 | 0.0 | 0.00 +Kspace | 1.0852 | 1.0852 | 1.0852 | 0.0 | 7.06 +Neigh | 0.29811 | 0.29811 | 0.29811 | 0.0 | 1.94 +Comm | 0.020503 | 0.020503 | 0.020503 | 0.0 | 0.13 +Output | 0.00045133 | 0.00045133 | 0.00045133 | 0.0 | 0.00 +Modify | 0.052513 | 0.052513 | 0.052513 | 0.0 | 0.34 +Other | | 0.00348 | | | 0.02 Nlocal: 4500 ave 4500 max 4500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -119,4 +119,4 @@ Ave neighs/atom = 578.169 Ave special neighs/atom = 2 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:24 +Total wall time: 0:00:15 diff --git a/examples/python/log.4May17.pair_python_spce.g++.4 b/examples/python/log.27Nov18.pair_python_spce.g++.4 similarity index 79% rename from examples/python/log.4May17.pair_python_spce.g++.4 rename to examples/python/log.27Nov18.pair_python_spce.g++.4 index 332c079ec1..44a1e27be4 100644 --- a/examples/python/log.4May17.pair_python_spce.g++.4 +++ b/examples/python/log.27Nov18.pair_python_spce.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real atom_style full @@ -52,7 +52,7 @@ fix 2 all nvt temp 300.0 300.0 100.0 thermo 10 run 100 PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.279652 grid = 40 40 40 stencil order = 5 @@ -77,7 +77,7 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 14.59 | 14.59 | 14.59 Mbytes +Per MPI rank memory allocation (min/avg/max) = 14.64 | 14.64 | 14.64 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -16692.369 0 -16692.369 -1289.222 10 120.56861 -17769.719 0 -16691.902 -4082.7098 @@ -90,22 +90,22 @@ Step Temp E_pair E_mol TotEng Press 80 182.94811 -18155.978 0 -16520.523 -2393.3156 90 191.29902 -18197.887 0 -16487.779 -2242.7104 100 194.70949 -18195.021 0 -16454.425 -1955.2916 -Loop time of 6.4942 on 4 procs for 100 steps with 4500 atoms +Loop time of 4.36104 on 4 procs for 100 steps with 4500 atoms -Performance: 1.330 ns/day, 18.039 hours/ns, 15.398 timesteps/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 1.981 ns/day, 12.114 hours/ns, 22.930 timesteps/s +97.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.4084 | 5.572 | 5.8013 | 7.2 | 85.80 -Bond | 0.00012994 | 0.0001421 | 0.00016356 | 0.0 | 0.00 -Kspace | 0.52942 | 0.75773 | 0.92078 | 19.5 | 11.67 -Neigh | 0.071055 | 0.07116 | 0.071278 | 0.0 | 1.10 -Comm | 0.040311 | 0.041255 | 0.041817 | 0.3 | 0.64 -Output | 0.00040603 | 0.00048071 | 0.00058675 | 0.0 | 0.01 -Modify | 0.047507 | 0.047629 | 0.047772 | 0.1 | 0.73 -Other | | 0.003771 | | | 0.06 +Pair | 3.5019 | 3.6105 | 3.738 | 4.4 | 82.79 +Bond | 0.00010133 | 0.00013196 | 0.00017118 | 0.0 | 0.00 +Kspace | 0.47082 | 0.59641 | 0.70417 | 10.8 | 13.68 +Neigh | 0.081036 | 0.081042 | 0.081047 | 0.0 | 1.86 +Comm | 0.030113 | 0.03092 | 0.03135 | 0.3 | 0.71 +Output | 0.00034952 | 0.00064117 | 0.001514 | 0.0 | 0.01 +Modify | 0.036583 | 0.037553 | 0.038021 | 0.3 | 0.86 +Other | | 0.00388 | | | 0.09 Nlocal: 1125 ave 1154 max 1092 min Histogram: 1 0 0 0 1 0 0 1 0 1 @@ -119,4 +119,4 @@ Ave neighs/atom = 578.169 Ave special neighs/atom = 2 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:06 +Total wall time: 0:00:04 diff --git a/examples/python/log.4May17.pair_python_table.g++.1 b/examples/python/log.27Nov18.pair_python_table.g++.1 similarity index 77% rename from examples/python/log.4May17.pair_python_table.g++.1 rename to examples/python/log.27Nov18.pair_python_table.g++.1 index c594a8e90a..86f98384cb 100644 --- a/examples/python/log.4May17.pair_python_table.g++.1 +++ b/examples/python/log.27Nov18.pair_python_table.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000697136 secs mass * 1.0 velocity all create 3.0 87287 @@ -38,7 +39,7 @@ Neighbor list info ... pair_style table linear 2000 pair_coeff 1 1 lj_1_1.table LJ WARNING: 2 of 2000 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:476) + Should only be flagged at inflection points (src/pair_table.cpp:481) neighbor 0.3 bin neigh_modify every 20 delay 0 check no @@ -59,7 +60,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.184 | 3.184 | 3.184 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.221 | 3.221 | 3.221 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733629 0 -2.2744879 -3.7032813 50 1.6758731 -4.7953067 0 -2.2821255 5.6706553 @@ -67,20 +68,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.632425 -4.7284533 0 -2.2804279 5.9595684 200 1.6631578 -4.7749889 0 -2.2808759 5.7365839 250 1.6277062 -4.7224727 0 -2.2815238 5.9572913 -Loop time of 0.996739 on 1 procs for 250 steps with 4000 atoms +Loop time of 0.94897 on 1 procs for 250 steps with 4000 atoms -Performance: 108353.298 tau/day, 250.818 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 113807.650 tau/day, 263.444 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.87985 | 0.87985 | 0.87985 | 0.0 | 88.27 -Neigh | 0.08799 | 0.08799 | 0.08799 | 0.0 | 8.83 -Comm | 0.012301 | 0.012301 | 0.012301 | 0.0 | 1.23 -Output | 0.00013161 | 0.00013161 | 0.00013161 | 0.0 | 0.01 -Modify | 0.013656 | 0.013656 | 0.013656 | 0.0 | 1.37 -Other | | 0.002808 | | | 0.28 +Pair | 0.82415 | 0.82415 | 0.82415 | 0.0 | 86.85 +Neigh | 0.093798 | 0.093798 | 0.093798 | 0.0 | 9.88 +Comm | 0.013542 | 0.013542 | 0.013542 | 0.0 | 1.43 +Output | 0.00017834 | 0.00017834 | 0.00017834 | 0.0 | 0.02 +Modify | 0.014418 | 0.014418 | 0.014418 | 0.0 | 1.52 +Other | | 0.002882 | | | 0.30 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -96,4 +97,4 @@ Dangerous builds not checked shell rm lj_1_1.table -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/python/log.4May17.pair_python_table.g++.4 b/examples/python/log.27Nov18.pair_python_table.g++.4 similarity index 78% rename from examples/python/log.4May17.pair_python_table.g++.4 rename to examples/python/log.27Nov18.pair_python_table.g++.4 index e509fc7f6a..3d7ad148e4 100644 --- a/examples/python/log.4May17.pair_python_table.g++.4 +++ b/examples/python/log.27Nov18.pair_python_table.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (4 May 2017) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt @@ -13,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000404596 secs mass * 1.0 velocity all create 3.0 87287 @@ -38,7 +39,7 @@ Neighbor list info ... pair_style table linear 2000 pair_coeff 1 1 lj_1_1.table LJ WARNING: 2 of 2000 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:476) + Should only be flagged at inflection points (src/pair_table.cpp:481) neighbor 0.3 bin neigh_modify every 20 delay 0 check no @@ -59,7 +60,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.69 | 2.69 | 2.69 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.705 | 2.705 | 2.705 Mbytes Step Temp E_pair E_mol TotEng Press 0 3 -6.7733629 0 -2.2744879 -3.7032813 50 1.675395 -4.7945736 0 -2.2821094 5.6620623 @@ -67,20 +68,20 @@ Step Temp E_pair E_mol TotEng Press 150 1.6595852 -4.7697199 0 -2.2809644 5.7837898 200 1.6371471 -4.7363942 0 -2.2812874 5.924977 250 1.6315623 -4.7278268 0 -2.2810951 5.9807196 -Loop time of 0.291846 on 4 procs for 250 steps with 4000 atoms +Loop time of 0.285577 on 4 procs for 250 steps with 4000 atoms -Performance: 370058.286 tau/day, 856.616 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 378181.086 tau/day, 875.419 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.22586 | 0.23364 | 0.24085 | 1.3 | 80.06 -Neigh | 0.022808 | 0.023235 | 0.023602 | 0.2 | 7.96 -Comm | 0.022573 | 0.030065 | 0.038092 | 3.9 | 10.30 -Output | 0.00013423 | 0.00014067 | 0.00015759 | 0.0 | 0.05 -Modify | 0.0035079 | 0.0035501 | 0.0036008 | 0.1 | 1.22 -Other | | 0.001211 | | | 0.42 +Pair | 0.2111 | 0.21779 | 0.22447 | 1.0 | 76.26 +Neigh | 0.024165 | 0.024465 | 0.0247 | 0.1 | 8.57 +Comm | 0.03147 | 0.038356 | 0.044902 | 2.5 | 13.43 +Output | 0.00016117 | 0.00022227 | 0.00040102 | 0.0 | 0.08 +Modify | 0.0037565 | 0.0038704 | 0.0040345 | 0.2 | 1.36 +Other | | 0.0008699 | | | 0.30 Nlocal: 1000 ave 1010 max 981 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/python/log.5Oct16.python.g++.1 b/examples/python/log.27Nov18.python.g++.1 similarity index 53% rename from examples/python/log.5Oct16.python.g++.1 rename to examples/python/log.27Nov18.python.g++.1 index 1f58c69165..facbd73bab 100644 --- a/examples/python/log.5Oct16.python.g++.1 +++ b/examples/python/log.27Nov18.python.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt with Python functions added units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.00072813 secs mass 1 1.0 velocity all create 1.44 87287 loop geom @@ -26,30 +28,35 @@ fix 1 all nve run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.69271 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.721 | 3.721 | 3.721 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -6.7733681 0 -4.6139081 -5.0199732 10 1.1259767 -6.3010653 0 -4.6125225 -2.5704638 -Loop time of 0.0323398 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.0312054 on 1 procs for 10 steps with 4000 atoms -Performance: 133581.484 tau/day, 309.216 timesteps/s -102.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 138437.508 tau/day, 320.457 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.024638 | 0.024638 | 0.024638 | 0.0 | 76.18 -Neigh | 0.0063899 | 0.0063899 | 0.0063899 | 0.0 | 19.76 -Comm | 0.00049949 | 0.00049949 | 0.00049949 | 0.0 | 1.54 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.06 -Modify | 0.00050044 | 0.00050044 | 0.00050044 | 0.0 | 1.55 -Other | | 0.0002944 | | | 0.91 +Pair | 0.022328 | 0.022328 | 0.022328 | 0.0 | 71.55 +Neigh | 0.0073318 | 0.0073318 | 0.0073318 | 0.0 | 23.50 +Comm | 0.0006578 | 0.0006578 | 0.0006578 | 0.0 | 2.11 +Output | 2.6941e-05 | 2.6941e-05 | 2.6941e-05 | 0.0 | 0.09 +Modify | 0.00057721 | 0.00057721 | 0.00057721 | 0.0 | 1.85 +Other | | 0.0002832 | | | 0.91 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -67,13 +74,14 @@ Dangerous builds = 0 # example of catching a syntax error python simple here """ +from __future__ import print_function def simple(): - import exceptions - print "Inside simple function" + foo = 0 + print("Inside simple function") try: foo += 1 - except Exception, e: - print "FOO error:",e + except Exception as e: + print("FOO error:", e) """ python simple invoke @@ -110,31 +118,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.0 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 26 26 26 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 10 1.1259767 0.016557378 0 1.7051002 1.2784679 20 0.87608998 0.39300382 0 1.7068103 6.0488236 -Loop time of 0.0046258 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.00488138 on 1 procs for 10 steps with 4000 atoms -Performance: 933893.067 tau/day, 2161.790 timesteps/s -86.4% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 884995.276 tau/day, 2048.600 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.001574 | 0.001574 | 0.001574 | 0.0 | 34.03 -Neigh | 0.0020421 | 0.0020421 | 0.0020421 | 0.0 | 44.14 -Comm | 0.00025463 | 0.00025463 | 0.00025463 | 0.0 | 5.50 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.39 -Modify | 0.00049615 | 0.00049615 | 0.00049615 | 0.0 | 10.73 -Other | | 0.000241 | | | 5.21 +Pair | 0.0017166 | 0.0017166 | 0.0017166 | 0.0 | 35.17 +Neigh | 0.0020256 | 0.0020256 | 0.0020256 | 0.0 | 41.50 +Comm | 0.00028539 | 0.00028539 | 0.00028539 | 0.0 | 5.85 +Output | 2.6703e-05 | 2.6703e-05 | 2.6703e-05 | 0.0 | 0.55 +Modify | 0.00057387 | 0.00057387 | 0.00057387 | 0.0 | 11.76 +Other | | 0.0002532 | | | 5.19 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -151,31 +152,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.1 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.4 - ghost atom cutoff = 1.4 - binsize = 0.7 -> bins = 24 24 24 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 20 0.87608998 -0.33042884 0 0.9833776 8.5817494 30 1.0155079 -0.83166219 0 0.69121891 7.9905553 -Loop time of 0.00619817 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.00647616 on 1 procs for 10 steps with 4000 atoms -Performance: 696980.162 tau/day, 1613.380 timesteps/s -96.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 667061.565 tau/day, 1544.124 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0029786 | 0.0029786 | 0.0029786 | 0.0 | 48.06 -Neigh | 0.002203 | 0.002203 | 0.002203 | 0.0 | 35.54 -Comm | 0.00025678 | 0.00025678 | 0.00025678 | 0.0 | 4.14 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.29 -Modify | 0.00049472 | 0.00049472 | 0.00049472 | 0.0 | 7.98 -Other | | 0.0002472 | | | 3.99 +Pair | 0.0030439 | 0.0030439 | 0.0030439 | 0.0 | 47.00 +Neigh | 0.002295 | 0.002295 | 0.002295 | 0.0 | 35.44 +Comm | 0.00028467 | 0.00028467 | 0.00028467 | 0.0 | 4.40 +Output | 2.3842e-05 | 2.3842e-05 | 2.3842e-05 | 0.0 | 0.37 +Modify | 0.0005753 | 0.0005753 | 0.0005753 | 0.0 | 8.88 +Other | | 0.0002534 | | | 3.91 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -192,31 +186,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.2 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.5 - ghost atom cutoff = 1.5 - binsize = 0.75 -> bins = 23 23 23 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 30 1.0155079 -2.0616558 0 -0.53877467 7.6238572 40 1.0490928 -2.1868324 0 -0.61358669 7.2084131 -Loop time of 0.00750899 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.00802207 on 1 procs for 10 steps with 4000 atoms -Performance: 575310.153 tau/day, 1331.736 timesteps/s -93.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 538514.378 tau/day, 1246.561 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.004189 | 0.004189 | 0.004189 | 0.0 | 55.79 -Neigh | 0.0022991 | 0.0022991 | 0.0022991 | 0.0 | 30.62 -Comm | 0.0002594 | 0.0002594 | 0.0002594 | 0.0 | 3.45 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.24 -Modify | 0.00049615 | 0.00049615 | 0.00049615 | 0.0 | 6.61 -Other | | 0.0002475 | | | 3.30 +Pair | 0.0044219 | 0.0044219 | 0.0044219 | 0.0 | 55.12 +Neigh | 0.0024219 | 0.0024219 | 0.0024219 | 0.0 | 30.19 +Comm | 0.00030112 | 0.00030112 | 0.00030112 | 0.0 | 3.75 +Output | 2.5749e-05 | 2.5749e-05 | 2.5749e-05 | 0.0 | 0.32 +Modify | 0.00059366 | 0.00059366 | 0.00059366 | 0.0 | 7.40 +Other | | 0.0002577 | | | 3.21 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -233,31 +220,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.3 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.6 - ghost atom cutoff = 1.6 - binsize = 0.8 -> bins = 21 21 21 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 40 1.0490928 -3.0667608 0 -1.493515 6.2796311 50 1.0764484 -3.1173704 0 -1.5031014 6.0850409 -Loop time of 0.00869107 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.00908327 on 1 procs for 10 steps with 4000 atoms -Performance: 497061.786 tau/day, 1150.606 timesteps/s -103.5% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 475599.593 tau/day, 1100.925 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0049038 | 0.0049038 | 0.0049038 | 0.0 | 56.42 -Neigh | 0.0027289 | 0.0027289 | 0.0027289 | 0.0 | 31.40 -Comm | 0.00028753 | 0.00028753 | 0.00028753 | 0.0 | 3.31 -Output | 2.0027e-05 | 2.0027e-05 | 2.0027e-05 | 0.0 | 0.23 -Modify | 0.00049758 | 0.00049758 | 0.00049758 | 0.0 | 5.73 -Other | | 0.0002532 | | | 2.91 +Pair | 0.0049157 | 0.0049157 | 0.0049157 | 0.0 | 54.12 +Neigh | 0.0029771 | 0.0029771 | 0.0029771 | 0.0 | 32.78 +Comm | 0.00033617 | 0.00033617 | 0.00033617 | 0.0 | 3.70 +Output | 2.3127e-05 | 2.3127e-05 | 2.3127e-05 | 0.0 | 0.25 +Modify | 0.00057578 | 0.00057578 | 0.00057578 | 0.0 | 6.34 +Other | | 0.0002553 | | | 2.81 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -274,31 +254,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.4 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.7 - ghost atom cutoff = 1.7 - binsize = 0.85 -> bins = 20 20 20 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 50 1.0764484 -3.6112241 0 -1.9969552 5.4223348 60 1.1101013 -3.6616014 0 -1.9968657 5.2348251 -Loop time of 0.00934482 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.0096159 on 1 procs for 10 steps with 4000 atoms -Performance: 462288.386 tau/day, 1070.112 timesteps/s -96.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 449256.007 tau/day, 1039.944 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0055761 | 0.0055761 | 0.0055761 | 0.0 | 59.67 -Neigh | 0.002676 | 0.002676 | 0.002676 | 0.0 | 28.64 -Comm | 0.00032163 | 0.00032163 | 0.00032163 | 0.0 | 3.44 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.19 -Modify | 0.00049901 | 0.00049901 | 0.00049901 | 0.0 | 5.34 -Other | | 0.0002542 | | | 2.72 +Pair | 0.0054793 | 0.0054793 | 0.0054793 | 0.0 | 56.98 +Neigh | 0.0028973 | 0.0028973 | 0.0028973 | 0.0 | 30.13 +Comm | 0.00038075 | 0.00038075 | 0.00038075 | 0.0 | 3.96 +Output | 2.3127e-05 | 2.3127e-05 | 2.3127e-05 | 0.0 | 0.24 +Modify | 0.00057387 | 0.00057387 | 0.00057387 | 0.0 | 5.97 +Other | | 0.0002615 | | | 2.72 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -315,31 +288,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.5 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.8 - ghost atom cutoff = 1.8 - binsize = 0.9 -> bins = 19 19 19 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 60 1.1101013 -3.9655053 0 -2.3007696 4.7849008 70 1.1122144 -3.9657095 0 -2.297805 4.8014106 -Loop time of 0.0103869 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.0107083 on 1 procs for 10 steps with 4000 atoms -Performance: 415906.746 tau/day, 962.747 timesteps/s -96.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 403424.172 tau/day, 933.852 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0063703 | 0.0063703 | 0.0063703 | 0.0 | 61.33 -Neigh | 0.002893 | 0.002893 | 0.002893 | 0.0 | 27.85 -Comm | 0.00034499 | 0.00034499 | 0.00034499 | 0.0 | 3.32 -Output | 1.7881e-05 | 1.7881e-05 | 1.7881e-05 | 0.0 | 0.17 -Modify | 0.00050139 | 0.00050139 | 0.00050139 | 0.0 | 4.83 -Other | | 0.0002594 | | | 2.50 +Pair | 0.0062652 | 0.0062652 | 0.0062652 | 0.0 | 58.51 +Neigh | 0.0031667 | 0.0031667 | 0.0031667 | 0.0 | 29.57 +Comm | 0.00041771 | 0.00041771 | 0.00041771 | 0.0 | 3.90 +Output | 2.265e-05 | 2.265e-05 | 2.265e-05 | 0.0 | 0.21 +Modify | 0.0005734 | 0.0005734 | 0.0005734 | 0.0 | 5.35 +Other | | 0.0002627 | | | 2.45 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -356,31 +322,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.6 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.9 - ghost atom cutoff = 1.9 - binsize = 0.95 -> bins = 18 18 18 -Memory usage per processor = 2.78761 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.816 | 3.816 | 3.816 Mbytes Step Temp E_pair E_mol TotEng Press 70 1.1122144 -4.1752688 0 -2.5073643 4.4755409 80 1.117224 -4.1831357 0 -2.5077187 4.446079 -Loop time of 0.0116282 on 1 procs for 10 steps with 4000 atoms +Loop time of 0.0121632 on 1 procs for 10 steps with 4000 atoms -Performance: 371512.205 tau/day, 859.982 timesteps/s -103.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 355170.795 tau/day, 822.155 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0074186 | 0.0074186 | 0.0074186 | 0.0 | 63.80 -Neigh | 0.0030658 | 0.0030658 | 0.0030658 | 0.0 | 26.37 -Comm | 0.00036025 | 0.00036025 | 0.00036025 | 0.0 | 3.10 -Output | 1.7166e-05 | 1.7166e-05 | 1.7166e-05 | 0.0 | 0.15 -Modify | 0.0005033 | 0.0005033 | 0.0005033 | 0.0 | 4.33 -Other | | 0.000263 | | | 2.26 +Pair | 0.0074623 | 0.0074623 | 0.0074623 | 0.0 | 61.35 +Neigh | 0.0033951 | 0.0033951 | 0.0033951 | 0.0 | 27.91 +Comm | 0.00043678 | 0.00043678 | 0.00043678 | 0.0 | 3.59 +Output | 2.408e-05 | 2.408e-05 | 2.408e-05 | 0.0 | 0.20 +Modify | 0.00057578 | 0.00057578 | 0.00057578 | 0.0 | 4.73 +Other | | 0.0002692 | | | 2.21 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/python/log.5Oct16.python.g++.4 b/examples/python/log.27Nov18.python.g++.4 similarity index 53% rename from examples/python/log.5Oct16.python.g++.4 rename to examples/python/log.27Nov18.python.g++.4 index 816fbf977b..cd451e49b7 100644 --- a/examples/python/log.5Oct16.python.g++.4 +++ b/examples/python/log.27Nov18.python.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d Lennard-Jones melt with Python functions added units lj @@ -12,6 +13,7 @@ Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 4000 atoms + Time spent = 0.000517368 secs mass 1 1.0 velocity all create 1.44 87287 loop geom @@ -26,30 +28,35 @@ fix 1 all nve run 10 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 12 -Memory usage per processor = 2.60344 Mbytes + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.205 | 3.205 | 3.205 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -6.7733681 0 -4.6139081 -5.0199732 10 1.1259767 -6.3010653 0 -4.6125225 -2.5704638 -Loop time of 0.00930309 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00902343 on 4 procs for 10 steps with 4000 atoms -Performance: 464361.693 tau/day, 1074.911 timesteps/s -96.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 478753.753 tau/day, 1108.226 timesteps/s +99.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0064399 | 0.0064787 | 0.0065157 | 0.0 | 69.64 -Neigh | 0.0017071 | 0.0017205 | 0.0017281 | 0.0 | 18.49 -Comm | 0.00073171 | 0.00077122 | 0.00081086 | 0.1 | 8.29 -Output | 1.9789e-05 | 2.3663e-05 | 2.9087e-05 | 0.1 | 0.25 -Modify | 0.00012827 | 0.00012904 | 0.00013018 | 0.0 | 1.39 -Other | | 0.0001799 | | | 1.93 +Pair | 0.0058084 | 0.0058863 | 0.0059605 | 0.1 | 65.23 +Neigh | 0.0019183 | 0.0019591 | 0.0020542 | 0.1 | 21.71 +Comm | 0.00081086 | 0.00084025 | 0.00090694 | 0.0 | 9.31 +Output | 2.1458e-05 | 2.9743e-05 | 4.53e-05 | 0.0 | 0.33 +Modify | 0.00015211 | 0.00015229 | 0.00015259 | 0.0 | 1.69 +Other | | 0.0001558 | | | 1.73 Nlocal: 1000 ave 1013 max 989 min Histogram: 1 0 1 0 0 1 0 0 0 1 @@ -67,13 +74,14 @@ Dangerous builds = 0 # example of catching a syntax error python simple here """ +from __future__ import print_function def simple(): - import exceptions - print "Inside simple function" + foo = 0 + print("Inside simple function") try: foo += 1 - except Exception, e: - print "FOO error:",e + except Exception as e: + print("FOO error:", e) """ python simple invoke @@ -110,31 +118,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.0 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65 -> bins = 26 26 26 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 10 1.1259767 0.016557378 0 1.7051002 1.2784679 20 0.87608998 0.39300382 0 1.7068103 6.0488236 -Loop time of 0.00152922 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00153601 on 4 procs for 10 steps with 4000 atoms -Performance: 2824975.566 tau/day, 6539.295 timesteps/s -130.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2812478.584 tau/day, 6510.367 timesteps/s +91.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00040293 | 0.0004105 | 0.00041485 | 0.0 | 26.84 -Neigh | 0.00057507 | 0.00060332 | 0.00062108 | 0.1 | 39.45 -Comm | 0.0002377 | 0.00025356 | 0.00026774 | 0.1 | 16.58 -Output | 1.9073e-05 | 1.9789e-05 | 2.1935e-05 | 0.0 | 1.29 -Modify | 0.00012994 | 0.00013161 | 0.00013328 | 0.0 | 8.61 -Other | | 0.0001104 | | | 7.22 +Pair | 0.00042677 | 0.00043494 | 0.00044322 | 0.0 | 28.32 +Neigh | 0.00051236 | 0.00051689 | 0.00052524 | 0.0 | 33.65 +Comm | 0.00025344 | 0.00026941 | 0.00027728 | 0.0 | 17.54 +Output | 1.7881e-05 | 2.3544e-05 | 3.9339e-05 | 0.0 | 1.53 +Modify | 0.00015187 | 0.00015521 | 0.00016356 | 0.0 | 10.10 +Other | | 0.000136 | | | 8.86 Nlocal: 1000 ave 1015 max 987 min Histogram: 1 0 0 1 0 1 0 0 0 1 @@ -151,31 +152,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.1 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.4 - ghost atom cutoff = 1.4 - binsize = 0.7 -> bins = 24 24 24 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 20 0.87608998 -0.33042884 0 0.9833776 8.5817494 30 1.0155079 -0.83166219 0 0.69121891 7.9905553 -Loop time of 0.00186676 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00198567 on 4 procs for 10 steps with 4000 atoms -Performance: 2314172.647 tau/day, 5356.881 timesteps/s -107.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2175589.035 tau/day, 5036.086 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00075388 | 0.00077951 | 0.00079727 | 0.1 | 41.76 -Neigh | 0.00057292 | 0.00058091 | 0.00058484 | 0.0 | 31.12 -Comm | 0.00022578 | 0.00024849 | 0.00028563 | 0.1 | 13.31 -Output | 1.7881e-05 | 1.8656e-05 | 2.0981e-05 | 0.0 | 1.00 -Modify | 0.00012493 | 0.00012845 | 0.00013137 | 0.0 | 6.88 -Other | | 0.0001107 | | | 5.93 +Pair | 0.00076985 | 0.00078291 | 0.00079393 | 0.0 | 39.43 +Neigh | 0.0005703 | 0.00057709 | 0.00058103 | 0.0 | 29.06 +Comm | 0.00030351 | 0.00031525 | 0.00033665 | 0.0 | 15.88 +Output | 1.9073e-05 | 2.4378e-05 | 4.0054e-05 | 0.0 | 1.23 +Modify | 0.00014806 | 0.00015008 | 0.00015354 | 0.0 | 7.56 +Other | | 0.000136 | | | 6.85 Nlocal: 1000 ave 1019 max 983 min Histogram: 1 0 1 0 0 0 1 0 0 1 @@ -192,31 +186,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.2 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.5 - ghost atom cutoff = 1.5 - binsize = 0.75 -> bins = 23 23 23 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 30 1.0155079 -2.0616558 0 -0.53877467 7.6238572 40 1.0490928 -2.1868324 0 -0.61358669 7.2084131 -Loop time of 0.00224304 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00232226 on 4 procs for 10 steps with 4000 atoms -Performance: 1925955.918 tau/day, 4458.231 timesteps/s -89.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1860259.570 tau/day, 4306.156 timesteps/s +99.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0010781 | 0.0011036 | 0.0011303 | 0.1 | 49.20 -Neigh | 0.00060606 | 0.00060952 | 0.00061703 | 0.0 | 27.17 -Comm | 0.00023556 | 0.0002715 | 0.00029659 | 0.1 | 12.10 -Output | 1.7881e-05 | 1.8656e-05 | 2.0981e-05 | 0.0 | 0.83 -Modify | 0.00012541 | 0.00012833 | 0.00013351 | 0.0 | 5.72 -Other | | 0.0001114 | | | 4.97 +Pair | 0.0010829 | 0.0010984 | 0.0011158 | 0.0 | 47.30 +Neigh | 0.00060892 | 0.00061285 | 0.00062037 | 0.0 | 26.39 +Comm | 0.00027418 | 0.00030226 | 0.00031734 | 0.0 | 13.02 +Output | 1.7881e-05 | 2.3305e-05 | 3.8624e-05 | 0.0 | 1.00 +Modify | 0.00014758 | 0.00014979 | 0.0001533 | 0.0 | 6.45 +Other | | 0.0001357 | | | 5.84 Nlocal: 1000 ave 1013 max 984 min Histogram: 1 0 0 1 0 0 0 0 1 1 @@ -233,31 +220,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.3 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.6 - ghost atom cutoff = 1.6 - binsize = 0.8 -> bins = 21 21 21 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 40 1.0490928 -3.0667608 0 -1.493515 6.2796311 50 1.0764484 -3.1173704 0 -1.5031014 6.0850409 -Loop time of 0.00257862 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00268328 on 4 procs for 10 steps with 4000 atoms -Performance: 1675317.210 tau/day, 3878.049 timesteps/s -77.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1609968.749 tau/day, 3726.780 timesteps/s +99.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0012422 | 0.0012776 | 0.0013103 | 0.1 | 49.55 -Neigh | 0.0007019 | 0.00072145 | 0.00073099 | 0.0 | 27.98 -Comm | 0.00027132 | 0.00031221 | 0.00036168 | 0.2 | 12.11 -Output | 1.7881e-05 | 1.9133e-05 | 2.1935e-05 | 0.0 | 0.74 -Modify | 0.00012279 | 0.00012654 | 0.00012875 | 0.0 | 4.91 -Other | | 0.0001217 | | | 4.72 +Pair | 0.0012326 | 0.0012579 | 0.0012789 | 0.1 | 46.88 +Neigh | 0.00073671 | 0.00076056 | 0.00077105 | 0.0 | 28.34 +Comm | 0.00031805 | 0.00035089 | 0.0003984 | 0.0 | 13.08 +Output | 1.7405e-05 | 2.2769e-05 | 3.8147e-05 | 0.0 | 0.85 +Modify | 0.00014949 | 0.00015247 | 0.00015497 | 0.0 | 5.68 +Other | | 0.0001387 | | | 5.17 Nlocal: 1000 ave 1013 max 974 min Histogram: 1 0 0 0 0 0 0 1 0 2 @@ -274,31 +254,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.4 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.7 - ghost atom cutoff = 1.7 - binsize = 0.85 -> bins = 20 20 20 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 50 1.0764484 -3.6112241 0 -1.9969552 5.4223348 60 1.1101013 -3.6616014 0 -1.9968657 5.2348251 -Loop time of 0.00283062 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00504404 on 4 procs for 10 steps with 4000 atoms -Performance: 1526164.943 tau/day, 3532.789 timesteps/s -97.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 856455.812 tau/day, 1982.537 timesteps/s +88.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0014381 | 0.0014688 | 0.0015128 | 0.1 | 51.89 -Neigh | 0.00070405 | 0.000714 | 0.00071907 | 0.0 | 25.22 -Comm | 0.00032473 | 0.00037426 | 0.0004046 | 0.2 | 13.22 -Output | 1.8835e-05 | 1.961e-05 | 2.1935e-05 | 0.0 | 0.69 -Modify | 0.00012612 | 0.00012892 | 0.00013089 | 0.0 | 4.55 -Other | | 0.000125 | | | 4.42 +Pair | 0.0013909 | 0.001602 | 0.0021472 | 0.8 | 31.76 +Neigh | 0.00074077 | 0.00075352 | 0.00076365 | 0.0 | 14.94 +Comm | 0.00083065 | 0.0018672 | 0.0025668 | 1.7 | 37.02 +Output | 2.1458e-05 | 2.7359e-05 | 4.4346e-05 | 0.0 | 0.54 +Modify | 0.00014758 | 0.0001505 | 0.00015235 | 0.0 | 2.98 +Other | | 0.0006434 | | | 12.76 Nlocal: 1000 ave 1016 max 981 min Histogram: 1 0 0 0 1 0 1 0 0 1 @@ -315,31 +288,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.5 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.8 - ghost atom cutoff = 1.8 - binsize = 0.9 -> bins = 19 19 19 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 60 1.1101013 -3.9655053 0 -2.3007696 4.7849008 70 1.1122144 -3.9657095 0 -2.297805 4.8014106 -Loop time of 0.00313491 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.003398 on 4 procs for 10 steps with 4000 atoms -Performance: 1378031.621 tau/day, 3189.888 timesteps/s -87.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1271335.633 tau/day, 2942.907 timesteps/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0016167 | 0.001663 | 0.0016985 | 0.1 | 53.05 -Neigh | 0.00075388 | 0.00076818 | 0.00078201 | 0.0 | 24.50 -Comm | 0.00037456 | 0.00042272 | 0.00048018 | 0.2 | 13.48 -Output | 1.7881e-05 | 1.9133e-05 | 2.1935e-05 | 0.0 | 0.61 -Modify | 0.00012636 | 0.00012881 | 0.00013304 | 0.0 | 4.11 -Other | | 0.0001331 | | | 4.25 +Pair | 0.0015702 | 0.0016137 | 0.001651 | 0.1 | 47.49 +Neigh | 0.00080371 | 0.00082165 | 0.00084138 | 0.0 | 24.18 +Comm | 0.0005908 | 0.00064844 | 0.00071096 | 0.0 | 19.08 +Output | 1.7643e-05 | 2.3365e-05 | 4.0293e-05 | 0.0 | 0.69 +Modify | 0.00014853 | 0.00015211 | 0.00015593 | 0.0 | 4.48 +Other | | 0.0001387 | | | 4.08 Nlocal: 1000 ave 1022 max 982 min Histogram: 1 0 0 1 0 1 0 0 0 1 @@ -356,31 +322,24 @@ pair_style lj/cut ${cut} pair_style lj/cut 1.6 pair_coeff * * 1.0 1.0 run 10 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.9 - ghost atom cutoff = 1.9 - binsize = 0.95 -> bins = 18 18 18 -Memory usage per processor = 2.63679 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.238 | 3.238 | 3.238 Mbytes Step Temp E_pair E_mol TotEng Press 70 1.1122144 -4.1752688 0 -2.5073643 4.4755409 80 1.117224 -4.1831357 0 -2.5077187 4.446079 -Loop time of 0.00345927 on 4 procs for 10 steps with 4000 atoms +Loop time of 0.00420767 on 4 procs for 10 steps with 4000 atoms -Performance: 1248816.671 tau/day, 2890.779 timesteps/s -79.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1026696.317 tau/day, 2376.612 timesteps/s +95.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0019331 | 0.0019561 | 0.0019834 | 0.0 | 56.55 -Neigh | 0.00081587 | 0.00081897 | 0.00082588 | 0.0 | 23.67 -Comm | 0.00037837 | 0.00040215 | 0.00041842 | 0.1 | 11.63 -Output | 1.812e-05 | 1.9312e-05 | 2.1935e-05 | 0.0 | 0.56 -Modify | 0.00012708 | 0.00013059 | 0.00013423 | 0.0 | 3.78 -Other | | 0.0001321 | | | 3.82 +Pair | 0.0019023 | 0.00194 | 0.0019965 | 0.1 | 46.11 +Neigh | 0.00088286 | 0.00088775 | 0.00089431 | 0.0 | 21.10 +Comm | 0.0010023 | 0.0010559 | 0.0010967 | 0.1 | 25.09 +Output | 2.0027e-05 | 2.6524e-05 | 4.53e-05 | 0.0 | 0.63 +Modify | 0.00014782 | 0.00015038 | 0.00015473 | 0.0 | 3.57 +Other | | 0.0001471 | | | 3.50 Nlocal: 1000 ave 1013 max 987 min Histogram: 1 0 1 0 0 0 0 1 0 1 diff --git a/examples/python/log.4May17.pair_python_coulomb.1 b/examples/python/log.4May17.pair_python_coulomb.1 deleted file mode 100644 index 97826eda47..0000000000 --- a/examples/python/log.4May17.pair_python_coulomb.1 +++ /dev/null @@ -1,178 +0,0 @@ -LAMMPS (4 May 2017) - using 1 OpenMP thread(s) per MPI task -units real -atom_style full - -read_data data.spce - orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 3000 bonds - reading angles ... - 1500 angles - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - -pair_style hybrid/overlay python 12.0 coul/long 12.0 -kspace_style pppm 1.0e-6 - -pair_coeff * * coul/long -pair_coeff * * python potentials.LJCutSPCE OW NULL - -pair_modify table 0 - -bond_style harmonic -angle_style harmonic -dihedral_style none -improper_style none - -bond_coeff 1 1000.00 1.000 -angle_coeff 1 100.0 109.47 - -special_bonds lj/coul 0.0 0.0 1.0 - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 2 = max # of special neighbors - -neighbor 2.0 bin - -fix 1 all shake 0.0001 20 0 b 1 a 1 - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 1500 = # of frozen angles -fix 2 all nvt temp 300.0 300.0 100.0 - -# create combined lj/coul table for all atom types -# generate tabulated potential from python variant -pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW -0.8472 -0.8472 -PPPM initialization ... -WARNING: Using polynomial approximation for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.279652 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.000394206 - estimated relative force accuracy = 1.18714e-06 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair python, perpetual, skip from (2) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (2) pair coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -pair_write 1 2 2000 rsq 0.1 12 spce.table OW-HW -0.8472 0.4236 -PPPM initialization ... -WARNING: Using polynomial approximation for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.279652 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.000394206 - estimated relative force accuracy = 1.18714e-06 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 -pair_write 2 2 2000 rsq 0.1 12 spce.table HW-HW 0.4236 0.4236 -PPPM initialization ... -WARNING: Using polynomial approximation for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.279652 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.000394206 - estimated relative force accuracy = 1.18714e-06 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 - -# switch to tabulated potential -pair_style table linear 2000 pppm -pair_coeff 1 1 spce.table OW-OW -pair_coeff 1 2 spce.table OW-HW -pair_coeff 2 2 spce.table HW-HW - -thermo 10 -run 100 -PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.279652 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.000394674 - estimated relative force accuracy = 1.18855e-06 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair table, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 35.26 | 35.26 | 35.26 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -100272.97 0 -100272.97 -1282.0708 - 10 120.61568 -101350.63 0 -100272.39 -4077.5051 - 20 136.11379 -101465.43 0 -100248.65 -5136.5677 - 30 137.01602 -101455.3 0 -100230.46 -5347.8311 - 40 153.424 -101582.46 0 -100210.93 -5223.1676 - 50 167.73654 -101686.24 0 -100186.77 -4468.6687 - 60 163.11642 -101618.16 0 -100159.99 -3291.7815 - 70 169.64512 -101647.89 0 -100131.35 -2611.638 - 80 182.9979 -101737.01 0 -100101.11 -2390.6293 - 90 191.33873 -101778.71 0 -100068.24 -2239.386 - 100 194.7458 -101775.84 0 -100034.92 -1951.9128 -Loop time of 7.60221 on 1 procs for 100 steps with 4500 atoms - -Performance: 1.137 ns/day, 21.117 hours/ns, 13.154 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.7401 | 5.7401 | 5.7401 | 0.0 | 75.51 -Bond | 0.00017881 | 0.00017881 | 0.00017881 | 0.0 | 0.00 -Kspace | 1.5387 | 1.5387 | 1.5387 | 0.0 | 20.24 -Neigh | 0.2299 | 0.2299 | 0.2299 | 0.0 | 3.02 -Comm | 0.024311 | 0.024311 | 0.024311 | 0.0 | 0.32 -Output | 0.00057936 | 0.00057936 | 0.00057936 | 0.0 | 0.01 -Modify | 0.063158 | 0.063158 | 0.063158 | 0.0 | 0.83 -Other | | 0.005243 | | | 0.07 - -Nlocal: 4500 ave 4500 max 4500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 21216 ave 21216 max 21216 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.60177e+06 ave 2.60177e+06 max 2.60177e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2601766 -Ave neighs/atom = 578.17 -Ave special neighs/atom = 2 -Neighbor list builds = 3 -Dangerous builds = 0 - -shell rm spce.table - -Total wall time: 0:00:07 diff --git a/examples/python/log.4May17.pair_python_coulomb.g++.1 b/examples/python/log.4May17.pair_python_coulomb.g++.1 deleted file mode 100644 index b08d4b939c..0000000000 --- a/examples/python/log.4May17.pair_python_coulomb.g++.1 +++ /dev/null @@ -1,138 +0,0 @@ -LAMMPS (4 May 2017) - using 1 OpenMP thread(s) per MPI task -units real -atom_style full - -read_data data.spce - orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 3000 bonds - reading angles ... - 1500 angles - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - -pair_style hybrid/overlay coul/cut 12.0 python 12.0 - -pair_coeff * * coul/cut -pair_coeff * * python py_pot.LJCutSPCE OW NULL - -bond_style harmonic -angle_style harmonic -dihedral_style none -improper_style none - -bond_coeff 1 1000.00 1.000 -angle_coeff 1 100.0 109.47 - -special_bonds lj/coul 0.0 0.0 1.0 - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 2 = max # of special neighbors - -neighbor 2.0 bin - -fix 1 all shake 0.0001 20 0 b 1 a 1 - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 1500 = # of frozen angles -fix 2 all nvt temp 300.0 300.0 100.0 - -# create combined lj/coul table for all atom types -# generate tabulated potential from python variant -pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW -0.8472 -0.8472 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair coul/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard - (2) pair python, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -pair_write 1 2 2000 rsq 0.1 12 spce.table OW-HW -0.8472 0.4236 -pair_write 2 2 2000 rsq 0.1 12 spce.table HW-HW 0.4236 0.4236 - -# switch to tabulated potential -pair_style table linear 2000 pppm -pair_coeff 1 1 spce.table OW-OW -pair_coeff 1 2 spce.table OW-HW -pair_coeff 2 2 spce.table HW-HW - -thermo 10 -run 100 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair table, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 25.08 | 25.08 | 25.08 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -18284.922 0 -18284.922 -2080.7739 - 10 146.83806 -19552.072 0 -18239.421 -4865.31 - 20 183.15761 -18706.872 0 -17069.543 -4865.6695 - 30 205.96203 -18901.541 0 -17060.354 -4454.8634 - 40 241.62768 -18323.117 0 -16163.099 -3269.1475 - 50 265.98384 -19883.562 0 -17505.813 -2788.5194 - 60 274.01897 -21320.575 0 -18870.996 -2387.0708 - 70 288.7601 -19849.269 0 -17267.913 -1235.818 - 80 300.64724 -20958.602 0 -18270.981 -1714.7988 - 90 304.19113 -21580.4 0 -18861.099 -2144.1614 - 100 304.22027 -21239.014 0 -18519.452 -2092.6759 -Loop time of 6.01861 on 1 procs for 100 steps with 4500 atoms - -Performance: 1.436 ns/day, 16.718 hours/ns, 16.615 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.698 | 5.698 | 5.698 | 0.0 | 94.67 -Bond | 0.0001626 | 0.0001626 | 0.0001626 | 0.0 | 0.00 -Neigh | 0.23235 | 0.23235 | 0.23235 | 0.0 | 3.86 -Comm | 0.018961 | 0.018961 | 0.018961 | 0.0 | 0.32 -Output | 0.00058126 | 0.00058126 | 0.00058126 | 0.0 | 0.01 -Modify | 0.063452 | 0.063452 | 0.063452 | 0.0 | 1.05 -Other | | 0.005146 | | | 0.09 - -Nlocal: 4500 ave 4500 max 4500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 21285 ave 21285 max 21285 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.59766e+06 ave 2.59766e+06 max 2.59766e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2597662 -Ave neighs/atom = 577.258 -Ave special neighs/atom = 2 -Neighbor list builds = 3 -Dangerous builds = 0 - -shell rm spce.table - -Total wall time: 0:00:06 diff --git a/examples/python/log.4May17.pair_python_coulomb.g++.4 b/examples/python/log.4May17.pair_python_coulomb.g++.4 deleted file mode 100644 index b002d5c1ab..0000000000 --- a/examples/python/log.4May17.pair_python_coulomb.g++.4 +++ /dev/null @@ -1,138 +0,0 @@ -LAMMPS (4 May 2017) - using 1 OpenMP thread(s) per MPI task -units real -atom_style full - -read_data data.spce - orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 3000 bonds - reading angles ... - 1500 angles - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - -pair_style hybrid/overlay coul/cut 12.0 python 12.0 - -pair_coeff * * coul/cut -pair_coeff * * python py_pot.LJCutSPCE OW NULL - -bond_style harmonic -angle_style harmonic -dihedral_style none -improper_style none - -bond_coeff 1 1000.00 1.000 -angle_coeff 1 100.0 109.47 - -special_bonds lj/coul 0.0 0.0 1.0 - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 2 = max # of special neighbors - -neighbor 2.0 bin - -fix 1 all shake 0.0001 20 0 b 1 a 1 - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 1500 = # of frozen angles -fix 2 all nvt temp 300.0 300.0 100.0 - -# create combined lj/coul table for all atom types -# generate tabulated potential from python variant -pair_write 1 1 2000 rsq 0.1 12 spce.table OW-OW -0.8472 -0.8472 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair coul/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard - (2) pair python, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -pair_write 1 2 2000 rsq 0.1 12 spce.table OW-HW -0.8472 0.4236 -pair_write 2 2 2000 rsq 0.1 12 spce.table HW-HW 0.4236 0.4236 - -# switch to tabulated potential -pair_style table linear 2000 pppm -pair_coeff 1 1 spce.table OW-OW -pair_coeff 1 2 spce.table OW-HW -pair_coeff 2 2 spce.table HW-HW - -thermo 10 -run 100 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 6 6 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair table, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 9.962 | 9.963 | 9.963 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -18284.922 0 -18284.922 -2080.7739 - 10 146.83806 -19552.072 0 -18239.421 -4865.31 - 20 183.15761 -18706.872 0 -17069.543 -4865.6695 - 30 205.96203 -18901.541 0 -17060.354 -4454.8634 - 40 241.62768 -18323.117 0 -16163.099 -3269.1475 - 50 265.98384 -19883.562 0 -17505.813 -2788.5194 - 60 274.01897 -21320.575 0 -18870.996 -2387.0708 - 70 288.7601 -19849.269 0 -17267.913 -1235.818 - 80 300.64724 -20958.602 0 -18270.981 -1714.7988 - 90 304.19113 -21580.4 0 -18861.099 -2144.1614 - 100 304.22027 -21239.014 0 -18519.452 -2092.6759 -Loop time of 1.7361 on 4 procs for 100 steps with 4500 atoms - -Performance: 4.977 ns/day, 4.823 hours/ns, 57.600 timesteps/s -99.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.4424 | 1.5149 | 1.6066 | 5.3 | 87.26 -Bond | 8.9407e-05 | 0.00010258 | 0.00012374 | 0.0 | 0.01 -Neigh | 0.064205 | 0.064241 | 0.064295 | 0.0 | 3.70 -Comm | 0.023643 | 0.1155 | 0.18821 | 19.2 | 6.65 -Output | 0.00038004 | 0.00042355 | 0.00054145 | 0.0 | 0.02 -Modify | 0.037507 | 0.037787 | 0.038042 | 0.1 | 2.18 -Other | | 0.003148 | | | 0.18 - -Nlocal: 1125 ave 1162 max 1098 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Nghost: 12267.8 ave 12302 max 12238 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 649416 ave 681458 max 630541 min -Histogram: 1 0 2 0 0 0 0 0 0 1 - -Total # of neighbors = 2597662 -Ave neighs/atom = 577.258 -Ave special neighs/atom = 2 -Neighbor list builds = 3 -Dangerous builds = 0 - -shell rm spce.table - -Total wall time: 0:00:01 From 4b8c6d40e2e857330eaafe6d825e9df29e234780 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 15:15:14 -0500 Subject: [PATCH 232/273] update log files for qeq and rdf-adf examples --- examples/qeq/ffield.reax.cho | 0 ....buck.g++.1 => log.27Nov18.qeq.buck.g++.1} | 62 +++--- ....buck.g++.4 => log.27Nov18.qeq.buck.g++.4} | 62 +++--- ...eaxc.g++.1 => log.27Nov18.qeq.reaxc.g++.1} | 35 +-- ...eaxc.g++.4 => log.27Nov18.qeq.reaxc.g++.4} | 35 +-- ...2018.spce.g++.2 => log.27Nov18.spce.g++.1} | 131 +++++------ examples/rdf-adf/log.27Nov18.spce.g++.4 | 203 ++++++++++++++++++ 7 files changed, 389 insertions(+), 139 deletions(-) mode change 100755 => 100644 examples/qeq/ffield.reax.cho rename examples/qeq/{log.5Oct16.qeq.buck.g++.1 => log.27Nov18.qeq.buck.g++.1} (60%) rename examples/qeq/{log.5Oct16.qeq.buck.g++.4 => log.27Nov18.qeq.buck.g++.4} (57%) rename examples/qeq/{log.5Oct16.qeq.reaxc.g++.1 => log.27Nov18.qeq.reaxc.g++.1} (76%) rename examples/qeq/{log.5Oct16.qeq.reaxc.g++.4 => log.27Nov18.qeq.reaxc.g++.4} (76%) rename examples/rdf-adf/{log.10Oct2018.spce.g++.2 => log.27Nov18.spce.g++.1} (52%) create mode 100644 examples/rdf-adf/log.27Nov18.spce.g++.4 diff --git a/examples/qeq/ffield.reax.cho b/examples/qeq/ffield.reax.cho old mode 100755 new mode 100644 diff --git a/examples/qeq/log.5Oct16.qeq.buck.g++.1 b/examples/qeq/log.27Nov18.qeq.buck.g++.1 similarity index 60% rename from examples/qeq/log.5Oct16.qeq.buck.g++.1 rename to examples/qeq/log.27Nov18.qeq.buck.g++.1 index 2dbd6674ae..4d5225ccc3 100644 --- a/examples/qeq/log.5Oct16.qeq.buck.g++.1 +++ b/examples/qeq/log.27Nov18.qeq.buck.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # This example demonstrates the use of various fix qeq variants with # that defines and uses charges, in this case pair_style buck/coul/long @@ -14,6 +15,7 @@ replicate 2 2 2 orthogonal box = (0 0 0) to (50.3166 50.3166 56.0405) 1 by 1 by 1 MPI processor grid 9600 atoms + Time spent = 0.00114894 secs pair_style buck/coul/long 12.0 pair_coeff 2 2 1388.77 .3623188 175.0 @@ -50,47 +52,57 @@ fix 2 all qeq/fire 1 10 1.0e-4 100 param.qeq2 run 100 Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.305064 estimated absolute RMS force accuracy = 2.07629e-05 estimated relative force accuracy = 1.44191e-06 KSpace vectors: actual max1d max3d = 13556 20 34460 kxmax kymax kzmax = 18 18 20 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 8 8 9 -Memory usage per processor = 110.875 Mbytes + binsize = 6.5, bins = 8 8 9 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair buck/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix qeq/fire, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 134 | 134 | 134 Mbytes Step PotEng c_q1 c_q2 v_qtot S/CPU 0 -27457.219 0.85227886 -0.42613943 -2.1827873e-10 0 - 10 -27626.057 0.85486228 -0.42743114 -2.0372681e-10 0.64960264 - 20 -27975.085 0.85968531 -0.42984266 -8.8220986e-11 0.55300005 - 30 -28552.628 0.86755661 -0.4337783 1.4142643e-10 0.52434987 - 40 -29133.643 0.87426387 -0.43713193 1.6871127e-10 0.52326849 - 50 -29697.011 0.8794039 -0.43970195 1.2460077e-10 0.52083626 - 60 -30342.001 0.88478594 -0.44239297 -4.3655746e-11 0.52824882 - 70 -31081.138 0.8906973 -0.44534865 -4.7293724e-11 0.56010601 - 80 -31792.732 0.89506635 -0.44753317 -3.774403e-11 0.60040973 - 90 -32424.749 0.89714841 -0.44857421 -1.0004442e-10 0.57758717 - 100 -32998.353 0.89755721 -0.44877861 -1.0231815e-10 0.59560798 -Loop time of 178.401 on 1 procs for 100 steps with 9600 atoms + 10 -27626.057 0.85486228 -0.42743114 -2.0372681e-10 0.64313877 + 20 -27975.085 0.85968531 -0.42984266 -1.036824e-10 0.55119179 + 30 -28552.628 0.86755661 -0.4337783 1.3051249e-10 0.53160643 + 40 -29133.643 0.87426387 -0.43713193 1.1368684e-10 0.53075341 + 50 -29697.011 0.8794039 -0.43970195 1.200533e-10 0.52358127 + 60 -30342.001 0.88478594 -0.44239297 6.002665e-11 0.5366762 + 70 -31081.138 0.8906973 -0.44534865 -4.7293724e-11 0.55904546 + 80 -31792.732 0.89506635 -0.44753317 -4.3200998e-11 0.59606079 + 90 -32424.749 0.89714841 -0.44857421 -1.1596057e-10 0.58047419 + 100 -32998.353 0.89755721 -0.44877861 -1.0231815e-10 0.59444001 +Loop time of 177.79 on 1 procs for 100 steps with 9600 atoms -Performance: 0.005 ns/day, 4955.597 hours/ns, 0.561 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.005 ns/day, 4938.612 hours/ns, 0.562 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.042 | 15.042 | 15.042 | 0.0 | 8.43 -Kspace | 98.245 | 98.245 | 98.245 | 0.0 | 55.07 +Pair | 11.518 | 11.518 | 11.518 | 0.0 | 6.48 +Kspace | 107.37 | 107.37 | 107.37 | 0.0 | 60.39 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.019511 | 0.019511 | 0.019511 | 0.0 | 0.01 -Output | 0.0020375 | 0.0020375 | 0.0020375 | 0.0 | 0.00 -Modify | 65.083 | 65.083 | 65.083 | 0.0 | 36.48 -Other | | 0.009152 | | | 0.01 +Comm | 0.019721 | 0.019721 | 0.019721 | 0.0 | 0.01 +Output | 0.002218 | 0.002218 | 0.002218 | 0.0 | 0.00 +Modify | 58.869 | 58.869 | 58.869 | 0.0 | 33.11 +Other | | 0.007197 | | | 0.00 Nlocal: 9600 ave 9600 max 9600 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -103,4 +115,4 @@ Total # of neighbors = 2940800 Ave neighs/atom = 306.333 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:03:02 +Total wall time: 0:03:01 diff --git a/examples/qeq/log.5Oct16.qeq.buck.g++.4 b/examples/qeq/log.27Nov18.qeq.buck.g++.4 similarity index 57% rename from examples/qeq/log.5Oct16.qeq.buck.g++.4 rename to examples/qeq/log.27Nov18.qeq.buck.g++.4 index 0f628740bd..947c3caeaf 100644 --- a/examples/qeq/log.5Oct16.qeq.buck.g++.4 +++ b/examples/qeq/log.27Nov18.qeq.buck.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # This example demonstrates the use of various fix qeq variants with # that defines and uses charges, in this case pair_style buck/coul/long @@ -14,6 +15,7 @@ replicate 2 2 2 orthogonal box = (0 0 0) to (50.3166 50.3166 56.0405) 1 by 2 by 2 MPI processor grid 9600 atoms + Time spent = 0.000675201 secs pair_style buck/coul/long 12.0 pair_coeff 2 2 1388.77 .3623188 175.0 @@ -50,47 +52,57 @@ fix 2 all qeq/fire 1 10 1.0e-4 100 param.qeq2 run 100 Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.305064 estimated absolute RMS force accuracy = 2.07629e-05 estimated relative force accuracy = 1.44191e-06 KSpace vectors: actual max1d max3d = 13556 20 34460 kxmax kymax kzmax = 18 18 20 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 8 8 9 -Memory usage per processor = 46.867 Mbytes + binsize = 6.5, bins = 8 8 9 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair buck/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix qeq/fire, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 53.06 | 53.13 | 53.21 Mbytes Step PotEng c_q1 c_q2 v_qtot S/CPU 0 -27457.215 0.85227886 -0.42613943 2.1373125e-11 0 - 10 -27626.057 0.85486228 -0.42743114 3.0468073e-11 2.561772 - 20 -27975.085 0.85968531 -0.42984266 9.777068e-11 2.1470405 - 30 -28552.627 0.86755661 -0.4337783 1.2823875e-10 2.0585052 - 40 -29133.643 0.87426387 -0.43713193 1.5506885e-10 2.0319632 - 50 -29697.01 0.8794039 -0.43970195 2.1873348e-10 2.0350244 - 60 -30342 0.88478594 -0.44239297 1.891749e-10 2.0793976 - 70 -31081.139 0.89069733 -0.44534866 1.4688339e-10 2.1759002 - 80 -31792.732 0.89506635 -0.44753317 1.4142643e-10 2.3320978 - 90 -32424.752 0.89714841 -0.44857421 9.9134922e-11 2.2673305 - 100 -32998.353 0.89755721 -0.44877861 1.5097612e-10 2.3389389 -Loop time of 45.6331 on 4 procs for 100 steps with 9600 atoms + 10 -27626.057 0.85486228 -0.42743114 3.0468073e-11 2.4245312 + 20 -27975.085 0.85968531 -0.42984266 1.0095391e-10 2.0185316 + 30 -28552.627 0.86755661 -0.4337783 1.3096724e-10 1.9605335 + 40 -29133.643 0.87426387 -0.43713193 1.5279511e-10 1.9624139 + 50 -29697.01 0.8794039 -0.43970195 1.6461854e-10 1.8113263 + 60 -30342 0.88478594 -0.44239297 1.7826096e-10 1.9537722 + 70 -31081.139 0.89069733 -0.44534866 1.4733814e-10 2.058406 + 80 -31792.732 0.89506635 -0.44753317 1.3824319e-10 2.2160813 + 90 -32424.752 0.89714841 -0.44857421 1.2914825e-10 2.0952145 + 100 -32998.353 0.89755721 -0.44877861 1.4824764e-10 2.1292486 +Loop time of 48.7541 on 4 procs for 100 steps with 9600 atoms -Performance: 0.019 ns/day, 1267.586 hours/ns, 2.191 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.018 ns/day, 1354.281 hours/ns, 2.051 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.8297 | 3.8983 | 3.938 | 2.1 | 8.54 -Kspace | 24.434 | 24.579 | 24.78 | 2.9 | 53.86 +Pair | 2.9747 | 3.0315 | 3.0758 | 2.1 | 6.22 +Kspace | 27.873 | 28.264 | 28.63 | 5.3 | 57.97 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.078239 | 0.31795 | 0.53069 | 30.8 | 0.70 -Output | 0.00097322 | 0.0010365 | 0.0011294 | 0.2 | 0.00 -Modify | 16.831 | 16.832 | 16.832 | 0.0 | 36.88 -Other | | 0.005259 | | | 0.01 +Comm | 0.53835 | 0.8523 | 1.2286 | 28.2 | 1.75 +Output | 0.0012984 | 0.001591 | 0.0024178 | 1.2 | 0.00 +Modify | 16.58 | 16.59 | 16.601 | 0.3 | 34.03 +Other | | 0.01409 | | | 0.03 Nlocal: 2400 ave 2400 max 2400 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -103,4 +115,4 @@ Total # of neighbors = 2940800 Ave neighs/atom = 306.333 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:46 +Total wall time: 0:00:49 diff --git a/examples/qeq/log.5Oct16.qeq.reaxc.g++.1 b/examples/qeq/log.27Nov18.qeq.reaxc.g++.1 similarity index 76% rename from examples/qeq/log.5Oct16.qeq.reaxc.g++.1 rename to examples/qeq/log.27Nov18.qeq.reaxc.g++.1 index 493b4b62d8..c88acc39f2 100644 --- a/examples/qeq/log.5Oct16.qeq.reaxc.g++.1 +++ b/examples/qeq/log.27Nov18.qeq.reaxc.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # This example demonstrates the use of various fix qeq variants with pair reax/c # You can comment in/out various versions below # @@ -54,13 +55,23 @@ timestep 0.25 run 10 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 11 ghost atom cutoff = 11 - binsize = 5.5 -> bins = 5 5 5 -Memory usage per processor = 15.8004 Mbytes + binsize = 5.5, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reax/c, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: half/ghost/bin/3d/newtoff + bin: standard + (2) fix qeq/reax, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 16.65 | 16.65 | 16.65 Mbytes Step PotEng c_q1 c_q2 c_q3 v_qtot 0 -10226.557 0.095634063 -0.15658793 -0.091167279 4.4408921e-16 1 -10225.799 0.095649584 -0.1566219 -0.091171371 7.1054274e-15 @@ -73,20 +84,20 @@ Step PotEng c_q1 c_q2 c_q3 v_qtot 8 -10194.646 0.095767243 -0.15689184 -0.091186932 -2.4424907e-15 9 -10190.016 0.095760528 -0.15687664 -0.091185782 -4.4408921e-16 10 -10186.168 0.095748006 -0.15684815 -0.09118383 1.110223e-15 -Loop time of 0.0398569 on 1 procs for 10 steps with 105 atoms +Loop time of 0.0322483 on 1 procs for 10 steps with 105 atoms -Performance: 5.419 ns/day, 4.429 hours/ns, 250.898 timesteps/s -100.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 6.698 ns/day, 3.583 hours/ns, 310.094 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.034917 | 0.034917 | 0.034917 | 0.0 | 87.61 +Pair | 0.026229 | 0.026229 | 0.026229 | 0.0 | 81.34 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 3.2663e-05 | 3.2663e-05 | 3.2663e-05 | 0.0 | 0.08 -Output | 0.00016952 | 0.00016952 | 0.00016952 | 0.0 | 0.43 -Modify | 0.0047123 | 0.0047123 | 0.0047123 | 0.0 | 11.82 -Other | | 2.527e-05 | | | 0.06 +Comm | 5.2214e-05 | 5.2214e-05 | 5.2214e-05 | 0.0 | 0.16 +Output | 0.00027299 | 0.00027299 | 0.00027299 | 0.0 | 0.85 +Modify | 0.0056667 | 0.0056667 | 0.0056667 | 0.0 | 17.57 +Other | | 2.694e-05 | | | 0.08 Nlocal: 105 ave 105 max 105 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/qeq/log.5Oct16.qeq.reaxc.g++.4 b/examples/qeq/log.27Nov18.qeq.reaxc.g++.4 similarity index 76% rename from examples/qeq/log.5Oct16.qeq.reaxc.g++.4 rename to examples/qeq/log.27Nov18.qeq.reaxc.g++.4 index 834c8170c8..c54a99577e 100644 --- a/examples/qeq/log.5Oct16.qeq.reaxc.g++.4 +++ b/examples/qeq/log.27Nov18.qeq.reaxc.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # This example demonstrates the use of various fix qeq variants with pair reax/c # You can comment in/out various versions below # @@ -54,13 +55,23 @@ timestep 0.25 run 10 Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 11 ghost atom cutoff = 11 - binsize = 5.5 -> bins = 5 5 5 -Memory usage per processor = 11.6046 Mbytes + binsize = 5.5, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reax/c, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: half/ghost/bin/3d/newtoff + bin: standard + (2) fix qeq/reax, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 10.83 | 11.69 | 12.52 Mbytes Step PotEng c_q1 c_q2 c_q3 v_qtot 0 -10226.557 0.095633919 -0.15658765 -0.091167194 1.7763568e-15 1 -10225.799 0.0956503 -0.15662357 -0.09117143 2.8865799e-15 @@ -73,20 +84,20 @@ Step PotEng c_q1 c_q2 c_q3 v_qtot 8 -10194.646 0.095766449 -0.15689014 -0.091186673 -4.4408921e-16 9 -10190.016 0.095761078 -0.15687818 -0.09118551 -4.4408921e-16 10 -10186.168 0.095747223 -0.15684634 -0.091183742 0 -Loop time of 0.0217528 on 4 procs for 10 steps with 105 atoms +Loop time of 0.0185181 on 4 procs for 10 steps with 105 atoms -Performance: 9.930 ns/day, 2.417 hours/ns, 459.710 timesteps/s -93.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 11.664 ns/day, 2.058 hours/ns, 540.011 timesteps/s +92.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.012203 | 0.014022 | 0.015427 | 1.0 | 64.46 +Pair | 0.0097179 | 0.01078 | 0.012052 | 0.8 | 58.21 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00011754 | 0.0015323 | 0.0033445 | 3.0 | 7.04 -Output | 0.00041366 | 0.00044626 | 0.00048447 | 0.1 | 2.05 -Modify | 0.0056725 | 0.0056758 | 0.0056815 | 0.0 | 26.09 -Other | | 7.629e-05 | | | 0.35 +Comm | 0.00041604 | 0.0017492 | 0.0028496 | 2.1 | 9.45 +Output | 0.00041103 | 0.00046283 | 0.00051498 | 0.0 | 2.50 +Modify | 0.0051849 | 0.0052357 | 0.0052917 | 0.1 | 28.27 +Other | | 0.0002902 | | | 1.57 Nlocal: 26.25 ave 35 max 15 min Histogram: 1 0 0 1 0 0 0 0 0 2 diff --git a/examples/rdf-adf/log.10Oct2018.spce.g++.2 b/examples/rdf-adf/log.27Nov18.spce.g++.1 similarity index 52% rename from examples/rdf-adf/log.10Oct2018.spce.g++.2 rename to examples/rdf-adf/log.27Nov18.spce.g++.1 index d19e69a031..70adb9d1c5 100644 --- a/examples/rdf-adf/log.10Oct2018.spce.g++.2 +++ b/examples/rdf-adf/log.27Nov18.spce.g++.1 @@ -1,12 +1,13 @@ -LAMMPS (10 Oct 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task +# Liquid water RDFs and ADFs (~12 O-O-O/atom, ~1 O-H...O/atom) + units real atom_style full read_data data.spce orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) - 1 by 2 by 1 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 4500 atoms scanning bonds ... @@ -65,7 +66,7 @@ PPPM initialization ... estimated absolute RMS force accuracy = 0.000394674 estimated relative force accuracy = 1.18855e-06 using double precision FFTs - 3d grid and FFT values/proc = 59643 32000 + 3d grid and FFT values/proc = 103823 64000 Neighbor list info ... update every 1 steps, delay 2 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -78,39 +79,39 @@ Neighbor list info ... pair build: half/bin/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 25.06 | 25.25 | 25.44 Mbytes +Per MPI rank memory allocation (min/avg/max) = 35.36 | 35.36 | 35.36 Mbytes Step Temp E_pair E_mol TotEng Press 0 300 -16692.369 0 -14010.534 -112.83562 - 100 283.44729 -17008.717 0 -14474.854 -162.06374 - 200 298.75279 -16765.544 0 -14094.858 428.79127 - 300 296.6501 -16589.155 0 -13937.267 547.40768 - 400 303.83151 -16625.028 0 -13908.942 237.9775 - 500 298.01615 -16717.015 0 -14052.915 230.7095 -Loop time of 21.4041 on 2 procs for 500 steps with 4500 atoms + 100 283.44729 -17008.717 0 -14474.854 -162.06378 + 200 298.75279 -16765.543 0 -14094.858 428.7917 + 300 296.65014 -16589.155 0 -13937.267 547.40796 + 400 303.82963 -16625.011 0 -13908.942 237.93694 + 500 298.00057 -16716.887 0 -14052.926 231.55014 +Loop time of 38.2796 on 1 procs for 500 steps with 4500 atoms -Performance: 4.037 ns/day, 5.946 hours/ns, 23.360 timesteps/s -94.8% CPU use with 2 MPI tasks x 1 OpenMP threads +Performance: 2.257 ns/day, 10.633 hours/ns, 13.062 timesteps/s +99.2% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 14.892 | 15.034 | 15.176 | 3.7 | 70.24 -Bond | 0.00056624 | 0.00059342 | 0.0006206 | 0.0 | 0.00 -Kspace | 3.987 | 4.1321 | 4.2773 | 7.1 | 19.31 -Neigh | 1.7494 | 1.7496 | 1.7497 | 0.0 | 8.17 -Comm | 0.20554 | 0.20637 | 0.2072 | 0.2 | 0.96 -Output | 0.00015688 | 0.00036144 | 0.00056601 | 0.0 | 0.00 -Modify | 0.25707 | 0.2606 | 0.26413 | 0.7 | 1.22 -Other | | 0.02059 | | | 0.10 +Pair | 28.428 | 28.428 | 28.428 | 0.0 | 74.26 +Bond | 0.00056672 | 0.00056672 | 0.00056672 | 0.0 | 0.00 +Kspace | 5.3161 | 5.3161 | 5.3161 | 0.0 | 13.89 +Neigh | 4.1185 | 4.1185 | 4.1185 | 0.0 | 10.76 +Comm | 0.12788 | 0.12788 | 0.12788 | 0.0 | 0.33 +Output | 0.00021887 | 0.00021887 | 0.00021887 | 0.0 | 0.00 +Modify | 0.26748 | 0.26748 | 0.26748 | 0.0 | 0.70 +Other | | 0.02102 | | | 0.05 -Nlocal: 2250 ave 2258 max 2242 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 16319 ave 16381 max 16257 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 1.30073e+06 ave 1.32386e+06 max 1.2776e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 4500 ave 4500 max 4500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 21248 ave 21248 max 21248 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.60146e+06 ave 2.60146e+06 max 2.60146e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 2601457 +Total # of neighbors = 2601459 Ave neighs/atom = 578.102 Ave special neighs/atom = 2 Neighbor list builds = 45 @@ -119,7 +120,7 @@ Dangerous builds = 0 reset_timestep 0 compute gofr all rdf 100 1 1 2 2 1 2 # O-O, H-H, O-H -compute gofa all adf 45 1 1 1 2.0 3.5 2.0 3.5 1 2 1 0.0 1.2 1.5 2.5 +compute gofa all adf 45 1 1 1 2.0 3.5 2.0 3.5 2 1 1 0.0 1.2 1.5 2.5 # O-O-O, O-H...O fix rdf all ave/time 100 10 1000 c_gofr[*] file spce-rdf.dat mode vector fix adf all ave/time 10 100 1000 c_gofa[*] file spce-adf.dat mode vector @@ -132,7 +133,7 @@ PPPM initialization ... estimated absolute RMS force accuracy = 0.000394674 estimated relative force accuracy = 1.18855e-06 using double precision FFTs - 3d grid and FFT values/proc = 59643 32000 + 3d grid and FFT values/proc = 103823 64000 Neighbor list info ... update every 1 steps, delay 2 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -155,48 +156,48 @@ Neighbor list info ... pair build: full/bin stencil: full/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 26.78 | 26.78 | 26.78 Mbytes +Per MPI rank memory allocation (min/avg/max) = 36.67 | 36.67 | 36.67 Mbytes Step Temp E_pair E_mol TotEng Press - 0 298.01615 -16717.015 0 -14052.915 230.81371 - 100 307.1766 -16759.33 0 -14013.341 454.2771 - 200 298.94628 -16674.186 0 -14001.771 114.20846 - 300 293.13091 -16581.542 0 -13961.113 272.85574 - 400 294.47017 -16556.872 0 -13924.471 180.3252 - 500 305.57174 -16647.976 0 -13916.333 -444.14856 - 600 302.53992 -16670.304 0 -13965.764 114.82353 - 700 306.56761 -16616.508 0 -13875.962 534.02537 - 800 299.06297 -16644.133 0 -13970.675 83.643063 - 900 301.15522 -16674.021 0 -13981.859 325.04538 - 1000 298.14963 -16701.663 0 -14036.369 356.0601 -Loop time of 53.3181 on 2 procs for 1000 steps with 4500 atoms + 0 298.00057 -16716.887 0 -14052.926 231.6595 + 100 307.31045 -16761.022 0 -14013.835 449.26027 + 200 299.52847 -16679.165 0 -14001.546 148.44719 + 300 293.68499 -16583.548 0 -13958.166 140.79069 + 400 306.76266 -16658.573 0 -13916.284 481.26934 + 500 294.75648 -16640.446 0 -14005.485 585.05479 + 600 303.19282 -16629.985 0 -13919.608 328.23667 + 700 300.28233 -16590.155 0 -13905.797 -176.71076 + 800 292.36899 -16620.826 0 -14007.208 -194.83408 + 900 304.92802 -16633.331 0 -13907.443 479.49808 + 1000 300.64529 -16598.233 0 -13910.63 904.96137 +Loop time of 107.579 on 1 procs for 1000 steps with 4500 atoms -Performance: 3.241 ns/day, 7.405 hours/ns, 18.755 timesteps/s -97.3% CPU use with 2 MPI tasks x 1 OpenMP threads +Performance: 1.606 ns/day, 14.942 hours/ns, 9.295 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 28.831 | 29.365 | 29.899 | 9.9 | 55.07 -Bond | 0.00097084 | 0.0010794 | 0.001188 | 0.3 | 0.00 -Kspace | 7.3086 | 7.8356 | 8.3626 | 18.8 | 14.70 -Neigh | 3.7241 | 3.7245 | 3.7248 | 0.0 | 6.99 -Comm | 0.32839 | 0.33495 | 0.34151 | 1.1 | 0.63 -Output | 0.00043344 | 0.0015392 | 0.002645 | 2.8 | 0.00 -Modify | 12.013 | 12.014 | 12.015 | 0.0 | 22.53 -Other | | 0.04153 | | | 0.08 +Pair | 58.928 | 58.928 | 58.928 | 0.0 | 54.78 +Bond | 0.0012271 | 0.0012271 | 0.0012271 | 0.0 | 0.00 +Kspace | 10.698 | 10.698 | 10.698 | 0.0 | 9.94 +Neigh | 8.7649 | 8.7649 | 8.7649 | 0.0 | 8.15 +Comm | 0.2608 | 0.2608 | 0.2608 | 0.0 | 0.24 +Output | 0.00043702 | 0.00043702 | 0.00043702 | 0.0 | 0.00 +Modify | 28.883 | 28.883 | 28.883 | 0.0 | 26.85 +Other | | 0.04301 | | | 0.04 -Nlocal: 2250 ave 2251 max 2249 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 16300 ave 16358 max 16242 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 1.301e+06 ave 1.31594e+06 max 1.28606e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -FullNghs: 2.602e+06 ave 2.60923e+06 max 2.59476e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 4500 ave 4500 max 4500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 21275 ave 21275 max 21275 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.60217e+06 ave 2.60217e+06 max 2.60217e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 5.20478e+06 ave 5.20478e+06 max 5.20478e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 5203998 -Ave neighs/atom = 1156.44 +Total # of neighbors = 5204784 +Ave neighs/atom = 1156.62 Ave special neighs/atom = 2 -Neighbor list builds = 93 +Neighbor list builds = 94 Dangerous builds = 0 -Total wall time: 0:01:14 +Total wall time: 0:02:26 diff --git a/examples/rdf-adf/log.27Nov18.spce.g++.4 b/examples/rdf-adf/log.27Nov18.spce.g++.4 new file mode 100644 index 0000000000..4fa0369e19 --- /dev/null +++ b/examples/rdf-adf/log.27Nov18.spce.g++.4 @@ -0,0 +1,203 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Liquid water RDFs and ADFs (~12 O-O-O/atom, ~1 O-H...O/atom) + +units real +atom_style full + +read_data data.spce + orthogonal box = (0.02645 0.02645 0.02641) to (35.5328 35.5328 35.4736) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 3000 bonds + reading angles ... + 1500 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + +pair_style lj/cut/coul/long 12.0 12.0 +pair_coeff * * 0.0 1.0 +pair_coeff 1 1 0.15535 3.166 +kspace_style pppm 1.0e-6 + +bond_style harmonic +angle_style harmonic +dihedral_style none +improper_style none + +bond_coeff 1 1000.00 1.000 +angle_coeff 1 100.0 109.47 + +# need to set bond/angle inclusion to > 0.0 +# so that intramolecular pairs are included in neighbor lists (required for second ADF) +special_bonds lj/coul 1.0e-100 1.0e-100 1.0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 2 = max # of special neighbors + +neighbor 2.0 bin +timestep 2.0 +neigh_modify every 1 delay 2 check yes + +fix 1 all shake 0.0001 20 0 b 1 a 1 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 1500 = # of frozen angles +fix 2 all nvt temp 300.0 300.0 100.0 + +velocity all create 300.0 6244325 + +thermo 100 +run 500 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.279652 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000394674 + estimated relative force accuracy = 1.18855e-06 + using double precision FFTs + 3d grid and FFT values/proc = 34263 16000 +Neighbor list info ... + update every 1 steps, delay 2 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 13.1 | 13.1 | 13.1 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -16692.369 0 -14010.534 -112.83562 + 100 283.44729 -17008.717 0 -14474.854 -162.06378 + 200 298.75279 -16765.543 0 -14094.858 428.79175 + 300 296.65013 -16589.155 0 -13937.267 547.40809 + 400 303.82993 -16625.014 0 -13908.942 237.957 + 500 298.00206 -16716.893 0 -14052.919 231.33112 +Loop time of 12.5516 on 4 procs for 500 steps with 4500 atoms + +Performance: 6.884 ns/day, 3.487 hours/ns, 39.836 timesteps/s +94.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.739 | 7.9051 | 8.2663 | 7.5 | 62.98 +Bond | 0.00061631 | 0.00064486 | 0.00070524 | 0.0 | 0.01 +Kspace | 2.7001 | 3.0573 | 3.2239 | 11.9 | 24.36 +Neigh | 1.1736 | 1.174 | 1.1743 | 0.0 | 9.35 +Comm | 0.18222 | 0.1869 | 0.19248 | 0.8 | 1.49 +Output | 0.00017595 | 0.00032246 | 0.00076079 | 0.0 | 0.00 +Modify | 0.20354 | 0.20467 | 0.20652 | 0.2 | 1.63 +Other | | 0.02259 | | | 0.18 + +Nlocal: 1125 ave 1132 max 1114 min +Histogram: 1 0 0 0 0 0 1 1 0 1 +Nghost: 12241 ave 12298 max 12196 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 650366 ave 671163 max 631441 min +Histogram: 1 0 0 1 0 1 0 0 0 1 + +Total # of neighbors = 2601464 +Ave neighs/atom = 578.103 +Ave special neighs/atom = 2 +Neighbor list builds = 45 +Dangerous builds = 0 + +reset_timestep 0 + +compute gofr all rdf 100 1 1 2 2 1 2 # O-O, H-H, O-H +compute gofa all adf 45 1 1 1 2.0 3.5 2.0 3.5 2 1 1 0.0 1.2 1.5 2.5 # O-O-O, O-H...O +fix rdf all ave/time 100 10 1000 c_gofr[*] file spce-rdf.dat mode vector +fix adf all ave/time 10 100 1000 c_gofa[*] file spce-adf.dat mode vector + +run 1000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.279652 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000394674 + estimated relative force accuracy = 1.18855e-06 + using double precision FFTs + 3d grid and FFT values/proc = 34263 16000 +Neighbor list info ... + update every 1 steps, delay 2 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 6 6 + 3 neighbor lists, perpetual/occasional/extra = 1 2 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) compute rdf, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none + (3) compute adf, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 13.96 | 13.96 | 13.96 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 298.00206 -16716.893 0 -14052.919 231.44272 + 100 307.28155 -16760.647 0 -14013.72 452.38436 + 200 299.05168 -16674.695 0 -14001.338 177.44237 + 300 292.7564 -16573.946 0 -13956.865 122.27796 + 400 299.2644 -16578.318 0 -13903.059 482.03304 + 500 296.04028 -16623.179 0 -13976.742 89.968145 + 600 300.30911 -16664.206 0 -13979.608 132.70079 + 700 292.39517 -16703.749 0 -14089.897 825.267 + 800 298.75851 -16661.684 0 -13990.948 468.68671 + 900 301.55689 -16644.846 0 -13949.093 -72.16965 + 1000 298.2852 -16682.077 0 -14015.572 0.69725342 +Loop time of 32.3106 on 4 procs for 1000 steps with 4500 atoms + +Performance: 5.348 ns/day, 4.488 hours/ns, 30.950 timesteps/s +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 15.647 | 15.876 | 16.119 | 4.3 | 49.13 +Bond | 0.0011718 | 0.0012704 | 0.001348 | 0.2 | 0.00 +Kspace | 5.286 | 5.5364 | 5.7729 | 7.5 | 17.13 +Neigh | 2.3892 | 2.3962 | 2.3991 | 0.3 | 7.42 +Comm | 0.34641 | 0.35514 | 0.35988 | 0.9 | 1.10 +Output | 0.00047851 | 0.00069892 | 0.0013568 | 0.0 | 0.00 +Modify | 8.0882 | 8.0963 | 8.1047 | 0.3 | 25.06 +Other | | 0.04887 | | | 0.15 + +Nlocal: 1125 ave 1137 max 1114 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Nghost: 12206.2 ave 12239 max 12169 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 650464 ave 655962 max 641444 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +FullNghs: 1.30095e+06 ave 1.31925e+06 max 1.28413e+06 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 5203786 +Ave neighs/atom = 1156.4 +Ave special neighs/atom = 2 +Neighbor list builds = 94 +Dangerous builds = 0 +Total wall time: 0:00:45 From 6705777f7b87310525ff7951d8a4a9218995b381 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 16:34:41 -0500 Subject: [PATCH 233/273] fix memory issue in POEMS library, where auxiliary data was cast to a data structure of different (smaller) size when deleting. this commit adds support to a callback function that allows to delete aux data in the Tree with its native size. --- lib/poems/SystemProcessor.h | 6 +++++- lib/poems/poemstree.h | 33 ++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/lib/poems/SystemProcessor.h b/lib/poems/SystemProcessor.h index 9ef511f997..3be168c34d 100644 --- a/lib/poems/SystemProcessor.h +++ b/lib/poems/SystemProcessor.h @@ -40,7 +40,9 @@ struct POEMSNode { class SystemProcessor{ private: Tree nodes; -// List forDeletion; + static void POEMSNodeDelete_cb(void *node) { + delete (POEMSNode *) node; + } List headsOfSystems; List > ringsInSystem; POEMSNode * findSingleLink(TreeNode * aNode); @@ -65,6 +67,8 @@ public: }; SystemProcessor::SystemProcessor(void){ + // register callback for deleting auxiliary data from tree nodes. + nodes.SetDeleteAuxData(&POEMSNodeDelete_cb); } void SystemProcessor::processArray(int** links, int numLinks) diff --git a/lib/poems/poemstree.h b/lib/poems/poemstree.h index 889de313f8..8f8e80ab66 100644 --- a/lib/poems/poemstree.h +++ b/lib/poems/poemstree.h @@ -40,6 +40,9 @@ protected: // used by the copy constructor and assignment operator TreeNode *CopyTree(TreeNode *t); + // callback function to delete aux data + void (*DeleteAuxData)(void *); + // used by insert and delete method to re-establish // the avl conditions after a node is added or deleted // from a subtree @@ -72,7 +75,13 @@ public: // standard list handling methods void * Find(int& item); - void * GetAuxData(int item) { return (void *)(FindNode(item, root)->GetAuxData());} + void * GetAuxData(int item) { + return (void *)(FindNode(item, root)->GetAuxData()); + } + void SetDeleteAuxData(void (*callback)(void *)) { + DeleteAuxData = callback; + } + void Insert(const int& item, const int& data, void * AuxData = NULL); void Delete(const int& item); void AVLInsert(TreeNode* &tree, TreeNode* newNode, int &reviseBalanceFactor); @@ -90,6 +99,7 @@ Tree::Tree(void) root = 0; current = 0; size = 0; + DeleteAuxData = NULL; } @@ -569,14 +579,19 @@ TreeNode *Tree::CopyTree(TreeNode *t) // the tree and delete each node as the vist operation void Tree::DeleteTree(TreeNode *t) { - if (t != NULL) - { - DeleteTree(t->Left()); - DeleteTree(t->Right()); - if (t->GetAuxData() != NULL) - delete (TreeNode *) t->GetAuxData(); - FreeTreeNode(t); - } + if (t != NULL) { + DeleteTree(t->Left()); + DeleteTree(t->Right()); + void *aux = t->GetAuxData(); + if (aux != NULL) { + if (DeleteAuxData != NULL) { + (*DeleteAuxData)(aux); + } else { + delete (TreeNode *) aux; + } + } + FreeTreeNode(t); + } } // call the function DeleteTree to deallocate the nodes. then From cda3227b05b12b4001438aeabf0a8b18cdf7deae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 16:41:11 -0500 Subject: [PATCH 234/273] plug memory leak in poems library --- lib/poems/POEMSChain.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/poems/POEMSChain.h b/lib/poems/POEMSChain.h index 7dc143a9d9..9f0db59333 100644 --- a/lib/poems/POEMSChain.h +++ b/lib/poems/POEMSChain.h @@ -31,6 +31,7 @@ struct POEMSChain{ { delete childChains(i); } + listOfNodes.DeleteValues(); } //void printTreeStructure(int tabs); //void getTreeAsList(List * temp); From f92e61c58d60372d27ce1f3ef336dc996e701785 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 29 Nov 2018 15:37:58 -0700 Subject: [PATCH 235/273] bug-fix for miscounting atoms for read_dump add keep --- src/read_dump.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 30934f123b..326369c17e 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -480,11 +480,16 @@ void ReadDump::atoms() nread += nchunk; } + // if addflag = YESADD or KEEPADD, update total atom count + + if (addflag == YESADD || addflag == KEEPADD) { + bigint nblocal = atom->nlocal; + MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); + } + // if addflag = YESADD, assign IDs to new snapshot atoms if (addflag == YESADD) { - bigint nblocal = atom->nlocal; - MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); if (atom->natoms < 0 || atom->natoms >= MAXBIGINT) error->all(FLERR,"Too many total atoms"); if (atom->tag_enable) atom->tag_extend(); From 5d2730f0558490ff9b074042415d61c86f6509c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 29 Nov 2018 18:22:18 -0500 Subject: [PATCH 236/273] update log files for rigid, shear, snap, srd, streitz, threebody, vashsista, and voronoi examples --- examples/rdf-adf/spce-adf.dat.ref | 70 +- examples/rdf-adf/spce-rdf.dat.ref | 176 +- examples/rigid/log.20Apr18.rigid.poems.g++.1 | 338 -- examples/rigid/log.20Apr18.rigid.poems.g++.4 | 338 -- examples/rigid/log.20Apr18.rigid.poems2.g++.1 | 342 -- examples/rigid/log.20Apr18.rigid.poems2.g++.4 | 342 -- examples/rigid/log.20Apr18.rigid.tnr.g++.1 | 458 -- examples/rigid/log.20Apr18.rigid.tnr.g++.4 | 458 -- ...g++.4 => log.27Nov18.rigid.atomfile.g++.1} | 62 +- ...g++.1 => log.27Nov18.rigid.atomfile.g++.4} | 52 +- ....g++.4 => log.27Nov18.rigid.atomvar.g++.1} | 62 +- ....g++.1 => log.27Nov18.rigid.atomvar.g++.4} | 52 +- ...ly.g++.4 => log.27Nov18.rigid.early.g++.1} | 62 +- ...ly.g++.1 => log.27Nov18.rigid.early.g++.4} | 52 +- ...18.rigid.g++.4 => log.27Nov18.rigid.g++.1} | 62 +- ...18.rigid.g++.1 => log.27Nov18.rigid.g++.4} | 52 +- ...++.1 => log.27Nov18.rigid.nve.early.g++.1} | 226 +- ...++.4 => log.27Nov18.rigid.nve.early.g++.4} | 222 +- ....nve.g++.1 => log.27Nov18.rigid.nve.g++.1} | 226 +- ....nve.g++.4 => log.27Nov18.rigid.nve.g++.4} | 222 +- examples/rigid/log.27Nov18.rigid.poems.g++.1 | 338 ++ examples/rigid/log.27Nov18.rigid.poems.g++.4 | 338 ++ examples/rigid/log.27Nov18.rigid.poems2.g++.1 | 342 ++ examples/rigid/log.27Nov18.rigid.poems2.g++.4 | 342 ++ ...g++.4 => log.27Nov18.rigid.property.g++.1} | 62 +- ...g++.1 => log.27Nov18.rigid.property.g++.4} | 52 +- examples/rigid/log.27Nov18.rigid.tnr.g++.1 | 458 ++ examples/rigid/log.27Nov18.rigid.tnr.g++.4 | 458 ++ ...16.shear.g++.1 => log.27Nov18.shear.g++.1} | 57 +- ...16.shear.g++.4 => log.27Nov18.shear.g++.4} | 57 +- ...oid.g++.1 => log.27Nov18.shear.void.g++.1} | 57 +- ...oid.g++.4 => log.27Nov18.shear.void.g++.4} | 59 +- ...n.g++.1 => log.27Nov18.snap.Mo_Chen.g++.1} | 21 +- ...n.g++.4 => log.27Nov18.snap.Mo_Chen.g++.4} | 23 +- ...06A.g++.1 => log.27Nov18.snap.Ta06A.g++.1} | 23 +- ...06A.g++.4 => log.27Nov18.snap.Ta06A.g++.4} | 21 +- ...40.g++.1 => log.27Nov18.snap.W.2940.g++.1} | 21 +- ...40.g++.4 => log.27Nov18.snap.W.2940.g++.4} | 21 +- ...og.27Nov18.snap.hybrid.WSNAP.HePair.g++.1} | 29 +- ...og.27Nov18.snap.hybrid.WSNAP.HePair.g++.4} | 25 +- ...re.g++.1 => log.27Nov18.srd.mixture.g++.1} | 85 +- examples/srd/log.27Nov18.srd.mixture.g++.4 | 292 + ....pure.g++.1 => log.27Nov18.srd.pure.g++.1} | 31 +- ....pure.g++.4 => log.27Nov18.srd.pure.g++.4} | 29 +- examples/srd/log.5Oct16.srd.mixture.g++.4 | 269 - ....g++.1 => log.27Nov18.streitz.ewald.g++.1} | 68 +- ....g++.4 => log.27Nov18.streitz.ewald.g++.4} | 68 +- ...f.g++.1 => log.27Nov18.streitz.wolf.g++.1} | 64 +- ...f.g++.4 => log.27Nov18.streitz.wolf.g++.4} | 64 +- examples/threebody/BNC.tersoff | 75 +- examples/threebody/CdTeZnSeHgS0.sw | 233 - examples/threebody/InP.vashishta | 39 +- examples/threebody/Si.tersoff.mod | 1 + examples/threebody/Si.tersoff.modc | 1 + examples/threebody/in.threebody | 2 +- .../threebody/log.27Nov18.threebody.g++.1 | 524 ++ .../threebody/log.27Nov18.threebody.g++.4 | 524 ++ examples/vashishta/InP.vashishta | 39 +- examples/vashishta/SiO.1990.vashishta | 42 +- ....g++.1 => log.27Nov18.vashishta.inp.g++.1} | 1007 ++-- ....g++.4 => log.27Nov18.vashishta.inp.g++.4} | 987 +-- ...g++.1 => log.27Nov18.vashishta.sio2.g++.1} | 35 +- ...g++.4 => log.27Nov18.vashishta.sio2.g++.4} | 33 +- ... => log.27Nov18.vashishta.table.inp.g++.1} | 1011 ++-- ... => log.27Nov18.vashishta.table.inp.g++.4} | 1011 ++-- ...=> log.27Nov18.vashishta.table.sio2.g++.1} | 33 +- ...=> log.27Nov18.vashishta.table.sio2.g++.4} | 33 +- .../log.5Oct16.indiumphosphide.g++.4 | 128 - examples/vashishta/log.5Oct16.sio2.g++.4 | 86 - .../vashishta/log.5Oct16.vashishta.inp.g++.1 | 5276 ----------------- .../vashishta/log.5Oct16.vashishta.sio2.g++.1 | 86 - ....2d.g++.1 => log.27Nov18.voronoi.2d.g++.1} | 27 +- ....2d.g++.4 => log.27Nov18.voronoi.2d.g++.4} | 31 +- ...a.g++.1 => log.27Nov18.voronoi.data.g++.1} | 31 +- ...a.g++.4 => log.27Nov18.voronoi.data.g++.4} | 31 +- ...oronoi.g++.1 => log.27Nov18.voronoi.g++.1} | 172 +- ...oronoi.g++.4 => log.27Nov18.voronoi.g++.4} | 176 +- 77 files changed, 7304 insertions(+), 12018 deletions(-) delete mode 100644 examples/rigid/log.20Apr18.rigid.poems.g++.1 delete mode 100644 examples/rigid/log.20Apr18.rigid.poems.g++.4 delete mode 100644 examples/rigid/log.20Apr18.rigid.poems2.g++.1 delete mode 100644 examples/rigid/log.20Apr18.rigid.poems2.g++.4 delete mode 100644 examples/rigid/log.20Apr18.rigid.tnr.g++.1 delete mode 100644 examples/rigid/log.20Apr18.rigid.tnr.g++.4 rename examples/rigid/{log.20Apr18.rigid.atomfile.g++.4 => log.27Nov18.rigid.atomfile.g++.1} (90%) rename examples/rigid/{log.20Apr18.rigid.atomfile.g++.1 => log.27Nov18.rigid.atomfile.g++.4} (92%) rename examples/rigid/{log.20Apr18.rigid.atomvar.g++.4 => log.27Nov18.rigid.atomvar.g++.1} (90%) rename examples/rigid/{log.20Apr18.rigid.atomvar.g++.1 => log.27Nov18.rigid.atomvar.g++.4} (92%) rename examples/rigid/{log.20Apr18.rigid.early.g++.4 => log.27Nov18.rigid.early.g++.1} (90%) rename examples/rigid/{log.20Apr18.rigid.early.g++.1 => log.27Nov18.rigid.early.g++.4} (92%) rename examples/rigid/{log.20Apr18.rigid.g++.4 => log.27Nov18.rigid.g++.1} (90%) rename examples/rigid/{log.20Apr18.rigid.g++.1 => log.27Nov18.rigid.g++.4} (92%) rename examples/rigid/{log.20Apr18.rigid.nve.early.g++.1 => log.27Nov18.rigid.nve.early.g++.1} (71%) rename examples/rigid/{log.20Apr18.rigid.nve.early.g++.4 => log.27Nov18.rigid.nve.early.g++.4} (72%) rename examples/rigid/{log.20Apr18.rigid.nve.g++.1 => log.27Nov18.rigid.nve.g++.1} (71%) rename examples/rigid/{log.20Apr18.rigid.nve.g++.4 => log.27Nov18.rigid.nve.g++.4} (72%) create mode 100644 examples/rigid/log.27Nov18.rigid.poems.g++.1 create mode 100644 examples/rigid/log.27Nov18.rigid.poems.g++.4 create mode 100644 examples/rigid/log.27Nov18.rigid.poems2.g++.1 create mode 100644 examples/rigid/log.27Nov18.rigid.poems2.g++.4 rename examples/rigid/{log.20Apr18.rigid.property.g++.4 => log.27Nov18.rigid.property.g++.1} (90%) rename examples/rigid/{log.20Apr18.rigid.property.g++.1 => log.27Nov18.rigid.property.g++.4} (92%) create mode 100644 examples/rigid/log.27Nov18.rigid.tnr.g++.1 create mode 100644 examples/rigid/log.27Nov18.rigid.tnr.g++.4 rename examples/shear/{log.5Oct16.shear.g++.1 => log.27Nov18.shear.g++.1} (78%) rename examples/shear/{log.5Oct16.shear.g++.4 => log.27Nov18.shear.g++.4} (78%) rename examples/shear/{log.5Oct16.shear.void.g++.1 => log.27Nov18.shear.void.g++.1} (78%) rename examples/shear/{log.5Oct16.shear.void.g++.4 => log.27Nov18.shear.void.g++.4} (78%) rename examples/snap/{log.20Apr18.snap.Mo_Chen.g++.1 => log.27Nov18.snap.Mo_Chen.g++.1} (86%) rename examples/snap/{log.20Apr18.snap.Mo_Chen.g++.4 => log.27Nov18.snap.Mo_Chen.g++.4} (85%) rename examples/snap/{log.20Apr18.snap.Ta06A.g++.1 => log.27Nov18.snap.Ta06A.g++.1} (86%) rename examples/snap/{log.20Apr18.snap.Ta06A.g++.4 => log.27Nov18.snap.Ta06A.g++.4} (87%) rename examples/snap/{log.20Apr18.snap.W.2940.g++.1 => log.27Nov18.snap.W.2940.g++.1} (87%) rename examples/snap/{log.20Apr18.snap.W.2940.g++.4 => log.27Nov18.snap.W.2940.g++.4} (87%) rename examples/snap/{log.20Apr18.snap.hybrid.WSNAP.HePair.g++.1 => log.27Nov18.snap.hybrid.WSNAP.HePair.g++.1} (87%) rename examples/snap/{log.20Apr18.snap.hybrid.WSNAP.HePair.g++.4 => log.27Nov18.snap.hybrid.WSNAP.HePair.g++.4} (88%) rename examples/srd/{log.5Oct16.srd.mixture.g++.1 => log.27Nov18.srd.mixture.g++.1} (85%) create mode 100644 examples/srd/log.27Nov18.srd.mixture.g++.4 rename examples/srd/{log.5Oct16.srd.pure.g++.1 => log.27Nov18.srd.pure.g++.1} (90%) rename examples/srd/{log.5Oct16.srd.pure.g++.4 => log.27Nov18.srd.pure.g++.4} (90%) delete mode 100644 examples/srd/log.5Oct16.srd.mixture.g++.4 rename examples/streitz/{log.5Oct16.streitz.ewald.g++.1 => log.27Nov18.streitz.ewald.g++.1} (56%) rename examples/streitz/{log.5Oct16.streitz.ewald.g++.4 => log.27Nov18.streitz.ewald.g++.4} (53%) rename examples/streitz/{log.5Oct16.streitz.wolf.g++.1 => log.27Nov18.streitz.wolf.g++.1} (55%) rename examples/streitz/{log.5Oct16.streitz.wolf.g++.4 => log.27Nov18.streitz.wolf.g++.4} (57%) mode change 100644 => 120000 examples/threebody/BNC.tersoff delete mode 100644 examples/threebody/CdTeZnSeHgS0.sw mode change 100644 => 120000 examples/threebody/InP.vashishta create mode 120000 examples/threebody/Si.tersoff.mod create mode 120000 examples/threebody/Si.tersoff.modc create mode 100644 examples/threebody/log.27Nov18.threebody.g++.1 create mode 100644 examples/threebody/log.27Nov18.threebody.g++.4 mode change 100644 => 120000 examples/vashishta/InP.vashishta mode change 100644 => 120000 examples/vashishta/SiO.1990.vashishta rename examples/vashishta/{log.5Oct16.indiumphosphide.g++.1 => log.27Nov18.vashishta.inp.g++.1} (85%) rename examples/vashishta/{log.5Oct16.vashishta.inp.g++.4 => log.27Nov18.vashishta.inp.g++.4} (87%) rename examples/vashishta/{log.5Oct16.sio2.g++.1 => log.27Nov18.vashishta.sio2.g++.1} (70%) rename examples/vashishta/{log.5Oct16.vashishta.sio2.g++.4 => log.27Nov18.vashishta.sio2.g++.4} (71%) rename examples/vashishta/{log.5Oct16.vashishta.table.inp.g++.1 => log.27Nov18.vashishta.table.inp.g++.1} (85%) rename examples/vashishta/{log.5Oct16.vashishta.table.inp.g++.4 => log.27Nov18.vashishta.table.inp.g++.4} (85%) rename examples/vashishta/{log.5Oct16.vashishta.table.sio2.g++.1 => log.27Nov18.vashishta.table.sio2.g++.1} (72%) rename examples/vashishta/{log.5Oct16.vashishta.table.sio2.g++.4 => log.27Nov18.vashishta.table.sio2.g++.4} (72%) delete mode 100644 examples/vashishta/log.5Oct16.indiumphosphide.g++.4 delete mode 100644 examples/vashishta/log.5Oct16.sio2.g++.4 delete mode 100644 examples/vashishta/log.5Oct16.vashishta.inp.g++.1 delete mode 100644 examples/vashishta/log.5Oct16.vashishta.sio2.g++.1 rename examples/voronoi/{log.5Oct16.voronoi.2d.g++.1 => log.27Nov18.voronoi.2d.g++.1} (81%) rename examples/voronoi/{log.5Oct16.voronoi.2d.g++.4 => log.27Nov18.voronoi.2d.g++.4} (79%) rename examples/voronoi/{log.5Oct16.voronoi.data.g++.1 => log.27Nov18.voronoi.data.g++.1} (82%) rename examples/voronoi/{log.5Oct16.voronoi.data.g++.4 => log.27Nov18.voronoi.data.g++.4} (82%) rename examples/voronoi/{log.5Oct16.voronoi.g++.1 => log.27Nov18.voronoi.g++.1} (78%) rename examples/voronoi/{log.5Oct16.voronoi.g++.4 => log.27Nov18.voronoi.g++.4} (77%) diff --git a/examples/rdf-adf/spce-adf.dat.ref b/examples/rdf-adf/spce-adf.dat.ref index 2c6b53c291..0109e13ccb 100644 --- a/examples/rdf-adf/spce-adf.dat.ref +++ b/examples/rdf-adf/spce-adf.dat.ref @@ -12,38 +12,38 @@ 8 30 0 0 0 0 9 34 0 0 0 0 10 38 0 0 0 0 -11 42 2.66805e-05 0.00123333 0 0 -12 46 0.00168251 0.07888 0 0 -13 50 0.00730338 0.41588 0 0 -14 54 0.00883969 0.82378 0 0 -15 58 0.00712558 1.15264 0 0 -16 62 0.00681516 1.46717 0 0 -17 66 0.00753965 1.81511 0 0 -18 70 0.0086394 2.21377 0 0 -19 74 0.00958735 2.65613 0 0 -20 78 0.0102438 3.12873 5.076e-06 2e-05 -21 82 0.0108097 3.62739 2.62642e-05 0.000123333 -22 86 0.0112538 4.14651 0.000100091 0.000516667 -23 90 0.0115997 4.68151 0.000173925 0.0012 -24 94 0.0118726 5.22921 0.00025685 0.00221 -25 98 0.0118616 5.77635 0.000341943 0.00355333 -26 102 0.0117868 6.32011 0.000488452 0.00547333 -27 106 0.0115064 6.85083 0.000753934 0.00843667 -28 110 0.0111827 7.36672 0.00118587 0.0130967 -29 114 0.0106304 7.85709 0.00157663 0.0192933 -30 118 0.0100947 8.32278 0.00223856 0.0280933 -31 122 0.009349 8.75409 0.00295997 0.0397267 -32 126 0.008637 9.15256 0.00363466 0.05401 -33 130 0.00785049 9.51475 0.00480604 0.0728967 -34 134 0.00712391 9.8434 0.00617924 0.09718 -35 138 0.00633303 10.1356 0.00801778 0.12869 -36 142 0.00574158 10.4005 0.0105777 0.170257 -37 146 0.00509275 10.6354 0.0138935 0.224857 -38 150 0.0045349 10.8446 0.0182593 0.296613 -39 154 0.00398109 11.0283 0.0234156 0.38863 -40 158 0.00334665 11.1827 0.0283932 0.500213 -41 162 0.00273371 11.3088 0.032517 0.627997 -42 166 0.00212695 11.407 0.0330644 0.757927 -43 170 0.00153822 11.4779 0.0292715 0.872957 -44 174 0.000912858 11.52 0.0205789 0.953827 -45 178 0.000296337 11.5337 0.00728348 0.98245 +11 42 2.37636e-05 0.00109333 0 0 +12 46 0.00169251 0.0789867 0 0 +13 50 0.00730134 0.414993 0 0 +14 54 0.00880551 0.820173 0 0 +15 58 0.0071375 1.14866 0 0 +16 62 0.0066689 1.45561 0 0 +17 66 0.00746703 1.79925 0 0 +18 70 0.00857042 2.19363 0 0 +19 74 0.0093992 2.62615 0 0 +20 78 0.0101772 3.09435 4.23471e-06 1.66667e-05 +21 82 0.0108355 3.59288 3.04321e-05 0.000136667 +22 86 0.0113606 4.11563 9.22188e-05 0.0005 +23 90 0.0117079 4.65431 0.000176849 0.00119667 +24 94 0.0119884 5.2059 0.000230899 0.00210667 +25 98 0.012007 5.75831 0.000312922 0.00334 +26 102 0.0117876 6.30063 0.000482843 0.00524333 +27 106 0.011572 6.83302 0.000770416 0.00828 +28 110 0.0111902 7.34792 0.00113941 0.01277 +29 114 0.0106638 7.83854 0.00161896 0.01915 +30 118 0.0100445 8.30067 0.00220659 0.0278433 +31 122 0.0092193 8.72479 0.00273188 0.0386067 +32 126 0.00860698 9.12078 0.00353887 0.05255 +33 130 0.00788729 9.48369 0.00463824 0.0708233 +34 134 0.0071613 9.81317 0.00589308 0.09404 +35 138 0.00645327 10.1101 0.00794474 0.125337 +36 142 0.00575866 10.3751 0.0103074 0.16594 +37 146 0.00512532 10.6109 0.0139526 0.220907 +38 150 0.0045258 10.8192 0.0181886 0.292553 +39 154 0.00394488 11.0007 0.0234856 0.385067 +40 158 0.00336751 11.1557 0.0285798 0.497653 +41 162 0.00274518 11.282 0.0325617 0.625923 +42 166 0.00211836 11.3794 0.0335082 0.757917 +43 170 0.00149999 11.4485 0.0296222 0.874607 +44 174 0.000895422 11.4897 0.0205701 0.955633 +45 178 0.00028968 11.503 0.00741112 0.984827 diff --git a/examples/rdf-adf/spce-rdf.dat.ref b/examples/rdf-adf/spce-rdf.dat.ref index 204e5ffc73..7c978e1635 100644 --- a/examples/rdf-adf/spce-rdf.dat.ref +++ b/examples/rdf-adf/spce-rdf.dat.ref @@ -14,91 +14,91 @@ 10 1.14 0 0 0 0 0 2 11 1.26 0 0 0 0 0 2 12 1.38 0 0 0 0 0 2 -13 1.5 0 0 0.00146316 0.000333333 0.0485606 2.01107 -14 1.62 0 0 3.77986 1.00467 0.691259 2.1948 -15 1.74 0 0 0.087001 1.03133 1.5081 2.6572 -16 1.86 0 0 0.261354 1.12287 1.29225 3.10993 -17 1.98 0 0 0.557712 1.3442 0.791284 3.42407 -18 2.1 0 0 0.890071 1.74153 0.441155 3.62107 -19 2.22 0 0 1.18482 2.3326 0.280275 3.76093 -20 2.34 0 0 1.33539 3.07273 0.203573 3.8738 -21 2.46 0.0296137 0.00906667 1.31236 3.8766 0.199433 3.996 -22 2.58 0.910251 0.3156 1.12596 4.6352 0.252635 4.16627 -23 2.7 2.74616 1.3284 0.92755 5.3196 0.399944 4.46147 -24 2.82 2.69277 2.41173 0.776668 5.94473 0.620912 4.9614 -25 2.94 1.69749 3.154 0.715559 6.57073 0.927784 5.77333 -26 3.06 1.12844 3.68853 0.734337 7.26667 1.28373 6.99033 -27 3.18 0.894502 4.14613 0.785685 8.0708 1.53008 8.55687 -28 3.3 0.830879 4.60387 0.853285 9.01127 1.55205 10.2681 -29 3.42 0.837147 5.0992 0.940998 10.1252 1.42789 11.9589 -30 3.54 0.87264 5.6524 1.02352 11.4233 1.30488 13.6145 -31 3.66 0.890146 6.2556 1.10007 12.9147 1.15043 15.1747 -32 3.78 0.923629 6.9232 1.14816 14.5751 1.05067 16.6945 -33 3.9 0.948076 7.65267 1.1789 16.3898 0.995284 18.2271 -34 4.02 1.02003 8.48653 1.14251 18.2584 0.987649 19.843 -35 4.14 1.05003 9.39693 1.09918 20.1651 0.973183 21.5317 -36 4.26 1.0578 10.368 1.05588 22.1043 0.968154 23.3104 -37 4.38 1.08788 11.4237 1.04202 24.1275 0.95294 25.1612 -38 4.5 1.0991 12.5496 1.02603 26.2302 0.948747 27.1062 -39 4.62 1.08758 13.7239 1.0199 28.4333 0.952182 29.1637 -40 4.74 1.08319 14.9549 1.0085 30.7265 0.958425 31.3437 -41 4.86 1.06718 16.23 1.0021 33.1219 0.966773 33.6555 -42 4.98 1.0236 17.5141 0.983127 35.5894 0.975683 36.1051 -43 5.1 0.979245 18.8025 0.968484 38.1387 0.993353 38.7208 -44 5.22 0.967438 20.136 0.960781 40.7882 1.0117 41.5116 -45 5.34 0.9397 21.4915 0.95327 43.5392 1.02048 44.4575 -46 5.46 0.933775 22.8996 0.957903 46.4292 1.02138 47.5401 -47 5.58 0.905728 24.3261 0.96475 49.4692 1.01134 50.7279 -48 5.7 0.908316 25.8189 0.985709 52.7103 1.00699 54.0401 -49 5.82 0.922062 27.3988 0.992001 56.1108 0.993731 57.4477 -50 5.94 0.933444 29.0648 1.00316 59.6929 0.985977 60.9695 -51 6.06 0.967112 30.8613 1.00148 63.4149 0.975667 64.5968 -52 6.18 0.995762 32.7851 1.00378 67.2946 0.966562 68.3339 -53 6.3 1.01856 34.83 1.01103 71.3556 0.980183 72.2723 -54 6.42 1.02375 36.9644 1.00763 75.5586 0.975791 76.3439 -55 6.54 1.02443 39.1808 1.0048 79.9079 0.988272 80.6231 -56 6.66 1.04424 41.5237 0.994556 84.3723 0.992933 85.0817 -57 6.78 1.02624 43.91 0.993082 88.9922 1.00275 89.7481 -58 6.9 1.05342 46.4469 0.995881 93.7905 1.0039 94.5867 -59 7.02 1.04804 49.0595 1.0028 98.7917 1.0061 99.606 -60 7.14 1.03565 51.7301 0.999035 103.946 1.00976 104.817 -61 7.26 1.01185 54.4279 0.999229 109.276 1.01388 110.227 -62 7.38 1.00714 57.2025 0.997563 114.774 1.02243 115.864 -63 7.5 0.997335 60.0403 1.00429 120.491 1.01948 121.67 -64 7.62 0.98964 62.9469 1.00029 126.369 1.01107 127.613 -65 7.74 0.986472 65.9363 1.01014 132.493 1.0127 133.755 -66 7.86 0.976805 68.9888 1.0082 138.797 1.00837 140.061 -67 7.98 0.980184 72.1461 1.00972 145.304 1.00029 146.51 -68 8.1 0.99097 75.4349 1.00403 151.97 0.999714 153.15 -69 8.22 0.988581 78.8137 1.00883 158.869 1.00011 159.991 -70 8.34 1.0046 82.3483 1.00269 165.927 0.994842 166.996 -71 8.46 0.987279 85.9225 0.997968 173.155 0.990283 174.171 -72 8.58 1.00046 89.648 0.999277 180.6 0.990097 181.55 -73 8.7 1.00036 93.478 0.999683 188.257 0.987047 189.113 -74 8.82 1.00138 97.4184 0.995158 196.091 0.991812 196.923 -75 8.94 1.02075 101.545 0.999836 204.178 0.991287 204.944 -76 9.06 1.00201 105.705 0.99005 212.403 0.996973 213.228 -77 9.18 0.990377 109.927 0.994103 220.881 1.00126 221.77 -78 9.3 1.0021 114.311 0.998366 229.619 0.997051 230.5 -79 9.42 1.00911 118.841 0.996714 238.57 1.00147 239.496 -80 9.54 1.00129 123.45 0.997009 247.752 1.00442 248.751 -81 9.66 0.994425 128.144 0.999099 257.187 1.0036 258.231 -82 9.78 0.99875 132.976 1.00089 266.876 1.00798 267.991 -83 9.9 1.00475 137.958 1.00485 276.842 1.00223 277.935 -84 10.02 1.00821 143.078 1.00531 287.057 1.00199 288.119 -85 10.14 1.00146 148.286 1.00396 297.503 1.00607 298.591 -86 10.26 0.987716 153.546 1.00115 308.168 1.00195 309.269 -87 10.38 0.996668 158.978 0.999956 319.072 0.999207 320.167 -88 10.5 1.00737 164.595 1.00266 330.259 0.999525 331.323 -89 10.62 1.00322 170.319 1.00368 341.714 0.991347 342.642 -90 10.74 1.00197 176.165 1.00151 353.405 1.00118 354.333 -91 10.86 1.01265 182.206 0.997669 365.313 1.00021 366.275 -92 10.98 1.00566 188.339 1.00218 377.54 0.998434 378.46 -93 11.1 1.00615 194.61 0.998681 389.992 1.00219 390.96 -94 11.22 0.989815 200.913 0.994781 402.666 0.996803 403.664 -95 11.34 0.995666 207.389 0.998115 415.655 0.99786 416.654 -96 11.46 0.990077 213.966 0.999458 428.938 1.00053 429.956 -97 11.58 0.992053 220.695 0.997809 442.479 0.994388 443.455 -98 11.7 1.00038 227.622 0.999064 456.319 1.00445 457.374 -99 11.82 0.99774 234.673 1.00106 470.473 0.998027 471.49 -100 11.94 1.00539 241.923 0.99896 484.885 1.00035 485.927 +13 1.5 0 0 0.00175579 0.0004 0.0526561 2.012 +14 1.62 0 0 3.78111 1.00507 0.697028 2.19727 +15 1.74 0 0 0.0891761 1.0324 1.47939 2.65087 +16 1.86 0 0 0.258879 1.12307 1.31357 3.11107 +17 1.98 0 0 0.547465 1.34033 0.778689 3.4202 +18 2.1 0 0 0.913219 1.748 0.445036 3.61893 +19 2.22 0 0 1.17666 2.335 0.280275 3.7588 +20 2.34 0 0 1.32397 3.0688 0.200928 3.8702 +21 2.46 0.0344041 0.0105333 1.298 3.86387 0.19965 3.99253 +22 2.58 0.933215 0.3248 1.14238 4.63353 0.260351 4.168 +23 2.7 2.69772 1.31973 0.918695 5.3114 0.409066 4.46993 +24 2.82 2.69973 2.40587 0.788843 5.94633 0.622485 4.97113 +25 2.94 1.68742 3.14373 0.716931 6.57353 0.921309 5.7774 +26 3.06 1.17854 3.702 0.725122 7.26073 1.28872 6.99913 +27 3.18 0.877821 4.15107 0.783927 8.06307 1.52077 8.55613 +28 3.3 0.823134 4.60453 0.856914 9.00753 1.55623 10.2719 +29 3.42 0.848865 5.1068 0.944321 10.1254 1.42361 11.9577 +30 3.54 0.859179 5.65147 1.02168 11.4212 1.28943 13.5937 +31 3.66 0.902739 6.2632 1.1038 12.9177 1.14738 15.1497 +32 3.78 0.926027 6.93253 1.1595 14.5944 1.0656 16.6912 +33 3.9 0.958993 7.6704 1.17188 16.3983 0.99537 18.2239 +34 4.02 0.998828 8.48693 1.14666 18.2737 0.993965 19.8501 +35 4.14 1.04388 9.392 1.10034 20.1824 0.968649 21.5309 +36 4.26 1.06085 10.3659 1.0577 22.125 0.960389 23.2954 +37 4.38 1.07881 11.4128 1.03302 24.1307 0.96849 25.1764 +38 4.5 1.08582 12.5251 1.01926 26.2195 0.952324 27.1287 +39 4.62 1.10128 13.7141 1.01049 28.4023 0.950238 29.1821 +40 4.74 1.08014 14.9417 1.00533 30.6883 0.95441 31.3529 +41 4.86 1.06986 16.22 1.00062 33.0801 0.95827 33.6443 +42 4.98 1.03848 17.5228 0.984535 35.5512 0.980463 36.106 +43 5.1 0.978536 18.8103 0.979628 38.1299 0.98282 38.6939 +44 5.22 0.971985 20.15 0.961821 40.7822 1.01254 41.4871 +45 5.34 0.94275 21.5099 0.957683 43.5459 1.02253 44.4389 +46 5.46 0.91839 22.8948 0.956334 46.4312 1.01667 47.5073 +47 5.58 0.913178 24.3331 0.97006 49.4879 1.02157 50.7274 +48 5.7 0.917321 25.8407 0.98508 52.7269 1.00299 54.0264 +49 5.82 0.906654 27.3941 0.985116 56.1039 0.993109 57.4319 +50 5.94 0.926646 29.048 1.00072 59.6772 0.984428 60.9482 +51 6.06 0.976372 30.8617 1.00731 63.4209 0.983091 64.6031 +52 6.18 0.988791 32.772 1.00833 67.3182 0.970493 68.3554 +53 6.3 1.01384 34.8075 1.0079 71.3666 0.975255 72.274 +54 6.42 1.02791 36.9505 1.00939 75.5769 0.983508 76.3777 +55 6.54 1.03645 39.1929 1.00148 79.9119 0.990828 80.668 +56 6.66 1.04864 41.5457 0.998046 84.3919 0.993913 85.131 +57 6.78 1.03771 43.9587 0.997997 89.0347 0.998581 89.778 +58 6.9 1.04218 46.4685 0.993391 93.821 1.00659 94.6295 +59 7.02 1.05285 49.0931 1.00509 98.8336 1.01027 99.6697 +60 7.14 1.02748 51.7427 0.998338 103.984 1.01201 104.893 +61 7.26 1.0231 54.4704 0.998866 109.312 1.0124 110.295 +62 7.38 1.01372 57.2632 1.00397 114.846 1.0199 115.918 +63 7.5 0.988947 60.0771 1.00531 120.569 1.02265 121.741 +64 7.62 0.980062 62.9556 1.00466 126.472 1.01237 127.692 +65 7.74 0.989464 65.954 1.00649 132.574 1.00737 133.802 +66 7.86 0.989093 69.0449 1.00774 138.875 1.00819 140.107 +67 7.98 0.98097 72.2048 1.00692 145.364 0.999231 146.549 +68 8.1 0.977431 75.4487 1.00046 152.007 1.00085 153.196 +69 8.22 0.985577 78.8172 1.00522 158.88 0.995709 160.007 +70 8.34 0.992739 82.31 1.00494 165.954 0.989474 166.974 +71 8.46 0.991994 85.9013 0.997194 173.177 0.993918 174.176 +72 8.58 1.00368 89.6388 0.998087 180.612 0.989104 181.547 +73 8.7 1.0116 93.5119 0.998012 188.257 0.990205 189.134 +74 8.82 1.00751 97.4764 0.991686 196.064 0.989992 196.931 +75 8.94 1.00977 101.559 1.00219 204.17 0.994295 204.976 +76 9.06 0.999123 105.707 0.994424 212.431 0.997422 213.264 +77 9.18 0.998916 109.965 0.994158 220.909 0.999422 221.79 +78 9.3 0.994577 114.316 0.996797 229.634 1.00194 230.563 +79 9.42 1.00825 118.842 0.999476 238.609 0.999165 239.538 +80 9.54 0.998167 123.437 1.0022 247.84 1.00643 248.811 +81 9.66 0.997363 128.145 0.999346 257.277 1.00494 258.304 +82 9.78 1.0017 132.991 0.998169 266.939 1.00407 268.026 +83 9.9 1.00266 137.962 0.999727 276.855 1.00037 277.952 +84 10.02 0.997976 143.03 1.00404 287.057 1.00406 288.157 +85 10.14 0.999388 148.228 1.00641 297.529 1.00094 298.576 +86 10.26 0.999911 153.552 1.00311 308.215 0.999732 309.229 +87 10.38 1.00403 159.024 0.997204 319.088 0.999567 320.132 +88 10.5 1.00586 164.634 1.00433 330.294 0.997524 331.265 +89 10.62 1.00479 170.366 1.00278 341.739 0.999381 342.676 +90 10.74 1.0057 176.234 1.00313 353.449 0.999143 354.343 +91 10.86 0.99951 182.197 1.00108 365.397 1.00255 366.313 +92 10.98 1.004 188.319 1.00128 377.613 0.998276 378.496 +93 11.1 1.0075 194.599 0.996323 390.036 1.00332 391.011 +94 11.22 0.998232 200.955 0.997973 402.75 1.00385 403.804 +95 11.34 0.99788 207.446 0.996466 415.718 1.00156 416.842 +96 11.46 0.994593 214.053 0.999307 428.999 0.999586 430.132 +97 11.58 0.998619 220.827 0.999303 442.56 0.998194 443.682 +98 11.7 0.993817 227.708 0.99877 456.397 0.9981 457.514 +99 11.82 1.00212 234.79 1.00325 470.581 0.994609 471.581 +100 11.94 0.999696 241.999 0.999589 485.003 0.998572 485.993 diff --git a/examples/rigid/log.20Apr18.rigid.poems.g++.1 b/examples/rigid/log.20Apr18.rigid.poems.g++.1 deleted file mode 100644 index 0cba72a2dd..0000000000 --- a/examples/rigid/log.20Apr18.rigid.poems.g++.1 +++ /dev/null @@ -1,338 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Simple rigid body system - -units lj -atom_style atomic - -pair_style lj/cut 2.5 - -read_data data.rigid - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 81 atoms - -velocity all create 100.0 4928459 - -# unconnected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 10 18 -#group clump3 id <> 19 27 -#group clump4 id <> 28 36 -#group clump5 id <> 37 45 -#group clump6 id <> 46 54 -#group clump7 id <> 55 63 -#group clump8 id <> 64 72 -#group clump9 id <> 73 81 - -#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 1 chain of connected bodies - -group clump1 id <> 1 9 -9 atoms in group clump1 -group clump2 id <> 9 18 -10 atoms in group clump2 -group clump3 id <> 18 27 -10 atoms in group clump3 -group clump4 id <> 27 36 -10 atoms in group clump4 -group clump5 id <> 36 45 -10 atoms in group clump5 -group clump6 id <> 45 54 -10 atoms in group clump6 -group clump7 id <> 54 63 -10 atoms in group clump7 -group clump8 id <> 63 72 -10 atoms in group clump8 -group clump9 id <> 72 81 -10 atoms in group clump9 - -fix 1 all poems group clump1 clump2 clump3 clump4 clump5 clump6 clump7 clump8 clump9 -1 clusters, 9 bodies, 8 joints, 81 atoms - -# 2 chains of connected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 9 18 -#group clump3 id <> 18 27 -#group clump4 id <> 27 36 -#group clump5 id <> 37 45 -#group clump6 id <> 45 54 -#group clump7 id <> 54 63 -#group clump8 id <> 63 72 -#group clump9 id <> 72 81 - -#fix 1 all poems group clump1 clump2 clump3 clump4 -#fix 2 all poems group clump5 clump6 clump7 clump8 clump9 - -neigh_modify exclude group clump1 clump1 -neigh_modify exclude group clump2 clump2 -neigh_modify exclude group clump3 clump3 -neigh_modify exclude group clump4 clump4 -neigh_modify exclude group clump5 clump5 -neigh_modify exclude group clump6 clump6 -neigh_modify exclude group clump7 clump7 -neigh_modify exclude group clump8 clump8 -neigh_modify exclude group clump9 clump9 - -thermo 100 - -#dump 1 all atom 50 dump.rigid.poems - -#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 5 - -#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 5 - -timestep 0.0001 -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 18 18 18 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.292 | 3.292 | 3.292 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 217.7783 3430.3907 0 3466.6871 -2.7403788 - 50 13679.637 1404.2468 0 3684.1863 12.446066 - 100 16777.225 888.87665 0 3685.0808 -31.828677 - 150 19595.365 418.45042 0 3684.3446 40.709078 - 200 18524.188 596.47273 0 3683.8375 -0.8159371 - 250 21015.789 180.96521 0 3683.5967 -10.042469 - 300 20785.513 219.25314 0 3683.5053 2.6452719 - 350 21072.46 171.2554 0 3683.3321 7.0609024 - 400 19956.414 356.36381 0 3682.4328 19.320259 - 450 20724.42 227.73284 0 3681.8028 8.1259249 - 500 20152.578 322.71466 0 3681.4777 5.4929878 - 550 20017.022 345.29701 0 3681.4673 5.4661666 - 600 17897.743 698.72196 0 3681.6791 3.2854742 - 650 17297.758 796.60256 0 3679.5623 15.191113 - 700 18581.934 584.29715 0 3681.2861 5.1588289 - 750 21774.158 52.821062 0 3681.8474 -10.775664 - 800 21604.055 81.188546 0 3681.8644 -3.2045743 - 850 17821.483 711.53827 0 3681.7854 7.4384277 - 900 21033.292 175.98127 0 3681.5299 -16.345167 - 950 20968.166 186.59847 0 3681.2929 -2.330456 - 1000 20490.66 266.19375 0 3681.3037 11.787983 - 1050 20222.396 310.94072 0 3681.34 -8.3459539 - 1100 21321.687 127.61533 0 3681.2299 -1.2184717 - 1150 20849.582 206.01695 0 3680.9472 -0.86699146 - 1200 21815.003 45.317414 0 3681.1512 1.5988314 - 1250 18655.437 572.41453 0 3681.654 10.064078 - 1300 20780.781 217.36506 0 3680.8286 6.0538615 - 1350 20558.971 254.36482 0 3680.8601 -3.6773954 - 1400 21485.029 99.812918 0 3680.6511 -16.185473 - 1450 21771.107 52.159607 0 3680.6775 -2.4756675 - 1500 21520.948 93.503927 0 3680.3286 2.1023577 - 1550 21351.418 121.68138 0 3680.2511 5.515995 - 1600 20778.805 216.92177 0 3680.0559 15.089187 - 1650 21477.638 100.21836 0 3679.8247 -1.1045739 - 1700 18501.339 596.47922 0 3680.0357 -15.679682 - 1750 18563.642 587.3479 0 3681.2882 33.532211 - 1800 19110.186 494.82336 0 3679.8543 18.024046 - 1850 21364.191 119.23543 0 3679.9339 2.5291075 - 1900 20146.627 322.14849 0 3679.9197 5.7313175 - 1950 20692.671 231.25345 0 3680.0319 4.297772 - 2000 20943.905 189.11218 0 3679.7629 -22.64509 - 2050 19668.055 401.83025 0 3679.8394 3.6251438 - 2100 20280.434 299.76289 0 3679.8353 7.4807805 - 2150 19181.835 483.52621 0 3680.4987 22.62081 - 2200 21300.18 130.7021 0 3680.7322 4.710193 - 2250 20486.914 266.64414 0 3681.1299 -8.6458025 - 2300 18653.082 572.25481 0 3681.1017 -5.2636982 - 2350 21513.563 95.608298 0 3681.2021 -9.3624751 - 2400 21466.205 103.57569 0 3681.2765 -29.559707 - 2450 20100.204 332.25468 0 3682.2886 35.739592 - 2500 20764.513 221.64794 0 3682.4001 -12.46688 - 2550 20436.771 276.13128 0 3682.2598 -22.419404 - 2600 21466.252 104.57185 0 3682.2806 -10.080362 - 2650 20817.269 212.81674 0 3682.3615 5.1374497 - 2700 18565.157 588.46125 0 3682.6541 22.283866 - 2750 20780.743 218.76366 0 3682.2208 -8.0046411 - 2800 21032.22 176.82368 0 3682.1936 -7.078895 - 2850 16817.729 879.49153 0 3682.4464 33.140849 - 2900 19309.511 463.89319 0 3682.145 7.9225025 - 2950 20544.978 257.86831 0 3682.0314 2.0523059 - 3000 20616.438 246.0975 0 3682.1706 -0.2824889 - 3050 18648.596 574.37266 0 3682.4721 -5.8677065 - 3100 19147.135 490.76826 0 3681.9574 -1.9922835 - 3150 18568.022 587.36965 0 3682.0399 14.694505 - 3200 19720.841 395.38315 0 3682.1899 5.9162402 - 3250 19008.557 514.50687 0 3682.5998 -3.4702895 - 3300 21708.937 64.231264 0 3682.3874 -5.4808611 - 3350 20548.477 257.62974 0 3682.3759 9.7818301 - 3400 20508.84 264.0153 0 3682.1553 -12.578182 - 3450 18736.579 559.11222 0 3681.8754 21.920437 - 3500 21444.82 107.82706 0 3681.9638 0.093050651 - 3550 20439.241 275.31015 0 3681.8503 -3.0785302 - 3600 21547.1 90.778361 0 3681.9617 -5.9189729 - 3650 15623.305 1079.996 0 3683.8802 36.064752 - 3700 19912.452 363.09483 0 3681.8368 5.4802367 - 3750 21289.7 133.2258 0 3681.5091 -10.884642 - 3800 20214.875 312.09245 0 3681.2382 8.6419893 - 3850 19853.031 372.13835 0 3680.9769 2.6229234 - 3900 17863.409 703.8716 0 3681.1064 -1.4250404 - 3950 19926.351 359.87227 0 3680.9307 -14.60997 - 4000 17595.665 747.85423 0 3680.4651 24.228859 - 4050 18408.194 611.80934 0 3679.8416 4.4236034 - 4100 17506.503 762.1286 0 3679.8792 5.0526379 - 4150 18479.134 600.76034 0 3680.6159 -6.6523095 - 4200 18475.322 601.95797 0 3681.1783 1.3292995 - 4250 18301.378 630.34119 0 3680.5709 2.5387332 - 4300 19384.541 449.98455 0 3680.7414 5.8750989 - 4350 18717.888 561.31715 0 3680.9651 3.7948584 - 4400 18893.773 532.20993 0 3681.172 10.963539 - 4450 20269.613 302.15984 0 3680.4286 -10.145642 - 4500 19151.762 489.32407 0 3681.2845 21.695364 - 4550 19914.708 361.54065 0 3680.6587 -4.2298372 - 4600 21153.44 154.99598 0 3680.5693 2.3172078 - 4650 21021.611 176.81454 0 3680.4164 1.9128023 - 4700 21707.966 62.767734 0 3680.762 -5.2080189 - 4750 16517.674 927.53839 0 3680.484 17.329608 - 4800 21654.604 71.574174 0 3680.6749 -6.0650166 - 4850 18135.978 657.28622 0 3679.9493 5.4803307 - 4900 20389.048 282.49215 0 3680.6668 -2.8570431 - 4950 17159.074 820.81472 0 3680.6604 31.273877 - 5000 20788.159 215.88415 0 3680.5773 4.6345196 - 5050 21366.767 119.68693 0 3680.8148 -9.9482889 - 5100 20668.21 236.17655 0 3680.8782 3.8118334 - 5150 20468.573 269.83696 0 3681.2657 -26.625943 - 5200 19493.142 432.49135 0 3681.3483 -7.6677112 - 5250 19626.594 410.09767 0 3681.1967 7.3622341 - 5300 20771.914 219.12484 0 3681.1105 -7.0871793 - 5350 21152.459 155.26401 0 3680.6738 5.9030557 - 5400 21376.189 117.91075 0 3680.6088 -1.2004513 - 5450 21455.06 105.15166 0 3680.995 -9.1675471 - 5500 21227.896 143.35739 0 3681.3401 -6.646305 - 5550 21149.831 156.61404 0 3681.5858 -12.953136 - 5600 21364.198 120.94695 0 3681.6466 1.0372254 - 5650 20219.777 311.34588 0 3681.3088 6.5026316 - 5700 21163.024 154.3001 0 3681.4708 -0.47587262 - 5750 19583.077 418.40745 0 3682.2535 24.609517 - 5800 18801.324 548.79742 0 3682.3515 -12.082631 - 5850 20875.4 203.07604 0 3682.3093 -8.1191161 - 5900 20737.053 226.2734 0 3682.4489 -7.6845943 - 5950 21260.028 139.21888 0 3682.5568 -2.2977046 - 6000 19823.84 378.71803 0 3682.6914 -1.1163373 - 6050 20487.214 268.03474 0 3682.5704 4.313979 - 6100 17853.211 707.10918 0 3682.6443 16.762322 - 6150 21322.705 129.06 0 3682.8441 2.7500936 - 6200 21609.008 81.580972 0 3683.0823 0.37062555 - 6250 20364.115 289.30707 0 3683.3262 13.176034 - 6300 20201.9 316.16558 0 3683.149 -1.6318339 - 6350 21151.879 157.75018 0 3683.0634 -23.337621 - 6400 21453.129 107.45563 0 3682.9772 -0.60776225 - 6450 21105.382 165.1926 0 3682.7562 4.244932 - 6500 20746.748 224.6945 0 3682.4859 0.2929158 - 6550 20913.725 197.29847 0 3682.9194 -15.792862 - 6600 17956.374 690.52623 0 3683.2552 15.445255 - 6650 20270.609 303.60078 0 3682.0357 -0.26503277 - 6700 21442.931 109.08904 0 3682.9109 -2.8409166 - 6750 20907.994 198.30695 0 3682.9726 0.91664072 - 6800 20431.208 277.98326 0 3683.1845 -1.8537161 - 6850 20312.052 297.88656 0 3683.2285 3.1028547 - 6900 19458.401 439.97157 0 3683.0385 -4.1856293 - 6950 20507.759 264.99217 0 3682.952 -1.4597973 - 7000 20782.356 219.47456 0 3683.2006 -7.1967021 - 7050 20560.324 256.07109 0 3682.7917 -10.720013 - 7100 21652.145 74.086415 0 3682.7772 -0.61455054 - 7150 20134.823 326.40272 0 3682.2065 11.689827 - 7200 20778.071 219.16459 0 3682.1765 -1.796567 - 7250 20153.065 323.13721 0 3681.9814 -0.1215538 - 7300 19524.938 427.99711 0 3682.1534 -3.1139903 - 7350 20554.595 256.63855 0 3682.4044 10.023083 - 7400 18778.53 552.29852 0 3682.0534 -1.7145222 - 7450 18972.509 520.15393 0 3682.2388 1.4489874 - 7500 17680.668 736.20139 0 3682.9794 15.096954 - 7550 19070.785 504.65403 0 3683.1182 2.2707533 - 7600 20805.541 214.54957 0 3682.1398 -3.4306308 - 7650 18473.262 604.25322 0 3683.1301 2.2083367 - 7700 19294.016 466.99211 0 3682.6615 2.2666382 - 7750 20995.664 183.47108 0 3682.7484 -13.935938 - 7800 21042.433 175.06619 0 3682.1384 0.49855811 - 7850 19343.054 459.21955 0 3683.0618 7.9049312 - 7900 18382.898 619.01969 0 3682.8361 1.7996366 - 7950 16092.435 1000.6563 0 3682.7287 29.993154 - 8000 17551.635 757.47719 0 3682.7498 8.1753011 - 8050 20309.875 298.25877 0 3683.2379 -1.9545317 - 8100 21746.174 59.002125 0 3683.3645 -2.6980678 - 8150 21478.427 103.44202 0 3683.1799 -10.930392 - 8200 20986.729 185.46995 0 3683.2581 -14.298403 - 8250 20744.064 225.47546 0 3682.8194 -6.4982356 - 8300 19887.982 368.35069 0 3683.0143 1.5899179 - 8350 21871.414 37.899202 0 3683.1348 -2.0554107 - 8400 20002.858 348.98887 0 3682.7985 8.2963084 - 8450 21553.861 90.985193 0 3683.2953 2.8575186 - 8500 21605.143 82.347635 0 3683.2048 -4.711565 - 8550 20151.76 324.4703 0 3683.097 -8.5109459 - 8600 20564.158 255.77814 0 3683.1378 -1.3815408 - 8650 19316.602 463.61706 0 3683.0507 -2.6895635 - 8700 18157.859 656.69518 0 3683.0051 19.428927 - 8750 18752.43 557.67555 0 3683.0805 1.9765973 - 8800 20903.812 199.07408 0 3683.0428 1.9011523 - 8850 20132.963 327.56826 0 3683.0621 3.0389961 - 8900 21667.171 71.80023 0 3682.9954 -2.0042246 - 8950 20346.973 292.00907 0 3683.1712 7.5582361 - 9000 17889.448 695.59406 0 3677.1688 7.5315391 - 9050 19446.144 441.90609 0 3682.9302 5.9819228 - 9100 20384.34 285.05862 0 3682.4486 9.8610378 - 9150 20023.515 344.98587 0 3682.2384 -0.40175043 - 9200 17786.795 718.76166 0 3683.2275 10.984317 - 9250 20843.023 208.42263 0 3682.2597 -7.4709344 - 9300 21670.622 70.503925 0 3682.2742 -6.2303366 - 9350 20642.313 241.21277 0 3681.5983 4.7423898 - 9400 19228.566 476.44753 0 3681.2085 10.836639 - 9450 21215.705 146.40003 0 3682.3509 -9.091421 - 9500 21543.685 91.725901 0 3682.3401 -1.0608492 - 9550 20143.22 324.98532 0 3682.1887 -5.995164 - 9600 21234.294 142.96512 0 3682.0142 0.004838125 - 9650 21025.207 177.8801 0 3682.0813 -5.4857701 - 9700 20638.235 242.46577 0 3682.1716 -1.6014085 - 9750 18374.191 620.54322 0 3682.9084 13.864712 - 9800 19730.262 393.89083 0 3682.2679 5.7601754 - 9850 21547.855 91.283379 0 3682.5926 2.1989329 - 9900 20959.935 189.28821 0 3682.6108 2.1174676 - 9950 21191.026 150.79441 0 3682.6321 8.3829825 - 10000 20776.574 220.03769 0 3682.8 -1.8404787 -Loop time of 3.0852 on 1 procs for 10000 steps with 81 atoms - -Performance: 28004.636 tau/day, 3241.277 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.17336 | 0.17336 | 0.17336 | 0.0 | 5.62 -Neigh | 0.1094 | 0.1094 | 0.1094 | 0.0 | 3.55 -Comm | 0.010163 | 0.010163 | 0.010163 | 0.0 | 0.33 -Output | 0.0030687 | 0.0030687 | 0.0030687 | 0.0 | 0.10 -Modify | 2.7782 | 2.7782 | 2.7782 | 0.0 | 90.05 -Other | | 0.01105 | | | 0.36 - -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 82 ave 82 max 82 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 887 ave 887 max 887 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 887 -Ave neighs/atom = 10.9506 -Neighbor list builds = 992 -Dangerous builds = 939 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/rigid/log.20Apr18.rigid.poems.g++.4 b/examples/rigid/log.20Apr18.rigid.poems.g++.4 deleted file mode 100644 index e2fb6b65b6..0000000000 --- a/examples/rigid/log.20Apr18.rigid.poems.g++.4 +++ /dev/null @@ -1,338 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Simple rigid body system - -units lj -atom_style atomic - -pair_style lj/cut 2.5 - -read_data data.rigid - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 81 atoms - -velocity all create 100.0 4928459 - -# unconnected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 10 18 -#group clump3 id <> 19 27 -#group clump4 id <> 28 36 -#group clump5 id <> 37 45 -#group clump6 id <> 46 54 -#group clump7 id <> 55 63 -#group clump8 id <> 64 72 -#group clump9 id <> 73 81 - -#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 1 chain of connected bodies - -group clump1 id <> 1 9 -9 atoms in group clump1 -group clump2 id <> 9 18 -10 atoms in group clump2 -group clump3 id <> 18 27 -10 atoms in group clump3 -group clump4 id <> 27 36 -10 atoms in group clump4 -group clump5 id <> 36 45 -10 atoms in group clump5 -group clump6 id <> 45 54 -10 atoms in group clump6 -group clump7 id <> 54 63 -10 atoms in group clump7 -group clump8 id <> 63 72 -10 atoms in group clump8 -group clump9 id <> 72 81 -10 atoms in group clump9 - -fix 1 all poems group clump1 clump2 clump3 clump4 clump5 clump6 clump7 clump8 clump9 -1 clusters, 9 bodies, 8 joints, 81 atoms - -# 2 chains of connected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 9 18 -#group clump3 id <> 18 27 -#group clump4 id <> 27 36 -#group clump5 id <> 37 45 -#group clump6 id <> 45 54 -#group clump7 id <> 54 63 -#group clump8 id <> 63 72 -#group clump9 id <> 72 81 - -#fix 1 all poems group clump1 clump2 clump3 clump4 -#fix 2 all poems group clump5 clump6 clump7 clump8 clump9 - -neigh_modify exclude group clump1 clump1 -neigh_modify exclude group clump2 clump2 -neigh_modify exclude group clump3 clump3 -neigh_modify exclude group clump4 clump4 -neigh_modify exclude group clump5 clump5 -neigh_modify exclude group clump6 clump6 -neigh_modify exclude group clump7 clump7 -neigh_modify exclude group clump8 clump8 -neigh_modify exclude group clump9 clump9 - -thermo 100 - -#dump 1 all atom 50 dump.rigid.poems - -#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 5 - -#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 5 - -timestep 0.0001 -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 18 18 18 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.263 | 3.357 | 3.638 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 217.7783 3430.3907 0 3466.6871 -2.7403788 - 50 13679.637 1404.2468 0 3684.1863 12.446066 - 100 16777.225 888.87665 0 3685.0808 -31.828677 - 150 19595.365 418.45042 0 3684.3446 40.709078 - 200 18524.188 596.47273 0 3683.8375 -0.8159371 - 250 21015.789 180.96521 0 3683.5967 -10.042469 - 300 20785.513 219.25314 0 3683.5053 2.6452719 - 350 21072.46 171.2554 0 3683.3321 7.0609024 - 400 19956.414 356.36381 0 3682.4328 19.320259 - 450 20724.42 227.73284 0 3681.8028 8.1259249 - 500 20152.578 322.71466 0 3681.4777 5.4929878 - 550 20017.022 345.29701 0 3681.4673 5.4661666 - 600 17897.743 698.72196 0 3681.6791 3.2854742 - 650 17297.758 796.60256 0 3679.5623 15.191113 - 700 18581.934 584.29715 0 3681.2861 5.1588289 - 750 21774.158 52.821062 0 3681.8474 -10.775664 - 800 21604.055 81.188546 0 3681.8644 -3.2045743 - 850 17821.483 711.53827 0 3681.7854 7.4384277 - 900 21033.292 175.98127 0 3681.5299 -16.345167 - 950 20968.166 186.59847 0 3681.2929 -2.330456 - 1000 20490.66 266.19375 0 3681.3037 11.787983 - 1050 20222.396 310.94072 0 3681.34 -8.3459539 - 1100 21321.687 127.61533 0 3681.2299 -1.2184717 - 1150 20849.582 206.01695 0 3680.9472 -0.86699147 - 1200 21815.003 45.317414 0 3681.1512 1.5988314 - 1250 18655.437 572.41453 0 3681.654 10.064078 - 1300 20780.781 217.36506 0 3680.8286 6.0538614 - 1350 20558.971 254.36483 0 3680.8601 -3.6773951 - 1400 21485.029 99.812917 0 3680.6511 -16.185473 - 1450 21771.107 52.15961 0 3680.6775 -2.4756673 - 1500 21520.948 93.503926 0 3680.3286 2.1023576 - 1550 21351.418 121.68137 0 3680.2511 5.5159947 - 1600 20778.805 216.92177 0 3680.0559 15.089188 - 1650 21477.638 100.21836 0 3679.8247 -1.1045741 - 1700 18501.339 596.4792 0 3680.0357 -15.679682 - 1750 18563.642 587.34785 0 3681.2882 33.53221 - 1800 19110.185 494.82342 0 3679.8543 18.024046 - 1850 21364.191 119.23548 0 3679.9339 2.5291079 - 1900 20146.626 322.14873 0 3679.9197 5.7313282 - 1950 20692.672 231.2533 0 3680.0319 4.2977759 - 2000 20943.904 189.11231 0 3679.7629 -22.645089 - 2050 19668.052 401.83077 0 3679.8394 3.6251598 - 2100 20280.434 299.76292 0 3679.8353 7.4807838 - 2150 19181.841 483.52513 0 3680.4987 22.620829 - 2200 21300.185 130.70136 0 3680.7321 4.7101928 - 2250 20486.897 266.64698 0 3681.1299 -8.6459184 - 2300 18653.018 572.26538 0 3681.1017 -5.2635489 - 2350 21513.576 95.606125 0 3681.202 -9.3627078 - 2400 21466.185 103.579 0 3681.2764 -29.55912 - 2450 20100.274 332.24291 0 3682.2886 35.736349 - 2500 20764.562 221.63964 0 3682.4 -12.465656 - 2550 20437.187 276.06174 0 3682.2596 -22.421308 - 2600 21466.269 104.56898 0 3682.2805 -10.080867 - 2650 20819.865 212.38395 0 3682.3615 5.1305357 - 2700 18565.57 588.39438 0 3682.656 22.28768 - 2750 20789.153 217.36229 0 3682.2211 -8.051962 - 2800 21045.639 174.58656 0 3682.193 -7.0803377 - 2850 16845.227 874.90505 0 3682.4429 32.992098 - 2900 19319.232 462.27119 0 3682.1432 7.9276373 - 2950 20558.495 255.61185 0 3682.0277 1.9151653 - 3000 20615.868 246.18886 0 3682.1668 -0.016805532 - 3050 18695.136 566.5914 0 3682.4474 -7.3528355 - 3100 19381.554 451.57712 0 3681.8361 -2.0887636 - 3150 19080.633 502.00742 0 3682.1129 5.2518182 - 3200 20969.083 187.13559 0 3681.9828 12.156446 - 3250 20474.81 269.6876 0 3682.156 1.4067779 - 3300 18836.313 542.79266 0 3682.1781 -9.1497216 - 3350 21397.694 116.27473 0 3682.557 -6.4412585 - 3400 20886.812 201.52507 0 3682.6604 6.3038335 - 3450 21604.639 81.93055 0 3682.7038 2.3769444 - 3500 20847.621 207.85705 0 3682.4605 -2.758021 - 3550 20627.979 244.69999 0 3682.6964 -0.33497747 - 3600 19265.519 471.27582 0 3682.1956 2.3506222 - 3650 20351.848 290.65727 0 3682.6319 3.5445062 - 3700 18507.473 597.72931 0 3682.3082 -21.283074 - 3750 20344.017 291.60622 0 3682.2757 6.5366987 - 3800 20672.372 237.18966 0 3682.585 6.7310703 - 3850 21366.943 122.07461 0 3683.2318 -3.5870721 - 3900 20890.294 201.69901 0 3683.4147 -9.5644117 - 3950 20684.181 235.91733 0 3683.2809 -4.8913079 - 4000 21499.086 100.67563 0 3683.8566 1.1969651 - 4050 18549.152 590.04529 0 3681.5707 -9.1914883 - 4100 18436.457 604.2601 0 3677.003 3.6486137 - 4150 19332.655 462.03124 0 3684.1404 -11.280758 - 4200 21199.837 150.66602 0 3683.9722 0.14505208 - 4250 19088.228 501.77395 0 3683.1453 1.6869973 - 4300 16617.942 913.86736 0 3683.5244 9.1792322 - 4350 19765.761 388.52744 0 3682.821 -4.1982973 - 4400 20181.964 320.06096 0 3683.7216 5.3685715 - 4450 20132.04 328.29106 0 3683.631 6.3340995 - 4500 21026.359 179.13858 0 3683.5317 -15.365253 - 4550 19273.765 471.36221 0 3683.6564 -0.71397595 - 4600 20064.71 339.29348 0 3683.4117 -4.8121056 - 4650 19821.01 380.27685 0 3683.7784 11.857115 - 4700 18724.367 563.42963 0 3684.1575 13.250333 - 4750 20467.467 273.2046 0 3684.449 -1.8076823 - 4800 19630.315 412.48507 0 3684.2042 -9.0412254 - 4850 19483.424 437.0206 0 3684.258 11.22465 - 4900 18504.179 600.28485 0 3684.3146 -5.2345686 - 4950 21436.13 111.62139 0 3684.3098 -5.8197915 - 5000 18022.817 680.57727 0 3684.38 19.238942 - 5050 20750.212 226.15635 0 3684.525 -0.73974419 - 5100 20569.533 255.21358 0 3683.4691 -18.332775 - 5150 21447.046 109.3048 0 3683.8124 -2.5745966 - 5200 18985.753 519.77191 0 3684.0641 9.7821968 - 5250 21334.568 128.16597 0 3683.9273 -0.61310451 - 5300 18836.476 544.54018 0 3683.9528 -17.979429 - 5350 18574.391 587.20088 0 3682.9327 40.990206 - 5400 21003.047 183.40176 0 3683.9096 6.1115776 - 5450 20693.875 234.62783 0 3683.607 5.4472209 - 5500 17673.479 738.99306 0 3684.5729 -28.621738 - 5550 19265.837 472.34663 0 3683.3195 -6.609151 - 5600 20800.947 217.12409 0 3683.9486 2.6477049 - 5650 21746.371 59.453265 0 3683.8485 1.5272163 - 5700 20448.97 275.57425 0 3683.736 -7.9864104 - 5750 19776.152 387.64417 0 3683.6695 -16.604848 - 5800 15779.293 1055.4995 0 3685.3817 20.365883 - 5850 21008.009 182.52093 0 3683.8557 -6.6727217 - 5900 21566.123 89.588216 0 3683.9421 -7.8944316 - 5950 21591.695 85.284975 0 3683.9009 -2.4895203 - 6000 17737.17 726.79112 0 3682.9861 1.5643841 - 6050 16648.524 907.73295 0 3682.487 3.0853478 - 6100 19917.439 363.6324 0 3683.2056 4.358303 - 6150 21767.004 56.152017 0 3683.986 -8.8722559 - 6200 17654.098 742.15421 0 3684.5039 9.7673482 - 6250 20125.754 329.65218 0 3683.9445 5.5050658 - 6300 20160.047 323.44453 0 3683.4524 4.852504 - 6350 20509.459 264.29515 0 3682.5383 2.5335834 - 6400 17199.686 817.09171 0 3683.7061 8.3428304 - 6450 18748.366 558.82243 0 3683.5501 0.23782614 - 6500 19133.519 494.28383 0 3683.2037 8.1586096 - 6550 20311.228 297.30741 0 3682.5122 -1.7015056 - 6600 18879.49 536.62652 0 3683.2082 5.0874769 - 6650 18189.35 651.42447 0 3682.9828 -15.223564 - 6700 19925.861 361.90598 0 3682.8828 0.26811015 - 6750 19420.312 445.30915 0 3682.0278 5.5725626 - 6800 19925.024 361.87412 0 3682.7114 -3.9763013 - 6850 16196.938 985.7242 0 3685.2138 2.8265047 - 6900 19779.752 386.51634 0 3683.1416 16.798629 - 6950 21043.144 176.83133 0 3684.0221 -4.193188 - 7000 18555.362 589.47043 0 3682.0307 14.516315 - 7050 21225.883 147.54974 0 3685.1969 -13.466586 - 7100 21234.667 145.92615 0 3685.0373 -5.1951121 - 7150 21483.472 104.62556 0 3685.2042 -5.6904048 - 7200 21014.278 182.97687 0 3685.3566 1.044649 - 7250 18588.789 587.96259 0 3686.094 22.707132 - 7300 20202.932 318.14401 0 3685.2994 -10.795766 - 7350 18304.22 634.7344 0 3685.4377 -1.6801482 - 7400 20967.579 190.67822 0 3685.2747 -0.94800692 - 7450 20991.588 186.07163 0 3684.6696 -1.411476 - 7500 19056.583 507.18197 0 3683.2791 3.2026014 - 7550 18542.455 594.92944 0 3685.3386 -27.908724 - 7600 19895.73 367.08589 0 3683.0409 4.1334366 - 7650 20384.942 285.88041 0 3683.3707 -7.515362 - 7700 20683.189 235.46294 0 3682.6611 10.876437 - 7750 20729.325 228.204 0 3683.0915 3.8844308 - 7800 21667.475 71.752748 0 3682.9985 -15.457992 - 7850 19043.652 508.96807 0 3682.9101 -5.8335792 - 7900 21079.827 169.61123 0 3682.9158 -1.3216223 - 7950 20713.266 230.43917 0 3682.6502 -0.20026535 - 8000 20606.41 248.06357 0 3682.4652 4.2844844 - 8050 20284.503 302.0469 0 3682.7973 6.3402329 - 8100 21859.537 39.514865 0 3682.7711 -13.302141 - 8150 18495.181 600.26329 0 3682.7934 9.9318242 - 8200 21458.549 105.63828 0 3682.0631 -7.7419285 - 8250 18704.511 564.30958 0 3681.728 14.680489 - 8300 20689.366 233.57049 0 3681.7982 2.3067527 - 8350 20692.974 232.67005 0 3681.499 4.2743386 - 8400 20240.086 307.5395 0 3680.8872 1.9694217 - 8450 19075.969 501.34689 0 3680.6751 11.056078 - 8500 21456.727 103.36067 0 3679.4818 -3.4512371 - 8550 20393.16 279.84781 0 3678.7078 6.3282998 - 8600 20898.88 195.43751 0 3678.5842 -14.393947 - 8650 20297.482 295.3169 0 3678.2306 -0.96829147 - 8700 21079.56 164.72934 0 3677.9893 -8.339122 - 8750 21142.519 154.18527 0 3677.9384 -4.6169442 - 8800 20143.871 320.23161 0 3677.5435 6.5710426 - 8850 21030.065 172.88831 0 3677.8992 1.3973883 - 8900 19814.648 375.22097 0 3677.6624 2.6996208 - 8950 17392.382 778.87517 0 3677.6055 11.963975 - 9000 19209.163 476.44659 0 3677.9738 8.7050034 - 9050 20143.824 320.17051 0 3677.4745 -5.8044332 - 9100 21400.78 110.99404 0 3677.7908 -3.0027429 - 9150 21834.471 38.970732 0 3678.0493 -2.5838117 - 9200 21344.715 120.55831 0 3678.0108 4.8187829 - 9250 20998.277 178.31959 0 3678.0324 -1.2009012 - 9300 21141.788 154.4658 0 3678.0971 -21.693564 - 9350 21439.398 105.00432 0 3678.2374 -16.113694 - 9400 21296.282 128.83877 0 3678.2191 -2.9990284 - 9450 19050.623 503.10319 0 3678.207 15.622525 - 9500 20845.847 203.77117 0 3678.079 -1.7504827 - 9550 18808.956 543.38757 0 3678.2135 -2.6611868 - 9600 20612.559 242.57373 0 3678.0002 -0.1650541 - 9650 20522.637 257.28926 0 3677.7288 6.8876074 - 9700 20970.074 182.75754 0 3677.7699 -4.5350279 - 9750 18297.505 625.06808 0 3674.6522 32.429153 - 9800 21042.472 170.78969 0 3677.8684 5.4901963 - 9850 20444.092 270.84839 0 3678.197 6.9444494 - 9900 21597.787 78.901871 0 3678.533 2.3445932 - 9950 18376.854 616.35469 0 3679.1636 -8.55063 - 10000 21490.054 97.234379 0 3678.9101 -0.36115606 -Loop time of 3.38095 on 4 procs for 10000 steps with 81 atoms - -Performance: 25554.943 tau/day, 2957.748 timesteps/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.015775 | 0.043664 | 0.1024 | 16.8 | 1.29 -Neigh | 0.012822 | 0.029038 | 0.061576 | 11.5 | 0.86 -Comm | 0.18256 | 0.2516 | 0.30898 | 10.5 | 7.44 -Output | 0.0063725 | 0.0069898 | 0.0081069 | 0.8 | 0.21 -Modify | 2.9608 | 3.0171 | 3.0947 | 2.8 | 89.24 -Other | | 0.03255 | | | 0.96 - -Nlocal: 20.25 ave 81 max 0 min -Histogram: 3 0 0 0 0 0 0 0 0 1 -Nghost: 45.5 ave 82 max 12 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 218.75 ave 875 max 0 min -Histogram: 3 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 875 -Ave neighs/atom = 10.8025 -Neighbor list builds = 993 -Dangerous builds = 945 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/rigid/log.20Apr18.rigid.poems2.g++.1 b/examples/rigid/log.20Apr18.rigid.poems2.g++.1 deleted file mode 100644 index 9062b78def..0000000000 --- a/examples/rigid/log.20Apr18.rigid.poems2.g++.1 +++ /dev/null @@ -1,342 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Simple rigid body system - -units lj -atom_style atomic - -pair_style lj/cut 2.5 - -read_data data.rigid - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 81 atoms - -velocity all create 100.0 4928459 - -# unconnected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 10 18 -#group clump3 id <> 19 27 -#group clump4 id <> 28 36 -#group clump5 id <> 37 45 -#group clump6 id <> 46 54 -#group clump7 id <> 55 63 -#group clump8 id <> 64 72 -#group clump9 id <> 73 81 - -#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 1 chain of connected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 9 18 -#group clump3 id <> 18 27 -#group clump4 id <> 27 36 -#group clump5 id <> 36 45 -#group clump6 id <> 45 54 -#group clump7 id <> 54 63 -#group clump8 id <> 63 72 -#group clump9 id <> 72 81 - -#fix 1 all poems group clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 2 chains of connected bodies - -group clump1 id <> 1 9 -9 atoms in group clump1 -group clump2 id <> 9 18 -10 atoms in group clump2 -group clump3 id <> 18 27 -10 atoms in group clump3 -group clump4 id <> 27 36 -10 atoms in group clump4 -group clump5 id <> 37 45 -9 atoms in group clump5 -group clump6 id <> 45 54 -10 atoms in group clump6 -group clump7 id <> 54 63 -10 atoms in group clump7 -group clump8 id <> 63 72 -10 atoms in group clump8 -group clump9 id <> 72 81 -10 atoms in group clump9 - -fix 1 all poems group clump1 clump2 clump3 clump4 -1 clusters, 4 bodies, 3 joints, 36 atoms -fix 2 all poems group clump5 clump6 clump7 clump8 clump9 -1 clusters, 5 bodies, 4 joints, 45 atoms - -neigh_modify exclude group clump1 clump1 -neigh_modify exclude group clump2 clump2 -neigh_modify exclude group clump3 clump3 -neigh_modify exclude group clump4 clump4 -neigh_modify exclude group clump5 clump5 -neigh_modify exclude group clump6 clump6 -neigh_modify exclude group clump7 clump7 -neigh_modify exclude group clump8 clump8 -neigh_modify exclude group clump9 clump9 - -thermo 100 - -#dump 1 all atom 50 dump.rigid.poems2 - -#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 5 - -#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 5 - -timestep 0.0001 -thermo 50 -run 10000 -WARNING: More than one fix poems (../fix_poems.cpp:363) -WARNING: More than one fix poems (../fix_poems.cpp:363) -WARNING: One or more atoms are time integrated more than once (../modify.cpp:279) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 18 18 18 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.854 | 3.854 | 3.854 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 196.00047 3632.2347 0 3668.5311 -2.7403788 - 50 12167.633 1505.5478 0 3758.8133 35.125973 - 100 17556.978 512.66277 0 3763.9549 11.137534 - 150 19579.586 138.04942 0 3763.8987 -29.953971 - 200 19757.51 105.30542 0 3764.1036 -0.030645317 - 250 18218.374 390.10747 0 3763.8804 13.711001 - 300 19383.039 174.40688 0 3763.8586 5.7240693 - 350 20125.986 36.972611 0 3764.0071 1.9559205 - 400 18888.816 266.10975 0 3764.0386 9.6362168 - 450 19307.656 188.2511 0 3763.743 1.9326206 - 500 16331.197 738.56392 0 3762.8597 9.1715579 - 550 19318.722 186.16172 0 3763.7027 3.0115336 - 600 19455.268 161.20621 0 3764.0336 0.55208034 - 650 18487.011 340.03216 0 3763.5528 -8.0359122 - 700 17321.201 556.32471 0 3763.9545 -13.631751 - 750 18979.187 249.04389 0 3763.7082 -2.6072455 - 800 19342.456 181.85552 0 3763.7918 8.1918726 - 850 19070.641 232.19342 0 3763.7936 7.3148472 - 900 19478.873 156.65987 0 3763.8586 2.4284987 - 950 19912.415 76.437437 0 3763.9216 -1.4667227 - 1000 16003.749 802.39753 0 3766.0548 46.642188 - 1050 19859.583 86.64176 0 3764.3424 -2.1961943 - 1100 19229.575 203.61488 0 3764.6473 -10.632365 - 1150 18821.6 279.15861 0 3764.64 -0.89495035 - 1200 19392.695 173.59744 0 3764.8373 1.8508753 - 1250 16459.624 717.32104 0 3765.3995 33.478127 - 1300 19343.863 182.59043 0 3764.7874 0.75890736 - 1350 20019.643 57.503573 0 3764.8448 0.31444671 - 1400 18549.582 329.31436 0 3764.4221 10.738303 - 1450 15163.926 957.47585 0 3765.6103 -17.92346 - 1500 19223.688 204.15177 0 3764.0939 -1.6134528 - 1550 18147.996 404.12677 0 3764.8668 8.4194783 - 1600 18615.043 317.42469 0 3764.6548 -2.3288917 - 1650 20120.654 38.887903 0 3764.935 -8.7620301 - 1700 19450.907 162.98262 0 3765.0025 2.3254748 - 1750 19374.631 177.37975 0 3765.2744 8.9328771 - 1800 19424.404 167.93963 0 3765.0514 0.081227378 - 1850 17936.203 442.85082 0 3764.3699 6.6011902 - 1900 19982.595 64.406292 0 3764.8868 -2.95296 - 1950 16215.781 761.92636 0 3764.8487 13.995056 - 2000 18584.444 322.1163 0 3763.6801 7.1653369 - 2050 20107.965 41.025841 0 3764.723 -0.31088772 - 2100 20002.324 60.594786 0 3764.7288 -6.7919989 - 2150 16949.875 626.57523 0 3765.4409 3.50855 - 2200 20010.954 58.808121 0 3764.5403 -10.862112 - 2250 18982.734 247.00818 0 3762.3293 -0.53817452 - 2300 18401.254 354.88774 0 3762.5274 1.0921595 - 2350 19390.545 172.93755 0 3763.7793 -3.3523777 - 2400 16080.137 786.51156 0 3764.3147 -16.202632 - 2450 18870.17 268.79443 0 3763.2704 11.201845 - 2500 19688.736 117.49945 0 3763.5616 4.3786781 - 2550 18869.811 268.97474 0 3763.3842 -5.6659314 - 2600 17021.088 611.38597 0 3763.4393 6.3051835 - 2650 18743.998 292.7827 0 3763.8934 2.4233167 - 2700 19745.629 106.63088 0 3763.2289 -0.34816161 - 2750 19527.584 147.21131 0 3763.4306 -1.6219417 - 2800 18195.354 392.99533 0 3762.5053 24.376674 - 2850 18550.094 327.77867 0 3762.9812 4.2654596 - 2900 20174.105 27.269108 0 3763.2144 1.7109311 - 2950 17744.679 476.70478 0 3762.7564 0.46336417 - 3000 19161.715 214.56545 0 3763.0311 2.3774967 - 3050 18357.87 363.54089 0 3763.1465 7.5885138 - 3100 18851.02 272.19735 0 3763.1269 8.0560784 - 3150 19586.208 136.32381 0 3763.3995 -10.118566 - 3200 19300.444 189.2076 0 3763.3639 -12.590066 - 3250 18680.955 303.88073 0 3763.3168 -1.0138975 - 3300 18444.612 347.49752 0 3763.1664 8.9271155 - 3350 19006.554 243.54359 0 3763.2757 4.7398999 - 3400 17842.797 459.11352 0 3763.3351 28.63048 - 3450 19801.317 96.103613 0 3763.0141 4.0933253 - 3500 18599.338 318.61343 0 3762.9353 6.3657111 - 3550 19737.266 107.84071 0 3762.89 1.3861757 - 3600 19002.648 244.0525 0 3763.0613 8.7615304 - 3650 19154.418 215.94396 0 3763.0584 -2.6243193 - 3700 19036.117 237.84014 0 3763.047 -5.6841944 - 3750 20045.863 50.759281 0 3762.9562 -2.1930939 - 3800 19331.877 182.69303 0 3762.6703 0.57474959 - 3850 18193.947 393.70074 0 3762.9502 -4.1144639 - 3900 19675.638 119.2295 0 3762.8663 0.46172332 - 3950 19506.743 150.36614 0 3762.7259 5.8020668 - 4000 17985.008 431.80897 0 3762.366 10.755615 - 4050 19947.208 68.962683 0 3762.8902 -2.0041629 - 4100 19936.06 70.997196 0 3762.8602 -6.6295574 - 4150 19011.006 242.10402 0 3762.6608 -12.682711 - 4200 18108.183 409.44214 0 3762.8094 -0.42654932 - 4250 18734.162 293.70086 0 3762.9901 8.8549986 - 4300 16619.218 686.30953 0 3763.9426 43.405681 - 4350 18818.184 277.95188 0 3762.8007 20.953883 - 4400 18649.616 307.93211 0 3761.5647 -3.6011031 - 4450 18626.995 313.23564 0 3762.6792 -2.5430627 - 4500 18133.284 405.27778 0 3763.2934 3.057056 - 4550 19985.929 61.792735 0 3762.8908 1.9540846 - 4600 18664.305 306.02805 0 3762.3809 1.2395242 - 4650 19822.408 92.030223 0 3762.8466 -1.0496216 - 4700 19218.014 203.93895 0 3762.8305 0.74203538 - 4750 19425.781 165.36374 0 3762.7306 4.0113982 - 4800 18604.891 317.55244 0 3762.9026 16.671366 - 4850 19648.156 124.29963 0 3762.8471 4.1073 - 4900 18928.508 257.76023 0 3763.0394 -4.3547566 - 4950 19795.841 97.135231 0 3763.0317 -10.401888 - 5000 20150.671 31.452661 0 3763.0584 -3.352706 - 5050 18694.789 300.8954 0 3762.8933 11.690808 - 5100 16936.745 627.00902 0 3763.4434 -0.56880353 - 5150 18446.99 346.49004 0 3762.5992 8.409244 - 5200 18532.691 330.61677 0 3762.5966 10.358529 - 5250 18342.743 366.3264 0 3763.1306 -9.5622676 - 5300 20038.203 52.234825 0 3763.0131 -3.6974868 - 5350 19337.092 182.06755 0 3763.0106 -0.045248915 - 5400 19561.005 140.5518 0 3762.9602 1.3850963 - 5450 19415.557 167.29181 0 3762.7654 2.6966013 - 5500 18646.823 309.81657 0 3762.9319 7.4858844 - 5550 19165.312 214.07271 0 3763.2046 1.4335924 - 5600 18879.507 266.90953 0 3763.1146 7.8746695 - 5650 19824.482 91.786842 0 3762.9872 -2.4395467 - 5700 19699.85 114.8239 0 3762.9442 4.2779932 - 5750 19535.697 145.24886 0 3762.9706 5.9452722 - 5800 18275.446 378.66191 0 3763.0038 11.965062 - 5850 19931.992 71.873259 0 3762.9828 -2.3097575 - 5900 18528.705 331.64793 0 3762.8897 -18.312104 - 5950 16535.446 701.02536 0 3763.1451 -14.797902 - 6000 18678.807 303.76763 0 3762.806 -3.2732626 - 6050 16661.525 677.73561 0 3763.2031 17.862761 - 6100 18100.317 410.39139 0 3762.3019 -4.9765779 - 6150 16487.861 707.08907 0 3760.3967 32.53899 - 6200 16823.279 647.56578 0 3762.9878 -9.8237219 - 6250 18418.096 351.89624 0 3762.6548 -2.0149855 - 6300 18822.067 277.01314 0 3762.5811 5.3782716 - 6350 19300.198 188.57243 0 3762.6832 -1.9316023 - 6400 18425.789 350.70367 0 3762.8868 2.6884393 - 6450 18708.506 297.50643 0 3762.0447 -13.808707 - 6500 19528.099 146.10805 0 3762.4226 -1.5991505 - 6550 19701.841 114.01327 0 3762.5023 4.4322487 - 6600 18892.934 262.83827 0 3761.5297 10.689265 - 6650 19041.669 235.52692 0 3761.7619 -1.1425512 - 6700 19352.162 178.40501 0 3762.1388 -0.55130997 - 6750 16177.653 765.61942 0 3761.481 4.6526477 - 6800 19007.323 242.63753 0 3762.5122 3.6202242 - 6850 14255.206 1125.4974 0 3765.3503 -31.10433 - 6900 18481.408 340.4703 0 3762.9532 0.53246054 - 6950 19227.569 202.33363 0 3762.9946 -0.94126626 - 7000 18771.85 286.70279 0 3762.9714 3.151759 - 7050 18689.51 301.95602 0 3762.9765 8.0511724 - 7100 18599.258 318.83229 0 3763.1394 -0.86222116 - 7150 17739.189 478.35458 0 3763.3896 11.976827 - 7200 19492.829 153.62536 0 3763.4084 -8.6815909 - 7250 18797.718 282.17319 0 3763.232 -19.897633 - 7300 18353.871 364.09362 0 3762.9585 5.4538454 - 7350 19040.053 237.34144 0 3763.2772 6.5600248 - 7400 19452.586 160.98629 0 3763.317 -9.0542585 - 7450 19033.845 238.45033 0 3763.2365 3.2654681 - 7500 18137.358 404.80969 0 3763.5796 -7.2639486 - 7550 16863.391 642.47654 0 3765.3267 31.248679 - 7600 16374.538 731.74039 0 3764.0622 29.566291 - 7650 19837.917 89.823014 0 3763.5114 -2.6605403 - 7700 15593.154 876.08807 0 3763.7093 -9.7668717 - 7750 16609.929 687.32679 0 3763.2396 1.0775966 - 7800 17513.384 519.87756 0 3763.0968 3.4979836 - 7850 20022.015 56.036771 0 3763.8173 -4.316185 - 7900 17681.324 489.71547 0 3764.0347 5.1978443 - 7950 18320.382 371.17872 0 3763.8421 6.1860655 - 8000 20014.059 57.688322 0 3763.9956 -9.0623854 - 8050 16203.013 762.61545 0 3763.1735 31.662714 - 8100 18749.745 291.57889 0 3763.7538 -14.015057 - 8150 19411.326 169.05845 0 3763.7485 -4.3392799 - 8200 17994.991 431.56932 0 3763.9751 6.8158642 - 8250 19325.923 185.1137 0 3763.9883 9.4923883 - 8300 17354.302 550.33316 0 3764.0927 6.1636399 - 8350 19900.895 78.431831 0 3763.7828 -4.5224196 - 8400 17775.757 471.62915 0 3763.4361 12.949899 - 8450 19909.324 76.935162 0 3763.8471 -2.950115 - 8500 18601.933 318.79405 0 3763.5965 6.0173542 - 8550 18685.758 303.59497 0 3763.9205 2.7277487 - 8600 19297.521 190.12606 0 3763.741 4.8998933 - 8650 17396.37 542.14326 0 3763.6932 39.937715 - 8700 17134.714 590.99465 0 3764.0898 10.37328 - 8750 14348.104 1106.7544 0 3763.8106 -3.8604659 - 8800 19830.924 90.929138 0 3763.3225 0.26603444 - 8850 18551.537 326.53747 0 3762.0072 -1.5369982 - 8900 20040.322 52.066026 0 3763.2367 -12.667979 - 8950 19314.585 186.54793 0 3763.3228 -0.64755555 - 9000 19117.66 222.84553 0 3763.153 5.2990011 - 9050 19072.016 231.26038 0 3763.1152 -1.6513695 - 9100 19284.933 191.73976 0 3763.0237 -3.932358 - 9150 17356.576 548.61808 0 3762.7988 1.3659056 - 9200 18939.549 255.43703 0 3762.761 3.3037106 - 9250 19621.961 129.5012 0 3763.1976 1.667 - 9300 16898.033 633.79921 0 3763.0647 7.5941845 - 9350 19662.75 122.10836 0 3763.3584 -3.3144828 - 9400 16118.338 778.70243 0 3763.5799 9.8684537 - 9450 17362.374 548.18847 0 3763.443 6.8117548 - 9500 17873.057 453.37389 0 3763.1993 9.5651746 - 9550 19282.305 192.593 0 3763.3901 -4.987757 - 9600 18236.48 386.36263 0 3763.4886 8.8658343 - 9650 17695.571 486.6517 0 3763.6093 12.471421 - 9700 19044.003 237.04652 0 3763.7138 0.84430497 - 9750 17937.299 442.4372 0 3764.1592 3.981475 - 9800 18179.761 396.86987 0 3763.4923 -11.397273 - 9850 19157.292 215.8937 0 3763.5404 -7.7648682 - 9900 19719.066 111.98124 0 3763.6602 5.5378968 - 9950 18103.235 410.65473 0 3763.1056 28.201374 - 10000 18479.903 341.32548 0 3763.5297 -5.0581298 -Loop time of 3.14341 on 1 procs for 10000 steps with 81 atoms - -Performance: 27486.104 tau/day, 3181.262 timesteps/s -99.3% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.12201 | 0.12201 | 0.12201 | 0.0 | 3.88 -Neigh | 0.077269 | 0.077269 | 0.077269 | 0.0 | 2.46 -Comm | 0.012246 | 0.012246 | 0.012246 | 0.0 | 0.39 -Output | 0.0032048 | 0.0032048 | 0.0032048 | 0.0 | 0.10 -Modify | 2.9172 | 2.9172 | 2.9172 | 0.0 | 92.80 -Other | | 0.01151 | | | 0.37 - -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 67 ave 67 max 67 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 599 ave 599 max 599 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 599 -Ave neighs/atom = 7.39506 -Neighbor list builds = 993 -Dangerous builds = 945 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/rigid/log.20Apr18.rigid.poems2.g++.4 b/examples/rigid/log.20Apr18.rigid.poems2.g++.4 deleted file mode 100644 index 812b101841..0000000000 --- a/examples/rigid/log.20Apr18.rigid.poems2.g++.4 +++ /dev/null @@ -1,342 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Simple rigid body system - -units lj -atom_style atomic - -pair_style lj/cut 2.5 - -read_data data.rigid - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 81 atoms - -velocity all create 100.0 4928459 - -# unconnected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 10 18 -#group clump3 id <> 19 27 -#group clump4 id <> 28 36 -#group clump5 id <> 37 45 -#group clump6 id <> 46 54 -#group clump7 id <> 55 63 -#group clump8 id <> 64 72 -#group clump9 id <> 73 81 - -#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 1 chain of connected bodies - -#group clump1 id <> 1 9 -#group clump2 id <> 9 18 -#group clump3 id <> 18 27 -#group clump4 id <> 27 36 -#group clump5 id <> 36 45 -#group clump6 id <> 45 54 -#group clump7 id <> 54 63 -#group clump8 id <> 63 72 -#group clump9 id <> 72 81 - -#fix 1 all poems group clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 - -# 2 chains of connected bodies - -group clump1 id <> 1 9 -9 atoms in group clump1 -group clump2 id <> 9 18 -10 atoms in group clump2 -group clump3 id <> 18 27 -10 atoms in group clump3 -group clump4 id <> 27 36 -10 atoms in group clump4 -group clump5 id <> 37 45 -9 atoms in group clump5 -group clump6 id <> 45 54 -10 atoms in group clump6 -group clump7 id <> 54 63 -10 atoms in group clump7 -group clump8 id <> 63 72 -10 atoms in group clump8 -group clump9 id <> 72 81 -10 atoms in group clump9 - -fix 1 all poems group clump1 clump2 clump3 clump4 -1 clusters, 4 bodies, 3 joints, 36 atoms -fix 2 all poems group clump5 clump6 clump7 clump8 clump9 -1 clusters, 5 bodies, 4 joints, 45 atoms - -neigh_modify exclude group clump1 clump1 -neigh_modify exclude group clump2 clump2 -neigh_modify exclude group clump3 clump3 -neigh_modify exclude group clump4 clump4 -neigh_modify exclude group clump5 clump5 -neigh_modify exclude group clump6 clump6 -neigh_modify exclude group clump7 clump7 -neigh_modify exclude group clump8 clump8 -neigh_modify exclude group clump9 clump9 - -thermo 100 - -#dump 1 all atom 50 dump.rigid.poems2 - -#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 5 - -#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 5 - -timestep 0.0001 -thermo 50 -run 10000 -WARNING: More than one fix poems (../fix_poems.cpp:363) -WARNING: More than one fix poems (../fix_poems.cpp:363) -WARNING: One or more atoms are time integrated more than once (../modify.cpp:279) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 18 18 18 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.825 | 3.919 | 4.201 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 196.00047 3632.2347 0 3668.5311 -2.7403788 - 50 12167.633 1505.5478 0 3758.8133 35.125973 - 100 17556.978 512.66277 0 3763.9549 11.137534 - 150 19579.586 138.04942 0 3763.8987 -29.953971 - 200 19757.51 105.30542 0 3764.1036 -0.030645317 - 250 18218.374 390.10747 0 3763.8804 13.711001 - 300 19383.039 174.40688 0 3763.8586 5.7240693 - 350 20125.986 36.972611 0 3764.0071 1.9559205 - 400 18888.816 266.10975 0 3764.0386 9.6362168 - 450 19307.656 188.2511 0 3763.743 1.9326206 - 500 16331.197 738.56392 0 3762.8597 9.1715579 - 550 19318.722 186.16172 0 3763.7027 3.0115336 - 600 19455.268 161.20621 0 3764.0336 0.55208034 - 650 18487.011 340.03216 0 3763.5528 -8.0359122 - 700 17321.201 556.32471 0 3763.9545 -13.631751 - 750 18979.187 249.04389 0 3763.7082 -2.6072455 - 800 19342.456 181.85552 0 3763.7918 8.1918726 - 850 19070.641 232.19342 0 3763.7936 7.3148472 - 900 19478.873 156.65987 0 3763.8586 2.4284987 - 950 19912.415 76.437437 0 3763.9216 -1.4667227 - 1000 16003.749 802.39753 0 3766.0548 46.642188 - 1050 19859.583 86.64176 0 3764.3424 -2.1961943 - 1100 19229.575 203.61488 0 3764.6473 -10.632365 - 1150 18821.6 279.15861 0 3764.64 -0.89495035 - 1200 19392.695 173.59744 0 3764.8373 1.8508753 - 1250 16459.624 717.32104 0 3765.3995 33.478127 - 1300 19343.863 182.59043 0 3764.7874 0.75890736 - 1350 20019.643 57.503573 0 3764.8448 0.31444671 - 1400 18549.582 329.31436 0 3764.4221 10.738303 - 1450 15163.926 957.47584 0 3765.6103 -17.923459 - 1500 19223.688 204.15172 0 3764.0939 -1.6134536 - 1550 18147.996 404.12676 0 3764.8668 8.4194774 - 1600 18615.043 317.42466 0 3764.6548 -2.3288957 - 1650 20120.654 38.887927 0 3764.935 -8.7620244 - 1700 19450.906 162.98284 0 3765.0025 2.3254707 - 1750 19374.632 177.37954 0 3765.2744 8.9328778 - 1800 19424.403 167.93971 0 3765.0514 0.081234023 - 1850 17936.311 442.83087 0 3764.3699 6.600894 - 1900 19982.596 64.40607 0 3764.8868 -2.9530102 - 1950 16215.95 761.89459 0 3764.8482 13.994238 - 2000 18584.39 322.12621 0 3763.68 7.1654863 - 2050 20107.966 41.025634 0 3764.723 -0.31093298 - 2100 20002.346 60.590652 0 3764.7288 -6.7919499 - 2150 16949.612 626.62391 0 3765.441 3.5094585 - 2200 20010.952 58.808492 0 3764.5403 -10.862255 - 2250 18982.727 247.00941 0 3762.3292 -0.53796622 - 2300 18401.351 354.86992 0 3762.5275 1.0919209 - 2350 19390.5 172.94589 0 3763.7793 -3.3526281 - 2400 16081.648 786.23133 0 3764.3143 -16.197875 - 2450 18870.722 268.69249 0 3763.2707 11.192419 - 2500 19687.71 117.6898 0 3763.562 4.387789 - 2550 18872.129 268.54506 0 3763.3838 -5.6577428 - 2600 17017.179 612.11028 0 3763.4397 6.3187623 - 2650 18766.343 288.63699 0 3763.8856 2.3968008 - 2700 19737.998 108.02069 0 3763.2054 -0.30752024 - 2750 19508.797 150.69812 0 3763.4384 -1.6171126 - 2800 18394.822 355.73011 0 3762.1787 21.193311 - 2850 18561.108 325.76417 0 3763.0065 3.9331499 - 2900 20124.042 36.554163 0 3763.2286 0.54133121 - 2950 15727.607 849.90471 0 3762.4245 13.885323 - 3000 17991.206 431.32693 0 3763.0317 9.9953567 - 3050 18834.86 275.34241 0 3763.2795 9.1519305 - 3100 18986.272 247.38123 0 3763.3575 -1.8754521 - 3150 19979.145 63.575968 0 3763.4177 -11.800026 - 3200 19953.846 68.376593 0 3763.5332 -6.7719573 - 3250 15646.02 867.19502 0 3764.6062 16.433911 - 3300 16946.252 625.14854 0 3763.3433 4.3975456 - 3350 19006.567 243.97026 0 3763.7048 5.3392405 - 3400 18082.133 414.87059 0 3763.4138 15.143954 - 3450 18273.719 379.36162 0 3763.3836 5.4465204 - 3500 19783.17 100.06678 0 3763.6167 1.9588505 - 3550 19794.99 97.904519 0 3763.6435 -3.0349395 - 3600 18357.708 363.98291 0 3763.5585 -2.1229788 - 3650 19647.179 125.48949 0 3763.8559 1.2967845 - 3700 18806.632 281.78709 0 3764.4967 5.125718 - 3750 18982.747 248.97053 0 3764.294 -0.72036085 - 3800 19597.926 135.04805 0 3764.2935 -3.2129291 - 3850 18914.042 261.7133 0 3764.3136 -12.163282 - 3900 18646.326 311.16482 0 3764.1881 5.1808943 - 3950 18589.554 321.36256 0 3763.8726 4.9554103 - 4000 17877.615 453.02456 0 3763.694 9.8457113 - 4050 19440.059 164.15739 0 3764.1684 -5.4054486 - 4100 18505.545 337.36023 0 3764.313 4.8468985 - 4150 19220.307 204.85944 0 3764.1755 -6.5040818 - 4200 19058.915 234.79578 0 3764.2245 3.1852011 - 4250 19867.025 85.136186 0 3764.2149 5.6156236 - 4300 16989.857 616.86564 0 3763.1355 -3.4041875 - 4350 19782.09 100.85847 0 3764.2085 3.2531098 - 4400 19879.56 82.559198 0 3763.9593 1.6340828 - 4450 19409.95 169.46676 0 3763.9019 -1.824265 - 4500 19742.977 107.72786 0 3763.8347 -0.72711698 - 4550 17166.529 585.04113 0 3764.028 -0.38806102 - 4600 19604.596 133.61426 0 3764.0949 -5.2712214 - 4650 18865.608 270.23956 0 3763.8707 1.5751363 - 4700 20190.139 25.270932 0 3764.1855 -10.159924 - 4750 20043.487 52.56327 0 3764.3201 -4.713579 - 4800 19361.931 178.70311 0 3764.246 4.2460799 - 4850 19460.365 160.29083 0 3764.0621 3.5079181 - 4900 18252.89 384.16194 0 3764.3268 4.1870604 - 4950 19516.947 150.07365 0 3764.3231 4.0238527 - 5000 19041.145 238.27335 0 3764.4113 8.2280019 - 5050 19519.408 149.66793 0 3764.3731 -0.088904966 - 5100 18087.848 415.34004 0 3764.9416 8.9482852 - 5150 19392.463 173.43121 0 3764.628 -6.6722716 - 5200 19683.968 119.46663 0 3764.6458 -2.0330852 - 5250 19675.404 121.09497 0 3764.6884 3.0627309 - 5300 18627.53 314.96107 0 3764.5038 5.2692141 - 5350 20022.616 56.725346 0 3764.6172 -7.7034469 - 5400 19353.4 180.6482 0 3764.6112 -2.3897589 - 5450 16966.649 622.29693 0 3764.2689 6.3601638 - 5500 17584.292 508.42495 0 3764.7753 5.949219 - 5550 19169.69 214.76864 0 3764.7113 3.3778997 - 5600 19491.814 155.19149 0 3764.7866 -0.20031164 - 5650 19079.585 231.70394 0 3764.9605 7.3017226 - 5700 19686.564 119.34 0 3765 0.98980357 - 5750 19639.909 127.89886 0 3764.919 2.3982612 - 5800 19474.109 158.55418 0 3764.8706 3.4940447 - 5850 16957.663 624.72623 0 3765.0342 10.739819 - 5900 19950.579 70.027987 0 3764.5796 4.6925057 - 5950 19759.601 105.38621 0 3764.5716 3.0958319 - 6000 19129.749 221.96406 0 3764.5102 -1.0612997 - 6050 16087.951 785.36134 0 3764.6115 -15.255986 - 6100 18851.976 272.98306 0 3764.0896 4.9341766 - 6150 19532.23 147.4113 0 3764.4909 1.3206073 - 6200 18051.604 421.79367 0 3764.6833 2.587863 - 6250 18922.77 259.81211 0 3764.0287 10.363589 - 6300 18402.504 356.81518 0 3764.6864 8.3589218 - 6350 19315.369 187.64457 0 3764.5647 1.0716382 - 6400 19700.59 116.50438 0 3764.7618 2.165408 - 6450 19596.362 135.79675 0 3764.7527 1.6466783 - 6500 20217.677 20.884953 0 3764.8993 -3.5893732 - 6550 18278.991 379.95981 0 3764.9582 7.0433091 - 6600 20142.999 34.761283 0 3764.9462 1.7083655 - 6650 20185.488 26.899017 0 3764.9524 -0.65741058 - 6700 17942.962 441.72909 0 3764.4999 -3.691039 - 6750 16435.681 720.9581 0 3764.6028 -9.4583249 - 6800 17825.95 463.58979 0 3764.6916 6.1557503 - 6850 19440.75 164.52796 0 3764.6669 -11.921703 - 6900 18824.905 278.4897 0 3764.5832 -1.4668322 - 6950 19069.14 233.25502 0 3764.5772 6.8149838 - 7000 18983.209 249.29193 0 3764.701 15.140158 - 7050 15623.103 872.33684 0 3765.5041 7.3268767 - 7100 20090.283 44.006184 0 3764.429 2.6959947 - 7150 15535.27 888.39683 0 3765.2987 -4.1285644 - 7200 19425.575 167.19079 0 3764.5195 4.9190857 - 7250 18684.497 304.24754 0 3764.3396 7.3927682 - 7300 17632.518 498.82765 0 3764.1087 5.1101854 - 7350 18969.793 251.66375 0 3764.5884 -3.7865508 - 7400 17700.626 486.89931 0 3764.7931 -8.8531288 - 7450 17897.361 450.31562 0 3764.6417 -3.6095062 - 7500 18795.228 284.03842 0 3764.6361 8.3567203 - 7550 18658.285 309.34015 0 3764.5781 0.4306691 - 7600 19230.039 203.5385 0 3764.6567 0.80253549 - 7650 19513.551 150.86999 0 3764.4906 0.32848159 - 7700 19494.849 154.28788 0 3764.4452 -4.2498631 - 7750 20011.058 58.832118 0 3764.5835 0.54896615 - 7800 19241.055 201.57548 0 3764.7338 -0.26200786 - 7850 19512.742 151.11436 0 3764.5851 2.7308876 - 7900 19688.007 118.68023 0 3764.6075 0.80454178 - 7950 16891.645 636.56823 0 3764.6507 -25.839253 - 8000 19425.572 167.33746 0 3764.6657 -2.8744687 - 8050 19444.916 163.57779 0 3764.4882 8.5388183 - 8100 19540.338 145.77731 0 3764.3585 5.5606379 - 8150 17997.991 429.85951 0 3762.8208 20.179487 - 8200 19463.886 159.50302 0 3763.9264 0.19577123 - 8250 19517.733 149.53457 0 3763.9295 2.3294314 - 8300 19236.221 201.66041 0 3763.9236 5.8204747 - 8350 18662.608 308.25544 0 3764.2939 5.4422482 - 8400 19030.046 239.38211 0 3763.4647 3.7940188 - 8450 18058.148 419.70672 0 3763.8081 4.4010713 - 8500 16866.001 641.00564 0 3764.3392 -19.894815 - 8550 19484.364 155.35821 0 3763.5737 4.2635496 - 8600 18562.912 326.16323 0 3763.7395 11.288271 - 8650 19256.188 197.67578 0 3763.6365 -4.1872666 - 8700 19653.945 124.27148 0 3763.8909 -7.4888761 - 8750 19590.834 136.12748 0 3764.0596 1.0605539 - 8800 19065.424 233.46882 0 3764.1029 1.8432113 - 8850 18961.297 252.69734 0 3764.0486 6.7414134 - 8900 19879.711 82.777822 0 3764.2058 0.12631864 - 8950 18689.712 302.80546 0 3763.8632 5.1584036 - 9000 19114.403 224.23511 0 3763.9393 -4.5856366 - 9050 17626.3 500.49518 0 3764.6248 -3.9436947 - 9100 18552.501 328.86032 0 3764.5087 -0.32810034 - 9150 15039.846 979.12961 0 3764.2862 16.571104 - 9200 19146.923 218.64681 0 3764.3733 -4.6264398 - 9250 17606.161 503.14852 0 3763.5487 13.13675 - 9300 18002.328 430.47362 0 3764.2381 4.9326117 - 9350 19980.452 64.168644 0 3764.2524 -5.6111349 - 9400 18953.798 254.44926 0 3764.4118 2.3662302 - 9450 17151.075 588.59472 0 3764.7197 4.3116983 - 9500 19128.858 221.38199 0 3763.763 3.6641306 - 9550 18217.322 390.53199 0 3764.1101 1.8537154 - 9600 19094.478 227.98925 0 3764.0038 3.972665 - 9650 19577.649 138.55507 0 3764.0456 4.0408247 - 9700 19331.361 184.31942 0 3764.2011 -4.7996733 - 9750 18999.798 245.87295 0 3764.3541 -0.26741334 - 9800 18987.181 248.37105 0 3764.5157 6.1717595 - 9850 20094.73 43.013036 0 3764.2593 -8.9770288 - 9900 18988.815 247.63984 0 3764.087 -6.3990966 - 9950 18290.808 377.34967 0 3764.5363 7.7453525 - 10000 19558.326 142.47047 0 3764.3828 3.4110829 -Loop time of 3.53831 on 4 procs for 10000 steps with 81 atoms - -Performance: 24418.438 tau/day, 2826.208 timesteps/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0096724 | 0.035349 | 0.063574 | 10.3 | 1.00 -Neigh | 0.0091243 | 0.022333 | 0.037608 | 6.9 | 0.63 -Comm | 0.18063 | 0.2494 | 0.33202 | 12.6 | 7.05 -Output | 0.0060797 | 0.0065744 | 0.0074706 | 0.7 | 0.19 -Modify | 3.0943 | 3.1895 | 3.2828 | 4.0 | 90.14 -Other | | 0.0352 | | | 0.99 - -Nlocal: 20.25 ave 36 max 0 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Nghost: 17.5 ave 37 max 1 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 154.25 ave 393 max 0 min -Histogram: 2 0 0 0 0 1 0 0 0 1 - -Total # of neighbors = 617 -Ave neighs/atom = 7.61728 -Neighbor list builds = 993 -Dangerous builds = 948 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/rigid/log.20Apr18.rigid.tnr.g++.1 b/examples/rigid/log.20Apr18.rigid.tnr.g++.1 deleted file mode 100644 index 097fd132aa..0000000000 --- a/examples/rigid/log.20Apr18.rigid.tnr.g++.1 +++ /dev/null @@ -1,458 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Tethered nanorods - -atom_style molecular - -read_data data.rigid.tnr - orthogonal box = (-31.122 -31.122 -31.122) to (31.122 31.122 31.122) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 5600 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 1600 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - -# Specify bond parameters - -bond_style fene -bond_coeff 1 30.0 1.5 1.0 1.0 - -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - -# Specify initial velocities - -velocity all create 1.4 109345 - -# Specify rigid components - -group rods type 2 -4000 atoms in group rods -group tethers subtract all rods -1600 atoms in group tethers - -neigh_modify exclude molecule/intra rods delay 0 every 1 - -# Specify the pair potentials - -pair_style lj/cut 2.5 -pair_modify shift yes -pair_coeff * * 1.0 1.0 1.122 -pair_coeff 2 2 1.0 1.0 2.5 - -# Specify output - -thermo 100 -thermo_style custom step temp pe etotal press enthalpy lx ly lz pxx pyy pzz -thermo_modify flush yes lost warn - -timestep 0.005 - -fix 1 rods rigid molecule -800 rigid bodies with 4000 atoms -fix 2 tethers nve -fix 3 all langevin 1.4 1.4 1.0 437624 - -run 5000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 45 45 45 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.769 | 7.769 | 7.769 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 0 1.3963219 5.9478449 7.0445809 0.048565317 9.13595 62.244 62.244 62.244 0.0091983659 0.11850113 0.017996458 - 100 1.3418512 5.9671777 7.0211299 0.025020362 8.0985822 62.244 62.244 62.244 0.02036076 0.038265078 0.016435248 - 200 1.3730638 5.9750802 7.0535483 0.0053287535 7.2830205 62.244 62.244 62.244 -0.00054924195 0.0092396988 0.0072958036 - 300 1.376262 5.9821642 7.0631443 0.0055536521 7.3023013 62.244 62.244 62.244 0.0033577704 0.0069111861 0.0063919998 - 400 1.3782954 5.9983628 7.08094 0.0020507385 7.169251 62.244 62.244 62.244 -0.0060862717 0.0098998072 0.0023386801 - 500 1.386863 6.0053312 7.0946377 -0.0009847031 7.0522334 62.244 62.244 62.244 -0.0038708372 0.0005697804 0.00034694745 - 600 1.4069849 6.0035719 7.1086832 0.0047883912 7.3148858 62.244 62.244 62.244 0.001069365 0.0078059505 0.0054898581 - 700 1.4423187 5.9982171 7.1310812 0.012141001 7.6539093 62.244 62.244 62.244 0.0094765272 0.011007593 0.015938883 - 800 1.4303878 5.9968168 7.1203098 -0.00081349095 7.0852784 62.244 62.244 62.244 0.0011153812 0.00041597298 -0.0039718271 - 900 1.4140538 5.9838168 7.0944803 0.00207609 7.183883 62.244 62.244 62.244 0.00043409671 0.0022778944 0.0035162788 - 1000 1.3906567 5.988119 7.0804053 0.0022005856 7.1751692 62.244 62.244 62.244 0.0077268425 -0.0022042977 0.0010792119 - 1100 1.3921992 5.9892203 7.0827181 0.0035041977 7.2336194 62.244 62.244 62.244 -0.0037576823 0.0040827951 0.01018748 - 1200 1.3968803 5.9795846 7.0767592 -0.0031072146 6.9429532 62.244 62.244 62.244 -0.0077387449 0.0033056124 -0.0048885115 - 1300 1.3755848 5.9739757 7.0544239 0.0092247106 7.4516677 62.244 62.244 62.244 0.0092788748 0.010737194 0.0076580625 - 1400 1.3847985 5.9703631 7.0580481 0.0071703598 7.3668254 62.244 62.244 62.244 0.0080485848 0.012260474 0.001202021 - 1500 1.4190051 5.956946 7.0714985 0.0035992903 7.2264948 62.244 62.244 62.244 -0.0055125437 0.01038369 0.0059267242 - 1600 1.3980036 5.9671666 7.0652236 0.0061819851 7.3314385 62.244 62.244 62.244 0.0062429141 0.0035120077 0.0087910334 - 1700 1.4276062 5.9610381 7.0823462 0.007832375 7.4196319 62.244 62.244 62.244 0.0083316819 0.0058394292 0.009326014 - 1800 1.4112769 5.9630595 7.0715419 0.0068032101 7.3645087 62.244 62.244 62.244 0.0065502252 0.0062317255 0.0076276797 - 1900 1.4276973 5.9489341 7.0703139 0.008397746 7.4319462 62.244 62.244 62.244 0.0148941 0.0032963108 0.0070028268 - 2000 1.4056158 5.9564624 7.0604983 0.0090470732 7.4500926 62.244 62.244 62.244 0.011871718 0.0086681344 0.0066013673 - 2100 1.3924778 5.9483611 7.0420778 0.0088893819 7.4248814 62.244 62.244 62.244 0.010247454 0.0097830093 0.0066376825 - 2200 1.3760401 5.9435877 7.0243935 -0.0042972782 6.8393397 62.244 62.244 62.244 -0.0050064436 -0.0046216998 -0.0032636911 - 2300 1.4191937 5.9334036 7.0481042 0.0047000032 7.2505006 62.244 62.244 62.244 0.0057709635 0.0044949165 0.0038341296 - 2400 1.4213285 5.9472214 7.0635988 0.010197674 7.5027414 62.244 62.244 62.244 0.0083738261 0.0090537939 0.013165402 - 2500 1.4153808 5.9421661 7.0538718 0.00015906308 7.0607216 62.244 62.244 62.244 0.0023516211 -0.0019814987 0.00010706678 - 2600 1.4014223 5.9431386 7.0438807 0.0070733749 7.3484816 62.244 62.244 62.244 0.0054143871 0.010055843 0.0057498948 - 2700 1.4138077 5.9369067 7.047377 0.0024268843 7.1518859 62.244 62.244 62.244 0.0052918436 0.0014960354 0.00049277379 - 2800 1.432192 5.9347676 7.0596777 0.0077670448 7.3941501 62.244 62.244 62.244 0.012668421 0.0059113032 0.0047214106 - 2900 1.3938659 5.921023 7.01583 0.0053751201 7.2472989 62.244 62.244 62.244 0.0020490372 0.0076566097 0.0064197134 - 3000 1.390221 5.9205014 7.0124455 -0.0010750973 6.9661486 62.244 62.244 62.244 0.0019519817 -0.0041878875 -0.0009893861 - 3100 1.4205722 5.9178284 7.0336117 0.0098735467 7.4587964 62.244 62.244 62.244 0.0040973349 0.012167268 0.013356037 - 3200 1.398418 5.9150349 7.0134173 0.0061541837 7.278435 62.244 62.244 62.244 0.0067621825 0.011952562 -0.00025219321 - 3300 1.4269859 5.9148727 7.0356937 0.006062387 7.2967584 62.244 62.244 62.244 0.012956233 -2.480748e-05 0.005255736 - 3400 1.434286 5.9356705 7.0622253 0.0002731615 7.0739885 62.244 62.244 62.244 -0.00054959543 0.0052526331 -0.0038835532 - 3500 1.4416808 5.9228153 7.0551783 0.0083383068 7.414251 62.244 62.244 62.244 0.0073994017 0.0030328023 0.014582716 - 3600 1.4136063 5.9039442 7.0142562 0.0019711852 7.0991414 62.244 62.244 62.244 -0.00032317688 0.0035029725 0.0027337599 - 3700 1.433382 5.91201 7.0378548 0.0071286927 7.3448378 62.244 62.244 62.244 0.0064768108 0.0046765006 0.010232767 - 3800 1.3659481 5.9032872 6.9761663 -0.0054034056 6.7434793 62.244 62.244 62.244 -0.007394357 -0.0082833116 -0.00053254832 - 3900 1.396322 5.9043001 7.0010362 0.005331024 7.2306062 62.244 62.244 62.244 0.0081855301 0.0048806234 0.0029269184 - 4000 1.412548 5.906066 7.0155468 0.0028450132 7.1380616 62.244 62.244 62.244 0.0052588387 0.00072412871 0.0025520721 - 4100 1.3943949 5.9040868 6.9993093 0.0058053193 7.2493039 62.244 62.244 62.244 0.0060583148 0.0024781972 0.0088794459 - 4200 1.4249768 5.8906369 7.0098798 0.0030209006 7.1399689 62.244 62.244 62.244 0.0061742017 -0.0020795681 0.0049680681 - 4300 1.3899827 5.8966327 6.9883897 0.0057278096 7.2350464 62.244 62.244 62.244 0.0049035059 0.0021868561 0.010093067 - 4400 1.4414361 5.8986386 7.0308094 0.0050941357 7.2501783 62.244 62.244 62.244 0.0057971901 0.0037941986 0.0056910185 - 4500 1.4093099 5.8922729 6.9992103 0.0012182325 7.0516711 62.244 62.244 62.244 0.0042896986 0.0014287789 -0.00206378 - 4600 1.3779677 5.892894 6.9752138 0.002057623 7.0638213 62.244 62.244 62.244 0.0029271755 -0.0031752166 0.0064209102 - 4700 1.4086418 5.9096898 7.0161024 -0.00052853259 6.9933422 62.244 62.244 62.244 -0.001862386 -0.0018129293 0.0020897176 - 4800 1.4394 5.9146102 7.0451818 0.015326441 7.7051846 62.244 62.244 62.244 0.014754936 0.017967956 0.013256431 - 4900 1.4496219 5.9074613 7.0460616 0.0075297868 7.370317 62.244 62.244 62.244 0.0092907193 0.0079794674 0.0053191736 - 5000 1.4280291 5.9106136 7.032254 -0.0013249587 6.9751972 62.244 62.244 62.244 -0.0044875103 0.0020723667 -0.0015597324 -Loop time of 6.73744 on 1 procs for 5000 steps with 5600 atoms - -Performance: 320596.735 tau/day, 742.122 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.52635 | 0.52635 | 0.52635 | 0.0 | 7.81 -Bond | 0.26628 | 0.26628 | 0.26628 | 0.0 | 3.95 -Neigh | 1.5927 | 1.5927 | 1.5927 | 0.0 | 23.64 -Comm | 0.16011 | 0.16011 | 0.16011 | 0.0 | 2.38 -Output | 0.0040634 | 0.0040634 | 0.0040634 | 0.0 | 0.06 -Modify | 4.0145 | 4.0145 | 4.0145 | 0.0 | 59.58 -Other | | 0.1735 | | | 2.57 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1352 ave 1352 max 1352 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5257 ave 5257 max 5257 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 5257 -Ave neighs/atom = 0.93875 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 766 -Dangerous builds = 0 - -# Replace fix rigid and fix langevin with new ones - -unfix 1 -unfix 3 - -fix 3 tethers langevin 1.4 1.4 1.0 198450 - -# Test different integrators for rods - -fix 1 rods rigid/nve molecule -800 rigid bodies with 4000 atoms -print "rigid/nve" -rigid/nve -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 5000 1.4280291 5.9106136 7.032254 0.02814128 8.2441024 62.244 62.244 62.244 0.019873502 0.039656784 0.024893554 - 5100 1.4435659 5.8998386 7.0336823 0.0063929319 7.3089813 62.244 62.244 62.244 0.0089837757 0.0052773116 0.0049177085 - 5200 1.3970069 5.9117164 7.0089904 0.0065245686 7.289958 62.244 62.244 62.244 0.008502047 0.0043872479 0.0066844108 - 5300 1.433167 5.8796669 7.0053428 0.0076478538 7.3346825 62.244 62.244 62.244 0.0061384889 0.0070193789 0.0097856935 - 5400 1.4191626 5.8830864 6.9977626 0.0026371359 7.1113257 62.244 62.244 62.244 0.0024097043 -0.00082200506 0.0063237084 - 5500 1.409376 5.8753367 6.982326 0.010180815 7.4207427 62.244 62.244 62.244 0.010429709 0.0081711083 0.011941628 - 5600 1.4005678 5.882485 6.9825559 0.00036705268 6.9983623 62.244 62.244 62.244 -0.0034485466 0.0031079204 0.0014417843 - 5700 1.4116833 5.8842566 6.9930582 0.00053413233 7.0160595 62.244 62.244 62.244 0.0016669624 -0.0030741941 0.0030096286 - 5800 1.409035 5.894902 7.0016235 4.7080816e-05 7.003651 62.244 62.244 62.244 0.0018596854 -5.3937508e-05 -0.0016645054 - 5900 1.4150353 5.8928576 7.004292 0.0063467985 7.2776043 62.244 62.244 62.244 0.0055755751 0.0090839847 0.0043808358 - 6000 1.4374163 5.8778036 7.0068171 0.0031890481 7.1441472 62.244 62.244 62.244 0.0067647375 0.0015458579 0.0012565488 -Loop time of 1.41082 on 1 procs for 1000 steps with 5600 atoms - -Performance: 306205.780 tau/day, 708.810 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.149 | 0.149 | 0.149 | 0.0 | 10.56 -Bond | 0.053873 | 0.053873 | 0.053873 | 0.0 | 3.82 -Neigh | 0.35532 | 0.35532 | 0.35532 | 0.0 | 25.19 -Comm | 0.032433 | 0.032433 | 0.032433 | 0.0 | 2.30 -Output | 0.00080752 | 0.00080752 | 0.00080752 | 0.0 | 0.06 -Modify | 0.78447 | 0.78447 | 0.78447 | 0.0 | 55.60 -Other | | 0.03491 | | | 2.47 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1347 ave 1347 max 1347 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5592 ave 5592 max 5592 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 5592 -Ave neighs/atom = 0.998571 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 153 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nvt molecule temp 1.4 1.4 1.0 -800 rigid bodies with 4000 atoms -print "rigid/nvt" -rigid/nvt -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 6000 1.4374163 5.8778036 7.0068171 -0.0020672233 6.9177963 62.244 62.244 62.244 0.034504923 -0.030001164 -0.010705429 - 6100 1.4393824 5.8852696 7.0158274 0.0055792227 7.2560855 62.244 62.244 62.244 0.0072602759 0.0074870643 0.0019903278 - 6200 1.4265711 5.8853532 7.0058484 0.0019366613 7.0892468 62.244 62.244 62.244 -0.0035411799 0.0047319741 0.0046191897 - 6300 1.4030198 5.8824874 6.9844843 0.0055760353 7.2246052 62.244 62.244 62.244 0.0031273033 0.0080002386 0.005600564 - 6400 1.3592064 5.8924876 6.9600714 0.0051450348 7.1816321 62.244 62.244 62.244 0.0042848197 0.0044005693 0.0067497155 - 6500 1.3946028 5.8798014 6.9751872 0.0051168754 7.1955353 62.244 62.244 62.244 0.0020473208 0.0038175566 0.0094857487 - 6600 1.3652122 5.8985637 6.9708648 0.0065480579 7.2528439 62.244 62.244 62.244 0.0056940621 0.0062242398 0.0077258719 - 6700 1.3808929 5.9047739 6.9893913 0.0074053719 7.308289 62.244 62.244 62.244 0.0049554161 0.012378296 0.0048824031 - 6800 1.4140879 5.891133 7.0018233 0.001592636 7.070407 62.244 62.244 62.244 -9.4421917e-05 -0.00029455229 0.0051668821 - 6900 1.4364121 5.8904988 7.0187235 0.00647853 7.2977086 62.244 62.244 62.244 0.0024458531 0.0073279625 0.0096617742 - 7000 1.4370567 5.8900758 7.0188069 0.00098705898 7.0613127 62.244 62.244 62.244 0.0024436343 -0.0011032284 0.001620771 -Loop time of 1.44111 on 1 procs for 1000 steps with 5600 atoms - -Performance: 299769.942 tau/day, 693.912 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.14928 | 0.14928 | 0.14928 | 0.0 | 10.36 -Bond | 0.053511 | 0.053511 | 0.053511 | 0.0 | 3.71 -Neigh | 0.35946 | 0.35946 | 0.35946 | 0.0 | 24.94 -Comm | 0.033026 | 0.033026 | 0.033026 | 0.0 | 2.29 -Output | 0.00081658 | 0.00081658 | 0.00081658 | 0.0 | 0.06 -Modify | 0.80995 | 0.80995 | 0.80995 | 0.0 | 56.20 -Other | | 0.03506 | | | 2.43 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1351 ave 1351 max 1351 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5541 ave 5541 max 5541 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 5541 -Ave neighs/atom = 0.989464 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 153 -Dangerous builds = 0 -unfix 1 - -compute myTemp all temp - -fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 iso 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/npt iso" -rigid/npt iso -fix_modify 1 temp myTemp - -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 7000 1.4370567 5.8900758 7.0188069 -0.0033603557 6.8740999 62.244 62.244 62.244 -0.094745193 0.10894465 -0.024280521 - 7100 1.485379 5.864626 7.0313116 0.018625962 7.6475425 57.008236 57.008236 57.008236 0.023222208 0.015549704 0.017105973 - 7200 1.5367991 5.8157585 7.0228319 0.019179143 7.4580039 50.273593 50.273593 50.273593 0.019479917 0.008906575 0.029150938 - 7300 1.5692285 5.785208 7.0177529 0.026450106 7.4560147 45.27218 45.27218 45.27218 0.029705272 0.019989987 0.029655059 - 7400 1.5961415 5.7633541 7.0170377 0.049085262 7.6510208 41.665015 41.665015 41.665015 0.045248259 0.047932005 0.054075524 - 7500 1.5805951 5.7223115 6.9637843 0.022024393 7.1962354 38.952791 38.952791 38.952791 0.017398546 0.0097043058 0.038970326 - 7600 1.5679583 5.6928914 6.9244386 0.05023237 7.3717858 36.808633 36.808633 36.808633 0.029561593 0.080716323 0.040419195 - 7700 1.5214637 5.661404 6.8564322 0.038992847 7.1614257 35.25044 35.25044 35.25044 0.013961981 0.064676103 0.038340457 - 7800 1.5313649 5.6185256 6.8213307 0.053950562 7.1990319 33.971403 33.971403 33.971403 0.036690654 0.066107903 0.059053129 - 7900 1.5272701 5.5732963 6.7728851 0.067896988 7.2131774 33.115109 33.115109 33.115109 0.046486851 0.073976177 0.083227936 - 8000 1.4754162 5.5525858 6.7114461 0.036458901 6.9347086 32.48878 32.48878 32.48878 0.066065978 0.031260775 0.01204995 -Loop time of 3.09124 on 1 procs for 1000 steps with 5600 atoms - -Performance: 139749.554 tau/day, 323.494 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.38334 | 0.38334 | 0.38334 | 0.0 | 12.40 -Bond | 0.079063 | 0.079063 | 0.079063 | 0.0 | 2.56 -Neigh | 1.3711 | 1.3711 | 1.3711 | 0.0 | 44.35 -Comm | 0.07249 | 0.07249 | 0.07249 | 0.0 | 2.35 -Output | 0.00079656 | 0.00079656 | 0.00079656 | 0.0 | 0.03 -Modify | 1.1412 | 1.1412 | 1.1412 | 0.0 | 36.92 -Other | | 0.04324 | | | 1.40 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 2922 ave 2922 max 2922 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 24639 ave 24639 max 24639 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 24639 -Ave neighs/atom = 4.39982 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 335 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 x 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/npt x" -rigid/npt x -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.784 | 7.784 | 7.784 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 8000 1.4754162 5.5525858 6.7114461 -0.036273091 6.4893215 32.48878 32.48878 32.48878 -0.12886524 -0.13731772 0.15736368 - 8100 1.4842494 5.5359706 6.701769 0.040754696 6.9494736 32.246136 32.48878 32.48878 0.0098547221 0.069850343 0.042559024 - 8200 1.4385513 5.5252007 6.6551057 -0.0053954052 6.6228379 31.729684 32.48878 32.48878 0.029251386 -0.023427626 -0.022009975 - 8300 1.4426011 5.5073818 6.6404676 0.034683453 6.8437384 31.093797 32.48878 32.48878 0.028287259 0.027455229 0.048307871 - 8400 1.4194517 5.5015592 6.6164624 0.015869651 6.7074209 30.408624 32.48878 32.48878 0.020129982 0.00586219 0.021616782 - 8500 1.4584335 5.4424151 6.5879365 0.025786252 6.7324275 29.728548 32.48878 32.48878 0.051564744 0.0046756434 0.021118368 - 8600 1.4578973 5.4266016 6.5717019 0.061244725 6.9097759 29.286286 32.48878 32.48878 0.08652905 0.052448352 0.044756773 - 8700 1.4158345 5.4199695 6.5320317 0.076133238 6.9466617 28.894001 32.48878 32.48878 0.078560655 0.077921379 0.071917679 - 8800 1.4360707 5.3986549 6.5266116 0.05106059 6.7993343 28.337182 32.48878 32.48878 0.030158729 0.080651224 0.042371819 - 8900 1.424778 5.386975 6.5060619 0.0023828771 6.5185272 27.75397 32.48878 32.48878 -0.026562751 0.0076340254 0.026077357 - 9000 1.4273004 5.369067 6.490135 0.077698761 6.8879525 27.163833 32.48878 32.48878 0.056923916 0.050917329 0.12525504 -Loop time of 3.05599 on 1 procs for 1000 steps with 5600 atoms - -Performance: 141361.930 tau/day, 327.227 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.60397 | 0.60397 | 0.60397 | 0.0 | 19.76 -Bond | 0.080384 | 0.080384 | 0.080384 | 0.0 | 2.63 -Neigh | 1.1078 | 1.1078 | 1.1078 | 0.0 | 36.25 -Comm | 0.057267 | 0.057267 | 0.057267 | 0.0 | 1.87 -Output | 0.0007937 | 0.0007937 | 0.0007937 | 0.0 | 0.03 -Modify | 1.1674 | 1.1674 | 1.1674 | 0.0 | 38.20 -Other | | 0.03837 | | | 1.26 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 3326 ave 3326 max 3326 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 31301 ave 31301 max 31301 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 31301 -Ave neighs/atom = 5.58946 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 168 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nph molecule iso 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/nph iso" -rigid/nph iso -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.787 | 7.787 | 7.787 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 9000 1.4273004 5.369067 6.490135 0.075024718 6.8742614 27.163833 32.48878 32.48878 0.020257355 0.083191009 0.12162579 - 9100 1.425834 5.3711961 6.4911123 0.045582762 6.7236289 27.13015 32.448495 32.448495 0.047970965 0.045448278 0.043329042 - 9200 1.4609827 5.3288319 6.4763555 0.072880923 6.8414166 26.96611 32.252298 32.252298 0.053774659 0.093193782 0.071674329 - 9300 1.448717 5.3331013 6.4709909 0.048446002 6.7095138 26.811748 32.067676 32.067676 0.053340258 0.056657855 0.035339893 - 9400 1.441683 5.326611 6.4589758 0.014571871 6.5288665 26.578822 31.789089 31.789089 0.043939432 -0.038654064 0.038430244 - 9500 1.4651641 5.2943716 6.4451796 0.079668782 6.8205296 26.421077 31.600422 31.600422 0.10411792 0.075090335 0.059798087 - 9600 1.4617024 5.2886327 6.4367216 0.01137432 6.4894218 26.274239 31.424799 31.424799 0.023318055 0.015516795 -0.0047118896 - 9700 1.4381296 5.2798198 6.4093935 0.030371415 6.5484925 26.173039 31.303761 31.303761 0.05231569 0.025227191 0.013571362 - 9800 1.4412744 5.2674085 6.3994523 0.076731911 6.7476559 26.092768 31.207754 31.207754 0.05712947 0.077029719 0.096036545 - 9900 1.4427959 5.2666411 6.39988 0.034570225 6.5551479 26.003248 31.100686 31.100686 0.020955217 0.019879252 0.062876207 - 10000 1.4337411 5.258442 6.3845688 0.011619021 6.4367617 26.004486 31.102166 31.102166 0.018666906 0.01076669 0.005423467 -Loop time of 3.23963 on 1 procs for 1000 steps with 5600 atoms - -Performance: 133348.758 tau/day, 308.678 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.71266 | 0.71266 | 0.71266 | 0.0 | 22.00 -Bond | 0.0805 | 0.0805 | 0.0805 | 0.0 | 2.48 -Neigh | 1.2019 | 1.2019 | 1.2019 | 0.0 | 37.10 -Comm | 0.061646 | 0.061646 | 0.061646 | 0.0 | 1.90 -Output | 0.00080585 | 0.00080585 | 0.00080585 | 0.0 | 0.02 -Modify | 1.1436 | 1.1436 | 1.1436 | 0.0 | 35.30 -Other | | 0.03849 | | | 1.19 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 3617 ave 3617 max 3617 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 35834 ave 35834 max 35834 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 35834 -Ave neighs/atom = 6.39893 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 162 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nph molecule x 0.05 0.05 1.0 y 0.05 0.05 1.0 couple xy dilate all -800 rigid bodies with 4000 atoms -print "rigid/nph xy couple" -rigid/nph xy couple -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.793 | 7.793 | 7.793 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 10000 1.4337411 5.258442 6.3845688 0.26156311 7.559515 26.004486 31.102166 31.102166 0.31569183 0.56043401 -0.091436513 - 10100 1.4450694 5.2429626 6.3779872 0.026397674 6.4966895 26.018016 31.118349 31.102166 0.012890725 0.035887426 0.030414871 - 10200 1.4603735 5.2471262 6.3941713 0.041496848 6.5804213 25.993694 31.089259 31.102166 0.043043384 0.031851909 0.04959525 - 10300 1.4434562 5.2268279 6.3605855 0.073867581 6.6874051 25.808018 30.867184 31.102166 0.049265569 0.084151743 0.08818543 - 10400 1.4391471 5.209772 6.3401449 0.010656841 6.3865593 25.605881 30.625422 31.102166 -0.012411333 -0.014743822 0.059125677 - 10500 1.4239127 5.2146206 6.3330277 0.08346505 6.689122 25.342982 30.310987 31.102166 0.15420896 0.040839126 0.055347067 - 10600 1.4524651 5.1794989 6.3203324 -0.025909515 6.2120807 25.079294 29.995608 31.102166 -0.014573849 -0.056558124 -0.0065965719 - 10700 1.4455577 5.1721256 6.3075337 0.084888991 6.6555495 24.842844 29.712806 31.102166 0.10063515 0.067972312 0.08605951 - 10800 1.4598996 5.15251 6.2991829 0.11430526 6.7624231 24.700034 29.542001 31.102166 0.12408423 0.12316195 0.095669606 - 10900 1.4149128 5.1641212 6.2754594 0.045495923 6.4584246 24.605124 29.428485 31.102166 0.10001213 0.053235051 -0.016759411 - 11000 1.3909637 5.1566933 6.2492208 0.046382806 6.433354 24.446408 29.238657 31.102166 0.091440494 0.0046064525 0.043101472 -Loop time of 3.41971 on 1 procs for 1000 steps with 5600 atoms - -Performance: 126326.531 tau/day, 292.423 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.78521 | 0.78521 | 0.78521 | 0.0 | 22.96 -Bond | 0.080655 | 0.080655 | 0.080655 | 0.0 | 2.36 -Neigh | 1.2846 | 1.2846 | 1.2846 | 0.0 | 37.57 -Comm | 0.064334 | 0.064334 | 0.064334 | 0.0 | 1.88 -Output | 0.00080228 | 0.00080228 | 0.00080228 | 0.0 | 0.02 -Modify | 1.1651 | 1.1651 | 1.1651 | 0.0 | 34.07 -Other | | 0.03903 | | | 1.14 - -Nlocal: 5600 ave 5600 max 5600 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 3805 ave 3805 max 3805 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 40038 ave 40038 max 40038 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 40038 -Ave neighs/atom = 7.14964 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 162 -Dangerous builds = 0 - -Total wall time: 0:00:22 diff --git a/examples/rigid/log.20Apr18.rigid.tnr.g++.4 b/examples/rigid/log.20Apr18.rigid.tnr.g++.4 deleted file mode 100644 index 28457f51ee..0000000000 --- a/examples/rigid/log.20Apr18.rigid.tnr.g++.4 +++ /dev/null @@ -1,458 +0,0 @@ -LAMMPS (20 Apr 2018) - using 1 OpenMP thread(s) per MPI task -# Tethered nanorods - -atom_style molecular - -read_data data.rigid.tnr - orthogonal box = (-31.122 -31.122 -31.122) to (31.122 31.122 31.122) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 5600 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 1600 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - -# Specify bond parameters - -bond_style fene -bond_coeff 1 30.0 1.5 1.0 1.0 - -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - -# Specify initial velocities - -velocity all create 1.4 109345 - -# Specify rigid components - -group rods type 2 -4000 atoms in group rods -group tethers subtract all rods -1600 atoms in group tethers - -neigh_modify exclude molecule/intra rods delay 0 every 1 - -# Specify the pair potentials - -pair_style lj/cut 2.5 -pair_modify shift yes -pair_coeff * * 1.0 1.0 1.122 -pair_coeff 2 2 1.0 1.0 2.5 - -# Specify output - -thermo 100 -thermo_style custom step temp pe etotal press enthalpy lx ly lz pxx pyy pzz -thermo_modify flush yes lost warn - -timestep 0.005 - -fix 1 rods rigid molecule -800 rigid bodies with 4000 atoms -fix 2 tethers nve -fix 3 all langevin 1.4 1.4 1.0 437624 - -run 5000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 45 45 45 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.216 | 7.384 | 7.552 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 0 1.3963219 5.9478449 7.0445809 0.048565317 9.13595 62.244 62.244 62.244 0.0091983659 0.11850113 0.017996458 - 100 1.3999025 5.9707695 7.0703179 0.027293074 8.24564 62.244 62.244 62.244 0.017246307 0.04732529 0.017307624 - 200 1.4245544 5.9878446 7.1067558 0.0072016369 7.41688 62.244 62.244 62.244 0.0071370801 0.0084066589 0.0060611719 - 300 1.4212057 5.9942604 7.1105414 0.0023296933 7.210865 62.244 62.244 62.244 -0.0059197015 0.0040269953 0.008881786 - 400 1.4030116 5.9953214 7.0973119 0.0055751834 7.3373961 62.244 62.244 62.244 -0.0026920847 0.013323321 0.0060943141 - 500 1.4201338 5.9984777 7.1139168 -0.0018229523 7.035415 62.244 62.244 62.244 -0.0082217102 -0.00047319975 0.0032260529 - 600 1.425173 5.9902537 7.1096508 0.013367744 7.6853062 62.244 62.244 62.244 0.012971415 0.016298595 0.010833222 - 700 1.4181225 5.9840752 7.0979345 0.0014999758 7.1625279 62.244 62.244 62.244 -0.0015835387 0.0045967753 0.0014866907 - 800 1.4084205 5.9778462 7.084085 0.0063728488 7.3585191 62.244 62.244 62.244 0.0036202744 0.005593586 0.0099046859 - 900 1.3958301 5.9891019 7.0854517 0.0028974454 7.2102244 62.244 62.244 62.244 0.0087724642 0.0014508428 -0.001530971 - 1000 1.3937374 5.9794855 7.0741916 0.0087158481 7.4495223 62.244 62.244 62.244 0.014424783 0.0034958881 0.0082268735 - 1100 1.3729162 5.9916252 7.0699773 0.0030451966 7.2011127 62.244 62.244 62.244 0.00084635444 -0.00064448421 0.0089337195 - 1200 1.4427374 5.9713589 7.1045519 0.0042680608 7.2883474 62.244 62.244 62.244 0.0030884628 0.0031576538 0.0065580658 - 1300 1.3971469 5.9728674 7.0702514 0.0022809251 7.168475 62.244 62.244 62.244 0.00060902513 -0.00020572386 0.006439474 - 1400 1.4194118 5.9672631 7.082135 0.012945844 7.6396221 62.244 62.244 62.244 0.0082418827 0.016256336 0.014339314 - 1500 1.3866472 5.9728382 7.0619753 0.0010642438 7.1078049 62.244 62.244 62.244 0.0020316123 0.0020439035 -0.00088278431 - 1600 1.4184955 5.9539591 7.0681113 0.0077605409 7.4023036 62.244 62.244 62.244 0.0033721722 0.0057827512 0.014126699 - 1700 1.3612202 5.9676733 7.0368389 0.0001686213 7.0441002 62.244 62.244 62.244 0.0052525345 0.0007705269 -0.0055171975 - 1800 1.3641041 5.9521837 7.0236144 0.0057884587 7.2728829 62.244 62.244 62.244 0.0038061044 0.0044032908 0.009155981 - 1900 1.3594477 5.9646024 7.0323757 0.0044261926 7.2229809 62.244 62.244 62.244 0.0019417448 0.006871542 0.004465291 - 2000 1.3776971 5.9431816 7.0252888 -0.0012460593 6.9716298 62.244 62.244 62.244 -0.0010913822 0.00098119435 -0.0036279901 - 2100 1.3986245 5.9509735 7.0495181 0.007520633 7.3733792 62.244 62.244 62.244 0.008359824 0.0075919773 0.0066100978 - 2200 1.4033594 5.9548158 7.0570794 0.0016804284 7.1294438 62.244 62.244 62.244 -0.001842641 0.0032876741 0.0035962521 - 2300 1.4048926 5.9444129 7.0478808 0.0062444035 7.3167836 62.244 62.244 62.244 0.004383569 0.0065720464 0.007777595 - 2400 1.4044043 5.9370822 7.0401666 0.0034562836 7.1890046 62.244 62.244 62.244 0.0068959298 0.0041111713 -0.00063825028 - 2500 1.4200762 5.9359254 7.0513193 0.002831965 7.1732722 62.244 62.244 62.244 -0.00030414188 0.0039571831 0.0048428539 - 2600 1.3876469 5.9249124 7.0148347 -0.0017777223 6.9382806 62.244 62.244 62.244 -0.00047616388 -0.0025484917 -0.0023085112 - 2700 1.4099941 5.916763 7.0242378 0.0070716262 7.3287634 62.244 62.244 62.244 0.012628756 0.0053812867 0.0032048357 - 2800 1.4444643 5.9283432 7.0628925 0.0019400019 7.1464348 62.244 62.244 62.244 0.0014895075 0.0046367395 -0.0003062412 - 2900 1.3902832 5.9152516 7.0072446 -0.0021662211 6.9139606 62.244 62.244 62.244 -0.0012374413 -0.00056403267 -0.0046971892 - 3000 1.3711706 5.922146 6.999127 0.011101505 7.4771914 62.244 62.244 62.244 0.011063833 0.012093025 0.010147658 - 3100 1.3569137 5.9171753 6.9829583 -0.0028266781 6.861233 62.244 62.244 62.244 -0.0069507246 0.001008439 -0.0025377485 - 3200 1.4004275 5.905939 7.0058998 0.005439464 7.2401395 62.244 62.244 62.244 0.010352181 0.0057594129 0.00020679783 - 3300 1.3641217 5.9145275 6.985972 -0.0027212797 6.8687855 62.244 62.244 62.244 -0.00065933477 -0.0057712994 -0.0017332048 - 3400 1.3868722 5.9059546 6.9952684 0.0092591181 7.3939939 62.244 62.244 62.244 0.010690872 0.01075251 0.0063339724 - 3500 1.3939168 5.8992292 6.9940762 0.0074340103 7.3142071 62.244 62.244 62.244 0.010137319 0.0044252681 0.0077394433 - 3600 1.3982507 5.921946 7.020197 0.0056794467 7.2647712 62.244 62.244 62.244 0.0023367139 0.0080592038 0.0066424225 - 3700 1.4019908 5.9059954 7.007184 0.0065915246 7.291035 62.244 62.244 62.244 0.0049554227 0.010827006 0.0039921455 - 3800 1.3960735 5.9020788 6.9986197 0.0027763543 7.1181779 62.244 62.244 62.244 -0.0015907599 0.0025861989 0.007333624 - 3900 1.4352827 5.8986213 7.025959 0.0034983366 7.1766079 62.244 62.244 62.244 0.0030418079 0.002773833 0.0046793689 - 4000 1.4121839 5.9079032 7.017098 0.0050464926 7.2344152 62.244 62.244 62.244 0.0045546986 0.0064116168 0.0041731626 - 4100 1.3989613 5.9082377 7.0070468 0.00042898744 7.0255203 62.244 62.244 62.244 0.0025736361 0.0025182434 -0.0038049172 - 4200 1.3998851 5.8998106 6.9993454 0.0042770066 7.1835262 62.244 62.244 62.244 0.0013728904 0.0064694548 0.0049886746 - 4300 1.4076016 5.9044534 7.0100491 0.0066777871 7.2976147 62.244 62.244 62.244 0.0073579039 0.0048129651 0.0078624924 - 4400 1.3948857 5.9101851 7.0057931 0.0013429373 7.063624 62.244 62.244 62.244 -0.00084288143 0.0061856571 -0.0013139638 - 4500 1.4356157 5.8855608 7.01316 -0.0013707942 6.9541295 62.244 62.244 62.244 -0.0018523205 -0.0050195956 0.0027595334 - 4600 1.4148397 5.8957564 7.0070372 0.0072212968 7.318008 62.244 62.244 62.244 0.011376867 0.0074399971 0.0028470263 - 4700 1.3695106 5.8936708 6.969348 0.0017509017 7.0447471 62.244 62.244 62.244 -0.0061975951 0.0044076775 0.0070426225 - 4800 1.4142735 5.8887578 6.9995939 0.0081923232 7.35238 62.244 62.244 62.244 0.013343877 0.0054560473 0.0057770449 - 4900 1.4300042 5.8867398 7.0099315 0.0070875112 7.3151411 62.244 62.244 62.244 0.0080416381 0.0042409901 0.0089799056 - 5000 1.4286039 5.8964609 7.0185527 -0.003158533 6.8825368 62.244 62.244 62.244 0.0024975808 -0.0097503027 -0.0022228771 -Loop time of 3.4608 on 4 procs for 5000 steps with 5600 atoms - -Performance: 624133.913 tau/day, 1444.754 timesteps/s -98.0% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.083226 | 0.13336 | 0.18611 | 13.0 | 3.85 -Bond | 0.045169 | 0.066142 | 0.087486 | 7.8 | 1.91 -Neigh | 0.57772 | 0.57997 | 0.58211 | 0.3 | 16.76 -Comm | 0.19402 | 0.26217 | 0.32776 | 12.2 | 7.58 -Output | 0.0027087 | 0.0035715 | 0.0041978 | 0.9 | 0.10 -Modify | 2.1223 | 2.2156 | 2.2842 | 4.2 | 64.02 -Other | | 0.2 | | | 5.78 - -Nlocal: 1400 ave 1844 max 907 min -Histogram: 1 1 0 0 0 0 0 0 0 2 -Nghost: 642 ave 714 max 581 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Neighs: 1307.25 ave 1883 max 682 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 5229 -Ave neighs/atom = 0.93375 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 762 -Dangerous builds = 0 - -# Replace fix rigid and fix langevin with new ones - -unfix 1 -unfix 3 - -fix 3 tethers langevin 1.4 1.4 1.0 198450 - -# Test different integrators for rods - -fix 1 rods rigid/nve molecule -800 rigid bodies with 4000 atoms -print "rigid/nve" -rigid/nve -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 5000 1.4286039 5.8964609 7.0185527 -0.017900244 6.2477142 62.244 62.244 62.244 -0.017934885 -0.027283526 -0.0084823215 - 5100 1.4251274 5.887521 7.0068821 0.0066290394 7.2923486 62.244 62.244 62.244 0.0033173534 0.0056467845 0.01092298 - 5200 1.4246222 5.8928547 7.0118192 -0.00025763331 7.0007247 62.244 62.244 62.244 -0.001891953 -0.0031121381 0.0042311911 - 5300 1.3905023 5.9024119 6.994577 0.0026824588 7.1100918 62.244 62.244 62.244 0.003106008 0.0040692376 0.00087213068 - 5400 1.4139617 5.8906493 7.0012405 0.003175173 7.137973 62.244 62.244 62.244 0.0034546577 0.003858524 0.0022123373 - 5500 1.4160473 5.8891813 7.0014106 0.0032907848 7.1431217 62.244 62.244 62.244 0.0014909385 0.0067546452 0.0016267707 - 5600 1.4185962 5.8932473 7.0074786 0.013015823 7.5679792 62.244 62.244 62.244 0.011297248 0.011426835 0.016323387 - 5700 1.4115847 5.892193 7.0009171 0.0080660065 7.3482637 62.244 62.244 62.244 0.0096534077 0.004127271 0.010417341 - 5800 1.3920238 5.8874957 6.9808558 0.0087013878 7.3555639 62.244 62.244 62.244 0.0070865796 0.0093328615 0.0096847223 - 5900 1.389416 5.8996657 6.9909775 0.0053218583 7.2201528 62.244 62.244 62.244 0.0050547275 0.0054113274 0.0054995198 - 6000 1.4079053 5.8795437 6.9853779 0.0066005053 7.2696156 62.244 62.244 62.244 0.0087434104 0.0013589366 0.0096991689 -Loop time of 0.793224 on 4 procs for 1000 steps with 5600 atoms - -Performance: 544612.641 tau/day, 1260.677 timesteps/s -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.018101 | 0.036068 | 0.051689 | 7.6 | 4.55 -Bond | 0.0083735 | 0.013206 | 0.017318 | 3.6 | 1.66 -Neigh | 0.12864 | 0.1293 | 0.13002 | 0.1 | 16.30 -Comm | 0.037184 | 0.056407 | 0.077999 | 7.4 | 7.11 -Output | 0.00048971 | 0.00072509 | 0.00083923 | 0.0 | 0.09 -Modify | 0.49526 | 0.51293 | 0.52997 | 2.2 | 64.66 -Other | | 0.04459 | | | 5.62 - -Nlocal: 1400 ave 1844 max 884 min -Histogram: 1 1 0 0 0 0 0 0 0 2 -Nghost: 713.5 ave 818 max 656 min -Histogram: 1 1 1 0 0 0 0 0 0 1 -Neighs: 1315 ave 1956 max 573 min -Histogram: 1 0 1 0 0 0 0 0 0 2 - -Total # of neighbors = 5260 -Ave neighs/atom = 0.939286 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 156 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nvt molecule temp 1.4 1.4 1.0 -800 rigid bodies with 4000 atoms -print "rigid/nvt" -rigid/nvt -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 6000 1.4079053 5.8795437 6.9853779 0.010184208 7.4239406 62.244 62.244 62.244 0.0015995549 0.064769849 -0.035816779 - 6100 1.4031886 5.8721732 6.9743027 0.0039601 7.1448365 62.244 62.244 62.244 0.0019177243 0.0048575488 0.005105027 - 6200 1.4078378 5.8813987 6.9871798 -0.0019043091 6.9051745 62.244 62.244 62.244 -0.0012543967 -0.0035545317 -0.00090399881 - 6300 1.3898748 5.8818577 6.97353 0.0050781011 7.1922083 62.244 62.244 62.244 0.0037642013 0.0035169519 0.0079531499 - 6400 1.3901345 5.8620878 6.953964 -0.0013161864 6.897285 62.244 62.244 62.244 0.0024166375 -0.0023907165 -0.0039744801 - 6500 1.3990792 5.8647534 6.9636551 0.0025190902 7.0721348 62.244 62.244 62.244 0.003080505 -0.00072200043 0.0051987659 - 6600 1.3802747 5.8639204 6.9480523 0.0030906745 7.0811461 62.244 62.244 62.244 0.0041979458 0.0059358092 -0.00086173155 - 6700 1.392968 5.8692368 6.9633385 0.00060394401 6.9893462 62.244 62.244 62.244 0.0037955666 0.00058857296 -0.0025723075 - 6800 1.4139599 5.8777321 6.9883218 0.0064457022 7.2658932 62.244 62.244 62.244 0.0066202313 0.0077537688 0.0049631066 - 6900 1.3913822 5.8914016 6.9842578 0.0012411779 7.0377066 62.244 62.244 62.244 -0.0029791199 0.0027656154 0.0039370381 - 7000 1.4203244 5.8676225 6.9832112 0.0053040447 7.2116194 62.244 62.244 62.244 0.0024159021 0.0053958945 0.0081003375 -Loop time of 0.812983 on 4 procs for 1000 steps with 5600 atoms - -Performance: 531376.713 tau/day, 1230.039 timesteps/s -98.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.020489 | 0.038507 | 0.054352 | 7.9 | 4.74 -Bond | 0.0086164 | 0.013153 | 0.017908 | 3.5 | 1.62 -Neigh | 0.13205 | 0.13275 | 0.13353 | 0.1 | 16.33 -Comm | 0.039251 | 0.05774 | 0.079146 | 7.7 | 7.10 -Output | 0.00057149 | 0.00076026 | 0.00087905 | 0.0 | 0.09 -Modify | 0.51332 | 0.52873 | 0.54512 | 2.1 | 65.04 -Other | | 0.04134 | | | 5.09 - -Nlocal: 1400 ave 1861 max 953 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 732.5 ave 799 max 634 min -Histogram: 1 0 0 0 0 1 0 0 1 1 -Neighs: 1478.5 ave 2087 max 852 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 5914 -Ave neighs/atom = 1.05607 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 154 -Dangerous builds = 0 -unfix 1 - -compute myTemp all temp - -fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 iso 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/npt iso" -rigid/npt iso -fix_modify 1 temp myTemp - -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 7000 1.4203244 5.8676225 6.9832112 -0.040722281 5.2295869 62.244 62.244 62.244 -0.12474488 0.041369653 -0.038791619 - 7100 1.4820526 5.8454198 7.0094927 0.013935005 7.4687465 56.934813 56.934813 56.934813 0.011753675 0.011015866 0.019035475 - 7200 1.5504398 5.8024995 7.0202869 0.023075447 7.5454178 50.323226 50.323226 50.323226 0.02128889 0.024383628 0.023553823 - 7300 1.5422614 5.7803177 6.9916814 0.022398755 7.3670099 45.442117 45.442117 45.442117 0.011815608 0.027421849 0.027958808 - 7400 1.5762224 5.7500188 6.988057 0.044637382 7.5673845 41.732187 41.732187 41.732187 0.045858714 0.035776277 0.052277154 - 7500 1.5734284 5.7222605 6.9581042 0.029862564 7.2743396 38.996336 38.996336 38.996336 0.024440229 0.034455527 0.030691934 - 7600 1.5572312 5.6929606 6.9160823 0.050216724 7.366563 36.898208 36.898208 36.898208 0.059366814 0.056376093 0.034907266 - 7700 1.5225653 5.659289 6.8551824 0.042054552 7.1814902 35.15611 35.15611 35.15611 0.043735305 0.039349247 0.043079104 - 7800 1.5081978 5.629903 6.8145116 0.057013188 7.2106251 33.885255 33.885255 33.885255 0.055017894 0.053733429 0.062288242 - 7900 1.4721367 5.5821237 6.7384082 0.067262555 7.1645957 32.860322 32.860322 32.860322 0.097134972 0.066643481 0.03800921 - 8000 1.4710105 5.5302806 6.6856805 0.054118027 7.0029681 32.020862 32.020862 32.020862 0.039052412 0.059044234 0.064257435 -Loop time of 1.47728 on 4 procs for 1000 steps with 5600 atoms - -Performance: 292430.022 tau/day, 676.921 timesteps/s -98.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.064968 | 0.10073 | 0.1395 | 10.5 | 6.82 -Bond | 0.014031 | 0.019927 | 0.02572 | 3.7 | 1.35 -Neigh | 0.52043 | 0.52145 | 0.52214 | 0.1 | 35.30 -Comm | 0.069327 | 0.11344 | 0.15499 | 11.3 | 7.68 -Output | 0.00045276 | 0.00050163 | 0.00058174 | 0.0 | 0.03 -Modify | 0.65598 | 0.67559 | 0.69898 | 2.4 | 45.73 -Other | | 0.04563 | | | 3.09 - -Nlocal: 1400 ave 1711 max 1074 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 1617 ave 1748 max 1514 min -Histogram: 1 0 0 2 0 0 0 0 0 1 -Neighs: 6221.75 ave 8875 max 3829 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 24887 -Ave neighs/atom = 4.44411 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 340 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 x 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/npt x" -rigid/npt x -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.227 | 7.408 | 7.596 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 8000 1.4710105 5.5302806 6.6856805 0.19181859 7.81029 32.020862 32.020862 32.020862 0.26866704 0.14123342 0.16555531 - 8100 1.47531 5.5300767 6.6888537 0.072844262 7.1138998 31.868578 32.020862 32.020862 0.090224787 0.062332105 0.065975895 - 8200 1.448408 5.51143 6.6490768 0.069870568 7.0519422 31.491082 32.020862 32.020862 0.087940256 0.058037199 0.063634249 - 8300 1.4057002 5.4923673 6.5964694 0.065508742 6.9688194 31.043742 32.020862 32.020862 0.079268242 0.048811269 0.068446714 - 8400 1.3991297 5.4626242 6.5615657 -0.017027709 6.4660067 30.650474 32.020862 32.020862 0.0088006578 -0.001632039 -0.058251747 - 8500 1.4126457 5.4676374 6.5771949 0.012615987 6.6471389 30.279686 32.020862 32.020862 0.010145607 0.017449486 0.010252867 - 8600 1.4250925 5.4367644 6.5560982 0.057260287 6.8682646 29.775194 32.020862 32.020862 0.05660339 0.10551068 0.0096667873 - 8700 1.4259617 5.431439 6.5514555 0.060058224 6.8743509 29.36374 32.020862 32.020862 0.059243843 0.040552126 0.080378702 - 8800 1.4336545 5.3949149 6.5209738 0.052324111 6.7965365 28.763424 32.020862 32.020862 0.02607362 0.067534725 0.063363987 - 8900 1.4228767 5.3718196 6.489413 0.04039784 6.6975045 28.133143 32.020862 32.020862 0.038493401 0.059136317 0.023563801 - 9000 1.3840335 5.3851579 6.4722421 0.055356171 6.7513156 27.534332 32.020862 32.020862 0.067391117 0.061540537 0.03713686 -Loop time of 1.41644 on 4 procs for 1000 steps with 5600 atoms - -Performance: 304989.819 tau/day, 705.995 timesteps/s -98.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.111 | 0.15928 | 0.20768 | 11.1 | 11.25 -Bond | 0.014816 | 0.020169 | 0.024592 | 3.1 | 1.42 -Neigh | 0.40146 | 0.40175 | 0.40221 | 0.0 | 28.36 -Comm | 0.063586 | 0.11635 | 0.16698 | 14.1 | 8.21 -Output | 0.00045538 | 0.00050312 | 0.00063586 | 0.0 | 0.04 -Modify | 0.66405 | 0.67875 | 0.69575 | 1.6 | 47.92 -Other | | 0.03963 | | | 2.80 - -Nlocal: 1400 ave 1641 max 1120 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Nghost: 1593.5 ave 1674 max 1480 min -Histogram: 1 0 0 1 0 0 0 0 0 2 -Neighs: 7766.25 ave 10004 max 5618 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 31065 -Ave neighs/atom = 5.54732 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 168 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nph molecule iso 0.05 0.05 1.0 dilate all -800 rigid bodies with 4000 atoms -print "rigid/nph iso" -rigid/nph iso -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.228 | 7.409 | 7.596 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 9000 1.3840335 5.3851579 6.4722421 0.16503405 7.3042475 27.534332 32.020862 32.020862 0.18505216 0.10781406 0.20223595 - 9100 1.3884253 5.3614209 6.4519546 -0.00091586458 6.4474179 27.373411 31.83372 31.83372 0.022761165 -0.0041100422 -0.021398716 - 9200 1.420492 5.3303864 6.4461068 0.059143817 6.7274082 27.005021 31.405303 31.405303 0.083033013 0.062389471 0.032008967 - 9300 1.4715513 5.2993502 6.4551749 -0.0012173753 6.4496031 26.66115 31.005402 31.005402 3.6757409e-05 -0.035942133 0.03225325 - 9400 1.446323 5.2997487 6.4357579 0.089723486 6.8324557 26.355721 30.650205 30.650205 0.074549411 0.091827859 0.10279319 - 9500 1.4429552 5.2778071 6.4111711 0.074185245 6.7328342 26.184941 30.451597 30.451597 0.081909739 0.072238574 0.068407422 - 9600 1.4570864 5.2601352 6.4045984 0.0580315 6.6544318 26.122769 30.379295 30.379295 0.060115487 0.027228888 0.086750125 - 9700 1.4421488 5.2741205 6.4068511 0.044711738 6.5981759 26.069954 30.317874 30.317874 0.093367845 0.025219144 0.015548226 - 9800 1.4305027 5.2831767 6.4067599 0.064007051 6.6787519 26.009567 30.247648 30.247648 0.1207317 0.021857174 0.049432283 - 9900 1.4457473 5.2513943 6.3869514 0.016264617 6.4551575 25.895064 30.114487 30.114487 0.055652525 0.015908352 -0.022767026 - 10000 1.4739193 5.2108898 6.3685744 0.066079547 6.6416503 25.768894 29.967759 29.967759 0.059174033 0.048716715 0.090347892 -Loop time of 1.47405 on 4 procs for 1000 steps with 5600 atoms - -Performance: 293069.938 tau/day, 678.403 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.14109 | 0.19261 | 0.2429 | 10.7 | 13.07 -Bond | 0.015511 | 0.020164 | 0.023957 | 2.5 | 1.37 -Neigh | 0.43698 | 0.43723 | 0.43759 | 0.0 | 29.66 -Comm | 0.064379 | 0.1184 | 0.17429 | 14.5 | 8.03 -Output | 0.00053048 | 0.00056964 | 0.00067139 | 0.0 | 0.04 -Modify | 0.65413 | 0.66598 | 0.68039 | 1.3 | 45.18 -Other | | 0.0391 | | | 2.65 - -Nlocal: 1400 ave 1629 max 1159 min -Histogram: 1 1 0 0 0 0 0 0 0 2 -Nghost: 1760.25 ave 1871 max 1635 min -Histogram: 1 0 0 1 0 0 0 1 0 1 -Neighs: 9467.75 ave 11967 max 6712 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 37871 -Ave neighs/atom = 6.76268 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 163 -Dangerous builds = 0 -unfix 1 - -fix 1 rods rigid/nph molecule x 0.05 0.05 1.0 y 0.05 0.05 1.0 couple xy dilate all -800 rigid bodies with 4000 atoms -print "rigid/nph xy couple" -rigid/nph xy couple -run 1000 -Per MPI rank memory allocation (min/avg/max) = 7.229 | 7.413 | 7.597 Mbytes -Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz - 10000 1.4739193 5.2108898 6.3685744 0.15675952 7.0163882 25.768894 29.967759 29.967759 0.15485552 -0.045372029 0.36079506 - 10100 1.450711 5.2108741 6.3503298 0.0083383764 6.3849239 25.819477 30.026584 29.967759 0.0025039775 -0.0028716599 0.025382812 - 10200 1.4627819 5.2187046 6.3676414 0.031215755 6.4961258 25.717327 29.907789 29.967759 0.04657158 0.0023172248 0.044758461 - 10300 1.4689915 5.2231223 6.3769364 0.094530779 6.7645053 25.667024 29.84929 29.967759 0.10402187 0.089461211 0.090109255 - 10400 1.465366 5.211321 6.3622875 0.057765151 6.5976168 25.585426 29.754396 29.967759 0.025724468 0.03148259 0.1160884 - 10500 1.4206144 5.2096595 6.325476 0.029618225 6.4439115 25.348314 29.478648 29.967759 0.016757876 -0.021974627 0.094071428 - 10600 1.4490516 5.1686358 6.3067882 0.10186675 6.705618 25.082174 29.169143 29.967759 0.13985672 0.13649813 0.029245401 - 10700 1.42637 5.1516578 6.271995 0.12577606 6.7554051 24.851151 28.900476 29.967759 0.099699897 0.11678127 0.16084703 - 10800 1.4675204 5.1334029 6.2860615 0.054610838 6.494291 24.752517 28.78577 29.967759 0.018006539 0.090588468 0.055237507 - 10900 1.4312627 5.1332052 6.2573854 -0.0020120377 6.2496947 24.782913 28.821119 29.967759 -0.0035770106 0.047436898 -0.049896 - 11000 1.3986074 5.1272068 6.225738 0.045641244 6.3993661 24.72401 28.752618 29.967759 0.052336235 0.073561738 0.011025759 -Loop time of 1.50406 on 4 procs for 1000 steps with 5600 atoms - -Performance: 287222.965 tau/day, 664.868 timesteps/s -98.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.16856 | 0.21287 | 0.26569 | 9.4 | 14.15 -Bond | 0.016815 | 0.020397 | 0.023304 | 1.9 | 1.36 -Neigh | 0.44152 | 0.44161 | 0.44172 | 0.0 | 29.36 -Comm | 0.067729 | 0.1232 | 0.16886 | 13.0 | 8.19 -Output | 0.00045419 | 0.00048572 | 0.0005734 | 0.0 | 0.03 -Modify | 0.6568 | 0.66799 | 0.6841 | 1.3 | 44.41 -Other | | 0.0375 | | | 2.49 - -Nlocal: 1400 ave 1605 max 1229 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Nghost: 1859 ave 1964 max 1718 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Neighs: 10208.2 ave 13091 max 7670 min -Histogram: 1 1 0 0 0 0 1 0 0 1 - -Total # of neighbors = 40833 -Ave neighs/atom = 7.29161 -Ave special neighs/atom = 0.571429 -Neighbor list builds = 160 -Dangerous builds = 0 - -Total wall time: 0:00:10 diff --git a/examples/rigid/log.20Apr18.rigid.atomfile.g++.4 b/examples/rigid/log.27Nov18.rigid.atomfile.g++.1 similarity index 90% rename from examples/rigid/log.20Apr18.rigid.atomfile.g++.4 rename to examples/rigid/log.27Nov18.rigid.atomfile.g++.1 index 70f86f32bb..e3e539eada 100644 --- a/examples/rigid/log.20Apr18.rigid.atomfile.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.atomfile.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -10,7 +10,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 81 atoms @@ -106,7 +106,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.174 | 4.455 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.109 | 4.109 | 4.109 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -160,8 +160,8 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722854e-05 0 5269.5046 14.510657 - 2650 16733.017 1.705148 0 5269.5067 14.596295 + 2600 16738.427 -7.972284e-05 0 5269.5046 14.510657 + 2650 16733.017 1.7051479 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 2800 16738.585 -0.046813448 0 5269.5076 14.511073 @@ -169,7 +169,7 @@ Step Temp E_pair E_mol TotEng Press 2900 16738.465 -0.0026252725 0 5269.514 14.510277 2950 16738.476 -0.0082220764 0 5269.512 14.510223 3000 16738.66 -0.071284779 0 5269.507 14.509758 - 3050 16715.332 7.2419351 0 5269.476 14.870305 + 3050 16715.332 7.2419352 0 5269.476 14.870305 3100 16653.226 26.818761 0 5269.5009 14.496764 3150 16739.351 -0.30690375 0 5269.4886 13.643904 3200 16733.238 1.6025328 0 5269.4737 12.016934 @@ -179,7 +179,7 @@ Step Temp E_pair E_mol TotEng Press 3400 16738.543 -0.042215005 0 5269.4991 12.092809 3450 16738.591 -0.059327511 0 5269.4972 12.092536 3500 16738.759 -0.11761245 0 5269.4918 12.09203 - 3550 16713.405 7.846062 0 5269.4737 12.389816 + 3550 16713.405 7.8460621 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 3700 16738.602 -0.070934368 0 5269.4889 12.025288 @@ -277,8 +277,8 @@ Step Temp E_pair E_mol TotEng Press 8300 16738.471 0 0 5269.5187 12.011719 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 - 8450 16738.473 -0.00039690664 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 + 8450 16738.473 -0.00039690666 0 5269.5189 12.011706 + 8500 16738.481 -0.0034646804 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532811 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -298,38 +298,38 @@ Step Temp E_pair E_mol TotEng Press 9350 16738.48 0 0 5269.5214 12.011744 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 - 9500 16738.481 -0.00037652437 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156159 0 5269.5203 12.011611 - 9600 16738.549 -0.026814369 0 5269.5163 12.011415 + 9500 16738.481 -0.00037652434 0 5269.5216 12.011692 + 9550 16738.493 -0.005315616 0 5269.5203 12.011611 + 9600 16738.549 -0.026814368 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589887 0 5269.4979 12.062708 - 9750 16738.013 0.135501 0 5269.5101 11.407245 - 9800 16738.512 -0.011620329 0 5269.5201 11.394973 - 9850 16738.489 -0.00067270548 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984569 0 5269.5242 11.395084 + 9700 16735.041 1.0589885 0 5269.4979 12.062708 + 9750 16738.013 0.13550123 0 5269.5101 11.407245 + 9800 16738.512 -0.011620328 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270523 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984554 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.191483 on 4 procs for 10000 steps with 81 atoms +Loop time of 0.153749 on 1 procs for 10000 steps with 81 atoms -Performance: 451214.099 tau/day, 52223.854 timesteps/s -96.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 561955.786 tau/day, 65041.179 timesteps/s +98.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0024264 | 0.0036595 | 0.0042815 | 1.2 | 1.91 -Neigh | 0.011347 | 0.012011 | 0.013367 | 0.7 | 6.27 -Comm | 0.081701 | 0.083476 | 0.087947 | 0.9 | 43.59 -Output | 0.0042565 | 0.0045614 | 0.0053556 | 0.7 | 2.38 -Modify | 0.075719 | 0.078165 | 0.080737 | 0.7 | 40.82 -Other | | 0.009611 | | | 5.02 +Pair | 0.0098538 | 0.0098538 | 0.0098538 | 0.0 | 6.41 +Neigh | 0.040308 | 0.040308 | 0.040308 | 0.0 | 26.22 +Comm | 0.013034 | 0.013034 | 0.013034 | 0.0 | 8.48 +Output | 0.0017202 | 0.0017202 | 0.0017202 | 0.0 | 1.12 +Modify | 0.083709 | 0.083709 | 0.083709 | 0.0 | 54.45 +Other | | 0.005123 | | | 3.33 -Nlocal: 20.25 ave 38 max 3 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 27.25 ave 48 max 13 min -Histogram: 1 0 1 1 0 0 0 0 0 1 +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 84 ave 84 max 84 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.atomfile.g++.1 b/examples/rigid/log.27Nov18.rigid.atomfile.g++.4 similarity index 92% rename from examples/rigid/log.20Apr18.rigid.atomfile.g++.1 rename to examples/rigid/log.27Nov18.rigid.atomfile.g++.4 index c66711c41c..1e28766101 100644 --- a/examples/rigid/log.20Apr18.rigid.atomfile.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.atomfile.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -10,7 +10,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 81 atoms @@ -106,7 +106,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.109 | 4.109 | 4.109 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.174 | 4.455 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -160,7 +160,7 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722839e-05 0 5269.5046 14.510657 + 2600 16738.427 -7.9722832e-05 0 5269.5046 14.510657 2650 16733.017 1.705148 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 @@ -182,7 +182,7 @@ Step Temp E_pair E_mol TotEng Press 3550 16713.405 7.846062 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 - 3700 16738.602 -0.070934367 0 5269.4889 12.025288 + 3700 16738.602 -0.070934368 0 5269.4889 12.025288 3750 16737.731 0.20706557 0 5269.4927 12.061948 3800 16738.578 -0.05582043 0 5269.4965 12.035665 3850 16738.471 -0.016307928 0 5269.5024 12.035302 @@ -278,7 +278,7 @@ Step Temp E_pair E_mol TotEng Press 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 8450 16738.473 -0.00039690663 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646802 0 5269.5182 12.011643 + 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532813 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -299,37 +299,37 @@ Step Temp E_pair E_mol TotEng Press 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 9500 16738.481 -0.00037652438 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156162 0 5269.5203 12.011611 + 9550 16738.493 -0.0053156163 0 5269.5203 12.011611 9600 16738.549 -0.026814371 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589893 0 5269.4979 12.062708 - 9750 16738.013 0.13550102 0 5269.5101 11.407246 - 9800 16738.512 -0.011620328 0 5269.5201 11.394974 - 9850 16738.489 -0.00067270521 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984561 0 5269.5242 11.395085 + 9700 16735.041 1.0589894 0 5269.4979 12.062708 + 9750 16738.013 0.13550109 0 5269.5101 11.407246 + 9800 16738.512 -0.011620327 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270507 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984555 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.140447 on 1 procs for 10000 steps with 81 atoms +Loop time of 0.202963 on 4 procs for 10000 steps with 81 atoms -Performance: 615179.112 tau/day, 71201.286 timesteps/s -98.2% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 425693.239 tau/day, 49270.051 timesteps/s +89.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.010351 | 0.010351 | 0.010351 | 0.0 | 7.37 -Neigh | 0.036597 | 0.036597 | 0.036597 | 0.0 | 26.06 -Comm | 0.0092356 | 0.0092356 | 0.0092356 | 0.0 | 6.58 -Output | 0.0023856 | 0.0023856 | 0.0023856 | 0.0 | 1.70 -Modify | 0.07586 | 0.07586 | 0.07586 | 0.0 | 54.01 -Other | | 0.006017 | | | 4.28 +Pair | 0.0025978 | 0.0033882 | 0.0042055 | 1.0 | 1.67 +Neigh | 0.012025 | 0.013416 | 0.01623 | 1.4 | 6.61 +Comm | 0.080375 | 0.087468 | 0.090782 | 1.4 | 43.10 +Output | 0.0031407 | 0.0039954 | 0.0065427 | 2.3 | 1.97 +Modify | 0.086613 | 0.087285 | 0.087619 | 0.1 | 43.01 +Other | | 0.00741 | | | 3.65 -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 84 ave 84 max 84 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Nlocal: 20.25 ave 38 max 3 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 27.25 ave 48 max 13 min +Histogram: 1 0 1 1 0 0 0 0 0 1 Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.atomvar.g++.4 b/examples/rigid/log.27Nov18.rigid.atomvar.g++.1 similarity index 90% rename from examples/rigid/log.20Apr18.rigid.atomvar.g++.4 rename to examples/rigid/log.27Nov18.rigid.atomvar.g++.1 index 76344d0995..58834ebf3d 100644 --- a/examples/rigid/log.20Apr18.rigid.atomvar.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.atomvar.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -10,7 +10,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 81 atoms @@ -106,7 +106,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.955 | 4.049 | 4.33 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.984 | 3.984 | 3.984 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -160,8 +160,8 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722854e-05 0 5269.5046 14.510657 - 2650 16733.017 1.705148 0 5269.5067 14.596295 + 2600 16738.427 -7.972284e-05 0 5269.5046 14.510657 + 2650 16733.017 1.7051479 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 2800 16738.585 -0.046813448 0 5269.5076 14.511073 @@ -169,7 +169,7 @@ Step Temp E_pair E_mol TotEng Press 2900 16738.465 -0.0026252725 0 5269.514 14.510277 2950 16738.476 -0.0082220764 0 5269.512 14.510223 3000 16738.66 -0.071284779 0 5269.507 14.509758 - 3050 16715.332 7.2419351 0 5269.476 14.870305 + 3050 16715.332 7.2419352 0 5269.476 14.870305 3100 16653.226 26.818761 0 5269.5009 14.496764 3150 16739.351 -0.30690375 0 5269.4886 13.643904 3200 16733.238 1.6025328 0 5269.4737 12.016934 @@ -179,7 +179,7 @@ Step Temp E_pair E_mol TotEng Press 3400 16738.543 -0.042215005 0 5269.4991 12.092809 3450 16738.591 -0.059327511 0 5269.4972 12.092536 3500 16738.759 -0.11761245 0 5269.4918 12.09203 - 3550 16713.405 7.846062 0 5269.4737 12.389816 + 3550 16713.405 7.8460621 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 3700 16738.602 -0.070934368 0 5269.4889 12.025288 @@ -277,8 +277,8 @@ Step Temp E_pair E_mol TotEng Press 8300 16738.471 0 0 5269.5187 12.011719 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 - 8450 16738.473 -0.00039690664 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 + 8450 16738.473 -0.00039690666 0 5269.5189 12.011706 + 8500 16738.481 -0.0034646804 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532811 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -298,38 +298,38 @@ Step Temp E_pair E_mol TotEng Press 9350 16738.48 0 0 5269.5214 12.011744 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 - 9500 16738.481 -0.00037652437 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156159 0 5269.5203 12.011611 - 9600 16738.549 -0.026814369 0 5269.5163 12.011415 + 9500 16738.481 -0.00037652434 0 5269.5216 12.011692 + 9550 16738.493 -0.005315616 0 5269.5203 12.011611 + 9600 16738.549 -0.026814368 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589887 0 5269.4979 12.062708 - 9750 16738.013 0.135501 0 5269.5101 11.407245 - 9800 16738.512 -0.011620329 0 5269.5201 11.394973 - 9850 16738.489 -0.00067270548 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984569 0 5269.5242 11.395084 + 9700 16735.041 1.0589885 0 5269.4979 12.062708 + 9750 16738.013 0.13550123 0 5269.5101 11.407245 + 9800 16738.512 -0.011620328 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270523 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984554 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.202733 on 4 procs for 10000 steps with 81 atoms +Loop time of 0.15622 on 1 procs for 10000 steps with 81 atoms -Performance: 426175.966 tau/day, 49325.922 timesteps/s -96.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 553065.489 tau/day, 64012.209 timesteps/s +95.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0025222 | 0.0037088 | 0.0044038 | 1.2 | 1.83 -Neigh | 0.01135 | 0.012003 | 0.013654 | 0.9 | 5.92 -Comm | 0.088217 | 0.089948 | 0.091659 | 0.4 | 44.37 -Output | 0.0044014 | 0.0047023 | 0.0055132 | 0.7 | 2.32 -Modify | 0.080218 | 0.082638 | 0.084872 | 0.6 | 40.76 -Other | | 0.009733 | | | 4.80 +Pair | 0.0098181 | 0.0098181 | 0.0098181 | 0.0 | 6.28 +Neigh | 0.040912 | 0.040912 | 0.040912 | 0.0 | 26.19 +Comm | 0.013111 | 0.013111 | 0.013111 | 0.0 | 8.39 +Output | 0.0016305 | 0.0016305 | 0.0016305 | 0.0 | 1.04 +Modify | 0.085361 | 0.085361 | 0.085361 | 0.0 | 54.64 +Other | | 0.005387 | | | 3.45 -Nlocal: 20.25 ave 38 max 3 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 27.25 ave 48 max 13 min -Histogram: 1 0 1 1 0 0 0 0 0 1 +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 84 ave 84 max 84 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.atomvar.g++.1 b/examples/rigid/log.27Nov18.rigid.atomvar.g++.4 similarity index 92% rename from examples/rigid/log.20Apr18.rigid.atomvar.g++.1 rename to examples/rigid/log.27Nov18.rigid.atomvar.g++.4 index 99098d04d2..42b8a52768 100644 --- a/examples/rigid/log.20Apr18.rigid.atomvar.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.atomvar.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -10,7 +10,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 81 atoms @@ -106,7 +106,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.984 | 3.984 | 3.984 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.955 | 4.049 | 4.33 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -160,7 +160,7 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722839e-05 0 5269.5046 14.510657 + 2600 16738.427 -7.9722832e-05 0 5269.5046 14.510657 2650 16733.017 1.705148 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 @@ -182,7 +182,7 @@ Step Temp E_pair E_mol TotEng Press 3550 16713.405 7.846062 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 - 3700 16738.602 -0.070934367 0 5269.4889 12.025288 + 3700 16738.602 -0.070934368 0 5269.4889 12.025288 3750 16737.731 0.20706557 0 5269.4927 12.061948 3800 16738.578 -0.05582043 0 5269.4965 12.035665 3850 16738.471 -0.016307928 0 5269.5024 12.035302 @@ -278,7 +278,7 @@ Step Temp E_pair E_mol TotEng Press 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 8450 16738.473 -0.00039690663 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646802 0 5269.5182 12.011643 + 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532813 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -299,37 +299,37 @@ Step Temp E_pair E_mol TotEng Press 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 9500 16738.481 -0.00037652438 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156162 0 5269.5203 12.011611 + 9550 16738.493 -0.0053156163 0 5269.5203 12.011611 9600 16738.549 -0.026814371 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589893 0 5269.4979 12.062708 - 9750 16738.013 0.13550102 0 5269.5101 11.407246 - 9800 16738.512 -0.011620328 0 5269.5201 11.394974 - 9850 16738.489 -0.00067270521 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984561 0 5269.5242 11.395085 + 9700 16735.041 1.0589894 0 5269.4979 12.062708 + 9750 16738.013 0.13550109 0 5269.5101 11.407246 + 9800 16738.512 -0.011620327 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270507 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984555 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.139024 on 1 procs for 10000 steps with 81 atoms +Loop time of 0.199799 on 4 procs for 10000 steps with 81 atoms -Performance: 621477.474 tau/day, 71930.263 timesteps/s -99.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 432434.078 tau/day, 50050.241 timesteps/s +91.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.010292 | 0.010292 | 0.010292 | 0.0 | 7.40 -Neigh | 0.036968 | 0.036968 | 0.036968 | 0.0 | 26.59 -Comm | 0.0091348 | 0.0091348 | 0.0091348 | 0.0 | 6.57 -Output | 0.0024047 | 0.0024047 | 0.0024047 | 0.0 | 1.73 -Modify | 0.074017 | 0.074017 | 0.074017 | 0.0 | 53.24 -Other | | 0.006207 | | | 4.46 +Pair | 0.002665 | 0.0034567 | 0.0040557 | 0.9 | 1.73 +Neigh | 0.012185 | 0.013168 | 0.014083 | 0.8 | 6.59 +Comm | 0.079331 | 0.082804 | 0.084927 | 0.7 | 41.44 +Output | 0.0031595 | 0.0039212 | 0.0061827 | 2.1 | 1.96 +Modify | 0.088465 | 0.090202 | 0.091938 | 0.4 | 45.15 +Other | | 0.006247 | | | 3.13 -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 84 ave 84 max 84 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Nlocal: 20.25 ave 38 max 3 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 27.25 ave 48 max 13 min +Histogram: 1 0 1 1 0 0 0 0 0 1 Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.early.g++.4 b/examples/rigid/log.27Nov18.rigid.early.g++.1 similarity index 90% rename from examples/rigid/log.20Apr18.rigid.early.g++.4 rename to examples/rigid/log.27Nov18.rigid.early.g++.1 index c9513a211e..3c8022423f 100644 --- a/examples/rigid/log.20Apr18.rigid.early.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.early.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -9,7 +9,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 81 atoms @@ -105,7 +105,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.95 | 4.044 | 4.326 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.979 | 3.979 | 3.979 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -159,8 +159,8 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722854e-05 0 5269.5046 14.510657 - 2650 16733.017 1.705148 0 5269.5067 14.596295 + 2600 16738.427 -7.972284e-05 0 5269.5046 14.510657 + 2650 16733.017 1.7051479 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 2800 16738.585 -0.046813448 0 5269.5076 14.511073 @@ -168,7 +168,7 @@ Step Temp E_pair E_mol TotEng Press 2900 16738.465 -0.0026252725 0 5269.514 14.510277 2950 16738.476 -0.0082220764 0 5269.512 14.510223 3000 16738.66 -0.071284779 0 5269.507 14.509758 - 3050 16715.332 7.2419351 0 5269.476 14.870305 + 3050 16715.332 7.2419352 0 5269.476 14.870305 3100 16653.226 26.818761 0 5269.5009 14.496764 3150 16739.351 -0.30690375 0 5269.4886 13.643904 3200 16733.238 1.6025328 0 5269.4737 12.016934 @@ -178,7 +178,7 @@ Step Temp E_pair E_mol TotEng Press 3400 16738.543 -0.042215005 0 5269.4991 12.092809 3450 16738.591 -0.059327511 0 5269.4972 12.092536 3500 16738.759 -0.11761245 0 5269.4918 12.09203 - 3550 16713.405 7.846062 0 5269.4737 12.389816 + 3550 16713.405 7.8460621 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 3700 16738.602 -0.070934368 0 5269.4889 12.025288 @@ -276,8 +276,8 @@ Step Temp E_pair E_mol TotEng Press 8300 16738.471 0 0 5269.5187 12.011719 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 - 8450 16738.473 -0.00039690664 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 + 8450 16738.473 -0.00039690666 0 5269.5189 12.011706 + 8500 16738.481 -0.0034646804 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532811 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -297,38 +297,38 @@ Step Temp E_pair E_mol TotEng Press 9350 16738.48 0 0 5269.5214 12.011744 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 - 9500 16738.481 -0.00037652437 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156159 0 5269.5203 12.011611 - 9600 16738.549 -0.026814369 0 5269.5163 12.011415 + 9500 16738.481 -0.00037652434 0 5269.5216 12.011692 + 9550 16738.493 -0.005315616 0 5269.5203 12.011611 + 9600 16738.549 -0.026814368 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589887 0 5269.4979 12.062708 - 9750 16738.013 0.135501 0 5269.5101 11.407245 - 9800 16738.512 -0.011620329 0 5269.5201 11.394973 - 9850 16738.489 -0.00067270548 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984569 0 5269.5242 11.395084 + 9700 16735.041 1.0589885 0 5269.4979 12.062708 + 9750 16738.013 0.13550123 0 5269.5101 11.407245 + 9800 16738.512 -0.011620328 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270523 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984554 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.170899 on 4 procs for 10000 steps with 81 atoms +Loop time of 0.152593 on 1 procs for 10000 steps with 81 atoms -Performance: 505560.431 tau/day, 58513.939 timesteps/s -96.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 566210.692 tau/day, 65533.645 timesteps/s +96.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0024047 | 0.0038016 | 0.0044513 | 1.3 | 2.22 -Neigh | 0.011313 | 0.012043 | 0.013355 | 0.7 | 7.05 -Comm | 0.066761 | 0.069035 | 0.071617 | 0.7 | 40.40 -Output | 0.0038884 | 0.0041398 | 0.0048923 | 0.7 | 2.42 -Modify | 0.071143 | 0.072567 | 0.074478 | 0.4 | 42.46 -Other | | 0.009313 | | | 5.45 +Pair | 0.0098324 | 0.0098324 | 0.0098324 | 0.0 | 6.44 +Neigh | 0.040376 | 0.040376 | 0.040376 | 0.0 | 26.46 +Comm | 0.012246 | 0.012246 | 0.012246 | 0.0 | 8.03 +Output | 0.0016036 | 0.0016036 | 0.0016036 | 0.0 | 1.05 +Modify | 0.083605 | 0.083605 | 0.083605 | 0.0 | 54.79 +Other | | 0.00493 | | | 3.23 -Nlocal: 20.25 ave 38 max 3 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 27.25 ave 48 max 13 min -Histogram: 1 0 1 1 0 0 0 0 0 1 +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 84 ave 84 max 84 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.early.g++.1 b/examples/rigid/log.27Nov18.rigid.early.g++.4 similarity index 92% rename from examples/rigid/log.20Apr18.rigid.early.g++.1 rename to examples/rigid/log.27Nov18.rigid.early.g++.4 index 5402647b98..91f091b799 100644 --- a/examples/rigid/log.20Apr18.rigid.early.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.early.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -9,7 +9,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 81 atoms @@ -105,7 +105,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.979 | 3.979 | 3.979 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.95 | 4.044 | 4.326 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -159,7 +159,7 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722839e-05 0 5269.5046 14.510657 + 2600 16738.427 -7.9722832e-05 0 5269.5046 14.510657 2650 16733.017 1.705148 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 @@ -181,7 +181,7 @@ Step Temp E_pair E_mol TotEng Press 3550 16713.405 7.846062 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 - 3700 16738.602 -0.070934367 0 5269.4889 12.025288 + 3700 16738.602 -0.070934368 0 5269.4889 12.025288 3750 16737.731 0.20706557 0 5269.4927 12.061948 3800 16738.578 -0.05582043 0 5269.4965 12.035665 3850 16738.471 -0.016307928 0 5269.5024 12.035302 @@ -277,7 +277,7 @@ Step Temp E_pair E_mol TotEng Press 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 8450 16738.473 -0.00039690663 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646802 0 5269.5182 12.011643 + 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532813 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -298,37 +298,37 @@ Step Temp E_pair E_mol TotEng Press 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 9500 16738.481 -0.00037652438 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156162 0 5269.5203 12.011611 + 9550 16738.493 -0.0053156163 0 5269.5203 12.011611 9600 16738.549 -0.026814371 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589893 0 5269.4979 12.062708 - 9750 16738.013 0.13550102 0 5269.5101 11.407246 - 9800 16738.512 -0.011620328 0 5269.5201 11.394974 - 9850 16738.489 -0.00067270521 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984561 0 5269.5242 11.395085 + 9700 16735.041 1.0589894 0 5269.4979 12.062708 + 9750 16738.013 0.13550109 0 5269.5101 11.407246 + 9800 16738.512 -0.011620327 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270507 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984555 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.142284 on 1 procs for 10000 steps with 81 atoms +Loop time of 0.198859 on 4 procs for 10000 steps with 81 atoms -Performance: 607236.588 tau/day, 70282.013 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 434479.274 tau/day, 50286.953 timesteps/s +91.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.010693 | 0.010693 | 0.010693 | 0.0 | 7.52 -Neigh | 0.037908 | 0.037908 | 0.037908 | 0.0 | 26.64 -Comm | 0.0087049 | 0.0087049 | 0.0087049 | 0.0 | 6.12 -Output | 0.0025849 | 0.0025849 | 0.0025849 | 0.0 | 1.82 -Modify | 0.076329 | 0.076329 | 0.076329 | 0.0 | 53.65 -Other | | 0.006064 | | | 4.26 +Pair | 0.002526 | 0.0034331 | 0.0041001 | 1.0 | 1.73 +Neigh | 0.012097 | 0.013092 | 0.013992 | 0.8 | 6.58 +Comm | 0.075266 | 0.07972 | 0.084679 | 1.2 | 40.09 +Output | 0.0030892 | 0.0043746 | 0.0081537 | 3.3 | 2.20 +Modify | 0.088037 | 0.091924 | 0.095021 | 0.9 | 46.23 +Other | | 0.006316 | | | 3.18 -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 84 ave 84 max 84 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Nlocal: 20.25 ave 38 max 3 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 27.25 ave 48 max 13 min +Histogram: 1 0 1 1 0 0 0 0 0 1 Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.g++.4 b/examples/rigid/log.27Nov18.rigid.g++.1 similarity index 90% rename from examples/rigid/log.20Apr18.rigid.g++.4 rename to examples/rigid/log.27Nov18.rigid.g++.1 index ff72c213ed..9dff202069 100644 --- a/examples/rigid/log.20Apr18.rigid.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -9,7 +9,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 81 atoms @@ -103,7 +103,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.95 | 4.044 | 4.326 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.979 | 3.979 | 3.979 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -157,8 +157,8 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722854e-05 0 5269.5046 14.510657 - 2650 16733.017 1.705148 0 5269.5067 14.596295 + 2600 16738.427 -7.972284e-05 0 5269.5046 14.510657 + 2650 16733.017 1.7051479 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 2800 16738.585 -0.046813448 0 5269.5076 14.511073 @@ -166,7 +166,7 @@ Step Temp E_pair E_mol TotEng Press 2900 16738.465 -0.0026252725 0 5269.514 14.510277 2950 16738.476 -0.0082220764 0 5269.512 14.510223 3000 16738.66 -0.071284779 0 5269.507 14.509758 - 3050 16715.332 7.2419351 0 5269.476 14.870305 + 3050 16715.332 7.2419352 0 5269.476 14.870305 3100 16653.226 26.818761 0 5269.5009 14.496764 3150 16739.351 -0.30690375 0 5269.4886 13.643904 3200 16733.238 1.6025328 0 5269.4737 12.016934 @@ -176,7 +176,7 @@ Step Temp E_pair E_mol TotEng Press 3400 16738.543 -0.042215005 0 5269.4991 12.092809 3450 16738.591 -0.059327511 0 5269.4972 12.092536 3500 16738.759 -0.11761245 0 5269.4918 12.09203 - 3550 16713.405 7.846062 0 5269.4737 12.389816 + 3550 16713.405 7.8460621 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 3700 16738.602 -0.070934368 0 5269.4889 12.025288 @@ -274,8 +274,8 @@ Step Temp E_pair E_mol TotEng Press 8300 16738.471 0 0 5269.5187 12.011719 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 - 8450 16738.473 -0.00039690664 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 + 8450 16738.473 -0.00039690666 0 5269.5189 12.011706 + 8500 16738.481 -0.0034646804 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532811 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -295,38 +295,38 @@ Step Temp E_pair E_mol TotEng Press 9350 16738.48 0 0 5269.5214 12.011744 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 - 9500 16738.481 -0.00037652437 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156159 0 5269.5203 12.011611 - 9600 16738.549 -0.026814369 0 5269.5163 12.011415 + 9500 16738.481 -0.00037652434 0 5269.5216 12.011692 + 9550 16738.493 -0.005315616 0 5269.5203 12.011611 + 9600 16738.549 -0.026814368 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589887 0 5269.4979 12.062708 - 9750 16738.013 0.135501 0 5269.5101 11.407245 - 9800 16738.512 -0.011620329 0 5269.5201 11.394973 - 9850 16738.489 -0.00067270548 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984569 0 5269.5242 11.395084 + 9700 16735.041 1.0589885 0 5269.4979 12.062708 + 9750 16738.013 0.13550123 0 5269.5101 11.407245 + 9800 16738.512 -0.011620328 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270523 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984554 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.194532 on 4 procs for 10000 steps with 81 atoms +Loop time of 0.152143 on 1 procs for 10000 steps with 81 atoms -Performance: 444142.918 tau/day, 51405.430 timesteps/s -96.3% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 567885.005 tau/day, 65727.431 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0025368 | 0.003831 | 0.0045376 | 1.2 | 1.97 -Neigh | 0.011299 | 0.012014 | 0.013005 | 0.6 | 6.18 -Comm | 0.081939 | 0.084112 | 0.087817 | 0.8 | 43.24 -Output | 0.0044608 | 0.0047221 | 0.0053811 | 0.6 | 2.43 -Modify | 0.078212 | 0.080219 | 0.082467 | 0.7 | 41.24 -Other | | 0.009634 | | | 4.95 +Pair | 0.0097773 | 0.0097773 | 0.0097773 | 0.0 | 6.43 +Neigh | 0.040602 | 0.040602 | 0.040602 | 0.0 | 26.69 +Comm | 0.012049 | 0.012049 | 0.012049 | 0.0 | 7.92 +Output | 0.0016172 | 0.0016172 | 0.0016172 | 0.0 | 1.06 +Modify | 0.083104 | 0.083104 | 0.083104 | 0.0 | 54.62 +Other | | 0.004994 | | | 3.28 -Nlocal: 20.25 ave 38 max 3 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 27.25 ave 48 max 13 min -Histogram: 1 0 1 1 0 0 0 0 0 1 +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 84 ave 84 max 84 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.g++.1 b/examples/rigid/log.27Nov18.rigid.g++.4 similarity index 92% rename from examples/rigid/log.20Apr18.rigid.g++.1 rename to examples/rigid/log.27Nov18.rigid.g++.4 index ca76376e32..36e602f1f1 100644 --- a/examples/rigid/log.20Apr18.rigid.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -9,7 +9,7 @@ pair_style lj/cut 2.5 read_data data.rigid orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 81 atoms @@ -103,7 +103,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.979 | 3.979 | 3.979 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.95 | 4.044 | 4.326 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -157,7 +157,7 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722839e-05 0 5269.5046 14.510657 + 2600 16738.427 -7.9722832e-05 0 5269.5046 14.510657 2650 16733.017 1.705148 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 @@ -179,7 +179,7 @@ Step Temp E_pair E_mol TotEng Press 3550 16713.405 7.846062 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 - 3700 16738.602 -0.070934367 0 5269.4889 12.025288 + 3700 16738.602 -0.070934368 0 5269.4889 12.025288 3750 16737.731 0.20706557 0 5269.4927 12.061948 3800 16738.578 -0.05582043 0 5269.4965 12.035665 3850 16738.471 -0.016307928 0 5269.5024 12.035302 @@ -275,7 +275,7 @@ Step Temp E_pair E_mol TotEng Press 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 8450 16738.473 -0.00039690663 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646802 0 5269.5182 12.011643 + 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532813 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -296,37 +296,37 @@ Step Temp E_pair E_mol TotEng Press 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 9500 16738.481 -0.00037652438 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156162 0 5269.5203 12.011611 + 9550 16738.493 -0.0053156163 0 5269.5203 12.011611 9600 16738.549 -0.026814371 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589893 0 5269.4979 12.062708 - 9750 16738.013 0.13550102 0 5269.5101 11.407246 - 9800 16738.512 -0.011620328 0 5269.5201 11.394974 - 9850 16738.489 -0.00067270521 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984561 0 5269.5242 11.395085 + 9700 16735.041 1.0589894 0 5269.4979 12.062708 + 9750 16738.013 0.13550109 0 5269.5101 11.407246 + 9800 16738.512 -0.011620327 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270507 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984555 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.155936 on 1 procs for 10000 steps with 81 atoms +Loop time of 0.201762 on 4 procs for 10000 steps with 81 atoms -Performance: 554075.151 tau/day, 64129.068 timesteps/s -98.3% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 428226.262 tau/day, 49563.225 timesteps/s +89.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.013007 | 0.013007 | 0.013007 | 0.0 | 8.34 -Neigh | 0.041885 | 0.041885 | 0.041885 | 0.0 | 26.86 -Comm | 0.0094752 | 0.0094752 | 0.0094752 | 0.0 | 6.08 -Output | 0.002636 | 0.002636 | 0.002636 | 0.0 | 1.69 -Modify | 0.082249 | 0.082249 | 0.082249 | 0.0 | 52.75 -Other | | 0.006683 | | | 4.29 +Pair | 0.0025356 | 0.0033935 | 0.0042305 | 1.0 | 1.68 +Neigh | 0.012009 | 0.012959 | 0.015092 | 1.1 | 6.42 +Comm | 0.07666 | 0.086213 | 0.092506 | 2.0 | 42.73 +Output | 0.0032623 | 0.0052034 | 0.011 | 4.6 | 2.58 +Modify | 0.084815 | 0.087869 | 0.089999 | 0.6 | 43.55 +Other | | 0.006125 | | | 3.04 -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 84 ave 84 max 84 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Nlocal: 20.25 ave 38 max 3 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 27.25 ave 48 max 13 min +Histogram: 1 0 1 1 0 0 0 0 0 1 Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.nve.early.g++.1 b/examples/rigid/log.27Nov18.rigid.nve.early.g++.1 similarity index 71% rename from examples/rigid/log.20Apr18.rigid.nve.early.g++.1 rename to examples/rigid/log.27Nov18.rigid.nve.early.g++.1 index 7e92b4e6ef..1e426d397e 100644 --- a/examples/rigid/log.20Apr18.rigid.nve.early.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.nve.early.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -202,126 +202,126 @@ Step Temp E_pair E_mol TotEng Press 4600 16738.425 0 0 5269.5042 12.383376 4650 16738.404 -0.0014438316 0 5269.4961 12.383299 4700 16738.444 -0.024020551 0 5269.4862 12.382975 - 4750 16738.49 -0.048521421 0 5269.4761 12.385777 - 4800 16735.057 1.0347219 0 5269.4786 12.43543 - 4850 16735.441 0.92650928 0 5269.4913 12.418653 - 4900 16723.839 4.5908971 0 5269.5033 13.410103 - 4950 16738.531 -0.021537669 0 5269.5159 13.089982 - 5000 16738.45 -0.0042589693 0 5269.5077 13.090062 - 5050 16738.409 -0.00024692474 0 5269.4987 13.090038 + 4750 16738.49 -0.04852143 0 5269.4761 12.385777 + 4800 16735.057 1.0347216 0 5269.4786 12.43543 + 4850 16735.441 0.92650925 0 5269.4913 12.418653 + 4900 16723.839 4.5908974 0 5269.5033 13.410103 + 4950 16738.531 -0.02153767 0 5269.5159 13.089982 + 5000 16738.45 -0.0042589697 0 5269.5077 13.090062 + 5050 16738.409 -0.00024692476 0 5269.4987 13.090038 5100 16738.404 0 0 5269.4976 13.090032 5150 16738.421 0 0 5269.5029 13.090073 5200 16738.44 0 0 5269.5087 13.090119 - 5250 16738.448 -0.0012793921 0 5269.5102 13.090114 - 5300 16738.456 -0.0064376397 0 5269.5075 13.090026 - 5350 16738.479 -0.020383842 0 5269.5007 13.089898 - 5400 16735.845 0.79889481 0 5269.4909 13.136244 - 5450 16735.558 0.87619898 0 5269.4778 12.324482 - 5500 16711.494 8.47243 0 5269.4984 12.65658 - 5550 16454.525 89.074845 0 5269.2031 16.996503 - 5600 16713.084 7.9801091 0 5269.5065 13.774971 - 5650 16738.676 -0.079987812 0 5269.5033 13.168292 - 5700 16446.281 91.866085 0 5269.399 23.764658 - 5750 16738.549 -0.039869082 0 5269.5034 13.378117 - 5800 16738.487 -0.014994464 0 5269.5086 13.378394 - 5850 16738.466 -0.0051267378 0 5269.512 13.378555 - 5900 16738.462 -0.0043689966 0 5269.5113 13.378568 - 5950 16738.528 -0.032727396 0 5269.5039 13.378192 - 6000 16702.774 10.969422 0 5269.2502 13.788847 - 6050 16682.271 17.483217 0 5269.3092 13.353098 - 6100 16738.508 -0.028838289 0 5269.5016 12.521077 - 6150 16738.425 -0.0067595568 0 5269.4974 12.521216 - 6200 16738.401 -0.0011499904 0 5269.4955 12.521247 - 6250 16738.455 0 0 5269.5136 12.521403 - 6300 16738.523 0 0 5269.5352 12.521573 - 6350 16738.503 0 0 5269.5287 12.521525 - 6400 16738.427 0 0 5269.5047 12.521337 - 6450 16738.399 0 0 5269.496 12.521268 - 6500 16738.425 0 0 5269.5042 12.521331 - 6550 16738.441 0 0 5269.5093 12.521372 - 6600 16738.42 0 0 5269.5025 12.521319 - 6650 16738.398 0 0 5269.4957 12.521266 - 6700 16738.435 0 0 5269.5074 12.521355 - 6750 16738.505 0 0 5269.5293 12.521527 - 6800 16738.508 0 0 5269.5303 12.521536 - 6850 16738.446 0 0 5269.5108 12.521384 - 6900 16738.414 0 0 5269.5009 12.521306 - 6950 16738.432 0 0 5269.5063 12.521348 - 7000 16738.444 0 0 5269.5102 12.521378 - 7050 16738.421 0 0 5269.5029 12.521322 - 7100 16738.393 0 0 5269.4941 12.521253 - 7150 16738.419 0 0 5269.5022 12.521315 - 7200 16738.489 0 0 5269.5244 12.521489 - 7250 16738.505 0 0 5269.5293 12.521528 - 7300 16738.443 0 0 5269.5098 12.521376 - 7350 16738.404 0 0 5269.4976 12.521281 - 7400 16738.43 0 0 5269.5058 12.521343 - 7450 16738.461 0 0 5269.5156 12.521421 - 7500 16738.447 0 0 5269.5109 12.521385 - 7550 16738.407 0 0 5269.4986 12.521288 - 7600 16738.412 0 0 5269.5002 12.5213 - 7650 16738.478 0 0 5269.5208 12.52146 - 7700 16738.51 0 0 5269.5309 12.521541 - 7750 16738.454 0 0 5269.5135 12.521405 - 7800 16738.398 0 0 5269.4958 12.521267 - 7850 16738.407 -0.0002118068 0 5269.4982 12.521283 - 7900 16738.441 -0.00021679441 0 5269.509 12.521366 - 7950 16738.446 -0.00023847865 0 5269.5107 12.52138 - 8000 16738.423 0 0 5269.5035 12.521326 - 8050 16738.423 0 0 5269.5034 12.521325 - 8100 16738.478 -0.00069624411 0 5269.52 12.521447 - 8150 16738.523 -0.0040058094 0 5269.531 12.521494 - 8200 16738.486 -0.0092298399 0 5269.5142 12.521327 - 8250 16738.458 -0.023189572 0 5269.4914 12.521008 - 8300 16738.513 -0.045847775 0 5269.4861 12.520773 - 8350 16723.734 4.5722877 0 5269.4516 12.849562 - 8400 16738.466 -0.020202622 0 5269.497 12.835807 - 8450 16738.437 -0.012822209 0 5269.4952 12.829975 - 8500 16738.408 -0.001683355 0 5269.4972 12.8301 - 8550 16738.464 -0.00097382251 0 5269.5155 12.830254 - 8600 16738.669 -0.050581166 0 5269.5304 12.829973 - 8650 15918.256 250.07455 0 5261.3774 24.539208 - 8700 16738.446 0.00084613367 0 5269.5116 10.591358 - 8750 16738.472 -0.010145611 0 5269.5089 10.590277 - 8800 16738.468 0 0 5269.5176 10.590497 - 8850 16738.508 0 0 5269.5303 10.590596 - 8900 16738.509 0 0 5269.5306 10.590599 - 8950 16738.496 0 0 5269.5266 10.590568 - 9000 16738.477 0 0 5269.5204 10.59052 - 9050 16738.455 0 0 5269.5135 10.590465 - 9100 16738.477 0 0 5269.5205 10.590519 - 9150 16738.512 0 0 5269.5315 10.590606 - 9200 16738.502 0 0 5269.5285 10.590583 - 9250 16738.493 0 0 5269.5254 10.590559 - 9300 16738.482 0 0 5269.522 10.590532 - 9350 16738.46 0 0 5269.5151 10.590478 - 9400 16738.48 0 0 5269.5216 10.590528 - 9450 16738.509 0 0 5269.5306 10.590599 - 9500 16738.49 0 0 5269.5247 10.590554 - 9550 16738.484 0 0 5269.5226 10.590536 - 9600 16738.483 0 0 5269.5223 10.590534 - 9650 16738.464 0 0 5269.5165 10.590489 - 9700 16738.484 0 0 5269.5228 10.590537 - 9750 16738.507 0 0 5269.53 10.590595 - 9800 16738.482 0 0 5269.522 10.590532 - 9850 16738.478 0 0 5269.5207 10.590521 - 9900 16738.487 -0.00030979882 0 5269.5233 10.590538 - 9950 16738.476 -0.00095967357 0 5269.5193 10.590496 - 10000 16738.494 -0.00062714625 0 5269.5253 10.590548 -Loop time of 0.166298 on 1 procs for 10000 steps with 81 atoms + 5250 16738.448 -0.001279392 0 5269.5102 13.090114 + 5300 16738.456 -0.0064376391 0 5269.5075 13.090026 + 5350 16738.479 -0.020383841 0 5269.5007 13.089897 + 5400 16735.845 0.7988947 0 5269.4909 13.136244 + 5450 16735.558 0.87620022 0 5269.4778 12.324482 + 5500 16711.494 8.4724178 0 5269.4984 12.656579 + 5550 16454.525 89.074815 0 5269.2031 16.996503 + 5600 16713.084 7.9801418 0 5269.5065 13.774979 + 5650 16738.676 -0.079987748 0 5269.5033 13.168297 + 5700 16446.281 91.866085 0 5269.399 23.764663 + 5750 16738.549 -0.039869084 0 5269.5034 13.378122 + 5800 16738.487 -0.014994478 0 5269.5086 13.378399 + 5850 16738.466 -0.0051267616 0 5269.512 13.37856 + 5900 16738.462 -0.0043690142 0 5269.5113 13.378573 + 5950 16738.528 -0.032727415 0 5269.5039 13.378197 + 6000 16702.774 10.969438 0 5269.2502 13.788852 + 6050 16682.271 17.483137 0 5269.3092 13.353101 + 6100 16738.508 -0.028838222 0 5269.5016 12.521084 + 6150 16738.425 -0.0067595536 0 5269.4974 12.521223 + 6200 16738.401 -0.0011499893 0 5269.4955 12.521254 + 6250 16738.455 0 0 5269.5135 12.52141 + 6300 16738.523 0 0 5269.5352 12.52158 + 6350 16738.503 0 0 5269.5287 12.521531 + 6400 16738.427 0 0 5269.5047 12.521344 + 6450 16738.399 0 0 5269.496 12.521274 + 6500 16738.425 0 0 5269.5042 12.521337 + 6550 16738.441 0 0 5269.5093 12.521378 + 6600 16738.42 0 0 5269.5025 12.521326 + 6650 16738.398 0 0 5269.4957 12.521272 + 6700 16738.435 0 0 5269.5074 12.521362 + 6750 16738.505 0 0 5269.5293 12.521534 + 6800 16738.508 0 0 5269.5303 12.521543 + 6850 16738.446 0 0 5269.5108 12.521391 + 6900 16738.414 0 0 5269.5009 12.521312 + 6950 16738.432 0 0 5269.5063 12.521354 + 7000 16738.444 0 0 5269.5102 12.521385 + 7050 16738.421 0 0 5269.5029 12.521329 + 7100 16738.393 0 0 5269.4941 12.521259 + 7150 16738.419 0 0 5269.5022 12.521322 + 7200 16738.489 0 0 5269.5244 12.521495 + 7250 16738.505 0 0 5269.5293 12.521535 + 7300 16738.443 0 0 5269.5098 12.521383 + 7350 16738.404 0 0 5269.4976 12.521287 + 7400 16738.43 0 0 5269.5058 12.52135 + 7450 16738.461 0 0 5269.5156 12.521427 + 7500 16738.447 0 0 5269.5109 12.521392 + 7550 16738.407 0 0 5269.4986 12.521295 + 7600 16738.412 0 0 5269.5002 12.521306 + 7650 16738.478 0 0 5269.5208 12.521467 + 7700 16738.51 0 0 5269.5309 12.521547 + 7750 16738.454 0 0 5269.5135 12.521412 + 7800 16738.398 0 0 5269.4958 12.521273 + 7850 16738.407 -0.0002118108 0 5269.4982 12.521289 + 7900 16738.441 -0.00021679711 0 5269.509 12.521373 + 7950 16738.446 -0.00023848139 0 5269.5107 12.521386 + 8000 16738.423 0 0 5269.5035 12.521333 + 8050 16738.423 0 0 5269.5034 12.521332 + 8100 16738.478 -0.00069622994 0 5269.52 12.521454 + 8150 16738.523 -0.0040058408 0 5269.531 12.521501 + 8200 16738.486 -0.0092298229 0 5269.5142 12.521334 + 8250 16738.458 -0.023189671 0 5269.4914 12.521014 + 8300 16738.513 -0.045845677 0 5269.4861 12.520779 + 8350 16723.745 4.5690412 0 5269.4516 12.849325 + 8400 16738.466 -0.020158442 0 5269.497 12.835773 + 8450 16738.437 -0.012822892 0 5269.4952 12.829936 + 8500 16738.408 -0.0016837088 0 5269.4972 12.830061 + 8550 16738.464 -0.00097379467 0 5269.5155 12.830216 + 8600 16738.669 -0.050578079 0 5269.5304 12.829934 + 8650 15917.563 250.28318 0 5261.3678 24.54572 + 8700 16738.445 0.0012168759 0 5269.5117 10.589499 + 8750 16738.473 -0.010164589 0 5269.509 10.588414 + 8800 16738.468 0 0 5269.5177 10.588633 + 8850 16738.508 0 0 5269.5304 10.588733 + 8900 16738.509 0 0 5269.5307 10.588736 + 8950 16738.496 0 0 5269.5266 10.588705 + 9000 16738.477 0 0 5269.5204 10.588656 + 9050 16738.455 0 0 5269.5135 10.588602 + 9100 16738.477 0 0 5269.5206 10.588656 + 9150 16738.512 0 0 5269.5316 10.588743 + 9200 16738.502 0 0 5269.5285 10.58872 + 9250 16738.493 0 0 5269.5255 10.588696 + 9300 16738.482 0 0 5269.522 10.588669 + 9350 16738.46 0 0 5269.5151 10.588615 + 9400 16738.481 0 0 5269.5217 10.588665 + 9450 16738.509 0 0 5269.5307 10.588736 + 9500 16738.491 0 0 5269.5248 10.58869 + 9550 16738.484 0 0 5269.5227 10.588674 + 9600 16738.483 0 0 5269.5223 10.588671 + 9650 16738.464 0 0 5269.5166 10.588626 + 9700 16738.484 0 0 5269.5229 10.588674 + 9750 16738.507 0 0 5269.5301 10.588731 + 9800 16738.482 0 0 5269.5221 10.588669 + 9850 16738.478 0 0 5269.5208 10.588659 + 9900 16738.487 -0.00030979474 0 5269.5233 10.588675 + 9950 16738.476 -0.00095968581 0 5269.5193 10.588632 + 10000 16738.494 -0.00062717822 0 5269.5253 10.588684 +Loop time of 0.168577 on 1 procs for 10000 steps with 81 atoms -Performance: 519549.516 tau/day, 60133.046 timesteps/s -99.4% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 512524.843 tau/day, 59320.005 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.011685 | 0.011685 | 0.011685 | 0.0 | 7.03 -Neigh | 0.038539 | 0.038539 | 0.038539 | 0.0 | 23.17 -Comm | 0.0086315 | 0.0086315 | 0.0086315 | 0.0 | 5.19 -Output | 0.0026531 | 0.0026531 | 0.0026531 | 0.0 | 1.60 -Modify | 0.098759 | 0.098759 | 0.098759 | 0.0 | 59.39 -Other | | 0.00603 | | | 3.63 +Pair | 0.010812 | 0.010812 | 0.010812 | 0.0 | 6.41 +Neigh | 0.04144 | 0.04144 | 0.04144 | 0.0 | 24.58 +Comm | 0.012082 | 0.012082 | 0.012082 | 0.0 | 7.17 +Output | 0.0016394 | 0.0016394 | 0.0016394 | 0.0 | 0.97 +Modify | 0.097466 | 0.097466 | 0.097466 | 0.0 | 57.82 +Other | | 0.005139 | | | 3.05 Nlocal: 81 ave 81 max 81 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/rigid/log.20Apr18.rigid.nve.early.g++.4 b/examples/rigid/log.27Nov18.rigid.nve.early.g++.4 similarity index 72% rename from examples/rigid/log.20Apr18.rigid.nve.early.g++.4 rename to examples/rigid/log.27Nov18.rigid.nve.early.g++.4 index 1c3592990b..5b775d969a 100644 --- a/examples/rigid/log.20Apr18.rigid.nve.early.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.nve.early.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -202,126 +202,126 @@ Step Temp E_pair E_mol TotEng Press 4600 16738.425 0 0 5269.5042 12.383376 4650 16738.404 -0.0014438316 0 5269.4961 12.383299 4700 16738.444 -0.024020551 0 5269.4862 12.382975 - 4750 16738.49 -0.048521424 0 5269.4761 12.385777 - 4800 16735.057 1.0347218 0 5269.4786 12.43543 + 4750 16738.49 -0.048521428 0 5269.4761 12.385777 + 4800 16735.057 1.0347217 0 5269.4786 12.43543 4850 16735.441 0.92650925 0 5269.4913 12.418653 4900 16723.839 4.5908973 0 5269.5033 13.410103 - 4950 16738.531 -0.021537669 0 5269.5159 13.089982 - 5000 16738.45 -0.0042589693 0 5269.5077 13.090062 - 5050 16738.409 -0.00024692474 0 5269.4987 13.090038 + 4950 16738.531 -0.02153767 0 5269.5159 13.089982 + 5000 16738.45 -0.0042589696 0 5269.5077 13.090062 + 5050 16738.409 -0.00024692476 0 5269.4987 13.090038 5100 16738.404 0 0 5269.4976 13.090032 5150 16738.421 0 0 5269.5029 13.090073 5200 16738.44 0 0 5269.5087 13.090119 - 5250 16738.448 -0.0012793921 0 5269.5102 13.090114 - 5300 16738.456 -0.0064376396 0 5269.5075 13.090026 - 5350 16738.479 -0.020383843 0 5269.5007 13.089898 - 5400 16735.845 0.79889489 0 5269.4909 13.136244 - 5450 16735.558 0.87619907 0 5269.4778 12.324482 - 5500 16711.494 8.4724273 0 5269.4984 12.656579 - 5550 16454.525 89.074821 0 5269.2031 16.996502 - 5600 16713.084 7.9801107 0 5269.5065 13.774972 - 5650 16738.676 -0.079987805 0 5269.5033 13.168292 - 5700 16446.281 91.866085 0 5269.399 23.764659 - 5750 16738.549 -0.039869082 0 5269.5034 13.378118 - 5800 16738.487 -0.014994465 0 5269.5086 13.378394 - 5850 16738.466 -0.0051267396 0 5269.512 13.378555 - 5900 16738.462 -0.004368998 0 5269.5113 13.378568 - 5950 16738.528 -0.032727397 0 5269.5039 13.378192 - 6000 16702.774 10.969422 0 5269.2502 13.788847 - 6050 16682.271 17.483223 0 5269.3092 13.353098 - 6100 16738.508 -0.028838294 0 5269.5016 12.521077 - 6150 16738.425 -0.0067595586 0 5269.4974 12.521216 - 6200 16738.401 -0.0011499906 0 5269.4955 12.521248 - 6250 16738.455 0 0 5269.5136 12.521404 - 6300 16738.523 0 0 5269.5352 12.521573 - 6350 16738.503 0 0 5269.5287 12.521525 - 6400 16738.427 0 0 5269.5047 12.521337 - 6450 16738.399 0 0 5269.496 12.521268 - 6500 16738.425 0 0 5269.5042 12.521331 - 6550 16738.441 0 0 5269.5093 12.521372 - 6600 16738.42 0 0 5269.5025 12.521319 - 6650 16738.398 0 0 5269.4957 12.521266 - 6700 16738.435 0 0 5269.5074 12.521355 - 6750 16738.505 0 0 5269.5293 12.521527 - 6800 16738.508 0 0 5269.5303 12.521536 - 6850 16738.446 0 0 5269.5108 12.521384 - 6900 16738.414 0 0 5269.5009 12.521306 - 6950 16738.432 0 0 5269.5063 12.521348 - 7000 16738.444 0 0 5269.5102 12.521379 - 7050 16738.421 0 0 5269.5029 12.521322 - 7100 16738.393 0 0 5269.4941 12.521253 - 7150 16738.419 0 0 5269.5022 12.521315 - 7200 16738.489 0 0 5269.5244 12.521489 - 7250 16738.505 0 0 5269.5293 12.521528 - 7300 16738.443 0 0 5269.5098 12.521377 - 7350 16738.404 0 0 5269.4976 12.521281 - 7400 16738.43 0 0 5269.5058 12.521344 - 7450 16738.461 0 0 5269.5156 12.521421 - 7500 16738.447 0 0 5269.5109 12.521385 - 7550 16738.407 0 0 5269.4986 12.521288 - 7600 16738.412 0 0 5269.5002 12.5213 - 7650 16738.478 0 0 5269.5208 12.521461 - 7700 16738.51 0 0 5269.5309 12.521541 - 7750 16738.454 0 0 5269.5135 12.521406 - 7800 16738.398 0 0 5269.4958 12.521267 - 7850 16738.407 -0.00021180715 0 5269.4982 12.521283 - 7900 16738.441 -0.0002167946 0 5269.509 12.521367 - 7950 16738.446 -0.0002384787 0 5269.5107 12.52138 - 8000 16738.423 0 0 5269.5035 12.521327 - 8050 16738.423 0 0 5269.5034 12.521325 - 8100 16738.478 -0.00069624484 0 5269.52 12.521448 - 8150 16738.523 -0.0040058183 0 5269.531 12.521494 - 8200 16738.486 -0.0092298512 0 5269.5142 12.521328 - 8250 16738.458 -0.023189661 0 5269.4914 12.521008 - 8300 16738.513 -0.045847765 0 5269.4861 12.520773 - 8350 16723.735 4.5720344 0 5269.4516 12.849543 - 8400 16738.466 -0.02019859 0 5269.497 12.835812 - 8450 16738.437 -0.012822198 0 5269.4952 12.829979 - 8500 16738.408 -0.0016833646 0 5269.4972 12.830104 - 8550 16738.464 -0.00097382606 0 5269.5155 12.830258 - 8600 16738.669 -0.050581176 0 5269.5304 12.829977 - 8650 15918.073 250.131 0 5261.3761 24.542327 - 8700 16738.446 0.00085039409 0 5269.5116 10.59114 - 8750 16738.472 -0.010146632 0 5269.5089 10.590059 - 8800 16738.468 0 0 5269.5176 10.590278 - 8850 16738.508 0 0 5269.5303 10.590378 - 8900 16738.509 0 0 5269.5306 10.590381 - 8950 16738.496 0 0 5269.5266 10.590349 - 9000 16738.477 0 0 5269.5204 10.590302 - 9050 16738.455 0 0 5269.5135 10.590247 - 9100 16738.477 0 0 5269.5205 10.590301 - 9150 16738.512 0 0 5269.5315 10.590388 - 9200 16738.502 0 0 5269.5285 10.590364 - 9250 16738.493 0 0 5269.5254 10.59034 - 9300 16738.482 0 0 5269.522 10.590314 - 9350 16738.46 0 0 5269.5151 10.59026 - 9400 16738.48 0 0 5269.5216 10.59031 - 9450 16738.509 0 0 5269.5306 10.590381 - 9500 16738.49 0 0 5269.5247 10.590335 - 9550 16738.484 0 0 5269.5226 10.590318 - 9600 16738.483 0 0 5269.5223 10.590316 - 9650 16738.464 0 0 5269.5165 10.590271 - 9700 16738.484 0 0 5269.5228 10.590319 - 9750 16738.507 0 0 5269.53 10.590376 - 9800 16738.482 0 0 5269.522 10.590314 - 9850 16738.478 0 0 5269.5207 10.590303 - 9900 16738.487 -0.00030979874 0 5269.5233 10.59032 - 9950 16738.476 -0.00095967134 0 5269.5192 10.590278 - 10000 16738.494 -0.00062714318 0 5269.5253 10.590329 -Loop time of 0.224811 on 4 procs for 10000 steps with 81 atoms + 5250 16738.448 -0.001279392 0 5269.5102 13.090114 + 5300 16738.456 -0.0064376392 0 5269.5075 13.090026 + 5350 16738.479 -0.020383842 0 5269.5007 13.089897 + 5400 16735.845 0.79889474 0 5269.4909 13.136244 + 5450 16735.558 0.87619992 0 5269.4778 12.324482 + 5500 16711.494 8.4724208 0 5269.4984 12.656579 + 5550 16454.525 89.074816 0 5269.2031 16.996503 + 5600 16713.084 7.9801334 0 5269.5065 13.774977 + 5650 16738.676 -0.079987764 0 5269.5033 13.168295 + 5700 16446.281 91.866085 0 5269.399 23.764662 + 5750 16738.549 -0.039869084 0 5269.5034 13.378121 + 5800 16738.487 -0.014994475 0 5269.5086 13.378397 + 5850 16738.466 -0.0051267556 0 5269.512 13.378559 + 5900 16738.462 -0.0043690097 0 5269.5113 13.378572 + 5950 16738.528 -0.03272741 0 5269.5039 13.378195 + 6000 16702.774 10.969434 0 5269.2502 13.788851 + 6050 16682.271 17.483158 0 5269.3092 13.3531 + 6100 16738.508 -0.028838239 0 5269.5016 12.521082 + 6150 16738.425 -0.0067595542 0 5269.4974 12.521221 + 6200 16738.401 -0.0011499896 0 5269.4955 12.521252 + 6250 16738.455 0 0 5269.5135 12.521408 + 6300 16738.523 0 0 5269.5352 12.521578 + 6350 16738.503 0 0 5269.5287 12.52153 + 6400 16738.427 0 0 5269.5047 12.521342 + 6450 16738.399 0 0 5269.496 12.521273 + 6500 16738.425 0 0 5269.5042 12.521336 + 6550 16738.441 0 0 5269.5093 12.521377 + 6600 16738.42 0 0 5269.5025 12.521324 + 6650 16738.398 0 0 5269.4957 12.52127 + 6700 16738.435 0 0 5269.5074 12.52136 + 6750 16738.505 0 0 5269.5293 12.521532 + 6800 16738.508 0 0 5269.5303 12.521541 + 6850 16738.446 0 0 5269.5108 12.521389 + 6900 16738.414 0 0 5269.5009 12.521311 + 6950 16738.432 0 0 5269.5063 12.521353 + 7000 16738.444 0 0 5269.5102 12.521383 + 7050 16738.421 0 0 5269.5029 12.521327 + 7100 16738.393 0 0 5269.4941 12.521258 + 7150 16738.419 0 0 5269.5022 12.52132 + 7200 16738.489 0 0 5269.5244 12.521494 + 7250 16738.505 0 0 5269.5293 12.521533 + 7300 16738.443 0 0 5269.5098 12.521381 + 7350 16738.404 0 0 5269.4976 12.521285 + 7400 16738.43 0 0 5269.5058 12.521348 + 7450 16738.461 0 0 5269.5156 12.521425 + 7500 16738.447 0 0 5269.5109 12.52139 + 7550 16738.407 0 0 5269.4986 12.521293 + 7600 16738.412 0 0 5269.5002 12.521305 + 7650 16738.478 0 0 5269.5208 12.521465 + 7700 16738.51 0 0 5269.5309 12.521546 + 7750 16738.454 0 0 5269.5135 12.52141 + 7800 16738.398 0 0 5269.4958 12.521272 + 7850 16738.407 -0.00021180981 0 5269.4982 12.521288 + 7900 16738.441 -0.0002167964 0 5269.509 12.521371 + 7950 16738.446 -0.00023848065 0 5269.5107 12.521385 + 8000 16738.423 0 0 5269.5035 12.521331 + 8050 16738.423 0 0 5269.5034 12.52133 + 8100 16738.478 -0.00069623408 0 5269.52 12.521452 + 8150 16738.523 -0.0040058355 0 5269.531 12.521499 + 8200 16738.486 -0.0092298325 0 5269.5142 12.521332 + 8250 16738.458 -0.023189665 0 5269.4914 12.521012 + 8300 16738.513 -0.045846242 0 5269.4861 12.520778 + 8350 16723.742 4.5698786 0 5269.4516 12.849386 + 8400 16738.466 -0.02016972 0 5269.497 12.835784 + 8450 16738.437 -0.012822703 0 5269.4952 12.829948 + 8500 16738.408 -0.0016836132 0 5269.4972 12.830073 + 8550 16738.464 -0.00097380297 0 5269.5155 12.830227 + 8600 16738.669 -0.050578946 0 5269.5304 12.829946 + 8650 15917.707 250.24016 0 5261.3702 24.544744 + 8700 16738.445 0.0010615265 0 5269.5117 10.589987 + 8750 16738.473 -0.010158834 0 5269.509 10.588904 + 8800 16738.468 0 0 5269.5176 10.589124 + 8850 16738.508 0 0 5269.5304 10.589223 + 8900 16738.509 0 0 5269.5306 10.589226 + 8950 16738.496 0 0 5269.5266 10.589195 + 9000 16738.477 0 0 5269.5204 10.589147 + 9050 16738.455 0 0 5269.5135 10.589092 + 9100 16738.477 0 0 5269.5206 10.589146 + 9150 16738.512 0 0 5269.5316 10.589233 + 9200 16738.502 0 0 5269.5285 10.58921 + 9250 16738.493 0 0 5269.5255 10.589186 + 9300 16738.482 0 0 5269.522 10.589159 + 9350 16738.46 0 0 5269.5151 10.589105 + 9400 16738.481 0 0 5269.5217 10.589155 + 9450 16738.509 0 0 5269.5307 10.589226 + 9500 16738.491 0 0 5269.5248 10.589181 + 9550 16738.484 0 0 5269.5227 10.589164 + 9600 16738.483 0 0 5269.5223 10.589161 + 9650 16738.464 0 0 5269.5166 10.589116 + 9700 16738.484 0 0 5269.5228 10.589164 + 9750 16738.507 0 0 5269.5301 10.589221 + 9800 16738.482 0 0 5269.5221 10.589159 + 9850 16738.478 0 0 5269.5208 10.589149 + 9900 16738.487 -0.00030979591 0 5269.5233 10.589165 + 9950 16738.476 -0.0009596827 0 5269.5193 10.589123 + 10000 16738.494 -0.0006271698 0 5269.5253 10.589175 +Loop time of 0.213152 on 4 procs for 10000 steps with 81 atoms -Performance: 384323.005 tau/day, 44481.829 timesteps/s -95.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 405345.239 tau/day, 46914.958 timesteps/s +91.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0032673 | 0.0039269 | 0.0048387 | 1.1 | 1.75 -Neigh | 0.010401 | 0.012159 | 0.015022 | 1.6 | 5.41 -Comm | 0.087584 | 0.08909 | 0.090645 | 0.4 | 39.63 -Output | 0.0042956 | 0.0045624 | 0.0052695 | 0.6 | 2.03 -Modify | 0.10208 | 0.10506 | 0.10697 | 0.6 | 46.73 -Other | | 0.01001 | | | 4.45 +Pair | 0.0029514 | 0.0038354 | 0.005348 | 1.5 | 1.80 +Neigh | 0.01178 | 0.013139 | 0.0167 | 1.8 | 6.16 +Comm | 0.073879 | 0.078553 | 0.081131 | 1.0 | 36.85 +Output | 0.0031943 | 0.0037987 | 0.0055451 | 1.6 | 1.78 +Modify | 0.10553 | 0.10763 | 0.1096 | 0.4 | 50.49 +Other | | 0.0062 | | | 2.91 Nlocal: 20.25 ave 34 max 9 min Histogram: 2 0 0 0 0 0 0 1 0 1 diff --git a/examples/rigid/log.20Apr18.rigid.nve.g++.1 b/examples/rigid/log.27Nov18.rigid.nve.g++.1 similarity index 71% rename from examples/rigid/log.20Apr18.rigid.nve.g++.1 rename to examples/rigid/log.27Nov18.rigid.nve.g++.1 index 26fa4e7f68..c3805dc42e 100644 --- a/examples/rigid/log.20Apr18.rigid.nve.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.nve.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -200,126 +200,126 @@ Step Temp E_pair E_mol TotEng Press 4600 16738.425 0 0 5269.5042 12.383376 4650 16738.404 -0.0014438316 0 5269.4961 12.383299 4700 16738.444 -0.024020551 0 5269.4862 12.382975 - 4750 16738.49 -0.048521421 0 5269.4761 12.385777 - 4800 16735.057 1.0347219 0 5269.4786 12.43543 - 4850 16735.441 0.92650928 0 5269.4913 12.418653 - 4900 16723.839 4.5908971 0 5269.5033 13.410103 - 4950 16738.531 -0.021537669 0 5269.5159 13.089982 - 5000 16738.45 -0.0042589693 0 5269.5077 13.090062 - 5050 16738.409 -0.00024692474 0 5269.4987 13.090038 + 4750 16738.49 -0.04852143 0 5269.4761 12.385777 + 4800 16735.057 1.0347216 0 5269.4786 12.43543 + 4850 16735.441 0.92650925 0 5269.4913 12.418653 + 4900 16723.839 4.5908974 0 5269.5033 13.410103 + 4950 16738.531 -0.02153767 0 5269.5159 13.089982 + 5000 16738.45 -0.0042589697 0 5269.5077 13.090062 + 5050 16738.409 -0.00024692476 0 5269.4987 13.090038 5100 16738.404 0 0 5269.4976 13.090032 5150 16738.421 0 0 5269.5029 13.090073 5200 16738.44 0 0 5269.5087 13.090119 - 5250 16738.448 -0.0012793921 0 5269.5102 13.090114 - 5300 16738.456 -0.0064376397 0 5269.5075 13.090026 - 5350 16738.479 -0.020383842 0 5269.5007 13.089898 - 5400 16735.845 0.79889481 0 5269.4909 13.136244 - 5450 16735.558 0.87619898 0 5269.4778 12.324482 - 5500 16711.494 8.47243 0 5269.4984 12.65658 - 5550 16454.525 89.074845 0 5269.2031 16.996503 - 5600 16713.084 7.9801091 0 5269.5065 13.774971 - 5650 16738.676 -0.079987812 0 5269.5033 13.168292 - 5700 16446.281 91.866085 0 5269.399 23.764658 - 5750 16738.549 -0.039869082 0 5269.5034 13.378117 - 5800 16738.487 -0.014994464 0 5269.5086 13.378394 - 5850 16738.466 -0.0051267378 0 5269.512 13.378555 - 5900 16738.462 -0.0043689966 0 5269.5113 13.378568 - 5950 16738.528 -0.032727396 0 5269.5039 13.378192 - 6000 16702.774 10.969422 0 5269.2502 13.788847 - 6050 16682.271 17.483217 0 5269.3092 13.353098 - 6100 16738.508 -0.028838289 0 5269.5016 12.521077 - 6150 16738.425 -0.0067595568 0 5269.4974 12.521216 - 6200 16738.401 -0.0011499904 0 5269.4955 12.521247 - 6250 16738.455 0 0 5269.5136 12.521403 - 6300 16738.523 0 0 5269.5352 12.521573 - 6350 16738.503 0 0 5269.5287 12.521525 - 6400 16738.427 0 0 5269.5047 12.521337 - 6450 16738.399 0 0 5269.496 12.521268 - 6500 16738.425 0 0 5269.5042 12.521331 - 6550 16738.441 0 0 5269.5093 12.521372 - 6600 16738.42 0 0 5269.5025 12.521319 - 6650 16738.398 0 0 5269.4957 12.521266 - 6700 16738.435 0 0 5269.5074 12.521355 - 6750 16738.505 0 0 5269.5293 12.521527 - 6800 16738.508 0 0 5269.5303 12.521536 - 6850 16738.446 0 0 5269.5108 12.521384 - 6900 16738.414 0 0 5269.5009 12.521306 - 6950 16738.432 0 0 5269.5063 12.521348 - 7000 16738.444 0 0 5269.5102 12.521378 - 7050 16738.421 0 0 5269.5029 12.521322 - 7100 16738.393 0 0 5269.4941 12.521253 - 7150 16738.419 0 0 5269.5022 12.521315 - 7200 16738.489 0 0 5269.5244 12.521489 - 7250 16738.505 0 0 5269.5293 12.521528 - 7300 16738.443 0 0 5269.5098 12.521376 - 7350 16738.404 0 0 5269.4976 12.521281 - 7400 16738.43 0 0 5269.5058 12.521343 - 7450 16738.461 0 0 5269.5156 12.521421 - 7500 16738.447 0 0 5269.5109 12.521385 - 7550 16738.407 0 0 5269.4986 12.521288 - 7600 16738.412 0 0 5269.5002 12.5213 - 7650 16738.478 0 0 5269.5208 12.52146 - 7700 16738.51 0 0 5269.5309 12.521541 - 7750 16738.454 0 0 5269.5135 12.521405 - 7800 16738.398 0 0 5269.4958 12.521267 - 7850 16738.407 -0.0002118068 0 5269.4982 12.521283 - 7900 16738.441 -0.00021679441 0 5269.509 12.521366 - 7950 16738.446 -0.00023847865 0 5269.5107 12.52138 - 8000 16738.423 0 0 5269.5035 12.521326 - 8050 16738.423 0 0 5269.5034 12.521325 - 8100 16738.478 -0.00069624411 0 5269.52 12.521447 - 8150 16738.523 -0.0040058094 0 5269.531 12.521494 - 8200 16738.486 -0.0092298399 0 5269.5142 12.521327 - 8250 16738.458 -0.023189572 0 5269.4914 12.521008 - 8300 16738.513 -0.045847775 0 5269.4861 12.520773 - 8350 16723.734 4.5722877 0 5269.4516 12.849562 - 8400 16738.466 -0.020202622 0 5269.497 12.835807 - 8450 16738.437 -0.012822209 0 5269.4952 12.829975 - 8500 16738.408 -0.001683355 0 5269.4972 12.8301 - 8550 16738.464 -0.00097382251 0 5269.5155 12.830254 - 8600 16738.669 -0.050581166 0 5269.5304 12.829973 - 8650 15918.256 250.07455 0 5261.3774 24.539208 - 8700 16738.446 0.00084613367 0 5269.5116 10.591358 - 8750 16738.472 -0.010145611 0 5269.5089 10.590277 - 8800 16738.468 0 0 5269.5176 10.590497 - 8850 16738.508 0 0 5269.5303 10.590596 - 8900 16738.509 0 0 5269.5306 10.590599 - 8950 16738.496 0 0 5269.5266 10.590568 - 9000 16738.477 0 0 5269.5204 10.59052 - 9050 16738.455 0 0 5269.5135 10.590465 - 9100 16738.477 0 0 5269.5205 10.590519 - 9150 16738.512 0 0 5269.5315 10.590606 - 9200 16738.502 0 0 5269.5285 10.590583 - 9250 16738.493 0 0 5269.5254 10.590559 - 9300 16738.482 0 0 5269.522 10.590532 - 9350 16738.46 0 0 5269.5151 10.590478 - 9400 16738.48 0 0 5269.5216 10.590528 - 9450 16738.509 0 0 5269.5306 10.590599 - 9500 16738.49 0 0 5269.5247 10.590554 - 9550 16738.484 0 0 5269.5226 10.590536 - 9600 16738.483 0 0 5269.5223 10.590534 - 9650 16738.464 0 0 5269.5165 10.590489 - 9700 16738.484 0 0 5269.5228 10.590537 - 9750 16738.507 0 0 5269.53 10.590595 - 9800 16738.482 0 0 5269.522 10.590532 - 9850 16738.478 0 0 5269.5207 10.590521 - 9900 16738.487 -0.00030979882 0 5269.5233 10.590538 - 9950 16738.476 -0.00095967357 0 5269.5193 10.590496 - 10000 16738.494 -0.00062714625 0 5269.5253 10.590548 -Loop time of 0.166547 on 1 procs for 10000 steps with 81 atoms + 5250 16738.448 -0.001279392 0 5269.5102 13.090114 + 5300 16738.456 -0.0064376391 0 5269.5075 13.090026 + 5350 16738.479 -0.020383841 0 5269.5007 13.089897 + 5400 16735.845 0.7988947 0 5269.4909 13.136244 + 5450 16735.558 0.87620022 0 5269.4778 12.324482 + 5500 16711.494 8.4724178 0 5269.4984 12.656579 + 5550 16454.525 89.074815 0 5269.2031 16.996503 + 5600 16713.084 7.9801418 0 5269.5065 13.774979 + 5650 16738.676 -0.079987748 0 5269.5033 13.168297 + 5700 16446.281 91.866085 0 5269.399 23.764663 + 5750 16738.549 -0.039869084 0 5269.5034 13.378122 + 5800 16738.487 -0.014994478 0 5269.5086 13.378399 + 5850 16738.466 -0.0051267616 0 5269.512 13.37856 + 5900 16738.462 -0.0043690142 0 5269.5113 13.378573 + 5950 16738.528 -0.032727415 0 5269.5039 13.378197 + 6000 16702.774 10.969438 0 5269.2502 13.788852 + 6050 16682.271 17.483137 0 5269.3092 13.353101 + 6100 16738.508 -0.028838222 0 5269.5016 12.521084 + 6150 16738.425 -0.0067595536 0 5269.4974 12.521223 + 6200 16738.401 -0.0011499893 0 5269.4955 12.521254 + 6250 16738.455 0 0 5269.5135 12.52141 + 6300 16738.523 0 0 5269.5352 12.52158 + 6350 16738.503 0 0 5269.5287 12.521531 + 6400 16738.427 0 0 5269.5047 12.521344 + 6450 16738.399 0 0 5269.496 12.521274 + 6500 16738.425 0 0 5269.5042 12.521337 + 6550 16738.441 0 0 5269.5093 12.521378 + 6600 16738.42 0 0 5269.5025 12.521326 + 6650 16738.398 0 0 5269.4957 12.521272 + 6700 16738.435 0 0 5269.5074 12.521362 + 6750 16738.505 0 0 5269.5293 12.521534 + 6800 16738.508 0 0 5269.5303 12.521543 + 6850 16738.446 0 0 5269.5108 12.521391 + 6900 16738.414 0 0 5269.5009 12.521312 + 6950 16738.432 0 0 5269.5063 12.521354 + 7000 16738.444 0 0 5269.5102 12.521385 + 7050 16738.421 0 0 5269.5029 12.521329 + 7100 16738.393 0 0 5269.4941 12.521259 + 7150 16738.419 0 0 5269.5022 12.521322 + 7200 16738.489 0 0 5269.5244 12.521495 + 7250 16738.505 0 0 5269.5293 12.521535 + 7300 16738.443 0 0 5269.5098 12.521383 + 7350 16738.404 0 0 5269.4976 12.521287 + 7400 16738.43 0 0 5269.5058 12.52135 + 7450 16738.461 0 0 5269.5156 12.521427 + 7500 16738.447 0 0 5269.5109 12.521392 + 7550 16738.407 0 0 5269.4986 12.521295 + 7600 16738.412 0 0 5269.5002 12.521306 + 7650 16738.478 0 0 5269.5208 12.521467 + 7700 16738.51 0 0 5269.5309 12.521547 + 7750 16738.454 0 0 5269.5135 12.521412 + 7800 16738.398 0 0 5269.4958 12.521273 + 7850 16738.407 -0.0002118108 0 5269.4982 12.521289 + 7900 16738.441 -0.00021679711 0 5269.509 12.521373 + 7950 16738.446 -0.00023848139 0 5269.5107 12.521386 + 8000 16738.423 0 0 5269.5035 12.521333 + 8050 16738.423 0 0 5269.5034 12.521332 + 8100 16738.478 -0.00069622994 0 5269.52 12.521454 + 8150 16738.523 -0.0040058408 0 5269.531 12.521501 + 8200 16738.486 -0.0092298229 0 5269.5142 12.521334 + 8250 16738.458 -0.023189671 0 5269.4914 12.521014 + 8300 16738.513 -0.045845677 0 5269.4861 12.520779 + 8350 16723.745 4.5690412 0 5269.4516 12.849325 + 8400 16738.466 -0.020158442 0 5269.497 12.835773 + 8450 16738.437 -0.012822892 0 5269.4952 12.829936 + 8500 16738.408 -0.0016837088 0 5269.4972 12.830061 + 8550 16738.464 -0.00097379467 0 5269.5155 12.830216 + 8600 16738.669 -0.050578079 0 5269.5304 12.829934 + 8650 15917.563 250.28318 0 5261.3678 24.54572 + 8700 16738.445 0.0012168759 0 5269.5117 10.589499 + 8750 16738.473 -0.010164589 0 5269.509 10.588414 + 8800 16738.468 0 0 5269.5177 10.588633 + 8850 16738.508 0 0 5269.5304 10.588733 + 8900 16738.509 0 0 5269.5307 10.588736 + 8950 16738.496 0 0 5269.5266 10.588705 + 9000 16738.477 0 0 5269.5204 10.588656 + 9050 16738.455 0 0 5269.5135 10.588602 + 9100 16738.477 0 0 5269.5206 10.588656 + 9150 16738.512 0 0 5269.5316 10.588743 + 9200 16738.502 0 0 5269.5285 10.58872 + 9250 16738.493 0 0 5269.5255 10.588696 + 9300 16738.482 0 0 5269.522 10.588669 + 9350 16738.46 0 0 5269.5151 10.588615 + 9400 16738.481 0 0 5269.5217 10.588665 + 9450 16738.509 0 0 5269.5307 10.588736 + 9500 16738.491 0 0 5269.5248 10.58869 + 9550 16738.484 0 0 5269.5227 10.588674 + 9600 16738.483 0 0 5269.5223 10.588671 + 9650 16738.464 0 0 5269.5166 10.588626 + 9700 16738.484 0 0 5269.5229 10.588674 + 9750 16738.507 0 0 5269.5301 10.588731 + 9800 16738.482 0 0 5269.5221 10.588669 + 9850 16738.478 0 0 5269.5208 10.588659 + 9900 16738.487 -0.00030979474 0 5269.5233 10.588675 + 9950 16738.476 -0.00095968581 0 5269.5193 10.588632 + 10000 16738.494 -0.00062717822 0 5269.5253 10.588684 +Loop time of 0.171181 on 1 procs for 10000 steps with 81 atoms -Performance: 518773.777 tau/day, 60043.261 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 504728.317 tau/day, 58417.629 timesteps/s +97.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.011439 | 0.011439 | 0.011439 | 0.0 | 6.87 -Neigh | 0.038572 | 0.038572 | 0.038572 | 0.0 | 23.16 -Comm | 0.0085464 | 0.0085464 | 0.0085464 | 0.0 | 5.13 -Output | 0.0025046 | 0.0025046 | 0.0025046 | 0.0 | 1.50 -Modify | 0.099479 | 0.099479 | 0.099479 | 0.0 | 59.73 -Other | | 0.006005 | | | 3.61 +Pair | 0.011004 | 0.011004 | 0.011004 | 0.0 | 6.43 +Neigh | 0.041984 | 0.041984 | 0.041984 | 0.0 | 24.53 +Comm | 0.012262 | 0.012262 | 0.012262 | 0.0 | 7.16 +Output | 0.0017002 | 0.0017002 | 0.0017002 | 0.0 | 0.99 +Modify | 0.098894 | 0.098894 | 0.098894 | 0.0 | 57.77 +Other | | 0.005337 | | | 3.12 Nlocal: 81 ave 81 max 81 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/rigid/log.20Apr18.rigid.nve.g++.4 b/examples/rigid/log.27Nov18.rigid.nve.g++.4 similarity index 72% rename from examples/rigid/log.20Apr18.rigid.nve.g++.4 rename to examples/rigid/log.27Nov18.rigid.nve.g++.4 index 782457b427..bc79d9730f 100644 --- a/examples/rigid/log.20Apr18.rigid.nve.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.nve.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -200,126 +200,126 @@ Step Temp E_pair E_mol TotEng Press 4600 16738.425 0 0 5269.5042 12.383376 4650 16738.404 -0.0014438316 0 5269.4961 12.383299 4700 16738.444 -0.024020551 0 5269.4862 12.382975 - 4750 16738.49 -0.048521424 0 5269.4761 12.385777 - 4800 16735.057 1.0347218 0 5269.4786 12.43543 + 4750 16738.49 -0.048521428 0 5269.4761 12.385777 + 4800 16735.057 1.0347217 0 5269.4786 12.43543 4850 16735.441 0.92650925 0 5269.4913 12.418653 4900 16723.839 4.5908973 0 5269.5033 13.410103 - 4950 16738.531 -0.021537669 0 5269.5159 13.089982 - 5000 16738.45 -0.0042589693 0 5269.5077 13.090062 - 5050 16738.409 -0.00024692474 0 5269.4987 13.090038 + 4950 16738.531 -0.02153767 0 5269.5159 13.089982 + 5000 16738.45 -0.0042589696 0 5269.5077 13.090062 + 5050 16738.409 -0.00024692476 0 5269.4987 13.090038 5100 16738.404 0 0 5269.4976 13.090032 5150 16738.421 0 0 5269.5029 13.090073 5200 16738.44 0 0 5269.5087 13.090119 - 5250 16738.448 -0.0012793921 0 5269.5102 13.090114 - 5300 16738.456 -0.0064376396 0 5269.5075 13.090026 - 5350 16738.479 -0.020383843 0 5269.5007 13.089898 - 5400 16735.845 0.79889489 0 5269.4909 13.136244 - 5450 16735.558 0.87619907 0 5269.4778 12.324482 - 5500 16711.494 8.4724273 0 5269.4984 12.656579 - 5550 16454.525 89.074821 0 5269.2031 16.996502 - 5600 16713.084 7.9801107 0 5269.5065 13.774972 - 5650 16738.676 -0.079987805 0 5269.5033 13.168292 - 5700 16446.281 91.866085 0 5269.399 23.764659 - 5750 16738.549 -0.039869082 0 5269.5034 13.378118 - 5800 16738.487 -0.014994465 0 5269.5086 13.378394 - 5850 16738.466 -0.0051267396 0 5269.512 13.378555 - 5900 16738.462 -0.004368998 0 5269.5113 13.378568 - 5950 16738.528 -0.032727397 0 5269.5039 13.378192 - 6000 16702.774 10.969422 0 5269.2502 13.788847 - 6050 16682.271 17.483223 0 5269.3092 13.353098 - 6100 16738.508 -0.028838294 0 5269.5016 12.521077 - 6150 16738.425 -0.0067595586 0 5269.4974 12.521216 - 6200 16738.401 -0.0011499906 0 5269.4955 12.521248 - 6250 16738.455 0 0 5269.5136 12.521404 - 6300 16738.523 0 0 5269.5352 12.521573 - 6350 16738.503 0 0 5269.5287 12.521525 - 6400 16738.427 0 0 5269.5047 12.521337 - 6450 16738.399 0 0 5269.496 12.521268 - 6500 16738.425 0 0 5269.5042 12.521331 - 6550 16738.441 0 0 5269.5093 12.521372 - 6600 16738.42 0 0 5269.5025 12.521319 - 6650 16738.398 0 0 5269.4957 12.521266 - 6700 16738.435 0 0 5269.5074 12.521355 - 6750 16738.505 0 0 5269.5293 12.521527 - 6800 16738.508 0 0 5269.5303 12.521536 - 6850 16738.446 0 0 5269.5108 12.521384 - 6900 16738.414 0 0 5269.5009 12.521306 - 6950 16738.432 0 0 5269.5063 12.521348 - 7000 16738.444 0 0 5269.5102 12.521379 - 7050 16738.421 0 0 5269.5029 12.521322 - 7100 16738.393 0 0 5269.4941 12.521253 - 7150 16738.419 0 0 5269.5022 12.521315 - 7200 16738.489 0 0 5269.5244 12.521489 - 7250 16738.505 0 0 5269.5293 12.521528 - 7300 16738.443 0 0 5269.5098 12.521377 - 7350 16738.404 0 0 5269.4976 12.521281 - 7400 16738.43 0 0 5269.5058 12.521344 - 7450 16738.461 0 0 5269.5156 12.521421 - 7500 16738.447 0 0 5269.5109 12.521385 - 7550 16738.407 0 0 5269.4986 12.521288 - 7600 16738.412 0 0 5269.5002 12.5213 - 7650 16738.478 0 0 5269.5208 12.521461 - 7700 16738.51 0 0 5269.5309 12.521541 - 7750 16738.454 0 0 5269.5135 12.521406 - 7800 16738.398 0 0 5269.4958 12.521267 - 7850 16738.407 -0.00021180715 0 5269.4982 12.521283 - 7900 16738.441 -0.0002167946 0 5269.509 12.521367 - 7950 16738.446 -0.0002384787 0 5269.5107 12.52138 - 8000 16738.423 0 0 5269.5035 12.521327 - 8050 16738.423 0 0 5269.5034 12.521325 - 8100 16738.478 -0.00069624484 0 5269.52 12.521448 - 8150 16738.523 -0.0040058183 0 5269.531 12.521494 - 8200 16738.486 -0.0092298512 0 5269.5142 12.521328 - 8250 16738.458 -0.023189661 0 5269.4914 12.521008 - 8300 16738.513 -0.045847765 0 5269.4861 12.520773 - 8350 16723.735 4.5720344 0 5269.4516 12.849543 - 8400 16738.466 -0.02019859 0 5269.497 12.835812 - 8450 16738.437 -0.012822198 0 5269.4952 12.829979 - 8500 16738.408 -0.0016833646 0 5269.4972 12.830104 - 8550 16738.464 -0.00097382606 0 5269.5155 12.830258 - 8600 16738.669 -0.050581176 0 5269.5304 12.829977 - 8650 15918.073 250.131 0 5261.3761 24.542327 - 8700 16738.446 0.00085039409 0 5269.5116 10.59114 - 8750 16738.472 -0.010146632 0 5269.5089 10.590059 - 8800 16738.468 0 0 5269.5176 10.590278 - 8850 16738.508 0 0 5269.5303 10.590378 - 8900 16738.509 0 0 5269.5306 10.590381 - 8950 16738.496 0 0 5269.5266 10.590349 - 9000 16738.477 0 0 5269.5204 10.590302 - 9050 16738.455 0 0 5269.5135 10.590247 - 9100 16738.477 0 0 5269.5205 10.590301 - 9150 16738.512 0 0 5269.5315 10.590388 - 9200 16738.502 0 0 5269.5285 10.590364 - 9250 16738.493 0 0 5269.5254 10.59034 - 9300 16738.482 0 0 5269.522 10.590314 - 9350 16738.46 0 0 5269.5151 10.59026 - 9400 16738.48 0 0 5269.5216 10.59031 - 9450 16738.509 0 0 5269.5306 10.590381 - 9500 16738.49 0 0 5269.5247 10.590335 - 9550 16738.484 0 0 5269.5226 10.590318 - 9600 16738.483 0 0 5269.5223 10.590316 - 9650 16738.464 0 0 5269.5165 10.590271 - 9700 16738.484 0 0 5269.5228 10.590319 - 9750 16738.507 0 0 5269.53 10.590376 - 9800 16738.482 0 0 5269.522 10.590314 - 9850 16738.478 0 0 5269.5207 10.590303 - 9900 16738.487 -0.00030979874 0 5269.5233 10.59032 - 9950 16738.476 -0.00095967134 0 5269.5192 10.590278 - 10000 16738.494 -0.00062714318 0 5269.5253 10.590329 -Loop time of 0.22441 on 4 procs for 10000 steps with 81 atoms + 5250 16738.448 -0.001279392 0 5269.5102 13.090114 + 5300 16738.456 -0.0064376392 0 5269.5075 13.090026 + 5350 16738.479 -0.020383842 0 5269.5007 13.089897 + 5400 16735.845 0.79889474 0 5269.4909 13.136244 + 5450 16735.558 0.87619992 0 5269.4778 12.324482 + 5500 16711.494 8.4724208 0 5269.4984 12.656579 + 5550 16454.525 89.074816 0 5269.2031 16.996503 + 5600 16713.084 7.9801334 0 5269.5065 13.774977 + 5650 16738.676 -0.079987764 0 5269.5033 13.168295 + 5700 16446.281 91.866085 0 5269.399 23.764662 + 5750 16738.549 -0.039869084 0 5269.5034 13.378121 + 5800 16738.487 -0.014994475 0 5269.5086 13.378397 + 5850 16738.466 -0.0051267556 0 5269.512 13.378559 + 5900 16738.462 -0.0043690097 0 5269.5113 13.378572 + 5950 16738.528 -0.03272741 0 5269.5039 13.378195 + 6000 16702.774 10.969434 0 5269.2502 13.788851 + 6050 16682.271 17.483158 0 5269.3092 13.3531 + 6100 16738.508 -0.028838239 0 5269.5016 12.521082 + 6150 16738.425 -0.0067595542 0 5269.4974 12.521221 + 6200 16738.401 -0.0011499896 0 5269.4955 12.521252 + 6250 16738.455 0 0 5269.5135 12.521408 + 6300 16738.523 0 0 5269.5352 12.521578 + 6350 16738.503 0 0 5269.5287 12.52153 + 6400 16738.427 0 0 5269.5047 12.521342 + 6450 16738.399 0 0 5269.496 12.521273 + 6500 16738.425 0 0 5269.5042 12.521336 + 6550 16738.441 0 0 5269.5093 12.521377 + 6600 16738.42 0 0 5269.5025 12.521324 + 6650 16738.398 0 0 5269.4957 12.52127 + 6700 16738.435 0 0 5269.5074 12.52136 + 6750 16738.505 0 0 5269.5293 12.521532 + 6800 16738.508 0 0 5269.5303 12.521541 + 6850 16738.446 0 0 5269.5108 12.521389 + 6900 16738.414 0 0 5269.5009 12.521311 + 6950 16738.432 0 0 5269.5063 12.521353 + 7000 16738.444 0 0 5269.5102 12.521383 + 7050 16738.421 0 0 5269.5029 12.521327 + 7100 16738.393 0 0 5269.4941 12.521258 + 7150 16738.419 0 0 5269.5022 12.52132 + 7200 16738.489 0 0 5269.5244 12.521494 + 7250 16738.505 0 0 5269.5293 12.521533 + 7300 16738.443 0 0 5269.5098 12.521381 + 7350 16738.404 0 0 5269.4976 12.521285 + 7400 16738.43 0 0 5269.5058 12.521348 + 7450 16738.461 0 0 5269.5156 12.521425 + 7500 16738.447 0 0 5269.5109 12.52139 + 7550 16738.407 0 0 5269.4986 12.521293 + 7600 16738.412 0 0 5269.5002 12.521305 + 7650 16738.478 0 0 5269.5208 12.521465 + 7700 16738.51 0 0 5269.5309 12.521546 + 7750 16738.454 0 0 5269.5135 12.52141 + 7800 16738.398 0 0 5269.4958 12.521272 + 7850 16738.407 -0.00021180981 0 5269.4982 12.521288 + 7900 16738.441 -0.0002167964 0 5269.509 12.521371 + 7950 16738.446 -0.00023848065 0 5269.5107 12.521385 + 8000 16738.423 0 0 5269.5035 12.521331 + 8050 16738.423 0 0 5269.5034 12.52133 + 8100 16738.478 -0.00069623408 0 5269.52 12.521452 + 8150 16738.523 -0.0040058355 0 5269.531 12.521499 + 8200 16738.486 -0.0092298325 0 5269.5142 12.521332 + 8250 16738.458 -0.023189665 0 5269.4914 12.521012 + 8300 16738.513 -0.045846242 0 5269.4861 12.520778 + 8350 16723.742 4.5698786 0 5269.4516 12.849386 + 8400 16738.466 -0.02016972 0 5269.497 12.835784 + 8450 16738.437 -0.012822703 0 5269.4952 12.829948 + 8500 16738.408 -0.0016836132 0 5269.4972 12.830073 + 8550 16738.464 -0.00097380297 0 5269.5155 12.830227 + 8600 16738.669 -0.050578946 0 5269.5304 12.829946 + 8650 15917.707 250.24016 0 5261.3702 24.544744 + 8700 16738.445 0.0010615265 0 5269.5117 10.589987 + 8750 16738.473 -0.010158834 0 5269.509 10.588904 + 8800 16738.468 0 0 5269.5176 10.589124 + 8850 16738.508 0 0 5269.5304 10.589223 + 8900 16738.509 0 0 5269.5306 10.589226 + 8950 16738.496 0 0 5269.5266 10.589195 + 9000 16738.477 0 0 5269.5204 10.589147 + 9050 16738.455 0 0 5269.5135 10.589092 + 9100 16738.477 0 0 5269.5206 10.589146 + 9150 16738.512 0 0 5269.5316 10.589233 + 9200 16738.502 0 0 5269.5285 10.58921 + 9250 16738.493 0 0 5269.5255 10.589186 + 9300 16738.482 0 0 5269.522 10.589159 + 9350 16738.46 0 0 5269.5151 10.589105 + 9400 16738.481 0 0 5269.5217 10.589155 + 9450 16738.509 0 0 5269.5307 10.589226 + 9500 16738.491 0 0 5269.5248 10.589181 + 9550 16738.484 0 0 5269.5227 10.589164 + 9600 16738.483 0 0 5269.5223 10.589161 + 9650 16738.464 0 0 5269.5166 10.589116 + 9700 16738.484 0 0 5269.5228 10.589164 + 9750 16738.507 0 0 5269.5301 10.589221 + 9800 16738.482 0 0 5269.5221 10.589159 + 9850 16738.478 0 0 5269.5208 10.589149 + 9900 16738.487 -0.00030979591 0 5269.5233 10.589165 + 9950 16738.476 -0.0009596827 0 5269.5193 10.589123 + 10000 16738.494 -0.0006271698 0 5269.5253 10.589175 +Loop time of 0.212511 on 4 procs for 10000 steps with 81 atoms -Performance: 385008.767 tau/day, 44561.200 timesteps/s -97.6% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 406566.385 tau/day, 47056.295 timesteps/s +91.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0032785 | 0.0039999 | 0.0052714 | 1.3 | 1.78 -Neigh | 0.010548 | 0.012524 | 0.016082 | 1.9 | 5.58 -Comm | 0.082771 | 0.087847 | 0.091037 | 1.1 | 39.15 -Output | 0.0042846 | 0.0045864 | 0.0054133 | 0.7 | 2.04 -Modify | 0.10401 | 0.10533 | 0.10736 | 0.4 | 46.94 -Other | | 0.01013 | | | 4.51 +Pair | 0.0032909 | 0.0039915 | 0.0048544 | 0.9 | 1.88 +Neigh | 0.011434 | 0.01325 | 0.016991 | 1.9 | 6.24 +Comm | 0.076038 | 0.082493 | 0.088069 | 1.5 | 38.82 +Output | 0.0031183 | 0.0045295 | 0.0086036 | 3.5 | 2.13 +Modify | 0.099662 | 0.10206 | 0.10679 | 0.9 | 48.02 +Other | | 0.00619 | | | 2.91 Nlocal: 20.25 ave 34 max 9 min Histogram: 2 0 0 0 0 0 0 1 0 1 diff --git a/examples/rigid/log.27Nov18.rigid.poems.g++.1 b/examples/rigid/log.27Nov18.rigid.poems.g++.1 new file mode 100644 index 0000000000..e279b8a73e --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.poems.g++.1 @@ -0,0 +1,338 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple rigid body system + +units lj +atom_style atomic + +pair_style lj/cut 2.5 + +read_data data.rigid + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 81 atoms + +velocity all create 100.0 4928459 + +# unconnected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 10 18 +#group clump3 id <> 19 27 +#group clump4 id <> 28 36 +#group clump5 id <> 37 45 +#group clump6 id <> 46 54 +#group clump7 id <> 55 63 +#group clump8 id <> 64 72 +#group clump9 id <> 73 81 + +#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 1 chain of connected bodies + +group clump1 id <> 1 9 +9 atoms in group clump1 +group clump2 id <> 9 18 +10 atoms in group clump2 +group clump3 id <> 18 27 +10 atoms in group clump3 +group clump4 id <> 27 36 +10 atoms in group clump4 +group clump5 id <> 36 45 +10 atoms in group clump5 +group clump6 id <> 45 54 +10 atoms in group clump6 +group clump7 id <> 54 63 +10 atoms in group clump7 +group clump8 id <> 63 72 +10 atoms in group clump8 +group clump9 id <> 72 81 +10 atoms in group clump9 + +fix 1 all poems group clump1 clump2 clump3 clump4 clump5 clump6 clump7 clump8 clump9 +1 clusters, 9 bodies, 8 joints, 81 atoms + +# 2 chains of connected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 9 18 +#group clump3 id <> 18 27 +#group clump4 id <> 27 36 +#group clump5 id <> 37 45 +#group clump6 id <> 45 54 +#group clump7 id <> 54 63 +#group clump8 id <> 63 72 +#group clump9 id <> 72 81 + +#fix 1 all poems group clump1 clump2 clump3 clump4 +#fix 2 all poems group clump5 clump6 clump7 clump8 clump9 + +neigh_modify exclude group clump1 clump1 +neigh_modify exclude group clump2 clump2 +neigh_modify exclude group clump3 clump3 +neigh_modify exclude group clump4 clump4 +neigh_modify exclude group clump5 clump5 +neigh_modify exclude group clump6 clump6 +neigh_modify exclude group clump7 clump7 +neigh_modify exclude group clump8 clump8 +neigh_modify exclude group clump9 clump9 + +thermo 100 + +#dump 1 all atom 50 dump.rigid.poems + +#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +timestep 0.0001 +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 18 18 18 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.292 | 3.292 | 3.292 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 217.7783 3430.3907 0 3466.6871 -2.7403788 + 50 13679.637 1404.2468 0 3684.1863 12.446066 + 100 16777.225 888.87665 0 3685.0808 -31.828677 + 150 19595.365 418.45042 0 3684.3446 40.709078 + 200 18524.188 596.47273 0 3683.8375 -0.8159371 + 250 21015.789 180.96521 0 3683.5967 -10.042469 + 300 20785.513 219.25314 0 3683.5053 2.6452719 + 350 21072.46 171.2554 0 3683.3321 7.0609024 + 400 19956.414 356.36381 0 3682.4328 19.320259 + 450 20724.42 227.73284 0 3681.8028 8.1259249 + 500 20152.578 322.71466 0 3681.4777 5.4929878 + 550 20017.022 345.29701 0 3681.4673 5.4661666 + 600 17897.743 698.72196 0 3681.6791 3.2854742 + 650 17297.758 796.60256 0 3679.5623 15.191113 + 700 18581.934 584.29715 0 3681.2861 5.1588289 + 750 21774.158 52.821062 0 3681.8474 -10.775664 + 800 21604.055 81.188546 0 3681.8644 -3.2045743 + 850 17821.483 711.53827 0 3681.7854 7.4384277 + 900 21033.292 175.98127 0 3681.5299 -16.345167 + 950 20968.166 186.59847 0 3681.2929 -2.330456 + 1000 20490.66 266.19375 0 3681.3037 11.787983 + 1050 20222.396 310.94072 0 3681.34 -8.3459539 + 1100 21321.687 127.61533 0 3681.2299 -1.2184717 + 1150 20849.582 206.01695 0 3680.9472 -0.86699149 + 1200 21815.003 45.317414 0 3681.1512 1.5988314 + 1250 18655.437 572.41453 0 3681.654 10.064078 + 1300 20780.781 217.36506 0 3680.8286 6.0538616 + 1350 20558.971 254.36482 0 3680.8601 -3.6773952 + 1400 21485.029 99.812921 0 3680.6511 -16.185473 + 1450 21771.107 52.15961 0 3680.6775 -2.4756673 + 1500 21520.948 93.503927 0 3680.3286 2.1023576 + 1550 21351.418 121.68137 0 3680.2511 5.5159947 + 1600 20778.805 216.92177 0 3680.0559 15.089188 + 1650 21477.638 100.21836 0 3679.8247 -1.1045746 + 1700 18501.339 596.47914 0 3680.0357 -15.679679 + 1750 18563.642 587.34785 0 3681.2882 33.532209 + 1800 19110.185 494.8234 0 3679.8543 18.024046 + 1850 21364.191 119.23545 0 3679.9339 2.5291103 + 1900 20146.626 322.14867 0 3679.9197 5.7313218 + 1950 20692.672 231.25325 0 3680.0319 4.2977763 + 2000 20943.904 189.11235 0 3679.7629 -22.645121 + 2050 19668.057 401.82994 0 3679.8394 3.6251916 + 2100 20280.442 299.76155 0 3679.8353 7.4807949 + 2150 19181.86 483.522 0 3680.4987 22.620507 + 2200 21300.161 130.70534 0 3680.7322 4.7102665 + 2250 20486.943 266.63931 0 3681.1299 -8.6456512 + 2300 18653.122 572.24819 0 3681.1018 -5.2637122 + 2350 21513.523 95.614901 0 3681.2021 -9.3621767 + 2400 21466.272 103.56446 0 3681.2765 -29.561368 + 2450 20100.105 332.27123 0 3682.2887 35.744287 + 2500 20764.395 221.6677 0 3682.4001 -12.468906 + 2550 20435.699 276.31055 0 3682.2603 -22.413697 + 2600 21466.467 104.53618 0 3682.2807 -10.078508 + 2650 20814.737 213.23892 0 3682.3617 5.1390411 + 2700 18565.761 588.3578 0 3682.6513 22.27664 + 2750 20772.36 220.1607 0 3682.2206 -7.9448198 + 2800 21018.563 179.10058 0 3682.1945 -7.0717829 + 2850 16789.412 884.21472 0 3682.4501 33.279015 + 2900 19304.363 464.75282 0 3682.1466 7.947554 + 2950 20513.758 263.07578 0 3682.0355 2.2361434 + 3000 20617.309 245.95251 0 3682.1706 -0.75213689 + 3050 18567.52 587.90473 0 3682.4914 -4.0112006 + 3100 18696.577 566.20617 0 3682.3023 -1.4814167 + 3150 19864.606 371.56078 0 3682.3284 8.9362836 + 3200 18902.643 532.04614 0 3682.4867 0.76630303 + 3250 21110.454 163.86212 0 3682.271 -1.6253894 + 3300 19369.939 454.05833 0 3682.3816 4.9066544 + 3350 19082.603 501.69905 0 3682.133 3.5982292 + 3400 19527.779 426.918 0 3681.5478 6.9612143 + 3450 19892.953 366.19989 0 3681.6921 3.0050426 + 3500 19708.981 396.84552 0 3681.6756 7.0757635 + 3550 20256.096 306.23937 0 3682.2554 -1.752138 + 3600 21289.889 133.93823 0 3682.253 -3.7462615 + 3650 18333.877 627.18028 0 3682.8264 -15.276791 + 3700 19829.133 377.33753 0 3682.1931 -6.269648 + 3750 20771.635 220.07171 0 3682.0109 -28.479036 + 3800 18373.813 619.79253 0 3682.0947 29.594781 + 3850 19320.99 461.92786 0 3682.0928 -5.3212101 + 3900 16119.825 995.68064 0 3682.3182 -8.4683118 + 3950 15556.948 1091.3655 0 3684.1902 20.98273 + 4000 20000.464 348.24891 0 3681.6596 7.1589745 + 4050 18870.219 536.59924 0 3681.6358 -3.7997025 + 4100 19889.518 367.49253 0 3682.4122 -14.091266 + 4150 15789.623 1051.3399 0 3682.9438 -4.4152389 + 4200 20548.889 256.83493 0 3681.6498 0.92234153 + 4250 20681.925 235.46113 0 3682.4487 -11.515773 + 4300 19330.404 460.80975 0 3682.5437 -22.351775 + 4350 19369.443 453.35405 0 3681.5945 29.418242 + 4400 20762.165 222.24133 0 3682.6021 2.6627047 + 4450 19984.657 350.71294 0 3681.4891 28.88731 + 4500 21167.58 154.25344 0 3682.1834 -3.0784322 + 4550 18133.576 660.73671 0 3682.9995 2.5305835 + 4600 19935.069 360.36826 0 3682.8798 2.4575034 + 4650 21413.76 113.86464 0 3682.8246 -5.1271547 + 4700 21716.333 63.609419 0 3682.9982 -2.4708049 + 4750 21352.947 124.36961 0 3683.1941 -0.29026265 + 4800 19043.788 508.8617 0 3682.8264 14.797006 + 4850 20516.121 263.78758 0 3683.1411 7.1348281 + 4900 20624.5 245.81827 0 3683.235 0.34708051 + 4950 20317.197 296.68937 0 3682.8889 -0.55065946 + 5000 18346.865 625.37246 0 3683.1832 7.3371413 + 5050 18867.53 538.49153 0 3683.0799 1.9249866 + 5100 18790.276 551.17224 0 3682.885 2.2333017 + 5150 20241.365 311.84683 0 3685.4076 -3.998004 + 5200 17685.058 739.76418 0 3687.2739 3.2835025 + 5250 18496.626 604.58166 0 3687.3526 -10.185776 + 5300 18420.042 617.82026 0 3687.8273 -16.392458 + 5350 18767.338 559.0349 0 3686.9246 4.5320767 + 5400 20423.245 284.90517 0 3688.7794 -8.6356656 + 5450 21080.398 176.18494 0 3689.5846 -16.450038 + 5500 16684.424 909.12643 0 3689.8637 49.94555 + 5550 20132.31 335.03663 0 3690.4216 -16.018038 + 5600 20430.923 285.17562 0 3690.3295 -5.0773675 + 5650 20479.943 276.55962 0 3689.8834 5.4334564 + 5700 20061.532 345.95553 0 3689.5441 -16.230658 + 5750 20523.759 268.92217 0 3689.5487 -4.4128812 + 5800 18900.356 537.65462 0 3687.7139 13.605549 + 5850 20280.502 310.27193 0 3690.3556 -4.7884959 + 5900 19050.26 515.66087 0 3690.7042 7.8864722 + 5950 19566.917 430.2997 0 3691.4525 31.715268 + 6000 18878.118 544.75449 0 3691.1076 -4.2415329 + 6050 19308.682 471.70734 0 3689.821 -10.561614 + 6100 18776.194 560.04764 0 3689.4133 -7.7286747 + 6150 21475.064 110.1508 0 3689.3281 -3.6506391 + 6200 19975 360.82675 0 3689.9934 10.282021 + 6250 21396.341 123.5341 0 3689.5909 -5.7215163 + 6300 18533.423 600.87422 0 3689.778 15.408027 + 6350 20653.152 247.19253 0 3689.3846 8.5607784 + 6400 19716.537 403.41487 0 3689.5044 13.165575 + 6450 21120.66 168.79838 0 3688.9084 -0.50382728 + 6500 19700.345 404.7155 0 3688.1064 13.941375 + 6550 10818.393 1892.037 0 3695.1025 38.423155 + 6600 18684.478 574.84755 0 3688.9273 5.9176985 + 6650 19219.732 486.04269 0 3689.3314 18.287659 + 6700 20058.587 344.88255 0 3687.9804 6.5372086 + 6750 21279.318 142.77333 0 3689.3264 2.498188 + 6800 20671.545 244.25024 0 3689.5078 -4.1356416 + 6850 21203.598 155.82001 0 3689.753 -0.0083061182 + 6900 21699.344 73.301497 0 3689.8588 -8.0309898 + 6950 20951.212 197.19403 0 3689.0627 0.76668303 + 7000 20166.275 329.02869 0 3690.0746 2.0083318 + 7050 21554.944 97.465792 0 3689.9564 -3.2420086 + 7100 20817.494 220.25476 0 3689.8372 0.17206182 + 7150 21481.11 109.84029 0 3690.0253 -3.6814741 + 7200 21266.824 145.53099 0 3690.0016 -2.060543 + 7250 19434.684 450.81331 0 3689.9273 9.4822765 + 7300 21246.525 148.96573 0 3690.0532 3.3208839 + 7350 19749.269 398.60049 0 3690.1454 1.0929662 + 7400 20354.792 297.70261 0 3690.168 1.547159 + 7450 19996.859 357.16723 0 3689.977 -0.68412025 + 7500 20179.628 326.53243 0 3689.8038 -2.4805507 + 7550 18765.184 561.65039 0 3689.1811 -1.7976428 + 7600 19457.496 447.04428 0 3689.9603 -1.9055522 + 7650 18206.823 655.57276 0 3690.0433 1.2797964 + 7700 19152.344 497.77422 0 3689.8315 18.145069 + 7750 21387.484 125.48654 0 3690.0673 -2.9915772 + 7800 18127.052 668.61425 0 3689.7896 9.044869 + 7850 21419.557 120.08889 0 3690.015 6.2651717 + 7900 21817.182 53.739819 0 3689.9368 -4.2387416 + 7950 18215.195 654.15494 0 3690.0208 -54.628049 + 8000 21523.503 102.58018 0 3689.8307 -4.84236 + 8050 20720.799 236.28689 0 3689.7535 -9.3725225 + 8100 21196.483 157.3232 0 3690.0704 -7.7222497 + 8150 20869.667 211.65308 0 3689.9309 -6.8438295 + 8200 17790.052 725.72497 0 3690.7336 -25.697688 + 8250 19634.94 417.71929 0 3690.2094 8.861604 + 8300 19135.784 500.92443 0 3690.2218 -3.1245167 + 8350 20191.718 324.93312 0 3690.2195 6.5736107 + 8400 20695.239 241.02378 0 3690.2302 -14.592221 + 8450 21793.857 57.609525 0 3689.9191 -11.509747 + 8500 21271.088 144.43102 0 3689.6124 -0.091587085 + 8550 20064.337 345.21754 0 3689.2737 9.5058471 + 8600 20282.86 308.2307 0 3688.7074 2.265529 + 8650 21223.055 151.24306 0 3688.419 1.7296834 + 8700 18875.342 542.42055 0 3688.3108 6.367148 + 8750 20922.65 201.55122 0 3688.6595 3.4208578 + 8800 21406.54 120.8539 0 3688.6106 1.8253729 + 8850 19868.524 377.05623 0 3688.477 16.327796 + 8900 20025.322 348.94892 0 3686.5025 17.063406 + 8950 21224.374 151.3567 0 3688.7524 -0.11028753 + 9000 21318.309 135.862 0 3688.9135 -0.50826819 + 9050 17538.618 768.00136 0 3691.1043 37.978645 + 9100 21247.861 147.84641 0 3689.1566 -6.7773259 + 9150 18455.677 613.08767 0 3689.0339 -3.4844751 + 9200 19486.859 441.03829 0 3688.8482 -18.602827 + 9250 21774.926 59.710446 0 3688.8648 -13.379919 + 9300 17628.877 750.72321 0 3688.8694 27.797974 + 9350 19827.334 383.85708 0 3688.4128 6.5459021 + 9400 20020.126 351.61742 0 3688.3051 -14.332562 + 9450 21596.338 88.904175 0 3688.2939 1.5779716 + 9500 18981.418 524.60141 0 3688.1711 5.4352409 + 9550 18652.616 579.05144 0 3687.8208 25.600729 + 9600 21198.037 155.23097 0 3688.2371 -3.3586596 + 9650 19958.317 361.32544 0 3687.7115 4.2910178 + 9700 19129.101 499.5993 0 3687.7828 13.267102 + 9750 21913.967 35.689587 0 3688.0174 -7.3222905 + 9800 21314.694 135.43794 0 3687.8869 -9.5613518 + 9850 20899.743 204.82802 0 3688.1185 -2.6321428 + 9900 20288.244 306.5013 0 3687.8753 3.6196618 + 9950 19271.015 475.88527 0 3687.7211 -1.8196764 + 10000 21122.24 167.82714 0 3688.2005 -3.8464842 +Loop time of 6.61148 on 1 procs for 10000 steps with 81 atoms + +Performance: 13068.179 tau/day, 1512.521 timesteps/s +97.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.14595 | 0.14595 | 0.14595 | 0.0 | 2.21 +Neigh | 0.10704 | 0.10704 | 0.10704 | 0.0 | 1.62 +Comm | 0.013317 | 0.013317 | 0.013317 | 0.0 | 0.20 +Output | 0.0047956 | 0.0047956 | 0.0047956 | 0.0 | 0.07 +Modify | 6.3318 | 6.3318 | 6.3318 | 0.0 | 95.77 +Other | | 0.008603 | | | 0.13 + +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 95 ave 95 max 95 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 744 ave 744 max 744 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 744 +Ave neighs/atom = 9.18519 +Neighbor list builds = 992 +Dangerous builds = 941 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:06 diff --git a/examples/rigid/log.27Nov18.rigid.poems.g++.4 b/examples/rigid/log.27Nov18.rigid.poems.g++.4 new file mode 100644 index 0000000000..55ecca3067 --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.poems.g++.4 @@ -0,0 +1,338 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple rigid body system + +units lj +atom_style atomic + +pair_style lj/cut 2.5 + +read_data data.rigid + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 81 atoms + +velocity all create 100.0 4928459 + +# unconnected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 10 18 +#group clump3 id <> 19 27 +#group clump4 id <> 28 36 +#group clump5 id <> 37 45 +#group clump6 id <> 46 54 +#group clump7 id <> 55 63 +#group clump8 id <> 64 72 +#group clump9 id <> 73 81 + +#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 1 chain of connected bodies + +group clump1 id <> 1 9 +9 atoms in group clump1 +group clump2 id <> 9 18 +10 atoms in group clump2 +group clump3 id <> 18 27 +10 atoms in group clump3 +group clump4 id <> 27 36 +10 atoms in group clump4 +group clump5 id <> 36 45 +10 atoms in group clump5 +group clump6 id <> 45 54 +10 atoms in group clump6 +group clump7 id <> 54 63 +10 atoms in group clump7 +group clump8 id <> 63 72 +10 atoms in group clump8 +group clump9 id <> 72 81 +10 atoms in group clump9 + +fix 1 all poems group clump1 clump2 clump3 clump4 clump5 clump6 clump7 clump8 clump9 +1 clusters, 9 bodies, 8 joints, 81 atoms + +# 2 chains of connected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 9 18 +#group clump3 id <> 18 27 +#group clump4 id <> 27 36 +#group clump5 id <> 37 45 +#group clump6 id <> 45 54 +#group clump7 id <> 54 63 +#group clump8 id <> 63 72 +#group clump9 id <> 72 81 + +#fix 1 all poems group clump1 clump2 clump3 clump4 +#fix 2 all poems group clump5 clump6 clump7 clump8 clump9 + +neigh_modify exclude group clump1 clump1 +neigh_modify exclude group clump2 clump2 +neigh_modify exclude group clump3 clump3 +neigh_modify exclude group clump4 clump4 +neigh_modify exclude group clump5 clump5 +neigh_modify exclude group clump6 clump6 +neigh_modify exclude group clump7 clump7 +neigh_modify exclude group clump8 clump8 +neigh_modify exclude group clump9 clump9 + +thermo 100 + +#dump 1 all atom 50 dump.rigid.poems + +#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +timestep 0.0001 +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 18 18 18 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.263 | 3.357 | 3.638 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 217.7783 3430.3907 0 3466.6871 -2.7403788 + 50 13679.637 1404.2468 0 3684.1863 12.446066 + 100 16777.225 888.87665 0 3685.0808 -31.828677 + 150 19595.365 418.45042 0 3684.3446 40.709078 + 200 18524.188 596.47273 0 3683.8375 -0.8159371 + 250 21015.789 180.96521 0 3683.5967 -10.042469 + 300 20785.513 219.25314 0 3683.5053 2.6452719 + 350 21072.46 171.2554 0 3683.3321 7.0609024 + 400 19956.414 356.36381 0 3682.4328 19.320259 + 450 20724.42 227.73284 0 3681.8028 8.1259249 + 500 20152.578 322.71466 0 3681.4777 5.4929878 + 550 20017.022 345.29701 0 3681.4673 5.4661666 + 600 17897.743 698.72196 0 3681.6791 3.2854742 + 650 17297.758 796.60256 0 3679.5623 15.191113 + 700 18581.934 584.29715 0 3681.2861 5.1588289 + 750 21774.158 52.821062 0 3681.8474 -10.775664 + 800 21604.055 81.188546 0 3681.8644 -3.2045743 + 850 17821.483 711.53827 0 3681.7854 7.4384276 + 900 21033.292 175.98127 0 3681.5299 -16.345167 + 950 20968.166 186.59847 0 3681.2929 -2.330456 + 1000 20490.66 266.19375 0 3681.3037 11.787983 + 1050 20222.396 310.94072 0 3681.34 -8.3459539 + 1100 21321.687 127.61533 0 3681.2299 -1.2184718 + 1150 20849.582 206.01695 0 3680.9472 -0.8669916 + 1200 21815.003 45.317417 0 3681.1512 1.5988314 + 1250 18655.437 572.41453 0 3681.654 10.064076 + 1300 20780.781 217.36504 0 3680.8286 6.0538619 + 1350 20558.972 254.3648 0 3680.8601 -3.6773987 + 1400 21485.029 99.812949 0 3680.6511 -16.185471 + 1450 21771.108 52.15959 0 3680.6775 -2.4756681 + 1500 21520.948 93.503949 0 3680.3286 2.1023578 + 1550 21351.418 121.6814 0 3680.2511 5.5159978 + 1600 20778.805 216.92171 0 3680.0559 15.089182 + 1650 21477.639 100.2182 0 3679.8247 -1.1045944 + 1700 18501.343 596.47853 0 3680.0357 -15.67963 + 1750 18563.643 587.34767 0 3681.2882 33.532167 + 1800 19110.19 494.82264 0 3679.8543 18.024034 + 1850 21364.196 119.23454 0 3679.9339 2.5291491 + 1900 20146.643 322.14595 0 3679.9197 5.731152 + 1950 20692.67 231.25357 0 3680.0319 4.2977641 + 2000 20943.904 189.11223 0 3679.763 -22.645645 + 2050 19668.152 401.81407 0 3679.8394 3.6255896 + 2100 20280.572 299.73976 0 3679.8351 7.4809355 + 2150 19182.121 483.47905 0 3680.4992 22.615309 + 2200 21299.76 130.77281 0 3680.7327 4.7114154 + 2250 20487.784 266.4995 0 3681.1302 -8.6406776 + 2300 18655.125 571.91487 0 3681.1023 -5.2671669 + 2350 21512.614 95.766913 0 3681.2025 -9.3523428 + 2400 21467.773 103.31519 0 3681.2773 -29.600307 + 2450 20096.937 332.80159 0 3682.2911 35.890912 + 2500 20761.446 222.16118 0 3682.4022 -12.528127 + 2550 20409.6 280.67234 0 3682.2723 -22.277373 + 2600 21469.964 103.95529 0 3682.2826 -10.038267 + 2650 20708.138 231.00516 0 3682.3615 5.3659502 + 2700 18584.743 585.07862 0 3682.5357 21.785261 + 2750 20503.019 264.91491 0 3682.0847 -4.5583917 + 2800 20584.075 251.44664 0 3682.1258 -6.5084595 + 2850 17277.076 802.33356 0 3681.8462 15.519513 + 2900 19392.956 449.92915 0 3682.0885 -4.3829957 + 2950 18371.786 620.29835 0 3682.2626 7.2117592 + 3000 20412.015 280.25302 0 3682.2555 0.32492606 + 3050 20858.248 205.65269 0 3682.0273 4.5055715 + 3100 21561.094 88.438447 0 3681.9541 -3.7523733 + 3150 15471.278 1103.4497 0 3681.9961 -14.576367 + 3200 15386.973 1117.8815 0 3682.377 15.051163 + 3250 19741.037 392.04755 0 3682.2204 -2.6610995 + 3300 20870.191 203.58229 0 3681.9475 -4.7795545 + 3350 16648.228 907.66571 0 3682.3704 -8.9242511 + 3400 20104.016 331.58603 0 3682.2554 6.4783858 + 3450 21421.316 112.28228 0 3682.5015 -8.3484987 + 3500 19284.533 467.80739 0 3681.8962 -12.835452 + 3550 20160.125 322.4476 0 3682.4684 1.6574827 + 3600 16682.415 902.73752 0 3683.14 22.383296 + 3650 16762.19 890.14636 0 3683.8446 16.119412 + 3700 17858.568 707.37212 0 3683.8 -1.6582504 + 3750 20029.881 345.15986 0 3683.4733 -3.1415889 + 3800 20734 227.99158 0 3683.6582 -7.9580418 + 3850 20741.089 226.39408 0 3683.2423 8.3055765 + 3900 18671.251 571.42296 0 3683.2981 -3.7468858 + 3950 19547.209 423.14256 0 3681.0108 5.8312279 + 4000 19739.799 393.58799 0 3683.5544 18.604884 + 4050 20014.121 347.8176 0 3683.5044 9.93387 + 4100 20503.654 266.08691 0 3683.3626 8.1304118 + 4150 18309.702 632.29807 0 3683.9151 -0.0021480359 + 4200 20509.423 265.60353 0 3683.8408 -2.1658857 + 4250 21805.541 50.325935 0 3684.5828 1.082842 + 4300 21420.551 114.90431 0 3684.9962 -1.7985998 + 4350 20256.928 308.74187 0 3684.8966 -11.669472 + 4400 21633.488 79.629274 0 3685.2106 -0.96131785 + 4450 20793.327 219.66955 0 3685.2241 1.3752349 + 4500 18719.484 564.86754 0 3684.7816 2.6308699 + 4550 20966.335 190.68308 0 3685.0722 -18.587627 + 4600 19428.962 446.59618 0 3684.7565 -4.4051672 + 4650 18408.956 616.85009 0 3685.0095 2.777272 + 4700 19215.779 482.57562 0 3685.2054 19.441016 + 4750 20155.927 326.13401 0 3685.4553 6.1734993 + 4800 20918.085 199.31832 0 3685.6659 3.4407437 + 4850 20236.958 312.07276 0 3684.899 3.2612893 + 4900 21419.89 115.36879 0 3685.3505 -4.675951 + 4950 19707.901 401.14828 0 3685.7985 -10.730734 + 5000 19407.201 450.64394 0 3685.1775 17.518981 + 5050 21527.598 97.655186 0 3685.5882 -9.2294707 + 5100 21581.933 88.595517 0 3685.5843 -20.669485 + 5150 21161.214 158.48503 0 3685.3541 -2.7587502 + 5200 21166.679 157.24762 0 3685.0275 -18.180044 + 5250 20909.576 200.23507 0 3685.1644 -16.617303 + 5300 21911.746 33.236563 0 3685.1942 -5.8313967 + 5350 20857.303 208.87453 0 3685.0916 12.176312 + 5400 20958.96 191.96694 0 3685.1269 3.6116429 + 5450 20433.179 279.61178 0 3685.1415 13.324529 + 5500 19604.675 416.88499 0 3684.3308 21.536484 + 5550 18171.145 655.92915 0 3684.4534 -9.2269804 + 5600 19799.907 385.12116 0 3685.1056 22.202165 + 5650 19711.882 399.30581 0 3684.6194 15.93063 + 5700 17908.833 699.52405 0 3684.3295 0.35530356 + 5750 18606.518 583.538 0 3684.6243 -4.4540843 + 5800 21814.053 48.974627 0 3684.6501 -1.5206358 + 5850 18029.107 679.9357 0 3684.7868 12.137677 + 5900 21090.739 169.64502 0 3684.7682 -1.5051545 + 5950 21086.26 170.29075 0 3684.6674 -2.8164474 + 6000 21285.771 136.95608 0 3684.5846 -26.582739 + 6050 21203.994 150.87822 0 3684.8772 -2.6617226 + 6100 21481.553 104.57796 0 3684.8368 -16.524974 + 6150 20354.4 292.57675 0 3684.9767 2.7960207 + 6200 21326.591 130.75243 0 3685.1843 -1.5929194 + 6250 21505.087 101.07817 0 3685.2593 -3.7821931 + 6300 21296.273 135.6593 0 3685.0382 -0.55635908 + 6350 21295.389 135.86485 0 3685.0964 5.6614093 + 6400 16552.242 926.02655 0 3684.7336 14.177218 + 6450 20148.951 327.1151 0 3685.2736 7.4561085 + 6500 20962.151 191.79415 0 3685.486 -4.5436711 + 6550 21710.328 67.433972 0 3685.8219 -5.7678572 + 6600 20698.571 234.79099 0 3684.5528 -2.1984068 + 6650 17892.287 704.05484 0 3686.1026 11.525836 + 6700 21272.999 141.26589 0 3686.7657 0.44088069 + 6750 19558.993 426.46448 0 3686.2966 -16.907401 + 6800 20350.247 295.23951 0 3686.9474 1.1284348 + 6850 18665.05 573.5326 0 3684.3742 17.088712 + 6900 19769.199 392.1551 0 3687.0216 6.7562425 + 6950 19439.159 446.99138 0 3686.8512 -6.0105763 + 7000 19379.907 456.53471 0 3686.5192 -9.0505095 + 7050 19983.754 356.02523 0 3686.651 -5.6274314 + 7100 19867.737 375.47627 0 3686.7658 17.315482 + 7150 19258.794 477.47344 0 3687.2724 14.316676 + 7200 21282.428 139.96051 0 3687.0318 -0.77043459 + 7250 19828.603 381.98919 0 3686.7564 6.5142869 + 7300 20574.582 257.8245 0 3686.9215 -3.6547118 + 7350 21613.467 84.771568 0 3687.0161 -7.5188826 + 7400 21817.009 50.844944 0 3687.0131 -14.888864 + 7450 14937.538 1197.4257 0 3687.0154 1.7540499 + 7500 18326.914 632.40374 0 3686.8894 8.3397357 + 7550 13611.007 1418.4727 0 3686.9739 -19.379482 + 7600 19173.985 491.9482 0 3687.6123 17.229001 + 7650 16911.504 867.33649 0 3685.9204 -21.042834 + 7700 21752.116 61.143705 0 3686.4963 -10.344487 + 7750 20208.337 318.26355 0 3686.3197 13.385814 + 7800 21649.909 77.950987 0 3686.2692 -1.7911084 + 7850 20139.64 329.50319 0 3686.1098 -5.5805093 + 7900 21355.026 126.7642 0 3685.9352 -7.7062172 + 7950 21336.178 129.88925 0 3685.9188 -2.059298 + 8000 21047.596 177.71546 0 3685.6482 0.37963466 + 8050 19217.351 482.62331 0 3685.5152 6.5582595 + 8100 20499.057 268.7173 0 3685.2268 -1.1959737 + 8150 21494.301 102.83829 0 3685.2219 -1.6427647 + 8200 20074.928 339.19817 0 3685.0195 6.285123 + 8250 17335.157 793.47566 0 3682.6685 22.877381 + 8300 17340.544 794.62619 0 3684.7168 3.9147755 + 8350 20529.345 262.51162 0 3684.0691 4.031768 + 8400 18884.747 537.47827 0 3684.9361 22.853404 + 8450 20341.86 293.10484 0 3683.4148 0.33856656 + 8500 19300.282 467.58127 0 3684.2949 12.35507 + 8550 21631.936 78.254534 0 3683.5772 -10.992959 + 8600 20204.913 316.83233 0 3684.3178 20.74228 + 8650 21018.189 181.32054 0 3684.352 1.8412068 + 8700 20161.304 323.97907 0 3684.1964 -2.646629 + 8750 19081.79 504.00155 0 3684.2998 -10.088053 + 8800 20834.489 211.76247 0 3684.1773 14.896336 + 8850 20929.355 196.18335 0 3684.4092 -1.2602398 + 8900 21491.074 102.47788 0 3684.3235 -1.4696758 + 8950 20474.735 271.69461 0 3684.1504 -6.9489258 + 9000 21128.641 162.40732 0 3683.8474 -7.7928168 + 9050 18421.801 614.46442 0 3684.7646 24.40313 + 9100 19301.292 466.98873 0 3683.8707 4.4687046 + 9150 21575.705 88.213763 0 3684.1646 -0.94696984 + 9200 20004.776 350.05448 0 3684.1838 -7.3466605 + 9250 21384.079 120.14472 0 3684.1578 -8.3773844 + 9300 21980.599 20.702393 0 3684.1356 -12.666293 + 9350 21686.606 69.517984 0 3683.9524 -8.8366533 + 9400 20732.704 228.46247 0 3683.9131 -6.4080307 + 9450 19798.859 384.34696 0 3684.1568 7.6198484 + 9500 20270.695 305.22664 0 3683.6758 1.5862486 + 9550 16496.156 935.28481 0 3684.6441 15.001468 + 9600 20642.429 241.08853 0 3681.4934 -9.2159382 + 9650 21292.587 135.4474 0 3684.2119 -0.54770976 + 9700 18888.158 536.60518 0 3684.6315 5.3236926 + 9750 18750.018 559.35922 0 3684.3623 -9.9424949 + 9800 20544.772 259.71076 0 3683.8394 8.732202 + 9850 16698.125 901.90076 0 3684.9216 9.9553329 + 9900 21450.963 109.58687 0 3684.7474 -4.8001999 + 9950 20664.461 240.66995 0 3684.7468 -3.4840781 + 10000 18951.367 526.45428 0 3685.0155 21.512727 +Loop time of 8.99246 on 4 procs for 10000 steps with 81 atoms + +Performance: 9608.051 tau/day, 1112.043 timesteps/s +93.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.01308 | 0.038162 | 0.084123 | 14.4 | 0.42 +Neigh | 0.017227 | 0.032774 | 0.061983 | 10.0 | 0.36 +Comm | 1.329 | 1.5822 | 1.8017 | 13.5 | 17.60 +Output | 0.014984 | 0.029676 | 0.046035 | 6.6 | 0.33 +Modify | 6.8022 | 7.1104 | 7.4356 | 8.6 | 79.07 +Other | | 0.1992 | | | 2.22 + +Nlocal: 20.25 ave 81 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 46.25 ave 95 max 14 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 249.25 ave 997 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 997 +Ave neighs/atom = 12.3086 +Neighbor list builds = 993 +Dangerous builds = 943 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:09 diff --git a/examples/rigid/log.27Nov18.rigid.poems2.g++.1 b/examples/rigid/log.27Nov18.rigid.poems2.g++.1 new file mode 100644 index 0000000000..071e9bcc52 --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.poems2.g++.1 @@ -0,0 +1,342 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple rigid body system + +units lj +atom_style atomic + +pair_style lj/cut 2.5 + +read_data data.rigid + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 81 atoms + +velocity all create 100.0 4928459 + +# unconnected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 10 18 +#group clump3 id <> 19 27 +#group clump4 id <> 28 36 +#group clump5 id <> 37 45 +#group clump6 id <> 46 54 +#group clump7 id <> 55 63 +#group clump8 id <> 64 72 +#group clump9 id <> 73 81 + +#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 1 chain of connected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 9 18 +#group clump3 id <> 18 27 +#group clump4 id <> 27 36 +#group clump5 id <> 36 45 +#group clump6 id <> 45 54 +#group clump7 id <> 54 63 +#group clump8 id <> 63 72 +#group clump9 id <> 72 81 + +#fix 1 all poems group clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 2 chains of connected bodies + +group clump1 id <> 1 9 +9 atoms in group clump1 +group clump2 id <> 9 18 +10 atoms in group clump2 +group clump3 id <> 18 27 +10 atoms in group clump3 +group clump4 id <> 27 36 +10 atoms in group clump4 +group clump5 id <> 37 45 +9 atoms in group clump5 +group clump6 id <> 45 54 +10 atoms in group clump6 +group clump7 id <> 54 63 +10 atoms in group clump7 +group clump8 id <> 63 72 +10 atoms in group clump8 +group clump9 id <> 72 81 +10 atoms in group clump9 + +fix 1 all poems group clump1 clump2 clump3 clump4 +1 clusters, 4 bodies, 3 joints, 36 atoms +fix 2 all poems group clump5 clump6 clump7 clump8 clump9 +1 clusters, 5 bodies, 4 joints, 45 atoms + +neigh_modify exclude group clump1 clump1 +neigh_modify exclude group clump2 clump2 +neigh_modify exclude group clump3 clump3 +neigh_modify exclude group clump4 clump4 +neigh_modify exclude group clump5 clump5 +neigh_modify exclude group clump6 clump6 +neigh_modify exclude group clump7 clump7 +neigh_modify exclude group clump8 clump8 +neigh_modify exclude group clump9 clump9 + +thermo 100 + +#dump 1 all atom 50 dump.rigid.poems2 + +#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +timestep 0.0001 +thermo 50 +run 10000 +WARNING: More than one fix poems (src/POEMS/fix_poems.cpp:363) +WARNING: More than one fix poems (src/POEMS/fix_poems.cpp:363) +WARNING: One or more atoms are time integrated more than once (src/modify.cpp:283) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 18 18 18 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.854 | 3.854 | 3.854 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 196.00047 3632.2347 0 3668.5311 -2.7403788 + 50 12167.633 1505.5478 0 3758.8133 35.125973 + 100 17556.978 512.66277 0 3763.9549 11.137534 + 150 19579.586 138.04942 0 3763.8987 -29.953971 + 200 19757.51 105.30542 0 3764.1036 -0.030645317 + 250 18218.374 390.10747 0 3763.8804 13.711001 + 300 19383.039 174.40688 0 3763.8586 5.7240693 + 350 20125.986 36.972611 0 3764.0071 1.9559205 + 400 18888.816 266.10975 0 3764.0386 9.6362168 + 450 19307.656 188.2511 0 3763.743 1.9326206 + 500 16331.197 738.56392 0 3762.8597 9.1715579 + 550 19318.722 186.16172 0 3763.7027 3.0115336 + 600 19455.268 161.20621 0 3764.0336 0.55208034 + 650 18487.011 340.03216 0 3763.5528 -8.0359122 + 700 17321.201 556.32471 0 3763.9545 -13.631751 + 750 18979.187 249.04389 0 3763.7082 -2.6072455 + 800 19342.456 181.85552 0 3763.7918 8.1918726 + 850 19070.641 232.19342 0 3763.7936 7.3148472 + 900 19478.873 156.65987 0 3763.8586 2.4284987 + 950 19912.415 76.437437 0 3763.9216 -1.4667227 + 1000 16003.749 802.39753 0 3766.0548 46.642188 + 1050 19859.583 86.64176 0 3764.3424 -2.1961943 + 1100 19229.575 203.61488 0 3764.6473 -10.632365 + 1150 18821.6 279.15861 0 3764.64 -0.89495035 + 1200 19392.695 173.59744 0 3764.8373 1.8508753 + 1250 16459.624 717.32104 0 3765.3995 33.478127 + 1300 19343.863 182.59043 0 3764.7874 0.75890736 + 1350 20019.643 57.503573 0 3764.8448 0.31444671 + 1400 18549.582 329.31436 0 3764.4221 10.738303 + 1450 15163.926 957.47585 0 3765.6103 -17.923459 + 1500 19223.688 204.15175 0 3764.0939 -1.6134531 + 1550 18147.996 404.12677 0 3764.8668 8.4194779 + 1600 18615.043 317.42467 0 3764.6548 -2.3288934 + 1650 20120.654 38.887913 0 3764.935 -8.7620277 + 1700 19450.907 162.98272 0 3765.0025 2.3254731 + 1750 19374.632 177.37966 0 3765.2744 8.9328774 + 1800 19424.404 167.93966 0 3765.0514 0.081230261 + 1850 17936.249 442.84231 0 3764.3699 6.6010636 + 1900 19982.595 64.406198 0 3764.8868 -2.9529813 + 1950 16215.852 761.91287 0 3764.8485 13.994708 + 2000 18584.422 322.12049 0 3763.68 7.1654003 + 2050 20107.965 41.025754 0 3764.723 -0.3109069 + 2100 20002.333 60.593017 0 3764.7288 -6.7919784 + 2150 16949.762 626.59623 0 3765.441 3.508941 + 2200 20010.953 58.808279 0 3764.5403 -10.862172 + 2250 18982.73 247.00892 0 3762.3292 -0.53807815 + 2300 18401.298 354.87973 0 3762.5274 1.0920554 + 2350 19390.524 172.9415 0 3763.7793 -3.3524932 + 2400 16080.801 786.38838 0 3764.3146 -16.200514 + 2450 18870.412 268.74976 0 3763.2705 11.197736 + 2500 19688.29 117.58223 0 3763.5618 4.382644 + 2550 18870.825 268.78678 0 3763.384 -5.6623656 + 2600 17019.35 611.70808 0 3763.4395 6.3109641 + 2650 18753.285 291.0596 0 3763.8902 2.4120296 + 2700 19742.456 107.20901 0 3763.2193 -0.33061303 + 2750 19522.438 148.16759 0 3763.4339 -1.6254851 + 2800 18304.801 372.55152 0 3762.3295 22.6368 + 2850 18465.36 343.48495 0 3762.9961 4.4169272 + 2900 20151.999 31.372926 0 3763.2245 1.2013699 + 2950 15498.143 892.80071 0 3762.8272 13.263724 + 3000 18728.301 294.65113 0 3762.855 8.1897838 + 3050 18538.466 330.25223 0 3763.3015 8.5865739 + 3100 19081.409 229.5907 0 3763.1849 -4.8573813 + 3150 18498.802 337.11548 0 3762.8195 1.0555321 + 3200 19925.897 73.358029 0 3763.339 -7.7325108 + 3250 19780.108 100.23785 0 3763.2209 -5.5974972 + 3300 19221.043 203.82387 0 3763.2763 4.2703251 + 3350 19025.292 240.11329 0 3763.3156 5.7708328 + 3400 18153.696 401.52086 0 3763.3164 21.076943 + 3450 18611.375 316.50396 0 3763.0548 -3.5484945 + 3500 19931.319 71.969274 0 3762.9543 1.8764978 + 3550 19747.562 106.05439 0 3763.0103 -2.5506186 + 3600 18491.39 338.4134 0 3762.7449 -4.0527808 + 3650 19757.998 104.19207 0 3763.0806 1.4865598 + 3700 20108.003 39.345514 0 3763.0498 0.062827129 + 3750 19222.505 203.28065 0 3763.0039 0.33719277 + 3800 19286.383 191.08831 0 3762.6406 -0.1826802 + 3850 19450.083 161.09138 0 3762.9587 -0.2708263 + 3900 18002.304 429.25655 0 3763.0166 -4.6832439 + 3950 17186.829 582.26502 0 3765.0111 55.816834 + 4000 16826.434 645.84974 0 3761.856 19.675962 + 4050 19227.526 202.18151 0 3762.8344 -0.2596098 + 4100 19908.792 76.084531 0 3762.8978 -2.796813 + 4150 17821.329 462.63065 0 3762.8768 13.069155 + 4200 19917.133 74.574998 0 3762.9329 -6.4181155 + 4250 19012.618 241.96787 0 3762.823 4.0847974 + 4300 19077.34 229.98133 0 3762.8221 4.324323 + 4350 19361.128 177.47406 0 3762.8681 -7.377974 + 4400 18565.044 324.95107 0 3762.9223 2.5229032 + 4450 19352.406 178.98756 0 3762.7665 0.10862717 + 4500 18482.218 340.15496 0 3762.788 12.518301 + 4550 18359.732 362.83749 0 3762.7879 3.7500902 + 4600 19623.618 128.71624 0 3762.7196 -1.1328521 + 4650 17565.707 509.99904 0 3762.9078 1.7135935 + 4700 19876.052 81.892814 0 3762.6431 0.32476108 + 4750 19022.676 239.92262 0 3762.6403 -0.24613022 + 4800 18862.685 269.24248 0 3762.3324 6.2733979 + 4850 19899.174 77.426145 0 3762.4584 0.42535238 + 4900 18250.865 382.72867 0 3762.5185 23.308462 + 4950 18895.847 263.22651 0 3762.4575 8.0634675 + 5000 19096.705 225.69358 0 3762.1204 3.6816481 + 5050 16546.294 698.91312 0 3763.0416 17.453618 + 5100 19501.208 151.20999 0 3762.5449 -1.1231291 + 5150 19479.879 155.00669 0 3762.3917 -3.983378 + 5200 17397.818 541.23039 0 3763.0485 6.1109992 + 5250 18564.869 324.10557 0 3762.0442 9.2244762 + 5300 16271.663 747.52374 0 3760.7947 -6.5256602 + 5350 19831.418 89.851887 0 3762.3367 -2.3453958 + 5400 18723.697 294.67435 0 3762.0256 4.6822081 + 5450 19547.28 142.21934 0 3762.086 -5.5243408 + 5500 19415.447 166.68729 0 3762.1404 -9.5658991 + 5550 18492.721 337.54773 0 3762.1256 6.5184903 + 5600 19391.389 171.14375 0 3762.1416 -0.53835361 + 5650 18503.465 334.62751 0 3761.1951 4.6580363 + 5700 18153.344 399.91064 0 3761.6409 12.851587 + 5750 18342.297 365.14769 0 3761.8694 2.7148176 + 5800 19583.241 135.64969 0 3762.1758 -1.089608 + 5850 15967.283 804.18382 0 3761.088 11.278762 + 5900 19040.271 235.35509 0 3761.3312 5.1352158 + 5950 17920.962 443.17951 0 3761.8762 4.9621366 + 6000 19100.92 224.3946 0 3761.602 -9.537589 + 6050 17982.119 432.3251 0 3762.3472 -2.851617 + 6100 16233.096 755.46191 0 3761.5908 25.113316 + 6150 18316.543 370.01118 0 3761.9635 -1.7445703 + 6200 18483.464 339.13282 0 3761.9966 -2.0857447 + 6250 18609.406 315.56032 0 3761.7467 -12.289208 + 6300 17167.919 582.68212 0 3761.9264 -3.8263397 + 6350 17870.329 452.58116 0 3761.9013 -3.3843134 + 6400 19309.717 186.11786 0 3761.9913 -4.9462739 + 6450 17964.073 435.39924 0 3762.0794 12.272972 + 6500 18772.847 285.61959 0 3762.0727 6.7928648 + 6550 18915.116 259.41365 0 3762.213 -4.1449761 + 6600 19446.628 161.18763 0 3762.415 -2.1906581 + 6650 16348.787 734.99282 0 3762.546 -9.9624546 + 6700 19066.684 231.43863 0 3762.3061 -5.362833 + 6750 14890.323 1004.547 0 3762.0143 37.373013 + 6800 18235.19 385.253 0 3762.1401 0.21012662 + 6850 16447.997 716.11276 0 3762.0382 -9.2095411 + 6900 18343.362 364.81902 0 3761.7379 10.417932 + 6950 16014.084 797.13348 0 3762.7046 6.7906777 + 7000 19120.393 221.29236 0 3762.1059 -1.3461375 + 7050 18055.409 418.30136 0 3761.8957 1.5772317 + 7100 18407.231 353.41868 0 3762.1652 0.61071769 + 7150 18728.136 293.64021 0 3761.8136 5.1649654 + 7200 17706.628 483.07628 0 3762.0815 18.000708 + 7250 19349.505 178.89673 0 3762.1385 2.540201 + 7300 20016.293 55.389159 0 3762.1101 -1.5793163 + 7350 19398.573 169.86661 0 3762.1949 -5.060123 + 7400 19466.526 157.37407 0 3762.2862 1.7158273 + 7450 18440.348 347.09196 0 3761.9712 12.781963 + 7500 19989.907 60.555934 0 3762.3906 -1.5033319 + 7550 19667.28 120.27403 0 3762.363 -3.3502366 + 7600 18497.707 336.15863 0 3761.66 1.7887539 + 7650 17901.957 447.17282 0 3762.3501 0.016725252 + 7700 19758.725 103.3129 0 3762.3361 -23.534448 + 7750 19443.957 161.6532 0 3762.386 -10.323924 + 7800 19776.178 100.1773 0 3762.4324 6.0854422 + 7850 19242.512 198.86705 0 3762.2952 5.2823659 + 7900 19499.929 151.30366 0 3762.4017 12.299911 + 7950 19630.317 127.19541 0 3762.4393 8.0799632 + 8000 19872.384 82.421129 0 3762.4923 2.2126691 + 8050 17747.038 476.27982 0 3762.7683 -7.7042786 + 8100 18832.654 274.78106 0 3762.3095 13.882157 + 8150 19949.814 68.09711 0 3762.5072 -0.54410896 + 8200 17555.866 511.02517 0 3762.1115 6.2471175 + 8250 17800.1 465.9992 0 3762.314 13.583485 + 8300 19755.224 103.89732 0 3762.2721 -1.487243 + 8350 17583.61 506.17539 0 3762.3995 -9.7819128 + 8400 18529.003 330.75623 0 3762.0532 14.731228 + 8450 20155.902 29.797078 0 3762.3716 -8.5711085 + 8500 18047.548 420.54645 0 3762.685 7.3875118 + 8550 19790.794 97.493375 0 3762.4553 -3.3427911 + 8600 19997.902 59.172074 0 3762.4874 3.3479688 + 8650 19987.319 61.148363 0 3762.5037 -1.889232 + 8700 19363.91 176.41833 0 3762.3276 -9.4291288 + 8750 18712.689 296.3979 0 3761.7107 5.9221369 + 8800 19783.17 98.860518 0 3762.4105 -3.5262066 + 8850 18796.049 281.60057 0 3762.3504 -8.2913002 + 8900 16738.277 662.62261 0 3762.3035 8.5838631 + 8950 17869.613 452.25006 0 3761.4377 11.561101 + 9000 18682.512 302.27997 0 3762.0043 3.8878724 + 9050 17513.759 518.50265 0 3761.7914 23.05778 + 9100 17500.686 521.57944 0 3762.4473 -2.8435751 + 9150 19645.683 124.43597 0 3762.5254 -3.0193092 + 9200 18898.897 262.76552 0 3762.5612 3.5891701 + 9250 20114.279 37.614866 0 3762.4813 -0.58120871 + 9300 19562.613 139.54073 0 3762.2468 -3.2630158 + 9350 19679.811 118.05865 0 3762.468 -3.4644363 + 9400 19297.384 188.84527 0 3762.4349 0.40498037 + 9450 18267.029 379.52581 0 3762.309 -0.13762867 + 9500 19951.072 67.63844 0 3762.2814 -7.575539 + 9550 19134.562 218.46835 0 3761.9057 -1.9626244 + 9600 19089.093 227.29178 0 3762.3089 -1.94158 + 9650 16964.603 620.71289 0 3762.3061 16.987042 + 9700 18846.881 271.3129 0 3761.4761 3.4458802 + 9750 19309.225 186.0142 0 3761.7966 9.4048627 + 9800 16359.704 733.51007 0 3763.0849 15.870164 + 9850 19958.532 66.203725 0 3762.2282 6.0043645 + 9900 19864.564 83.502384 0 3762.1253 -0.65360617 + 9950 18996.789 244.25101 0 3762.1749 -2.4961826 + 10000 17933.494 441.33587 0 3762.3532 -6.0731708 +Loop time of 6.84978 on 1 procs for 10000 steps with 81 atoms + +Performance: 12613.550 tau/day, 1459.902 timesteps/s +96.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.1054 | 0.1054 | 0.1054 | 0.0 | 1.54 +Neigh | 0.081336 | 0.081336 | 0.081336 | 0.0 | 1.19 +Comm | 0.017124 | 0.017124 | 0.017124 | 0.0 | 0.25 +Output | 0.0050254 | 0.0050254 | 0.0050254 | 0.0 | 0.07 +Modify | 6.6313 | 6.6313 | 6.6313 | 0.0 | 96.81 +Other | | 0.00962 | | | 0.14 + +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 71 ave 71 max 71 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 612 ave 612 max 612 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 612 +Ave neighs/atom = 7.55556 +Neighbor list builds = 989 +Dangerous builds = 906 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:06 diff --git a/examples/rigid/log.27Nov18.rigid.poems2.g++.4 b/examples/rigid/log.27Nov18.rigid.poems2.g++.4 new file mode 100644 index 0000000000..36856d97ec --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.poems2.g++.4 @@ -0,0 +1,342 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple rigid body system + +units lj +atom_style atomic + +pair_style lj/cut 2.5 + +read_data data.rigid + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 81 atoms + +velocity all create 100.0 4928459 + +# unconnected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 10 18 +#group clump3 id <> 19 27 +#group clump4 id <> 28 36 +#group clump5 id <> 37 45 +#group clump6 id <> 46 54 +#group clump7 id <> 55 63 +#group clump8 id <> 64 72 +#group clump9 id <> 73 81 + +#fix 1 all rigid group 9 clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 1 chain of connected bodies + +#group clump1 id <> 1 9 +#group clump2 id <> 9 18 +#group clump3 id <> 18 27 +#group clump4 id <> 27 36 +#group clump5 id <> 36 45 +#group clump6 id <> 45 54 +#group clump7 id <> 54 63 +#group clump8 id <> 63 72 +#group clump9 id <> 72 81 + +#fix 1 all poems group clump1 clump2 clump3 clump4 clump5 # clump6 clump7 clump8 clump9 + +# 2 chains of connected bodies + +group clump1 id <> 1 9 +9 atoms in group clump1 +group clump2 id <> 9 18 +10 atoms in group clump2 +group clump3 id <> 18 27 +10 atoms in group clump3 +group clump4 id <> 27 36 +10 atoms in group clump4 +group clump5 id <> 37 45 +9 atoms in group clump5 +group clump6 id <> 45 54 +10 atoms in group clump6 +group clump7 id <> 54 63 +10 atoms in group clump7 +group clump8 id <> 63 72 +10 atoms in group clump8 +group clump9 id <> 72 81 +10 atoms in group clump9 + +fix 1 all poems group clump1 clump2 clump3 clump4 +1 clusters, 4 bodies, 3 joints, 36 atoms +fix 2 all poems group clump5 clump6 clump7 clump8 clump9 +1 clusters, 5 bodies, 4 joints, 45 atoms + +neigh_modify exclude group clump1 clump1 +neigh_modify exclude group clump2 clump2 +neigh_modify exclude group clump3 clump3 +neigh_modify exclude group clump4 clump4 +neigh_modify exclude group clump5 clump5 +neigh_modify exclude group clump6 clump6 +neigh_modify exclude group clump7 clump7 +neigh_modify exclude group clump8 clump8 +neigh_modify exclude group clump9 clump9 + +thermo 100 + +#dump 1 all atom 50 dump.rigid.poems2 + +#dump 2 all image 100 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 5 + +#dump 3 all movie 100 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 5 + +timestep 0.0001 +thermo 50 +run 10000 +WARNING: More than one fix poems (src/POEMS/fix_poems.cpp:363) +WARNING: More than one fix poems (src/POEMS/fix_poems.cpp:363) +WARNING: One or more atoms are time integrated more than once (src/modify.cpp:283) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 18 18 18 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.825 | 3.919 | 4.201 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 196.00047 3632.2347 0 3668.5311 -2.7403788 + 50 12167.633 1505.5478 0 3758.8133 35.125973 + 100 17556.978 512.66277 0 3763.9549 11.137534 + 150 19579.586 138.04942 0 3763.8987 -29.953971 + 200 19757.51 105.30542 0 3764.1036 -0.030645317 + 250 18218.374 390.10747 0 3763.8804 13.711001 + 300 19383.039 174.40688 0 3763.8586 5.7240693 + 350 20125.986 36.972611 0 3764.0071 1.9559205 + 400 18888.816 266.10975 0 3764.0386 9.6362168 + 450 19307.656 188.2511 0 3763.743 1.9326206 + 500 16331.197 738.56392 0 3762.8597 9.1715579 + 550 19318.722 186.16172 0 3763.7027 3.0115336 + 600 19455.268 161.20621 0 3764.0336 0.55208034 + 650 18487.011 340.03216 0 3763.5528 -8.0359122 + 700 17321.201 556.32471 0 3763.9545 -13.631751 + 750 18979.187 249.04389 0 3763.7082 -2.6072455 + 800 19342.456 181.85552 0 3763.7918 8.1918726 + 850 19070.641 232.19342 0 3763.7936 7.3148472 + 900 19478.873 156.65987 0 3763.8586 2.4284987 + 950 19912.415 76.437437 0 3763.9216 -1.4667227 + 1000 16003.749 802.39753 0 3766.0548 46.642188 + 1050 19859.583 86.64176 0 3764.3424 -2.1961943 + 1100 19229.575 203.61488 0 3764.6473 -10.632365 + 1150 18821.6 279.15861 0 3764.64 -0.89495035 + 1200 19392.695 173.59744 0 3764.8373 1.8508753 + 1250 16459.624 717.32104 0 3765.3995 33.478127 + 1300 19343.863 182.59043 0 3764.7874 0.75890736 + 1350 20019.643 57.503573 0 3764.8448 0.31444671 + 1400 18549.582 329.31436 0 3764.4221 10.738303 + 1450 15163.926 957.47585 0 3765.6103 -17.923459 + 1500 19223.688 204.15176 0 3764.0939 -1.6134529 + 1550 18147.996 404.12677 0 3764.8668 8.4194781 + 1600 18615.043 317.42468 0 3764.6548 -2.3288926 + 1650 20120.654 38.887908 0 3764.935 -8.7620288 + 1700 19450.907 162.98267 0 3765.0025 2.3254739 + 1750 19374.631 177.3797 0 3765.2744 8.9328773 + 1800 19424.404 167.93965 0 3765.0514 0.081228843 + 1850 17936.227 442.84645 0 3764.3699 6.6011251 + 1900 19982.595 64.406244 0 3764.8868 -2.952971 + 1950 16215.818 761.91942 0 3764.8486 13.994877 + 2000 18584.433 322.11846 0 3763.6801 7.1653695 + 2050 20107.965 41.025796 0 3764.723 -0.31089763 + 2100 20002.329 60.593879 0 3764.7288 -6.7919882 + 2150 16949.817 626.58598 0 3765.4409 3.5087505 + 2200 20010.954 58.8082 0 3764.5403 -10.862143 + 2250 18982.732 247.00854 0 3762.3293 -0.53812607 + 2300 18401.276 354.88369 0 3762.5274 1.0921058 + 2350 19390.535 172.93951 0 3763.7793 -3.3524354 + 2400 16080.475 786.44896 0 3764.3146 -16.201558 + 2450 18870.293 268.77171 0 3763.2704 11.199749 + 2500 19688.508 117.54164 0 3763.5617 4.3806994 + 2550 18870.328 268.87896 0 3763.3841 -5.6641099 + 2600 17020.211 611.54841 0 3763.4394 6.3081434 + 2650 18748.838 291.88478 0 3763.8917 2.4175163 + 2700 19743.991 106.92945 0 3763.224 -0.33916964 + 2750 19525.446 147.60906 0 3763.4324 -1.6251174 + 2800 18257.411 381.40184 0 3762.4038 23.39495 + 2850 18496.796 337.65425 0 3762.9868 4.3657735 + 2900 20163.418 29.253902 0 3763.2203 1.4431917 + 2950 16823.317 646.69817 0 3762.1273 4.9041552 + 3000 19223.007 203.2529 0 3763.069 4.0414458 + 3050 17391.02 542.93746 0 3763.4968 15.139863 + 3100 19205.6 206.57791 0 3763.1705 4.8519241 + 3150 19835.659 90.247763 0 3763.5179 -14.900053 + 3200 18962.776 251.5838 0 3763.2089 -13.706561 + 3250 19418.837 167.29058 0 3763.3716 -2.0866468 + 3300 18628.291 313.69067 0 3763.3742 5.9919715 + 3350 17465.974 529.14439 0 3763.5841 14.122593 + 3400 18488.661 339.6186 0 3763.4448 21.526798 + 3450 19163.152 214.26098 0 3762.9928 4.1888096 + 3500 18000.27 429.81789 0 3763.2011 5.4734485 + 3550 19582.423 136.71887 0 3763.0935 -2.5335675 + 3600 19634.325 127.2219 0 3763.208 -1.9728322 + 3650 19428.114 165.40707 0 3763.2059 -2.3318779 + 3700 19861.116 85.356944 0 3763.3414 -3.9097609 + 3750 19337.239 182.43992 0 3763.4102 -3.3559651 + 3800 19493.146 153.40349 0 3763.2453 -0.71089657 + 3850 18607.616 317.74889 0 3763.6037 3.475832 + 3900 19719.59 111.5553 0 3763.3313 0.58876668 + 3950 19756.661 104.5522 0 3763.1931 3.7526698 + 4000 17904.708 447.1673 0 3762.854 12.270654 + 4050 19588.087 135.80435 0 3763.2279 0.94578945 + 4100 19065.901 232.38235 0 3763.1048 -2.7495195 + 4150 18775.075 286.2257 0 3763.0915 -3.7039858 + 4200 18800.725 281.46601 0 3763.0817 0.15619543 + 4250 19732.687 108.90618 0 3763.1075 3.0865861 + 4300 18278.151 377.63653 0 3762.4794 1.5768601 + 4350 17915.757 445.4804 0 3763.2133 -3.7040484 + 4400 15987.794 802.41575 0 3763.1183 22.252078 + 4450 19302.37 188.69495 0 3763.2079 0.91081327 + 4500 20039.32 52.304099 0 3763.2893 -2.0828905 + 4550 19535.953 145.4374 0 3763.2064 -3.3804255 + 4600 19700.723 114.79823 0 3763.0803 -1.1761163 + 4650 17804.641 465.85788 0 3763.0136 7.5947192 + 4700 19913.881 75.240289 0 3762.996 -2.1100557 + 4750 19982.484 62.535995 0 3762.996 -4.5821237 + 4800 17400.76 540.21707 0 3762.58 -5.8418778 + 4850 19199.88 206.90989 0 3762.4433 3.4536341 + 4900 19173.92 212.11327 0 3762.8392 5.0387071 + 4950 19236.635 200.57537 0 3762.9152 -1.4932783 + 5000 19077.616 230.04967 0 3762.9415 4.3742655 + 5050 19893.763 78.909747 0 3762.94 -1.5796711 + 5100 18884.746 265.68301 0 3762.8583 2.2767949 + 5150 17417.096 537.54036 0 3762.9286 -2.8632555 + 5200 18247.844 383.60092 0 3762.8312 10.384179 + 5250 19494.107 152.60532 0 3762.6251 -4.7617287 + 5300 18739.781 292.46206 0 3762.7919 23.210048 + 5350 19310.938 186.62363 0 3762.7232 14.895327 + 5400 19540.39 144.14287 0 3762.7336 6.094624 + 5450 20074.459 45.247888 0 3762.7403 -2.0871835 + 5500 19986.377 61.668045 0 3762.849 -2.4551918 + 5550 19038.904 237.07578 0 3762.7987 5.4250813 + 5600 19439.124 163.1438 0 3762.9816 4.1291468 + 5650 19480.321 155.58325 0 3763.0501 -3.5308058 + 5700 19869.291 83.651379 0 3763.1497 -7.8661592 + 5750 19991.447 61.068554 0 3763.1884 -6.8473586 + 5800 19454.072 160.36805 0 3762.9739 1.527662 + 5850 17994.409 430.95597 0 3763.2539 -5.6078082 + 5900 19209.794 205.74997 0 3763.1193 8.4113055 + 5950 19046.427 236.06321 0 3763.1793 10.463356 + 6000 19409.899 168.95271 0 3763.3785 2.542067 + 6050 18068.174 417.35443 0 3763.3125 10.498199 + 6100 19549.253 143.21885 0 3763.4509 2.3075797 + 6150 18464.719 344.0303 0 3763.4228 0.46469762 + 6200 19811.205 94.62725 0 3763.3689 1.2382763 + 6250 18715.36 297.26445 0 3763.0718 -3.4541762 + 6300 17115.664 594.09913 0 3763.6666 4.2065564 + 6350 18155.927 400.71764 0 3762.9264 1.1521258 + 6400 19873.093 83.169067 0 3763.3716 0.16383592 + 6450 19991.88 61.13218 0 3763.3321 -1.3008128 + 6500 19434.416 164.40698 0 3763.3728 -13.593422 + 6550 19855.253 86.645329 0 3763.544 -0.85704037 + 6600 19251.141 198.41152 0 3763.4376 4.3027745 + 6650 19741.815 107.69047 0 3763.582 4.994835 + 6700 19633.466 127.69333 0 3763.5203 6.3677145 + 6750 16231.353 757.83705 0 3763.6431 -1.5978692 + 6800 18863.396 270.1114 0 3763.3329 -11.915909 + 6850 19644.779 125.29421 0 3763.2163 -1.151217 + 6900 18883.642 266.06889 0 3763.0397 -4.3950749 + 6950 19042.364 236.54144 0 3762.9052 5.5718878 + 7000 18351.868 364.38028 0 3762.8743 7.8958273 + 7050 19981.031 62.840667 0 3763.0316 -5.8572298 + 7100 19796.372 97.073665 0 3763.0685 -3.5178361 + 7150 19805.385 95.235221 0 3762.899 -2.5481726 + 7200 18722.055 295.86113 0 3762.9084 13.826356 + 7250 19537.304 144.54234 0 3762.5616 1.2288666 + 7300 18787.328 283.49504 0 3762.6299 9.0044469 + 7350 18886.005 265.52121 0 3762.9295 6.6791881 + 7400 19891.864 79.239278 0 3762.9178 -2.3882842 + 7450 18164.752 399.07065 0 3762.9137 3.9400481 + 7500 18702.612 299.582 0 3763.0286 4.7987316 + 7550 19884.986 80.231665 0 3762.6365 -0.75016515 + 7600 19549.059 142.16243 0 3762.3586 -2.1035756 + 7650 18223.668 387.9047 0 3762.658 -17.064339 + 7700 19428.4 164.79531 0 3762.6473 -2.8342541 + 7750 19239.584 199.93029 0 3762.8163 3.1746033 + 7800 19458.005 159.46176 0 3762.7961 1.714515 + 7850 18320.308 369.77051 0 3762.4202 2.1422976 + 7900 18817.415 278.04812 0 3762.7546 0.94492621 + 7950 19892.761 79.115928 0 3762.9606 1.4948501 + 8000 19592.344 134.7639 0 3762.9758 -1.8520224 + 8050 19316.109 185.70579 0 3762.7631 -4.8061205 + 8100 19867.017 83.850395 0 3762.9277 -3.496391 + 8150 19129.936 220.29802 0 3762.8789 -2.8357376 + 8200 18449.554 346.30415 0 3762.8883 1.4417837 + 8250 18405.197 354.49049 0 3762.8602 6.7020283 + 8300 18310.437 372.25376 0 3763.0755 3.9043508 + 8350 18842.702 273.55075 0 3762.94 -10.987272 + 8400 18574.308 323.33378 0 3763.0204 12.008785 + 8450 15368.628 918.21692 0 3764.2591 34.80292 + 8500 18432.887 349.54013 0 3763.0378 0.00064258465 + 8550 15777.73 841.79263 0 3763.5945 15.473699 + 8600 17205.381 576.4515 0 3762.6331 2.3985544 + 8650 19773.742 101.48276 0 3763.2869 2.3978892 + 8700 19059.824 232.99716 0 3762.5941 5.2611349 + 8750 19006.086 243.41125 0 3763.0568 4.7880403 + 8800 19492.691 153.0188 0 3762.7763 1.9118755 + 8850 19625.883 128.44474 0 3762.8675 3.4157389 + 8900 19916.97 74.635094 0 3762.9629 -10.157254 + 8950 16012.956 798.16801 0 3763.5302 16.904998 + 9000 19364.051 177.00354 0 3762.9389 -13.373346 + 9050 19133.929 219.61882 0 3762.9389 -7.3824392 + 9100 18657.168 307.85939 0 3762.8905 9.3071421 + 9150 17975.904 434.21548 0 3763.0867 6.9609506 + 9200 19075.282 230.41699 0 3762.8767 7.0961232 + 9250 20115.276 37.578674 0 3762.6298 1.8678552 + 9300 18195.486 393.20682 0 3762.7413 13.272552 + 9350 19617.155 129.85893 0 3762.6653 -2.0849447 + 9400 19276.325 193.03425 0 3762.724 -2.8963555 + 9450 18642.803 310.4759 0 3762.8467 3.407984 + 9500 19175.951 211.72785 0 3762.8298 -0.39025564 + 9550 17669.191 490.85942 0 3762.9319 5.3867954 + 9600 18481.199 340.29485 0 3762.7391 8.9004886 + 9650 20091.442 42.504743 0 3763.1422 -1.3206133 + 9700 19651.405 124.04835 0 3763.1975 1.4000525 + 9750 19138.245 219.03637 0 3763.1558 5.8352794 + 9800 19189.146 209.67958 0 3763.2251 6.214691 + 9850 19899.376 78.096337 0 3763.166 -0.75102404 + 9900 19447.247 161.27279 0 3762.6149 -6.4166376 + 9950 19807.083 95.152663 0 3763.1309 -0.88933698 + 10000 18972.157 249.56342 0 3762.9258 1.9189241 +Loop time of 9.05599 on 4 procs for 10000 steps with 81 atoms + +Performance: 9540.646 tau/day, 1104.241 timesteps/s +94.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.009043 | 0.030098 | 0.048276 | 8.1 | 0.33 +Neigh | 0.012702 | 0.02622 | 0.04009 | 6.1 | 0.29 +Comm | 0.99902 | 1.2924 | 1.6008 | 24.3 | 14.27 +Output | 0.0057414 | 0.010684 | 0.024912 | 7.9 | 0.12 +Modify | 7.2674 | 7.5881 | 7.9123 | 10.6 | 83.79 +Other | | 0.1085 | | | 1.20 + +Nlocal: 20.25 ave 37 max 0 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Nghost: 17.75 ave 33 max 4 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 144.75 ave 356 max 0 min +Histogram: 2 0 0 0 0 0 1 0 0 1 + +Total # of neighbors = 579 +Ave neighs/atom = 7.14815 +Neighbor list builds = 994 +Dangerous builds = 958 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:09 diff --git a/examples/rigid/log.20Apr18.rigid.property.g++.4 b/examples/rigid/log.27Nov18.rigid.property.g++.1 similarity index 90% rename from examples/rigid/log.20Apr18.rigid.property.g++.4 rename to examples/rigid/log.27Nov18.rigid.property.g++.1 index c34324b19c..e6ab4ed102 100644 --- a/examples/rigid/log.20Apr18.rigid.property.g++.4 +++ b/examples/rigid/log.27Nov18.rigid.property.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -12,7 +12,7 @@ fix 0 all property/atom i_bodies read_data data.rigid-property fix 0 NULL Bodies orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 81 atoms @@ -108,7 +108,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.017 | 4.111 | 4.392 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.046 | 4.046 | 4.046 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -162,8 +162,8 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722854e-05 0 5269.5046 14.510657 - 2650 16733.017 1.705148 0 5269.5067 14.596295 + 2600 16738.427 -7.972284e-05 0 5269.5046 14.510657 + 2650 16733.017 1.7051479 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 2800 16738.585 -0.046813448 0 5269.5076 14.511073 @@ -171,7 +171,7 @@ Step Temp E_pair E_mol TotEng Press 2900 16738.465 -0.0026252725 0 5269.514 14.510277 2950 16738.476 -0.0082220764 0 5269.512 14.510223 3000 16738.66 -0.071284779 0 5269.507 14.509758 - 3050 16715.332 7.2419351 0 5269.476 14.870305 + 3050 16715.332 7.2419352 0 5269.476 14.870305 3100 16653.226 26.818761 0 5269.5009 14.496764 3150 16739.351 -0.30690375 0 5269.4886 13.643904 3200 16733.238 1.6025328 0 5269.4737 12.016934 @@ -181,7 +181,7 @@ Step Temp E_pair E_mol TotEng Press 3400 16738.543 -0.042215005 0 5269.4991 12.092809 3450 16738.591 -0.059327511 0 5269.4972 12.092536 3500 16738.759 -0.11761245 0 5269.4918 12.09203 - 3550 16713.405 7.846062 0 5269.4737 12.389816 + 3550 16713.405 7.8460621 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 3700 16738.602 -0.070934368 0 5269.4889 12.025288 @@ -279,8 +279,8 @@ Step Temp E_pair E_mol TotEng Press 8300 16738.471 0 0 5269.5187 12.011719 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 - 8450 16738.473 -0.00039690664 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 + 8450 16738.473 -0.00039690666 0 5269.5189 12.011706 + 8500 16738.481 -0.0034646804 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532811 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -300,38 +300,38 @@ Step Temp E_pair E_mol TotEng Press 9350 16738.48 0 0 5269.5214 12.011744 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 - 9500 16738.481 -0.00037652437 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156159 0 5269.5203 12.011611 - 9600 16738.549 -0.026814369 0 5269.5163 12.011415 + 9500 16738.481 -0.00037652434 0 5269.5216 12.011692 + 9550 16738.493 -0.005315616 0 5269.5203 12.011611 + 9600 16738.549 -0.026814368 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589887 0 5269.4979 12.062708 - 9750 16738.013 0.135501 0 5269.5101 11.407245 - 9800 16738.512 -0.011620329 0 5269.5201 11.394973 - 9850 16738.489 -0.00067270548 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984569 0 5269.5242 11.395084 + 9700 16735.041 1.0589885 0 5269.4979 12.062708 + 9750 16738.013 0.13550123 0 5269.5101 11.407245 + 9800 16738.512 -0.011620328 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270523 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984554 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.206235 on 4 procs for 10000 steps with 81 atoms +Loop time of 0.156049 on 1 procs for 10000 steps with 81 atoms -Performance: 418940.303 tau/day, 48488.461 timesteps/s -97.1% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 553673.043 tau/day, 64082.528 timesteps/s +97.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0026572 | 0.004187 | 0.0050838 | 1.5 | 2.03 -Neigh | 0.012115 | 0.012789 | 0.013634 | 0.5 | 6.20 -Comm | 0.084275 | 0.089969 | 0.095318 | 1.5 | 43.62 -Output | 0.0048559 | 0.0051559 | 0.0059836 | 0.7 | 2.50 -Modify | 0.077074 | 0.083586 | 0.088022 | 1.5 | 40.53 -Other | | 0.01055 | | | 5.11 +Pair | 0.010187 | 0.010187 | 0.010187 | 0.0 | 6.53 +Neigh | 0.040601 | 0.040601 | 0.040601 | 0.0 | 26.02 +Comm | 0.013221 | 0.013221 | 0.013221 | 0.0 | 8.47 +Output | 0.0016611 | 0.0016611 | 0.0016611 | 0.0 | 1.06 +Modify | 0.085107 | 0.085107 | 0.085107 | 0.0 | 54.54 +Other | | 0.005271 | | | 3.38 -Nlocal: 20.25 ave 38 max 3 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 27.25 ave 48 max 13 min -Histogram: 1 0 1 1 0 0 0 0 0 1 +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 84 ave 84 max 84 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.20Apr18.rigid.property.g++.1 b/examples/rigid/log.27Nov18.rigid.property.g++.4 similarity index 92% rename from examples/rigid/log.20Apr18.rigid.property.g++.1 rename to examples/rigid/log.27Nov18.rigid.property.g++.4 index 76ef36825b..f63e34bc4b 100644 --- a/examples/rigid/log.20Apr18.rigid.property.g++.1 +++ b/examples/rigid/log.27Nov18.rigid.property.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (20 Apr 2018) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Simple rigid body system @@ -12,7 +12,7 @@ fix 0 all property/atom i_bodies read_data data.rigid-property fix 0 NULL Bodies orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid + 1 by 2 by 2 MPI processor grid reading atoms ... 81 atoms @@ -108,7 +108,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.046 | 4.046 | 4.046 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.017 | 4.111 | 4.392 Mbytes Step Temp E_pair E_mol TotEng Press 0 115.29439 5235.9179 0 5272.2142 -2.7403788 50 14910.685 571.71558 0 5265.82 32.006171 @@ -162,7 +162,7 @@ Step Temp E_pair E_mol TotEng Press 2450 16738.464 -0.0023259756 0 5269.514 14.510746 2500 16738.468 -0.0051929186 0 5269.5127 14.510731 2550 16738.581 -0.044940117 0 5269.5085 14.510315 - 2600 16738.427 -7.9722839e-05 0 5269.5046 14.510657 + 2600 16738.427 -7.9722832e-05 0 5269.5046 14.510657 2650 16733.017 1.705148 0 5269.5067 14.596295 2700 16738.761 -0.10614946 0 5269.5038 14.499584 2750 16733.973 1.4038179 0 5269.5064 14.598107 @@ -184,7 +184,7 @@ Step Temp E_pair E_mol TotEng Press 3550 16713.405 7.846062 0 5269.4737 12.389816 3600 16734.939 1.0821936 0 5269.4891 12.173591 3650 16738.808 -0.13663194 0 5269.4882 12.027009 - 3700 16738.602 -0.070934367 0 5269.4889 12.025288 + 3700 16738.602 -0.070934368 0 5269.4889 12.025288 3750 16737.731 0.20706557 0 5269.4927 12.061948 3800 16738.578 -0.05582043 0 5269.4965 12.035665 3850 16738.471 -0.016307928 0 5269.5024 12.035302 @@ -280,7 +280,7 @@ Step Temp E_pair E_mol TotEng Press 8350 16738.472 0 0 5269.5189 12.011723 8400 16738.472 0 0 5269.519 12.01172 8450 16738.473 -0.00039690663 0 5269.5189 12.011706 - 8500 16738.481 -0.0034646802 0 5269.5182 12.011643 + 8500 16738.481 -0.0034646803 0 5269.5182 12.011643 8550 16738.483 -0.0045307409 0 5269.5178 12.011621 8600 16738.474 -0.00076532813 0 5269.5189 12.011681 8650 16738.474 0 0 5269.5197 12.011699 @@ -301,37 +301,37 @@ Step Temp E_pair E_mol TotEng Press 9400 16738.48 0 0 5269.5215 12.011732 9450 16738.48 0 0 5269.5216 12.011715 9500 16738.481 -0.00037652438 0 5269.5216 12.011692 - 9550 16738.493 -0.0053156162 0 5269.5203 12.011611 + 9550 16738.493 -0.0053156163 0 5269.5203 12.011611 9600 16738.549 -0.026814371 0 5269.5163 12.011415 9650 16738.765 -0.10191523 0 5269.5092 12.011013 - 9700 16735.041 1.0589893 0 5269.4979 12.062708 - 9750 16738.013 0.13550102 0 5269.5101 11.407246 - 9800 16738.512 -0.011620328 0 5269.5201 11.394974 - 9850 16738.489 -0.00067270521 0 5269.5237 11.395098 - 9900 16738.489 -0.00024984561 0 5269.5242 11.395085 + 9700 16735.041 1.0589894 0 5269.4979 12.062708 + 9750 16738.013 0.13550109 0 5269.5101 11.407246 + 9800 16738.512 -0.011620327 0 5269.5201 11.394974 + 9850 16738.489 -0.00067270507 0 5269.5237 11.395098 + 9900 16738.489 -0.00024984555 0 5269.5242 11.395085 9950 16738.49 0 0 5269.5245 11.395076 10000 16738.49 0 0 5269.5246 11.395075 -Loop time of 0.140719 on 1 procs for 10000 steps with 81 atoms +Loop time of 0.198069 on 4 procs for 10000 steps with 81 atoms -Performance: 613990.898 tau/day, 71063.761 timesteps/s -97.1% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 436211.675 tau/day, 50487.462 timesteps/s +91.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.010882 | 0.010882 | 0.010882 | 0.0 | 7.73 -Neigh | 0.037245 | 0.037245 | 0.037245 | 0.0 | 26.47 -Comm | 0.0092154 | 0.0092154 | 0.0092154 | 0.0 | 6.55 -Output | 0.0024879 | 0.0024879 | 0.0024879 | 0.0 | 1.77 -Modify | 0.074702 | 0.074702 | 0.074702 | 0.0 | 53.09 -Other | | 0.006187 | | | 4.40 +Pair | 0.0026007 | 0.0034987 | 0.0043218 | 1.0 | 1.77 +Neigh | 0.012213 | 0.013261 | 0.014237 | 0.8 | 6.70 +Comm | 0.073581 | 0.082048 | 0.087982 | 2.1 | 41.42 +Output | 0.0047908 | 0.0058783 | 0.009093 | 2.4 | 2.97 +Modify | 0.081998 | 0.086993 | 0.09176 | 1.4 | 43.92 +Other | | 0.00639 | | | 3.23 -Nlocal: 81 ave 81 max 81 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 84 ave 84 max 84 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Nlocal: 20.25 ave 38 max 3 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 27.25 ave 48 max 13 min +Histogram: 1 0 1 1 0 0 0 0 0 1 Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 +Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 0 Ave neighs/atom = 0 diff --git a/examples/rigid/log.27Nov18.rigid.tnr.g++.1 b/examples/rigid/log.27Nov18.rigid.tnr.g++.1 new file mode 100644 index 0000000000..bf29e0b94b --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.tnr.g++.1 @@ -0,0 +1,458 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Tethered nanorods + +atom_style molecular + +read_data data.rigid.tnr + orthogonal box = (-31.122 -31.122 -31.122) to (31.122 31.122 31.122) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 5600 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 1600 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + +# Specify bond parameters + +bond_style fene +bond_coeff 1 30.0 1.5 1.0 1.0 + +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + +# Specify initial velocities + +velocity all create 1.4 109345 + +# Specify rigid components + +group rods type 2 +4000 atoms in group rods +group tethers subtract all rods +1600 atoms in group tethers + +neigh_modify exclude molecule/intra rods delay 0 every 1 + +# Specify the pair potentials + +pair_style lj/cut 2.5 +pair_modify shift yes +pair_coeff * * 1.0 1.0 1.122 +pair_coeff 2 2 1.0 1.0 2.5 + +# Specify output + +thermo 100 +thermo_style custom step temp pe etotal press enthalpy lx ly lz pxx pyy pzz +thermo_modify flush yes lost warn + +timestep 0.005 + +fix 1 rods rigid molecule +800 rigid bodies with 4000 atoms +fix 2 tethers nve +fix 3 all langevin 1.4 1.4 1.0 437624 + +run 5000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 45 45 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.769 | 7.769 | 7.769 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 0 1.3963219 5.9478449 7.0445809 0.048565317 9.13595 62.244 62.244 62.244 0.0091983659 0.11850113 0.017996458 + 100 1.3418512 5.9671777 7.0211299 0.025020362 8.0985822 62.244 62.244 62.244 0.02036076 0.038265078 0.016435248 + 200 1.3730638 5.9750802 7.0535483 0.0053287535 7.2830205 62.244 62.244 62.244 -0.00054924195 0.0092396988 0.0072958036 + 300 1.376262 5.9821642 7.0631443 0.0055536521 7.3023013 62.244 62.244 62.244 0.0033577704 0.0069111861 0.0063919998 + 400 1.3782954 5.9983628 7.08094 0.0020507385 7.169251 62.244 62.244 62.244 -0.0060862717 0.0098998072 0.0023386801 + 500 1.386863 6.0053312 7.0946377 -0.0009847031 7.0522334 62.244 62.244 62.244 -0.0038708372 0.0005697804 0.00034694745 + 600 1.4069849 6.0035719 7.1086832 0.0047883912 7.3148858 62.244 62.244 62.244 0.001069365 0.0078059505 0.0054898581 + 700 1.4423187 5.9982171 7.1310812 0.012141001 7.6539093 62.244 62.244 62.244 0.0094765272 0.011007593 0.015938883 + 800 1.4303878 5.9968168 7.1203098 -0.00081349095 7.0852784 62.244 62.244 62.244 0.0011153812 0.00041597298 -0.0039718271 + 900 1.4140538 5.9838168 7.0944803 0.00207609 7.183883 62.244 62.244 62.244 0.00043409671 0.0022778944 0.0035162788 + 1000 1.3906567 5.988119 7.0804053 0.0022005856 7.1751692 62.244 62.244 62.244 0.0077268425 -0.0022042977 0.0010792119 + 1100 1.3921992 5.9892203 7.0827181 0.0035041977 7.2336194 62.244 62.244 62.244 -0.0037576823 0.0040827951 0.01018748 + 1200 1.3968803 5.9795846 7.0767592 -0.0031072146 6.9429532 62.244 62.244 62.244 -0.0077387449 0.0033056124 -0.0048885115 + 1300 1.3755848 5.9739757 7.0544239 0.0092247106 7.4516677 62.244 62.244 62.244 0.0092788748 0.010737194 0.0076580625 + 1400 1.3847985 5.9703631 7.0580481 0.0071703598 7.3668254 62.244 62.244 62.244 0.0080485848 0.012260474 0.001202021 + 1500 1.4190051 5.956946 7.0714985 0.0035992903 7.2264948 62.244 62.244 62.244 -0.0055125437 0.01038369 0.0059267242 + 1600 1.3980036 5.9671666 7.0652236 0.0061819851 7.3314385 62.244 62.244 62.244 0.0062429141 0.0035120077 0.0087910334 + 1700 1.4276062 5.9610381 7.0823462 0.007832375 7.4196319 62.244 62.244 62.244 0.0083316819 0.0058394292 0.009326014 + 1800 1.4112769 5.9630595 7.0715419 0.0068032101 7.3645087 62.244 62.244 62.244 0.0065502252 0.0062317255 0.0076276797 + 1900 1.4276973 5.9489341 7.0703139 0.008397746 7.4319462 62.244 62.244 62.244 0.0148941 0.0032963108 0.0070028268 + 2000 1.4056158 5.9564624 7.0604983 0.0090470732 7.4500926 62.244 62.244 62.244 0.011871718 0.0086681344 0.0066013673 + 2100 1.3924778 5.9483611 7.0420778 0.0088893819 7.4248814 62.244 62.244 62.244 0.010247454 0.0097830093 0.0066376825 + 2200 1.3760401 5.9435877 7.0243935 -0.0042972782 6.8393397 62.244 62.244 62.244 -0.0050064436 -0.0046216999 -0.0032636911 + 2300 1.4191937 5.9334036 7.0481042 0.0047000032 7.2505006 62.244 62.244 62.244 0.0057709635 0.0044949165 0.0038341296 + 2400 1.4213285 5.9472214 7.0635988 0.010197674 7.5027414 62.244 62.244 62.244 0.008373826 0.0090537939 0.013165402 + 2500 1.4153808 5.9421661 7.0538718 0.00015906306 7.0607216 62.244 62.244 62.244 0.002351621 -0.0019814986 0.00010706677 + 2600 1.4014223 5.9431386 7.0438807 0.0070733749 7.3484816 62.244 62.244 62.244 0.0054143871 0.010055843 0.0057498948 + 2700 1.4138077 5.9369067 7.047377 0.0024268842 7.1518859 62.244 62.244 62.244 0.0052918436 0.0014960353 0.00049277371 + 2800 1.432192 5.9347676 7.0596777 0.0077670448 7.3941501 62.244 62.244 62.244 0.012668421 0.0059113033 0.0047214106 + 2900 1.3938659 5.921023 7.01583 0.0053751198 7.2472989 62.244 62.244 62.244 0.0020490372 0.0076566093 0.006419713 + 3000 1.390221 5.9205014 7.0124455 -0.0010750977 6.9661485 62.244 62.244 62.244 0.0019519817 -0.0041878885 -0.00098938611 + 3100 1.4205722 5.9178284 7.0336117 0.0098735475 7.4587965 62.244 62.244 62.244 0.0040973361 0.012167268 0.013356039 + 3200 1.398418 5.9150349 7.0134173 0.0061541841 7.2784351 62.244 62.244 62.244 0.0067621815 0.011952563 -0.00025219251 + 3300 1.4269859 5.9148727 7.0356937 0.0060623879 7.2967584 62.244 62.244 62.244 0.012956234 -2.4806661e-05 0.0052557362 + 3400 1.434286 5.9356705 7.0622253 0.00027315892 7.0739884 62.244 62.244 62.244 -0.00054959866 0.0052526278 -0.0038835524 + 3500 1.4416809 5.9228153 7.0551783 0.0083382977 7.4142506 62.244 62.244 62.244 0.007399393 0.0030328007 0.014582699 + 3600 1.4136063 5.9039442 7.0142562 0.0019712004 7.0991421 62.244 62.244 62.244 -0.00032316149 0.0035029874 0.0027337752 + 3700 1.4333819 5.9120101 7.0378548 0.0071287182 7.3448389 62.244 62.244 62.244 0.0064768218 0.0046765361 0.010232797 + 3800 1.3659481 5.9032873 6.9761663 -0.0054033416 6.7434821 62.244 62.244 62.244 -0.0073943479 -0.0082831992 -0.00053247772 + 3900 1.3963222 5.9042998 7.0010361 0.0053310264 7.2306062 62.244 62.244 62.244 0.0081855739 0.0048806019 0.0029269034 + 4000 1.4125482 5.9060665 7.0155474 0.0028450296 7.138063 62.244 62.244 62.244 0.0052588294 0.00072395285 0.0025523065 + 4100 1.3943951 5.9040875 6.9993102 0.0058050223 7.2492919 62.244 62.244 62.244 0.0060579697 0.0024782584 0.0088788387 + 4200 1.4249768 5.8906371 7.0098801 0.0030210669 7.1399763 62.244 62.244 62.244 0.006174431 -0.002079586 0.0049683557 + 4300 1.3899801 5.8966397 6.9883947 0.0057285402 7.2350829 62.244 62.244 62.244 0.0049048136 0.0021882328 0.010092574 + 4400 1.4414352 5.898628 7.0307981 0.0050932552 7.2501291 62.244 62.244 62.244 0.0057941393 0.0037951842 0.0056904421 + 4500 1.4092913 5.8922803 6.9992031 0.0012238869 7.0519073 62.244 62.244 62.244 0.0042907674 0.0014412643 -0.0020603711 + 4600 1.3779868 5.8928757 6.9752105 0.0020701322 7.0643566 62.244 62.244 62.244 0.0029283254 -0.0031683908 0.006450462 + 4700 1.4084635 5.9098782 7.0161508 -0.00052129502 6.9937023 62.244 62.244 62.244 -0.0018460523 -0.0018286314 0.0021107986 + 4800 1.4393258 5.9148464 7.0453597 0.015311954 7.7047386 62.244 62.244 62.244 0.014718813 0.01801777 0.013199278 + 4900 1.4500008 5.9076899 7.0465879 0.0075111779 7.3700419 62.244 62.244 62.244 0.0091865271 0.0080981174 0.0052488891 + 5000 1.4279632 5.9111567 7.0327453 -0.0014189553 6.9716408 62.244 62.244 62.244 -0.0046013754 0.0019937576 -0.001649248 +Loop time of 6.84203 on 1 procs for 5000 steps with 5600 atoms + +Performance: 315695.745 tau/day, 730.777 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.53182 | 0.53182 | 0.53182 | 0.0 | 7.77 +Bond | 0.18231 | 0.18231 | 0.18231 | 0.0 | 2.66 +Neigh | 1.8709 | 1.8709 | 1.8709 | 0.0 | 27.34 +Comm | 0.18452 | 0.18452 | 0.18452 | 0.0 | 2.70 +Output | 0.0043087 | 0.0043087 | 0.0043087 | 0.0 | 0.06 +Modify | 3.8809 | 3.8809 | 3.8809 | 0.0 | 56.72 +Other | | 0.1873 | | | 2.74 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1351 ave 1351 max 1351 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5254 ave 5254 max 5254 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 5254 +Ave neighs/atom = 0.938214 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 766 +Dangerous builds = 0 + +# Replace fix rigid and fix langevin with new ones + +unfix 1 +unfix 3 + +fix 3 tethers langevin 1.4 1.4 1.0 198450 + +# Test different integrators for rods + +fix 1 rods rigid/nve molecule +800 rigid bodies with 4000 atoms +print "rigid/nve" +rigid/nve +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 5000 1.4279632 5.9111567 7.0327453 0.027874409 8.2331015 62.244 62.244 62.244 0.018992956 0.039655696 0.024974575 + 5100 1.439608 5.9052128 7.0359478 0.0060989863 7.2985885 62.244 62.244 62.244 0.0087364157 0.004022839 0.0055377041 + 5200 1.4120672 5.9102569 7.01936 0.0064301432 7.2962614 62.244 62.244 62.244 0.0082738077 0.0038925667 0.0071240551 + 5300 1.4452434 5.8842166 7.0193778 0.008172419 7.3713068 62.244 62.244 62.244 0.0077715647 0.0068924406 0.0098532518 + 5400 1.4170243 5.887522 7.0005186 0.0008656658 7.0377968 62.244 62.244 62.244 -9.1800583e-05 -0.0020237513 0.0047125493 + 5500 1.4209082 5.8758921 6.9919394 0.0093634084 7.395156 62.244 62.244 62.244 0.0088769348 0.0087092521 0.010504038 + 5600 1.4132978 5.8798939 6.9899636 0.0014877766 7.0540317 62.244 62.244 62.244 -0.0023427923 0.004559371 0.002246751 + 5700 1.4065053 5.887541 6.9922756 0.0028083452 7.1132114 62.244 62.244 62.244 0.0025188632 0.000510969 0.0053952035 + 5800 1.4079051 5.8940739 6.999908 0.0015946158 7.0685769 62.244 62.244 62.244 0.0037830287 0.00021751956 0.00078329927 + 5900 1.4076047 5.8941577 6.9997558 0.005189853 7.2232465 62.244 62.244 62.244 -0.00093244616 0.0096403542 0.0068616509 + 6000 1.4322772 5.8903539 7.0153309 0.00029752476 7.0281432 62.244 62.244 62.244 0.001913333 -0.00073790796 -0.00028285075 +Loop time of 1.40593 on 1 procs for 1000 steps with 5600 atoms + +Performance: 307270.224 tau/day, 711.274 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.14844 | 0.14844 | 0.14844 | 0.0 | 10.56 +Bond | 0.036852 | 0.036852 | 0.036852 | 0.0 | 2.62 +Neigh | 0.40537 | 0.40537 | 0.40537 | 0.0 | 28.83 +Comm | 0.036592 | 0.036592 | 0.036592 | 0.0 | 2.60 +Output | 0.00085831 | 0.00085831 | 0.00085831 | 0.0 | 0.06 +Modify | 0.74053 | 0.74053 | 0.74053 | 0.0 | 52.67 +Other | | 0.03729 | | | 2.65 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1347 ave 1347 max 1347 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5399 ave 5399 max 5399 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 5399 +Ave neighs/atom = 0.964107 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 153 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nvt molecule temp 1.4 1.4 1.0 +800 rigid bodies with 4000 atoms +print "rigid/nvt" +rigid/nvt +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 6000 1.4322772 5.8903539 7.0153309 0.012980585 7.574314 62.244 62.244 62.244 0.058317363 0.0073619377 -0.026737547 + 6100 1.4199699 5.8764035 6.9917138 0.0054065561 7.2245364 62.244 62.244 62.244 0.009227645 0.0019623802 0.0050296432 + 6200 1.3976825 5.8924426 6.9902474 0.00043900876 7.0091524 62.244 62.244 62.244 -0.0023073124 -0.00049925318 0.0041235918 + 6300 1.4077283 5.8847362 6.9904313 0.0066398301 7.2763625 62.244 62.244 62.244 0.0058018934 0.0091933877 0.0049242093 + 6400 1.3749203 5.8817073 6.9616336 0.0074967162 7.2844648 62.244 62.244 62.244 0.012281887 0.0039781589 0.0062301027 + 6500 1.3467096 5.8881264 6.9458946 -0.00011926349 6.9407588 62.244 62.244 62.244 0.0030721967 -0.0013265863 -0.0021034009 + 6600 1.3646558 5.8739857 6.9458497 0.0056064043 7.1872784 62.244 62.244 62.244 0.0059660337 0.0057680048 0.0050851745 + 6700 1.3927251 5.883612 6.9775229 0.0025583824 7.0876946 62.244 62.244 62.244 0.0030974706 0.0018499606 0.002727716 + 6800 1.4016999 5.9015886 7.0025488 0.0039070678 7.1707989 62.244 62.244 62.244 0.0068320586 0.0020056859 0.002883459 + 6900 1.4136745 5.8914714 7.001837 0.0051755091 7.22471 62.244 62.244 62.244 0.0028467792 0.0094052519 0.0032744962 + 7000 1.4286639 5.893567 7.0157059 0.0062957476 7.2868198 62.244 62.244 62.244 0.0047242086 0.0093408867 0.0048221474 +Loop time of 1.41045 on 1 procs for 1000 steps with 5600 atoms + +Performance: 306284.404 tau/day, 708.992 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.1497 | 0.1497 | 0.1497 | 0.0 | 10.61 +Bond | 0.036719 | 0.036719 | 0.036719 | 0.0 | 2.60 +Neigh | 0.40272 | 0.40272 | 0.40272 | 0.0 | 28.55 +Comm | 0.036315 | 0.036315 | 0.036315 | 0.0 | 2.57 +Output | 0.00085187 | 0.00085187 | 0.00085187 | 0.0 | 0.06 +Modify | 0.747 | 0.747 | 0.747 | 0.0 | 52.96 +Other | | 0.03715 | | | 2.63 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1284 ave 1284 max 1284 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5677 ave 5677 max 5677 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 5677 +Ave neighs/atom = 1.01375 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 151 +Dangerous builds = 0 +unfix 1 + +compute myTemp all temp + +fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 iso 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/npt iso" +rigid/npt iso +fix_modify 1 temp myTemp + +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.77 | 7.77 | 7.77 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 7000 1.4286639 5.893567 7.0157059 0.032101512 8.3980939 62.244 62.244 62.244 0.0040045405 0.040447803 0.051852194 + 7100 1.4709161 5.8870949 7.0424207 0.019697134 7.6953761 57.045689 57.045689 57.045689 0.012929484 0.020492532 0.025669387 + 7200 1.5163078 5.8421187 7.0330973 0.018916867 7.46241 50.277171 50.277171 50.277171 0.017823354 0.026688031 0.012239218 + 7300 1.5675309 5.7752739 7.0064855 0.022899743 7.3829781 45.154874 45.154874 45.154874 0.019324617 0.024318577 0.025056034 + 7400 1.5432228 5.7513096 6.9634284 0.024381819 7.272744 41.416613 41.416613 41.416613 0.032026791 0.022254425 0.018864241 + 7500 1.5511419 5.7072564 6.9255953 0.030632381 7.2405167 38.613262 38.613262 38.613262 0.041572196 0.012539031 0.037785916 + 7600 1.5437461 5.6656571 6.8781869 0.031293788 7.1486082 36.440994 36.440994 36.440994 0.036220762 0.02125772 0.036402883 + 7700 1.5873874 5.6134986 6.8603063 0.04807003 7.221002 34.765744 34.765744 34.765744 0.031608235 0.053442472 0.059159381 + 7800 1.5079648 5.601961 6.7863866 0.031128515 6.9971673 33.59594 33.59594 33.59594 0.032932226 0.015950578 0.044502741 + 7900 1.4737447 5.5644198 6.7219673 0.099246661 7.3415696 32.698542 32.698542 32.698542 0.071386679 0.10758014 0.11877317 + 8000 1.4727947 5.5161158 6.6729171 0.072190554 7.0973199 32.050043 32.050043 32.050043 0.072806068 0.06277287 0.080992723 +Loop time of 3.15299 on 1 procs for 1000 steps with 5600 atoms + +Performance: 137012.841 tau/day, 317.159 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.37069 | 0.37069 | 0.37069 | 0.0 | 11.76 +Bond | 0.05046 | 0.05046 | 0.05046 | 0.0 | 1.60 +Neigh | 1.4844 | 1.4844 | 1.4844 | 0.0 | 47.08 +Comm | 0.081178 | 0.081178 | 0.081178 | 0.0 | 2.57 +Output | 0.00083494 | 0.00083494 | 0.00083494 | 0.0 | 0.03 +Modify | 1.1163 | 1.1163 | 1.1163 | 0.0 | 35.41 +Other | | 0.0491 | | | 1.56 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2954 ave 2954 max 2954 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 25585 ave 25585 max 25585 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 25585 +Ave neighs/atom = 4.56875 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 334 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 x 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/npt x" +rigid/npt x +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.785 | 7.785 | 7.785 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 8000 1.4727947 5.5161158 6.6729171 0.13628586 7.4741313 32.050043 32.050043 32.050043 -0.030897367 0.27196335 0.1677916 + 8100 1.4522497 5.5136331 6.6542974 0.057107124 6.9895036 32.000184 32.050043 32.050043 0.049932793 0.056130194 0.065258384 + 8200 1.4407937 5.5014539 6.6331202 0.024119241 6.7733276 31.691157 32.050043 32.050043 0.041526366 0.022503949 0.0083274089 + 8300 1.4542258 5.496977 6.6391934 0.043395674 6.887667 31.215092 32.050043 32.050043 0.025407647 0.075227689 0.029551686 + 8400 1.4375595 5.4901345 6.6192605 0.013578023 6.6952098 30.494249 32.050043 32.050043 -0.0045150608 0.033500673 0.011748456 + 8500 1.4410736 5.4540565 6.5859426 0.017121222 6.679397 29.757445 32.050043 32.050043 0.035675932 -0.032105 0.047792733 + 8600 1.4372413 5.4150437 6.5439197 0.084045699 6.9949237 29.254706 32.050043 32.050043 0.10347392 0.073148157 0.075515024 + 8700 1.4299119 5.3982284 6.5213476 0.00045273296 6.5237411 28.822481 32.050043 32.050043 0.0093093459 0.0081538479 -0.016104995 + 8800 1.4677947 5.3637715 6.5166456 0.028621833 6.6651924 28.294159 32.050043 32.050043 0.033527613 0.036046563 0.016291323 + 8900 1.4625499 5.3483914 6.4971459 0.032843022 6.6649394 27.852402 32.050043 32.050043 0.040751528 0.055865445 0.0019120942 + 9000 1.4488382 5.3486741 6.4866589 0.087522574 6.9279711 27.488856 32.050043 32.050043 0.059432129 0.10936517 0.093770421 +Loop time of 3.09429 on 1 procs for 1000 steps with 5600 atoms + +Performance: 139611.779 tau/day, 323.175 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.57714 | 0.57714 | 0.57714 | 0.0 | 18.65 +Bond | 0.051715 | 0.051715 | 0.051715 | 0.0 | 1.67 +Neigh | 1.223 | 1.223 | 1.223 | 0.0 | 39.52 +Comm | 0.066183 | 0.066183 | 0.066183 | 0.0 | 2.14 +Output | 0.00086594 | 0.00086594 | 0.00086594 | 0.0 | 0.03 +Modify | 1.1355 | 1.1355 | 1.1355 | 0.0 | 36.70 +Other | | 0.03994 | | | 1.29 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3381 ave 3381 max 3381 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 31737 ave 31737 max 31737 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 31737 +Ave neighs/atom = 5.66732 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 169 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nph molecule iso 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/nph iso" +rigid/nph iso +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.788 | 7.788 | 7.788 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 9000 1.4488382 5.3486741 6.4866589 0.20124138 7.5013717 27.488856 32.050043 32.050043 0.22160189 0.42145658 -0.039334342 + 9100 1.4408457 5.3612674 6.4929746 0.076331412 6.8758499 27.440968 31.994208 31.994208 0.083838068 0.041724506 0.10343166 + 9200 1.4870445 5.3340546 6.5020483 0.01010773 6.5521592 27.334266 31.869802 31.869802 0.024563803 -0.0068003493 0.012559737 + 9300 1.4376808 5.3295183 6.4587396 0.10720051 6.9752889 27.076116 31.568817 31.568817 0.11844426 0.10444301 0.09871425 + 9400 1.4621325 5.3011274 6.4495541 0.071127232 6.7846388 26.873295 31.332342 31.332342 0.091608834 0.02680694 0.094965923 + 9500 1.4463444 5.3005044 6.4365304 0.0011545049 6.4418432 26.664 31.088319 31.088319 -0.030551889 0.036011952 -0.0019965484 + 9600 1.4473406 5.2912939 6.4281024 0.066132857 6.7281169 26.537276 30.940568 30.940568 0.12276096 0.013455525 0.06218208 + 9700 1.4520445 5.2707214 6.4112246 0.077219765 6.757956 26.446587 30.834832 30.834832 0.073829267 0.11047347 0.047356559 + 9800 1.4825713 5.246644 6.4111243 0.061402527 6.6831281 26.327581 30.696078 30.696078 0.091860222 0.022619578 0.06972778 + 9900 1.4795219 5.2344495 6.3965347 0.086345107 6.7729623 26.187615 30.532888 30.532888 0.077396265 0.11142542 0.07021363 + 10000 1.4527053 5.2126819 6.3537041 0.045117764 6.5474705 26.057038 30.380645 30.380645 0.011087188 0.058029185 0.066236921 +Loop time of 3.25046 on 1 procs for 1000 steps with 5600 atoms + +Performance: 132904.162 tau/day, 307.649 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.68223 | 0.68223 | 0.68223 | 0.0 | 20.99 +Bond | 0.05211 | 0.05211 | 0.05211 | 0.0 | 1.60 +Neigh | 1.2617 | 1.2617 | 1.2617 | 0.0 | 38.82 +Comm | 0.069407 | 0.069407 | 0.069407 | 0.0 | 2.14 +Output | 0.00085688 | 0.00085688 | 0.00085688 | 0.0 | 0.03 +Modify | 1.1438 | 1.1438 | 1.1438 | 0.0 | 35.19 +Other | | 0.04037 | | | 1.24 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3756 ave 3756 max 3756 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 37360 ave 37360 max 37360 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 37360 +Ave neighs/atom = 6.67143 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 158 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nph molecule x 0.05 0.05 1.0 y 0.05 0.05 1.0 couple xy dilate all +800 rigid bodies with 4000 atoms +print "rigid/nph xy couple" +rigid/nph xy couple +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.795 | 7.795 | 7.795 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 10000 1.4527053 5.2126819 6.3537041 0.056937886 6.5982342 26.057038 30.380645 30.380645 -0.37001102 0.18554825 0.35527643 + 10100 1.4606958 5.2220088 6.3693071 0.10308269 6.8132489 26.093341 30.422971 30.380645 0.12567436 0.057087258 0.12648646 + 10200 1.4429187 5.2134399 6.3467753 0.022637194 6.4450326 26.195743 30.542365 30.380645 0.010739012 0.071921542 -0.014748971 + 10300 1.4559104 5.2293511 6.3728908 0.0079467818 6.4073504 26.182966 30.527467 30.380645 -0.014274944 0.032205181 0.0059101087 + 10400 1.4741126 5.2072221 6.3650586 0.095611559 6.7814715 26.240156 30.594148 30.380645 0.073579289 0.092441893 0.12081349 + 10500 1.4411698 5.2173262 6.3492878 0.010458046 6.3947259 26.208633 30.557393 30.380645 0.036794882 -0.0051462954 -0.00027444949 + 10600 1.4492728 5.1940541 6.3323802 0.042602534 6.5163992 26.132032 30.468083 30.380645 0.090116773 0.0022769844 0.035413845 + 10700 1.4599974 5.1895935 6.3363432 0.05533717 6.573197 26.013045 30.329352 30.380645 0.070180878 0.08084881 0.014981824 + 10800 1.4781084 5.1724704 6.3334454 0.031843587 6.4690539 25.947295 30.252692 30.380645 0.0041524129 0.077618702 0.013759645 + 10900 1.4410507 5.1708846 6.3027527 0.020221033 6.3881531 25.839719 30.127267 30.380645 -0.0014092876 0.014833141 0.047239245 + 11000 1.4150286 5.1756927 6.2871219 0.039768792 6.45242 25.63435 29.887821 30.380645 0.034930907 0.032278926 0.052096542 +Loop time of 3.43774 on 1 procs for 1000 steps with 5600 atoms + +Performance: 125663.855 tau/day, 290.889 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.75066 | 0.75066 | 0.75066 | 0.0 | 21.84 +Bond | 0.053177 | 0.053177 | 0.053177 | 0.0 | 1.55 +Neigh | 1.3577 | 1.3577 | 1.3577 | 0.0 | 39.49 +Comm | 0.07294 | 0.07294 | 0.07294 | 0.0 | 2.12 +Output | 0.00086403 | 0.00086403 | 0.00086403 | 0.0 | 0.03 +Modify | 1.1612 | 1.1612 | 1.1612 | 0.0 | 33.78 +Other | | 0.0412 | | | 1.20 + +Nlocal: 5600 ave 5600 max 5600 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3904 ave 3904 max 3904 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 39666 ave 39666 max 39666 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 39666 +Ave neighs/atom = 7.08321 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 159 +Dangerous builds = 0 + +Total wall time: 0:00:22 diff --git a/examples/rigid/log.27Nov18.rigid.tnr.g++.4 b/examples/rigid/log.27Nov18.rigid.tnr.g++.4 new file mode 100644 index 0000000000..1fa53eb8d3 --- /dev/null +++ b/examples/rigid/log.27Nov18.rigid.tnr.g++.4 @@ -0,0 +1,458 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Tethered nanorods + +atom_style molecular + +read_data data.rigid.tnr + orthogonal box = (-31.122 -31.122 -31.122) to (31.122 31.122 31.122) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 5600 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 1600 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + +# Specify bond parameters + +bond_style fene +bond_coeff 1 30.0 1.5 1.0 1.0 + +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + +# Specify initial velocities + +velocity all create 1.4 109345 + +# Specify rigid components + +group rods type 2 +4000 atoms in group rods +group tethers subtract all rods +1600 atoms in group tethers + +neigh_modify exclude molecule/intra rods delay 0 every 1 + +# Specify the pair potentials + +pair_style lj/cut 2.5 +pair_modify shift yes +pair_coeff * * 1.0 1.0 1.122 +pair_coeff 2 2 1.0 1.0 2.5 + +# Specify output + +thermo 100 +thermo_style custom step temp pe etotal press enthalpy lx ly lz pxx pyy pzz +thermo_modify flush yes lost warn + +timestep 0.005 + +fix 1 rods rigid molecule +800 rigid bodies with 4000 atoms +fix 2 tethers nve +fix 3 all langevin 1.4 1.4 1.0 437624 + +run 5000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 45 45 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.216 | 7.384 | 7.552 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 0 1.3963219 5.9478449 7.0445809 0.048565317 9.13595 62.244 62.244 62.244 0.0091983659 0.11850113 0.017996458 + 100 1.3999025 5.9707695 7.0703179 0.027293074 8.24564 62.244 62.244 62.244 0.017246307 0.04732529 0.017307624 + 200 1.4245544 5.9878446 7.1067558 0.0072016369 7.41688 62.244 62.244 62.244 0.0071370801 0.0084066589 0.0060611719 + 300 1.4212057 5.9942604 7.1105414 0.0023296933 7.210865 62.244 62.244 62.244 -0.0059197015 0.0040269953 0.008881786 + 400 1.4030116 5.9953214 7.0973119 0.0055751834 7.3373961 62.244 62.244 62.244 -0.0026920847 0.013323321 0.0060943141 + 500 1.4201338 5.9984777 7.1139168 -0.0018229523 7.035415 62.244 62.244 62.244 -0.0082217102 -0.00047319975 0.0032260529 + 600 1.425173 5.9902537 7.1096508 0.013367744 7.6853062 62.244 62.244 62.244 0.012971415 0.016298595 0.010833222 + 700 1.4181225 5.9840752 7.0979345 0.0014999758 7.1625279 62.244 62.244 62.244 -0.0015835387 0.0045967753 0.0014866907 + 800 1.4084205 5.9778462 7.084085 0.0063728488 7.3585191 62.244 62.244 62.244 0.0036202744 0.005593586 0.0099046859 + 900 1.3958301 5.9891019 7.0854517 0.0028974454 7.2102244 62.244 62.244 62.244 0.0087724642 0.0014508428 -0.001530971 + 1000 1.3937374 5.9794855 7.0741916 0.0087158481 7.4495223 62.244 62.244 62.244 0.014424783 0.0034958881 0.0082268735 + 1100 1.3729162 5.9916252 7.0699773 0.0030451966 7.2011127 62.244 62.244 62.244 0.00084635444 -0.00064448421 0.0089337195 + 1200 1.4427374 5.9713589 7.1045519 0.0042680608 7.2883474 62.244 62.244 62.244 0.0030884628 0.0031576538 0.0065580658 + 1300 1.3971469 5.9728674 7.0702514 0.0022809251 7.168475 62.244 62.244 62.244 0.00060902513 -0.00020572386 0.006439474 + 1400 1.4194118 5.9672631 7.082135 0.012945844 7.6396221 62.244 62.244 62.244 0.0082418827 0.016256336 0.014339314 + 1500 1.3866472 5.9728382 7.0619753 0.0010642438 7.1078049 62.244 62.244 62.244 0.0020316123 0.0020439035 -0.00088278432 + 1600 1.4184955 5.9539591 7.0681113 0.0077605409 7.4023036 62.244 62.244 62.244 0.0033721722 0.0057827512 0.014126699 + 1700 1.3612202 5.9676733 7.0368389 0.00016862131 7.0441002 62.244 62.244 62.244 0.0052525345 0.0007705269 -0.0055171975 + 1800 1.3641041 5.9521837 7.0236144 0.0057884587 7.2728829 62.244 62.244 62.244 0.0038061044 0.0044032908 0.009155981 + 1900 1.3594477 5.9646024 7.0323757 0.0044261926 7.2229809 62.244 62.244 62.244 0.0019417448 0.006871542 0.004465291 + 2000 1.3776971 5.9431816 7.0252888 -0.0012460593 6.9716298 62.244 62.244 62.244 -0.0010913822 0.00098119436 -0.0036279901 + 2100 1.3986245 5.9509735 7.0495181 0.007520633 7.3733792 62.244 62.244 62.244 0.008359824 0.0075919773 0.0066100978 + 2200 1.4033594 5.9548158 7.0570794 0.0016804284 7.1294438 62.244 62.244 62.244 -0.001842641 0.0032876741 0.0035962521 + 2300 1.4048926 5.9444129 7.0478808 0.0062444034 7.3167836 62.244 62.244 62.244 0.004383569 0.0065720464 0.007777595 + 2400 1.4044043 5.9370822 7.0401666 0.0034562836 7.1890046 62.244 62.244 62.244 0.0068959298 0.0041111713 -0.00063825026 + 2500 1.4200762 5.9359254 7.0513193 0.0028319649 7.1732722 62.244 62.244 62.244 -0.00030414203 0.0039571831 0.0048428538 + 2600 1.3876469 5.9249124 7.0148347 -0.0017777224 6.9382806 62.244 62.244 62.244 -0.00047616392 -0.0025484917 -0.0023085116 + 2700 1.4099941 5.916763 7.0242378 0.0070716263 7.3287634 62.244 62.244 62.244 0.012628756 0.0053812867 0.0032048359 + 2800 1.4444643 5.9283432 7.0628925 0.0019400024 7.1464349 62.244 62.244 62.244 0.0014895079 0.0046367397 -0.00030624055 + 2900 1.3902832 5.9152516 7.0072446 -0.002166221 6.9139606 62.244 62.244 62.244 -0.0012374412 -0.00056403267 -0.004697189 + 3000 1.3711706 5.922146 6.9991271 0.011101505 7.4771914 62.244 62.244 62.244 0.011063833 0.012093026 0.010147657 + 3100 1.3569137 5.9171753 6.9829583 -0.002826677 6.8612331 62.244 62.244 62.244 -0.0069507252 0.0010084399 -0.0025377458 + 3200 1.4004275 5.905939 7.0058998 0.005439467 7.2401397 62.244 62.244 62.244 0.010352184 0.0057594148 0.00020680265 + 3300 1.3641217 5.9145275 6.985972 -0.0027212811 6.8687855 62.244 62.244 62.244 -0.00065933677 -0.0057713008 -0.0017332057 + 3400 1.3868722 5.9059546 6.9952684 0.0092591256 7.3939943 62.244 62.244 62.244 0.010690877 0.010752519 0.006333981 + 3500 1.3939169 5.8992292 6.9940762 0.0074340028 7.3142068 62.244 62.244 62.244 0.010137307 0.0044252569 0.0077394447 + 3600 1.3982507 5.9219461 7.0201971 0.005679459 7.2647718 62.244 62.244 62.244 0.0023367243 0.008059221 0.0066424317 + 3700 1.4019908 5.9059957 7.0071843 0.0065915477 7.2910363 62.244 62.244 62.244 0.0049554109 0.010827005 0.0039922268 + 3800 1.3960736 5.902079 6.99862 0.0027763588 7.1181784 62.244 62.244 62.244 -0.0015907217 0.0025862003 0.0073335977 + 3900 1.4352825 5.8986215 7.025959 0.003498268 7.176605 62.244 62.244 62.244 0.0030416681 0.0027739509 0.0046791851 + 4000 1.4121845 5.907903 7.0170983 0.005046232 7.2344043 62.244 62.244 62.244 0.0045542682 0.0064113499 0.0041730779 + 4100 1.3989578 5.9082397 7.0070461 0.00042880001 7.0255115 62.244 62.244 62.244 0.0025735184 0.0025181486 -0.003805267 + 4200 1.3998829 5.8998147 6.9993477 0.0042777376 7.18356 62.244 62.244 62.244 0.0013744091 0.00646996 0.0049888436 + 4300 1.4076022 5.9044509 7.010047 0.0066789366 7.2976622 62.244 62.244 62.244 0.0073610616 0.0048139129 0.0078618353 + 4400 1.4161075 5.9064331 7.0187096 -0.0011844267 6.9677046 62.244 62.244 62.244 -0.0019088313 -0.0037556503 0.0021112015 + 4500 1.4292243 5.8980093 7.0205884 0.0018500416 7.1002567 62.244 62.244 62.244 0.0041144085 0.0010160497 0.00041966655 + 4600 1.3958775 5.8943133 6.9907003 0.0041485723 7.1693504 62.244 62.244 62.244 0.0033999287 0.0041620406 0.0048837475 + 4700 1.3856614 5.8886847 6.9770475 0.0013150314 7.0336767 62.244 62.244 62.244 -0.00051753674 0.0030875481 0.0013750828 + 4800 1.401683 5.9023505 7.0032974 0.002504877 7.1111649 62.244 62.244 62.244 0.0016543718 -0.0001813413 0.0060416007 + 4900 1.446628 5.9050553 7.0413042 -0.0026645902 6.9265589 62.244 62.244 62.244 -0.00069368076 -0.0073984763 9.8386402e-05 + 5000 1.4387091 5.9077604 7.0377893 0.0049468048 7.2508137 62.244 62.244 62.244 0.0042902506 0.0046715523 0.0058786114 +Loop time of 3.70354 on 4 procs for 5000 steps with 5600 atoms + +Performance: 583225.455 tau/day, 1350.059 timesteps/s +92.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.081073 | 0.13498 | 0.20108 | 14.4 | 3.64 +Bond | 0.032352 | 0.048566 | 0.066671 | 7.0 | 1.31 +Neigh | 0.71345 | 0.72477 | 0.73658 | 1.3 | 19.57 +Comm | 0.29998 | 0.37027 | 0.42722 | 8.9 | 10.00 +Output | 0.0026417 | 0.0048325 | 0.0085185 | 3.2 | 0.13 +Modify | 1.9807 | 2.1035 | 2.263 | 8.1 | 56.80 +Other | | 0.3166 | | | 8.55 + +Nlocal: 1400 ave 1868 max 905 min +Histogram: 1 1 0 0 0 0 0 0 0 2 +Nghost: 648.25 ave 688 max 598 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Neighs: 1202.5 ave 1821 max 698 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 4810 +Ave neighs/atom = 0.858929 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 759 +Dangerous builds = 0 + +# Replace fix rigid and fix langevin with new ones + +unfix 1 +unfix 3 + +fix 3 tethers langevin 1.4 1.4 1.0 198450 + +# Test different integrators for rods + +fix 1 rods rigid/nve molecule +800 rigid bodies with 4000 atoms +print "rigid/nve" +rigid/nve +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 5000 1.4387091 5.9077604 7.0377893 0.0035977871 7.1927209 62.244 62.244 62.244 0.025518192 -0.016769871 0.0020450407 + 5100 1.4449405 5.8876257 7.022549 0.0023104502 7.122044 62.244 62.244 62.244 0.0045960664 0.0036845954 -0.0013493113 + 5200 1.4271652 5.9160022 7.036964 0.0020238904 7.1241189 62.244 62.244 62.244 -0.0022546188 0.00392213 0.0044041599 + 5300 1.4143299 5.9052666 7.016147 0.0064054214 7.2919838 62.244 62.244 62.244 0.0090997079 0.0026363579 0.0074801984 + 5400 1.4426441 5.9087558 7.0418754 0.0020465683 7.1300068 62.244 62.244 62.244 0.0043188307 3.0314417e-06 0.0018178427 + 5500 1.4281065 5.9038871 7.0255883 0.00058665945 7.0508516 62.244 62.244 62.244 0.005898925 0.00066013177 -0.0047990784 + 5600 1.4315628 5.902373 7.0267888 0.0096475978 7.4422435 62.244 62.244 62.244 0.0054175405 0.011780025 0.011745228 + 5700 1.4075482 5.9075587 7.0131124 0.0052150708 7.2376891 62.244 62.244 62.244 0.0030069124 0.0036690785 0.0089692215 + 5800 1.4215681 5.9048555 7.0214211 0.0015070444 7.086319 62.244 62.244 62.244 -5.6858344e-05 0.0023644208 0.0022135708 + 5900 1.3992461 5.8949367 6.9939696 0.0062425817 7.262794 62.244 62.244 62.244 0.0056972212 0.0095293238 0.0035012003 + 6000 1.385289 5.8972105 6.9852808 0.0043255163 7.1715506 62.244 62.244 62.244 0.0040215567 0.0026330714 0.0063219208 +Loop time of 0.84847 on 4 procs for 1000 steps with 5600 atoms + +Performance: 509151.820 tau/day, 1178.592 timesteps/s +94.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.020741 | 0.03547 | 0.053064 | 7.5 | 4.18 +Bond | 0.0064373 | 0.0096895 | 0.013065 | 3.0 | 1.14 +Neigh | 0.14992 | 0.15174 | 0.15392 | 0.4 | 17.88 +Comm | 0.068751 | 0.081259 | 0.10084 | 4.2 | 9.58 +Output | 0.00054288 | 0.00096381 | 0.0017593 | 0.0 | 0.11 +Modify | 0.45914 | 0.48587 | 0.51316 | 2.8 | 57.26 +Other | | 0.08348 | | | 9.84 + +Nlocal: 1400 ave 1868 max 935 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 633.75 ave 695 max 541 min +Histogram: 1 0 0 0 1 0 0 0 0 2 +Neighs: 1263 ave 1799 max 710 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 5052 +Ave neighs/atom = 0.902143 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 153 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nvt molecule temp 1.4 1.4 1.0 +800 rigid bodies with 4000 atoms +print "rigid/nvt" +rigid/nvt +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 6000 1.385289 5.8972105 6.9852808 0.0029190017 7.1109818 62.244 62.244 62.244 0.026575922 -0.075631452 0.057812535 + 6100 1.3829575 5.9055308 6.9917699 0.0022904842 7.090405 62.244 62.244 62.244 -0.00045870123 0.0040556461 0.0032745076 + 6200 1.3942692 5.90506 7.0001838 0.0046406766 7.2000253 62.244 62.244 62.244 0.0042263485 0.0051632793 0.0045324021 + 6300 1.4009885 5.902399 7.0028005 0.0077682466 7.3373246 62.244 62.244 62.244 0.0071636876 0.0098268446 0.0063142075 + 6400 1.3627532 5.9075588 6.9779284 0.0093180831 7.3791932 62.244 62.244 62.244 0.0062401458 0.01302262 0.0086914833 + 6500 1.3341203 5.9012967 6.9491767 0.01010805 7.3844599 62.244 62.244 62.244 0.0031876185 0.011099561 0.01603697 + 6600 1.3572847 5.8915298 6.9576042 -0.00034416901 6.9427833 62.244 62.244 62.244 0.0025579012 -0.0011308802 -0.0024595281 + 6700 1.366374 5.8985277 6.9717413 0.0029472772 7.0986599 62.244 62.244 62.244 0.0022469424 -0.00042869772 0.0070235868 + 6800 1.381673 5.8909304 6.9761606 -9.1063397e-05 6.9722391 62.244 62.244 62.244 -0.0048194377 -0.00080972169 0.0053559692 + 6900 1.4011472 5.8881927 6.9887188 0.0010086058 7.0321524 62.244 62.244 62.244 0.0012132619 -0.0025916747 0.0044042301 + 7000 1.3973658 5.8867938 6.9843498 0.0070015187 7.2858563 62.244 62.244 62.244 0.0058913402 0.0076802028 0.0074330131 +Loop time of 0.902266 on 4 procs for 1000 steps with 5600 atoms + +Performance: 478794.425 tau/day, 1108.320 timesteps/s +92.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.022644 | 0.037091 | 0.054025 | 7.4 | 4.11 +Bond | 0.0066526 | 0.0098482 | 0.012934 | 2.8 | 1.09 +Neigh | 0.15815 | 0.16028 | 0.16242 | 0.5 | 17.76 +Comm | 0.086046 | 0.10069 | 0.11568 | 3.7 | 11.16 +Output | 0.00047731 | 0.00090772 | 0.0016732 | 0.0 | 0.10 +Modify | 0.46692 | 0.49338 | 0.52973 | 3.5 | 54.68 +Other | | 0.1001 | | | 11.09 + +Nlocal: 1400 ave 1832 max 970 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 652.5 ave 749 max 561 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 1407.5 ave 2071 max 748 min +Histogram: 1 1 0 0 0 0 0 0 1 1 + +Total # of neighbors = 5630 +Ave neighs/atom = 1.00536 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 149 +Dangerous builds = 0 +unfix 1 + +compute myTemp all temp + +fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 iso 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/npt iso" +rigid/npt iso +fix_modify 1 temp myTemp + +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.217 | 7.395 | 7.573 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 7000 1.3973658 5.8867938 6.9843498 0.0026564535 7.0987447 62.244 62.244 62.244 0.033711862 -0.0068580786 -0.018884423 + 7100 1.463906 5.861189 7.0110088 0.011521299 7.3924648 57.022165 57.022165 57.022165 0.010788399 0.0093706759 0.014404821 + 7200 1.4950346 5.817724 6.9919936 0.023104537 7.516484 50.28164 50.28164 50.28164 0.023252537 0.018108267 0.027952807 + 7300 1.5103539 5.7757334 6.9620355 0.02265972 7.3367664 45.242961 45.242961 45.242961 0.023588139 0.022279352 0.022111669 + 7400 1.5583184 5.7576833 6.9816589 0.028383162 7.3460731 41.582206 41.582206 41.582206 0.027312172 0.029876235 0.027961079 + 7500 1.5988886 5.6930714 6.9489127 0.046500933 7.4415595 39.00204 39.00204 39.00204 0.057497139 0.031007247 0.050998413 + 7600 1.5458926 5.6844397 6.8986555 0.034168406 7.2068206 36.96428 36.96428 36.96428 0.037874991 0.027247969 0.037382258 + 7700 1.5179913 5.6416448 6.8339457 0.070322183 7.3856048 35.284894 35.284894 35.284894 0.054248771 0.10402305 0.052694729 + 7800 1.4797888 5.6045532 6.7668481 0.07801402 7.3126319 33.963465 33.963465 33.963465 0.096058241 0.061172194 0.076811627 + 7900 1.4846305 5.54982 6.7159177 0.065303374 7.1325712 32.936376 32.936376 32.936376 0.089117046 0.06069295 0.046100127 + 8000 1.4352665 5.5157472 6.6430722 0.065962965 7.0326574 32.099391 32.099391 32.099391 0.032126133 0.070109418 0.095653344 +Loop time of 1.72334 on 4 procs for 1000 steps with 5600 atoms + +Performance: 250675.661 tau/day, 580.268 timesteps/s +92.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.060282 | 0.099801 | 0.13824 | 10.8 | 5.79 +Bond | 0.0095227 | 0.013491 | 0.017217 | 3.2 | 0.78 +Neigh | 0.58793 | 0.59546 | 0.60654 | 1.0 | 34.55 +Comm | 0.17903 | 0.21403 | 0.24615 | 6.5 | 12.42 +Output | 0.00045562 | 0.00076783 | 0.0017018 | 0.0 | 0.04 +Modify | 0.64959 | 0.68513 | 0.70671 | 2.8 | 39.76 +Other | | 0.1147 | | | 6.65 + +Nlocal: 1400 ave 1768 max 981 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Nghost: 1574 ave 1663 max 1447 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Neighs: 6338 ave 9521 max 3068 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 25352 +Ave neighs/atom = 4.52714 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 337 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/npt molecule temp 1.4 1.4 1.0 x 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/npt x" +rigid/npt x +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.226 | 7.412 | 7.597 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 8000 1.4352665 5.5157472 6.6430722 0.073641793 7.0780095 32.099391 32.099391 32.099391 0.13359913 0.13991003 -0.052583787 + 8100 1.4385682 5.5149882 6.6449064 0.092621097 7.1894426 31.952972 32.099391 32.099391 0.10729401 0.11619987 0.054369411 + 8200 1.42735 5.5149024 6.6360094 0.023903894 6.7756304 31.745099 32.099391 32.099391 0.051524189 0.013370811 0.006816681 + 8300 1.4335369 5.5031396 6.629106 0.024536474 6.7705237 31.324638 32.099391 32.099391 0.042356568 -0.0039258365 0.035178692 + 8400 1.4502714 5.4659017 6.6050122 0.06575457 6.9774701 30.785462 32.099391 32.099391 0.056998298 0.084852971 0.055412441 + 8500 1.4432366 5.4541505 6.5877355 0.03322226 6.7725932 30.241461 32.099391 32.099391 0.045871758 0.024443739 0.029351281 + 8600 1.436491 5.4272043 6.5554911 0.039811655 6.7732608 29.729098 32.099391 32.099391 0.037709456 0.060942551 0.020782958 + 8700 1.4099251 5.4106713 6.5180919 0.013490442 6.590596 29.209958 32.099391 32.099391 0.025833003 -0.0021161354 0.016754458 + 8800 1.3801478 5.3926425 6.4766747 0.028808964 6.6280205 28.552039 32.099391 32.099391 0.012603549 0.018713073 0.055110271 + 8900 1.4411695 5.3583474 6.4903088 0.053464468 6.7655624 27.980937 32.099391 32.099391 0.055084927 0.073292013 0.032016464 + 9000 1.4264395 5.3680298 6.4884216 0.066557314 6.8276318 27.69922 32.099391 32.099391 0.05380086 0.069450871 0.076420212 +Loop time of 1.45936 on 4 procs for 1000 steps with 5600 atoms + +Performance: 296020.704 tau/day, 685.233 timesteps/s +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.097855 | 0.1563 | 0.20542 | 12.5 | 10.71 +Bond | 0.010222 | 0.01371 | 0.016844 | 2.6 | 0.94 +Neigh | 0.43646 | 0.44419 | 0.4668 | 2.0 | 30.44 +Comm | 0.10136 | 0.14589 | 0.19563 | 11.6 | 10.00 +Output | 0.00046229 | 0.00076181 | 0.0016556 | 0.0 | 0.05 +Modify | 0.59971 | 0.62524 | 0.65776 | 2.9 | 42.84 +Other | | 0.07327 | | | 5.02 + +Nlocal: 1400 ave 1680 max 1049 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Nghost: 1627.25 ave 1775 max 1488 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 7842 ave 10600 max 4326 min +Histogram: 1 0 1 0 0 0 0 0 0 2 + +Total # of neighbors = 31368 +Ave neighs/atom = 5.60143 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 166 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nph molecule iso 0.05 0.05 1.0 dilate all +800 rigid bodies with 4000 atoms +print "rigid/nph iso" +rigid/nph iso +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.227 | 7.412 | 7.597 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 9000 1.4264395 5.3680298 6.4884216 0.0098629166 6.5386881 27.69922 32.099391 32.099391 -0.32352455 -0.020288613 0.37340191 + 9100 1.4501008 5.3468478 6.4858243 0.059250929 6.7846766 27.60347 31.988431 31.988431 0.076039445 0.051409059 0.050304282 + 9200 1.4635102 5.3406895 6.4901983 0.035210102 6.6656151 27.490192 31.857158 31.857158 0.0079484246 0.066653954 0.031027926 + 9300 1.4503713 5.3595734 6.4987624 0.020794 6.6013231 27.398334 31.750708 31.750708 0.053098983 0.0019379163 0.0073450997 + 9400 1.4701421 5.3186993 6.4734172 0.039118143 6.6618027 27.181055 31.498913 31.498913 0.076457868 -0.0028405762 0.043737137 + 9500 1.4495442 5.323167 6.4617063 0.073591495 6.8091096 27.000921 31.290164 31.290164 0.037777789 0.097624306 0.085372389 + 9600 1.4668438 5.3002222 6.4523494 0.06758294 6.7648428 26.814997 31.074705 31.074705 0.057941415 0.09775976 0.047047645 + 9700 1.4926839 5.2883964 6.4608196 0.059125916 6.7288224 26.637713 30.869258 30.869258 0.049817515 0.032285203 0.095275031 + 9800 1.4644558 5.2702597 6.4205112 0.0076221617 6.4543756 26.460515 30.663911 30.663911 -0.0060723629 0.010616271 0.018322577 + 9900 1.4669549 5.2511861 6.4034006 0.044167302 6.5961243 26.30195 30.480157 30.480157 0.026274163 0.013826125 0.092401618 + 10000 1.460983 5.2470476 6.3945715 0.10536479 6.8483021 26.186495 30.346361 30.346361 0.088951294 0.11273872 0.11440435 +Loop time of 1.61361 on 4 procs for 1000 steps with 5600 atoms + +Performance: 267722.758 tau/day, 619.729 timesteps/s +93.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.13322 | 0.18643 | 0.259 | 12.5 | 11.55 +Bond | 0.012367 | 0.014462 | 0.016771 | 1.6 | 0.90 +Neigh | 0.46284 | 0.46471 | 0.46675 | 0.3 | 28.80 +Comm | 0.10183 | 0.17241 | 0.22246 | 12.4 | 10.68 +Output | 0.00044584 | 0.00074542 | 0.0016396 | 0.0 | 0.05 +Modify | 0.691 | 0.7057 | 0.72761 | 1.8 | 43.73 +Other | | 0.06915 | | | 4.29 + +Nlocal: 1400 ave 1633 max 1183 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1747.75 ave 1847 max 1624 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 9290.75 ave 12454 max 6621 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 37163 +Ave neighs/atom = 6.63625 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 162 +Dangerous builds = 0 +unfix 1 + +fix 1 rods rigid/nph molecule x 0.05 0.05 1.0 y 0.05 0.05 1.0 couple xy dilate all +800 rigid bodies with 4000 atoms +print "rigid/nph xy couple" +rigid/nph xy couple +run 1000 +Per MPI rank memory allocation (min/avg/max) = 7.229 | 7.413 | 7.597 Mbytes +Step Temp PotEng TotEng Press Enthalpy Lx Ly Lz Pxx Pyy Pzz + 10000 1.460983 5.2470476 6.3945715 0.18376191 7.1859023 26.186495 30.346361 30.346361 0.015959435 0.68341409 -0.14808778 + 10100 1.4487259 5.2485513 6.3864479 0.060157728 6.6465409 26.238844 30.407026 30.346361 0.10289596 0.022823411 0.05475381 + 10200 1.4335646 5.2420513 6.3680395 0.013676852 6.4271554 26.235255 30.402867 30.346361 -0.017328522 0.040786509 0.017572569 + 10300 1.4334952 5.2377534 6.3636871 0.030978458 6.4967192 26.150168 30.304264 30.346361 0.044154015 0.036133394 0.012647966 + 10400 1.4209473 5.2242736 6.3403516 -0.00094467594 6.3363148 26.085773 30.22964 30.346361 0.030664991 0.018005544 -0.051504563 + 10500 1.4262805 5.2044624 6.3247294 0.045042501 6.5149748 25.934148 30.053928 30.346361 0.031103656 0.045410964 0.058612885 + 10600 1.4516048 5.2017459 6.3419036 0.069565209 6.6313867 25.741959 29.831208 30.346361 0.021768778 0.11302833 0.073898515 + 10700 1.4841074 5.1911212 6.356808 0.046866825 6.5493087 25.574636 29.637306 30.346361 0.073969059 0.064901506 0.0017299084 + 10800 1.4646257 5.1958815 6.3462665 0.050747116 6.5534926 25.500146 29.550982 30.346361 0.076646556 0.070734108 0.004860682 + 10900 1.461356 5.1821605 6.3299773 0.069060447 6.610166 25.417723 29.455466 30.346361 0.051399011 0.065631311 0.090151019 + 11000 1.4395386 5.1786243 6.3093047 -0.0087983274 6.2737059 25.383039 29.415273 30.346361 -0.060891892 0.037235898 -0.0027389884 +Loop time of 1.56065 on 4 procs for 1000 steps with 5600 atoms + +Performance: 276807.605 tau/day, 640.758 timesteps/s +94.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.15892 | 0.20364 | 0.2564 | 9.2 | 13.05 +Bond | 0.011486 | 0.014652 | 0.01918 | 2.6 | 0.94 +Neigh | 0.43915 | 0.43981 | 0.44125 | 0.1 | 28.18 +Comm | 0.093711 | 0.14431 | 0.18183 | 9.9 | 9.25 +Output | 0.00044441 | 0.00073904 | 0.0016198 | 0.0 | 0.05 +Modify | 0.66889 | 0.68497 | 0.70418 | 1.5 | 43.89 +Other | | 0.07254 | | | 4.65 + +Nlocal: 1400 ave 1610 max 1237 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 1832 ave 1919 max 1765 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Neighs: 10008.2 ave 12428 max 7982 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 40033 +Ave neighs/atom = 7.14875 +Ave special neighs/atom = 0.571429 +Neighbor list builds = 157 +Dangerous builds = 0 + +Total wall time: 0:00:11 diff --git a/examples/shear/log.5Oct16.shear.g++.1 b/examples/shear/log.27Nov18.shear.g++.1 similarity index 78% rename from examples/shear/log.5Oct16.shear.g++.1 rename to examples/shear/log.27Nov18.shear.g++.1 index 2a9d4e4b93..37731131c1 100644 --- a/examples/shear/log.5Oct16.shear.g++.1 +++ b/examples/shear/log.27Nov18.shear.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation units metal @@ -16,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.001899 secs pair_style eam pair_coeff * * Ni_u3.eam @@ -61,38 +63,43 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.1 ghost atom cutoff = 5.1 - binsize = 2.55 -> bins = 23 14 4 -Memory usage per processor = 2.88718 Mbytes + binsize = 2.55, bins = 23 14 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.49 | 3.49 | 3.49 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 300 -8317.4367 0 -8263.8067 -7100.7667 19547.02 25 220.34459 -8272.5701 0 -8233.1798 5168.6655 19547.02 50 300 -8237.7876 0 -8184.1576 13741.264 19686.493 75 292.67269 -8229.8093 0 -8177.4891 14319.387 19744.946 100 300 -8245.8191 0 -8192.189 9034.8776 19778.592 -Loop time of 0.259133 on 1 procs for 100 steps with 1912 atoms +Loop time of 0.284035 on 1 procs for 100 steps with 1912 atoms -Performance: 33.342 ns/day, 0.720 hours/ns, 385.902 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 30.419 ns/day, 0.789 hours/ns, 352.069 timesteps/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.2446 | 0.2446 | 0.2446 | 0.0 | 94.39 -Neigh | 0.0086329 | 0.0086329 | 0.0086329 | 0.0 | 3.33 -Comm | 0.0014203 | 0.0014203 | 0.0014203 | 0.0 | 0.55 -Output | 5.8413e-05 | 5.8413e-05 | 5.8413e-05 | 0.0 | 0.02 -Modify | 0.0033374 | 0.0033374 | 0.0033374 | 0.0 | 1.29 -Other | | 0.001081 | | | 0.42 +Pair | 0.26775 | 0.26775 | 0.26775 | 0.0 | 94.27 +Neigh | 0.0096006 | 0.0096006 | 0.0096006 | 0.0 | 3.38 +Comm | 0.0018885 | 0.0018885 | 0.0018885 | 0.0 | 0.66 +Output | 9.8228e-05 | 9.8228e-05 | 9.8228e-05 | 0.0 | 0.03 +Modify | 0.0035083 | 0.0035083 | 0.0035083 | 0.0 | 1.24 +Other | | 0.001191 | | | 0.42 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -125,11 +132,11 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 -Memory usage per processor = 2.88909 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.492 | 3.492 | 3.492 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 298.42546 -8245.8191 0 -8210.2533 8056.2702 19786.12 100 300 -8260.779 0 -8225.0257 3180.8817 19817.51 @@ -162,20 +169,20 @@ Step Temp E_pair E_mol TotEng Press Volume 2800 306.61457 -8165.9986 0 -8129.457 -2360.5296 22954.851 2900 305.42952 -8161.9351 0 -8125.5347 -6928.3135 23081.881 3000 292.3109 -8156.8668 0 -8122.0298 -9481.3532 23197.918 -Loop time of 7.96699 on 1 procs for 3000 steps with 1912 atoms +Loop time of 8.5487 on 1 procs for 3000 steps with 1912 atoms -Performance: 32.534 ns/day, 0.738 hours/ns, 376.554 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 30.320 ns/day, 0.792 hours/ns, 350.931 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.3036 | 7.3036 | 7.3036 | 0.0 | 91.67 -Neigh | 0.48164 | 0.48164 | 0.48164 | 0.0 | 6.05 -Comm | 0.045735 | 0.045735 | 0.045735 | 0.0 | 0.57 -Output | 0.00060129 | 0.00060129 | 0.00060129 | 0.0 | 0.01 -Modify | 0.10228 | 0.10228 | 0.10228 | 0.0 | 1.28 -Other | | 0.03312 | | | 0.42 +Pair | 7.7964 | 7.7964 | 7.7964 | 0.0 | 91.20 +Neigh | 0.54999 | 0.54999 | 0.54999 | 0.0 | 6.43 +Comm | 0.061907 | 0.061907 | 0.061907 | 0.0 | 0.72 +Output | 0.00085449 | 0.00085449 | 0.00085449 | 0.0 | 0.01 +Modify | 0.10321 | 0.10321 | 0.10321 | 0.0 | 1.21 +Other | | 0.03637 | | | 0.43 Nlocal: 1912 ave 1912 max 1912 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/shear/log.5Oct16.shear.g++.4 b/examples/shear/log.27Nov18.shear.g++.4 similarity index 78% rename from examples/shear/log.5Oct16.shear.g++.4 rename to examples/shear/log.27Nov18.shear.g++.4 index ac94b38918..f06a26ece5 100644 --- a/examples/shear/log.5Oct16.shear.g++.4 +++ b/examples/shear/log.27Nov18.shear.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation units metal @@ -16,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000388622 secs pair_style eam pair_coeff * * Ni_u3.eam @@ -61,38 +63,43 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.1 ghost atom cutoff = 5.1 - binsize = 2.55 -> bins = 23 14 4 -Memory usage per processor = 2.78742 Mbytes + binsize = 2.55, bins = 23 14 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.371 | 3.371 | 3.371 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 300 -8317.4367 0 -8263.8067 -7100.7667 19547.02 25 219.81848 -8272.1577 0 -8232.8615 5206.8057 19547.02 50 300 -8238.3413 0 -8184.7112 13308.809 19688.933 75 294.78636 -8232.2217 0 -8179.5237 13192.782 19748.176 100 300 -8248.1223 0 -8194.4923 7352.0246 19816.321 -Loop time of 0.0729427 on 4 procs for 100 steps with 1912 atoms +Loop time of 0.0884107 on 4 procs for 100 steps with 1912 atoms -Performance: 118.449 ns/day, 0.203 hours/ns, 1370.938 timesteps/s -100.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 97.726 ns/day, 0.246 hours/ns, 1131.084 timesteps/s +94.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.063756 | 0.065014 | 0.06712 | 0.5 | 89.13 -Neigh | 0.0021732 | 0.0022199 | 0.0022831 | 0.1 | 3.04 -Comm | 0.0017257 | 0.0039253 | 0.0052609 | 2.1 | 5.38 -Output | 8.7023e-05 | 9.3579e-05 | 0.00010633 | 0.1 | 0.13 -Modify | 0.00090957 | 0.00092477 | 0.00093555 | 0.0 | 1.27 -Other | | 0.0007653 | | | 1.05 +Pair | 0.072181 | 0.073453 | 0.074266 | 0.3 | 83.08 +Neigh | 0.0026526 | 0.0028275 | 0.0029895 | 0.2 | 3.20 +Comm | 0.0081384 | 0.0091963 | 0.0099204 | 0.7 | 10.40 +Output | 9.8705e-05 | 0.00012231 | 0.00018597 | 0.0 | 0.14 +Modify | 0.00092363 | 0.00094259 | 0.00096059 | 0.0 | 1.07 +Other | | 0.001869 | | | 2.11 Nlocal: 478 ave 490 max 466 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -125,11 +132,11 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 -Memory usage per processor = 2.78742 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.371 | 3.371 | 3.371 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 302.29407 -8248.1223 0 -8212.0956 6393.6774 19845.81 100 291.61298 -8259.5472 0 -8224.7933 -1300.9229 19874.36 @@ -162,20 +169,20 @@ Step Temp E_pair E_mol TotEng Press Volume 2800 306.09492 -8173.4147 0 -8136.935 -10981.226 22960.958 2900 303.27397 -8168.2141 0 -8132.0706 -8905.5017 23078.216 3000 301.48023 -8165.8151 0 -8129.8854 -10668.385 23201.582 -Loop time of 2.25377 on 4 procs for 3000 steps with 1912 atoms +Loop time of 2.66845 on 4 procs for 3000 steps with 1912 atoms -Performance: 115.007 ns/day, 0.209 hours/ns, 1331.105 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 97.135 ns/day, 0.247 hours/ns, 1124.248 timesteps/s +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.8854 | 1.9462 | 2.0017 | 3.0 | 86.35 -Neigh | 0.11869 | 0.12531 | 0.13086 | 1.2 | 5.56 -Comm | 0.0676 | 0.13095 | 0.19879 | 13.0 | 5.81 -Output | 0.0006516 | 0.00068212 | 0.00076056 | 0.2 | 0.03 -Modify | 0.028034 | 0.028804 | 0.029825 | 0.5 | 1.28 -Other | | 0.02182 | | | 0.97 +Pair | 2.1584 | 2.2278 | 2.3244 | 4.0 | 83.49 +Neigh | 0.14134 | 0.15172 | 0.1614 | 2.0 | 5.69 +Comm | 0.11957 | 0.22852 | 0.30416 | 14.2 | 8.56 +Output | 0.00077462 | 0.0013641 | 0.0031083 | 2.7 | 0.05 +Modify | 0.028383 | 0.029401 | 0.030651 | 0.5 | 1.10 +Other | | 0.02965 | | | 1.11 Nlocal: 478 ave 509 max 446 min Histogram: 2 0 0 0 0 0 0 0 0 2 diff --git a/examples/shear/log.5Oct16.shear.void.g++.1 b/examples/shear/log.27Nov18.shear.void.g++.1 similarity index 78% rename from examples/shear/log.5Oct16.shear.void.g++.1 rename to examples/shear/log.27Nov18.shear.void.g++.1 index 2eb48c76d8..ea97045168 100644 --- a/examples/shear/log.5Oct16.shear.void.g++.1 +++ b/examples/shear/log.27Nov18.shear.void.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation units metal @@ -16,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000714779 secs pair_style eam pair_coeff * * Ni_u3.eam @@ -62,38 +64,43 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.1 ghost atom cutoff = 5.1 - binsize = 2.55 -> bins = 23 14 4 -Memory usage per processor = 2.86988 Mbytes + binsize = 2.55, bins = 23 14 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.469 | 3.469 | 3.469 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 300 -7358.6159 0 -7312.8966 -9600.8353 19547.02 25 222.66197 -7321.4403 0 -7287.5071 562.28854 19547.02 50 300 -7292.2273 0 -7246.508 7555.5059 19688.542 75 292.67603 -7286.2016 0 -7241.5984 6825.409 19746.217 100 300 -7297.4174 0 -7251.698 1627.2455 19775.648 -Loop time of 0.228115 on 1 procs for 100 steps with 1708 atoms +Loop time of 0.248797 on 1 procs for 100 steps with 1708 atoms -Performance: 37.876 ns/day, 0.634 hours/ns, 438.375 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 34.727 ns/day, 0.691 hours/ns, 401.933 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.21523 | 0.21523 | 0.21523 | 0.0 | 94.35 -Neigh | 0.0075827 | 0.0075827 | 0.0075827 | 0.0 | 3.32 -Comm | 0.001266 | 0.001266 | 0.001266 | 0.0 | 0.55 -Output | 5.4121e-05 | 5.4121e-05 | 5.4121e-05 | 0.0 | 0.02 -Modify | 0.0030229 | 0.0030229 | 0.0030229 | 0.0 | 1.33 -Other | | 0.0009584 | | | 0.42 +Pair | 0.2343 | 0.2343 | 0.2343 | 0.0 | 94.17 +Neigh | 0.0084395 | 0.0084395 | 0.0084395 | 0.0 | 3.39 +Comm | 0.0016763 | 0.0016763 | 0.0016763 | 0.0 | 0.67 +Output | 0.0001018 | 0.0001018 | 0.0001018 | 0.0 | 0.04 +Modify | 0.0030863 | 0.0030863 | 0.0030863 | 0.0 | 1.24 +Other | | 0.001193 | | | 0.48 Nlocal: 1708 ave 1708 max 1708 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -126,11 +133,11 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 -Memory usage per processor = 2.86988 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.469 | 3.469 | 3.469 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 296.68961 -7297.4174 0 -7267.2741 785.80272 19779.424 100 290.29095 -7309.7136 0 -7280.2205 -5956.8739 19838.833 @@ -163,20 +170,20 @@ Step Temp E_pair E_mol TotEng Press Volume 2800 293.40764 -7248.9658 0 -7219.156 -17298.989 22959.736 2900 306.87934 -7249.3942 0 -7218.2158 -17152.689 23078.216 3000 308.14535 -7244.6151 0 -7213.308 -15383.029 23210.132 -Loop time of 6.91463 on 1 procs for 3000 steps with 1708 atoms +Loop time of 7.37965 on 1 procs for 3000 steps with 1708 atoms -Performance: 37.486 ns/day, 0.640 hours/ns, 433.863 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 35.124 ns/day, 0.683 hours/ns, 406.523 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.3607 | 6.3607 | 6.3607 | 0.0 | 91.99 -Neigh | 0.39249 | 0.39249 | 0.39249 | 0.0 | 5.68 -Comm | 0.040066 | 0.040066 | 0.040066 | 0.0 | 0.58 -Output | 0.0005281 | 0.0005281 | 0.0005281 | 0.0 | 0.01 -Modify | 0.092056 | 0.092056 | 0.092056 | 0.0 | 1.33 -Other | | 0.02877 | | | 0.42 +Pair | 6.7514 | 6.7514 | 6.7514 | 0.0 | 91.49 +Neigh | 0.45084 | 0.45084 | 0.45084 | 0.0 | 6.11 +Comm | 0.053905 | 0.053905 | 0.053905 | 0.0 | 0.73 +Output | 0.00081897 | 0.00081897 | 0.00081897 | 0.0 | 0.01 +Modify | 0.090654 | 0.090654 | 0.090654 | 0.0 | 1.23 +Other | | 0.032 | | | 0.43 Nlocal: 1708 ave 1708 max 1708 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/shear/log.5Oct16.shear.void.g++.4 b/examples/shear/log.27Nov18.shear.void.g++.4 similarity index 78% rename from examples/shear/log.5Oct16.shear.void.g++.4 rename to examples/shear/log.27Nov18.shear.void.g++.4 index 89c88d2ecf..cea6f6fc65 100644 --- a/examples/shear/log.5Oct16.shear.void.g++.4 +++ b/examples/shear/log.27Nov18.shear.void.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 3d metal shear simulation units metal @@ -16,6 +17,7 @@ lattice fcc 3.52 orient x 1 0 0 orient y 0 1 1 orient z 0 -1 1 origin 0.5 0 0 Lattice spacing in x,y,z = 3.52 4.97803 4.97803 create_atoms 1 box Created 1912 atoms + Time spent = 0.000400543 secs pair_style eam pair_coeff * * Ni_u3.eam @@ -62,38 +64,43 @@ fix_modify 3 temp new3d thermo 25 thermo_modify temp new3d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 5.1 ghost atom cutoff = 5.1 - binsize = 2.55 -> bins = 23 14 4 -Memory usage per processor = 2.7752 Mbytes + binsize = 2.55, bins = 23 14 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair eam, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.356 | 3.356 | 3.356 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 300 -7358.6159 0 -7312.8966 -9600.8353 19547.02 25 220.57465 -7320.4003 0 -7286.7852 832.69858 19547.02 50 300 -7292.1121 0 -7246.3928 7101.9213 19686.075 75 295.2793 -7286.9013 0 -7241.9014 5282.1114 19746.39 100 300 -7301.0026 0 -7255.2833 -1939.7714 19790.975 -Loop time of 0.0665765 on 4 procs for 100 steps with 1708 atoms +Loop time of 0.0688287 on 4 procs for 100 steps with 1708 atoms -Performance: 129.776 ns/day, 0.185 hours/ns, 1502.032 timesteps/s -98.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 125.529 ns/day, 0.191 hours/ns, 1452.882 timesteps/s +96.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.056678 | 0.05843 | 0.061234 | 0.7 | 87.76 -Neigh | 0.001873 | 0.0019386 | 0.0019932 | 0.1 | 2.91 -Comm | 0.0016048 | 0.0044546 | 0.0062997 | 2.6 | 6.69 -Output | 8.2016e-05 | 8.6188e-05 | 9.6321e-05 | 0.1 | 0.13 -Modify | 0.0008502 | 0.00086212 | 0.00087571 | 0.0 | 1.29 -Other | | 0.0008054 | | | 1.21 +Pair | 0.059247 | 0.060771 | 0.062449 | 0.5 | 88.29 +Neigh | 0.0022693 | 0.0023552 | 0.0024772 | 0.2 | 3.42 +Comm | 0.0018966 | 0.0037905 | 0.005276 | 2.1 | 5.51 +Output | 8.297e-05 | 0.00011259 | 0.00019741 | 0.0 | 0.16 +Modify | 0.00082994 | 0.00084907 | 0.00086927 | 0.0 | 1.23 +Other | | 0.0009506 | | | 1.38 Nlocal: 427 ave 437 max 419 min Histogram: 1 1 0 0 0 0 1 0 0 1 @@ -126,11 +133,11 @@ fix_modify 3 temp new2d thermo 100 thermo_modify temp new2d -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) reset_timestep 0 run 3000 -Memory usage per processor = 2.7752 Mbytes +Per MPI rank memory allocation (min/avg/max) = 3.356 | 3.356 | 3.356 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 298.93143 -7301.0026 0 -7270.6316 -2766.8643 19799.958 100 301.13545 -7308.1131 0 -7277.5182 -8902.3332 19851.054 @@ -163,20 +170,20 @@ Step Temp E_pair E_mol TotEng Press Volume 2800 298.94765 -7255.6331 0 -7225.2605 -20555.015 22959.736 2900 294.98551 -7249.0201 0 -7219.05 -23986.374 23079.438 3000 291.21483 -7244.1837 0 -7214.5967 -25356.925 23197.918 -Loop time of 1.88696 on 4 procs for 3000 steps with 1708 atoms +Loop time of 2.21357 on 4 procs for 3000 steps with 1708 atoms -Performance: 137.364 ns/day, 0.175 hours/ns, 1589.856 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 117.096 ns/day, 0.205 hours/ns, 1355.278 timesteps/s +96.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.608 | 1.6534 | 1.6897 | 2.3 | 87.62 -Neigh | 0.099209 | 0.10261 | 0.10744 | 0.9 | 5.44 -Comm | 0.044314 | 0.086752 | 0.13601 | 11.1 | 4.60 -Output | 0.00059652 | 0.00062531 | 0.00070548 | 0.2 | 0.03 -Modify | 0.024703 | 0.025439 | 0.026699 | 0.5 | 1.35 -Other | | 0.01814 | | | 0.96 +Pair | 1.8072 | 1.86 | 1.9192 | 3.7 | 84.03 +Neigh | 0.11667 | 0.12264 | 0.13213 | 1.7 | 5.54 +Comm | 0.10804 | 0.17878 | 0.23557 | 13.3 | 8.08 +Output | 0.00073075 | 0.0012527 | 0.002811 | 2.5 | 0.06 +Modify | 0.024781 | 0.025831 | 0.02754 | 0.7 | 1.17 +Other | | 0.02508 | | | 1.13 Nlocal: 427 ave 450 max 403 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -189,4 +196,4 @@ Total # of neighbors = 38325 Ave neighs/atom = 22.4385 Neighbor list builds = 215 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/snap/log.20Apr18.snap.Mo_Chen.g++.1 b/examples/snap/log.27Nov18.snap.Mo_Chen.g++.1 similarity index 86% rename from examples/snap/log.20Apr18.snap.Mo_Chen.g++.1 rename to examples/snap/log.27Nov18.snap.Mo_Chen.g++.1 index c5e0f6abab..0ca8406d10 100644 --- a/examples/snap/log.20Apr18.snap.Mo_Chen.g++.1 +++ b/examples/snap/log.27Nov18.snap.Mo_Chen.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.64 12.64 12.64) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000223637 secs + Time spent = 0.00029707 secs mass 1 183.84 @@ -95,20 +94,20 @@ Step Temp E_pair E_mol TotEng Press 80 87.224916 -22.378685 0 -22.367499 10247.68 90 62.623892 -22.37553 0 -22.367498 11250.067 100 45.9103 -22.373386 0 -22.367498 12011.726 -Loop time of 3.3917 on 1 procs for 100 steps with 128 atoms +Loop time of 7.00873 on 1 procs for 100 steps with 128 atoms -Performance: 1.274 ns/day, 18.843 hours/ns, 29.484 timesteps/s +Performance: 0.616 ns/day, 38.937 hours/ns, 14.268 timesteps/s 99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.3906 | 3.3906 | 3.3906 | 0.0 | 99.97 +Pair | 7.0068 | 7.0068 | 7.0068 | 0.0 | 99.97 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00039721 | 0.00039721 | 0.00039721 | 0.0 | 0.01 -Output | 0.00023007 | 0.00023007 | 0.00023007 | 0.0 | 0.01 -Modify | 0.00021887 | 0.00021887 | 0.00021887 | 0.0 | 0.01 -Other | | 0.0002868 | | | 0.01 +Comm | 0.00083661 | 0.00083661 | 0.00083661 | 0.0 | 0.01 +Output | 0.00025535 | 0.00025535 | 0.00025535 | 0.0 | 0.00 +Modify | 0.00034285 | 0.00034285 | 0.00034285 | 0.0 | 0.00 +Other | | 0.0005035 | | | 0.01 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -124,4 +123,4 @@ Ave neighs/atom = 58 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:07 diff --git a/examples/snap/log.20Apr18.snap.Mo_Chen.g++.4 b/examples/snap/log.27Nov18.snap.Mo_Chen.g++.4 similarity index 85% rename from examples/snap/log.20Apr18.snap.Mo_Chen.g++.4 rename to examples/snap/log.27Nov18.snap.Mo_Chen.g++.4 index c25f1f5530..a8c3d6858c 100644 --- a/examples/snap/log.20Apr18.snap.Mo_Chen.g++.4 +++ b/examples/snap/log.27Nov18.snap.Mo_Chen.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.64 12.64 12.64) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000277281 secs + Time spent = 0.000289917 secs mass 1 183.84 @@ -95,20 +94,20 @@ Step Temp E_pair E_mol TotEng Press 80 83.449257 -22.378201 0 -22.367499 10047.619 90 58.862643 -22.375048 0 -22.367498 11012.233 100 42.41931 -22.372939 0 -22.367498 11740.641 -Loop time of 1.91636 on 4 procs for 100 steps with 128 atoms +Loop time of 2.15419 on 4 procs for 100 steps with 128 atoms -Performance: 2.254 ns/day, 10.646 hours/ns, 52.182 timesteps/s -97.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.005 ns/day, 11.968 hours/ns, 46.421 timesteps/s +92.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.8147 | 1.8411 | 1.8875 | 2.1 | 96.07 +Pair | 1.7677 | 1.9028 | 1.9897 | 6.2 | 88.33 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.022276 | 0.069629 | 0.095057 | 10.7 | 3.63 -Output | 0.00032496 | 0.00065821 | 0.0016179 | 0.0 | 0.03 -Modify | 0.00019503 | 0.00020915 | 0.00023341 | 0.0 | 0.01 -Other | | 0.00481 | | | 0.25 +Comm | 0.15367 | 0.24295 | 0.38029 | 17.6 | 11.28 +Output | 0.00034404 | 0.0012512 | 0.0017219 | 1.6 | 0.06 +Modify | 0.00018859 | 0.00021273 | 0.00023699 | 0.0 | 0.01 +Other | | 0.007011 | | | 0.33 Nlocal: 32 ave 32 max 32 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -124,4 +123,4 @@ Ave neighs/atom = 58 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/snap/log.20Apr18.snap.Ta06A.g++.1 b/examples/snap/log.27Nov18.snap.Ta06A.g++.1 similarity index 86% rename from examples/snap/log.20Apr18.snap.Ta06A.g++.1 rename to examples/snap/log.27Nov18.snap.Ta06A.g++.1 index d2296852a0..76cdc8641a 100644 --- a/examples/snap/log.20Apr18.snap.Ta06A.g++.1 +++ b/examples/snap/log.27Nov18.snap.Ta06A.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000328064 secs + Time spent = 0.000350714 secs mass 1 180.88 @@ -117,20 +116,20 @@ Step Temp E_pair E_mol TotEng Press 80 124.04276 -11.829003 0 -11.813094 1537.703 90 97.37622 -11.825582 0 -11.813094 1734.9662 100 75.007873 -11.822714 0 -11.813094 1930.8005 -Loop time of 2.53266 on 1 procs for 100 steps with 128 atoms +Loop time of 5.03244 on 1 procs for 100 steps with 128 atoms -Performance: 1.706 ns/day, 14.070 hours/ns, 39.484 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.858 ns/day, 27.958 hours/ns, 19.871 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.5313 | 2.5313 | 2.5313 | 0.0 | 99.95 +Pair | 5.0308 | 5.0308 | 5.0308 | 0.0 | 99.97 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00051379 | 0.00051379 | 0.00051379 | 0.0 | 0.02 -Output | 0.00023317 | 0.00023317 | 0.00023317 | 0.0 | 0.01 -Modify | 0.00023675 | 0.00023675 | 0.00023675 | 0.0 | 0.01 -Other | | 0.0003583 | | | 0.01 +Comm | 0.00070858 | 0.00070858 | 0.00070858 | 0.0 | 0.01 +Output | 0.00024676 | 0.00024676 | 0.00024676 | 0.0 | 0.00 +Modify | 0.0002749 | 0.0002749 | 0.0002749 | 0.0 | 0.01 +Other | | 0.0004299 | | | 0.01 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -146,4 +145,4 @@ Ave neighs/atom = 58 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:05 diff --git a/examples/snap/log.20Apr18.snap.Ta06A.g++.4 b/examples/snap/log.27Nov18.snap.Ta06A.g++.4 similarity index 87% rename from examples/snap/log.20Apr18.snap.Ta06A.g++.4 rename to examples/snap/log.27Nov18.snap.Ta06A.g++.4 index 4d26481d5d..4cc5b82c9b 100644 --- a/examples/snap/log.20Apr18.snap.Ta06A.g++.4 +++ b/examples/snap/log.27Nov18.snap.Ta06A.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000288486 secs + Time spent = 0.000299692 secs mass 1 180.88 @@ -117,20 +116,20 @@ Step Temp E_pair E_mol TotEng Press 80 121.80051 -11.828715 0 -11.813094 1627.6911 90 95.262635 -11.825311 0 -11.813094 1812.9327 100 73.194645 -11.822481 0 -11.813094 1995.2199 -Loop time of 1.3621 on 4 procs for 100 steps with 128 atoms +Loop time of 1.4959 on 4 procs for 100 steps with 128 atoms -Performance: 3.172 ns/day, 7.567 hours/ns, 73.416 timesteps/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.888 ns/day, 8.311 hours/ns, 66.850 timesteps/s +94.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2867 | 1.309 | 1.35 | 2.1 | 96.10 +Pair | 1.2973 | 1.3263 | 1.3444 | 1.6 | 88.66 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0096083 | 0.050652 | 0.072999 | 10.9 | 3.72 -Output | 0.00031447 | 0.00060236 | 0.0014303 | 0.0 | 0.04 -Modify | 0.00014234 | 0.00016212 | 0.00018811 | 0.0 | 0.01 -Other | | 0.001728 | | | 0.13 +Comm | 0.14155 | 0.16475 | 0.19518 | 5.0 | 11.01 +Output | 0.00055361 | 0.0006234 | 0.00078511 | 0.0 | 0.04 +Modify | 0.00016427 | 0.00020635 | 0.00032949 | 0.0 | 0.01 +Other | | 0.004009 | | | 0.27 Nlocal: 32 ave 32 max 32 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/snap/log.20Apr18.snap.W.2940.g++.1 b/examples/snap/log.27Nov18.snap.W.2940.g++.1 similarity index 87% rename from examples/snap/log.20Apr18.snap.W.2940.g++.1 rename to examples/snap/log.27Nov18.snap.W.2940.g++.1 index 19b2bfb40d..d2c540c709 100644 --- a/examples/snap/log.20Apr18.snap.W.2940.g++.1 +++ b/examples/snap/log.27Nov18.snap.W.2940.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000190258 secs + Time spent = 0.000316143 secs mass 1 183.84 @@ -116,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press 80 58.605244 -10.997364 0 -10.989848 11289.914 90 39.754503 -10.994946 0 -10.989848 11824.945 100 32.524085 -10.994019 0 -10.989848 11932.118 -Loop time of 9.69738 on 1 procs for 100 steps with 128 atoms +Loop time of 18.7678 on 1 procs for 100 steps with 128 atoms -Performance: 0.445 ns/day, 53.874 hours/ns, 10.312 timesteps/s +Performance: 0.230 ns/day, 104.265 hours/ns, 5.328 timesteps/s 99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 9.6961 | 9.6961 | 9.6961 | 0.0 | 99.99 +Pair | 18.766 | 18.766 | 18.766 | 0.0 | 99.99 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00044036 | 0.00044036 | 0.00044036 | 0.0 | 0.00 -Output | 0.00024843 | 0.00024843 | 0.00024843 | 0.0 | 0.00 -Modify | 0.00023937 | 0.00023937 | 0.00023937 | 0.0 | 0.00 -Other | | 0.0003347 | | | 0.00 +Comm | 0.00081968 | 0.00081968 | 0.00081968 | 0.0 | 0.00 +Output | 0.00028563 | 0.00028563 | 0.00028563 | 0.0 | 0.00 +Modify | 0.0003283 | 0.0003283 | 0.0003283 | 0.0 | 0.00 +Other | | 0.0005233 | | | 0.00 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -145,4 +144,4 @@ Ave neighs/atom = 58 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:09 +Total wall time: 0:00:18 diff --git a/examples/snap/log.20Apr18.snap.W.2940.g++.4 b/examples/snap/log.27Nov18.snap.W.2940.g++.4 similarity index 87% rename from examples/snap/log.20Apr18.snap.W.2940.g++.4 rename to examples/snap/log.27Nov18.snap.W.2940.g++.4 index dfa63fc6ea..cdd063de28 100644 --- a/examples/snap/log.20Apr18.snap.W.2940.g++.4 +++ b/examples/snap/log.27Nov18.snap.W.2940.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000309944 secs + Time spent = 0.000297546 secs mass 1 183.84 @@ -116,20 +115,20 @@ Step Temp E_pair E_mol TotEng Press 80 56.127265 -10.997046 0 -10.989848 11551.687 90 38.025013 -10.994724 0 -10.989847 12069.936 100 31.768127 -10.993922 0 -10.989847 12145.648 -Loop time of 5.15615 on 4 procs for 100 steps with 128 atoms +Loop time of 5.38055 on 4 procs for 100 steps with 128 atoms -Performance: 0.838 ns/day, 28.645 hours/ns, 19.394 timesteps/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.803 ns/day, 29.892 hours/ns, 18.585 timesteps/s +96.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.0497 | 5.0762 | 5.092 | 0.8 | 98.45 +Pair | 4.8254 | 5.0245 | 5.2817 | 7.7 | 93.38 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.060802 | 0.07661 | 0.10305 | 6.1 | 1.49 -Output | 0.00040722 | 0.00078458 | 0.0018959 | 0.0 | 0.02 -Modify | 0.0002389 | 0.00024962 | 0.00027442 | 0.0 | 0.00 -Other | | 0.002315 | | | 0.04 +Comm | 0.093845 | 0.34915 | 0.5466 | 29.1 | 6.49 +Output | 0.00032616 | 0.0011846 | 0.0037167 | 4.2 | 0.02 +Modify | 0.00022507 | 0.00025326 | 0.0002687 | 0.0 | 0.00 +Other | | 0.005432 | | | 0.10 Nlocal: 32 ave 32 max 32 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.1 b/examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.1 similarity index 87% rename from examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.1 rename to examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.1 index 3f40936308..7d49043aa0 100644 --- a/examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.1 +++ b/examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000431538 secs + Time spent = 0.000426054 secs mass 1 183.84 mass 2 4.0026 @@ -75,11 +74,11 @@ SNAP keyword quadraticflag 0 pair_coeff 2 2 table 1 He_He_JW2013.table HeHe Reading potential file He_He_JW2013.table with DATE: 2017-02-20 WARNING: 1 of 4999 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) pair_coeff 1 2 table 2 W_He_JW2013.table WHe Reading potential file W_He_JW2013.table with DATE: 2017-02-20 WARNING: 3 of 325 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) #Hybrid/overlay will take all pair styles and add their contributions equally, order of pair_coeff doesnt matter here #This is not the case for pair_style hybrid ... where only one pair_coeff is read for each type combination, order matters here. @@ -151,20 +150,20 @@ Step Temp E_pair E_mol TotEng Press 80 85.903126 -10.410645 0 -10.399628 857.74986 90 65.223651 -10.407993 0 -10.399628 1494.2746 100 59.833542 -10.407302 0 -10.399628 1938.9164 -Loop time of 8.902 on 1 procs for 100 steps with 128 atoms +Loop time of 17.6435 on 1 procs for 100 steps with 128 atoms -Performance: 0.485 ns/day, 49.456 hours/ns, 11.233 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.245 ns/day, 98.019 hours/ns, 5.668 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 8.9002 | 8.9002 | 8.9002 | 0.0 | 99.98 -Neigh | 0.00043058 | 0.00043058 | 0.00043058 | 0.0 | 0.00 -Comm | 0.00045776 | 0.00045776 | 0.00045776 | 0.0 | 0.01 -Output | 0.00025344 | 0.00025344 | 0.00025344 | 0.0 | 0.00 -Modify | 0.00022483 | 0.00022483 | 0.00022483 | 0.0 | 0.00 -Other | | 0.0003953 | | | 0.00 +Pair | 17.641 | 17.641 | 17.641 | 0.0 | 99.99 +Neigh | 0.00054359 | 0.00054359 | 0.00054359 | 0.0 | 0.00 +Comm | 0.00080729 | 0.00080729 | 0.00080729 | 0.0 | 0.00 +Output | 0.00026512 | 0.00026512 | 0.00026512 | 0.0 | 0.00 +Modify | 0.00033879 | 0.00033879 | 0.00033879 | 0.0 | 0.00 +Other | | 0.0005448 | | | 0.00 Nlocal: 128 ave 128 max 128 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -180,4 +179,4 @@ Ave neighs/atom = 53.5156 Neighbor list builds = 1 Dangerous builds = 0 -Total wall time: 0:00:09 +Total wall time: 0:00:17 diff --git a/examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.4 b/examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.4 similarity index 88% rename from examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.4 rename to examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.4 index 4ec85a63d0..05db710266 100644 --- a/examples/snap/log.20Apr18.snap.hybrid.WSNAP.HePair.g++.4 +++ b/examples/snap/log.27Nov18.snap.hybrid.WSNAP.HePair.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Demonstrate SNAP Ta potential @@ -33,7 +32,7 @@ Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 128 atoms - Time spent = 0.000274658 secs + Time spent = 0.000303984 secs mass 1 183.84 mass 2 4.0026 @@ -75,11 +74,11 @@ SNAP keyword quadraticflag 0 pair_coeff 2 2 table 1 He_He_JW2013.table HeHe Reading potential file He_He_JW2013.table with DATE: 2017-02-20 WARNING: 1 of 4999 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) pair_coeff 1 2 table 2 W_He_JW2013.table WHe Reading potential file W_He_JW2013.table with DATE: 2017-02-20 WARNING: 3 of 325 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) #Hybrid/overlay will take all pair styles and add their contributions equally, order of pair_coeff doesnt matter here #This is not the case for pair_style hybrid ... where only one pair_coeff is read for each type combination, order matters here. @@ -151,20 +150,20 @@ Step Temp E_pair E_mol TotEng Press 80 79.985938 -10.409886 0 -10.399628 2392.1106 90 62.568933 -10.407652 0 -10.399628 3141.7027 100 56.697933 -10.406899 0 -10.399628 3583.9538 -Loop time of 4.82103 on 4 procs for 100 steps with 128 atoms +Loop time of 4.7853 on 4 procs for 100 steps with 128 atoms -Performance: 0.896 ns/day, 26.783 hours/ns, 20.742 timesteps/s -99.0% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.903 ns/day, 26.585 hours/ns, 20.897 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.4837 | 4.6734 | 4.7605 | 5.2 | 96.94 +Pair | 4.394 | 4.5813 | 4.7463 | 5.9 | 95.74 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.057389 | 0.14453 | 0.33421 | 29.4 | 3.00 -Output | 0.00038719 | 0.00073916 | 0.0017841 | 0.0 | 0.02 -Modify | 0.00018716 | 0.00022203 | 0.00026417 | 0.0 | 0.00 -Other | | 0.002119 | | | 0.04 +Comm | 0.035261 | 0.19515 | 0.38629 | 28.5 | 4.08 +Output | 0.00031662 | 0.00060844 | 0.0014563 | 0.0 | 0.01 +Modify | 0.00018692 | 0.0001924 | 0.00020123 | 0.0 | 0.00 +Other | | 0.008012 | | | 0.17 Nlocal: 32 ave 32 max 32 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/srd/log.5Oct16.srd.mixture.g++.1 b/examples/srd/log.27Nov18.srd.mixture.g++.1 similarity index 85% rename from examples/srd/log.5Oct16.srd.mixture.g++.1 rename to examples/srd/log.27Nov18.srd.mixture.g++.1 index d7c9fe5bab..6207a7948e 100644 --- a/examples/srd/log.5Oct16.srd.mixture.g++.1 +++ b/examples/srd/log.27Nov18.srd.mixture.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d SRD test: big + small particles units lj @@ -16,6 +17,7 @@ Created orthogonal box = (0 0 -0.790569) to (15.8114 15.8114 0.790569) 1 by 1 by 1 MPI processor grid create_atoms 1 region box Created 100 atoms + Time spent = 0.000496387 secs set type 1 mass 1.0 100 settings made for mass set type 1 diameter 1.0 @@ -40,30 +42,35 @@ fix 2 all enforce2d run 1000 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -Memory usage per processor = 3.60175 Mbytes + binsize = 1.4, bins = 12 12 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.173 | 4.173 | 4.173 Mbytes Step Temp E_pair E_mol TotEng Press 0 1.44 -0.54272 0 0.88288 -0.041088 1000 1.8791467 -0.97185784 0 0.8884974 0.61487656 -Loop time of 0.0151019 on 1 procs for 1000 steps with 100 atoms +Loop time of 0.0159547 on 1 procs for 1000 steps with 100 atoms -Performance: 28605653.879 tau/day, 66216.791 timesteps/s -105.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 27076604.970 tau/day, 62677.326 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0079689 | 0.0079689 | 0.0079689 | 0.0 | 52.77 -Neigh | 0.0030537 | 0.0030537 | 0.0030537 | 0.0 | 20.22 -Comm | 0.001416 | 0.001416 | 0.001416 | 0.0 | 9.38 -Output | 5.9605e-06 | 5.9605e-06 | 5.9605e-06 | 0.0 | 0.04 -Modify | 0.001749 | 0.001749 | 0.001749 | 0.0 | 11.58 -Other | | 0.0009084 | | | 6.01 +Pair | 0.0072021 | 0.0072021 | 0.0072021 | 0.0 | 45.14 +Neigh | 0.0030136 | 0.0030136 | 0.0030136 | 0.0 | 18.89 +Comm | 0.0022571 | 0.0022571 | 0.0022571 | 0.0 | 14.15 +Output | 9.5367e-06 | 9.5367e-06 | 9.5367e-06 | 0.0 | 0.06 +Modify | 0.0021653 | 0.0021653 | 0.0021653 | 0.0 | 13.57 +Other | | 0.001307 | | | 8.19 Nlocal: 100 ave 100 max 100 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -89,6 +96,7 @@ lattice sq 85.0 Lattice spacing in x,y,z = 0.108465 0.108465 0.108465 create_atoms 2 region plane Created 21316 atoms + Time spent = 0.0168567 secs set type 2 mass 0.01 21316 settings made for mass set type 2 diameter 0.0 @@ -109,13 +117,23 @@ pair_coeff 1 2 0.0 1.0 0.5 delete_atoms overlap 0.5 small big Neighbor list info ... - 2 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -WARNING: Delete_atoms cutoff > minimum neighbor cutoff (../delete_atoms.cpp:278) + binsize = 1.4, bins = 12 12 2 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command delete_atoms, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:305) Deleted 6700 atoms, new total = 14716 # SRD run @@ -151,7 +169,7 @@ variable ebig equal etotal*atoms/count(big) thermo_style custom step temp f_2[7] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] thermo_modify temp tbig -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) thermo 100 #dump 1 all atom 250 dump.srd.mixture @@ -173,18 +191,23 @@ SRD info: SRD per actual grid cell = 4.86648 SRD viscosity = 0.463448 big/SRD mass density ratio = 2.12808 -WARNING: Fix srd grid size > 1/4 of big particle diameter (../fix_srd.cpp:2884) +WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2888) # of rescaled SRD velocities = 0 ave/max small velocity = 13.2944 24.262 ave/max big velocity = 1.69284 5.10989 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.8 ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -Memory usage per processor = 14.7783 Mbytes + binsize = 1.4, bins = 12 12 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 15.84 | 15.84 | 15.84 Mbytes Step Temp f_2[7] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] 0 1.8791467 0 0.0060376284 -0.97185784 0.8884974 0.61487656 0 0 0 0 0 0 0 0 0 100 1.1596877 3969 0.00179671 -0.88368701 0.26440385 0.85824547 7578 83 83 0 14 12996 3000 1.0041859 0 @@ -237,20 +260,20 @@ Step Temp f_2[7] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] 4800 1.2169028 3969 0.0010831546 -1.0453368 0.15939704 0.42728069 7444 80 80 0 1560 12996 2997 1.0300677 0 4900 0.90968786 3969 -0.0010022199 -1.0480777 -0.14748667 0.37681568 7563 88 88 0 1592 12996 2997 1.0257714 0 5000 1.0856525 3969 0.0001301746 -1.0556395 0.019156494 0.55496941 7439 78 78 0 1633 12996 3008 1.0343075 0 -Loop time of 2.9124 on 1 procs for 5000 steps with 14716 atoms +Loop time of 3.59613 on 1 procs for 5000 steps with 14716 atoms -Performance: 148331.176 tau/day, 1716.796 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 120129.150 tau/day, 1390.384 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.041905 | 0.041905 | 0.041905 | 0.0 | 1.44 -Neigh | 0.0063758 | 0.0063758 | 0.0063758 | 0.0 | 0.22 -Comm | 0.027464 | 0.027464 | 0.027464 | 0.0 | 0.94 -Output | 0.0026662 | 0.0026662 | 0.0026662 | 0.0 | 0.09 -Modify | 2.7808 | 2.7808 | 2.7808 | 0.0 | 95.48 -Other | | 0.0532 | | | 1.83 +Pair | 0.043031 | 0.043031 | 0.043031 | 0.0 | 1.20 +Neigh | 0.0068874 | 0.0068874 | 0.0068874 | 0.0 | 0.19 +Comm | 0.035111 | 0.035111 | 0.035111 | 0.0 | 0.98 +Output | 0.0043986 | 0.0043986 | 0.0043986 | 0.0 | 0.12 +Modify | 3.46 | 3.46 | 3.46 | 0.0 | 96.22 +Other | | 0.04668 | | | 1.30 Nlocal: 14716 ave 14716 max 14716 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -266,4 +289,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:03 +Total wall time: 0:00:04 diff --git a/examples/srd/log.27Nov18.srd.mixture.g++.4 b/examples/srd/log.27Nov18.srd.mixture.g++.4 new file mode 100644 index 0000000000..835de98274 --- /dev/null +++ b/examples/srd/log.27Nov18.srd.mixture.g++.4 @@ -0,0 +1,292 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 2d SRD test: big + small particles + +units lj +atom_style sphere +atom_modify first big +dimension 2 + +# create big particles with sigma 1.0 + +lattice sq 0.4 +Lattice spacing in x,y,z = 1.58114 1.58114 1.58114 +region box block 0 10 0 10 -0.5 0.5 +create_box 2 box +Created orthogonal box = (0 0 -0.790569) to (15.8114 15.8114 0.790569) + 2 by 2 by 1 MPI processor grid +create_atoms 1 region box +Created 100 atoms + Time spent = 0.000455379 secs +set type 1 mass 1.0 + 100 settings made for mass +set type 1 diameter 1.0 + 100 settings made for diameter + +group big type 1 +100 atoms in group big +velocity big create 1.44 87287 loop geom + +# equilibrate big particles + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 +pair_coeff 2 2 0.0 1.0 0.0 +pair_coeff 1 2 0.0 1.0 0.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 big nve +fix 2 all enforce2d + +run 1000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.171 | 4.171 | 4.171 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -0.54272 0 0.88288 -0.041088 + 1000 1.8791467 -0.97185784 0 0.8884974 0.61487657 +Loop time of 0.0164104 on 4 procs for 1000 steps with 100 atoms + +Performance: 26324848.583 tau/day, 60937.149 timesteps/s +94.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0017555 | 0.0019422 | 0.0022526 | 0.4 | 11.84 +Neigh | 0.00085735 | 0.00090593 | 0.00096583 | 0.0 | 5.52 +Comm | 0.0088477 | 0.0094896 | 0.0098495 | 0.4 | 57.83 +Output | 2.1935e-05 | 2.3127e-05 | 2.6226e-05 | 0.0 | 0.14 +Modify | 0.00074744 | 0.00088817 | 0.0012014 | 0.0 | 5.41 +Other | | 0.003161 | | | 19.26 + +Nlocal: 25 ave 26 max 23 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 47 ave 48 max 46 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 114.75 ave 124 max 100 min +Histogram: 1 0 0 0 0 1 0 0 0 2 + +Total # of neighbors = 459 +Ave neighs/atom = 4.59 +Neighbor list builds = 129 +Dangerous builds = 0 + +unfix 1 +unfix 2 + +# add small particles as hi density lattice + +lattice sq 0.4 +Lattice spacing in x,y,z = 1.58114 1.58114 1.58114 +region plane block 0 10 0 10 -0.001 0.001 +lattice sq 85.0 +Lattice spacing in x,y,z = 0.108465 0.108465 0.108465 +create_atoms 2 region plane +Created 21316 atoms + Time spent = 0.00417233 secs +set type 2 mass 0.01 + 21316 settings made for mass +set type 2 diameter 0.0 + 21316 settings made for diameter + +group small type 2 +21316 atoms in group small + +velocity small create 1.0 593849 loop geom + +# delete overlaps +# must set 1-2 cutoff to non-zero value + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 +pair_coeff 2 2 0.0 1.0 0.0 +pair_coeff 1 2 0.0 1.0 0.5 + +delete_atoms overlap 0.5 small big +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 2 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command delete_atoms, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:305) +Deleted 6700 atoms, new total = 14716 + +# SRD run + +reset_timestep 0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +comm_modify mode multi group big vel yes +neigh_modify include big + +# no pairwise interactions with small particles + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 +pair_coeff 2 2 0.0 1.0 0.0 +pair_coeff 1 2 0.0 1.0 0.0 + +# use fix SRD to push small particles out from inside big ones + +timestep 0.001 + +fix 1 big nve +fix 2 small srd 20 big 1.0 0.25 49894 radius 0.88 search 0.2 collision slip +fix 3 all enforce2d + +# diagnostics + +compute tbig big temp +variable pebig equal pe*atoms/count(big) +variable ebig equal etotal*atoms/count(big) +thermo_style custom step temp f_2[7] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] + +thermo_modify temp tbig +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) +thermo 100 + +#dump 1 all atom 250 dump.srd.mixture + +#dump 2 all image 250 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 4 adiam 1 1 adiam 2 0.2 + +#dump 3 all movie 250 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 4 adiam 1 1 adiam 2 0.2 + +run 5000 +SRD info: + SRD/big particles = 14616 100 + big particle diameter max/min = 0.88 0.88 + SRD temperature & lamda = 1 0.2 + SRD max distance & max velocity = 0.8 40 + SRD grid counts: 63 63 1 + SRD grid size: request, actual (xyz) = 0.25, 0.250974 0.250974 1.58114 + SRD per actual grid cell = 4.86648 + SRD viscosity = 0.463448 + big/SRD mass density ratio = 2.12808 +WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2888) + # of rescaled SRD velocities = 0 + ave/max small velocity = 13.2944 24.262 + ave/max big velocity = 1.69284 5.10989 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 2 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.921 | 5.925 | 5.93 Mbytes +Step Temp f_2[7] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] + 0 1.8791467 0 0.0060376284 -0.97185784 0.8884974 0.61487657 0 0 0 0 0 0 0 0 0 + 100 1.4044369 3969 0.0030633093 -0.93959598 0.4507966 0.78900119 7464 99 99 0 17 22500 3005 1.028131 0 + 200 1.1569383 3969 0.0010543995 -0.99020352 0.15516543 0.50132981 7393 82 82 0 43 22500 2996 1.014347 0 + 300 0.97802835 3969 -0.00019991154 -0.99766705 -0.029418982 0.35789515 7411 90 90 0 84 22500 3001 1.0213725 0 + 400 1.0992982 3969 0.00055034756 -1.007316 0.080989146 0.35177983 7443 78 78 0 107 22500 2993 1.0451641 0 + 500 1.0436705 3969 -7.4779704e-05 -1.0442384 -0.011004581 0.15132448 7504 94 94 0 141 22500 3007 1.0236992 0 + 600 1.0216461 3969 -0.00032426678 -1.0591487 -0.047719099 0.2200765 7508 111 111 0 179 22500 3007 1.0304838 0 + 700 1.1491339 3969 0.0012328743 -0.95621278 0.18142978 0.80670059 7448 95 95 0 201 22500 2978 1.0099113 0 + 800 1.0332166 3969 -0.00040684239 -1.0827554 -0.059870926 0.35939225 7453 113 113 0 235 22500 3024 1.0141565 0 + 900 1.0652211 3969 -6.1337025e-06 -1.0554715 -0.00090263566 0.51460169 7447 97 97 0 259 22500 2982 1.0192735 0 + 1000 0.92834993 3969 -0.00067681883 -1.0186671 -0.09960066 0.738738 7328 78 78 0 286 22500 2999 1.023841 0 + 1100 1.0386338 3969 -0.00018904027 -1.0560666 -0.027819166 0.57129719 7449 96 96 0 325 22500 3012 1.0373885 0 + 1200 0.92218024 3969 -0.00077989365 -1.0277276 -0.11476915 0.48613467 7507 100 100 0 355 22500 3003 1.0254889 0 + 1300 1.1835318 3969 0.00096836748 -1.0291915 0.14250496 0.62935386 7439 92 92 0 384 22500 2993 1.0289037 0 + 1400 1.0895805 3969 0.00022072203 -1.0462033 0.032481455 0.49130771 7492 80 80 0 426 22500 3005 1.0083895 0 + 1500 1.0713283 3969 0.00042008247 -0.99879571 0.061819337 0.63979877 7498 87 87 0 457 22500 3000 1.0009934 0 + 1600 0.97815063 3969 -0.0005425653 -1.048213 -0.079843909 0.3604669 7533 105 105 0 492 22500 3004 1.0375508 0 + 1700 1.1626991 3969 0.00048969595 -1.0790084 0.072063656 0.36261544 7493 87 87 0 519 22500 3014 1.0151507 0 + 1800 0.91077627 3969 -0.0012059339 -1.0791337 -0.17746523 0.14204134 7553 77 77 0 554 22500 3001 1.0393648 0 + 1900 1.0736324 3969 0.00048053532 -0.99218049 0.070715578 0.56468307 7660 96 96 0 579 22500 2990 1.0071005 0 + 2000 1.0529119 3969 -0.00019827686 -1.0715612 -0.029178422 0.28111275 7561 93 93 0 630 22500 3020 1.0201426 0 + 2100 0.9995282 3969 -0.00066769217 -1.0877905 -0.09825758 0.22578496 7488 83 83 0 671 22500 2993 1.0246877 0 + 2200 1.1492521 3969 0.00093648659 -0.99994625 0.13781337 0.66214341 7481 97 97 0 699 22500 2999 1.0420787 0 + 2300 1.174939 3969 0.00098605988 -1.0180811 0.14510857 0.57783443 7414 83 83 0 723 22500 2989 1.004816 0 + 2400 1.1382223 3969 0.00050867975 -1.0519828 0.074857312 0.41119597 7601 77 77 0 754 22500 2996 1.007891 0 + 2500 0.96793374 3969 -0.00075093709 -1.0687623 -0.1105079 0.12887172 7444 88 88 0 789 22500 2984 1.0268818 0 + 2600 1.0064799 3969 -0.00023588466 -1.0311279 -0.034712786 0.38564304 7483 83 83 0 831 22500 3047 1.0199727 0 + 2700 1.1198694 3969 0.00019125912 -1.080525 0.028145692 0.35649192 7372 72 72 0 863 22500 2991 0.99989809 0 + 2800 1.130996 3969 0.00083301498 -0.99709952 0.12258648 0.76321666 7293 95 95 0 895 22500 2997 1.0077098 0 + 2900 1.069281 3969 0.00033771134 -1.0088906 0.049697601 0.60669604 7485 86 86 0 929 22500 3004 1.0105564 0 + 3000 1.0864905 3969 5.9065123e-05 -1.0669336 0.0086920235 0.2448914 7367 88 88 0 965 22500 3018 1.0256143 0 + 3100 1.2930036 3969 0.0016599457 -1.035796 0.24427761 0.4417485 7502 103 103 0 1002 22500 2996 1.0207648 0 + 3200 0.99779215 3969 0.00017970488 -0.96136886 0.02644537 0.48688189 7463 89 89 0 1040 22500 2975 1.0226074 0 + 3300 1.1649719 3969 0.00083129956 -1.0309882 0.12233404 0.32895722 7504 92 92 0 1072 22500 2984 1.016696 0 + 3400 1.1428122 3969 0.00094373594 -0.99250387 0.13888018 0.62272115 7519 103 103 0 1092 22500 3005 1.0177259 0 + 3500 1.1207278 3969 0.00052216214 -1.0326791 0.076841381 0.51325294 7456 71 71 0 1127 22500 2986 1.0290334 0 + 3600 0.97869243 3969 -0.00058219044 -1.0545807 -0.085675146 0.44258567 7321 72 72 0 1164 22500 2976 1.031506 0 + 3700 1.0853936 3969 -4.3134698e-06 -1.0751745 -0.00063477022 0.37380213 7444 80 80 0 1194 22500 2985 1.0445746 0 + 3800 1.0351364 3969 -0.00012682002 -1.0434479 -0.018662834 0.42474168 7503 76 76 0 1226 22500 2986 1.0260769 0 + 3900 0.96833719 3969 -0.00039514299 -1.0168031 -0.058149242 0.42237112 7423 79 79 0 1276 22500 3014 1.0160914 0 + 4000 1.0465724 3969 0.00016394266 -1.0119808 0.024125802 0.46524856 7502 97 97 0 1299 22500 2984 1.0159361 0 + 4100 1.2417361 3969 0.0011421943 -1.0612334 0.16808531 0.39684717 7633 83 83 0 1328 22500 3015 1.0264492 0 + 4200 1.0974708 3969 0.00053755453 -1.0073895 0.079106524 0.52996179 7347 86 86 0 1363 22500 3020 1.0215105 0 + 4300 1.1082592 3969 0.00034118461 -1.0469679 0.050208728 0.40630088 7470 94 94 0 1400 22500 3012 1.0278618 0 + 4400 1.0021274 3969 -0.00027032597 -1.0318873 -0.039781169 0.50493986 7643 77 77 0 1434 22500 3006 1.0236688 0 + 4500 0.97643527 3969 -0.00024256014 -1.0023661 -0.03569515 0.55193268 7488 75 75 0 1476 22500 2998 1.0281645 0 + 4600 1.0333058 3969 -9.5227766e-05 -1.0369865 -0.014013718 0.37752045 7455 86 86 0 1507 22500 3003 1.0419695 0 + 4700 1.1320717 3969 0.00069912511 -1.0178677 0.10288325 0.42203645 7594 80 80 0 1531 22500 2989 1.0343185 0 + 4800 1.1326193 3969 0.0010771417 -0.96278098 0.15851217 0.59591984 7504 101 101 0 1560 22500 2998 1.0182951 0 + 4900 1.1174294 3969 0.00044360443 -1.0409743 0.065280828 0.30043772 7611 96 96 0 1590 22500 2996 1.0255445 0 + 5000 0.93845577 3969 -0.00055722 -1.0110717 -0.082000495 0.41966034 7582 83 83 0 1632 22500 2990 1.0290121 0 +Loop time of 1.15581 on 4 procs for 5000 steps with 14716 atoms + +Performance: 373763.989 tau/day, 4325.972 timesteps/s +95.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0088997 | 0.011787 | 0.01474 | 1.9 | 1.02 +Neigh | 0.00226 | 0.0025237 | 0.002775 | 0.4 | 0.22 +Comm | 0.077973 | 0.084049 | 0.088172 | 1.3 | 7.27 +Output | 0.0065994 | 0.007837 | 0.011406 | 2.3 | 0.68 +Modify | 0.99157 | 0.99959 | 1.0146 | 0.9 | 86.48 +Other | | 0.05002 | | | 4.33 + +Nlocal: 3679 ave 3871 max 3455 min +Histogram: 1 0 0 0 1 0 0 1 0 1 +Nghost: 46.5 ave 49 max 43 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Neighs: 118.25 ave 151 max 84 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 473 +Ave neighs/atom = 0.0321419 +Neighbor list builds = 250 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/srd/log.5Oct16.srd.pure.g++.1 b/examples/srd/log.27Nov18.srd.pure.g++.1 similarity index 90% rename from examples/srd/log.5Oct16.srd.pure.g++.1 rename to examples/srd/log.27Nov18.srd.pure.g++.1 index f840d923c8..d0f53429e5 100644 --- a/examples/srd/log.5Oct16.srd.pure.g++.1 +++ b/examples/srd/log.27Nov18.srd.pure.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d SRD only test units lj @@ -24,6 +25,7 @@ lattice sq 85.0 Lattice spacing in x,y,z = 0.108465 0.108465 0.108465 create_atoms 1 region plane Created 21316 atoms + Time spent = 0.0160828 secs group empty type 2 0 atoms in group empty @@ -71,14 +73,7 @@ SRD info: big/SRD mass density ratio = 0 # of rescaled SRD velocities = 0 ave/max all velocity = 13.2735 24.2873 -Neighbor list info ... - 0 neighbor list requests - update every 1 steps, delay 1 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 15.8114 -> bins = 1 1 1 -Memory usage per processor = 5.16355 Mbytes +Per MPI rank memory allocation (min/avg/max) = 5.038 | 5.038 | 5.038 Mbytes Step Temp f_1[7] TotEng Press f_1[3] f_1[4] f_1[6] 0 1 0 0.99995309 85.26 0 0 0 100 0.97820615 3969 0.97816026 83.401857 0 0 0 @@ -131,20 +126,20 @@ Step Temp f_1[7] TotEng Press f_1[3] f_1[4] f_1[6] 4800 0.75446697 3969 0.75443157 64.325854 0 0 0 4900 0.75276753 3969 0.75273221 64.180959 0 0 0 5000 0.75113693 3969 0.75110169 64.041935 0 0 0 -Loop time of 8.07858 on 1 procs for 5000 steps with 21316 atoms +Loop time of 7.57583 on 1 procs for 5000 steps with 21316 atoms -Performance: 1069494.899 tau/day, 618.921 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1140469.459 tau/day, 659.994 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0.00082159 | 0.00082159 | 0.00082159 | 0.0 | 0.01 -Comm | 0.38133 | 0.38133 | 0.38133 | 0.0 | 4.72 -Output | 0.0034697 | 0.0034697 | 0.0034697 | 0.0 | 0.04 -Modify | 6.265 | 6.265 | 6.265 | 0.0 | 77.55 -Other | | 1.428 | | | 17.68 +Neigh | 0.00093412 | 0.00093412 | 0.00093412 | 0.0 | 0.01 +Comm | 0.49229 | 0.49229 | 0.49229 | 0.0 | 6.50 +Output | 0.004915 | 0.004915 | 0.004915 | 0.0 | 0.06 +Modify | 5.9494 | 5.9494 | 5.9494 | 0.0 | 78.53 +Other | | 1.128 | | | 14.89 Nlocal: 21316 ave 21316 max 21316 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -160,4 +155,4 @@ Dangerous builds not checked Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:08 +Total wall time: 0:00:07 diff --git a/examples/srd/log.5Oct16.srd.pure.g++.4 b/examples/srd/log.27Nov18.srd.pure.g++.4 similarity index 90% rename from examples/srd/log.5Oct16.srd.pure.g++.4 rename to examples/srd/log.27Nov18.srd.pure.g++.4 index 3cce60cb25..82aea9a2f2 100644 --- a/examples/srd/log.5Oct16.srd.pure.g++.4 +++ b/examples/srd/log.27Nov18.srd.pure.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # 2d SRD only test units lj @@ -24,6 +25,7 @@ lattice sq 85.0 Lattice spacing in x,y,z = 0.108465 0.108465 0.108465 create_atoms 1 region plane Created 21316 atoms + Time spent = 0.00763822 secs group empty type 2 0 atoms in group empty @@ -71,14 +73,7 @@ SRD info: big/SRD mass density ratio = 0 # of rescaled SRD velocities = 0 ave/max all velocity = 13.2735 24.2873 -Neighbor list info ... - 0 neighbor list requests - update every 1 steps, delay 1 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 15.8114 -> bins = 1 1 1 -Memory usage per processor = 2.29814 Mbytes +Per MPI rank memory allocation (min/avg/max) = 2.236 | 2.241 | 2.246 Mbytes Step Temp f_1[7] TotEng Press f_1[3] f_1[4] f_1[6] 0 1 0 0.99995309 85.26 0 0 0 100 0.97718565 3969 0.97713981 83.314849 0 0 0 @@ -131,20 +126,20 @@ Step Temp f_1[7] TotEng Press f_1[3] f_1[4] f_1[6] 4800 0.75699084 3969 0.75695533 64.541039 0 0 0 4900 0.75590428 3969 0.75586882 64.448399 0 0 0 5000 0.75435525 3969 0.75431986 64.316328 0 0 0 -Loop time of 2.01342 on 4 procs for 5000 steps with 21316 atoms +Loop time of 2.63242 on 4 procs for 5000 steps with 21316 atoms -Performance: 4291197.146 tau/day, 2483.332 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3282146.784 tau/day, 1899.391 timesteps/s +90.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0.0011518 | 0.001229 | 0.0013053 | 0.2 | 0.06 -Comm | 0.2563 | 0.27904 | 0.2912 | 2.6 | 13.86 -Output | 0.0022588 | 0.0023048 | 0.0024054 | 0.1 | 0.11 -Modify | 1.3545 | 1.3589 | 1.3629 | 0.3 | 67.49 -Other | | 0.372 | | | 18.48 +Neigh | 0.0010204 | 0.001139 | 0.001276 | 0.3 | 0.04 +Comm | 0.48325 | 0.51859 | 0.56231 | 4.0 | 19.70 +Output | 0.0025201 | 0.0089323 | 0.028138 | 11.7 | 0.34 +Modify | 1.7822 | 1.8025 | 1.8257 | 1.5 | 68.47 +Other | | 0.3013 | | | 11.45 Nlocal: 5329 ave 5410 max 5266 min Histogram: 1 0 0 2 0 0 0 0 0 1 diff --git a/examples/srd/log.5Oct16.srd.mixture.g++.4 b/examples/srd/log.5Oct16.srd.mixture.g++.4 deleted file mode 100644 index 6962f331d5..0000000000 --- a/examples/srd/log.5Oct16.srd.mixture.g++.4 +++ /dev/null @@ -1,269 +0,0 @@ -LAMMPS (5 Oct 2016) -# 2d SRD test: big + small particles - -units lj -atom_style sphere -atom_modify first big -dimension 2 - -# create big particles with sigma 1.0 - -lattice sq 0.4 -Lattice spacing in x,y,z = 1.58114 1.58114 1.58114 -region box block 0 10 0 10 -0.5 0.5 -create_box 2 box -Created orthogonal box = (0 0 -0.790569) to (15.8114 15.8114 0.790569) - 2 by 2 by 1 MPI processor grid -create_atoms 1 region box -Created 100 atoms -set type 1 mass 1.0 - 100 settings made for mass -set type 1 diameter 1.0 - 100 settings made for diameter - -group big type 1 -100 atoms in group big -velocity big create 1.44 87287 loop geom - -# equilibrate big particles - -pair_style lj/cut 2.5 -pair_coeff 1 1 1.0 1.0 -pair_coeff 2 2 0.0 1.0 0.0 -pair_coeff 1 2 0.0 1.0 0.0 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 big nve -fix 2 all enforce2d - -run 1000 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -Memory usage per processor = 3.60121 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.44 -0.54272 0 0.88288 -0.041088 - 1000 1.8791467 -0.97185784 0 0.8884974 0.61487657 -Loop time of 0.0114341 on 4 procs for 1000 steps with 100 atoms - -Performance: 37781795.071 tau/day, 87457.859 timesteps/s -94.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.001864 | 0.0021054 | 0.0024471 | 0.5 | 18.41 -Neigh | 0.00081182 | 0.00085837 | 0.00093675 | 0.2 | 7.51 -Comm | 0.005461 | 0.0057024 | 0.0059059 | 0.2 | 49.87 -Output | 1.3113e-05 | 1.3828e-05 | 1.5974e-05 | 0.0 | 0.12 -Modify | 0.00065017 | 0.00068271 | 0.00069666 | 0.1 | 5.97 -Other | | 0.002071 | | | 18.12 - -Nlocal: 25 ave 26 max 23 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 47 ave 48 max 46 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 114.75 ave 124 max 100 min -Histogram: 1 0 0 0 0 1 0 0 0 2 - -Total # of neighbors = 459 -Ave neighs/atom = 4.59 -Neighbor list builds = 129 -Dangerous builds = 0 - -unfix 1 -unfix 2 - -# add small particles as hi density lattice - -lattice sq 0.4 -Lattice spacing in x,y,z = 1.58114 1.58114 1.58114 -region plane block 0 10 0 10 -0.001 0.001 -lattice sq 85.0 -Lattice spacing in x,y,z = 0.108465 0.108465 0.108465 -create_atoms 2 region plane -Created 21316 atoms -set type 2 mass 0.01 - 21316 settings made for mass -set type 2 diameter 0.0 - 21316 settings made for diameter - -group small type 2 -21316 atoms in group small - -velocity small create 1.0 593849 loop geom - -# delete overlaps -# must set 1-2 cutoff to non-zero value - -pair_style lj/cut 2.5 -pair_coeff 1 1 1.0 1.0 -pair_coeff 2 2 0.0 1.0 0.0 -pair_coeff 1 2 0.0 1.0 0.5 - -delete_atoms overlap 0.5 small big -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -WARNING: Delete_atoms cutoff > minimum neighbor cutoff (../delete_atoms.cpp:278) -Deleted 6700 atoms, new total = 14716 - -# SRD run - -reset_timestep 0 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -comm_modify mode multi group big vel yes -neigh_modify include big - -# no pairwise interactions with small particles - -pair_style lj/cut 2.5 -pair_coeff 1 1 1.0 1.0 -pair_coeff 2 2 0.0 1.0 0.0 -pair_coeff 1 2 0.0 1.0 0.0 - -# use fix SRD to push small particles out from inside big ones - -timestep 0.001 - -fix 1 big nve -fix 2 small srd 20 big 1.0 0.25 49894 radius 0.88 search 0.2 collision slip -fix 3 all enforce2d - -# diagnostics - -compute tbig big temp -variable pebig equal pe*atoms/count(big) -variable ebig equal etotal*atoms/count(big) -thermo_style custom step temp f_2[7] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] - -thermo_modify temp tbig -WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:474) -thermo 100 - -#dump 1 all atom 250 dump.srd.mixture - -#dump 2 all image 250 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 4 adiam 1 1 adiam 2 0.2 - -#dump 3 all movie 250 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 4 adiam 1 1 adiam 2 0.2 - -run 5000 -SRD info: - SRD/big particles = 14616 100 - big particle diameter max/min = 0.88 0.88 - SRD temperature & lamda = 1 0.2 - SRD max distance & max velocity = 0.8 40 - SRD grid counts: 63 63 1 - SRD grid size: request, actual (xyz) = 0.25, 0.250974 0.250974 1.58114 - SRD per actual grid cell = 4.86648 - SRD viscosity = 0.463448 - big/SRD mass density ratio = 2.12808 -WARNING: Fix srd grid size > 1/4 of big particle diameter (../fix_srd.cpp:2884) - # of rescaled SRD velocities = 0 - ave/max small velocity = 13.2944 24.262 - ave/max big velocity = 1.69284 5.10989 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4 -> bins = 12 12 2 -Memory usage per processor = 5.3246 Mbytes -Step Temp f_2[7] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[8] f_2[9] f_2[10] - 0 1.8791467 0 0.0060376284 -0.97185784 0.8884974 0.61487657 0 0 0 0 0 0 0 0 0 - 100 1.4044369 3969 0.0030633093 -0.93959598 0.4507966 0.78900119 7464 99 99 0 17 22500 3005 1.028131 0 - 200 1.1569383 3969 0.0010543995 -0.99020352 0.15516543 0.50132981 7393 82 82 0 43 22500 2996 1.014347 0 - 300 0.97802835 3969 -0.00019991154 -0.99766705 -0.029418982 0.35789515 7411 90 90 0 84 22500 3001 1.0213725 0 - 400 1.0992982 3969 0.00055034756 -1.007316 0.080989146 0.35177983 7443 78 78 0 107 22500 2993 1.0451641 0 - 500 1.0436705 3969 -7.4779704e-05 -1.0442384 -0.011004581 0.15132448 7504 94 94 0 141 22500 3007 1.0236992 0 - 600 1.0216461 3969 -0.00032426678 -1.0591487 -0.047719099 0.2200765 7508 111 111 0 179 22500 3007 1.0304838 0 - 700 1.1491339 3969 0.0012328743 -0.95621278 0.18142978 0.80670059 7448 95 95 0 201 22500 2978 1.0099113 0 - 800 1.0332166 3969 -0.00040684239 -1.0827554 -0.059870926 0.35939225 7453 113 113 0 235 22500 3024 1.0141565 0 - 900 1.0652211 3969 -6.1337025e-06 -1.0554715 -0.00090263566 0.51460169 7447 97 97 0 259 22500 2982 1.0192735 0 - 1000 0.92834993 3969 -0.00067681883 -1.0186671 -0.09960066 0.738738 7328 78 78 0 286 22500 2999 1.023841 0 - 1100 1.0386338 3969 -0.00018904027 -1.0560666 -0.027819166 0.57129719 7449 96 96 0 325 22500 3012 1.0373885 0 - 1200 0.92218024 3969 -0.00077989365 -1.0277276 -0.11476915 0.48613467 7507 100 100 0 355 22500 3003 1.0254889 0 - 1300 1.1835318 3969 0.00096836748 -1.0291915 0.14250496 0.62935386 7439 92 92 0 384 22500 2993 1.0289037 0 - 1400 1.0895805 3969 0.00022072203 -1.0462033 0.032481455 0.49130771 7492 80 80 0 426 22500 3005 1.0083895 0 - 1500 1.0713283 3969 0.00042008247 -0.99879571 0.061819337 0.63979877 7498 87 87 0 457 22500 3000 1.0009934 0 - 1600 0.97815063 3969 -0.0005425653 -1.048213 -0.079843909 0.3604669 7533 105 105 0 492 22500 3004 1.0375508 0 - 1700 1.1626991 3969 0.00048969594 -1.0790084 0.072063654 0.36261544 7493 87 87 0 519 22500 3014 1.0151507 0 - 1800 0.91077626 3969 -0.001205934 -1.0791337 -0.17746525 0.14204132 7553 77 77 0 554 22500 3001 1.0393648 0 - 1900 1.073632 3969 0.00048053229 -0.99218055 0.070715131 0.56468311 7660 96 96 0 579 22500 2990 1.0071005 0 - 2000 1.0516743 3969 -0.00020689596 -1.0716044 -0.03044681 0.28030578 7561 96 96 0 631 22500 3020 1.0222307 0 - 2100 1.141885 3969 0.00040167415 -1.0713558 0.059110368 0.32604475 7569 69 69 0 662 22500 2968 1.0125404 0 - 2200 1.2228391 3969 0.0010327668 -1.0586288 0.15198196 0.36038619 7572 86 86 0 691 22500 2979 1.0235277 0 - 2300 1.1087892 3969 0.00043721167 -1.0333612 0.06434007 0.39699935 7512 68 68 0 716 22500 3022 1.0515275 0 - 2400 1.0637949 3969 0.00033715078 -1.0035418 0.049615108 0.47092535 7508 82 82 0 742 22500 2997 1.0295291 0 - 2500 1.0345185 3969 0.00023374535 -0.98977538 0.034397966 0.57463578 7514 89 89 0 778 22500 2986 1.0252443 0 - 2600 1.1040438 3969 0.00024293233 -1.0572534 0.035749922 0.38043986 7543 82 82 0 811 22500 2995 1.0181075 0 - 2700 0.96252159 3969 -0.00081483156 -1.072807 -0.11991061 0.2771083 7555 97 97 0 842 22500 2990 1.0125575 0 - 2800 0.98730039 3969 -0.00037330307 -1.0323627 -0.05493528 0.57796755 7359 88 88 0 866 22500 2981 1.0187945 0 - 2900 1.056508 3969 0.0003868833 -0.98900914 0.056933747 0.63280739 7485 84 84 0 906 22500 3009 1.0260952 0 - 3000 0.97367876 3969 -0.0002599408 -1.0021949 -0.038252888 0.66404419 7424 99 99 0 951 22500 2998 1.0143644 0 - 3100 0.97186052 3969 -0.00084858744 -1.08702 -0.12487813 0.33835871 7502 88 88 0 983 22500 3016 1.0292976 0 - 3200 0.97992936 3969 -0.0006672966 -1.0683294 -0.098199368 0.45138198 7326 72 72 0 1026 22500 3005 1.023367 0 - 3300 0.96722828 3969 -0.00034604616 -1.0084802 -0.050924152 0.58525322 7383 70 70 0 1053 22500 2986 1.034213 0 - 3400 1.1202892 3969 0.00043227098 -1.0454733 0.063612998 0.43718189 7364 85 85 0 1087 22500 2995 1.0158362 0 - 3500 0.79750662 3969 -0.0014948003 -1.0095064 -0.21997481 0.41132937 7511 90 90 0 1116 22500 2993 1.0182386 0 - 3600 1.0491778 3969 -0.00010433247 -1.0540396 -0.015353567 0.42315074 7489 95 95 0 1144 22500 2999 1.020922 0 - 3700 0.9610381 3969 -0.00021690291 -0.98334715 -0.031919432 0.55752687 7496 80 80 0 1172 22500 3019 1.0303605 0 - 3800 0.76471906 3969 -0.0017426239 -1.0135164 -0.25644453 0.32180761 7518 89 89 0 1213 22500 3008 1.0419804 0 - 3900 1.086591 3969 0.00018698809 -1.0482079 0.027517167 0.26073092 7462 98 98 0 1246 22500 3005 1.0261112 0 - 4000 0.82619819 3969 -0.0014452395 -1.0306176 -0.21268144 0.14915039 7545 98 98 0 1287 22500 3008 1.0352711 0 - 4100 0.95064219 3969 -0.00053545528 -1.0199334 -0.0787976 0.39089361 7572 85 85 0 1318 22500 3001 1.0372179 0 - 4200 0.90370321 3969 -0.0007185822 -1.0004127 -0.10574656 0.47384816 7460 61 61 0 1355 22500 2998 1.012362 0 - 4300 0.97729216 3969 -0.00029144098 -1.0104077 -0.042888455 0.46030155 7533 70 70 0 1388 22500 3007 1.0223284 0 - 4400 1.0140429 3969 4.720814e-06 -1.0032078 0.00069471498 0.55984871 7501 88 88 0 1412 22500 2995 1.0285533 0 - 4500 1.0498677 3969 0.00022703142 -1.0059591 0.033409944 0.61932234 7461 82 82 0 1442 22500 2994 1.0292131 0 - 4600 0.90182406 3969 -0.00092157839 -1.0284253 -0.13561948 0.59198635 7499 73 73 0 1483 22500 3020 1.0159894 0 - 4700 1.0138009 3969 -0.00028404538 -1.045463 -0.041800118 0.53428422 7407 78 78 0 1507 22500 3011 1.0058816 0 - 4800 1.0506575 3969 -0.00043345499 -1.1039381 -0.063787236 0.30643257 7543 87 87 0 1524 22500 2995 1.0210242 0 - 4900 1.1479137 3969 -0.00019383126 -1.1649587 -0.028524208 0.28842185 7416 91 91 0 1557 22500 2988 1.0063463 0 - 5000 0.9092746 3969 -0.00087214131 -1.0285262 -0.12834432 0.76635862 7389 85 85 0 1589 22500 3000 1.0157079 0 -Loop time of 0.845193 on 4 procs for 5000 steps with 14716 atoms - -Performance: 511125.916 tau/day, 5915.809 timesteps/s -99.3% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0080214 | 0.010886 | 0.013055 | 1.7 | 1.29 -Neigh | 0.0015197 | 0.0018466 | 0.002033 | 0.5 | 0.22 -Comm | 0.058729 | 0.061718 | 0.063298 | 0.7 | 7.30 -Output | 0.0025218 | 0.0027084 | 0.0029843 | 0.3 | 0.32 -Modify | 0.71322 | 0.72561 | 0.73841 | 1.1 | 85.85 -Other | | 0.04242 | | | 5.02 - -Nlocal: 3679 ave 4013 max 3459 min -Histogram: 1 0 1 1 0 0 0 0 0 1 -Nghost: 48.25 ave 54 max 44 min -Histogram: 1 0 1 0 0 1 0 0 0 1 -Neighs: 117 ave 136 max 87 min -Histogram: 1 0 0 0 0 0 1 1 0 1 - -Total # of neighbors = 468 -Ave neighs/atom = 0.0318021 -Neighbor list builds = 250 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:01 diff --git a/examples/streitz/log.5Oct16.streitz.ewald.g++.1 b/examples/streitz/log.27Nov18.streitz.ewald.g++.1 similarity index 56% rename from examples/streitz/log.5Oct16.streitz.ewald.g++.1 rename to examples/streitz/log.27Nov18.streitz.ewald.g++.1 index 5cb643146a..2e5c9fb093 100644 --- a/examples/streitz/log.5Oct16.streitz.ewald.g++.1 +++ b/examples/streitz/log.27Nov18.streitz.ewald.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Streitz-Mintmire potential with alpha-alumina # option to use with Ewald or Wolf sum # EAM (AlO.eam.alloy) includes 1994 SM and 2004 Zhou versions @@ -61,47 +62,62 @@ fix 2 all nve run 100 Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.310132 estimated absolute RMS force accuracy = 1.9688e-05 estimated relative force accuracy = 1.36725e-06 KSpace vectors: actual max1d max3d = 2541 11 6083 kxmax kymax kzmax = 10 11 10 Neighbor list info ... - 3 neighbor list requests update every 10 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 5 4 -Memory usage per processor = 79.7925 Mbytes + binsize = 6.5, bins = 4 5 4 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair coul/streitz, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair eam/alloy, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) fix qeq/slater, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 102.8 | 102.8 | 102.8 Mbytes Step Temp TotEng PotEng E_vdwl E_coul E_long c_q1 c_q2 v_qsum Press S/CPU - 0 300 -6.3402658 -6.3790259 -2.7952901 10.218189 -13.801924 2.8665317 -1.9110211 2.7284841e-12 -26072.585 0 - 10 272.45428 -6.340306 -6.3755071 -2.790294 10.191122 -13.776335 2.8636996 -1.9091331 4.5474735e-13 -21774.211 1.0024289 - 20 219.94294 -6.3402438 -6.3686605 -2.7790335 10.192017 -13.781644 2.8638745 -1.9092497 1.3642421e-12 -16693.959 1.0737194 - 30 179.36108 -6.3401905 -6.363364 -2.7689124 10.190565 -13.785017 2.8639191 -1.9092794 1.0004442e-11 -12974.154 1.075669 - 40 162.68484 -6.340179 -6.3611979 -2.7652026 10.173296 -13.769291 2.8621763 -1.9081175 -3.6379788e-12 -12735.477 1.0762629 - 50 152.76246 -6.3401898 -6.3599268 -2.7673924 10.132267 -13.724802 2.8575298 -1.9050198 6.3664629e-12 -14532.643 1.0803062 - 60 138.38061 -6.340206 -6.3580848 -2.7714511 10.085334 -13.671967 2.8519579 -1.9013053 3.1832315e-12 -15656.278 1.0800578 - 70 134.9572 -6.3401907 -6.3576272 -2.7740776 10.063528 -13.647077 2.849277 -1.899518 -2.7284841e-12 -14160.692 1.0792572 - 80 161.55083 -6.3401305 -6.3610029 -2.7741365 10.086552 -13.673419 2.8520585 -1.9013723 1.8189894e-12 -9666.5838 1.0798168 - 90 207.33012 -6.3400321 -6.3668192 -2.7713864 10.144722 -13.740155 2.8591984 -1.9061323 -3.1832315e-12 -2530.8605 1.0783069 - 100 233.80619 -6.3399378 -6.3701456 -2.7659477 10.207141 -13.811339 2.8668083 -1.9112055 9.094947e-13 6120.857 1.0726581 -Loop time of 93.5154 on 1 procs for 100 steps with 2160 atoms + 0 300 -6.3402658 -6.3790259 -2.7952901 10.218189 -13.801924 2.8665317 -1.9110211 -2.7284841e-12 -26072.585 0 + 10 272.45428 -6.340306 -6.3755071 -2.790294 10.191122 -13.776335 2.8636996 -1.9091331 -3.6379788e-12 -21774.211 1.4901869 + 20 219.94294 -6.3402438 -6.3686605 -2.7790336 10.192017 -13.781644 2.8638745 -1.9092497 -2.7284841e-12 -16693.959 1.6439654 + 30 179.36108 -6.3401905 -6.363364 -2.7689124 10.190565 -13.785017 2.8639191 -1.9092794 -9.094947e-13 -12974.155 1.6560994 + 40 162.68484 -6.340179 -6.3611979 -2.7652026 10.173296 -13.769291 2.8621763 -1.9081175 3.1832315e-12 -12735.479 1.6506831 + 50 152.76247 -6.3401898 -6.3599268 -2.7673924 10.132267 -13.724801 2.8575297 -1.9050198 -3.6379788e-12 -14532.607 1.6531952 + 60 138.38062 -6.340206 -6.3580848 -2.7714511 10.085334 -13.671967 2.851958 -1.9013053 1.3642421e-12 -15656.298 1.6555081 + 70 134.9572 -6.3401907 -6.3576272 -2.7740776 10.063527 -13.647077 2.8492769 -1.8995179 -2.7284841e-12 -14160.663 1.6525548 + 80 161.55081 -6.3401305 -6.3610029 -2.7741365 10.086552 -13.673419 2.8520584 -1.9013723 -4.5474735e-13 -9666.5594 1.6525076 + 90 207.33009 -6.3400321 -6.3668192 -2.7713864 10.144722 -13.740155 2.8591985 -1.9061323 4.0927262e-12 -2530.8853 1.6448945 + 100 233.80619 -6.3399378 -6.3701456 -2.7659477 10.207141 -13.811339 2.8668083 -1.9112055 -4.0927262e-12 6120.8481 1.635231 +Loop time of 61.2766 on 1 procs for 100 steps with 2160 atoms -Performance: 0.037 ns/day, 649.413 hours/ns, 1.069 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.056 ns/day, 425.532 hours/ns, 1.632 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 40.681 | 40.681 | 40.681 | 0.0 | 43.50 -Kspace | 4.9722 | 4.9722 | 4.9722 | 0.0 | 5.32 +Pair | 22.617 | 22.617 | 22.617 | 0.0 | 36.91 +Kspace | 5.3519 | 5.3519 | 5.3519 | 0.0 | 8.73 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.010761 | 0.010761 | 0.010761 | 0.0 | 0.01 -Output | 0.00078893 | 0.00078893 | 0.00078893 | 0.0 | 0.00 -Modify | 47.848 | 47.848 | 47.848 | 0.0 | 51.17 -Other | | 0.002154 | | | 0.00 +Comm | 0.01263 | 0.01263 | 0.01263 | 0.0 | 0.02 +Output | 0.00089216 | 0.00089216 | 0.00089216 | 0.0 | 0.00 +Modify | 33.292 | 33.292 | 33.292 | 0.0 | 54.33 +Other | | 0.001862 | | | 0.00 Nlocal: 2160 ave 2160 max 2160 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -116,4 +132,4 @@ Total # of neighbors = 2357856 Ave neighs/atom = 1091.6 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:01:34 +Total wall time: 0:01:01 diff --git a/examples/streitz/log.5Oct16.streitz.ewald.g++.4 b/examples/streitz/log.27Nov18.streitz.ewald.g++.4 similarity index 53% rename from examples/streitz/log.5Oct16.streitz.ewald.g++.4 rename to examples/streitz/log.27Nov18.streitz.ewald.g++.4 index 01beb3d1ba..29b5133a19 100644 --- a/examples/streitz/log.5Oct16.streitz.ewald.g++.4 +++ b/examples/streitz/log.27Nov18.streitz.ewald.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Streitz-Mintmire potential with alpha-alumina # option to use with Ewald or Wolf sum # EAM (AlO.eam.alloy) includes 1994 SM and 2004 Zhou versions @@ -61,47 +62,62 @@ fix 2 all nve run 100 Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:316) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.310132 estimated absolute RMS force accuracy = 1.9688e-05 estimated relative force accuracy = 1.36725e-06 KSpace vectors: actual max1d max3d = 2541 11 6083 kxmax kymax kzmax = 10 11 10 Neighbor list info ... - 3 neighbor list requests update every 10 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 5 4 -Memory usage per processor = 32.3255 Mbytes + binsize = 6.5, bins = 4 5 4 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair coul/streitz, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair eam/alloy, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) fix qeq/slater, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 38.08 | 38.08 | 38.08 Mbytes Step Temp TotEng PotEng E_vdwl E_coul E_long c_q1 c_q2 v_qsum Press S/CPU - 0 300 -6.3402658 -6.3790259 -2.7952901 10.218189 -13.801925 2.8665317 -1.9110211 4.5474735e-13 -26072.6 0 - 10 272.45429 -6.340306 -6.3755071 -2.790294 10.191122 -13.776335 2.8636996 -1.9091331 4.5474735e-13 -21774.214 3.7998441 - 20 219.94295 -6.3402438 -6.3686605 -2.7790335 10.192018 -13.781645 2.8638746 -1.9092497 -4.5474735e-13 -16694.015 4.0421334 - 30 179.36109 -6.3401905 -6.363364 -2.7689124 10.190566 -13.785018 2.8639192 -1.9092795 9.094947e-13 -12974.238 4.1358956 - 40 162.68485 -6.340179 -6.3611979 -2.7652026 10.173296 -13.769291 2.8621763 -1.9081175 -4.5474735e-13 -12735.472 4.1616104 - 50 152.76249 -6.3401898 -6.3599268 -2.7673924 10.132267 -13.724801 2.8575297 -1.9050198 4.5474735e-13 -14532.583 4.052378 - 60 138.38062 -6.340206 -6.3580848 -2.7714511 10.085334 -13.671968 2.851958 -1.9013053 4.5474735e-13 -15656.298 4.1601628 - 70 134.9572 -6.3401907 -6.3576272 -2.7740776 10.063527 -13.647077 2.8492769 -1.8995179 -1.3642421e-12 -14160.655 4.1215986 - 80 161.55082 -6.3401305 -6.3610029 -2.7741365 10.086553 -13.673419 2.8520585 -1.9013723 0 -9666.5793 4.1226863 - 90 207.3301 -6.3400321 -6.3668192 -2.7713864 10.144722 -13.740155 2.8591985 -1.9061323 0 -2530.8682 4.1248222 - 100 233.80619 -6.3399378 -6.3701456 -2.7659477 10.207141 -13.811339 2.8668082 -1.9112055 -4.5474735e-13 6120.8881 4.1438288 -Loop time of 24.4873 on 4 procs for 100 steps with 2160 atoms + 0 300 -6.3402658 -6.3790259 -2.7952901 10.218189 -13.801925 2.8665317 -1.9110211 9.094947e-13 -26072.6 0 + 10 272.45428 -6.340306 -6.3755071 -2.790294 10.191122 -13.776335 2.8636996 -1.9091331 0 -21774.211 5.2839781 + 20 219.94294 -6.3402438 -6.3686605 -2.7790336 10.192017 -13.781644 2.8638745 -1.9092497 0 -16693.959 6.0398147 + 30 179.36107 -6.3401905 -6.363364 -2.7689124 10.190565 -13.785017 2.8639191 -1.9092794 -9.094947e-13 -12974.157 6.0771654 + 40 162.68484 -6.340179 -6.3611979 -2.7652026 10.173296 -13.769291 2.8621763 -1.9081175 1.3642421e-12 -12735.472 5.9101566 + 50 152.76247 -6.3401898 -6.3599268 -2.7673924 10.132267 -13.724801 2.8575297 -1.9050198 -9.094947e-13 -14532.603 6.1598264 + 60 138.38062 -6.340206 -6.3580848 -2.7714511 10.085334 -13.671967 2.8519579 -1.9013053 -9.094947e-13 -15656.287 6.0492678 + 70 134.95719 -6.3401907 -6.3576272 -2.7740777 10.063528 -13.647077 2.8492769 -1.899518 4.5474735e-13 -14160.677 5.8316321 + 80 161.55082 -6.3401305 -6.3610029 -2.7741365 10.086552 -13.673419 2.8520584 -1.9013723 4.5474735e-13 -9666.5672 6.0547326 + 90 207.33012 -6.3400321 -6.3668192 -2.7713864 10.144722 -13.740155 2.8591984 -1.9061323 4.5474735e-13 -2530.8639 6.1225844 + 100 233.80623 -6.3399378 -6.3701456 -2.7659477 10.207141 -13.811338 2.8668082 -1.9112055 -4.5474735e-13 6120.8845 5.8372987 +Loop time of 16.8751 on 4 procs for 100 steps with 2160 atoms -Performance: 0.141 ns/day, 170.051 hours/ns, 4.084 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.205 ns/day, 117.188 hours/ns, 5.926 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 10.566 | 10.569 | 10.572 | 0.1 | 43.16 -Kspace | 1.2451 | 1.2531 | 1.2593 | 0.5 | 5.12 +Pair | 6.0459 | 6.0553 | 6.0662 | 0.3 | 35.88 +Kspace | 1.4116 | 1.4188 | 1.4243 | 0.4 | 8.41 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.032611 | 0.037556 | 0.042452 | 1.8 | 0.15 -Output | 0.00079513 | 0.00084209 | 0.00089383 | 0.1 | 0.00 -Modify | 12.626 | 12.626 | 12.626 | 0.0 | 51.56 -Other | | 0.001517 | | | 0.01 +Comm | 0.052984 | 0.057914 | 0.062647 | 1.8 | 0.34 +Output | 0.00076938 | 0.0010375 | 0.0018225 | 1.4 | 0.01 +Modify | 9.3406 | 9.3408 | 9.341 | 0.0 | 55.35 +Other | | 0.001289 | | | 0.01 Nlocal: 540 ave 540 max 540 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -116,4 +132,4 @@ Total # of neighbors = 2357856 Ave neighs/atom = 1091.6 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:24 +Total wall time: 0:00:17 diff --git a/examples/streitz/log.5Oct16.streitz.wolf.g++.1 b/examples/streitz/log.27Nov18.streitz.wolf.g++.1 similarity index 55% rename from examples/streitz/log.5Oct16.streitz.wolf.g++.1 rename to examples/streitz/log.27Nov18.streitz.wolf.g++.1 index b7f091e834..200113e6df 100644 --- a/examples/streitz/log.5Oct16.streitz.wolf.g++.1 +++ b/examples/streitz/log.27Nov18.streitz.wolf.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Streitz-Mintmire potential with alpha-alumina # option to use with Ewald or Wolf sum # EAM (AlO.eam.alloy) includes 1994 SM and 2004 Zhou versions @@ -61,39 +62,54 @@ fix 2 all nve run 100 Neighbor list info ... - 3 neighbor list requests update every 10 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 5 4 -Memory usage per processor = 43.8231 Mbytes + binsize = 6.5, bins = 4 5 4 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair coul/streitz, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair eam/alloy, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) fix qeq/slater, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 66.79 | 66.79 | 66.79 Mbytes Step Temp TotEng PotEng E_vdwl E_coul E_long c_q1 c_q2 v_qsum Press S/CPU - 0 300 -6.3403863 -6.3791464 -2.7952901 -3.5838563 0 2.8665317 -1.9110211 2.7284841e-12 -25874.942 0 - 10 272.66671 -6.3403993 -6.375628 -2.7902909 -3.5853371 0 2.8636914 -1.9091276 -5.9117156e-12 -21564.556 0.81612507 - 20 220.54622 -6.3402616 -6.3687562 -2.7790072 -3.589749 0 2.863852 -1.9092346 -2.7284841e-12 -16449.483 0.86358366 - 30 180.22122 -6.3401053 -6.36339 -2.768798 -3.5945919 0 2.8639472 -1.9092981 -4.0927262e-12 -12688.515 0.86365801 - 40 163.64074 -6.3399908 -6.3611332 -2.7648763 -3.5962569 0 2.8623043 -1.9082029 5.9117156e-12 -12334.208 0.863544 - 50 153.73808 -6.3399173 -6.3597803 -2.7667004 -3.5930799 0 2.8578231 -1.9052154 -1.3642421e-12 -13908.747 0.86145214 - 60 139.1264 -6.3398818 -6.357857 -2.7702921 -3.5875649 0 2.8524119 -1.9016079 -2.7284841e-12 -14717.564 0.86116198 - 70 134.93296 -6.3398533 -6.3572867 -2.7724725 -3.5848142 0 2.849924 -1.8999493 4.5474735e-13 -12982.145 0.86628367 - 80 160.3429 -6.3398152 -6.3605315 -2.7722306 -3.5883009 0 2.8528608 -1.9019072 9.094947e-13 -8388.9494 0.86398157 - 90 205.15419 -6.3397713 -6.3662773 -2.7693832 -3.596894 0 2.8599384 -1.9066256 -9.094947e-13 -1208.0269 0.86058046 - 100 231.50843 -6.339741 -6.369652 -2.7640167 -3.6056353 0 2.8675277 -1.9116851 -1.8189894e-12 7331.3742 0.85974026 -Loop time of 116.581 on 1 procs for 100 steps with 2160 atoms + 0 300 -6.3403863 -6.3791464 -2.7952901 -3.5838563 0 2.8665317 -1.9110211 -2.7284841e-12 -25874.942 0 + 10 272.66671 -6.3403993 -6.375628 -2.7902909 -3.5853371 0 2.8636914 -1.9091276 4.5474735e-12 -21564.553 1.428018 + 20 220.54623 -6.3402616 -6.3687562 -2.7790072 -3.589749 0 2.863852 -1.9092346 -6.8212103e-12 -16449.483 1.5873243 + 30 180.22122 -6.3401053 -6.36339 -2.768798 -3.5945919 0 2.8639472 -1.9092981 9.094947e-13 -12688.517 1.5892821 + 40 163.64074 -6.3399908 -6.3611332 -2.7648763 -3.5962569 0 2.8623043 -1.9082029 2.2737368e-12 -12334.25 1.5885841 + 50 153.73807 -6.3399173 -6.3597803 -2.7667004 -3.5930799 0 2.8578231 -1.9052154 1.3642421e-12 -13908.751 1.5780942 + 60 139.1264 -6.3398818 -6.357857 -2.7702921 -3.5875649 0 2.8524119 -1.9016079 1.3642421e-12 -14717.538 1.5868676 + 70 134.93296 -6.3398533 -6.3572867 -2.7724725 -3.5848142 0 2.849924 -1.8999493 -4.5474735e-13 -12982.184 1.589379 + 80 160.34289 -6.3398152 -6.3605315 -2.7722306 -3.5883009 0 2.8528608 -1.9019072 -3.1832315e-12 -8388.9485 1.5812201 + 90 205.15422 -6.3397713 -6.3662773 -2.7693832 -3.596894 0 2.8599386 -1.9066257 -4.0927262e-12 -1208.1523 1.580384 + 100 231.50846 -6.339741 -6.369652 -2.7640167 -3.6056353 0 2.8675277 -1.9116851 -3.6379788e-12 7331.391 1.5711353 +Loop time of 63.8366 on 1 procs for 100 steps with 2160 atoms -Performance: 0.030 ns/day, 809.593 hours/ns, 0.858 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.054 ns/day, 443.310 hours/ns, 1.567 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 68.334 | 68.334 | 68.334 | 0.0 | 58.61 +Pair | 30.658 | 30.658 | 30.658 | 0.0 | 48.03 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.010072 | 0.010072 | 0.010072 | 0.0 | 0.01 -Output | 0.00077605 | 0.00077605 | 0.00077605 | 0.0 | 0.00 -Modify | 48.234 | 48.234 | 48.234 | 0.0 | 41.37 -Other | | 0.002206 | | | 0.00 +Comm | 0.012245 | 0.012245 | 0.012245 | 0.0 | 0.02 +Output | 0.00091052 | 0.00091052 | 0.00091052 | 0.0 | 0.00 +Modify | 33.164 | 33.164 | 33.164 | 0.0 | 51.95 +Other | | 0.001392 | | | 0.00 Nlocal: 2160 ave 2160 max 2160 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -108,4 +124,4 @@ Total # of neighbors = 2357856 Ave neighs/atom = 1091.6 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:01:57 +Total wall time: 0:01:04 diff --git a/examples/streitz/log.5Oct16.streitz.wolf.g++.4 b/examples/streitz/log.27Nov18.streitz.wolf.g++.4 similarity index 57% rename from examples/streitz/log.5Oct16.streitz.wolf.g++.4 rename to examples/streitz/log.27Nov18.streitz.wolf.g++.4 index 0d44412e9b..2629e864dd 100644 --- a/examples/streitz/log.5Oct16.streitz.wolf.g++.4 +++ b/examples/streitz/log.27Nov18.streitz.wolf.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Streitz-Mintmire potential with alpha-alumina # option to use with Ewald or Wolf sum # EAM (AlO.eam.alloy) includes 1994 SM and 2004 Zhou versions @@ -61,39 +62,54 @@ fix 2 all nve run 100 Neighbor list info ... - 3 neighbor list requests update every 10 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 13 ghost atom cutoff = 13 - binsize = 6.5 -> bins = 4 5 4 -Memory usage per processor = 13.9811 Mbytes + binsize = 6.5, bins = 4 5 4 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair coul/streitz, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair eam/alloy, perpetual, half/full from (1) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (3) fix qeq/slater, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 19.73 | 19.73 | 19.73 Mbytes Step Temp TotEng PotEng E_vdwl E_coul E_long c_q1 c_q2 v_qsum Press S/CPU - 0 300 -6.3403863 -6.3791464 -2.7952901 -3.5838563 0 2.8665317 -1.9110211 4.5474735e-13 -25874.956 0 - 10 272.66671 -6.3403993 -6.375628 -2.7902909 -3.5853371 0 2.8636914 -1.9091276 -1.3642421e-12 -21564.555 3.1498495 - 20 220.54623 -6.3402616 -6.3687562 -2.7790072 -3.589749 0 2.863852 -1.9092346 -1.3642421e-12 -16449.483 3.2884449 - 30 180.22123 -6.3401053 -6.36339 -2.768798 -3.5945919 0 2.8639472 -1.9092981 1.3642421e-12 -12688.521 3.3407498 - 40 163.64074 -6.3399908 -6.3611332 -2.7648763 -3.5962569 0 2.8623043 -1.9082029 -9.094947e-13 -12334.216 3.2513632 - 50 153.73807 -6.3399173 -6.3597803 -2.7667004 -3.5930799 0 2.8578231 -1.9052154 4.5474735e-13 -13908.735 3.2545821 - 60 139.12639 -6.3398818 -6.357857 -2.7702921 -3.5875649 0 2.8524119 -1.901608 0 -14717.582 3.3020584 - 70 134.93296 -6.3398533 -6.3572867 -2.7724725 -3.5848142 0 2.849924 -1.8999493 -4.5474735e-13 -12982.152 3.3300311 - 80 160.3429 -6.3398152 -6.3605315 -2.7722306 -3.5883009 0 2.8528608 -1.9019072 -4.5474735e-13 -8388.9691 3.3716067 - 90 205.15418 -6.3397713 -6.3662773 -2.7693832 -3.596894 0 2.8599384 -1.9066256 -1.3642421e-12 -1208.0315 3.2650044 - 100 231.50843 -6.339741 -6.369652 -2.7640167 -3.6056353 0 2.8675276 -1.9116851 0 7331.4547 3.2807764 -Loop time of 30.4655 on 4 procs for 100 steps with 2160 atoms + 0 300 -6.3403863 -6.3791464 -2.7952901 -3.5838563 0 2.8665317 -1.9110211 9.094947e-13 -25874.957 0 + 10 272.66672 -6.3403993 -6.375628 -2.7902909 -3.5853371 0 2.8636914 -1.9091276 -2.2737368e-12 -21564.553 5.2615137 + 20 220.54623 -6.3402616 -6.3687562 -2.7790072 -3.589749 0 2.863852 -1.9092346 9.094947e-13 -16449.483 5.6907174 + 30 180.22123 -6.3401053 -6.36339 -2.768798 -3.5945919 0 2.8639472 -1.9092981 4.5474735e-13 -12688.521 5.8240034 + 40 163.64074 -6.3399908 -6.3611332 -2.7648763 -3.5962569 0 2.8623043 -1.9082029 0 -12334.214 5.7924103 + 50 153.73807 -6.3399173 -6.3597803 -2.7667004 -3.5930799 0 2.8578231 -1.9052154 -2.7284841e-12 -13908.738 5.5609047 + 60 139.12639 -6.3398818 -6.357857 -2.7702921 -3.5875649 0 2.8524119 -1.9016079 9.094947e-13 -14717.539 5.8733718 + 70 134.93296 -6.3398533 -6.3572867 -2.7724725 -3.5848142 0 2.8499241 -1.8999494 -4.5474735e-13 -12982.215 5.8723225 + 80 160.3429 -6.3398152 -6.3605315 -2.7722306 -3.5883009 0 2.8528607 -1.9019071 0 -8388.8771 5.6759992 + 90 205.15422 -6.3397713 -6.3662773 -2.7693832 -3.596894 0 2.8599384 -1.9066256 0 -1208.0057 5.8210112 + 100 231.50845 -6.339741 -6.369652 -2.7640167 -3.6056353 0 2.8675277 -1.9116851 -4.5474735e-13 7331.3767 5.8173821 +Loop time of 17.5038 on 4 procs for 100 steps with 2160 atoms -Performance: 0.113 ns/day, 211.566 hours/ns, 3.282 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.197 ns/day, 121.554 hours/ns, 5.713 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.774 | 17.778 | 17.783 | 0.1 | 58.35 +Pair | 8.2231 | 8.2312 | 8.2384 | 0.2 | 47.02 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.033262 | 0.037797 | 0.041712 | 1.9 | 0.12 -Output | 0.0010474 | 0.0010778 | 0.0011182 | 0.1 | 0.00 -Modify | 12.647 | 12.647 | 12.647 | 0.0 | 41.51 -Other | | 0.001517 | | | 0.00 +Comm | 0.040039 | 0.046999 | 0.055306 | 2.5 | 0.27 +Output | 0.00074816 | 0.00099862 | 0.0017352 | 0.0 | 0.01 +Modify | 9.2234 | 9.2236 | 9.2237 | 0.0 | 52.69 +Other | | 0.001126 | | | 0.01 Nlocal: 540 ave 540 max 540 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -108,4 +124,4 @@ Total # of neighbors = 2357856 Ave neighs/atom = 1091.6 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:30 +Total wall time: 0:00:17 diff --git a/examples/threebody/BNC.tersoff b/examples/threebody/BNC.tersoff deleted file mode 100644 index 1630062524..0000000000 --- a/examples/threebody/BNC.tersoff +++ /dev/null @@ -1,74 +0,0 @@ -# DATE: 2013-03-21 CONTRIBUTOR: Cem Sevik CITATION: Kinaci, Haskins, Sevik and Cagin, Phys Rev B, 86, 115410 (2012) -# Tersoff parameters for B, C, and BN-C hybrid based graphene like nano structures -# multiple entries can be added to this file, LAMMPS reads the ones it needs - -# these entries are in LAMMPS "metal" units: -# A,B = eV; lambda1,lambda2,lambda3 = 1/Angstroms; R,D = Angstroms -# other quantities are unitless - -# Cem Sevik (csevik at anadolu.edu.tr) takes full blame for this -# file. It specifies B-N, B-C, and N-C interaction parameters -# generated and published by the reseacrh group of Prof. Tahir Cagin. - -# 1. Physical Review B 84, 085409 2011 -# Characterization of thermal transport in low-dimensional boron nitride nanostructures, -# - -# 2. Physical Review B 86, 075403 2012 -# Influence of disorder on thermal transport properties of boron nitride nanostructures -# - -# 3. Physical Review B 86, 075403 2012, Please see for further information about B-C and N-C parameters -# Thermal conductivity of BN-C nanostructures -# - -# The file also specifies C-C, interaction parameters -# generated and published by the reseacrh group of Dr. D. A. Broido -# Physical Review B 81, 205441 2010 -# Optimized Tersoff and Brenner empirical potential parameters for -# lattice dynamics and phonon thermal transport in carbon nanotubes and graphene - -# Users in referring the full parameters can cite the full parameter paper (3) as: -# A. Kinaci, J. B. Haskins, C. Sevik, T. Cagin, Physical Review B 86, 115410 (2012) -# Thermal conductivity of BN-C nanostructures -# - -# format of a single entry (one or more lines): -# element 1, element 2, element 3, -# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A - -N B B 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 -N B N 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 -N B C 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 - -B N B 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 -B N N 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 -B N C 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.199 340.00 1.95 0.05 3.568 1380.0 - -N N B 3.0 1.0 0.0 17.7959 5.9484 0.00000 0.6184432 0.019251 2.6272721 138.77866 2.0 0.1 2.8293093 128.86866 -N N N 3.0 1.0 0.0 17.7959 5.9484 0.00000 0.6184432 0.019251 2.6272721 138.77866 2.0 0.1 2.8293093 128.86866 -N N C 3.0 1.0 0.0 17.7959 5.9484 0.00000 0.6184432 0.019251 2.6272721 138.77866 2.0 0.1 2.8293093 128.86866 - -B B B 3.0 1.0 0.0 0.52629 0.001587 0.5 3.9929061 1.6e-6 2.0774982 43.132016 2.0 0.1 2.2372578 40.0520156 -B B N 3.0 1.0 0.0 0.52629 0.001587 0.5 3.9929061 1.6e-6 2.0774982 43.132016 2.0 0.1 2.2372578 40.0520156 -B B C 3.0 1.0 0.0 0.52629 0.001587 0.5 3.9929061 1.6e-6 2.0774982 43.132016 2.0 0.1 2.2372578 40.0520156 - -C C C 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2119 430.00 1.95 0.15 3.4879 1393.6 -C C B 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2119 430.00 1.95 0.15 3.4879 1393.6 -C C N 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2119 430.00 1.95 0.15 3.4879 1393.6 - -C B B 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 -C B N 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 -C B C 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 - -C N B 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 -C N N 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 -C N C 3.0 1.0 0.0 3.8049e4 4.3484 -0.93000 0.72751 1.5724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 - -B C C 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 -B C B 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 -B C N 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 339.068910 1.95 0.10 3.5279 1386.78 - -N C C 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 -N C B 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 -N C N 3.0 1.0 0.0 25000 4.3484 -0.89000 0.72751 1.25724e-7 2.2054 387.575152 1.95 0.10 3.5279 1386.78 diff --git a/examples/threebody/BNC.tersoff b/examples/threebody/BNC.tersoff new file mode 120000 index 0000000000..4b27d18160 --- /dev/null +++ b/examples/threebody/BNC.tersoff @@ -0,0 +1 @@ +../../potentials/BNC.tersoff \ No newline at end of file diff --git a/examples/threebody/CdTeZnSeHgS0.sw b/examples/threebody/CdTeZnSeHgS0.sw deleted file mode 100644 index d6f05d41df..0000000000 --- a/examples/threebody/CdTeZnSeHgS0.sw +++ /dev/null @@ -1,233 +0,0 @@ -### DATE: 2013-08-09 CONTRIBUTOR: X. W. Zhou, xzhou@sandia.gov, CITATION: Zhou, Ward, Martin, van Swol, Cruz-Campa, and D. Zubia, Phys. Rev. B, 88, 085309 (2013). -# -# Note that the way the parameters can be entered is not unique. -# As one way, we assume that eps_ijk is equal to eps_ik and -# lambda_ijk is equal to sqrt(lambda_ij*eps_ij*lambda_ik*eps_ik)/eps_ik, -# and all other parameters in the ijk line are for ik. -# -# The twobody ik pair parameters are entered on the i*k lines, where * -# can be any species. This is consistent with the LAMMPS requirement -# that twobody ik parameters be defined on the ikk line. Entries on all -# the other i*k lines are ignored by LAMMPS -# -# These entries are in LAMMPS "metal" units: epsilon = eV; -# sigma = Angstroms; other quantities are unitless -# -# cutoff distance = 4.632 -# eps sigma a lambda gamma cos(theta) A B p q tol -Cd Cd Cd 1.182358e+00 2.663951e+00 1.527956e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Cd Te 1.385284e+00 2.352141e+00 1.810919e+00 3.002537e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Cd Zn 6.908179e-01 2.238699e+00 1.812616e+00 4.251831e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Cd Se 1.352371e+00 2.045165e+00 1.953387e+00 3.038855e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Cd Hg 4.881231e-01 2.432694e+00 1.677987e+00 5.058167e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Cd S 1.300376e+00 1.804151e+00 2.124568e+00 3.099013e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te Cd 1.182358e+00 2.663951e+00 1.527956e+00 3.517858e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te Te 1.385284e+00 2.352141e+00 1.810919e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te Zn 6.908179e-01 2.238699e+00 1.812616e+00 4.602259e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te Se 1.352371e+00 2.045165e+00 1.953387e+00 3.289311e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te Hg 4.881231e-01 2.432694e+00 1.677987e+00 5.475051e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Te S 1.300376e+00 1.804151e+00 2.124568e+00 3.354428e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn Cd 1.182358e+00 2.663951e+00 1.527956e+00 2.484224e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn Te 1.385284e+00 2.352141e+00 1.810919e+00 2.295069e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn Zn 6.908179e-01 2.238699e+00 1.812616e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn Se 1.352371e+00 2.045165e+00 1.953387e+00 2.322829e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn Hg 4.881231e-01 2.432694e+00 1.677987e+00 3.866344e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Zn S 1.300376e+00 1.804151e+00 2.124568e+00 2.368813e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se Cd 1.182358e+00 2.663951e+00 1.527956e+00 3.475816e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se Te 1.385284e+00 2.352141e+00 1.810919e+00 3.211159e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se Zn 6.908179e-01 2.238699e+00 1.812616e+00 4.547256e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se Se 1.352371e+00 2.045165e+00 1.953387e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se Hg 4.881231e-01 2.432694e+00 1.677987e+00 5.409618e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Se S 1.300376e+00 1.804151e+00 2.124568e+00 3.314338e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg Cd 1.182358e+00 2.663951e+00 1.527956e+00 2.088207e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg Te 1.385284e+00 2.352141e+00 1.810919e+00 1.929206e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg Zn 6.908179e-01 2.238699e+00 1.812616e+00 2.731909e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg Se 1.352371e+00 2.045165e+00 1.953387e+00 1.952541e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg Hg 4.881231e-01 2.432694e+00 1.677987e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd Hg S 1.300376e+00 1.804151e+00 2.124568e+00 1.991194e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S Cd 1.182358e+00 2.663951e+00 1.527956e+00 3.408343e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.674460e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S Te 1.385284e+00 2.352141e+00 1.810919e+00 3.148823e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S Zn 6.908179e-01 2.238699e+00 1.812616e+00 4.458985e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S Se 1.352371e+00 2.045165e+00 1.953387e+00 3.186911e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S Hg 4.881231e-01 2.432694e+00 1.677987e+00 5.304605e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Cd S S 1.300376e+00 1.804151e+00 2.124568e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd Te 1.849775e+00 2.905254e+00 1.594353e+00 2.812506e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd Zn 1.546239e+00 2.056363e+00 1.907922e+00 3.076200e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd Se 1.295053e+00 2.231716e+00 1.809645e+00 3.361313e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd Hg 1.204715e+00 2.135591e+00 1.892491e+00 3.485063e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Cd S 1.450015e+00 2.297301e+00 1.726905e+00 3.176630e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.755548e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te Te 1.849775e+00 2.905254e+00 1.594353e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te Zn 1.546239e+00 2.056363e+00 1.907922e+00 3.554713e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te Se 1.295053e+00 2.231716e+00 1.809645e+00 3.884177e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te Hg 1.204715e+00 2.135591e+00 1.892491e+00 4.027176e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Te S 1.450015e+00 2.297301e+00 1.726905e+00 3.670765e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.433620e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn Te 1.849775e+00 2.905254e+00 1.594353e+00 2.971408e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn Zn 1.546239e+00 2.056363e+00 1.907922e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn Se 1.295053e+00 2.231716e+00 1.809645e+00 3.551222e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn Hg 1.204715e+00 2.135591e+00 1.892491e+00 3.681964e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Zn S 1.450015e+00 2.297301e+00 1.726905e+00 3.356105e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.142373e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se Te 1.849775e+00 2.905254e+00 1.594353e+00 2.719366e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se Zn 1.546239e+00 2.056363e+00 1.907922e+00 2.974328e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se Se 1.295053e+00 2.231716e+00 1.809645e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se Hg 1.204715e+00 2.135591e+00 1.892491e+00 3.369652e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Se S 1.450015e+00 2.297301e+00 1.726905e+00 3.071433e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.030791e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg Te 1.849775e+00 2.905254e+00 1.594353e+00 2.622805e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg Zn 1.546239e+00 2.056363e+00 1.907922e+00 2.868714e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg Se 1.295053e+00 2.231716e+00 1.809645e+00 3.134597e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg Hg 1.204715e+00 2.135591e+00 1.892491e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te Hg S 1.450015e+00 2.297301e+00 1.726905e+00 2.962370e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te S Cd 1.385284e+00 2.352141e+00 1.810919e+00 3.325065e+01 1.200000e+00 -3.333333e-01 7.049600e+00 8.861252e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te S Te 1.849775e+00 2.905254e+00 1.594353e+00 2.877465e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.307283e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Te S Zn 1.546239e+00 2.056363e+00 1.907922e+00 3.147250e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te S Se 1.295053e+00 2.231716e+00 1.809645e+00 3.438949e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te S Hg 1.204715e+00 2.135591e+00 1.892491e+00 3.565557e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Te S S 1.450015e+00 2.297301e+00 1.726905e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd Cd 6.908179e-01 2.238699e+00 1.812616e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd Te 1.546239e+00 2.056363e+00 1.907922e+00 2.172335e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd Zn 1.392961e+00 2.367650e+00 1.525521e+00 2.288736e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd Se 1.691181e+00 2.028827e+00 1.836907e+00 2.077161e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd Hg 4.951616e-01 2.239186e+00 1.761363e+00 3.838766e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Cd S 2.208390e+00 2.323783e+00 1.589241e+00 1.817721e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te Cd 6.908179e-01 2.238699e+00 1.812616e+00 4.862279e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te Te 1.546239e+00 2.056363e+00 1.907922e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te Zn 1.392961e+00 2.367650e+00 1.525521e+00 3.424146e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te Se 1.691181e+00 2.028827e+00 1.836907e+00 3.107611e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te Hg 4.951616e-01 2.239186e+00 1.761363e+00 5.743124e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Te S 2.208390e+00 2.323783e+00 1.589241e+00 2.719467e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn Cd 6.908179e-01 2.238699e+00 1.812616e+00 4.614993e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn Te 1.546239e+00 2.056363e+00 1.907922e+00 3.084711e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn Zn 1.392961e+00 2.367650e+00 1.525521e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn Se 1.691181e+00 2.028827e+00 1.836907e+00 2.949563e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn Hg 4.951616e-01 2.239186e+00 1.761363e+00 5.451040e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Zn S 2.208390e+00 2.323783e+00 1.589241e+00 2.581160e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se Cd 6.908179e-01 2.238699e+00 1.812616e+00 5.085067e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se Te 1.546239e+00 2.056363e+00 1.907922e+00 3.398914e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se Zn 1.392961e+00 2.367650e+00 1.525521e+00 3.581039e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se Se 1.691181e+00 2.028827e+00 1.836907e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se Hg 4.951616e-01 2.239186e+00 1.761363e+00 6.006272e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Se S 2.208390e+00 2.323783e+00 1.589241e+00 2.844072e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg Cd 6.908179e-01 2.238699e+00 1.812616e+00 2.751535e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg Te 1.546239e+00 2.056363e+00 1.907922e+00 1.839156e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg Zn 1.392961e+00 2.367650e+00 1.525521e+00 1.937704e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg Se 1.691181e+00 2.028827e+00 1.836907e+00 1.758578e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg Hg 4.951616e-01 2.239186e+00 1.761363e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn Hg S 2.208390e+00 2.323783e+00 1.589241e+00 1.538930e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S Cd 6.908179e-01 2.238699e+00 1.812616e+00 5.810847e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.010632e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S Te 1.546239e+00 2.056363e+00 1.907922e+00 3.884033e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.255846e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S Zn 1.392961e+00 2.367650e+00 1.525521e+00 4.092153e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.676279e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S Se 1.691181e+00 2.028827e+00 1.836907e+00 3.713865e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S Hg 4.951616e-01 2.239186e+00 1.761363e+00 6.863534e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Zn S S 2.208390e+00 2.323783e+00 1.589241e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd Cd 1.352371e+00 2.045165e+00 1.953387e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd Te 1.295053e+00 2.231716e+00 1.809645e+00 3.321142e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd Zn 1.691181e+00 2.028827e+00 1.836907e+00 2.906271e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd Se 2.400781e+00 2.789002e+00 1.544925e+00 2.439242e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd Hg 1.299758e+00 2.113406e+00 1.831821e+00 3.315126e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Cd S 1.307592e+00 2.229392e+00 1.747782e+00 3.305180e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te Cd 1.352371e+00 2.045165e+00 1.953387e+00 3.180382e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te Te 1.295053e+00 2.231716e+00 1.809645e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te Zn 1.691181e+00 2.028827e+00 1.836907e+00 2.844016e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te Se 2.400781e+00 2.789002e+00 1.544925e+00 2.386992e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te Hg 1.299758e+00 2.113406e+00 1.831821e+00 3.244113e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Te S 1.307592e+00 2.229392e+00 1.747782e+00 3.234380e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn Cd 1.352371e+00 2.045165e+00 1.953387e+00 3.634382e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn Te 1.295053e+00 2.231716e+00 1.809645e+00 3.713938e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn Zn 1.691181e+00 2.028827e+00 1.836907e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn Se 2.400781e+00 2.789002e+00 1.544925e+00 2.727735e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn Hg 1.299758e+00 2.113406e+00 1.831821e+00 3.707211e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Zn S 1.307592e+00 2.229392e+00 1.747782e+00 3.696088e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se Cd 1.352371e+00 2.045165e+00 1.953387e+00 4.330238e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se Te 1.295053e+00 2.231716e+00 1.809645e+00 4.425026e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se Zn 1.691181e+00 2.028827e+00 1.836907e+00 3.872260e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se Se 2.400781e+00 2.789002e+00 1.544925e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se Hg 1.299758e+00 2.113406e+00 1.831821e+00 4.417011e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Se S 1.307592e+00 2.229392e+00 1.747782e+00 4.403758e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg Cd 1.352371e+00 2.045165e+00 1.953387e+00 3.186153e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg Te 1.295053e+00 2.231716e+00 1.809645e+00 3.255898e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg Zn 1.691181e+00 2.028827e+00 1.836907e+00 2.849177e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg Se 2.400781e+00 2.789002e+00 1.544925e+00 2.391323e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg Hg 1.299758e+00 2.113406e+00 1.831821e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se Hg S 1.307592e+00 2.229392e+00 1.747782e+00 3.240249e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se S Cd 1.352371e+00 2.045165e+00 1.953387e+00 3.195742e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.116149e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se S Te 1.295053e+00 2.231716e+00 1.809645e+00 3.265696e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.005396e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se S Zn 1.691181e+00 2.028827e+00 1.836907e+00 2.857751e+01 1.200000e+00 -3.333333e-01 7.049600e+00 9.510930e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se S Se 2.400781e+00 2.789002e+00 1.544925e+00 2.398520e+01 1.200000e+00 -3.333333e-01 7.917000e+00 7.672131e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Se S Hg 1.299758e+00 2.113406e+00 1.831821e+00 3.259780e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Se S S 1.307592e+00 2.229392e+00 1.747782e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd Cd 4.881231e-01 2.432694e+00 1.677987e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd Te 1.204715e+00 2.135591e+00 1.892491e+00 2.068740e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd Zn 4.951616e-01 2.239186e+00 1.761363e+00 3.226819e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd Se 1.299758e+00 2.113406e+00 1.831821e+00 1.991668e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd Hg 1.272807e+00 2.699097e+00 1.498503e+00 2.012643e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Cd S 1.531211e+00 2.025045e+00 1.833708e+00 1.834976e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te Cd 4.881231e-01 2.432694e+00 1.677987e+00 5.105765e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te Te 1.204715e+00 2.135591e+00 1.892491e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te Zn 4.951616e-01 2.239186e+00 1.761363e+00 5.069347e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te Se 1.299758e+00 2.113406e+00 1.831821e+00 3.128919e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te Hg 1.272807e+00 2.699097e+00 1.498503e+00 3.161872e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Te S 1.531211e+00 2.025045e+00 1.833708e+00 2.882756e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn Cd 4.881231e-01 2.432694e+00 1.677987e+00 3.273348e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn Te 1.204715e+00 2.135591e+00 1.892491e+00 2.083602e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn Zn 4.951616e-01 2.239186e+00 1.761363e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn Se 1.299758e+00 2.113406e+00 1.831821e+00 2.005976e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn Hg 1.272807e+00 2.699097e+00 1.498503e+00 2.027102e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Zn S 1.531211e+00 2.025045e+00 1.833708e+00 1.848159e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se Cd 4.881231e-01 2.432694e+00 1.677987e+00 5.303345e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se Te 1.204715e+00 2.135591e+00 1.892491e+00 3.375766e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se Zn 4.951616e-01 2.239186e+00 1.761363e+00 5.265518e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se Se 1.299758e+00 2.113406e+00 1.831821e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se Hg 1.272807e+00 2.699097e+00 1.498503e+00 3.284228e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Se S 1.531211e+00 2.025045e+00 1.833708e+00 2.994311e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg Cd 4.881231e-01 2.432694e+00 1.677987e+00 5.248074e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg Te 1.204715e+00 2.135591e+00 1.892491e+00 3.340584e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg Zn 4.951616e-01 2.239186e+00 1.761363e+00 5.210641e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg Se 1.299758e+00 2.113406e+00 1.831821e+00 3.216129e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg Hg 1.272807e+00 2.699097e+00 1.498503e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg Hg S 1.531211e+00 2.025045e+00 1.833708e+00 2.963105e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S Cd 4.881231e-01 2.432694e+00 1.677987e+00 5.756205e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.250999e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S Te 1.204715e+00 2.135591e+00 1.892491e+00 3.664028e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.445180e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S Zn 4.951616e-01 2.239186e+00 1.761363e+00 5.715148e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.461167e-01 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S Se 1.299758e+00 2.113406e+00 1.831821e+00 3.527522e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.150200e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S Hg 1.272807e+00 2.699097e+00 1.498503e+00 3.564673e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.211532e+00 4.000000e+00 0.000000e+00 0.000000e+00 -Hg S S 1.531211e+00 2.025045e+00 1.833708e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd Cd 1.300376e+00 1.804151e+00 2.124568e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd Te 1.450015e+00 2.297301e+00 1.726905e+00 3.077737e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd Zn 2.208390e+00 2.323783e+00 1.589241e+00 2.493905e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd Se 1.307592e+00 2.229392e+00 1.747782e+00 3.241019e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd Hg 1.531211e+00 2.025045e+00 1.833708e+00 2.995023e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Cd S 2.434871e+00 2.423171e+00 1.711097e+00 2.375088e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Te Cd 1.300376e+00 1.804151e+00 2.124568e+00 3.431904e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Te Te 1.450015e+00 2.297301e+00 1.726905e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Te Zn 2.208390e+00 2.323783e+00 1.589241e+00 2.633490e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Te Se 1.307592e+00 2.229392e+00 1.747782e+00 3.422421e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Te Hg 1.531211e+00 2.025045e+00 1.833708e+00 3.162656e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Te S 2.434871e+00 2.423171e+00 1.711097e+00 2.508023e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn Cd 1.300376e+00 1.804151e+00 2.124568e+00 4.235326e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn Te 1.450015e+00 2.297301e+00 1.726905e+00 4.010837e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn Zn 2.208390e+00 2.323783e+00 1.589241e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn Se 1.307592e+00 2.229392e+00 1.747782e+00 4.223622e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn Hg 1.531211e+00 2.025045e+00 1.833708e+00 3.903046e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Zn S 2.434871e+00 2.423171e+00 1.711097e+00 3.095161e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Se Cd 1.300376e+00 1.804151e+00 2.124568e+00 3.259006e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Se Te 1.450015e+00 2.297301e+00 1.726905e+00 3.086266e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Se Zn 2.208390e+00 2.323783e+00 1.589241e+00 2.500815e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Se Se 1.307592e+00 2.229392e+00 1.747782e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Se Hg 1.531211e+00 2.025045e+00 1.833708e+00 3.003322e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Se S 2.434871e+00 2.423171e+00 1.711097e+00 2.381670e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg Cd 1.300376e+00 1.804151e+00 2.124568e+00 3.526684e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg Te 1.450015e+00 2.297301e+00 1.726905e+00 3.339756e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg Zn 2.208390e+00 2.323783e+00 1.589241e+00 2.706220e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg Se 1.307592e+00 2.229392e+00 1.747782e+00 3.516939e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg Hg 1.531211e+00 2.025045e+00 1.833708e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S Hg S 2.434871e+00 2.423171e+00 1.711097e+00 2.577288e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S S Cd 1.300376e+00 1.804151e+00 2.124568e+00 4.447203e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.540087e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S S Te 1.450015e+00 2.297301e+00 1.726905e+00 4.211484e+01 1.200000e+00 -3.333333e-01 7.049600e+00 7.794685e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S S Zn 2.208390e+00 2.323783e+00 1.589241e+00 3.412585e+01 1.200000e+00 -3.333333e-01 7.049600e+00 4.643181e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S S Se 1.307592e+00 2.229392e+00 1.747782e+00 4.434914e+01 1.200000e+00 -3.333333e-01 7.049600e+00 6.932325e-01 4.000000e+00 0.000000e+00 0.000000e+00 -S S Hg 1.531211e+00 2.025045e+00 1.833708e+00 4.098300e+01 1.200000e+00 -3.333333e-01 7.049600e+00 1.184541e+00 4.000000e+00 0.000000e+00 0.000000e+00 -S S S 2.434871e+00 2.423171e+00 1.711097e+00 3.250000e+01 1.200000e+00 -3.333333e-01 7.917000e+00 1.049688e+00 4.000000e+00 0.000000e+00 0.000000e+00 diff --git a/examples/threebody/InP.vashishta b/examples/threebody/InP.vashishta deleted file mode 100644 index 9fefd4ef19..0000000000 --- a/examples/threebody/InP.vashishta +++ /dev/null @@ -1,38 +0,0 @@ -# DATE: 2015-10-14 CONTRIBUTOR: Aidan Thompson, athomps@sandia.gov CITATION: Branicio, Rino, Gan and Tsuzuki, J. Phys Condensed Matter 21 (2009) 095002 -# -# Vashishta potential file for InP, Branicio, Rino, Gan and Tsuzuki, -# J. Phys Condensed Matter 21 (2009) 095002 -# -# These entries are in LAMMPS "metal" units: -# H = eV*Angstroms^eta; Zi, Zj = |e| (e = electronic charge); -# lambda1, lambda4, rc, r0, gamma = Angstroms; -# D = eV*Angstroms^4; W = eV*Angstroms^6; B = eV; -# other quantities are unitless - -# element1 element2 element3 -# H eta Zi Zj lambda1 D lambda4 -# W rc B gamma r0 C cos(theta) - -In In In 273.584 7 -1.21 -1.21 4.5 0.0 2.75 - 0.0 6.0 0.0 0.0 0.0 0.0 0.0 - -P P P 1813.06 7 1.21 1.21 4.5 52.7067 2.75 - 0.0 6.0 0.0 0.0 0.0 0.0 -0.333333333333 - -In P P 4847.09 9 1.21 -1.21 4.5 26.3533 2.75 - 270.105 6.0 4.34967 1.0 3.55 7.0 -0.333333333333 - -P In In 4847.09 9 1.21 -1.21 4.5 26.3533 2.75 - 270.105 6.0 4.34967 1.0 3.55 7.0 -0.333333333333 - -In In P 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -In P In 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -P In P 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -P P In 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/examples/threebody/InP.vashishta b/examples/threebody/InP.vashishta new file mode 120000 index 0000000000..61b3b88359 --- /dev/null +++ b/examples/threebody/InP.vashishta @@ -0,0 +1 @@ +../../potentials/InP.vashishta \ No newline at end of file diff --git a/examples/threebody/Si.tersoff.mod b/examples/threebody/Si.tersoff.mod new file mode 120000 index 0000000000..668f7c83f1 --- /dev/null +++ b/examples/threebody/Si.tersoff.mod @@ -0,0 +1 @@ +../../potentials/Si.tersoff.mod \ No newline at end of file diff --git a/examples/threebody/Si.tersoff.modc b/examples/threebody/Si.tersoff.modc new file mode 120000 index 0000000000..eaf8b6e3ab --- /dev/null +++ b/examples/threebody/Si.tersoff.modc @@ -0,0 +1 @@ +../../potentials/Si.tersoff.modc \ No newline at end of file diff --git a/examples/threebody/in.threebody b/examples/threebody/in.threebody index db11bfec4c..a030523901 100644 --- a/examples/threebody/in.threebody +++ b/examples/threebody/in.threebody @@ -134,7 +134,7 @@ run 100 clear read_restart restart.equil - +newton on on pair_style tersoff/mod/c pair_coeff * * Si.tersoff.modc Si Si Si Si Si Si Si Si diff --git a/examples/threebody/log.27Nov18.threebody.g++.1 b/examples/threebody/log.27Nov18.threebody.g++.1 new file mode 100644 index 0000000000..71a0e2369c --- /dev/null +++ b/examples/threebody/log.27Nov18.threebody.g++.1 @@ -0,0 +1,524 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple regression tests for threebody potentials + +# NOTE: These are not intended to represent real materials + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# cubic diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 + +create_box 8 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid +create_atoms 1 region myreg basis 1 1 basis 2 2 basis 3 3 basis 4 4 basis 5 5 basis 6 6 basis 7 7 basis 8 8 +Created 512 atoms + Time spent = 0.000483751 secs + +mass * 28.06 + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# Equilibrate using Stillinger-Weber model for silicon + +pair_style sw +pair_coeff * * Si.sw Si Si Si Si Si Si Si Si +Reading potential file Si.sw with DATE: 2007-06-11 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.77118 + ghost atom cutoff = 4.77118 + binsize = 2.38559, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.982 | 2.982 | 2.982 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1800 -2220.3392 0 -2101.4457 12358.626 + 10 993.48824 -2166.8749 0 -2101.3265 14121.853 + 20 587.90768 -2139.6876 0 -2101.3093 11864.886 + 30 1030.8616 -2167.8446 0 -2101.3947 6649.2566 + 40 724.62874 -2145.9637 0 -2101.3436 5859.6447 + 50 490.9053 -2129.5491 0 -2101.3077 6326.5434 + 60 960.24533 -2159.427 0 -2101.3794 5733.9889 + 70 906.76518 -2154.3675 0 -2101.3496 8380.4834 + 80 800.7253 -2146.0714 0 -2101.3113 11515.737 + 90 1249.2719 -2173.9445 0 -2101.3818 11593.728 + 100 1080.3797 -2160.6174 0 -2101.3445 12414.602 +Loop time of 0.129171 on 1 procs for 100 steps with 512 atoms + +Performance: 66.888 ns/day, 0.359 hours/ns, 774.165 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.12468 | 0.12468 | 0.12468 | 0.0 | 96.52 +Neigh | 0.0017159 | 0.0017159 | 0.0017159 | 0.0 | 1.33 +Comm | 0.00088573 | 0.00088573 | 0.00088573 | 0.0 | 0.69 +Output | 0.00011206 | 0.00011206 | 0.00011206 | 0.0 | 0.09 +Modify | 0.0014365 | 0.0014365 | 0.0014365 | 0.0 | 1.11 +Other | | 0.0003417 | | | 0.26 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1017 ave 1017 max 1017 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 14044 ave 14044 max 14044 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 14044 +Ave neighs/atom = 27.4297 +Neighbor list builds = 2 +Dangerous builds = 0 + +write_restart restart.equil + +# Test Stillinger-Weber model for Cd/Te/Zn/Se/Hg/S + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style sw +pair_coeff * * CdTeZnSeHgS0.sw Cd Zn Hg Cd Te S Se Te +Reading potential file CdTeZnSeHgS0.sw with DATE: 2013-08-09 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.632 + ghost atom cutoff = 5.632 + binsize = 2.816, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.758 | 2.758 | 2.758 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1080.3797 -621.93681 0 -562.66385 464005.01 + 110 1512.4547 -648.51133 0 -562.74194 463733.24 + 120 1959.7565 -675.18668 0 -562.8255 486580.33 + 130 1138.5498 -618.80419 0 -562.6427 515406.41 + 140 1827.3403 -662.43867 0 -562.78985 485719 + 150 1822.9803 -659.56725 0 -562.76627 465652.59 + 160 1128.3444 -611.92808 0 -562.65512 469836.33 + 170 1699.6402 -647.82381 0 -562.75353 467977.54 + 180 1840.047 -654.5552 0 -562.77005 488397.41 + 190 1312.0974 -617.70228 0 -562.6629 510856.48 + 200 1809.8409 -648.6173 0 -562.75377 490822.97 +Loop time of 0.399255 on 1 procs for 100 steps with 512 atoms + +Performance: 21.640 ns/day, 1.109 hours/ns, 250.467 timesteps/s +99.2% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.38979 | 0.38979 | 0.38979 | 0.0 | 97.63 +Neigh | 0.0061283 | 0.0061283 | 0.0061283 | 0.0 | 1.53 +Comm | 0.0013483 | 0.0013483 | 0.0013483 | 0.0 | 0.34 +Output | 0.00016642 | 0.00016642 | 0.00016642 | 0.0 | 0.04 +Modify | 0.0014937 | 0.0014937 | 0.0014937 | 0.0 | 0.37 +Other | | 0.0003231 | | | 0.08 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1386 ave 1386 max 1386 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 17388 ave 17388 max 17388 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 17388 +Ave neighs/atom = 33.9609 +Neighbor list builds = 5 +Dangerous builds = 0 + +# Test Vashishta model for In/P + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style vashishta +pair_coeff * * InP.vashishta In In In In P P P P +Reading potential file InP.vashishta with DATE: 2015-10-14 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7 + ghost atom cutoff = 7 + binsize = 3.5, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.783 | 2.783 | 2.783 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1080.3797 -1491.8652 0 -1432.5922 358930.65 + 110 1299.3069 -1504.494 0 -1432.6803 347566.41 + 120 1396.3035 -1508.3817 0 -1432.672 336798.42 + 130 1055.9254 -1483.8342 0 -1432.5849 341035.18 + 140 1543.9033 -1513.8559 0 -1432.6931 314268.54 + 150 1242.5383 -1491.417 0 -1432.6036 311068.53 + 160 1240.1733 -1489.2495 0 -1432.6033 295776.98 + 170 1559.5037 -1507.824 0 -1432.6417 266170.25 + 180 1379.0358 -1493.4092 0 -1432.5869 251410.63 + 190 1465.8073 -1496.8564 0 -1432.6105 226461.31 + 200 1456.6383 -1493.8133 0 -1432.5852 208188.34 +Loop time of 0.198058 on 1 procs for 100 steps with 512 atoms + +Performance: 43.624 ns/day, 0.550 hours/ns, 504.903 timesteps/s +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.18746 | 0.18746 | 0.18746 | 0.0 | 94.65 +Neigh | 0.00688 | 0.00688 | 0.00688 | 0.0 | 3.47 +Comm | 0.001718 | 0.001718 | 0.001718 | 0.0 | 0.87 +Output | 0.00013351 | 0.00013351 | 0.00013351 | 0.0 | 0.07 +Modify | 0.0015109 | 0.0015109 | 0.0015109 | 0.0 | 0.76 +Other | | 0.0003531 | | | 0.18 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1810 ave 1810 max 1810 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 36480 ave 36480 max 36480 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 36480 +Ave neighs/atom = 71.25 +Neighbor list builds = 4 +Dangerous builds = 0 + +# Test Tersoff model for B/N/C + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid + pair style sw stores no restart info + 512 atoms + +variable fac equal 0.6 +change_box all x scale ${fac} y scale ${fac} z scale ${fac} remap +change_box all x scale 0.6 y scale ${fac} z scale ${fac} remap +change_box all x scale 0.6 y scale 0.6 z scale ${fac} remap +change_box all x scale 0.6 y scale 0.6 z scale 0.6 remap + orthogonal box = (4.3448 0 0) to (17.3792 21.724 21.724) + orthogonal box = (4.3448 4.3448 0) to (17.3792 17.3792 21.724) + orthogonal box = (4.3448 4.3448 4.3448) to (17.3792 17.3792 17.3792) + +pair_style tersoff +pair_coeff * * BNC.tersoff N N N C B B C B +Reading potential file BNC.tersoff with DATE: 2013-03-21 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.1 + ghost atom cutoff = 3.1 + binsize = 1.55, bins = 9 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.74 | 2.74 | 2.74 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1080.3797 -3249.8451 0 -3190.5722 1925371.8 + 110 1878.2843 -3300.7205 0 -3191.0964 1893058.6 + 120 1153.8494 -3250.2114 0 -3190.5436 1932141.4 + 130 1363.8664 -3261.6889 0 -3190.6116 1902268.1 + 140 1565.5505 -3273.0405 0 -3190.6982 1878817 + 150 1416.9458 -3261.1805 0 -3190.865 1916554.4 + 160 1288.6997 -3249.8279 0 -3190.4141 1933227.4 + 170 1768.3043 -3279.2164 0 -3190.4535 1898123.4 + 180 1375.1942 -3251.0929 0 -3190.3781 1896205.1 + 190 1527.0671 -3258.7679 0 -3190.4344 1900673.6 + 200 1586.8691 -3260.4713 0 -3190.434 1912454.8 +Loop time of 0.210082 on 1 procs for 100 steps with 512 atoms + +Performance: 41.127 ns/day, 0.584 hours/ns, 476.006 timesteps/s +98.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.20628 | 0.20628 | 0.20628 | 0.0 | 98.19 +Neigh | 0.00099182 | 0.00099182 | 0.00099182 | 0.0 | 0.47 +Comm | 0.00085139 | 0.00085139 | 0.00085139 | 0.0 | 0.41 +Output | 0.00013494 | 0.00013494 | 0.00013494 | 0.0 | 0.06 +Modify | 0.0014665 | 0.0014665 | 0.0014665 | 0.0 | 0.70 +Other | | 0.0003612 | | | 0.17 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1027 ave 1027 max 1027 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 14602 ave 14602 max 14602 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 14602 +Ave neighs/atom = 28.5195 +Neighbor list builds = 1 +Dangerous builds = 0 + +# Test Tersoff/Mod model for Si + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style tersoff/mod +pair_coeff * * Si.tersoff.mod Si Si Si Si Si Si Si Si +Reading potential file Si.tersoff.mod with DATE: 2013-07-26 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.3 + ghost atom cutoff = 4.3 + binsize = 2.15, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.744 | 2.744 | 2.744 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1080.3797 -2307.5808 0 -2248.3078 18624.75 + 110 851.21757 -2290.7529 0 -2248.2817 21041.97 + 120 1074.6349 -2303.6437 0 -2248.321 15244.809 + 130 1006.5662 -2296.9866 0 -2248.3057 15954.09 + 140 855.64354 -2285.1581 0 -2248.2781 19346.662 + 150 1111.1546 -2300.024 0 -2248.314 14698.998 + 160 1114.7933 -2297.8629 0 -2248.3098 14414.14 + 170 853.9568 -2278.6047 0 -2248.2716 20120.632 + 180 1031.0925 -2288.3481 0 -2248.2949 18332.008 + 190 1230.3458 -2298.9946 0 -2248.3111 15520.302 + 200 1053.8799 -2284.8931 0 -2248.2816 20033.536 +Loop time of 0.158428 on 1 procs for 100 steps with 512 atoms + +Performance: 54.536 ns/day, 0.440 hours/ns, 631.200 timesteps/s +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.15318 | 0.15318 | 0.15318 | 0.0 | 96.69 +Neigh | 0.0022631 | 0.0022631 | 0.0022631 | 0.0 | 1.43 +Comm | 0.00093651 | 0.00093651 | 0.00093651 | 0.0 | 0.59 +Output | 0.00019622 | 0.00019622 | 0.00019622 | 0.0 | 0.12 +Modify | 0.0015035 | 0.0015035 | 0.0015035 | 0.0 | 0.95 +Other | | 0.0003462 | | | 0.22 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1001 ave 1001 max 1001 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 8872 ave 8872 max 8872 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8872 +Ave neighs/atom = 17.3281 +Neighbor list builds = 3 +Dangerous builds = 0 + +# Test Tersoff/Mod/C model for Si + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid + pair style sw stores no restart info + 512 atoms +newton on on +pair_style tersoff/mod/c +pair_coeff * * Si.tersoff.modc Si Si Si Si Si Si Si Si +Reading potential file Si.tersoff.modc with DATE: 2016-11-09 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.20569 + ghost atom cutoff = 4.20569 + binsize = 2.10285, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod/c, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.739 | 2.739 | 2.739 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1080.3797 -2307.5509 0 -2248.2779 21368.36 + 110 846.70637 -2290.4239 0 -2248.2488 22856.37 + 120 1083.0906 -2304.1686 0 -2248.2895 17530.457 + 130 1008.7015 -2297.0835 0 -2248.2781 17698.498 + 140 811.71413 -2282.2528 0 -2248.2417 19986.737 + 150 1094.4969 -2298.9718 0 -2248.2836 15822.967 + 160 1100.1109 -2296.9461 0 -2248.2804 15213.75 + 170 801.20165 -2275.2175 0 -2248.2372 20153.957 + 180 994.63485 -2286.1145 0 -2248.2621 19167.021 + 190 1215.6425 -2298.2082 0 -2248.284 15895.654 + 200 992.20385 -2281.0372 0 -2248.2425 19643.792 +Loop time of 0.282035 on 1 procs for 100 steps with 512 atoms + +Performance: 30.634 ns/day, 0.783 hours/ns, 354.565 timesteps/s +98.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.27701 | 0.27701 | 0.27701 | 0.0 | 98.22 +Neigh | 0.0021927 | 0.0021927 | 0.0021927 | 0.0 | 0.78 +Comm | 0.00089169 | 0.00089169 | 0.00089169 | 0.0 | 0.32 +Output | 0.0001452 | 0.0001452 | 0.0001452 | 0.0 | 0.05 +Modify | 0.0014682 | 0.0014682 | 0.0014682 | 0.0 | 0.52 +Other | | 0.0003295 | | | 0.12 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 972 ave 972 max 972 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 8390 ave 8390 max 8390 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8390 +Ave neighs/atom = 16.3867 +Neighbor list builds = 3 +Dangerous builds = 0 + +Total wall time: 0:00:01 diff --git a/examples/threebody/log.27Nov18.threebody.g++.4 b/examples/threebody/log.27Nov18.threebody.g++.4 new file mode 100644 index 0000000000..429fc4fb9d --- /dev/null +++ b/examples/threebody/log.27Nov18.threebody.g++.4 @@ -0,0 +1,524 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Simple regression tests for threebody potentials + +# NOTE: These are not intended to represent real materials + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# cubic diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 + +create_box 8 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid +create_atoms 1 region myreg basis 1 1 basis 2 2 basis 3 3 basis 4 4 basis 5 5 basis 6 6 basis 7 7 basis 8 8 +Created 512 atoms + Time spent = 0.000348091 secs + +mass * 28.06 + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# Equilibrate using Stillinger-Weber model for silicon + +pair_style sw +pair_coeff * * Si.sw Si Si Si Si Si Si Si Si +Reading potential file Si.sw with DATE: 2007-06-11 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.77118 + ghost atom cutoff = 4.77118 + binsize = 2.38559, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.957 | 2.957 | 2.957 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1800 -2220.3392 0 -2101.4457 12358.626 + 10 979.93888 -2165.9769 0 -2101.3242 14172.134 + 20 579.6159 -2139.1412 0 -2101.3085 11866.038 + 30 1027.5223 -2167.6187 0 -2101.3942 6885.6751 + 40 711.03138 -2145.0665 0 -2101.3405 6357.0866 + 50 497.18304 -2129.9748 0 -2101.3052 7137.6093 + 60 1008.411 -2162.5834 0 -2101.3804 6745.1775 + 70 947.58674 -2156.9872 0 -2101.3508 9678.1622 + 80 798.43683 -2145.8382 0 -2101.3074 12728.694 + 90 1259.2065 -2174.5324 0 -2101.3799 12033.395 + 100 1100.5203 -2161.8599 0 -2101.3468 12356.137 +Loop time of 0.0414283 on 4 procs for 100 steps with 512 atoms + +Performance: 208.553 ns/day, 0.115 hours/ns, 2413.811 timesteps/s +95.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.030011 | 0.032047 | 0.034036 | 0.8 | 77.36 +Neigh | 0.00043392 | 0.00045151 | 0.0004642 | 0.0 | 1.09 +Comm | 0.0050831 | 0.0067263 | 0.0091536 | 1.8 | 16.24 +Output | 0.00018191 | 0.00018775 | 0.00020432 | 0.0 | 0.45 +Modify | 0.00068116 | 0.0010136 | 0.001817 | 1.5 | 2.45 +Other | | 0.001002 | | | 2.42 + +Nlocal: 128 ave 132 max 126 min +Histogram: 1 2 0 0 0 0 0 0 0 1 +Nghost: 525 ave 527 max 521 min +Histogram: 1 0 0 0 0 0 0 0 2 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 3507 ave 3596 max 3470 min +Histogram: 3 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 14028 +Ave neighs/atom = 27.3984 +Neighbor list builds = 2 +Dangerous builds = 0 + +write_restart restart.equil + +# Test Stillinger-Weber model for Cd/Te/Zn/Se/Hg/S + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style sw +pair_coeff * * CdTeZnSeHgS0.sw Cd Zn Hg Cd Te S Se Te +Reading potential file CdTeZnSeHgS0.sw with DATE: 2013-08-09 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.632 + ghost atom cutoff = 5.632 + binsize = 2.816, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.717 | 2.718 | 2.718 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1100.5203 -621.61663 0 -561.10352 462716.2 + 110 1478.2708 -644.61282 0 -561.16927 464567.29 + 120 1989.4577 -675.5312 0 -561.25985 486476.63 + 130 1185.4652 -620.23829 0 -561.09359 514103.86 + 140 1726.9774 -654.21952 0 -561.20676 488915.22 + 150 1863.2061 -660.66167 0 -561.21416 466985.15 + 160 1119.0313 -609.68409 0 -561.08624 471511.61 + 170 1708.2653 -646.79823 0 -561.18829 468697.42 + 180 1891.8451 -656.32585 0 -561.2042 489912.65 + 190 1345.7703 -618.29258 0 -561.09909 512364.68 + 200 1865.9507 -650.72167 0 -561.19281 491531.23 +Loop time of 0.117532 on 4 procs for 100 steps with 512 atoms + +Performance: 73.512 ns/day, 0.326 hours/ns, 850.834 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.096347 | 0.10005 | 0.10244 | 0.8 | 85.13 +Neigh | 0.000947 | 0.0010053 | 0.0011535 | 0.3 | 0.86 +Comm | 0.0098422 | 0.012949 | 0.016335 | 2.2 | 11.02 +Output | 0.00017452 | 0.00022596 | 0.00037885 | 0.0 | 0.19 +Modify | 0.00078702 | 0.0013881 | 0.0021975 | 1.6 | 1.18 +Other | | 0.001909 | | | 1.62 + +Nlocal: 128 ave 133 max 125 min +Histogram: 1 0 2 0 0 0 0 0 0 1 +Nghost: 754.5 ave 759 max 748 min +Histogram: 1 0 0 0 0 0 1 1 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 4353 ave 4512 max 4252 min +Histogram: 1 0 2 0 0 0 0 0 0 1 + +Total # of neighbors = 17412 +Ave neighs/atom = 34.0078 +Neighbor list builds = 3 +Dangerous builds = 0 + +# Test Vashishta model for In/P + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style vashishta +pair_coeff * * InP.vashishta In In In In P P P P +Reading potential file InP.vashishta with DATE: 2015-10-14 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7 + ghost atom cutoff = 7 + binsize = 3.5, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.739 | 2.739 | 2.739 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1100.5203 -1495.2135 0 -1434.7004 357102.51 + 110 1238.7371 -1502.5372 0 -1434.7528 348870.19 + 120 1409.575 -1511.3137 0 -1434.7612 336831.6 + 130 1081.541 -1487.5554 0 -1434.6881 339244.71 + 140 1484.7455 -1512.0076 0 -1434.7646 313026.51 + 150 1263.0321 -1494.834 0 -1434.7018 306496.02 + 160 1253.4363 -1492.1804 0 -1434.7025 290683.01 + 170 1536.7348 -1508.3735 0 -1434.7312 261755.69 + 180 1342.0478 -1493.0615 0 -1434.6754 248519.54 + 190 1457.921 -1498.4355 0 -1434.6991 223607.39 + 200 1499.5384 -1498.7005 0 -1434.6898 204647.17 +Loop time of 0.060006 on 4 procs for 100 steps with 512 atoms + +Performance: 143.986 ns/day, 0.167 hours/ns, 1666.501 timesteps/s +95.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.043862 | 0.047754 | 0.04964 | 1.0 | 79.58 +Neigh | 0.0018079 | 0.0018883 | 0.0019724 | 0.1 | 3.15 +Comm | 0.0067413 | 0.0083464 | 0.011978 | 2.3 | 13.91 +Output | 0.00018859 | 0.00029892 | 0.00062919 | 0.0 | 0.50 +Modify | 0.00088429 | 0.0011829 | 0.0014911 | 0.8 | 1.97 +Other | | 0.0005357 | | | 0.89 + +Nlocal: 128 ave 129 max 127 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 992.75 ave 1001 max 987 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 9116 ave 9213 max 9051 min +Histogram: 1 0 1 1 0 0 0 0 0 1 + +Total # of neighbors = 36464 +Ave neighs/atom = 71.2188 +Neighbor list builds = 4 +Dangerous builds = 0 + +# Test Tersoff model for B/N/C + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid + pair style sw stores no restart info + 512 atoms + +variable fac equal 0.6 +change_box all x scale ${fac} y scale ${fac} z scale ${fac} remap +change_box all x scale 0.6 y scale ${fac} z scale ${fac} remap +change_box all x scale 0.6 y scale 0.6 z scale ${fac} remap +change_box all x scale 0.6 y scale 0.6 z scale 0.6 remap + orthogonal box = (4.3448 0 0) to (17.3792 21.724 21.724) + orthogonal box = (4.3448 4.3448 0) to (17.3792 17.3792 21.724) + orthogonal box = (4.3448 4.3448 4.3448) to (17.3792 17.3792 17.3792) + +pair_style tersoff +pair_coeff * * BNC.tersoff N N N C B B C B +Reading potential file BNC.tersoff with DATE: 2013-03-21 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.1 + ghost atom cutoff = 3.1 + binsize = 1.55, bins = 9 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.699 | 2.699 | 2.699 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1100.5203 -3252.8699 0 -3192.3567 1930742.5 + 110 1858.7735 -3301.1227 0 -3192.8403 1901753.1 + 120 1107.7693 -3248.8236 0 -3192.2522 1953649.4 + 130 1315.4397 -3260.1471 0 -3192.2616 1898713.9 + 140 1541.4371 -3273.1832 0 -3192.41 1887352.3 + 150 1424.7104 -3262.9648 0 -3192.216 1960688.1 + 160 1291.2932 -3251.5548 0 -3192.0201 1914541.2 + 170 1719.1133 -3277.7936 0 -3192.33 1893926 + 180 1312.8066 -3248.6914 0 -3192.1477 1921417.4 + 190 1481.3472 -3257.1585 0 -3191.8991 1927045.6 + 200 1615.282 -3263.8377 0 -3192.055 1920616.3 +Loop time of 0.0635643 on 4 procs for 100 steps with 512 atoms + +Performance: 135.925 ns/day, 0.177 hours/ns, 1573.210 timesteps/s +97.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.051391 | 0.053262 | 0.05459 | 0.6 | 83.79 +Neigh | 0.00052404 | 0.00052798 | 0.00053144 | 0.0 | 0.83 +Comm | 0.0063059 | 0.0079132 | 0.0095143 | 1.5 | 12.45 +Output | 0.00017905 | 0.00029147 | 0.00062609 | 0.0 | 0.46 +Modify | 0.00064421 | 0.00096625 | 0.0012674 | 0.0 | 1.52 +Other | | 0.0006039 | | | 0.95 + +Nlocal: 128 ave 131 max 125 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 526.75 ave 532 max 523 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 3646.5 ave 3722 max 3567 min +Histogram: 1 0 0 1 0 0 0 1 0 1 + +Total # of neighbors = 14586 +Ave neighs/atom = 28.4883 +Neighbor list builds = 2 +Dangerous builds = 0 + +# Test Tersoff/Mod model for Si + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid + pair style sw stores no restart info + 512 atoms + +pair_style tersoff/mod +pair_coeff * * Si.tersoff.mod Si Si Si Si Si Si Si Si +Reading potential file Si.tersoff.mod with DATE: 2013-07-26 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.3 + ghost atom cutoff = 4.3 + binsize = 2.15, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.701 | 2.701 | 2.701 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1100.5203 -2308.936 0 -2248.4229 18087.231 + 110 821.82813 -2288.8477 0 -2248.3856 21245.995 + 120 1082.3774 -2304.2287 0 -2248.4366 15467.483 + 130 995.26561 -2296.2957 0 -2248.4145 16341.517 + 140 826.97009 -2283.3692 0 -2248.3897 19123.5 + 150 1048.4178 -2296.0496 0 -2248.4172 15060.312 + 160 1101.7884 -2297.2417 0 -2248.426 15070.879 + 170 859.48562 -2279.1747 0 -2248.383 21416.479 + 180 1041.679 -2289.2303 0 -2248.4038 19572.707 + 190 1278.0514 -2302.2822 0 -2248.4257 16006.173 + 200 1097.0682 -2287.8121 0 -2248.3929 20906.774 +Loop time of 0.046846 on 4 procs for 100 steps with 512 atoms + +Performance: 184.434 ns/day, 0.130 hours/ns, 2134.653 timesteps/s +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.037434 | 0.039142 | 0.041109 | 0.7 | 83.55 +Neigh | 0.0005877 | 0.00059921 | 0.00061464 | 0.0 | 1.28 +Comm | 0.0036416 | 0.0055436 | 0.0073476 | 1.8 | 11.83 +Output | 0.00016212 | 0.00027066 | 0.00059533 | 0.0 | 0.58 +Modify | 0.00063038 | 0.00065678 | 0.00067234 | 0.0 | 1.40 +Other | | 0.0006335 | | | 1.35 + +Nlocal: 128 ave 131 max 126 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Nghost: 518 ave 525 max 513 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 2202 ave 2257 max 2175 min +Histogram: 1 1 1 0 0 0 0 0 0 1 + +Total # of neighbors = 8808 +Ave neighs/atom = 17.2031 +Neighbor list builds = 3 +Dangerous builds = 0 + +# Test Tersoff/Mod/C model for Si + +clear + using 1 OpenMP thread(s) per MPI task +read_restart restart.equil + restoring atom style atomic from restart + orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid + pair style sw stores no restart info + 512 atoms +newton on on +pair_style tersoff/mod/c +pair_coeff * * Si.tersoff.modc Si Si Si Si Si Si Si Si +Reading potential file Si.tersoff.modc with DATE: 2016-11-09 + +thermo 10 +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 +Resetting global fix info from restart file: + fix style: nvt, fix ID: 1 +fix_modify 1 energy yes +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes +run 100 +All restart file global fix info was re-assigned +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.20569 + ghost atom cutoff = 4.20569 + binsize = 2.10285, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod/c, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.701 | 2.701 | 2.701 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 1100.5203 -2308.5955 0 -2248.0824 20775.991 + 110 813.33618 -2287.9469 0 -2248.04 22564.16 + 120 1100.0902 -2305.051 0 -2248.092 17540.971 + 130 1022.9471 -2297.7384 0 -2248.0801 17985.336 + 140 761.99242 -2278.7251 0 -2248.0345 20462.975 + 150 1053.3973 -2296.1039 0 -2248.081 16130.559 + 160 1089.2622 -2296.1059 0 -2248.0833 15434.234 + 170 776.25788 -2273.4496 0 -2248.0321 20642.702 + 180 1016.1885 -2287.4305 0 -2248.0641 19276.936 + 190 1266.3943 -2301.3675 0 -2248.0865 16199.281 + 200 1012.4185 -2282.134 0 -2248.0423 20795.113 +Loop time of 0.0840016 on 4 procs for 100 steps with 512 atoms + +Performance: 102.855 ns/day, 0.233 hours/ns, 1190.454 timesteps/s +97.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.068133 | 0.071658 | 0.075315 | 1.0 | 85.31 +Neigh | 0.00057864 | 0.00058872 | 0.00060058 | 0.0 | 0.70 +Comm | 0.0049844 | 0.008617 | 0.012086 | 2.8 | 10.26 +Output | 0.0001626 | 0.00027418 | 0.00060463 | 0.0 | 0.33 +Modify | 0.00070477 | 0.0011689 | 0.0022428 | 1.8 | 1.39 +Other | | 0.001694 | | | 2.02 + +Nlocal: 128 ave 129 max 127 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 489.75 ave 501 max 481 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 2094.5 ave 2121 max 2060 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 8378 +Ave neighs/atom = 16.3633 +Neighbor list builds = 3 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/vashishta/InP.vashishta b/examples/vashishta/InP.vashishta deleted file mode 100644 index 9fefd4ef19..0000000000 --- a/examples/vashishta/InP.vashishta +++ /dev/null @@ -1,38 +0,0 @@ -# DATE: 2015-10-14 CONTRIBUTOR: Aidan Thompson, athomps@sandia.gov CITATION: Branicio, Rino, Gan and Tsuzuki, J. Phys Condensed Matter 21 (2009) 095002 -# -# Vashishta potential file for InP, Branicio, Rino, Gan and Tsuzuki, -# J. Phys Condensed Matter 21 (2009) 095002 -# -# These entries are in LAMMPS "metal" units: -# H = eV*Angstroms^eta; Zi, Zj = |e| (e = electronic charge); -# lambda1, lambda4, rc, r0, gamma = Angstroms; -# D = eV*Angstroms^4; W = eV*Angstroms^6; B = eV; -# other quantities are unitless - -# element1 element2 element3 -# H eta Zi Zj lambda1 D lambda4 -# W rc B gamma r0 C cos(theta) - -In In In 273.584 7 -1.21 -1.21 4.5 0.0 2.75 - 0.0 6.0 0.0 0.0 0.0 0.0 0.0 - -P P P 1813.06 7 1.21 1.21 4.5 52.7067 2.75 - 0.0 6.0 0.0 0.0 0.0 0.0 -0.333333333333 - -In P P 4847.09 9 1.21 -1.21 4.5 26.3533 2.75 - 270.105 6.0 4.34967 1.0 3.55 7.0 -0.333333333333 - -P In In 4847.09 9 1.21 -1.21 4.5 26.3533 2.75 - 270.105 6.0 4.34967 1.0 3.55 7.0 -0.333333333333 - -In In P 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -In P In 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -P In P 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -P P In 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/examples/vashishta/InP.vashishta b/examples/vashishta/InP.vashishta new file mode 120000 index 0000000000..61b3b88359 --- /dev/null +++ b/examples/vashishta/InP.vashishta @@ -0,0 +1 @@ +../../potentials/InP.vashishta \ No newline at end of file diff --git a/examples/vashishta/SiO.1990.vashishta b/examples/vashishta/SiO.1990.vashishta deleted file mode 100644 index f0f9ab354f..0000000000 --- a/examples/vashishta/SiO.1990.vashishta +++ /dev/null @@ -1,41 +0,0 @@ -# DATE: 2015-10-14 CONTRIBUTOR: Aidan Thompson, athomps@sandia.gov CITATION: P. Vashishta, R. K. Kalia, J. P. Rino, and I. Ebbsjo, Phys. Rev. B 41, 12197 (1990). -# -# Vashishta potential file for SiO2, P. Vashishta, R. K. Kalia, J. P. Rino, and I. Ebbsjo, -# Phys. Rev. B 41, 12197 (1990). -# -# These parameters, some inferred indirectly, give a good -# match to the energy-volume curve for alpha-quartz in Fig. 2 of the paper. -# -# These entries are in LAMMPS "metal" units: -# H = eV*Angstroms^eta; Zi, Zj = |e| (e = electronic charge); -# lambda1, lambda4, rc, r0, gamma = Angstroms; -# D = eV*Angstroms^4; W = eV*Angstroms^6; B = eV; -# other quantities are unitless -# -# element1 element2 element3 -# H eta Zi Zj lambda1 D lambda4 -# W rc B gamma r0 C cos(theta) - -Si Si Si 0.82023 11 1.6 1.6 999 0.0 4.43 - 0.0 10.0 0.0 0.0 0.0 0.0 0.0 - -O O O 743.848 7 -0.8 -0.8 999 22.1179 4.43 - 0.0 10.0 0.0 0.0 0.0 0.0 0.0 - -O Si Si 163.859 9 -0.8 1.6 999 44.2357 4.43 - 0.0 10.0 20.146 1.0 2.60 0.0 -0.77714596 - -Si O O 163.859 9 1.6 -0.8 999 44.2357 4.43 - 0.0 10.0 5.0365 1.0 2.60 0.0 -0.333333333333 - -Si O Si 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -Si Si O 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -O Si O 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -O O Si 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/examples/vashishta/SiO.1990.vashishta b/examples/vashishta/SiO.1990.vashishta new file mode 120000 index 0000000000..ae56b2bf26 --- /dev/null +++ b/examples/vashishta/SiO.1990.vashishta @@ -0,0 +1 @@ +../../potentials/SiO.1990.vashishta \ No newline at end of file diff --git a/examples/vashishta/log.5Oct16.indiumphosphide.g++.1 b/examples/vashishta/log.27Nov18.vashishta.inp.g++.1 similarity index 85% rename from examples/vashishta/log.5Oct16.indiumphosphide.g++.1 rename to examples/vashishta/log.27Nov18.vashishta.inp.g++.1 index 3887d186ff..158cf0b832 100644 --- a/examples/vashishta/log.5Oct16.indiumphosphide.g++.1 +++ b/examples/vashishta/log.27Nov18.vashishta.inp.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # calculate the energy volume curve for InP zincblende # define volume range and filename @@ -39,6 +40,7 @@ Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 Created 8 atoms + Time spent = 0.000331879 secs mass 1 114.76 mass 2 30.98 @@ -82,19 +84,24 @@ change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 7 ghost atom cutoff = 7 -Memory usage per processor = 2.31867 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/nsq + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -24.633958 315900.5 160.72 Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +104.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -140,13 +147,13 @@ change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -24.773834 306658.04 161.44 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -156,7 +163,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -192,13 +199,13 @@ change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -24.909615 297676.86 162.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -208,7 +215,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -244,13 +251,13 @@ change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.041417 288949.17 162.88 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -260,7 +267,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -296,13 +303,13 @@ change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.169352 280467.46 163.6 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -312,7 +319,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -348,13 +355,13 @@ change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.29353 272224.44 164.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -364,7 +371,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -400,13 +407,13 @@ change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale 1.001458 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.414056 264213.09 165.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -416,7 +423,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -452,13 +459,13 @@ change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.531033 256426.58 165.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -468,7 +475,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -504,13 +511,13 @@ change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.644559 248858.32 166.48 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -520,7 +527,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -556,13 +563,13 @@ change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.754685 240961.62 167.2 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -572,7 +579,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -608,13 +615,13 @@ change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.861049 232444.2 167.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -624,7 +631,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -660,13 +667,13 @@ change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -25.963633 224145.09 168.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -676,7 +683,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -712,13 +719,13 @@ change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.062537 216058.21 169.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -728,7 +735,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -764,13 +771,13 @@ change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.157853 208177.66 170.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -780,7 +787,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -816,13 +823,13 @@ change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.249672 200497.73 170.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -832,7 +839,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -868,13 +875,13 @@ change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.338085 193012.87 171.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -884,7 +891,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -920,13 +927,13 @@ change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.423176 185717.71 172.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -936,7 +943,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -972,13 +979,13 @@ change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.505031 178607.07 172.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -988,7 +995,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1024,13 +1031,13 @@ change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.583731 171675.89 173.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1040,7 +1047,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1076,13 +1083,13 @@ change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.659356 164919.29 174.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1092,7 +1099,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1128,13 +1135,13 @@ change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.731982 158332.52 175.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1144,7 +1151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1180,13 +1187,13 @@ change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.801686 151911 175.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1196,7 +1203,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1232,13 +1239,13 @@ change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.868541 145650.26 176.56 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1248,7 +1255,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1284,13 +1291,13 @@ change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.932617 139545.98 177.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1300,7 +1307,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1336,13 +1343,13 @@ change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -26.993984 133593.97 178 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1352,7 +1359,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1388,13 +1395,13 @@ change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.05271 127790.17 178.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1404,7 +1411,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1440,13 +1447,13 @@ change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.108861 122130.61 179.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1456,7 +1463,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1492,13 +1499,13 @@ change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.1625 116611.48 180.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1508,7 +1515,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1544,13 +1551,13 @@ change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.213689 111229.06 180.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1560,7 +1567,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1596,13 +1603,13 @@ change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.26249 105979.74 181.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1612,7 +1619,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1648,13 +1655,13 @@ change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.308961 100860.02 182.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1664,7 +1671,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1700,13 +1707,13 @@ change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.353159 95866.497 183.04 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1716,7 +1723,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1752,13 +1759,13 @@ change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.395142 90995.879 183.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1768,7 +1775,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1804,13 +1811,13 @@ change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.434962 86244.961 184.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1820,7 +1827,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1856,13 +1863,13 @@ change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.472674 81610.631 185.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1872,7 +1879,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1908,13 +1915,13 @@ change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.508329 77089.868 185.92 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1924,7 +1931,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1960,13 +1967,13 @@ change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.541977 72679.738 186.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1976,7 +1983,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2012,13 +2019,13 @@ change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale 1.001284 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.573668 68377.392 187.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2028,7 +2035,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2064,13 +2071,13 @@ change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.603449 64180.061 188.08 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2080,7 +2087,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2116,13 +2123,13 @@ change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.631367 60085.056 188.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2132,7 +2139,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2168,13 +2175,13 @@ change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.657467 56089.763 189.52 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2184,7 +2191,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2220,13 +2227,13 @@ change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale 1.001264 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.681794 52191.643 190.24 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2236,7 +2243,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2272,13 +2279,13 @@ change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.70439 48388.229 190.96 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2288,7 +2295,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2324,13 +2331,13 @@ change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.725298 44677.122 191.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2340,7 +2347,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2376,13 +2383,13 @@ change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.744558 41055.991 192.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2392,7 +2399,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2428,13 +2435,13 @@ change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.762211 37522.57 193.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2444,7 +2451,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2480,13 +2487,13 @@ change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.778295 34074.656 193.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2496,7 +2503,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2532,13 +2539,13 @@ change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.792849 30710.109 194.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2548,7 +2555,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2584,13 +2591,13 @@ change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.805909 27426.844 195.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2600,7 +2607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2636,13 +2643,13 @@ change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.817512 24222.838 196 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2652,7 +2659,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2688,13 +2695,13 @@ change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.827692 21096.12 196.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2704,7 +2711,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2740,13 +2747,13 @@ change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.836484 18044.775 197.44 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2756,7 +2763,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2792,13 +2799,13 @@ change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.843921 15066.941 198.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2808,7 +2815,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2844,13 +2851,13 @@ change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.850036 12160.805 198.88 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2860,7 +2867,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2896,13 +2903,13 @@ change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.854861 9324.604 199.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +279.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2912,7 +2919,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2948,13 +2955,13 @@ change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.858427 6556.6223 200.32 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2964,7 +2971,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3000,13 +3007,13 @@ change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.860764 3855.1909 201.04 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3016,7 +3023,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3052,13 +3059,13 @@ change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.861902 1218.6858 201.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3068,7 +3075,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3104,13 +3111,13 @@ change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.861869 -1354.4738 202.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3120,7 +3127,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3156,13 +3163,13 @@ change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.860694 -3865.8261 203.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3172,7 +3179,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3208,13 +3215,13 @@ change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.858404 -6316.8685 203.92 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3224,7 +3231,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3260,13 +3267,13 @@ change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.855025 -8709.0584 204.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3276,7 +3283,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3312,13 +3319,13 @@ change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.850585 -11043.815 205.36 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3328,7 +3335,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3364,13 +3371,13 @@ change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.845108 -13322.519 206.08 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3380,7 +3387,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3416,13 +3423,13 @@ change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.838619 -15546.516 206.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3432,7 +3439,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3468,13 +3475,13 @@ change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.831143 -17717.116 207.52 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3484,7 +3491,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3520,13 +3527,13 @@ change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.822703 -19835.593 208.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3536,7 +3543,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3572,13 +3579,13 @@ change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.813323 -21903.19 208.96 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3588,7 +3595,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3624,13 +3631,13 @@ change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.803024 -23921.116 209.68 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3640,7 +3647,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3676,13 +3683,13 @@ change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.79183 -25890.55 210.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3692,7 +3699,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3728,13 +3735,13 @@ change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.779761 -27812.639 211.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +279.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3744,7 +3751,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3780,13 +3787,13 @@ change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.76684 -29688.502 211.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3796,7 +3803,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3832,13 +3839,13 @@ change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.753085 -31519.227 212.56 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3848,7 +3855,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3884,13 +3891,13 @@ change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.738517 -33305.877 213.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3900,7 +3907,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3936,13 +3943,13 @@ change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.723157 -35049.484 214 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3952,7 +3959,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3988,13 +3995,13 @@ change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.707022 -36751.057 214.72 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4004,7 +4011,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4040,13 +4047,13 @@ change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.690132 -38411.578 215.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4056,7 +4063,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4092,13 +4099,13 @@ change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.672509 -39943.013 216.16 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4108,7 +4115,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4144,13 +4151,13 @@ change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.654292 -41126.388 216.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4160,7 +4167,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4196,13 +4203,13 @@ change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.635551 -42275.674 217.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4212,7 +4219,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4248,13 +4255,13 @@ change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.6163 -43391.705 218.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4264,7 +4271,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4300,13 +4307,13 @@ change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.596556 -44475.291 219.04 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4316,7 +4323,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4352,13 +4359,13 @@ change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.576332 -45527.226 219.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4368,7 +4375,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4404,13 +4411,13 @@ change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.555642 -46548.278 220.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4420,7 +4427,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4456,13 +4463,13 @@ change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.5345 -47539.201 221.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4472,7 +4479,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4508,13 +4515,13 @@ change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.512919 -48500.725 221.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4524,7 +4531,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4560,13 +4567,13 @@ change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.490913 -49433.564 222.64 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4576,7 +4583,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4612,13 +4619,13 @@ change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.468494 -50338.414 223.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4628,7 +4635,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4664,13 +4671,13 @@ change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.445674 -51215.952 224.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4680,7 +4687,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4716,13 +4723,13 @@ change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.422466 -52066.839 224.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4732,7 +4739,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4768,13 +4775,13 @@ change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.398881 -52891.72 225.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4784,7 +4791,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4820,13 +4827,13 @@ change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.374932 -53691.221 226.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4836,7 +4843,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4872,13 +4879,13 @@ change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.350628 -54465.955 226.96 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4888,7 +4895,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4924,13 +4931,13 @@ change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.325983 -55216.518 227.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4940,7 +4947,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4976,13 +4983,13 @@ change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.301005 -55943.493 228.4 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4992,7 +4999,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5028,13 +5035,13 @@ change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.275705 -56647.446 229.12 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5044,7 +5051,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5080,13 +5087,13 @@ change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.250095 -57328.932 229.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5096,7 +5103,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5132,13 +5139,13 @@ change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.224183 -57988.489 230.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5148,7 +5155,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5184,13 +5191,13 @@ change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.197979 -58626.644 231.28 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5200,7 +5207,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5236,13 +5243,13 @@ change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.95 | 2.95 | 2.95 Mbytes Step Temp PotEng Press Volume 0 0 -27.171493 -59243.909 232 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5252,7 +5259,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/vashishta/log.5Oct16.vashishta.inp.g++.4 b/examples/vashishta/log.27Nov18.vashishta.inp.g++.4 similarity index 87% rename from examples/vashishta/log.5Oct16.vashishta.inp.g++.4 rename to examples/vashishta/log.27Nov18.vashishta.inp.g++.4 index c914a530c2..22c58edfef 100644 --- a/examples/vashishta/log.5Oct16.vashishta.inp.g++.4 +++ b/examples/vashishta/log.27Nov18.vashishta.inp.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # calculate the energy volume curve for InP zincblende # define volume range and filename @@ -39,6 +40,7 @@ Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 Created 8 atoms + Time spent = 0.00030756 secs mass 1 114.76 mass 2 30.98 @@ -82,19 +84,24 @@ change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 7 ghost atom cutoff = 7 -Memory usage per processor = 2.33394 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/nsq + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -24.633958 315900.5 160.72 -Loop time of 2.5034e-05 on 4 procs for 0 steps with 8 atoms +Loop time of 2.14577e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +81.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -104,7 +111,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.503e-05 | | |100.00 +Other | | 2.146e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -140,13 +147,13 @@ change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -24.773834 306658.04 161.44 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 3.01003e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +65.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -156,7 +163,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 3.01e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -192,13 +199,13 @@ change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -24.909615 297676.86 162.16 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 2.8193e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +64.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -208,7 +215,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 2.819e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -244,13 +251,13 @@ change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.041417 288949.17 162.88 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +129.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -260,7 +267,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -296,13 +303,13 @@ change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.169352 280467.46 163.6 Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +94.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -348,13 +355,13 @@ change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.29353 272224.44 164.32 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -364,7 +371,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -400,13 +407,13 @@ change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale 1.001458 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.414056 264213.09 165.04 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +127.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -416,7 +423,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -452,13 +459,13 @@ change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.531033 256426.58 165.76 Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -504,13 +511,13 @@ change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.644559 248858.32 166.48 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.72853e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -520,7 +527,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.729e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -556,13 +563,13 @@ change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.754685 240961.62 167.2 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -572,7 +579,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -608,13 +615,13 @@ change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.861049 232444.2 167.92 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -624,7 +631,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -660,13 +667,13 @@ change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -25.963633 224145.09 168.64 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -676,7 +683,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -712,13 +719,13 @@ change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.062537 216058.21 169.36 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +91.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -728,7 +735,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -764,13 +771,13 @@ change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.157853 208177.66 170.08 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +124.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -780,7 +787,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -816,13 +823,13 @@ change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.249672 200497.73 170.8 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -832,7 +839,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -868,13 +875,13 @@ change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.338085 193012.87 171.52 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -884,7 +891,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -920,13 +927,13 @@ change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.423176 185717.71 172.24 -Loop time of 1.2517e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.3113e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +114.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -936,7 +943,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.252e-06 | | |100.00 +Other | | 1.311e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -972,13 +979,13 @@ change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.505031 178607.07 172.96 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -988,7 +995,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1024,13 +1031,13 @@ change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.583731 171675.89 173.68 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +125.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1040,7 +1047,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1076,13 +1083,13 @@ change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.659356 164919.29 174.4 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +91.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1092,7 +1099,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1128,13 +1135,13 @@ change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.731982 158332.52 175.12 Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +119.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1180,13 +1187,13 @@ change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.801686 151911 175.84 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1196,7 +1203,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1232,13 +1239,13 @@ change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.868541 145650.26 176.56 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1248,7 +1255,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1284,13 +1291,13 @@ change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.932617 139545.98 177.28 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1300,7 +1307,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1336,13 +1343,13 @@ change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -26.993984 133593.97 178 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +124.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1352,7 +1359,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1388,13 +1395,13 @@ change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.05271 127790.17 178.72 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1404,7 +1411,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1440,13 +1447,13 @@ change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.108861 122130.61 179.44 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1456,7 +1463,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1492,13 +1499,13 @@ change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.1625 116611.48 180.16 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +129.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1508,7 +1515,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1544,13 +1551,13 @@ change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.213689 111229.06 180.88 Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +118.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1596,13 +1603,13 @@ change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.26249 105979.74 181.6 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1612,7 +1619,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1648,13 +1655,13 @@ change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.308961 100860.02 182.32 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1664,7 +1671,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1700,13 +1707,13 @@ change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.353159 95866.497 183.04 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.72853e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1716,7 +1723,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.729e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1752,13 +1759,13 @@ change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.395142 90995.879 183.76 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1768,7 +1775,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1804,13 +1811,13 @@ change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.434962 86244.961 184.48 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1820,7 +1827,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1856,13 +1863,13 @@ change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.472674 81610.631 185.2 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1872,7 +1879,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1908,13 +1915,13 @@ change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.508329 77089.868 185.92 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1924,7 +1931,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1960,13 +1967,13 @@ change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.541977 72679.738 186.64 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1976,7 +1983,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2012,13 +2019,13 @@ change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale 1.001284 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.573668 68377.392 187.36 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +131.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2028,7 +2035,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2064,13 +2071,13 @@ change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.603449 64180.061 188.08 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.3113e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +152.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2080,7 +2087,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.311e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2116,13 +2123,13 @@ change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.631367 60085.056 188.8 -Loop time of 1.2517e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2132,7 +2139,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.252e-06 | | |100.00 +Other | | 2.205e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2168,13 +2175,13 @@ change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.657467 56089.763 189.52 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2184,7 +2191,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2220,13 +2227,13 @@ change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale 1.001264 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.681794 52191.643 190.24 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2236,7 +2243,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2272,13 +2279,13 @@ change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.70439 48388.229 190.96 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2288,7 +2295,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2324,13 +2331,13 @@ change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.725298 44677.122 191.68 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +111.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2340,7 +2347,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2376,13 +2383,13 @@ change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.744558 41055.991 192.4 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2392,7 +2399,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2428,13 +2435,13 @@ change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.762211 37522.57 193.12 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2444,7 +2451,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2480,13 +2487,13 @@ change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.778295 34074.656 193.84 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2496,7 +2503,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2532,13 +2539,13 @@ change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.792849 30710.109 194.56 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2548,7 +2555,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2584,13 +2591,13 @@ change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.805909 27426.844 195.28 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +125.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2600,7 +2607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2636,13 +2643,13 @@ change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.817512 24222.838 196 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2652,7 +2659,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2688,13 +2695,13 @@ change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.827692 21096.12 196.72 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2704,7 +2711,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2740,13 +2747,13 @@ change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.836484 18044.775 197.44 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +122.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2756,7 +2763,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2792,13 +2799,13 @@ change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.843921 15066.941 198.16 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2808,7 +2815,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2844,13 +2851,13 @@ change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.850036 12160.805 198.88 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +129.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2860,7 +2867,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2896,13 +2903,13 @@ change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.854861 9324.604 199.6 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2912,7 +2919,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2948,13 +2955,13 @@ change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.858427 6556.6223 200.32 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +93.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2964,7 +2971,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3000,13 +3007,13 @@ change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.860764 3855.1909 201.04 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 2.02656e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +98.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3016,7 +3023,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 2.027e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3052,13 +3059,13 @@ change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.861902 1218.6858 201.76 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3068,7 +3075,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3104,13 +3111,13 @@ change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.861869 -1354.4738 202.48 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3120,7 +3127,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3156,13 +3163,13 @@ change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.860694 -3865.8261 203.2 -Loop time of 1.2517e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +111.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3172,7 +3179,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.252e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3208,13 +3215,13 @@ change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.858404 -6316.8685 203.92 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3224,7 +3231,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3260,13 +3267,13 @@ change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.855025 -8709.0584 204.64 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +69.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3276,7 +3283,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3312,13 +3319,13 @@ change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.850585 -11043.815 205.36 -Loop time of 5.00679e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -4993.2% CPU use with 4 MPI tasks x no OpenMP threads +118.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3328,7 +3335,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 5.007e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3364,13 +3371,13 @@ change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.845108 -13322.519 206.08 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3380,7 +3387,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3416,13 +3423,13 @@ change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.838619 -15546.516 206.8 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3432,7 +3439,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3468,13 +3475,13 @@ change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.831143 -17717.116 207.52 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3484,7 +3491,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3520,13 +3527,13 @@ change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.822703 -19835.593 208.24 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +121.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3536,7 +3543,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3572,13 +3579,13 @@ change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.813323 -21903.19 208.96 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3588,7 +3595,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3624,13 +3631,13 @@ change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.803024 -23921.116 209.68 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3640,7 +3647,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3676,13 +3683,13 @@ change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.79183 -25890.55 210.4 -Loop time of 1.2517e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3692,7 +3699,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.252e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3728,13 +3735,13 @@ change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.779761 -27812.639 211.12 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3744,7 +3751,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3780,13 +3787,13 @@ change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.76684 -29688.502 211.84 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3796,7 +3803,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3832,13 +3839,13 @@ change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.753085 -31519.227 212.56 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +87.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3848,7 +3855,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3884,13 +3891,13 @@ change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.738517 -33305.877 213.28 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +118.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3900,7 +3907,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3936,13 +3943,13 @@ change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.723157 -35049.484 214 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3952,7 +3959,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3988,13 +3995,13 @@ change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.707022 -36751.057 214.72 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4004,7 +4011,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4040,13 +4047,13 @@ change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.690132 -38411.578 215.44 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +83.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4056,7 +4063,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4092,13 +4099,13 @@ change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.672509 -39943.013 216.16 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +122.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4108,7 +4115,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4144,13 +4151,13 @@ change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.654292 -41126.388 216.88 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +129.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4160,7 +4167,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4196,13 +4203,13 @@ change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.635551 -42275.674 217.6 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4212,7 +4219,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4248,13 +4255,13 @@ change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.6163 -43391.705 218.32 -Loop time of 9.53674e-07 on 4 procs for 0 steps with 8 atoms +Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +149.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4264,7 +4271,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.669e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4300,13 +4307,13 @@ change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.596556 -44475.291 219.04 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +117.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4316,7 +4323,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4352,13 +4359,13 @@ change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.576332 -45527.226 219.76 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +87.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4368,7 +4375,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4404,13 +4411,13 @@ change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.555642 -46548.278 220.48 Loop time of 1.2517e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +119.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4456,13 +4463,13 @@ change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.5345 -47539.201 221.2 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +109.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4472,7 +4479,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4508,13 +4515,13 @@ change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.512919 -48500.725 221.92 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.96695e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +127.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4524,7 +4531,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.967e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4560,13 +4567,13 @@ change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.490913 -49433.564 222.64 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +131.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4576,7 +4583,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.907e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4612,13 +4619,13 @@ change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.468494 -50338.414 223.36 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4628,7 +4635,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4664,13 +4671,13 @@ change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.445674 -51215.952 224.08 -Loop time of 3.57628e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +145.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4680,7 +4687,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.576e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4716,13 +4723,13 @@ change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.422466 -52066.839 224.8 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.72853e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +86.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4732,7 +4739,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.729e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4768,13 +4775,13 @@ change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.398881 -52891.72 225.52 -Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4784,7 +4791,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.431e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4820,13 +4827,13 @@ change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.374932 -53691.221 226.24 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4836,7 +4843,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4872,13 +4879,13 @@ change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.350628 -54465.955 226.96 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4888,7 +4895,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4924,13 +4931,13 @@ change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.325983 -55216.518 227.68 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4940,7 +4947,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4976,13 +4983,13 @@ change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.301005 -55943.493 228.4 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +127.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4992,7 +4999,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5028,13 +5035,13 @@ change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.275705 -56647.446 229.12 -Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5044,7 +5051,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.848e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5080,13 +5087,13 @@ change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.250095 -57328.932 229.84 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +122.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5096,7 +5103,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5132,13 +5139,13 @@ change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.224183 -57988.489 230.56 -Loop time of 1.19209e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.78814e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +125.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5148,7 +5155,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 1.788e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5184,13 +5191,13 @@ change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.197979 -58626.644 231.28 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +124.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5200,7 +5207,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5236,13 +5243,13 @@ change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.33394 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 2.965 | 2.965 | 2.965 Mbytes Step Temp PotEng Press Volume 0 0 -27.171493 -59243.909 232 Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total diff --git a/examples/vashishta/log.5Oct16.sio2.g++.1 b/examples/vashishta/log.27Nov18.vashishta.sio2.g++.1 similarity index 70% rename from examples/vashishta/log.5Oct16.sio2.g++.1 rename to examples/vashishta/log.27Nov18.vashishta.sio2.g++.1 index d302760d95..b1bd70d1bf 100644 --- a/examples/vashishta/log.5Oct16.sio2.g++.1 +++ b/examples/vashishta/log.27Nov18.vashishta.sio2.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test Vashishta potential for quartz units metal @@ -16,6 +17,7 @@ replicate 4 4 4 triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) 1 by 1 by 1 MPI processor grid 576 atoms + Time spent = 0.000259161 secs velocity all create 2000.0 277387 mom yes displace_atoms all move 0.05 0.9 0.4 units box @@ -35,13 +37,18 @@ timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 10.3 ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 2.54081 Mbytes + binsize = 5.15, bins = 6 4 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.677 | 3.677 | 3.677 Mbytes Step Temp E_pair E_mol TotEng Press 0 2000 -5280.875 0 -5132.2259 -20502.321 10 895.65237 -5198.402 0 -5131.833 419.34676 @@ -54,20 +61,20 @@ Step Temp E_pair E_mol TotEng Press 80 1020.1044 -5207.6763 0 -5131.8574 -13488.675 90 912.75535 -5199.651 0 -5131.8108 2715.5897 100 998.97588 -5206.1008 0 -5131.8523 6024.3651 -Loop time of 2.15298 on 1 procs for 100 steps with 576 atoms +Loop time of 1.20228 on 1 procs for 100 steps with 576 atoms -Performance: 4.013 ns/day, 5.981 hours/ns, 46.447 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 7.186 ns/day, 3.340 hours/ns, 83.176 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.0719 | 2.0719 | 2.0719 | 0.0 | 96.23 -Neigh | 0.075195 | 0.075195 | 0.075195 | 0.0 | 3.49 -Comm | 0.0039992 | 0.0039992 | 0.0039992 | 0.0 | 0.19 -Output | 0.0001986 | 0.0001986 | 0.0001986 | 0.0 | 0.01 -Modify | 0.00095224 | 0.00095224 | 0.00095224 | 0.0 | 0.04 -Other | | 0.0007288 | | | 0.03 +Pair | 1.1142 | 1.1142 | 1.1142 | 0.0 | 92.67 +Neigh | 0.081275 | 0.081275 | 0.081275 | 0.0 | 6.76 +Comm | 0.0051043 | 0.0051043 | 0.0051043 | 0.0 | 0.42 +Output | 0.00019526 | 0.00019526 | 0.00019526 | 0.0 | 0.02 +Modify | 0.00081301 | 0.00081301 | 0.00081301 | 0.0 | 0.07 +Other | | 0.0006804 | | | 0.06 Nlocal: 576 ave 576 max 576 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +90,4 @@ Ave neighs/atom = 365.399 Neighbor list builds = 10 Dangerous builds = 10 -Total wall time: 0:00:02 +Total wall time: 0:00:01 diff --git a/examples/vashishta/log.5Oct16.vashishta.sio2.g++.4 b/examples/vashishta/log.27Nov18.vashishta.sio2.g++.4 similarity index 71% rename from examples/vashishta/log.5Oct16.vashishta.sio2.g++.4 rename to examples/vashishta/log.27Nov18.vashishta.sio2.g++.4 index c16943f4dc..ebac488d79 100644 --- a/examples/vashishta/log.5Oct16.vashishta.sio2.g++.4 +++ b/examples/vashishta/log.27Nov18.vashishta.sio2.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test Vashishta potential for quartz units metal @@ -16,6 +17,7 @@ replicate 4 4 4 triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) 2 by 1 by 2 MPI processor grid 576 atoms + Time spent = 0.000181913 secs velocity all create 2000.0 277387 mom yes displace_atoms all move 0.05 0.9 0.4 units box @@ -35,13 +37,18 @@ timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 10.3 ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 2.50221 Mbytes + binsize = 5.15, bins = 6 4 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.851 | 2.851 | 2.851 Mbytes Step Temp E_pair E_mol TotEng Press 0 2000 -5280.875 0 -5132.2259 -20502.321 10 895.65237 -5198.402 0 -5131.833 419.34676 @@ -54,20 +61,20 @@ Step Temp E_pair E_mol TotEng Press 80 1020.1044 -5207.6763 0 -5131.8574 -13488.675 90 912.75535 -5199.651 0 -5131.8108 2715.5897 100 998.97588 -5206.1008 0 -5131.8523 6024.3651 -Loop time of 0.592926 on 4 procs for 100 steps with 576 atoms +Loop time of 0.33693 on 4 procs for 100 steps with 576 atoms -Performance: 14.572 ns/day, 1.647 hours/ns, 168.655 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 25.643 ns/day, 0.936 hours/ns, 296.798 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.52105 | 0.52662 | 0.5338 | 0.8 | 88.82 -Neigh | 0.017895 | 0.018018 | 0.018194 | 0.1 | 3.04 -Comm | 0.039864 | 0.047185 | 0.052807 | 2.6 | 7.96 -Output | 0.00022006 | 0.00027043 | 0.00031042 | 0.2 | 0.05 -Modify | 0.00026655 | 0.00027591 | 0.00029397 | 0.1 | 0.05 -Other | | 0.0005552 | | | 0.09 +Pair | 0.28209 | 0.28996 | 0.30024 | 1.3 | 86.06 +Neigh | 0.019293 | 0.020102 | 0.021493 | 0.6 | 5.97 +Comm | 0.014259 | 0.025857 | 0.034626 | 4.9 | 7.67 +Output | 0.00024128 | 0.00035256 | 0.00068545 | 0.0 | 0.10 +Modify | 0.00024343 | 0.00025165 | 0.00026345 | 0.0 | 0.07 +Other | | 0.0004103 | | | 0.12 Nlocal: 144 ave 146 max 143 min Histogram: 2 0 0 1 0 0 0 0 0 1 diff --git a/examples/vashishta/log.5Oct16.vashishta.table.inp.g++.1 b/examples/vashishta/log.27Nov18.vashishta.table.inp.g++.1 similarity index 85% rename from examples/vashishta/log.5Oct16.vashishta.table.inp.g++.1 rename to examples/vashishta/log.27Nov18.vashishta.table.inp.g++.1 index 2724f18090..e6566fe364 100644 --- a/examples/vashishta/log.5Oct16.vashishta.table.inp.g++.1 +++ b/examples/vashishta/log.27Nov18.vashishta.table.inp.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # calculate the energy volume curve for InP zincblende # define volume range and filename @@ -39,6 +40,7 @@ Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 Created 8 atoms + Time spent = 0.0003407 secs mass 1 114.76 mass 2 30.98 @@ -82,19 +84,24 @@ change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 7 ghost atom cutoff = 7 -Memory usage per processor = 8.42218 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta/table, perpetual + attributes: full, newton on + pair build: full/nsq + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -24.633958 315900.51 160.72 -Loop time of 1.90735e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -104,7 +111,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 9.537e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -140,13 +147,13 @@ change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -24.773834 306658.05 161.44 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -156,7 +163,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -192,13 +199,13 @@ change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -24.909614 297676.86 162.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -208,7 +215,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -244,13 +251,13 @@ change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.041417 288949.18 162.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -260,7 +267,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -296,13 +303,13 @@ change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.169352 280467.47 163.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -312,7 +319,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -348,13 +355,13 @@ change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.29353 272224.45 164.32 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -364,7 +371,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -400,13 +407,13 @@ change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale 1.001458 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.414056 264213.09 165.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -416,7 +423,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -452,13 +459,13 @@ change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.531033 256426.59 165.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -468,7 +475,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -504,13 +511,13 @@ change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.644559 248858.32 166.48 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -520,7 +527,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -556,13 +563,13 @@ change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.754685 240961.63 167.2 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -572,7 +579,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -608,13 +615,13 @@ change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.861048 232444.2 167.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +3355.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -624,7 +631,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -660,13 +667,13 @@ change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -25.963633 224145.1 168.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -676,7 +683,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -712,13 +719,13 @@ change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.062537 216058.22 169.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -728,7 +735,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -764,13 +771,13 @@ change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.157852 208177.67 170.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -780,7 +787,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -816,13 +823,13 @@ change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.249672 200497.73 170.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -832,7 +839,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -868,13 +875,13 @@ change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.338085 193012.87 171.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -884,7 +891,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -920,13 +927,13 @@ change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.423176 185717.72 172.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -936,7 +943,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -972,13 +979,13 @@ change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.505031 178607.08 172.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -988,7 +995,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1024,13 +1031,13 @@ change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.583731 171675.9 173.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1040,7 +1047,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1076,13 +1083,13 @@ change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.659356 164919.3 174.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1092,7 +1099,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1128,13 +1135,13 @@ change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.731982 158332.53 175.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1144,7 +1151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1180,13 +1187,13 @@ change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.801686 151911 175.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1196,7 +1203,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1232,13 +1239,13 @@ change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.86854 145650.27 176.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1248,7 +1255,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1284,13 +1291,13 @@ change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.932617 139545.99 177.28 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1300,7 +1307,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1336,13 +1343,13 @@ change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -26.993984 133593.98 178 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1352,7 +1359,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1388,13 +1395,13 @@ change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.05271 127790.17 178.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1404,7 +1411,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1440,13 +1447,13 @@ change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.108861 122130.62 179.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1456,7 +1463,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1492,13 +1499,13 @@ change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.162499 116611.48 180.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1508,7 +1515,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1544,13 +1551,13 @@ change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.213689 111229.06 180.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1560,7 +1567,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1596,13 +1603,13 @@ change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.262489 105979.74 181.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1612,7 +1619,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1648,13 +1655,13 @@ change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.30896 100860.02 182.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1664,7 +1671,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1700,13 +1707,13 @@ change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.353159 95866.501 183.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1716,7 +1723,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1752,13 +1759,13 @@ change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.395142 90995.883 183.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1768,7 +1775,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1804,13 +1811,13 @@ change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.434962 86244.965 184.48 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1820,7 +1827,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1856,13 +1863,13 @@ change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.472674 81610.635 185.2 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1872,7 +1879,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1908,13 +1915,13 @@ change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.508329 77089.873 185.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1924,7 +1931,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -1960,13 +1967,13 @@ change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.541977 72679.744 186.64 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1976,7 +1983,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2012,13 +2019,13 @@ change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale 1.001284 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.573668 68377.396 187.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2028,7 +2035,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2064,13 +2071,13 @@ change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.603449 64180.063 188.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2080,7 +2087,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2116,13 +2123,13 @@ change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.631367 60085.061 188.8 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2132,7 +2139,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2168,13 +2175,13 @@ change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.657467 56089.766 189.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2184,7 +2191,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2220,13 +2227,13 @@ change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale 1.001264 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.681794 52191.647 190.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2236,7 +2243,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2272,13 +2279,13 @@ change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.70439 48388.232 190.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2288,7 +2295,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2324,13 +2331,13 @@ change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.725298 44677.126 191.68 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2340,7 +2347,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2376,13 +2383,13 @@ change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.744558 41055.991 192.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2392,7 +2399,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2428,13 +2435,13 @@ change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.762211 37522.574 193.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2444,7 +2451,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2480,13 +2487,13 @@ change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.778295 34074.66 193.84 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2496,7 +2503,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2532,13 +2539,13 @@ change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.792849 30710.111 194.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2548,7 +2555,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2584,13 +2591,13 @@ change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.805909 27426.844 195.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2600,7 +2607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2636,13 +2643,13 @@ change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.817512 24222.839 196 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2652,7 +2659,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2688,13 +2695,13 @@ change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.827692 21096.122 196.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2704,7 +2711,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2740,13 +2747,13 @@ change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.836484 18044.777 197.44 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2756,7 +2763,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2792,13 +2799,13 @@ change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.843921 15066.943 198.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2808,7 +2815,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2844,13 +2851,13 @@ change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.850036 12160.806 198.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2860,7 +2867,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2896,13 +2903,13 @@ change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.854861 9324.6056 199.6 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2912,7 +2919,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -2948,13 +2955,13 @@ change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.858427 6556.6252 200.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2964,7 +2971,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3000,13 +3007,13 @@ change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.860764 3855.194 201.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3016,7 +3023,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3052,13 +3059,13 @@ change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.861902 1218.687 201.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3068,7 +3075,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3104,13 +3111,13 @@ change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.861869 -1354.4715 202.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3120,7 +3127,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3156,13 +3163,13 @@ change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.860694 -3865.8233 203.2 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3172,7 +3179,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3208,13 +3215,13 @@ change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.858403 -6316.8674 203.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3224,7 +3231,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3260,13 +3267,13 @@ change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.855025 -8709.0557 204.64 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3276,7 +3283,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3312,13 +3319,13 @@ change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.850585 -11043.813 205.36 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3328,7 +3335,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3364,13 +3371,13 @@ change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.845108 -13322.517 206.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3380,7 +3387,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3416,13 +3423,13 @@ change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.838619 -15546.513 206.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3432,7 +3439,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3468,13 +3475,13 @@ change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.831143 -17717.114 207.52 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3484,7 +3491,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3520,13 +3527,13 @@ change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.822703 -19835.592 208.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3536,7 +3543,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3572,13 +3579,13 @@ change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.813323 -21903.187 208.96 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3588,7 +3595,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3624,13 +3631,13 @@ change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.803024 -23921.114 209.68 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3640,7 +3647,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3676,13 +3683,13 @@ change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.79183 -25890.548 210.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3692,7 +3699,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3728,13 +3735,13 @@ change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.779761 -27812.637 211.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3744,7 +3751,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3780,13 +3787,13 @@ change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.76684 -29688.5 211.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3796,7 +3803,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3832,13 +3839,13 @@ change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.753085 -31519.225 212.56 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3848,7 +3855,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3884,13 +3891,13 @@ change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.738517 -33305.874 213.28 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3900,7 +3907,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3936,13 +3943,13 @@ change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.723157 -35049.482 214 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3952,7 +3959,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -3988,13 +3995,13 @@ change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.707022 -36751.056 214.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4004,7 +4011,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4040,13 +4047,13 @@ change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.690132 -38411.578 215.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4056,7 +4063,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4092,13 +4099,13 @@ change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.672509 -39943.011 216.16 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4108,7 +4115,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4144,13 +4151,13 @@ change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.654292 -41126.386 216.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4160,7 +4167,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4196,13 +4203,13 @@ change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.635551 -42275.674 217.6 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4212,7 +4219,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4248,13 +4255,13 @@ change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.6163 -43391.703 218.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4264,7 +4271,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4300,13 +4307,13 @@ change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.596556 -44475.29 219.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4316,7 +4323,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4352,13 +4359,13 @@ change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.576332 -45527.224 219.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4368,7 +4375,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4404,13 +4411,13 @@ change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.555642 -46548.278 220.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4420,7 +4427,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4456,13 +4463,13 @@ change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.5345 -47539.199 221.2 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4472,7 +4479,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4508,13 +4515,13 @@ change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.512919 -48500.724 221.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4524,7 +4531,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4560,13 +4567,13 @@ change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.490913 -49433.563 222.64 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4576,7 +4583,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4612,13 +4619,13 @@ change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.468493 -50338.412 223.36 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4628,7 +4635,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4664,13 +4671,13 @@ change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.445674 -51215.951 224.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4680,7 +4687,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4716,13 +4723,13 @@ change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.422466 -52066.839 224.8 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4732,7 +4739,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4768,13 +4775,13 @@ change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.398881 -52891.72 225.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4784,7 +4791,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4820,13 +4827,13 @@ change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.374932 -53691.22 226.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4836,7 +4843,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4872,13 +4879,13 @@ change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.350628 -54465.954 226.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4888,7 +4895,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4924,13 +4931,13 @@ change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.325983 -55216.517 227.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4940,7 +4947,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -4976,13 +4983,13 @@ change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.301005 -55943.492 228.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4992,7 +4999,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5028,13 +5035,13 @@ change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.275705 -56647.446 229.12 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5044,7 +5051,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5080,13 +5087,13 @@ change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.250095 -57328.932 229.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5096,7 +5103,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5132,13 +5139,13 @@ change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.224183 -57988.488 230.56 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5148,7 +5155,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5184,13 +5191,13 @@ change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.197979 -58626.642 231.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5200,7 +5207,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -5236,13 +5243,13 @@ change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.42218 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.054 | 9.054 | 9.054 Mbytes Step Temp PotEng Press Volume 0 0 -27.171493 -59243.908 232 -Loop time of 0 on 1 procs for 0 steps with 8 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 8 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5252,7 +5259,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/vashishta/log.5Oct16.vashishta.table.inp.g++.4 b/examples/vashishta/log.27Nov18.vashishta.table.inp.g++.4 similarity index 85% rename from examples/vashishta/log.5Oct16.vashishta.table.inp.g++.4 rename to examples/vashishta/log.27Nov18.vashishta.table.inp.g++.4 index 528f7fbee3..b5bc469600 100644 --- a/examples/vashishta/log.5Oct16.vashishta.table.inp.g++.4 +++ b/examples/vashishta/log.27Nov18.vashishta.table.inp.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # calculate the energy volume curve for InP zincblende # define volume range and filename @@ -39,6 +40,7 @@ Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 Created 8 atoms + Time spent = 0.00137448 secs mass 1 114.76 mass 2 30.98 @@ -82,19 +84,24 @@ change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 7 ghost atom cutoff = 7 -Memory usage per processor = 8.43745 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta/table, perpetual + attributes: full, newton on + pair build: full/nsq + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -24.633958 315900.51 160.72 -Loop time of 5.00679e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.20997e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +90.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -104,7 +111,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 5.007e-06 | | |100.00 +Other | | 1.21e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -140,13 +147,13 @@ change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -24.773834 306658.05 161.44 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.23978e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -156,7 +163,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.24e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -192,13 +199,13 @@ change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -24.909614 297676.86 162.16 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.20401e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +103.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -208,7 +215,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.204e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -244,13 +251,13 @@ change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.041417 288949.18 162.88 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2517e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -260,7 +267,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.252e-05 | | |100.00 Nlocal: 2 ave 2 max 2 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -296,13 +303,13 @@ change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.169352 280467.47 163.6 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.20997e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +70.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -312,7 +319,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.21e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -348,13 +355,13 @@ change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.29353 272224.45 164.32 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2517e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -364,7 +371,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.252e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -400,13 +407,13 @@ change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale 1.001458 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.414056 264213.09 165.04 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.20997e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +95.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -416,7 +423,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.21e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -452,13 +459,13 @@ change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.531033 256426.59 165.76 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2517e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -468,7 +475,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.252e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -504,13 +511,13 @@ change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.644559 248858.32 166.48 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2219e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -520,7 +527,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.222e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -556,13 +563,13 @@ change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.754685 240961.63 167.2 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2219e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -572,7 +579,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.222e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -608,13 +615,13 @@ change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.861048 232444.2 167.92 -Loop time of 3.09944e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.20997e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -624,7 +631,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.099e-06 | | |100.00 +Other | | 1.21e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -660,13 +667,13 @@ change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -25.963633 224145.1 168.64 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.21593e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +106.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -676,7 +683,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.216e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -712,13 +719,13 @@ change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.062537 216058.22 169.36 -Loop time of 3.09944e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.23382e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +99.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -728,7 +735,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.099e-06 | | |100.00 +Other | | 1.234e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -764,13 +771,13 @@ change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.157852 208177.67 170.08 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2517e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +103.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -780,7 +787,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.252e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -816,13 +823,13 @@ change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.249672 200497.73 170.8 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.77622e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -832,7 +839,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.776e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -868,13 +875,13 @@ change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale 1.0014 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.338085 193012.87 171.52 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +135.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -884,7 +891,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -920,13 +927,13 @@ change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.423176 185717.72 172.24 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +129.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -936,7 +943,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -972,13 +979,13 @@ change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.505031 178607.08 172.96 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +151.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -988,7 +995,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1024,13 +1031,13 @@ change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.583731 171675.9 173.68 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +119.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1040,7 +1047,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.669e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1076,13 +1083,13 @@ change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.659356 164919.3 174.4 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.16229e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1092,7 +1099,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.162e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1128,13 +1135,13 @@ change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.731982 158332.53 175.12 -Loop time of 3.09944e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.28746e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1144,7 +1151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.099e-06 | | |100.00 +Other | | 1.287e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1180,13 +1187,13 @@ change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.801686 151911 175.84 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.16229e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +73.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1196,7 +1203,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.162e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1232,13 +1239,13 @@ change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.86854 145650.27 176.56 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.17421e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +70.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1248,7 +1255,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 1.174e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1284,13 +1291,13 @@ change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.932617 139545.99 177.28 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.25766e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +69.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1300,7 +1307,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.258e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1336,13 +1343,13 @@ change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -26.993984 133593.98 178 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.25766e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +93.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1352,7 +1359,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.258e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1388,13 +1395,13 @@ change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.05271 127790.17 178.72 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.16229e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +94.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1404,7 +1411,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.162e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1440,13 +1447,13 @@ change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.108861 122130.62 179.44 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.23978e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1456,7 +1463,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 1.24e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1492,13 +1499,13 @@ change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.162499 116611.48 180.16 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.2517e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +95.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1508,7 +1515,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.252e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1544,13 +1551,13 @@ change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.213689 111229.06 180.88 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.25766e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1560,7 +1567,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.258e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1596,13 +1603,13 @@ change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.262489 105979.74 181.6 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.18613e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1612,7 +1619,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.186e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1648,13 +1655,13 @@ change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.30896 100860.02 182.32 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 0.000160694 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1664,7 +1671,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 0.0001607 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1700,13 +1707,13 @@ change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.353159 95866.501 183.04 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.16825e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1716,7 +1723,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.168e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1752,13 +1759,13 @@ change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.395142 90995.883 183.76 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 5.47767e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1768,7 +1775,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 5.478e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1804,13 +1811,13 @@ change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale 1.0013 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.434962 86244.965 184.48 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.15633e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +105.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1820,7 +1827,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.156e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1856,13 +1863,13 @@ change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.472674 81610.635 185.2 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.15633e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +93.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1872,7 +1879,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.156e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1908,13 +1915,13 @@ change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.508329 77089.873 185.92 -Loop time of 2.5034e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.15037e-05 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +95.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1924,7 +1931,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.503e-06 | | |100.00 +Other | | 1.15e-05 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -1960,13 +1967,13 @@ change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.541977 72679.744 186.64 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +139.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -1976,7 +1983,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2012,13 +2019,13 @@ change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale 1.001284 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.573668 68377.396 187.36 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +112.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2028,7 +2035,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2064,13 +2071,13 @@ change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.603449 64180.063 188.08 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.3113e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +152.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2080,7 +2087,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.311e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2116,13 +2123,13 @@ change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.631367 60085.061 188.8 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +122.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2132,7 +2139,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2168,13 +2175,13 @@ change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.657467 56089.766 189.52 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +105.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2184,7 +2191,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2220,13 +2227,13 @@ change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale 1.001264 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.681794 52191.647 190.24 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.46386e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +106.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2236,7 +2243,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 8.464e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2272,13 +2279,13 @@ change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.70439 48388.232 190.96 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.52346e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2288,7 +2295,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 8.523e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2324,13 +2331,13 @@ change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.725298 44677.126 191.68 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.64267e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +86.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2340,7 +2347,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.643e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2376,13 +2383,13 @@ change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.744558 41055.991 192.4 -Loop time of 2.5034e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.46386e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +94.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2392,7 +2399,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.503e-06 | | |100.00 +Other | | 8.464e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2428,13 +2435,13 @@ change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.762211 37522.574 193.12 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.22544e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +94.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2444,7 +2451,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.225e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2480,13 +2487,13 @@ change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.778295 34074.66 193.84 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2496,7 +2503,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2532,13 +2539,13 @@ change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.792849 30710.111 194.56 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.76188e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2548,7 +2555,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.762e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2584,13 +2591,13 @@ change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.805909 27426.844 195.28 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2600,7 +2607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2636,13 +2643,13 @@ change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.817512 24222.839 196 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.58307e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2652,7 +2659,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.583e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2688,13 +2695,13 @@ change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.827692 21096.122 196.72 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.22544e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +106.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2704,7 +2711,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.225e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2740,13 +2747,13 @@ change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.836484 18044.777 197.44 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.52346e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2756,7 +2763,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.523e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2792,13 +2799,13 @@ change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.843921 15066.943 198.16 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2808,7 +2815,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2844,13 +2851,13 @@ change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.850036 12160.806 198.88 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.72853e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +130.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2860,7 +2867,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.729e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2896,13 +2903,13 @@ change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.854861 9324.6056 199.6 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.43051e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +122.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2912,7 +2919,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -2948,13 +2955,13 @@ change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale 1.0012 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.858427 6556.6252 200.32 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.66893e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +89.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -2964,7 +2971,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.669e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3000,13 +3007,13 @@ change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.860764 3855.194 201.04 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.96695e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3016,7 +3023,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.967e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3052,13 +3059,13 @@ change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.861902 1218.687 201.76 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.22544e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +100.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3068,7 +3075,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.225e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3104,13 +3111,13 @@ change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.861869 -1354.4715 202.48 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3120,7 +3127,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3156,13 +3163,13 @@ change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.860694 -3865.8233 203.2 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.22544e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +106.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3172,7 +3179,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.225e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3208,13 +3215,13 @@ change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.858403 -6316.8674 203.92 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.16584e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3224,7 +3231,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.166e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3260,13 +3267,13 @@ change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.855025 -8709.0557 204.64 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.10623e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +95.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3276,7 +3283,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.106e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3312,13 +3319,13 @@ change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.850585 -11043.813 205.36 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.10623e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3328,7 +3335,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 8.106e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3364,13 +3371,13 @@ change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.845108 -13322.517 206.08 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.22544e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +109.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3380,7 +3387,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.225e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3416,13 +3423,13 @@ change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.838619 -15546.513 206.8 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3432,7 +3439,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3468,13 +3475,13 @@ change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.831143 -17717.114 207.52 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.52346e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3484,7 +3491,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.523e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3520,13 +3527,13 @@ change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.822703 -19835.592 208.24 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +92.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3536,7 +3543,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3572,13 +3579,13 @@ change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.813323 -21903.187 208.96 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3588,7 +3595,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3624,13 +3631,13 @@ change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.803024 -23921.114 209.68 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.16584e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3640,7 +3647,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.166e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3676,13 +3683,13 @@ change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.79183 -25890.548 210.4 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.88109e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3692,7 +3699,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.881e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3728,13 +3735,13 @@ change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.779761 -27812.637 211.12 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3744,7 +3751,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3780,13 +3787,13 @@ change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.76684 -29688.5 211.84 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +83.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3796,7 +3803,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3832,13 +3839,13 @@ change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.753085 -31519.225 212.56 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +145.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3848,7 +3855,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3884,13 +3891,13 @@ change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.738517 -33305.874 213.28 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.60933e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +124.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3900,7 +3907,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.609e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3936,13 +3943,13 @@ change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.723157 -35049.482 214 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 0.00103354 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -3952,7 +3959,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 0.001034 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -3988,13 +3995,13 @@ change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.707022 -36751.056 214.72 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.46386e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4004,7 +4011,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 8.464e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4040,13 +4047,13 @@ change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.690132 -38411.578 215.44 -Loop time of 2.5034e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.04663e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4056,7 +4063,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.503e-06 | | |100.00 +Other | | 8.047e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4092,13 +4099,13 @@ change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.672509 -39943.011 216.16 -Loop time of 3.09944e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4108,7 +4115,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.099e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4144,13 +4151,13 @@ change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.654292 -41126.386 216.88 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.04663e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +105.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4160,7 +4167,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.047e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4196,13 +4203,13 @@ change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.635551 -42275.674 217.6 -Loop time of 2.44379e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.16584e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4212,7 +4219,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.444e-06 | | |100.00 +Other | | 8.166e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4248,13 +4255,13 @@ change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale 1.0011 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.6163 -43391.703 218.32 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +104.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4264,7 +4271,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4300,13 +4307,13 @@ change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.596556 -44475.29 219.04 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +93.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4316,7 +4323,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4352,13 +4359,13 @@ change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.576332 -45527.224 219.76 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +56.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4368,7 +4375,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4404,13 +4411,13 @@ change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.555642 -46548.278 220.48 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.52346e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4420,7 +4427,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 8.523e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4456,13 +4463,13 @@ change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.5345 -47539.199 221.2 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.46386e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +106.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4472,7 +4479,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 8.464e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4508,13 +4515,13 @@ change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.512919 -48500.724 221.92 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4524,7 +4531,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4560,13 +4567,13 @@ change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.490913 -49433.563 222.64 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.58307e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +93.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4576,7 +4583,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 8.583e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4612,13 +4619,13 @@ change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.468493 -50338.412 223.36 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +134.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4628,7 +4635,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4664,13 +4671,13 @@ change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.445674 -51215.951 224.08 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +127.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4680,7 +4687,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4716,13 +4723,13 @@ change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.422466 -52066.839 224.8 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.54972e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4732,7 +4739,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 1.55e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4768,13 +4775,13 @@ change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.398881 -52891.72 225.52 -Loop time of 2.6226e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 1.37091e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +127.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4784,7 +4791,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.623e-06 | | |100.00 +Other | | 1.371e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4820,13 +4827,13 @@ change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.374932 -53691.22 226.24 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.52346e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4836,7 +4843,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.523e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4872,13 +4879,13 @@ change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.350628 -54465.954 226.96 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.34465e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +107.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4888,7 +4895,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.345e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4924,13 +4931,13 @@ change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.325983 -55216.517 227.68 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +105.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4940,7 +4947,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -4976,13 +4983,13 @@ change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.301005 -55943.492 228.4 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +99.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -4992,7 +4999,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5028,13 +5035,13 @@ change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.275705 -56647.446 229.12 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +108.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5044,7 +5051,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5080,13 +5087,13 @@ change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.250095 -57328.932 229.84 -Loop time of 2.5034e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +102.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5096,7 +5103,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.503e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5132,13 +5139,13 @@ change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.224183 -57988.488 230.56 -Loop time of 3.93391e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.46386e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +103.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5148,7 +5155,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.934e-06 | | |100.00 +Other | | 8.464e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5184,13 +5191,13 @@ change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.197979 -58626.642 231.28 -Loop time of 2.80142e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.40425e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +101.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5200,7 +5207,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.801e-06 | | |100.00 +Other | | 8.404e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -5236,13 +5243,13 @@ change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale 1.0010 # no energy minimization needed for zincblende run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.43745 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.069 | 9.069 | 9.069 Mbytes Step Temp PotEng Press Volume 0 0 -27.171493 -59243.908 232 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 8 atoms +Loop time of 8.28505e-06 on 4 procs for 0 steps with 8 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +90.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -5252,7 +5259,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 8.285e-06 | | |100.00 Nlocal: 2 ave 5 max 1 min Histogram: 3 0 0 0 0 0 0 0 0 1 diff --git a/examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.1 b/examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.1 similarity index 72% rename from examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.1 rename to examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.1 index 778a9389f8..401f1f8efd 100644 --- a/examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.1 +++ b/examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test Vashishta potential for quartz units metal @@ -18,6 +19,7 @@ replicate 4 4 4 triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) 1 by 1 by 1 MPI processor grid 576 atoms + Time spent = 0.000264406 secs velocity all create 2000.0 277387 mom yes displace_atoms all move 0.05 0.9 0.4 units box @@ -38,13 +40,18 @@ timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 10.3 ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 8.64433 Mbytes + binsize = 5.15, bins = 6 4 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta/table, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 9.78 | 9.78 | 9.78 Mbytes Step Temp E_pair E_mol TotEng Press 0 2000 -5280.8748 0 -5132.2257 -20501.94 10 895.65274 -5198.4018 0 -5131.8328 419.5556 @@ -57,20 +64,20 @@ Step Temp E_pair E_mol TotEng Press 80 1020.1046 -5207.6761 0 -5131.8572 -13488.691 90 912.75537 -5199.6508 0 -5131.8106 2715.7189 100 998.97595 -5206.1006 0 -5131.8521 6024.5628 -Loop time of 0.57105 on 1 procs for 100 steps with 576 atoms +Loop time of 0.613275 on 1 procs for 100 steps with 576 atoms -Performance: 15.130 ns/day, 1.586 hours/ns, 175.116 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 14.088 ns/day, 1.704 hours/ns, 163.059 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.49037 | 0.49037 | 0.49037 | 0.0 | 85.87 -Neigh | 0.075116 | 0.075116 | 0.075116 | 0.0 | 13.15 -Comm | 0.0039296 | 0.0039296 | 0.0039296 | 0.0 | 0.69 -Output | 0.00010204 | 0.00010204 | 0.00010204 | 0.0 | 0.02 -Modify | 0.00090742 | 0.00090742 | 0.00090742 | 0.0 | 0.16 -Other | | 0.0006287 | | | 0.11 +Pair | 0.52478 | 0.52478 | 0.52478 | 0.0 | 85.57 +Neigh | 0.081344 | 0.081344 | 0.081344 | 0.0 | 13.26 +Comm | 0.0052247 | 0.0052247 | 0.0052247 | 0.0 | 0.85 +Output | 0.00029302 | 0.00029302 | 0.00029302 | 0.0 | 0.05 +Modify | 0.00088763 | 0.00088763 | 0.00088763 | 0.0 | 0.14 +Other | | 0.0007463 | | | 0.12 Nlocal: 576 ave 576 max 576 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.4 b/examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.4 similarity index 72% rename from examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.4 rename to examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.4 index 6a1af80724..4d1e7f5dcc 100644 --- a/examples/vashishta/log.5Oct16.vashishta.table.sio2.g++.4 +++ b/examples/vashishta/log.27Nov18.vashishta.table.sio2.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # test Vashishta potential for quartz units metal @@ -18,6 +19,7 @@ replicate 4 4 4 triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) 2 by 1 by 2 MPI processor grid 576 atoms + Time spent = 0.000568867 secs velocity all create 2000.0 277387 mom yes displace_atoms all move 0.05 0.9 0.4 units box @@ -38,13 +40,18 @@ timestep 0.001 run 100 Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 10.3 ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 8.60573 Mbytes + binsize = 5.15, bins = 6 4 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair vashishta/table, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 8.954 | 8.954 | 8.954 Mbytes Step Temp E_pair E_mol TotEng Press 0 2000 -5280.8748 0 -5132.2257 -20501.94 10 895.65274 -5198.4018 0 -5131.8328 419.5556 @@ -57,20 +64,20 @@ Step Temp E_pair E_mol TotEng Press 80 1020.1046 -5207.6761 0 -5131.8572 -13488.691 90 912.75537 -5199.6508 0 -5131.8106 2715.7189 100 998.97595 -5206.1006 0 -5131.8521 6024.5628 -Loop time of 0.16443 on 4 procs for 100 steps with 576 atoms +Loop time of 0.245452 on 4 procs for 100 steps with 576 atoms -Performance: 52.545 ns/day, 0.457 hours/ns, 608.161 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 35.200 ns/day, 0.682 hours/ns, 407.412 timesteps/s +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.12531 | 0.13171 | 0.13599 | 1.1 | 80.10 -Neigh | 0.017477 | 0.017983 | 0.018685 | 0.3 | 10.94 -Comm | 0.0094879 | 0.01374 | 0.020683 | 3.8 | 8.36 -Output | 0.00022864 | 0.00025094 | 0.00027585 | 0.1 | 0.15 -Modify | 0.00027609 | 0.00028592 | 0.00029564 | 0.0 | 0.17 -Other | | 0.0004643 | | | 0.28 +Pair | 0.18883 | 0.19598 | 0.21164 | 2.1 | 79.85 +Neigh | 0.01932 | 0.019972 | 0.020683 | 0.4 | 8.14 +Comm | 0.011552 | 0.028067 | 0.03599 | 5.9 | 11.43 +Output | 0.00027466 | 0.0005008 | 0.00109 | 0.0 | 0.20 +Modify | 0.00035977 | 0.00036436 | 0.00037313 | 0.0 | 0.15 +Other | | 0.0005662 | | | 0.23 Nlocal: 144 ave 146 max 143 min Histogram: 2 0 0 1 0 0 0 0 0 1 diff --git a/examples/vashishta/log.5Oct16.indiumphosphide.g++.4 b/examples/vashishta/log.5Oct16.indiumphosphide.g++.4 deleted file mode 100644 index 71dc3350e8..0000000000 --- a/examples/vashishta/log.5Oct16.indiumphosphide.g++.4 +++ /dev/null @@ -1,128 +0,0 @@ -LAMMPS (5 Oct 2016) -# calculate the energy volume curve for InP zincblende - -# define volume range and filename - -variable ndelta equal 100 -variable volatom_min equal 20.0 -variable volatom_max equal 29.0 -variable evsvolfile string evsvol.dat - -# set up cell - -units metal - -boundary p p p - -# setup loop variables for box volume - -variable amin equal ${volatom_min}^(1/3)*2 -variable amin equal 20^(1/3)*2 -variable delta equal (${volatom_max}-${volatom_min})/${ndelta} -variable delta equal (29-${volatom_min})/${ndelta} -variable delta equal (29-20)/${ndelta} -variable delta equal (29-20)/100 -variable scale equal (${delta}/v_volatom+1)^(1/3) -variable scale equal (0.09/v_volatom+1)^(1/3) - -# set up 8 atom InP zincblende unit cell - -lattice diamond ${amin} -lattice diamond 5.42883523318981 -Lattice spacing in x,y,z = 5.42884 5.42884 5.42884 - -region box prism 0 1 0 1 0 1 0 0 0 - -create_box 2 box -Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) - 1 by 2 by 2 MPI processor grid - -create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 -Created 8 atoms - -mass 1 114.76 -mass 2 30.98 - -# choose potential - -pair_style vashishta -pair_coeff * * InP.vashishta In P -Reading potential file InP.vashishta with DATE: 2015-10-14 - -# setup neighbor style - -neighbor 1.0 nsq -neigh_modify once no every 1 delay 0 check yes - -# setup output - -thermo_style custom step temp pe press vol -thermo_modify norm no -variable volatom equal vol/atoms -variable eatom equal pe/atoms -print "# Volume [A^3/atom] Energy [eV/atom]" file ${evsvolfile} -print "# Volume [A^3/atom] Energy [eV/atom]" file evsvol.dat -# Volume [A^3/atom] Energy [eV/atom] - -# loop over range of volumes - -label loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.00149775560818 remap - triclinic box = (-0.00406553 0 0) to (5.4329 5.42884 5.42884) with tilt (0 0 0) - triclinic box = (-0.00406553 -0.00406553 0) to (5.4329 5.4329 5.42884) with tilt (0 0 0) - triclinic box = (-0.00406553 -0.00406553 -0.00406553) to (5.4329 5.4329 5.4329) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7 - ghost atom cutoff = 7 -Memory usage per processor = 2.33394 Mbytes -Step Temp PotEng Press Volume - 0 0 -24.633958 315900.5 160.72 -Loop time of 3.09944e-06 on 4 procs for 0 steps with 8 atoms - -0.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 3.099e-06 | | |100.00 - -Nlocal: 2 ave 2 max 2 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Nghost: 320 ave 320 max 320 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 140 ave 140 max 140 min -Histogram: 4 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.09 -3.07924477327226 - -next i -jump SELF loop -ERROR: Label wasn't found in input script (../input.cpp:207) diff --git a/examples/vashishta/log.5Oct16.sio2.g++.4 b/examples/vashishta/log.5Oct16.sio2.g++.4 deleted file mode 100644 index baa2942bd0..0000000000 --- a/examples/vashishta/log.5Oct16.sio2.g++.4 +++ /dev/null @@ -1,86 +0,0 @@ -LAMMPS (5 Oct 2016) -# test Vashishta potential for quartz - -units metal -boundary p p p - -atom_style atomic - -read_data data.quartz - triclinic box = (0 0 0) to (4.9134 4.25513 5.4052) with tilt (-2.4567 0 0) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 9 atoms - -replicate 4 4 4 - triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) - 2 by 1 by 2 MPI processor grid - 576 atoms -velocity all create 2000.0 277387 mom yes -displace_atoms all move 0.05 0.9 0.4 units box - -pair_style vashishta -pair_coeff * * SiO.1990.vashishta Si O -Reading potential file SiO.1990.vashishta with DATE: 2015-10-14 - -neighbor 0.3 bin -neigh_modify delay 10 - -fix 1 all nve -thermo 10 -timestep 0.001 - -#dump 1 all cfg 10 *.cfg mass type xs ys zs vx vy vz fx fy fz -#dump_modify 1 element Si O - -run 100 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10.3 - ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 2.50221 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 2000 -5280.875 0 -5132.2259 -20502.321 - 10 895.65237 -5198.402 0 -5131.833 419.34676 - 20 932.93463 -5201.1569 0 -5131.8169 -21407.961 - 30 936.09591 -5201.3998 0 -5131.8248 -32531.168 - 40 930.05159 -5201.0073 0 -5131.8816 -46445.212 - 50 904.64676 -5199.062 0 -5131.8245 -31402.385 - 60 1005.5353 -5206.5725 0 -5131.8365 -29790.442 - 70 941.02343 -5201.7644 0 -5131.8232 -23046.796 - 80 1020.1044 -5207.6763 0 -5131.8574 -13488.675 - 90 912.75535 -5199.651 0 -5131.8108 2715.5897 - 100 998.97588 -5206.1008 0 -5131.8523 6024.3651 -Loop time of 0.595389 on 4 procs for 100 steps with 576 atoms - -Performance: 14.512 ns/day, 1.654 hours/ns, 167.957 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.51621 | 0.52629 | 0.53686 | 1.1 | 88.39 -Neigh | 0.017571 | 0.018024 | 0.018574 | 0.3 | 3.03 -Comm | 0.038951 | 0.050033 | 0.06044 | 3.7 | 8.40 -Output | 0.00020981 | 0.00022781 | 0.00025916 | 0.1 | 0.04 -Modify | 0.00025797 | 0.00027782 | 0.00031734 | 0.1 | 0.05 -Other | | 0.0005327 | | | 0.09 - -Nlocal: 144 ave 146 max 143 min -Histogram: 2 0 0 1 0 0 0 0 0 1 -Nghost: 3031 ave 3032 max 3030 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 52617.5 ave 53258 max 52208 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 210470 -Ave neighs/atom = 365.399 -Neighbor list builds = 10 -Dangerous builds = 10 - -Total wall time: 0:00:00 diff --git a/examples/vashishta/log.5Oct16.vashishta.inp.g++.1 b/examples/vashishta/log.5Oct16.vashishta.inp.g++.1 deleted file mode 100644 index ac454470e9..0000000000 --- a/examples/vashishta/log.5Oct16.vashishta.inp.g++.1 +++ /dev/null @@ -1,5276 +0,0 @@ -LAMMPS (5 Oct 2016) -# calculate the energy volume curve for InP zincblende - -# define volume range and filename - -variable ndelta equal 100 -variable volatom_min equal 20.0 -variable volatom_max equal 29.0 -variable evsvolfile string evsvol.dat - -# set up cell - -units metal - -boundary p p p - -# setup loop variables for box volume - -variable amin equal ${volatom_min}^(1/3)*2 -variable amin equal 20^(1/3)*2 -variable delta equal (${volatom_max}-${volatom_min})/${ndelta} -variable delta equal (29-${volatom_min})/${ndelta} -variable delta equal (29-20)/${ndelta} -variable delta equal (29-20)/100 -variable scale equal (${delta}/v_volatom+1)^(1/3) -variable scale equal (0.09/v_volatom+1)^(1/3) - -# set up 8 atom InP zincblende unit cell - -lattice diamond ${amin} -lattice diamond 5.42883523318981 -Lattice spacing in x,y,z = 5.42884 5.42884 5.42884 - -region box prism 0 1 0 1 0 1 0 0 0 - -create_box 2 box -Created triclinic box = (0 0 0) to (5.42884 5.42884 5.42884) with tilt (0 0 0) - 1 by 1 by 1 MPI processor grid - -create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 -Created 8 atoms - -mass 1 114.76 -mass 2 30.98 - -# choose potential - -pair_style vashishta -pair_coeff * * InP.vashishta In P -Reading potential file InP.vashishta with DATE: 2015-10-14 - -# setup neighbor style - -neighbor 1.0 nsq -neigh_modify once no every 1 delay 0 check yes - -# setup output - -thermo_style custom step temp pe press vol -thermo_modify norm no -variable volatom equal vol/atoms -variable eatom equal pe/atoms -print "# Volume [A^3/atom] Energy [eV/atom]" file ${evsvolfile} -print "# Volume [A^3/atom] Energy [eV/atom]" file evsvol.dat -# Volume [A^3/atom] Energy [eV/atom] - -# loop over range of volumes - -label loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale ${scale} remap -change_box all x scale 1.00149775560818 y scale 1.00149775560818 z scale 1.00149775560818 remap - triclinic box = (-0.00406553 0 0) to (5.4329 5.42884 5.42884) with tilt (0 0 0) - triclinic box = (-0.00406553 -0.00406553 0) to (5.4329 5.4329 5.42884) with tilt (0 0 0) - triclinic box = (-0.00406553 -0.00406553 -0.00406553) to (5.4329 5.4329 5.4329) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7 - ghost atom cutoff = 7 -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -24.633958 315900.5 160.72 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.09 -3.07924477327226 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149105588627 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale ${scale} remap -change_box all x scale 1.00149105588627 y scale 1.00149105588627 z scale 1.00149105588627 remap - triclinic box = (-0.00811894 -0.00406553 -0.00406553) to (5.43695 5.4329 5.4329) with tilt (0 0 0) - triclinic box = (-0.00811894 -0.00811894 -0.00406553) to (5.43695 5.43695 5.4329) with tilt (0 0 0) - triclinic box = (-0.00811894 -0.00811894 -0.00811894) to (5.43695 5.43695 5.43695) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -24.773834 306658.04 161.44 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.1799999999997 -3.09672920462219 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00148441583558 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale ${scale} remap -change_box all x scale 1.00148441583558 y scale 1.00148441583558 z scale 1.00148441583558 remap - triclinic box = (-0.0121603 -0.00811894 -0.00811894) to (5.441 5.43695 5.43695) with tilt (0 0 0) - triclinic box = (-0.0121603 -0.0121603 -0.00811894) to (5.441 5.441 5.43695) with tilt (0 0 0) - triclinic box = (-0.0121603 -0.0121603 -0.0121603) to (5.441 5.441 5.441) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -24.909615 297676.86 162.16 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.2699999999996 -3.11370182923915 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00147783466245 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale ${scale} remap -change_box all x scale 1.00147783466245 y scale 1.00147783466245 z scale 1.00147783466245 remap - triclinic box = (-0.0161898 -0.0121603 -0.0121603) to (5.44502 5.441 5.441) with tilt (0 0 0) - triclinic box = (-0.0161898 -0.0161898 -0.0121603) to (5.44502 5.44502 5.441) with tilt (0 0 0) - triclinic box = (-0.0161898 -0.0161898 -0.0161898) to (5.44502 5.44502 5.44502) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.041417 288949.17 162.88 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.3599999999999 -3.13017710427322 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00147131158722 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale ${scale} remap -change_box all x scale 1.00147131158722 y scale 1.00147131158722 z scale 1.00147131158722 remap - triclinic box = (-0.0202073 -0.0161898 -0.0161898) to (5.44904 5.44502 5.44502) with tilt (0 0 0) - triclinic box = (-0.0202073 -0.0202073 -0.0161898) to (5.44904 5.44904 5.44502) with tilt (0 0 0) - triclinic box = (-0.0202073 -0.0202073 -0.0202073) to (5.44904 5.44904 5.44904) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.169352 280467.46 163.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.4500000000002 -3.14616905711537 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00146484584395 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale ${scale} remap -change_box all x scale 1.00146484584395 y scale 1.00146484584395 z scale 1.00146484584395 remap - triclinic box = (-0.0242131 -0.0202073 -0.0202073) to (5.45305 5.44904 5.44904) with tilt (0 0 0) - triclinic box = (-0.0242131 -0.0242131 -0.0202073) to (5.45305 5.45305 5.44904) with tilt (0 0 0) - triclinic box = (-0.0242131 -0.0242131 -0.0242131) to (5.45305 5.45305 5.45305) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.29353 272224.44 164.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.5400000000003 -3.16169129950254 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0014584366801 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale ${scale} remap -change_box all x scale 1.0014584366801 y scale 1.0014584366801 z scale 1.0014584366801 remap - triclinic box = (-0.0282073 -0.0242131 -0.0242131) to (5.45704 5.45305 5.45305) with tilt (0 0 0) - triclinic box = (-0.0282073 -0.0282073 -0.0242131) to (5.45704 5.45704 5.45305) with tilt (0 0 0) - triclinic box = (-0.0282073 -0.0282073 -0.0282073) to (5.45704 5.45704 5.45704) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.414056 264213.09 165.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.6300000000001 -3.17675704110846 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00145208335626 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale ${scale} remap -change_box all x scale 1.00145208335626 y scale 1.00145208335626 z scale 1.00145208335626 remap - triclinic box = (-0.0321898 -0.0282073 -0.0282073) to (5.46103 5.45704 5.45704) with tilt (0 0 0) - triclinic box = (-0.0321898 -0.0321898 -0.0282073) to (5.46103 5.46103 5.45704) with tilt (0 0 0) - triclinic box = (-0.0321898 -0.0321898 -0.0321898) to (5.46103 5.46103 5.46103) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.531033 256426.58 165.76 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.7200000000001 -3.19137910264164 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00144578514582 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale ${scale} remap -change_box all x scale 1.00144578514582 y scale 1.00144578514582 z scale 1.00144578514582 remap - triclinic box = (-0.0361608 -0.0321898 -0.0321898) to (5.465 5.46103 5.46103) with tilt (0 0 0) - triclinic box = (-0.0361608 -0.0361608 -0.0321898) to (5.465 5.465 5.46103) with tilt (0 0 0) - triclinic box = (-0.0361608 -0.0361608 -0.0361608) to (5.465 5.465 5.465) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.644559 248858.32 166.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.8100000000003 -3.20556992846954 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00143954133473 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale ${scale} remap -change_box all x scale 1.00143954133473 y scale 1.00143954133473 z scale 1.00143954133473 remap - triclinic box = (-0.0401203 -0.0361608 -0.0361608) to (5.46896 5.465 5.465) with tilt (0 0 0) - triclinic box = (-0.0401203 -0.0401203 -0.0361608) to (5.46896 5.46896 5.465) with tilt (0 0 0) - triclinic box = (-0.0401203 -0.0401203 -0.0401203) to (5.46896 5.46896 5.46896) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.754685 240961.62 167.2 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.9000000000003 -3.21933565066766 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00143335122124 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale ${scale} remap -change_box all x scale 1.00143335122124 y scale 1.00143335122124 z scale 1.00143335122124 remap - triclinic box = (-0.0440686 -0.0401203 -0.0401203) to (5.4729 5.46896 5.46896) with tilt (0 0 0) - triclinic box = (-0.0440686 -0.0440686 -0.0401203) to (5.4729 5.4729 5.46896) with tilt (0 0 0) - triclinic box = (-0.0440686 -0.0440686 -0.0440686) to (5.4729 5.4729 5.4729) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.861049 232444.2 167.92 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -20.9900000000005 -3.23263106528897 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00142721411559 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale ${scale} remap -change_box all x scale 1.00142721411559 y scale 1.00142721411559 z scale 1.00142721411559 remap - triclinic box = (-0.0480055 -0.0440686 -0.0440686) to (5.47684 5.4729 5.4729) with tilt (0 0 0) - triclinic box = (-0.0480055 -0.0480055 -0.0440686) to (5.47684 5.47684 5.4729) with tilt (0 0 0) - triclinic box = (-0.0480055 -0.0480055 -0.0480055) to (5.47684 5.47684 5.47684) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -25.963633 224145.09 168.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.0800000000004 -3.24545418655742 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00142112933981 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale ${scale} remap -change_box all x scale 1.00142112933981 y scale 1.00142112933981 z scale 1.00142112933981 remap - triclinic box = (-0.0519313 -0.0480055 -0.0480055) to (5.48077 5.47684 5.47684) with tilt (0 0 0) - triclinic box = (-0.0519313 -0.0519313 -0.0480055) to (5.48077 5.48077 5.47684) with tilt (0 0 0) - triclinic box = (-0.0519313 -0.0519313 -0.0519313) to (5.48077 5.48077 5.48077) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.062537 216058.21 169.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.1700000000001 -3.2578171061398 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00141509622744 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale ${scale} remap -change_box all x scale 1.00141509622744 y scale 1.00141509622744 z scale 1.00141509622744 remap - triclinic box = (-0.0558459 -0.0519313 -0.0519313) to (5.48468 5.48077 5.48077) with tilt (0 0 0) - triclinic box = (-0.0558459 -0.0558459 -0.0519313) to (5.48468 5.48468 5.48077) with tilt (0 0 0) - triclinic box = (-0.0558459 -0.0558459 -0.0558459) to (5.48468 5.48468 5.48468) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.157853 208177.66 170.08 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.2600000000005 -3.26973157905241 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00140911412325 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale ${scale} remap -change_box all x scale 1.00140911412325 y scale 1.00140911412325 z scale 1.00140911412325 remap - triclinic box = (-0.0597495 -0.0558459 -0.0558459) to (5.48858 5.48468 5.48468) with tilt (0 0 0) - triclinic box = (-0.0597495 -0.0597495 -0.0558459) to (5.48858 5.48858 5.48468) with tilt (0 0 0) - triclinic box = (-0.0597495 -0.0597495 -0.0597495) to (5.48858 5.48858 5.48858) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.249672 200497.73 170.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.3500000000002 -3.28120903415515 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00140318238311 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale ${scale} remap -change_box all x scale 1.00140318238311 y scale 1.00140318238311 z scale 1.00140318238311 remap - triclinic box = (-0.0636422 -0.0597495 -0.0597495) to (5.49248 5.48858 5.48858) with tilt (0 0 0) - triclinic box = (-0.0636422 -0.0636422 -0.0597495) to (5.49248 5.49248 5.48858) with tilt (0 0 0) - triclinic box = (-0.0636422 -0.0636422 -0.0636422) to (5.49248 5.49248 5.49248) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.338085 193012.87 171.52 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.4400000000004 -3.29226058428118 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00139730037362 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale ${scale} remap -change_box all x scale 1.00139730037362 y scale 1.00139730037362 z scale 1.00139730037362 remap - triclinic box = (-0.067524 -0.0636422 -0.0636422) to (5.49636 5.49248 5.49248) with tilt (0 0 0) - triclinic box = (-0.067524 -0.067524 -0.0636422) to (5.49636 5.49636 5.49248) with tilt (0 0 0) - triclinic box = (-0.067524 -0.067524 -0.067524) to (5.49636 5.49636 5.49636) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.423176 185717.71 172.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.5300000000002 -3.3028970360141 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00139146747202 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale ${scale} remap -change_box all x scale 1.00139146747202 y scale 1.00139146747202 z scale 1.00139146747202 remap - triclinic box = (-0.071395 -0.067524 -0.067524) to (5.50023 5.49636 5.49636) with tilt (0 0 0) - triclinic box = (-0.071395 -0.071395 -0.067524) to (5.50023 5.50023 5.49636) with tilt (0 0 0) - triclinic box = (-0.071395 -0.071395 -0.071395) to (5.50023 5.50023 5.50023) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.505031 178607.07 172.96 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.6200000000004 -3.31312889912851 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00138568306585 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale ${scale} remap -change_box all x scale 1.00138568306585 y scale 1.00138568306585 z scale 1.00138568306585 remap - triclinic box = (-0.0752552 -0.071395 -0.071395) to (5.50409 5.50023 5.50023) with tilt (0 0 0) - triclinic box = (-0.0752552 -0.0752552 -0.071395) to (5.50409 5.50409 5.50023) with tilt (0 0 0) - triclinic box = (-0.0752552 -0.0752552 -0.0752552) to (5.50409 5.50409 5.50409) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.583731 171675.89 173.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.7100000000001 -3.32296639570479 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00137994655284 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale ${scale} remap -change_box all x scale 1.00137994655284 y scale 1.00137994655284 z scale 1.00137994655284 remap - triclinic box = (-0.0791048 -0.0752552 -0.0752552) to (5.50794 5.50409 5.50409) with tilt (0 0 0) - triclinic box = (-0.0791048 -0.0791048 -0.0752552) to (5.50794 5.50794 5.50409) with tilt (0 0 0) - triclinic box = (-0.0791048 -0.0791048 -0.0791048) to (5.50794 5.50794 5.50794) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.659356 164919.29 174.4 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.7999999999999 -3.33241946893207 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00137425734062 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale ${scale} remap -change_box all x scale 1.00137425734062 y scale 1.00137425734062 z scale 1.00137425734062 remap - triclinic box = (-0.0829438 -0.0791048 -0.0791048) to (5.51178 5.50794 5.50794) with tilt (0 0 0) - triclinic box = (-0.0829438 -0.0829438 -0.0791048) to (5.51178 5.51178 5.50794) with tilt (0 0 0) - triclinic box = (-0.0829438 -0.0829438 -0.0829438) to (5.51178 5.51178 5.51178) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.731982 158332.52 175.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 420 ave 420 max 420 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.89 -3.34149779161019 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00136861484656 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale ${scale} remap -change_box all x scale 1.00136861484656 y scale 1.00136861484656 z scale 1.00136861484656 remap - triclinic box = (-0.0867724 -0.0829438 -0.0829438) to (5.51561 5.51178 5.51178) with tilt (0 0 0) - triclinic box = (-0.0867724 -0.0867724 -0.0829438) to (5.51561 5.51561 5.51178) with tilt (0 0 0) - triclinic box = (-0.0867724 -0.0867724 -0.0867724) to (5.51561 5.51561 5.51561) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.801686 151911 175.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -21.9800000000002 -3.35021077436259 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00136301849755 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale ${scale} remap -change_box all x scale 1.00136301849755 y scale 1.00136301849755 z scale 1.00136301849755 remap - triclinic box = (-0.0905904 -0.0867724 -0.0867724) to (5.51943 5.51561 5.51561) with tilt (0 0 0) - triclinic box = (-0.0905904 -0.0905904 -0.0867724) to (5.51943 5.51943 5.51561) with tilt (0 0 0) - triclinic box = (-0.0905904 -0.0905904 -0.0905904) to (5.51943 5.51943 5.51943) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.868541 145650.26 176.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.0700000000002 -3.35856757357086 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00135746772984 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale ${scale} remap -change_box all x scale 1.00135746772984 y scale 1.00135746772984 z scale 1.00135746772984 remap - triclinic box = (-0.0943981 -0.0905904 -0.0905904) to (5.52323 5.51943 5.51943) with tilt (0 0 0) - triclinic box = (-0.0943981 -0.0943981 -0.0905904) to (5.52323 5.52323 5.51943) with tilt (0 0 0) - triclinic box = (-0.0943981 -0.0943981 -0.0943981) to (5.52323 5.52323 5.52323) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.932617 139545.98 177.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.1600000000005 -3.36657709904146 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00135196198879 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale ${scale} remap -change_box all x scale 1.00135196198879 y scale 1.00135196198879 z scale 1.00135196198879 remap - triclinic box = (-0.0981955 -0.0943981 -0.0943981) to (5.52703 5.52323 5.52323) with tilt (0 0 0) - triclinic box = (-0.0981955 -0.0981955 -0.0943981) to (5.52703 5.52703 5.52323) with tilt (0 0 0) - triclinic box = (-0.0981955 -0.0981955 -0.0981955) to (5.52703 5.52703 5.52703) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -26.993984 133593.97 178 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.2500000000003 -3.37424802141442 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00134650072876 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale ${scale} remap -change_box all x scale 1.00134650072876 y scale 1.00134650072876 z scale 1.00134650072876 remap - triclinic box = (-0.101983 -0.0981955 -0.0981955) to (5.53082 5.52703 5.52703) with tilt (0 0 0) - triclinic box = (-0.101983 -0.101983 -0.0981955) to (5.53082 5.53082 5.52703) with tilt (0 0 0) - triclinic box = (-0.101983 -0.101983 -0.101983) to (5.53082 5.53082 5.53082) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.05271 127790.17 178.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.34 -3.38158877932393 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00134108341287 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale ${scale} remap -change_box all x scale 1.00134108341287 y scale 1.00134108341287 z scale 1.00134108341287 remap - triclinic box = (-0.10576 -0.101983 -0.101983) to (5.53459 5.53082 5.53082) with tilt (0 0 0) - triclinic box = (-0.10576 -0.10576 -0.101983) to (5.53459 5.53459 5.53082) with tilt (0 0 0) - triclinic box = (-0.10576 -0.10576 -0.10576) to (5.53459 5.53459 5.53459) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.108861 122130.61 179.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.4299999999997 -3.38860758631982 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00133570951285 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale ${scale} remap -change_box all x scale 1.00133570951285 y scale 1.00133570951285 z scale 1.00133570951285 remap - triclinic box = (-0.109527 -0.10576 -0.10576) to (5.53836 5.53459 5.53459) with tilt (0 0 0) - triclinic box = (-0.109527 -0.109527 -0.10576) to (5.53836 5.53836 5.53459) with tilt (0 0 0) - triclinic box = (-0.109527 -0.109527 -0.109527) to (5.53836 5.53836 5.53836) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.1625 116611.48 180.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.5199999999998 -3.39531243755874 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00133037850885 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale ${scale} remap -change_box all x scale 1.00133037850885 y scale 1.00133037850885 z scale 1.00133037850885 remap - triclinic box = (-0.113284 -0.109527 -0.109527) to (5.54212 5.53836 5.53836) with tilt (0 0 0) - triclinic box = (-0.113284 -0.113284 -0.109527) to (5.54212 5.54212 5.53836) with tilt (0 0 0) - triclinic box = (-0.113284 -0.113284 -0.113284) to (5.54212 5.54212 5.54212) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.213689 111229.06 180.88 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.6099999999997 -3.40171111627368 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00132508988931 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale ${scale} remap -change_box all x scale 1.00132508988931 y scale 1.00132508988931 z scale 1.00132508988931 remap - triclinic box = (-0.117031 -0.113284 -0.113284) to (5.54587 5.54212 5.54212) with tilt (0 0 0) - triclinic box = (-0.117031 -0.117031 -0.113284) to (5.54587 5.54587 5.54212) with tilt (0 0 0) - triclinic box = (-0.117031 -0.117031 -0.117031) to (5.54587 5.54587 5.54587) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.26249 105979.74 181.6 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.6999999999996 -3.40781120002994 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00131984315076 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale ${scale} remap -change_box all x scale 1.00131984315076 y scale 1.00131984315076 z scale 1.00131984315076 remap - triclinic box = (-0.120768 -0.117031 -0.117031) to (5.5496 5.54587 5.54587) with tilt (0 0 0) - triclinic box = (-0.120768 -0.120768 -0.117031) to (5.5496 5.5496 5.54587) with tilt (0 0 0) - triclinic box = (-0.120768 -0.120768 -0.120768) to (5.5496 5.5496 5.5496) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.308961 100860.02 182.32 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.7899999999997 -3.4136200667752 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00131463779767 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale ${scale} remap -change_box all x scale 1.00131463779767 y scale 1.00131463779767 z scale 1.00131463779767 remap - triclinic box = (-0.124495 -0.120768 -0.120768) to (5.55333 5.5496 5.5496) with tilt (0 0 0) - triclinic box = (-0.124495 -0.124495 -0.120768) to (5.55333 5.55333 5.5496) with tilt (0 0 0) - triclinic box = (-0.124495 -0.124495 -0.124495) to (5.55333 5.55333 5.55333) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.353159 95866.497 183.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.88 -3.41914490069132 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00130947334229 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale ${scale} remap -change_box all x scale 1.00130947334229 y scale 1.00130947334229 z scale 1.00130947334229 remap - triclinic box = (-0.128212 -0.124495 -0.124495) to (5.55705 5.55333 5.55333) with tilt (0 0 0) - triclinic box = (-0.128212 -0.128212 -0.124495) to (5.55705 5.55705 5.55333) with tilt (0 0 0) - triclinic box = (-0.128212 -0.128212 -0.128212) to (5.55705 5.55705 5.55705) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.395142 90995.879 183.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -22.9699999999997 -3.424392697855 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00130434930454 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale ${scale} remap -change_box all x scale 1.00130434930454 y scale 1.00130434930454 z scale 1.00130434930454 remap - triclinic box = (-0.13192 -0.128212 -0.128212) to (5.56076 5.55705 5.55705) with tilt (0 0 0) - triclinic box = (-0.13192 -0.13192 -0.128212) to (5.56076 5.56076 5.55705) with tilt (0 0 0) - triclinic box = (-0.13192 -0.13192 -0.13192) to (5.56076 5.56076 5.56076) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.434962 86244.961 184.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.0599999999998 -3.42937027171443 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00129926521177 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale ${scale} remap -change_box all x scale 1.00129926521177 y scale 1.00129926521177 z scale 1.00129926521177 remap - triclinic box = (-0.135618 -0.13192 -0.13192) to (5.56445 5.56076 5.56076) with tilt (0 0 0) - triclinic box = (-0.135618 -0.135618 -0.13192) to (5.56445 5.56445 5.56076) with tilt (0 0 0) - triclinic box = (-0.135618 -0.135618 -0.135618) to (5.56445 5.56445 5.56445) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.472674 81610.631 185.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.1499999999995 -3.43408425838794 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00129422059873 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale ${scale} remap -change_box all x scale 1.00129422059873 y scale 1.00129422059873 z scale 1.00129422059873 remap - triclinic box = (-0.139307 -0.135618 -0.135618) to (5.56814 5.56445 5.56445) with tilt (0 0 0) - triclinic box = (-0.139307 -0.139307 -0.135618) to (5.56814 5.56814 5.56445) with tilt (0 0 0) - triclinic box = (-0.139307 -0.139307 -0.139307) to (5.56814 5.56814 5.56814) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.508329 77089.868 185.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.2399999999998 -3.43854112179202 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00128921500731 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale ${scale} remap -change_box all x scale 1.00128921500731 y scale 1.00128921500731 z scale 1.00128921500731 remap - triclinic box = (-0.142986 -0.139307 -0.139307) to (5.57182 5.56814 5.56814) with tilt (0 0 0) - triclinic box = (-0.142986 -0.142986 -0.139307) to (5.57182 5.57182 5.56814) with tilt (0 0 0) - triclinic box = (-0.142986 -0.142986 -0.142986) to (5.57182 5.57182 5.57182) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.541977 72679.738 186.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 560 ave 560 max 560 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 560 -Ave neighs/atom = 70 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.3299999999999 -3.4427471586037 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0012842479865 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale ${scale} remap -change_box all x scale 1.0012842479865 y scale 1.0012842479865 z scale 1.0012842479865 remap - triclinic box = (-0.146656 -0.142986 -0.142986) to (5.57549 5.57182 5.57182) with tilt (0 0 0) - triclinic box = (-0.146656 -0.146656 -0.142986) to (5.57549 5.57549 5.57182) with tilt (0 0 0) - triclinic box = (-0.146656 -0.146656 -0.146656) to (5.57549 5.57549 5.57549) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.573668 68377.392 187.36 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.4199999999997 -3.44670850306418 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00127931909221 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale ${scale} remap -change_box all x scale 1.00127931909221 y scale 1.00127931909221 z scale 1.00127931909221 remap - triclinic box = (-0.150316 -0.146656 -0.146656) to (5.57915 5.57549 5.57549) with tilt (0 0 0) - triclinic box = (-0.150316 -0.150316 -0.146656) to (5.57915 5.57915 5.57549) with tilt (0 0 0) - triclinic box = (-0.150316 -0.150316 -0.150316) to (5.57915 5.57915 5.57915) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.603449 64180.061 188.08 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.5100000000001 -3.45043113162863 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00127442788711 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale ${scale} remap -change_box all x scale 1.00127442788711 y scale 1.00127442788711 z scale 1.00127442788711 remap - triclinic box = (-0.153967 -0.150316 -0.150316) to (5.5828 5.57915 5.57915) with tilt (0 0 0) - triclinic box = (-0.153967 -0.153967 -0.150316) to (5.5828 5.5828 5.57915) with tilt (0 0 0) - triclinic box = (-0.153967 -0.153967 -0.153967) to (5.5828 5.5828 5.5828) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.631367 60085.056 188.8 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.5999999999998 -3.45392086746794 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00126957394058 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale ${scale} remap -change_box all x scale 1.00126957394058 y scale 1.00126957394058 z scale 1.00126957394058 remap - triclinic box = (-0.157608 -0.153967 -0.153967) to (5.58644 5.5828 5.5828) with tilt (0 0 0) - triclinic box = (-0.157608 -0.157608 -0.153967) to (5.58644 5.58644 5.5828) with tilt (0 0 0) - triclinic box = (-0.157608 -0.157608 -0.157608) to (5.58644 5.58644 5.58644) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.657467 56089.763 189.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.6899999999998 -3.45718338482772 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0012647568285 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale ${scale} remap -change_box all x scale 1.0012647568285 y scale 1.0012647568285 z scale 1.0012647568285 remap - triclinic box = (-0.161241 -0.157608 -0.157608) to (5.59008 5.58644 5.58644) with tilt (0 0 0) - triclinic box = (-0.161241 -0.161241 -0.157608) to (5.59008 5.59008 5.58644) with tilt (0 0 0) - triclinic box = (-0.161241 -0.161241 -0.161241) to (5.59008 5.59008 5.59008) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.681794 52191.643 190.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.78 -3.46022421324915 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125997613317 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale ${scale} remap -change_box all x scale 1.00125997613317 y scale 1.00125997613317 z scale 1.00125997613317 remap - triclinic box = (-0.164864 -0.161241 -0.161241) to (5.5937 5.59008 5.59008) with tilt (0 0 0) - triclinic box = (-0.164864 -0.164864 -0.161241) to (5.5937 5.5937 5.59008) with tilt (0 0 0) - triclinic box = (-0.164864 -0.164864 -0.164864) to (5.5937 5.5937 5.5937) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.70439 48388.229 190.96 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.8699999999999 -3.46304874165698 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125523144319 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale ${scale} remap -change_box all x scale 1.00125523144319 y scale 1.00125523144319 z scale 1.00125523144319 remap - triclinic box = (-0.168478 -0.164864 -0.164864) to (5.59731 5.5937 5.5937) with tilt (0 0 0) - triclinic box = (-0.168478 -0.168478 -0.164864) to (5.59731 5.59731 5.5937) with tilt (0 0 0) - triclinic box = (-0.168478 -0.168478 -0.168478) to (5.59731 5.59731 5.59731) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.725298 44677.122 191.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -23.9599999999996 -3.46566222231901 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125052235334 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale ${scale} remap -change_box all x scale 1.00125052235334 y scale 1.00125052235334 z scale 1.00125052235334 remap - triclinic box = (-0.172083 -0.168478 -0.168478) to (5.60092 5.59731 5.59731) with tilt (0 0 0) - triclinic box = (-0.172083 -0.172083 -0.168478) to (5.60092 5.60092 5.59731) with tilt (0 0 0) - triclinic box = (-0.172083 -0.172083 -0.172083) to (5.60092 5.60092 5.60092) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.744558 41055.991 192.4 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.0499999999997 -3.46806977468166 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00124584846443 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale ${scale} remap -change_box all x scale 1.00124584846443 y scale 1.00124584846443 z scale 1.00124584846443 remap - triclinic box = (-0.175679 -0.172083 -0.172083) to (5.60451 5.60092 5.60092) with tilt (0 0 0) - triclinic box = (-0.175679 -0.175679 -0.172083) to (5.60451 5.60451 5.60092) with tilt (0 0 0) - triclinic box = (-0.175679 -0.175679 -0.175679) to (5.60451 5.60451 5.60451) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.762211 37522.57 193.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.1399999999998 -3.47027638908584 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00124120938324 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale ${scale} remap -change_box all x scale 1.00124120938324 y scale 1.00124120938324 z scale 1.00124120938324 remap - triclinic box = (-0.179267 -0.175679 -0.175679) to (5.6081 5.60451 5.60451) with tilt (0 0 0) - triclinic box = (-0.179267 -0.179267 -0.175679) to (5.6081 5.6081 5.60451) with tilt (0 0 0) - triclinic box = (-0.179267 -0.179267 -0.179267) to (5.6081 5.6081 5.6081) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.778295 34074.656 193.84 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.2299999999998 -3.47228693036723 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00123660472238 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale ${scale} remap -change_box all x scale 1.00123660472238 y scale 1.00123660472238 z scale 1.00123660472238 remap - triclinic box = (-0.182845 -0.179267 -0.179267) to (5.61168 5.6081 5.6081) with tilt (0 0 0) - triclinic box = (-0.182845 -0.182845 -0.179267) to (5.61168 5.61168 5.6081) with tilt (0 0 0) - triclinic box = (-0.182845 -0.182845 -0.182845) to (5.61168 5.61168 5.61168) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.792849 30710.109 194.56 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.3199999999999 -3.47410614134514 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00123203410018 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale ${scale} remap -change_box all x scale 1.00123203410018 y scale 1.00123203410018 z scale 1.00123203410018 remap - triclinic box = (-0.186414 -0.182845 -0.182845) to (5.61525 5.61168 5.61168) with tilt (0 0 0) - triclinic box = (-0.186414 -0.186414 -0.182845) to (5.61525 5.61525 5.61168) with tilt (0 0 0) - triclinic box = (-0.186414 -0.186414 -0.186414) to (5.61525 5.61525 5.61525) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.805909 27426.844 195.28 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.4099999999996 -3.47573864620345 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00122749714061 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale ${scale} remap -change_box all x scale 1.00122749714061 y scale 1.00122749714061 z scale 1.00122749714061 remap - triclinic box = (-0.189975 -0.186414 -0.186414) to (5.61881 5.61525 5.61525) with tilt (0 0 0) - triclinic box = (-0.189975 -0.189975 -0.186414) to (5.61881 5.61881 5.61525) with tilt (0 0 0) - triclinic box = (-0.189975 -0.189975 -0.189975) to (5.61881 5.61881 5.61881) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.817512 24222.838 196 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.4999999999996 -3.47718895376758 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00122299347313 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale ${scale} remap -change_box all x scale 1.00122299347313 y scale 1.00122299347313 z scale 1.00122299347313 remap - triclinic box = (-0.193527 -0.189975 -0.189975) to (5.62236 5.61881 5.61881) with tilt (0 0 0) - triclinic box = (-0.193527 -0.193527 -0.189975) to (5.62236 5.62236 5.61881) with tilt (0 0 0) - triclinic box = (-0.193527 -0.193527 -0.193527) to (5.62236 5.62236 5.62236) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.827692 21096.12 196.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.5899999999993 -3.4784614606809 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00121852273265 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale ${scale} remap -change_box all x scale 1.00121852273265 y scale 1.00121852273265 z scale 1.00121852273265 remap - triclinic box = (-0.197071 -0.193527 -0.193527) to (5.62591 5.62236 5.62236) with tilt (0 0 0) - triclinic box = (-0.197071 -0.197071 -0.193527) to (5.62591 5.62591 5.62236) with tilt (0 0 0) - triclinic box = (-0.197071 -0.197071 -0.197071) to (5.62591 5.62591 5.62591) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.836484 18044.775 197.44 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.6799999999993 -3.47956045448403 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00121408455937 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale ${scale} remap -change_box all x scale 1.00121408455937 y scale 1.00121408455937 z scale 1.00121408455937 remap - triclinic box = (-0.200605 -0.197071 -0.197071) to (5.62944 5.62591 5.62591) with tilt (0 0 0) - triclinic box = (-0.200605 -0.200605 -0.197071) to (5.62944 5.62944 5.62591) with tilt (0 0 0) - triclinic box = (-0.200605 -0.200605 -0.200605) to (5.62944 5.62944 5.62944) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.843921 15066.941 198.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.769999999999 -3.48049011660029 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120967859874 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale ${scale} remap -change_box all x scale 1.00120967859874 y scale 1.00120967859874 z scale 1.00120967859874 remap - triclinic box = (-0.204132 -0.200605 -0.200605) to (5.63297 5.62944 5.62944) with tilt (0 0 0) - triclinic box = (-0.204132 -0.204132 -0.200605) to (5.63297 5.63297 5.62944) with tilt (0 0 0) - triclinic box = (-0.204132 -0.204132 -0.204132) to (5.63297 5.63297 5.63297) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.850036 12160.805 198.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.859999999999 -3.48125452523046 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120530450131 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale ${scale} remap -change_box all x scale 1.00120530450131 y scale 1.00120530450131 z scale 1.00120530450131 remap - triclinic box = (-0.207649 -0.204132 -0.204132) to (5.63648 5.63297 5.63297) with tilt (0 0 0) - triclinic box = (-0.207649 -0.207649 -0.204132) to (5.63648 5.63648 5.63297) with tilt (0 0 0) - triclinic box = (-0.207649 -0.207649 -0.207649) to (5.63648 5.63648 5.63648) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.854861 9324.604 199.6 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -24.9499999999988 -3.4818576581599 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120096192269 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale ${scale} remap -change_box all x scale 1.00120096192269 y scale 1.00120096192269 z scale 1.00120096192269 remap - triclinic box = (-0.211159 -0.207649 -0.207649) to (5.63999 5.63648 5.63648) with tilt (0 0 0) - triclinic box = (-0.211159 -0.211159 -0.207649) to (5.63999 5.63999 5.63648) with tilt (0 0 0) - triclinic box = (-0.211159 -0.211159 -0.211159) to (5.63999 5.63999 5.63999) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.858427 6556.6223 200.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.0399999999985 -3.48230339548106 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00119665052343 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale ${scale} remap -change_box all x scale 1.00119665052343 y scale 1.00119665052343 z scale 1.00119665052343 remap - triclinic box = (-0.21466 -0.211159 -0.211159) to (5.64349 5.63999 5.63999) with tilt (0 0 0) - triclinic box = (-0.21466 -0.21466 -0.211159) to (5.64349 5.64349 5.63999) with tilt (0 0 0) - triclinic box = (-0.21466 -0.21466 -0.21466) to (5.64349 5.64349 5.64349) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.860764 3855.1909 201.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.1299999999987 -3.48259552223389 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00119236996892 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale ${scale} remap -change_box all x scale 1.00119236996892 y scale 1.00119236996892 z scale 1.00119236996892 remap - triclinic box = (-0.218152 -0.21466 -0.21466) to (5.64699 5.64349 5.64349) with tilt (0 0 0) - triclinic box = (-0.218152 -0.218152 -0.21466) to (5.64699 5.64699 5.64349) with tilt (0 0 0) - triclinic box = (-0.218152 -0.218152 -0.218152) to (5.64699 5.64699 5.64699) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.861902 1218.6858 201.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.2199999999989 -3.48273773096731 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00118811992934 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale ${scale} remap -change_box all x scale 1.00118811992934 y scale 1.00118811992934 z scale 1.00118811992934 remap - triclinic box = (-0.221636 -0.218152 -0.218152) to (5.65047 5.64699 5.64699) with tilt (0 0 0) - triclinic box = (-0.221636 -0.221636 -0.218152) to (5.65047 5.65047 5.64699) with tilt (0 0 0) - triclinic box = (-0.221636 -0.221636 -0.221636) to (5.65047 5.65047 5.65047) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.861869 -1354.4738 202.48 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.3099999999989 -3.48273362422406 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00118390007955 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale ${scale} remap -change_box all x scale 1.00118390007955 y scale 1.00118390007955 z scale 1.00118390007955 remap - triclinic box = (-0.225112 -0.221636 -0.221636) to (5.65395 5.65047 5.65047) with tilt (0 0 0) - triclinic box = (-0.225112 -0.225112 -0.221636) to (5.65395 5.65395 5.65047) with tilt (0 0 0) - triclinic box = (-0.225112 -0.225112 -0.225112) to (5.65395 5.65395 5.65395) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.860694 -3865.8261 203.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.3999999999989 -3.48258671695145 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117971009901 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale ${scale} remap -change_box all x scale 1.00117971009901 y scale 1.00117971009901 z scale 1.00117971009901 remap - triclinic box = (-0.22858 -0.225112 -0.225112) to (5.65742 5.65395 5.65395) with tilt (0 0 0) - triclinic box = (-0.22858 -0.22858 -0.225112) to (5.65742 5.65742 5.65395) with tilt (0 0 0) - triclinic box = (-0.22858 -0.22858 -0.22858) to (5.65742 5.65742 5.65742) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.858404 -6316.8685 203.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.4899999999987 -3.48230043884065 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117554967171 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale ${scale} remap -change_box all x scale 1.00117554967171 y scale 1.00117554967171 z scale 1.00117554967171 remap - triclinic box = (-0.23204 -0.22858 -0.22858) to (5.66088 5.65742 5.65742) with tilt (0 0 0) - triclinic box = (-0.23204 -0.23204 -0.22858) to (5.66088 5.66088 5.65742) with tilt (0 0 0) - triclinic box = (-0.23204 -0.23204 -0.23204) to (5.66088 5.66088 5.66088) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.855025 -8709.0584 204.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.5799999999985 -3.48187813659671 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117141848607 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale ${scale} remap -change_box all x scale 1.00117141848607 y scale 1.00117141848607 z scale 1.00117141848607 remap - triclinic box = (-0.235491 -0.23204 -0.23204) to (5.66433 5.66088 5.66088) with tilt (0 0 0) - triclinic box = (-0.235491 -0.235491 -0.23204) to (5.66433 5.66433 5.66088) with tilt (0 0 0) - triclinic box = (-0.235491 -0.235491 -0.235491) to (5.66433 5.66433 5.66433) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.850585 -11043.815 205.36 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.6699999999982 -3.48132307614154 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00116731623489 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale ${scale} remap -change_box all x scale 1.00116731623489 y scale 1.00116731623489 z scale 1.00116731623489 remap - triclinic box = (-0.238935 -0.235491 -0.235491) to (5.66777 5.66433 5.66433) with tilt (0 0 0) - triclinic box = (-0.238935 -0.238935 -0.235491) to (5.66777 5.66777 5.66433) with tilt (0 0 0) - triclinic box = (-0.238935 -0.238935 -0.238935) to (5.66777 5.66777 5.66777) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.845108 -13322.519 206.08 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.7599999999983 -3.48063844475218 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00116324261524 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale ${scale} remap -change_box all x scale 1.00116324261524 y scale 1.00116324261524 z scale 1.00116324261524 remap - triclinic box = (-0.24237 -0.238935 -0.238935) to (5.67121 5.66777 5.66777) with tilt (0 0 0) - triclinic box = (-0.24237 -0.24237 -0.238935) to (5.67121 5.67121 5.66777) with tilt (0 0 0) - triclinic box = (-0.24237 -0.24237 -0.24237) to (5.67121 5.67121 5.67121) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.838619 -15546.516 206.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.8499999999986 -3.47982735313635 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115919732841 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale ${scale} remap -change_box all x scale 1.00115919732841 y scale 1.00115919732841 z scale 1.00115919732841 remap - triclinic box = (-0.245798 -0.24237 -0.24237) to (5.67463 5.67121 5.67121) with tilt (0 0 0) - triclinic box = (-0.245798 -0.245798 -0.24237) to (5.67463 5.67463 5.67121) with tilt (0 0 0) - triclinic box = (-0.245798 -0.245798 -0.245798) to (5.67463 5.67463 5.67463) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.831143 -17717.116 207.52 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -25.9399999999987 -3.47889283744737 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115518007984 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale ${scale} remap -change_box all x scale 1.00115518007984 y scale 1.00115518007984 z scale 1.00115518007984 remap - triclinic box = (-0.249217 -0.245798 -0.245798) to (5.67805 5.67463 5.67463) with tilt (0 0 0) - triclinic box = (-0.249217 -0.249217 -0.245798) to (5.67805 5.67805 5.67463) with tilt (0 0 0) - triclinic box = (-0.249217 -0.249217 -0.249217) to (5.67805 5.67805 5.67805) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.822703 -19835.593 208.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.0299999999988 -3.47783786124029 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115119057903 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale ${scale} remap -change_box all x scale 1.00115119057903 y scale 1.00115119057903 z scale 1.00115119057903 remap - triclinic box = (-0.252629 -0.249217 -0.249217) to (5.68146 5.67805 5.67805) with tilt (0 0 0) - triclinic box = (-0.252629 -0.252629 -0.249217) to (5.68146 5.68146 5.67805) with tilt (0 0 0) - triclinic box = (-0.252629 -0.252629 -0.252629) to (5.68146 5.68146 5.68146) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.813323 -21903.19 208.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.1199999999987 -3.47666531737132 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00114722853949 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale ${scale} remap -change_box all x scale 1.00114722853949 y scale 1.00114722853949 z scale 1.00114722853949 remap - triclinic box = (-0.256033 -0.252629 -0.252629) to (5.68487 5.68146 5.68146) with tilt (0 0 0) - triclinic box = (-0.256033 -0.256033 -0.252629) to (5.68487 5.68487 5.68146) with tilt (0 0 0) - triclinic box = (-0.256033 -0.256033 -0.256033) to (5.68487 5.68487 5.68487) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.803024 -23921.116 209.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.209999999999 -3.47537802984216 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00114329367864 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale ${scale} remap -change_box all x scale 1.00114329367864 y scale 1.00114329367864 z scale 1.00114329367864 remap - triclinic box = (-0.259429 -0.256033 -0.256033) to (5.68826 5.68487 5.68487) with tilt (0 0 0) - triclinic box = (-0.259429 -0.259429 -0.256033) to (5.68826 5.68826 5.68487) with tilt (0 0 0) - triclinic box = (-0.259429 -0.259429 -0.259429) to (5.68826 5.68826 5.68826) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.79183 -25890.55 210.4 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.2999999999991 -3.4739787555912 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113938571778 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale ${scale} remap -change_box all x scale 1.00113938571778 y scale 1.00113938571778 z scale 1.00113938571778 remap - triclinic box = (-0.262817 -0.259429 -0.259429) to (5.69165 5.68826 5.68826) with tilt (0 0 0) - triclinic box = (-0.262817 -0.262817 -0.259429) to (5.69165 5.69165 5.68826) with tilt (0 0 0) - triclinic box = (-0.262817 -0.262817 -0.262817) to (5.69165 5.69165 5.69165) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.779761 -27812.639 211.12 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.3899999999989 -3.47247018623304 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113550438201 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale ${scale} remap -change_box all x scale 1.00113550438201 y scale 1.00113550438201 z scale 1.00113550438201 remap - triclinic box = (-0.266198 -0.262817 -0.262817) to (5.69503 5.69165 5.69165) with tilt (0 0 0) - triclinic box = (-0.266198 -0.266198 -0.262817) to (5.69503 5.69503 5.69165) with tilt (0 0 0) - triclinic box = (-0.266198 -0.266198 -0.266198) to (5.69503 5.69503 5.69503) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.76684 -29688.502 211.84 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.4799999999987 -3.47085494974826 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113164940016 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale ${scale} remap -change_box all x scale 1.00113164940016 y scale 1.00113164940016 z scale 1.00113164940016 remap - triclinic box = (-0.269571 -0.266198 -0.266198) to (5.69841 5.69503 5.69503) with tilt (0 0 0) - triclinic box = (-0.269571 -0.269571 -0.266198) to (5.69841 5.69841 5.69503) with tilt (0 0 0) - triclinic box = (-0.269571 -0.269571 -0.269571) to (5.69841 5.69841 5.69841) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.753085 -31519.227 212.56 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.5699999999991 -3.46913561212469 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112782050471 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale ${scale} remap -change_box all x scale 1.00112782050471 y scale 1.00112782050471 z scale 1.00112782050471 remap - triclinic box = (-0.272937 -0.269571 -0.269571) to (5.70177 5.69841 5.69841) with tilt (0 0 0) - triclinic box = (-0.272937 -0.272937 -0.269571) to (5.70177 5.70177 5.69841) with tilt (0 0 0) - triclinic box = (-0.272937 -0.272937 -0.272937) to (5.70177 5.70177 5.70177) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.738517 -33305.877 213.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.6599999999992 -3.46731467895206 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112401743178 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale ${scale} remap -change_box all x scale 1.00112401743178 y scale 1.00112401743178 z scale 1.00112401743178 remap - triclinic box = (-0.276294 -0.272937 -0.272937) to (5.70513 5.70177 5.70177) with tilt (0 0 0) - triclinic box = (-0.276294 -0.276294 -0.272937) to (5.70513 5.70513 5.70177) with tilt (0 0 0) - triclinic box = (-0.276294 -0.276294 -0.276294) to (5.70513 5.70513 5.70513) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.723157 -35049.484 214 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.7499999999995 -3.46539459697116 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112023992101 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale ${scale} remap -change_box all x scale 1.00112023992101 y scale 1.00112023992101 z scale 1.00112023992101 remap - triclinic box = (-0.279645 -0.276294 -0.276294) to (5.70848 5.70513 5.70513) with tilt (0 0 0) - triclinic box = (-0.279645 -0.279645 -0.276294) to (5.70848 5.70848 5.70513) with tilt (0 0 0) - triclinic box = (-0.279645 -0.279645 -0.279645) to (5.70848 5.70848 5.70848) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.707022 -36751.057 214.72 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.8399999999993 -3.46337775557919 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00111648771556 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale ${scale} remap -change_box all x scale 1.00111648771556 y scale 1.00111648771556 z scale 1.00111648771556 remap - triclinic box = (-0.282988 -0.279645 -0.279645) to (5.71182 5.70848 5.70848) with tilt (0 0 0) - triclinic box = (-0.282988 -0.282988 -0.279645) to (5.71182 5.71182 5.70848) with tilt (0 0 0) - triclinic box = (-0.282988 -0.282988 -0.282988) to (5.71182 5.71182 5.71182) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.690132 -38411.578 215.44 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -26.9299999999997 -3.46126648829251 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00111276056198 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale ${scale} remap -change_box all x scale 1.00111276056198 y scale 1.00111276056198 z scale 1.00111276056198 remap - triclinic box = (-0.286323 -0.282988 -0.282988) to (5.71516 5.71182 5.71182) with tilt (0 0 0) - triclinic box = (-0.286323 -0.286323 -0.282988) to (5.71516 5.71516 5.71182) with tilt (0 0 0) - triclinic box = (-0.286323 -0.286323 -0.286323) to (5.71516 5.71516 5.71516) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.672509 -39943.013 216.16 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.0199999999998 -3.45906362981948 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110905821022 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale ${scale} remap -change_box all x scale 1.00110905821022 y scale 1.00110905821022 z scale 1.00110905821022 remap - triclinic box = (-0.289651 -0.286323 -0.286323) to (5.71849 5.71516 5.71516) with tilt (0 0 0) - triclinic box = (-0.289651 -0.289651 -0.286323) to (5.71849 5.71849 5.71516) with tilt (0 0 0) - triclinic box = (-0.289651 -0.289651 -0.289651) to (5.71849 5.71849 5.71849) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.654292 -41126.388 216.88 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.1099999999995 -3.45678648875684 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110538041355 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale ${scale} remap -change_box all x scale 1.00110538041355 y scale 1.00110538041355 z scale 1.00110538041355 remap - triclinic box = (-0.292972 -0.289651 -0.289651) to (5.72181 5.71849 5.71849) with tilt (0 0 0) - triclinic box = (-0.292972 -0.292972 -0.289651) to (5.72181 5.72181 5.71849) with tilt (0 0 0) - triclinic box = (-0.292972 -0.292972 -0.292972) to (5.72181 5.72181 5.72181) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.635551 -42275.674 217.6 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.1999999999992 -3.45444383466799 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110172692849 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale ${scale} remap -change_box all x scale 1.00110172692849 y scale 1.00110172692849 z scale 1.00110172692849 remap - triclinic box = (-0.296285 -0.292972 -0.292972) to (5.72512 5.72181 5.72181) with tilt (0 0 0) - triclinic box = (-0.296285 -0.296285 -0.292972) to (5.72512 5.72512 5.72181) with tilt (0 0 0) - triclinic box = (-0.296285 -0.296285 -0.296285) to (5.72512 5.72512 5.72512) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.6163 -43391.705 218.32 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.2899999999996 -3.45203755895375 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109809751476 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale ${scale} remap -change_box all x scale 1.00109809751476 y scale 1.00109809751476 z scale 1.00109809751476 remap - triclinic box = (-0.299591 -0.296285 -0.296285) to (5.72843 5.72512 5.72512) with tilt (0 0 0) - triclinic box = (-0.299591 -0.299591 -0.296285) to (5.72843 5.72843 5.72512) with tilt (0 0 0) - triclinic box = (-0.299591 -0.299591 -0.299591) to (5.72843 5.72843 5.72843) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.596556 -44475.291 219.04 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.3799999999999 -3.44956950680041 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109449193525 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale ${scale} remap -change_box all x scale 1.00109449193525 y scale 1.00109449193525 z scale 1.00109449193525 remap - triclinic box = (-0.30289 -0.299591 -0.299591) to (5.73172 5.72843 5.72843) with tilt (0 0 0) - triclinic box = (-0.30289 -0.30289 -0.299591) to (5.73172 5.73172 5.72843) with tilt (0 0 0) - triclinic box = (-0.30289 -0.30289 -0.30289) to (5.73172 5.73172 5.73172) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.576332 -45527.226 219.76 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.4700000000001 -3.44704147836752 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109090995595 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale ${scale} remap -change_box all x scale 1.00109090995595 y scale 1.00109090995595 z scale 1.00109090995595 remap - triclinic box = (-0.306181 -0.30289 -0.30289) to (5.73502 5.73172 5.73172) with tilt (0 0 0) - triclinic box = (-0.306181 -0.306181 -0.30289) to (5.73502 5.73502 5.73172) with tilt (0 0 0) - triclinic box = (-0.306181 -0.306181 -0.306181) to (5.73502 5.73502 5.73502) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.555642 -46548.278 220.48 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.5599999999998 -3.44445522994241 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108735134592 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale ${scale} remap -change_box all x scale 1.00108735134592 y scale 1.00108735134592 z scale 1.00108735134592 remap - triclinic box = (-0.309466 -0.306181 -0.306181) to (5.7383 5.73502 5.73502) with tilt (0 0 0) - triclinic box = (-0.309466 -0.309466 -0.306181) to (5.7383 5.7383 5.73502) with tilt (0 0 0) - triclinic box = (-0.309466 -0.309466 -0.309466) to (5.7383 5.7383 5.7383) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.5345 -47539.201 221.2 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.6500000000002 -3.44181247506245 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108381587718 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale ${scale} remap -change_box all x scale 1.00108381587718 y scale 1.00108381587718 z scale 1.00108381587718 remap - triclinic box = (-0.312743 -0.309466 -0.309466) to (5.74158 5.7383 5.7383) with tilt (0 0 0) - triclinic box = (-0.312743 -0.312743 -0.309466) to (5.74158 5.74158 5.7383) with tilt (0 0 0) - triclinic box = (-0.312743 -0.312743 -0.312743) to (5.74158 5.74158 5.74158) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.512919 -48500.725 221.92 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.74 -3.43911488560607 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108030332476 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale ${scale} remap -change_box all x scale 1.00108030332476 y scale 1.00108030332476 z scale 1.00108030332476 remap - triclinic box = (-0.316013 -0.312743 -0.312743) to (5.74485 5.74158 5.74158) with tilt (0 0 0) - triclinic box = (-0.316013 -0.316013 -0.312743) to (5.74485 5.74485 5.74158) with tilt (0 0 0) - triclinic box = (-0.316013 -0.316013 -0.316013) to (5.74485 5.74485 5.74485) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.490913 -49433.564 222.64 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.8300000000003 -3.43636409285328 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00107681346655 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale ${scale} remap -change_box all x scale 1.00107681346655 y scale 1.00107681346655 z scale 1.00107681346655 remap - triclinic box = (-0.319277 -0.316013 -0.316013) to (5.74811 5.74485 5.74485) with tilt (0 0 0) - triclinic box = (-0.319277 -0.319277 -0.316013) to (5.74811 5.74811 5.74485) with tilt (0 0 0) - triclinic box = (-0.319277 -0.319277 -0.319277) to (5.74811 5.74811 5.74811) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.468494 -50338.414 223.36 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -27.9200000000003 -3.43356168851709 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00107334608333 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale ${scale} remap -change_box all x scale 1.00107334608333 y scale 1.00107334608333 z scale 1.00107334608333 remap - triclinic box = (-0.322533 -0.319277 -0.319277) to (5.75137 5.74811 5.74811) with tilt (0 0 0) - triclinic box = (-0.322533 -0.322533 -0.319277) to (5.75137 5.75137 5.74811) with tilt (0 0 0) - triclinic box = (-0.322533 -0.322533 -0.322533) to (5.75137 5.75137 5.75137) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.445674 -51215.952 224.08 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.0100000000003 -3.43070922574611 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106990095868 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale ${scale} remap -change_box all x scale 1.00106990095868 y scale 1.00106990095868 z scale 1.00106990095868 remap - triclinic box = (-0.325782 -0.322533 -0.322533) to (5.75462 5.75137 5.75137) with tilt (0 0 0) - triclinic box = (-0.325782 -0.325782 -0.322533) to (5.75462 5.75462 5.75137) with tilt (0 0 0) - triclinic box = (-0.325782 -0.325782 -0.325782) to (5.75462 5.75462 5.75462) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.422466 -52066.839 224.8 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.0999999999999 -3.42780822009964 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106647787897 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale ${scale} remap -change_box all x scale 1.00106647787897 y scale 1.00106647787897 z scale 1.00106647787897 remap - triclinic box = (-0.329024 -0.325782 -0.325782) to (5.75786 5.75462 5.75462) with tilt (0 0 0) - triclinic box = (-0.329024 -0.329024 -0.325782) to (5.75786 5.75786 5.75462) with tilt (0 0 0) - triclinic box = (-0.329024 -0.329024 -0.329024) to (5.75786 5.75786 5.75786) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.398881 -52891.72 225.52 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.1900000000001 -3.424860150496 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106307663326 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale ${scale} remap -change_box all x scale 1.00106307663326 y scale 1.00106307663326 z scale 1.00106307663326 remap - triclinic box = (-0.33226 -0.329024 -0.329024) to (5.76109 5.75786 5.75786) with tilt (0 0 0) - triclinic box = (-0.33226 -0.33226 -0.329024) to (5.76109 5.76109 5.75786) with tilt (0 0 0) - triclinic box = (-0.33226 -0.33226 -0.33226) to (5.76109 5.76109 5.76109) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.374932 -53691.221 226.24 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.28 -3.42186646013476 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105969701333 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale ${scale} remap -change_box all x scale 1.00105969701333 y scale 1.00105969701333 z scale 1.00105969701333 remap - triclinic box = (-0.335488 -0.33226 -0.33226) to (5.76432 5.76109 5.76109) with tilt (0 0 0) - triclinic box = (-0.335488 -0.335488 -0.33226) to (5.76432 5.76432 5.76109) with tilt (0 0 0) - triclinic box = (-0.335488 -0.335488 -0.335488) to (5.76432 5.76432 5.76432) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.350628 -54465.955 226.96 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.3700000000003 -3.41882855739378 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105633881357 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale ${scale} remap -change_box all x scale 1.00105633881357 y scale 1.00105633881357 z scale 1.00105633881357 remap - triclinic box = (-0.33871 -0.335488 -0.335488) to (5.76755 5.76432 5.76432) with tilt (0 0 0) - triclinic box = (-0.33871 -0.33871 -0.335488) to (5.76755 5.76755 5.76432) with tilt (0 0 0) - triclinic box = (-0.33871 -0.33871 -0.33871) to (5.76755 5.76755 5.76755) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.325983 -55216.518 227.68 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.4600000000007 -3.4157478167018 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105300183098 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale ${scale} remap -change_box all x scale 1.00105300183098 y scale 1.00105300183098 z scale 1.00105300183098 remap - triclinic box = (-0.341925 -0.33871 -0.33871) to (5.77076 5.76755 5.76755) with tilt (0 0 0) - triclinic box = (-0.341925 -0.341925 -0.33871) to (5.77076 5.77076 5.76755) with tilt (0 0 0) - triclinic box = (-0.341925 -0.341925 -0.341925) to (5.77076 5.77076 5.77076) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.301005 -55943.493 228.4 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.5500000000008 -3.41262557938724 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104968586512 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale ${scale} remap -change_box all x scale 1.00104968586512 y scale 1.00104968586512 z scale 1.00104968586512 remap - triclinic box = (-0.345133 -0.341925 -0.341925) to (5.77397 5.77076 5.77076) with tilt (0 0 0) - triclinic box = (-0.345133 -0.345133 -0.341925) to (5.77397 5.77397 5.77076) with tilt (0 0 0) - triclinic box = (-0.345133 -0.345133 -0.345133) to (5.77397 5.77397 5.77397) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.275705 -56647.446 229.12 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.6400000000005 -3.40946315450402 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104639071808 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale ${scale} remap -change_box all x scale 1.00104639071808 y scale 1.00104639071808 z scale 1.00104639071808 remap - triclinic box = (-0.348335 -0.345133 -0.345133) to (5.77717 5.77397 5.77397) with tilt (0 0 0) - triclinic box = (-0.348335 -0.348335 -0.345133) to (5.77717 5.77717 5.77397) with tilt (0 0 0) - triclinic box = (-0.348335 -0.348335 -0.348335) to (5.77717 5.77717 5.77717) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.250095 -57328.932 229.84 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.7300000000009 -3.40626181963491 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104311619438 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale ${scale} remap -change_box all x scale 1.00104311619438 y scale 1.00104311619438 z scale 1.00104311619438 remap - triclinic box = (-0.351529 -0.348335 -0.348335) to (5.78036 5.77717 5.77717) with tilt (0 0 0) - triclinic box = (-0.351529 -0.351529 -0.348335) to (5.78036 5.78036 5.77717) with tilt (0 0 0) - triclinic box = (-0.351529 -0.351529 -0.351529) to (5.78036 5.78036 5.78036) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.224183 -57988.489 230.56 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.8200000000006 -3.40302282167349 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00103986210104 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale ${scale} remap -change_box all x scale 1.00103986210104 y scale 1.00103986210104 z scale 1.00103986210104 remap - triclinic box = (-0.354718 -0.351529 -0.351529) to (5.78355 5.78036 5.78036) with tilt (0 0 0) - triclinic box = (-0.354718 -0.354718 -0.351529) to (5.78355 5.78355 5.78036) with tilt (0 0 0) - triclinic box = (-0.354718 -0.354718 -0.354718) to (5.78355 5.78355 5.78355) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.197979 -58626.644 231.28 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -28.9100000000005 -3.39974737758459 - -next i -jump SELF loop -variable i loop ${ndelta} -variable i loop 100 - -change_box all x scale ${scale} y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00103662824744 y scale ${scale} z scale ${scale} remap -change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale ${scale} remap -change_box all x scale 1.00103662824744 y scale 1.00103662824744 z scale 1.00103662824744 remap - triclinic box = (-0.357899 -0.354718 -0.354718) to (5.78673 5.78355 5.78355) with tilt (0 0 0) - triclinic box = (-0.357899 -0.357899 -0.354718) to (5.78673 5.78673 5.78355) with tilt (0 0 0) - triclinic box = (-0.357899 -0.357899 -0.357899) to (5.78673 5.78673 5.78673) with tilt (0 0 0) - -# calculate energy -# no energy minimization needed for zincblende - -run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 2.31867 Mbytes -Step Temp PotEng Press Volume - 0 0 -27.171493 -59243.909 232 -Loop time of 0 on 1 procs for 0 steps with 8 atoms - -0.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0 | 0 | 0 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0 | 0 | 0 | 0.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 - -Nlocal: 8 ave 8 max 8 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 272 ave 272 max 272 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 368 ave 368 max 368 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 368 -Ave neighs/atom = 46 -Neighbor list builds = 0 -Dangerous builds = 0 -print "${volatom} ${eatom}" append ${evsvolfile} -print "${volatom} ${eatom}" append evsvol.dat -29.0000000000008 -3.39643667514478 - -next i -jump SELF loop -Total wall time: 0:00:00 diff --git a/examples/vashishta/log.5Oct16.vashishta.sio2.g++.1 b/examples/vashishta/log.5Oct16.vashishta.sio2.g++.1 deleted file mode 100644 index a76309d776..0000000000 --- a/examples/vashishta/log.5Oct16.vashishta.sio2.g++.1 +++ /dev/null @@ -1,86 +0,0 @@ -LAMMPS (5 Oct 2016) -# test Vashishta potential for quartz - -units metal -boundary p p p - -atom_style atomic - -read_data data.quartz - triclinic box = (0 0 0) to (4.9134 4.25513 5.4052) with tilt (-2.4567 0 0) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 9 atoms - -replicate 4 4 4 - triclinic box = (0 0 0) to (19.6536 17.0205 21.6208) with tilt (-9.8268 0 0) - 1 by 1 by 1 MPI processor grid - 576 atoms -velocity all create 2000.0 277387 mom yes -displace_atoms all move 0.05 0.9 0.4 units box - -pair_style vashishta -pair_coeff * * SiO.1990.vashishta Si O -Reading potential file SiO.1990.vashishta with DATE: 2015-10-14 - -neighbor 0.3 bin -neigh_modify delay 10 - -fix 1 all nve -thermo 10 -timestep 0.001 - -#dump 1 all cfg 10 *.cfg mass type xs ys zs vx vy vz fx fy fz -#dump_modify 1 element Si O - -run 100 -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10.3 - ghost atom cutoff = 10.3 - binsize = 5.15 -> bins = 6 4 5 -Memory usage per processor = 2.54081 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 2000 -5280.875 0 -5132.2259 -20502.321 - 10 895.65237 -5198.402 0 -5131.833 419.34676 - 20 932.93463 -5201.1569 0 -5131.8169 -21407.961 - 30 936.09591 -5201.3998 0 -5131.8248 -32531.168 - 40 930.05159 -5201.0073 0 -5131.8816 -46445.212 - 50 904.64676 -5199.062 0 -5131.8245 -31402.385 - 60 1005.5353 -5206.5725 0 -5131.8365 -29790.442 - 70 941.02343 -5201.7644 0 -5131.8232 -23046.796 - 80 1020.1044 -5207.6763 0 -5131.8574 -13488.675 - 90 912.75535 -5199.651 0 -5131.8108 2715.5897 - 100 998.97588 -5206.1008 0 -5131.8523 6024.3651 -Loop time of 2.13995 on 1 procs for 100 steps with 576 atoms - -Performance: 4.037 ns/day, 5.944 hours/ns, 46.730 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.0601 | 2.0601 | 2.0601 | 0.0 | 96.27 -Neigh | 0.074257 | 0.074257 | 0.074257 | 0.0 | 3.47 -Comm | 0.0039079 | 0.0039079 | 0.0039079 | 0.0 | 0.18 -Output | 0.00010729 | 0.00010729 | 0.00010729 | 0.0 | 0.01 -Modify | 0.00091672 | 0.00091672 | 0.00091672 | 0.0 | 0.04 -Other | | 0.0006473 | | | 0.03 - -Nlocal: 576 ave 576 max 576 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 4926 ave 4926 max 4926 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 210470 ave 210470 max 210470 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 210470 -Ave neighs/atom = 365.399 -Neighbor list builds = 10 -Dangerous builds = 10 - -Total wall time: 0:00:02 diff --git a/examples/voronoi/log.5Oct16.voronoi.2d.g++.1 b/examples/voronoi/log.27Nov18.voronoi.2d.g++.1 similarity index 81% rename from examples/voronoi/log.5Oct16.voronoi.2d.g++.1 rename to examples/voronoi/log.27Nov18.voronoi.2d.g++.1 index 4366a725ca..a591db8b4f 100644 --- a/examples/voronoi/log.5Oct16.voronoi.2d.g++.1 +++ b/examples/voronoi/log.27Nov18.voronoi.2d.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Test volume definitions for 2d and finite systems variable rcut equal 10.0 @@ -29,6 +30,7 @@ Created orthogonal box = (0 0 0) to (4 6.9282 10) 1 by 1 by 1 MPI processor grid create_atoms 1 region atoms Created 32 atoms + Time spent = 0.000315905 secs mass 1 1.0 @@ -55,19 +57,24 @@ thermo 1 # run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 20 -Memory usage per processor = 2.37519 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/nsq/newton + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.007 | 3.007 | 3.007 Mbytes c_volvor v_volsys Volume v_err 277.12813 277.12813 27.712813 5.6843419e-14 Loop time of 9.53674e-07 on 1 procs for 0 steps with 32 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -98,13 +105,13 @@ Dangerous builds = 0 change_box all boundary f f p run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 7.05652 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.688 | 7.688 | 7.688 Mbytes c_volvor v_volsys Volume v_err 277.12813 277.12813 27.712813 3.4106051e-13 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 32 atoms +Loop time of 4.76837e-07 on 1 procs for 0 steps with 32 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -114,7 +121,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 4.768e-07 | | |100.00 Nlocal: 32 ave 32 max 32 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/voronoi/log.5Oct16.voronoi.2d.g++.4 b/examples/voronoi/log.27Nov18.voronoi.2d.g++.4 similarity index 79% rename from examples/voronoi/log.5Oct16.voronoi.2d.g++.4 rename to examples/voronoi/log.27Nov18.voronoi.2d.g++.4 index bdf134225c..841f8dcb81 100644 --- a/examples/voronoi/log.5Oct16.voronoi.2d.g++.4 +++ b/examples/voronoi/log.27Nov18.voronoi.2d.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Test volume definitions for 2d and finite systems variable rcut equal 10.0 @@ -29,6 +30,7 @@ Created orthogonal box = (0 0 0) to (4 6.9282 10) 2 by 2 by 1 MPI processor grid create_atoms 1 region atoms Created 32 atoms + Time spent = 0.000319481 secs mass 1 1.0 @@ -55,19 +57,24 @@ thermo 1 # run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 20 -Memory usage per processor = 2.41069 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/nsq/newton + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.042 | 3.042 | 3.042 Mbytes c_volvor v_volsys Volume v_err 277.12813 277.12813 27.712813 5.1159077e-13 -Loop time of 4.05312e-06 on 4 procs for 0 steps with 32 atoms +Loop time of 2.79546e-05 on 4 procs for 0 steps with 32 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +51.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -77,7 +84,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 4.053e-06 | | |100.00 +Other | | 2.795e-05 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -98,13 +105,13 @@ Dangerous builds = 0 change_box all boundary f f p run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 7.04625 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.678 | 7.678 | 7.678 Mbytes c_volvor v_volsys Volume v_err 277.12813 277.12813 27.712813 3.4106051e-13 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 32 atoms +Loop time of 1.88947e-05 on 4 procs for 0 steps with 32 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +47.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -114,7 +121,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 1.889e-05 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/voronoi/log.5Oct16.voronoi.data.g++.1 b/examples/voronoi/log.27Nov18.voronoi.data.g++.1 similarity index 82% rename from examples/voronoi/log.5Oct16.voronoi.data.g++.1 rename to examples/voronoi/log.27Nov18.voronoi.data.g++.1 index c3d5e2cc82..04bc629d87 100644 --- a/examples/voronoi/log.5Oct16.voronoi.data.g++.1 +++ b/examples/voronoi/log.27Nov18.voronoi.data.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Exercise different output data options variable len equal 4.0 @@ -25,6 +26,7 @@ Created orthogonal box = (0 0 0) to (4 6.9282 10) 1 by 1 by 1 MPI processor grid create_atoms 1 region atoms Created 32 atoms + Time spent = 0.000315666 secs mass 1 1.0 @@ -63,19 +65,24 @@ thermo_style custom c_volvor v_volsys vol v_err c_v1[3] c_v1[4] c_v1[5] c_v1[6] thermo 1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 3.5 ghost atom cutoff = 3.5 -Memory usage per processor = 9.40674 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/nsq/newton + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 10.04 | 10.04 | 10.04 Mbytes c_volvor v_volsys Volume v_err c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 277.12813 277.12813 27.712813 3.9790393e-13 0 186 12 36 0 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 32 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 32 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +0.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -85,7 +92,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 32 ave 32 max 32 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -128,13 +135,13 @@ thermo_style custom c_sumarea c_v2[3] c_v2[4] c_v2[5] c_v2[6] c_v2[7] thermo 1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.15503 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.787 | 8.787 | 8.787 Mbytes c_sumarea c_v2[3] c_v2[4] c_v2[5] c_v2[6] c_v2[7] 1215.0706 0 186 12 36 0 -Loop time of 1.19209e-06 on 1 procs for 0 steps with 32 atoms +Loop time of 7.15256e-07 on 1 procs for 0 steps with 32 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +139.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -144,7 +151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.192e-06 | | |100.00 +Other | | 7.153e-07 | | |100.00 Nlocal: 32 ave 32 max 32 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/voronoi/log.5Oct16.voronoi.data.g++.4 b/examples/voronoi/log.27Nov18.voronoi.data.g++.4 similarity index 82% rename from examples/voronoi/log.5Oct16.voronoi.data.g++.4 rename to examples/voronoi/log.27Nov18.voronoi.data.g++.4 index 097ba91347..be028e4d2f 100644 --- a/examples/voronoi/log.5Oct16.voronoi.data.g++.4 +++ b/examples/voronoi/log.27Nov18.voronoi.data.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Exercise different output data options variable len equal 4.0 @@ -25,6 +26,7 @@ Created orthogonal box = (0 0 0) to (4 6.9282 10) 2 by 2 by 1 MPI processor grid create_atoms 1 region atoms Created 32 atoms + Time spent = 0.000311136 secs mass 1 1.0 @@ -63,19 +65,24 @@ thermo_style custom c_volvor v_volsys vol v_err c_v1[3] c_v1[4] c_v1[5] c_v1[6] thermo 1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 3.5 ghost atom cutoff = 3.5 -Memory usage per processor = 9.29039 Mbytes + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/nsq/newton + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 9.922 | 9.922 | 9.922 Mbytes c_volvor v_volsys Volume v_err c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 277.12813 277.12813 27.712813 3.4106051e-13 0 186 12 36 0 -Loop time of 5.00679e-06 on 4 procs for 0 steps with 32 atoms +Loop time of 1.40667e-05 on 4 procs for 0 steps with 32 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +46.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -85,7 +92,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 5.007e-06 | | |100.00 +Other | | 1.407e-05 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -128,13 +135,13 @@ thermo_style custom c_sumarea c_v2[3] c_v2[4] c_v2[5] c_v2[6] c_v2[7] thermo 1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.03996 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.671 | 8.671 | 8.671 Mbytes c_sumarea c_v2[3] c_v2[4] c_v2[5] c_v2[6] c_v2[7] 1215.0706 0 186 12 36 0 -Loop time of 1.90735e-06 on 4 procs for 0 steps with 32 atoms +Loop time of 2.71797e-05 on 4 procs for 0 steps with 32 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +57.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -144,7 +151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-06 | | |100.00 +Other | | 2.718e-05 | | |100.00 Nlocal: 8 ave 8 max 8 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/voronoi/log.5Oct16.voronoi.g++.1 b/examples/voronoi/log.27Nov18.voronoi.g++.1 similarity index 78% rename from examples/voronoi/log.5Oct16.voronoi.g++.1 rename to examples/voronoi/log.27Nov18.voronoi.g++.1 index b76e99038e..c1d56b0eb7 100644 --- a/examples/voronoi/log.5Oct16.voronoi.g++.1 +++ b/examples/voronoi/log.27Nov18.voronoi.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Test of Kawasaki Dynamics on LJ test system units metal @@ -19,6 +20,7 @@ Created orthogonal box = (0 0 0) to (10 10 10) 1 by 1 by 1 MPI processor grid create_atoms 1 box basis 1 2 Created 4000 atoms + Time spent = 0.00091362 secs mass 1 50 mass 2 50 @@ -60,20 +62,25 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t1 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.3 ghost atom cutoff = 5 - binsize = 1.15 -> bins = 9 9 9 -Memory usage per processor = 8.74398 Mbytes + binsize = 1.15, bins = 9 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.02 | 11.02 | 11.02 Mbytes c_r0 1000 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.43051e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +209.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -83,7 +90,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -114,13 +121,13 @@ thermo_style custom c_r0 c_r1 variable t2a equal c_r0 variable t2b equal c_r1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.74398 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 11.02 | 11.02 | 11.02 Mbytes c_r0 c_r1 1000 0 -Loop time of 0 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.19209e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +167.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -130,7 +137,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 1.192e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -162,13 +169,13 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t3 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.74398 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 11.02 | 11.02 | 11.02 Mbytes c_r0 1000 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.43051e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +279.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -178,7 +185,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.431e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -204,25 +211,25 @@ undump d1 compute v1 type2 voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.53036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.81 | 8.81 | 8.81 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 12000 0 0 0 0 0 0 12000 0 0 0 -Loop time of 0.454686 on 1 procs for 1 steps with 4000 atoms +Loop time of 0.314834 on 1 procs for 1 steps with 4000 atoms -Performance: 0.190 ns/day, 126.302 hours/ns, 2.199 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.274 ns/day, 87.454 hours/ns, 3.176 timesteps/s +98.2% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0058758 | 0.0058758 | 0.0058758 | 0.0 | 1.29 +Pair | 0.0057888 | 0.0057888 | 0.0057888 | 0.0 | 1.84 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0001812 | 0.0001812 | 0.0001812 | 0.0 | 0.04 -Output | 0.44856 | 0.44856 | 0.44856 | 0.0 | 98.65 -Modify | 1.9073e-06 | 1.9073e-06 | 1.9073e-06 | 0.0 | 0.00 -Other | | 6.723e-05 | | | 0.01 +Comm | 0.00023079 | 0.00023079 | 0.00023079 | 0.0 | 0.07 +Output | 0.30878 | 0.30878 | 0.30878 | 0.0 | 98.08 +Modify | 9.5367e-07 | 9.5367e-07 | 9.5367e-07 | 0.0 | 0.00 +Other | | 3.266e-05 | | | 0.01 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -242,25 +249,25 @@ uncompute v1 compute v1 all voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.53036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.81 | 8.81 | 8.81 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 48000 0 0 0 0 0 0 48000 0 0 0 -Loop time of 0.474271 on 1 procs for 1 steps with 4000 atoms +Loop time of 0.325299 on 1 procs for 1 steps with 4000 atoms -Performance: 0.182 ns/day, 131.742 hours/ns, 2.108 timesteps/s -100.1% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.266 ns/day, 90.361 hours/ns, 3.074 timesteps/s +98.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.005832 | 0.005832 | 0.005832 | 0.0 | 1.23 +Pair | 0.0057862 | 0.0057862 | 0.0057862 | 0.0 | 1.78 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00016904 | 0.00016904 | 0.00016904 | 0.0 | 0.04 -Output | 0.46822 | 0.46822 | 0.46822 | 0.0 | 98.72 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 5.007e-05 | | | 0.01 +Comm | 0.00022984 | 0.00022984 | 0.00022984 | 0.0 | 0.07 +Output | 0.31925 | 0.31925 | 0.31925 | 0.0 | 98.14 +Modify | 7.1526e-07 | 7.1526e-07 | 7.1526e-07 | 0.0 | 0.00 +Other | | 3.242e-05 | | | 0.01 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -283,25 +290,25 @@ displace_atoms all random 0.01 0.01 0.01 31423 compute v1 all voronoi/atom edge_histo 8 edge_threshold 0.1 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.53036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.81 | 8.81 | 8.81 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 48000 0 0 0 0 0 0 48000 0 0 0 -Loop time of 0.465207 on 1 procs for 1 steps with 4000 atoms +Loop time of 0.340279 on 1 procs for 1 steps with 4000 atoms -Performance: 0.186 ns/day, 129.224 hours/ns, 2.150 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.254 ns/day, 94.522 hours/ns, 2.939 timesteps/s +98.3% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.006129 | 0.006129 | 0.006129 | 0.0 | 1.32 +Pair | 0.0062513 | 0.0062513 | 0.0062513 | 0.0 | 1.84 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00016928 | 0.00016928 | 0.00016928 | 0.0 | 0.04 -Output | 0.45886 | 0.45886 | 0.45886 | 0.0 | 98.64 -Modify | 9.5367e-07 | 9.5367e-07 | 9.5367e-07 | 0.0 | 0.00 -Other | | 4.482e-05 | | | 0.01 +Comm | 0.00023031 | 0.00023031 | 0.00023031 | 0.0 | 0.07 +Output | 0.33376 | 0.33376 | 0.33376 | 0.0 | 98.09 +Modify | 7.1526e-07 | 7.1526e-07 | 7.1526e-07 | 0.0 | 0.00 +Other | | 3.171e-05 | | | 0.01 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -326,28 +333,29 @@ lattice bcc 1 origin 0.25 0.25 0.25 Lattice spacing in x,y,z = 1 1 1 create_atoms 1 box Created 2000 atoms + Time spent = 0.000280142 secs compute v1 all voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.53036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.81 | 8.81 | 8.81 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 12000 0 16000 0 0 0 0 12000 0 16000 0 -Loop time of 0.196673 on 1 procs for 1 steps with 2000 atoms +Loop time of 0.140848 on 1 procs for 1 steps with 2000 atoms -Performance: 0.439 ns/day, 54.631 hours/ns, 5.085 timesteps/s -100.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.613 ns/day, 39.125 hours/ns, 7.100 timesteps/s +98.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0014789 | 0.0014789 | 0.0014789 | 0.0 | 0.75 +Pair | 0.0014246 | 0.0014246 | 0.0014246 | 0.0 | 1.01 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 8.1062e-05 | 8.1062e-05 | 8.1062e-05 | 0.0 | 0.04 -Output | 0.19509 | 0.19509 | 0.19509 | 0.0 | 99.20 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.907e-05 | | | 0.01 +Comm | 0.00011492 | 0.00011492 | 0.00011492 | 0.0 | 0.08 +Output | 0.13929 | 0.13929 | 0.13929 | 0.0 | 98.89 +Modify | 4.7684e-07 | 4.7684e-07 | 4.7684e-07 | 0.0 | 0.00 +Other | | 1.884e-05 | | | 0.01 Nlocal: 2000 ave 2000 max 2000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -372,6 +380,7 @@ lattice fcc 1 origin 0.25 0.25 0.25 Lattice spacing in x,y,z = 1 1 1 create_atoms 1 box basis 1 2 Created 4000 atoms + Time spent = 0.00044775 secs # # TEST 5: Occupation analysis @@ -397,13 +406,13 @@ variable d5d equal c_v1[257][2] thermo_style custom c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.53036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 8.81 | 8.81 | 8.81 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4000 1 1 1 1 -Loop time of 0 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.19209e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +251.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -413,7 +422,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0 | | | 0.00 +Other | | 1.192e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -464,13 +473,13 @@ set atom 13 x 4.4500000000000001776 y 6.4500000000000001776 z 0.4500000000000000 1 settings made for z run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 7.03036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.31 | 9.31 | 9.31 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4002 0 2 2 2 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.19209e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +251.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -480,7 +489,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.192e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -511,13 +520,13 @@ set atom 13 x 3.25 y 0.25 z 0.25 1 settings made for z run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 7.03036 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.31 | 9.31 | 9.31 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4000 1 1 1 1 Loop time of 9.53674e-07 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +314.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -570,20 +579,25 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t6 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.3 ghost atom cutoff = 5 - binsize = 1.15 -> bins = 14 9 9 -Memory usage per processor = 12.5794 Mbytes + binsize = 1.15, bins = 14 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 15.06 | 15.06 | 15.06 Mbytes c_r0 1000 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 4000 atoms +Loop time of 1.19209e-06 on 1 procs for 0 steps with 4000 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +251.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -593,7 +607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.192e-06 | | |100.00 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -616,4 +630,4 @@ undump d1 print TEST_DONE TEST_DONE -Total wall time: 0:00:06 +Total wall time: 0:00:04 diff --git a/examples/voronoi/log.5Oct16.voronoi.g++.4 b/examples/voronoi/log.27Nov18.voronoi.g++.4 similarity index 77% rename from examples/voronoi/log.5Oct16.voronoi.g++.4 rename to examples/voronoi/log.27Nov18.voronoi.g++.4 index ba5dfa48c0..37e861be70 100644 --- a/examples/voronoi/log.5Oct16.voronoi.g++.4 +++ b/examples/voronoi/log.27Nov18.voronoi.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (5 Oct 2016) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task # Test of Kawasaki Dynamics on LJ test system units metal @@ -19,6 +20,7 @@ Created orthogonal box = (0 0 0) to (10 10 10) 1 by 2 by 2 MPI processor grid create_atoms 1 box basis 1 2 Created 4000 atoms + Time spent = 0.000644922 secs mass 1 50 mass 2 50 @@ -60,20 +62,25 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t1 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.3 ghost atom cutoff = 5 - binsize = 1.15 -> bins = 9 9 9 -Memory usage per processor = 8.20003 Mbytes + binsize = 1.15, bins = 9 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 9.228 | 9.228 | 9.228 Mbytes c_r0 1000 -Loop time of 1.29938e-05 on 4 procs for 0 steps with 4000 atoms +Loop time of 2.08616e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +167.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -83,7 +90,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.299e-05 | | |100.00 +Other | | 2.086e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -114,13 +121,13 @@ thermo_style custom c_r0 c_r1 variable t2a equal c_r0 variable t2b equal c_r1 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.20003 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.228 | 9.228 | 9.228 Mbytes c_r0 c_r1 1000 0 -Loop time of 1.66893e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 4.52995e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +132.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -130,7 +137,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.669e-06 | | |100.00 +Other | | 4.53e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -162,13 +169,13 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t3 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 8.20003 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 9.228 | 9.228 | 9.228 Mbytes c_r0 1000 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +162.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -178,7 +185,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -204,25 +211,25 @@ undump d1 compute v1 type2 voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.14663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.175 | 7.175 | 7.175 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 12000 0 0 0 0 0 0 12000 0 0 0 -Loop time of 0.277843 on 4 procs for 1 steps with 4000 atoms +Loop time of 0.181586 on 4 procs for 1 steps with 4000 atoms -Performance: 0.311 ns/day, 77.179 hours/ns, 3.599 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.476 ns/day, 50.441 hours/ns, 5.507 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0014799 | 0.0015165 | 0.001543 | 0.1 | 0.55 +Pair | 0.0015094 | 0.0015393 | 0.0016015 | 0.1 | 0.85 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00051594 | 0.00054592 | 0.00059509 | 0.1 | 0.20 -Output | 0.27569 | 0.27571 | 0.27571 | 0.0 | 99.23 -Modify | 0 | 4.7684e-07 | 9.5367e-07 | 0.1 | 0.00 -Other | | 7.474e-05 | | | 0.03 +Comm | 0.00039601 | 0.00046033 | 0.00049233 | 0.0 | 0.25 +Output | 0.17947 | 0.1795 | 0.17956 | 0.0 | 98.85 +Modify | 4.7684e-07 | 7.1526e-07 | 9.5367e-07 | 0.0 | 0.00 +Other | | 9e-05 | | | 0.05 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -242,25 +249,25 @@ uncompute v1 compute v1 all voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.14663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.175 | 7.175 | 7.175 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 48000 0 0 0 0 0 0 48000 0 0 0 -Loop time of 0.275933 on 4 procs for 1 steps with 4000 atoms +Loop time of 0.184754 on 4 procs for 1 steps with 4000 atoms -Performance: 0.313 ns/day, 76.648 hours/ns, 3.624 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.468 ns/day, 51.321 hours/ns, 5.413 timesteps/s +96.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.001452 | 0.0014912 | 0.0015581 | 0.1 | 0.54 +Pair | 0.0015123 | 0.0015253 | 0.0015385 | 0.0 | 0.83 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00044107 | 0.00050235 | 0.00053501 | 0.2 | 0.18 -Output | 0.27389 | 0.2739 | 0.27391 | 0.0 | 99.26 -Modify | 0 | 4.7684e-07 | 9.5367e-07 | 0.1 | 0.00 -Other | | 3.755e-05 | | | 0.01 +Comm | 0.00038028 | 0.00039649 | 0.00040984 | 0.0 | 0.21 +Output | 0.18271 | 0.18273 | 0.1828 | 0.0 | 98.91 +Modify | 7.1526e-07 | 8.9407e-07 | 9.5367e-07 | 0.0 | 0.00 +Other | | 0.0001001 | | | 0.05 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -283,25 +290,25 @@ displace_atoms all random 0.01 0.01 0.01 31423 compute v1 all voronoi/atom edge_histo 8 edge_threshold 0.1 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.14663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.175 | 7.175 | 7.175 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 48000 0 0 0 0 0 0 48000 0 0 0 -Loop time of 0.274319 on 4 procs for 1 steps with 4000 atoms +Loop time of 0.191424 on 4 procs for 1 steps with 4000 atoms -Performance: 0.315 ns/day, 76.200 hours/ns, 3.645 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.451 ns/day, 53.173 hours/ns, 5.224 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.001529 | 0.0015675 | 0.0016341 | 0.1 | 0.57 +Pair | 0.0016205 | 0.0016853 | 0.0018284 | 0.2 | 0.88 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00042391 | 0.00048423 | 0.00051594 | 0.2 | 0.18 -Output | 0.27222 | 0.27223 | 0.27224 | 0.0 | 99.24 -Modify | 0 | 4.7684e-07 | 9.5367e-07 | 0.1 | 0.00 -Other | | 3.517e-05 | | | 0.01 +Comm | 0.00041676 | 0.00055587 | 0.00062323 | 0.0 | 0.29 +Output | 0.18905 | 0.18907 | 0.18915 | 0.0 | 98.77 +Modify | 1.1921e-06 | 1.2517e-06 | 1.4305e-06 | 0.0 | 0.00 +Other | | 0.0001094 | | | 0.06 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -326,28 +333,29 @@ lattice bcc 1 origin 0.25 0.25 0.25 Lattice spacing in x,y,z = 1 1 1 create_atoms 1 box Created 2000 atoms + Time spent = 0.000178576 secs compute v1 all voronoi/atom edge_histo 8 thermo_style custom c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] run 1 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.14663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.175 | 7.175 | 7.175 Mbytes c_v1[1] c_v1[2] c_v1[3] c_v1[4] c_v1[5] c_v1[6] c_v1[7] 0 0 0 12000 0 16000 0 0 0 0 12000 0 16000 0 -Loop time of 0.119681 on 4 procs for 1 steps with 2000 atoms +Loop time of 0.0871635 on 4 procs for 1 steps with 2000 atoms -Performance: 0.722 ns/day, 33.245 hours/ns, 8.356 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.991 ns/day, 24.212 hours/ns, 11.473 timesteps/s +96.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00036597 | 0.00036877 | 0.00037217 | 0.0 | 0.31 +Pair | 0.00038028 | 0.00038761 | 0.00040364 | 0.0 | 0.44 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0002737 | 0.00027668 | 0.00027895 | 0.0 | 0.23 -Output | 0.11901 | 0.11902 | 0.11902 | 0.0 | 99.45 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.681e-05 | | | 0.01 +Comm | 0.00020146 | 0.00021631 | 0.00022292 | 0.0 | 0.25 +Output | 0.086468 | 0.086487 | 0.086541 | 0.0 | 99.22 +Modify | 4.7684e-07 | 7.1526e-07 | 9.5367e-07 | 0.0 | 0.00 +Other | | 7.224e-05 | | | 0.08 Nlocal: 500 ave 500 max 500 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -372,6 +380,7 @@ lattice fcc 1 origin 0.25 0.25 0.25 Lattice spacing in x,y,z = 1 1 1 create_atoms 1 box basis 1 2 Created 4000 atoms + Time spent = 0.000248909 secs # # TEST 5: Occupation analysis @@ -397,13 +406,13 @@ variable d5d equal c_v1[257][2] thermo_style custom c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.14663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.175 | 7.175 | 7.175 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4000 1 1 1 1 -Loop time of 2.14577e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 1.84774e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +189.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -413,7 +422,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.146e-06 | | |100.00 +Other | | 1.848e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -464,13 +473,13 @@ set atom 13 x 4.4500000000000001776 y 1.4499999999999999556 z 1.4499999999999999 1 settings made for z run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.64663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.675 | 7.675 | 7.675 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4002 0 2 2 2 -Loop time of 4.41074e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 1.72853e-06 on 4 procs for 0 steps with 4000 atoms -5662.3% CPU use with 4 MPI tasks x no OpenMP threads +188.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -480,7 +489,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 4.411e-06 | | |100.00 +Other | | 1.729e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -511,13 +520,13 @@ set atom 13 x 3.25 y 0.25 z 0.25 1 settings made for z run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) -Memory usage per processor = 6.64663 Mbytes +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) +Per MPI rank memory allocation (min/avg/max) = 7.675 | 7.675 | 7.675 Mbytes c_r0 c_r1 v_d5a v_d5b v_d5c v_d5d 4000 4000 1 1 1 1 -Loop time of 2.38419e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 1.49012e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +218.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -527,7 +536,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.384e-06 | | |100.00 +Other | | 1.49e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -570,20 +579,25 @@ compute r0 all reduce sum c_v1[1] thermo_style custom c_r0 variable t6 equal c_r0 run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... - 1 neighbor list requests update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2.3 ghost atom cutoff = 5 - binsize = 1.15 -> bins = 14 9 9 -Memory usage per processor = 8.20784 Mbytes + binsize = 1.15, bins = 14 9 9 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 9.493 | 9.493 | 9.493 Mbytes c_r0 1000 -Loop time of 2.86102e-06 on 4 procs for 0 steps with 4000 atoms +Loop time of 1.96695e-06 on 4 procs for 0 steps with 4000 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +165.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -593,7 +607,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.861e-06 | | |100.00 +Other | | 1.967e-06 | | |100.00 Nlocal: 1000 ave 1000 max 1000 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -616,4 +630,4 @@ undump d1 print TEST_DONE TEST_DONE -Total wall time: 0:00:03 +Total wall time: 0:00:02 From dd84b5c97596e15f1abf95a9ed2eacc6b0843a38 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 30 Nov 2018 07:50:57 -0500 Subject: [PATCH 237/273] make compute stress/mop and stress/mop/profile compatible with per-atom masses --- src/USER-MISC/compute_stress_mop.cpp | 35 +++++++++----- src/USER-MISC/compute_stress_mop_profile.cpp | 50 +++++++++++++------- 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/USER-MISC/compute_stress_mop.cpp b/src/USER-MISC/compute_stress_mop.cpp index e496fd4dfa..cb2a0b9713 100644 --- a/src/USER-MISC/compute_stress_mop.cpp +++ b/src/USER-MISC/compute_stress_mop.cpp @@ -70,7 +70,7 @@ ComputeStressMop::ComputeStressMop(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[4],"center")==0) { pos = 0.5*(domain->boxlo[dir]+domain->boxhi[dir]); } else pos = force->numeric(FLERR,arg[4]); - + if ( pos < (domain->boxlo[dir]+domain->prd_half[dir]) ) { pos1 = pos + domain->prd[dir]; } else { @@ -118,7 +118,7 @@ ComputeStressMop::ComputeStressMop(LAMMPS *lmp, int narg, char **arg) : if (pos >domain->boxhi[dir] || pos boxlo[dir]) error->all(FLERR, "Plane for compute stress/mop is out of bounds"); - + // Initialize some variables values_local = values_global = vector = NULL; @@ -168,13 +168,13 @@ void ComputeStressMop::init() // Timestep Value dt = update->dt; - + // Error check - + // Compute stress/mop requires fixed simulation box if (domain->box_change_size || domain->box_change_shape || domain->deform_flag) error->all(FLERR, "Compute stress/mop requires a fixed simulation box"); - + // This compute requires a pair style with pair_single method implemented if (force->pair == NULL) @@ -252,6 +252,7 @@ void ComputeStressMop::compute_pairs() int *ilist,*jlist,*numneigh,**firstneigh; double *mass = atom->mass; + double *rmass = atom->rmass; int *type = atom->type; int *mask = atom->mask; int nlocal = atom->nlocal; @@ -388,9 +389,15 @@ void ComputeStressMop::compute_pairs() fi[2] = atom->f[i][2]; //coordinates at t-dt (based on Velocity-Verlet alg.) - xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; - xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; - xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + if (rmass) { + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/rmass[i]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/rmass[i]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/rmass[i]*dt*dt*ftm2v; + } else { + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + } // because LAMMPS does not put atoms back in the box // at each timestep, must check atoms going through the @@ -406,9 +413,15 @@ void ComputeStressMop::compute_pairs() //approximate crossing velocity by v(t-dt/2) (based on Velocity-Verlet alg.) double vcross[3]; - vcross[0] = vi[0]-fi[0]/mass[itype]/2*ftm2v*dt; - vcross[1] = vi[1]-fi[1]/mass[itype]/2*ftm2v*dt; - vcross[2] = vi[2]-fi[2]/mass[itype]/2*ftm2v*dt; + if (rmass) { + vcross[0] = vi[0]-fi[0]/rmass[i]/2*ftm2v*dt; + vcross[1] = vi[1]-fi[1]/rmass[i]/2*ftm2v*dt; + vcross[2] = vi[2]-fi[2]/rmass[i]/2*ftm2v*dt; + } else { + vcross[0] = vi[0]-fi[0]/mass[itype]/2*ftm2v*dt; + vcross[1] = vi[1]-fi[1]/mass[itype]/2*ftm2v*dt; + vcross[2] = vi[2]-fi[2]/mass[itype]/2*ftm2v*dt; + } values_local[m] += mass[itype]*vcross[0]*sgn/dt/area*nktv2p/ftm2v; values_local[m+1] += mass[itype]*vcross[1]*sgn/dt/area*nktv2p/ftm2v; diff --git a/src/USER-MISC/compute_stress_mop_profile.cpp b/src/USER-MISC/compute_stress_mop_profile.cpp index 76bf487630..5499a37a46 100644 --- a/src/USER-MISC/compute_stress_mop_profile.cpp +++ b/src/USER-MISC/compute_stress_mop_profile.cpp @@ -168,20 +168,20 @@ void ComputeStressMopProfile::init() // timestep Value dt = update->dt; - + // Error check // Compute stress/mop/profile requires fixed simulation box - + if (domain->box_change_size || domain->box_change_shape || domain->deform_flag) error->all(FLERR, "Compute stress/mop/profile requires a fixed simulation box"); - + //This compute requires a pair style with pair_single method implemented if (force->pair == NULL) error->all(FLERR,"No pair style is defined for compute stress/mop/profile"); if (force->pair->single_enable == 0) error->all(FLERR,"Pair style does not support compute stress/mop/profile"); - + // Warnings if (me==0){ @@ -232,7 +232,7 @@ void ComputeStressMopProfile::compute_array() MPI_Allreduce(&values_local[0][0],&values_global[0][0],nbins*nvalues, MPI_DOUBLE,MPI_SUM,world); - int ibin,m,mo; + int ibin,m,mo; for (ibin=0; ibinmass; + double *rmass = atom->rmass; int *type = atom->type; int *mask = atom->mask; int nlocal = atom->nlocal; @@ -411,9 +412,15 @@ void ComputeStressMopProfile::compute_pairs() fi[2] = atom->f[i][2]; //coordinates at t-dt (based on Velocity-Verlet alg.) - xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; - xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; - xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + if (rmass) { + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/rmass[i]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/rmass[i]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/rmass[i]*dt*dt*ftm2v; + } else { + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + } for (ibin=0;ibin Date: Fri, 30 Nov 2018 08:00:08 -0500 Subject: [PATCH 238/273] remove trailing whitespace --- src/compute_adf.h | 2 +- src/compute_reduce_chunk.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compute_adf.h b/src/compute_adf.h index 4c9e13707b..a7983b7173 100644 --- a/src/compute_adf.h +++ b/src/compute_adf.h @@ -45,7 +45,7 @@ class ComputeADF : public Compute { double *rcutouterj, *rcutouterk; // list of outer cutoffs class NeighList *list; // full neighbor list - + int *iatomcount; // local number of central atoms int *iatomcountall; // total number of central atoms int **iatomflag; // 1 if type is central atom in ADF diff --git a/src/compute_reduce_chunk.h b/src/compute_reduce_chunk.h index ac556907b7..525bb0c7a7 100644 --- a/src/compute_reduce_chunk.h +++ b/src/compute_reduce_chunk.h @@ -52,7 +52,7 @@ class ComputeReduceChunk : public Compute { double *vlocal,*vglobal; double **alocal,**aglobal; double *varatom; - + class ComputeChunkAtom *cchunk; int *ichunk; From c69fc905884b86286a83d3db5a6cb2f0c1628fa2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Dec 2018 02:48:22 -0500 Subject: [PATCH 239/273] detect more incompatible setups for fix tune/kspace, and document --- doc/src/fix_tune_kspace.txt | 3 +++ src/KSPACE/fix_tune_kspace.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/doc/src/fix_tune_kspace.txt b/doc/src/fix_tune_kspace.txt index c398bf9157..f5173b4cae 100644 --- a/doc/src/fix_tune_kspace.txt +++ b/doc/src/fix_tune_kspace.txt @@ -86,6 +86,9 @@ package"_Build_package.html doc page for more info. Do not set "neigh_modify once yes" or else this fix will never be called. Reneighboring is required. +This fix is not compatible with a hybrid pair style, long-range dispersion, +TIP4P water support, or long-range point dipole support. + [Related commands:] "kspace_style"_kspace_style.html, "boundary"_boundary.html diff --git a/src/KSPACE/fix_tune_kspace.cpp b/src/KSPACE/fix_tune_kspace.cpp index a3ac5e1e83..3e90988cba 100644 --- a/src/KSPACE/fix_tune_kspace.cpp +++ b/src/KSPACE/fix_tune_kspace.cpp @@ -89,6 +89,14 @@ void FixTuneKspace::init() error->all(FLERR,"Cannot use fix tune/kspace without a kspace style"); if (!force->pair) error->all(FLERR,"Cannot use fix tune/kspace without a pair style"); + if (strncmp(force->pair_style,"hybrid",6) == 0) + error->all(FLERR,"Cannot use fix tune/kspace with a hybrid pair style"); + if (force->kspace->dispersionflag) + error->all(FLERR,"Cannot use fix tune/kspace with long-range dispersion"); + if (force->kspace->tip4pflag) + error->all(FLERR,"Cannot use fix tune/kspace with TIP4P water"); + if (force->kspace->dipoleflag) + error->all(FLERR,"Cannot use fix tune/kspace with dipole long-range solver"); double old_acc = force->kspace->accuracy/force->kspace->two_charge_force; char old_acc_str[12]; From 4ec05a33896235198240af047c0fdca5c7c0c329 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Dec 2018 08:14:02 -0500 Subject: [PATCH 240/273] remove some more trailing whitespace --- src/angle_deprecated.cpp | 2 +- src/bond_deprecated.cpp | 2 +- src/compute_adf.cpp | 44 +++++++++++++++---------------- src/compute_angle_local.cpp | 8 +++--- src/compute_bond_local.cpp | 8 +++--- src/compute_chunk_spread_atom.cpp | 2 +- src/compute_dihedral_local.cpp | 14 +++++----- src/compute_displace_atom.cpp | 4 +-- src/compute_rdf.cpp | 2 +- src/compute_reduce_chunk.cpp | 34 ++++++++++++------------ src/create_atoms.cpp | 6 ++--- src/delete_atoms.cpp | 2 +- src/dihedral_deprecated.cpp | 2 +- src/fix_group.cpp | 2 +- src/fix_restrain.cpp | 4 +-- src/improper_deprecated.cpp | 2 +- src/library.cpp | 8 +++--- src/pair_deprecated.cpp | 2 +- src/write_data.cpp | 2 +- 19 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/angle_deprecated.cpp b/src/angle_deprecated.cpp index 66efbfacbc..b5af217b7b 100644 --- a/src/angle_deprecated.cpp +++ b/src/angle_deprecated.cpp @@ -52,6 +52,6 @@ void AngleDeprecated::settings(int, char **) writemsg(lmp,"\nAngle style 'DEPRECATED' is a dummy style\n\n",0); } -} +} diff --git a/src/bond_deprecated.cpp b/src/bond_deprecated.cpp index e7d91df7b5..567b1a4d00 100644 --- a/src/bond_deprecated.cpp +++ b/src/bond_deprecated.cpp @@ -52,6 +52,6 @@ void BondDeprecated::settings(int, char **) writemsg(lmp,"\nBond style 'DEPRECATED' is a dummy style\n\n",0); } -} +} diff --git a/src/compute_adf.cpp b/src/compute_adf.cpp index 885a051b5b..e9f9ba2b6f 100644 --- a/src/compute_adf.cpp +++ b/src/compute_adf.cpp @@ -45,7 +45,7 @@ enum{DEGREE, RADIAN, COSINE}; ComputeADF::ComputeADF(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), - ilo(NULL), ihi(NULL), jlo(NULL), jhi(NULL), klo(NULL), khi(NULL), + ilo(NULL), ihi(NULL), jlo(NULL), jhi(NULL), klo(NULL), khi(NULL), hist(NULL), histall(NULL), rcutinnerj(NULL), rcutinnerk(NULL), rcutouterj(NULL), rcutouterk(NULL), @@ -53,7 +53,7 @@ ComputeADF::ComputeADF(LAMMPS *lmp, int narg, char **arg) : iatomcount(NULL), iatomcountall(NULL), iatomflag(NULL), maxjatom(NULL), maxkatom(NULL), numjatom(NULL), numkatom(NULL), - neighjatom(NULL),neighkatom(NULL), + neighjatom(NULL),neighkatom(NULL), jatomflag(NULL), katomflag(NULL), maxjkatom(NULL), numjkatom(NULL), neighjkatom(NULL), bothjkatom(NULL), delrjkatom(NULL) @@ -99,7 +99,7 @@ ComputeADF::ComputeADF(LAMMPS *lmp, int narg, char **arg) : if (!nargtriple) ntriples = 1; else { - if (nargtriple % nargsperadf) + if (nargtriple % nargsperadf) error->all(FLERR,"Illegal compute adf command"); ntriples = nargtriple/nargsperadf; } @@ -140,8 +140,8 @@ ComputeADF::ComputeADF(LAMMPS *lmp, int narg, char **arg) : force->bounds(FLERR,arg[iarg],atom->ntypes,ilo[m],ihi[m]); force->bounds(FLERR,arg[iarg+1],atom->ntypes,jlo[m],jhi[m]); force->bounds(FLERR,arg[iarg+2],atom->ntypes,klo[m],khi[m]); - if (ilo[m] > ihi[m] || - jlo[m] > jhi[m] || + if (ilo[m] > ihi[m] || + jlo[m] > jhi[m] || klo[m] > khi[m]) error->all(FLERR,"Illegal compute adf command"); rcutinnerj[m] = force->numeric(FLERR,arg[iarg+3]); @@ -157,7 +157,7 @@ ComputeADF::ComputeADF(LAMMPS *lmp, int narg, char **arg) : } // identify central atom types - + int i,j,k; for (int m = 0; m < ntriples; m++) { @@ -311,13 +311,13 @@ void ComputeADF::init() int x0; if (ordinate_style == DEGREE) { - deltax = MY_PI / nbin * rad2deg; - deltaxinv = nbin / MY_PI; + deltax = MY_PI / nbin * rad2deg; + deltaxinv = nbin / MY_PI; x0 = 0.0; } else if (ordinate_style == RADIAN) { deltax = MY_PI / nbin; - deltaxinv = nbin / MY_PI; + deltaxinv = nbin / MY_PI; x0 = 0.0; } else if (ordinate_style == COSINE) { @@ -392,7 +392,7 @@ void ComputeADF::compute_array() // tally the ADFs // all three atoms i, j, and k must be in fix group // tally I,J,K triple only if I is central atom - // and J,K matches unordered neighbor types (JJ,KK) + // and J,K matches unordered neighbor types (JJ,KK) double **x = atom->x; int *type = atom->type; @@ -422,22 +422,22 @@ void ComputeADF::compute_array() numkatom[m] = 0; numjkatom[m] = 0; } - + for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; factor_lj = special_lj[sbmask(j)]; factor_coul = special_coul[sbmask(j)]; j &= NEIGHMASK; - + // if both weighting factors are 0, skip this pair // could be 0 and still be in neigh list for long-range Coulombics // want consistency with non-charged triples which wouldn't be in list - + if (factor_lj == 0.0 && factor_coul == 0.0) continue; - + if (!(mask[j] & groupbit)) continue; jtype = type[j]; - + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -451,8 +451,8 @@ void ComputeADF::compute_array() if (!iatomflag[m][itype]) continue; int jflag = 0; - if (jatomflag[m][jtype] && - rsq >= rcutinnerj[m]*rcutinnerj[m] && + if (jatomflag[m][jtype] && + rsq >= rcutinnerj[m]*rcutinnerj[m] && rsq <= rcutouterj[m]*rcutouterj[m]) { jflag = 1; jatom = numjatom[m]++; @@ -462,10 +462,10 @@ void ComputeADF::compute_array() memory->grow(neighjatom[m],maxjatom[m],"adf:neighjatom"); } } - + int kflag = 0; - if (katomflag[m][jtype] && - rsq >= rcutinnerk[m]*rcutinnerk[m] && + if (katomflag[m][jtype] && + rsq >= rcutinnerk[m]*rcutinnerk[m] && rsq <= rcutouterk[m]*rcutouterk[m]) { kflag = 1; katom = numkatom[m]++; @@ -492,7 +492,7 @@ void ComputeADF::compute_array() memory->grow(delrjkatom[m],maxjkatom[m],4,"adf:delrjkatom"); } - // indicate if atom in both lists + // indicate if atom in both lists if (jflag && kflag) bothjkatom[m][jk] = 1; @@ -558,7 +558,7 @@ void ComputeADF::compute_array() // copy into output array for (m = 0; m < ntriples; m++) { - + double count = 0; for (ibin = 0; ibin < nbin; ibin++) count += histall[m][ibin]; diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp index cf5c9e808d..641784fe03 100644 --- a/src/compute_angle_local.cpp +++ b/src/compute_angle_local.cpp @@ -53,7 +53,7 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : bstyle = new int[nvalues]; vstr = new char*[nvalues]; vvar = new int[nvalues]; - + nvalues = 0; tflag = 0; nvar = 0; @@ -78,7 +78,7 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : setflag = 0; tstr = NULL; - + while (iarg < narg) { if (strcmp(arg[iarg],"set") == 0) { setflag = 1; @@ -114,7 +114,7 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : if (!input->variable->internalstyle(tvar)) error->all(FLERR,"Variable for compute angle/local is invalid style"); } - } else if (setflag) + } else if (setflag) error->all(FLERR,"Compute angle/local set with no variable"); // initialize output @@ -289,7 +289,7 @@ int ComputeAngleLocal::compute_angles(int flag) if (nvalues == 1) ptr = &vlocal[m]; else ptr = alocal[m]; - + if (nvar) { ivar = 0; if (tstr) input->variable->internal_set(tvar,theta); diff --git a/src/compute_bond_local.cpp b/src/compute_bond_local.cpp index 72ce2b5f8d..adbbde1a0c 100644 --- a/src/compute_bond_local.cpp +++ b/src/compute_bond_local.cpp @@ -55,7 +55,7 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : bstyle = new int[nvalues]; vstr = new char*[nvalues]; vvar = new int[nvalues]; - + nvalues = 0; nvar = 0; @@ -82,7 +82,7 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : setflag = 0; dstr = NULL; - + while (iarg < narg) { if (strcmp(arg[iarg],"set") == 0) { setflag = 1; @@ -117,10 +117,10 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : if (!input->variable->internalstyle(dvar)) error->all(FLERR,"Variable for compute bond/local is invalid style"); } - } else if (setflag) + } else if (setflag) error->all(FLERR,"Compute bond/local set with no variable"); - + // set singleflag if need to call bond->single() // set velflag if compute any quantities based on velocities diff --git a/src/compute_chunk_spread_atom.cpp b/src/compute_chunk_spread_atom.cpp index c5fd27b0c1..36fad5cca1 100644 --- a/src/compute_chunk_spread_atom.cpp +++ b/src/compute_chunk_spread_atom.cpp @@ -117,7 +117,7 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : "does not exist"); char *ptr = strstr(modify->compute[icompute]->style,"/chunk"); - if (!ptr || (ptr != modify->compute[icompute]->style + + if (!ptr || (ptr != modify->compute[icompute]->style + strlen(modify->compute[icompute]->style) - strlen("/chunk"))) error->all(FLERR,"Compute for compute chunk/spread/atom " "does not calculate per-chunk values"); diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp index 919081236c..9e18d03f9f 100644 --- a/src/compute_dihedral_local.cpp +++ b/src/compute_dihedral_local.cpp @@ -56,7 +56,7 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : bstyle = new int[nvalues]; vstr = new char*[nvalues]; vvar = new int[nvalues]; - + nvalues = 0; nvar = 0; @@ -77,11 +77,11 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : setflag = 0; pstr = NULL; - + while (iarg < narg) { if (strcmp(arg[iarg],"set") == 0) { setflag = 1; - if (iarg+3 > narg) + if (iarg+3 > narg) error->all(FLERR,"Illegal compute dihedral/local command"); if (strcmp(arg[iarg+1],"phi") == 0) { delete [] pstr; @@ -115,7 +115,7 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : if (!input->variable->internalstyle(pvar)) error->all(FLERR,"Variable for compute dihedral/local is invalid style"); } - } else if (setflag) + } else if (setflag) error->all(FLERR,"Compute dihedral/local set with no variable"); // initialize output @@ -295,17 +295,17 @@ int ComputeDihedralLocal::compute_dihedrals(int flag) if (rasq > 0) ra2inv = 1.0/rasq; if (rbsq > 0) rb2inv = 1.0/rbsq; rabinv = sqrt(ra2inv*rb2inv); - + c = (ax*bx + ay*by + az*bz)*rabinv; s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z); - + if (c > 1.0) c = 1.0; if (c < -1.0) c = -1.0; phi = atan2(s,c); if (nvalues == 1) ptr = &vlocal[m]; else ptr = alocal[m]; - + if (nvar) { ivar = 0; if (pstr) input->variable->internal_set(pvar,phi); diff --git a/src/compute_displace_atom.cpp b/src/compute_displace_atom.cpp index 0b6b40b62a..d8f279058e 100644 --- a/src/compute_displace_atom.cpp +++ b/src/compute_displace_atom.cpp @@ -48,7 +48,7 @@ ComputeDisplaceAtom::ComputeDisplaceAtom(LAMMPS *lmp, int narg, char **arg) : int iarg = 3; while (iarg < narg) { if (strcmp(arg[iarg],"refresh") == 0) { - if (iarg+2 > narg) + if (iarg+2 > narg) error->all(FLERR,"Illegal compute displace/atom command"); refreshflag = 1; delete [] rvar; @@ -63,7 +63,7 @@ ComputeDisplaceAtom::ComputeDisplaceAtom(LAMMPS *lmp, int narg, char **arg) : if (refreshflag) { ivar = input->variable->find(rvar); - if (ivar < 0) + if (ivar < 0) error->all(FLERR,"Variable name for compute displace/atom does not exist"); if (input->variable->atomstyle(ivar) == 0) error->all(FLERR,"Compute displace/atom variable " diff --git a/src/compute_rdf.cpp b/src/compute_rdf.cpp index 0809cc8b8e..d49485b4ea 100644 --- a/src/compute_rdf.cpp +++ b/src/compute_rdf.cpp @@ -77,7 +77,7 @@ ComputeRDF::ComputeRDF(LAMMPS *lmp, int narg, char **arg) : // pairwise args if (nargpair == 0) npairs = 1; - else { + else { if (nargpair % 2) error->all(FLERR,"Illegal compute rdf command"); npairs = nargpair/2; } diff --git a/src/compute_reduce_chunk.cpp b/src/compute_reduce_chunk.cpp index beebc5f411..32c4d9c786 100644 --- a/src/compute_reduce_chunk.cpp +++ b/src/compute_reduce_chunk.cpp @@ -51,7 +51,7 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : init_chunk(); // mode - + if (strcmp(arg[4],"sum") == 0) mode = SUM; else if (strcmp(arg[4],"min") == 0) mode = MINN; else if (strcmp(arg[4],"max") == 0) mode = MAXX; @@ -118,7 +118,7 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : } // error check - + for (int i = 0; i < nvalues; i++) { if (which[i] == COMPUTE) { int icompute = modify->find_compute(ids[i]); @@ -134,11 +134,11 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0) error->all(FLERR,"Compute reduce/chunk compute does not " "calculate a per-atom array"); - if (argindex[i] && + if (argindex[i] && argindex[i] > modify->compute[icompute]->size_peratom_cols) error->all(FLERR, "Compute reduce/chunk compute array is accessed out-of-range"); - + } else if (which[i] == FIX) { int ifix = modify->find_fix(ids[i]); if (ifix < 0) @@ -156,7 +156,7 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols) error->all(FLERR,"Compute reduce/chunk fix array is " "accessed out-of-range"); - + } else if (which[i] == VARIABLE) { int ivariable = input->variable->find(ids[i]); if (ivariable < 0) @@ -181,7 +181,7 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : } // setup - + if (mode == SUM) initvalue = 0.0; else if (mode == MINN) initvalue = BIG; else if (mode == MAXX) initvalue = -BIG; @@ -199,7 +199,7 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : ComputeReduceChunk::~ComputeReduceChunk() { delete [] idchunk; - + delete [] which; delete [] argindex; for (int m = 0; m < nvalues; m++) delete [] ids[m]; @@ -210,7 +210,7 @@ ComputeReduceChunk::~ComputeReduceChunk() memory->destroy(vglobal); memory->destroy(alocal); memory->destroy(aglobal); - + memory->destroy(varatom); } @@ -284,11 +284,11 @@ void ComputeReduceChunk::compute_vector() } // perform local reduction of single peratom value - + compute_one(0,vlocal,1); - + // reduce the per-chunk values across all procs - + if (mode == SUM) MPI_Allreduce(vlocal,vglobal,nchunk,MPI_DOUBLE,MPI_SUM,world); else if (mode == MINN) @@ -296,7 +296,7 @@ void ComputeReduceChunk::compute_vector() else if (mode == MAXX) MPI_Allreduce(vlocal,vglobal,nchunk,MPI_DOUBLE,MPI_MAX,world); } - + /* ---------------------------------------------------------------------- */ void ComputeReduceChunk::compute_array() @@ -324,11 +324,11 @@ void ComputeReduceChunk::compute_array() } // perform local reduction of all peratom values - + for (int m = 0; m < nvalues; m++) compute_one(m,&alocal[0][m],nvalues); // reduce the per-chunk values across all procs - + if (mode == SUM) MPI_Allreduce(&alocal[0][0],&aglobal[0][0],nchunk*nvalues, MPI_DOUBLE,MPI_SUM,world); @@ -339,13 +339,13 @@ void ComputeReduceChunk::compute_array() MPI_Allreduce(&alocal[0][0],&aglobal[0][0],nchunk*nvalues, MPI_DOUBLE,MPI_MAX,world); } - + /* ---------------------------------------------------------------------- */ void ComputeReduceChunk::compute_one(int m, double *vchunk, int nstride) { // initialize per-chunk values in accumulation vector - + for (int i = 0; i < nchunk; i += nstride) vchunk[i] = initvalue; // loop over my atoms @@ -382,7 +382,7 @@ void ComputeReduceChunk::compute_one(int m, double *vchunk, int nstride) combine(vchunk[index*nstride],acompute[i][argindexm1]); } } - + // access fix fields, check if fix frequency is a match } else if (which[m] == FIX) { diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 383c60f1cd..9c536dcbc6 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -576,11 +576,11 @@ void CreateAtoms::add_single() if (triclinic) { domain->x2lamda(xone,lamda); if (remapflag) { - if (domain->xperiodic && (lamda[0] < 0.0 || lamda[0] >= 1.0)) + if (domain->xperiodic && (lamda[0] < 0.0 || lamda[0] >= 1.0)) lamda[0] = 0.0; - if (domain->yperiodic && (lamda[1] < 0.0 || lamda[1] >= 1.0)) + if (domain->yperiodic && (lamda[1] < 0.0 || lamda[1] >= 1.0)) lamda[1] = 0.0; - if (domain->zperiodic && (lamda[2] < 0.0 || lamda[2] >= 1.0)) + if (domain->zperiodic && (lamda[2] < 0.0 || lamda[2] >= 1.0)) lamda[2] = 0.0; } coord = lamda; diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index e26ecad5f3..ec713b8b84 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -68,7 +68,7 @@ void DeleteAtoms::command(int narg, char **arg) if (allflag) { int igroup = group->find("all"); - if ((igroup >= 0) && + if ((igroup >= 0) && modify->check_rigid_group_overlap(group->bitmask[igroup])) error->warning(FLERR,"Attempting to delete atoms in rigid bodies"); } else { diff --git a/src/dihedral_deprecated.cpp b/src/dihedral_deprecated.cpp index 138d0971a8..70888ca76d 100644 --- a/src/dihedral_deprecated.cpp +++ b/src/dihedral_deprecated.cpp @@ -52,6 +52,6 @@ void DihedralDeprecated::settings(int, char **) writemsg(lmp,"\nDihedral style 'DEPRECATED' is a dummy style\n\n",0); } -} +} diff --git a/src/fix_group.cpp b/src/fix_group.cpp index 0980ff5456..8a332bed95 100644 --- a/src/fix_group.cpp +++ b/src/fix_group.cpp @@ -205,7 +205,7 @@ void FixGroup::set_group() // invoke atom-style variable if defined // set post_integrate flag to 1, then unset after - // this is for any compute to check if it needs to + // this is for any compute to check if it needs to // operate differently due to invocation this early in timestep // e.g. perform ghost comm update due to atoms having just moved diff --git a/src/fix_restrain.cpp b/src/fix_restrain.cpp index bb09116374..08485d65b3 100644 --- a/src/fix_restrain.cpp +++ b/src/fix_restrain.cpp @@ -191,7 +191,7 @@ void FixRestrain::min_setup(int vflag) void FixRestrain::post_force(int /*vflag*/) { energy = 0.0; - + ebond = 0.0; eangle = 0.0; edihed = 0.0; @@ -658,7 +658,7 @@ double FixRestrain::compute_vector(int n) } else if (n == 1) { MPI_Allreduce(&eangle,&eangle_all,1,MPI_DOUBLE,MPI_SUM,world); return eangle_all; - } else if (n == 2) { + } else if (n == 2) { MPI_Allreduce(&edihed,&edihed_all,1,MPI_DOUBLE,MPI_SUM,world); return edihed_all; } else { diff --git a/src/improper_deprecated.cpp b/src/improper_deprecated.cpp index e03fd785a7..6f4d08764f 100644 --- a/src/improper_deprecated.cpp +++ b/src/improper_deprecated.cpp @@ -52,6 +52,6 @@ void ImproperDeprecated::settings(int, char **) writemsg(lmp,"\nImproper style 'DEPRECATED' is a dummy style\n\n",0); } -} +} diff --git a/src/library.cpp b/src/library.cpp index a46689da09..429dd14cd9 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -957,7 +957,7 @@ void lammps_gather_atoms_concat(void *ptr, char *name, } // perform MPI_Allgatherv on each proc's chunk of Nlocal atoms - + int nprocs = lmp->comm->nprocs; int *recvcounts,*displs; @@ -1078,7 +1078,7 @@ void lammps_gather_atoms_subset(void *ptr, char *name, LAMMPS *lmp = (LAMMPS *) ptr; BEGIN_CAPTURE - { + { int i,j,m,offset; tagint id; @@ -1319,9 +1319,9 @@ void lammps_scatter_atoms(void *ptr, char *name, ------------------------------------------------------------------------- */ void lammps_scatter_atoms_subset(void *ptr, char *name, - int type, int count, + int type, int count, int ndata, int *ids, void *data) -{ +{ LAMMPS *lmp = (LAMMPS *) ptr; BEGIN_CAPTURE diff --git a/src/pair_deprecated.cpp b/src/pair_deprecated.cpp index 20b5c9775b..d8b3716341 100644 --- a/src/pair_deprecated.cpp +++ b/src/pair_deprecated.cpp @@ -52,6 +52,6 @@ void PairDeprecated::settings(int, char **) writemsg(lmp,"\nPair style 'DEPRECATED' is a dummy style\n\n",0); } -} +} diff --git a/src/write_data.cpp b/src/write_data.cpp index f18e30de52..7047aacfd4 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -255,7 +255,7 @@ void WriteData::header() } } - if (fixflag) + if (fixflag) for (int i = 0; i < modify->nfix; i++) if (modify->fix[i]->wd_header) for (int m = 0; m < modify->fix[i]->wd_header; m++) From 1c795a6be3c590eb83666c94f6553f02a07f66e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Dec 2018 21:38:22 -0500 Subject: [PATCH 241/273] remove trailing blanks --- src/BODY/body_rounded_polygon.cpp | 16 ++-- src/BODY/body_rounded_polyhedron.cpp | 12 +-- src/BODY/fix_wall_body_polygon.cpp | 4 +- src/BODY/fix_wall_body_polyhedron.cpp | 18 ++-- src/BODY/fix_wall_body_polyhedron.h | 2 +- src/BODY/pair_body_rounded_polygon.cpp | 22 ++--- src/BODY/pair_body_rounded_polyhedron.cpp | 72 +++++++-------- src/BODY/pair_body_rounded_polyhedron.h | 6 +- src/KOKKOS/atom_vec_sphere_kokkos.cpp | 4 +- src/KOKKOS/comm_kokkos.cpp | 2 +- src/KOKKOS/fix_freeze_kokkos.cpp | 2 +- src/KOKKOS/fix_freeze_kokkos.h | 4 +- src/KOKKOS/fix_gravity_kokkos.h | 2 +- src/KOKKOS/fix_neigh_history_kokkos.cpp | 8 +- src/KOKKOS/fix_neigh_history_kokkos.h | 4 +- src/KOKKOS/fix_nve_sphere_kokkos.cpp | 6 +- src/KOKKOS/fix_nve_sphere_kokkos.h | 4 +- src/KOKKOS/kokkos.h | 4 +- src/KOKKOS/pair_gran_hooke_history_kokkos.cpp | 14 +-- src/KOKKOS/pair_gran_hooke_history_kokkos.h | 6 +- src/KOKKOS/pair_reaxc_kokkos.cpp | 2 +- src/KSPACE/ewald.cpp | 2 +- src/LATTE/fix_latte.cpp | 2 +- src/MANYBODY/pair_atm.cpp | 14 +-- src/MANYBODY/pair_atm.h | 2 +- src/MANYBODY/pair_gw.cpp | 2 +- src/MESSAGE/fix_client_md.cpp | 6 +- src/MESSAGE/message.cpp | 12 +-- src/MESSAGE/server_mc.cpp | 2 +- src/MESSAGE/server_md.cpp | 16 ++-- src/POEMS/fix_poems.cpp | 2 +- src/REPLICA/fix_hyper_global.cpp | 8 +- src/REPLICA/fix_hyper_local.cpp | 46 +++++----- src/REPLICA/fix_hyper_local.h | 4 +- src/REPLICA/hyper.cpp | 10 +-- src/RIGID/fix_ehex.h | 6 +- src/RIGID/fix_rattle.h | 8 +- src/RIGID/fix_rigid.cpp | 6 +- src/RIGID/fix_rigid_small.cpp | 4 +- src/SPIN/pair_spin_dmi.cpp | 2 +- src/SPIN/pair_spin_exchange.cpp | 4 +- src/USER-INTEL/fix_intel.cpp | 2 +- src/USER-INTEL/fix_intel.h | 12 +-- src/USER-INTEL/intel_buffers.cpp | 4 +- src/USER-INTEL/intel_preprocess.h | 2 +- src/USER-INTEL/npair_full_bin_ghost_intel.cpp | 4 +- .../npair_halffull_newton_intel.cpp | 4 +- src/USER-INTEL/npair_intel.cpp | 16 ++-- src/USER-INTEL/npair_intel.h | 4 +- src/USER-INTEL/npair_skip_intel.cpp | 4 +- src/USER-INTEL/npair_skip_intel.h | 2 +- src/USER-INTEL/pair_airebo_intel.h | 2 +- src/USER-INTEL/pair_buck_coul_cut_intel.cpp | 2 +- src/USER-INTEL/pair_dpd_intel.cpp | 2 +- src/USER-INTEL/pppm_intel.cpp | 4 +- src/USER-MEAMC/meam_impl.cpp | 8 +- src/USER-MISC/compute_stress_mop.h | 38 ++++---- src/USER-MISC/compute_stress_mop_profile.h | 36 ++++---- src/USER-MISC/dihedral_table_cut.cpp | 8 +- src/USER-MISC/pair_kolmogorov_crespi_z.cpp | 14 +-- src/USER-MISC/pair_lj_mdf.cpp | 4 +- src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp | 38 ++++---- .../pair_buck6d_coul_gauss_long.cpp | 36 ++++---- src/USER-PTM/ptm_polar.cpp | 14 +-- src/USER-SCAFACOS/scafacos.cpp | 90 +++++++++---------- src/USER-SDPD/fix_meso_move.cpp | 2 +- src/USER-SDPD/fix_rigid_meso.cpp | 18 ++-- .../pair_sdpd_taitwater_isothermal.cpp | 24 ++--- src/USER-UEF/uef_utils.cpp | 14 +-- 69 files changed, 390 insertions(+), 390 deletions(-) diff --git a/src/BODY/body_rounded_polygon.cpp b/src/BODY/body_rounded_polygon.cpp index 00a09c912d..d352c789d7 100644 --- a/src/BODY/body_rounded_polygon.cpp +++ b/src/BODY/body_rounded_polygon.cpp @@ -170,7 +170,7 @@ void BodyRoundedPolygon::data_body(int ibonus, int ninteger, int ndouble, // nentries = number of double entries to be read from Body section: // 6 for inertia + 3*nsub for vertex coords + 1 for rounded radius - int nentries = 6 + 3*nsub + 1; + int nentries = 6 + 3*nsub + 1; if (ndouble != nentries) error->one(FLERR,"Incorrect # of floating-point values in " "Bodies section of data file"); @@ -279,7 +279,7 @@ void BodyRoundedPolygon::data_body(int ibonus, int ninteger, int ndouble, bonus->dvalue[k] = 0; *(&bonus->dvalue[k]+1) = 1; k += 2; - } + } erad = sqrt(erad2); bonus->dvalue[k] = erad; @@ -341,7 +341,7 @@ double BodyRoundedPolygon::radius_body(int /*ninteger*/, int ndouble, double maxrad = 0.0; double delta[3]; - int offset = 6; + int offset = 6; for (int i = 0; i < nsub; i++) { delta[0] = dfile[offset]; delta[1] = dfile[offset+1]; @@ -350,9 +350,9 @@ double BodyRoundedPolygon::radius_body(int /*ninteger*/, int ndouble, onerad = MathExtra::len3(delta); maxrad = MAX(maxrad,onerad); } - + // add in radius of rounded corners - + return maxrad + 0.5*dfile[offset]; } @@ -401,7 +401,7 @@ int BodyRoundedPolygon::image(int ibonus, double flag1, double /*flag2*/, AtomVecBody::Bonus *bonus = &avec->bonus[ibonus]; int n = bonus->ivalue[0]; - + if (n == 1) { for (int i = 0; i < n; i++) { imflag[i] = SPHERE; @@ -418,7 +418,7 @@ int BodyRoundedPolygon::image(int ibonus, double flag1, double /*flag2*/, } } else { - + // first end pt of each line for (int i = 0; i < n; i++) { @@ -436,7 +436,7 @@ int BodyRoundedPolygon::image(int ibonus, double flag1, double /*flag2*/, } // second end pt of each line - + for (int i = 0; i < n; i++) { j = i+1; if (j == n) j = 0; diff --git a/src/BODY/body_rounded_polyhedron.cpp b/src/BODY/body_rounded_polyhedron.cpp index 0e2ebbed83..99a380a932 100644 --- a/src/BODY/body_rounded_polyhedron.cpp +++ b/src/BODY/body_rounded_polyhedron.cpp @@ -132,7 +132,7 @@ double BodyRoundedPolyhedron::enclosing_radius(struct AtomVecBody::Bonus *bonus) int nvertices = bonus->ivalue[0]; if (nvertices == 1 || nvertices == 2) return *(bonus->dvalue+3*nsub(bonus)+2); - return *(bonus->dvalue+3*nsub(bonus) + 2*nedges(bonus) + + return *(bonus->dvalue+3*nsub(bonus) + 2*nedges(bonus) + MAX_FACE_SIZE*nfaces(bonus)); } @@ -143,7 +143,7 @@ double BodyRoundedPolyhedron::rounded_radius(struct AtomVecBody::Bonus *bonus) int nvertices = bonus->ivalue[0]; if (nvertices == 1 || nvertices == 2) return *(bonus->dvalue+3*nsub(bonus)+2+1); - return *(bonus->dvalue+3*nsub(bonus) + 2*nedges(bonus) + + return *(bonus->dvalue+3*nsub(bonus) + 2*nedges(bonus) + MAX_FACE_SIZE*nfaces(bonus)+1); } @@ -207,7 +207,7 @@ void BodyRoundedPolyhedron::data_body(int ibonus, int ninteger, int ndouble, // nsub == 1 || nsub == 2 || nsub == 3: // 6 for inertia + 3*nsub for vertex coords + 1 for rounded radius // nsub > 3: - // 6 for inertia + 3*nsub for vertex coords + 2*nsub for edges + + // 6 for inertia + 3*nsub for vertex coords + 2*nsub for edges + // 3*nfaces + 1 for rounded radius int nedges,nentries; @@ -327,7 +327,7 @@ void BodyRoundedPolyhedron::data_body(int ibonus, int ninteger, int ndouble, bonus->dvalue[k] = 0; *(&bonus->dvalue[k]+1) = 1; k += 2; - } + } erad = sqrt(erad2); bonus->dvalue[k] = erad; @@ -407,7 +407,7 @@ double BodyRoundedPolyhedron::radius_body(int /*ninteger*/, int ndouble, double maxrad = 0.0; double delta[3]; - int offset = 6; + int offset = 6; for (int i = 0; i < nsub; i++) { delta[0] = dfile[offset]; delta[1] = dfile[offset+1]; @@ -420,7 +420,7 @@ double BodyRoundedPolyhedron::radius_body(int /*ninteger*/, int ndouble, if (nsub > 2) offset += (2*nedges+MAX_FACE_SIZE*nfac); // add in radius of rounded corners - + return maxrad + 0.5*dfile[offset]; } diff --git a/src/BODY/fix_wall_body_polygon.cpp b/src/BODY/fix_wall_body_polygon.cpp index 3f8c08b6bd..0c9bd3e741 100644 --- a/src/BODY/fix_wall_body_polygon.cpp +++ b/src/BODY/fix_wall_body_polygon.cpp @@ -263,7 +263,7 @@ void FixWallBodyPolygon::post_force(int /*vflag*/) } ndiscrete = nedge = 0; - for (i = 0; i < nlocal; i++) + for (i = 0; i < nlocal; i++) dnum[i] = ednum[i] = 0; for (i = 0; i < nlocal; i++) { @@ -675,7 +675,7 @@ void FixWallBodyPolygon::contact_forces(Contact& contact, double j_a, AtomVecBody::Bonus *bonus; ibody = contact.ibody; - + // compute the velocity of the vertex in the space-fixed frame ibonus = atom->body[ibody]; diff --git a/src/BODY/fix_wall_body_polyhedron.cpp b/src/BODY/fix_wall_body_polyhedron.cpp index 9504e256b4..295608a444 100644 --- a/src/BODY/fix_wall_body_polyhedron.cpp +++ b/src/BODY/fix_wall_body_polyhedron.cpp @@ -102,7 +102,7 @@ FixWallBodyPolyhedron::FixWallBodyPolyhedron(LAMMPS *lmp, int narg, char **arg) if (strcmp(arg[iarg+2],"NULL") == 0) hi = BIG; else hi = force->numeric(FLERR,arg[iarg+2]); iarg += 3; - } + } // check for trailing keyword/values @@ -274,7 +274,7 @@ void FixWallBodyPolyhedron::post_force(int /*vflag*/) } ndiscrete = nedge = nface = 0; - for (i = 0; i < nlocal; i++) + for (i = 0; i < nlocal; i++) dnum[i] = ednum[i] = facnum[i] = 0; for (i = 0; i < nlocal; i++) { @@ -320,7 +320,7 @@ void FixWallBodyPolyhedron::post_force(int /*vflag*/) wall_pos = whi; side = ZHI; } - } + } rsq = dx*dx + dy*dy + dz*dz; if (rsq > radius[i]*radius[i]) continue; @@ -502,7 +502,7 @@ int FixWallBodyPolyhedron::sphere_against_wall(int i, double wall_pos, hi[0] = x[i][0]; hi[1] = x[i][1]; hi[2] = wall_pos; - } + } distance(hi, x[i], d); @@ -536,7 +536,7 @@ int FixWallBodyPolyhedron::sphere_against_wall(int i, double wall_pos, Output: contact_list = list of contacts between i and the wall num_contacts = number of contacts between i's vertices and the wall - Return: + Return: number of contacts of the edge to the wall (0, 1 or 2) ---------------------------------------------------------------------- */ @@ -578,7 +578,7 @@ int FixWallBodyPolyhedron::edge_against_wall(int i, double wall_pos, ------------------------------------------------------------------------- */ int FixWallBodyPolyhedron::compute_distance_to_wall(int ibody, int edge_index, - double *xmi, double rounded_radius_i, double wall_pos, + double *xmi, double rounded_radius_i, double wall_pos, int /*side*/, double* vwall, int &contact) { int mode,ifirst,iefirst,npi1,npi2; @@ -623,7 +623,7 @@ int FixWallBodyPolyhedron::compute_distance_to_wall(int ibody, int edge_index, hi[0] = xpi1[0]; hi[1] = xpi1[1]; hi[2] = wall_pos; - } + } distance(hi, xpi1, d1); @@ -658,7 +658,7 @@ int FixWallBodyPolyhedron::compute_distance_to_wall(int ibody, int edge_index, hi[0] = xpi2[0]; hi[1] = xpi2[1]; hi[2] = wall_pos; - } + } distance(hi, xpi2, d2); @@ -790,7 +790,7 @@ void FixWallBodyPolyhedron::contact_forces(Contact& contact, double j_a, AtomVecBody::Bonus *bonus; ibody = contact.ibody; - + // compute the velocity of the vertex in the space-fixed frame ibonus = atom->body[ibody]; diff --git a/src/BODY/fix_wall_body_polyhedron.h b/src/BODY/fix_wall_body_polyhedron.h index ff7b7ca7cf..7479f79e23 100644 --- a/src/BODY/fix_wall_body_polyhedron.h +++ b/src/BODY/fix_wall_body_polyhedron.h @@ -90,7 +90,7 @@ class FixWallBodyPolyhedron : public Fix { double rounded_radius_i, double wall_pos, int side, double* vwall, int &contact); double contact_separation(const Contact& c1, const Contact& c2); - void contact_forces(int ibody, double j_a, double *xi, double *xj, + void contact_forces(int ibody, double j_a, double *xi, double *xj, double delx, double dely, double delz, double fx, double fy, double fz, double** x, double** v, double** angmom, double** f, double** torque, double* vwall); diff --git a/src/BODY/pair_body_rounded_polygon.cpp b/src/BODY/pair_body_rounded_polygon.cpp index 9040817772..b6dcab29ae 100644 --- a/src/BODY/pair_body_rounded_polygon.cpp +++ b/src/BODY/pair_body_rounded_polygon.cpp @@ -275,9 +275,9 @@ void PairBodyRoundedPolygon::compute(int eflag, int vflag) // scale the force at both contacts - contact_forces(contact_list[m], j_a, x, v, angmom, f, torque, + contact_forces(contact_list[m], j_a, x, v, angmom, f, torque, evdwl, facc); - contact_forces(contact_list[n], j_a, x, v, angmom, f, torque, + contact_forces(contact_list[n], j_a, x, v, angmom, f, torque, evdwl, facc); done = 1; @@ -288,15 +288,15 @@ void PairBodyRoundedPolygon::compute(int eflag, int vflag) "xv = %f %f %f; xe = %f %f %f\n", m, contact_list[m].vertex, contact_list[m].ibody, contact_list[m].edge, contact_list[m].jbody, - contact_list[m].xv[0], contact_list[m].xv[1], - contact_list[m].xv[2], contact_list[m].xe[0], + contact_list[m].xv[0], contact_list[m].xv[1], + contact_list[m].xv[2], contact_list[m].xe[0], contact_list[m].xe[1], contact_list[m].xe[2]); printf(" %d: vertex %d of body %d and edge %d of body %d; " "xv = %f %f %f; xe = %f %f %f\n", n, contact_list[n].vertex, contact_list[n].ibody, contact_list[n].edge, contact_list[n].jbody, - contact_list[n].xv[0], contact_list[n].xv[1], - contact_list[n].xv[2], contact_list[n].xe[0], + contact_list[n].xv[0], contact_list[n].xv[1], + contact_list[n].xv[2], contact_list[n].xe[0], contact_list[n].xe[1], contact_list[n].xe[2]); #endif @@ -420,7 +420,7 @@ void PairBodyRoundedPolygon::coeff(int narg, char **arg) void PairBodyRoundedPolygon::init_style() { avec = (AtomVecBody *) atom->style_match("body"); - if (!avec) + if (!avec) error->all(FLERR,"Pair body/rounded/polygon requires atom style body"); if (strcmp(avec->bptr->style,"rounded/polygon") != 0) error->all(FLERR,"Pair body/rounded/polygon requires " @@ -501,7 +501,7 @@ void PairBodyRoundedPolygon::init_style() if (dnum[i] == 0) body2space(i); eradi = enclosing_radius[i]; if (eradi > merad[itype]) merad[itype] = eradi; - } else + } else merad[itype] = 0; } @@ -669,7 +669,7 @@ void PairBodyRoundedPolygon::sphere_against_sphere(int i, int j, f[i][0] += fx; f[i][1] += fy; f[i][2] += fz; - + if (newton_pair || j < nlocal) { f[j][0] -= fx; f[j][1] -= fy; @@ -860,7 +860,7 @@ int PairBodyRoundedPolygon::vertex_against_edge(int i, int j, #ifdef _CONVEX_POLYGON // done with the edges from body j, - // given that vertex ni interacts with only one vertex + // given that vertex ni interacts with only one vertex // from one edge of body j break; #endif @@ -1124,7 +1124,7 @@ int PairBodyRoundedPolygon::compute_distance_to_vertex(int ibody, mode = EDGE; if (d < contact_dist + EPSILON) contact = 1; - + } else { // t < 0 || t > 1: closer to either vertices of the edge if (t < 0) { diff --git a/src/BODY/pair_body_rounded_polyhedron.cpp b/src/BODY/pair_body_rounded_polyhedron.cpp index eea2aa3724..1a4653ce53 100644 --- a/src/BODY/pair_body_rounded_polyhedron.cpp +++ b/src/BODY/pair_body_rounded_polyhedron.cpp @@ -283,7 +283,7 @@ void PairBodyRoundedPolyhedron::compute(int eflag, int vflag) // check interaction between i's edges and j' faces #ifdef _POLYHEDRON_DEBUG printf("INTERACTION between edges of %d vs. faces of %d:\n", i, j); - #endif + #endif interact = edge_against_face(i, j, itype, jtype, x, contact_list, num_contacts, evdwl, facc); @@ -297,7 +297,7 @@ void PairBodyRoundedPolyhedron::compute(int eflag, int vflag) // check interaction between i's edges and j' edges #ifdef _POLYHEDRON_DEBUG printf("INTERACTION between edges of %d vs. edges of %d:\n", i, j); - #endif + #endif interact = edge_against_edge(i, j, itype, jtype, x, contact_list, num_contacts, evdwl, facc); @@ -478,7 +478,7 @@ void PairBodyRoundedPolyhedron::init_style() if (dnum[i] == 0) body2space(i); eradi = enclosing_radius[i]; if (eradi > merad[itype]) merad[itype] = eradi; - } else + } else merad[itype] = 0; } @@ -630,7 +630,7 @@ void PairBodyRoundedPolyhedron::sphere_against_sphere(int ibody, int jbody, vr3 = v[ibody][2] - v[jbody][2]; // normal component - + rsqinv = 1.0/rsq; vnnr = vr1*delx + vr2*dely + vr3*delz; vn1 = delx*vnnr * rsqinv; @@ -664,7 +664,7 @@ void PairBodyRoundedPolyhedron::sphere_against_sphere(int ibody, int jbody, f[ibody][0] += fx; f[ibody][1] += fy; f[ibody][2] += fz; - + if (newton_pair || jbody < nlocal) { f[jbody][0] -= fx; f[jbody][1] -= fy; @@ -797,7 +797,7 @@ void PairBodyRoundedPolyhedron::sphere_against_edge(int ibody, int jbody, fn[1] = -c_n * vn2; fn[2] = -c_n * vn3; - // tangential friction term at contact, + // tangential friction term at contact, // excluding the tangential deformation term ft[0] = -c_t * vt1; @@ -873,7 +873,7 @@ void PairBodyRoundedPolyhedron::sphere_against_face(int ibody, int jbody, xi3[2] = x[ibody][2] + discrete[ifirst+npi3][2]; // find the normal unit vector of the face - + MathExtra::sub3(xi2, xi1, ui); MathExtra::sub3(xi3, xi1, vi); MathExtra::cross3(ui, vi, n); @@ -1076,7 +1076,7 @@ int PairBodyRoundedPolyhedron::edge_against_face(int ibody, int jbody, itype, jtype, cut_inner, contact_list, num_contacts, energy, facc); - } + } } // end for looping through the edges of body i @@ -1171,7 +1171,7 @@ int PairBodyRoundedPolyhedron::interaction_edge_to_edge(int ibody, printf(" edge npi1 = %d (%f %f %f); npi2 = %d (%f %f %f) vs." " edge npj1 = %d (%f %f %f); npj2 = %d (%f %f %f): " "t1 = %f; t2 = %f; r = %f; dot = %f\n", - npi1, xi1[0], xi1[1], xi1[2], npi2, xi2[0], xi2[1], xi2[2], + npi1, xi1[0], xi1[1], xi1[2], npi2, xi2[0], xi2[1], xi2[2], npj1, xpj1[0], xpj1[1], xpj1[2], npj2, xpj2[0], xpj2[1], xpj2[2], t1, t2, r, dot); #endif @@ -1276,7 +1276,7 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, xi3[2] = xmi[2] + discrete[ifirst+npi3][2]; // find the normal unit vector of the face, ensure it point outward of the body - + MathExtra::sub3(xi2, xi1, ui); MathExtra::sub3(xi3, xi1, vi); MathExtra::cross3(ui, vi, n); @@ -1305,7 +1305,7 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, xpj2[1] = xmj[1] + discrete[jfirst+npj2][1]; xpj2[2] = xmj[2] + discrete[jfirst+npj2][2]; - // no interaction if two ends of the edge + // no interaction if two ends of the edge // are on the same side with the COM wrt the face if (opposite_sides(n, xi1, xmi, xpj1) == 0 && @@ -1340,9 +1340,9 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, int jflag = 1; #ifdef _POLYHEDRON_DEBUG - if (interact == EF_SAME_SIDE_OF_FACE) + if (interact == EF_SAME_SIDE_OF_FACE) printf(" - same side of face\n"); - else if (interact == EF_PARALLEL) + else if (interact == EF_PARALLEL) printf(" - parallel\n"); printf(" face: xi1 (%f %f %f) xi2 (%f %f %f) xi3 (%f %f %f)\n", xi1[0], xi1[1], xi1[2], xi2[0], xi2[1], xi2[2], xi3[0], xi3[1], xi3[2]); @@ -1387,9 +1387,9 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, } else { num_outside++; } - } + } - // xpj2 is in the interaction zone + // xpj2 is in the interaction zone // and its projection on the face is inside the triangle // compute vertex-face interaction and accumulate force/torque to both bodies @@ -1401,7 +1401,7 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, jflag, energy, facc); #ifdef _POLYHEDRON_DEBUG printf(" - compute pair force between vertex %d from edge %d of body %d " - "with face %d of body %d: d2 = %f\n", + "with face %d of body %d: d2 = %f\n", npj2, edge_index, jbody, face_index, ibody, d2); #endif @@ -1448,7 +1448,7 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, // compute interaction between the edge with the three edges of the face #ifdef _POLYHEDRON_DEBUG - printf(" - intersect outside triangle\n"); + printf(" - intersect outside triangle\n"); printf(" - compute pair force between edge %d of body %d " "with face %d of body %d\n", edge_index, jbody, face_index, ibody); printf(" face: xi1 (%f %f %f) xi2 (%f %f %f) xi3 (%f %f %f)\n", @@ -1693,7 +1693,7 @@ void PairBodyRoundedPolyhedron::rescale_cohesive_forces(double** x, xc[0] /= (double)num_unique_contacts; xc[1] /= (double)num_unique_contacts; xc[2] /= (double)num_unique_contacts; - + contact_area = 0.0; for (int m = 0; m < num_contacts; m++) { if (contact_list[m].unique == 0) continue; @@ -1847,12 +1847,12 @@ int PairBodyRoundedPolyhedron::edge_face_intersect(double* x1, double* x2, if (t < 0 || t > 1) { interact = EF_SAME_SIDE_OF_FACE; } else { - if (inside == 1) + if (inside == 1) interact = EF_INTERSECT_INSIDE; else interact = EF_INTERSECT_OUTSIDE; } - + return interact; } @@ -1998,7 +1998,7 @@ void PairBodyRoundedPolyhedron::project_pt_plane(const double* q, q_proj[2] = q[2] + n[2] * t; // check if the projection point is inside the triangle - // exclude the edges and vertices + // exclude the edges and vertices // edge-sphere and sphere-sphere interactions are handled separately inside = 0; @@ -2022,7 +2022,7 @@ void PairBodyRoundedPolyhedron::project_pt_line(const double* q, MathExtra::sub3(xi2, xi1, u); MathExtra::norm3(u); MathExtra::sub3(q, xi1, v); - + s = MathExtra::dot3(u, v); h[0] = xi1[0] + s * u[0]; h[1] = xi1[1] + s * u[1]; @@ -2039,13 +2039,13 @@ void PairBodyRoundedPolyhedron::project_pt_line(const double* q, t = (h[2] - xi1[2])/(xi2[2] - xi1[2]); } -/* ---------------------------------------------------------------------- +/* ---------------------------------------------------------------------- compute the shortest distance between two edges (line segments) x1, x2: two endpoints of the first edge x3, x4: two endpoints of the second edge - h1: the end point of the shortest segment perpendicular to both edges + h1: the end point of the shortest segment perpendicular to both edges on the line (x1;x2) - h2: the end point of the shortest segment perpendicular to both edges + h2: the end point of the shortest segment perpendicular to both edges on the line (x3;x4) t1: fraction of h1 in the segment (x1,x2) t2: fraction of h2 in the segment (x3,x4) @@ -2080,7 +2080,7 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, double s1,s2,x13[3],x23[3],x13h[3]; double t13,t23,t31,t41,x31[3],x41[3]; t13=t23=t31=t41=0.0; - + MathExtra::sub3(x1,x3,x13); // x13 = x1 - x3 MathExtra::sub3(x2,x3,x23); // x23 = x2 - x3 @@ -2089,7 +2089,7 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, x13h[1] = x13[1] - s1*v[1]; x13h[2] = x13[2] - s1*v[2]; r = MathExtra::len3(x13h); - + // x13 is the projection of x1 on x3-x4 x13[0] = x3[0] + s1*v[0]; @@ -2102,7 +2102,7 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, x23[0] = x3[0] + s2*v[0]; x23[1] = x3[1] + s2*v[1]; x23[2] = x3[2] + s2*v[2]; - + // find the fraction of the projection points on the edges if (fabs(x4[0] - x3[0]) > 0) @@ -2177,8 +2177,8 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, h1[0] = (x1[0]+x2[0])/2; h1[1] = (x1[1]+x2[1])/2; h1[2] = (x1[2]+x2[2])/2; - h2[0] = (x13[0]+x23[0])/2; - h2[1] = (x13[1]+x23[1])/2; + h2[0] = (x13[0]+x23[0])/2; + h2[1] = (x13[1]+x23[1])/2; h2[2] = (x13[2]+x23[2])/2; t1 = 0.5; t2 = (t13+t23)/2; @@ -2216,8 +2216,8 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, h1[0] = (x31[0]+x41[0])/2; h1[1] = (x31[1]+x41[1])/2; h1[2] = (x31[2]+x41[2])/2; - h2[0] = (x3[0]+x4[0])/2; - h2[1] = (x3[1]+x4[1])/2; + h2[0] = (x3[0]+x4[0])/2; + h2[1] = (x3[1]+x4[1])/2; h2[2] = (x3[2]+x4[2])/2; t1 = (t31+t41)/2; t2 = 0.5; @@ -2225,7 +2225,7 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, n2++; } } - } + } // if n1 == 0 and n2 == 0 at this point, // which means no overlapping segments bt two parallel edges, @@ -2233,10 +2233,10 @@ void PairBodyRoundedPolyhedron::distance_bt_edges(const double* x1, return; - } + } // find the vector n perpendicular to both edges - + MathExtra::cross3(u, v, n); MathExtra::norm3(n); @@ -2326,7 +2326,7 @@ double PairBodyRoundedPolyhedron::contact_separation(const Contact& c1, find the number of unique contacts ------------------------------------------------------------------------- */ -void PairBodyRoundedPolyhedron::find_unique_contacts(Contact* contact_list, +void PairBodyRoundedPolyhedron::find_unique_contacts(Contact* contact_list, int& num_contacts) { int n = num_contacts; diff --git a/src/BODY/pair_body_rounded_polyhedron.h b/src/BODY/pair_body_rounded_polyhedron.h index 71c04ff966..369f394c50 100644 --- a/src/BODY/pair_body_rounded_polyhedron.h +++ b/src/BODY/pair_body_rounded_polyhedron.h @@ -155,13 +155,13 @@ class PairBodyRoundedPolyhedron : public Pair { int& inside_a, int& inside_b); // helper functions int opposite_sides(double* n, double* x0, double* a, double* b); - void project_pt_plane(const double* q, const double* p, + void project_pt_plane(const double* q, const double* p, const double* n, double* q_proj, double &d); - void project_pt_plane(const double* q, const double* x1, const double* x2, + void project_pt_plane(const double* q, const double* x1, const double* x2, const double* x3, double* q_proj, double &d, int& inside); void project_pt_line(const double* q, const double* xi1, const double* xi2, double* h, double& d, double& t); - void inside_polygon(int ibody, int face_index, double* xmi, + void inside_polygon(int ibody, int face_index, double* xmi, const double* q1, const double* q2, int& inside1, int& inside2); void distance_bt_edges(const double* x1, const double* x2, diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index 3dfbc5efdc..f05e8d09df 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -792,7 +792,7 @@ int AtomVecSphereKokkos::pack_comm_self( const int &n, const DAT::tdual_int_2d &list, const int &iswap, const int nfirst, const int &pbc_flag, const int* const pbc) { // Fallback to AtomVecKokkos if radvary == 0 - if (radvary == 0) + if (radvary == 0) return AtomVecKokkos::pack_comm_self(n,list,iswap,nfirst,pbc_flag,pbc); if(commKK->forward_comm_on_host) { sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); @@ -1462,7 +1462,7 @@ struct AtomVecSphereKokkos_PackBorder { const int maxsend = (buf.extent(0)*buf.extent(1))/elements; _buf = typename ArrayTypes::t_xfloat_2d_um(buf.data(),maxsend,elements); } - + KOKKOS_INLINE_FUNCTION void operator() (const int& i) const { const int j = _list(_iswap,i); diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index f40156aabc..1d31c07180 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -210,7 +210,7 @@ void CommKokkos::forward_comm_device(int dummy) space,X_MASK); } } else if (ghost_velocity) { - if (size_forward_recv[iswap]) { + if (size_forward_recv[iswap]) { MPI_Irecv(k_buf_recv.view().data(), size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); diff --git a/src/KOKKOS/fix_freeze_kokkos.cpp b/src/KOKKOS/fix_freeze_kokkos.cpp index b87ec86f8f..ccf7c7ff85 100644 --- a/src/KOKKOS/fix_freeze_kokkos.cpp +++ b/src/KOKKOS/fix_freeze_kokkos.cpp @@ -75,7 +75,7 @@ void FixFreezeKokkos::post_force(int vflag) OriginalForce original; Kokkos::parallel_reduce(nlocal, *this, original); copymode = 0; - + foriginal[0] = original.values[0]; foriginal[1] = original.values[1]; foriginal[2] = original.values[2]; diff --git a/src/KOKKOS/fix_freeze_kokkos.h b/src/KOKKOS/fix_freeze_kokkos.h index 193e011995..3b5bc8e437 100644 --- a/src/KOKKOS/fix_freeze_kokkos.h +++ b/src/KOKKOS/fix_freeze_kokkos.h @@ -26,7 +26,7 @@ FixStyle(freeze/kk/host,FixFreezeKokkos) #include "kokkos_type.h" namespace LAMMPS_NS { - + template class FixFreezeKokkos : public FixFreeze { public: @@ -66,7 +66,7 @@ class FixFreezeKokkos : public FixFreeze { KOKKOS_INLINE_FUNCTION void operator()(const int i, OriginalForce &original) const; - + private: typename ArrayTypes::t_f_array f; typename ArrayTypes::t_f_array torque; diff --git a/src/KOKKOS/fix_gravity_kokkos.h b/src/KOKKOS/fix_gravity_kokkos.h index cc487a0e2d..9aa9ef803f 100644 --- a/src/KOKKOS/fix_gravity_kokkos.h +++ b/src/KOKKOS/fix_gravity_kokkos.h @@ -50,7 +50,7 @@ class FixGravityKokkos : public FixGravity { typename ArrayTypes::t_int_1d type; typename ArrayTypes::t_int_1d mask; }; - + } // namespace LAMMPS_NS #endif // LMP_FIX_GRAVITY_KOKKOS_H diff --git a/src/KOKKOS/fix_neigh_history_kokkos.cpp b/src/KOKKOS/fix_neigh_history_kokkos.cpp index d481c20818..ea0bd138f4 100644 --- a/src/KOKKOS/fix_neigh_history_kokkos.cpp +++ b/src/KOKKOS/fix_neigh_history_kokkos.cpp @@ -77,7 +77,7 @@ template void FixNeighHistoryKokkos::pre_exchange() { copymode = 1; - + h_resize() = 1; while (h_resize() > 0) { FixNeighHistoryKokkosZeroPartnerCountFunctor zero(this); @@ -156,7 +156,7 @@ template void FixNeighHistoryKokkos::post_neighbor() { tag = atomKK->k_tag.view(); - + int inum = pair->list->inum; NeighListKokkos* k_list = static_cast*>(pair->list); d_numneigh = k_list->d_numneigh; @@ -179,7 +179,7 @@ void FixNeighHistoryKokkos::post_neighbor() } copymode = 1; - + FixNeighHistoryKokkosPostNeighborFunctor f(this); Kokkos::parallel_for(inum,f); @@ -251,7 +251,7 @@ void FixNeighHistoryKokkos::grow_arrays(int nmax) k_npartner.template sync(); // force reallocation on host k_partner.template sync(); k_valuepartner.template sync(); - + memoryKK->grow_kokkos(k_npartner,npartner,nmax,"neighbor_history:npartner"); memoryKK->grow_kokkos(k_partner,partner,nmax,maxpartner,"neighbor_history:partner"); memoryKK->grow_kokkos(k_valuepartner,valuepartner,nmax,dnum*maxpartner,"neighbor_history:valuepartner"); diff --git a/src/KOKKOS/fix_neigh_history_kokkos.h b/src/KOKKOS/fix_neigh_history_kokkos.h index d5bb1c3971..ba594a567f 100644 --- a/src/KOKKOS/fix_neigh_history_kokkos.h +++ b/src/KOKKOS/fix_neigh_history_kokkos.h @@ -61,11 +61,11 @@ class FixNeighHistoryKokkos : public FixNeighHistory { typename ArrayTypes::t_neighbors_2d d_neighbors; typename ArrayTypes::t_int_1d_randomread d_ilist; typename ArrayTypes::t_int_1d_randomread d_numneigh; - + typename ArrayTypes::t_tagint_1d tag; typename ArrayTypes::t_int_1d d_npartner; typename ArrayTypes::t_tagint_2d d_partner; - typename ArrayTypes::t_float_2d d_valuepartner; + typename ArrayTypes::t_float_2d d_valuepartner; typename ArrayTypes::t_int_scalar d_resize; typename ArrayTypes::t_int_scalar h_resize; diff --git a/src/KOKKOS/fix_nve_sphere_kokkos.cpp b/src/KOKKOS/fix_nve_sphere_kokkos.cpp index d636f56b20..9c408d0630 100644 --- a/src/KOKKOS/fix_nve_sphere_kokkos.cpp +++ b/src/KOKKOS/fix_nve_sphere_kokkos.cpp @@ -75,7 +75,7 @@ void FixNVESphereKokkos::initial_integrate(int vflag) int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; - FixNVESphereKokkosInitialIntegrateFunctor f(this); + FixNVESphereKokkosInitialIntegrateFunctor f(this); Kokkos::parallel_for(nlocal,f); } @@ -95,7 +95,7 @@ void FixNVESphereKokkos::initial_integrate_item(const int i) const x(i,0) += dtv * v(i,0); x(i,1) += dtv * v(i,1); x(i,2) += dtv * v(i,2); - + const double dtirotate = dtfrotate / (radius(i)*radius(i)*rmass(i)); omega(i,0) += dtirotate * torque(i,0); omega(i,1) += dtirotate * torque(i,1); @@ -139,7 +139,7 @@ void FixNVESphereKokkos::final_integrate_item(const int i) const v(i,0) += dtfm * f(i,0); v(i,1) += dtfm * f(i,1); v(i,2) += dtfm * f(i,2); - + const double dtirotate = dtfrotate / (radius(i)*radius(i)*rmass(i)); omega(i,0) += dtirotate * torque(i,0); omega(i,1) += dtirotate * torque(i,1); diff --git a/src/KOKKOS/fix_nve_sphere_kokkos.h b/src/KOKKOS/fix_nve_sphere_kokkos.h index 382e530319..87a1835eb7 100644 --- a/src/KOKKOS/fix_nve_sphere_kokkos.h +++ b/src/KOKKOS/fix_nve_sphere_kokkos.h @@ -26,7 +26,7 @@ FixStyle(nve/sphere/kk/host,FixNVESphereKokkos) #include "kokkos_type.h" namespace LAMMPS_NS { - + template class FixNVESphereKokkos : public FixNVESphere { public: @@ -36,7 +36,7 @@ class FixNVESphereKokkos : public FixNVESphere { void init(); void initial_integrate(int); void final_integrate(); - + KOKKOS_INLINE_FUNCTION void initial_integrate_item(const int i) const; KOKKOS_INLINE_FUNCTION diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index e1e17a425a..cd429d5c1c 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -46,10 +46,10 @@ class KokkosLMP : protected Pointers { int need_dup() { int value = 0; - + if (neighflag == HALFTHREAD) value = NeedDup::value; - + return value; } diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp index cd8beed583..09e6c709a4 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp @@ -331,7 +331,7 @@ void PairGranHookeHistoryKokkos::operator()(TagPairGranHookeHistoryC const LMP_FLOAT imass = rmass[i]; const LMP_FLOAT irad = radius[i]; const int jnum = d_numneigh_touch[i]; - + F_FLOAT fx_i = 0.0; F_FLOAT fy_i = 0.0; F_FLOAT fz_i = 0.0; @@ -343,7 +343,7 @@ void PairGranHookeHistoryKokkos::operator()(TagPairGranHookeHistoryC for (int jj = 0; jj < jnum; jj++) { const int m = d_neighbors_touch(i, jj); const int j = d_neighbors(i, m) & NEIGHMASK; - + const X_FLOAT delx = xtmp - x(j,0); const X_FLOAT dely = ytmp - x(j,1); const X_FLOAT delz = ztmp - x(j,2); @@ -363,16 +363,16 @@ void PairGranHookeHistoryKokkos::operator()(TagPairGranHookeHistoryC V_FLOAT vr1 = v(i,0) - v(j,0); V_FLOAT vr2 = v(i,1) - v(j,1); V_FLOAT vr3 = v(i,2) - v(j,2); - + // normal component V_FLOAT vnnr = vr1*delx + vr2*dely + vr3*delz; V_FLOAT vn1 = delx*vnnr * rsqinv; V_FLOAT vn2 = dely*vnnr * rsqinv; V_FLOAT vn3 = delz*vnnr * rsqinv; - + // tangential component - + V_FLOAT vt1 = vr1 - vn1; V_FLOAT vt2 = vr2 - vn2; V_FLOAT vt3 = vr3 - vn3; @@ -467,7 +467,7 @@ void PairGranHookeHistoryKokkos::operator()(TagPairGranHookeHistoryC torquex_i -= irad*tor1; torquey_i -= irad*tor2; torquez_i -= irad*tor3; - + if (NEWTON_PAIR || j < nlocal) { a_f(j,0) -= fx; a_f(j,1) -= fy; @@ -550,7 +550,7 @@ void PairGranHookeHistoryKokkos::ev_tally_xyz_atom(EV_FLOAT &ev, int F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const { - Kokkos::View::value> > v_vatom = k_vatom.view(); + Kokkos::View::value> > v_vatom = k_vatom.view(); F_FLOAT v[6]; diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.h b/src/KOKKOS/pair_gran_hooke_history_kokkos.h index 822b9203a4..8d1778e091 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.h +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.h @@ -30,7 +30,7 @@ namespace LAMMPS_NS { template class FixNeighHistoryKokkos; - + template struct TagPairGranHookeHistoryCompute {}; @@ -68,7 +68,7 @@ class PairGranHookeHistoryKokkos : public PairGranHookeHistory { void ev_tally_xyz_atom(EV_FLOAT &ev, int i, int j, F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const; - + protected: typename AT::t_x_array_randomread x; typename AT::t_x_array c_x; @@ -96,7 +96,7 @@ class PairGranHookeHistoryKokkos : public PairGranHookeHistory { typename AT::t_neighbors_2d d_neighbors_touch; typename AT::t_int_1d d_numneigh_touch; - + int newton_pair; double special_lj[4]; diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 46ecddfd83..fc4298bf6d 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -854,7 +854,7 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) //dup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); //dup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); //dup_Cdbopi2 = Kokkos::Experimental::create_scatter_view(d_Cdbopi2); - } else { + } else { ndup_CdDelta = Kokkos::Experimental::create_scatter_view(d_CdDelta); //ndup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); //ndup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); diff --git a/src/KSPACE/ewald.cpp b/src/KSPACE/ewald.cpp index a24e3e123d..283c672bad 100644 --- a/src/KSPACE/ewald.cpp +++ b/src/KSPACE/ewald.cpp @@ -72,7 +72,7 @@ void Ewald::settings(int narg, char **arg) if (narg != 1) error->all(FLERR,"Illegal kspace_style ewald command"); accuracy_relative = fabs(force->numeric(FLERR,arg[0])); -} +} /* ---------------------------------------------------------------------- free all memory diff --git a/src/LATTE/fix_latte.cpp b/src/LATTE/fix_latte.cpp index a89be57bed..d1a96d32c6 100644 --- a/src/LATTE/fix_latte.cpp +++ b/src/LATTE/fix_latte.cpp @@ -299,7 +299,7 @@ void FixLatte::post_force(int vflag) if (coulomb) forces = &flatte[0][0]; else forces = &atom->f[0][0]; int maxiter = -1; - + latte(flags,&natoms,coords,type,&ntypes,mass,boxlo,boxhi,&domain->xy, &domain->xz,&domain->yz,forces,&maxiter,&latte_energy, &atom->v[0][0],&update->dt,virial,&newsystem,&latteerror); diff --git a/src/MANYBODY/pair_atm.cpp b/src/MANYBODY/pair_atm.cpp index a6e52faeba..e3be72443e 100644 --- a/src/MANYBODY/pair_atm.cpp +++ b/src/MANYBODY/pair_atm.cpp @@ -272,7 +272,7 @@ double PairATM::init_one(int i, int j) int ntypes = atom->ntypes; for (int k = j; k <= ntypes; k++) - nu[i][k][j] = nu[j][i][k] = nu[j][k][i] = nu[k][i][j] = nu[k][j][i] = + nu[i][k][j] = nu[j][i][k] = nu[j][k][i] = nu[k][i][j] = nu[k][j][i] = nu[i][j][k]; return cut_global; @@ -290,8 +290,8 @@ void PairATM::write_restart(FILE *fp) for (i = 1; i <= atom->ntypes; i++) { for (j = i; j <= atom->ntypes; j++) { fwrite(&setflag[i][j],sizeof(int),1,fp); - if (setflag[i][j]) - for (k = j; k <= atom->ntypes; k++) + if (setflag[i][j]) + for (k = j; k <= atom->ntypes; k++) fwrite(&nu[i][j][k],sizeof(double),1,fp); } } @@ -361,12 +361,12 @@ void PairATM::interaction_ddd(double nu, double r6, rrk = rjk[0]*rik[0] + rjk[1]*rik[1] + rjk[2]*rik[2]; rrr = 5.0*rri*rrj*rrk; for (int i = 0; i < 3; i++) { - fj[i] = rrj*(rrk - rri)*rik[i] - - (rrk*rri - rjk2*rik2 + rrr/rij2) * rij[i] + + fj[i] = rrj*(rrk - rri)*rik[i] - + (rrk*rri - rjk2*rik2 + rrr/rij2) * rij[i] + (rrk*rri - rik2*rij2 + rrr/rjk2) * rjk[i]; fj[i] *= 3.0*r5inv; - fk[i] = rrk*(rri + rrj)*rij[i] + - (rri*rrj + rik2*rij2 - rrr/rjk2) * rjk[i] + + fk[i] = rrk*(rri + rrj)*rij[i] + + (rri*rrj + rik2*rij2 - rrr/rjk2) * rjk[i] + (rri*rrj + rij2*rjk2 - rrr/rik2) * rik[i]; fk[i] *= 3.0*r5inv; } diff --git a/src/MANYBODY/pair_atm.h b/src/MANYBODY/pair_atm.h index 70883a81c7..8a9d38ec3b 100644 --- a/src/MANYBODY/pair_atm.h +++ b/src/MANYBODY/pair_atm.h @@ -43,7 +43,7 @@ class PairATM : public Pair { double ***nu; void allocate(); - void interaction_ddd(double, double, double, double, double, double *, + void interaction_ddd(double, double, double, double, double, double *, double *, double *, double *, double *, int, double &); }; diff --git a/src/MANYBODY/pair_gw.cpp b/src/MANYBODY/pair_gw.cpp index f2d3b67eb0..7649090a99 100644 --- a/src/MANYBODY/pair_gw.cpp +++ b/src/MANYBODY/pair_gw.cpp @@ -521,7 +521,7 @@ void PairGW::setup_params() for (m = 0; m < nparams; m++) { if (i == params[m].ielement && j == params[m].jelement && k == params[m].kelement) { - if (n >= 0) + if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); n = m; } diff --git a/src/MESSAGE/fix_client_md.cpp b/src/MESSAGE/fix_client_md.cpp index aca5cd41f9..9c1bfcc796 100644 --- a/src/MESSAGE/fix_client_md.cpp +++ b/src/MESSAGE/fix_client_md.cpp @@ -40,11 +40,11 @@ enum{FORCES=1,ENERGY,PRESSURE,ERROR}; FixClientMD::FixClientMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (lmp->clientserver != 1) + if (lmp->clientserver != 1) error->all(FLERR,"Fix client/md requires LAMMPS be running as a client"); if (!atom->map_style) error->all(FLERR,"Fix client/md requires atom map"); - if (sizeof(tagint) != 4) + if (sizeof(tagint) != 4) error->all(FLERR,"Fix client/md requires 4-byte atom IDs"); if (strcmp(update->unit_style,"real") == 0) units = REAL; @@ -306,7 +306,7 @@ void FixClientMD::receive_fev(int vflag) } eng = econvert * cs->unpack_double(ENERGY); - + if (vflag) { double *v = (double *) cs->unpack(PRESSURE); diff --git a/src/MESSAGE/message.cpp b/src/MESSAGE/message.cpp index 329ce1fbd9..e9bff7d38a 100644 --- a/src/MESSAGE/message.cpp +++ b/src/MESSAGE/message.cpp @@ -51,13 +51,13 @@ void Message::command(int narg, char **arg) strcmp(arg[2],"mpi/two") == 0) { if (narg != 4) error->all(FLERR,"Illegal message command"); lmp->cslib = new CSlib(clientserver-1,arg[2],arg[3],&world); - + } else if (strcmp(arg[2],"mpi/one") == 0) { if (narg != 3) error->all(FLERR,"Illegal message command"); - if (!lmp->cscomm) + if (!lmp->cscomm) error->all(FLERR,"Message mpi/one mode, but -mpi cmdline arg not used"); lmp->cslib = new CSlib(clientserver-1,arg[2],&lmp->cscomm,&world); - + } else error->all(FLERR,"Illegal message command"); // perform initial handshake between client and server @@ -75,16 +75,16 @@ void Message::command(int narg, char **arg) int *fieldID,*fieldtype,*fieldlen; int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); if (msgID != 0) error->one(FLERR,"Bad initial client/server handshake"); - + } else { int nfield; int *fieldID,*fieldtype,*fieldlen; int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); if (msgID != 0) error->one(FLERR,"Bad initial client/server handshake"); char *pstr = cs->unpack_string(1); - if (strcmp(pstr,arg[1]) != 0) + if (strcmp(pstr,arg[1]) != 0) error->one(FLERR,"Mismatch in client/server protocol"); - + cs->send(0,0); } } diff --git a/src/MESSAGE/server_mc.cpp b/src/MESSAGE/server_mc.cpp index 8a7344e86b..8e9a297912 100644 --- a/src/MESSAGE/server_mc.cpp +++ b/src/MESSAGE/server_mc.cpp @@ -128,7 +128,7 @@ void ServerMC::loop() update->nsteps = nsteps; update->firststep = update->ntimestep; update->laststep = update->ntimestep + nsteps; - + update->integrate->setup(1); update->integrate->run(nsteps); diff --git a/src/MESSAGE/server_md.cpp b/src/MESSAGE/server_md.cpp index aa771b7d46..8debd3a987 100644 --- a/src/MESSAGE/server_md.cpp +++ b/src/MESSAGE/server_md.cpp @@ -100,7 +100,7 @@ void ServerMD::loop() if (msgID < 0) break; // SETUP receive at beginning of each run - // required fields: DIM, PERIODICTY, ORIGIN, BOX, + // required fields: DIM, PERIODICTY, ORIGIN, BOX, // NATOMS, NTYPES, TYPES, COORDS // optional fields: others in enum above @@ -152,7 +152,7 @@ void ServerMD::loop() } else error->all(FLERR,"Server md setup field unknown"); } - if (dim == 0 || !periodicity || !origin || !box || + if (dim == 0 || !periodicity || !origin || !box || natoms < 0 || ntypes < 0 || !types || !coords) error->all(FLERR,"Required server md setup field not received"); @@ -164,8 +164,8 @@ void ServerMD::loop() // reset box, global and local // reset proc decomposition - - if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && + + if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && domain->triclinic == 0) error->all(FLERR,"Server md is not initialized for a triclinic box"); @@ -194,7 +194,7 @@ void ServerMD::loop() int ntotal; MPI_Allreduce(&atom->nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); - if (ntotal != natoms) + if (ntotal != natoms) error->all(FLERR,"Server md atom count does not match client"); atom->map_init(); @@ -247,7 +247,7 @@ void ServerMD::loop() // reset global/local box like FixDeform at end_of_step() if (origin && box) { - if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && + if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && domain->triclinic == 0) error->all(FLERR,"Server md is not initialized for a triclinic box"); box_change(origin,box); @@ -348,7 +348,7 @@ void ServerMD::send_fev(int msgID) CSlib *cs = (CSlib *) lmp->cslib; cs->send(msgID,3); - + double *forces = NULL; if (atom->nlocal) { if (units != REAL) forces = &atom->f[0][0]; @@ -370,7 +370,7 @@ void ServerMD::send_fev(int msgID) MPI_Allreduce(&eng,&engall,1,MPI_DOUBLE,MPI_SUM,world); engall *= econvert; cs->pack_double(ENERGY,engall); - + double v[6],vall[6]; for (int i = 0; i < 6; i++) v[i] = force->pair->virial[i]; diff --git a/src/POEMS/fix_poems.cpp b/src/POEMS/fix_poems.cpp index a01878bffd..41cfcede34 100644 --- a/src/POEMS/fix_poems.cpp +++ b/src/POEMS/fix_poems.cpp @@ -366,7 +366,7 @@ void FixPOEMS::init() int pflag = 0; for (i = 0; i < modify->nfix; i++) { if (strcmp(modify->fix[i]->style,"poems") == 0) pflag = 1; - if (pflag && (modify->fmask[i] & POST_FORCE) && + if (pflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; snprintf(str,128,"Fix %s alters forces after fix poems",modify->fix[i]->id); diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index d119083a3b..d235b06dc0 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -44,7 +44,7 @@ using namespace FixConst; FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) : FixHyper(lmp, narg, arg), blist(NULL), xold(NULL), tagold(NULL) { - if (atom->map_style == 0) + if (atom->map_style == 0) error->all(FLERR,"Fix hyper/global command requires atom map"); if (narg != 7) error->all(FLERR,"Illegal fix hyper/global command"); @@ -392,7 +392,7 @@ void FixHyperGlobal::grow_bond() maxbond += DELTA; if (maxbond < 0 || maxbond > MAXSMALLINT) error->one(FLERR,"Fix hyper/local per-processor bond count is too big"); - blist = (OneBond *) + blist = (OneBond *) memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/local:blist"); } @@ -429,7 +429,7 @@ double FixHyperGlobal::compute_vector(int i) // i = 7 = max bond length during this run // i = 8 = cummulative hyper time since fix created - // i = 9 = cummulative # of event timesteps since fix created + // i = 9 = cummulative # of event timesteps since fix created // i = 10 = cummulative # of atoms in events since fix created if (i == 0) return outvec[1]; @@ -478,7 +478,7 @@ double FixHyperGlobal::query(int i) { if (i == 1) return compute_vector(8); // cummulative hyper time if (i == 2) return compute_vector(9); // nevent - if (i == 3) return compute_vector(10); // nevent_atom + if (i == 3) return compute_vector(10); // nevent_atom if (i == 4) return compute_vector(4); // ave bonds/atom if (i == 5) return compute_vector(6); // maxdrift if (i == 6) return compute_vector(7); // maxbondlen diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index d4fa08f261..25dd3d72af 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -54,7 +54,7 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : // local index vs global ID in same variable // maybe need to declare them all tagint, not int - if (atom->map_style == 0) + if (atom->map_style == 0) error->all(FLERR,"Fix hyper/local command requires atom map"); if (sizeof(tagint) != sizeof(int)) @@ -81,7 +81,7 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : alpha_user = force->numeric(FLERR,arg[8]); boosttarget = force->numeric(FLERR,arg[9]); - if (cutbond < 0.0 || qfactor < 0.0 || vmax < 0.0 || + if (cutbond < 0.0 || qfactor < 0.0 || vmax < 0.0 || tequil <= 0.0 || dcut <= 0.0 || alpha_user <= 0.0 || boosttarget < 1.0) error->all(FLERR,"Illegal fix hyper/local command"); @@ -107,7 +107,7 @@ FixHyperLocal::FixHyperLocal(LAMMPS *lmp, int narg, char **arg) : histo_count = force->inumeric(FLERR,arg[iarg+2]); histo_delta = force->numeric(FLERR,arg[iarg+3]); histo_print = force->inumeric(FLERR,arg[iarg+4]); - if (histo_every <= 0 || histo_count % 2 || + if (histo_every <= 0 || histo_count % 2 || histo_delta <= 0.0 || histo_print <= 0) error->all(FLERR,"Illegal fix hyper/local command"); iarg += 5; @@ -276,16 +276,16 @@ void FixHyperLocal::init() // warn if no drift distance added to cutghost if (firstflag) { - double cutghost; - if (force->pair) + double cutghost; + if (force->pair) cutghost = MAX(force->pair->cutforce+neighbor->skin,comm->cutghostuser); - else + else cutghost = comm->cutghostuser; - - if (cutghost < dcut) + + if (cutghost < dcut) error->all(FLERR,"Fix hyper/local bond cutoff exceeds ghost atom range - " "use comm_modify cutoff command"); - if (cutghost < dcut+cutbond/2.0 && me == 0) + if (cutghost < dcut+cutbond/2.0 && me == 0) error->warning(FLERR,"Fix hyper/local ghost atom range " "may not allow for atom drift between events"); } @@ -371,8 +371,8 @@ void FixHyperLocal::pre_neighbor() missing_coeff += bonds[i][m].boostcoeff; if (lostbond != IGNORE) { char str[128]; - sprintf(str,"Fix hyper/local bond info missing for bond " - TAGINT_FORMAT "," TAGINT_FORMAT + sprintf(str,"Fix hyper/local bond info missing for bond " + TAGINT_FORMAT "," TAGINT_FORMAT " with coeff %g at step " BIGINT_FORMAT, atom->tag[i],bonds[i][m].jtag,bonds[i][m].boostcoeff, update->ntimestep); @@ -520,7 +520,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) i = old2now[iold]; emax = maxstrain[i]; - + for (jj = 0; jj < jnum; jj++) { jold = jlist[jj]; j = old2now[jold]; @@ -722,13 +722,13 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) if (me == 0) { if (screen) { fprintf(screen,"Histogram of bias coeffs:\n"); - for (i = 0; i < histo_count+2; i++) + for (i = 0; i < histo_count+2; i++) fprintf(screen," %g",1.0*allhisto[i]/total); fprintf(screen,"\n"); } if (logfile) { fprintf(logfile,"Histogram of bias coeffs:\n"); - for (i = 0; i < histo_count+2; i++) + for (i = 0; i < histo_count+2; i++) fprintf(logfile," %g",1.0*allhisto[i]/total); fprintf(logfile,"\n"); } @@ -790,7 +790,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) if (checkcoeff && update->ntimestep % checkcoeff_every == 0) { int jb,jbonds; - + for (i = 0; i < nlocal; i++) { nbond = numbond[i]; for (m = 0; m < nbond; m++) { @@ -802,9 +802,9 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) jbonds = numbond[j]; for (jb = 0; jb < jbonds; jb++) if (bonds[j][jb].jtag == itag) break; - if (jb == jbonds) + if (jb == jbonds) error->one(FLERR,"Fix hyper/local could not find duplicate bond"); - if (bonds[i][m].boostcoeff != bonds[j][jb].boostcoeff) + if (bonds[i][m].boostcoeff != bonds[j][jb].boostcoeff) checkcoeff_count++; } } @@ -885,7 +885,7 @@ void FixHyperLocal::build_bond_list(int natom) ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; - + while (1) { bonds = (OneBond **) memory->create(bonds,nmax,maxbondperatom, "hyper/local:bonds"); @@ -941,7 +941,7 @@ void FixHyperLocal::build_bond_list(int natom) nbond++; continue; } - + bonds[i][nbond].r0 = sqrt(rsq); bonds[i][nbond].jtag = tag[j]; bonds[i][nbond].j = j; @@ -998,7 +998,7 @@ void FixHyperLocal::build_bond_list(int natom) /* ---------------------------------------------------------------------- */ -int FixHyperLocal::pack_forward_comm(int n, int *list, double *buf, +int FixHyperLocal::pack_forward_comm(int n, int *list, double *buf, int /* pbc_flag */, int * /* pbc */) { int i,j,m; @@ -1233,7 +1233,7 @@ double FixHyperLocal::compute_vector(int i) // i = 9 = average bias potential for all bonds during this run // i = 10 = max bias potential for any bond during this run // i = 11 = min bias potential for any bond during this run - // i = 12 = max dist from my box of any ghost atom with + // i = 12 = max dist from my box of any ghost atom with // maxstain < qfactor during this run // i = 13 = max dist from my box of any ghost atom with // any maxstrain during this run @@ -1245,7 +1245,7 @@ double FixHyperLocal::compute_vector(int i) // i = 18 = count of non-matching bias coefficients found during this run // i = 19 = cummulative hyper time - // i = 20 = cummulative # of event timesteps since fix created + // i = 20 = cummulative # of event timesteps since fix created // i = 21 = cummulative # of atoms in events since fix created // i = 22 = cummulative # of new bonds formed since fix created @@ -1394,7 +1394,7 @@ double FixHyperLocal::query(int i) { if (i == 1) return compute_vector(19); // cummulative hyper time if (i == 2) return compute_vector(20); // nevent - if (i == 3) return compute_vector(21); // nevent_atom + if (i == 3) return compute_vector(21); // nevent_atom if (i == 4) return compute_vector(3); // ave bonds/atom if (i == 5) return compute_vector(6); // maxdrift if (i == 6) return compute_vector(7); // maxbondlen diff --git a/src/REPLICA/fix_hyper_local.h b/src/REPLICA/fix_hyper_local.h index 967101837e..147e3ef1ef 100644 --- a/src/REPLICA/fix_hyper_local.h +++ b/src/REPLICA/fix_hyper_local.h @@ -82,7 +82,7 @@ class FixHyperLocal : public FixHyper { double allboost; // sum of boostcoeff on all bonds on this step int nnewbond; // running tally of number of new bonds created - int maxbondperatom; // max # of bonds any atom ever has + int maxbondperatom; // max # of bonds any atom ever has int commflag; // flag for communication mode int nevent; // # of events that trigger bond rebuild int nevent_atom; // # of atoms that experienced an event @@ -115,7 +115,7 @@ class FixHyperLocal : public FixHyper { double **xold; // coords of owned+ghost atoms when bonds created tagint *tagold; // global IDs of owned+ghost atoms when b created - + int maxold; // allocated size of old2now int maxbond; // allocated size of bonds int old_nall; // nlocal+nghost when old2now was last setup diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 89409d63fc..22940de221 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -40,7 +40,7 @@ enum{NOHYPER,GLOBAL,LOCAL}; /* ---------------------------------------------------------------------- */ -Hyper::Hyper(LAMMPS *lmp) : +Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp), dumplist(NULL) {} @@ -73,7 +73,7 @@ void Hyper::command(int narg, char **arg) // total # of timesteps must be multiple of t_event - if (t_event <= 0) + if (t_event <= 0) error->all(FLERR,"Invalid t_event in hyper command"); if (nsteps % t_event) error->all(FLERR,"Hyper nsteps must be multiple of t_event"); @@ -209,7 +209,7 @@ void Hyper::command(int narg, char **arg) dynamics(t_event,time_dynamics); fix_event->store_state_quench(); quench(0); - + ecount = compute_event->all_events(); if (ecount) { @@ -226,7 +226,7 @@ void Hyper::command(int narg, char **arg) fix_event->store_event(); if (hyperenable) fix_hyper->build_bond_list(ecount); } - + fix_event->restore_state_quench(); istep = update->ntimestep - update->beginstep; } @@ -519,7 +519,7 @@ void Hyper::options(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command"); dumpflag = 1; int idump = output->find_dump(arg[iarg+1]); - if (idump < 0) + if (idump < 0) error->all(FLERR,"Dump ID in hyper command does not exist"); memory->grow(dumplist,ndump+1,"hyper:dumplist"); dumplist[ndump++] = idump; diff --git a/src/RIGID/fix_ehex.h b/src/RIGID/fix_ehex.h index b606330f11..e29ddac135 100644 --- a/src/RIGID/fix_ehex.h +++ b/src/RIGID/fix_ehex.h @@ -75,7 +75,7 @@ class FixEHEX : public Fix { /* ERROR/WARNING messages: -E: Illegal fix ehex command: wrong number of parameters +E: Illegal fix ehex command: wrong number of parameters UNDOCUMENTED @@ -87,11 +87,11 @@ E: Region ID for fix ehex does not exist Self-explanatory. -E: Illegal fix ehex keyword +E: Illegal fix ehex keyword UNDOCUMENTED -E: You can only use the keyword 'com' together with the keyword 'constrain' +E: You can only use the keyword 'com' together with the keyword 'constrain' UNDOCUMENTED diff --git a/src/RIGID/fix_rattle.h b/src/RIGID/fix_rattle.h index a0405bbdcc..48edaef379 100644 --- a/src/RIGID/fix_rattle.h +++ b/src/RIGID/fix_rattle.h @@ -79,7 +79,7 @@ class FixRattle : public FixShake { /* ERROR/WARNING messages: -W: Fix rattle should come after all other integration fixes +W: Fix rattle should come after all other integration fixes UNDOCUMENTED @@ -88,15 +88,15 @@ E: Rattle determinant = 0.0 The determinant of the matrix being solved for a single cluster specified by the fix rattle command is numerically invalid. -E: Rattle failed +E: Rattle failed UNDOCUMENTED -E: Coordinate constraints are not satisfied up to desired tolerance +E: Coordinate constraints are not satisfied up to desired tolerance UNDOCUMENTED -E: Velocity constraints are not satisfied up to desired tolerance +E: Velocity constraints are not satisfied up to desired tolerance UNDOCUMENTED diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 39c49ca1c4..8fa43b89ce 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -174,7 +174,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : MPI_Allreduce(&vmin,&minval,1,MPI_INT,MPI_MIN,world); molecule = new tagint[nlocal]; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) + if (mask[i] & groupbit) molecule[i] = (tagint)((tagint)value[i] - minval + 1); delete[] value; } else error->all(FLERR,"Unsupported fix rigid custom property"); @@ -727,7 +727,7 @@ void FixRigid::init() int rflag = 0; for (i = 0; i < modify->nfix; i++) { if (modify->fix[i]->rigid_flag) rflag = 1; - if (rflag && (modify->fmask[i] & POST_FORCE) && + if (rflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; snprintf(str,128,"Fix %s alters forces after fix rigid",modify->fix[i]->id); @@ -2639,7 +2639,7 @@ int FixRigid::modify_param(int narg, char **arg) else error->all(FLERR,"Illegal fix_modify command"); // reset fix mask - // must do here and not in init, + // must do here and not in init, // since modify.cpp::init() uses fix masks before calling fix::init() for (int i = 0; i < modify->nfix; i++) diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 44e1870e0a..fb185d7702 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -566,7 +566,7 @@ void FixRigidSmall::init() int rflag = 0; for (i = 0; i < modify->nfix; i++) { if (modify->fix[i]->rigid_flag) rflag = 1; - if (rflag && (modify->fmask[i] & POST_FORCE) && + if (rflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; snprintf(str,128,"Fix %s alters forces after fix rigid",modify->fix[i]->id); @@ -3430,7 +3430,7 @@ int FixRigidSmall::modify_param(int narg, char **arg) else error->all(FLERR,"Illegal fix_modify command"); // reset fix mask - // must do here and not in init, + // must do here and not in init, // since modify.cpp::init() uses fix masks before calling fix::init() for (int i = 0; i < modify->nfix; i++) diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 6f8114042e..18682fdb9f 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -414,7 +414,7 @@ void PairSpinDmi::compute_dmi(int i, int j, double eij[3], double fmi[3], double compute the mechanical force due to the dmi interaction between atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDmi::compute_dmi_mech(int i, int j, double rsq, double /*eij*/[3], +void PairSpinDmi::compute_dmi_mech(int i, int j, double rsq, double /*eij*/[3], double fi[3], double spi[3], double spj[3]) { int *type = atom->type; diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 72a4c0d7de..8cd9d33abd 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -134,7 +134,7 @@ void PairSpinExchange::coeff(int narg, char **arg) count++; } } - + if (count == 0) error->all(FLERR,"Incorrect args in pair_style command"); } @@ -395,7 +395,7 @@ void PairSpinExchange::compute_exchange(int i, int j, double rsq, double fmi[3], compute the mechanical force due to the exchange interaction between atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinExchange::compute_exchange_mech(int i, int j, double rsq, double eij[3], +void PairSpinExchange::compute_exchange_mech(int i, int j, double rsq, double eij[3], double fi[3], double spi[3], double spj[3]) { int *type = atom->type; diff --git a/src/USER-INTEL/fix_intel.cpp b/src/USER-INTEL/fix_intel.cpp index b305590729..67bf33e751 100644 --- a/src/USER-INTEL/fix_intel.cpp +++ b/src/USER-INTEL/fix_intel.cpp @@ -456,7 +456,7 @@ void FixIntel::pair_init_check(const bool cdmessage) " exclusions with Intel"); } #endif - + int need_tag = 0; if (atom->molecular) need_tag = 1; diff --git a/src/USER-INTEL/fix_intel.h b/src/USER-INTEL/fix_intel.h index a01ed18bfe..3810b57355 100644 --- a/src/USER-INTEL/fix_intel.h +++ b/src/USER-INTEL/fix_intel.h @@ -83,7 +83,7 @@ class FixIntel : public Fix { } inline void set_reduce_flag() { if (_nthreads > 1) _need_reduce = 1; } inline int lrt() { - if (force->kspace_match("pppm/intel", 0) && update->whichflag == 1) + if (force->kspace_match("pppm/intel", 0) && update->whichflag == 1) return _lrt; else return 0; } @@ -104,7 +104,7 @@ class FixIntel : public Fix { int _pair_intel_count, _pair_hybrid_flag; // These should be removed in subsequent update w/ simpler hybrid arch int _pair_hybrid_zero, _hybrid_nonpair, _zero_master; - + public: inline int* get_overflow_flag() { return _overflow_flag; } inline int* get_off_overflow_flag() { return _off_overflow_flag; } @@ -215,7 +215,7 @@ class FixIntel : public Fix { _alignvar(double _stopwatch_offload_pair[1],64); void _sync_main_arrays(const int prereverse); - + template void reduce_results(ft * _noalias const f_in); @@ -512,13 +512,13 @@ issues. Please use 14.0.1.106 or 15.1.133 or later. E: Currently, cannot offload more than one intel style with hybrid. -Currently, when using offload, hybrid pair styles can only use the intel +Currently, when using offload, hybrid pair styles can only use the intel suffix for one of the pair styles. E: Cannot yet use hybrid styles with Intel offload. The hybrid pair style configuration is not yet supported when using offload -within the Intel package. Support is limited to hybrid/overlay or a hybrid +within the Intel package. Support is limited to hybrid/overlay or a hybrid style that does not require a skip list. W: Leaving a core/node free can improve performance for offload @@ -564,7 +564,7 @@ atoms throughout the simulation. E: Intel package requires fdotr virial with newton on. This error can occur with a hybrid pair style that mixes styles that are -incompatible with the newton pair setting turned on. Try turning the +incompatible with the newton pair setting turned on. Try turning the newton pair setting off. E: Add -DLMP_INTEL_NBOR_COMPAT to build for special_bond exclusions with Intel diff --git a/src/USER-INTEL/intel_buffers.cpp b/src/USER-INTEL/intel_buffers.cpp index b7026f90b7..c0995b6a9c 100644 --- a/src/USER-INTEL/intel_buffers.cpp +++ b/src/USER-INTEL/intel_buffers.cpp @@ -255,7 +255,7 @@ void IntelBuffers::free_list_local() #endif lmp->memory->destroy(cnumneigh); } - + #ifdef _LMP_INTEL_OFFLOAD if (_off_map_ilist != NULL) { const int * ilist = _off_map_ilist; @@ -295,7 +295,7 @@ void IntelBuffers::grow_data3(NeighList *list, { const int size = list->get_maxlocal(); int list_num; - for (list_num = 0; list_num < _n_list_ptrs; list_num++) + for (list_num = 0; list_num < _n_list_ptrs; list_num++) if (_neigh_list_ptrs[list_num].list_ptr == (void*)list) break; if (list_num == _n_list_ptrs) { if (_n_list_ptrs == _max_list_ptrs) { diff --git a/src/USER-INTEL/intel_preprocess.h b/src/USER-INTEL/intel_preprocess.h index 178a20c6e1..2515e47c52 100644 --- a/src/USER-INTEL/intel_preprocess.h +++ b/src/USER-INTEL/intel_preprocess.h @@ -146,7 +146,7 @@ enum {TIME_PACK, TIME_HOST_NEIGHBOR, TIME_HOST_PAIR, TIME_OFFLOAD_NEIGHBOR, } #else - + #define IP_PRE_edge_align(n, esize) \ #endif diff --git a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp index 5149b26f2f..db4b0c50a4 100644 --- a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp +++ b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp @@ -482,7 +482,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, #endif } } - + #ifndef _LMP_INTEL_OFFLOAD if (exclude) { int alln = n; @@ -515,7 +515,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, } } #endif - + int ns = n - maxnbors; int alln = n; atombin[i] = ns; diff --git a/src/USER-INTEL/npair_halffull_newton_intel.cpp b/src/USER-INTEL/npair_halffull_newton_intel.cpp index 93a1a97923..8248f2257a 100644 --- a/src/USER-INTEL/npair_halffull_newton_intel.cpp +++ b/src/USER-INTEL/npair_halffull_newton_intel.cpp @@ -61,7 +61,7 @@ void NPairHalffullNewtonIntel::build_t(NeighList *list, const int * _noalias const numneigh_full = list->listfull->numneigh; const int ** _noalias const firstneigh_full = (const int ** const)list->listfull->firstneigh; - + #if defined(_OPENMP) #pragma omp parallel #endif @@ -148,7 +148,7 @@ void NPairHalffullNewtonIntel::build_t3(NeighList *list, int *numhalf) const int * _noalias const numneigh_full = numhalf; const int ** _noalias const firstneigh_full = (const int ** const)list->listfull->firstneigh; - + int packthreads = 1; if (comm->nthreads > INTEL_HTHREADS) packthreads = comm->nthreads; diff --git a/src/USER-INTEL/npair_intel.cpp b/src/USER-INTEL/npair_intel.cpp index a1c0785d4c..e20c437cb7 100644 --- a/src/USER-INTEL/npair_intel.cpp +++ b/src/USER-INTEL/npair_intel.cpp @@ -72,7 +72,7 @@ void NPairIntel::copy_cutsq_info(IntelBuffers *buffers) { if (cutneighghostsq) use_ghost_cut = 1; buffers->set_ntypes(tp1, use_ghost_cut); - + flt_t **cutneighsqb = buffers->get_cutneighsq(); for (int i = 1; i <= atom->ntypes; i++) for (int j = 1; j <= atom->ntypes; j++) @@ -116,7 +116,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, #ifdef _LMP_INTEL_OFFLOAD if (offload_noghost && offload) nall_t = atom->nlocal; #endif - + const int pack_width = _fix->nbor_pack_width(); const ATOM_T * _noalias const x = buffers->get_x(); @@ -146,7 +146,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, int ** _noalias const firstneigh = list->firstneigh; int * _noalias const numneigh = list->numneigh; int * _noalias const cnumneigh = buffers->cnumneigh(); - + const int nstencil = this->nstencil; const int * _noalias const stencil = this->stencil; const flt_t * _noalias const cutneighsq = buffers->get_cutneighsq()[0]; @@ -204,7 +204,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, } } const int special_bound = sb; - + #ifdef _LMP_INTEL_OFFLOAD const int * _noalias const binhead = this->binhead; const int * _noalias const bins = this->bins; @@ -547,7 +547,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, j = -j - 1; } else ofind_special(which, special, nspecial, i, tag[j]); - + if (which) { j = j ^ (which << SBBITS); if (which < special_bound) addme = 0; @@ -562,7 +562,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, if (THREE) { alln = n2; n2 = pack_offset + maxnbors; - + #if defined(LMP_SIMD_COMPILER) #pragma vector aligned #ifdef LMP_INTEL_NBOR_COMPAT @@ -592,7 +592,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, } } } - + #ifndef _LMP_INTEL_OFFLOAD if (exclude) { neighptr2 = neighptr; @@ -643,7 +643,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, n += pack_width; } #endif - + for (int u = pack_offset + maxnbors; u < n2; u++) { #ifdef LMP_INTEL_3BODY_FAST neighptr[n] = neighptr2[u]; diff --git a/src/USER-INTEL/npair_intel.h b/src/USER-INTEL/npair_intel.h index e47687abea..6d4e01462f 100644 --- a/src/USER-INTEL/npair_intel.h +++ b/src/USER-INTEL/npair_intel.h @@ -76,7 +76,7 @@ class NPairIntel : public NPair { NPairIntel(class LAMMPS *); ~NPairIntel(); virtual void copy_neighbor_info(); - + #ifdef _LMP_INTEL_OFFLOAD void grow_stencil(); #endif @@ -86,7 +86,7 @@ class NPairIntel : public NPair { template void copy_cutsq_info(IntelBuffers *); - + template void bin_newton(const int, NeighList *, IntelBuffers *, const int, const int, const int offload_end = 0); diff --git a/src/USER-INTEL/npair_skip_intel.cpp b/src/USER-INTEL/npair_skip_intel.cpp index 3d2463a0b9..fa202d5da1 100644 --- a/src/USER-INTEL/npair_skip_intel.cpp +++ b/src/USER-INTEL/npair_skip_intel.cpp @@ -109,7 +109,7 @@ void NPairSkipIntel::build_t(NeighList *list, int *numhalf, int *cnumneigh, int my_inum = ifrom; _inum_starts[tid] = ifrom; - + // loop over parent full list for (int ii = ifrom; ii < ito; ii++) { const int i = ilist_skip[ii]; @@ -131,7 +131,7 @@ void NPairSkipIntel::build_t(NeighList *list, int *numhalf, int *cnumneigh, const int j = joriginal & NEIGHMASK; if (!ijskip[itype][type[j]]) neighptr[n++] = joriginal; } - numhalf[my_inum] = n; + numhalf[my_inum] = n; for (int jj = jnumhalf; jj < jnum; jj++) { const int joriginal = jlist[jj]; diff --git a/src/USER-INTEL/npair_skip_intel.h b/src/USER-INTEL/npair_skip_intel.h index e3277708d5..6bb3dfa5d0 100644 --- a/src/USER-INTEL/npair_skip_intel.h +++ b/src/USER-INTEL/npair_skip_intel.h @@ -46,7 +46,7 @@ class NPairSkipIntel : public NPair { ~NPairSkipIntel(); virtual void copy_neighbor_info(); void build(class NeighList *); - + protected: FixIntel *_fix; int *_inum_starts, *_inum_counts, *_full_props; diff --git a/src/USER-INTEL/pair_airebo_intel.h b/src/USER-INTEL/pair_airebo_intel.h index 8a319536de..95e054fc0f 100644 --- a/src/USER-INTEL/pair_airebo_intel.h +++ b/src/USER-INTEL/pair_airebo_intel.h @@ -110,7 +110,7 @@ path and name are correct. E: Cannot yet use airebo/intel with hybrid. Pair style airebo/intel cannot currently be used as part of a hybrid -pair style (with the exception of hybrid/overlay). +pair style (with the exception of hybrid/overlay). */ diff --git a/src/USER-INTEL/pair_buck_coul_cut_intel.cpp b/src/USER-INTEL/pair_buck_coul_cut_intel.cpp index 3954d559e1..f82f4c1c7a 100644 --- a/src/USER-INTEL/pair_buck_coul_cut_intel.cpp +++ b/src/USER-INTEL/pair_buck_coul_cut_intel.cpp @@ -204,7 +204,7 @@ void PairBuckCoulCutIntel::eval(const int offload, const int vflag, acc_t oevdwl, oecoul, ov0, ov1, ov2, ov3, ov4, ov5; if (EFLAG || vflag) oevdwl = oecoul = ov0 = ov1 = ov2 = ov3 = ov4 = ov5 = (acc_t)0; - if (NEWTON_PAIR == 0 && inum != nlocal) + if (NEWTON_PAIR == 0 && inum != nlocal) memset(f_start, 0, f_stride * sizeof(FORCE_T)); // loop over neighbors of my atoms diff --git a/src/USER-INTEL/pair_dpd_intel.cpp b/src/USER-INTEL/pair_dpd_intel.cpp index 9baa64e8e0..5d67a60c4b 100644 --- a/src/USER-INTEL/pair_dpd_intel.cpp +++ b/src/USER-INTEL/pair_dpd_intel.cpp @@ -521,7 +521,7 @@ void PairDPDIntel::pack_force_const(ForceConst &fc, } } if (mytypes > 1 || atom->molecular) _onetype = 0; - + for (int i = 0; i < 4; i++) { fc.special_lj[i] = force->special_lj[i]; fc.special_lj[0] = 1.0; diff --git a/src/USER-INTEL/pppm_intel.cpp b/src/USER-INTEL/pppm_intel.cpp index f3fa8dd15d..59455bcf52 100644 --- a/src/USER-INTEL/pppm_intel.cpp +++ b/src/USER-INTEL/pppm_intel.cpp @@ -586,7 +586,7 @@ void PPPMIntel::fieldforce_ik(IntelBuffers *buffers) if (force->newton_pair) zl += atom->nghost; memset(f, 0, zl * sizeof(FORCE_T)); } - + #if defined(_OPENMP) #pragma omp parallel default(none) \ shared(nlocal, nthr) if(!_use_lrt) @@ -737,7 +737,7 @@ void PPPMIntel::fieldforce_ad(IntelBuffers *buffers) if (force->newton_pair) zl += atom->nghost; memset(f, 0, zl * sizeof(FORCE_T)); } - + #if defined(_OPENMP) #pragma omp parallel default(none) \ shared(nlocal, nthr) if(!_use_lrt) diff --git a/src/USER-MEAMC/meam_impl.cpp b/src/USER-MEAMC/meam_impl.cpp index d4a47a4f48..b099ead8d5 100644 --- a/src/USER-MEAMC/meam_impl.cpp +++ b/src/USER-MEAMC/meam_impl.cpp @@ -34,12 +34,12 @@ MEAM::MEAM(Memory* mem) maxneigh = 0; scrfcn = dscrfcn = fcpair = NULL; - + neltypes = 0; for (int i = 0; i < maxelt; i++) { - Omega_meam[i] = Z_meam[i] = A_meam[i] = rho0_meam[i] = beta0_meam[i] = - beta1_meam[i]= beta2_meam[i] = beta3_meam[i] = - t0_meam[i] = t1_meam[i] = t2_meam[i] = t3_meam[i] = + Omega_meam[i] = Z_meam[i] = A_meam[i] = rho0_meam[i] = beta0_meam[i] = + beta1_meam[i]= beta2_meam[i] = beta3_meam[i] = + t0_meam[i] = t1_meam[i] = t2_meam[i] = t3_meam[i] = rho_ref_meam[i] = ibar_meam[i] = ielt_meam[i] = 0.0; for (int j = 0; j < maxelt; j++) { lattce_meam[i][j] = FCC; diff --git a/src/USER-MISC/compute_stress_mop.h b/src/USER-MISC/compute_stress_mop.h index 2047d1d54f..07bb774148 100644 --- a/src/USER-MISC/compute_stress_mop.h +++ b/src/USER-MISC/compute_stress_mop.h @@ -56,47 +56,47 @@ namespace LAMMPS_NS { #endif /* ERROR/WARNING messages: - + E: Illegal ... command - + Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. - + E: Compute stress/mop incompatible with simulation dimension - + Compute stress/mop only works with 3D simulations. - + E: Compute stress/mop incompatible with triclinic simulation box - + Self-explanatory. - + E: Compute stress/mop requires a fixed simulation box - + Compute stress/mop is not compatible with any change of volume or shape or boundary conditions of the simulation box. - + E: No pair style is defined for compute stress/mop - + Self-explanatory. Compute stress/mop requires the definition of a pair style. - + E: Pair style does not support compute stress/mop - + The pair style does not have a single() function, so it can not be invoked by compute stress/mop. - + W: compute stress/mop does not account for bond potentials - + W: compute stress/mop does not account for angle potentials - + W: compute stress/mop does not account for dihedral potentials - + W: compute stress/mop does not account for improper potentials - + W: compute stress/mop does not account for kspace contributions - + Compute stress/mop only accounts for pairwise additive interactions for the computation of local stress tensor components. - + */ diff --git a/src/USER-MISC/compute_stress_mop_profile.h b/src/USER-MISC/compute_stress_mop_profile.h index 0ab774f3db..d86237b0bd 100644 --- a/src/USER-MISC/compute_stress_mop_profile.h +++ b/src/USER-MISC/compute_stress_mop_profile.h @@ -70,43 +70,43 @@ namespace LAMMPS_NS { command-line option when running LAMMPS to see the offending line. E: Compute stress/mop/profile incompatible with simulation dimension - + Compute stress/mop/profile only works with 3D simulations. - + E: Compute stress/mop/profile incompatible with triclinic simulation box - + Self-explanatory. - + E: Compute stress/mop/profile requires a fixed simulation box - + Compute stress/mop/profile is not compatible with any change of volume or shape or boundary conditions of the simulation box. - + E: No pair style is defined for compute stress/mop/profile - + Self-explanatory. Compute stress/mop/profile requires the definition of a pair style. - + E: Pair style does not support compute stress/mop/profile - + The pair style does not have a single() function, so it can not be invoked by compute stress/mop/profile. - + E: Origin of bins for compute stress/mop/profile is out of bounds - + Self-explanatory. - + W: compute stress/mop/profile does not account for bond potentials - + W: compute stress/mop/profile does not account for angle potentials - + W: compute stress/mop/profile does not account for dihedral potentials - + W: compute stress/mop/profile does not account for improper potentials - + W: compute stress/mop/profile does not account for kspace contributions - + Compute stress/mop/profile only accounts for pairwise additive interactions for the computation of local stress tensor components. - + */ diff --git a/src/USER-MISC/dihedral_table_cut.cpp b/src/USER-MISC/dihedral_table_cut.cpp index 7345bcdad1..963364d289 100644 --- a/src/USER-MISC/dihedral_table_cut.cpp +++ b/src/USER-MISC/dihedral_table_cut.cpp @@ -454,7 +454,7 @@ DihedralTableCut::~DihedralTableCut() void DihedralTableCut::compute(int eflag, int vflag) { - + int i1,i2,i3,i4,i,j,k,n,type; double edihedral; double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,vb2xm,vb2ym,vb2zm; @@ -704,12 +704,12 @@ void DihedralTableCut::compute(int eflag, int vflag) double gptt = 0; if ( acos(costh12) > aat_theta0_1[type]) { - gt *= 1-da1*da1/dtheta/dtheta; + gt *= 1-da1*da1/dtheta/dtheta; gpt = -aat_k[type]*2*da1/dtheta/dtheta; } if ( acos(costh23) > aat_theta0_1[type]) { - gtt *= 1-da2*da2/dtheta/dtheta; + gtt *= 1-da2*da2/dtheta/dtheta; gptt = -aat_k[type]*2*da2/dtheta/dtheta; } @@ -717,7 +717,7 @@ void DihedralTableCut::compute(int eflag, int vflag) for (i = 0; i < 4; i++) for (j = 0; j < 3; j++) - fabcd[i][j] -= - gt*gtt*fpphi*dphidr[i][j] + fabcd[i][j] -= - gt*gtt*fpphi*dphidr[i][j] - gt*gptt*fphi*dthetadr[1][i][j] + gpt*gtt*fphi*dthetadr[0][i][j]; // apply force to each of 4 atoms diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index 75edd42102..e9583032fe 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -85,7 +85,7 @@ void PairKolmogorovCrespiZ::compute(int eflag, int vflag) double rsq,r,rhosq,exp1,exp2,r6,r8; double frho,sumC,sumC2,sumCff,fsum,rdsq; int *ilist,*jlist,*numneigh,**firstneigh; - + evdwl = 0.0; if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; @@ -121,7 +121,7 @@ void PairKolmogorovCrespiZ::compute(int eflag, int vflag) // rho^2 = r^2 - (n,r) = r^2 - z^2 rhosq = delx*delx + dely*dely; rsq = rhosq + delz*delz; - + if (rsq < cutsq[itype][jtype]) { int iparam_ij = elem2param[map[itype]][map[jtype]]; @@ -137,7 +137,7 @@ void PairKolmogorovCrespiZ::compute(int eflag, int vflag) exp2 = exp(-rdsq); // note that f(rho_ij) equals f(rho_ji) as normals are all along z - sumC = p.C0+p.C2*rdsq+p.C4*rdsq*rdsq; + sumC = p.C0+p.C2*rdsq+p.C4*rdsq*rdsq; sumC2 = (2*p.C2+4*p.C4*rdsq)*p.delta2inv; frho = exp2*sumC; sumCff = p.C + 2*frho; @@ -221,9 +221,9 @@ void PairKolmogorovCrespiZ::settings(int narg, char **arg) void PairKolmogorovCrespiZ::coeff(int narg, char **arg) { - int i,j,n; + int i,j,n; - if (narg != 3 + atom->ntypes) + if (narg != 3 + atom->ntypes) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); @@ -262,7 +262,7 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) read_file(arg[2]); - + double cut_one = cut_global; int count = 0; @@ -407,7 +407,7 @@ void PairKolmogorovCrespiZ::read_file(char *filename) params[nparams].S = atof(words[10]); // energies in meV further scaled by S - double meV = 1.0e-3*params[nparams].S; + double meV = 1.0e-3*params[nparams].S; params[nparams].C *= meV; params[nparams].A *= meV; params[nparams].C0 *= meV; diff --git a/src/USER-MISC/pair_lj_mdf.cpp b/src/USER-MISC/pair_lj_mdf.cpp index e6f174e811..4cd21b1dbe 100644 --- a/src/USER-MISC/pair_lj_mdf.cpp +++ b/src/USER-MISC/pair_lj_mdf.cpp @@ -82,7 +82,7 @@ void PairLJMDF::compute(int eflag, int vflag) firstneigh = list->firstneigh; // loop over neighbors of my atoms - + for (ii = 0; ii < inum; ii++) { i = ilist[ii]; xtmp = x[i][0]; @@ -109,7 +109,7 @@ void PairLJMDF::compute(int eflag, int vflag) forcelj = r6inv * (lj1[itype][jtype]*r6inv - lj2[itype][jtype]); if (rsq > cut_inner_sq[itype][jtype]) { - philj = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]); + philj = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]); rr = sqrt(rsq); dp = (cut[itype][jtype] - cut_inner[itype][jtype]); diff --git a/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp b/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp index dd39002fe4..1fc4644420 100644 --- a/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp +++ b/src/USER-MOFFF/pair_buck6d_coul_gauss_dsf.cpp @@ -142,7 +142,7 @@ void PairBuck6dCoulGaussDSF::compute(int eflag, int vflag) term3 = term2*term2; term4 = 1.0/(1.0 + term2); term5 = 1.0/(1.0 + 2.0*term2 + term3); - forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; + forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; forcebuck6d -= term1*(6.0*term4 - term5*14.0*term2); ebuck6d = buck6d1[itype][jtype]*rexp - term1*term4; @@ -150,11 +150,11 @@ void PairBuck6dCoulGaussDSF::compute(int eflag, int vflag) if (rsq > rsmooth_sq[itype][jtype]) { rcu = r*rsq; rqu = rsq*rsq; - sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + + sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + c2[itype][jtype]*rsq + c1[itype][jtype]*r + c0[itype][jtype]; - smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + + smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + 3.0*c3[itype][jtype]*rsq + 2.0*c2[itype][jtype]*r + c1[itype][jtype]; - // forcebuck6d is -dE/dr*r + // forcebuck6d is -dE/dr*r forcebuck6d = forcebuck6d*sme - ebuck6d*smf*r; //RS was here: changed this from +E*smf to -E*smf*r ebuck6d *= sme; } @@ -167,10 +167,10 @@ void PairBuck6dCoulGaussDSF::compute(int eflag, int vflag) arg = alpha_ij[itype][jtype]*r; erfcd = MathSpecial::expmsq(arg); erfcc = 1 - (MathSpecial::my_erfcx(arg) * erfcd); - - forcecoul = prefactor * ((erfcc/r) - (2.0/MY_PIS*alpha_ij[itype][jtype]*erfcd) + + + forcecoul = prefactor * ((erfcc/r) - (2.0/MY_PIS*alpha_ij[itype][jtype]*erfcd) + r*f_shift_ij[itype][jtype]) * r; - + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; } else forcecoul = 0.0; @@ -191,7 +191,7 @@ void PairBuck6dCoulGaussDSF::compute(int eflag, int vflag) } else evdwl = 0.0; if (rsq < cut_coulsq) { - ecoul = prefactor * (erfcc - r*e_shift_ij[itype][jtype] - + ecoul = prefactor * (erfcc - r*e_shift_ij[itype][jtype] - rsq*f_shift_ij[itype][jtype]); if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; } else ecoul = 0.0; @@ -317,7 +317,7 @@ void PairBuck6dCoulGaussDSF::init_style() neighbor->request(this,instance_me); - cut_coulsq = cut_coul * cut_coul; + cut_coulsq = cut_coul * cut_coul; } /* ---------------------------------------------------------------------- @@ -330,7 +330,7 @@ double PairBuck6dCoulGaussDSF::init_one(int i, int j) double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; - + //calculation of smoothing coefficients c0-c5 c0[i][j] = c1[i][j] = c2[i][j] = c3[i][j] = c4[i][j] = c5[i][j] = 0.0; rsmooth_sq[i][j] = cut_ljsq[i][j]; @@ -347,7 +347,7 @@ double PairBuck6dCoulGaussDSF::init_one(int i, int j) c5[i][j] = -6.0/denom; rsmooth_sq[i][j] = rsm_sq; } - + // if offset_flag, shift is only invoked if there is not already smoothing if (offset_flag && vdwl_smooth >= 1.0) { double term1 = buck6d3[i][j]/pow(cut_lj[i][j],6.0); @@ -355,12 +355,12 @@ double PairBuck6dCoulGaussDSF::init_one(int i, int j) double rexp = exp(-cut_lj[i][j]*buck6d2[i][j]); offset[i][j] = buck6d1[i][j]*rexp - term1*term4; } else offset[i][j] = 0.0; - + double erfcd_c = exp(-alpha_ij[i][j]*alpha_ij[i][j]*cut_coul*cut_coul); double erfcc_c = erf(alpha_ij[i][j]*cut_coul); f_shift_ij[i][j] = -erfcc_c/cut_coulsq + 2.0/MY_PIS*alpha_ij[i][j]*erfcd_c/cut_coul; e_shift_ij[i][j] = erfcc_c/cut_coul - f_shift_ij[i][j]*cut_coul; - + cut_ljsq[j][i] = cut_ljsq[i][j]; alpha_ij[j][i] = alpha_ij[i][j]; f_shift_ij[j][i] = f_shift_ij[i][j]; @@ -520,18 +520,18 @@ double PairBuck6dCoulGaussDSF::single(int i, int j, int itype, int jtype, double term3 = term2*term2; term4 = 1.0/(1.0 + term2); term5 = 1.0/(1.0 + 2.0*term2 + term3); - forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; + forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; forcebuck6d -= term1*(6.0*term4 - term5*14.0*term2); ebuck6d = buck6d1[itype][jtype]*rexp - term1*term4; // smoothing term if (rsq > rsmooth_sq[itype][jtype]) { rcu = r*rsq; rqu = rsq*rsq; - sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + + sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + c2[itype][jtype]*rsq + c1[itype][jtype]*r + c0[itype][jtype]; - smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + + smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + 3.0*c3[itype][jtype]*rsq + 2.0*c2[itype][jtype]*r + c1[itype][jtype]; - // forcebuck6d is -dE/dr*r + // forcebuck6d is -dE/dr*r forcebuck6d = forcebuck6d*sme - ebuck6d*smf*r; //RS was here: changed this from +E*smf to -E*smf*r ebuck6d *= sme; } @@ -542,7 +542,7 @@ double PairBuck6dCoulGaussDSF::single(int i, int j, int itype, int jtype, double arg = alpha_ij[itype][jtype]*r; erfcd = MathSpecial::expmsq(arg); erfcc = 1 - (MathSpecial::my_erfcx(arg) * erfcd); - forcecoul = prefactor * ((erfcc/r) - (2.0/MY_PIS*alpha_ij[itype][jtype]*erfcd) + + forcecoul = prefactor * ((erfcc/r) - (2.0/MY_PIS*alpha_ij[itype][jtype]*erfcd) + r*f_shift_ij[itype][jtype]) * r; } else forcecoul = 0.0; @@ -555,7 +555,7 @@ double PairBuck6dCoulGaussDSF::single(int i, int j, int itype, int jtype, double } if (rsq < cut_coulsq) { - phicoul = prefactor * (erfcc - r*e_shift_ij[itype][jtype] - + phicoul = prefactor * (erfcc - r*e_shift_ij[itype][jtype] - rsq*f_shift_ij[itype][jtype]); eng += phicoul; } diff --git a/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp b/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp index ffeb6fa957..1ca42d864e 100644 --- a/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp +++ b/src/USER-MOFFF/pair_buck6d_coul_gauss_long.cpp @@ -144,17 +144,17 @@ void PairBuck6dCoulGaussLong::compute(int eflag, int vflag) term3 = term2*term2; term4 = 1.0/(1.0 + term2); term5 = 1.0/(1.0 + 2.0*term2 + term3); - forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; + forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; forcebuck6d -= term1*(6.0*term4 - term5*14.0*term2); ebuck6d = buck6d1[itype][jtype]*rexp - term1*term4; - + // smoothing term if (rsq > rsmooth_sq[itype][jtype]) { rcu = r*rsq; rqu = rsq*rsq; - sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + + sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + c2[itype][jtype]*rsq + c1[itype][jtype]*r + c0[itype][jtype]; - smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + + smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + 3.0*c3[itype][jtype]*rsq + 2.0*c2[itype][jtype]*r + c1[itype][jtype]; // forcebuck6d is -dE/dr*r forcebuck6d = forcebuck6d*sme - ebuck6d*smf*r; @@ -172,15 +172,15 @@ void PairBuck6dCoulGaussLong::compute(int eflag, int vflag) arg = alpha_ij[itype][jtype]*r; expa = MathSpecial::expmsq(arg); erfa = 1 - (MathSpecial::my_erfcx(arg) * expa); - + prefactor = qqrd2e*qtmp*q[j]/r; falpha = erfa - EWALD_F*arg*expa; forcecoul = prefactor * (falpha - erf + EWALD_F*grij*expm2); if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor*falpha; - + // (q*q/r) * (gauss(alpha_ij) - gauss(alpha_long) ealpha = prefactor * (erfa-erf); - // smoothing term - NOTE: ingnored in special_bonds correction + // smoothing term - NOTE: ingnored in special_bonds correction // since likely rsmooth_sq_c >> d(special) if (rsq > rsmooth_sq_c) { rcu = r*rsq; @@ -191,7 +191,7 @@ void PairBuck6dCoulGaussLong::compute(int eflag, int vflag) ealpha *= sme; } } else forcecoul = 0.0; - + fpair = (forcecoul + factor_lj*forcebuck6d) * r2inv; f[i][0] += delx*fpair; @@ -340,8 +340,8 @@ void PairBuck6dCoulGaussLong::init_style() neighbor->request(this,instance_me); - cut_coulsq = cut_coul * cut_coul; - + cut_coulsq = cut_coul * cut_coul; + //calculation of smoothing coefficients c0_c-c5_c for coulomb smoothing c0_c = c1_c = c2_c = c3_c = c4_c = c5_c = 0.0; rsmooth_sq_c = cut_coulsq; @@ -370,7 +370,7 @@ double PairBuck6dCoulGaussLong::init_one(int i, int j) double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; - + //calculation of smoothing coefficients c0-c5 c0[i][j] = c1[i][j] = c2[i][j] = c3[i][j] = c4[i][j] = c5[i][j] = 0.0; rsmooth_sq[i][j] = cut_ljsq[i][j]; @@ -395,7 +395,7 @@ double PairBuck6dCoulGaussLong::init_one(int i, int j) double rexp = exp(-cut_lj[i][j]*buck6d2[i][j]); offset[i][j] = buck6d1[i][j]*rexp - term1*term4; } else offset[i][j] = 0.0; - + cut_ljsq[j][i] = cut_ljsq[i][j]; alpha_ij[j][i] = alpha_ij[i][j]; buck6d1[j][i] = buck6d1[i][j]; @@ -557,18 +557,18 @@ double PairBuck6dCoulGaussLong::single(int i, int j, int itype, int jtype, doubl term3 = term2*term2; term4 = 1.0/(1.0 + term2); term5 = 1.0/(1.0 + 2.0*term2 + term3); - forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; + forcebuck6d = buck6d1[itype][jtype]*buck6d2[itype][jtype]*r*rexp; forcebuck6d -= term1*(6.0*term4 - term5*14.0*term2); ebuck6d = buck6d1[itype][jtype]*rexp - term1*term4; // smoothing term if (rsq > rsmooth_sq[itype][jtype]) { rcu = r*rsq; rqu = rsq*rsq; - sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + + sme = c5[itype][jtype]*rqu*r + c4[itype][jtype]*rqu + c3[itype][jtype]*rcu + c2[itype][jtype]*rsq + c1[itype][jtype]*r + c0[itype][jtype]; - smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + + smf = 5.0*c5[itype][jtype]*rqu + 4.0*c4[itype][jtype]*rcu + 3.0*c3[itype][jtype]*rsq + 2.0*c2[itype][jtype]*r + c1[itype][jtype]; - // forcebuck6d is -dE/dr*r + // forcebuck6d is -dE/dr*r forcebuck6d = forcebuck6d*sme - ebuck6d*smf*r; //RS was here: changed this from +E*smf to -E*smf*r ebuck6d *= sme; } @@ -584,12 +584,12 @@ double PairBuck6dCoulGaussLong::single(int i, int j, int itype, int jtype, doubl arg = alpha_ij[itype][jtype]*r; expa = MathSpecial::expmsq(arg); erfa = 1 - (MathSpecial::my_erfcx(arg) * expa); - + prefactor = force->qqrd2e * atom->q[i] * atom->q[j] / r; falpha = erfa - EWALD_F*arg*expa; forcecoul = prefactor * (falpha - erf + EWALD_F*grij*expm2); if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor*falpha; - + ealpha = prefactor * (erfa-erf); // smoothing term if (rsq > rsmooth_sq_c) { diff --git a/src/USER-PTM/ptm_polar.cpp b/src/USER-PTM/ptm_polar.cpp index d75424e11f..d5dca957be 100644 --- a/src/USER-PTM/ptm_polar.cpp +++ b/src/USER-PTM/ptm_polar.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * -/_|:|_|_\- + * -/_|:|_|_\- * * This code is a modification of D.L. Theobald's QCP rotation code. * It has been adapted to calculate the polar decomposition of a 3x3 matrix @@ -14,7 +14,7 @@ * USA * * dtheobald@brandeis.edu - * + * * Pu Liu * Johnson & Johnson Pharmaceutical Research and Development, L.L.C. * 665 Stockton Drive @@ -22,7 +22,7 @@ * USA * * pliu24@its.jnj.com - * + * * * If you use this QCP rotation calculation method in a publication, please * reference: @@ -33,7 +33,7 @@ * Acta Crystallographica A 61(4):478-480. * * Pu Liu, Dmitris K. Agrafiotis, and Douglas L. Theobald (2009) - * "Fast determination of the optimal rotational matrix for macromolecular + * "Fast determination of the optimal rotational matrix for macromolecular * superpositions." * Journal of Computational Chemistry 31(7):1561-1563. * @@ -63,7 +63,7 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Source: started anew. * @@ -82,7 +82,7 @@ * * 2016/05/29 QCP method adapted for polar decomposition of a 3x3 matrix, * for use in Polyhedral Template Matching. - * + * ******************************************************************************/ #include @@ -327,7 +327,7 @@ void InnerProduct(double *A, int num, const double (*coords1)[3], double (*coord A[6] += z1 * x2; A[7] += z1 * y2; - A[8] += z1 * z2; + A[8] += z1 * z2; } } diff --git a/src/USER-SCAFACOS/scafacos.cpp b/src/USER-SCAFACOS/scafacos.cpp index 482a5586c7..8d2b69deee 100644 --- a/src/USER-SCAFACOS/scafacos.cpp +++ b/src/USER-SCAFACOS/scafacos.cpp @@ -65,10 +65,10 @@ void Scafacos::settings(int narg, char **arg) if (strcmp(method,"fmm") == 0) { tolerance_type = FCS_TOLERANCE_TYPE_ENERGY; fmm_tuning_flag = 0; - } else if (strcmp(method,"p3m") == 0 || - strcmp(method,"p2nfft") == 0 || + } else if (strcmp(method,"p3m") == 0 || + strcmp(method,"p2nfft") == 0 || strcmp(method,"ewald") == 0) { - tolerance_type = FCS_TOLERANCE_TYPE_FIELD; + tolerance_type = FCS_TOLERANCE_TYPE_FIELD; } else if (strcmp(method,"direct") == 0) { ; // direct summation has no tolerance type } else { @@ -100,7 +100,7 @@ void Scafacos::init() if (logfile && me == 0) fprintf(logfile, "Setting up ScaFaCoS with solver %s ...\n",method); - if (!atom->q_flag) + if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); if (domain->dimension == 2) @@ -112,7 +112,7 @@ void Scafacos::init() if (atom->natoms > INT_MAX && sizeof(int) != 8) error->all(FLERR,"Scafacos atom count exceeds 2B"); - if (atom->molecular > 0) + if (atom->molecular > 0) error->all(FLERR, "Cannot use Scafacos with molecular charged systems yet"); @@ -140,7 +140,7 @@ void Scafacos::init() } double **x = atom->x; - double *q = atom->q; + double *q = atom->q; int nlocal = atom->nlocal; if (strcmp(method,"fmm") == 0) @@ -164,7 +164,7 @@ void Scafacos::init() result = fcs_tune((FCS)fcs,nlocal,&x[0][0],q); check_result((void*)&result); - // more useful here, since the parameters should be tuned now + // more useful here, since the parameters should be tuned now if (me == 0) fcs_print_parameters((FCS)fcs); } @@ -194,12 +194,12 @@ void Scafacos::compute(int eflag, int vflag) } if (eflag || vflag) ev_setup(eflag,vflag); - else + else { eflag_atom = 0; vflag_global = 0; } - + // grow xpbc, epot, efield if necessary if (nlocal > maxatom || maxatom == 0) { @@ -270,7 +270,7 @@ void Scafacos::compute(int eflag, int vflag) f[i][1] += qone * efield[i][1]; f[i][2] += qone * efield[i][2]; myeng += 0.5 * qone * epot[i]; - } + } if (eflag_atom) { for (int i = 0; i < nlocal; i++) @@ -296,50 +296,50 @@ int Scafacos::modify_param(int narg, char **arg) if (narg < 3) error->all(FLERR, "Illegal kspace_modify command (tolerance)"); if (strcmp(arg[2],"energy") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_ENERGY; + tolerance_type = FCS_TOLERANCE_TYPE_ENERGY; else if (strcmp(arg[2],"energy_rel") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_ENERGY_REL; + tolerance_type = FCS_TOLERANCE_TYPE_ENERGY_REL; else if (strcmp(arg[2],"field") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_FIELD; + tolerance_type = FCS_TOLERANCE_TYPE_FIELD; else if (strcmp(arg[2],"field_rel") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_FIELD_REL; + tolerance_type = FCS_TOLERANCE_TYPE_FIELD_REL; else if (strcmp(arg[2],"potential") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL; + tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL; else if (strcmp(arg[2],"potential_rel") == 0) - tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL_REL; + tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL_REL; else error->all(FLERR, "Illegal kspace_modify command (tolerance argument)"); // check if method is compatatible to chosen tolerance type if( ( - strcmp(method,"fmm") == 0 && - ( - tolerance_type != FCS_TOLERANCE_TYPE_ENERGY && + strcmp(method,"fmm") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_ENERGY && tolerance_type != FCS_TOLERANCE_TYPE_ENERGY_REL - ) - ) || - ( - strcmp(method,"p2nfft") == 0 && - ( - tolerance_type != FCS_TOLERANCE_TYPE_FIELD && - tolerance_type != FCS_TOLERANCE_TYPE_POTENTIAL - ) - ) || - ( - strcmp(method,"p3m") == 0 && - ( - tolerance_type != FCS_TOLERANCE_TYPE_FIELD - ) - ) || - ( - strcmp(method,"ewald") == 0 && - ( - tolerance_type != FCS_TOLERANCE_TYPE_FIELD ) - ) + ) || + ( + strcmp(method,"p2nfft") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD && + tolerance_type != FCS_TOLERANCE_TYPE_POTENTIAL + ) + ) || + ( + strcmp(method,"p3m") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD + ) + ) || + ( + strcmp(method,"ewald") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD + ) + ) ) error->all(FLERR,"Illegal kspace_modify command \ - (invalid tolerance / method combination)"); + (invalid tolerance / method combination)"); return 3; } @@ -375,7 +375,7 @@ double Scafacos::memory_usage() } /* ---------------------------------------------------------------------- - setup of ScaFaCoS handle with common parameters + setup of ScaFaCoS handle with common parameters ------------------------------------------------------------------------- */ void Scafacos::setup_handle() @@ -443,7 +443,7 @@ bool Scafacos::box_has_changed() int *periodicity = domain->periodicity; double *prd = domain->prd; - bool changed = + bool changed = (periodicity[0] != old_periodicity[0]) || (periodicity[1] != old_periodicity[1]) || (periodicity[2] != old_periodicity[2]) || @@ -462,14 +462,14 @@ bool Scafacos::box_has_changed() check ScaFaCoS result for error condition ------------------------------------------------------------------------- */ -void Scafacos::check_result(void* result_p) +void Scafacos::check_result(void* result_p) { FCSResult result = *(FCSResult*)result_p; if (!result) return; std::stringstream ss; - ss << "ScaFaCoS: " << fcs_result_get_function(result) << "\n" + ss << "ScaFaCoS: " << fcs_result_get_function(result) << "\n" << fcs_result_get_message(result) << "\n"; fcs_result_destroy(result); std::string err_msg = ss.str(); @@ -477,4 +477,4 @@ void Scafacos::check_result(void* result_p) error->one(FLERR,str); } - + diff --git a/src/USER-SDPD/fix_meso_move.cpp b/src/USER-SDPD/fix_meso_move.cpp index 4e591c9088..85b08a2af7 100644 --- a/src/USER-SDPD/fix_meso_move.cpp +++ b/src/USER-SDPD/fix_meso_move.cpp @@ -360,7 +360,7 @@ void FixMesoMove::init () { } void FixMesoMove::setup_pre_force (int /*vflag*/) { - // set vest equal to v + // set vest equal to v double **v = atom->v; double **vest = atom->vest; int *mask = atom->mask; diff --git a/src/USER-SDPD/fix_rigid_meso.cpp b/src/USER-SDPD/fix_rigid_meso.cpp index 4889acd0de..49c9ca8614 100644 --- a/src/USER-SDPD/fix_rigid_meso.cpp +++ b/src/USER-SDPD/fix_rigid_meso.cpp @@ -20,7 +20,7 @@ /* ---------------------------------------------------------------------- Contributing author: Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com - + This is an extension of fix/rigid/nve to SPH/SDPD particles You can see the original copyright notice of fix/rigid authors above Note that the Kamberaj paper was related to the nvt variant @@ -53,10 +53,10 @@ FixRigid (lmp, narg, arg) { if ((atom->e_flag != 1) || (atom->rho_flag != 1)) error->all (FLERR, "fix rigid/meso command requires atom_style with" " both energy and density"); - + if (langflag || tstat_flag) error->all (FLERR,"Can not use thermostat with fix rigid/meso"); - + if (pstat_flag) error->all (FLERR,"Can not use barostat with fix rigid/meso"); @@ -277,11 +277,11 @@ void FixRigidMeso::set_xv () { for (int i = 0; i < nlocal; i++) { if (body[i] < 0) continue; - + // half-step update of particle internal energy and density e[i] += dtf * de[i]; rho[i] += dtf * drho[i]; - + ibody = body[i]; xbox = (xcmimage[i] & IMGMASK) - IMGMAX; @@ -301,7 +301,7 @@ void FixRigidMeso::set_xv () { x2 = x[i][2] + zbox*zprd; } } - + v0 = v[i][0]; v1 = v[i][1]; v2 = v[i][2]; @@ -319,7 +319,7 @@ void FixRigidMeso::set_xv () { vcm[ibody][1]; v[i][2] = omega[ibody][0]*x[i][1] - omega[ibody][1]*x[i][0] + vcm[ibody][2]; - + vest[i][0] = 2*v[i][0] - v0; vest[i][1] = 2*v[i][1] - v1; vest[i][2] = 2*v[i][2] - v2; @@ -406,11 +406,11 @@ void FixRigidMeso::set_v () { for (int i = 0; i < nlocal; i++) { if (body[i] < 0) continue; - + // half-step update of particle internal energy and density e[i] += dtf * de[i]; rho[i] += dtf * drho[i]; - + const int ibody = body[i]; MathExtra::matvec (ex_space[ibody],ey_space[ibody], diff --git a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp index 0350843eb7..7cfc950eff 100644 --- a/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp +++ b/src/USER-SDPD/pair_sdpd_taitwater_isothermal.cpp @@ -14,7 +14,7 @@ /* ---------------------------------------------------------------------- Contributing author: Morteza Jalalvand (IASBS) jalalvand.m AT gmail.com - + references: Espanol and Revenga, Phys Rev E 67, 026705 (2003) ------------------------------------------------------------------------- */ @@ -169,7 +169,7 @@ void PairSDPDTaitwaterIsothermal::compute (int eflag, int vflag) { wiener[0][0] = gaussian (generator); wiener[1][1] = gaussian (generator); wiener[2][2] = gaussian (generator); - + wiener[0][1] = wiener[1][0] = sqrt_2_inv * gaussian (generator); wiener[0][2] = wiener[2][0] = sqrt_2_inv * gaussian (generator); wiener[1][2] = wiener[2][1] = sqrt_2_inv * gaussian (generator); @@ -177,18 +177,18 @@ void PairSDPDTaitwaterIsothermal::compute (int eflag, int vflag) { wiener[0][0] = random->gaussian (); wiener[1][1] = random->gaussian (); wiener[2][2] = random->gaussian (); - + wiener[0][1] = wiener[1][0] = sqrt_2_inv * random->gaussian (); wiener[0][2] = wiener[2][0] = sqrt_2_inv * random->gaussian (); wiener[1][2] = wiener[2][1] = sqrt_2_inv * random->gaussian (); #endif - + prefactor = sqrt (-4. * kBoltzmann*temperature * fvisc * dtinv) / r; - + f_random[0] = prefactor * (wiener[0][0]*delx + wiener[0][1]*dely + wiener[0][2]*delz); f_random[1] = prefactor * (wiener[1][0]*delx + wiener[1][1]*dely + wiener[1][2]*delz); f_random[2] = prefactor * (wiener[2][0]*delx + wiener[2][1]*dely + wiener[2][2]*delz); - + f[i][0] += delx * fpair + (velx + delx * delVdotDelR / rsq) * fvisc + f_random[0]; f[i][1] += dely * fpair + (vely + dely * delVdotDelR / rsq) * fvisc + f_random[1]; f[i][2] += delz * fpair + (velz + delz * delVdotDelR / rsq) * fvisc + f_random[2]; @@ -241,13 +241,13 @@ void PairSDPDTaitwaterIsothermal::settings (int narg, char **arg) { if (narg != 2 && narg != 3) error->all (FLERR, "Illegal number of arguments for " "pair_style sdpd/taitwater/morris/isothermal"); - + temperature = force->numeric (FLERR, arg[0]); viscosity = force->numeric (FLERR, arg[1]); - + if (temperature <= 0) error->all (FLERR, "Temperature must be positive"); if (viscosity <= 0) error->all (FLERR, "Viscosity must be positive"); - + // seed is immune to underflow/overflow because it is unsigned seed = comm->nprocs + comm->me + atom->nlocal; if (narg == 3) seed += force->inumeric (FLERR, arg[2]); @@ -266,7 +266,7 @@ void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { if (narg != 5) error->all (FLERR, "Incorrect args for pair_style " "sph/taitwater/morris coefficients"); - + if (!allocated) allocate(); int ilo, ihi, jlo, jhi; @@ -277,7 +277,7 @@ void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { double soundspeed_one = force->numeric (FLERR,arg[3]); double cut_one = force->numeric (FLERR,arg[4]); double B_one = soundspeed_one * soundspeed_one * rho0_one / 7.0; - + if (rho0_one <= 0) error->all (FLERR, "Density must be positive"); if (soundspeed_one <= 0) error->all (FLERR, "Sound speed must be positive"); if (cut_one <= 0) error->all (FLERR, "Cutoff must be positive"); @@ -304,7 +304,7 @@ void PairSDPDTaitwaterIsothermal::coeff (int narg, char **arg) { ------------------------------------------------------------------------- */ double PairSDPDTaitwaterIsothermal::init_one (int i, int j) { - if (setflag[i][j] == 0) + if (setflag[i][j] == 0) error->all(FLERR,"Not all pair sph/taitwater/morris coeffs are set"); cut[j][i] = cut[i][j]; diff --git a/src/USER-UEF/uef_utils.cpp b/src/USER-UEF/uef_utils.cpp index a2e6cb291e..75d4ee8895 100644 --- a/src/USER-UEF/uef_utils.cpp +++ b/src/USER-UEF/uef_utils.cpp @@ -150,7 +150,7 @@ void UEFBox::step_deform(const double ex, const double ey) theta[0] +=winv[0][0]*ex + winv[0][1]*ey; theta[1] +=winv[1][0]*ex + winv[1][1]*ey; - // deformation of the box. reduce() needs to be called regularly or + // deformation of the box. reduce() needs to be called regularly or // calculation will become unstable double eps[3]; @@ -169,7 +169,7 @@ void UEFBox::step_deform(const double ex, const double ey) ------------------------------------------------------------------------- */ bool UEFBox::reduce() { - // determine how many times to apply the automorphisms and find new theta + // determine how many times to apply the automorphisms and find new theta // values int f1 = round(theta[0]); @@ -184,7 +184,7 @@ bool UEFBox::reduce() for (int j=0;j<3;j++) r0[k][j]=r[k][j]; - // this modifies the old change basis matrix to handle the case where the + // this modifies the old change basis matrix to handle the case where the // automorphism transforms the box but the reduced basis doesn't change // (r0 should still equal r at the end) @@ -417,7 +417,7 @@ void make_unique(double b[3][3], int r[3][3], int ri[3][3]) if (fabs(b[0][0]) < fabs(b[0][1])) { col_swap(b,0,1); col_swap(r,0,1); - col_swap(ri,0,1); + col_swap(ri,0,1); } if (fabs(b[0][0]) < fabs(b[0][2])) { col_swap(b,0,2); @@ -433,7 +433,7 @@ void make_unique(double b[3][3], int r[3][3], int ri[3][3]) if (b[0][0] < 0) { neg_col(b,0); neg_col(r,0); - neg_col(ri,0); + neg_col(ri,0); } if (b[1][1] < 0) { neg_col(b,1); @@ -442,8 +442,8 @@ void make_unique(double b[3][3], int r[3][3], int ri[3][3]) } if (det(b) < 0) { neg_col(b,2); - neg_col(r,2); - neg_col(ri,2); + neg_col(r,2); + neg_col(ri,2); } } }} From 4af7e706d7099f391388831938d843446c54dab7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Dec 2018 14:59:43 -0500 Subject: [PATCH 242/273] correctly compute hash for temporary directory used by manual building --- doc/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index ca16176d60..fbb9de2d84 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,7 +1,7 @@ # Makefile for LAMMPS documentation -SHELL = /bin/bash -SHA1 = $(shell echo $USER-$PWD | python utils/sha1sum.py) +SHELL = /bin/bash +SHA1 = $(shell echo ${USER}-${PWD} | python utils/sha1sum.py) BUILDDIR = /tmp/lammps-docs-$(SHA1) RSTDIR = $(BUILDDIR)/rst VENV = $(BUILDDIR)/docenv From 9ee076e4c72d830541ab7ecd0c42fa6ea6c26b23 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 4 Dec 2018 10:40:31 -0500 Subject: [PATCH 243/273] correct formatting of preformatted text --- doc/src/dump_modify.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 464caf714f..a600e04aa5 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -461,10 +461,10 @@ last snapshot. This can be accomplished with something the following commands: variable Dhop equal 0.6 -variable check atom "c_dsp[4] > v_Dhop" +variable check atom "c_dsp\[4\] > v_Dhop" compute dsp all displace/atom refresh check dump 1 all custom 20 tmp.dump id type x y z -dump_modify 1 append yes thresh c_dsp[4] > ${Dhop} refresh c_dsp :pre +dump_modify 1 append yes thresh c_dsp\[4\] > $\{Dhop\} refresh c_dsp :pre The "compute displace/atom"_compute_displace_atom.html command calculates the displacement of each atom from its reference position. From e37436d6466c20ed8a9d01b5ec3f8e46d6c32bef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Dec 2018 18:30:12 -0500 Subject: [PATCH 244/273] plug memory leak and avoid accessing uninitialized memory in virial computation and properly handle PPPM/Ewald cases that don't compute a virial --- doc/src/kspace_style.txt | 4 ++- src/USER-SCAFACOS/scafacos.cpp | 52 ++++++++++++++++++++++------------ 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index d676beff16..049c3aa558 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -58,7 +58,7 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces smallq = cutoff for charges to be considered (optional) (charge units) {scafacos} values = method accuracy - method = fmm or p2nfft or ewald or direct + method = fmm or p2nfft or p3m or ewald or direct accuracy = desired relative error in forces :pre :ule @@ -392,6 +392,8 @@ the same bond/angle/dihedral are weighted by the "special_bonds"_special_bonds.html command. Likewise it does not support the "TIP4P water style" where a fictitious charge site is introduced in each water molecule. +Finally, the methods {p3m} and {ewald} do not support computing the +virial, so this contribution is not included. [Related commands:] diff --git a/src/USER-SCAFACOS/scafacos.cpp b/src/USER-SCAFACOS/scafacos.cpp index 8d2b69deee..4b8e10123c 100644 --- a/src/USER-SCAFACOS/scafacos.cpp +++ b/src/USER-SCAFACOS/scafacos.cpp @@ -100,6 +100,12 @@ void Scafacos::init() if (logfile && me == 0) fprintf(logfile, "Setting up ScaFaCoS with solver %s ...\n",method); + if ((strcmp(method,"p3m") == 0) && (me == 0)) + error->warning(FLERR,"Virial computation for P3M not available"); + + if ((strcmp(method,"ewald") == 0) && (me == 0)) + error->warning(FLERR,"Virial computation for Ewald not available"); + if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); @@ -143,8 +149,7 @@ void Scafacos::init() double *q = atom->q; int nlocal = atom->nlocal; - if (strcmp(method,"fmm") == 0) - { + if (strcmp(method,"fmm") == 0) { if (fmm_tuning_flag == 1) fcs_fmm_set_internal_tuning((FCS)fcs,FCS_FMM_INHOMOGENOUS_SYSTEM); else @@ -152,8 +157,7 @@ void Scafacos::init() } // for the FMM at least one particle is required per process - if (strcmp(method,"fmm") == 0) - { + if (strcmp(method,"fmm") == 0) { int empty = (nlocal==0)?1:0; MPI_Allreduce(MPI_IN_PLACE,&empty,1,MPI_INT,MPI_SUM,world); if (empty > 0) @@ -212,11 +216,15 @@ void Scafacos::compute(int eflag, int vflag) memory->create(efield,maxatom,3,"scafacos:efield"); } - if (vflag_global) - { - fcs_set_compute_virial((FCS)fcs,1); - //if (strcmp(method,"p3m") == 0) - // error->all(FLERR,"ScaFaCoS p3m does not support computation of virial"); + if (vflag_global) { + + // for P3M or Ewald we cannot compute the virial. skip it. + + if ((strcmp(method,"p3m") != 0) + && (strcmp(method,"ewald") != 0)) { + result = fcs_set_compute_virial((FCS)fcs,1); + check_result((void*)&result); + } } // pack coords into xpbc and apply PBC @@ -230,6 +238,7 @@ void Scafacos::compute(int eflag, int vflag) j += 3; } } + // if simulation box has changed, call fcs_tune() if (box_has_changed()) { @@ -245,15 +254,22 @@ void Scafacos::compute(int eflag, int vflag) // extract virial - if (vflag_global) - { - fcs_get_virial((FCS)fcs,virial_int); - virial[0] = virial_int[0]; - virial[1] = virial_int[1]; - virial[2] = virial_int[2]; - virial[3] = virial_int[4]; - virial[4] = virial_int[5]; - virial[5] = virial_int[8]; + if (vflag_global) { + + // for P3M or Ewald we cannot compute the virial. skip it. + + if ((strcmp(method,"p3m") != 0) + && (strcmp(method,"ewald") != 0)) { + result = fcs_get_virial((FCS)fcs,virial_int); + check_result((void*)&result); + + virial[0] = virial_int[0]; + virial[1] = virial_int[1]; + virial[2] = virial_int[2]; + virial[3] = virial_int[4]; + virial[4] = virial_int[5]; + virial[5] = virial_int[8]; + } } // apply Efield to each particle From e01ba84fd2289b4a42e3e1ccf6e32ba7db54a58c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Dec 2018 19:01:20 -0500 Subject: [PATCH 245/273] update log files for USER-SCAFACOS --- .../log.08Aug18.scafacos.cw.g++.ewald.16 | 92 --------------- .../log.08Aug18.scafacos.cw.g++.ewald.8 | 92 --------------- .../log.08Aug18.scafacos.cw.g++.fmm.16 | 99 ---------------- .../log.08Aug18.scafacos.cw.g++.fmm.2 | 99 ---------------- .../log.08Aug18.scafacos.cw.g++.fmm.4 | 99 ---------------- .../log.08Aug18.scafacos.cw.g++.fmm.8 | 99 ---------------- .../log.08Aug18.scafacos.cw.g++.p2nfft.16 | 92 --------------- .../log.08Aug18.scafacos.cw.g++.p2nfft.2 | 92 --------------- .../log.08Aug18.scafacos.cw.g++.p2nfft.8 | 92 --------------- .../log.08Aug18.scafacos.g++.ewald.16 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.ewald.2 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.ewald.8 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.fmm.16 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.fmm.2 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.fmm.8 | 102 ---------------- .../log.08Aug18.scafacos.g++.p2nfft.16 | 102 ---------------- .../log.08Aug18.scafacos.g++.p2nfft.2 | 102 ---------------- .../log.08Aug18.scafacos.g++.p2nfft.8 | 102 ---------------- .../scafacos/log.08Aug18.scafacos.g++.p3m.2 | 0 .../log.08Aug18.scafacos.hsph.g++.direct.2 | 105 ----------------- .../log.08Aug18.scafacos.hsph.g++.direct.8 | 105 ----------------- .../log.08Aug18.scafacos.hsph.g++.fmm.2 | 109 ------------------ .../log.08Aug18.scafacos.hsph.g++.fmm.8 | 109 ------------------ .../log.08Aug18.scafacos.hsph.g++.p2nfft.2 | 107 ----------------- .../log.08Aug18.scafacos.hsph.g++.p2nfft.4 | 107 ----------------- .../log.08Aug18.scafacos.hsph.g++.p2nfft.8 | 107 ----------------- .../log.27Nov18.scafacos.cw.ewald.g++.1 | 92 +++++++++++++++ .../log.27Nov18.scafacos.cw.ewald.g++.4 | 92 +++++++++++++++ ...mm.1 => log.27Nov18.scafacos.cw.fmm.g++.1} | 49 ++++---- .../log.27Nov18.scafacos.cw.fmm.g++.4 | 98 ++++++++++++++++ ...1 => log.27Nov18.scafacos.cw.p2nfft.g++.1} | 43 ++++--- ...4 => log.27Nov18.scafacos.cw.p2nfft.g++.4} | 43 ++++--- .../log.27Nov18.scafacos.cw.p3m.g++.1 | 92 +++++++++++++++ .../log.27Nov18.scafacos.cw.p3m.g++.4 | 92 +++++++++++++++ ...ald.1 => log.27Nov18.scafacos.ewald.g++.1} | 26 ++--- ...ald.4 => log.27Nov18.scafacos.ewald.g++.4} | 48 ++++---- ...+.fmm.1 => log.27Nov18.scafacos.fmm.g++.1} | 25 ++-- ...+.fmm.4 => log.27Nov18.scafacos.fmm.g++.4} | 25 ++-- .../USER/scafacos/log.27Nov18.scafacos.g++.1 | 102 ++++++++++++++++ .../USER/scafacos/log.27Nov18.scafacos.g++.4 | 102 ++++++++++++++++ ...=> log.27Nov18.scafacos.hsph.direct.g++.1} | 73 ++++++------ ...=> log.27Nov18.scafacos.hsph.direct.g++.4} | 85 +++++++------- ....1 => log.27Nov18.scafacos.hsph.fmm.g++.1} | 75 ++++++------ ....4 => log.27Nov18.scafacos.hsph.fmm.g++.4} | 85 +++++++------- ...=> log.27Nov18.scafacos.hsph.p2nfft.g++.1} | 75 ++++++------ .../log.27Nov18.scafacos.hsph.p2nfft.g++.4 | 106 +++++++++++++++++ ...ft.1 => log.27Nov18.scafacos.p2nfft.g++.1} | 25 ++-- ...ft.4 => log.27Nov18.scafacos.p2nfft.g++.4} | 25 ++-- .../scafacos/log.27Nov18.scafacos.p3m.g++.1 | 102 ++++++++++++++++ .../scafacos/log.27Nov18.scafacos.p3m.g++.4 | 102 ++++++++++++++++ 50 files changed, 1325 insertions(+), 2880 deletions(-) delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.g++.p3m.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 delete mode 100644 examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.1 create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.4 rename examples/USER/scafacos/{log.08Aug18.scafacos.cw.g++.fmm.1 => log.27Nov18.scafacos.cw.fmm.g++.1} (51%) create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.4 rename examples/USER/scafacos/{log.08Aug18.scafacos.cw.g++.p2nfft.1 => log.27Nov18.scafacos.cw.p2nfft.g++.1} (64%) rename examples/USER/scafacos/{log.08Aug18.scafacos.cw.g++.p2nfft.4 => log.27Nov18.scafacos.cw.p2nfft.g++.4} (64%) create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.1 create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.4 rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.ewald.1 => log.27Nov18.scafacos.ewald.g++.1} (79%) rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.ewald.4 => log.27Nov18.scafacos.ewald.g++.4} (76%) rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.fmm.1 => log.27Nov18.scafacos.fmm.g++.1} (79%) rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.fmm.4 => log.27Nov18.scafacos.fmm.g++.4} (79%) create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.g++.1 create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.g++.4 rename examples/USER/scafacos/{log.08Aug18.scafacos.hsph.g++.direct.1 => log.27Nov18.scafacos.hsph.direct.g++.1} (69%) rename examples/USER/scafacos/{log.08Aug18.scafacos.hsph.g++.direct.4 => log.27Nov18.scafacos.hsph.direct.g++.4} (64%) rename examples/USER/scafacos/{log.08Aug18.scafacos.hsph.g++.fmm.1 => log.27Nov18.scafacos.hsph.fmm.g++.1} (65%) rename examples/USER/scafacos/{log.08Aug18.scafacos.hsph.g++.fmm.4 => log.27Nov18.scafacos.hsph.fmm.g++.4} (60%) rename examples/USER/scafacos/{log.08Aug18.scafacos.hsph.g++.p2nfft.1 => log.27Nov18.scafacos.hsph.p2nfft.g++.1} (52%) create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.4 rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.p2nfft.1 => log.27Nov18.scafacos.p2nfft.g++.1} (80%) rename examples/USER/scafacos/{log.08Aug18.scafacos.g++.p2nfft.4 => log.27Nov18.scafacos.p2nfft.g++.4} (79%) create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.1 create mode 100644 examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.4 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 deleted file mode 100644 index 20d3faaf7f..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 +++ /dev/null @@ -1,92 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task - -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve -kspace_style scafacos ewald 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver ewald ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49647271 0 0.49647271 0 0 - 10 300 0.051135063 0.014582562 0.44286522 0.02180093 0.46466616 0 0.0043601861 - 20 300 0.10210872 0.058693359 0.37869251 0.087746571 0.46643909 0 0.017549314 - 30 300 0.15278506 0.13468789 0.26730177 0.2013584 0.46866017 0 0.040271679 - 40 300 0.19430375 0.50949535 0.083356437 0.76169555 0.84505198 0 0.15233911 - 50 300 0.23220921 1.1731116 -0.055261984 1.7538018 1.6985399 0 0.35076037 - 60 300 0.27002859 1.3589639 -0.33351524 2.031651 1.6981358 0 0.4063302 - 70 300 0.30781388 1.6482648 -0.76570045 2.4641559 1.6984554 0 0.49283118 - 80 300 0.34566283 2.8640899 -2.4038488 4.2818144 1.8779656 0 0.85636288 - 90 300 0.38424087 93.168442 -2.5911448 139.28682 136.69568 0 27.857364 - 100 300 0.42331123 94.146897 -1.3480439 140.74961 139.40157 0 28.149922 -Loop time of 0.423331 on 16 procs for 100 steps with 300 atoms - -Performance: 102047.913 tau/day, 236.222 timesteps/s -99.2% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.5988e-05 | 3.6508e-05 | 5.5075e-05 | 0.0 | 0.01 -Kspace | 0.41852 | 0.41925 | 0.41976 | 0.1 | 99.04 -Neigh | 0.00023413 | 0.00056887 | 0.0012875 | 0.0 | 0.13 -Comm | 0.0019519 | 0.0022772 | 0.0027158 | 0.5 | 0.54 -Output | 0.00028276 | 0.00030752 | 0.0003624 | 0.0 | 0.07 -Modify | 8.3685e-05 | 0.0001286 | 0.00018764 | 0.0 | 0.03 -Other | | 0.000758 | | | 0.18 - -Nlocal: 18.75 ave 39 max 6 min -Histogram: 6 1 1 0 1 2 2 1 1 1 -Nghost: 122.812 ave 195 max 63 min -Histogram: 8 0 0 0 0 0 0 1 3 4 -Neighs: 160.625 ave 598 max 13 min -Histogram: 8 2 1 1 1 0 0 2 0 1 - -Total # of neighbors = 2570 -Ave neighs/atom = 8.56667 -Neighbor list builds = 23 -Dangerous builds = 16 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 deleted file mode 100644 index d26138522a..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 +++ /dev/null @@ -1,92 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task - -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve -kspace_style scafacos ewald 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver ewald ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49647271 0 0.49647271 0 0 - 10 300 0.057411432 0.014718629 0.45088339 0.02200435 0.47288774 0 0.00440087 - 20 300 0.11482716 0.05922597 0.38470912 0.088542825 0.47325194 0 0.017708565 - 30 300 0.17278481 0.13587829 0.27058048 0.20313804 0.47371852 0 0.040627608 - 40 300 0.23021507 0.51353118 0.088432648 0.76772911 0.85616176 0 0.15354582 - 50 300 0.28812647 1.1760001 -0.058088247 1.7581201 1.7000319 0 0.35162403 - 60 300 0.34651113 1.3627885 -0.33736672 2.0373688 1.7000021 0 0.40747376 - 70 300 0.40509939 1.6529365 -0.77082139 2.4711401 1.7003187 0 0.49422802 - 80 300 0.46342874 2.9569837 -2.4624654 4.4206907 1.9582253 0 0.88413814 - 90 300 0.52329254 81.642726 -2.5370215 122.05588 119.51885 0 24.411175 - 100 300 0.58335209 85.047974 -1.128107 127.14672 126.01861 0 25.429344 -Loop time of 0.583369 on 8 procs for 100 steps with 300 atoms - -Performance: 74052.598 tau/day, 171.418 timesteps/s -99.7% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.0531e-05 | 4.6492e-05 | 4.8876e-05 | 0.0 | 0.01 -Kspace | 0.57805 | 0.5785 | 0.57893 | 0.0 | 99.17 -Neigh | 0.00062275 | 0.00091892 | 0.0013313 | 0.0 | 0.16 -Comm | 0.002604 | 0.0028289 | 0.0031538 | 0.3 | 0.48 -Output | 0.0002265 | 0.0002434 | 0.00029039 | 0.0 | 0.04 -Modify | 0.00016117 | 0.00017747 | 0.00019884 | 0.0 | 0.03 -Other | | 0.00065 | | | 0.11 - -Nlocal: 37.5 ave 46 max 31 min -Histogram: 2 0 0 2 1 0 2 0 0 1 -Nghost: 203.875 ave 212 max 192 min -Histogram: 1 0 1 0 0 2 1 0 0 3 -Neighs: 321.625 ave 599 max 112 min -Histogram: 1 2 0 1 1 0 1 1 0 1 - -Total # of neighbors = 2573 -Ave neighs/atom = 8.57667 -Neighbor list builds = 23 -Dangerous builds = 16 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 deleted file mode 100644 index c9c1e0d155..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 +++ /dev/null @@ -1,99 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -kspace_style scafacos fmm 1.0e-3 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 - 10 300 0.023007393 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 - 20 300 0.045746088 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 - 30 300 0.068123341 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 - 40 300 0.090359211 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 - 50 300 0.11304998 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 - 60 300 0.13585806 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 - 70 300 0.15867376 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 - 80 300 0.18324137 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 - 90 300 0.20960689 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 - 100 300 0.23539281 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 -Loop time of 0.235411 on 16 procs for 100 steps with 300 atoms - -Performance: 183509.107 tau/day, 424.790 timesteps/s -97.9% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.2425e-05 | 4.4718e-05 | 6.1274e-05 | 0.0 | 0.02 -Kspace | 0.23097 | 0.23143 | 0.2318 | 0.1 | 98.31 -Neigh | 0.00015116 | 0.00035347 | 0.00075746 | 0.0 | 0.15 -Comm | 0.0020316 | 0.002282 | 0.0025339 | 0.3 | 0.97 -Output | 0.00034404 | 0.00037053 | 0.00042701 | 0.0 | 0.16 -Modify | 9.3937e-05 | 0.00014532 | 0.00018811 | 0.0 | 0.06 -Other | | 0.0007878 | | | 0.33 - -Nlocal: 18.75 ave 36 max 6 min -Histogram: 4 3 1 0 0 1 2 1 2 2 -Nghost: 127 ave 196 max 71 min -Histogram: 8 0 0 0 0 0 0 1 6 1 -Neighs: 153.688 ave 491 max 10 min -Histogram: 8 1 1 1 1 1 0 0 0 3 - -Total # of neighbors = 2459 -Ave neighs/atom = 8.19667 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 deleted file mode 100644 index 1a9bc77146..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 +++ /dev/null @@ -1,99 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -kspace_style scafacos fmm 1.0e-3 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.354 | 3.354 | 3.355 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 - 10 300 0.038181543 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 - 20 300 0.076276302 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 - 30 300 0.11437607 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 - 40 300 0.15244293 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 - 50 300 0.19081283 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 - 60 300 0.22923493 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 - 70 300 0.26754427 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 - 80 300 0.30721259 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 - 90 300 0.34865618 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 - 100 300 0.39100981 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 -Loop time of 0.391022 on 2 procs for 100 steps with 300 atoms - -Performance: 110479.760 tau/day, 255.740 timesteps/s -99.6% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 8.0109e-05 | 8.1539e-05 | 8.297e-05 | 0.0 | 0.02 -Kspace | 0.38534 | 0.38582 | 0.3863 | 0.1 | 98.67 -Neigh | 0.0014851 | 0.0019699 | 0.0024548 | 1.1 | 0.50 -Comm | 0.0019314 | 0.0020101 | 0.0020888 | 0.2 | 0.51 -Output | 0.00014496 | 0.00017297 | 0.00020099 | 0.0 | 0.04 -Modify | 0.0005033 | 0.00052273 | 0.00054216 | 0.0 | 0.13 -Other | | 0.0004461 | | | 0.11 - -Nlocal: 150 ave 159 max 141 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 392 ave 395 max 389 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 1229.5 ave 1773 max 686 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 2459 -Ave neighs/atom = 8.19667 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 deleted file mode 100644 index eae3f2b840..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 +++ /dev/null @@ -1,99 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -kspace_style scafacos fmm 1.0e-3 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 - 10 300 0.029414415 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 - 20 300 0.058616877 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 - 30 300 0.087769508 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 - 40 300 0.1168611 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 - 50 300 0.14482284 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 - 60 300 0.17198443 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 - 70 300 0.19868851 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 - 80 300 0.22835517 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 - 90 300 0.26023602 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 - 100 300 0.29043221 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 -Loop time of 0.290448 on 4 procs for 100 steps with 300 atoms - -Performance: 148735.741 tau/day, 344.296 timesteps/s -99.0% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.9605e-05 | 6.187e-05 | 6.4135e-05 | 0.0 | 0.02 -Kspace | 0.28551 | 0.28584 | 0.28604 | 0.0 | 98.41 -Neigh | 0.00077796 | 0.0010615 | 0.0013225 | 0.7 | 0.37 -Comm | 0.002372 | 0.0024325 | 0.002497 | 0.1 | 0.84 -Output | 0.00025368 | 0.0002659 | 0.00029516 | 0.0 | 0.09 -Modify | 0.00030279 | 0.00031865 | 0.00033021 | 0.0 | 0.11 -Other | | 0.0004706 | | | 0.16 - -Nlocal: 75 ave 81 max 70 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 282.5 ave 290 max 274 min -Histogram: 1 0 0 1 0 0 0 0 1 1 -Neighs: 614.75 ave 981 max 285 min -Histogram: 1 1 0 0 0 0 0 1 0 1 - -Total # of neighbors = 2459 -Ave neighs/atom = 8.19667 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 deleted file mode 100644 index feb7e2a5a6..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 +++ /dev/null @@ -1,99 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -kspace_style scafacos fmm 1.0e-3 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 - 10 300 0.026465416 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 - 20 300 0.057377338 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 - 30 300 0.088356495 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 - 40 300 0.11900806 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 - 50 300 0.15157914 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 - 60 300 0.18608141 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 - 70 300 0.21956491 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 - 80 300 0.24269128 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 - 90 300 0.26847005 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 - 100 300 0.29283834 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 -Loop time of 0.292855 on 8 procs for 100 steps with 300 atoms - -Performance: 147513.337 tau/day, 341.466 timesteps/s -98.4% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.7207e-05 | 5.5045e-05 | 6.9618e-05 | 0.0 | 0.02 -Kspace | 0.28739 | 0.28773 | 0.2881 | 0.0 | 98.25 -Neigh | 0.00040698 | 0.00060901 | 0.00082922 | 0.0 | 0.21 -Comm | 0.0029533 | 0.0031788 | 0.0034056 | 0.3 | 1.09 -Output | 0.00029063 | 0.00030866 | 0.00035119 | 0.0 | 0.11 -Modify | 0.00018978 | 0.00022188 | 0.00026703 | 0.0 | 0.08 -Other | | 0.0007486 | | | 0.26 - -Nlocal: 37.5 ave 45 max 31 min -Histogram: 1 1 1 1 1 0 1 0 1 1 -Nghost: 200 ave 209 max 189 min -Histogram: 1 0 0 0 1 4 0 0 0 2 -Neighs: 307.375 ave 514 max 115 min -Histogram: 2 1 0 1 1 0 0 0 1 2 - -Total # of neighbors = 2459 -Ave neighs/atom = 8.19667 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 deleted file mode 100644 index d6e7cbea37..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 +++ /dev/null @@ -1,92 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task - -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 - 10 300 0.015678644 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 - 20 300 0.031283855 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 - 30 300 0.046878099 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 - 40 300 0.062416077 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 - 50 300 0.078029871 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 - 60 300 0.093806505 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 - 70 300 0.1096344 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 - 80 300 0.12532592 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 - 90 300 0.14175463 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 - 100 300 0.15838337 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 -Loop time of 0.158406 on 16 procs for 100 steps with 300 atoms - -Performance: 272716.448 tau/day, 631.288 timesteps/s -99.4% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.718e-05 | 3.7491e-05 | 5.6744e-05 | 0.0 | 0.02 -Kspace | 0.15435 | 0.15482 | 0.15516 | 0.1 | 97.74 -Neigh | 0.00014806 | 0.0003508 | 0.00074744 | 0.0 | 0.22 -Comm | 0.0016866 | 0.0019967 | 0.0023787 | 0.5 | 1.26 -Output | 0.00027871 | 0.00033027 | 0.00038028 | 0.0 | 0.21 -Modify | 8.0347e-05 | 0.00011933 | 0.00016522 | 0.0 | 0.08 -Other | | 0.0007506 | | | 0.47 - -Nlocal: 18.75 ave 33 max 6 min -Histogram: 2 6 0 0 0 0 2 1 2 3 -Nghost: 128.875 ave 198 max 71 min -Histogram: 7 1 0 0 0 0 0 1 5 2 -Neighs: 153.812 ave 490 max 14 min -Histogram: 8 0 3 0 1 1 0 0 1 2 - -Total # of neighbors = 2461 -Ave neighs/atom = 8.20333 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 deleted file mode 100644 index fb863797f3..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 +++ /dev/null @@ -1,92 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task - -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.354 | 3.354 | 3.355 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 - 10 300 0.044083834 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 - 20 300 0.088379145 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 - 30 300 0.13264704 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 - 40 300 0.17687225 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 - 50 300 0.22116137 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 - 60 300 0.26515126 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 - 70 300 0.30891085 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 - 80 300 0.35292292 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 - 90 300 0.39845228 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 - 100 300 0.44492316 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 -Loop time of 0.444937 on 2 procs for 100 steps with 300 atoms - -Performance: 97092.373 tau/day, 224.751 timesteps/s -100.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 7.7248e-05 | 7.844e-05 | 7.9632e-05 | 0.0 | 0.02 -Kspace | 0.43932 | 0.43979 | 0.44026 | 0.1 | 98.84 -Neigh | 0.0014915 | 0.0019662 | 0.0024409 | 1.1 | 0.44 -Comm | 0.0019331 | 0.0019941 | 0.0020552 | 0.1 | 0.45 -Output | 0.00013781 | 0.00016308 | 0.00018835 | 0.0 | 0.04 -Modify | 0.00050378 | 0.00050449 | 0.00050521 | 0.0 | 0.11 -Other | | 0.0004425 | | | 0.10 - -Nlocal: 150 ave 157 max 143 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 399 ave 402 max 396 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 1230.5 ave 1756 max 705 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 2461 -Ave neighs/atom = 8.20333 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 deleted file mode 100644 index a6f9228673..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 +++ /dev/null @@ -1,92 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task - -units lj -atom_style charge - -read_data data.cloud_wall - orthogonal box = (0 0 0) to (10 10 10) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 300 atoms - -velocity all set 0.0 0.0 0.0 mom no - -pair_style zero 1.0 -pair_coeff * * - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 - -thermo_style custom step atoms cpu temp pe ke etotal ecoul press - -run_style verlet - -#dump simple all custom 1000 id x y z vx vy vz -#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass -#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass -#dump_modify dmpvtk pad 7 - -thermo 10 -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes -Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press - 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 - 10 300 0.01961565 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 - 20 300 0.039346695 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 - 30 300 0.059037447 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 - 40 300 0.078732729 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 - 50 300 0.098586798 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 - 60 300 0.11857247 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 - 70 300 0.1385541 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 - 80 300 0.15850091 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 - 90 300 0.17892075 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 - 100 300 0.19964767 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 -Loop time of 0.199664 on 8 procs for 100 steps with 300 atoms - -Performance: 216363.074 tau/day, 500.840 timesteps/s -99.4% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.5061e-05 | 4.7535e-05 | 5.3167e-05 | 0.0 | 0.02 -Kspace | 0.19551 | 0.19584 | 0.19611 | 0.0 | 98.08 -Neigh | 0.00041366 | 0.00060952 | 0.00082064 | 0.0 | 0.31 -Comm | 0.0021496 | 0.0022282 | 0.0024025 | 0.2 | 1.12 -Output | 0.0002346 | 0.00024167 | 0.00027847 | 0.0 | 0.12 -Modify | 0.00016665 | 0.00017652 | 0.0001924 | 0.0 | 0.09 -Other | | 0.0005245 | | | 0.26 - -Nlocal: 37.5 ave 42 max 33 min -Histogram: 2 1 0 1 0 0 1 0 1 2 -Nghost: 202.25 ave 212 max 194 min -Histogram: 1 0 2 1 0 2 0 1 0 1 -Neighs: 307.625 ave 505 max 129 min -Histogram: 3 0 0 1 1 0 0 0 1 2 - -Total # of neighbors = 2461 -Ave neighs/atom = 8.20333 -Neighbor list builds = 15 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 deleted file mode 100644 index 2fc46da3cd..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 4 MPI processor grid - 4096 atoms - Time spent = 0.000462294 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos ewald 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver ewald ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475938 0 0.50185691 -nan - 10 1.500011 -1.747529 0 0.50193816 -nan - 20 1.5000023 -1.7475152 0 0.50193898 -nan - 30 1.4999308 -1.747404 0 0.50194285 -nan - 40 1.4997722 -1.7471622 0 0.50194686 -nan - 50 1.4995835 -1.746878 0 0.50194808 -nan - 60 1.4996054 -1.7469114 0 0.50194749 -nan - 70 1.5004341 -1.7481558 0 0.50194592 -nan - 80 1.5033218 -1.7524875 0 0.50194458 -nan - 90 1.5108306 -1.7637462 0 0.50194636 -nan - 100 1.5292479 -1.7913449 0 0.50196695 -nan -Loop time of 80.2777 on 16 procs for 100 steps with 4096 atoms - -Performance: 538.132 tau/day, 1.246 timesteps/s -99.8% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0003705 | 0.00039807 | 0.00048542 | 0.0 | 0.00 -Kspace | 80.262 | 80.263 | 80.264 | 0.0 | 99.98 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.010191 | 0.011419 | 0.012416 | 0.6 | 0.01 -Output | 0.00028253 | 0.00033158 | 0.0004065 | 0.0 | 0.00 -Modify | 0.00082541 | 0.0008464 | 0.00087833 | 0.0 | 0.00 -Other | | 0.001511 | | | 0.00 - -Nlocal: 256 ave 256 max 256 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Nghost: 2816 ave 2816 max 2816 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Neighs: 32768 ave 32768 max 32768 min -Histogram: 16 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:01:22 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 deleted file mode 100644 index b6bf41de24..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 1 by 1 by 2 MPI processor grid - 4096 atoms - Time spent = 0.000344753 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos ewald 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver ewald ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475938 0 0.50185691 11.99707 - 10 1.500011 -1.747529 0 0.50193816 11.997158 - 20 1.5000023 -1.7475152 0 0.50193898 11.997089 - 30 1.4999308 -1.747404 0 0.50194285 11.996517 - 40 1.4997722 -1.7471622 0 0.50194686 11.995248 - 50 1.4995835 -1.746878 0 0.50194808 11.993739 - 60 1.4996054 -1.7469114 0 0.50194749 11.993914 - 70 1.5004341 -1.7481558 0 0.50194592 12.000543 - 80 1.5033218 -1.7524875 0 0.50194458 12.023638 - 90 1.5108306 -1.7637462 0 0.50194636 12.083694 - 100 1.5292479 -1.7913449 0 0.50196695 12.230996 -Loop time of 566.796 on 2 procs for 100 steps with 4096 atoms - -Performance: 76.218 tau/day, 0.176 timesteps/s -100.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010231 | 0.0010413 | 0.0010595 | 0.1 | 0.00 -Kspace | 566.77 | 566.77 | 566.77 | 0.0 | 99.99 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.019707 | 0.01982 | 0.019932 | 0.1 | 0.00 -Output | 0.0002656 | 0.00029266 | 0.00031972 | 0.0 | 0.00 -Modify | 0.0055575 | 0.0055707 | 0.0055838 | 0.0 | 0.00 -Other | | 0.002497 | | | 0.00 - -Nlocal: 2048 ave 2048 max 2048 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 7168 ave 7168 max 7168 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Neighs: 262144 ave 262144 max 262144 min -Histogram: 2 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:09:38 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 deleted file mode 100644 index 4a1a5b91ed..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 2 MPI processor grid - 4096 atoms - Time spent = 0.000232935 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos ewald 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver ewald ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475938 0 0.50185691 -nan - 10 1.500011 -1.747529 0 0.50193816 -nan - 20 1.5000023 -1.7475152 0 0.50193898 -nan - 30 1.4999308 -1.747404 0 0.50194285 -nan - 40 1.4997722 -1.7471622 0 0.50194686 -nan - 50 1.4995835 -1.746878 0 0.50194808 -nan - 60 1.4996054 -1.7469114 0 0.50194749 -nan - 70 1.5004341 -1.7481558 0 0.50194592 -nan - 80 1.5033218 -1.7524875 0 0.50194458 -nan - 90 1.5108306 -1.7637462 0 0.50194636 -nan - 100 1.5292479 -1.7913449 0 0.50196695 -nan -Loop time of 154.44 on 8 procs for 100 steps with 4096 atoms - -Performance: 279.720 tau/day, 0.647 timesteps/s -99.9% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00049257 | 0.00051311 | 0.00059295 | 0.0 | 0.00 -Kspace | 154.42 | 154.42 | 154.42 | 0.0 | 99.99 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.012076 | 0.013177 | 0.014308 | 0.8 | 0.01 -Output | 0.00025177 | 0.00028065 | 0.00030136 | 0.0 | 0.00 -Modify | 0.0015776 | 0.0017182 | 0.0018268 | 0.2 | 0.00 -Other | | 0.001309 | | | 0.00 - -Nlocal: 512 ave 512 max 512 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Nghost: 3584 ave 3584 max 3584 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Neighs: 65536 ave 65536 max 65536 min -Histogram: 8 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:02:38 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 deleted file mode 100644 index 4bd0c3d4f3..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 4 MPI processor grid - 4096 atoms - Time spent = 0.000400543 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos fmm 0.001 -kspace_modify scafacos tolerance energy - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475646 0 0.50188608 10.44368 - 10 1.5000016 -1.7475671 0 0.50188602 10.44369 - 20 1.4999827 -1.7475388 0 0.50188592 10.443564 - 30 1.4999016 -1.7474173 0 0.5018858 10.443023 - 40 1.4997356 -1.7471685 0 0.50188572 10.441917 - 50 1.4995414 -1.7468771 0 0.5018858 10.440623 - 60 1.4995587 -1.7469027 0 0.50188622 10.440739 - 70 1.5003837 -1.7481389 0 0.50188727 10.446238 - 80 1.5032684 -1.7524625 0 0.50188958 10.465466 - 90 1.5107749 -1.763714 0 0.50189507 10.515502 - 100 1.52919 -1.791306 0 0.50191895 10.638261 -Loop time of 4.23774 on 16 procs for 100 steps with 4096 atoms - -Performance: 10194.102 tau/day, 23.597 timesteps/s -99.6% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00038028 | 0.00040729 | 0.00046206 | 0.0 | 0.01 -Kspace | 4.2206 | 4.2211 | 4.2216 | 0.0 | 99.61 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.011439 | 0.012491 | 0.013172 | 0.4 | 0.29 -Output | 0.00042915 | 0.000489 | 0.00061274 | 0.0 | 0.01 -Modify | 0.00093102 | 0.00099151 | 0.0010982 | 0.0 | 0.02 -Other | | 0.002255 | | | 0.05 - -Nlocal: 256 ave 256 max 256 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Nghost: 2816 ave 2816 max 2816 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Neighs: 32768 ave 32768 max 32768 min -Histogram: 16 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:06 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 deleted file mode 100644 index 50dcc99393..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 1 by 1 by 2 MPI processor grid - 4096 atoms - Time spent = 0.0003407 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos fmm 0.001 -kspace_modify scafacos tolerance energy - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475646 0 0.50188608 10.44368 - 10 1.5000016 -1.7475671 0 0.50188602 10.44369 - 20 1.4999827 -1.7475388 0 0.50188592 10.443564 - 30 1.4999016 -1.7474173 0 0.5018858 10.443023 - 40 1.4997356 -1.7471685 0 0.50188572 10.441917 - 50 1.4995414 -1.7468771 0 0.5018858 10.440623 - 60 1.4995587 -1.7469027 0 0.50188622 10.440739 - 70 1.5003837 -1.7481389 0 0.50188727 10.446238 - 80 1.5032684 -1.7524625 0 0.50188958 10.465466 - 90 1.5107749 -1.763714 0 0.50189507 10.515502 - 100 1.52919 -1.791306 0 0.50191895 10.638261 -Loop time of 17.9401 on 2 procs for 100 steps with 4096 atoms - -Performance: 2408.014 tau/day, 5.574 timesteps/s -99.9% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010042 | 0.0010235 | 0.0010428 | 0.1 | 0.01 -Kspace | 17.912 | 17.912 | 17.912 | 0.0 | 99.84 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.018252 | 0.018528 | 0.018804 | 0.2 | 0.10 -Output | 0.00034094 | 0.00035989 | 0.00037885 | 0.0 | 0.00 -Modify | 0.0055602 | 0.0056567 | 0.0057533 | 0.1 | 0.03 -Other | | 0.002716 | | | 0.02 - -Nlocal: 2048 ave 2048 max 2048 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 7168 ave 7168 max 7168 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Neighs: 262144 ave 262144 max 262144 min -Histogram: 2 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:19 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 deleted file mode 100644 index 02a5528c59..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 2 MPI processor grid - 4096 atoms - Time spent = 0.000236988 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos fmm 0.001 -kspace_modify scafacos tolerance energy - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475646 0 0.50188608 10.44368 - 10 1.5000016 -1.7475671 0 0.50188602 10.44369 - 20 1.4999827 -1.7475388 0 0.50188592 10.443564 - 30 1.4999016 -1.7474173 0 0.5018858 10.443023 - 40 1.4997356 -1.7471685 0 0.50188572 10.441917 - 50 1.4995414 -1.7468771 0 0.5018858 10.440623 - 60 1.4995587 -1.7469027 0 0.50188622 10.440739 - 70 1.5003837 -1.7481389 0 0.50188727 10.446238 - 80 1.5032684 -1.7524625 0 0.50188958 10.465466 - 90 1.5107749 -1.763714 0 0.50189507 10.515502 - 100 1.52919 -1.791306 0 0.50191895 10.638261 -Loop time of 5.96037 on 8 procs for 100 steps with 4096 atoms - -Performance: 7247.876 tau/day, 16.777 timesteps/s -99.8% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00049591 | 0.0005368 | 0.00056005 | 0.0 | 0.01 -Kspace | 5.94 | 5.941 | 5.9419 | 0.0 | 99.68 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013702 | 0.014631 | 0.015768 | 0.6 | 0.25 -Output | 0.00044751 | 0.00048846 | 0.00058961 | 0.0 | 0.01 -Modify | 0.0016675 | 0.0017205 | 0.0017893 | 0.1 | 0.03 -Other | | 0.001971 | | | 0.03 - -Nlocal: 512 ave 512 max 512 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Nghost: 3584 ave 3584 max 3584 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Neighs: 65536 ave 65536 max 65536 min -Histogram: 8 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:07 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 deleted file mode 100644 index 6e6e8f6e94..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 4 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 4 MPI processor grid - 4096 atoms - Time spent = 0.000361443 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7477245 0 0.50172614 10.443537 - 10 1.5000176 -1.7475898 0 0.50188725 10.443798 - 20 1.5000161 -1.7475262 0 0.50194874 10.443843 - 30 1.4999486 -1.7474019 0 0.50197176 10.443413 - 40 1.4997889 -1.7471525 0 0.50198161 10.442357 - 50 1.4995945 -1.7468614 0 0.50198122 10.441061 - 60 1.499609 -1.7468813 0 0.50198309 10.44116 - 70 1.5004314 -1.7481179 0 0.50197962 10.446638 - 80 1.5033149 -1.7524495 0 0.50197233 10.46585 - 90 1.5108219 -1.7637095 0 0.50197005 10.515883 - 100 1.529239 -1.7913105 0 0.501988 10.638649 -Loop time of 1.56685 on 16 procs for 100 steps with 4096 atoms - -Performance: 27571.239 tau/day, 63.822 timesteps/s -99.8% CPU use with 16 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00036407 | 0.00040755 | 0.00047517 | 0.0 | 0.03 -Kspace | 1.5521 | 1.553 | 1.5536 | 0.0 | 99.12 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.009537 | 0.010175 | 0.011894 | 0.6 | 0.65 -Output | 0.000319 | 0.00039139 | 0.00052881 | 0.0 | 0.02 -Modify | 0.00086999 | 0.00097834 | 0.0010362 | 0.0 | 0.06 -Other | | 0.001859 | | | 0.12 - -Nlocal: 256 ave 256 max 256 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Nghost: 2816 ave 2816 max 2816 min -Histogram: 16 0 0 0 0 0 0 0 0 0 -Neighs: 32768 ave 32768 max 32768 min -Histogram: 16 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 deleted file mode 100644 index 72a53c48ff..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 1 by 1 by 2 MPI processor grid - 4096 atoms - Time spent = 0.0003438 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7477245 0 0.50172614 10.443537 - 10 1.5000176 -1.7475898 0 0.50188725 10.443798 - 20 1.5000161 -1.7475262 0 0.50194874 10.443843 - 30 1.4999486 -1.7474019 0 0.50197176 10.443413 - 40 1.4997889 -1.7471525 0 0.50198161 10.442357 - 50 1.4995945 -1.7468614 0 0.50198122 10.441061 - 60 1.499609 -1.7468813 0 0.50198309 10.44116 - 70 1.5004314 -1.7481179 0 0.50197962 10.446638 - 80 1.5033149 -1.7524495 0 0.50197233 10.46585 - 90 1.5108219 -1.7637095 0 0.50197005 10.515883 - 100 1.529239 -1.7913105 0 0.501988 10.638649 -Loop time of 9.38943 on 2 procs for 100 steps with 4096 atoms - -Performance: 4600.920 tau/day, 10.650 timesteps/s -99.9% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010064 | 0.0010065 | 0.0010066 | 0.0 | 0.01 -Kspace | 9.3602 | 9.3603 | 9.3604 | 0.0 | 99.69 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.019444 | 0.01968 | 0.019916 | 0.2 | 0.21 -Output | 0.00033355 | 0.00035357 | 0.0003736 | 0.0 | 0.00 -Modify | 0.0055819 | 0.0056176 | 0.0056534 | 0.0 | 0.06 -Other | | 0.002495 | | | 0.03 - -Nlocal: 2048 ave 2048 max 2048 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 7168 ave 7168 max 7168 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Neighs: 262144 ave 262144 max 262144 min -Histogram: 2 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:11 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 deleted file mode 100644 index b5e889dfc1..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 +++ /dev/null @@ -1,102 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.NaCl - orthogonal box = (0 0 0) to (1 1 1) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 8 atoms - -replicate 8 8 8 - orthogonal box = (0 0 0) to (8 8 8) - 2 by 2 by 2 MPI processor grid - 4096 atoms - Time spent = 0.000324488 secs - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance field - -timestep 0.005 -thermo 10 - -run 100 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7477245 0 0.50172614 10.443537 - 10 1.5000176 -1.7475898 0 0.50188725 10.443798 - 20 1.5000161 -1.7475262 0 0.50194874 10.443843 - 30 1.4999486 -1.7474019 0 0.50197176 10.443413 - 40 1.4997889 -1.7471525 0 0.50198161 10.442357 - 50 1.4995945 -1.7468614 0 0.50198122 10.441061 - 60 1.499609 -1.7468813 0 0.50198309 10.44116 - 70 1.5004314 -1.7481179 0 0.50197962 10.446638 - 80 1.5033149 -1.7524495 0 0.50197233 10.46585 - 90 1.5108219 -1.7637095 0 0.50197005 10.515883 - 100 1.529239 -1.7913105 0 0.501988 10.638649 -Loop time of 2.88506 on 8 procs for 100 steps with 4096 atoms - -Performance: 14973.700 tau/day, 34.661 timesteps/s -99.6% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.000489 | 0.00051507 | 0.00052857 | 0.0 | 0.02 -Kspace | 2.8657 | 2.866 | 2.8664 | 0.0 | 99.34 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014354 | 0.014851 | 0.015097 | 0.2 | 0.51 -Output | 0.00037169 | 0.00042769 | 0.00054169 | 0.0 | 0.01 -Modify | 0.0015774 | 0.0016578 | 0.0018044 | 0.2 | 0.06 -Other | | 0.001645 | | | 0.06 - -Nlocal: 512 ave 512 max 512 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Nghost: 3584 ave 3584 max 3584 min -Histogram: 8 0 0 0 0 0 0 0 0 0 -Neighs: 65536 ave 65536 max 65536 min -Histogram: 8 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 524288 -Ave neighs/atom = 128 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p3m.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p3m.2 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 deleted file mode 100644 index 1ffab0ca6a..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 +++ /dev/null @@ -1,105 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos direct 0.001 - -timestep 0.005 -thermo 1 -run 20 -Setting up ScaFaCoS with solver direct ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777512 0 272.51604 0.17462195 - 5 286.36222 -4.382053 0 424.73173 0.26918926 - 6 481.42206 -4.3095567 0 717.1014 0.45274088 - 7 488.59167 -3.8685194 0 728.2861 0.45956866 - 8 497.85287 -3.0417966 0 742.99073 0.46838116 - 9 499.61615 -3.419003 0 745.2558 0.46983345 - 10 502.63684 -2.8360961 0 750.36521 0.47280809 - 11 504.4846 -2.7628105 0 753.20736 0.47462793 - 12 506.54485 -2.8460356 0 756.21142 0.47651441 - 13 508.27211 -2.730935 0 758.91482 0.47813752 - 14 510.57045 -2.6094877 0 762.48033 0.48031431 - 15 513.14798 -2.7150827 0 766.23717 0.48275229 - 16 515.78124 -2.3961811 0 770.50201 0.48526333 - 17 515.70265 -2.2982683 0 770.48215 0.48526617 - 18 515.7081 -2.1515983 0 770.63699 0.48530393 - 19 515.74906 -2.0581436 0 770.79182 0.48530977 - 20 515.70883 -1.8922577 0 770.89742 0.48527105 -Loop time of 0.284007 on 2 procs for 20 steps with 1000 atoms - -Performance: 30421.778 tau/day, 70.421 timesteps/s -99.1% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00022578 | 0.00022626 | 0.00022674 | 0.0 | 0.08 -Kspace | 0.18253 | 0.20503 | 0.22752 | 5.0 | 72.19 -Neigh | 0.05363 | 0.076239 | 0.098848 | 8.2 | 26.84 -Comm | 0.0014737 | 0.0016443 | 0.0018148 | 0.4 | 0.58 -Output | 0.000247 | 0.00032353 | 0.00040007 | 0.0 | 0.11 -Modify | 0.00029159 | 0.00029731 | 0.00030303 | 0.0 | 0.10 -Other | | 0.0002506 | | | 0.09 - -Nlocal: 500 ave 516 max 484 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 456.5 ave 475 max 438 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 123908 ave 172139 max 75678 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 247817 -Ave neighs/atom = 247.817 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 deleted file mode 100644 index e72ade73b5..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 +++ /dev/null @@ -1,105 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos direct 0.001 - -timestep 0.005 -thermo 1 -run 20 -Setting up ScaFaCoS with solver direct ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777512 0 272.51604 0.17462195 - 5 286.36222 -4.382053 0 424.73173 0.26918926 - 6 481.42206 -4.3095567 0 717.1014 0.45274088 - 7 488.59167 -3.8685194 0 728.2861 0.45956866 - 8 497.85287 -3.0417966 0 742.99073 0.46838116 - 9 499.61615 -3.419003 0 745.2558 0.46983345 - 10 502.63684 -2.8360961 0 750.36521 0.47280809 - 11 504.4846 -2.7628105 0 753.20736 0.47462793 - 12 506.54485 -2.8460356 0 756.21142 0.47651441 - 13 508.27211 -2.730935 0 758.91482 0.47813752 - 14 510.57045 -2.6094877 0 762.48033 0.48031431 - 15 513.14798 -2.7150827 0 766.23717 0.48275229 - 16 515.78124 -2.3961811 0 770.50201 0.48526333 - 17 515.70265 -2.2982683 0 770.48215 0.48526617 - 18 515.7081 -2.1515983 0 770.63699 0.48530393 - 19 515.74906 -2.0581436 0 770.79182 0.48530977 - 20 515.70883 -1.8922577 0 770.89742 0.48527105 -Loop time of 0.0883947 on 8 procs for 20 steps with 1000 atoms - -Performance: 97743.448 tau/day, 226.258 timesteps/s -99.2% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0002284 | 0.00024167 | 0.00029922 | 0.0 | 0.27 -Kspace | 0.055725 | 0.063153 | 0.071883 | 2.4 | 71.44 -Neigh | 0.012251 | 0.021348 | 0.029026 | 4.3 | 24.15 -Comm | 0.0025573 | 0.0029825 | 0.0034359 | 0.5 | 3.37 -Output | 0.00034451 | 0.00044149 | 0.00057721 | 0.0 | 0.50 -Modify | 7.8917e-05 | 8.437e-05 | 8.9407e-05 | 0.0 | 0.10 -Other | | 0.0001439 | | | 0.16 - -Nlocal: 125 ave 133 max 113 min -Histogram: 2 0 0 0 0 1 1 0 2 2 -Nghost: 773.625 ave 788 max 764 min -Histogram: 1 1 2 1 1 0 0 0 1 1 -Neighs: 30977.1 ave 50690 max 10447 min -Histogram: 1 1 1 0 1 1 0 0 2 1 - -Total # of neighbors = 247817 -Ave neighs/atom = 247.817 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 deleted file mode 100644 index e8e614004d..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 +++ /dev/null @@ -1,109 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos fmm 0.001 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 -thermo 1 - -run 20 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417141 0 1.6235786 0.0015676581 - 1 18.780412 -10.770009 0 17.372438 0.016719188 - 2 65.294131 -11.084501 0 86.758754 0.06035827 - 3 121.92555 -7.0612033 0 175.64423 0.1140457 - 4 185.71165 -5.8781334 0 272.41077 0.17455524 - 5 286.28339 -4.3800108 0 424.61565 0.26911306 - 6 481.28097 -4.3052012 0 716.89433 0.45262045 - 7 487.26022 -3.8672741 0 726.29216 0.45830216 - 8 493.65478 -3.0242687 0 736.71742 0.46443761 - 9 495.66203 -3.4336343 0 739.31592 0.46613014 - 10 498.41831 -2.8837072 0 743.99613 0.46887706 - 11 499.20944 -2.7724783 0 745.29287 0.46966875 - 12 500.97345 -2.8281484 0 747.88057 0.47126462 - 13 507.46412 -2.7752775 0 757.65971 0.47728761 - 14 525.35729 -2.5749814 0 784.67292 0.49422171 - 15 563.9578 -2.9982381 0 842.09253 0.53043696 - 16 645.47602 -2.5519203 0 964.69389 0.60730795 - 17 647.09276 -2.2568468 0 967.41166 0.60891914 - 18 647.12596 -2.2791003 0 967.43915 0.60900309 - 19 647.24862 -2.2495226 0 967.65253 0.60908339 - 20 647.51175 -2.0239179 0 968.27244 0.60932598 -Loop time of 0.701186 on 2 procs for 20 steps with 1000 atoms - -Performance: 12321.981 tau/day, 28.523 timesteps/s -99.7% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00022388 | 0.00022912 | 0.00023437 | 0.0 | 0.03 -Kspace | 0.60189 | 0.62405 | 0.64621 | 2.8 | 89.00 -Neigh | 0.051681 | 0.073973 | 0.096265 | 8.2 | 10.55 -Comm | 0.0016983 | 0.0018919 | 0.0020854 | 0.4 | 0.27 -Output | 0.00034356 | 0.00044572 | 0.00054789 | 0.0 | 0.06 -Modify | 0.00031281 | 0.0003171 | 0.00032139 | 0.0 | 0.05 -Other | | 0.0002786 | | | 0.04 - -Nlocal: 500 ave 509 max 491 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 455.5 ave 467 max 444 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 122171 ave 171834 max 72508 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 244342 -Ave neighs/atom = 244.342 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 deleted file mode 100644 index 22d1140813..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 +++ /dev/null @@ -1,109 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos fmm 0.001 -kspace_modify scafacos tolerance energy_rel -kspace_modify scafacos fmm_tuning 1 -ScaFaCoS setting fmm inhomogen tuning ... - -timestep 0.005 -thermo 1 - -run 20 -Setting up ScaFaCoS with solver fmm ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417141 0 1.6235786 0.0015676581 - 1 18.780412 -10.770009 0 17.372438 0.016719188 - 2 65.294131 -11.084501 0 86.758754 0.06035827 - 3 121.92555 -7.0612033 0 175.64423 0.1140457 - 4 185.71165 -5.8781334 0 272.41077 0.17455524 - 5 286.28339 -4.3800108 0 424.61565 0.26911306 - 6 481.28097 -4.3052012 0 716.89433 0.45262045 - 7 487.26022 -3.8672741 0 726.29216 0.45830216 - 8 493.65478 -3.0242687 0 736.71742 0.46443761 - 9 495.66203 -3.4336343 0 739.31592 0.46613014 - 10 498.41831 -2.8837072 0 743.99613 0.46887706 - 11 499.20944 -2.7724783 0 745.29287 0.46966875 - 12 500.97345 -2.8281484 0 747.88057 0.47126462 - 13 507.46412 -2.7752775 0 757.65971 0.47728761 - 14 525.35729 -2.5749814 0 784.67292 0.49422171 - 15 563.9578 -2.9982381 0 842.09253 0.53043696 - 16 645.47602 -2.5519203 0 964.69389 0.60730795 - 17 647.09276 -2.2568468 0 967.41166 0.60891914 - 18 647.12596 -2.2791003 0 967.43915 0.60900309 - 19 647.24862 -2.2495226 0 967.65253 0.60908339 - 20 647.51175 -2.0239179 0 968.27244 0.60932598 -Loop time of 0.569395 on 8 procs for 20 steps with 1000 atoms - -Performance: 15174.000 tau/day, 35.125 timesteps/s -99.3% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00021982 | 0.00023353 | 0.0002408 | 0.0 | 0.04 -Kspace | 0.53679 | 0.54466 | 0.55292 | 0.8 | 95.66 -Neigh | 0.011844 | 0.02033 | 0.028357 | 4.2 | 3.57 -Comm | 0.0028894 | 0.0031579 | 0.0034704 | 0.4 | 0.55 -Output | 0.0005579 | 0.00067073 | 0.0008719 | 0.0 | 0.12 -Modify | 0.0001018 | 0.00011405 | 0.00012612 | 0.0 | 0.02 -Other | | 0.0002268 | | | 0.04 - -Nlocal: 125 ave 137 max 111 min -Histogram: 1 1 0 0 0 2 2 1 0 1 -Nghost: 768.875 ave 788 max 761 min -Histogram: 4 0 2 0 0 0 1 0 0 1 -Neighs: 30542.8 ave 48077 max 10011 min -Histogram: 1 1 1 0 1 1 0 0 0 3 - -Total # of neighbors = 244342 -Ave neighs/atom = 244.342 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 deleted file mode 100644 index bd7e7fee1f..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 +++ /dev/null @@ -1,107 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance potential - -timestep 0.005 -thermo 1 - -run 20 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777511 0 272.51603 0.17462194 - 5 286.36221 -4.3820531 0 424.73172 0.26918925 - 6 481.42203 -4.3095567 0 717.10136 0.45274086 - 7 488.59165 -3.8685193 0 728.28607 0.45956865 - 8 497.85288 -3.0417938 0 742.99075 0.46838117 - 9 499.61619 -3.4190063 0 745.25585 0.46983349 - 10 502.63691 -2.8360951 0 750.36531 0.47280815 - 11 504.4847 -2.7628089 0 753.20751 0.47462802 - 12 506.54494 -2.8460319 0 756.21157 0.4765145 - 13 508.2722 -2.7309328 0 758.91497 0.47813761 - 14 510.57053 -2.6094792 0 762.48045 0.48031438 - 15 513.14804 -2.7150819 0 766.23726 0.48275234 - 16 515.78127 -2.3961749 0 770.50206 0.48526336 - 17 515.70267 -2.2982581 0 770.48219 0.48526619 - 18 515.70813 -2.1516075 0 770.63702 0.48530395 - 19 515.74908 -2.0581483 0 770.79185 0.48530979 - 20 515.70881 -1.892235 0 770.89742 0.48527104 -Loop time of 0.701267 on 2 procs for 20 steps with 1000 atoms - -Performance: 12320.557 tau/day, 28.520 timesteps/s -99.6% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0002265 | 0.00022769 | 0.00022888 | 0.0 | 0.03 -Kspace | 0.60195 | 0.62374 | 0.64554 | 2.8 | 88.95 -Neigh | 0.05268 | 0.074592 | 0.096504 | 8.0 | 10.64 -Comm | 0.0015199 | 0.0016934 | 0.0018668 | 0.4 | 0.24 -Output | 0.00031519 | 0.00041544 | 0.0005157 | 0.0 | 0.06 -Modify | 0.00029492 | 0.00030565 | 0.00031638 | 0.0 | 0.04 -Other | | 0.000288 | | | 0.04 - -Nlocal: 500 ave 516 max 484 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 456.5 ave 475 max 438 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 123908 ave 172139 max 75678 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 247817 -Ave neighs/atom = 247.817 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 deleted file mode 100644 index 8a7e591f9a..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 +++ /dev/null @@ -1,107 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance potential - -timestep 0.005 -thermo 1 - -run 20 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777511 0 272.51603 0.17462194 - 5 286.36221 -4.3820531 0 424.73172 0.26918925 - 6 481.42203 -4.3095567 0 717.10136 0.45274086 - 7 488.59165 -3.8685193 0 728.28607 0.45956865 - 8 497.85288 -3.0417938 0 742.99075 0.46838117 - 9 499.61619 -3.4190063 0 745.25585 0.46983349 - 10 502.63691 -2.8360951 0 750.36531 0.47280815 - 11 504.4847 -2.7628089 0 753.20751 0.47462802 - 12 506.54494 -2.8460319 0 756.21157 0.4765145 - 13 508.2722 -2.7309328 0 758.91497 0.47813761 - 14 510.57053 -2.6094792 0 762.48045 0.48031438 - 15 513.14804 -2.7150819 0 766.23726 0.48275234 - 16 515.78127 -2.3961749 0 770.50206 0.48526336 - 17 515.70267 -2.2982581 0 770.48219 0.48526619 - 18 515.70813 -2.1516075 0 770.63702 0.48530395 - 19 515.74908 -2.0581483 0 770.79185 0.48530979 - 20 515.70881 -1.892235 0 770.89742 0.48527104 -Loop time of 0.427495 on 4 procs for 20 steps with 1000 atoms - -Performance: 20210.785 tau/day, 46.784 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0002327 | 0.00023341 | 0.00023437 | 0.0 | 0.05 -Kspace | 0.36897 | 0.38411 | 0.39988 | 1.9 | 89.85 -Neigh | 0.023831 | 0.039796 | 0.055124 | 6.1 | 9.31 -Comm | 0.0022776 | 0.0025444 | 0.0028152 | 0.4 | 0.60 -Output | 0.00033784 | 0.0004344 | 0.00057077 | 0.0 | 0.10 -Modify | 0.00016117 | 0.00016713 | 0.00017095 | 0.0 | 0.04 -Other | | 0.0002093 | | | 0.05 - -Nlocal: 250 ave 259 max 238 min -Histogram: 1 0 0 1 0 0 0 0 0 2 -Nghost: 672.25 ave 683 max 663 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 61954.2 ave 97157 max 25016 min -Histogram: 1 0 0 1 0 0 1 0 0 1 - -Total # of neighbors = 247817 -Ave neighs/atom = 247.817 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 deleted file mode 100644 index 13922c09ac..0000000000 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 +++ /dev/null @@ -1,107 +0,0 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -# Point dipoles in a 2d box - -units lj -atom_style charge - -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) - 2 by 2 by 2 MPI processor grid - reading atoms ... - 1000 atoms -change_box all boundary f f f - -velocity all create 1.5 49893 - -neighbor 1.0 bin -neigh_modify delay 0 - -fix 1 all nve - -# LAMMPS computes pairwise and long-range Coulombics - -#pair_style coul/long 3.0 -#pair_coeff * * -#kspace_style pppm 1.0e-3 - -# Scafacos computes entire long-range Coulombics -# use dummy pair style to perform atom sorting - -pair_style zero 1.0 -pair_coeff * * - -#fix 2 all scafacos p3m tolerance field 0.001 - -kspace_style scafacos p2nfft 0.001 -kspace_modify scafacos tolerance potential - -timestep 0.005 -thermo 1 - -run 20 -Setting up ScaFaCoS with solver p2nfft ... -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair zero, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777511 0 272.51603 0.17462194 - 5 286.36221 -4.3820531 0 424.73172 0.26918925 - 6 481.42203 -4.3095567 0 717.10136 0.45274086 - 7 488.59165 -3.8685193 0 728.28607 0.45956865 - 8 497.85288 -3.0417938 0 742.99075 0.46838117 - 9 499.61619 -3.4190063 0 745.25585 0.46983349 - 10 502.63691 -2.8360951 0 750.36531 0.47280815 - 11 504.4847 -2.7628089 0 753.20751 0.47462802 - 12 506.54494 -2.8460319 0 756.21157 0.4765145 - 13 508.2722 -2.7309328 0 758.91497 0.47813761 - 14 510.57053 -2.6094792 0 762.48045 0.48031438 - 15 513.14804 -2.7150819 0 766.23726 0.48275234 - 16 515.78127 -2.3961749 0 770.50206 0.48526336 - 17 515.70267 -2.2982581 0 770.48219 0.48526619 - 18 515.70813 -2.1516075 0 770.63702 0.48530395 - 19 515.74908 -2.0581483 0 770.79185 0.48530979 - 20 515.70881 -1.892235 0 770.89742 0.48527104 -Loop time of 0.242145 on 8 procs for 20 steps with 1000 atoms - -Performance: 35681.038 tau/day, 82.595 timesteps/s -99.2% CPU use with 8 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0002315 | 0.00023672 | 0.00024652 | 0.0 | 0.10 -Kspace | 0.20915 | 0.21666 | 0.22564 | 1.3 | 89.48 -Neigh | 0.012218 | 0.021341 | 0.029026 | 4.3 | 8.81 -Comm | 0.0028954 | 0.0031248 | 0.0033553 | 0.3 | 1.29 -Output | 0.00039291 | 0.00049406 | 0.00066066 | 0.0 | 0.20 -Modify | 8.7976e-05 | 9.2953e-05 | 9.7752e-05 | 0.0 | 0.04 -Other | | 0.0001938 | | | 0.08 - -Nlocal: 125 ave 133 max 113 min -Histogram: 2 0 0 0 0 1 1 0 2 2 -Nghost: 773.625 ave 788 max 764 min -Histogram: 1 1 2 1 1 0 0 0 1 1 -Neighs: 30977.1 ave 50690 max 10447 min -Histogram: 1 1 1 0 1 1 0 0 2 1 - -Total # of neighbors = 247817 -Ave neighs/atom = 247.817 -Neighbor list builds = 19 -Dangerous builds = 18 -Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.1 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.1 new file mode 100644 index 0000000000..e0b10de95e --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.1 @@ -0,0 +1,92 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver ewald ... +WARNING: Virial computation for Ewald not available (src/USER-SCAFACOS/scafacos.cpp:107) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49647271 0 0.49647271 0 0 + 10 300 0.13361073 0.015454603 0.47336798 0.023104631 0.49647261 0 0.0046209262 + 20 300 0.26624846 0.062286838 0.40335451 0.093118823 0.49647334 0 0.018623765 + 30 300 0.39882493 0.14309258 0.2825546 0.21392341 0.49647801 0 0.042784682 + 40 300 0.53216863 0.52823732 0.08958779 0.78971479 0.87930258 0 0.15794296 + 50 300 0.66626191 1.1912156 -0.082808834 1.7808674 1.6980585 0 0.35617347 + 60 300 0.80045819 1.3877079 -0.37658402 2.0746234 1.6980393 0 0.41492467 + 70 300 0.93514919 1.7017671 -0.84569366 2.5441418 1.6984482 0 0.50882837 + 80 300 1.0722892 15.128456 -3.370646 22.617042 19.246396 0 4.5234083 + 90 300 1.2106726 41.994547 -2.2024419 62.781847 60.579406 0 12.556369 + 100 300 1.3514247 41.352114 -0.92449496 61.821411 60.896916 0 12.364282 +Loop time of 1.35144 on 1 procs for 100 steps with 300 atoms + +Performance: 31966.000 tau/day, 73.995 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.718e-05 | 2.718e-05 | 2.718e-05 | 0.0 | 0.00 +Kspace | 1.3486 | 1.3486 | 1.3486 | 0.0 | 99.79 +Neigh | 0.0019956 | 0.0019956 | 0.0019956 | 0.0 | 0.15 +Comm | 0.00027394 | 0.00027394 | 0.00027394 | 0.0 | 0.02 +Output | 0.00013924 | 0.00013924 | 0.00013924 | 0.0 | 0.01 +Modify | 0.00023341 | 0.00023341 | 0.00023341 | 0.0 | 0.02 +Other | | 0.000195 | | | 0.01 + +Nlocal: 300 ave 300 max 300 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 374 ave 374 max 374 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2465 ave 2465 max 2465 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2465 +Ave neighs/atom = 8.21667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.4 new file mode 100644 index 0000000000..f881ed003a --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.ewald.g++.4 @@ -0,0 +1,92 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver ewald ... +WARNING: Virial computation for Ewald not available (src/USER-SCAFACOS/scafacos.cpp:107) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49647271 0 0.49647271 0 0 + 10 300 0.04107213 0.015454603 0.47336798 0.023104631 0.49647261 0 0.0046209262 + 20 300 0.083310604 0.062286838 0.40335451 0.093118823 0.49647334 0 0.018623765 + 30 300 0.12387085 0.14309258 0.2825546 0.21392341 0.49647801 0 0.042784682 + 40 300 0.1672492 0.52823732 0.08958779 0.78971479 0.87930258 0 0.15794296 + 50 300 0.21049809 1.1912156 -0.082808834 1.7808674 1.6980585 0 0.35617347 + 60 300 0.25216699 1.3877079 -0.37658402 2.0746234 1.6980393 0 0.41492467 + 70 300 0.29355645 1.7017671 -0.84569366 2.5441418 1.6984482 0 0.50882837 + 80 300 0.33713698 15.128456 -3.370646 22.617042 19.246396 0 4.5234083 + 90 300 0.38109112 41.994547 -2.2024419 62.781847 60.579406 0 12.556369 + 100 300 0.4267664 41.352114 -0.92449496 61.821411 60.896916 0 12.364282 +Loop time of 0.426857 on 4 procs for 100 steps with 300 atoms + +Performance: 101204.784 tau/day, 234.270 timesteps/s +97.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.6689e-05 | 1.8835e-05 | 2.2173e-05 | 0.0 | 0.00 +Kspace | 0.42368 | 0.42384 | 0.42405 | 0.0 | 99.29 +Neigh | 0.00040579 | 0.00056726 | 0.00075126 | 0.0 | 0.13 +Comm | 0.0010395 | 0.0010909 | 0.001189 | 0.2 | 0.26 +Output | 0.00015545 | 0.00034326 | 0.00090313 | 0.0 | 0.08 +Modify | 9.8705e-05 | 0.00010544 | 0.00011539 | 0.0 | 0.02 +Other | | 0.0008868 | | | 0.21 + +Nlocal: 75 ave 81 max 70 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 282.5 ave 290 max 274 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Neighs: 616.25 ave 983 max 283 min +Histogram: 1 1 0 0 0 0 0 1 0 1 + +Total # of neighbors = 2465 +Ave neighs/atom = 8.21667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.1 similarity index 51% rename from examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.1 index 714ce85a5f..da0c698187 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units lj atom_style charge @@ -59,41 +58,41 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 - 10 300 0.063865185 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 - 20 300 0.12760854 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 - 30 300 0.19143319 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 - 40 300 0.25553131 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 - 50 300 0.31961966 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 - 60 300 0.38388991 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 - 70 300 0.44797421 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 - 80 300 0.50961447 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 - 90 300 0.57181501 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 - 100 300 0.63501096 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 -Loop time of 0.635022 on 1 procs for 100 steps with 300 atoms + 10 300 0.025602102 0.015455672 0.47336221 0.023106229 0.49646844 0 0.020399986 + 20 300 0.051156282 0.062291145 0.40334518 0.093125262 0.49647044 0 0.032069892 + 30 300 0.076699495 0.14310262 0.28254543 0.21393842 0.49648385 0 0.052205865 + 40 300 0.10232902 0.52932294 0.089676201 0.79133779 0.88101399 0 0.16125676 + 50 300 0.12800455 1.1962334 -0.082794531 1.788369 1.7055744 0 0.35491397 + 60 300 0.1537931 1.3927481 -0.37659486 2.0821585 1.7055636 0 0.40387853 + 70 300 0.17947531 1.7068337 -0.84572368 2.5517165 1.7059928 0 0.4821525 + 80 300 0.20517826 15.509932 -3.369527 23.187348 19.817821 0 4.5251521 + 90 300 0.23049045 42.26862 -2.0785273 63.191586 61.113059 0 12.569033 + 100 300 0.25625205 41.459415 -0.88546313 61.981825 61.096362 0 12.36685 +Loop time of 0.256263 on 1 procs for 100 steps with 300 atoms -Performance: 68029.122 tau/day, 157.475 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 168576.488 tau/day, 390.223 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 9.0837e-05 | 9.0837e-05 | 9.0837e-05 | 0.0 | 0.01 -Kspace | 0.62877 | 0.62877 | 0.62877 | 0.0 | 99.01 -Neigh | 0.0035319 | 0.0035319 | 0.0035319 | 0.0 | 0.56 -Comm | 0.0010211 | 0.0010211 | 0.0010211 | 0.0 | 0.16 -Output | 0.00014758 | 0.00014758 | 0.00014758 | 0.0 | 0.02 -Modify | 0.0010428 | 0.0010428 | 0.0010428 | 0.0 | 0.16 -Other | | 0.0004218 | | | 0.07 +Pair | 2.7895e-05 | 2.7895e-05 | 2.7895e-05 | 0.0 | 0.01 +Kspace | 0.25335 | 0.25335 | 0.25335 | 0.0 | 98.86 +Neigh | 0.0020251 | 0.0020251 | 0.0020251 | 0.0 | 0.79 +Comm | 0.00027776 | 0.00027776 | 0.00027776 | 0.0 | 0.11 +Output | 0.00014305 | 0.00014305 | 0.00014305 | 0.0 | 0.06 +Modify | 0.0002346 | 0.0002346 | 0.0002346 | 0.0 | 0.09 +Other | | 0.0002046 | | | 0.08 Nlocal: 300 ave 300 max 300 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 374 ave 374 max 374 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2459 ave 2459 max 2459 min +Neighs: 2461 ave 2461 max 2461 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 2459 -Ave neighs/atom = 8.19667 +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 Neighbor list builds = 15 Dangerous builds = 0 Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.4 new file mode 100644 index 0000000000..30fa988863 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.fmm.g++.4 @@ -0,0 +1,98 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.01548481 0.015455672 0.47336221 0.023106229 0.49646844 0 0.020399986 + 20 300 0.031042576 0.062291145 0.40334518 0.093125262 0.49647044 0 0.032069892 + 30 300 0.044115782 0.14310262 0.28254543 0.21393842 0.49648385 0 0.052205865 + 40 300 0.059348583 0.52932294 0.089676201 0.79133779 0.88101399 0 0.16125676 + 50 300 0.071757555 1.1962334 -0.082794531 1.788369 1.7055744 0 0.35491397 + 60 300 0.088143587 1.3927481 -0.37659486 2.0821585 1.7055636 0 0.40387853 + 70 300 0.099860907 1.7068337 -0.84572368 2.5517165 1.7059928 0 0.4821525 + 80 300 0.11159992 15.509932 -3.369527 23.187348 19.817821 0 4.5251521 + 90 300 0.12841201 42.26862 -2.0785273 63.191586 61.113059 0 12.569033 + 100 300 0.14122367 41.459415 -0.88546313 61.981825 61.096362 0 12.36685 +Loop time of 0.141343 on 4 procs for 100 steps with 300 atoms + +Performance: 305639.349 tau/day, 707.498 timesteps/s +94.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5988e-05 | 2.9087e-05 | 3.2663e-05 | 0.0 | 0.02 +Kspace | 0.13587 | 0.13743 | 0.13808 | 0.2 | 97.23 +Neigh | 0.00041199 | 0.00057679 | 0.00076771 | 0.0 | 0.41 +Comm | 0.001039 | 0.0015332 | 0.0029936 | 2.2 | 1.08 +Output | 0.00017786 | 0.00044322 | 0.0012352 | 0.0 | 0.31 +Modify | 0.00017333 | 0.00018805 | 0.00020623 | 0.0 | 0.13 +Other | | 0.001146 | | | 0.81 + +Nlocal: 75 ave 80 max 71 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 282.5 ave 290 max 275 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 615.25 ave 970 max 292 min +Histogram: 1 1 0 0 0 0 0 1 0 1 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.1 similarity index 64% rename from examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.1 index f47f24edee..10c2fa166b 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units lj @@ -52,31 +51,31 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 - 10 300 0.071435928 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 - 20 300 0.14302707 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 - 30 300 0.21480989 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 - 40 300 0.28638172 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 - 50 300 0.35810781 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 - 60 300 0.42993116 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 - 70 300 0.50181961 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 - 80 300 0.57404566 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 - 90 300 0.64724708 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 - 100 300 0.72128963 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 -Loop time of 0.721302 on 1 procs for 100 steps with 300 atoms + 10 300 0.028267145 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.056742668 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.085426331 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.11415625 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.14363861 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.17313194 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.20299363 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.23256087 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.26286936 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.29372239 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.293738 on 1 procs for 100 steps with 300 atoms -Performance: 59891.733 tau/day, 138.638 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 147070.013 tau/day, 340.440 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 8.893e-05 | 8.893e-05 | 8.893e-05 | 0.0 | 0.01 -Kspace | 0.71502 | 0.71502 | 0.71502 | 0.0 | 99.13 -Neigh | 0.0035415 | 0.0035415 | 0.0035415 | 0.0 | 0.49 -Comm | 0.001024 | 0.001024 | 0.001024 | 0.0 | 0.14 -Output | 0.00015044 | 0.00015044 | 0.00015044 | 0.0 | 0.02 -Modify | 0.0010409 | 0.0010409 | 0.0010409 | 0.0 | 0.14 -Other | | 0.0004385 | | | 0.06 +Pair | 4.3869e-05 | 4.3869e-05 | 4.3869e-05 | 0.0 | 0.01 +Kspace | 0.29081 | 0.29081 | 0.29081 | 0.0 | 99.00 +Neigh | 0.0019989 | 0.0019989 | 0.0019989 | 0.0 | 0.68 +Comm | 0.0003159 | 0.0003159 | 0.0003159 | 0.0 | 0.11 +Output | 0.00016809 | 0.00016809 | 0.00016809 | 0.0 | 0.06 +Modify | 0.00021863 | 0.00021863 | 0.00021863 | 0.0 | 0.07 +Other | | 0.0001831 | | | 0.06 Nlocal: 300 ave 300 max 300 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.4 similarity index 64% rename from examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.4 index d5a07e0324..aa828ed159 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p2nfft.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units lj @@ -52,31 +51,31 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 - 10 300 0.02743125 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 - 20 300 0.05494833 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 - 30 300 0.082517862 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 - 40 300 0.11015558 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 - 50 300 0.13790298 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 - 60 300 0.1660006 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 - 70 300 0.1937964 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 - 80 300 0.22181106 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 - 90 300 0.25105524 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 - 100 300 0.28086019 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 -Loop time of 0.280875 on 4 procs for 100 steps with 300 atoms + 10 300 0.013789177 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.025422812 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.039611578 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.051841736 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.07456398 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.087505341 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.10280418 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.1173315 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.13260174 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.14577007 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.145873 on 4 procs for 100 steps with 300 atoms -Performance: 153805.254 tau/day, 356.031 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 296148.120 tau/day, 685.528 timesteps/s +92.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.6744e-05 | 6.0022e-05 | 6.4135e-05 | 0.0 | 0.02 -Kspace | 0.27651 | 0.27682 | 0.27714 | 0.0 | 98.56 -Neigh | 0.00079465 | 0.001082 | 0.0014107 | 0.8 | 0.39 -Comm | 0.0019372 | 0.002014 | 0.0020835 | 0.1 | 0.72 -Output | 0.00018406 | 0.00019914 | 0.00023413 | 0.0 | 0.07 -Modify | 0.0002749 | 0.00028563 | 0.00029325 | 0.0 | 0.10 -Other | | 0.0004173 | | | 0.15 +Pair | 2.3842e-05 | 2.5034e-05 | 2.7657e-05 | 0.0 | 0.02 +Kspace | 0.14221 | 0.14239 | 0.14264 | 0.0 | 97.61 +Neigh | 0.00041676 | 0.0005784 | 0.00076866 | 0.0 | 0.40 +Comm | 0.0013564 | 0.0014941 | 0.0016375 | 0.3 | 1.02 +Output | 0.00017166 | 0.00033867 | 0.00083518 | 0.0 | 0.23 +Modify | 0.00012016 | 0.00012261 | 0.0001266 | 0.0 | 0.08 +Other | | 0.0009243 | | | 0.63 Nlocal: 75 ave 81 max 69 min Histogram: 1 0 0 0 1 1 0 0 0 1 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.1 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.1 new file mode 100644 index 0000000000..9410529284 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.1 @@ -0,0 +1,92 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49619864 0 0.49619864 0 0 + 10 300 0.018853664 0.015458704 0.47310664 0.023110763 0.4962174 0 0.0046221526 + 20 300 0.037713289 0.062303961 0.40312435 0.093144421 0.49626877 0 0.018628884 + 30 300 0.055995226 0.14313464 0.28239193 0.21398628 0.49637821 0 0.042797257 + 40 300 0.074442625 0.53306643 0.089950137 0.79693431 0.88688444 0 0.15938686 + 50 300 0.093066454 1.1925037 -0.08272797 1.7827931 1.7000651 0 0.35655861 + 60 300 0.11158967 1.3890617 -0.37645444 2.0766472 1.7001927 0 0.41532944 + 70 300 0.1300416 1.7033725 -0.84587122 2.5465418 1.7006706 0 0.50930837 + 80 300 0.14844203 15.906218 -3.3586154 23.779796 20.421181 0 4.7559592 + 90 300 0.1676445 42.749883 -2.2769116 63.911076 61.634164 0 12.782215 + 100 300 0.1866703 42.25523 -0.84978755 63.171569 62.321782 0 12.634314 +Loop time of 0.186683 on 1 procs for 100 steps with 300 atoms + +Performance: 231408.103 tau/day, 535.667 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.7657e-05 | 2.7657e-05 | 2.7657e-05 | 0.0 | 0.01 +Kspace | 0.18368 | 0.18368 | 0.18368 | 0.0 | 98.39 +Neigh | 0.0020967 | 0.0020967 | 0.0020967 | 0.0 | 1.12 +Comm | 0.00027132 | 0.00027132 | 0.00027132 | 0.0 | 0.15 +Output | 0.00013709 | 0.00013709 | 0.00013709 | 0.0 | 0.07 +Modify | 0.0002718 | 0.0002718 | 0.0002718 | 0.0 | 0.15 +Other | | 0.0001974 | | | 0.11 + +Nlocal: 300 ave 300 max 300 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 374 ave 374 max 374 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2478 ave 2478 max 2478 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2478 +Ave neighs/atom = 8.26 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.4 new file mode 100644 index 0000000000..2dc5c07b2b --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.cw.p3m.g++.4 @@ -0,0 +1,92 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49601855 0 0.49601855 0 0 + 10 300 0.0080001354 0.015443077 0.47292202 0.0230874 0.49600942 0 0.00461748 + 20 300 0.018443823 0.062241297 0.40294626 0.093050739 0.495997 0 0.018610148 + 30 300 0.029161692 0.14299426 0.28226416 0.21377642 0.49604058 0 0.042755283 + 40 300 0.037320137 0.53371718 0.089969593 0.79790718 0.88787677 0 0.15958144 + 50 300 0.045557499 1.195874 -0.082570725 1.7878316 1.7052608 0 0.35756631 + 60 300 0.054044962 1.3923357 -0.37594466 2.0815419 1.7055972 0 0.41630838 + 70 300 0.064656734 1.7063617 -0.84481819 2.5510108 1.7061926 0 0.51020216 + 80 300 0.073246241 13.884845 -3.3804644 20.757843 17.377379 0 4.1515687 + 90 300 0.081598997 40.561354 -2.1801816 60.639224 58.459042 0 12.127845 + 100 300 0.092384577 39.972453 -0.95590215 59.758818 58.802916 0 11.951764 +Loop time of 0.0924569 on 4 procs for 100 steps with 300 atoms + +Performance: 467244.853 tau/day, 1081.585 timesteps/s +96.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.812e-05 | 1.955e-05 | 2.1935e-05 | 0.0 | 0.02 +Kspace | 0.087202 | 0.087385 | 0.087595 | 0.1 | 94.51 +Neigh | 0.00039053 | 0.00056016 | 0.00074887 | 0.0 | 0.61 +Comm | 0.00095391 | 0.001252 | 0.001538 | 0.6 | 1.35 +Output | 0.00015235 | 0.00026172 | 0.00058818 | 0.0 | 0.28 +Modify | 9.7275e-05 | 0.00010461 | 0.00011683 | 0.0 | 0.11 +Other | | 0.002874 | | | 3.11 + +Nlocal: 75 ave 81 max 70 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 284 ave 290 max 277 min +Histogram: 1 0 0 1 0 0 0 1 0 1 +Neighs: 619.25 ave 986 max 285 min +Histogram: 1 1 0 0 0 0 0 1 0 1 + +Total # of neighbors = 2477 +Ave neighs/atom = 8.25667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 b/examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.1 similarity index 79% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.1 index 13212ede0c..e6cd7c506f 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 1 by 1 MPI processor grid 4096 atoms - Time spent = 0.000498772 secs + Time spent = 0.000287294 secs velocity all create 1.5 49893 @@ -47,6 +46,7 @@ thermo 10 run 100 Setting up ScaFaCoS with solver ewald ... +WARNING: Virial computation for Ewald not available (src/USER-SCAFACOS/scafacos.cpp:107) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -72,21 +72,21 @@ Step Temp E_pair E_mol TotEng Press 80 1.5033218 -1.7524875 0 0.50194458 12.023638 90 1.5108306 -1.7637462 0 0.50194636 12.083694 100 1.5292479 -1.7913449 0 0.50196695 12.230996 -Loop time of 1121.22 on 1 procs for 100 steps with 4096 atoms +Loop time of 427.03 on 1 procs for 100 steps with 4096 atoms -Performance: 38.530 tau/day, 0.089 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 101.164 tau/day, 0.234 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0015197 | 0.0015197 | 0.0015197 | 0.0 | 0.00 -Kspace | 1121.2 | 1121.2 | 1121.2 | 0.0 |100.00 +Pair | 0.0003655 | 0.0003655 | 0.0003655 | 0.0 | 0.00 +Kspace | 427.02 | 427.02 | 427.02 | 0.0 |100.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013699 | 0.013699 | 0.013699 | 0.0 | 0.00 -Output | 0.00038314 | 0.00038314 | 0.00038314 | 0.0 | 0.00 -Modify | 0.011126 | 0.011126 | 0.011126 | 0.0 | 0.00 -Other | | 0.00418 | | | 0.00 +Comm | 0.0047293 | 0.0047293 | 0.0047293 | 0.0 | 0.00 +Output | 0.00025916 | 0.00025916 | 0.00025916 | 0.0 | 0.00 +Modify | 0.0029993 | 0.0029993 | 0.0029993 | 0.0 | 0.00 +Other | | 0.00181 | | | 0.00 Nlocal: 4096 ave 4096 max 4096 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -99,4 +99,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:18:57 +Total wall time: 0:07:10 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 b/examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.4 similarity index 76% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.4 index 26c1953afa..39e0387491 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.ewald.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 2 by 2 MPI processor grid 4096 atoms - Time spent = 0.000261068 secs + Time spent = 0.000125408 secs velocity all create 1.5 49893 @@ -47,6 +46,7 @@ thermo 10 run 100 Setting up ScaFaCoS with solver ewald ... +WARNING: Virial computation for Ewald not available (src/USER-SCAFACOS/scafacos.cpp:107) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -61,32 +61,32 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -1.7475938 0 0.50185691 -nan - 10 1.500011 -1.747529 0 0.50193816 -nan - 20 1.5000023 -1.7475152 0 0.50193898 -nan - 30 1.4999308 -1.747404 0 0.50194285 -nan - 40 1.4997722 -1.7471622 0 0.50194686 -nan - 50 1.4995835 -1.746878 0 0.50194808 -nan - 60 1.4996054 -1.7469114 0 0.50194749 -nan - 70 1.5004341 -1.7481558 0 0.50194592 -nan - 80 1.5033218 -1.7524875 0 0.50194458 -nan - 90 1.5108306 -1.7637462 0 0.50194636 -nan - 100 1.5292479 -1.7913449 0 0.50196695 -nan -Loop time of 295.996 on 4 procs for 100 steps with 4096 atoms + 0 1.5 -1.7475938 0 0.50185691 11.99707 + 10 1.500011 -1.747529 0 0.50193816 11.997158 + 20 1.5000023 -1.7475152 0 0.50193898 11.997089 + 30 1.4999308 -1.747404 0 0.50194285 11.996517 + 40 1.4997722 -1.7471622 0 0.50194686 11.995248 + 50 1.4995835 -1.746878 0 0.50194808 11.993739 + 60 1.4996054 -1.7469114 0 0.50194749 11.993914 + 70 1.5004341 -1.7481558 0 0.50194592 12.000543 + 80 1.5033218 -1.7524875 0 0.50194458 12.023638 + 90 1.5108306 -1.7637462 0 0.50194636 12.083694 + 100 1.5292479 -1.7913449 0 0.50196695 12.230996 +Loop time of 113.519 on 4 procs for 100 steps with 4096 atoms -Performance: 145.948 tau/day, 0.338 timesteps/s -99.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 380.555 tau/day, 0.881 timesteps/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00071096 | 0.00071985 | 0.00072813 | 0.0 | 0.00 -Kspace | 295.98 | 295.98 | 295.98 | 0.0 | 99.99 +Pair | 0.00022793 | 0.00023127 | 0.00023508 | 0.0 | 0.00 +Kspace | 113.51 | 113.51 | 113.51 | 0.0 | 99.99 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013666 | 0.013736 | 0.013795 | 0.0 | 0.00 -Output | 0.00023484 | 0.00025135 | 0.00029254 | 0.0 | 0.00 -Modify | 0.0029099 | 0.002973 | 0.0030224 | 0.1 | 0.00 -Other | | 0.001821 | | | 0.00 +Comm | 0.0084581 | 0.0085486 | 0.0086188 | 0.1 | 0.01 +Output | 0.00019598 | 0.00046694 | 0.0012727 | 0.0 | 0.00 +Modify | 0.0016849 | 0.0017331 | 0.0017881 | 0.1 | 0.00 +Other | | 0.002307 | | | 0.00 Nlocal: 1024 ave 1024 max 1024 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -99,4 +99,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:05:02 +Total wall time: 0:01:54 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 b/examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.1 similarity index 79% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.1 index 598585ae95..b9ae654659 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 1 by 1 MPI processor grid 4096 atoms - Time spent = 0.000518799 secs + Time spent = 0.000326395 secs velocity all create 1.5 49893 @@ -72,21 +71,21 @@ Step Temp E_pair E_mol TotEng Press 80 1.5032684 -1.7524625 0 0.50188958 10.465466 90 1.5107749 -1.763714 0 0.50189507 10.515502 100 1.52919 -1.791306 0 0.50191895 10.638261 -Loop time of 34.7058 on 1 procs for 100 steps with 4096 atoms +Loop time of 9.55733 on 1 procs for 100 steps with 4096 atoms -Performance: 1244.749 tau/day, 2.881 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 4520.093 tau/day, 10.463 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0015228 | 0.0015228 | 0.0015228 | 0.0 | 0.00 -Kspace | 34.675 | 34.675 | 34.675 | 0.0 | 99.91 +Pair | 0.0003767 | 0.0003767 | 0.0003767 | 0.0 | 0.00 +Kspace | 9.5472 | 9.5472 | 9.5472 | 0.0 | 99.89 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013741 | 0.013741 | 0.013741 | 0.0 | 0.04 -Output | 0.00041246 | 0.00041246 | 0.00041246 | 0.0 | 0.00 -Modify | 0.01107 | 0.01107 | 0.01107 | 0.0 | 0.03 -Other | | 0.004232 | | | 0.01 +Comm | 0.0047688 | 0.0047688 | 0.0047688 | 0.0 | 0.05 +Output | 0.00027132 | 0.00027132 | 0.00027132 | 0.0 | 0.00 +Modify | 0.0029824 | 0.0029824 | 0.0029824 | 0.0 | 0.03 +Other | | 0.001692 | | | 0.02 Nlocal: 4096 ave 4096 max 4096 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -99,4 +98,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:35 +Total wall time: 0:00:10 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 b/examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.4 similarity index 79% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.4 index 27fdfcedcb..7ee8d3d068 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.fmm.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 2 by 2 MPI processor grid 4096 atoms - Time spent = 0.000270367 secs + Time spent = 0.00015521 secs velocity all create 1.5 49893 @@ -72,21 +71,21 @@ Step Temp E_pair E_mol TotEng Press 80 1.5032684 -1.7524625 0 0.50188958 10.465466 90 1.5107749 -1.763714 0 0.50189507 10.515502 100 1.52919 -1.791306 0 0.50191895 10.638261 -Loop time of 10.0781 on 4 procs for 100 steps with 4096 atoms +Loop time of 3.05974 on 4 procs for 100 steps with 4096 atoms -Performance: 4286.533 tau/day, 9.923 timesteps/s -99.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 14118.863 tau/day, 32.683 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00071096 | 0.00073177 | 0.00075269 | 0.0 | 0.01 -Kspace | 10.056 | 10.057 | 10.057 | 0.0 | 99.79 +Pair | 0.00021482 | 0.0002175 | 0.00022054 | 0.0 | 0.01 +Kspace | 3.0468 | 3.0468 | 3.0468 | 0.0 | 99.58 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.01492 | 0.015036 | 0.015207 | 0.1 | 0.15 -Output | 0.00036311 | 0.00039428 | 0.00046515 | 0.0 | 0.00 -Modify | 0.002944 | 0.0030704 | 0.0033708 | 0.3 | 0.03 -Other | | 0.002214 | | | 0.02 +Comm | 0.0081758 | 0.0082486 | 0.0083146 | 0.1 | 0.27 +Output | 0.00019073 | 0.00049388 | 0.0013943 | 0.0 | 0.02 +Modify | 0.001507 | 0.0015851 | 0.0017498 | 0.2 | 0.05 +Other | | 0.002385 | | | 0.08 Nlocal: 1024 ave 1024 max 1024 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -99,4 +98,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:11 +Total wall time: 0:00:04 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.g++.1 b/examples/USER/scafacos/log.27Nov18.scafacos.g++.1 new file mode 100644 index 0000000000..6b36f0ba91 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.g++.1 @@ -0,0 +1,102 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 1 MPI processor grid + 4096 atoms + Time spent = 0.000253677 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +#kspace_style scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.813 | 5.813 | 5.813 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475752 0 0.5018755 11.99707 + 10 1.5000018 -1.7475779 0 0.50187548 11.997085 + 20 1.4999833 -1.7475525 0 0.5018731 11.996936 + 30 1.4999006 -1.7474414 0 0.5018603 11.996276 + 40 1.49973 -1.7471989 0 0.50184695 11.994911 + 50 1.4995292 -1.7469064 0 0.50183822 11.993305 + 60 1.49954 -1.7469273 0 0.50183355 11.993391 + 70 1.5003599 -1.7481583 0 0.50183215 11.999949 + 80 1.5032409 -1.752478 0 0.50183276 12.022991 + 90 1.5107445 -1.7637257 0 0.50183781 12.083005 + 100 1.5291568 -1.7913136 0 0.50186158 12.230268 +Loop time of 2.98552 on 1 procs for 100 steps with 4096 atoms + +Performance: 14469.821 tau/day, 33.495 timesteps/s +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0003686 | 0.0003686 | 0.0003686 | 0.0 | 0.01 +Kspace | 2.9749 | 2.9749 | 2.9749 | 0.0 | 99.65 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0049963 | 0.0049963 | 0.0049963 | 0.0 | 0.17 +Output | 0.00027728 | 0.00027728 | 0.00027728 | 0.0 | 0.01 +Modify | 0.0031269 | 0.0031269 | 0.0031269 | 0.0 | 0.10 +Other | | 0.001828 | | | 0.06 + +Nlocal: 4096 ave 4096 max 4096 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9728 ave 9728 max 9728 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 524288 ave 524288 max 524288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.g++.4 new file mode 100644 index 0000000000..23f55fc5a6 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.g++.4 @@ -0,0 +1,102 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.00012064 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +#kspace_style scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475814 0 0.50186926 11.99707 + 10 1.5000019 -1.7475841 0 0.50186935 11.997085 + 20 1.4999837 -1.747556 0 0.50187017 11.99694 + 30 1.4999022 -1.7474323 0 0.50187181 11.996288 + 40 1.4997327 -1.7471824 0 0.50186744 11.994932 + 50 1.4995318 -1.7468908 0 0.50185778 11.993326 + 60 1.499542 -1.7469166 0 0.5018472 11.993407 + 70 1.5003608 -1.7481509 0 0.50184084 11.999956 + 80 1.5032406 -1.7524717 0 0.5018387 12.022989 + 90 1.5107432 -1.7637208 0 0.5018408 12.082995 + 100 1.5291549 -1.7913103 0 0.50186206 12.230252 +Loop time of 1.04979 on 4 procs for 100 steps with 4096 atoms + +Performance: 41150.904 tau/day, 95.257 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00021386 | 0.00022691 | 0.00023532 | 0.0 | 0.02 +Kspace | 1.0351 | 1.0353 | 1.0354 | 0.0 | 98.61 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0092776 | 0.0094286 | 0.0095558 | 0.1 | 0.90 +Output | 0.00019121 | 0.00050998 | 0.0014408 | 0.0 | 0.05 +Modify | 0.0019102 | 0.0019451 | 0.0019991 | 0.1 | 0.19 +Other | | 0.002431 | | | 0.23 + +Nlocal: 1024 ave 1024 max 1024 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5120 ave 5120 max 5120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 131072 ave 131072 max 131072 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.1 similarity index 69% rename from examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.1 index b0a47e4f98..2d3ca0d588 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.1 @@ -1,13 +1,12 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj atom_style charge -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) 1 by 1 by 1 MPI processor grid reading atoms ... 1000 atoms @@ -45,51 +44,51 @@ Neighbor list info ... max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2 ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 + binsize = 1, bins = 103 103 103 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair zero, perpetual attributes: half, newton on pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.44 | 10.44 | 10.44 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777512 0 272.51604 0.17462195 - 5 286.36222 -4.382053 0 424.73173 0.26918926 - 6 481.42206 -4.3095567 0 717.1014 0.45274088 - 7 488.59167 -3.8685194 0 728.2861 0.45956866 - 8 497.85287 -3.0417966 0 742.99073 0.46838116 - 9 499.61615 -3.419003 0 745.2558 0.46983345 - 10 502.63684 -2.8360961 0 750.36521 0.47280809 - 11 504.4846 -2.7628105 0 753.20736 0.47462793 - 12 506.54485 -2.8460356 0 756.21142 0.47651441 - 13 508.27211 -2.730935 0 758.91482 0.47813752 - 14 510.57045 -2.6094877 0 762.48033 0.48031431 - 15 513.14798 -2.7150827 0 766.23717 0.48275229 - 16 515.78124 -2.3961811 0 770.50201 0.48526333 - 17 515.70265 -2.2982683 0 770.48215 0.48526617 - 18 515.7081 -2.1515983 0 770.63699 0.48530393 - 19 515.74906 -2.0581436 0 770.79182 0.48530977 - 20 515.70883 -1.8922577 0 770.89742 0.48527105 -Loop time of 0.465839 on 1 procs for 20 steps with 1000 atoms + 0 1.5 -0.62417787 0 1.6235721 0.0015226607 + 1 18.780041 -10.770002 0 17.371889 0.01623671 + 2 65.289192 -11.084705 0 86.751149 0.058612772 + 3 121.92987 -7.0625759 0 175.64933 0.11076005 + 4 185.78164 -5.8777512 0 272.51604 0.16958509 + 5 286.36222 -4.382053 0 424.73173 0.26142467 + 6 481.42206 -4.3095567 0 717.1014 0.43968187 + 7 488.59167 -3.8685194 0 728.2861 0.4463127 + 8 497.85287 -3.0417966 0 742.99073 0.45487101 + 9 499.61615 -3.419003 0 745.2558 0.45628141 + 10 502.63684 -2.8360961 0 750.36521 0.45917024 + 11 504.4846 -2.7628105 0 753.20736 0.46093759 + 12 506.54485 -2.8460356 0 756.21142 0.46276966 + 13 508.27211 -2.730935 0 758.91482 0.46434596 + 14 510.57045 -2.6094877 0 762.48033 0.46645996 + 15 513.14798 -2.7150827 0 766.23717 0.46882762 + 16 515.78124 -2.3961811 0 770.50201 0.47126623 + 17 515.70265 -2.2982683 0 770.48215 0.47126898 + 18 515.7081 -2.1515983 0 770.63699 0.47130565 + 19 515.74906 -2.0581436 0 770.79182 0.47131132 + 20 515.70883 -1.8922577 0 770.89742 0.47127372 +Loop time of 0.139386 on 1 procs for 20 steps with 1000 atoms -Performance: 18547.165 tau/day, 42.933 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 61985.954 tau/day, 143.486 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00021982 | 0.00021982 | 0.00021982 | 0.0 | 0.05 -Kspace | 0.3218 | 0.3218 | 0.3218 | 0.0 | 69.08 -Neigh | 0.14249 | 0.14249 | 0.14249 | 0.0 | 30.59 -Comm | 0.00014853 | 0.00014853 | 0.00014853 | 0.0 | 0.03 -Output | 0.00026131 | 0.00026131 | 0.00026131 | 0.0 | 0.06 -Modify | 0.00055146 | 0.00055146 | 0.00055146 | 0.0 | 0.12 -Other | | 0.0003715 | | | 0.08 +Pair | 5.4359e-05 | 5.4359e-05 | 5.4359e-05 | 0.0 | 0.04 +Kspace | 0.1018 | 0.1018 | 0.1018 | 0.0 | 73.03 +Neigh | 0.037074 | 0.037074 | 0.037074 | 0.0 | 26.60 +Comm | 4.6492e-05 | 4.6492e-05 | 4.6492e-05 | 0.0 | 0.03 +Output | 0.00016332 | 0.00016332 | 0.00016332 | 0.0 | 0.12 +Modify | 0.000139 | 0.000139 | 0.000139 | 0.0 | 0.10 +Other | | 0.0001132 | | | 0.08 Nlocal: 1000 ave 1000 max 1000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.4 similarity index 64% rename from examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.4 index 1235c0a3cd..085958d351 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.direct.g++.4 @@ -1,13 +1,12 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj atom_style charge -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) 1 by 2 by 2 MPI processor grid reading atoms ... 1000 atoms @@ -45,58 +44,58 @@ Neighbor list info ... max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2 ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 + binsize = 1, bins = 103 103 103 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair zero, perpetual attributes: half, newton on pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.882 | 5.463 | 7.161 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777512 0 272.51604 0.17462195 - 5 286.36222 -4.382053 0 424.73173 0.26918926 - 6 481.42206 -4.3095567 0 717.1014 0.45274088 - 7 488.59167 -3.8685194 0 728.2861 0.45956866 - 8 497.85287 -3.0417966 0 742.99073 0.46838116 - 9 499.61615 -3.419003 0 745.2558 0.46983345 - 10 502.63684 -2.8360961 0 750.36521 0.47280809 - 11 504.4846 -2.7628105 0 753.20736 0.47462793 - 12 506.54485 -2.8460356 0 756.21142 0.47651441 - 13 508.27211 -2.730935 0 758.91482 0.47813752 - 14 510.57045 -2.6094877 0 762.48033 0.48031431 - 15 513.14798 -2.7150827 0 766.23717 0.48275229 - 16 515.78124 -2.3961811 0 770.50201 0.48526333 - 17 515.70265 -2.2982683 0 770.48215 0.48526617 - 18 515.7081 -2.1515983 0 770.63699 0.48530393 - 19 515.74906 -2.0581436 0 770.79182 0.48530977 - 20 515.70883 -1.8922577 0 770.89742 0.48527105 -Loop time of 0.161335 on 4 procs for 20 steps with 1000 atoms + 0 1.5 -0.62417787 0 1.6235721 0.0015226607 + 1 18.780041 -10.770002 0 17.371889 0.01623671 + 2 65.289192 -11.084705 0 86.751149 0.058612772 + 3 121.92987 -7.0625759 0 175.64933 0.11076005 + 4 185.78164 -5.8777512 0 272.51604 0.16958509 + 5 286.36222 -4.382053 0 424.73173 0.26142467 + 6 481.42206 -4.3095567 0 717.1014 0.43968187 + 7 488.59167 -3.8685194 0 728.2861 0.4463127 + 8 497.85287 -3.0417966 0 742.99073 0.45487101 + 9 499.61615 -3.419003 0 745.2558 0.45628141 + 10 502.63684 -2.8360961 0 750.36521 0.45917024 + 11 504.4846 -2.7628105 0 753.20736 0.46093759 + 12 506.54485 -2.8460356 0 756.21142 0.46276966 + 13 508.27211 -2.730935 0 758.91482 0.46434596 + 14 510.57045 -2.6094877 0 762.48033 0.46645996 + 15 513.14798 -2.7150827 0 766.23717 0.46882762 + 16 515.78124 -2.3961811 0 770.50201 0.47126623 + 17 515.70265 -2.2982683 0 770.48215 0.47126898 + 18 515.7081 -2.1515983 0 770.63699 0.47130565 + 19 515.74906 -2.0581436 0 770.79182 0.47131132 + 20 515.70883 -1.8922577 0 770.89742 0.47127372 +Loop time of 0.100977 on 4 procs for 20 steps with 1000 atoms -Performance: 53553.228 tau/day, 123.966 timesteps/s -99.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 85564.440 tau/day, 198.066 timesteps/s +95.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00022721 | 0.00023353 | 0.000247 | 0.0 | 0.14 -Kspace | 0.10295 | 0.11808 | 0.13377 | 3.5 | 73.19 -Neigh | 0.023849 | 0.039717 | 0.055031 | 6.1 | 24.62 -Comm | 0.0023148 | 0.0025774 | 0.0028391 | 0.4 | 1.60 -Output | 0.00029063 | 0.00038403 | 0.00050664 | 0.0 | 0.24 -Modify | 0.00015664 | 0.00015944 | 0.00016165 | 0.0 | 0.10 -Other | | 0.0001805 | | | 0.11 +Pair | 5.1975e-05 | 5.3406e-05 | 5.4836e-05 | 0.0 | 0.05 +Kspace | 0.07448 | 0.084484 | 0.08939 | 2.0 | 83.67 +Neigh | 0.006777 | 0.012519 | 0.023358 | 5.7 | 12.40 +Comm | 0.0011938 | 0.0020879 | 0.0029798 | 1.8 | 2.07 +Output | 0.00024247 | 0.00065064 | 0.0016594 | 0.0 | 0.64 +Modify | 1.812e-05 | 5.3406e-05 | 0.00014162 | 0.0 | 0.05 +Other | | 0.001127 | | | 1.12 -Nlocal: 250 ave 259 max 238 min -Histogram: 1 0 0 1 0 0 0 0 0 2 -Nghost: 672.25 ave 683 max 663 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 61954.2 ave 97157 max 25016 min -Histogram: 1 0 0 1 0 0 1 0 0 1 +Nlocal: 250 ave 518 max 78 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Nghost: 659 ave 791 max 430 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Neighs: 61954.2 ave 115962 max 19730 min +Histogram: 1 0 1 0 0 1 0 0 0 1 Total # of neighbors = 247817 Ave neighs/atom = 247.817 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.1 similarity index 65% rename from examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.1 index 4bef247e26..94ac525119 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.1 @@ -1,13 +1,12 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj atom_style charge -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) 1 by 1 by 1 MPI processor grid reading atoms ... 1000 atoms @@ -49,51 +48,51 @@ Neighbor list info ... max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2 ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 + binsize = 1, bins = 103 103 103 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair zero, perpetual attributes: half, newton on pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.44 | 10.44 | 10.44 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417141 0 1.6235786 0.0015676581 - 1 18.780412 -10.770009 0 17.372438 0.016719188 - 2 65.294131 -11.084501 0 86.758754 0.06035827 - 3 121.92555 -7.0612033 0 175.64423 0.1140457 - 4 185.71165 -5.8781334 0 272.41077 0.17455524 - 5 286.28339 -4.3800108 0 424.61565 0.26911306 - 6 481.28097 -4.3052012 0 716.89433 0.45262045 - 7 487.26022 -3.8672741 0 726.29216 0.45830216 - 8 493.65478 -3.0242687 0 736.71742 0.46443761 - 9 495.66203 -3.4336343 0 739.31592 0.46613014 - 10 498.41831 -2.8837072 0 743.99613 0.46887706 - 11 499.20944 -2.7724783 0 745.29287 0.46966875 - 12 500.97345 -2.8281484 0 747.88057 0.47126462 - 13 507.46412 -2.7752775 0 757.65971 0.47728761 - 14 525.35729 -2.5749814 0 784.67292 0.49422171 - 15 563.9578 -2.9982381 0 842.09253 0.53043696 - 16 645.47602 -2.5519203 0 964.69389 0.60730795 - 17 647.09276 -2.2568468 0 967.41166 0.60891914 - 18 647.12596 -2.2791003 0 967.43915 0.60900309 - 19 647.24862 -2.2495226 0 967.65253 0.60908339 - 20 647.51175 -2.0239179 0 968.27244 0.60932598 -Loop time of 0.797289 on 1 procs for 20 steps with 1000 atoms + 0 1.5 -0.62417141 0 1.6235786 0.00152244 + 1 18.780412 -10.770009 0 17.372438 0.016236934 + 2 65.294131 -11.084501 0 86.758754 0.058617275 + 3 121.92555 -7.0612033 0 175.64423 0.11075612 + 4 185.71165 -5.8781334 0 272.41077 0.16952031 + 5 286.28339 -4.3800108 0 424.61565 0.26135067 + 6 481.28097 -4.3052012 0 716.89433 0.43956491 + 7 487.26022 -3.8672741 0 726.29216 0.44508273 + 8 493.65478 -3.0242687 0 736.71742 0.45104121 + 9 495.66203 -3.4336343 0 739.31592 0.45268492 + 10 498.41831 -2.8837072 0 743.99613 0.4553526 + 11 499.20944 -2.7724783 0 745.29287 0.45612146 + 12 500.97345 -2.8281484 0 747.88057 0.4576713 + 13 507.46412 -2.7752775 0 757.65971 0.46352056 + 14 525.35729 -2.5749814 0 784.67292 0.47996621 + 15 563.9578 -2.9982381 0 842.09253 0.51513685 + 16 645.47602 -2.5519203 0 964.69389 0.58979054 + 17 647.09276 -2.2568468 0 967.41166 0.59135526 + 18 647.12596 -2.2791003 0 967.43915 0.59143679 + 19 647.24862 -2.2495226 0 967.65253 0.59151478 + 20 647.51175 -2.0239179 0 968.27244 0.59175037 +Loop time of 0.345449 on 1 procs for 20 steps with 1000 atoms -Performance: 10836.721 tau/day, 25.085 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 25010.947 tau/day, 57.896 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00022364 | 0.00022364 | 0.00022364 | 0.0 | 0.03 -Kspace | 0.6524 | 0.6524 | 0.6524 | 0.0 | 81.83 -Neigh | 0.14312 | 0.14312 | 0.14312 | 0.0 | 17.95 -Comm | 0.00020337 | 0.00020337 | 0.00020337 | 0.0 | 0.03 -Output | 0.00036621 | 0.00036621 | 0.00036621 | 0.0 | 0.05 -Modify | 0.00058126 | 0.00058126 | 0.00058126 | 0.0 | 0.07 -Other | | 0.0003934 | | | 0.05 +Pair | 6.485e-05 | 6.485e-05 | 6.485e-05 | 0.0 | 0.02 +Kspace | 0.30702 | 0.30702 | 0.30702 | 0.0 | 88.88 +Neigh | 0.037661 | 0.037661 | 0.037661 | 0.0 | 10.90 +Comm | 5.4598e-05 | 5.4598e-05 | 5.4598e-05 | 0.0 | 0.02 +Output | 0.00032878 | 0.00032878 | 0.00032878 | 0.0 | 0.10 +Modify | 0.00016141 | 0.00016141 | 0.00016141 | 0.0 | 0.05 +Other | | 0.0001564 | | | 0.05 Nlocal: 1000 ave 1000 max 1000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -106,4 +105,4 @@ Total # of neighbors = 244342 Ave neighs/atom = 244.342 Neighbor list builds = 19 Dangerous builds = 18 -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.4 similarity index 60% rename from examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.4 index e3f5bf44c9..79137934ab 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.fmm.g++.4 @@ -1,13 +1,12 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj atom_style charge -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) 1 by 2 by 2 MPI processor grid reading atoms ... 1000 atoms @@ -49,58 +48,58 @@ Neighbor list info ... max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2 ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 + binsize = 1, bins = 103 103 103 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair zero, perpetual attributes: half, newton on pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes +Per MPI rank memory allocation (min/avg/max) = 4.882 | 5.463 | 7.161 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417141 0 1.6235786 0.0015676581 - 1 18.780412 -10.770009 0 17.372438 0.016719188 - 2 65.294131 -11.084501 0 86.758754 0.06035827 - 3 121.92555 -7.0612033 0 175.64423 0.1140457 - 4 185.71165 -5.8781334 0 272.41077 0.17455524 - 5 286.28339 -4.3800108 0 424.61565 0.26911306 - 6 481.28097 -4.3052012 0 716.89433 0.45262045 - 7 487.26022 -3.8672741 0 726.29216 0.45830216 - 8 493.65478 -3.0242687 0 736.71742 0.46443761 - 9 495.66203 -3.4336343 0 739.31592 0.46613014 - 10 498.41831 -2.8837072 0 743.99613 0.46887706 - 11 499.20944 -2.7724783 0 745.29287 0.46966875 - 12 500.97345 -2.8281484 0 747.88057 0.47126462 - 13 507.46412 -2.7752775 0 757.65971 0.47728761 - 14 525.35729 -2.5749814 0 784.67292 0.49422171 - 15 563.9578 -2.9982381 0 842.09253 0.53043696 - 16 645.47602 -2.5519203 0 964.69389 0.60730795 - 17 647.09276 -2.2568468 0 967.41166 0.60891914 - 18 647.12596 -2.2791003 0 967.43915 0.60900309 - 19 647.24862 -2.2495226 0 967.65253 0.60908339 - 20 647.51175 -2.0239179 0 968.27244 0.60932598 -Loop time of 0.666895 on 4 procs for 20 steps with 1000 atoms + 0 1.5 -0.62417141 0 1.6235786 0.00152244 + 1 18.780412 -10.770009 0 17.372438 0.016236934 + 2 65.294131 -11.084501 0 86.758754 0.058617275 + 3 121.92555 -7.0612033 0 175.64423 0.11075612 + 4 185.71165 -5.8781334 0 272.41077 0.16952031 + 5 286.28339 -4.3800108 0 424.61565 0.26135067 + 6 481.28097 -4.3052012 0 716.89433 0.43956491 + 7 487.26022 -3.8672741 0 726.29216 0.44508273 + 8 493.65478 -3.0242687 0 736.71742 0.45104121 + 9 495.66203 -3.4336343 0 739.31592 0.45268492 + 10 498.41831 -2.8837072 0 743.99613 0.4553526 + 11 499.20944 -2.7724783 0 745.29287 0.45612146 + 12 500.97345 -2.8281484 0 747.88057 0.4576713 + 13 507.46412 -2.7752775 0 757.65971 0.46352056 + 14 525.35729 -2.5749814 0 784.67292 0.47996621 + 15 563.9578 -2.9982381 0 842.09253 0.51513685 + 16 645.47602 -2.5519203 0 964.69389 0.58979054 + 17 647.09276 -2.2568468 0 967.41166 0.59135526 + 18 647.12596 -2.2791003 0 967.43915 0.59143679 + 19 647.24862 -2.2495226 0 967.65253 0.59151478 + 20 647.51175 -2.0239179 0 968.27244 0.59175037 +Loop time of 0.357618 on 4 procs for 20 steps with 1000 atoms -Performance: 12955.555 tau/day, 29.990 timesteps/s -99.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 24159.843 tau/day, 55.926 timesteps/s +96.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0002284 | 0.00024879 | 0.00025725 | 0.0 | 0.04 -Kspace | 0.6085 | 0.62278 | 0.6386 | 1.6 | 93.38 -Neigh | 0.023998 | 0.040044 | 0.054552 | 6.2 | 6.00 -Comm | 0.0025489 | 0.0028656 | 0.0031898 | 0.4 | 0.43 -Output | 0.0004077 | 0.00053912 | 0.00071406 | 0.0 | 0.08 -Modify | 0.00017953 | 0.00018525 | 0.00020218 | 0.0 | 0.03 -Other | | 0.0002366 | | | 0.04 +Pair | 5.9605e-05 | 6.2883e-05 | 6.8426e-05 | 0.0 | 0.02 +Kspace | 0.32759 | 0.3385 | 0.34421 | 1.1 | 94.65 +Neigh | 0.0090706 | 0.014676 | 0.025457 | 5.3 | 4.10 +Comm | 0.0013905 | 0.0015741 | 0.0017447 | 0.3 | 0.44 +Output | 0.00034785 | 0.00099462 | 0.0026579 | 0.0 | 0.28 +Modify | 5.2929e-05 | 8.3923e-05 | 0.00015783 | 0.0 | 0.02 +Other | | 0.001731 | | | 0.48 -Nlocal: 250 ave 259 max 240 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 668.75 ave 679 max 657 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 61085.5 ave 95363 max 24964 min -Histogram: 1 0 0 1 0 0 0 1 0 1 +Nlocal: 250 ave 512 max 84 min +Histogram: 1 0 2 0 0 0 0 0 0 1 +Nghost: 655.75 ave 784 max 433 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Neighs: 61085.5 ave 111012 max 21779 min +Histogram: 1 0 1 0 0 1 0 0 0 1 Total # of neighbors = 244342 Ave neighs/atom = 244.342 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.1 similarity index 52% rename from examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.1 index f8a85c6c6b..9fa1677017 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.1 @@ -1,13 +1,12 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box units lj atom_style charge -read_data data.hammersley_shphere - orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) 1 by 1 by 1 MPI processor grid reading atoms ... 1000 atoms @@ -47,51 +46,51 @@ Neighbor list info ... max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 2 ghost atom cutoff = 2 - binsize = 1, bins = 102 102 102 + binsize = 1, bins = 103 103 103 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair zero, perpetual attributes: half, newton on pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard -Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Per MPI rank memory allocation (min/avg/max) = 10.44 | 10.44 | 10.44 Mbytes Step Temp E_pair E_mol TotEng Press - 0 1.5 -0.62417787 0 1.6235721 0.0015678854 - 1 18.780041 -10.770002 0 17.371889 0.016718957 - 2 65.289192 -11.084705 0 86.751149 0.060353634 - 3 121.92987 -7.0625759 0 175.64933 0.11404974 - 4 185.78164 -5.8777511 0 272.51603 0.17462194 - 5 286.36221 -4.3820531 0 424.73172 0.26918925 - 6 481.42203 -4.3095567 0 717.10136 0.45274086 - 7 488.59165 -3.8685193 0 728.28607 0.45956865 - 8 497.85288 -3.0417938 0 742.99075 0.46838117 - 9 499.61619 -3.4190063 0 745.25585 0.46983349 - 10 502.63691 -2.8360951 0 750.36531 0.47280815 - 11 504.4847 -2.7628089 0 753.20751 0.47462802 - 12 506.54494 -2.8460319 0 756.21157 0.4765145 - 13 508.2722 -2.7309328 0 758.91497 0.47813761 - 14 510.57053 -2.6094792 0 762.48045 0.48031438 - 15 513.14804 -2.7150819 0 766.23726 0.48275234 - 16 515.78127 -2.3961749 0 770.50206 0.48526336 - 17 515.70267 -2.2982581 0 770.48219 0.48526619 - 18 515.70813 -2.1516075 0 770.63702 0.48530395 - 19 515.74908 -2.0581483 0 770.79185 0.48530979 - 20 515.70881 -1.892235 0 770.89742 0.48527104 -Loop time of 1.06008 on 1 procs for 20 steps with 1000 atoms + 0 1.5 -0.62417787 0 1.6235721 0.0015226607 + 1 18.780041 -10.770002 0 17.371889 0.01623671 + 2 65.289192 -11.084705 0 86.751149 0.058612772 + 3 121.92987 -7.0625759 0 175.64933 0.11076005 + 4 185.78164 -5.8777511 0 272.51603 0.16958509 + 5 286.36221 -4.3820531 0 424.73172 0.26142466 + 6 481.42203 -4.3095567 0 717.10136 0.43968184 + 7 488.59165 -3.8685193 0 728.28608 0.44631269 + 8 497.85288 -3.0417938 0 742.99075 0.45487102 + 9 499.61619 -3.4190062 0 745.25585 0.45628145 + 10 502.63691 -2.8360951 0 750.36531 0.45917031 + 11 504.4847 -2.762809 0 753.20751 0.46093768 + 12 506.54494 -2.846032 0 756.21156 0.46276975 + 13 508.2722 -2.7309328 0 758.91496 0.46434604 + 14 510.57052 -2.6094795 0 762.48045 0.46646002 + 15 513.14804 -2.715082 0 766.23725 0.46882767 + 16 515.78127 -2.396175 0 770.50206 0.47126626 + 17 515.70267 -2.2982584 0 770.48219 0.47126901 + 18 515.70813 -2.1516073 0 770.63702 0.47130567 + 19 515.74908 -2.0581482 0 770.79185 0.47131134 + 20 515.70881 -1.8922354 0 770.89742 0.47127371 +Loop time of 0.313936 on 1 procs for 20 steps with 1000 atoms -Performance: 8150.306 tau/day, 18.866 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 27521.533 tau/day, 63.707 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00022078 | 0.00022078 | 0.00022078 | 0.0 | 0.02 -Kspace | 0.91611 | 0.91611 | 0.91611 | 0.0 | 86.42 -Neigh | 0.14232 | 0.14232 | 0.14232 | 0.0 | 13.43 -Comm | 0.00015092 | 0.00015092 | 0.00015092 | 0.0 | 0.01 -Output | 0.00033736 | 0.00033736 | 0.00033736 | 0.0 | 0.03 -Modify | 0.00056243 | 0.00056243 | 0.00056243 | 0.0 | 0.05 -Other | | 0.0003803 | | | 0.04 +Pair | 5.7697e-05 | 5.7697e-05 | 5.7697e-05 | 0.0 | 0.02 +Kspace | 0.27613 | 0.27613 | 0.27613 | 0.0 | 87.96 +Neigh | 0.037193 | 0.037193 | 0.037193 | 0.0 | 11.85 +Comm | 4.9591e-05 | 4.9591e-05 | 4.9591e-05 | 0.0 | 0.02 +Output | 0.00022483 | 0.00022483 | 0.00022483 | 0.0 | 0.07 +Modify | 0.00014615 | 0.00014615 | 0.00014615 | 0.0 | 0.05 +Other | | 0.0001338 | | | 0.04 Nlocal: 1000 ave 1000 max 1000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -104,4 +103,4 @@ Total # of neighbors = 247817 Ave neighs/atom = 247.817 Neighbor list builds = 19 Dangerous builds = 18 -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.4 new file mode 100644 index 0000000000..a41a3d9685 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.hsph.p2nfft.g++.4 @@ -0,0 +1,106 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_sphere + orthogonal box = (-51.5 -51.5 -51.5) to (51.5 51.5 51.5) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 103 103 103 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.882 | 5.463 | 7.161 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015226607 + 1 18.780041 -10.770002 0 17.371889 0.01623671 + 2 65.289192 -11.084705 0 86.751149 0.058612772 + 3 121.92987 -7.0625759 0 175.64933 0.11076005 + 4 185.78164 -5.8777511 0 272.51603 0.16958509 + 5 286.36221 -4.3820531 0 424.73172 0.26142466 + 6 481.42203 -4.3095567 0 717.10136 0.43968184 + 7 488.59165 -3.8685193 0 728.28608 0.44631269 + 8 497.85288 -3.0417938 0 742.99075 0.45487102 + 9 499.61619 -3.4190062 0 745.25585 0.45628145 + 10 502.63691 -2.8360951 0 750.36531 0.45917031 + 11 504.4847 -2.762809 0 753.20751 0.46093768 + 12 506.54494 -2.846032 0 756.21156 0.46276975 + 13 508.2722 -2.7309328 0 758.91496 0.46434604 + 14 510.57052 -2.6094795 0 762.48045 0.46646002 + 15 513.14804 -2.715082 0 766.23725 0.46882767 + 16 515.78127 -2.396175 0 770.50206 0.47126626 + 17 515.70267 -2.2982584 0 770.48219 0.47126901 + 18 515.70813 -2.1516073 0 770.63702 0.47130567 + 19 515.74908 -2.0581482 0 770.79185 0.47131134 + 20 515.70881 -1.8922354 0 770.89742 0.47127371 +Loop time of 0.283172 on 4 procs for 20 steps with 1000 atoms + +Performance: 30511.451 tau/day, 70.628 timesteps/s +94.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.8413e-05 | 6.2227e-05 | 6.8665e-05 | 0.0 | 0.02 +Kspace | 0.2548 | 0.26559 | 0.27139 | 1.2 | 93.79 +Neigh | 0.0083673 | 0.014062 | 0.024744 | 5.3 | 4.97 +Comm | 0.0013778 | 0.0014804 | 0.0015941 | 0.2 | 0.52 +Output | 0.00029898 | 0.00072974 | 0.0017858 | 0.0 | 0.26 +Modify | 3.6001e-05 | 6.3002e-05 | 0.00013065 | 0.0 | 0.02 +Other | | 0.001181 | | | 0.42 + +Nlocal: 250 ave 518 max 78 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Nghost: 659 ave 791 max 430 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Neighs: 61954.2 ave 115962 max 19730 min +Histogram: 1 0 1 0 0 1 0 0 0 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 b/examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.1 similarity index 80% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 rename to examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.1 index 1876a0e52b..2993de6329 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 1 by 1 MPI processor grid 4096 atoms - Time spent = 0.00049448 secs + Time spent = 0.000288725 secs velocity all create 1.5 49893 @@ -72,21 +71,21 @@ Step Temp E_pair E_mol TotEng Press 80 1.5033149 -1.7524495 0 0.50197233 10.46585 90 1.5108219 -1.7637095 0 0.50197005 10.515883 100 1.529239 -1.7913105 0 0.501988 10.638649 -Loop time of 18.1113 on 1 procs for 100 steps with 4096 atoms +Loop time of 7.17417 on 1 procs for 100 steps with 4096 atoms -Performance: 2385.257 tau/day, 5.521 timesteps/s -100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 6021.602 tau/day, 13.939 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0014985 | 0.0014985 | 0.0014985 | 0.0 | 0.01 -Kspace | 18.079 | 18.079 | 18.079 | 0.0 | 99.82 +Pair | 0.00037169 | 0.00037169 | 0.00037169 | 0.0 | 0.01 +Kspace | 7.1639 | 7.1639 | 7.1639 | 0.0 | 99.86 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014229 | 0.014229 | 0.014229 | 0.0 | 0.08 -Output | 0.0004642 | 0.0004642 | 0.0004642 | 0.0 | 0.00 -Modify | 0.011227 | 0.011227 | 0.011227 | 0.0 | 0.06 -Other | | 0.004455 | | | 0.02 +Comm | 0.0048451 | 0.0048451 | 0.0048451 | 0.0 | 0.07 +Output | 0.00030565 | 0.00030565 | 0.00030565 | 0.0 | 0.00 +Modify | 0.0029933 | 0.0029933 | 0.0029933 | 0.0 | 0.04 +Other | | 0.001761 | | | 0.02 Nlocal: 4096 ave 4096 max 4096 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -99,4 +98,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:21 +Total wall time: 0:00:07 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 b/examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.4 similarity index 79% rename from examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 rename to examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.4 index bf4494df8b..19db90d822 100644 --- a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 +++ b/examples/USER/scafacos/log.27Nov18.scafacos.p2nfft.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (2 Aug 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Point dipoles in a 2d box @@ -16,7 +15,7 @@ replicate 8 8 8 orthogonal box = (0 0 0) to (8 8 8) 1 by 2 by 2 MPI processor grid 4096 atoms - Time spent = 0.000260592 secs + Time spent = 0.000186443 secs velocity all create 1.5 49893 @@ -72,21 +71,21 @@ Step Temp E_pair E_mol TotEng Press 80 1.5033149 -1.7524495 0 0.50197233 10.46585 90 1.5108219 -1.7637095 0 0.50197005 10.515883 100 1.529239 -1.7913105 0 0.501988 10.638649 -Loop time of 5.09997 on 4 procs for 100 steps with 4096 atoms +Loop time of 2.28914 on 4 procs for 100 steps with 4096 atoms -Performance: 8470.643 tau/day, 19.608 timesteps/s -99.8% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 18871.750 tau/day, 43.685 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00069928 | 0.00071001 | 0.00073647 | 0.0 | 0.01 -Kspace | 5.0795 | 5.0796 | 5.0797 | 0.0 | 99.60 +Pair | 0.00019193 | 0.00020188 | 0.00020981 | 0.0 | 0.01 +Kspace | 2.2771 | 2.2771 | 2.2772 | 0.0 | 99.48 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014101 | 0.014216 | 0.014331 | 0.1 | 0.28 -Output | 0.00030541 | 0.00033581 | 0.00039625 | 0.0 | 0.01 -Modify | 0.0030217 | 0.0030621 | 0.0030868 | 0.0 | 0.06 -Other | | 0.002036 | | | 0.04 +Comm | 0.0075378 | 0.007587 | 0.0076075 | 0.0 | 0.33 +Output | 0.00019574 | 0.00051248 | 0.0014374 | 0.0 | 0.02 +Modify | 0.0014074 | 0.0014608 | 0.0014906 | 0.1 | 0.06 +Other | | 0.002247 | | | 0.10 Nlocal: 1024 ave 1024 max 1024 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -99,4 +98,4 @@ Total # of neighbors = 524288 Ave neighs/atom = 128 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:02 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.1 b/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.1 new file mode 100644 index 0000000000..92e85e072e --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.1 @@ -0,0 +1,102 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 1 MPI processor grid + 4096 atoms + Time spent = 0.000295162 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.813 | 5.813 | 5.813 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475754 0 0.5018753 11.99707 + 10 1.5000018 -1.7475781 0 0.50187528 11.997085 + 20 1.4999833 -1.7475525 0 0.50187314 11.996937 + 30 1.4999008 -1.7474408 0 0.50186112 11.996277 + 40 1.4997303 -1.7471984 0 0.5018478 11.994913 + 50 1.4995294 -1.7469059 0 0.50183901 11.993306 + 60 1.4995402 -1.7469269 0 0.50183416 11.993392 + 70 1.50036 -1.7481582 0 0.50183238 11.99995 + 80 1.5032409 -1.7524778 0 0.50183303 12.022991 + 90 1.5107445 -1.7637255 0 0.50183801 12.083005 + 100 1.5291568 -1.7913136 0 0.50186158 12.230268 +Loop time of 2.98343 on 1 procs for 100 steps with 4096 atoms + +Performance: 14479.957 tau/day, 33.518 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00035572 | 0.00035572 | 0.00035572 | 0.0 | 0.01 +Kspace | 2.9729 | 2.9729 | 2.9729 | 0.0 | 99.65 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.005022 | 0.005022 | 0.005022 | 0.0 | 0.17 +Output | 0.00027037 | 0.00027037 | 0.00027037 | 0.0 | 0.01 +Modify | 0.003046 | 0.003046 | 0.003046 | 0.0 | 0.10 +Other | | 0.00182 | | | 0.06 + +Nlocal: 4096 ave 4096 max 4096 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9728 ave 9728 max 9728 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 524288 ave 524288 max 524288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.4 b/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.4 new file mode 100644 index 0000000000..18199eca16 --- /dev/null +++ b/examples/USER/scafacos/log.27Nov18.scafacos.p3m.g++.4 @@ -0,0 +1,102 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000118017 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p3m ... +WARNING: Virial computation for P3M not available (src/USER-SCAFACOS/scafacos.cpp:104) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475797 0 0.50187096 11.99707 + 10 1.5000019 -1.7475825 0 0.50187094 11.997085 + 20 1.4999837 -1.7475551 0 0.50187104 11.99694 + 30 1.4999024 -1.7474348 0 0.50186949 11.996289 + 40 1.4997328 -1.747187 0 0.50186299 11.994934 + 50 1.499532 -1.7468958 0 0.50185295 11.993327 + 60 1.4995421 -1.74692 0 0.50184401 11.993408 + 70 1.5003611 -1.7481536 0 0.5018387 11.999959 + 80 1.5032412 -1.7524745 0 0.50183679 12.022994 + 90 1.510744 -1.763723 0 0.50183979 12.083002 + 100 1.5291558 -1.7913123 0 0.5018614 12.23026 +Loop time of 1.10005 on 4 procs for 100 steps with 4096 atoms + +Performance: 39271.030 tau/day, 90.905 timesteps/s +96.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0002172 | 0.00022924 | 0.0002377 | 0.0 | 0.02 +Kspace | 1.0848 | 1.0849 | 1.085 | 0.0 | 98.62 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.010176 | 0.01062 | 0.01088 | 0.3 | 0.97 +Output | 0.00019169 | 0.0003345 | 0.00075459 | 0.0 | 0.03 +Modify | 0.001878 | 0.0018976 | 0.0019398 | 0.1 | 0.17 +Other | | 0.002097 | | | 0.19 + +Nlocal: 1024 ave 1024 max 1024 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5120 ave 5120 max 5120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 131072 ave 131072 max 131072 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:01 From 984f415196f1ef5aff5a6376ce82d3a56ff0c550 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Dec 2018 19:05:39 -0500 Subject: [PATCH 246/273] fix memory leak in fix plumed --- src/USER-PLUMED/fix_plumed.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index c0f67ea60a..f8b06fdbed 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -224,7 +224,8 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : int ipe = modify->find_compute(id_pe); c_pe = modify->compute[ipe]; -// Define compute to calculate pressure tensor + // Define compute to calculate pressure tensor + id_press = new char[9]; id_press = (char *) "plmd_press"; newarg = new char*[5]; @@ -268,6 +269,8 @@ FixPlumed::~FixPlumed() delete p; modify->delete_compute(id_pe); modify->delete_compute(id_press); + delete[] id_pe; + delete[] id_press; delete[] masses; delete[] charges; delete[] gatindex; @@ -528,7 +531,8 @@ int FixPlumed::modify_param(int narg, char **arg) { if (strcmp(arg[0],"pe") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - modify->delete_compute(id_pe); delete [] id_pe; + modify->delete_compute(id_pe); + delete[] id_pe; int n = strlen(arg[1]) + 1; id_pe = new char[n]; strcpy(id_pe,arg[1]); @@ -546,7 +550,8 @@ int FixPlumed::modify_param(int narg, char **arg) } else if (strcmp(arg[0],"press") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - modify->delete_compute(id_press); delete [] id_press; + modify->delete_compute(id_press); + delete[] id_press; int n = strlen(arg[1]) + 1; id_press = new char[n]; strcpy(id_press,arg[1]); From 18f7e96e8a45485034f5f07773e3759c291b0aa6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Dec 2018 19:07:36 -0500 Subject: [PATCH 247/273] update log files for USER-PLUMED examples --- ...g++.1 => log.27Nov18.peptide-plumed.g++.1} | 29 ++++++++------- ...g++.4 => log.27Nov18.peptide-plumed.g++.4} | 35 +++++++++---------- 2 files changed, 31 insertions(+), 33 deletions(-) rename examples/USER/plumed/{log.24Oct18.peptide-plumed.g++.1 => log.27Nov18.peptide-plumed.g++.1} (83%) rename examples/USER/plumed/{log.24Oct18.peptide-plumed.g++.4 => log.27Nov18.peptide-plumed.g++.4} (81%) diff --git a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 b/examples/USER/plumed/log.27Nov18.peptide-plumed.g++.1 similarity index 83% rename from examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 rename to examples/USER/plumed/log.27Nov18.peptide-plumed.g++.1 index 9bf403fd27..eb67b96fce 100644 --- a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.1 +++ b/examples/USER/plumed/log.27Nov18.peptide-plumed.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (24 Oct 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -78,7 +77,7 @@ variable pe equal pe run 101 PPPM initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 @@ -107,7 +106,7 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Per MPI rank memory allocation (min/avg/max) = 18.74 | 18.74 | 18.74 Mbytes Step Temp TotEng PotEng KinEng E_pair E_bond f_2 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 0 10 276.9783 -5234.3057 -6348.6171 1114.3114 -6421.6171 17.024361 0.47785504 @@ -130,22 +129,22 @@ SHAKE stats (type/ave/delta) on step 100 31 104.52 0.000760401 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.0094784372 101 270.99811 -5235.8295 -6326.082 1090.2525 -6418.8974 17.285816 0.086681332 -Loop time of 2.12948 on 1 procs for 101 steps with 2004 atoms +Loop time of 2.73445 on 1 procs for 101 steps with 2004 atoms -Performance: 8.196 ns/day, 2.928 hours/ns, 47.429 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 6.383 ns/day, 3.760 hours/ns, 36.936 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.757 | 1.757 | 1.757 | 0.0 | 82.51 -Bond | 0.0052233 | 0.0052233 | 0.0052233 | 0.0 | 0.25 -Kspace | 0.14772 | 0.14772 | 0.14772 | 0.0 | 6.94 -Neigh | 0.16455 | 0.16455 | 0.16455 | 0.0 | 7.73 -Comm | 0.0083704 | 0.0083704 | 0.0083704 | 0.0 | 0.39 -Output | 0.00031424 | 0.00031424 | 0.00031424 | 0.0 | 0.01 -Modify | 0.044411 | 0.044411 | 0.044411 | 0.0 | 2.09 -Other | | 0.001851 | | | 0.09 +Pair | 2.2617 | 2.2617 | 2.2617 | 0.0 | 82.71 +Bond | 0.0044148 | 0.0044148 | 0.0044148 | 0.0 | 0.16 +Kspace | 0.17883 | 0.17883 | 0.17883 | 0.0 | 6.54 +Neigh | 0.23945 | 0.23945 | 0.23945 | 0.0 | 8.76 +Comm | 0.011672 | 0.011672 | 0.011672 | 0.0 | 0.43 +Output | 0.00028348 | 0.00028348 | 0.00028348 | 0.0 | 0.01 +Modify | 0.0365 | 0.0365 | 0.0365 | 0.0 | 1.33 +Other | | 0.001611 | | | 0.06 Nlocal: 2004 ave 2004 max 2004 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 b/examples/USER/plumed/log.27Nov18.peptide-plumed.g++.4 similarity index 81% rename from examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 rename to examples/USER/plumed/log.27Nov18.peptide-plumed.g++.4 index 771a0de1d0..72b851c2ff 100644 --- a/examples/USER/plumed/log.24Oct18.peptide-plumed.g++.4 +++ b/examples/USER/plumed/log.27Nov18.peptide-plumed.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (24 Oct 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:87) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -78,7 +77,7 @@ variable pe equal pe run 101 PPPM initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 @@ -107,7 +106,7 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.66 | 15.87 | 16.06 Mbytes Step Temp TotEng PotEng KinEng E_pair E_bond f_2 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 0 10 276.9783 -5234.3057 -6348.6171 1114.3114 -6421.6171 17.024361 0.47785504 @@ -118,7 +117,7 @@ Step Temp TotEng PotEng KinEng E_pair E_bond f_2 60 273.01449 -5217.7381 -6316.1026 1098.3646 -6406.4709 21.800931 0.92327815 70 274.67549 -5221.0246 -6326.0716 1105.047 -6409.7721 19.41235 0.0016975896 80 273.74824 -5224.7613 -6326.0778 1101.3165 -6418.5055 19.206793 0.48550348 - 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3466 21.124789 0.5468014 + 90 284.32594 -5229.195 -6373.0667 1143.8717 -6461.3467 21.124789 0.5468014 SHAKE stats (type/ave/delta) on step 100 4 1.111 2.06868e-06 6 0.996999 2.09521e-06 @@ -128,24 +127,24 @@ SHAKE stats (type/ave/delta) on step 100 14 0.959999 0 18 0.9572 9.14098e-06 31 104.52 0.000760401 - 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.009478437 + 100 270.40648 -5234.9604 -6322.8327 1087.8723 -6417.73 19.666404 0.0094784372 101 270.99811 -5235.8295 -6326.082 1090.2525 -6418.8974 17.285816 0.086681332 -Loop time of 1.16767 on 4 procs for 101 steps with 2004 atoms +Loop time of 0.812799 on 4 procs for 101 steps with 2004 atoms -Performance: 14.947 ns/day, 1.606 hours/ns, 86.497 timesteps/s -97.8% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 21.472 ns/day, 1.118 hours/ns, 124.262 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.84633 | 0.86651 | 0.88617 | 1.6 | 74.21 -Bond | 0.0010614 | 0.0027132 | 0.004288 | 3.0 | 0.23 -Kspace | 0.095008 | 0.1162 | 0.13491 | 4.3 | 9.95 -Neigh | 0.07834 | 0.078424 | 0.078516 | 0.0 | 6.72 -Comm | 0.03314 | 0.033299 | 0.033426 | 0.1 | 2.85 -Output | 0.00036979 | 0.00076199 | 0.0019338 | 0.0 | 0.07 -Modify | 0.063471 | 0.064011 | 0.065312 | 0.3 | 5.48 -Other | | 0.005751 | | | 0.49 +Pair | 0.57957 | 0.59988 | 0.62504 | 2.6 | 73.80 +Bond | 0.00080013 | 0.0017412 | 0.0028315 | 2.1 | 0.21 +Kspace | 0.075724 | 0.10008 | 0.12023 | 6.4 | 12.31 +Neigh | 0.067733 | 0.067947 | 0.068168 | 0.1 | 8.36 +Comm | 0.01375 | 0.014175 | 0.014681 | 0.3 | 1.74 +Output | 0.00025511 | 0.00051183 | 0.001277 | 0.0 | 0.06 +Modify | 0.026406 | 0.026436 | 0.026462 | 0.0 | 3.25 +Other | | 0.002027 | | | 0.25 Nlocal: 501 ave 512 max 492 min Histogram: 1 0 0 1 0 1 0 0 0 1 @@ -159,4 +158,4 @@ Ave neighs/atom = 353.274 Ave special neighs/atom = 2.34032 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:00 From cd0924ca4c4653332ee009ef9d6cf798ea23d19f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 03:49:46 -0500 Subject: [PATCH 248/273] add log files for USER-AWPMD examples --- examples/USER/awpmd/log.27Nov18.h_atom.g++.1 | 100 ++++++++++++++++++ examples/USER/awpmd/log.27Nov18.h_atom.g++.4 | 100 ++++++++++++++++++ .../USER/awpmd/log.27Nov18.h_molecule.g++.1 | 100 ++++++++++++++++++ .../USER/awpmd/log.27Nov18.h_molecule.g++.4 | 100 ++++++++++++++++++ 4 files changed, 400 insertions(+) create mode 100644 examples/USER/awpmd/log.27Nov18.h_atom.g++.1 create mode 100644 examples/USER/awpmd/log.27Nov18.h_atom.g++.4 create mode 100644 examples/USER/awpmd/log.27Nov18.h_molecule.g++.1 create mode 100644 examples/USER/awpmd/log.27Nov18.h_molecule.g++.4 diff --git a/examples/USER/awpmd/log.27Nov18.h_atom.g++.1 b/examples/USER/awpmd/log.27Nov18.h_atom.g++.1 new file mode 100644 index 0000000000..2ee048f3c9 --- /dev/null +++ b/examples/USER/awpmd/log.27Nov18.h_atom.g++.1 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable sname index h_atom + +units real +newton on +boundary p p p +processors 1 * * + + +atom_style wavepacket + +read_data data.${sname} +read_data data.h_atom + orthogonal box = (-0.529177 -0.529177 -0.529177) to (0.529177 0.529177 0.529177) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2 atoms + +#neighbor 2.0 nsq + +pair_style awpmd/cut -1. hartree ermscale 0.99 free flex_press +pair_coeff * * + + + +timestep 0.001 + +fix 1 all nve/awpmd + +comm_modify vel yes + +compute energies all pair awpmd/cut +variable eke equal c_energies[1] +variable epauli equal c_energies[2] +variable estatics equal c_energies[3] +variable errestrain equal c_energies[4] + +compute peratom all stress/atom NULL +compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] +variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) + +thermo 1 +thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press + +run 10 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.52918 + ghost atom cutoff = 2.52918 + binsize = 1.26459, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair awpmd/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:933) +Per MPI rank memory allocation (min/avg/max) = 5.111 | 5.111 | 5.111 Mbytes +Step TotEng PotEng KinEng v_eke v_epauli v_estatics v_errestrain Temp Press v_press + 0 -266.3192 -266.3192 0 266.32732 0 -532.64652 0 0 156.59865 -0 + 1 -266.3192 -266.3192 0 266.32746 0 -532.64666 0 0 159.30733 -0 + 2 -266.3192 -266.3192 1.7273458e-17 266.32797 0 -532.64718 0 5.7948873e-15 169.14686 6.6606909e-13 + 3 -266.3192 -266.3192 4.6899813e-15 266.32927 0 -532.64847 0 1.5733915e-12 194.06892 1.8084691e-10 + 4 -266.3192 -266.3192 1.4824973e-13 266.33199 0 -532.6512 0 4.9734712e-11 246.65762 5.7165485e-09 + 5 -266.3192 -266.3192 1.9298888e-12 266.33712 0 -532.65632 0 6.4743771e-10 345.53056 7.441702e-08 + 6 -266.3192 -266.3192 1.5343223e-11 266.34601 0 -532.66521 0 5.1473332e-09 516.91949 5.9163869e-07 + 7 -266.3192 -266.3192 8.8661674e-11 266.36051 0 -532.6797 0 2.9744154e-08 796.4357 3.4188175e-06 + 8 -266.31919 -266.31919 4.0865149e-10 266.38304 0 -532.70223 0 1.3709411e-07 1231.0302 1.5757709e-05 + 9 -266.31918 -266.31918 1.5889509e-09 266.41674 0 -532.73592 0 5.3306012e-07 1881.1652 6.1270366e-05 + 10 -266.31916 -266.31916 5.4070747e-09 266.46554 0 -532.7847 0 1.8139615e-06 2823.2238 0.00020849822 +Loop time of 0.000725031 on 1 procs for 10 steps with 2 atoms + +Performance: 1.192 ns/day, 20.140 hours/ns, 13792.516 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00030851 | 0.00030851 | 0.00030851 | 0.0 | 42.55 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0001204 | 0.0001204 | 0.0001204 | 0.0 | 16.61 +Output | 0.00028038 | 0.00028038 | 0.00028038 | 0.0 | 38.67 +Modify | 6.1989e-06 | 6.1989e-06 | 6.1989e-06 | 0.0 | 0.85 +Other | | 9.537e-06 | | | 1.32 + +Nlocal: 2 ave 2 max 2 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 248 ave 248 max 248 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 225 ave 225 max 225 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 225 +Ave neighs/atom = 112.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/awpmd/log.27Nov18.h_atom.g++.4 b/examples/USER/awpmd/log.27Nov18.h_atom.g++.4 new file mode 100644 index 0000000000..2ab2177279 --- /dev/null +++ b/examples/USER/awpmd/log.27Nov18.h_atom.g++.4 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable sname index h_atom + +units real +newton on +boundary p p p +processors 1 * * + + +atom_style wavepacket + +read_data data.${sname} +read_data data.h_atom + orthogonal box = (-0.529177 -0.529177 -0.529177) to (0.529177 0.529177 0.529177) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2 atoms + +#neighbor 2.0 nsq + +pair_style awpmd/cut -1. hartree ermscale 0.99 free flex_press +pair_coeff * * + + + +timestep 0.001 + +fix 1 all nve/awpmd + +comm_modify vel yes + +compute energies all pair awpmd/cut +variable eke equal c_energies[1] +variable epauli equal c_energies[2] +variable estatics equal c_energies[3] +variable errestrain equal c_energies[4] + +compute peratom all stress/atom NULL +compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] +variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) + +thermo 1 +thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press + +run 10 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.52918 + ghost atom cutoff = 2.52918 + binsize = 1.26459, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair awpmd/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:933) +Per MPI rank memory allocation (min/avg/max) = 5.391 | 5.391 | 5.391 Mbytes +Step TotEng PotEng KinEng v_eke v_epauli v_estatics v_errestrain Temp Press v_press + 0 -266.3192 -266.3192 0 266.32732 0 -532.64652 0 0 156.59865 -0 + 1 -266.3192 -266.3192 0 266.32789 0 -532.64709 0 0 167.49891 -0 + 2 -266.3192 -266.3192 1.219316e-15 266.3314 0 -532.6506 0 4.0905525e-13 235.2267 4.7017146e-11 + 3 -266.3192 -266.3192 8.3179871e-14 266.34548 0 -532.66468 0 2.7905123e-11 506.68594 3.2074377e-09 + 4 -266.3192 -266.3192 4.4091748e-12 266.39036 0 -532.70955 0 1.4791868e-09 1372.0565 1.7001894e-07 + 5 -266.31916 -266.31916 9.8904198e-11 266.51357 0 -532.83273 0 3.3180309e-08 3748.6725 3.8137718e-06 + 6 -266.31893 -266.31893 1.3132578e-09 266.81733 0 -533.13626 0 4.4057077e-07 9611.8807 5.0639565e-05 + 7 -266.31762 -266.31762 1.2317167e-08 267.50719 0 -533.82481 0 4.1321544e-06 22950.26 0.00047495321 + 8 -266.31123 -266.31123 9.0048883e-08 268.97689 0 -535.28812 0 3.0209534e-05 51470.197 0.0034723086 + 9 -266.28324 -266.28324 5.4612621e-07 271.95757 0 -538.24082 0 0.00018321403 109735.25 0.02105877 + 10 -266.17113 -266.17114 2.8729529e-06 277.79384 0 -543.96498 0 0.00096381615 225424.02 0.11078182 +Loop time of 0.00176561 on 4 procs for 10 steps with 2 atoms + +Performance: 0.489 ns/day, 49.045 hours/ns, 5663.769 timesteps/s +87.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 6.3419e-05 | 0.00012642 | 0.00030923 | 0.0 | 7.16 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00073171 | 0.00086534 | 0.001025 | 0.0 | 49.01 +Output | 0.00063562 | 0.00075388 | 0.00094962 | 0.0 | 42.70 +Modify | 3.8147e-06 | 4.4703e-06 | 6.1989e-06 | 0.0 | 0.25 +Other | | 1.55e-05 | | | 0.88 + +Nlocal: 0.5 ave 2 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 249.5 ave 250 max 248 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 56.25 ave 225 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 225 +Ave neighs/atom = 112.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/awpmd/log.27Nov18.h_molecule.g++.1 b/examples/USER/awpmd/log.27Nov18.h_molecule.g++.1 new file mode 100644 index 0000000000..a4c201abf2 --- /dev/null +++ b/examples/USER/awpmd/log.27Nov18.h_molecule.g++.1 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable sname index h_molecule + +units real +newton on +boundary p p p +processors 1 * * + + +atom_style wavepacket + +read_data data.${sname} +read_data data.h_molecule + orthogonal box = (-0.529177 -0.529177 -0.529177) to (0.529177 0.529177 0.529177) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms + +#neighbor 2.0 nsq + +pair_style awpmd/cut -1. hartree ermscale 0.99 free flex_press +pair_coeff * * + + + +timestep 0.001 + +fix 1 all nve/awpmd + +comm_modify vel yes + +compute energies all pair awpmd/cut +variable eke equal c_energies[1] +variable epauli equal c_energies[2] +variable estatics equal c_energies[3] +variable errestrain equal c_energies[4] + +compute peratom all stress/atom NULL +compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] +variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) + +thermo 1 +thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press + +run 10 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.52918 + ghost atom cutoff = 2.52918 + binsize = 1.26459, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair awpmd/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:933) +Per MPI rank memory allocation (min/avg/max) = 5.142 | 5.142 | 5.142 Mbytes +Step TotEng PotEng KinEng v_eke v_epauli v_estatics v_errestrain Temp Press v_press + 0 30358.159 30358.159 0 39537.73 -1.5916157e-12 -9179.5713 0 0 1.3475994e+09 -0 + 1 30360.49 30360.489 0.0009272222 39540.081 2.0463631e-12 -9179.5926 0 0.10368794 1.3476061e+09 35.753932 + 2 67447.779 67447.776 0.00370884 80547.07 -1.1368684e-12 -13099.294 0 0.41474633 2.8529839e+09 143.01385 + 3 3713046.5 3713046.5 0.0041850026 3803060.3 -1.29603e-10 -90013.788 0 0.46799388 1.4486958e+11 161.3748 + 4 2445632.1 2445620 12.171486 2452194.4 -9.777068e-11 -6574.4062 0 1361.0937 -6.5572589e+08 469335.68 + 5 2434860.1 2434845.9 14.215419 2433638.8 -1.0663825e-10 1207.1541 0 1589.6595 -359380.29 548150.31 + 6 2444984.1 2444969.8 14.215428 2451100 5.1841198e-11 -6130.1373 0 1589.6605 -5.6327282e+08 548150.63 + 7 2436128.7 2436110.9 17.793789 2434903.7 2.0190782e-10 1207.154 0 1989.8158 -221406.77 686133.18 + 8 2444786.5 2444768.7 17.793798 2450583.8 -1.1027623e-10 -5815.0651 0 1989.8169 -5.0227031e+08 686133.54 + 9 2437198.9 2437175.9 22.942086 2435968.8 2.2600943e-10 1207.1538 0 2565.5315 -22903.736 884652.88 + 10 2444787.1 2444764.2 22.942097 2450333.1 -3.1832315e-11 -5568.9214 0 2565.5327 -4.5741803e+08 884653.3 +Loop time of 0.00158453 on 1 procs for 10 steps with 4 atoms + +Performance: 0.545 ns/day, 44.015 hours/ns, 6311.020 timesteps/s +85.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00088882 | 0.00088882 | 0.00088882 | 0.0 | 56.09 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00031352 | 0.00031352 | 0.00031352 | 0.0 | 19.79 +Output | 0.00036216 | 0.00036216 | 0.00036216 | 0.0 | 22.86 +Modify | 5.9605e-06 | 5.9605e-06 | 5.9605e-06 | 0.0 | 0.38 +Other | | 1.407e-05 | | | 0.89 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 596 ave 596 max 596 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 966 ave 966 max 966 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 966 +Ave neighs/atom = 241.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/awpmd/log.27Nov18.h_molecule.g++.4 b/examples/USER/awpmd/log.27Nov18.h_molecule.g++.4 new file mode 100644 index 0000000000..39531640e1 --- /dev/null +++ b/examples/USER/awpmd/log.27Nov18.h_molecule.g++.4 @@ -0,0 +1,100 @@ +LAMMPS (27 Nov 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable sname index h_molecule + +units real +newton on +boundary p p p +processors 1 * * + + +atom_style wavepacket + +read_data data.${sname} +read_data data.h_molecule + orthogonal box = (-0.529177 -0.529177 -0.529177) to (0.529177 0.529177 0.529177) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 4 atoms + +#neighbor 2.0 nsq + +pair_style awpmd/cut -1. hartree ermscale 0.99 free flex_press +pair_coeff * * + + + +timestep 0.001 + +fix 1 all nve/awpmd + +comm_modify vel yes + +compute energies all pair awpmd/cut +variable eke equal c_energies[1] +variable epauli equal c_energies[2] +variable estatics equal c_energies[3] +variable errestrain equal c_energies[4] + +compute peratom all stress/atom NULL +compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] +variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) + +thermo 1 +thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press + +run 10 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.52918 + ghost atom cutoff = 2.52918 + binsize = 1.26459, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair awpmd/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:933) +Per MPI rank memory allocation (min/avg/max) = 5.172 | 5.234 | 5.422 Mbytes +Step TotEng PotEng KinEng v_eke v_epauli v_estatics v_errestrain Temp Press v_press + 0 30358.159 30358.159 0 39537.73 -1.5916157e-12 -9179.5713 0 0 1.3475994e+09 -0 + 1 30360.982 30360.981 0.0009272222 39540.638 -1.1368684e-12 -9179.6571 0 0.10368794 1.3476263e+09 35.753932 + 2 67459.392 67459.388 0.0037086548 80559.71 6.5938366e-12 -13100.322 0 0.41472561 2.8534514e+09 143.0067 + 3 3732209.2 3732209.2 0.0041861902 3822452.2 -3.1604941e-11 -90242.984 0 0.46812669 1.4561246e+11 161.42059 + 4 2482974.7 2482961.9 12.860712 2489531.2 -2.2896529e-10 -6569.2968 0 1438.1675 -6.5458119e+08 495912.44 + 5 2472238.2 2472223.2 14.933049 2471015.7 -1.6120794e-10 1207.5188 0 1669.9095 -324992.65 575822.3 + 6 2482233.1 2482218.1 14.933057 2488321.7 -2.0691004e-11 -6103.5677 0 1669.9104 -5.5786438e+08 575822.62 + 7 2473498.5 2473479.8 18.61401 2472272.3 1.459739e-10 1207.5167 0 2081.5382 -183348.11 717761.12 + 8 2481621.3 2481602.6 18.614019 2487299.1 7.0258466e-11 -5696.4589 0 2081.5393 -4.7962801e+08 717761.48 + 9 2474506.2 2474482.2 24.021181 2473274.7 2.1395863e-10 1207.508 0 2686.2029 24318.554 926263.07 + 10 2480376.3 2480352.2 24.021192 2485505 -8.5719876e-11 -5152.7478 0 2686.2041 -3.8355089e+08 926263.48 +Loop time of 0.00267726 on 4 procs for 10 steps with 4 atoms + +Performance: 0.323 ns/day, 74.368 hours/ns, 3735.160 timesteps/s +91.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00011826 | 0.00027376 | 0.00073862 | 0.0 | 10.23 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00080514 | 0.0011864 | 0.001574 | 0.9 | 44.31 +Output | 0.00094914 | 0.0011944 | 0.0017326 | 0.9 | 44.61 +Modify | 3.3379e-06 | 4.4703e-06 | 6.1989e-06 | 0.0 | 0.17 +Other | | 1.824e-05 | | | 0.68 + +Nlocal: 1 ave 4 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 599 ave 600 max 596 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 241.5 ave 966 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 966 +Ave neighs/atom = 241.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 From 685a8bfc627952e463876b3fdde2613825ae6243 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 04:32:46 -0500 Subject: [PATCH 249/273] update or add logs for USER-AWPMD, USER-BOCS, and USER-CGDNA --- examples/USER/awpmd/in.h_atom | 3 +- examples/USER/awpmd/in.h_molecule | 3 +- ...hanol.g++.1 => log.27Nov18.methanol.g++.1} | 71 +- ...hanol.g++.4 => log.27Nov18.methanol.g++.4} | 81 +- .../duplex1/{input.duplex1 => in.duplex1} | 2 +- .../oxDNA/duplex1/log.24Mar17.duplex1.g++.1 | 1161 ---------------- .../oxDNA/duplex1/log.24Mar17.duplex1.g++.4 | 1161 ---------------- .../oxDNA/duplex1/log.27Nov18.duplex1.g++.1 | 172 +++ .../oxDNA/duplex1/log.27Nov18.duplex1.g++.4 | 172 +++ .../duplex2/{input.duplex2 => in.duplex2} | 2 +- .../oxDNA/duplex2/log.24Mar17.duplex2.g++.1 | 1161 ---------------- .../oxDNA/duplex2/log.24Mar17.duplex2.g++.4 | 1161 ---------------- .../oxDNA/duplex2/log.27Nov18.duplex2.g++.1 | 172 +++ .../oxDNA/duplex2/log.27Nov18.duplex2.g++.4 | 172 +++ .../duplex1/{input.duplex1 => in.duplex1} | 2 +- .../oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 | 1167 ----------------- .../oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 | 1167 ----------------- .../oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 | 178 +++ .../oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 | 178 +++ .../duplex2/{input.duplex2 => in.duplex2} | 2 +- .../oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 | 1167 ----------------- .../oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 | 1167 ----------------- .../oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 | 178 +++ .../oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 | 178 +++ 24 files changed, 1481 insertions(+), 9397 deletions(-) rename examples/USER/bocs/{log.20Apr18.methanol.g++.1 => log.27Nov18.methanol.g++.1} (60%) rename examples/USER/bocs/{log.20Apr18.methanol.g++.4 => log.27Nov18.methanol.g++.4} (57%) rename examples/USER/cgdna/examples/oxDNA/duplex1/{input.duplex1 => in.duplex1} (99%) delete mode 100644 examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.1 delete mode 100644 examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.4 create mode 100644 examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 rename examples/USER/cgdna/examples/oxDNA/duplex2/{input.duplex2 => in.duplex2} (99%) delete mode 100644 examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.1 delete mode 100644 examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.4 create mode 100644 examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 rename examples/USER/cgdna/examples/oxDNA2/duplex1/{input.duplex1 => in.duplex1} (99%) delete mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 delete mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 rename examples/USER/cgdna/examples/oxDNA2/duplex2/{input.duplex2 => in.duplex2} (99%) delete mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 delete mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 create mode 100644 examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 diff --git a/examples/USER/awpmd/in.h_atom b/examples/USER/awpmd/in.h_atom index 6eb78ba4c2..60b7a07da4 100644 --- a/examples/USER/awpmd/in.h_atom +++ b/examples/USER/awpmd/in.h_atom @@ -1,5 +1,4 @@ variable sname index h_atom -log ${sname}.spe.log units real newton on @@ -37,4 +36,4 @@ variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) thermo 1 thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press -run 0 +run 10 diff --git a/examples/USER/awpmd/in.h_molecule b/examples/USER/awpmd/in.h_molecule index 78df85d185..2f02aa7038 100644 --- a/examples/USER/awpmd/in.h_molecule +++ b/examples/USER/awpmd/in.h_molecule @@ -1,5 +1,4 @@ variable sname index h_molecule -log ${sname}.spe.log units real newton on @@ -37,4 +36,4 @@ variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) thermo 1 thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain temp press v_press -run 0 +run 10 diff --git a/examples/USER/bocs/log.20Apr18.methanol.g++.1 b/examples/USER/bocs/log.27Nov18.methanol.g++.1 similarity index 60% rename from examples/USER/bocs/log.20Apr18.methanol.g++.1 rename to examples/USER/bocs/log.27Nov18.methanol.g++.1 index a94bd959c8..21bbc0c823 100644 --- a/examples/USER/bocs/log.20Apr18.methanol.g++.1 +++ b/examples/USER/bocs/log.27Nov18.methanol.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real dimension 3 @@ -21,7 +20,7 @@ pair_style table spline 15000 pair_coeff 1 1 lammps_nb_MET-MET.table nb_METMET 12.0 WARNING: 78 of 2500 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) neigh_modify delay 0 every 1 check yes one 10000 neighbor 12.0 bin @@ -90,54 +89,54 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 4.691 | 4.691 | 4.691 Mbytes Step Temp PotEng TotEng Press Volume 0 300 1061.5961 1926.3291 107.006 66250.679 - 500 314.54728 1034.1091 1940.7738 194.42689 65660.282 - 1000 301.41603 1030.7027 1899.5173 -91.966709 66262.543 - 1500 298.8308 1014.8276 1876.1905 -80.178606 67053.605 - 2000 294.78476 1046.8207 1896.521 50.592942 66316.735 - 2500 301.18564 1033.9214 1902.0719 40.48255 66607.667 - 3000 301.06632 1022.0381 1889.8447 47.582344 66341.947 - 3500 297.98361 989.80983 1848.7307 -204.69879 67462.078 - 4000 299.03493 1034.6571 1896.6083 89.188888 66457.385 - 4500 306.03351 985.4121 1867.5363 -51.102407 67519.446 - 5000 305.6903 1013.8613 1894.9963 -141.13704 67240.467 - 5500 292.23444 1029.5558 1871.905 20.764579 66683.876 - 6000 287.87735 1017.7325 1847.5226 -35.288049 66630.031 - 6500 305.26461 960.08118 1839.9891 -352.42596 67612.317 - 7000 300.34449 1055.0664 1920.7923 22.04027 66187.27 - 7500 305.48612 1038.6651 1919.2115 17.807254 66324.168 - 8000 316.03232 1034.6809 1945.6262 27.482857 66502.198 - 8500 294.28636 1038.8213 1887.085 -72.840559 66851.661 - 9000 316.69029 1065.7481 1978.5899 245.61677 65678.385 - 9500 297.46127 1034.5547 1891.97 54.23428 66892.627 - 10000 301.24799 1036.5432 1904.8735 7.7134029 66150.506 -Loop time of 34.426 on 1 procs for 10000 steps with 968 atoms + 500 314.70267 1036.3305 1943.4431 205.83301 65603.85 + 1000 304.99804 1034.15 1913.2896 -79.521176 66268.87 + 1500 305.2621 996.9303 1876.831 -97.93992 67090.442 + 2000 311.29317 1083.9171 1981.2021 119.28085 65589.674 + 2500 305.51905 1051.59 1932.2314 -34.076658 66487.327 + 3000 291.76224 1053.524 1894.5121 45.522865 65879.535 + 3500 297.65795 1017.1028 1875.085 -79.41965 67185.19 + 4000 285.98779 1042.3622 1866.7058 88.549172 66357.051 + 4500 295.35 1071.4505 1922.7801 -16.75965 65378.949 + 5000 293.20958 1009.9943 1855.1543 -270.58058 67555.38 + 5500 292.40422 1085.3901 1928.2287 161.88502 65677.644 + 6000 318.79663 1012.4832 1931.3964 -65.692451 67458.05 + 6500 308.03807 1046.1413 1934.0436 249.70237 66052.045 + 7000 289.33716 1037.9657 1871.9636 47.662734 66782.578 + 7500 297.3092 1032.356 1889.3329 -24.049617 66129.95 + 8000 298.27827 1044.118 1903.8882 -26.61809 66720.381 + 8500 299.52706 1026.7068 1890.0766 -128.14995 67695.559 + 9000 304.67694 1018.2095 1896.4236 -61.360724 65942.4 + 9500 293.81117 1019.2221 1866.1162 -47.726496 66843.848 + 10000 309.9256 1043.5321 1936.875 -103.81403 66222.21 +Loop time of 42.5056 on 1 procs for 10000 steps with 968 atoms -Performance: 25.097 ns/day, 0.956 hours/ns, 290.478 timesteps/s +Performance: 20.327 ns/day, 1.181 hours/ns, 235.263 timesteps/s 99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 33.324 | 33.324 | 33.324 | 0.0 | 96.80 -Neigh | 0.12198 | 0.12198 | 0.12198 | 0.0 | 0.35 -Comm | 0.42865 | 0.42865 | 0.42865 | 0.0 | 1.25 -Output | 0.00059938 | 0.00059938 | 0.00059938 | 0.0 | 0.00 -Modify | 0.42553 | 0.42553 | 0.42553 | 0.0 | 1.24 -Other | | 0.1252 | | | 0.36 +Pair | 40.972 | 40.972 | 40.972 | 0.0 | 96.39 +Neigh | 0.18576 | 0.18576 | 0.18576 | 0.0 | 0.44 +Comm | 0.71338 | 0.71338 | 0.71338 | 0.0 | 1.68 +Output | 0.00050306 | 0.00050306 | 0.00050306 | 0.0 | 0.00 +Modify | 0.52926 | 0.52926 | 0.52926 | 0.0 | 1.25 +Other | | 0.1042 | | | 0.25 Nlocal: 968 ave 968 max 968 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 9112 ave 9112 max 9112 min +Nghost: 9215 ave 9215 max 9215 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 404392 ave 404392 max 404392 min +Neighs: 411837 ave 411837 max 411837 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 404392 -Ave neighs/atom = 417.76 +Total # of neighbors = 411837 +Ave neighs/atom = 425.451 Neighbor list builds = 13 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:34 +Total wall time: 0:00:42 diff --git a/examples/USER/bocs/log.20Apr18.methanol.g++.4 b/examples/USER/bocs/log.27Nov18.methanol.g++.4 similarity index 57% rename from examples/USER/bocs/log.20Apr18.methanol.g++.4 rename to examples/USER/bocs/log.27Nov18.methanol.g++.4 index cf5891f97c..7dcf61d32c 100644 --- a/examples/USER/bocs/log.20Apr18.methanol.g++.4 +++ b/examples/USER/bocs/log.27Nov18.methanol.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Apr 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task units real dimension 3 @@ -21,7 +20,7 @@ pair_style table spline 15000 pair_coeff 1 1 lammps_nb_MET-MET.table nb_METMET 12.0 WARNING: 78 of 2500 force values in table are inconsistent with -dE/dr. - Should only be flagged at inflection points (../pair_table.cpp:481) + Should only be flagged at inflection points (src/pair_table.cpp:481) neigh_modify delay 0 every 1 check yes one 10000 neighbor 12.0 bin @@ -90,54 +89,54 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 3.37 | 3.37 | 3.371 Mbytes Step Temp PotEng TotEng Press Volume 0 300 1061.5961 1926.3291 107.006 66250.679 - 500 314.54728 1034.1091 1940.7738 194.42689 65660.282 - 1000 301.41603 1030.7027 1899.5173 -91.966709 66262.543 - 1500 298.8308 1014.8276 1876.1905 -80.178606 67053.605 - 2000 294.78476 1046.8207 1896.521 50.592942 66316.735 - 2500 301.18564 1033.9214 1902.0719 40.482557 66607.667 - 3000 301.06631 1022.0381 1889.8447 47.582403 66341.947 - 3500 297.98353 989.81011 1848.7308 -204.69823 67462.076 - 4000 299.03465 1034.6603 1896.6108 89.196235 66457.338 - 4500 306.04532 985.37017 1867.5285 -51.094929 67519.735 - 5000 304.72903 1014.9543 1893.3184 -127.04402 67238.517 - 5500 292.52622 1025.6599 1868.8502 -19.753932 66716.551 - 6000 296.82719 1031.5184 1887.1059 -1.2609328 66368.611 - 6500 298.63312 1018.4299 1879.2229 -24.75835 66524.898 - 7000 303.25389 1005.9283 1880.0404 -96.273504 67349.674 - 7500 292.45089 1068.2863 1911.2595 103.23295 65778.08 - 8000 301.22765 1040.6294 1908.9011 -0.83635353 66831.038 - 8500 300.19765 1047.5856 1912.8883 -31.582343 66316.305 - 9000 295.1108 1023.8234 1874.4635 -88.165532 67192.344 - 9500 302.1087 1003.6348 1874.4459 -18.707065 66369.361 - 10000 296.3083 1004.126 1858.2178 -28.293045 66862.576 -Loop time of 28.8053 on 4 procs for 10000 steps with 968 atoms + 500 314.70267 1036.3305 1943.4431 205.83301 65603.85 + 1000 304.99804 1034.15 1913.2896 -79.521176 66268.87 + 1500 305.2621 996.9303 1876.831 -97.93992 67090.442 + 2000 311.29317 1083.9171 1981.2021 119.28085 65589.674 + 2500 305.51905 1051.59 1932.2314 -34.076657 66487.327 + 3000 291.76224 1053.524 1894.5121 45.522919 65879.535 + 3500 297.65792 1017.1041 1875.0862 -79.411904 67185.183 + 4000 285.99141 1042.379 1866.733 88.735986 66356.756 + 4500 295.34218 1071.2977 1922.6048 -17.479073 65381.597 + 5000 292.47 1012.3769 1855.405 -255.07433 67527.215 + 5500 294.04431 1080.4547 1928.0208 192.6588 65811.742 + 6000 300.45893 986.16669 1852.2225 -167.3405 67858.175 + 6500 305.59738 1022.5276 1903.3947 -116.41298 66612.704 + 7000 312.11968 1032.7392 1932.4065 152.17956 66016.299 + 7500 306.80585 1032.1157 1916.4662 51.07705 66875.727 + 8000 292.30957 1048.9003 1891.4661 61.280503 65894.103 + 8500 297.79592 1013.4061 1871.786 -133.01136 66842.574 + 9000 290.36753 1043.7732 1880.7412 65.208248 66010.86 + 9500 288.92211 1077.8835 1910.6851 46.291982 65674.639 + 10000 311.51608 1015.3567 1913.2842 -146.49492 66882.692 +Loop time of 13.9823 on 4 procs for 10000 steps with 968 atoms -Performance: 29.994 ns/day, 0.800 hours/ns, 347.159 timesteps/s -95.2% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 61.792 ns/day, 0.388 hours/ns, 715.190 timesteps/s +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 19.929 | 21.765 | 23.391 | 27.8 | 75.56 -Neigh | 0.067397 | 0.071231 | 0.077313 | 1.5 | 0.25 -Comm | 3.9226 | 5.5183 | 7.3214 | 53.7 | 19.16 -Output | 0.00069928 | 0.0016099 | 0.0043275 | 3.9 | 0.01 -Modify | 1.0874 | 1.1376 | 1.1888 | 4.2 | 3.95 -Other | | 0.3112 | | | 1.08 +Pair | 10.131 | 11.235 | 12.333 | 23.2 | 80.35 +Neigh | 0.044854 | 0.046303 | 0.047541 | 0.5 | 0.33 +Comm | 1.1939 | 2.2964 | 3.4087 | 51.7 | 16.42 +Output | 0.0004735 | 0.0032033 | 0.01137 | 8.3 | 0.02 +Modify | 0.30542 | 0.31846 | 0.32508 | 1.4 | 2.28 +Other | | 0.08323 | | | 0.60 -Nlocal: 242 ave 244 max 239 min +Nlocal: 242 ave 248 max 232 min Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 5718.5 ave 5736 max 5702 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Neighs: 100703 ave 108064 max 93454 min -Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 5845.75 ave 5877 max 5808 min +Histogram: 1 0 0 0 1 0 0 1 0 1 +Neighs: 104313 ave 113860 max 95507 min +Histogram: 1 1 0 0 0 0 0 1 0 1 -Total # of neighbors = 402813 -Ave neighs/atom = 416.129 -Neighbor list builds = 14 +Total # of neighbors = 417252 +Ave neighs/atom = 431.045 +Neighbor list builds = 13 Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:28 +Total wall time: 0:00:14 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/input.duplex1 b/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 similarity index 99% rename from examples/USER/cgdna/examples/oxDNA/duplex1/input.duplex1 rename to examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 index af0f965336..6485312731 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/input.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 @@ -72,6 +72,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 1000000 +run 10000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.1 deleted file mode 100644 index 3afed6b6ce..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.1 +++ /dev/null @@ -1,1161 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 2.859 | 2.859 | 2.859 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 -1000 ekin = 0.00113448721737003 | erot = 0.00413455947734281 | epot = -14.6477022915193 | etot = -14.6424332448246 -2000 ekin = 0.00449927223902336 | erot = 0.0164446434455805 | epot = -14.6633771605337 | etot = -14.6424332448491 -3000 ekin = 0.00997964450841065 | erot = 0.0366523356056461 | epot = -14.6890652250033 | etot = -14.6424332448892 -4000 ekin = 0.0173888111295073 | erot = 0.0643039804300224 | epot = -14.7241260365031 | etot = -14.6424332449436 -5000 ekin = 0.0264744514136619 | erot = 0.0987844033142069 | epot = -14.7676920997383 | etot = -14.6424332450104 -6000 ekin = 0.0369277948556079 | erot = 0.139336571052566 | epot = -14.8186976109956 | etot = -14.6424332450875 -7000 ekin = 0.04839505571915 | erot = 0.185086295692081 | epot = -14.8759145965832 | etot = -14.642433245172 -8000 ekin = 0.0604909336920643 | erot = 0.235071307523532 | epot = -14.9379954864767 | etot = -14.6424332452611 -9000 ekin = 0.0728137406440561 | erot = 0.288273694501538 | epot = -15.003520680497 | etot = -14.6424332453514 -10000 ekin = 0.0849615563085878 | erot = 0.343654369293473 | epot = -15.0710491710418 | etot = -14.6424332454398 -11000 ekin = 0.0965486715045649 | erot = 0.400187932108223 | epot = -15.1391698491357 | etot = -14.6424332455229 -12000 ekin = 0.10722146628289 | erot = 0.456896095459165 | epot = -15.20655080734 | etot = -14.642433245598 -13000 ekin = 0.116672809719548 | erot = 0.512877765427643 | epot = -15.2719838208099 | etot = -14.6424332456627 -14000 ekin = 0.12465407373104 | erot = 0.567333962045116 | epot = -15.3344212814913 | etot = -14.6424332457151 -15000 ekin = 0.13098393968427 | erot = 0.619586028256667 | epot = -15.3930032136954 | etot = -14.6424332457544 -16000 ekin = 0.135553354544872 | erot = 0.669086028489761 | epot = -15.447072628815 | etot = -14.6424332457804 -17000 ekin = 0.138326263958247 | erot = 0.715418858085449 | epot = -15.4961783678372 | etot = -14.6424332457935 -18000 ekin = 0.139336096664052 | erot = 0.758296324627745 | epot = -15.5400656670872 | etot = -14.6424332457954 -19000 ekin = 0.138678360045177 | erot = 0.797544234275864 | epot = -15.5786558401088 | etot = -14.6424332457878 -20000 ekin = 0.136500074655373 | erot = 0.83308420441103 | epot = -15.6120175248394 | etot = -14.642433245773 -21000 ekin = 0.132987065285671 | erot = 0.864912408452581 | epot = -15.6403327194916 | etot = -14.6424332457533 -22000 ekin = 0.128350288213556 | erot = 0.893077649557994 | epot = -15.6638611835027 | etot = -14.6424332457311 -23000 ekin = 0.122812385135508 | erot = 0.917661024683964 | epot = -15.6829066555277 | etot = -14.6424332457083 -24000 ekin = 0.116595521408284 | erot = 0.938759014332096 | epot = -15.6977877814267 | etot = -14.6424332456863 -25000 ekin = 0.109911323474816 | erot = 0.956471207347236 | epot = -15.7088157764882 | etot = -14.6424332456662 -26000 ekin = 0.102953426207644 | erot = 0.970893163953198 | epot = -15.7162798358091 | etot = -14.6424332456483 -27000 ekin = 0.0958928250746637 | erot = 0.982114250194049 | epot = -15.7204403209013 | etot = -14.6424332456326 -28000 ekin = 0.0888759410950343 | erot = 0.990219731539835 | epot = -15.7215289182535 | etot = -14.6424332456186 -29000 ekin = 0.0820250748773376 | erot = 0.995296041202909 | epot = -15.719754361686 | etot = -14.6424332456058 -30000 ekin = 0.0754407616839748 | erot = 0.997437949320991 | epot = -15.7153119565981 | etot = -14.6424332455932 -31000 ekin = 0.0692054432610605 | erot = 0.996756332762285 | epot = -15.7083950216035 | etot = -14.6424332455802 -32000 ekin = 0.0633878377978472 | erot = 0.993385345349211 | epot = -15.699206428713 | etot = -14.6424332455659 -33000 ekin = 0.0580474070871663 | erot = 0.987487973309961 | epot = -15.6879686259471 | etot = -14.64243324555 -34000 ekin = 0.0532383791888181 | erot = 0.979259192921736 | epot = -15.6749308176426 | etot = -14.642433245532 -35000 ekin = 0.0490128758307997 | erot = 0.968926197407215 | epot = -15.66037231875 | etot = -14.642433245512 -36000 ekin = 0.0454228081410747 | erot = 0.95674540962595 | epot = -15.6446014632576 | etot = -14.6424332454906 -37000 ekin = 0.0425203357176436 | erot = 0.942996238000708 | epot = -15.6279498191869 | etot = -14.6424332454685 -38000 ekin = 0.0403568280949567 | erot = 0.92797176661665 | epot = -15.6107618401582 | etot = -14.6424332454466 -39000 ekin = 0.0389804214212708 | erot = 0.911966804110001 | epot = -15.5933804709572 | etot = -14.642433245426 -40000 ekin = 0.0384324238856422 | erot = 0.8952639595629 | epot = -15.5761296288567 | etot = -14.6424332454081 -41000 ekin = 0.0387429860408521 | erot = 0.878118672838247 | epot = -15.5592949042733 | etot = -14.6424332453942 -42000 ekin = 0.0399266053637504 | erot = 0.860744395135471 | epot = -15.5431042458848 | etot = -14.6424332453856 -43000 ekin = 0.0419781561011205 | erot = 0.843299365355946 | epot = -15.52771076684 | etot = -14.6424332453829 -44000 ekin = 0.0448701894086706 | erot = 0.825876603312506 | epot = -15.5131800381079 | etot = -14.6424332453867 -45000 ekin = 0.0485521857411509 | erot = 0.808498758184836 | epot = -15.4994841893228 | etot = -14.6424332453969 -46000 ekin = 0.0529522094031963 | erot = 0.791119212186772 | epot = -15.4865046670025 | etot = -14.6424332454125 -47000 ekin = 0.0579809824236739 | erot = 0.773630265882115 | epot = -15.4740444937379 | etot = -14.6424332454321 -48000 ekin = 0.063537784649307 | erot = 0.755878310836066 | epot = -15.4618493409392 | etot = -14.6424332454538 -49000 ekin = 0.0695169124457283 | erot = 0.737684732482629 | epot = -15.4496348904038 | etot = -14.6424332454754 -50000 ekin = 0.0758129058454745 | erot = 0.718870126218063 | epot = -15.4371162775588 | etot = -14.6424332454952 -51000 ekin = 0.082322663864191 | erot = 0.69927859951883 | epot = -15.4240345088949 | etot = -14.6424332455119 -52000 ekin = 0.0889431481334984 | erot = 0.67879880709845 | epot = -15.4101752007568 | etot = -14.6424332455248 -53000 ekin = 0.0955646689255781 | erot = 0.657379086769954 | epot = -15.3953770012299 | etot = -14.6424332455344 -54000 ekin = 0.102061477509349 | erot = 0.635035489168609 | epot = -15.3795302122192 | etot = -14.6424332455412 -55000 ekin = 0.108282960174 | erot = 0.611853171347129 | epot = -15.3625693770671 | etot = -14.6424332455459 -56000 ekin = 0.114049426281782 | erot = 0.58798294592476 | epot = -15.3444656177551 | etot = -14.6424332455485 -57000 ekin = 0.119155806186856 | erot = 0.563635255923989 | epot = -15.3252243076595 | etot = -14.6424332455486 -58000 ekin = 0.123384552305436 | erot = 0.539073355224011 | epot = -15.3048911530747 | etot = -14.6424332455453 -59000 ekin = 0.126526300954942 | erot = 0.514606324860975 | epot = -15.2835658713528 | etot = -14.6424332455369 -60000 ekin = 0.128404399836505 | erot = 0.490581338842491 | epot = -15.2614189842015 | etot = -14.6424332455225 -61000 ekin = 0.128898142362338 | erot = 0.46737389240369 | epot = -15.2387052802676 | etot = -14.6424332455016 -62000 ekin = 0.127959880290304 | erot = 0.445374820089083 | epot = -15.2157679458544 | etot = -14.642433245475 -63000 ekin = 0.125622870624957 | erot = 0.424973765390021 | epot = -15.1930298814589 | etot = -14.6424332454439 -64000 ekin = 0.121999044843205 | erot = 0.406539918574829 | epot = -15.1709722088285 | etot = -14.6424332454105 -65000 ekin = 0.117268056619305 | erot = 0.390401831022814 | epot = -15.1501031330194 | etot = -14.6424332453773 -66000 ekin = 0.111660385257246 | erot = 0.376828594080988 | epot = -15.1309222246848 | etot = -14.6424332453465 -67000 ekin = 0.105437746905138 | erot = 0.366014539812675 | epot = -15.1138855320384 | etot = -14.6424332453205 -68000 ekin = 0.0988737375607886 | erot = 0.3580690141562 | epot = -15.0993759970177 | etot = -14.6424332453007 -69000 ekin = 0.0922368286502271 | erot = 0.353011948772473 | epot = -15.0876820227105 | etot = -14.6424332452878 -70000 ekin = 0.085776901527448 | erot = 0.350775174164851 | epot = -15.0789853209745 | etot = -14.6424332452822 -71000 ekin = 0.0797156921642142 | erot = 0.351208844244805 | epot = -15.0733577816926 | etot = -14.6424332452835 -72000 ekin = 0.0742409440406418 | erot = 0.354092037745935 | epot = -15.0707662270776 | etot = -14.6424332452911 -73000 ekin = 0.0695037498701448 | erot = 0.359146526959505 | epot = -15.0710835221334 | etot = -14.6424332453038 -74000 ekin = 0.0656184497423043 | erot = 0.366052769876549 | epot = -15.0741044649392 | etot = -14.6424332453204 -75000 ekin = 0.0626644690389266 | erot = 0.374467290031506 | epot = -15.07956500441 | etot = -14.6424332453396 -76000 ekin = 0.0606895535086054 | erot = 0.384040683400738 | epot = -15.0871634822693 | etot = -14.64243324536 -77000 ekin = 0.0597139401235012 | erot = 0.394435495890075 | epot = -15.0965826813934 | etot = -14.6424332453798 -78000 ekin = 0.059735062986913 | erot = 0.405343151479082 | epot = -15.1075114598642 | etot = -14.6424332453982 -79000 ekin = 0.0607324264355555 | erot = 0.416499017639937 | epot = -15.1196646894892 | etot = -14.6424332454137 -80000 ekin = 0.06267229049498 | erot = 0.427694630236126 | epot = -15.1328001661568 | etot = -14.6424332454257 -81000 ekin = 0.0655118235328765 | erot = 0.438786127846728 | epot = -15.1467311968131 | etot = -14.6424332454335 -82000 ekin = 0.0692024020835893 | erot = 0.449698113828473 | epot = -15.1613337613493 | etot = -14.6424332454372 -83000 ekin = 0.0736917936906618 | erot = 0.460422490738957 | epot = -15.1765475298665 | etot = -14.6424332454369 -84000 ekin = 0.0789250526546722 | erot = 0.471012272293582 | epot = -15.1923705703818 | etot = -14.6424332454336 -85000 ekin = 0.0848440878750035 | erot = 0.481570908649162 | epot = -15.2088482419522 | etot = -14.642433245428 -86000 ekin = 0.0913860133254624 | erot = 0.492238169205216 | epot = -15.2260574279521 | etot = -14.6424332454214 -87000 ekin = 0.0984805441200046 | erot = 0.503174014616525 | epot = -15.2440878041518 | etot = -14.6424332454153 -88000 ekin = 0.106046830304297 | erot = 0.514542076496056 | epot = -15.263022152211 | etot = -14.6424332454106 -89000 ekin = 0.113990204127984 | erot = 0.526494309539207 | epot = -15.2829177590758 | etot = -14.6424332454087 -90000 ekin = 0.122199339151894 | erot = 0.539158097285698 | epot = -15.3037906818477 | etot = -14.6424332454101 -91000 ekin = 0.130544275971403 | erot = 0.552626637865723 | epot = -15.3256041592524 | etot = -14.6424332454152 -92000 ekin = 0.138875666148815 | erot = 0.566952900962156 | epot = -15.3482618125355 | etot = -14.6424332454245 -93000 ekin = 0.147025440614642 | erot = 0.582146933737432 | epot = -15.3716056197897 | etot = -14.6424332454376 -94000 ekin = 0.154808946847822 | erot = 0.598175891801207 | epot = -15.3954180841032 | etot = -14.6424332454542 -95000 ekin = 0.162028449602152 | erot = 0.614965942453837 | epot = -15.4194276375299 | etot = -14.6424332454739 -96000 ekin = 0.168477779667818 | erot = 0.632405154082029 | epot = -15.4433161792459 | etot = -14.642433245496 -97000 ekin = 0.17394786302672 | erot = 0.650346631628325 | epot = -15.4667277401752 | etot = -14.6424332455201 -98000 ekin = 0.178232875004242 | erot = 0.668611435745948 | epot = -15.4892775562957 | etot = -14.6424332455455 -99000 ekin = 0.181136831926353 | erot = 0.686991165056211 | epot = -15.5105612425543 | etot = -14.6424332455718 -100000 ekin = 0.182480533643598 | erot = 0.705250413407778 | epot = -15.5301641926495 | etot = -14.6424332455981 -101000 ekin = 0.182108871451935 | erot = 0.723129571003179 | epot = -15.547671688079 | etot = -14.6424332456239 -102000 ekin = 0.179898581170268 | erot = 0.740348571090314 | epot = -15.5626803979088 | etot = -14.6424332456482 -103000 ekin = 0.175766517608084 | erot = 0.756612167825837 | epot = -15.5748119311039 | etot = -14.64243324567 -104000 ekin = 0.169678431535445 | erot = 0.771617166851602 | epot = -15.5837288440751 | etot = -14.6424332456881 -105000 ekin = 0.161658036036865 | erot = 0.785061742962005 | epot = -15.5891530247 | etot = -14.6424332457012 -106000 ekin = 0.151795867650478 | erot = 0.796656613424597 | epot = -15.5908857267829 | etot = -14.6424332457078 -107000 ekin = 0.140257112952727 | erot = 0.806137449197231 | epot = -15.5888278078568 | etot = -14.6424332457068 -108000 ekin = 0.127287240201241 | erot = 0.813277564481104 | epot = -15.5829980503796 | etot = -14.6424332456973 -109000 ekin = 0.113214025490917 | erot = 0.817899691734432 | epot = -15.573546962904 | etot = -14.6424332456787 -110000 ekin = 0.0984444823805213 | erot = 0.819885578053921 | epot = -15.5607633060856 | etot = -14.6424332456512 -111000 ekin = 0.0834553769364569 | erot = 0.819182262545785 | epot = -15.545070885098 | etot = -14.6424332456157 -112000 ekin = 0.0687764915871027 | erot = 0.815804215094415 | epot = -15.5270139522555 | etot = -14.642433245574 -113000 ekin = 0.0549665904028903 | erot = 0.809830999844441 | epot = -15.5072308357759 | etot = -14.6424332455285 -114000 ekin = 0.0425830583120619 | erot = 0.801400700350953 | epot = -15.4864170041452 | etot = -14.6424332454821 -115000 ekin = 0.032147280213263 | erot = 0.790699910049051 | epot = -15.4652804357003 | etot = -14.642433245438 -116000 ekin = 0.024108778034577 | erot = 0.777951546674724 | epot = -15.4444935701085 | etot = -14.6424332453992 -117000 ekin = 0.0188117102728931 | erot = 0.763402004774069 | epot = -15.4246469604154 | etot = -14.6424332453684 -118000 ekin = 0.0164673894159043 | erot = 0.747309167856945 | epot = -15.4062098026203 | etot = -14.6424332453474 -119000 ekin = 0.0171359296532898 | erot = 0.729932564575393 | epot = -15.3895017395657 | etot = -14.642433245337 -120000 ekin = 0.0207190822430497 | erot = 0.711526526250247 | epot = -15.3746788538305 | etot = -14.6424332453372 -121000 ekin = 0.0269649552319816 | erot = 0.692336677373422 | epot = -15.3617348779522 | etot = -14.6424332453468 -122000 ekin = 0.0354839220297736 | erot = 0.672599570214091 | epot = -15.3505167376079 | etot = -14.642433245364 -123000 ekin = 0.0457738626451366 | erot = 0.652544850165416 | epot = -15.3407519581971 | etot = -14.6424332453865 -124000 ekin = 0.0572521324296466 | erot = 0.632399068066114 | epot = -15.3320844459074 | etot = -14.6424332454117 -125000 ekin = 0.0692913736002564 | erot = 0.612390156186006 | epot = -15.324114775223 | etot = -14.6424332454368 -126000 ekin = 0.0812564128172846 | erot = 0.592751635109578 | epot = -15.3164412933862 | etot = -14.6424332454593 -127000 ekin = 0.0925398817823717 | erot = 0.573725774407888 | epot = -15.3086989016675 | etot = -14.6424332454772 -128000 ekin = 0.102594692018529 | erot = 0.55556513894369 | epot = -15.3005930764509 | etot = -14.6424332454887 -129000 ekin = 0.110961953873462 | erot = 0.538532171478003 | epot = -15.291927370844 | etot = -14.6424332454925 -130000 ekin = 0.117293279472125 | erot = 0.52289666445339 | epot = -15.2826231894136 | etot = -14.642433245488 -131000 ekin = 0.121366644774014 | erot = 0.508931150171021 | epot = -15.2727310404203 | etot = -14.6424332454752 -132000 ekin = 0.123095155538848 | erot = 0.49690439090507 | epot = -15.2624327918984 | etot = -14.6424332454545 -133000 ekin = 0.122528239670491 | erot = 0.487073282996463 | epot = -15.2520347680938 | etot = -14.6424332454268 -134000 ekin = 0.119845042600695 | erot = 0.47967360116923 | epot = -15.2419518891638 | etot = -14.6424332453939 -135000 ekin = 0.115340171966309 | erot = 0.474910093714588 | epot = -15.2326835110385 | etot = -14.6424332453576 -136000 ekin = 0.10940241928465 | erot = 0.472946484072521 | epot = -15.2247821486777 | etot = -14.6424332453205 -137000 ekin = 0.102487634021818 | erot = 0.473895929917005 | epot = -15.2188168092237 | etot = -14.6424332452849 -138000 ekin = 0.0950874634047233 | erot = 0.477812435582745 | epot = -15.2153331442409 | etot = -14.6424332452534 -139000 ekin = 0.0876961121512815 | erot = 0.484683617748011 | epot = -15.2148129751279 | etot = -14.6424332452286 -140000 ekin = 0.0807775418431626 | erot = 0.494425108537478 | epot = -15.2176358955931 | etot = -14.6424332452125 -141000 ekin = 0.0747355681577817 | erot = 0.50687677080795 | epot = -15.2240455841725 | etot = -14.6424332452068 -142000 ekin = 0.0698891098450116 | erot = 0.521800821238808 | epot = -15.2341231762965 | etot = -14.6424332452127 -143000 ekin = 0.0664544171866063 | erot = 0.538881922424094 | epot = -15.2477695848413 | etot = -14.6424332452306 -144000 ekin = 0.0645355104692083 | erot = 0.557729316020225 | epot = -15.2646980717496 | etot = -14.6424332452602 -145000 ekin = 0.0641233595162911 | erot = 0.577881111412627 | epot = -15.2844377162297 | etot = -14.6424332453008 -146000 ekin = 0.0651036077515188 | erot = 0.598810893851628 | epot = -15.3063477469538 | etot = -14.6424332453507 -147000 ekin = 0.0672719578973601 | erot = 0.619936843681753 | epot = -15.3296420469868 | etot = -14.6424332454077 -148000 ekin = 0.0703557492692045 | erot = 0.640633538190902 | epot = -15.3534225329294 | etot = -14.6424332454693 -149000 ekin = 0.0740398128642427 | erot = 0.660246523237691 | epot = -15.3767195816347 | etot = -14.6424332455328 -150000 ekin = 0.0779944201058678 | erot = 0.678109590376156 | epot = -15.398537256077 | etot = -14.642433245595 -151000 ekin = 0.0819030604172323 | erot = 0.693564488648094 | epot = -15.4179007947185 | etot = -14.6424332456531 -152000 ekin = 0.0854878938552624 | erot = 0.705982563003889 | epot = -15.4339037025634 | etot = -14.6424332457043 -153000 ekin = 0.0885310147328532 | erot = 0.714787575382088 | epot = -15.4457518358609 | etot = -14.6424332457459 -154000 ekin = 0.0908901012887555 | erot = 0.719478762727528 | epot = -15.4528021097924 | etot = -14.6424332457761 -155000 ekin = 0.092507570371455 | erot = 0.719653046097721 | epot = -15.4545938622626 | etot = -14.6424332457934 -156000 ekin = 0.0934129479728847 | erot = 0.715025243753982 | epot = -15.4508714375239 | etot = -14.642433245797 -157000 ekin = 0.0937187435779626 | erot = 0.705445163946324 | epot = -15.4415971533109 | etot = -14.6424332457866 -158000 ekin = 0.0936106185393401 | erot = 0.690910554325706 | epot = -15.4269544186278 | etot = -14.6424332457627 -159000 ekin = 0.0933330174010987 | erot = 0.671575051659785 | epot = -15.4073413147871 | etot = -14.6424332457262 -160000 ekin = 0.0931716565242322 | erot = 0.647750492120645 | epot = -15.3833553943234 | etot = -14.6424332456785 -161000 ekin = 0.0934343296231438 | erot = 0.619903194016586 | epot = -15.3557707692612 | etot = -14.6424332456215 -162000 ekin = 0.0944314104804186 | erot = 0.588644098979611 | epot = -15.3255087550173 | etot = -14.6424332455572 -163000 ekin = 0.0964572425739502 | erot = 0.55471294345392 | epot = -15.2936034315161 | etot = -14.6424332454882 -164000 ekin = 0.0997733472806136 | erot = 0.518956918561936 | epot = -15.2611635112594 | etot = -14.6424332454169 -165000 ekin = 0.104594102019911 | erot = 0.482304549422426 | epot = -15.2293318967882 | etot = -14.6424332453459 -166000 ekin = 0.11107527651625 | erot = 0.445735768512381 | epot = -15.1992442903065 | etot = -14.6424332452778 -167000 ekin = 0.11930559751358 | erot = 0.410249354728318 | epot = -15.1719881974571 | etot = -14.6424332452152 -168000 ekin = 0.129301354725086 | erot = 0.37682904617874 | epot = -15.1485636460642 | etot = -14.6424332451604 -169000 ekin = 0.14100396578975 | erot = 0.346409702527097 | epot = -15.1298469134321 | etot = -14.6424332451152 -170000 ekin = 0.154280377439942 | erot = 0.319844892417961 | epot = -15.1165585149394 | etot = -14.6424332450815 -171000 ekin = 0.168926178621544 | erot = 0.297877221606916 | epot = -15.109236645289 | etot = -14.6424332450606 -172000 ekin = 0.184671319364511 | erot = 0.281112611137243 | epot = -15.108217175555 | etot = -14.6424332450532 -173000 ekin = 0.201188345437118 | erot = 0.269999595570268 | epot = -15.1136211860672 | etot = -14.6424332450598 -174000 ekin = 0.218103052207035 | erot = 0.264814547402982 | epot = -15.12535084469 | etot = -14.6424332450799 -175000 ekin = 0.235007413035623 | erot = 0.265653545950115 | epot = -15.1430942040986 | etot = -14.6424332451129 -176000 ekin = 0.251474534267915 | erot = 0.272431389432266 | epot = -15.1663391688573 | etot = -14.6424332451571 -177000 ekin = 0.267075225143436 | erot = 0.284887984978803 | epot = -15.1943964553329 | etot = -14.6424332452107 -178000 ekin = 0.281395553895287 | erot = 0.302602030915412 | epot = -15.2264308300819 | etot = -14.6424332452712 -179000 ekin = 0.294054514411866 | erot = 0.325011526057904 | epot = -15.2614992858055 | etot = -14.6424332453358 -180000 ekin = 0.304720692896942 | erot = 0.351440214935852 | epot = -15.2985941532343 | etot = -14.6424332454015 -181000 ekin = 0.313126658918426 | erot = 0.381128639602688 | epot = -15.3366885439866 | etot = -14.6424332454655 -182000 ekin = 0.319079775823621 | erot = 0.413268071114152 | epot = -15.374781092463 | etot = -14.6424332455252 -183000 ekin = 0.322468290005762 | erot = 0.447035301736728 | epot = -15.4119368373208 | etot = -14.6424332455783 -184000 ekin = 0.323261947554671 | erot = 0.48162615508044 | epot = -15.4473213482583 | etot = -14.6424332456231 -185000 ekin = 0.321506983530827 | erot = 0.516285658867815 | epot = -15.4802258880574 | etot = -14.6424332456588 -186000 ekin = 0.317316057633682 | erot = 0.550333132629112 | epot = -15.5100824359478 | etot = -14.642433245685 -187000 ekin = 0.310854440590084 | erot = 0.583180936761968 | epot = -15.5364686230541 | etot = -14.642433245702 -188000 ekin = 0.302324329763947 | erot = 0.614346238385429 | epot = -15.55910381386 | etot = -14.6424332457106 -189000 ekin = 0.291949445197116 | erot = 0.64345577901281 | epot = -15.5778384699217 | etot = -14.6424332457118 -190000 ekin = 0.279961942768254 | erot = 0.67024418570442 | epot = -15.5926393741794 | etot = -14.6424332457067 -191000 ekin = 0.266593185653664 | erot = 0.694546781233348 | epot = -15.6035732125832 | etot = -14.6424332456962 -192000 ekin = 0.252069141623363 | erot = 0.716288088786984 | epot = -15.6107904760917 | etot = -14.6424332456814 -193000 ekin = 0.236610293254145 | erot = 0.735467302242536 | epot = -15.6145108411597 | etot = -14.642433245663 -194000 ekin = 0.22043514940511 | erot = 0.75214194302714 | epot = -15.615010338074 | etot = -14.6424332456418 -195000 ekin = 0.20376588009334 | erot = 0.76641079902996 | epot = -15.6126099247417 | etot = -14.6424332456184 -196000 ekin = 0.186834339037366 | erot = 0.778397083250806 | epot = -15.6076646678817 | etot = -14.6424332455935 -197000 ekin = 0.169886782294183 | erot = 0.788232586070618 | epot = -15.6005526139326 | etot = -14.6424332455678 -198000 ekin = 0.153185871077985 | erot = 0.796043434538987 | epot = -15.5916625511591 | etot = -14.6424332455421 -199000 ekin = 0.137008972987403 | erot = 0.801937915798979 | epot = -15.581380134304 | etot = -14.6424332455176 -200000 ekin = 0.121642272364804 | erot = 0.805996673261661 | epot = -15.5700721911217 | etot = -14.6424332454953 -201000 ekin = 0.107370722656483 | erot = 0.808265456806726 | epot = -15.5580694249396 | etot = -14.6424332454764 -202000 ekin = 0.0944644042392164 | erot = 0.808750524310001 | epot = -15.5456481740113 | etot = -14.6424332454621 -203000 ekin = 0.0831623790893979 | erot = 0.807416772443554 | epot = -15.5330123969865 | etot = -14.6424332454535 -204000 ekin = 0.0736556272335549 | erot = 0.80418872541979 | epot = -15.5202775981049 | etot = -14.6424332454516 -205000 ekin = 0.0660710401675949 | erot = 0.79895460735586 | epot = -15.50745889298 | etot = -14.6424332454565 -206000 ekin = 0.0604586317681684 | erot = 0.791573809424189 | epot = -15.4944656866607 | etot = -14.6424332454683 -207000 ekin = 0.0567840026883034 | erot = 0.781888054798422 | epot = -15.4811053029728 | etot = -14.642433245486 -208000 ekin = 0.0549275971601569 | erot = 0.769736381379661 | epot = -15.4670972240478 | etot = -14.642433245508 -209000 ekin = 0.054691444753805 | erot = 0.754973659533912 | epot = -15.4520983498196 | etot = -14.6424332455319 -210000 ekin = 0.055813012677523 | erot = 0.737491764374765 | epot = -15.4357380226072 | etot = -14.6424332455549 -211000 ekin = 0.0579847210238433 | erot = 0.717241838880031 | epot = -15.417659805478 | etot = -14.6424332455742 -212000 ekin = 0.0608768356205362 | erot = 0.694255492639193 | epot = -15.3975655738466 | etot = -14.6424332455869 -213000 ekin = 0.06416104270831 | erot = 0.668662476163316 | epot = -15.3752567644624 | etot = -14.6424332455907 -214000 ekin = 0.0675321043587428 | erot = 0.64070249551798 | epot = -15.3506678454611 | etot = -14.6424332455844 -215000 ekin = 0.070725533636788 | erot = 0.610729417267909 | epot = -15.3238881964721 | etot = -14.6424332455674 -216000 ekin = 0.0735300437834057 | erot = 0.579207054837054 | epot = -15.2951703441606 | etot = -14.6424332455401 -217000 ekin = 0.0757943994895767 | erot = 0.546696813208958 | epot = -15.2649244582023 | etot = -14.6424332455037 -218000 ekin = 0.0774290394184473 | erot = 0.513838451215592 | epot = -15.2337007360942 | etot = -14.6424332454601 -219000 ekin = 0.0784033323161932 | erot = 0.481325894960063 | epot = -15.2021624726878 | etot = -14.6424332454116 -220000 ekin = 0.0787395495628362 | erot = 0.449880299616975 | epot = -15.1710530945401 | etot = -14.6424332453603 -221000 ekin = 0.0785046319692606 | erot = 0.420222425154575 | epot = -15.1411603024325 | etot = -14.6424332453087 -222000 ekin = 0.0778006814288784 | erot = 0.393045972165179 | epot = -15.1132798988531 | etot = -14.642433245259 -223000 ekin = 0.0767549035403029 | erot = 0.368992968905302 | epot = -15.0881811176588 | etot = -14.6424332452132 -224000 ekin = 0.0755095293719489 | erot = 0.348631757026569 | epot = -15.0665745315716 | etot = -14.6424332451731 -225000 ekin = 0.0742120885680923 | erot = 0.332437700423116 | epot = -15.0490830341315 | etot = -14.6424332451403 -226000 ekin = 0.0730063028703669 | erot = 0.320776497496383 | epot = -15.0362160454828 | etot = -14.6424332451161 -227000 ekin = 0.072023814088989 | erot = 0.313889923623787 | epot = -15.0283469828147 | etot = -14.642433245102 -228000 ekin = 0.0713769419944175 | erot = 0.31188394524302 | epot = -15.025694132336 | etot = -14.6424332450985 -229000 ekin = 0.0711526728859894 | erot = 0.314719386436074 | epot = -15.0283053044287 | etot = -14.6424332451066 -230000 ekin = 0.0714080974064438 | erot = 0.322205638587393 | epot = -15.0360469811206 | etot = -14.6424332451268 -231000 ekin = 0.0721675361185073 | erot = 0.333998222200335 | epot = -15.0485990034776 | etot = -14.6424332451588 -232000 ekin = 0.073421602289788 | erot = 0.349601270465542 | epot = -15.0654561179573 | etot = -14.6424332452019 -233000 ekin = 0.0751284397495051 | erot = 0.368376135876568 | epot = -15.0859378208814 | etot = -14.6424332452553 -234000 ekin = 0.0772173235430231 | erot = 0.389557254435346 | epot = -15.1092078232955 | etot = -14.6424332453172 -235000 ekin = 0.0795947059788063 | erot = 0.412276079792834 | epot = -15.1343040311561 | etot = -14.6424332453845 -236000 ekin = 0.0821526186131156 | erot = 0.435593295650787 | epot = -15.1601791597182 | etot = -14.6424332454543 -237000 ekin = 0.084779101422344 | erot = 0.458538653868273 | epot = -15.1857510008135 | etot = -14.6424332455229 -238000 ekin = 0.0873700423841441 | erot = 0.480156759890549 | epot = -15.2099600478608 | etot = -14.6424332455861 -239000 ekin = 0.0898415153120331 | erot = 0.499556095556538 | epot = -15.2318308565087 | etot = -14.6424332456401 -240000 ekin = 0.0921414623518645 | erot = 0.515957735404849 | epot = -15.2505324434381 | etot = -14.6424332456814 -241000 ekin = 0.0942594490127862 | erot = 0.528739776890127 | epot = -15.2654324716098 | etot = -14.6424332457069 -242000 ekin = 0.0962332805866192 | erot = 0.537473606139427 | epot = -15.276140132441 | etot = -14.6424332457149 -243000 ekin = 0.0981515319325858 | erot = 0.541948785982857 | epot = -15.2825335636204 | etot = -14.642433245705 -244000 ekin = 0.100151482350114 | erot = 0.542184479376275 | epot = -15.2847692074041 | etot = -14.6424332456777 -245000 ekin = 0.102412491094951 | erot = 0.538426702319034 | epot = -15.2832724390489 | etot = -14.642433245635 -246000 ekin = 0.105145395544293 | erot = 0.531132085866979 | epot = -15.2787107269906 | etot = -14.6424332455793 -247000 ekin = 0.108578961411821 | erot = 0.52093999420686 | epot = -15.271952201133 | etot = -14.6424332455143 -248000 ekin = 0.112944688754725 | erot = 0.50863565229471 | epot = -15.2640135864931 | etot = -14.6424332454436 -249000 ekin = 0.118461348905719 | erot = 0.495107336752391 | epot = -15.2560019310293 | etot = -14.6424332453712 -250000 ekin = 0.125320510714173 | erot = 0.481300713195434 | epot = -15.2490544692103 | etot = -14.6424332453007 -251000 ekin = 0.133674056956427 | erot = 0.468173145421896 | epot = -15.2442804476139 | etot = -14.6424332452356 -252000 ekin = 0.143624355874461 | erot = 0.456650355971834 | epot = -15.2427079570251 | etot = -14.6424332451788 -253000 ekin = 0.155217400156353 | erot = 0.447587277163379 | epot = -15.2452379224523 | etot = -14.6424332451326 -254000 ekin = 0.168438906846637 | erot = 0.441734376015244 | epot = -15.2526065279605 | etot = -14.6424332450987 -255000 ekin = 0.183213121646734 | erot = 0.439710227351439 | epot = -15.2653565940763 | etot = -14.6424332450781 -256000 ekin = 0.199403908834921 | erot = 0.441980689731424 | epot = -15.283817843638 | etot = -14.6424332450717 -257000 ekin = 0.216817638464824 | erot = 0.448844730303074 | epot = -15.3080956138475 | etot = -14.6424332450796 -258000 ekin = 0.235207399038843 | erot = 0.460426746273175 | epot = -15.3380673904137 | etot = -14.6424332451017 -259000 ekin = 0.254278151369354 | erot = 0.476675120646266 | epot = -15.3733865171527 | etot = -14.6424332451371 -260000 ekin = 0.273692576680278 | erot = 0.497366691704049 | epot = -15.4134925135692 | etot = -14.6424332451849 -261000 ekin = 0.293077534076593 | erot = 0.522116767902341 | epot = -15.4576275472227 | etot = -14.6424332452438 -262000 ekin = 0.312031202024041 | erot = 0.550394247117889 | epot = -15.5048586944538 | etot = -14.6424332453119 -263000 ekin = 0.330131107619666 | erot = 0.58154128199589 | epot = -15.5541056350029 | etot = -14.6424332453873 -264000 ekin = 0.346943319973835 | erot = 0.614796773442864 | epot = -15.6041733388843 | etot = -14.6424332454676 -265000 ekin = 0.36203307825833 | erot = 0.649322794992431 | epot = -15.6537891188012 | etot = -14.6424332455505 -266000 ekin = 0.374977027500473 | erot = 0.684232889055386 | epot = -15.7016431621889 | etot = -14.6424332456331 -267000 ekin = 0.385377045185273 | erot = 0.718621072058621 | epot = -15.7464313629566 | etot = -14.6424332457127 -268000 ekin = 0.392875374680177 | erot = 0.751590369461549 | epot = -15.7868989899282 | etot = -14.6424332457865 -269000 ekin = 0.397170471139152 | erot = 0.782279784272065 | epot = -15.8218835012632 | etot = -14.6424332458519 -270000 ekin = 0.398032662028036 | erot = 0.809888771673587 | epot = -15.8503546796086 | etot = -14.642433245907 -271000 ekin = 0.395318487598681 | erot = 0.833698516709737 | epot = -15.8714502502579 | etot = -14.6424332459495 -272000 ekin = 0.388982474352113 | erot = 0.853089551908481 | epot = -15.8845052722386 | etot = -14.642433245978 -273000 ekin = 0.379085147931406 | erot = 0.867555470405084 | epot = -15.8890738643282 | etot = -14.6424332459917 -274000 ekin = 0.36579632219322 | erot = 0.876712662629334 | epot = -15.8849422308128 | etot = -14.6424332459903 -275000 ekin = 0.349393082921511 | erot = 0.880306121913819 | epot = -15.8721324508092 | etot = -14.6424332459739 -276000 ekin = 0.330252358905648 | erot = 0.878211432148985 | epot = -15.8508970369982 | etot = -14.6424332459435 -277000 ekin = 0.308838461220188 | erot = 0.870433084876957 | epot = -15.8217047919976 | etot = -14.6424332459005 -278000 ekin = 0.285686394604086 | erot = 0.857099294885159 | epot = -15.7852189353358 | etot = -14.6424332458466 -279000 ekin = 0.261382042766412 | erot = 0.838453513181032 | epot = -15.7422688017312 | etot = -14.6424332457837 -280000 ekin = 0.23654047332595 | erot = 0.814842890587961 | epot = -15.6938166096284 | etot = -14.6424332457145 -281000 ekin = 0.211783602608016 | erot = 0.78670403285839 | epot = -15.6409208811076 | etot = -14.6424332456411 -282000 ekin = 0.187718337271894 | erot = 0.754546508157669 | epot = -15.5846980909958 | etot = -14.6424332455662 -283000 ekin = 0.164916115090795 | erot = 0.718934708845181 | epot = -15.5262840694281 | etot = -14.6424332454921 -284000 ekin = 0.143894549221715 | erot = 0.680468811939352 | epot = -15.4667966065823 | etot = -14.6424332454213 -285000 ekin = 0.125101678372295 | erot = 0.639765701847641 | epot = -15.4073006255757 | etot = -14.6424332453557 -286000 ekin = 0.108903164107394 | erot = 0.597440790010453 | epot = -15.3487771994148 | etot = -14.6424332452969 -287000 ekin = 0.0955726645551815 | erot = 0.554091668604978 | epot = -15.2920975784066 | etot = -14.6424332452464 -288000 ekin = 0.0852855448006968 | erot = 0.510284456822097 | epot = -15.2380032468277 | etot = -14.6424332452049 -289000 ekin = 0.07811604131029 | erot = 0.466543535623142 | epot = -15.1870928221065 | etot = -14.6424332451731 -290000 ekin = 0.0740379578618433 | erot = 0.423345127589082 | epot = -15.1398163306018 | etot = -14.6424332451509 -291000 ekin = 0.072928910063375 | erot = 0.381114879437431 | epot = -15.0964770346385 | etot = -14.6424332451377 -292000 ekin = 0.0745780357927571 | erot = 0.340229271737873 | epot = -15.0572405526631 | etot = -14.6424332451325 -293000 ekin = 0.0786969407539254 | erot = 0.301020346548472 | epot = -15.0221505324365 | etot = -14.6424332451341 -294000 ekin = 0.0849334564702411 | erot = 0.263782947588667 | epot = -14.9911496491996 | etot = -14.6424332451407 -295000 ekin = 0.0928875723607584 | erot = 0.228783448806939 | epot = -14.9641042663184 | etot = -14.6424332451507 -296000 ekin = 0.102128697507195 | erot = 0.19626884038738 | epot = -14.9408307830571 | etot = -14.6424332451625 -297000 ekin = 0.112213252496717 | erot = 0.166475068218863 | epot = -14.9211215658901 | etot = -14.6424332451745 -298000 ekin = 0.122701527066801 | erot = 0.139633685446912 | epot = -14.9047684576991 | etot = -14.6424332451854 -299000 ekin = 0.13317279291057 | erot = 0.115976150690173 | epot = -14.8915821887951 | etot = -14.6424332451943 -300000 ekin = 0.143237839707087 | erot = 0.0957354521215326 | epot = -14.8814065370293 | etot = -14.6424332452007 -301000 ekin = 0.152548387988438 | erot = 0.0791450908732747 | epot = -14.8741267240661 | etot = -14.6424332452044 -302000 ekin = 0.160803184299453 | erot = 0.0664357608561943 | epot = -14.8696721903613 | etot = -14.6424332452057 -303000 ekin = 0.167750948486611 | erot = 0.0578302677257495 | epot = -14.868014461417 | etot = -14.6424332452046 -304000 ekin = 0.173190665587053 | erot = 0.0535373136372916 | epot = -14.8691612244265 | etot = -14.6424332452022 -305000 ekin = 0.176969952948865 | erot = 0.0537447402909072 | epot = -14.8731479384385 | etot = -14.6424332451988 -306000 ekin = 0.178982363290529 | erot = 0.0586126977876584 | epot = -14.8800283062732 | etot = -14.642433245195 -307000 ekin = 0.179164502944002 | erot = 0.0682670321056827 | epot = -14.8898647802413 | etot = -14.6424332451916 -308000 ekin = 0.177493763288021 | erot = 0.0827930029186529 | epot = -14.9027200113955 | etot = -14.6424332451889 -309000 ekin = 0.173987301150961 | erot = 0.102229291870645 | epot = -14.9186498382089 | etot = -14.6424332451873 -310000 ekin = 0.168702678647172 | erot = 0.126562162216051 | epot = -14.9376980860502 | etot = -14.642433245187 -311000 ekin = 0.16174029700891 | erot = 0.155719593406526 | epot = -14.9598931356034 | etot = -14.642433245188 -312000 ekin = 0.15324744012492 | erot = 0.189565237977728 | epot = -14.985245923293 | etot = -14.6424332451904 -313000 ekin = 0.14342338999696 | erot = 0.227892126760383 | epot = -15.0137487619518 | etot = -14.6424332451944 -314000 ekin = 0.132524706018464 | erot = 0.270416174780403 | epot = -15.0453741259986 | etot = -14.6424332451998 -315000 ekin = 0.120869409552541 | erot = 0.31676970828902 | epot = -15.0800723630488 | etot = -14.6424332452072 -316000 ekin = 0.108838546104728 | erot = 0.366495437994318 | epot = -15.1177672293161 | etot = -14.642433245217 -317000 ekin = 0.0968734934277246 | erot = 0.419041536809129 | epot = -15.1583482754668 | etot = -14.6424332452299 -318000 ekin = 0.0854675378549793 | erot = 0.47375872576408 | epot = -15.2016595088657 | etot = -14.6424332452467 -319000 ekin = 0.0751507271451901 | erot = 0.529900497448216 | epot = -15.247484469862 | etot = -14.6424332452686 -320000 ekin = 0.0664678443364345 | erot = 0.586627760739854 | epot = -15.2955288503729 | etot = -14.6424332452966 -321000 ekin = 0.0599504590563252 | erot = 0.643019202691537 | epot = -15.3454029070798 | etot = -14.6424332453319 -322000 ekin = 0.0560852142800011 | erot = 0.698088453267024 | epot = -15.3966069129217 | etot = -14.6424332453747 -323000 ekin = 0.0552815181248971 | erot = 0.750808639916102 | epot = -15.4485234034659 | etot = -14.6424332454249 -324000 ekin = 0.057842325520568 | erot = 0.800144112657426 | epot = -15.5004196836595 | etot = -14.6424332454815 -325000 ekin = 0.0639414864634492 | erot = 0.845088070114938 | epot = -15.5514628021208 | etot = -14.6424332455424 -326000 ekin = 0.0736101694210054 | erot = 0.884703689967212 | epot = -15.6007471049934 | etot = -14.6424332456052 -327000 ekin = 0.0867333560896964 | erot = 0.91816541981297 | epot = -15.6473320215697 | etot = -14.642433245667 -328000 ekin = 0.103055779603987 | erot = 0.944796600223873 | epot = -15.6902856255527 | etot = -14.6424332457249 -329000 ekin = 0.12219544617078 | erot = 0.964099781594463 | epot = -15.7287284735416 | etot = -14.6424332457764 -330000 ekin = 0.143662406710238 | erot = 0.975776996237359 | epot = -15.7618726487672 | etot = -14.6424332458196 -331000 ekin = 0.166880785133575 | erot = 0.979738667517989 | epot = -15.7890526985047 | etot = -14.6424332458532 -332000 ekin = 0.191212923969923 | erot = 0.976101405902871 | epot = -15.8097475757491 | etot = -14.6424332458763 -333000 ekin = 0.215985355319577 | erot = 0.965176233539036 | epot = -15.8235948347474 | etot = -14.6424332458887 -334000 ekin = 0.240516656831147 | erot = 0.947449485112495 | epot = -15.8303993878336 | etot = -14.64243324589 -335000 ekin = 0.264146896086235 | erot = 0.923558676868035 | epot = -15.8301388188342 | etot = -14.6424332458799 -336000 ekin = 0.286267467754231 | erot = 0.894265184760612 | epot = -15.8229658983734 | etot = -14.6424332458586 -337000 ekin = 0.306349134750088 | erot = 0.860424939336672 | epot = -15.809207319913 | etot = -14.6424332458262 -338000 ekin = 0.323965497674696 | erot = 0.822957838322753 | epot = -15.7893565817813 | etot = -14.6424332457838 -339000 ekin = 0.338809250788985 | erot = 0.782816380150479 | epot = -15.7640588766724 | etot = -14.6424332457329 -340000 ekin = 0.35069944423374 | erot = 0.740954141303117 | epot = -15.7340868312125 | etot = -14.6424332456757 -341000 ekin = 0.359579293536495 | erot = 0.698295027831847 | epot = -15.700307566983 | etot = -14.6424332456147 -342000 ekin = 0.365505462154926 | erot = 0.655704542034982 | epot = -15.6636432497426 | etot = -14.6424332455527 -343000 ekin = 0.368630832661383 | erot = 0.613964463465552 | epot = -15.6250285416195 | etot = -14.6424332454926 -344000 ekin = 0.369183369589215 | erot = 0.573752273080787 | epot = -15.5853688881069 | etot = -14.6424332454369 -345000 ekin = 0.367443732824289 | erot = 0.535626361233146 | epot = -15.5455033394448 | etot = -14.6424332453874 -346000 ekin = 0.36372393313177 | erot = 0.500017626276193 | epot = -15.5061748047535 | etot = -14.6424332453455 -347000 ekin = 0.358348705277679 | erot = 0.467227585427262 | epot = -15.4680095360169 | etot = -14.642433245312 -348000 ekin = 0.351640582954838 | erot = 0.437432666908102 | epot = -15.4315064951499 | etot = -14.642433245287 -349000 ekin = 0.343909024694815 | erot = 0.410693986169929 | epot = -15.3970362561344 | etot = -14.6424332452696 -350000 ekin = 0.335443435968793 | erot = 0.386971649880727 | epot = -15.3648483311092 | etot = -14.6424332452597 -351000 ekin = 0.326509584093778 | erot = 0.366142474251511 | epot = -15.3350853036005 | etot = -14.6424332452552 -352000 ekin = 0.317348699022207 | erot = 0.34801993040111 | epot = -15.3078018746784 | etot = -14.6424332452551 -353000 ekin = 0.30817846664876 | erot = 0.332375117501944 | epot = -15.2829868294085 | etot = -14.6424332452578 -354000 ekin = 0.299195119854399 | erot = 0.318957598139001 | epot = -15.2605859632553 | etot = -14.6424332452619 -355000 ekin = 0.290575888248862 | erot = 0.307515001370356 | epot = -15.2405241348854 | etot = -14.6424332452662 -356000 ekin = 0.282481160312497 | erot = 0.29781040621721 | epot = -15.2227248117992 | etot = -14.6424332452695 -357000 ekin = 0.275055828993789 | erot = 0.289636664277857 | epot = -15.2071257385429 | etot = -14.6424332452713 -358000 ekin = 0.26842942725494 | erot = 0.282827006912222 | epot = -15.1936896794383 | etot = -14.6424332452711 -359000 ekin = 0.262714810201762 | erot = 0.277261507858003 | epot = -15.1824095633288 | etot = -14.642433245269 -360000 ekin = 0.258005302569436 | erot = 0.272869227748658 | epot = -15.1733077755836 | etot = -14.6424332452655 -361000 ekin = 0.254370400621781 | erot = 0.269626137802017 | epot = -15.1664297836851 | etot = -14.6424332452613 -362000 ekin = 0.251850290178651 | erot = 0.267549186087959 | epot = -15.1618327215239 | etot = -14.6424332452573 -363000 ekin = 0.250449609862751 | erot = 0.266687109597485 | epot = -15.159569964715 | etot = -14.6424332452548 -364000 ekin = 0.250131041863336 | erot = 0.267108788857729 | epot = -15.1596730759762 | etot = -14.6424332452551 -365000 ekin = 0.250809442162066 | erot = 0.268890073928026 | epot = -15.1621327613494 | etot = -14.6424332452593 -366000 ekin = 0.25234731876335 | erot = 0.272100073006091 | epot = -15.1668806370379 | etot = -14.6424332452684 -367000 ekin = 0.254552520178511 | erot = 0.276787886819413 | epot = -15.1737736522811 | etot = -14.6424332452832 -368000 ekin = 0.257178996153298 | erot = 0.282970699523766 | epot = -15.1825829409812 | etot = -14.6424332453042 -369000 ekin = 0.259931424908708 | erot = 0.29062401114344 | epot = -15.1929886813832 | etot = -14.642433245331 -370000 ekin = 0.262474349326632 | erot = 0.299674631814998 | epot = -15.2045822265049 | etot = -14.6424332453633 -371000 ekin = 0.264446209428301 | erot = 0.309996869297344 | epot = -15.2168763241253 | etot = -14.6424332453996 -372000 ekin = 0.265478281861433 | erot = 0.321412142686654 | epot = -15.2293236699864 | etot = -14.6424332454383 -373000 ekin = 0.265218028290041 | erot = 0.333692059448718 | epot = -15.2413433332161 | etot = -14.6424332454774 -374000 ekin = 0.26335572124772 | erot = 0.346564809671271 | epot = -15.2523537764331 | etot = -14.6424332455141 -375000 ekin = 0.259652497500777 | erot = 0.359724567998165 | epot = -15.2618103110451 | etot = -14.6424332455462 -376000 ekin = 0.253967268934319 | erot = 0.372843454384699 | epot = -15.2692439688902 | etot = -14.6424332455711 -377000 ekin = 0.246279333497663 | erot = 0.385585491299193 | epot = -15.2742980703837 | etot = -14.6424332455868 -378000 ekin = 0.236703249874173 | erot = 0.397621906702965 | epot = -15.2767584021691 | etot = -14.642433245592 -379000 ekin = 0.22549275694072 | erot = 0.408647066936832 | epot = -15.2765730694637 | etot = -14.6424332455862 -380000 ekin = 0.213031377534934 | erot = 0.418394279001949 | epot = -15.2738589021069 | etot = -14.64243324557 -381000 ekin = 0.19980887731166 | erot = 0.426650676217107 | epot = -15.2688927990735 | etot = -14.6424332455448 -382000 ekin = 0.186384809014969 | erot = 0.433270396060972 | epot = -15.2620884505889 | etot = -14.642433245513 -383000 ekin = 0.173342616140343 | erot = 0.4381852790555 | epot = -15.2539611406731 | etot = -14.6424332454773 -384000 ekin = 0.161239700828087 | erot = 0.441412371407271 | epot = -15.2450853176757 | etot = -14.6424332454403 -385000 ekin = 0.15055995464474 | erot = 0.443057612556821 | epot = -15.2360508126064 | etot = -14.6424332454049 -386000 ekin = 0.141675129696877 | erot = 0.443315241526503 | epot = -15.2274236165962 | etot = -14.6424332453728 -387000 ekin = 0.134820015696259 | erot = 0.442462667351556 | epot = -15.2197159283931 | etot = -14.6424332453452 -388000 ekin = 0.130083976412379 | erot = 0.44085081351593 | epot = -15.2133680352507 | etot = -14.6424332453224 -389000 ekin = 0.12741857023722 | erot = 0.43889024628032 | epot = -15.2087420618216 | etot = -14.6424332453041 -390000 ekin = 0.126658423092956 | erot = 0.43703370208669 | epot = -15.2061253704692 | etot = -14.6424332452895 -391000 ekin = 0.127550804261056 | erot = 0.435755902066133 | epot = -15.2057399516053 | etot = -14.6424332452781 -392000 ekin = 0.129788752936039 | erot = 0.435531744058152 | epot = -15.2077537422634 | etot = -14.6424332452692 -393000 ekin = 0.133043055316541 | erot = 0.43681406507717 | epot = -15.2122903656559 | etot = -14.6424332452622 -394000 ekin = 0.136989561466299 | erot = 0.440012156509965 | epot = -15.2194349632336 | etot = -14.6424332452574 -395000 ekin = 0.141329833042564 | erot = 0.445472096884898 | epot = -15.2292351751821 | etot = -14.6424332452547 -396000 ekin = 0.145804542777373 | erot = 0.45345976764831 | epot = -15.2416975556805 | etot = -14.6424332452548 -397000 ekin = 0.150200153188676 | erot = 0.464147173461378 | epot = -15.2567805719085 | etot = -14.6424332452585 -398000 ekin = 0.154350089766152 | erot = 0.477602441558481 | epot = -15.2743857765906 | etot = -14.642433245266 -399000 ekin = 0.158131920622366 | erot = 0.493783661155649 | epot = -15.2943488270562 | etot = -14.6424332452782 -400000 ekin = 0.161462056173796 | erot = 0.512536568006325 | epot = -15.3164318694755 | etot = -14.6424332452953 -401000 ekin = 0.164289301181072 | erot = 0.533595989002473 | epot = -15.3403185355012 | etot = -14.6424332453177 -402000 ekin = 0.166588323050693 | erot = 0.556590928839834 | epot = -15.3656124972355 | etot = -14.642433245345 -403000 ekin = 0.168353810379696 | erot = 0.581053183644485 | epot = -15.3918402394011 | etot = -14.6424332453769 -404000 ekin = 0.169595821301193 | erot = 0.606429376023291 | epot = -15.4184584427372 | etot = -14.6424332454127 -405000 ekin = 0.170336578562018 | erot = 0.63209629254071 | epot = -15.444866116554 | etot = -14.6424332454513 -406000 ekin = 0.170608761978812 | erot = 0.65737934451496 | epot = -15.4704213519851 | etot = -14.6424332454913 -407000 ekin = 0.170455178567329 | erot = 0.681573854094723 | epot = -15.4944622781935 | etot = -14.6424332455315 -408000 ekin = 0.169929554809759 | erot = 0.703968692151394 | epot = -15.5163314925311 | etot = -14.64243324557 -409000 ekin = 0.169098093451394 | erot = 0.723871579521683 | epot = -15.5354029185781 | etot = -14.6424332456051 -410000 ekin = 0.168041369040759 | erot = 0.740635137248624 | epot = -15.5511097519242 | etot = -14.6424332456348 -411000 ekin = 0.166856102809036 | erot = 0.753682569971393 | epot = -15.5629719184382 | etot = -14.6424332456577 -412000 ekin = 0.165656359033239 | erot = 0.762531725093238 | epot = -15.5706213297988 | etot = -14.6424332456724 -413000 ekin = 0.164573741711749 | erot = 0.766816218739624 | epot = -15.5738232061291 | etot = -14.6424332456777 -414000 ekin = 0.163756240957875 | erot = 0.766302377571564 | epot = -15.5724918642026 | etot = -14.6424332456732 -415000 ekin = 0.163365479945837 | erot = 0.76090092022446 | epot = -15.5666996458289 | etot = -14.6424332456586 -416000 ekin = 0.16357224009456 | erot = 0.750672586698944 | epot = -15.556678072428 | etot = -14.6424332456345 -417000 ekin = 0.164550286199954 | erot = 0.7358272978906 | epot = -15.5428108296923 | etot = -14.6424332456018 -418000 ekin = 0.166468663393413 | erot = 0.716716857299939 | epot = -15.5256187662552 | etot = -14.6424332455618 -419000 ekin = 0.169482781127082 | erot = 0.693821649098591 | epot = -15.5057376757421 | etot = -14.6424332455164 -420000 ekin = 0.173724722667737 | erot = 0.66773219168281 | epot = -15.4838901598182 | etot = -14.6424332454677 -421000 ekin = 0.179293310761201 | erot = 0.639126725581016 | epot = -15.4608532817598 | etot = -14.6424332454176 -422000 ekin = 0.18624451452154 | erot = 0.608746211198834 | epot = -15.437423971089 | etot = -14.6424332453687 -423000 ekin = 0.194582798147166 | erot = 0.577368165576623 | epot = -15.4143842090466 | etot = -14.6424332453228 -424000 ekin = 0.204253993032127 | erot = 0.545780680985215 | epot = -15.3924679192995 | etot = -14.6424332452822 -425000 ekin = 0.215140228919709 | erot = 0.514757766830984 | epot = -15.3723312409989 | etot = -14.6424332452482 -426000 ekin = 0.227057395200028 | erot = 0.485036881514174 | epot = -15.354527521936 | etot = -14.6424332452218 -427000 ekin = 0.239755526228602 | erot = 0.457299221560653 | epot = -15.3394879929934 | etot = -14.6424332452042 -428000 ekin = 0.252922416271923 | erot = 0.432153058134052 | epot = -15.3275087196016 | etot = -14.6424332451956 -429000 ekin = 0.266190667181531 | erot = 0.410120192007372 | epot = -15.3187441043849 | etot = -14.642433245196 -430000 ekin = 0.279148248287616 | erot = 0.391625457761957 | epot = -15.3132069512549 | etot = -14.6424332452053 -431000 ekin = 0.291352495295092 | erot = 0.376989149810484 | epot = -15.3107748903279 | etot = -14.6424332452223 -432000 ekin = 0.302347287571197 | erot = 0.366422254466197 | epot = -15.311202787284 | etot = -14.6424332452466 -433000 ekin = 0.311682921771834 | erot = 0.360024429012416 | epot = -15.3141405960599 | etot = -14.6424332452756 -434000 ekin = 0.318937954387398 | erot = 0.357784738270779 | epot = -15.3191559379664 | etot = -14.6424332453082 -435000 ekin = 0.323742037714837 | erot = 0.359585207272863 | epot = -15.3257604903308 | etot = -14.6424332453431 -436000 ekin = 0.325798554031316 | erot = 0.365207245305789 | epot = -15.3334390447156 | etot = -14.6424332453785 -437000 ekin = 0.324905697097303 | erot = 0.374340922349983 | epot = -15.3416798648586 | etot = -14.6424332454113 -438000 ekin = 0.320974589858357 | erot = 0.386596930160468 | epot = -15.3500047654588 | etot = -14.64243324544 -439000 ekin = 0.314043077746361 | erot = 0.401520852185505 | epot = -15.3579971753956 | etot = -14.6424332454637 -440000 ekin = 0.304283988020539 | erot = 0.41860913221399 | epot = -15.3653263657148 | etot = -14.6424332454802 -441000 ekin = 0.292006859111611 | erot = 0.437325916193047 | epot = -15.3717660207934 | etot = -14.6424332454888 -442000 ekin = 0.277652365815072 | erot = 0.457119792518877 | epot = -15.3772054038232 | etot = -14.6424332454893 -443000 ekin = 0.261778853590747 | erot = 0.477439412175799 | epot = -15.3816515112488 | etot = -14.6424332454822 -444000 ekin = 0.245040553434245 | erot = 0.497747053376455 | epot = -15.3852208522799 | etot = -14.6424332454692 -445000 ekin = 0.22815726042029 | erot = 0.517529408202492 | epot = -15.3881199140742 | etot = -14.6424332454515 -446000 ekin = 0.211875681729375 | erot = 0.536305196856599 | epot = -15.3906141240179 | etot = -14.6424332454319 -447000 ekin = 0.196923472681452 | erot = 0.553629632753462 | epot = -15.3929863508487 | etot = -14.6424332454138 -448000 ekin = 0.183958277880794 | erot = 0.569096233370998 | epot = -15.3954877566523 | etot = -14.6424332454005 -449000 ekin = 0.173515771313212 | erot = 0.582336947151654 | epot = -15.3982859638601 | etot = -14.6424332453953 -450000 ekin = 0.16596236119942 | erot = 0.593021970145928 | epot = -15.4014175767459 | etot = -14.6424332454006 -451000 ekin = 0.161459280835239 | erot = 0.600860851249478 | epot = -15.4047533775022 | etot = -14.6424332454175 -452000 ekin = 0.159944578253891 | erot = 0.605606408076375 | epot = -15.4079842317757 | etot = -14.6424332454454 -453000 ekin = 0.161137653115343 | erot = 0.607062496368088 | epot = -15.410633394965 | etot = -14.6424332454816 -454000 ekin = 0.164567591513362 | erot = 0.605095779306127 | epot = -15.4120966163413 | etot = -14.6424332455218 -455000 ekin = 0.169622334209561 | erot = 0.599650455421312 | epot = -15.4117060351916 | etot = -14.6424332455607 -456000 ekin = 0.175611802350684 | erot = 0.59076370289457 | epot = -15.4088087508384 | etot = -14.6424332455932 -457000 ekin = 0.181835621982265 | erot = 0.578578749363215 | epot = -15.4028476169601 | etot = -14.6424332456146 -458000 ekin = 0.187645727030889 | erot = 0.563352302649359 | epot = -15.3934312753016 | etot = -14.6424332456214 -459000 ekin = 0.192495880384906 | erot = 0.545453717149624 | epot = -15.380382843147 | etot = -14.6424332456124 -460000 ekin = 0.195973381637233 | erot = 0.52535459771201 | epot = -15.3637612249374 | etot = -14.6424332455881 -461000 ekin = 0.197811920991221 | erot = 0.503609203464267 | epot = -15.3438543700064 | etot = -14.642433245551 -462000 ekin = 0.197887724919133 | erot = 0.480827560284759 | epot = -15.3211485307077 | etot = -14.6424332455038 -463000 ekin = 0.196203198485173 | erot = 0.457644248439117 | epot = -15.2962806923751 | etot = -14.6424332454508 -464000 ekin = 0.192863034125905 | erot = 0.434686220431875 | epot = -15.2699824999537 | etot = -14.6424332453959 -465000 ekin = 0.188047435822221 | erot = 0.412542760093999 | epot = -15.2430234412586 | etot = -14.6424332453424 -466000 ekin = 0.181986107552774 | erot = 0.391740010674855 | epot = -15.2161593635207 | etot = -14.6424332452931 -467000 ekin = 0.174935400197985 | erot = 0.372721626737699 | epot = -15.1900902721857 | etot = -14.64243324525 -468000 ekin = 0.167159826102144 | erot = 0.355836258353897 | epot = -15.1654293296704 | etot = -14.6424332452144 -469000 ekin = 0.15891821802259 | erot = 0.341331890767446 | epot = -15.1426833539768 | etot = -14.6424332451868 -470000 ekin = 0.150454185653208 | erot = 0.329356584635644 | epot = -15.1222440154559 | etot = -14.642433245167 -471000 ekin = 0.141990180749418 | erot = 0.319964871778395 | epot = -15.1043882976824 | etot = -14.6424332451546 -472000 ekin = 0.133724353868212 | erot = 0.313128906246322 | epot = -15.089286505263 | etot = -14.6424332451484 -473000 ekin = 0.125829398101873 | erot = 0.308753392325049 | epot = -15.0770160355744 | etot = -14.6424332451474 -474000 ekin = 0.11845266636319 | erot = 0.306693264414359 | epot = -15.0675791759278 | etot = -14.6424332451502 -475000 ekin = 0.111716976218895 | erot = 0.306773053291037 | epot = -15.0609232746653 | etot = -14.6424332451553 -476000 ekin = 0.105721655633226 | erot = 0.308806833537935 | epot = -15.0569617343327 | etot = -14.6424332451616 -477000 ekin = 0.100543523675716 | erot = 0.31261761713068 | epot = -15.055594385974 | etot = -14.6424332451676 -478000 ekin = 0.0962376398644556 | erot = 0.318055055635918 | epot = -15.056725940673 | etot = -14.6424332451726 -479000 ekin = 0.0928377950023828 | erot = 0.32501035703107 | epot = -15.0602813972092 | etot = -14.6424332451757 -480000 ekin = 0.0903568546344153 | erot = 0.333427427764655 | epot = -15.0662175275757 | etot = -14.6424332451766 -481000 ekin = 0.0887871989354853 | erot = 0.343309423711623 | epot = -15.0745298678221 | etot = -14.642433245175 -482000 ekin = 0.0881016191313906 | erot = 0.354720133059459 | epot = -15.085254997362 | etot = -14.6424332451712 -483000 ekin = 0.0882551127429689 | erot = 0.367779908275294 | epot = -15.0984682661837 | etot = -14.6424332451655 -484000 ekin = 0.0891880440123854 | erot = 0.382656193510864 | epot = -15.1142774826819 | etot = -14.6424332451586 -485000 ekin = 0.0908310739090707 | erot = 0.399549033149909 | epot = -15.1328133522102 | etot = -14.6424332451512 -486000 ekin = 0.0931120890965817 | erot = 0.418672269926991 | epot = -15.1542176041678 | etot = -14.6424332451442 -487000 ekin = 0.0959650526362288 | erot = 0.440231422324977 | epot = -15.1786297200997 | etot = -14.6424332451385 -488000 ekin = 0.0993402613831306 | erot = 0.464399451388421 | epot = -15.2061729579064 | etot = -14.6424332451348 -489000 ekin = 0.103214957393528 | erot = 0.491291775407019 | epot = -15.2369399779349 | etot = -14.6424332451343 -490000 ekin = 0.107602676592561 | erot = 0.52094196550166 | epot = -15.2709778872321 | etot = -14.6424332451379 -491000 ekin = 0.112559247659633 | erot = 0.553279563919969 | epot = -15.3082720567263 | etot = -14.6424332451467 -492000 ekin = 0.118183136718381 | erot = 0.58811142531092 | epot = -15.3487278071915 | etot = -14.6424332451622 -493000 ekin = 0.124608040121107 | erot = 0.625107908280808 | epot = -15.3921491935878 | etot = -14.6424332451859 -494000 ekin = 0.131986393307422 | erot = 0.663795156036242 | epot = -15.4382147945631 | etot = -14.6424332452194 -495000 ekin = 0.140463823895352 | erot = 0.703554605722129 | epot = -15.4864516748821 | etot = -14.6424332452647 -496000 ekin = 0.150146408031556 | erot = 0.743630741562838 | epot = -15.5362103949171 | etot = -14.6424332453227 -497000 ekin = 0.16106457906773 | erot = 0.783147917316532 | epot = -15.5866457417786 | etot = -14.6424332453944 -498000 ekin = 0.173139219154639 | erot = 0.82113675497104 | epot = -15.6367092196045 | etot = -14.6424332454788 -499000 ekin = 0.186156317831581 | erot = 0.856570103854347 | epot = -15.6851596672597 | etot = -14.6424332455737 -500000 ekin = 0.19975619506813 | erot = 0.88840775827112 | epot = -15.7305971990145 | etot = -14.6424332456752 -501000 ekin = 0.213441517837533 | erot = 0.915648078729441 | epot = -15.7715228423447 | etot = -14.6424332457777 -502000 ekin = 0.226605416599146 | erot = 0.937383433645324 | epot = -15.8064220961188 | etot = -14.6424332458743 -503000 ekin = 0.238577508979602 | erot = 0.952855183120694 | epot = -15.833865938058 | etot = -14.6424332459577 -504000 ekin = 0.248682347019085 | erot = 0.961503066783805 | epot = -15.852618659824 | etot = -14.6424332460211 -505000 ekin = 0.256302488972944 | erot = 0.963003656361843 | epot = -15.8617393913939 | etot = -14.6424332460591 -506000 ekin = 0.260937583147995 | erot = 0.957293217915528 | epot = -15.8606640471316 | etot = -14.6424332460681 -507000 ekin = 0.262251679303344 | erot = 0.944571918253377 | epot = -15.8492568436041 | etot = -14.6424332460473 -508000 ekin = 0.260103184115665 | erot = 0.925288564929115 | epot = -15.8278249950432 | etot = -14.6424332459984 -509000 ekin = 0.254554875284736 | erot = 0.900107536932479 | epot = -15.7970956581425 | etot = -14.6424332459253 -510000 ekin = 0.245864483352384 | erot = 0.869861717980019 | epot = -15.7581594471659 | etot = -14.6424332458335 -511000 ekin = 0.234458914530909 | erot = 0.835496660121179 | epot = -15.7123888203816 | etot = -14.6424332457295 -512000 ekin = 0.220896820243757 | erot = 0.798011684060737 | epot = -15.6613417499247 | etot = -14.6424332456202 -513000 ekin = 0.205824805091359 | erot = 0.758403224573371 | epot = -15.6066612751765 | etot = -14.6424332455118 -514000 ekin = 0.189932244119314 | erot = 0.717614706855598 | epot = -15.5499801963845 | etot = -14.6424332454096 -515000 ekin = 0.17390874820256 | erot = 0.676495918868179 | epot = -15.4928379123889 | etot = -14.6424332453181 -516000 ekin = 0.158407108511413 | erot = 0.635773516021293 | epot = -15.4366138697731 | etot = -14.6424332452404 -517000 ekin = 0.144013350185935 | erot = 0.596033149114501 | epot = -15.3824797444789 | etot = -14.6424332451784 -518000 ekin = 0.131224514119671 | erot = 0.557712825685801 | epot = -15.3313705849381 | etot = -14.6424332451327 -519000 ekin = 0.120434042407119 | erot = 0.521106495595061 | epot = -15.283973783105 | etot = -14.6424332451028 -520000 ekin = 0.111924165177638 | erot = 0.486376443197605 | epot = -15.2407338534629 | etot = -14.6424332450877 -521000 ekin = 0.10586442481646 | erot = 0.45357280605877 | epot = -15.2018704759605 | etot = -14.6424332450853 -522000 ekin = 0.102315362067637 | erot = 0.422658367130315 | epot = -15.1674069742913 | etot = -14.6424332450933 -523000 ekin = 0.101236366465097 | erot = 0.393536647096217 | epot = -15.1372062586706 | etot = -14.6424332451092 -524000 ekin = 0.102496717236361 | erot = 0.366081244307775 | epot = -15.1110112066744 | etot = -14.6424332451302 -525000 ekin = 0.105888887335359 | erot = 0.340164343214466 | epot = -15.0884864757035 | etot = -14.6424332451537 -526000 ekin = 0.111143247849972 | erot = 0.315682368378565 | epot = -15.0692588614059 | etot = -14.6424332451774 -527000 ekin = 0.117943398961211 | erot = 0.292576937806859 | epot = -15.0529535819675 | etot = -14.6424332451994 -528000 ekin = 0.125941474254374 | erot = 0.270849598243548 | epot = -15.0392243177162 | etot = -14.6424332452183 -529000 ekin = 0.134772916008759 | erot = 0.25056931723892 | epot = -15.0277754784807 | etot = -14.642433245233 -530000 ekin = 0.144070383401968 | erot = 0.23187234065126 | epot = -15.0183759692966 | etot = -14.6424332452434 -531000 ekin = 0.153476601968784 | erot = 0.214954741433899 | epot = -15.0108645886522 | etot = -14.6424332452495 -532000 ekin = 0.162656054076994 | erot = 0.200058697647296 | epot = -15.0051479969762 | etot = -14.6424332452519 -533000 ekin = 0.171305419079581 | erot = 0.187454143182374 | epot = -15.0011928075132 | etot = -14.6424332452513 -534000 ekin = 0.179162595538561 | erot = 0.177417842692276 | epot = -14.9990136834796 | etot = -14.6424332452488 -535000 ekin = 0.186014006484957 | erot = 0.17021209444073 | epot = -14.9986593461707 | etot = -14.642433245245 -536000 ekin = 0.1916997592389 | erot = 0.166065149224443 | epot = -15.0001981537043 | etot = -14.642433245241 -537000 ekin = 0.196116169930245 | erot = 0.165155084977448 | epot = -15.003704500145 | etot = -14.6424332452373 -538000 ekin = 0.199215220532697 | erot = 0.167598364569289 | epot = -15.0092468303365 | etot = -14.6424332452345 -539000 ekin = 0.201000709668931 | erot = 0.173443713615177 | epot = -15.0168776685174 | etot = -14.6424332452333 -540000 ekin = 0.201521164037736 | erot = 0.182671367030118 | epot = -15.0266257763017 | etot = -14.6424332452339 -541000 ekin = 0.200859940141596 | erot = 0.19519721144006 | epot = -15.0384903968184 | etot = -14.6424332452367 -542000 ekin = 0.199123298889486 | erot = 0.210880936221535 | epot = -15.0524374803529 | etot = -14.6424332452418 -543000 ekin = 0.196427519384799 | erot = 0.229537017788173 | epot = -15.0683977824221 | etot = -14.6424332452491 -544000 ekin = 0.192886294946266 | erot = 0.250947202002022 | epot = -15.0862667422075 | etot = -14.6424332452592 -545000 ekin = 0.188599710888658 | erot = 0.274873110236026 | epot = -15.1059060663961 | etot = -14.6424332452714 -546000 ekin = 0.183646045244012 | erot = 0.301067663120912 | epot = -15.1271469536507 | etot = -14.6424332452858 -547000 ekin = 0.178077473819966 | erot = 0.329284179376574 | epot = -15.1497948984983 | etot = -14.6424332453018 -548000 ekin = 0.171920510268459 | erot = 0.359282253787704 | epot = -15.1736360093752 | etot = -14.6424332453191 -549000 ekin = 0.16518167057886 | erot = 0.390829837836036 | epot = -15.1984447537517 | etot = -14.6424332453368 -550000 ekin = 0.157858408655944 | erot = 0.423701326923133 | epot = -15.2239929809336 | etot = -14.6424332453545 -551000 ekin = 0.14995480900584 | erot = 0.457671882722303 | epot = -15.2500599370996 | etot = -14.6424332453714 -552000 ekin = 0.141500835822425 | erot = 0.492508662666516 | epot = -15.2764427438757 | etot = -14.6424332453867 -553000 ekin = 0.132573145480455 | erot = 0.527960055130333 | epot = -15.3029664460106 | etot = -14.6424332453998 -554000 ekin = 0.123314645146755 | erot = 0.563744383275445 | epot = -15.3294922738324 | etot = -14.6424332454102 -555000 ekin = 0.113949270900201 | erot = 0.599539792629047 | epot = -15.3559223089471 | etot = -14.6424332454179 -556000 ekin = 0.104788088804124 | erot = 0.634977129568493 | epot = -15.3821984637957 | etot = -14.6424332454231 -557000 ekin = 0.0962230654738455 | erot = 0.669637513728679 | epot = -15.4082938246296 | etot = -14.642433245427 -558000 ekin = 0.088705961438158 | erot = 0.703055990484119 | epot = -15.4341951973534 | etot = -14.6424332454312 -559000 ekin = 0.0827118847692418 | erot = 0.734732129426884 | epot = -15.4598772596337 | etot = -14.6424332454376 -560000 ekin = 0.0786899547209703 | erot = 0.764147748401053 | epot = -15.4852709485705 | etot = -14.6424332454484 -561000 ekin = 0.0770067720584858 | erot = 0.790791153077639 | epot = -15.5102311706015 | etot = -14.6424332454654 -562000 ekin = 0.0778911706718927 | erot = 0.814186471630364 | epot = -15.5345108877916 | etot = -14.6424332454893 -563000 ekin = 0.0813901113631772 | erot = 0.833925925484042 | epot = -15.5577492823671 | etot = -14.6424332455199 -564000 ekin = 0.0873448530183822 | erot = 0.849702302566594 | epot = -15.5794804011401 | etot = -14.6424332455551 -565000 ekin = 0.0953935152513702 | erot = 0.861338569498078 | epot = -15.5991653303408 | etot = -14.6424332455914 -566000 ekin = 0.105001366117373 | erot = 0.868811531658348 | epot = -15.6162461434002 | etot = -14.6424332456244 -567000 ekin = 0.115514789209081 | erot = 0.872266750929459 | epot = -15.6302147857878 | etot = -14.6424332456493 -568000 ekin = 0.12623032098928 | erot = 0.872022546762645 | epot = -15.6406861134138 | etot = -14.6424332456618 -569000 ekin = 0.136467575204533 | erot = 0.868561781939923 | epot = -15.6474626028035 | etot = -14.642433245659 -570000 ekin = 0.145634823228531 | erot = 0.862511177265096 | epot = -15.6505792461335 | etot = -14.6424332456399 -571000 ekin = 0.153278250259458 | erot = 0.854608991358708 | epot = -15.6503204872235 | etot = -14.6424332456053 -572000 ekin = 0.159109636953243 | erot = 0.845662918619347 | epot = -15.6472058011307 | etot = -14.6424332455581 -573000 ekin = 0.163011362016527 | erot = 0.836500892322521 | epot = -15.6419454998419 | etot = -14.6424332455028 -574000 ekin = 0.165021239079052 | erot = 0.827918058207678 | epot = -15.6353725427317 | etot = -14.6424332454449 -575000 ekin = 0.165302195907203 | erot = 0.820623479706266 | epot = -15.6283589210035 | etot = -14.6424332453901 -576000 ekin = 0.164102988099449 | erot = 0.815190165400521 | epot = -15.6217263988437 | etot = -14.6424332453438 -577000 ekin = 0.161716152385045 | erot = 0.81201181794545 | epot = -15.6161612156414 | etot = -14.6424332453109 -578000 ekin = 0.158438569369355 | erot = 0.811269345694715 | epot = -15.6121411603589 | etot = -14.6424332452948 -579000 ekin = 0.154538688866594 | erot = 0.812909695779921 | epot = -15.609881629944 | etot = -14.6424332452975 -580000 ekin = 0.150232988451468 | erot = 0.816638977240042 | epot = -15.6093052110108 | etot = -14.6424332453193 -581000 ekin = 0.14567280981178 | erot = 0.821931135408262 | epot = -15.610037190579 | etot = -14.6424332453589 -582000 ekin = 0.140941476788232 | erot = 0.828052590347223 | epot = -15.6114273125488 | etot = -14.6424332454134 -583000 ekin = 0.136060602595893 | erot = 0.83410224689192 | epot = -15.6125960949662 | etot = -14.6424332454784 -584000 ekin = 0.131003759893424 | erot = 0.839065139153169 | epot = -15.6125021445953 | etot = -14.6424332455487 -585000 ekin = 0.125715216480054 | erot = 0.841876757443394 | epot = -15.6100252195419 | etot = -14.6424332456185 -586000 ekin = 0.120131224766288 | erot = 0.841493945660771 | epot = -15.6040584161087 | etot = -14.6424332456817 -587000 ekin = 0.114201380569865 | erot = 0.836967317747604 | epot = -15.5936019440502 | etot = -14.6424332457327 -588000 ekin = 0.107907808224942 | erot = 0.827509595977129 | epot = -15.5778506499689 | etot = -14.6424332457668 -589000 ekin = 0.101280337908464 | erot = 0.812554260667739 | epot = -15.5562678443567 | etot = -14.6424332457805 -590000 ekin = 0.0944063548781473 | erot = 0.791799488415124 | epot = -15.5286390890653 | etot = -14.642433245772 -591000 ekin = 0.0874345511051118 | erot = 0.765233519218442 | epot = -15.4951013160646 | etot = -14.6424332457411 -592000 ekin = 0.0805723392090093 | erot = 0.733139214281049 | epot = -15.4561447991793 | etot = -14.6424332456893 -593000 ekin = 0.074077159409156 | erot = 0.696077455345262 | epot = -15.4125878603743 | etot = -14.6424332456198 -594000 ekin = 0.068242308961577 | erot = 0.65485096335545 | epot = -15.3655265178543 | etot = -14.6424332455373 -595000 ekin = 0.0633782539035074 | erot = 0.610451848321685 | epot = -15.3162633476722 | etot = -14.642433245447 -596000 ekin = 0.059790654067382 | erot = 0.563997548399928 | epot = -15.2662214478224 | etot = -14.6424332453551 -597000 ekin = 0.0577565493651041 | erot = 0.516660644083728 | epot = -15.2168504387162 | etot = -14.6424332452674 -598000 ekin = 0.0575003158564816 | erot = 0.469598294353669 | epot = -15.1695318553997 | etot = -14.6424332451895 -599000 ekin = 0.0591710965315296 | erot = 0.423886769451575 | epot = -15.1254911111095 | etot = -14.6424332451264 -600000 ekin = 0.0628234356919141 | erot = 0.380465849282312 | epot = -15.0857225300557 | etot = -14.6424332450815 -601000 ekin = 0.0684027903404326 | erot = 0.340096852290174 | epot = -15.0509328876876 | etot = -14.642433245057 -602000 ekin = 0.0757374499151583 | erot = 0.303336891510099 | epot = -15.0215075864787 | etot = -14.6424332450534 -603000 ekin = 0.0845381560125233 | erot = 0.270530726253805 | epot = -14.9975021273362 | etot = -14.6424332450699 -604000 ekin = 0.0944063594091485 | erot = 0.24182034796485 | epot = -14.9786599524776 | etot = -14.6424332451036 -605000 ekin = 0.104851562461312 | erot = 0.21717122479241 | epot = -14.964456032404 | etot = -14.6424332451503 -606000 ekin = 0.115317556389988 | erot = 0.196412930357425 | epot = -14.9541637319519 | etot = -14.6424332452045 -607000 ekin = 0.125216580352841 | erot = 0.179290709848654 | epot = -14.9469405354616 | etot = -14.6424332452601 -608000 ekin = 0.133969542489582 | erot = 0.165523445158815 | epot = -14.9419262329591 | etot = -14.6424332453107 -609000 ekin = 0.141049537027062 | erot = 0.154862582266164 | epot = -14.9383453646429 | etot = -14.6424332453497 -610000 ekin = 0.14602509517412 | erot = 0.147146040889398 | epot = -14.9356043814356 | etot = -14.642433245372 -611000 ekin = 0.148599079333681 | erot = 0.142341118194548 | epot = -14.9333734429023 | etot = -14.6424332453741 -612000 ekin = 0.148639027540064 | erot = 0.140571068728133 | epot = -14.9316433416223 | etot = -14.6424332453541 -613000 ekin = 0.146195193891214 | erot = 0.142121441396099 | epot = -14.9307498806002 | etot = -14.6424332453129 -614000 ekin = 0.141503544703139 | erot = 0.14742429365942 | epot = -14.9313610836163 | etot = -14.6424332452537 -615000 ekin = 0.134972482668015 | erot = 0.157020849768272 | epot = -14.934426577618 | etot = -14.6424332451817 -616000 ekin = 0.127153892886365 | erot = 0.171505679771465 | epot = -14.941092817762 | etot = -14.6424332451042 -617000 ekin = 0.118700960496657 | erot = 0.191457667913342 | epot = -14.9525918734391 | etot = -14.6424332450291 -618000 ekin = 0.110316794781996 | erot = 0.217364584488773 | epot = -14.9701146242354 | etot = -14.6424332449646 -619000 ekin = 0.102698942666763 | erot = 0.249548776229937 | epot = -14.9946809638152 | etot = -14.6424332449185 -620000 ekin = 0.0964852203328184 | erot = 0.288101317488974 | epot = -15.0270197827188 | etot = -14.642433244897 -621000 ekin = 0.0922059091543981 | erot = 0.332831044361854 | epot = -15.0674701984207 | etot = -14.6424332449044 -622000 ekin = 0.0902463647122994 | erot = 0.383233451857257 | epot = -15.1159130615124 | etot = -14.6424332449428 -623000 ekin = 0.0908226920728218 | erot = 0.438482716260173 | epot = -15.1717386533448 | etot = -14.6424332450118 -624000 ekin = 0.0939716062548917 | erot = 0.497448307332085 | epot = -15.2338531586955 | etot = -14.6424332451085 -625000 ekin = 0.099554161125272 | erot = 0.558735886776433 | epot = -15.3007232931297 | etot = -14.642433245228 -626000 ekin = 0.107271859328493 | erot = 0.620750477448093 | epot = -15.37045558214 | etot = -14.6424332453634 -627000 ekin = 0.116692826740208 | erot = 0.681778220892823 | epot = -15.4409042931397 | etot = -14.6424332455067 -628000 ekin = 0.127285245275883 | erot = 0.740081431761517 | epot = -15.5097999226863 | etot = -14.6424332456489 -629000 ekin = 0.138455039155814 | erot = 0.794000196763232 | epot = -15.5748884817003 | etot = -14.6424332457813 -630000 ekin = 0.14958484293868 | erot = 0.84205264023402 | epot = -15.6340707290682 | etot = -14.6424332458955 -631000 ekin = 0.160071499854196 | erot = 0.883025442873215 | epot = -15.6855301887124 | etot = -14.642433245985 -632000 ekin = 0.169359720293525 | erot = 0.916046503423099 | epot = -15.7278394697615 | etot = -14.6424332460449 -633000 ekin = 0.176970053692886 | erot = 0.940632922938969 | epot = -15.7600362227044 | etot = -14.6424332460726 -634000 ekin = 0.182519961289899 | erot = 0.956709735133559 | epot = -15.7816629424915 | etot = -14.642433246068 -635000 ekin = 0.185737466035222 | erot = 0.96459776020741 | epot = -15.7927684722762 | etot = -14.6424332460336 -636000 ekin = 0.186467519302543 | erot = 0.964972204258758 | epot = -15.7938729695347 | etot = -14.6424332459734 -637000 ekin = 0.184671774603421 | erot = 0.95879666038002 | epot = -15.7859016808768 | etot = -14.6424332458934 -638000 ekin = 0.180422825776731 | erot = 0.947239527077254 | epot = -15.770095598654 | etot = -14.6424332458 -639000 ekin = 0.173894119063323 | erot = 0.931581224200984 | epot = -15.7479085889646 | etot = -14.6424332457002 -640000 ekin = 0.165346701826108 | erot = 0.913120838758361 | epot = -15.720900786185 | etot = -14.6424332456005 -641000 ekin = 0.155113786101913 | erot = 0.893090060094541 | epot = -15.6906370917029 | etot = -14.6424332455064 -642000 ekin = 0.14358386924239 | erot = 0.872580710310639 | epot = -15.6585978249755 | etot = -14.6424332454225 -643000 ekin = 0.131182953687752 | erot = 0.852490168058137 | epot = -15.6261063670979 | etot = -14.642433245352 -644000 ekin = 0.118356305759434 | erot = 0.833486853993186 | epot = -15.5942764050496 | etot = -14.642433245297 -645000 ekin = 0.105550209083476 | erot = 0.815995971214683 | epot = -15.5639794255563 | etot = -14.6424332452581 -646000 ekin = 0.0931942744180483 | erot = 0.800204061932059 | epot = -15.5358315815852 | etot = -14.6424332452351 -647000 ekin = 0.0816850001789074 | erot = 0.786079744440671 | epot = -15.5101979898462 | etot = -14.6424332452266 -648000 ekin = 0.0713713598429194 | erot = 0.773407243191889 | epot = -15.4872118482656 | etot = -14.6424332452308 -649000 ekin = 0.0625431628711588 | erot = 0.761828976528596 | epot = -15.4668053846449 | etot = -14.6424332452451 -650000 ekin = 0.0554227735501149 | erot = 0.750893453411355 | epot = -15.4487494722281 | etot = -14.6424332452667 -651000 ekin = 0.0501605027659971 | erot = 0.740104978445364 | epot = -15.4326987265038 | etot = -14.6424332452925 -652000 ekin = 0.0468336713668983 | erot = 0.728972100417351 | epot = -15.418239017104 | etot = -14.6424332453198 -653000 ekin = 0.0454490492583018 | erot = 0.717052285941663 | epot = -15.4049345805457 | etot = -14.6424332453457 -654000 ekin = 0.0459481524955995 | erot = 0.703990869780714 | epot = -15.3923722676442 | etot = -14.6424332453679 -655000 ekin = 0.0482147495301528 | erot = 0.68955283510374 | epot = -15.3802008300183 | etot = -14.6424332453844 -656000 ekin = 0.0520838761279946 | erot = 0.67364633274675 | epot = -15.3681634542684 | etot = -14.6424332453937 -657000 ekin = 0.0573516620867051 | erot = 0.656337023113083 | epot = -15.3561219305946 | etot = -14.6424332453948 -658000 ekin = 0.0637853134946618 | erot = 0.63785234821795 | epot = -15.3440709071001 | etot = -14.6424332453875 -659000 ekin = 0.0711326702887102 | erot = 0.618574815847016 | epot = -15.332140731508 | etot = -14.6424332453723 -660000 ekin = 0.0791308828116018 | erot = 0.599023454708778 | epot = -15.3205875828711 | etot = -14.6424332453507 -661000 ekin = 0.0875139366244703 | erot = 0.579822939748203 | epot = -15.3097701216976 | etot = -14.6424332453249 -662000 ekin = 0.096019000420537 | erot = 0.561660610348982 | epot = -15.3001128560675 | etot = -14.642433245298 -663000 ekin = 0.104391848885278 | erot = 0.545232746056464 | epot = -15.2920578402152 | etot = -14.6424332452734 -664000 ekin = 0.112391863389549 | erot = 0.531182949320099 | epot = -15.2860080579647 | etot = -14.6424332452551 -665000 ekin = 0.119797262719822 | erot = 0.520037124798772 | epot = -15.2822676327651 | etot = -14.6424332452465 -666000 ekin = 0.12641119006126 | erot = 0.512141060962442 | epot = -15.2809854962746 | etot = -14.6424332452509 -667000 ekin = 0.132069035722124 | erot = 0.507607681730339 | epot = -15.2821099627223 | etot = -14.6424332452698 -668000 ekin = 0.136646914538571 | erot = 0.506281315754969 | epot = -15.2853614755973 | etot = -14.6424332453038 -669000 ekin = 0.140070616008918 | erot = 0.507725566171611 | epot = -15.2902294275316 | etot = -14.6424332453511 -670000 ekin = 0.142323740902303 | erot = 0.511239425097838 | epot = -15.2959964114084 | etot = -14.6424332454083 -671000 ekin = 0.143453306298645 | erot = 0.515903234043348 | epot = -15.3017897858128 | etot = -14.6424332454708 -672000 ekin = 0.143571012728205 | erot = 0.520652256715801 | epot = -15.3066565149767 | etot = -14.6424332455327 -673000 ekin = 0.142848733833195 | erot = 0.524371563354086 | epot = -15.309653542775 | etot = -14.6424332455877 -674000 ekin = 0.141507613274639 | erot = 0.52600236292734 | epot = -15.3099432218318 | etot = -14.6424332456299 -675000 ekin = 0.139801302823377 | erot = 0.524647629020981 | epot = -15.306882177499 | etot = -14.6424332456547 -676000 ekin = 0.137995095209425 | erot = 0.519664439037895 | epot = -15.3000927799066 | etot = -14.6424332456593 -677000 ekin = 0.136343677285032 | erot = 0.510732098514586 | epot = -15.2895090214423 | etot = -14.6424332456427 -678000 ekin = 0.135070664123505 | erot = 0.497888575253489 | epot = -15.2753924849828 | etot = -14.6424332456058 -679000 ekin = 0.134352810446744 | erot = 0.481532294130089 | epot = -15.2583183501281 | etot = -14.6424332455513 -680000 ekin = 0.134310862658471 | erot = 0.462390968603499 | epot = -15.2391350767451 | etot = -14.6424332454831 -681000 ekin = 0.135007638926492 | erot = 0.441462941783694 | epot = -15.2189038261163 | etot = -14.6424332454061 -682000 ekin = 0.136452461528385 | erot = 0.419938865037324 | epot = -15.198824571891 | etot = -14.6424332453253 -683000 ekin = 0.138609887401928 | erot = 0.399112293315509 | epot = -15.1801554259633 | etot = -14.6424332452459 -684000 ekin = 0.141410065652186 | erot = 0.380287181762815 | epot = -15.1641304925878 | etot = -14.6424332451728 -685000 ekin = 0.144758102725877 | erot = 0.364688846300047 | epot = -15.1518801941366 | etot = -14.6424332451107 -686000 ekin = 0.148540467122571 | erot = 0.353383275615104 | epot = -15.1443569878014 | etot = -14.6424332450637 -687000 ekin = 0.152627512101204 | erot = 0.347208212231211 | epot = -15.1422689693677 | etot = -14.6424332450353 -688000 ekin = 0.156872371009938 | erot = 0.346718408271002 | epot = -15.1460240243092 | etot = -14.6424332450283 -689000 ekin = 0.161107527975608 | erot = 0.352146941114583 | epot = -15.1556877141345 | etot = -14.6424332450443 -690000 ekin = 0.165141087380569 | erot = 0.363384304940391 | epot = -15.1709586374048 | etot = -14.6424332450838 -691000 ekin = 0.168755042648096 | erot = 0.379976931153895 | epot = -15.1911652189474 | etot = -14.6424332451454 -692000 ekin = 0.171707649701853 | erot = 0.401146558394068 | epot = -15.2152874533221 | etot = -14.6424332452262 -693000 ekin = 0.173741393440484 | erot = 0.425831232783826 | epot = -15.2420058715458 | etot = -14.6424332453215 -694000 ekin = 0.174597110621515 | erot = 0.452747528134271 | epot = -15.2697778841807 | etot = -14.642433245425 -695000 ekin = 0.174033757468476 | erot = 0.480471830915694 | epot = -15.2969388339131 | etot = -14.6424332455289 -696000 ekin = 0.171852263360651 | erot = 0.50753639815094 | epot = -15.3218219071367 | etot = -14.6424332456251 -697000 ekin = 0.167921065286663 | erot = 0.532533688685253 | epot = -15.3428879996771 | etot = -14.6424332457052 -698000 ekin = 0.162200409472774 | erot = 0.554220619917019 | epot = -15.3588542751517 | etot = -14.6424332457619 -699000 ekin = 0.154762415711575 | erot = 0.571613361019907 | epot = -15.368809022521 | etot = -14.6424332457895 -700000 ekin = 0.145804230005083 | erot = 0.584063387080077 | epot = -15.3723008628696 | etot = -14.6424332457845 -701000 ekin = 0.135652269555388 | erot = 0.591306922713827 | epot = -15.3693924380153 | etot = -14.6424332457461 -702000 ekin = 0.124756460204868 | erot = 0.593482464342007 | epot = -15.3606721702233 | etot = -14.6424332456764 -703000 ekin = 0.113674325949345 | erot = 0.591114401850601 | epot = -15.3472219733802 | etot = -14.6424332455803 -704000 ekin = 0.103045675944418 | erot = 0.585064323190893 | epot = -15.3305432445999 | etot = -14.6424332454646 -705000 ekin = 0.0935593581959002 | erot = 0.576454826529687 | epot = -15.3124474300636 | etot = -14.6424332453381 -706000 ekin = 0.0859140824288037 | erot = 0.566573150252357 | epot = -15.2949204778913 | etot = -14.6424332452102 -707000 ekin = 0.0807756759567911 | erot = 0.55676342760568 | epot = -15.2799723486533 | etot = -14.6424332450908 -708000 ekin = 0.0787333622616226 | erot = 0.548316855287879 | epot = -15.2694834625385 | etot = -14.642433244989 -709000 ekin = 0.0802577669172481 | erot = 0.542368667950794 | epot = -15.2650596797808 | etot = -14.6424332449128 -710000 ekin = 0.0856633545554356 | erot = 0.539809747046207 | epot = -15.2679063464701 | etot = -14.6424332448684 -711000 ekin = 0.0950778519056364 | erot = 0.541219180888258 | epot = -15.2787302776538 | etot = -14.6424332448599 -712000 ekin = 0.108420876625278 | erot = 0.546822307908264 | epot = -15.2976764294222 | etot = -14.6424332448887 -713000 ekin = 0.125393451698083 | erot = 0.556476834654375 | epot = -15.3243035313063 | etot = -14.6424332449538 -714000 ekin = 0.145479367624718 | erot = 0.569687600115898 | epot = -15.3576002127924 | etot = -14.6424332450518 -715000 ekin = 0.167958541120058 | erot = 0.585648522299604 | epot = -15.3960403085967 | etot = -14.642433245177 -716000 ekin = 0.191931735854316 | erot = 0.603308292527971 | epot = -15.4376732737042 | etot = -14.642433245322 -717000 ekin = 0.216355400179798 | erot = 0.621454592033853 | epot = -15.4802432376916 | etot = -14.642433245478 -718000 ekin = 0.240085056513101 | erot = 0.638810139728773 | epot = -15.5213284418773 | etot = -14.6424332456354 -719000 ekin = 0.2619256985777 | erot = 0.654132895983971 | epot = -15.5584918403466 | etot = -14.6424332457849 -720000 ekin = 0.28068796931356 | erot = 0.666312379865739 | epot = -15.5894335950965 | etot = -14.6424332459173 -721000 ekin = 0.29524934559066 | erot = 0.67445438592732 | epot = -15.6121369775421 | etot = -14.6424332460241 -722000 ekin = 0.304619886334692 | erot = 0.677947410255783 | epot = -15.6250005426889 | etot = -14.6424332460984 -723000 ekin = 0.308011983728305 | erot = 0.676505724572205 | epot = -15.6269509544349 | etot = -14.6424332461343 -724000 ekin = 0.304912667283982 | erot = 0.670186105902464 | epot = -15.6175320193144 | etot = -14.6424332461279 -725000 ekin = 0.295155116710403 | erot = 0.659377522493332 | epot = -15.5969658852807 | etot = -14.642433246077 -726000 ekin = 0.278983134898141 | erot = 0.64476536316321 | epot = -15.566181744043 | etot = -14.6424332459817 -727000 ekin = 0.257098790791632 | erot = 0.627273860368463 | epot = -15.5268058970053 | etot = -14.6424332458452 -728000 ekin = 0.230680158271491 | erot = 0.607992016186509 | epot = -15.481105420132 | etot = -14.642433245674 -729000 ekin = 0.201354496272656 | erot = 0.588089464040682 | epot = -15.431877205792 | etot = -14.6424332454786 -730000 ekin = 0.171114103974891 | erot = 0.568729214721915 | epot = -15.3822765639702 | etot = -14.6424332452734 -731000 ekin = 0.142168923907701 | erot = 0.550984135076555 | epot = -15.3355863040604 | etot = -14.6424332450762 -732000 ekin = 0.116742007096137 | erot = 0.53576334904922 | epot = -15.2949386010513 | etot = -14.642433244906 -733000 ekin = 0.0968293027534553 | erot = 0.523753647326354 | epot = -15.263016194861 | etot = -14.6424332447811 -734000 ekin = 0.0839596135584523 | erot = 0.515379592342376 | epot = -15.2417724506166 | etot = -14.6424332447158 -735000 ekin = 0.0789983701763479 | erot = 0.510784464198715 | epot = -15.2322160790922 | etot = -14.6424332447172 -736000 ekin = 0.0820355551921709 | erot = 0.50983264226798 | epot = -15.2343014422443 | etot = -14.6424332447842 -737000 ekin = 0.0923827123855584 | erot = 0.512132550856096 | epot = -15.2469485081487 | etot = -14.6424332449071 -738000 ekin = 0.108680448513224 | erot = 0.517077971027258 | epot = -15.2681916646102 | etot = -14.6424332450697 -739000 ekin = 0.129093715682814 | erot = 0.523904364925766 | epot = -15.2954313258602 | etot = -14.6424332452517 -740000 ekin = 0.15155527779348 | erot = 0.531755895778197 | epot = -15.3257444190044 | etot = -14.6424332454328 -741000 ekin = 0.174012721806218 | erot = 0.539758083451595 | epot = -15.3562040508525 | etot = -14.6424332455947 -742000 ekin = 0.194640916831006 | erot = 0.547090549697286 | epot = -15.3841647122521 | etot = -14.6424332457238 -743000 ekin = 0.211995737398214 | erot = 0.553054125335325 | epot = -15.4074831085448 | etot = -14.6424332458113 -744000 ekin = 0.225100508722262 | erot = 0.557126762307569 | epot = -15.4246605168834 | etot = -14.6424332458535 -745000 ekin = 0.233469424486088 | erot = 0.559003260237168 | epot = -15.4349059305748 | etot = -14.6424332458516 -746000 ekin = 0.237079913464344 | erot = 0.558614810498451 | epot = -15.4381279697727 | etot = -14.6424332458099 -747000 ekin = 0.236308652984203 | erot = 0.556125790081759 | epot = -15.4348676888019 | etot = -14.6424332457359 -748000 ekin = 0.231845097887216 | erot = 0.551907079329399 | epot = -15.4261854228557 | etot = -14.6424332456391 -749000 ekin = 0.224593843483544 | erot = 0.546487360029099 | epot = -15.4135144490426 | etot = -14.64243324553 -750000 ekin = 0.215574369391573 | erot = 0.540486233484455 | epot = -15.3984938482957 | etot = -14.6424332454197 -751000 ekin = 0.205824583426189 | erot = 0.534535356763915 | epot = -15.382793185509 | etot = -14.6424332453189 -752000 ekin = 0.196313335741652 | erot = 0.529195815217452 | epot = -15.3679423961962 | etot = -14.6424332452371 -753000 ekin = 0.18786647578713 | erot = 0.524881252730246 | epot = -15.3551809736993 | etot = -14.6424332451819 -754000 ekin = 0.181110613625679 | erot = 0.521796491095261 | epot = -15.3453403498786 | etot = -14.6424332451577 -755000 ekin = 0.176438042203775 | erot = 0.519900210803555 | epot = -15.338771498173 | etot = -14.6424332451657 -756000 ekin = 0.173994962646467 | erot = 0.518897676280472 | epot = -15.3353258841305 | etot = -14.6424332452036 -757000 ekin = 0.17369319027005 | erot = 0.518265706176924 | epot = -15.3343921417126 | etot = -14.6424332452657 -758000 ekin = 0.175243155014308 | erot = 0.517307659815071 | epot = -15.3349840601729 | etot = -14.6424332453435 -759000 ekin = 0.178203703092603 | erot = 0.515231902157245 | epot = -15.3358688506773 | etot = -14.6424332454274 -760000 ekin = 0.182042463548514 | erot = 0.511243837941253 | epot = -15.3357195469971 | etot = -14.6424332455073 -761000 ekin = 0.186199747761112 | erot = 0.504639825539833 | epot = -15.3332728188749 | etot = -14.642433245574 -762000 ekin = 0.190149235945201 | erot = 0.494891409026379 | epot = -15.3274738905916 | etot = -14.64243324562 -763000 ekin = 0.19344992109476 | erot = 0.481710238280289 | epot = -15.3175934050153 | etot = -14.6424332456403 -764000 ekin = 0.195785552426666 | erot = 0.465087294345553 | epot = -15.3033060924049 | etot = -14.6424332456327 -765000 ekin = 0.196989678185073 | erot = 0.445303873487137 | epot = -15.2847267972699 | etot = -14.6424332455977 -766000 ekin = 0.197055919183212 | erot = 0.42291544028835 | epot = -15.2624046050097 | etot = -14.6424332455381 -767000 ekin = 0.196134076494303 | erot = 0.398712320920496 | epot = -15.2372796428733 | etot = -14.6424332454585 -768000 ekin = 0.194513096653068 | erot = 0.373662938956883 | epot = -15.2106092809751 | etot = -14.6424332453652 -769000 ekin = 0.192592017627892 | erot = 0.348845887484768 | epot = -15.1838711503777 | etot = -14.6424332452651 -770000 ekin = 0.190840163687176 | erot = 0.325376840212375 | epot = -15.1586502490656 | etot = -14.642433245166 -771000 ekin = 0.18974839722849 | erot = 0.304335529900748 | epot = -15.1365171722051 | etot = -14.6424332450758 -772000 ekin = 0.189774341851785 | erot = 0.286697153922276 | epot = -15.1189047407762 | etot = -14.6424332450021 -773000 ekin = 0.191286034501687 | erot = 0.273271857837846 | epot = -15.1069911372907 | etot = -14.6424332449512 -774000 ekin = 0.194510000609648 | erot = 0.264655458971537 | epot = -15.1015987045095 | etot = -14.6424332449283 -775000 ekin = 0.199490639679984 | erot = 0.26119419315712 | epot = -15.1031180777729 | etot = -14.6424332449358 -776000 ekin = 0.206067477066117 | erot = 0.262965803936521 | epot = -15.1114665259767 | etot = -14.642433244974 -777000 ekin = 0.213875019086253 | erot = 0.26977856841343 | epot = -15.1260868325399 | etot = -14.6424332450402 -778000 ekin = 0.222366868965248 | erot = 0.28118879067645 | epot = -15.1459889047707 | etot = -14.642433245129 -779000 ekin = 0.230862102269003 | erot = 0.296535944175655 | epot = -15.1698312916776 | etot = -14.642433245233 -780000 ekin = 0.238608567019459 | erot = 0.314993169090484 | epot = -15.1960349814533 | etot = -14.6424332453433 -781000 ekin = 0.244855557741724 | erot = 0.335629445234017 | epot = -15.2229182484265 | etot = -14.6424332454508 -782000 ekin = 0.248927612478539 | erot = 0.357478674283243 | epot = -15.2488395323083 | etot = -14.6424332455465 -783000 ekin = 0.250291897529527 | erot = 0.379610269023874 | epot = -15.2723354121762 | etot = -14.6424332456228 -784000 ekin = 0.248613283253061 | erot = 0.401195731117841 | epot = -15.2922422600443 | etot = -14.6424332456734 -785000 ekin = 0.243793133450601 | erot = 0.421566090461024 | epot = -15.307792469606 | etot = -14.6424332456943 -786000 ekin = 0.235989501852303 | erot = 0.440255905201143 | epot = -15.3186786527374 | etot = -14.6424332456839 -787000 ekin = 0.225617610784108 | erot = 0.457030673426751 | epot = -15.3250815298537 | etot = -14.6424332456428 -788000 ekin = 0.213330260901183 | erot = 0.471895861690619 | epot = -15.3276593681661 | etot = -14.6424332455743 -789000 ekin = 0.199978499676554 | erot = 0.485087183878154 | epot = -15.3274989290383 | etot = -14.6424332454836 -790000 ekin = 0.186553834702685 | erot = 0.49704314123859 | epot = -15.3260302213197 | etot = -14.6424332453784 -791000 ekin = 0.1741147667921 | erot = 0.50836204856622 | epot = -15.3249100606257 | etot = -14.6424332452674 -792000 ekin = 0.163702420431701 | erot = 0.51974673917794 | epot = -15.3258824047698 | etot = -14.6424332451602 -793000 ekin = 0.156252224966457 | erot = 0.531940822987137 | epot = -15.3306262930203 | etot = -14.6424332450667 -794000 ekin = 0.152510350035464 | erot = 0.545660777313288 | epot = -15.3406043723442 | etot = -14.6424332449954 -795000 ekin = 0.152964251159109 | erot = 0.561528326979684 | epot = -15.3569258230922 | etot = -14.6424332449534 -796000 ekin = 0.157795747358515 | erot = 0.580007578776928 | epot = -15.3802365710806 | etot = -14.6424332449452 -797000 ekin = 0.166862457859355 | erot = 0.601351255568643 | epot = -15.4106469584005 | etot = -14.6424332449725 -798000 ekin = 0.179709603433533 | erot = 0.625560121844511 | epot = -15.4477029703124 | etot = -14.6424332450343 -799000 ekin = 0.195609966062582 | erot = 0.652359247175382 | epot = -15.4904024583648 | etot = -14.6424332451268 -800000 ekin = 0.21362615879192 | erot = 0.681194021872161 | epot = -15.5372534259079 | etot = -14.6424332452438 -801000 ekin = 0.232687040194013 | erot = 0.711247726384676 | epot = -15.5863680119565 | etot = -14.6424332453778 -802000 ekin = 0.251669429106418 | erot = 0.741480919833798 | epot = -15.6355835944601 | etot = -14.6424332455199 -803000 ekin = 0.269477067858474 | erot = 0.770691008418421 | epot = -15.6826013219377 | etot = -14.6424332456608 -804000 ekin = 0.285110541457613 | erot = 0.797588259155307 | epot = -15.7251320464044 | etot = -14.6424332457915 -805000 ekin = 0.297723982505881 | erot = 0.820882528796191 | epot = -15.7610397572058 | etot = -14.6424332459037 -806000 ekin = 0.306666387686681 | erot = 0.839373432909927 | epot = -15.7884730665872 | etot = -14.6424332459906 -807000 ekin = 0.31150697555513 | erot = 0.852035914442321 | epot = -15.8059761360442 | etot = -14.6424332460468 -808000 ekin = 0.312045176252278 | erot = 0.858093398524838 | epot = -15.8125718208465 | etot = -14.6424332460693 -809000 ekin = 0.308306642386273 | erot = 0.857071970755581 | epot = -15.8078118591994 | etot = -14.6424332460575 -810000 ekin = 0.300527220558769 | erot = 0.848831113926185 | epot = -15.7917915804976 | etot = -14.6424332460127 -811000 ekin = 0.289127204418015 | erot = 0.833569138620148 | epot = -15.7651295889766 | etot = -14.6424332459384 -812000 ekin = 0.274678427598496 | erot = 0.811804116491607 | epot = -15.7289157899298 | etot = -14.6424332458397 -813000 ekin = 0.257866835579426 | erot = 0.784333459541846 | epot = -15.684633540844 | etot = -14.6424332457228 -814000 ekin = 0.23945308058931 | erot = 0.752176980196106 | epot = -15.63406330638 | etot = -14.6424332455946 -815000 ekin = 0.220233415146519 | erot = 0.716509170266752 | epot = -15.5791758308753 | etot = -14.642433245462 -816000 ekin = 0.201002751041399 | erot = 0.678586569748396 | epot = -15.5220225661216 | etot = -14.6424332453318 -817000 ekin = 0.18252126107505 | erot = 0.639675603865343 | epot = -15.4646301101503 | etot = -14.6424332452099 -818000 ekin = 0.165485401522846 | erot = 0.600985363831713 | epot = -15.4089040104561 | etot = -14.6424332451015 -819000 ekin = 0.150503789775747 | erot = 0.563608719249245 | epot = -15.3565457540357 | etot = -14.6424332450107 -820000 ekin = 0.138078032174272 | erot = 0.528474068971833 | epot = -15.3089853460868 | etot = -14.6424332449407 -821000 ekin = 0.128588386726511 | erot = 0.496309093116561 | epot = -15.2673307247364 | etot = -14.6424332448933 -822000 ekin = 0.122284066133867 | erot = 0.467617125513717 | epot = -15.2323344365172 | etot = -14.6424332448696 -823000 ekin = 0.119278020922156 | erot = 0.442666228475767 | epot = -15.2043774942676 | etot = -14.6424332448697 -824000 ekin = 0.11954615860232 | erot = 0.421490682734675 | epot = -15.1834700862293 | etot = -14.6424332448923 -825000 ekin = 0.122931110514063 | erot = 0.403904342218782 | epot = -15.1692686976681 | etot = -14.6424332449353 -826000 ekin = 0.129150803764736 | erot = 0.389525074994087 | epot = -15.1611091237546 | etot = -14.6424332449958 -827000 ekin = 0.13781217640048 | erot = 0.377809252263739 | epot = -15.1580546737341 | etot = -14.6424332450699 -828000 ekin = 0.148430331610552 | erot = 0.368094906955303 | epot = -15.1589584837189 | etot = -14.642433245153 -829000 ekin = 0.160453205764678 | erot = 0.359651737503965 | epot = -15.1625381885083 | etot = -14.6424332452397 -830000 ekin = 0.173291382900488 | erot = 0.351735589536941 | epot = -15.1674602177616 | etot = -14.6424332453242 -831000 ekin = 0.186352012967306 | erot = 0.343644456321439 | epot = -15.1724297146895 | etot = -14.6424332454008 -832000 ekin = 0.199074924610257 | erot = 0.334772487912775 | epot = -15.1762806579872 | etot = -14.6424332454642 -833000 ekin = 0.21096808488557 | erot = 0.324658115180945 | epot = -15.1780594455761 | etot = -14.6424332455096 -834000 ekin = 0.221638757262048 | erot = 0.313022323435154 | epot = -15.1770943262313 | etot = -14.6424332455341 -835000 ekin = 0.230816330006817 | erot = 0.299793483320239 | epot = -15.1730430588632 | etot = -14.6424332455362 -836000 ekin = 0.238363132178598 | erot = 0.285116039955304 | epot = -15.1659124176506 | etot = -14.6424332455167 -837000 ekin = 0.244270841534601 | erot = 0.269341751255032 | epot = -15.1560458382682 | etot = -14.6424332454786 -838000 ekin = 0.248642320238311 | erot = 0.253003904100191 | epot = -15.1440794697648 | etot = -14.6424332454263 -839000 ekin = 0.251661569329026 | erot = 0.236776758984402 | epot = -15.1308715736792 | etot = -14.6424332453657 -840000 ekin = 0.253557306828186 | erot = 0.221424057159563 | epot = -15.1174146092908 | etot = -14.6424332453031 -841000 ekin = 0.254567562695226 | erot = 0.207741475742368 | epot = -15.1047422836813 | etot = -14.6424332452437 -842000 ekin = 0.254912814680658 | erot = 0.196498262353642 | epot = -15.0938443222261 | etot = -14.6424332451918 -843000 ekin = 0.254783130761356 | erot = 0.188382921786835 | epot = -15.0855992976984 | etot = -14.6424332451502 -844000 ekin = 0.254340789692271 | erot = 0.183956927272144 | epot = -15.0807309620841 | etot = -14.6424332451197 -845000 ekin = 0.253734932885291 | erot = 0.183619247980767 | epot = -15.0797874259665 | etot = -14.6424332451004 -846000 ekin = 0.253120504189352 | erot = 0.187583282240028 | epot = -15.083137031521 | etot = -14.6424332450917 -847000 ekin = 0.252671650081555 | erot = 0.195866742639204 | epot = -15.0909716378138 | etot = -14.6424332450931 -848000 ekin = 0.252580915304149 | erot = 0.20829422246311 | epot = -15.1033083828722 | etot = -14.6424332451049 -849000 ekin = 0.253039966843155 | erot = 0.224511555531671 | epot = -15.1199847675026 | etot = -14.6424332451278 -850000 ekin = 0.254204001794827 | erot = 0.244010590097553 | epot = -15.1406478370548 | etot = -14.6424332451625 -851000 ekin = 0.256148339024765 | erot = 0.266162563602365 | epot = -15.1647441478362 | etot = -14.6424332452091 -852000 ekin = 0.258829686440353 | erot = 0.290257858698016 | epot = -15.1915207904047 | etot = -14.6424332452664 -853000 ekin = 0.262064657830116 | erot = 0.315549558167712 | epot = -15.2200474613291 | etot = -14.6424332453313 -854000 ekin = 0.265534116125784 | erot = 0.341297947736661 | epot = -15.2492653092617 | etot = -14.6424332453992 -855000 ekin = 0.268815174658043 | erot = 0.366813004431579 | epot = -15.2780614245539 | etot = -14.6424332454642 -856000 ekin = 0.271435486960036 | erot = 0.391492007902628 | epot = -15.3053607403828 | etot = -14.6424332455201 -857000 ekin = 0.272939108069001 | erot = 0.414849750475152 | epot = -15.3302221041057 | etot = -14.6424332455615 -858000 ekin = 0.272951155045922 | erot = 0.43653939069034 | epot = -15.3519237913207 | etot = -14.6424332455845 -859000 ekin = 0.271229880682349 | erot = 0.45636275006221 | epot = -15.3700258763315 | etot = -14.6424332455869 -860000 ekin = 0.267698633839169 | erot = 0.474269718464024 | epot = -15.3844015978727 | etot = -14.6424332455695 -861000 ekin = 0.262455001757241 | erot = 0.49034731601152 | epot = -15.3952355633029 | etot = -14.6424332455341 -862000 ekin = 0.25575879717988 | erot = 0.504799761302853 | epot = -15.4029918039674 | etot = -14.6424332454846 -863000 ekin = 0.248003564343274 | erot = 0.51792153281644 | epot = -15.4083583425854 | etot = -14.6424332454256 -864000 ekin = 0.239677655585274 | erot = 0.530065823507129 | epot = -15.4121767244547 | etot = -14.6424332453623 -865000 ekin = 0.231320889444316 | erot = 0.541610953537655 | epot = -15.4153650882814 | etot = -14.6424332452994 -866000 ekin = 0.223481813673762 | erot = 0.552927233334676 | epot = -15.4188422922498 | etot = -14.6424332452414 -867000 ekin = 0.216679174488042 | erot = 0.564346499434233 | epot = -15.4234589191143 | etot = -14.642433245192 -868000 ekin = 0.211369750013041 | erot = 0.576136138939756 | epot = -15.4299391341068 | etot = -14.642433245154 -869000 ekin = 0.207923502302012 | erot = 0.588478941151288 | epot = -15.4388356885826 | etot = -14.6424332451293 -870000 ekin = 0.206606152993218 | erot = 0.601459626889061 | epot = -15.4504990250012 | etot = -14.6424332451189 -871000 ekin = 0.207568796750693 | erot = 0.615058451103092 | epot = -15.4650604929769 | etot = -14.6424332451232 -872000 ekin = 0.210843969893697 | erot = 0.629151875755849 | epot = -15.4824290907908 | etot = -14.6424332451412 -873000 ekin = 0.216347593110921 | erot = 0.643519970828816 | epot = -15.5023008091116 | etot = -14.6424332451719 -874000 ekin = 0.223886305135079 | erot = 0.657859909724887 | epot = -15.5241794600731 | etot = -14.6424332452131 -875000 ekin = 0.233169807545165 | erot = 0.671804662204345 | epot = -15.5474077150121 | etot = -14.6424332452626 -876000 ekin = 0.243827877956283 | erot = 0.684945735792735 | epot = -15.5712068590662 | etot = -14.6424332453172 -877000 ekin = 0.255431632539533 | erot = 0.69685856734687 | epot = -15.59472344526 | etot = -14.6424332453736 -878000 ekin = 0.267518408507977 | erot = 0.707128927380794 | epot = -15.6170805813173 | etot = -14.6424332454285 -879000 ekin = 0.279619300255103 | erot = 0.715378495713086 | epot = -15.6374310414467 | etot = -14.6424332454785 -880000 ekin = 0.291287955018077 | erot = 0.721287639191124 | epot = -15.6550088397298 | etot = -14.6424332455206 -881000 ekin = 0.302128778463813 | erot = 0.724613422802814 | epot = -15.6691754468188 | etot = -14.6424332455522 -882000 ekin = 0.311822304069663 | erot = 0.725201068169202 | epot = -15.6794566178107 | etot = -14.6424332455718 -883000 ekin = 0.320145243790182 | erot = 0.722987481096826 | epot = -15.6855659704656 | etot = -14.6424332455786 -884000 ekin = 0.326982762202934 | erot = 0.717996120152177 | epot = -15.6874121279285 | etot = -14.6424332455734 -885000 ekin = 0.332330882217903 | erot = 0.710323349665429 | epot = -15.6850874774411 | etot = -14.6424332455577 -886000 ekin = 0.3362876733376 | erot = 0.700117442969925 | epot = -15.6788383618422 | etot = -14.6424332455347 -887000 ekin = 0.339032964159152 | erot = 0.687552454430956 | epot = -15.669018664098 | etot = -14.6424332455079 -888000 ekin = 0.340797654552513 | erot = 0.672800100939676 | epot = -15.6560310009738 | etot = -14.6424332454816 -889000 ekin = 0.34182510616745 | erot = 0.656003407096659 | epot = -15.6402617587242 | etot = -14.6424332454601 -890000 ekin = 0.342328347583626 | erot = 0.637256013160498 | epot = -15.6220176061908 | etot = -14.6424332454466 -891000 ekin = 0.342447730500156 | erot = 0.616590618565209 | epot = -15.6014715945095 | etot = -14.6424332454441 -892000 ekin = 0.342214057419173 | erot = 0.593979026501716 | epot = -15.5786263293744 | etot = -14.6424332454535 -893000 ekin = 0.341522004916655 | erot = 0.569344767729282 | epot = -15.5533000181202 | etot = -14.6424332454743 -894000 ekin = 0.340117934122973 | erot = 0.542587519912699 | epot = -15.5251386995399 | etot = -14.6424332455043 -895000 ekin = 0.337605044786591 | erot = 0.513616778977829 | epot = -15.4936550693041 | etot = -14.6424332455397 -896000 ekin = 0.333467462875004 | erot = 0.482390775172149 | epot = -15.4582914836226 | etot = -14.6424332455754 -897000 ekin = 0.327113397523287 | erot = 0.448955709001752 | epot = -15.4185023521305 | etot = -14.6424332456055 -898000 ekin = 0.317936017621248 | erot = 0.413480165458506 | epot = -15.3738494287033 | etot = -14.6424332456235 -899000 ekin = 0.305389123795995 | erot = 0.376280077469328 | epot = -15.3241024468887 | etot = -14.6424332456234 -900000 ekin = 0.289072881395205 | erot = 0.33783075231933 | epot = -15.2693368793137 | etot = -14.6424332455992 -901000 ekin = 0.268822686259722 | erot = 0.298764046957525 | epot = -15.210019978764 | etot = -14.6424332455467 -902000 ekin = 0.244791653969059 | erot = 0.259850521118117 | epot = -15.1470754205508 | etot = -14.6424332454636 -903000 ekin = 0.217514571462647 | erot = 0.221968047210559 | epot = -15.0819158640231 | etot = -14.6424332453499 -904000 ekin = 0.187939204411547 | erot = 0.186059692012671 | epot = -15.0164321416336 | etot = -14.6424332452094 -905000 ekin = 0.157410847731421 | erot = 0.153084564883885 | epot = -14.9529286576649 | etot = -14.6424332450496 -906000 ekin = 0.127599356271486 | erot = 0.123965703545322 | epot = -14.8939983046986 | etot = -14.6424332448818 -907000 ekin = 0.100365589130874 | erot = 0.0995389863896986 | epot = -14.8423378202417 | etot = -14.6424332447211 -908000 ekin = 0.0775759855947723 | erot = 0.0805066337401136 | epot = -14.8005158639184 | etot = -14.6424332445836 -909000 ekin = 0.0608876950035596 | erot = 0.0673982354566904 | epot = -14.7707191749448 | etot = -14.6424332444846 -910000 ekin = 0.0515382922990323 | erot = 0.0605415547705503 | epot = -14.754513091506 | etot = -14.6424332444364 -911000 ekin = 0.0501789452912214 | erot = 0.0600446989619074 | epot = -14.7526568886984 | etot = -14.6424332444452 -912000 ekin = 0.0567846925756438 | erot = 0.0657906450220636 | epot = -14.7650085821077 | etot = -14.64243324451 -913000 ekin = 0.0706603747975919 | erot = 0.0774445361854764 | epot = -14.7905381556062 | etot = -14.6424332446231 -914000 ekin = 0.0905398584143928 | erot = 0.09447356942817 | epot = -14.8274466726137 | etot = -14.6424332447712 -915000 ekin = 0.114756144633922 | erot = 0.116178630204486 | epot = -14.8733680197766 | etot = -14.6424332449382 -916000 ekin = 0.1414470434077 | erot = 0.141736093135148 | epot = -14.9256163816507 | etot = -14.6424332451079 -917000 ekin = 0.168758535424857 | erot = 0.170247440483861 | epot = -14.9814392211747 | etot = -14.642433245266 -918000 ekin = 0.195014913443985 | erot = 0.200793639362916 | epot = -15.0382417982087 | etot = -14.6424332454018 -919000 ekin = 0.218837422087163 | erot = 0.232490666329869 | epot = -15.0937613339254 | etot = -14.6424332455083 -920000 ekin = 0.239206641026251 | erot = 0.264542267085451 | epot = -15.1461821536942 | etot = -14.6424332455825 -921000 ekin = 0.255474577150147 | erot = 0.296286050795695 | epot = -15.1941938735699 | etot = -14.6424332456241 -922000 ekin = 0.267338631216215 | erot = 0.3272293631989 | epot = -15.2370012400505 | etot = -14.6424332456354 -923000 ekin = 0.274791412213643 | erot = 0.357072039931594 | epot = -15.2742966977653 | etot = -14.6424332456201 -924000 ekin = 0.278059017514867 | erot = 0.385714059427163 | epot = -15.3062063225251 | etot = -14.642433245583 -925000 ekin = 0.277537405166003 | erot = 0.413247220090432 | epot = -15.3332178707861 | etot = -14.6424332455297 -926000 ekin = 0.273733135235186 | erot = 0.439931173656859 | epot = -15.3560975543577 | etot = -14.6424332454656 -927000 ekin = 0.2672118596377 | erot = 0.466155363878069 | epot = -15.3758004689124 | etot = -14.6424332453966 -928000 ekin = 0.258555847531663 | erot = 0.492389553498773 | epot = -15.3933786463588 | etot = -14.6424332453284 -929000 ekin = 0.24833056788698 | erot = 0.519126582978183 | epot = -15.4098903961313 | etot = -14.6424332452661 -930000 ekin = 0.237059747160854 | erot = 0.546821711628368 | epot = -15.4263147040038 | etot = -14.6424332452146 -931000 ekin = 0.225208144800208 | erot = 0.575833282920124 | epot = -15.443474672898 | etot = -14.6424332451776 -932000 ekin = 0.213171319360021 | erot = 0.606369490848263 | epot = -15.4619740553664 | etot = -14.6424332451581 -933000 ekin = 0.201271722990002 | erot = 0.638445690375275 | epot = -15.4821506585228 | etot = -14.6424332451576 -934000 ekin = 0.1897604601043 | erot = 0.671856006695392 | epot = -15.5040497119758 | etot = -14.6424332451761 -935000 ekin = 0.178823941832683 | erot = 0.706161996583481 | epot = -15.5274191836287 | etot = -14.6424332452125 -936000 ekin = 0.168594479109542 | erot = 0.740699865833205 | epot = -15.5517275902069 | etot = -14.6424332452642 -937000 ekin = 0.159163635629853 | erot = 0.774606336201985 | epot = -15.5762032171592 | etot = -14.6424332453274 -938000 ekin = 0.150596971910365 | erot = 0.806861786792148 | epot = -15.5998920040998 | etot = -14.6424332453973 -939000 ekin = 0.142948711628503 | erot = 0.836347883522741 | epot = -15.6217298406201 | etot = -14.6424332454689 -940000 ekin = 0.136274889167954 | erot = 0.861915676025228 | epot = -15.6406238107298 | etot = -14.6424332455366 -941000 ekin = 0.130643703196503 | erot = 0.882459199117352 | epot = -15.6555361479093 | etot = -14.6424332455954 -942000 ekin = 0.126142088159133 | erot = 0.896989065169588 | epot = -15.6655643989696 | etot = -14.6424332456409 -943000 ekin = 0.122877886109422 | erot = 0.904700444356994 | epot = -15.6700115761358 | etot = -14.6424332456694 -944000 ekin = 0.120977407412092 | erot = 0.905030230235766 | epot = -15.6684408833268 | etot = -14.6424332456789 -945000 ekin = 0.120578563691415 | erot = 0.897699054745272 | epot = -15.6607108641053 | etot = -14.6424332456687 -946000 ekin = 0.121820103594848 | erot = 0.882735070928782 | epot = -15.6469884201628 | etot = -14.6424332456392 -947000 ekin = 0.12482776113095 | erot = 0.860477935597256 | epot = -15.6277389423208 | etot = -14.6424332455926 -948000 ekin = 0.129698334170892 | erot = 0.831563037039252 | epot = -15.6036946167425 | etot = -14.6424332455323 -949000 ekin = 0.136482857560577 | erot = 0.79688755472377 | epot = -15.575803657747 | etot = -14.6424332454626 -950000 ekin = 0.145170138933631 | erot = 0.757561255989922 | epot = -15.5451646403118 | etot = -14.6424332453883 -951000 ekin = 0.155672002997439 | erot = 0.714845916095212 | epot = -15.5129511644071 | etot = -14.6424332453145 -952000 ekin = 0.167811650838207 | erot = 0.670087833251298 | epot = -15.4803327293357 | etot = -14.6424332452462 -953000 ekin = 0.181316579472716 | erot = 0.624648095212403 | epot = -15.448397919873 | etot = -14.6424332451879 -954000 ekin = 0.195817500701975 | erot = 0.579835080695394 | epot = -15.4180858265403 | etot = -14.642433245143 -955000 ekin = 0.210854606876723 | erot = 0.536843219767467 | epot = -15.3901310717581 | etot = -14.6424332451139 -956000 ekin = 0.225892299836499 | erot = 0.496701376789209 | epot = -15.3650269217274 | etot = -14.6424332451017 -957000 ekin = 0.240343066496853 | erot = 0.460233438090621 | epot = -15.3430097496933 | etot = -14.6424332451058 -958000 ekin = 0.253600493836736 | erot = 0.42803284988996 | epot = -15.3240665888511 | etot = -14.6424332451244 -959000 ekin = 0.26508043374485 | erot = 0.400452005454048 | epot = -15.3079656843528 | etot = -14.6424332451539 -960000 ekin = 0.274268068126471 | erot = 0.377606549444118 | epot = -15.2943078627606 | etot = -14.6424332451901 -961000 ekin = 0.280767177999 | erot = 0.359393861243669 | epot = -15.2825942844703 | etot = -14.6424332452277 -962000 ekin = 0.284346484058602 | erot = 0.345524198810441 | epot = -15.2723039281306 | etot = -14.6424332452616 -963000 ekin = 0.284976816085034 | erot = 0.335562232323024 | epot = -15.2629722936952 | etot = -14.6424332452871 -964000 ekin = 0.282852494243522 | erot = 0.32897598649096 | epot = -15.2542617260352 | etot = -14.6424332453007 -965000 ekin = 0.278391086611738 | erot = 0.325189577593378 | epot = -15.2460139095058 | etot = -14.6424332453007 -966000 ekin = 0.272207924676691 | erot = 0.323635640146036 | epot = -15.2382768101097 | etot = -14.642433245287 -967000 ekin = 0.265065367869027 | erot = 0.323803079983457 | epot = -15.2313016931143 | etot = -14.6424332452618 -968000 ekin = 0.257801293713719 | erot = 0.325275872287662 | epot = -15.2255104112302 | etot = -14.6424332452289 -969000 ekin = 0.251245661475449 | erot = 0.327759142574007 | epot = -15.2214380492423 | etot = -14.6424332451928 -970000 ekin = 0.246137008995739 | erot = 0.331089781179757 | epot = -15.2196600353342 | etot = -14.6424332451587 -971000 ekin = 0.243051319619966 | erot = 0.33523032566459 | epot = -15.2207148904156 | etot = -14.642433245131 -972000 ekin = 0.242353409643608 | erot = 0.340246678804723 | epot = -15.2250333335617 | etot = -14.6424332451134 -973000 ekin = 0.244176338168007 | erot = 0.346272190711145 | epot = -15.2328817739873 | etot = -14.6424332451082 -974000 ekin = 0.248428661663755 | erot = 0.353462430362483 | epot = -15.2443243371428 | etot = -14.6424332451165 -975000 ekin = 0.254824314808551 | erot = 0.361946299431228 | epot = -15.2592038593783 | etot = -14.6424332451385 -976000 ekin = 0.262926848825407 | erot = 0.371779749930384 | epot = -15.2771398439293 | etot = -14.6424332451735 -977000 ekin = 0.272199235334814 | erot = 0.382908123264365 | epot = -15.297540603819 | etot = -14.6424332452198 -978000 ekin = 0.282052066854459 | erot = 0.395142048097357 | epot = -15.3196273602271 | etot = -14.6424332452753 -979000 ekin = 0.291885751915387 | erot = 0.408150081470895 | epot = -15.3424690787234 | etot = -14.6424332453371 -980000 ekin = 0.30112508378997 | erot = 0.421469125221684 | epot = -15.3650274544136 | etot = -14.642433245402 -981000 ekin = 0.309246535916074 | erot = 0.434531423654951 | epot = -15.3862112050371 | etot = -14.642433245466 -982000 ekin = 0.315799497488349 | erot = 0.44670496561477 | epot = -15.4049377086282 | etot = -14.6424332455251 -983000 ekin = 0.320422573217601 | erot = 0.457342632741541 | epot = -15.4201984515344 | etot = -14.6424332455753 -984000 ekin = 0.322855465254285 | erot = 0.465834622596771 | epot = -15.4311233334638 | etot = -14.6424332456128 -985000 ekin = 0.32294630247049 | erot = 0.471658590971291 | epot = -15.4370381390766 | etot = -14.6424332456348 -986000 ekin = 0.320653917800856 | erot = 0.474422556587777 | epot = -15.4375097200284 | etot = -14.6424332456398 -987000 ekin = 0.316044627357359 | erot = 0.47389675551299 | epot = -15.4323746284975 | etot = -14.6424332456271 -988000 ekin = 0.309283477264266 | erot = 0.470032116942702 | epot = -15.4217488398045 | etot = -14.6424332455975 -989000 ekin = 0.300620522165247 | erot = 0.462964620619614 | epot = -15.4060183883377 | etot = -14.6424332455528 -990000 ekin = 0.290373280687973 | erot = 0.453006262992725 | epot = -15.3858127891764 | etot = -14.6424332454957 -991000 ekin = 0.278906915703279 | erot = 0.440624526217148 | epot = -15.3619646873498 | etot = -14.6424332454294 -992000 ekin = 0.266613826413674 | erot = 0.42641300688918 | epot = -15.3354600786602 | etot = -14.6424332453573 -993000 ekin = 0.253894212446015 | erot = 0.411056197522459 | epot = -15.3073836552517 | etot = -14.6424332452832 -994000 ekin = 0.241138837000525 | erot = 0.395291372386185 | epot = -15.2788634545968 | etot = -14.6424332452101 -995000 ekin = 0.228714768908315 | erot = 0.37987020785268 | epot = -15.2510182219022 | etot = -14.6424332451412 -996000 ekin = 0.216954417472588 | erot = 0.365522282704471 | epot = -15.224909945256 | etot = -14.6424332450789 -997000 ekin = 0.206147766458975 | erot = 0.352922066135133 | epot = -15.2015030776194 | etot = -14.6424332450253 -998000 ekin = 0.196537413161466 | erot = 0.342660495987147 | epot = -15.1816311541304 | etot = -14.6424332449818 -999000 ekin = 0.188315843917223 | erot = 0.335221830000783 | epot = -15.1659709188674 | etot = -14.6424332449494 -1000000 ekin = 0.181624323072292 | erot = 0.330966139643599 | epot = -15.155023707645 | etot = -14.6424332449291 - 1000000 0.013453654 -1.5270261 0.011523695 -1.4973399 -0.00017938261 -Loop time of 20.6222 on 1 procs for 1000000 steps with 10 atoms - -Performance: 41896.597 tau/day, 48491.432 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 16.511 | 16.511 | 16.511 | 0.0 | 80.07 -Bond | 0.67362 | 0.67362 | 0.67362 | 0.0 | 3.27 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.28264 | 0.28264 | 0.28264 | 0.0 | 1.37 -Output | 6.9141e-06 | 6.9141e-06 | 6.9141e-06 | 0.0 | 0.00 -Modify | 2.735 | 2.735 | 2.735 | 0.0 | 13.26 -Other | | 0.4197 | | | 2.04 - -Nlocal: 10 ave 10 max 10 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 43 ave 43 max 43 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 43 -Ave neighs/atom = 4.3 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:20 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.4 deleted file mode 100644 index ba8d099913..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/log.24Mar17.duplex1.g++.4 +++ /dev/null @@ -1,1161 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.341 | 7.523 | 7.705 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 -1000 ekin = 0.00113448721737009 | erot = 0.0041345594773427 | epot = -14.6477022915193 | etot = -14.6424332448246 -2000 ekin = 0.00449927223902292 | erot = 0.0164446434455803 | epot = -14.6633771605337 | etot = -14.6424332448491 -3000 ekin = 0.00997964450840756 | erot = 0.0366523356056466 | epot = -14.6890652250033 | etot = -14.6424332448892 -4000 ekin = 0.017388811129498 | erot = 0.0643039804300251 | epot = -14.7241260365031 | etot = -14.6424332449436 -5000 ekin = 0.0264744514136422 | erot = 0.0987844033142134 | epot = -14.7676920997383 | etot = -14.6424332450104 -6000 ekin = 0.0369277948555727 | erot = 0.13933657105258 | epot = -14.8186976109956 | etot = -14.6424332450875 -7000 ekin = 0.0483950557190949 | erot = 0.18508629569211 | epot = -14.8759145965832 | etot = -14.642433245172 -8000 ekin = 0.0604909336919856 | erot = 0.235071307523581 | epot = -14.9379954864767 | etot = -14.6424332452611 -9000 ekin = 0.0728137406439518 | erot = 0.288273694501614 | epot = -15.003520680497 | etot = -14.6424332453514 -10000 ekin = 0.0849615563084574 | erot = 0.343654369293588 | epot = -15.0710491710418 | etot = -14.6424332454398 -11000 ekin = 0.0965486715044103 | erot = 0.400187932108392 | epot = -15.1391698491357 | etot = -14.6424332455229 -12000 ekin = 0.107221466282716 | erot = 0.456896095459393 | epot = -15.2065508073401 | etot = -14.642433245598 -13000 ekin = 0.116672809719361 | erot = 0.512877765427946 | epot = -15.27198382081 | etot = -14.6424332456627 -14000 ekin = 0.124654073730849 | erot = 0.567333962045503 | epot = -15.3344212814915 | etot = -14.6424332457151 -15000 ekin = 0.130983939684084 | erot = 0.619586028257146 | epot = -15.3930032136957 | etot = -14.6424332457544 -16000 ekin = 0.135553354544703 | erot = 0.66908602849033 | epot = -15.4470726288154 | etot = -14.6424332457804 -17000 ekin = 0.138326263958104 | erot = 0.715418858086103 | epot = -15.4961783678378 | etot = -14.6424332457936 -18000 ekin = 0.139336096663942 | erot = 0.758296324628468 | epot = -15.5400656670878 | etot = -14.6424332457954 -19000 ekin = 0.138678360045107 | erot = 0.797544234276629 | epot = -15.5786558401095 | etot = -14.6424332457878 -20000 ekin = 0.136500074655344 | erot = 0.83308420441182 | epot = -15.6120175248401 | etot = -14.642433245773 -21000 ekin = 0.13298706528568 | erot = 0.864912408453368 | epot = -15.6403327194924 | etot = -14.6424332457533 -22000 ekin = 0.128350288213599 | erot = 0.893077649558725 | epot = -15.6638611835035 | etot = -14.6424332457311 -23000 ekin = 0.122812385135574 | erot = 0.917661024684598 | epot = -15.6829066555285 | etot = -14.6424332457083 -24000 ekin = 0.116595521408358 | erot = 0.938759014332585 | epot = -15.6977877814273 | etot = -14.6424332456863 -25000 ekin = 0.109911323474882 | erot = 0.95647120734756 | epot = -15.7088157764886 | etot = -14.6424332456662 -26000 ekin = 0.102953426207684 | erot = 0.970893163953299 | epot = -15.7162798358093 | etot = -14.6424332456483 -27000 ekin = 0.0958928250746602 | erot = 0.982114250193902 | epot = -15.7204403209011 | etot = -14.6424332456326 -28000 ekin = 0.08887594109497 | erot = 0.990219731539409 | epot = -15.721528918253 | etot = -14.6424332456186 -29000 ekin = 0.0820250748771992 | erot = 0.995296041202176 | epot = -15.7197543616852 | etot = -14.6424332456058 -30000 ekin = 0.0754407616837525 | erot = 0.997437949319921 | epot = -15.7153119565969 | etot = -14.6424332455933 -31000 ekin = 0.0692054432607511 | erot = 0.996756332760935 | epot = -15.708395021602 | etot = -14.6424332455803 -32000 ekin = 0.0633878377974532 | erot = 0.993385345347625 | epot = -15.6992064287111 | etot = -14.6424332455661 -33000 ekin = 0.0580474070866977 | erot = 0.987487973308193 | epot = -15.6879686259451 | etot = -14.6424332455502 -34000 ekin = 0.0532383791882916 | erot = 0.979259192919847 | epot = -15.6749308176403 | etot = -14.6424332455322 -35000 ekin = 0.0490128758302373 | erot = 0.96892619740531 | epot = -15.6603723187477 | etot = -14.6424332455122 -36000 ekin = 0.0454228081405034 | erot = 0.956745409624112 | epot = -15.6446014632554 | etot = -14.6424332454908 -37000 ekin = 0.0425203357170931 | erot = 0.942996237999014 | epot = -15.6279498191848 | etot = -14.6424332454687 -38000 ekin = 0.0403568280944582 | erot = 0.927971766615185 | epot = -15.6107618401563 | etot = -14.6424332454467 -39000 ekin = 0.0389804214208553 | erot = 0.911966804108842 | epot = -15.5933804709559 | etot = -14.6424332454262 -40000 ekin = 0.0384324238853386 | erot = 0.89526395956212 | epot = -15.5761296288558 | etot = -14.6424332454083 -41000 ekin = 0.0387429860406854 | erot = 0.878118672837898 | epot = -15.559294904273 | etot = -14.6424332453944 -42000 ekin = 0.0399266053637397 | erot = 0.860744395135588 | epot = -15.543104245885 | etot = -14.6424332453857 -43000 ekin = 0.041978156101278 | erot = 0.84329936535652 | epot = -15.5277107668409 | etot = -14.6424332453831 -44000 ekin = 0.044870189409001 | erot = 0.825876603313516 | epot = -15.5131800381094 | etot = -14.6424332453868 -45000 ekin = 0.0485521857416513 | erot = 0.808498758186241 | epot = -15.4994841893249 | etot = -14.642433245397 -46000 ekin = 0.0529522094038552 | erot = 0.791119212188506 | epot = -15.486504667005 | etot = -14.6424332454127 -47000 ekin = 0.0579809824244721 | erot = 0.773630265884098 | epot = -15.4740444937409 | etot = -14.6424332454323 -48000 ekin = 0.0635377846502182 | erot = 0.755878310838203 | epot = -15.4618493409424 | etot = -14.6424332454539 -49000 ekin = 0.0695169124467202 | erot = 0.737684732484798 | epot = -15.4496348904071 | etot = -14.6424332454756 -50000 ekin = 0.0758129058465097 | erot = 0.718870126220151 | epot = -15.437116277562 | etot = -14.6424332454953 -51000 ekin = 0.0823226638652294 | erot = 0.699278599520714 | epot = -15.424034508898 | etot = -14.642433245512 -52000 ekin = 0.0889431481344998 | erot = 0.67879880710002 | epot = -15.4101752007595 | etot = -14.642433245525 -53000 ekin = 0.0955646689265025 | erot = 0.657379086771117 | epot = -15.3953770012321 | etot = -14.6424332455345 -54000 ekin = 0.10206147751016 | erot = 0.635035489169276 | epot = -15.3795302122208 | etot = -14.6424332455414 -55000 ekin = 0.108282960174665 | erot = 0.611853171347244 | epot = -15.362569377068 | etot = -14.6424332455461 -56000 ekin = 0.114049426282277 | erot = 0.587982945924297 | epot = -15.3444656177552 | etot = -14.6424332455486 -57000 ekin = 0.119155806187163 | erot = 0.563635255922951 | epot = -15.3252243076589 | etot = -14.6424332455488 -58000 ekin = 0.123384552305545 | erot = 0.539073355222428 | epot = -15.3048911530734 | etot = -14.6424332455454 -59000 ekin = 0.126526300954853 | erot = 0.514606324858911 | epot = -15.2835658713509 | etot = -14.6424332455371 -60000 ekin = 0.128404399836229 | erot = 0.490581338840044 | epot = -15.261418984199 | etot = -14.6424332455227 -61000 ekin = 0.128898142361897 | erot = 0.467373892400972 | epot = -15.2387052802646 | etot = -14.6424332455018 -62000 ekin = 0.127959880289726 | erot = 0.445374820086222 | epot = -15.2157679458511 | etot = -14.6424332454752 -63000 ekin = 0.125622870624277 | erot = 0.424973765387148 | epot = -15.1930298814554 | etot = -14.642433245444 -64000 ekin = 0.121999044842466 | erot = 0.406539918572074 | epot = -15.1709722088251 | etot = -14.6424332454105 -65000 ekin = 0.117268056618551 | erot = 0.390401831020312 | epot = -15.1501031330161 | etot = -14.6424332453772 -66000 ekin = 0.11166038525652 | erot = 0.376828594078856 | epot = -15.1309222246818 | etot = -14.6424332453464 -67000 ekin = 0.105437746904482 | erot = 0.366014539811009 | epot = -15.1138855320359 | etot = -14.6424332453204 -68000 ekin = 0.0988737375602389 | erot = 0.358069014155077 | epot = -15.0993759970158 | etot = -14.6424332453005 -69000 ekin = 0.0922368286498126 | erot = 0.353011948771943 | epot = -15.0876820227093 | etot = -14.6424332452876 -70000 ekin = 0.0857769015271899 | erot = 0.350775174164931 | epot = -15.078985320974 | etot = -14.6424332452819 -71000 ekin = 0.0797156921641249 | erot = 0.351208844245481 | epot = -15.0733577816927 | etot = -14.6424332452831 -72000 ekin = 0.0742409440407228 | erot = 0.354092037747166 | epot = -15.0707662270784 | etot = -14.6424332452906 -73000 ekin = 0.069503749870388 | erot = 0.359146526961232 | epot = -15.0710835221349 | etot = -14.6424332453033 -74000 ekin = 0.065618449742691 | erot = 0.366052769878692 | epot = -15.0741044649412 | etot = -14.6424332453199 -75000 ekin = 0.0626644690394284 | erot = 0.374467290033975 | epot = -15.0795650044124 | etot = -14.642433245339 -76000 ekin = 0.0606895535091863 | erot = 0.384040683403432 | epot = -15.087163482272 | etot = -14.6424332453594 -77000 ekin = 0.0597139401241188 | erot = 0.394435495892894 | epot = -15.0965826813962 | etot = -14.6424332453792 -78000 ekin = 0.0597350629875199 | erot = 0.405343151481916 | epot = -15.107511459867 | etot = -14.6424332453975 -79000 ekin = 0.0607324264361021 | erot = 0.4164990176427 | epot = -15.1196646894919 | etot = -14.6424332454131 -80000 ekin = 0.0626722904954161 | erot = 0.427694630238743 | epot = -15.1328001661592 | etot = -14.6424332454251 -81000 ekin = 0.0655118235331528 | erot = 0.438786127849131 | epot = -15.1467311968152 | etot = -14.6424332454329 -82000 ekin = 0.0692024020836604 | erot = 0.449698113830624 | epot = -15.1613337613509 | etot = -14.6424332454366 -83000 ekin = 0.0736917936904884 | erot = 0.460422490740831 | epot = -15.1765475298676 | etot = -14.6424332454363 -84000 ekin = 0.0789250526542207 | erot = 0.471012272295187 | epot = -15.1923705703823 | etot = -14.6424332454329 -85000 ekin = 0.0848440878742484 | erot = 0.481570908650517 | epot = -15.2088482419521 | etot = -14.6424332454273 -86000 ekin = 0.0913860133243867 | erot = 0.492238169206351 | epot = -15.2260574279515 | etot = -14.6424332454207 -87000 ekin = 0.0984805441186007 | erot = 0.503174014617495 | epot = -15.2440878041506 | etot = -14.6424332454146 -88000 ekin = 0.106046830302566 | erot = 0.514542076496893 | epot = -15.2630221522094 | etot = -14.6424332454099 -89000 ekin = 0.113990204125935 | erot = 0.526494309539958 | epot = -15.2829177590739 | etot = -14.642433245408 -90000 ekin = 0.122199339149549 | erot = 0.539158097286396 | epot = -15.3037906818453 | etot = -14.6424332454094 -91000 ekin = 0.130544275968789 | erot = 0.552626637866402 | epot = -15.3256041592497 | etot = -14.6424332454146 -92000 ekin = 0.138875666145969 | erot = 0.566952900962838 | epot = -15.3482618125326 | etot = -14.6424332454238 -93000 ekin = 0.14702544061161 | erot = 0.582146933738122 | epot = -15.3716056197866 | etot = -14.6424332454369 -94000 ekin = 0.154808946844654 | erot = 0.598175891801918 | epot = -15.3954180841001 | etot = -14.6424332454535 -95000 ekin = 0.162028449598908 | erot = 0.614965942454569 | epot = -15.4194276375267 | etot = -14.6424332454732 -96000 ekin = 0.168477779664562 | erot = 0.632405154082769 | epot = -15.4433161792427 | etot = -14.6424332454953 -97000 ekin = 0.173947863023519 | erot = 0.650346631629065 | epot = -15.466727740172 | etot = -14.6424332455194 -98000 ekin = 0.178232875001165 | erot = 0.668611435746703 | epot = -15.4892775562927 | etot = -14.6424332455449 -99000 ekin = 0.181136831923469 | erot = 0.686991165056991 | epot = -15.5105612425515 | etot = -14.6424332455711 -100000 ekin = 0.182480533640974 | erot = 0.705250413408614 | epot = -15.530164192647 | etot = -14.6424332455974 -101000 ekin = 0.182108871449632 | erot = 0.723129571004103 | epot = -15.5476716880769 | etot = -14.6424332456232 -102000 ekin = 0.179898581168339 | erot = 0.740348571091352 | epot = -15.5626803979071 | etot = -14.6424332456474 -103000 ekin = 0.17576651760657 | erot = 0.756612167827034 | epot = -15.5748119311029 | etot = -14.6424332456693 -104000 ekin = 0.169678431534372 | erot = 0.771617166852996 | epot = -15.5837288440748 | etot = -14.6424332456874 -105000 ekin = 0.161658036036246 | erot = 0.785061742963598 | epot = -15.5891530247003 | etot = -14.6424332457005 -106000 ekin = 0.151795867650305 | erot = 0.796656613426427 | epot = -15.5908857267839 | etot = -14.6424332457071 -107000 ekin = 0.140257112952978 | erot = 0.806137449199291 | epot = -15.5888278078584 | etot = -14.6424332457061 -108000 ekin = 0.127287240201874 | erot = 0.813277564483374 | epot = -15.5829980503819 | etot = -14.6424332456966 -109000 ekin = 0.113214025491877 | erot = 0.817899691736857 | epot = -15.5735469629067 | etot = -14.642433245678 -110000 ekin = 0.0984444823817425 | erot = 0.819885578056442 | epot = -15.5607633060887 | etot = -14.6424332456505 -111000 ekin = 0.0834553769378644 | erot = 0.819182262548316 | epot = -15.5450708851012 | etot = -14.6424332456151 -112000 ekin = 0.0687764915886182 | erot = 0.815804215096852 | epot = -15.5270139522588 | etot = -14.6424332455734 -113000 ekin = 0.0549665904044371 | erot = 0.809830999846678 | epot = -15.507230835779 | etot = -14.6424332455279 -114000 ekin = 0.04258305831357 | erot = 0.801400700352889 | epot = -15.486417004148 | etot = -14.6424332454815 -115000 ekin = 0.0321472802146729 | erot = 0.790699910050576 | epot = -15.4652804357026 | etot = -14.6424332454374 -116000 ekin = 0.0241087780358441 | erot = 0.77795154667576 | epot = -15.4444935701102 | etot = -14.6424332453986 -117000 ekin = 0.0188117102739907 | erot = 0.763402004774545 | epot = -15.4246469604164 | etot = -14.6424332453678 -118000 ekin = 0.0164673894168237 | erot = 0.747309167856841 | epot = -15.4062098026205 | etot = -14.6424332453468 -119000 ekin = 0.0171359296540399 | erot = 0.72993256457469 | epot = -15.3895017395652 | etot = -14.6424332453364 -120000 ekin = 0.0207190822436548 | erot = 0.711526526248979 | epot = -15.3746788538292 | etot = -14.6424332453366 -121000 ekin = 0.0269649552324778 | erot = 0.692336677371657 | epot = -15.3617348779503 | etot = -14.6424332453462 -122000 ekin = 0.0354839220302051 | erot = 0.672599570211917 | epot = -15.3505167376055 | etot = -14.6424332453634 -123000 ekin = 0.0457738626455503 | erot = 0.652544850162978 | epot = -15.3407519581944 | etot = -14.6424332453859 -124000 ekin = 0.0572521324300892 | erot = 0.632399068063538 | epot = -15.3320844459047 | etot = -14.6424332454111 -125000 ekin = 0.0692913736007693 | erot = 0.612390156183436 | epot = -15.3241147752204 | etot = -14.6424332454362 -126000 ekin = 0.0812564128179015 | erot = 0.592751635107163 | epot = -15.3164412933838 | etot = -14.6424332454587 -127000 ekin = 0.0925398817831139 | erot = 0.573725774405781 | epot = -15.3086989016655 | etot = -14.6424332454766 -128000 ekin = 0.102594692019405 | erot = 0.555565138942023 | epot = -15.3005930764495 | etot = -14.6424332454881 -129000 ekin = 0.110961953874467 | erot = 0.538532171476875 | epot = -15.2919273708433 | etot = -14.6424332454919 -130000 ekin = 0.117293279473242 | erot = 0.52289666445288 | epot = -15.2826231894136 | etot = -14.6424332454874 -131000 ekin = 0.121366644775211 | erot = 0.508931150171171 | epot = -15.272731040421 | etot = -14.6424332454746 -132000 ekin = 0.123095155540088 | erot = 0.496904390905875 | epot = -15.2624327918998 | etot = -14.6424332454539 -133000 ekin = 0.122528239671731 | erot = 0.487073282997897 | epot = -15.2520347680959 | etot = -14.6424332454262 -134000 ekin = 0.119845042601891 | erot = 0.47967360117123 | epot = -15.2419518891664 | etot = -14.6424332453933 -135000 ekin = 0.115340171967418 | erot = 0.474910093717058 | epot = -15.2326835110415 | etot = -14.642433245357 -136000 ekin = 0.109402419285639 | erot = 0.472946484075354 | epot = -15.2247821486809 | etot = -14.6424332453199 -137000 ekin = 0.102487634022662 | erot = 0.473895929920083 | epot = -15.218816809227 | etot = -14.6424332452843 -138000 ekin = 0.0950874634054098 | erot = 0.477812435585943 | epot = -15.2153331442442 | etot = -14.6424332452528 -139000 ekin = 0.0876961121518108 | erot = 0.484683617751208 | epot = -15.2148129751311 | etot = -14.6424332452281 -140000 ekin = 0.0807775418435451 | erot = 0.494425108540545 | epot = -15.217635895596 | etot = -14.6424332452119 -141000 ekin = 0.0747355681580393 | erot = 0.506876770810791 | epot = -15.2240455841751 | etot = -14.6424332452063 -142000 ekin = 0.0698891098451726 | erot = 0.521800821241339 | epot = -15.2341231762987 | etot = -14.6424332452121 -143000 ekin = 0.0664544171867034 | erot = 0.538881922426252 | epot = -15.247769584843 | etot = -14.64243324523 -144000 ekin = 0.064535510469277 | erot = 0.557729316021967 | epot = -15.2646980717509 | etot = -14.6424332452596 -145000 ekin = 0.0641233595163659 | erot = 0.577881111413926 | epot = -15.2844377162305 | etot = -14.6424332453002 -146000 ekin = 0.065103607751629 | erot = 0.598810893852487 | epot = -15.3063477469542 | etot = -14.6424332453501 -147000 ekin = 0.0672719578975296 | erot = 0.619936843682188 | epot = -15.3296420469869 | etot = -14.6424332454072 -148000 ekin = 0.0703557492694474 | erot = 0.64063353819095 | epot = -15.3534225329292 | etot = -14.6424332454688 -149000 ekin = 0.0740398128645644 | erot = 0.660246523237392 | epot = -15.3767195816342 | etot = -14.6424332455323 -150000 ekin = 0.0779944201062649 | erot = 0.67810959037558 | epot = -15.3985372560763 | etot = -14.6424332455945 -151000 ekin = 0.0819030604176924 | erot = 0.693564488647308 | epot = -15.4179007947176 | etot = -14.6424332456526 -152000 ekin = 0.0854878938557652 | erot = 0.705982563002958 | epot = -15.4339037025624 | etot = -14.6424332457037 -153000 ekin = 0.0885310147333713 | erot = 0.714787575381071 | epot = -15.4457518358598 | etot = -14.6424332457454 -154000 ekin = 0.0908901012892559 | erot = 0.719478762726488 | epot = -15.4528021097913 | etot = -14.6424332457756 -155000 ekin = 0.0925075703719017 | erot = 0.719653046096719 | epot = -15.4545938622615 | etot = -14.6424332457929 -156000 ekin = 0.0934129479732407 | erot = 0.715025243753081 | epot = -15.4508714375228 | etot = -14.6424332457965 -157000 ekin = 0.0937187435781918 | erot = 0.70544516394557 | epot = -15.4415971533099 | etot = -14.6424332457861 -158000 ekin = 0.093610618539412 | erot = 0.690910554325135 | epot = -15.4269544186267 | etot = -14.6424332457622 -159000 ekin = 0.093333017400989 | erot = 0.671575051659432 | epot = -15.4073413147861 | etot = -14.6424332457257 -160000 ekin = 0.0931716565239226 | erot = 0.647750492120542 | epot = -15.3833553943224 | etot = -14.642433245678 -161000 ekin = 0.0934343296226242 | erot = 0.619903194016743 | epot = -15.3557707692603 | etot = -14.6424332456209 -162000 ekin = 0.0944314104796886 | erot = 0.588644098980031 | epot = -15.3255087550164 | etot = -14.6424332455567 -163000 ekin = 0.0964572425730171 | erot = 0.554712943454593 | epot = -15.2936034315153 | etot = -14.6424332454877 -164000 ekin = 0.0997733472794941 | erot = 0.518956918562839 | epot = -15.2611635112587 | etot = -14.6424332454164 -165000 ekin = 0.10459410201863 | erot = 0.482304549423526 | epot = -15.2293318967876 | etot = -14.6424332453454 -166000 ekin = 0.111075276514836 | erot = 0.445735768513645 | epot = -15.1992442903058 | etot = -14.6424332452774 -167000 ekin = 0.119305597512064 | erot = 0.410249354729672 | epot = -15.1719881974565 | etot = -14.6424332452148 -168000 ekin = 0.129301354723501 | erot = 0.376829046180125 | epot = -15.1485636460635 | etot = -14.6424332451599 -169000 ekin = 0.141003965788129 | erot = 0.346409702528434 | epot = -15.1298469134313 | etot = -14.6424332451147 -170000 ekin = 0.154280377438315 | erot = 0.319844892419163 | epot = -15.1165585149384 | etot = -14.642433245081 -171000 ekin = 0.168926178619937 | erot = 0.297877221607912 | epot = -15.1092366452878 | etot = -14.64243324506 -172000 ekin = 0.184671319362945 | erot = 0.281112611137957 | epot = -15.1082171755535 | etot = -14.6424332450526 -173000 ekin = 0.201188345435608 | erot = 0.269999595570643 | epot = -15.1136211860654 | etot = -14.6424332450591 -174000 ekin = 0.218103052205593 | erot = 0.264814547402958 | epot = -15.1253508446879 | etot = -14.6424332450793 -175000 ekin = 0.235007413034248 | erot = 0.26565354594967 | epot = -15.1430942040961 | etot = -14.6424332451122 -176000 ekin = 0.251474534266605 | erot = 0.272431389431399 | epot = -15.1663391688545 | etot = -14.6424332451565 -177000 ekin = 0.267075225142185 | erot = 0.284887984977542 | epot = -15.1943964553297 | etot = -14.64243324521 -178000 ekin = 0.281395553894086 | erot = 0.302602030913814 | epot = -15.2264308300784 | etot = -14.6424332452705 -179000 ekin = 0.294054514410706 | erot = 0.325011526056047 | epot = -15.2614992858018 | etot = -14.642433245335 -180000 ekin = 0.304720692895809 | erot = 0.351440214933843 | epot = -15.2985941532305 | etot = -14.6424332454008 -181000 ekin = 0.31312665891731 | erot = 0.381128639600658 | epot = -15.3366885439828 | etot = -14.6424332454648 -182000 ekin = 0.319079775822511 | erot = 0.413268071112237 | epot = -15.3747810924591 | etot = -14.6424332455244 -183000 ekin = 0.322468290004652 | erot = 0.447035301735071 | epot = -15.4119368373172 | etot = -14.6424332455774 -184000 ekin = 0.323261947553553 | erot = 0.481626155079182 | epot = -15.447321348255 | etot = -14.6424332456223 -185000 ekin = 0.321506983529694 | erot = 0.516285658867092 | epot = -15.4802258880547 | etot = -14.6424332456579 -186000 ekin = 0.317316057632528 | erot = 0.55033313262905 | epot = -15.5100824359457 | etot = -14.6424332456841 -187000 ekin = 0.310854440588901 | erot = 0.583180936762646 | epot = -15.5364686230527 | etot = -14.6424332457011 -188000 ekin = 0.302324329762727 | erot = 0.614346238386904 | epot = -15.5591038138593 | etot = -14.6424332457097 -189000 ekin = 0.291949445195851 | erot = 0.643455779015123 | epot = -15.5778384699218 | etot = -14.6424332457108 -190000 ekin = 0.279961942766932 | erot = 0.670244185707557 | epot = -15.5926393741802 | etot = -14.6424332457057 -191000 ekin = 0.266593185652274 | erot = 0.694546781237238 | epot = -15.6035732125847 | etot = -14.6424332456952 -192000 ekin = 0.252069141621898 | erot = 0.716288088791539 | epot = -15.6107904760939 | etot = -14.6424332456804 -193000 ekin = 0.236610293252604 | erot = 0.735467302247627 | epot = -15.6145108411624 | etot = -14.6424332456621 -194000 ekin = 0.220435149403497 | erot = 0.752141943032621 | epot = -15.615010338077 | etot = -14.6424332456409 -195000 ekin = 0.203765880091669 | erot = 0.766410799035668 | epot = -15.6126099247448 | etot = -14.6424332456175 -196000 ekin = 0.18683433903566 | erot = 0.778397083256566 | epot = -15.6076646678848 | etot = -14.6424332455926 -197000 ekin = 0.169886782292475 | erot = 0.788232586076231 | epot = -15.6005526139356 | etot = -14.6424332455669 -198000 ekin = 0.153185871076313 | erot = 0.796043434544288 | epot = -15.5916625511618 | etot = -14.6424332455412 -199000 ekin = 0.137008972985806 | erot = 0.801937915803797 | epot = -15.5813801343063 | etot = -14.6424332455167 -200000 ekin = 0.121642272363325 | erot = 0.805996673265862 | epot = -15.5700721911235 | etot = -14.6424332454943 -201000 ekin = 0.107370722655158 | erot = 0.80826545681021 | epot = -15.5580694249408 | etot = -14.6424332454755 -202000 ekin = 0.0944644042380686 | erot = 0.808750524312687 | epot = -15.5456481740119 | etot = -14.6424332454612 -203000 ekin = 0.0831623790884404 | erot = 0.807416772445398 | epot = -15.5330123969864 | etot = -14.6424332454526 -204000 ekin = 0.0736556272327849 | erot = 0.80418872542083 | epot = -15.5202775981042 | etot = -14.6424332454506 -205000 ekin = 0.066071040166992 | erot = 0.798954607356127 | epot = -15.5074588929787 | etot = -14.6424332454556 -206000 ekin = 0.0604586317676969 | erot = 0.791573809423779 | epot = -15.4944656866589 | etot = -14.6424332454674 -207000 ekin = 0.0567840026879154 | erot = 0.781888054797448 | epot = -15.4811053029705 | etot = -14.6424332454851 -208000 ekin = 0.0549275971597956 | erot = 0.769736381378278 | epot = -15.4670972240452 | etot = -14.6424332455071 -209000 ekin = 0.0546914447534107 | erot = 0.754973659532307 | epot = -15.4520983498168 | etot = -14.642433245531 -210000 ekin = 0.0558130126770382 | erot = 0.737491764373139 | epot = -15.4357380226042 | etot = -14.642433245554 -211000 ekin = 0.0579847210232175 | erot = 0.717241838878594 | epot = -15.4176598054751 | etot = -14.6424332455733 -212000 ekin = 0.0608768356197291 | erot = 0.694255492638144 | epot = -15.3975655738438 | etot = -14.642433245586 -213000 ekin = 0.0641610427072956 | erot = 0.668662476162839 | epot = -15.37525676446 | etot = -14.6424332455898 -214000 ekin = 0.06753210435751 | erot = 0.640702495518234 | epot = -15.3506678454592 | etot = -14.6424332455835 -215000 ekin = 0.0707255336353407 | erot = 0.610729417269012 | epot = -15.3238881964708 | etot = -14.6424332455665 -216000 ekin = 0.0735300437817614 | erot = 0.579207054839078 | epot = -15.2951703441601 | etot = -14.6424332455392 -217000 ekin = 0.0757943994877656 | erot = 0.546696813211925 | epot = -15.2649244582025 | etot = -14.6424332455028 -218000 ekin = 0.0774290394165114 | erot = 0.51383845121948 | epot = -15.2337007360952 | etot = -14.6424332454592 -219000 ekin = 0.0784033323141814 | erot = 0.481325894964792 | epot = -15.2021624726897 | etot = -14.6424332454107 -220000 ekin = 0.0787395495608023 | erot = 0.449880299622429 | epot = -15.1710530945426 | etot = -14.6424332453594 -221000 ekin = 0.0785046319672615 | erot = 0.420222425160601 | epot = -15.1411603024356 | etot = -14.6424332453078 -222000 ekin = 0.0778006814269721 | erot = 0.39304597217159 | epot = -15.1132798988567 | etot = -14.6424332452581 -223000 ekin = 0.0767549035385447 | erot = 0.368992968911897 | epot = -15.0881811176628 | etot = -14.6424332452123 -224000 ekin = 0.0755095293703893 | erot = 0.348631757033145 | epot = -15.0665745315757 | etot = -14.6424332451722 -225000 ekin = 0.0742120885667742 | erot = 0.332437700429458 | epot = -15.0490830341357 | etot = -14.6424332451395 -226000 ekin = 0.073006302869323 | erot = 0.320776497502283 | epot = -15.0362160454868 | etot = -14.6424332451152 -227000 ekin = 0.0720238140882433 | erot = 0.313889923629061 | epot = -15.0283469828184 | etot = -14.6424332451011 -228000 ekin = 0.0713769419939847 | erot = 0.311883945247506 | epot = -15.0256941323392 | etot = -14.6424332450977 -229000 ekin = 0.0711526728858743 | erot = 0.314719386439641 | epot = -15.0283053044313 | etot = -14.6424332451058 -230000 ekin = 0.0714080974066408 | erot = 0.322205638589943 | epot = -15.0360469811226 | etot = -14.642433245126 -231000 ekin = 0.0721675361190023 | erot = 0.333998222201819 | epot = -15.0485990034788 | etot = -14.642433245158 -232000 ekin = 0.0734216022905603 | erot = 0.349601270465958 | epot = -15.0654561179576 | etot = -14.6424332452011 -233000 ekin = 0.0751284397505271 | erot = 0.368376135875951 | epot = -15.085937820881 | etot = -14.6424332452545 -234000 ekin = 0.0772173235442621 | erot = 0.389557254433776 | epot = -15.1092078232944 | etot = -14.6424332453164 -235000 ekin = 0.0795947059802265 | erot = 0.412276079790441 | epot = -15.1343040311543 | etot = -14.6424332453836 -236000 ekin = 0.0821526186146775 | erot = 0.43559329564772 | epot = -15.160179159716 | etot = -14.6424332454536 -237000 ekin = 0.0847791014240061 | erot = 0.458538653864716 | epot = -15.1857510008108 | etot = -14.6424332455221 -238000 ekin = 0.0873700423858637 | erot = 0.480156759886701 | epot = -15.2099600478579 | etot = -14.6424332455853 -239000 ekin = 0.0898415153137649 | erot = 0.499556095552604 | epot = -15.2318308565057 | etot = -14.6424332456393 -240000 ekin = 0.0921414623535621 | erot = 0.515957735401017 | epot = -15.2505324434351 | etot = -14.6424332456806 -241000 ekin = 0.0942594490144011 | erot = 0.528739776886579 | epot = -15.2654324716071 | etot = -14.6424332457061 -242000 ekin = 0.0962332805881029 | erot = 0.537473606136305 | epot = -15.2761401324386 | etot = -14.6424332457142 -243000 ekin = 0.0981515319338902 | erot = 0.541948785980292 | epot = -15.2825335636184 | etot = -14.6424332457042 -244000 ekin = 0.100151482351193 | erot = 0.542184479374338 | epot = -15.2847692074024 | etot = -14.6424332456769 -245000 ekin = 0.102412491095761 | erot = 0.538426702317763 | epot = -15.2832724390477 | etot = -14.6424332456342 -246000 ekin = 0.105145395544795 | erot = 0.531132085866374 | epot = -15.2787107269897 | etot = -14.6424332455785 -247000 ekin = 0.108578961411983 | erot = 0.520939994206881 | epot = -15.2719522011324 | etot = -14.6424332455135 -248000 ekin = 0.112944688754523 | erot = 0.508635652295277 | epot = -15.2640135864926 | etot = -14.6424332454428 -249000 ekin = 0.11846134890514 | erot = 0.495107336753422 | epot = -15.2560019310289 | etot = -14.6424332453704 -250000 ekin = 0.125320510713214 | erot = 0.48130071319683 | epot = -15.2490544692099 | etot = -14.6424332452999 -251000 ekin = 0.133674056955099 | erot = 0.468173145423569 | epot = -15.2442804476134 | etot = -14.6424332452347 -252000 ekin = 0.143624355872782 | erot = 0.456650355973676 | epot = -15.2427079570244 | etot = -14.6424332451779 -253000 ekin = 0.155217400154351 | erot = 0.447587277165331 | epot = -15.2452379224514 | etot = -14.6424332451318 -254000 ekin = 0.168438906844348 | erot = 0.441734376017242 | epot = -15.2526065279594 | etot = -14.6424332450978 -255000 ekin = 0.183213121644194 | erot = 0.43971022735347 | epot = -15.2653565940749 | etot = -14.6424332450772 -256000 ekin = 0.199403908832166 | erot = 0.441980689733479 | epot = -15.2838178436365 | etot = -14.6424332450708 -257000 ekin = 0.216817638461889 | erot = 0.448844730305189 | epot = -15.3080956138459 | etot = -14.6424332450788 -258000 ekin = 0.235207399035754 | erot = 0.460426746275392 | epot = -15.338067390412 | etot = -14.6424332451008 -259000 ekin = 0.254278151366129 | erot = 0.476675120648644 | epot = -15.373386517151 | etot = -14.6424332451362 -260000 ekin = 0.273692576676924 | erot = 0.49736669170667 | epot = -15.4134925135676 | etot = -14.642433245184 -261000 ekin = 0.293077534073102 | erot = 0.522116767905281 | epot = -15.4576275472213 | etot = -14.6424332452429 -262000 ekin = 0.312031202020399 | erot = 0.550394247121215 | epot = -15.5048586944527 | etot = -14.642433245311 -263000 ekin = 0.330131107615849 | erot = 0.581541281999657 | epot = -15.554105635002 | etot = -14.6424332453865 -264000 ekin = 0.346943319969814 | erot = 0.614796773447099 | epot = -15.6041733388837 | etot = -14.6424332454667 -265000 ekin = 0.362033078254078 | erot = 0.64932279499714 | epot = -15.6537891188008 | etot = -14.6424332455496 -266000 ekin = 0.374977027495969 | erot = 0.684232889060528 | epot = -15.7016431621888 | etot = -14.6424332456323 -267000 ekin = 0.385377045180505 | erot = 0.718621072064159 | epot = -15.7464313629565 | etot = -14.6424332457118 -268000 ekin = 0.392875374675151 | erot = 0.75159036946739 | epot = -15.7868989899282 | etot = -14.6424332457857 -269000 ekin = 0.397170471133891 | erot = 0.782279784278107 | epot = -15.8218835012631 | etot = -14.6424332458511 -270000 ekin = 0.398032662022584 | erot = 0.809888771679725 | epot = -15.8503546796085 | etot = -14.6424332459062 -271000 ekin = 0.395318487593106 | erot = 0.833698516715849 | epot = -15.8714502502576 | etot = -14.6424332459487 -272000 ekin = 0.3889824743465 | erot = 0.853089551914417 | epot = -15.8845052722381 | etot = -14.6424332459772 -273000 ekin = 0.379085147925856 | erot = 0.867555470410714 | epot = -15.8890738643275 | etot = -14.6424332459909 -274000 ekin = 0.365796322187845 | erot = 0.876712662634537 | epot = -15.8849422308118 | etot = -14.6424332459894 -275000 ekin = 0.349393082916426 | erot = 0.880306121918472 | epot = -15.872132450808 | etot = -14.6424332459731 -276000 ekin = 0.330252358900968 | erot = 0.878211432153003 | epot = -15.8508970369967 | etot = -14.6424332459427 -277000 ekin = 0.308838461216024 | erot = 0.870433084880285 | epot = -15.821704791996 | etot = -14.6424332458996 -278000 ekin = 0.285686394600537 | erot = 0.857099294887754 | epot = -15.785218935334 | etot = -14.6424332458457 -279000 ekin = 0.261382042763559 | erot = 0.838453513182875 | epot = -15.7422688017293 | etot = -14.6424332457829 -280000 ekin = 0.236540473323853 | erot = 0.814842890589049 | epot = -15.6938166096265 | etot = -14.6424332457136 -281000 ekin = 0.211783602606715 | erot = 0.786704032858738 | epot = -15.6409208811057 | etot = -14.6424332456403 -282000 ekin = 0.187718337271409 | erot = 0.754546508157302 | epot = -15.5846980909941 | etot = -14.6424332455654 -283000 ekin = 0.16491611509112 | erot = 0.718934708844168 | epot = -15.5262840694266 | etot = -14.6424332454913 -284000 ekin = 0.143894549222822 | erot = 0.680468811937736 | epot = -15.466796606581 | etot = -14.6424332454204 -285000 ekin = 0.125101678374138 | erot = 0.639765701845489 | epot = -15.4073006255745 | etot = -14.6424332453549 -286000 ekin = 0.108903164109909 | erot = 0.597440790007828 | epot = -15.3487771994138 | etot = -14.6424332452961 -287000 ekin = 0.0955726645582895 | erot = 0.554091668601936 | epot = -15.2920975784057 | etot = -14.6424332452455 -288000 ekin = 0.0852855448043095 | erot = 0.510284456818714 | epot = -15.2380032468271 | etot = -14.6424332452041 -289000 ekin = 0.0781160413143099 | erot = 0.466543535619487 | epot = -15.187092822106 | etot = -14.6424332451722 -290000 ekin = 0.0740379578661698 | erot = 0.423345127585219 | epot = -15.1398163306013 | etot = -14.6424332451499 -291000 ekin = 0.0729289100679055 | erot = 0.38111487943343 | epot = -15.0964770346381 | etot = -14.6424332451368 -292000 ekin = 0.07457803579739 | erot = 0.340229271733799 | epot = -15.0572405526628 | etot = -14.6424332451316 -293000 ekin = 0.0786969407585632 | erot = 0.301020346544403 | epot = -15.0221505324361 | etot = -14.6424332451332 -294000 ekin = 0.0849334564747931 | erot = 0.263782947584683 | epot = -14.9911496491992 | etot = -14.6424332451397 -295000 ekin = 0.0928875723651433 | erot = 0.228783448803118 | epot = -14.964104266318 | etot = -14.6424332451498 -296000 ekin = 0.102128697511344 | erot = 0.196268840383812 | epot = -14.9408307830567 | etot = -14.6424332451616 -297000 ekin = 0.112213252500573 | erot = 0.166475068215632 | epot = -14.9211215658898 | etot = -14.6424332451736 -298000 ekin = 0.122701527070322 | erot = 0.139633685444096 | epot = -14.9047684576989 | etot = -14.6424332451845 -299000 ekin = 0.133172792913731 | erot = 0.115976150687847 | epot = -14.891582188795 | etot = -14.6424332451934 -300000 ekin = 0.143237839709879 | erot = 0.0957354521197614 | epot = -14.8814065370294 | etot = -14.6424332451998 -301000 ekin = 0.152548387990868 | erot = 0.079145090872109 | epot = -14.8741267240665 | etot = -14.6424332452036 -302000 ekin = 0.160803184301541 | erot = 0.0664357608556664 | epot = -14.869672190362 | etot = -14.6424332452048 -303000 ekin = 0.167750948488392 | erot = 0.0578302677258683 | epot = -14.8680144614181 | etot = -14.6424332452038 -304000 ekin = 0.173190665588574 | erot = 0.053537313638039 | epot = -14.869161224428 | etot = -14.6424332452014 -305000 ekin = 0.17696995295018 | erot = 0.0537447402922378 | epot = -14.8731479384404 | etot = -14.642433245198 -306000 ekin = 0.178982363291699 | erot = 0.0586126977894969 | epot = -14.8800283062755 | etot = -14.6424332451943 -307000 ekin = 0.179164502945091 | erot = 0.0682670321079287 | epot = -14.8898647802439 | etot = -14.6424332451908 -308000 ekin = 0.177493763289092 | erot = 0.0827930029211812 | epot = -14.9027200113984 | etot = -14.6424332451881 -309000 ekin = 0.173987301152073 | erot = 0.102229291873313 | epot = -14.9186498382119 | etot = -14.6424332451865 -310000 ekin = 0.168702678648375 | erot = 0.126562162218708 | epot = -14.9376980860533 | etot = -14.6424332451862 -311000 ekin = 0.161740297010248 | erot = 0.155719593409014 | epot = -14.9598931356065 | etot = -14.6424332451872 -312000 ekin = 0.153247440126422 | erot = 0.189565237979898 | epot = -14.985245923296 | etot = -14.6424332451897 -313000 ekin = 0.143423389998644 | erot = 0.227892126762103 | epot = -15.0137487619544 | etot = -14.6424332451937 -314000 ekin = 0.132524706020331 | erot = 0.270416174781572 | epot = -15.0453741260009 | etot = -14.642433245199 -315000 ekin = 0.120869409554577 | erot = 0.316769708289568 | epot = -15.0800723630506 | etot = -14.6424332452064 -316000 ekin = 0.1088385461069 | erot = 0.366495437994217 | epot = -15.1177672293174 | etot = -14.6424332452163 -317000 ekin = 0.0968734934299855 | erot = 0.419041536808397 | epot = -15.1583482754675 | etot = -14.6424332452291 -318000 ekin = 0.0854675378572644 | erot = 0.473758725762784 | epot = -15.2016595088659 | etot = -14.6424332452459 -319000 ekin = 0.075150727147421 | erot = 0.529900497446475 | epot = -15.2474844698617 | etot = -14.6424332452678 -320000 ekin = 0.0664678443385232 | erot = 0.586627760737823 | epot = -15.2955288503722 | etot = -14.6424332452959 -321000 ekin = 0.059950459058179 | erot = 0.643019202689393 | epot = -15.3454029070786 | etot = -14.6424332453311 -322000 ekin = 0.0560852142815268 | erot = 0.698088453264993 | epot = -15.3966069129204 | etot = -14.6424332453739 -323000 ekin = 0.0552815181260069 | erot = 0.750808639914419 | epot = -15.4485234034645 | etot = -14.6424332454241 -324000 ekin = 0.0578423255211866 | erot = 0.800144112656301 | epot = -15.5004196836582 | etot = -14.6424332454807 -325000 ekin = 0.0639414864635146 | erot = 0.845088070114596 | epot = -15.5514628021197 | etot = -14.6424332455416 -326000 ekin = 0.0736101694204752 | erot = 0.884703689967817 | epot = -15.6007471049927 | etot = -14.6424332456044 -327000 ekin = 0.0867333560885487 | erot = 0.918165419814667 | epot = -15.6473320215694 | etot = -14.6424332456662 -328000 ekin = 0.103055779602217 | erot = 0.944796600226744 | epot = -15.690285625553 | etot = -14.642433245724 -329000 ekin = 0.1221954461684 | erot = 0.96409978159851 | epot = -15.7287284735425 | etot = -14.6424332457755 -330000 ekin = 0.143662406707273 | erot = 0.975776996242528 | epot = -15.7618726487686 | etot = -14.6424332458188 -331000 ekin = 0.166880785130064 | erot = 0.979738667524189 | epot = -15.7890526985066 | etot = -14.6424332458523 -332000 ekin = 0.191212923965915 | erot = 0.976101405909937 | epot = -15.8097475757514 | etot = -14.6424332458755 -333000 ekin = 0.215985355315125 | erot = 0.965176233546748 | epot = -15.8235948347498 | etot = -14.6424332458879 -334000 ekin = 0.24051665682631 | erot = 0.947449485120597 | epot = -15.8303993878361 | etot = -14.6424332458892 -335000 ekin = 0.26414689608108 | erot = 0.923558676876283 | epot = -15.8301388188364 | etot = -14.6424332458791 -336000 ekin = 0.286267467748829 | erot = 0.894265184768752 | epot = -15.8229658983753 | etot = -14.6424332458577 -337000 ekin = 0.306349134744513 | erot = 0.860424939344407 | epot = -15.8092073199143 | etot = -14.6424332458254 -338000 ekin = 0.323965497669025 | erot = 0.822957838329877 | epot = -15.7893565817819 | etot = -14.642433245783 -339000 ekin = 0.338809250783304 | erot = 0.782816380156787 | epot = -15.7640588766722 | etot = -14.6424332457321 -340000 ekin = 0.350699444228141 | erot = 0.740954141308451 | epot = -15.7340868312115 | etot = -14.6424332456749 -341000 ekin = 0.359579293531071 | erot = 0.698295027836097 | epot = -15.700307566981 | etot = -14.6424332456138 -342000 ekin = 0.365505462149765 | erot = 0.655704542038121 | epot = -15.6636432497398 | etot = -14.6424332455519 -343000 ekin = 0.368630832656567 | erot = 0.613964463467572 | epot = -15.6250285416159 | etot = -14.6424332454918 -344000 ekin = 0.369183369584817 | erot = 0.573752273081738 | epot = -15.5853688881026 | etot = -14.642433245436 -345000 ekin = 0.367443732820373 | erot = 0.535626361233109 | epot = -15.54550333944 | etot = -14.6424332453865 -346000 ekin = 0.363723933128383 | erot = 0.500017626275288 | epot = -15.5061748047483 | etot = -14.6424332453446 -347000 ekin = 0.358348705274846 | erot = 0.467227585425628 | epot = -15.4680095360116 | etot = -14.6424332453111 -348000 ekin = 0.351640582952566 | erot = 0.4374326669059 | epot = -15.4315064951446 | etot = -14.6424332452861 -349000 ekin = 0.343909024693087 | erot = 0.410693986167346 | epot = -15.3970362561292 | etot = -14.6424332452687 -350000 ekin = 0.335443435967581 | erot = 0.386971649877954 | epot = -15.3648483311043 | etot = -14.6424332452588 -351000 ekin = 0.326509584093039 | erot = 0.366142474248718 | epot = -15.335085303596 | etot = -14.6424332452543 -352000 ekin = 0.317348699021883 | erot = 0.348019930398466 | epot = -15.3078018746745 | etot = -14.6424332452541 -353000 ekin = 0.308178466648788 | erot = 0.332375117499591 | epot = -15.2829868294052 | etot = -14.6424332452568 -354000 ekin = 0.299195119854707 | erot = 0.318957598137064 | epot = -15.2605859632527 | etot = -14.6424332452609 -355000 ekin = 0.290575888249379 | erot = 0.307515001368934 | epot = -15.2405241348835 | etot = -14.6424332452652 -356000 ekin = 0.282481160313156 | erot = 0.297810406216369 | epot = -15.222724811798 | etot = -14.6424332452685 -357000 ekin = 0.275055828994531 | erot = 0.289636664277624 | epot = -15.2071257385424 | etot = -14.6424332452703 -358000 ekin = 0.268429427255711 | erot = 0.282827006912599 | epot = -15.1936896794384 | etot = -14.6424332452701 -359000 ekin = 0.262714810202522 | erot = 0.27726150785896 | epot = -15.1824095633295 | etot = -14.642433245268 -360000 ekin = 0.258005302570153 | erot = 0.27286922775014 | epot = -15.1733077755847 | etot = -14.6424332452644 -361000 ekin = 0.254370400622442 | erot = 0.269626137803928 | epot = -15.1664297836866 | etot = -14.6424332452602 -362000 ekin = 0.251850290179253 | erot = 0.267549186090195 | epot = -15.1618327215257 | etot = -14.6424332452562 -363000 ekin = 0.250449609863304 | erot = 0.266687109599918 | epot = -15.159569964717 | etot = -14.6424332452538 -364000 ekin = 0.250131041863865 | erot = 0.267108788860229 | epot = -15.1596730759782 | etot = -14.6424332452541 -365000 ekin = 0.250809442162603 | erot = 0.268890073930453 | epot = -15.1621327613513 | etot = -14.6424332452583 -366000 ekin = 0.252347318763936 | erot = 0.272100073008305 | epot = -15.1668806370397 | etot = -14.6424332452674 -367000 ekin = 0.254552520179196 | erot = 0.276787886821285 | epot = -15.1737736522827 | etot = -14.6424332452822 -368000 ekin = 0.257178996154131 | erot = 0.282970699525181 | epot = -15.1825829409825 | etot = -14.6424332453031 -369000 ekin = 0.259931424909745 | erot = 0.290624011144299 | epot = -15.192988681384 | etot = -14.64243324533 -370000 ekin = 0.262474349327928 | erot = 0.299674631815222 | epot = -15.2045822265054 | etot = -14.6424332453623 -371000 ekin = 0.264446209429907 | erot = 0.309996869296871 | epot = -15.2168763241254 | etot = -14.6424332453986 -372000 ekin = 0.265478281863389 | erot = 0.321412142685457 | epot = -15.2293236699861 | etot = -14.6424332454373 -373000 ekin = 0.265218028292376 | erot = 0.333692059446785 | epot = -15.2413433332155 | etot = -14.6424332454763 -374000 ekin = 0.263355721250448 | erot = 0.346564809668627 | epot = -15.2523537764321 | etot = -14.642433245513 -375000 ekin = 0.259652497503897 | erot = 0.359724567994853 | epot = -15.2618103110439 | etot = -14.6424332455451 -376000 ekin = 0.253967268937808 | erot = 0.372843454380789 | epot = -15.2692439688887 | etot = -14.6424332455701 -377000 ekin = 0.246279333501477 | erot = 0.385585491294775 | epot = -15.274298070382 | etot = -14.6424332455858 -378000 ekin = 0.236703249878247 | erot = 0.397621906698149 | epot = -15.2767584021673 | etot = -14.6424332455909 -379000 ekin = 0.225492756944964 | erot = 0.408647066931745 | epot = -15.2765730694618 | etot = -14.6424332455851 -380000 ekin = 0.213031377539245 | erot = 0.418394278996723 | epot = -15.2738589021049 | etot = -14.642433245569 -381000 ekin = 0.199808877315916 | erot = 0.426650676211877 | epot = -15.2688927990715 | etot = -14.6424332455437 -382000 ekin = 0.186384809019047 | erot = 0.433270396055878 | epot = -15.2620884505868 | etot = -14.6424332455119 -383000 ekin = 0.17334261614412 | erot = 0.43818527905067 | epot = -15.253961140671 | etot = -14.6424332454763 -384000 ekin = 0.161239700831456 | erot = 0.441412371402826 | epot = -15.2450853176736 | etot = -14.6424332454393 -385000 ekin = 0.150559954647611 | erot = 0.44305761255287 | epot = -15.2360508126044 | etot = -14.6424332454039 -386000 ekin = 0.141675129699194 | erot = 0.443315241523142 | epot = -15.2274236165942 | etot = -14.6424332453719 -387000 ekin = 0.134820015697999 | erot = 0.442462667348848 | epot = -15.2197159283911 | etot = -14.6424332453443 -388000 ekin = 0.13008397641356 | erot = 0.440850813513913 | epot = -15.2133680352489 | etot = -14.6424332453214 -389000 ekin = 0.127418570237893 | erot = 0.438890246279018 | epot = -15.2087420618201 | etot = -14.6424332453031 -390000 ekin = 0.126658423093208 | erot = 0.43703370208609 | epot = -15.2061253704679 | etot = -14.6424332452886 -391000 ekin = 0.127550804261 | erot = 0.435755902066193 | epot = -15.2057399516044 | etot = -14.6424332452772 -392000 ekin = 0.129788752935804 | erot = 0.435531744058787 | epot = -15.2077537422628 | etot = -14.6424332452682 -393000 ekin = 0.13304305531626 | erot = 0.436814065078293 | epot = -15.2122903656558 | etot = -14.6424332452612 -394000 ekin = 0.136989561466103 | erot = 0.440012156511466 | epot = -15.2194349632339 | etot = -14.6424332452564 -395000 ekin = 0.14132983304257 | erot = 0.445472096886654 | epot = -15.2292351751829 | etot = -14.6424332452536 -396000 ekin = 0.145804542777681 | erot = 0.453459767650199 | epot = -15.2416975556816 | etot = -14.6424332452538 -397000 ekin = 0.150200153189366 | erot = 0.464147173463272 | epot = -15.25678057191 | etot = -14.6424332452573 -398000 ekin = 0.15435008976728 | erot = 0.477602441560255 | epot = -15.2743857765924 | etot = -14.6424332452649 -399000 ekin = 0.158131920623959 | erot = 0.493783661157207 | epot = -15.2943488270583 | etot = -14.6424332452771 -400000 ekin = 0.161462056175853 | erot = 0.512536568007593 | epot = -15.3164318694778 | etot = -14.6424332452943 -401000 ekin = 0.164289301183567 | erot = 0.533595989003385 | epot = -15.3403185355036 | etot = -14.6424332453166 -402000 ekin = 0.166588323053572 | erot = 0.55659092884037 | epot = -15.3656124972378 | etot = -14.6424332453439 -403000 ekin = 0.16835381038289 | erot = 0.58105318364463 | epot = -15.3918402394033 | etot = -14.6424332453758 -404000 ekin = 0.169595821304614 | erot = 0.606429376023061 | epot = -15.4184584427392 | etot = -14.6424332454115 -405000 ekin = 0.170336578565564 | erot = 0.632096292540154 | epot = -15.4448661165559 | etot = -14.6424332454501 -406000 ekin = 0.170608761982374 | erot = 0.657379344514133 | epot = -15.4704213519868 | etot = -14.6424332454903 -407000 ekin = 0.170455178570794 | erot = 0.681573854093717 | epot = -15.494462278195 | etot = -14.6424332455305 -408000 ekin = 0.169929554813016 | erot = 0.703968692150293 | epot = -15.5163314925322 | etot = -14.6424332455689 -409000 ekin = 0.169098093454333 | erot = 0.723871579520596 | epot = -15.5354029185788 | etot = -14.6424332456039 -410000 ekin = 0.168041369043282 | erot = 0.740635137247647 | epot = -15.5511097519246 | etot = -14.6424332456336 -411000 ekin = 0.166856102811057 | erot = 0.753682569970613 | epot = -15.5629719184382 | etot = -14.6424332456565 -412000 ekin = 0.165656359034687 | erot = 0.76253172509273 | epot = -15.5706213297985 | etot = -14.6424332456711 -413000 ekin = 0.164573741712574 | erot = 0.766816218739474 | epot = -15.5738232061285 | etot = -14.6424332456765 -414000 ekin = 0.163756240958045 | erot = 0.766302377571816 | epot = -15.5724918642017 | etot = -14.6424332456719 -415000 ekin = 0.163365479945339 | erot = 0.760900920225148 | epot = -15.5666996458277 | etot = -14.6424332456572 -416000 ekin = 0.163572240093402 | erot = 0.750672586700066 | epot = -15.5566780724265 | etot = -14.642433245633 -417000 ekin = 0.164550286198168 | erot = 0.735827297892153 | epot = -15.5428108296905 | etot = -14.6424332456002 -418000 ekin = 0.166468663391044 | erot = 0.716716857301884 | epot = -15.5256187662531 | etot = -14.6424332455602 -419000 ekin = 0.169482781124195 | erot = 0.693821649100888 | epot = -15.5057376757398 | etot = -14.6424332455147 -420000 ekin = 0.173724722664409 | erot = 0.667732191685395 | epot = -15.4838901598156 | etot = -14.6424332454658 -421000 ekin = 0.179293310757521 | erot = 0.6391267255838 | epot = -15.4608532817571 | etot = -14.6424332454157 -422000 ekin = 0.186244514517606 | erot = 0.608746211201722 | epot = -15.437423971086 | etot = -14.6424332453667 -423000 ekin = 0.19458279814308 | erot = 0.577368165579534 | epot = -15.4143842090434 | etot = -14.6424332453208 -424000 ekin = 0.204253993027993 | erot = 0.545780680988055 | epot = -15.3924679192961 | etot = -14.64243324528 -425000 ekin = 0.215140228915628 | erot = 0.514757766833693 | epot = -15.3723312409952 | etot = -14.6424332452459 -426000 ekin = 0.227057395196094 | erot = 0.485036881516685 | epot = -15.3545275219322 | etot = -14.6424332452194 -427000 ekin = 0.2397555262249 | erot = 0.457299221562917 | epot = -15.3394879929896 | etot = -14.6424332452018 -428000 ekin = 0.252922416268525 | erot = 0.432153058136034 | epot = -15.3275087195978 | etot = -14.6424332451932 -429000 ekin = 0.266190667178493 | erot = 0.410120192009067 | epot = -15.3187441043812 | etot = -14.6424332451936 -430000 ekin = 0.279148248284974 | erot = 0.391625457763382 | epot = -15.3132069512513 | etot = -14.6424332452029 -431000 ekin = 0.29135249529286 | erot = 0.376989149811693 | epot = -15.3107748903245 | etot = -14.64243324522 -432000 ekin = 0.302347287569365 | erot = 0.366422254467258 | epot = -15.3112027872808 | etot = -14.6424332452442 -433000 ekin = 0.311682921770367 | erot = 0.360024429013421 | epot = -15.3141405960571 | etot = -14.6424332452733 -434000 ekin = 0.318937954386236 | erot = 0.357784738271833 | epot = -15.3191559379639 | etot = -14.6424332453059 -435000 ekin = 0.323742037713895 | erot = 0.359585207274089 | epot = -15.3257604903287 | etot = -14.6424332453407 -436000 ekin = 0.325798554030487 | erot = 0.365207245307322 | epot = -15.3334390447139 | etot = -14.6424332453761 -437000 ekin = 0.324905697096463 | erot = 0.374340922351957 | epot = -15.3416798648574 | etot = -14.6424332454089 -438000 ekin = 0.320974589857369 | erot = 0.386596930163013 | epot = -15.3500047654581 | etot = -14.6424332454377 -439000 ekin = 0.314043077745089 | erot = 0.401520852188733 | epot = -15.3579971753951 | etot = -14.6424332454613 -440000 ekin = 0.304283988018853 | erot = 0.418609132217991 | epot = -15.3653263657148 | etot = -14.6424332454779 -441000 ekin = 0.292006859109404 | erot = 0.437325916197886 | epot = -15.3717660207937 | etot = -14.6424332454864 -442000 ekin = 0.277652365812269 | erot = 0.457119792524577 | epot = -15.3772054038238 | etot = -14.6424332454869 -443000 ekin = 0.261778853587318 | erot = 0.477439412182355 | epot = -15.3816515112496 | etot = -14.6424332454799 -444000 ekin = 0.245040553430214 | erot = 0.497747053383824 | epot = -15.3852208522809 | etot = -14.6424332454669 -445000 ekin = 0.228157260415731 | erot = 0.517529408210585 | epot = -15.3881199140755 | etot = -14.6424332454491 -446000 ekin = 0.211875681724412 | erot = 0.536305196865295 | epot = -15.3906141240194 | etot = -14.6424332454297 -447000 ekin = 0.196923472676251 | erot = 0.55362963276261 | epot = -15.3929863508503 | etot = -14.6424332454115 -448000 ekin = 0.183958277875551 | erot = 0.569096233380425 | epot = -15.3954877566541 | etot = -14.6424332453982 -449000 ekin = 0.173515771308133 | erot = 0.58233694716115 | epot = -15.3982859638622 | etot = -14.642433245393 -450000 ekin = 0.165962361194704 | erot = 0.593021970155263 | epot = -15.4014175767483 | etot = -14.6424332453983 -451000 ekin = 0.161459280831059 | erot = 0.600860851258439 | epot = -15.4047533775047 | etot = -14.6424332454152 -452000 ekin = 0.159944578250382 | erot = 0.605606408084731 | epot = -15.4079842317782 | etot = -14.6424332454431 -453000 ekin = 0.161137653112592 | erot = 0.60706249637563 | epot = -15.4106333949674 | etot = -14.6424332454792 -454000 ekin = 0.164567591511406 | erot = 0.60509577931268 | epot = -15.4120966163435 | etot = -14.6424332455195 -455000 ekin = 0.169622334208391 | erot = 0.599650455426718 | epot = -15.4117060351935 | etot = -14.6424332455584 -456000 ekin = 0.17561180235025 | erot = 0.590763702898742 | epot = -15.4088087508399 | etot = -14.6424332455909 -457000 ekin = 0.181835621982482 | erot = 0.578578749366101 | epot = -15.4028476169608 | etot = -14.6424332456122 -458000 ekin = 0.187645727031656 | erot = 0.563352302650951 | epot = -15.3934312753017 | etot = -14.6424332456191 -459000 ekin = 0.192495880386114 | erot = 0.54545371714998 | epot = -15.3803828431462 | etot = -14.6424332456101 -460000 ekin = 0.195973381638774 | erot = 0.525354597711239 | epot = -15.3637612249358 | etot = -14.6424332455858 -461000 ekin = 0.197811920992994 | erot = 0.503609203462524 | epot = -15.3438543700041 | etot = -14.6424332455486 -462000 ekin = 0.197887724921045 | erot = 0.480827560282241 | epot = -15.3211485307047 | etot = -14.6424332455014 -463000 ekin = 0.196203198487146 | erot = 0.457644248436018 | epot = -15.2962806923716 | etot = -14.6424332454485 -464000 ekin = 0.192863034127871 | erot = 0.4346862204284 | epot = -15.2699824999498 | etot = -14.6424332453935 -465000 ekin = 0.188047435824124 | erot = 0.412542760090356 | epot = -15.2430234412545 | etot = -14.64243324534 -466000 ekin = 0.18198610755457 | erot = 0.391740010671241 | epot = -15.2161593635165 | etot = -14.6424332452907 -467000 ekin = 0.174935400199639 | erot = 0.372721626734284 | epot = -15.1900902721815 | etot = -14.6424332452476 -468000 ekin = 0.167159826103632 | erot = 0.35583625835081 | epot = -15.1654293296664 | etot = -14.642433245212 -469000 ekin = 0.158918218023896 | erot = 0.341331890764782 | epot = -15.142683353973 | etot = -14.6424332451844 -470000 ekin = 0.150454185654319 | erot = 0.329356584633462 | epot = -15.1222440154524 | etot = -14.6424332451646 -471000 ekin = 0.141990180750332 | erot = 0.319964871776705 | epot = -15.1043882976792 | etot = -14.6424332451522 -472000 ekin = 0.133724353868932 | erot = 0.313128906245091 | epot = -15.08928650526 | etot = -14.642433245146 -473000 ekin = 0.125829398102408 | erot = 0.308753392324225 | epot = -15.0770160355716 | etot = -14.642433245145 -474000 ekin = 0.118452666363557 | erot = 0.306693264413833 | epot = -15.0675791759251 | etot = -14.6424332451477 -475000 ekin = 0.111716976219119 | erot = 0.306773053290691 | epot = -15.0609232746627 | etot = -14.6424332451529 -476000 ekin = 0.105721655633339 | erot = 0.308806833537639 | epot = -15.0569617343301 | etot = -14.6424332451591 -477000 ekin = 0.10054352367576 | erot = 0.312617617130302 | epot = -15.0555943859713 | etot = -14.6424332451652 -478000 ekin = 0.0962376398644811 | erot = 0.318055055635326 | epot = -15.0567259406699 | etot = -14.6424332451701 -479000 ekin = 0.0928377950024513 | erot = 0.325010357030152 | epot = -15.0602813972059 | etot = -14.6424332451733 -480000 ekin = 0.0903568546345963 | erot = 0.333427427763319 | epot = -15.066217527572 | etot = -14.6424332451741 -481000 ekin = 0.088787198935855 | erot = 0.343309423709807 | epot = -15.0745298678182 | etot = -14.6424332451725 -482000 ekin = 0.0881016191320308 | erot = 0.354720133057142 | epot = -15.0852549973579 | etot = -14.6424332451687 -483000 ekin = 0.0882551127439617 | erot = 0.367779908272486 | epot = -15.0984682661795 | etot = -14.642433245163 -484000 ekin = 0.0891880440138072 | erot = 0.382656193507619 | epot = -15.1142774826776 | etot = -14.6424332451562 -485000 ekin = 0.0908310739109877 | erot = 0.399549033146302 | epot = -15.1328133522061 | etot = -14.6424332451488 -486000 ekin = 0.0931120890990441 | erot = 0.418672269923144 | epot = -15.154217604164 | etot = -14.6424332451418 -487000 ekin = 0.0959650526392659 | erot = 0.440231422321023 | epot = -15.1786297200963 | etot = -14.642433245136 -488000 ekin = 0.0993402613867423 | erot = 0.464399451384504 | epot = -15.2061729579036 | etot = -14.6424332451324 -489000 ekin = 0.103214957397683 | erot = 0.491291775403278 | epot = -15.2369399779328 | etot = -14.6424332451318 -490000 ekin = 0.107602676597188 | erot = 0.520941965498224 | epot = -15.2709778872309 | etot = -14.6424332451355 -491000 ekin = 0.112559247664625 | erot = 0.553279563916973 | epot = -15.3082720567259 | etot = -14.6424332451443 -492000 ekin = 0.118183136723599 | erot = 0.588111425308464 | epot = -15.3487278071918 | etot = -14.6424332451598 -493000 ekin = 0.12460804012638 | erot = 0.625107908278983 | epot = -15.3921491935888 | etot = -14.6424332451835 -494000 ekin = 0.131986393312559 | erot = 0.663795156035105 | epot = -15.4382147945647 | etot = -14.642433245217 -495000 ekin = 0.140463823900155 | erot = 0.703554605721716 | epot = -15.4864516748841 | etot = -14.6424332452623 -496000 ekin = 0.150146408035833 | erot = 0.743630741563153 | epot = -15.5362103949194 | etot = -14.6424332453204 -497000 ekin = 0.161064579071306 | erot = 0.783147917317561 | epot = -15.5866457417809 | etot = -14.642433245392 -498000 ekin = 0.173139219157371 | erot = 0.821136754972764 | epot = -15.6367092196066 | etot = -14.6424332454764 -499000 ekin = 0.186156317833367 | erot = 0.856570103856702 | epot = -15.6851596672615 | etot = -14.6424332455714 -500000 ekin = 0.199756195068917 | erot = 0.888407758274046 | epot = -15.7305971990159 | etot = -14.642433245673 -501000 ekin = 0.21344151783732 | erot = 0.915648078732857 | epot = -15.7715228423457 | etot = -14.6424332457755 -502000 ekin = 0.226605416597982 | erot = 0.937383433649182 | epot = -15.8064220961193 | etot = -14.6424332458721 -503000 ekin = 0.238577508977576 | erot = 0.952855183124931 | epot = -15.833865938058 | etot = -14.6424332459555 -504000 ekin = 0.248682347016318 | erot = 0.961503066788369 | epot = -15.8526186598236 | etot = -14.6424332460189 -505000 ekin = 0.256302488969577 | erot = 0.963003656366666 | epot = -15.8617393913931 | etot = -14.6424332460568 -506000 ekin = 0.260937583144178 | erot = 0.957293217920571 | epot = -15.8606640471306 | etot = -14.6424332460659 -507000 ekin = 0.262251679299231 | erot = 0.944571918258594 | epot = -15.8492568436029 | etot = -14.6424332460451 -508000 ekin = 0.260103184111397 | erot = 0.925288564934429 | epot = -15.827824995042 | etot = -14.6424332459962 -509000 ekin = 0.254554875280442 | erot = 0.900107536937821 | epot = -15.7970956581413 | etot = -14.6424332459231 -510000 ekin = 0.245864483348175 | erot = 0.86986171798534 | epot = -15.7581594471648 | etot = -14.6424332458313 -511000 ekin = 0.234458914526877 | erot = 0.835496660126416 | epot = -15.7123888203806 | etot = -14.6424332457274 -512000 ekin = 0.220896820239971 | erot = 0.798011684065844 | epot = -15.6613417499238 | etot = -14.642433245618 -513000 ekin = 0.205824805087871 | erot = 0.758403224578284 | epot = -15.6066612751758 | etot = -14.6424332455096 -514000 ekin = 0.189932244116161 | erot = 0.717614706860263 | epot = -15.5499801963839 | etot = -14.6424332454075 -515000 ekin = 0.173908748199765 | erot = 0.676495918872529 | epot = -15.4928379123883 | etot = -14.642433245316 -516000 ekin = 0.158407108508989 | erot = 0.635773516025286 | epot = -15.4366138697725 | etot = -14.6424332452382 -517000 ekin = 0.144013350183886 | erot = 0.596033149118079 | epot = -15.3824797444782 | etot = -14.6424332451762 -518000 ekin = 0.131224514117994 | erot = 0.557712825688904 | epot = -15.3313705849374 | etot = -14.6424332451305 -519000 ekin = 0.120434042405807 | erot = 0.521106495597668 | epot = -15.2839737831041 | etot = -14.6424332451006 -520000 ekin = 0.111924165176683 | erot = 0.486376443199705 | epot = -15.2407338534619 | etot = -14.6424332450855 -521000 ekin = 0.105864424815849 | erot = 0.453572806060381 | epot = -15.2018704759593 | etot = -14.6424332450831 -522000 ekin = 0.102315362067358 | erot = 0.422658367131465 | epot = -15.1674069742899 | etot = -14.6424332450911 -523000 ekin = 0.101236366465137 | erot = 0.393536647096961 | epot = -15.1372062586691 | etot = -14.642433245107 -524000 ekin = 0.102496717236706 | erot = 0.366081244308194 | epot = -15.1110112066729 | etot = -14.642433245128 -525000 ekin = 0.105888887335992 | erot = 0.34016434321467 | epot = -15.0884864757021 | etot = -14.6424332451514 -526000 ekin = 0.111143247850877 | erot = 0.315682368378667 | epot = -15.0692588614047 | etot = -14.6424332451752 -527000 ekin = 0.117943398962365 | erot = 0.292576937806993 | epot = -15.0529535819666 | etot = -14.6424332451972 -528000 ekin = 0.125941474255752 | erot = 0.270849598243849 | epot = -15.0392243177156 | etot = -14.642433245216 -529000 ekin = 0.134772916010328 | erot = 0.250569317239513 | epot = -15.0277754784806 | etot = -14.6424332452307 -530000 ekin = 0.144070383403691 | erot = 0.231872340652251 | epot = -15.018375969297 | etot = -14.6424332452411 -531000 ekin = 0.153476601970616 | erot = 0.21495474143537 | epot = -15.0108645886531 | etot = -14.6424332452472 -532000 ekin = 0.162656054078885 | erot = 0.200058697649297 | epot = -15.0051479969778 | etot = -14.6424332452496 -533000 ekin = 0.171305419081474 | erot = 0.187454143184918 | epot = -15.0011928075154 | etot = -14.642433245249 -534000 ekin = 0.179162595540396 | erot = 0.177417842695335 | epot = -14.9990136834823 | etot = -14.6424332452466 -535000 ekin = 0.186014006486671 | erot = 0.170212094444235 | epot = -14.9986593461737 | etot = -14.6424332452428 -536000 ekin = 0.191699759240431 | erot = 0.166065149228291 | epot = -15.0001981537075 | etot = -14.6424332452388 -537000 ekin = 0.196116169931534 | erot = 0.165155084981491 | epot = -15.0037045001481 | etot = -14.642433245235 -538000 ekin = 0.199215220533694 | erot = 0.167598364573351 | epot = -15.0092468303393 | etot = -14.6424332452323 -539000 ekin = 0.201000709669595 | erot = 0.173443713619053 | epot = -15.0168776685196 | etot = -14.6424332452309 -540000 ekin = 0.201521164038038 | erot = 0.182671367033605 | epot = -15.0266257763031 | etot = -14.6424332452315 -541000 ekin = 0.200859940141528 | erot = 0.195197211442955 | epot = -15.0384903968187 | etot = -14.6424332452342 -542000 ekin = 0.199123298889056 | erot = 0.210880936223658 | epot = -15.052437480352 | etot = -14.6424332452393 -543000 ekin = 0.19642751938404 | erot = 0.22953701778937 | epot = -15.0683977824199 | etot = -14.6424332452465 -544000 ekin = 0.192886294945236 | erot = 0.250947202002185 | epot = -15.086266742204 | etot = -14.6424332452566 -545000 ekin = 0.188599710887435 | erot = 0.274873110235089 | epot = -15.1059060663913 | etot = -14.6424332452688 -546000 ekin = 0.183646045242698 | erot = 0.301067663118868 | epot = -15.1271469536447 | etot = -14.6424332452831 -547000 ekin = 0.178077473818678 | erot = 0.329284179373465 | epot = -15.1497948984913 | etot = -14.6424332452992 -548000 ekin = 0.171920510267324 | erot = 0.359282253783629 | epot = -15.1736360093673 | etot = -14.6424332453164 -549000 ekin = 0.165181670578013 | erot = 0.390829837831145 | epot = -15.1984447537432 | etot = -14.6424332453341 -550000 ekin = 0.157858408655518 | erot = 0.423701326917604 | epot = -15.2239929809249 | etot = -14.6424332453518 -551000 ekin = 0.149954809005955 | erot = 0.457671882716344 | epot = -15.2500599370909 | etot = -14.6424332453686 -552000 ekin = 0.141500835823186 | erot = 0.492508662660355 | epot = -15.2764427438674 | etot = -14.6424332453839 -553000 ekin = 0.132573145481932 | erot = 0.527960055124183 | epot = -15.3029664460032 | etot = -14.6424332453971 -554000 ekin = 0.123314645148981 | erot = 0.563744383269515 | epot = -15.329492273826 | etot = -14.6424332454075 -555000 ekin = 0.113949270903167 | erot = 0.599539792623517 | epot = -15.3559223089418 | etot = -14.6424332454152 -556000 ekin = 0.104788088807775 | erot = 0.634977129563511 | epot = -15.3821984637917 | etot = -14.6424332454204 -557000 ekin = 0.0962230654780801 | erot = 0.669637513724341 | epot = -15.4082938246267 | etot = -14.6424332454242 -558000 ekin = 0.0887059614428306 | erot = 0.703055990480491 | epot = -15.4341951973517 | etot = -14.6424332454284 -559000 ekin = 0.0827118847741739 | erot = 0.734732129423963 | epot = -15.4598772596329 | etot = -14.6424332454348 -560000 ekin = 0.0786899547259678 | erot = 0.764147748398776 | epot = -15.4852709485703 | etot = -14.6424332454456 -561000 ekin = 0.077006772063353 | erot = 0.790791153075906 | epot = -15.5102311706018 | etot = -14.6424332454625 -562000 ekin = 0.0778911706764506 | erot = 0.814186471629049 | epot = -15.534510887792 | etot = -14.6424332454865 -563000 ekin = 0.0813901113672784 | erot = 0.833925925482987 | epot = -15.5577492823675 | etot = -14.6424332455173 -564000 ekin = 0.0873448530219235 | erot = 0.849702302565643 | epot = -15.57948040114 | etot = -14.6424332455524 -565000 ekin = 0.0953935152542986 | erot = 0.861338569497109 | epot = -15.5991653303401 | etot = -14.6424332455887 -566000 ekin = 0.105001366119689 | erot = 0.868811531657212 | epot = -15.6162461433986 | etot = -14.6424332456216 -567000 ekin = 0.115514789210836 | erot = 0.872266750928061 | epot = -15.6302147857854 | etot = -14.6424332456465 -568000 ekin = 0.126230320990563 | erot = 0.87202254676091 | epot = -15.6406861134105 | etot = -14.642433245659 -569000 ekin = 0.136467575205463 | erot = 0.868561781937853 | epot = -15.6474626027996 | etot = -14.6424332456563 -570000 ekin = 0.145634823229245 | erot = 0.862511177262726 | epot = -15.6505792461291 | etot = -14.6424332456371 -571000 ekin = 0.153278250260091 | erot = 0.854608991356116 | epot = -15.6503204872188 | etot = -14.6424332456026 -572000 ekin = 0.159109636953922 | erot = 0.845662918616649 | epot = -15.6472058011259 | etot = -14.6424332455553 -573000 ekin = 0.163011362017366 | erot = 0.83650089231986 | epot = -15.6419454998373 | etot = -14.6424332455001 -574000 ekin = 0.165021239080139 | erot = 0.827918058205197 | epot = -15.6353725427275 | etot = -14.6424332454422 -575000 ekin = 0.165302195908603 | erot = 0.82062347970414 | epot = -15.6283589210001 | etot = -14.6424332453874 -576000 ekin = 0.164102988101199 | erot = 0.815190165398918 | epot = -15.6217263988412 | etot = -14.6424332453411 -577000 ekin = 0.161716152387156 | erot = 0.812011817944536 | epot = -15.6161612156399 | etot = -14.6424332453082 -578000 ekin = 0.158438569371811 | erot = 0.81126934569462 | epot = -15.6121411603585 | etot = -14.6424332452921 -579000 ekin = 0.154538688869358 | erot = 0.812909695780722 | epot = -15.6098816299449 | etot = -14.6424332452948 -580000 ekin = 0.150232988454481 | erot = 0.816638977241796 | epot = -15.6093052110129 | etot = -14.6424332453166 -581000 ekin = 0.145672809814969 | erot = 0.821931135410972 | epot = -15.6100371905821 | etot = -14.6424332453562 -582000 ekin = 0.140941476791511 | erot = 0.828052590350848 | epot = -15.611427312553 | etot = -14.6424332454106 -583000 ekin = 0.136060602599167 | erot = 0.834102246896349 | epot = -15.6125960949712 | etot = -14.6424332454757 -584000 ekin = 0.131003759896591 | erot = 0.839065139158288 | epot = -15.6125021446008 | etot = -14.642433245546 -585000 ekin = 0.125715216483012 | erot = 0.841876757449037 | epot = -15.6100252195478 | etot = -14.6424332456157 -586000 ekin = 0.120131224768942 | erot = 0.841493945666758 | epot = -15.6040584161146 | etot = -14.6424332456789 -587000 ekin = 0.114201380572126 | erot = 0.836967317753738 | epot = -15.5936019440558 | etot = -14.6424332457299 -588000 ekin = 0.107907808226734 | erot = 0.827509595983212 | epot = -15.577850649974 | etot = -14.642433245764 -589000 ekin = 0.101280337909725 | erot = 0.812554260673577 | epot = -15.556267844361 | etot = -14.6424332457777 -590000 ekin = 0.0944063548788355 | erot = 0.79179948842053 | epot = -15.5286390890686 | etot = -14.6424332457692 -591000 ekin = 0.0874345511052061 | erot = 0.765233519223278 | epot = -15.4951013160667 | etot = -14.6424332457382 -592000 ekin = 0.0805723392085111 | erot = 0.733139214285209 | epot = -15.4561447991801 | etot = -14.6424332456864 -593000 ekin = 0.0740771594080883 | erot = 0.696077455348681 | epot = -15.4125878603738 | etot = -14.642433245617 -594000 ekin = 0.0682423089599854 | erot = 0.654850963358098 | epot = -15.3655265178525 | etot = -14.6424332455344 -595000 ekin = 0.0633782539014572 | erot = 0.610451848323546 | epot = -15.3162633476691 | etot = -14.6424332454441 -596000 ekin = 0.0597906540649578 | erot = 0.563997548401054 | epot = -15.2662214478181 | etot = -14.6424332453521 -597000 ekin = 0.0577565493624065 | erot = 0.516660644084201 | epot = -15.216850438711 | etot = -14.6424332452644 -598000 ekin = 0.0575003158536251 | erot = 0.46959829435358 | epot = -15.1695318553938 | etot = -14.6424332451866 -599000 ekin = 0.0591710965286367 | erot = 0.423886769451031 | epot = -15.1254911111031 | etot = -14.6424332451235 -600000 ekin = 0.0628234356891102 | erot = 0.380465849281421 | epot = -15.0857225300491 | etot = -14.6424332450786 -601000 ekin = 0.0684027903378405 | erot = 0.340096852289037 | epot = -15.0509328876809 | etot = -14.6424332450541 -602000 ekin = 0.0757374499128925 | erot = 0.303336891508809 | epot = -15.0215075864722 | etot = -14.6424332450505 -603000 ekin = 0.0845381560106828 | erot = 0.270530726252434 | epot = -14.99750212733 | etot = -14.6424332450669 -604000 ekin = 0.0944063594078121 | erot = 0.241820347963461 | epot = -14.9786599524719 | etot = -14.6424332451006 -605000 ekin = 0.104851562460535 | erot = 0.217171224791041 | epot = -14.9644560323989 | etot = -14.6424332451473 -606000 ekin = 0.115317556389795 | erot = 0.196412930356109 | epot = -14.9541637319474 | etot = -14.6424332452015 -607000 ekin = 0.125216580353228 | erot = 0.179290709847405 | epot = -14.9469405354578 | etot = -14.6424332452571 -608000 ekin = 0.133969542490509 | erot = 0.165523445157638 | epot = -14.9419262329558 | etot = -14.6424332453076 -609000 ekin = 0.141049537028455 | erot = 0.154862582265071 | epot = -14.9383453646402 | etot = -14.6424332453467 -610000 ekin = 0.146025095175882 | erot = 0.147146040888404 | epot = -14.9356043814333 | etot = -14.6424332453691 -611000 ekin = 0.148599079335686 | erot = 0.14234111819369 | epot = -14.9333734429005 | etot = -14.6424332453711 -612000 ekin = 0.148639027542167 | erot = 0.140571068727464 | epot = -14.9316433416208 | etot = -14.6424332453511 -613000 ekin = 0.146195193893263 | erot = 0.142121441395694 | epot = -14.9307498805989 | etot = -14.6424332453099 -614000 ekin = 0.141503544704983 | erot = 0.147424293659382 | epot = -14.9313610836151 | etot = -14.6424332452507 -615000 ekin = 0.134972482669517 | erot = 0.157020849768724 | epot = -14.934426577617 | etot = -14.6424332451788 -616000 ekin = 0.127153892887408 | erot = 0.171505679772539 | epot = -14.9410928177611 | etot = -14.6424332451012 -617000 ekin = 0.118700960497153 | erot = 0.191457667915174 | epot = -14.9525918734384 | etot = -14.6424332450261 -618000 ekin = 0.110316794781893 | erot = 0.217364584491491 | epot = -14.970114624235 | etot = -14.6424332449616 -619000 ekin = 0.10269894266605 | erot = 0.24954877623364 | epot = -14.9946809638152 | etot = -14.6424332449155 -620000 ekin = 0.0964852203315238 | erot = 0.288101317493722 | epot = -15.0270197827192 | etot = -14.642433244894 -621000 ekin = 0.0922059091525849 | erot = 0.332831044367661 | epot = -15.0674701984217 | etot = -14.6424332449015 -622000 ekin = 0.0902463647100601 | erot = 0.383233451864067 | epot = -15.115913061514 | etot = -14.6424332449399 -623000 ekin = 0.0908226920702702 | erot = 0.438482716267865 | epot = -15.171738653347 | etot = -14.6424332450089 -624000 ekin = 0.0939716062521546 | erot = 0.497448307340481 | epot = -15.2338531586982 | etot = -14.6424332451056 -625000 ekin = 0.0995541611224779 | erot = 0.558735886785281 | epot = -15.3007232931328 | etot = -14.6424332452251 -626000 ekin = 0.107271859325763 | erot = 0.620750477457113 | epot = -15.3704555821434 | etot = -14.6424332453605 -627000 ekin = 0.11669282673765 | erot = 0.681778220901699 | epot = -15.4409042931431 | etot = -14.6424332455038 -628000 ekin = 0.127285245273588 | erot = 0.740081431769906 | epot = -15.5097999226895 | etot = -14.642433245646 -629000 ekin = 0.138455039153851 | erot = 0.794000196770826 | epot = -15.574888481703 | etot = -14.6424332457784 -630000 ekin = 0.149584842937095 | erot = 0.842052640240528 | epot = -15.6340707290702 | etot = -14.6424332458926 -631000 ekin = 0.160071499853017 | erot = 0.883025442878399 | epot = -15.6855301887135 | etot = -14.6424332459821 -632000 ekin = 0.169359720292761 | erot = 0.916046503426791 | epot = -15.7278394697615 | etot = -14.642433246042 -633000 ekin = 0.176970053692532 | erot = 0.940632922941054 | epot = -15.7600362227033 | etot = -14.6424332460697 -634000 ekin = 0.182519961289937 | erot = 0.956709735134042 | epot = -15.7816629424891 | etot = -14.6424332460651 -635000 ekin = 0.185737466035627 | erot = 0.964597760206376 | epot = -15.7927684722726 | etot = -14.6424332460306 -636000 ekin = 0.186467519303283 | erot = 0.964972204256364 | epot = -15.7938729695302 | etot = -14.6424332459705 -637000 ekin = 0.184671774604459 | erot = 0.958796660376478 | epot = -15.7859016808714 | etot = -14.6424332458905 -638000 ekin = 0.180422825778025 | erot = 0.947239527072856 | epot = -15.770095598648 | etot = -14.6424332457971 -639000 ekin = 0.173894119064824 | erot = 0.931581224196041 | epot = -15.7479085889582 | etot = -14.6424332456973 -640000 ekin = 0.165346701827766 | erot = 0.913120838753206 | epot = -15.7209007861785 | etot = -14.6424332455976 -641000 ekin = 0.155113786103673 | erot = 0.893090060089469 | epot = -15.6906370916966 | etot = -14.6424332455035 -642000 ekin = 0.143583869244195 | erot = 0.872580710305971 | epot = -15.6585978249697 | etot = -14.6424332454196 -643000 ekin = 0.131182953689543 | erot = 0.852490168054141 | epot = -15.6261063670928 | etot = -14.6424332453491 -644000 ekin = 0.118356305761149 | erot = 0.833486853990058 | epot = -15.5942764050452 | etot = -14.642433245294 -645000 ekin = 0.105550209085058 | erot = 0.815995971212585 | epot = -15.5639794255528 | etot = -14.6424332452552 -646000 ekin = 0.0931942744194403 | erot = 0.800204061931068 | epot = -15.5358315815827 | etot = -14.6424332452322 -647000 ekin = 0.0816850001800569 | erot = 0.786079744440791 | epot = -15.5101979898446 | etot = -14.6424332452237 -648000 ekin = 0.0713713598437807 | erot = 0.773407243193091 | epot = -15.4872118482647 | etot = -14.6424332452279 -649000 ekin = 0.0625431628716936 | erot = 0.761828976530777 | epot = -15.4668053846446 | etot = -14.6424332452421 -650000 ekin = 0.0554227735502947 | erot = 0.750893453414337 | epot = -15.4487494722283 | etot = -14.6424332452637 -651000 ekin = 0.0501605027658048 | erot = 0.740104978448961 | epot = -15.4326987265043 | etot = -14.6424332452896 -652000 ekin = 0.0468336713663306 | erot = 0.728972100421323 | epot = -15.4182390171045 | etot = -14.6424332453168 -653000 ekin = 0.0454490492573717 | erot = 0.717052285945757 | epot = -15.4049345805459 | etot = -14.6424332453428 -654000 ekin = 0.0459481524943393 | erot = 0.703990869784694 | epot = -15.3923722676441 | etot = -14.6424332453651 -655000 ekin = 0.0482147495286144 | erot = 0.689552835107378 | epot = -15.3802008300176 | etot = -14.6424332453816 -656000 ekin = 0.0520838761262489 | erot = 0.673646332749853 | epot = -15.368163454267 | etot = -14.6424332453909 -657000 ekin = 0.057351662084844 | erot = 0.656337023115504 | epot = -15.3561219305924 | etot = -14.6424332453921 -658000 ekin = 0.0637853134927951 | erot = 0.637852348219592 | epot = -15.3440709070972 | etot = -14.6424332453848 -659000 ekin = 0.0711326702869636 | erot = 0.618574815847833 | epot = -15.3321407315044 | etot = -14.6424332453696 -660000 ekin = 0.0791308828101084 | erot = 0.599023454708773 | epot = -15.3205875828669 | etot = -14.642433245348 -661000 ekin = 0.0875139366233652 | erot = 0.579822939747469 | epot = -15.3097701216932 | etot = -14.6424332453223 -662000 ekin = 0.0960190004199466 | erot = 0.561660610347632 | epot = -15.300112856063 | etot = -14.6424332452954 -663000 ekin = 0.104391848885314 | erot = 0.545232746054679 | epot = -15.2920578402109 | etot = -14.6424332452709 -664000 ekin = 0.112391863390296 | erot = 0.531182949318074 | epot = -15.286008057961 | etot = -14.6424332452526 -665000 ekin = 0.119797262721329 | erot = 0.520037124796732 | epot = -15.2822676327621 | etot = -14.6424332452441 -666000 ekin = 0.126411190063532 | erot = 0.512141060960607 | epot = -15.2809854962726 | etot = -14.6424332452485 -667000 ekin = 0.132069035725113 | erot = 0.507607681728921 | epot = -15.2821099627213 | etot = -14.6424332452672 -668000 ekin = 0.136646914542181 | erot = 0.506281315754145 | epot = -15.2853614755973 | etot = -14.6424332453009 -669000 ekin = 0.140070616012996 | erot = 0.507725566171501 | epot = -15.2902294275325 | etot = -14.642433245348 -670000 ekin = 0.142323740906653 | erot = 0.511239425098507 | epot = -15.2959964114102 | etot = -14.642433245405 -671000 ekin = 0.143453306303039 | erot = 0.515903234044805 | epot = -15.3017897858151 | etot = -14.6424332454672 -672000 ekin = 0.143571012732396 | erot = 0.520652256717971 | epot = -15.3066565149792 | etot = -14.6424332455288 -673000 ekin = 0.142848733836934 | erot = 0.524371563356863 | epot = -15.3096535427773 | etot = -14.6424332455835 -674000 ekin = 0.141507613277702 | erot = 0.526002362930559 | epot = -15.3099432218337 | etot = -14.6424332456255 -675000 ekin = 0.139801302825577 | erot = 0.524647629024427 | epot = -15.3068821775002 | etot = -14.6424332456502 -676000 ekin = 0.137995095210629 | erot = 0.519664439041358 | epot = -15.3000927799067 | etot = -14.6424332456547 -677000 ekin = 0.136343677285176 | erot = 0.510732098517846 | epot = -15.2895090214411 | etot = -14.642433245638 -678000 ekin = 0.135070664122595 | erot = 0.497888575256361 | epot = -15.27539248498 | etot = -14.6424332456011 -679000 ekin = 0.134352810444857 | erot = 0.481532294132433 | epot = -15.2583183501238 | etot = -14.6424332455465 -680000 ekin = 0.134310862655746 | erot = 0.462390968605226 | epot = -15.2391350767392 | etot = -14.6424332454783 -681000 ekin = 0.135007638923116 | erot = 0.441462941784772 | epot = -15.2189038261091 | etot = -14.6424332454012 -682000 ekin = 0.13645246152458 | erot = 0.419938865037781 | epot = -15.1988245718827 | etot = -14.6424332453204 -683000 ekin = 0.138609887397935 | erot = 0.399112293315445 | epot = -15.1801554259542 | etot = -14.6424332452409 -684000 ekin = 0.141410065648248 | erot = 0.380287181762368 | epot = -15.1641304925783 | etot = -14.6424332451677 -685000 ekin = 0.144758102722225 | erot = 0.364688846299406 | epot = -15.1518801941271 | etot = -14.6424332451055 -686000 ekin = 0.148540467119406 | erot = 0.353383275614485 | epot = -15.1443569877923 | etot = -14.6424332450585 -687000 ekin = 0.152627512098693 | erot = 0.347208212230851 | epot = -15.1422689693595 | etot = -14.64243324503 -688000 ekin = 0.156872371008209 | erot = 0.346718408271121 | epot = -15.1460240243023 | etot = -14.642433245023 -689000 ekin = 0.161107527974744 | erot = 0.352146941115391 | epot = -15.1556877141291 | etot = -14.642433245039 -690000 ekin = 0.165141087380609 | erot = 0.363384304942047 | epot = -15.1709586374011 | etot = -14.6424332450784 -691000 ekin = 0.168755042649038 | erot = 0.379976931156532 | epot = -15.1911652189456 | etot = -14.64243324514 -692000 ekin = 0.171707649703648 | erot = 0.40114655839773 | epot = -15.2152874533222 | etot = -14.6424332452208 -693000 ekin = 0.173741393443047 | erot = 0.425831232788526 | epot = -15.2420058715477 | etot = -14.6424332453161 -694000 ekin = 0.17459711062473 | erot = 0.452747528139949 | epot = -15.2697778841842 | etot = -14.6424332454195 -695000 ekin = 0.174033757472198 | erot = 0.480471830922223 | epot = -15.2969388339179 | etot = -14.6424332455235 -696000 ekin = 0.171852263364718 | erot = 0.507536398158151 | epot = -15.3218219071426 | etot = -14.6424332456197 -697000 ekin = 0.167921065290898 | erot = 0.532533688692959 | epot = -15.3428879996838 | etot = -14.6424332456999 -698000 ekin = 0.162200409476997 | erot = 0.554220619924979 | epot = -15.3588542751587 | etot = -14.6424332457567 -699000 ekin = 0.154762415715614 | erot = 0.571613361027875 | epot = -15.3688090225278 | etot = -14.6424332457844 -700000 ekin = 0.145804230008778 | erot = 0.584063387087836 | epot = -15.372300862876 | etot = -14.6424332457794 -701000 ekin = 0.135652269558596 | erot = 0.59130692272119 | epot = -15.3693924380208 | etot = -14.6424332457411 -702000 ekin = 0.124756460207472 | erot = 0.593482464348829 | epot = -15.3606721702278 | etot = -14.6424332456715 -703000 ekin = 0.113674325951261 | erot = 0.591114401856776 | epot = -15.3472219733834 | etot = -14.6424332455753 -704000 ekin = 0.103045675945596 | erot = 0.585064323196386 | epot = -15.3305432446017 | etot = -14.6424332454597 -705000 ekin = 0.0935593581963268 | erot = 0.576454826534503 | epot = -15.312447430064 | etot = -14.6424332453332 -706000 ekin = 0.0859140824284977 | erot = 0.566573150256555 | epot = -15.2949204778904 | etot = -14.6424332452053 -707000 ekin = 0.0807756759558007 | erot = 0.556763427609362 | epot = -15.2799723486511 | etot = -14.642433245086 -708000 ekin = 0.0787333622600193 | erot = 0.548316855291188 | epot = -15.2694834625354 | etot = -14.6424332449842 -709000 ekin = 0.0802577669151192 | erot = 0.542368667953882 | epot = -15.265059679777 | etot = -14.642433244908 -710000 ekin = 0.0856633545528786 | erot = 0.539809747049216 | epot = -15.2679063464658 | etot = -14.6424332448637 -711000 ekin = 0.0950778519027538 | erot = 0.541219180891322 | epot = -15.2787302776492 | etot = -14.6424332448551 -712000 ekin = 0.108420876622172 | erot = 0.546822307911462 | epot = -15.2976764294175 | etot = -14.6424332448839 -713000 ekin = 0.125393451694849 | erot = 0.556476834657724 | epot = -15.3243035313016 | etot = -14.6424332449491 -714000 ekin = 0.145479367621443 | erot = 0.569687600119355 | epot = -15.3576002127879 | etot = -14.6424332450471 -715000 ekin = 0.167958541116821 | erot = 0.585648522303096 | epot = -15.3960403085922 | etot = -14.6424332451723 -716000 ekin = 0.191931735851186 | erot = 0.603308292531368 | epot = -15.4376732736998 | etot = -14.6424332453172 -717000 ekin = 0.216355400176841 | erot = 0.621454592037002 | epot = -15.4802432376871 | etot = -14.6424332454732 -718000 ekin = 0.240085056510385 | erot = 0.638810139731497 | epot = -15.5213284418726 | etot = -14.6424332456307 -719000 ekin = 0.261925698575292 | erot = 0.65413289598608 | epot = -15.5584918403416 | etot = -14.6424332457802 -720000 ekin = 0.280687969311534 | erot = 0.666312379867044 | epot = -15.5894335950911 | etot = -14.6424332459125 -721000 ekin = 0.295249345589098 | erot = 0.674454385927666 | epot = -15.6121369775362 | etot = -14.6424332460194 -722000 ekin = 0.304619886333681 | erot = 0.677947410255072 | epot = -15.6250005426824 | etot = -14.6424332460937 -723000 ekin = 0.30801198372793 | erot = 0.676505724570388 | epot = -15.626950954428 | etot = -14.6424332461296 -724000 ekin = 0.304912667284322 | erot = 0.670186105899534 | epot = -15.6175320193071 | etot = -14.6424332461232 -725000 ekin = 0.295155116711518 | erot = 0.659377522489357 | epot = -15.5969658852731 | etot = -14.6424332460723 -726000 ekin = 0.27898313490006 | erot = 0.644765363158316 | epot = -15.5661817440354 | etot = -14.642433245977 -727000 ekin = 0.257098790794337 | erot = 0.62727386036282 | epot = -15.5268058969977 | etot = -14.6424332458405 -728000 ekin = 0.230680158274908 | erot = 0.607992016180347 | epot = -15.4811054201246 | etot = -14.6424332456694 -729000 ekin = 0.201354496276652 | erot = 0.588089464034279 | epot = -15.4318772057849 | etot = -14.642433245474 -730000 ekin = 0.171114103979276 | erot = 0.568729214715524 | epot = -15.3822765639636 | etot = -14.6424332452688 -731000 ekin = 0.142168923912243 | erot = 0.550984135070421 | epot = -15.3355863040542 | etot = -14.6424332450715 -732000 ekin = 0.116742007100586 | erot = 0.535763349043612 | epot = -15.2949386010455 | etot = -14.6424332449013 -733000 ekin = 0.0968293027575733 | erot = 0.523753647321484 | epot = -15.2630161948554 | etot = -14.6424332447764 -734000 ekin = 0.0839596135620446 | erot = 0.51537959233841 | epot = -15.2417724506114 | etot = -14.642433244711 -735000 ekin = 0.0789983701792907 | erot = 0.510784464195777 | epot = -15.2322160790874 | etot = -14.6424332447124 -736000 ekin = 0.0820355551944224 | erot = 0.509832642266136 | epot = -15.23430144224 | etot = -14.6424332447794 -737000 ekin = 0.0923827123871587 | erot = 0.51213255085533 | epot = -15.2469485081448 | etot = -14.6424332449023 -738000 ekin = 0.108680448514282 | erot = 0.517077971027511 | epot = -15.2681916646066 | etot = -14.6424332450648 -739000 ekin = 0.12909371568348 | erot = 0.523904364926912 | epot = -15.2954313258572 | etot = -14.6424332452468 -740000 ekin = 0.151555277793917 | erot = 0.53175589578008 | epot = -15.325744419002 | etot = -14.642433245428 -741000 ekin = 0.174012721806586 | erot = 0.539758083454025 | epot = -15.3562040508505 | etot = -14.6424332455899 -742000 ekin = 0.194640916831425 | erot = 0.547090549700052 | epot = -15.3841647122504 | etot = -14.642433245719 -743000 ekin = 0.211995737398774 | erot = 0.55305412533823 | epot = -15.4074831085434 | etot = -14.6424332458064 -744000 ekin = 0.225100508723011 | erot = 0.55712676231043 | epot = -15.4246605168821 | etot = -14.6424332458487 -745000 ekin = 0.233469424487037 | erot = 0.559003260239848 | epot = -15.4349059305736 | etot = -14.6424332458467 -746000 ekin = 0.237079913465485 | erot = 0.558614810500861 | epot = -15.4381279697714 | etot = -14.642433245805 -747000 ekin = 0.236308652985516 | erot = 0.556125790083883 | epot = -15.4348676888006 | etot = -14.6424332457312 -748000 ekin = 0.231845097888681 | erot = 0.551907079331287 | epot = -15.4261854228543 | etot = -14.6424332456343 -749000 ekin = 0.224593843485155 | erot = 0.546487360030866 | epot = -15.4135144490412 | etot = -14.6424332455252 -750000 ekin = 0.215574369393343 | erot = 0.54048623348627 | epot = -15.3984938482945 | etot = -14.6424332454149 -751000 ekin = 0.205824583428144 | erot = 0.53453535676598 | epot = -15.3827931855082 | etot = -14.642433245314 -752000 ekin = 0.196313335743836 | erot = 0.529195815219999 | epot = -15.3679423961962 | etot = -14.6424332452323 -753000 ekin = 0.187866475789588 | erot = 0.524881252733496 | epot = -15.3551809737002 | etot = -14.6424332451771 -754000 ekin = 0.181110613628451 | erot = 0.521796491099419 | epot = -15.3453403498808 | etot = -14.6424332451529 -755000 ekin = 0.176438042206882 | erot = 0.519900210808722 | epot = -15.3387714981766 | etot = -14.642433245161 -756000 ekin = 0.173994962649905 | erot = 0.51889767628673 | epot = -15.3353258841354 | etot = -14.6424332451988 -757000 ekin = 0.17369319027378 | erot = 0.518265706184262 | epot = -15.3343921417188 | etot = -14.6424332452608 -758000 ekin = 0.175243155018255 | erot = 0.517307659823357 | epot = -15.3349840601802 | etot = -14.6424332453386 -759000 ekin = 0.178203703096654 | erot = 0.515231902166286 | epot = -15.3358688506855 | etot = -14.6424332454225 -760000 ekin = 0.182042463552526 | erot = 0.511243837950772 | epot = -15.3357195470057 | etot = -14.6424332455024 -761000 ekin = 0.186199747764921 | erot = 0.504639825549507 | epot = -15.3332728188834 | etot = -14.642433245569 -762000 ekin = 0.190149235948631 | erot = 0.494891409035836 | epot = -15.3274738905994 | etot = -14.6424332456149 -763000 ekin = 0.193449921097639 | erot = 0.481710238289171 | epot = -15.3175934050221 | etot = -14.6424332456353 -764000 ekin = 0.19578555242884 | erot = 0.465087294353515 | epot = -15.30330609241 | etot = -14.6424332456277 -765000 ekin = 0.196989678186415 | erot = 0.445303873493914 | epot = -15.284726797273 | etot = -14.6424332455926 -766000 ekin = 0.197055919183636 | erot = 0.422915440293736 | epot = -15.2624046050104 | etot = -14.642433245533 -767000 ekin = 0.196134076493768 | erot = 0.398712320924378 | epot = -15.2372796428716 | etot = -14.6424332454534 -768000 ekin = 0.194513096651584 | erot = 0.373662938959247 | epot = -15.2106092809709 | etot = -14.6424332453601 -769000 ekin = 0.192592017625517 | erot = 0.348845887485673 | epot = -15.1838711503712 | etot = -14.64243324526 -770000 ekin = 0.190840163684011 | erot = 0.325376840211974 | epot = -15.1586502490569 | etot = -14.6424332451609 -771000 ekin = 0.189748397224672 | erot = 0.304335529899268 | epot = -15.1365171721947 | etot = -14.6424332450707 -772000 ekin = 0.189774341847475 | erot = 0.28669715391999 | epot = -15.1189047407645 | etot = -14.642433244997 -773000 ekin = 0.191286034497063 | erot = 0.273271857835071 | epot = -15.1069911372783 | etot = -14.6424332449461 -774000 ekin = 0.194510000604886 | erot = 0.264655458968603 | epot = -15.1015987044967 | etot = -14.6424332449232 -775000 ekin = 0.199490639675254 | erot = 0.261194193154345 | epot = -15.1031180777603 | etot = -14.6424332449307 -776000 ekin = 0.20606747706157 | erot = 0.262965803934196 | epot = -15.1114665259647 | etot = -14.642433244969 -777000 ekin = 0.213875019082022 | erot = 0.269778568411809 | epot = -15.126086832529 | etot = -14.6424332450352 -778000 ekin = 0.222366868961445 | erot = 0.281188790675727 | epot = -15.1459889047611 | etot = -14.6424332451239 -779000 ekin = 0.230862102265721 | erot = 0.296535944175963 | epot = -15.1698312916696 | etot = -14.6424332452279 -780000 ekin = 0.238608567016769 | erot = 0.314993169091884 | epot = -15.1960349814469 | etot = -14.6424332453382 -781000 ekin = 0.244855557739683 | erot = 0.335629445236496 | epot = -15.2229182484219 | etot = -14.6424332454457 -782000 ekin = 0.248927612477182 | erot = 0.357478674286721 | epot = -15.2488395323054 | etot = -14.6424332455415 -783000 ekin = 0.250291897528864 | erot = 0.379610269028215 | epot = -15.2723354121748 | etot = -14.6424332456177 -784000 ekin = 0.248613283253074 | erot = 0.401195731122854 | epot = -15.2922422600443 | etot = -14.6424332456684 -785000 ekin = 0.243793133451241 | erot = 0.421566090466491 | epot = -15.3077924696071 | etot = -14.6424332456894 -786000 ekin = 0.235989501853483 | erot = 0.440255905206823 | epot = -15.3186786527393 | etot = -14.6424332456789 -787000 ekin = 0.225617610785701 | erot = 0.457030673432402 | epot = -15.325081529856 | etot = -14.6424332456379 -788000 ekin = 0.213330260903022 | erot = 0.471895861696016 | epot = -15.3276593681683 | etot = -14.6424332455693 -789000 ekin = 0.199978499678437 | erot = 0.485087183883112 | epot = -15.3274989290403 | etot = -14.6424332454787 -790000 ekin = 0.186553834704387 | erot = 0.497043141242962 | epot = -15.3260302213208 | etot = -14.6424332453735 -791000 ekin = 0.174114766793386 | erot = 0.508362048569917 | epot = -15.3249100606257 | etot = -14.6424332452624 -792000 ekin = 0.16370242043235 | erot = 0.51974673918094 | epot = -15.3258824047686 | etot = -14.6424332451553 -793000 ekin = 0.156252224966279 | erot = 0.531940822989476 | epot = -15.3306262930175 | etot = -14.6424332450617 -794000 ekin = 0.152510350034319 | erot = 0.545660777315051 | epot = -15.3406043723398 | etot = -14.6424332449904 -795000 ekin = 0.152964251156929 | erot = 0.561528326980994 | epot = -15.3569258230863 | etot = -14.6424332449484 -796000 ekin = 0.157795747355314 | erot = 0.580007578777949 | epot = -15.3802365710734 | etot = -14.6424332449401 -797000 ekin = 0.166862457855228 | erot = 0.601351255569557 | epot = -15.4106469583922 | etot = -14.6424332449674 -798000 ekin = 0.179709603428652 | erot = 0.625560121845491 | epot = -15.4477029703033 | etot = -14.6424332450292 -799000 ekin = 0.195609966057178 | erot = 0.652359247176569 | epot = -15.4904024583554 | etot = -14.6424332451217 -800000 ekin = 0.213626158786268 | erot = 0.681194021873679 | epot = -15.5372534258987 | etot = -14.6424332452387 -801000 ekin = 0.2326870401884 | erot = 0.711247726386626 | epot = -15.5863680119477 | etot = -14.6424332453727 -802000 ekin = 0.251669429101128 | erot = 0.741480919836206 | epot = -15.6355835944521 | etot = -14.6424332455148 -803000 ekin = 0.269477067853758 | erot = 0.770691008421269 | epot = -15.6826013219307 | etot = -14.6424332456557 -804000 ekin = 0.285110541453684 | erot = 0.797588259158539 | epot = -15.7251320463986 | etot = -14.6424332457864 -805000 ekin = 0.297723982502899 | erot = 0.8208825287997 | epot = -15.7610397572013 | etot = -14.6424332458987 -806000 ekin = 0.30666638768475 | erot = 0.839373432913578 | epot = -15.7884730665839 | etot = -14.6424332459855 -807000 ekin = 0.311506975554297 | erot = 0.852035914445945 | epot = -15.805976136042 | etot = -14.6424332460417 -808000 ekin = 0.312045176252541 | erot = 0.858093398528272 | epot = -15.8125718208451 | etot = -14.6424332460643 -809000 ekin = 0.308306642387587 | erot = 0.857071970758693 | epot = -15.8078118591987 | etot = -14.6424332460525 -810000 ekin = 0.300527220561047 | erot = 0.848831113928854 | epot = -15.7917915804975 | etot = -14.6424332460076 -811000 ekin = 0.289127204421145 | erot = 0.833569138622277 | epot = -15.7651295889768 | etot = -14.6424332459334 -812000 ekin = 0.274678427602345 | erot = 0.811804116493158 | epot = -15.7289157899301 | etot = -14.6424332458346 -813000 ekin = 0.257866835583845 | erot = 0.784333459542837 | epot = -15.6846335408444 | etot = -14.6424332457177 -814000 ekin = 0.239453080594144 | erot = 0.752176980196583 | epot = -15.6340633063802 | etot = -14.6424332455895 -815000 ekin = 0.220233415151612 | erot = 0.716509170266826 | epot = -15.5791758308755 | etot = -14.642433245457 -816000 ekin = 0.201002751046596 | erot = 0.678586569748228 | epot = -15.5220225661217 | etot = -14.6424332453268 -817000 ekin = 0.182521261080197 | erot = 0.639675603865118 | epot = -15.4646301101502 | etot = -14.6424332452049 -818000 ekin = 0.165485401527799 | erot = 0.600985363831631 | epot = -15.4089040104559 | etot = -14.6424332450965 -819000 ekin = 0.150503789780369 | erot = 0.563608719249515 | epot = -15.3565457540356 | etot = -14.6424332450057 -820000 ekin = 0.138078032178435 | erot = 0.528474068972645 | epot = -15.3089853460867 | etot = -14.6424332449356 -821000 ekin = 0.1285883867301 | erot = 0.496309093118099 | epot = -15.2673307247365 | etot = -14.6424332448883 -822000 ekin = 0.122284066136782 | erot = 0.467617125516122 | epot = -15.2323344365175 | etot = -14.6424332448646 -823000 ekin = 0.119278020924313 | erot = 0.442666228479138 | epot = -15.2043774942681 | etot = -14.6424332448646 -824000 ekin = 0.119546158603652 | erot = 0.421490682739058 | epot = -15.1834700862299 | etot = -14.6424332448872 -825000 ekin = 0.122931110514523 | erot = 0.40390434222418 | epot = -15.1692686976689 | etot = -14.6424332449302 -826000 ekin = 0.129150803764299 | erot = 0.389525075000447 | epot = -15.1611091237554 | etot = -14.6424332449907 -827000 ekin = 0.137812176399144 | erot = 0.377809252270954 | epot = -15.158054673735 | etot = -14.6424332450649 -828000 ekin = 0.14843033160834 | erot = 0.368094906963214 | epot = -15.1589584837195 | etot = -14.6424332451479 -829000 ekin = 0.160453205761645 | erot = 0.359651737512377 | epot = -15.1625381885086 | etot = -14.6424332452346 -830000 ekin = 0.173291382896719 | erot = 0.351735589545628 | epot = -15.1674602177614 | etot = -14.6424332453191 -831000 ekin = 0.186352012962919 | erot = 0.343644456330166 | epot = -15.1724297146887 | etot = -14.6424332453957 -832000 ekin = 0.199074924605406 | erot = 0.334772487921297 | epot = -15.1762806579857 | etot = -14.642433245459 -833000 ekin = 0.210968084880445 | erot = 0.324658115189039 | epot = -15.1780594455739 | etot = -14.6424332455044 -834000 ekin = 0.221638757256876 | erot = 0.31302232344262 | epot = -15.1770943262284 | etot = -14.6424332455289 -835000 ekin = 0.230816330001854 | erot = 0.299793483326917 | epot = -15.1730430588598 | etot = -14.642433245531 -836000 ekin = 0.238363132174117 | erot = 0.285116039961078 | epot = -15.1659124176467 | etot = -14.6424332455115 -837000 ekin = 0.244270841530878 | erot = 0.269341751259836 | epot = -15.1560458382641 | etot = -14.6424332454734 -838000 ekin = 0.248642320235611 | erot = 0.253003904104012 | epot = -15.1440794697608 | etot = -14.6424332454211 -839000 ekin = 0.251661569327577 | erot = 0.236776758987282 | epot = -15.1308715736755 | etot = -14.6424332453606 -840000 ekin = 0.253557306828159 | erot = 0.221424057161585 | epot = -15.1174146092877 | etot = -14.6424332452979 -841000 ekin = 0.254567562696711 | erot = 0.20774147574365 | epot = -15.1047422836789 | etot = -14.6424332452386 -842000 ekin = 0.254912814683647 | erot = 0.196498262354328 | epot = -15.0938443222247 | etot = -14.6424332451867 -843000 ekin = 0.254783130765731 | erot = 0.188382921787082 | epot = -15.0855992976979 | etot = -14.6424332451451 -844000 ekin = 0.254340789697796 | erot = 0.183956927272106 | epot = -15.0807309620845 | etot = -14.6424332451146 -845000 ekin = 0.253734932891626 | erot = 0.183619247980584 | epot = -15.0797874259675 | etot = -14.6424332450953 -846000 ekin = 0.253120504196072 | erot = 0.187583282239813 | epot = -15.0831370315223 | etot = -14.6424332450865 -847000 ekin = 0.252671650088183 | erot = 0.195866742639043 | epot = -15.0909716378151 | etot = -14.6424332450879 -848000 ekin = 0.252580915310197 | erot = 0.208294222463049 | epot = -15.103308382873 | etot = -14.6424332450997 -849000 ekin = 0.253039966848168 | erot = 0.224511555531714 | epot = -15.1199847675025 | etot = -14.6424332451226 -850000 ekin = 0.254204001798429 | erot = 0.244010590097668 | epot = -15.1406478370534 | etot = -14.6424332451573 -851000 ekin = 0.256148339026697 | erot = 0.266162563602488 | epot = -15.1647441478331 | etot = -14.6424332452039 -852000 ekin = 0.258829686440493 | erot = 0.290257858698055 | epot = -15.1915207903997 | etot = -14.6424332452612 -853000 ekin = 0.262064657828486 | erot = 0.315549558167563 | epot = -15.2200474613222 | etot = -14.6424332453261 -854000 ekin = 0.265534116122544 | erot = 0.3412979477362 | epot = -15.2492653092528 | etot = -14.642433245394 -855000 ekin = 0.268815174653471 | erot = 0.366813004430713 | epot = -15.2780614245432 | etot = -14.642433245459 -856000 ekin = 0.271435486954491 | erot = 0.391492007901263 | epot = -15.3053607403707 | etot = -14.6424332455149 -857000 ekin = 0.272939108062895 | erot = 0.414849750473244 | epot = -15.3302221040925 | etot = -14.6424332455563 -858000 ekin = 0.272951155039673 | erot = 0.436539390687867 | epot = -15.3519237913068 | etot = -14.6424332455792 -859000 ekin = 0.271229880676363 | erot = 0.456362750059196 | epot = -15.3700258763173 | etot = -14.6424332455817 -860000 ekin = 0.267698633833807 | erot = 0.474269718460551 | epot = -15.3844015978586 | etot = -14.6424332455643 -861000 ekin = 0.262455001752809 | erot = 0.490347316007701 | epot = -15.3952355632894 | etot = -14.6424332455289 -862000 ekin = 0.255758797176621 | erot = 0.504799761298855 | epot = -15.4029918039549 | etot = -14.6424332454794 -863000 ekin = 0.24800356434136 | erot = 0.517921532812456 | epot = -15.4083583425742 | etot = -14.6424332454204 -864000 ekin = 0.239677655584812 | erot = 0.530065823503365 | epot = -15.4121767244452 | etot = -14.642433245357 -865000 ekin = 0.231320889445349 | erot = 0.541610953534325 | epot = -15.4153650882738 | etot = -14.6424332452942 -866000 ekin = 0.223481813676273 | erot = 0.552927233331992 | epot = -15.4188422922445 | etot = -14.6424332452362 -867000 ekin = 0.216679174491962 | erot = 0.56434649943238 | epot = -15.4234589191111 | etot = -14.6424332451867 -868000 ekin = 0.211369750018252 | erot = 0.576136138938899 | epot = -15.4299391341059 | etot = -14.6424332451488 -869000 ekin = 0.207923502308352 | erot = 0.588478941151549 | epot = -15.438835688584 | etot = -14.6424332451241 -870000 ekin = 0.206606153000488 | erot = 0.601459626890518 | epot = -15.4504990250047 | etot = -14.6424332451137 -871000 ekin = 0.207568796758665 | erot = 0.615058451105769 | epot = -15.4650604929824 | etot = -14.6424332451179 -872000 ekin = 0.210843969902117 | erot = 0.629151875759721 | epot = -15.4824290907979 | etot = -14.642433245136 -873000 ekin = 0.216347593119518 | erot = 0.643519970833803 | epot = -15.50230080912 | etot = -14.6424332451667 -874000 ekin = 0.223886305143568 | erot = 0.657859909730861 | epot = -15.5241794600824 | etot = -14.642433245208 -875000 ekin = 0.233169807553262 | erot = 0.671804662211148 | epot = -15.5474077150218 | etot = -14.6424332452574 -876000 ekin = 0.243827877963711 | erot = 0.684945735800201 | epot = -15.571206859076 | etot = -14.642433245312 -877000 ekin = 0.255431632546027 | erot = 0.696858567354813 | epot = -15.5947234452694 | etot = -14.6424332453685 -878000 ekin = 0.267518408513302 | erot = 0.707128927389039 | epot = -15.6170805813258 | etot = -14.6424332454235 -879000 ekin = 0.279619300259058 | erot = 0.715378495721438 | epot = -15.637431041454 | etot = -14.6424332454735 -880000 ekin = 0.291287955020503 | erot = 0.721287639199418 | epot = -15.6550088397355 | etot = -14.6424332455156 -881000 ekin = 0.302128778464605 | erot = 0.724613422810924 | epot = -15.6691754468228 | etot = -14.6424332455472 -882000 ekin = 0.31182230406878 | erot = 0.725201068177037 | epot = -15.6794566178127 | etot = -14.6424332455669 -883000 ekin = 0.320145243787645 | erot = 0.722987481104317 | epot = -15.6855659704657 | etot = -14.6424332455737 -884000 ekin = 0.326982762198833 | erot = 0.717996120159309 | epot = -15.6874121279266 | etot = -14.6424332455685 -885000 ekin = 0.332330882212394 | erot = 0.710323349672191 | epot = -15.6850874774375 | etot = -14.6424332455529 -886000 ekin = 0.336287673330895 | erot = 0.700117442976369 | epot = -15.6788383618372 | etot = -14.6424332455299 -887000 ekin = 0.339032964151514 | erot = 0.687552454437141 | epot = -15.6690186640918 | etot = -14.6424332455032 -888000 ekin = 0.340797654544245 | erot = 0.672800100945642 | epot = -15.6560310009668 | etot = -14.642433245477 -889000 ekin = 0.341825106158877 | erot = 0.65600340710247 | epot = -15.6402617587168 | etot = -14.6424332454555 -890000 ekin = 0.342328347575086 | erot = 0.637256013166159 | epot = -15.6220176061834 | etot = -14.6424332454421 -891000 ekin = 0.342447730491975 | erot = 0.616590618570723 | epot = -15.6014715945023 | etot = -14.6424332454396 -892000 ekin = 0.342214057411655 | erot = 0.593979026507039 | epot = -15.5786263293678 | etot = -14.6424332454491 -893000 ekin = 0.341522004910065 | erot = 0.569344767734354 | epot = -15.5533000181144 | etot = -14.6424332454699 -894000 ekin = 0.340117934117532 | erot = 0.542587519917411 | epot = -15.5251386995349 | etot = -14.6424332454999 -895000 ekin = 0.337605044782463 | erot = 0.513616778982068 | epot = -15.4936550692998 | etot = -14.6424332455353 -896000 ekin = 0.333467462872296 | erot = 0.482390775175794 | epot = -15.458291483619 | etot = -14.6424332455709 -897000 ekin = 0.327113397522047 | erot = 0.448955709004676 | epot = -15.4185023521276 | etot = -14.6424332456009 -898000 ekin = 0.317936017621463 | erot = 0.413480165460617 | epot = -15.3738494287011 | etot = -14.642433245619 -899000 ekin = 0.305389123797586 | erot = 0.37628007747055 | epot = -15.3241024468869 | etot = -14.6424332456188 -900000 ekin = 0.289072881398034 | erot = 0.337830752319645 | epot = -15.2693368793123 | etot = -14.6424332455946 -901000 ekin = 0.268822686263592 | erot = 0.298764046956938 | epot = -15.2100199787627 | etot = -14.6424332455422 -902000 ekin = 0.24479165397371 | erot = 0.259850521116705 | epot = -15.1470754205494 | etot = -14.642433245459 -903000 ekin = 0.217514571467766 | erot = 0.221968047208425 | epot = -15.0819158640215 | etot = -14.6424332453453 -904000 ekin = 0.187939204416785 | erot = 0.186059692009975 | epot = -15.0164321416314 | etot = -14.6424332452047 -905000 ekin = 0.157410847736408 | erot = 0.153084564880817 | epot = -14.9529286576619 | etot = -14.6424332450446 -906000 ekin = 0.127599356275853 | erot = 0.123965703542096 | epot = -14.8939983046948 | etot = -14.6424332448769 -907000 ekin = 0.100365589134282 | erot = 0.0995389863865378 | epot = -14.8423378202369 | etot = -14.6424332447161 -908000 ekin = 0.077575985596938 | erot = 0.0805066337372383 | epot = -14.8005158639127 | etot = -14.6424332445785 -909000 ekin = 0.0608876950042913 | erot = 0.067398235454302 | epot = -14.770719174938 | etot = -14.6424332444794 -910000 ekin = 0.0515382922982553 | erot = 0.0605415547688289 | epot = -14.7545130914983 | etot = -14.6424332444312 -911000 ekin = 0.0501789452889865 | erot = 0.0600446989609947 | epot = -14.7526568886899 | etot = -14.64243324444 -912000 ekin = 0.0567846925721246 | erot = 0.0657906450220629 | epot = -14.7650085820989 | etot = -14.6424332445047 -913000 ekin = 0.0706603747930615 | erot = 0.0774445361864401 | epot = -14.7905381555972 | etot = -14.6424332446177 -914000 ekin = 0.0905398584091933 | erot = 0.0944735694301048 | epot = -14.8274466726051 | etot = -14.6424332447658 -915000 ekin = 0.114756144628423 | erot = 0.116178630207352 | epot = -14.8733680197685 | etot = -14.6424332449327 -916000 ekin = 0.141447043402261 | erot = 0.141736093138861 | epot = -14.9256163816435 | etot = -14.6424332451024 -917000 ekin = 0.168758535419804 | erot = 0.170247440488293 | epot = -14.9814392211687 | etot = -14.6424332452606 -918000 ekin = 0.195014913439577 | erot = 0.200793639367908 | epot = -15.0382417982038 | etot = -14.6424332453963 -919000 ekin = 0.218837422083594 | erot = 0.232490666335247 | epot = -15.0937613339217 | etot = -14.6424332455029 -920000 ekin = 0.239206641023645 | erot = 0.264542267091037 | epot = -15.1461821536917 | etot = -14.642433245577 -921000 ekin = 0.255474577148561 | erot = 0.296286050801315 | epot = -15.1941938735685 | etot = -14.6424332456186 -922000 ekin = 0.267338631215656 | erot = 0.327229363204391 | epot = -15.2370012400499 | etot = -14.6424332456299 -923000 ekin = 0.274791412214081 | erot = 0.357072039936817 | epot = -15.2742966977655 | etot = -14.6424332456146 -924000 ekin = 0.278059017516243 | erot = 0.385714059432018 | epot = -15.3062063225258 | etot = -14.6424332455775 -925000 ekin = 0.277537405168241 | erot = 0.41324722009486 | epot = -15.3332178707873 | etot = -14.6424332455242 -926000 ekin = 0.273733135238203 | erot = 0.439931173660845 | epot = -15.3560975543592 | etot = -14.6424332454601 -927000 ekin = 0.267211859641411 | erot = 0.46615536388163 | epot = -15.3758004689142 | etot = -14.6424332453911 -928000 ekin = 0.258555847535982 | erot = 0.492389553501975 | epot = -15.3933786463608 | etot = -14.6424332453229 -929000 ekin = 0.248330567891816 | erot = 0.519126582981108 | epot = -15.4098903961335 | etot = -14.6424332452606 -930000 ekin = 0.237059747166114 | erot = 0.546821711631127 | epot = -15.4263147040064 | etot = -14.6424332452091 -931000 ekin = 0.225208144805798 | erot = 0.57583328292282 | epot = -15.4434746729008 | etot = -14.6424332451722 -932000 ekin = 0.213171319365834 | erot = 0.606369490850999 | epot = -15.4619740553695 | etot = -14.6424332451527 -933000 ekin = 0.201271722995926 | erot = 0.638445690378123 | epot = -15.4821506585261 | etot = -14.6424332451521 -934000 ekin = 0.189760460110219 | erot = 0.671856006698404 | epot = -15.5040497119793 | etot = -14.6424332451707 -935000 ekin = 0.178823941838474 | erot = 0.706161996586672 | epot = -15.5274191836322 | etot = -14.6424332452071 -936000 ekin = 0.168594479115077 | erot = 0.740699865836542 | epot = -15.5517275902104 | etot = -14.6424332452587 -937000 ekin = 0.159163635635008 | erot = 0.774606336205393 | epot = -15.5762032171623 | etot = -14.6424332453219 -938000 ekin = 0.150596971915019 | erot = 0.806861786795504 | epot = -15.5998920041024 | etot = -14.6424332453919 -939000 ekin = 0.14294871163255 | erot = 0.836347883525934 | epot = -15.6217298406219 | etot = -14.6424332454634 -940000 ekin = 0.136274889171307 | erot = 0.861915676028113 | epot = -15.6406238107306 | etot = -14.6424332455312 -941000 ekin = 0.130643703199096 | erot = 0.882459199119799 | epot = -15.6555361479089 | etot = -14.64243324559 -942000 ekin = 0.126142088160929 | erot = 0.896989065171445 | epot = -15.6655643989678 | etot = -14.6424332456355 -943000 ekin = 0.122877886110413 | erot = 0.904700444358206 | epot = -15.6700115761326 | etot = -14.642433245664 -944000 ekin = 0.120977407412306 | erot = 0.905030230236292 | epot = -15.6684408833221 | etot = -14.6424332456735 -945000 ekin = 0.120578563690912 | erot = 0.897699054745102 | epot = -15.6607108640992 | etot = -14.6424332456632 -946000 ekin = 0.121820103593719 | erot = 0.882735070927983 | epot = -15.6469884201554 | etot = -14.6424332456337 -947000 ekin = 0.124827761129314 | erot = 0.860477935595928 | epot = -15.6277389423123 | etot = -14.6424332455871 -948000 ekin = 0.129698334168894 | erot = 0.831563037037535 | epot = -15.6036946167333 | etot = -14.6424332455268 -949000 ekin = 0.136482857558376 | erot = 0.796887554721867 | epot = -15.5758036577374 | etot = -14.6424332454571 -950000 ekin = 0.145170138931399 | erot = 0.757561255988068 | epot = -15.5451646403023 | etot = -14.6424332453828 -951000 ekin = 0.155672002995351 | erot = 0.714845916093614 | epot = -15.512951164398 | etot = -14.642433245309 -952000 ekin = 0.167811650836438 | erot = 0.670087833250183 | epot = -15.4803327293273 | etot = -14.6424332452407 -953000 ekin = 0.181316579471426 | erot = 0.624648095211963 | epot = -15.4483979198658 | etot = -14.6424332451824 -954000 ekin = 0.195817500701304 | erot = 0.579835080695791 | epot = -15.4180858265346 | etot = -14.6424332451375 -955000 ekin = 0.210854606876787 | erot = 0.536843219768805 | epot = -15.390131071754 | etot = -14.6424332451084 -956000 ekin = 0.225892299837379 | erot = 0.496701376791544 | epot = -15.3650269217251 | etot = -14.6424332450962 -957000 ekin = 0.240343066498589 | erot = 0.460233438093954 | epot = -15.3430097496929 | etot = -14.6424332451004 -958000 ekin = 0.25360049383932 | erot = 0.428032849894234 | epot = -15.3240665888525 | etot = -14.6424332451189 -959000 ekin = 0.265080433748221 | erot = 0.400452005459141 | epot = -15.3079656843558 | etot = -14.6424332451485 -960000 ekin = 0.274268068130506 | erot = 0.37760654944986 | epot = -15.294307862765 | etot = -14.6424332451846 -961000 ekin = 0.280767178003527 | erot = 0.359393861249854 | epot = -15.2825942844756 | etot = -14.6424332452222 -962000 ekin = 0.284346484063387 | erot = 0.345524198816839 | epot = -15.2723039281363 | etot = -14.6424332452561 -963000 ekin = 0.284976816089799 | erot = 0.335562232329375 | epot = -15.2629722937007 | etot = -14.6424332452816 -964000 ekin = 0.282852494247959 | erot = 0.328975986497034 | epot = -15.2542617260401 | etot = -14.6424332452952 -965000 ekin = 0.278391086615529 | erot = 0.325189577598941 | epot = -15.2460139095095 | etot = -14.6424332452951 -966000 ekin = 0.272207924679531 | erot = 0.323635640150906 | epot = -15.2382768101118 | etot = -14.6424332452814 -967000 ekin = 0.265065367870656 | erot = 0.323803079987486 | epot = -15.2313016931143 | etot = -14.6424332452561 -968000 ekin = 0.257801293713953 | erot = 0.325275872290767 | epot = -15.2255104112278 | etot = -14.6424332452231 -969000 ekin = 0.251245661474204 | erot = 0.327759142576171 | epot = -15.2214380492373 | etot = -14.642433245187 -970000 ekin = 0.246137008993053 | erot = 0.331089781181015 | epot = -15.2196600353269 | etot = -14.6424332451528 -971000 ekin = 0.243051319616002 | erot = 0.335230325665042 | epot = -15.2207148904062 | etot = -14.6424332451251 -972000 ekin = 0.242353409638639 | erot = 0.340246678804514 | epot = -15.2250333335506 | etot = -14.6424332451075 -973000 ekin = 0.244176338162395 | erot = 0.34627219071044 | epot = -15.2328817739751 | etot = -14.6424332451022 -974000 ekin = 0.248428661657912 | erot = 0.353462430361481 | epot = -15.24432433713 | etot = -14.6424332451106 -975000 ekin = 0.254824314802904 | erot = 0.361946299430119 | epot = -15.2592038593657 | etot = -14.6424332451327 -976000 ekin = 0.262926848820355 | erot = 0.371779749929349 | epot = -15.2771398439173 | etot = -14.6424332451676 -977000 ekin = 0.272199235330701 | erot = 0.38290812326356 | epot = -15.2975406038081 | etot = -14.6424332452139 -978000 ekin = 0.282052066851546 | erot = 0.395142048096898 | epot = -15.3196273602178 | etot = -14.6424332452693 -979000 ekin = 0.291885751913825 | erot = 0.408150081470842 | epot = -15.3424690787159 | etot = -14.6424332453312 -980000 ekin = 0.301125083789806 | erot = 0.421469125222054 | epot = -15.365027454408 | etot = -14.6424332453961 -981000 ekin = 0.309246535917258 | erot = 0.434531423655728 | epot = -15.3862112050331 | etot = -14.6424332454601 -982000 ekin = 0.315799497490744 | erot = 0.446704965615888 | epot = -15.4049377086259 | etot = -14.6424332455192 -983000 ekin = 0.320422573221004 | erot = 0.457342632742922 | epot = -15.4201984515333 | etot = -14.6424332455694 -984000 ekin = 0.322855465258447 | erot = 0.465834622598312 | epot = -15.4311233334637 | etot = -14.6424332456069 -985000 ekin = 0.322946302475138 | erot = 0.471658590972897 | epot = -15.437038139077 | etot = -14.642433245629 -986000 ekin = 0.320653917805709 | erot = 0.474422556589351 | epot = -15.437509720029 | etot = -14.6424332456339 -987000 ekin = 0.316044627362148 | erot = 0.47389675551445 | epot = -15.4323746284979 | etot = -14.6424332456213 -988000 ekin = 0.309283477268748 | erot = 0.470032116944019 | epot = -15.4217488398044 | etot = -14.6424332455917 -989000 ekin = 0.30062052216921 | erot = 0.462964620620772 | epot = -15.406018388337 | etot = -14.642433245547 -990000 ekin = 0.290373280691244 | erot = 0.45300626299374 | epot = -15.3858127891748 | etot = -14.6424332454898 -991000 ekin = 0.278906915705727 | erot = 0.440624526218079 | epot = -15.3619646873473 | etot = -14.6424332454235 -992000 ekin = 0.266613826415212 | erot = 0.426413006890097 | epot = -15.3354600786568 | etot = -14.6424332453515 -993000 ekin = 0.253894212446597 | erot = 0.411056197523472 | epot = -15.3073836552474 | etot = -14.6424332452773 -994000 ekin = 0.241138837000143 | erot = 0.395291372387429 | epot = -15.2788634545919 | etot = -14.6424332452043 -995000 ekin = 0.228714768906998 | erot = 0.379870207854295 | epot = -15.2510182218967 | etot = -14.6424332451354 -996000 ekin = 0.216954417470394 | erot = 0.365522282706593 | epot = -15.2249099452501 | etot = -14.6424332450731 -997000 ekin = 0.20614776645599 | erot = 0.35292206613789 | epot = -15.2015030776133 | etot = -14.6424332450194 -998000 ekin = 0.196537413157798 | erot = 0.342660495990661 | epot = -15.1816311541244 | etot = -14.6424332449759 -999000 ekin = 0.188315843913 | erot = 0.335221830005141 | epot = -15.1659709188617 | etot = -14.6424332449435 -1000000 ekin = 0.181624323067651 | erot = 0.330966139648843 | epot = -15.1550237076396 | etot = -14.6424332449231 - 1000000 0.013453654 -1.5270261 0.011523695 -1.4973399 -0.00016850969 -Loop time of 18.8945 on 4 procs for 1000000 steps with 10 atoms - -Performance: 45727.664 tau/day, 52925.537 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.58931 | 7.2806 | 13.001 | 192.7 | 38.53 -Bond | 0.08158 | 0.3024 | 0.49236 | 29.7 | 1.60 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 1.6616 | 1.8619 | 2.1581 | 13.8 | 9.85 -Output | 2.2173e-05 | 2.4319e-05 | 2.5034e-05 | 0.0 | 0.00 -Modify | 0.20928 | 0.94821 | 1.6085 | 58.7 | 5.02 -Other | | 8.501 | | | 44.99 - -Nlocal: 2.5 ave 5 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Nghost: 7.5 ave 10 max 5 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Neighs: 17.5 ave 33 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 - -Total # of neighbors = 70 -Ave neighs/atom = 7 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:18 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 new file mode 100644 index 0000000000..abbd917f05 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 @@ -0,0 +1,172 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.859 | 2.859 | 2.859 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 +1000 ekin = 0.00113448721737003 | erot = 0.00413455947734281 | epot = -14.6477022915193 | etot = -14.6424332448246 +2000 ekin = 0.00449927223902336 | erot = 0.0164446434455805 | epot = -14.6633771605337 | etot = -14.6424332448491 +3000 ekin = 0.00997964450841065 | erot = 0.0366523356056461 | epot = -14.6890652250033 | etot = -14.6424332448892 +4000 ekin = 0.0173888111295073 | erot = 0.0643039804300221 | epot = -14.7241260365031 | etot = -14.6424332449436 +5000 ekin = 0.0264744514136619 | erot = 0.0987844033142066 | epot = -14.7676920997383 | etot = -14.6424332450104 +6000 ekin = 0.0369277948556079 | erot = 0.139336571052565 | epot = -14.8186976109956 | etot = -14.6424332450875 +7000 ekin = 0.04839505571915 | erot = 0.18508629569208 | epot = -14.8759145965832 | etot = -14.642433245172 +8000 ekin = 0.0604909336920643 | erot = 0.23507130752353 | epot = -14.9379954864767 | etot = -14.6424332452611 +9000 ekin = 0.0728137406440561 | erot = 0.288273694501537 | epot = -15.003520680497 | etot = -14.6424332453514 +10000 ekin = 0.0849615563085879 | erot = 0.343654369293472 | epot = -15.0710491710418 | etot = -14.6424332454398 + 10000 0.0062934486 -1.5138305 0.0067255788 -1.4986088 -9.9021593e-05 +Loop time of 0.141929 on 1 procs for 10000 steps with 10 atoms + +Performance: 60875.649 tau/day, 70457.927 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.11467 | 0.11467 | 0.11467 | 0.0 | 80.79 +Bond | 0.0050094 | 0.0050094 | 0.0050094 | 0.0 | 3.53 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0013616 | 0.0013616 | 0.0013616 | 0.0 | 0.96 +Output | 4.0531e-06 | 4.0531e-06 | 4.0531e-06 | 0.0 | 0.00 +Modify | 0.017901 | 0.017901 | 0.017901 | 0.0 | 12.61 +Other | | 0.002982 | | | 2.10 + +Nlocal: 10 ave 10 max 10 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 43 ave 43 max 43 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 43 +Ave neighs/atom = 4.3 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 new file mode 100644 index 0000000000..78712bf913 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 @@ -0,0 +1,172 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.341 | 7.523 | 7.705 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 +1000 ekin = 0.00113448721737009 | erot = 0.0041345594773427 | epot = -14.6477022915193 | etot = -14.6424332448246 +2000 ekin = 0.00449927223902292 | erot = 0.0164446434455803 | epot = -14.6633771605337 | etot = -14.6424332448491 +3000 ekin = 0.00997964450840756 | erot = 0.0366523356056465 | epot = -14.6890652250033 | etot = -14.6424332448892 +4000 ekin = 0.017388811129498 | erot = 0.0643039804300254 | epot = -14.7241260365031 | etot = -14.6424332449436 +5000 ekin = 0.0264744514136422 | erot = 0.098784403314214 | epot = -14.7676920997383 | etot = -14.6424332450104 +6000 ekin = 0.0369277948555727 | erot = 0.139336571052581 | epot = -14.8186976109956 | etot = -14.6424332450875 +7000 ekin = 0.0483950557190949 | erot = 0.185086295692111 | epot = -14.8759145965832 | etot = -14.642433245172 +8000 ekin = 0.0604909336919856 | erot = 0.235071307523583 | epot = -14.9379954864767 | etot = -14.6424332452611 +9000 ekin = 0.0728137406439517 | erot = 0.288273694501617 | epot = -15.003520680497 | etot = -14.6424332453514 +10000 ekin = 0.0849615563084573 | erot = 0.34365436929359 | epot = -15.0710491710418 | etot = -14.6424332454398 + 10000 0.0062934486 -1.5138305 0.0067255788 -1.4986088 -0.00010196899 +Loop time of 0.134536 on 4 procs for 10000 steps with 10 atoms + +Performance: 64220.659 tau/day, 74329.466 timesteps/s +97.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0030077 | 0.052212 | 0.093066 | 17.4 | 38.81 +Bond | 0.00061846 | 0.00234 | 0.0039451 | 2.8 | 1.74 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013431 | 0.014091 | 0.014596 | 0.4 | 10.47 +Output | 5.0783e-05 | 5.1141e-05 | 5.1498e-05 | 0.0 | 0.04 +Modify | 0.0011578 | 0.0059478 | 0.010331 | 4.8 | 4.42 +Other | | 0.05989 | | | 44.52 + +Nlocal: 2.5 ave 5 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 7.5 ave 10 max 5 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 17.5 ave 33 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 70 +Ave neighs/atom = 7 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/input.duplex2 b/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 similarity index 99% rename from examples/USER/cgdna/examples/oxDNA/duplex2/input.duplex2 rename to examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 index dd14c3ae11..a5a09af9f4 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/input.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 @@ -72,6 +72,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 1000000 +run 10000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.1 deleted file mode 100644 index f59e6bd016..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.1 +++ /dev/null @@ -1,1161 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 2.861 | 2.861 | 2.861 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 -1000 ekin = 1.54234964773389 | erot = 1.71563526070267 | epot = -24.5477045187653 | etot = -21.2897196103287 -2000 ekin = 1.85988866919215 | erot = 1.9424302796508 | epot = -24.4843044999595 | etot = -20.6819855511165 -3000 ekin = 2.68354339452998 | erot = 2.14216528317607 | epot = -24.4019350693561 | etot = -19.57622639165 -4000 ekin = 2.04461800191989 | erot = 1.49015219763161 | epot = -24.2959428773347 | etot = -20.7611726777832 -5000 ekin = 1.76794859210155 | erot = 2.54289684465819 | epot = -24.2337587736863 | etot = -19.9229133369266 -6000 ekin = 3.1106424806079 | erot = 2.04409805200893 | epot = -24.1585729744133 | etot = -19.0038324417964 -7000 ekin = 3.21360097519306 | erot = 2.71941303605722 | epot = -24.0566262531609 | etot = -18.1236122419107 -8000 ekin = 2.82489935901743 | erot = 2.66790555575695 | epot = -24.0194805097633 | etot = -18.526675594989 -9000 ekin = 2.69381302856378 | erot = 2.59107820129446 | epot = -23.9216126050554 | etot = -18.6367213751972 -10000 ekin = 2.65765007662471 | erot = 1.95562671446597 | epot = -23.7978334881241 | etot = -19.1845566970334 -11000 ekin = 2.33860420545645 | erot = 2.067780391377 | epot = -23.6589739475584 | etot = -19.2525893507249 -12000 ekin = 2.71377849618258 | erot = 2.08757199120023 | epot = -23.5483571834756 | etot = -18.7470066960928 -13000 ekin = 2.62930153930326 | erot = 2.36926332727578 | epot = -23.4509629615768 | etot = -18.4523980949977 -14000 ekin = 3.08200416316113 | erot = 2.52340746291244 | epot = -23.3378147651053 | etot = -17.7324031390317 -15000 ekin = 2.98008664779269 | erot = 1.871644860882 | epot = -23.1940665570191 | etot = -18.3423350483444 -16000 ekin = 2.18422481774796 | erot = 2.13029325858584 | epot = -23.0709946755646 | etot = -18.7564765992308 -17000 ekin = 1.86029951221073 | erot = 2.30856215831156 | epot = -22.9148241979648 | etot = -18.7459625274425 -18000 ekin = 2.26757205264074 | erot = 1.23282183419698 | epot = -22.7667657090377 | etot = -19.2663718222 -19000 ekin = 2.39717301992408 | erot = 2.43814713185077 | epot = -22.6249045514987 | etot = -17.7895843997239 -20000 ekin = 2.4972090427325 | erot = 2.14695469209109 | epot = -22.4687873897505 | etot = -17.824623654927 -21000 ekin = 2.97591775854817 | erot = 2.40996811711195 | epot = -22.580475447988 | etot = -17.1945895723278 -22000 ekin = 3.04727168578733 | erot = 1.83825256427932 | epot = -22.6695853833015 | etot = -17.7840611332348 -23000 ekin = 2.64835731773193 | erot = 2.22162785501705 | epot = -22.6565689169972 | etot = -17.7865837442483 -24000 ekin = 2.64866576787001 | erot = 2.80157082833922 | epot = -22.6222797420052 | etot = -17.172043145796 -25000 ekin = 2.29527970143855 | erot = 2.22049811939069 | epot = -22.6228421013006 | etot = -18.1070642804714 -26000 ekin = 1.6242512251805 | erot = 2.52390475262917 | epot = -22.6746055892862 | etot = -18.5264496114765 -27000 ekin = 1.74746467550781 | erot = 3.7138606202505 | epot = -22.7150312690973 | etot = -17.253705973339 -28000 ekin = 2.26500128280479 | erot = 2.34791343563183 | epot = -22.7926648585827 | etot = -18.179750140146 -29000 ekin = 2.04774074424512 | erot = 1.86347261547111 | epot = -22.8081204933408 | etot = -18.8969071336246 -30000 ekin = 2.41140146125466 | erot = 1.86296915421469 | epot = -22.7764612164305 | etot = -18.5020906009612 -31000 ekin = 2.76447800297261 | erot = 2.7393253404681 | epot = -22.7808698156252 | etot = -17.2770664721845 -32000 ekin = 2.08103539953574 | erot = 2.81216171106146 | epot = -22.8081908465747 | etot = -17.9149937359775 -33000 ekin = 2.08672340074227 | erot = 3.65510023442519 | epot = -22.7575363468642 | etot = -17.0157127116967 -34000 ekin = 2.34180742039869 | erot = 3.10027175201874 | epot = -22.6657421559553 | etot = -17.2236629835378 -35000 ekin = 2.32430602395272 | erot = 2.01607522370048 | epot = -22.5813705492547 | etot = -18.2409893016015 -36000 ekin = 1.91917507775106 | erot = 1.97289747304336 | epot = -22.481118994336 | etot = -18.5890464435416 -37000 ekin = 1.57560528527468 | erot = 2.63029511887642 | epot = -22.4456699464305 | etot = -18.2397695422794 -38000 ekin = 2.20652731867584 | erot = 2.89671984141264 | epot = -22.3965902387972 | etot = -17.2933430787087 -39000 ekin = 2.54765822667968 | erot = 2.47352619735437 | epot = -22.3525131983352 | etot = -17.3313287743012 -40000 ekin = 2.24172560748699 | erot = 1.87314319107769 | epot = -22.3791956830638 | etot = -18.2643268844991 -41000 ekin = 2.45176361826215 | erot = 2.49992612251747 | epot = -22.4441192111887 | etot = -17.492429470409 -42000 ekin = 2.68254780786499 | erot = 2.04382131696989 | epot = -22.4352265851614 | etot = -17.7088574603266 -43000 ekin = 2.39383336858508 | erot = 1.66587291396325 | epot = -22.4337243898148 | etot = -18.3740181072664 -44000 ekin = 2.30758870966958 | erot = 2.39381816537748 | epot = -22.4636201484766 | etot = -17.7622132734295 -45000 ekin = 1.84308929771583 | erot = 2.25880380151546 | epot = -22.5697712917435 | etot = -18.4678781925122 -46000 ekin = 1.98608215049724 | erot = 3.02136983211363 | epot = -22.5606085774834 | etot = -17.5531565948725 -47000 ekin = 1.31457586857024 | erot = 1.99780932836913 | epot = -22.5522289127255 | etot = -19.2398437157862 -48000 ekin = 2.59855199680394 | erot = 1.90772345027383 | epot = -22.5972680906756 | etot = -18.0909926435978 -49000 ekin = 2.32140483916261 | erot = 2.72932938830521 | epot = -22.6070371995253 | etot = -17.5563029720575 -50000 ekin = 2.48248035385828 | erot = 3.42713570109107 | epot = -22.5294064222472 | etot = -16.6197903672979 -51000 ekin = 2.73677705777971 | erot = 1.43285265191038 | epot = -22.4272695862992 | etot = -18.2576398766091 -52000 ekin = 3.03746109762767 | erot = 1.97878223690383 | epot = -22.4105817052324 | etot = -17.3943383707009 -53000 ekin = 2.4689045601064 | erot = 4.26434186327668 | epot = -22.4059567857723 | etot = -15.6727103623892 -54000 ekin = 2.48025904071626 | erot = 2.36957879662632 | epot = -22.4049729842648 | etot = -17.5551351469222 -55000 ekin = 2.28269445417385 | erot = 1.92149293107792 | epot = -22.4643082993723 | etot = -18.2601209141205 -56000 ekin = 2.36225428889468 | erot = 2.21818002425493 | epot = -22.5516502452859 | etot = -17.9712159321363 -57000 ekin = 2.5222034650231 | erot = 2.87044520913643 | epot = -22.6517599833465 | etot = -17.259111309187 -58000 ekin = 2.50677816066749 | erot = 2.80087142998998 | epot = -22.7046490897181 | etot = -17.3969994990606 -59000 ekin = 2.7442153349817 | erot = 2.17375311266844 | epot = -22.7630968852437 | etot = -17.8451284375935 -60000 ekin = 3.28881699963202 | erot = 1.98491245229834 | epot = -22.7493813857704 | etot = -17.47565193384 -61000 ekin = 2.42749732003947 | erot = 1.80500042748845 | epot = -22.6954080097403 | etot = -18.4629102622124 -62000 ekin = 2.82051548232979 | erot = 1.69220614985812 | epot = -22.5840860651657 | etot = -18.0713644329778 -63000 ekin = 3.66818847100113 | erot = 1.91510536540651 | epot = -22.4235299160084 | etot = -16.8402360796008 -64000 ekin = 3.60192162647095 | erot = 3.02302140162941 | epot = -22.4028966408394 | etot = -15.777953612739 -65000 ekin = 3.37797300912952 | erot = 3.90646944425564 | epot = -22.3508227873685 | etot = -15.0663803339833 -66000 ekin = 2.90796062513305 | erot = 2.46538835419998 | epot = -22.2656130116827 | etot = -16.8922640323497 -67000 ekin = 2.57641483706472 | erot = 2.1063925708314 | epot = -22.1586423836372 | etot = -17.4758349757411 -68000 ekin = 2.5516902727465 | erot = 2.46870040285813 | epot = -22.1454741588102 | etot = -17.1250834832056 -69000 ekin = 2.42897294997603 | erot = 2.86774435615082 | epot = -22.1788582092806 | etot = -16.8821409031537 -70000 ekin = 3.08406596014674 | erot = 2.51171720098584 | epot = -22.2680651617951 | etot = -16.6722820006626 -71000 ekin = 2.55052721315253 | erot = 2.49486492124423 | epot = -22.3940848075589 | etot = -17.3486926731621 -72000 ekin = 1.77666138705941 | erot = 2.52301579845699 | epot = -22.4956655989824 | etot = -18.195988413466 -73000 ekin = 1.86857924146303 | erot = 2.33110810852355 | epot = -22.5401005215029 | etot = -18.3404131715163 -74000 ekin = 3.14875320805144 | erot = 2.12002807961601 | epot = -22.5354282257998 | etot = -17.2666469381323 -75000 ekin = 2.60566180511119 | erot = 2.16421143606062 | epot = -22.5109742574449 | etot = -17.7411010162731 -76000 ekin = 1.94500512300058 | erot = 1.94681992806367 | epot = -22.5134561384461 | etot = -18.6216310873819 -77000 ekin = 2.09005510206219 | erot = 2.13354294429721 | epot = -22.5157248384152 | etot = -18.2921267920558 -78000 ekin = 2.48381695181472 | erot = 2.49598603867482 | epot = -22.449809286019 | etot = -17.4700062955295 -79000 ekin = 3.09582217320064 | erot = 2.46630074007712 | epot = -22.3464652405845 | etot = -16.7843423273068 -80000 ekin = 2.51380629427529 | erot = 1.89207626467031 | epot = -22.2775752521275 | etot = -17.8716926931819 -81000 ekin = 2.32322780911516 | erot = 2.24954513249787 | epot = -22.2655235360186 | etot = -17.6927505944055 -82000 ekin = 1.54779729878415 | erot = 2.01487148845307 | epot = -22.2126473128098 | etot = -18.6499785255726 -83000 ekin = 2.24267653112482 | erot = 3.34721522119025 | epot = -22.2063282117648 | etot = -16.6164364594498 -84000 ekin = 2.86948852339533 | erot = 2.11915315181827 | epot = -22.2055386975617 | etot = -17.2168970223481 -85000 ekin = 3.13802387827786 | erot = 2.93900498543376 | epot = -22.2240733080824 | etot = -16.1470444443708 -86000 ekin = 3.46160079449538 | erot = 2.80798287444336 | epot = -22.2732645073155 | etot = -16.0036808383767 -87000 ekin = 3.63139446909085 | erot = 2.3166794204513 | epot = -22.2567856660101 | etot = -16.308711776468 -88000 ekin = 3.15348314879937 | erot = 2.2785763709033 | epot = -22.2154422326699 | etot = -16.7833827129672 -89000 ekin = 3.30271147105659 | erot = 1.80791256125564 | epot = -22.1564153597823 | etot = -17.04579132747 -90000 ekin = 2.42655906518194 | erot = 2.24507038389518 | epot = -21.9481188512569 | etot = -17.2764894021798 -91000 ekin = 1.89051217909395 | erot = 2.51049066719493 | epot = -21.7877769537306 | etot = -17.3867741074417 -92000 ekin = 2.07833668466679 | erot = 2.218324246302 | epot = -21.6997103074282 | etot = -17.4030493764594 -93000 ekin = 1.94321435585196 | erot = 2.99473985773914 | epot = -21.6748650469777 | etot = -16.7369108333866 -94000 ekin = 2.07878576812463 | erot = 3.37631892101902 | epot = -21.7659932416399 | etot = -16.3108885524963 -95000 ekin = 2.10517721407769 | erot = 2.08345895044788 | epot = -21.8951718799354 | etot = -17.7065357154098 -96000 ekin = 2.68821593238919 | erot = 1.86988637992409 | epot = -21.9622848400866 | etot = -17.4041825277733 -97000 ekin = 1.95061152706206 | erot = 2.81054215683073 | epot = -22.0229813258884 | etot = -17.2618276419957 -98000 ekin = 1.98463063611221 | erot = 2.05732763357977 | epot = -22.0930102039112 | etot = -18.0510519342192 -99000 ekin = 2.51292852217217 | erot = 3.54194472638845 | epot = -22.199088757298 | etot = -16.1442155087374 -100000 ekin = 1.8757570387949 | erot = 2.3690785580876 | epot = -22.348409587438 | etot = -18.1035739905555 -101000 ekin = 1.66160772204006 | erot = 3.59766032223856 | epot = -22.3604908173889 | etot = -17.1012227731103 -102000 ekin = 1.62075182718474 | erot = 3.3442006848817 | epot = -22.3063629504087 | etot = -17.3414104383422 -103000 ekin = 2.00871148652538 | erot = 2.33677124900284 | epot = -22.275557852692 | etot = -17.9300751171637 -104000 ekin = 2.04513709976292 | erot = 2.74664593650967 | epot = -22.2818713634637 | etot = -17.4900883271911 -105000 ekin = 1.87027868596139 | erot = 1.98922389218239 | epot = -22.223503909299 | etot = -18.3640013311552 -106000 ekin = 1.71540784443942 | erot = 1.9177953110688 | epot = -22.2562839843324 | etot = -18.6230808288242 -107000 ekin = 2.61024905591622 | erot = 1.57446439985464 | epot = -22.3171357124015 | etot = -18.1324222566306 -108000 ekin = 2.13751756724178 | erot = 2.18822458113098 | epot = -22.2268794585969 | etot = -17.9011373102241 -109000 ekin = 2.24408198608307 | erot = 2.11438299352724 | epot = -22.076564108576 | etot = -17.7180991289657 -110000 ekin = 1.66706562020821 | erot = 2.50986066169373 | epot = -22.0833343008135 | etot = -17.9064080189116 -111000 ekin = 2.30463895640872 | erot = 2.24982560856989 | epot = -22.0940837732696 | etot = -17.539619208291 -112000 ekin = 2.63019524472749 | erot = 2.43696110420532 | epot = -22.0953344558745 | etot = -17.0281781069417 -113000 ekin = 2.42282638113981 | erot = 3.06190927482913 | epot = -22.1061661458173 | etot = -16.6214304898484 -114000 ekin = 2.34214572325658 | erot = 2.31899235523686 | epot = -22.0941430549288 | etot = -17.4330049764353 -115000 ekin = 1.70336449422736 | erot = 3.10166879044198 | epot = -22.1252095896431 | etot = -17.3201763049738 -116000 ekin = 1.51705870113214 | erot = 2.21425252709695 | epot = -22.1823772627204 | etot = -18.4510660344913 -117000 ekin = 1.70129809180508 | erot = 2.34142425076372 | epot = -22.2067668262467 | etot = -18.1640444836779 -118000 ekin = 2.20482827236051 | erot = 2.3179714809504 | epot = -22.1855414590757 | etot = -17.6627417057647 -119000 ekin = 2.54272629601484 | erot = 2.46528921750297 | epot = -22.2113175246519 | etot = -17.2033020111341 -120000 ekin = 1.76640390552554 | erot = 2.16116304616032 | epot = -22.1536331723646 | etot = -18.2260662206787 -121000 ekin = 2.81281157959688 | erot = 2.31761005518346 | epot = -22.1492969323239 | etot = -17.0188752975435 -122000 ekin = 3.25156823587966 | erot = 3.31679050874322 | epot = -22.2050361016166 | etot = -15.6366773569938 -123000 ekin = 2.87462309654081 | erot = 3.25604816714397 | epot = -22.1785374359393 | etot = -16.0478661722546 -124000 ekin = 2.18213410260632 | erot = 2.77182209342785 | epot = -22.0161464482698 | etot = -17.0621902522356 -125000 ekin = 1.85317252616068 | erot = 1.36623599567638 | epot = -21.8721650279344 | etot = -18.6527565060973 -126000 ekin = 2.47747071965844 | erot = 3.09909384826334 | epot = -21.8840309142636 | etot = -16.3074663463419 -127000 ekin = 2.42177426273027 | erot = 2.35209644429656 | epot = -21.8861939604609 | etot = -17.1123232534341 -128000 ekin = 2.76000040231245 | erot = 1.8231678837239 | epot = -21.8538456680958 | etot = -17.2706773820595 -129000 ekin = 2.78355536315491 | erot = 2.88851981621501 | epot = -21.9251039267855 | etot = -16.2530287474156 -130000 ekin = 3.26834278926799 | erot = 2.56228354573336 | epot = -22.0546105678549 | etot = -16.2239842328536 -131000 ekin = 2.64714688907849 | erot = 2.51107513446137 | epot = -22.0961160192681 | etot = -16.9378939957282 -132000 ekin = 2.61847248883524 | erot = 3.38899164334156 | epot = -22.1218916777659 | etot = -16.1144275455891 -133000 ekin = 2.03408861514006 | erot = 2.87401070790187 | epot = -22.0785989417621 | etot = -17.1704996187202 -134000 ekin = 1.64140897264888 | erot = 1.66986416585675 | epot = -22.0323643102285 | etot = -18.7210911717228 -135000 ekin = 2.46650096367446 | erot = 2.111120611107 | epot = -21.9976572593399 | etot = -17.4200356845585 -136000 ekin = 2.32880805911731 | erot = 3.05940125193231 | epot = -21.8983392007847 | etot = -16.5101298897351 -137000 ekin = 2.7601019905106 | erot = 2.47443779429795 | epot = -21.752125264204 | etot = -16.5175854793954 -138000 ekin = 3.30162084678948 | erot = 1.73084735415554 | epot = -21.7423849642075 | etot = -16.7099167632625 -139000 ekin = 2.76669064053124 | erot = 1.72642745910431 | epot = -21.8898577306654 | etot = -17.3967396310298 -140000 ekin = 2.73595287215366 | erot = 2.46891829250481 | epot = -21.9884857831833 | etot = -16.7836146185249 -141000 ekin = 2.79316289615844 | erot = 2.46753088695597 | epot = -22.0064855648443 | etot = -16.7457917817299 -142000 ekin = 3.51694745558129 | erot = 3.49862438784827 | epot = -21.9623193335451 | etot = -14.9467474901156 -143000 ekin = 2.58689934548697 | erot = 2.04008576044027 | epot = -21.9563338194557 | etot = -17.3293487135285 -144000 ekin = 3.72611917000993 | erot = 3.04855733322793 | epot = -21.9536376487796 | etot = -15.1789611455417 -145000 ekin = 3.61191106831147 | erot = 2.71915407989904 | epot = -21.870542665333 | etot = -15.5394775171225 -146000 ekin = 3.85060594912677 | erot = 2.47210219931339 | epot = -21.8285858153921 | etot = -15.505877666952 -147000 ekin = 3.26481933196161 | erot = 2.06864347299802 | epot = -21.6752809049183 | etot = -16.3418180999587 -148000 ekin = 2.47977997895053 | erot = 1.65169267241014 | epot = -21.4172781734276 | etot = -17.2858055220669 -149000 ekin = 2.70771685463074 | erot = 2.28028425953227 | epot = -21.2324293178539 | etot = -16.2444282036909 -150000 ekin = 2.60726181496431 | erot = 2.88955230103659 | epot = -21.126549406853 | etot = -15.6297352908521 -151000 ekin = 2.06865005733849 | erot = 2.13537039813292 | epot = -21.0304193709383 | etot = -16.8263989154669 -152000 ekin = 2.41210154812787 | erot = 2.60104053370075 | epot = -20.8967777045302 | etot = -15.8836356227016 -153000 ekin = 2.12406231442824 | erot = 2.25444655142795 | epot = -20.9199278716094 | etot = -16.5414190057532 -154000 ekin = 2.34622678455546 | erot = 2.58439374093403 | epot = -21.0040588663533 | etot = -16.0734383408638 -155000 ekin = 2.08240965570452 | erot = 3.02621505767145 | epot = -21.0204738431416 | etot = -15.9118491297656 -156000 ekin = 2.04576145796301 | erot = 3.17151405834467 | epot = -20.8558463949479 | etot = -15.6385708786402 -157000 ekin = 2.36459548410747 | erot = 1.89207417055424 | epot = -20.8025485082277 | etot = -16.545878853566 -158000 ekin = 2.16996178916575 | erot = 2.46547727482113 | epot = -20.8673070433024 | etot = -16.2318679793155 -159000 ekin = 2.86272730849306 | erot = 2.27590841865057 | epot = -20.9710387207245 | etot = -15.8324029935809 -160000 ekin = 2.19288173853782 | erot = 2.36312829884111 | epot = -21.0403123366075 | etot = -16.4843022992286 -161000 ekin = 2.14059248149909 | erot = 2.4287283799048 | epot = -21.1333683100403 | etot = -16.5640474486365 -162000 ekin = 1.76077466564934 | erot = 2.66561836368342 | epot = -21.1782130850259 | etot = -16.7518200556931 -163000 ekin = 2.23068698955417 | erot = 2.02664945757243 | epot = -21.3281780197228 | etot = -17.0708415725963 -164000 ekin = 2.75358320318999 | erot = 1.43717365990088 | epot = -21.4675480212853 | etot = -17.2767911581945 -165000 ekin = 2.65171600986478 | erot = 2.29632253260765 | epot = -21.493178025826 | etot = -16.5451394833536 -166000 ekin = 3.27298673277591 | erot = 2.41252396730596 | epot = -21.4477711984927 | etot = -15.7622604984108 -167000 ekin = 3.02574105268454 | erot = 2.02770436019795 | epot = -21.5236773217566 | etot = -16.4702319088741 -168000 ekin = 3.14659813654158 | erot = 1.8374607941321 | epot = -21.5547269116736 | etot = -16.5706679809999 -169000 ekin = 2.22493755697302 | erot = 2.67175500860652 | epot = -21.4662206077311 | etot = -16.5695280421515 -170000 ekin = 2.41921977325643 | erot = 2.49142716001801 | epot = -21.3123035293873 | etot = -16.4016565961128 -171000 ekin = 1.89798915040775 | erot = 2.39492100285877 | epot = -21.2153991969519 | etot = -16.9224890436853 -172000 ekin = 2.86894215563086 | erot = 3.22914449693158 | epot = -21.1827352206441 | etot = -15.0846485680816 -173000 ekin = 2.74888252418688 | erot = 2.13556434483052 | epot = -21.2166792789418 | etot = -16.3322324099244 -174000 ekin = 2.45887587066864 | erot = 2.23682521338056 | epot = -21.2633056658561 | etot = -16.5676045818069 -175000 ekin = 2.84703517745999 | erot = 2.39381254916381 | epot = -21.2430876358358 | etot = -16.002239909212 -176000 ekin = 2.14025231000119 | erot = 1.89894722702466 | epot = -21.3238321496633 | etot = -17.2846326126375 -177000 ekin = 2.5795061901144 | erot = 2.75365074391219 | epot = -21.3022195274207 | etot = -15.9690625933941 -178000 ekin = 1.83122028490793 | erot = 2.59468068841507 | epot = -21.2483113201278 | etot = -16.8224103468048 -179000 ekin = 2.50706581632049 | erot = 2.3918046623687 | epot = -21.3152464598324 | etot = -16.4163759811432 -180000 ekin = 1.88211034410738 | erot = 2.47063835849692 | epot = -21.4741119346399 | etot = -17.1213632320356 -181000 ekin = 1.74209654097779 | erot = 3.05723824722444 | epot = -21.4808621715442 | etot = -16.681527383342 -182000 ekin = 1.55789914013104 | erot = 2.05767448814763 | epot = -21.423526482018 | etot = -17.8079528537394 -183000 ekin = 2.00937540548925 | erot = 2.80898978674436 | epot = -21.491360735728 | etot = -16.6729955434944 -184000 ekin = 2.69285960778353 | erot = 2.42969439668747 | epot = -21.6024209898208 | etot = -16.4798669853498 -185000 ekin = 3.01326925127938 | erot = 3.19083239326424 | epot = -21.6730258967931 | etot = -15.4689242522495 -186000 ekin = 3.2083067153638 | erot = 2.42899016869201 | epot = -21.7143665695974 | etot = -16.0770696855416 -187000 ekin = 2.672906100919 | erot = 3.41560404715603 | epot = -21.6726605039613 | etot = -15.5841503558862 -188000 ekin = 2.89349337388582 | erot = 3.06258669113775 | epot = -21.6216664732832 | etot = -15.6655864082597 -189000 ekin = 2.65435973176118 | erot = 1.82043381700644 | epot = -21.5604872976485 | etot = -17.0856937488809 -190000 ekin = 2.21855159698309 | erot = 1.84826944038784 | epot = -21.5263477340278 | etot = -17.4595266966569 -191000 ekin = 2.26980616064111 | erot = 2.05944589507645 | epot = -21.4543005141097 | etot = -17.1250484583921 -192000 ekin = 2.27219103053707 | erot = 3.11210788791052 | epot = -21.4899273087562 | etot = -16.1056283903086 -193000 ekin = 1.95008147026928 | erot = 1.89648921534019 | epot = -21.4843079374128 | etot = -17.6377372518033 -194000 ekin = 2.45477671526091 | erot = 2.0272304242676 | epot = -21.3709228769337 | etot = -16.8889157374052 -195000 ekin = 3.09567411006595 | erot = 2.10081767143638 | epot = -21.3012041149762 | etot = -16.1047123334739 -196000 ekin = 2.67423122149492 | erot = 2.50738189755519 | epot = -21.2164124023053 | etot = -16.0347992832552 -197000 ekin = 2.50338730962556 | erot = 2.07349764616723 | epot = -21.041867486922 | etot = -16.4649825311292 -198000 ekin = 2.66945928982616 | erot = 1.79012921820209 | epot = -21.0169215356766 | etot = -16.5573330276483 -199000 ekin = 2.53947964790256 | erot = 2.33176467953655 | epot = -21.0171165577067 | etot = -16.1458722302676 -200000 ekin = 2.90451062704866 | erot = 1.42170066957004 | epot = -21.0113804229743 | etot = -16.6851691263556 -201000 ekin = 2.68927776239674 | erot = 1.56650335894554 | epot = -21.0245916399581 | etot = -16.7688105186158 -202000 ekin = 2.2601329351618 | erot = 2.25401443373177 | epot = -20.9769308007641 | etot = -16.4627834318706 -203000 ekin = 2.12073487355488 | erot = 2.03553028991747 | epot = -20.919035946492 | etot = -16.7627707830197 -204000 ekin = 2.11829086582788 | erot = 1.89731962488617 | epot = -20.9376264283538 | etot = -16.9220159376397 -205000 ekin = 1.30964171332167 | erot = 2.12770406224885 | epot = -20.9991335630718 | etot = -17.5617877875013 -206000 ekin = 1.39940057572522 | erot = 2.24496791209126 | epot = -20.963919219062 | etot = -17.3195507312455 -207000 ekin = 1.8871608804017 | erot = 1.79849326266382 | epot = -21.0552898160204 | etot = -17.3696356729549 -208000 ekin = 1.81558541079753 | erot = 3.24210836817276 | epot = -21.3060144768834 | etot = -16.2483206979131 -209000 ekin = 2.79588064252181 | erot = 2.3467149173832 | epot = -21.4301997554495 | etot = -16.2876041955445 -210000 ekin = 3.17544887511567 | erot = 3.12704516116654 | epot = -21.5100449360932 | etot = -15.2075508998109 -211000 ekin = 2.47442327377226 | erot = 2.0990867711376 | epot = -21.6455723047062 | etot = -17.0720622597963 -212000 ekin = 2.36672302145397 | erot = 1.93445871446419 | epot = -21.7283038297487 | etot = -17.4271220938306 -213000 ekin = 1.91045426241161 | erot = 2.52535628540462 | epot = -21.8158508544504 | etot = -17.3800403066341 -214000 ekin = 1.99794025866061 | erot = 2.49896939492127 | epot = -21.8606548137084 | etot = -17.3637451601266 -215000 ekin = 1.97741561009525 | erot = 3.17667494473254 | epot = -21.8701701582032 | etot = -16.7160796033754 -216000 ekin = 1.88829990821377 | erot = 1.87402623825167 | epot = -21.8343889393413 | etot = -18.0720627928759 -217000 ekin = 2.10000293878932 | erot = 1.95052404495887 | epot = -21.8965404786646 | etot = -17.8460134949164 -218000 ekin = 2.34753598782339 | erot = 1.69695019504401 | epot = -21.8560027679962 | etot = -17.8115165851288 -219000 ekin = 2.497223564463 | erot = 2.20999914485705 | epot = -21.8797649478059 | etot = -17.1725422384859 -220000 ekin = 1.75274593087921 | erot = 3.03992746556406 | epot = -21.8491595252171 | etot = -17.0564861287739 -221000 ekin = 1.78874686645809 | erot = 2.79359542964647 | epot = -21.869798634642 | etot = -17.2874563385375 -222000 ekin = 2.63608430516661 | erot = 2.86817933637385 | epot = -21.8351218383832 | etot = -16.3308581968427 -223000 ekin = 3.02706758581511 | erot = 1.93888641555348 | epot = -21.8582453001765 | etot = -16.8922912988079 -224000 ekin = 2.71704451339112 | erot = 2.42079327531441 | epot = -21.8188420875657 | etot = -16.6810042988601 -225000 ekin = 2.04245190508395 | erot = 3.38216222891907 | epot = -21.8232190868647 | etot = -16.3986049528616 -226000 ekin = 2.37968015829255 | erot = 2.38384696857065 | epot = -21.8913549487127 | etot = -17.1278278218495 -227000 ekin = 2.73883397024414 | erot = 2.62491632372019 | epot = -21.9496900700867 | etot = -16.5859397761223 -228000 ekin = 2.06833362780412 | erot = 2.25049628751225 | epot = -21.9946760345141 | etot = -17.6758461191977 -229000 ekin = 1.78618617304217 | erot = 1.80509591500329 | epot = -22.0671964085329 | etot = -18.4759143204874 -230000 ekin = 2.76967283780387 | erot = 2.22492545317995 | epot = -22.0913590121729 | etot = -17.0967607211891 -231000 ekin = 3.15653922952316 | erot = 2.77099247609325 | epot = -22.0635255129442 | etot = -16.1359938073278 -232000 ekin = 1.86633326635991 | erot = 1.70672288688982 | epot = -22.0959715052869 | etot = -18.5229153520371 -233000 ekin = 1.75856846080021 | erot = 1.55694263125625 | epot = -22.0729289884755 | etot = -18.7574178964191 -234000 ekin = 2.32322575892498 | erot = 2.05793864740336 | epot = -21.9849429433607 | etot = -17.6037785370324 -235000 ekin = 1.95327191686568 | erot = 2.52519338885861 | epot = -21.9357201856672 | etot = -17.4572548799429 -236000 ekin = 2.25952484966859 | erot = 1.90005304846995 | epot = -21.9422471368741 | etot = -17.7826692387355 -237000 ekin = 2.49082301609303 | erot = 2.65327564887437 | epot = -22.0049130762794 | etot = -16.860814411312 -238000 ekin = 2.21076048871751 | erot = 2.74154862479023 | epot = -22.0553236426831 | etot = -17.1030145291754 -239000 ekin = 2.71464884454142 | erot = 2.48739530580561 | epot = -22.0661894571024 | etot = -16.8641453067554 -240000 ekin = 3.08961933821573 | erot = 2.17857064931927 | epot = -21.9596599475175 | etot = -16.6914699599825 -241000 ekin = 3.04172562407922 | erot = 2.64442433974962 | epot = -21.872950064824 | etot = -16.1868001009951 -242000 ekin = 2.21355627539455 | erot = 2.33429157450905 | epot = -21.7850463200938 | etot = -17.2371984701902 -243000 ekin = 1.52065138183895 | erot = 2.81375224845254 | epot = -21.724672004357 | etot = -17.3902683740655 -244000 ekin = 1.90352576583831 | erot = 2.43821138840079 | epot = -21.6320468184555 | etot = -17.2903096642164 -245000 ekin = 1.96342069667742 | erot = 2.61760141174562 | epot = -21.509789944958 | etot = -16.928767836535 -246000 ekin = 2.05478829283868 | erot = 2.42643933263093 | epot = -21.4781109635143 | etot = -16.9968833380447 -247000 ekin = 1.54618395739204 | erot = 2.28537401295509 | epot = -21.4411828355572 | etot = -17.6096248652101 -248000 ekin = 1.83924983769609 | erot = 2.55904554412921 | epot = -21.4587985205918 | etot = -17.0605031387665 -249000 ekin = 1.78703007063825 | erot = 2.03411349475431 | epot = -21.516607560139 | etot = -17.6954639947464 -250000 ekin = 1.69317901626952 | erot = 3.382620023581 | epot = -21.5380480709889 | etot = -16.4622490311384 -251000 ekin = 2.13799462687096 | erot = 3.25868442484789 | epot = -21.5254595658408 | etot = -16.1287805141219 -252000 ekin = 2.04357045453396 | erot = 2.53079336098227 | epot = -21.5456931883614 | etot = -16.9713293728452 -253000 ekin = 1.63287738205387 | erot = 3.20992823373492 | epot = -21.5622010587548 | etot = -16.719395442966 -254000 ekin = 2.31269246359595 | erot = 3.10766702207071 | epot = -21.5505863172024 | etot = -16.1302268315358 -255000 ekin = 2.50767926641465 | erot = 2.76631276495167 | epot = -21.5288449153183 | etot = -16.254852883952 -256000 ekin = 1.97163698305487 | erot = 2.61682132599931 | epot = -21.5273539828767 | etot = -16.9388956738225 -257000 ekin = 2.21091422886157 | erot = 3.2624387389365 | epot = -21.5385504601779 | etot = -16.0651974923798 -258000 ekin = 2.0351730783025 | erot = 1.84693461512361 | epot = -21.6544556001779 | etot = -17.7723479067518 -259000 ekin = 2.85718947138204 | erot = 2.78701165242275 | epot = -21.7587237542941 | etot = -16.1145226304893 -260000 ekin = 2.90387286634678 | erot = 2.18817434737477 | epot = -21.8080383126913 | etot = -16.7159910989698 -261000 ekin = 2.76190440948559 | erot = 2.33968169215532 | epot = -21.8592909726424 | etot = -16.7577048710015 -262000 ekin = 3.50919242681178 | erot = 1.76925994550144 | epot = -21.8779228441577 | etot = -16.5994704718445 -263000 ekin = 3.07696270254058 | erot = 2.41477320555763 | epot = -21.8078566004281 | etot = -16.3161206923299 -264000 ekin = 2.26633389925754 | erot = 2.04161743361595 | epot = -21.8372928128571 | etot = -17.5293414799836 -265000 ekin = 1.95747124461577 | erot = 2.5081300879884 | epot = -21.8490876266416 | etot = -17.3834862940375 -266000 ekin = 2.34517905801099 | erot = 3.31486209922478 | epot = -21.8287737874741 | etot = -16.1687326302383 -267000 ekin = 1.74030193361906 | erot = 2.23366459528059 | epot = -21.699850097441 | etot = -17.7258835685413 -268000 ekin = 2.04858677018814 | erot = 3.28744422098426 | epot = -21.6459408923623 | etot = -16.3099099011899 -269000 ekin = 1.93146929709294 | erot = 2.79280735598121 | epot = -21.549773802712 | etot = -16.8254971496378 -270000 ekin = 2.19788894271016 | erot = 2.64563279687103 | epot = -21.4165389672397 | etot = -16.5730172276585 -271000 ekin = 2.21923220579694 | erot = 3.10768708967444 | epot = -21.2197121954353 | etot = -15.8927928999639 -272000 ekin = 2.54992061853163 | erot = 2.29721880581853 | epot = -21.0816515756819 | etot = -16.2345121513317 -273000 ekin = 1.914618407838 | erot = 2.01420401968473 | epot = -21.0503637141725 | etot = -17.1215412866498 -274000 ekin = 1.89671513770876 | erot = 2.24334386161735 | epot = -21.0967103438301 | etot = -16.9566513445039 -275000 ekin = 1.78930707116537 | erot = 3.09754687865994 | epot = -21.1385700371941 | etot = -16.2517160873688 -276000 ekin = 3.37110328153971 | erot = 2.41957324257529 | epot = -21.0908388312033 | etot = -15.3001623070883 -277000 ekin = 2.38921825148496 | erot = 1.50604988822737 | epot = -21.034620883997 | etot = -17.1393527442847 -278000 ekin = 2.51997301930638 | erot = 2.14026171776896 | epot = -21.0117379332914 | etot = -16.351503196216 -279000 ekin = 1.88315206280857 | erot = 2.37342905263994 | epot = -20.9993757709145 | etot = -16.742794655466 -280000 ekin = 2.33534713190787 | erot = 3.58626468287222 | epot = -20.8573252930133 | etot = -14.9357134782332 -281000 ekin = 1.75252641954511 | erot = 1.7907930540809 | epot = -20.9036528826792 | etot = -17.3603334090531 -282000 ekin = 2.26373977259215 | erot = 3.04032073608633 | epot = -20.8497513702237 | etot = -15.5456908615452 -283000 ekin = 2.1783387139443 | erot = 2.20833158301333 | epot = -20.8002776734785 | etot = -16.4136073765209 -284000 ekin = 1.9148667268656 | erot = 2.21521993135969 | epot = -20.8277491648056 | etot = -16.6976625065804 -285000 ekin = 3.15634443167765 | erot = 1.80033231604849 | epot = -21.0046435881196 | etot = -16.0479668403934 -286000 ekin = 3.84877574957331 | erot = 1.82969969667577 | epot = -21.1628555811447 | etot = -15.4843801348956 -287000 ekin = 3.60615742824732 | erot = 2.91608688151215 | epot = -21.2126952882302 | etot = -14.6904509784708 -288000 ekin = 3.19613259393802 | erot = 1.67736393077137 | epot = -21.1713552834963 | etot = -16.297858758787 -289000 ekin = 2.45584885114799 | erot = 2.77781979747336 | epot = -21.1669115721543 | etot = -15.9332429235329 -290000 ekin = 2.74570408981357 | erot = 2.40443247852242 | epot = -21.1874427766533 | etot = -16.0373062083173 -291000 ekin = 2.10295274468233 | erot = 2.37092484671539 | epot = -21.2419107014544 | etot = -16.7680331100567 -292000 ekin = 2.36118713930732 | erot = 2.05558127949017 | epot = -21.3137361602548 | etot = -16.8969677414573 -293000 ekin = 2.2786196308825 | erot = 2.35874555054765 | epot = -21.4302415460533 | etot = -16.7928763646231 -294000 ekin = 2.93315982813019 | erot = 2.90313008187785 | epot = -21.5210917917479 | etot = -15.6848018817399 -295000 ekin = 2.66360761710434 | erot = 2.28100565751945 | epot = -21.6885021477336 | etot = -16.7438888731098 -296000 ekin = 2.18767827164471 | erot = 2.90589885547353 | epot = -21.7355037190159 | etot = -16.6419265918977 -297000 ekin = 2.15987738107365 | erot = 3.29819575592636 | epot = -21.7177655658756 | etot = -16.2596924288756 -298000 ekin = 2.92956976611296 | erot = 2.36377210613469 | epot = -21.6748271071566 | etot = -16.3814852349089 -299000 ekin = 3.19167138064488 | erot = 2.23480811780853 | epot = -21.8042612344918 | etot = -16.3777817360384 -300000 ekin = 3.3133572846982 | erot = 1.38932157247169 | epot = -21.8799906137235 | etot = -17.1773117565536 -301000 ekin = 2.39061971962408 | erot = 3.30110260608963 | epot = -21.8919200817915 | etot = -16.2001977560778 -302000 ekin = 2.954460706029 | erot = 3.2304815881765 | epot = -21.8557645140423 | etot = -15.6708222198368 -303000 ekin = 2.44700205353933 | erot = 2.60676303242282 | epot = -21.8414046718167 | etot = -16.7876395858546 -304000 ekin = 2.23578509140697 | erot = 2.68770420047938 | epot = -21.7680601199659 | etot = -16.8445708280796 -305000 ekin = 2.35505207220215 | erot = 2.3823003115585 | epot = -21.7344089784493 | etot = -16.9970565946887 -306000 ekin = 1.91790567526689 | erot = 2.90107494003232 | epot = -21.7170004822351 | etot = -16.8980198669359 -307000 ekin = 2.48241777758708 | erot = 2.0836708009946 | epot = -21.6510481218459 | etot = -17.0849595432642 -308000 ekin = 2.77531620706104 | erot = 2.63103510715158 | epot = -21.6349123878086 | etot = -16.2285610735959 -309000 ekin = 2.30440955942791 | erot = 2.1249829765834 | epot = -21.5927938975113 | etot = -17.1634013615 -310000 ekin = 2.50879527040005 | erot = 3.21338829421535 | epot = -21.6043932917725 | etot = -15.8822097271571 -311000 ekin = 2.31939145866558 | erot = 3.03649241514151 | epot = -21.6247503351754 | etot = -16.2688664613683 -312000 ekin = 1.78383134659847 | erot = 3.26262247889992 | epot = -21.4948144284683 | etot = -16.4483606029699 -313000 ekin = 1.6465994694839 | erot = 2.08133087588833 | epot = -21.4920309735611 | etot = -17.7641006281889 -314000 ekin = 2.2552391830868 | erot = 2.55077633299239 | epot = -21.5103692936944 | etot = -16.7043537776152 -315000 ekin = 2.5352734391515 | erot = 2.13089997124613 | epot = -21.5923709217299 | etot = -16.9261975113323 -316000 ekin = 1.99944427781285 | erot = 1.80072924409704 | epot = -21.6039893771529 | etot = -17.803815855243 -317000 ekin = 2.11848744585804 | erot = 2.01459693810075 | epot = -21.5948976630665 | etot = -17.4618132791077 -318000 ekin = 2.29013024301854 | erot = 1.92405818620914 | epot = -21.5643695946921 | etot = -17.3501811654644 -319000 ekin = 1.97314693278018 | erot = 1.67996578959134 | epot = -21.4554808400841 | etot = -17.8023681177126 -320000 ekin = 2.45681719546631 | erot = 3.07835144499744 | epot = -21.3924125538101 | etot = -15.8572439133463 -321000 ekin = 1.85729238455498 | erot = 2.67083565671245 | epot = -21.433818829251 | etot = -16.9056907879836 -322000 ekin = 1.96132292396412 | erot = 3.36792274118279 | epot = -21.3663490830085 | etot = -16.0371034178616 -323000 ekin = 1.94437285233567 | erot = 2.09558156605687 | epot = -21.4151250968679 | etot = -17.3751706784754 -324000 ekin = 2.229181524904 | erot = 2.4674418745061 | epot = -21.532385908563 | etot = -16.8357625091529 -325000 ekin = 2.74582842770392 | erot = 2.36717454305098 | epot = -21.6443544237971 | etot = -16.5313514530422 -326000 ekin = 1.91124551133375 | erot = 1.93084217743114 | epot = -21.7077957426602 | etot = -17.8657080538953 -327000 ekin = 3.05627483509655 | erot = 1.67325209460963 | epot = -21.7948818019128 | etot = -17.0653548722066 -328000 ekin = 2.73933273476856 | erot = 1.92380912803777 | epot = -21.8364014823586 | etot = -17.1732596195523 -329000 ekin = 2.95907896099514 | erot = 3.15654168356681 | epot = -21.898199971646 | etot = -15.7825793270841 -330000 ekin = 2.90795110595274 | erot = 2.01765890034968 | epot = -21.9037795505258 | etot = -16.9781695442234 -331000 ekin = 2.27446048340228 | erot = 2.03754878634056 | epot = -21.8760842049291 | etot = -17.5640749351863 -332000 ekin = 2.43262938612094 | erot = 3.19219171897213 | epot = -21.9305186945662 | etot = -16.3056975894732 -333000 ekin = 2.47357651298171 | erot = 2.70061045814697 | epot = -22.0416691323271 | etot = -16.8674821611985 -334000 ekin = 2.38171387374892 | erot = 3.00424927873366 | epot = -22.0746318522988 | etot = -16.6886686998162 -335000 ekin = 2.10465470910016 | erot = 3.57382014016833 | epot = -22.1175420615632 | etot = -16.4390672122947 -336000 ekin = 2.61374577374183 | erot = 2.13386927281299 | epot = -22.08988251196 | etot = -17.3422674654052 -337000 ekin = 2.72124526751511 | erot = 2.74800480481403 | epot = -22.0768537131621 | etot = -16.607603640833 -338000 ekin = 1.83524121485421 | erot = 2.24338894827196 | epot = -22.1591955034455 | etot = -18.0805653403194 -339000 ekin = 1.54928432997334 | erot = 2.49812246084905 | epot = -22.202239883467 | etot = -18.1548330926446 -340000 ekin = 1.44405714940632 | erot = 4.0451327092417 | epot = -22.1149458734013 | etot = -16.6257560147533 -341000 ekin = 1.67447392575555 | erot = 2.77749751745982 | epot = -22.0760831546714 | etot = -17.624111711456 -342000 ekin = 1.9825676117275 | erot = 2.71655566521084 | epot = -22.1563522566984 | etot = -17.45722897976 -343000 ekin = 2.68213676683887 | erot = 3.16686462846914 | epot = -22.2498477633288 | etot = -16.4008463680208 -344000 ekin = 1.77905771753907 | erot = 2.19153667254074 | epot = -22.2907212723871 | etot = -18.3201268823073 -345000 ekin = 1.5460499615042 | erot = 1.85960255696712 | epot = -22.3447003428977 | etot = -18.9390478244264 -346000 ekin = 1.71554664484034 | erot = 1.79880968736714 | epot = -22.3117022609055 | etot = -18.797345928698 -347000 ekin = 1.38672912049481 | erot = 2.61484473767931 | epot = -22.332503239512 | etot = -18.3309293813379 -348000 ekin = 2.15015924850684 | erot = 2.86300326453563 | epot = -22.3337312775957 | etot = -17.3205687645532 -349000 ekin = 1.83066085453602 | erot = 1.9844132649487 | epot = -22.3967822584585 | etot = -18.5817081389738 -350000 ekin = 1.83318738252649 | erot = 2.56907029661254 | epot = -22.4577827539416 | etot = -18.0555250748026 -351000 ekin = 1.72790505260219 | erot = 2.87456274671834 | epot = -22.5159555107051 | etot = -17.9134877113846 -352000 ekin = 2.80786740016944 | erot = 2.08750448125769 | epot = -22.6549834386892 | etot = -17.7596115572621 -353000 ekin = 3.5492801472091 | erot = 1.42584537334883 | epot = -22.6849212734238 | etot = -17.7097957528659 -354000 ekin = 3.49129244374804 | erot = 2.25156548638802 | epot = -22.604182620693 | etot = -16.861324690557 -355000 ekin = 2.06248783371663 | erot = 2.92733565233054 | epot = -22.5494488364627 | etot = -17.5596253504155 -356000 ekin = 2.13415426306312 | erot = 3.32668319049641 | epot = -22.6122425286523 | etot = -17.1514050750927 -357000 ekin = 2.75897049849731 | erot = 2.51843165594436 | epot = -22.6042888591885 | etot = -17.3268867047468 -358000 ekin = 2.51778220496547 | erot = 2.28374144764325 | epot = -22.5654155469984 | etot = -17.7638918943897 -359000 ekin = 3.2037278512604 | erot = 2.5552016027623 | epot = -22.6749569097326 | etot = -16.91602745571 -360000 ekin = 2.52669169359923 | erot = 1.97563796824025 | epot = -22.7314557612254 | etot = -18.229126099386 -361000 ekin = 2.60424632123629 | erot = 2.51068088850826 | epot = -22.7715023743751 | etot = -17.6565751646306 -362000 ekin = 2.43350156723209 | erot = 3.84566788758402 | epot = -22.7352151098034 | etot = -16.4560456549873 -363000 ekin = 2.91069717970492 | erot = 1.99710098714122 | epot = -22.6302259934474 | etot = -17.7224278266013 -364000 ekin = 2.2553832868325 | erot = 1.87832387363455 | epot = -22.5083625296191 | etot = -18.374655369152 -365000 ekin = 2.04575884197224 | erot = 2.797742068412 | epot = -22.332262738426 | etot = -17.4887618280417 -366000 ekin = 2.26894187965217 | erot = 1.94379382552235 | epot = -22.2788727984906 | etot = -18.0661370933161 -367000 ekin = 2.82509630766737 | erot = 2.50361468767084 | epot = -22.3209381619452 | etot = -16.992227166607 -368000 ekin = 2.81542036602322 | erot = 2.18733627644489 | epot = -22.4297259451244 | etot = -17.4269693026563 -369000 ekin = 2.30426035796382 | erot = 2.85653411706989 | epot = -22.4923286665588 | etot = -17.3315341915251 -370000 ekin = 2.67871033327547 | erot = 2.11464921695177 | epot = -22.578069860797 | etot = -17.7847103105697 -371000 ekin = 2.19281044135007 | erot = 3.60165960664287 | epot = -22.6424730832337 | etot = -16.8480030352407 -372000 ekin = 1.77481259468411 | erot = 3.406547444381 | epot = -22.7147683829008 | etot = -17.5334083438357 -373000 ekin = 2.15551547517191 | erot = 2.7877825236183 | epot = -22.7559497214321 | etot = -17.8126517226419 -374000 ekin = 2.71938368055486 | erot = 3.58127823243842 | epot = -22.9084433694729 | etot = -16.6077814564796 -375000 ekin = 2.42759321485976 | erot = 2.9742127178716 | epot = -22.9740378563778 | etot = -17.5722319236464 -376000 ekin = 3.39126830110572 | erot = 3.24733797625004 | epot = -22.9874015798135 | etot = -16.3487953024578 -377000 ekin = 3.20966733323472 | erot = 2.65934060364476 | epot = -22.9452111216365 | etot = -17.076203184757 -378000 ekin = 1.56095946168131 | erot = 2.66159033944991 | epot = -22.9575870308253 | etot = -18.7350372296941 -379000 ekin = 1.9498568748538 | erot = 2.54085216255828 | epot = -22.9834751642939 | etot = -18.4927661268818 -380000 ekin = 2.65820438237073 | erot = 2.88045867212573 | epot = -22.9984703542083 | etot = -17.4598072997118 -381000 ekin = 2.97084599252829 | erot = 2.18892549461574 | epot = -23.0341895570111 | etot = -17.8744180698671 -382000 ekin = 2.61355176942653 | erot = 2.02938704043227 | epot = -23.00841197151 | etot = -18.3654731616512 -383000 ekin = 2.03830671072154 | erot = 2.50516194855525 | epot = -23.0393965606452 | etot = -18.4959279013684 -384000 ekin = 2.1060608733416 | erot = 2.2184025045895 | epot = -23.0602182522593 | etot = -18.7357548743282 -385000 ekin = 1.89114918519107 | erot = 1.63701051320103 | epot = -23.0834434146806 | etot = -19.5552837162885 -386000 ekin = 1.55124380123707 | erot = 1.36147797265396 | epot = -23.1300518396949 | etot = -20.2173300658039 -387000 ekin = 2.19627825752355 | erot = 1.75751396098972 | epot = -23.1280875332419 | etot = -19.1742953147287 -388000 ekin = 1.96387084539616 | erot = 1.95852585326804 | epot = -23.0327752892415 | etot = -19.1103785905773 -389000 ekin = 2.50801560941705 | erot = 2.32519825784836 | epot = -23.0011464671235 | etot = -18.1679325998581 -390000 ekin = 2.03596866068489 | erot = 1.88295618907177 | epot = -22.8810338311575 | etot = -18.9621089814009 -391000 ekin = 1.8098591016452 | erot = 2.39622167162874 | epot = -22.81955664632 | etot = -18.613475873046 -392000 ekin = 2.17725370142733 | erot = 2.87094426544089 | epot = -22.7839731045438 | etot = -17.7357751376756 -393000 ekin = 2.14224634181997 | erot = 3.17242974303658 | epot = -22.8435025538357 | etot = -17.5288264689792 -394000 ekin = 1.97769550804367 | erot = 2.16375300420729 | epot = -22.8342667825711 | etot = -18.6928182703201 -395000 ekin = 2.03687268736298 | erot = 2.49567469731651 | epot = -22.8892034986303 | etot = -18.3566561139508 -396000 ekin = 2.16189109047463 | erot = 1.95308746486161 | epot = -22.9781386034885 | etot = -18.8631600481523 -397000 ekin = 2.41744222422408 | erot = 1.65310699287476 | epot = -23.0900453292844 | etot = -19.0194961121856 -398000 ekin = 3.58905654436294 | erot = 2.51930256503331 | epot = -23.2070733343384 | etot = -17.0987142249422 -399000 ekin = 2.65051654249497 | erot = 1.78138450529865 | epot = -23.3040478764215 | etot = -18.8721468286279 -400000 ekin = 2.49402752614129 | erot = 2.10290777432183 | epot = -23.3608759462318 | etot = -18.7639406457687 -401000 ekin = 2.04176177605462 | erot = 2.154995213856 | epot = -23.4039603394011 | etot = -19.2072033494905 -402000 ekin = 2.44505875861459 | erot = 2.11318097973378 | epot = -23.3975262709888 | etot = -18.8392865326404 -403000 ekin = 2.54858079745147 | erot = 2.81138206601919 | epot = -23.476064698677 | etot = -18.1161018352063 -404000 ekin = 2.21063952462117 | erot = 2.64710865829565 | epot = -23.574696037266 | etot = -18.7169478543492 -405000 ekin = 2.47328118101332 | erot = 2.40933750599425 | epot = -23.5927917139469 | etot = -18.7101730269393 -406000 ekin = 2.24891173527799 | erot = 2.23777884116047 | epot = -23.6086191890417 | etot = -19.1219286126032 -407000 ekin = 2.0107940045037 | erot = 2.78642832526904 | epot = -23.5246032469978 | etot = -18.727380917225 -408000 ekin = 2.59464051790823 | erot = 2.59123578102097 | epot = -23.4198302602656 | etot = -18.2339539613364 -409000 ekin = 2.37170880608734 | erot = 2.26136902851213 | epot = -23.317258193724 | etot = -18.6841803591245 -410000 ekin = 1.99754661347185 | erot = 1.95523998485755 | epot = -23.2950402043273 | etot = -19.3422536059979 -411000 ekin = 1.8693657058423 | erot = 2.63899492681176 | epot = -23.2490367633041 | etot = -18.74067613065 -412000 ekin = 1.98214047746227 | erot = 2.68315820775202 | epot = -23.1987357483281 | etot = -18.5334370631139 -413000 ekin = 2.39078873487373 | erot = 2.65589562872907 | epot = -23.1435198518627 | etot = -18.0968354882599 -414000 ekin = 2.40821090859775 | erot = 1.75574324408225 | epot = -23.0725048141377 | etot = -18.9085506614577 -415000 ekin = 2.74601981183015 | erot = 2.43675176686816 | epot = -23.1211711904486 | etot = -17.9383996117503 -416000 ekin = 2.08828454200993 | erot = 2.76783506526218 | epot = -23.1383119239965 | etot = -18.2821923167244 -417000 ekin = 2.01455344430628 | erot = 1.95306265456051 | epot = -23.1433633505287 | etot = -19.1757472516619 -418000 ekin = 2.42716528853985 | erot = 2.57642821145486 | epot = -23.127531797131 | etot = -18.1239382971363 -419000 ekin = 3.04095103685797 | erot = 2.58427576972734 | epot = -23.0602279332617 | etot = -17.4350011266764 -420000 ekin = 2.6360746280152 | erot = 2.44478111019393 | epot = -22.982092315172 | etot = -17.9012365769629 -421000 ekin = 2.53019765722915 | erot = 1.78389585255477 | epot = -22.9707435541329 | etot = -18.6566500443489 -422000 ekin = 2.72457425772367 | erot = 1.67768634886349 | epot = -22.9542997027495 | etot = -18.5520390961623 -423000 ekin = 2.11402997037893 | erot = 2.55034580375608 | epot = -22.8263851956497 | etot = -18.1620094215147 -424000 ekin = 1.8895880210325 | erot = 2.31332431343561 | epot = -22.772666888172 | etot = -18.5697545537039 -425000 ekin = 2.3595116370971 | erot = 1.95762380637298 | epot = -22.7752082759346 | etot = -18.4580728324645 -426000 ekin = 2.23706657164627 | erot = 2.60016134755148 | epot = -22.7844114251539 | etot = -17.9471835059562 -427000 ekin = 1.88801598248841 | erot = 2.12415782350886 | epot = -22.9416586386639 | etot = -18.9294848326666 -428000 ekin = 1.92849031333042 | erot = 2.44097902588716 | epot = -23.0611368174399 | etot = -18.6916674782223 -429000 ekin = 1.70536802258415 | erot = 2.14916257389792 | epot = -23.0556586745393 | etot = -19.2011280780572 -430000 ekin = 2.30226095973205 | erot = 2.14689932813604 | epot = -23.0606502516208 | etot = -18.6114899637527 -431000 ekin = 2.45988288454318 | erot = 2.42278380298657 | epot = -23.0729777223881 | etot = -18.1903110348583 -432000 ekin = 2.80869332724974 | erot = 2.19954129490925 | epot = -23.0939746542044 | etot = -18.0857400320454 -433000 ekin = 2.21130556188282 | erot = 1.62882156110628 | epot = -23.1534080352157 | etot = -19.3132809122266 -434000 ekin = 2.60574953870752 | erot = 2.36088790768803 | epot = -23.1901717047879 | etot = -18.2235342583923 -435000 ekin = 2.30377529593091 | erot = 2.53917715731259 | epot = -23.1716983948432 | etot = -18.3287459415997 -436000 ekin = 2.42707603554825 | erot = 2.75234181061924 | epot = -23.2197996577197 | etot = -18.0403818115522 -437000 ekin = 1.65090540276074 | erot = 3.25345231298367 | epot = -23.2216366145388 | etot = -18.3172788987944 -438000 ekin = 1.56145302974407 | erot = 2.60950810563796 | epot = -23.1303770792279 | etot = -18.9594159438458 -439000 ekin = 2.30955439722234 | erot = 1.94011743371103 | epot = -23.1353170794497 | etot = -18.8856452485163 -440000 ekin = 2.53037674867674 | erot = 3.0652704286103 | epot = -23.196858945292 | etot = -17.601211768005 -441000 ekin = 2.80107707952534 | erot = 2.53664155736544 | epot = -23.1712373428919 | etot = -17.8335187060011 -442000 ekin = 2.92536323090713 | erot = 2.88384500930016 | epot = -23.1123001627208 | etot = -17.3030919225135 -443000 ekin = 1.96543935969482 | erot = 1.753449631552 | epot = -23.0380529084378 | etot = -19.3191639171909 -444000 ekin = 2.00309477401363 | erot = 2.23897509587738 | epot = -22.9472103119533 | etot = -18.7051404420623 -445000 ekin = 2.20302071819722 | erot = 2.06928381371827 | epot = -22.7775434364172 | etot = -18.5052389045017 -446000 ekin = 2.43487889302299 | erot = 2.37751556007799 | epot = -22.6838190597697 | etot = -17.8714246066687 -447000 ekin = 2.2620819636031 | erot = 2.41400188145198 | epot = -22.7082516636546 | etot = -18.0321678185995 -448000 ekin = 2.16184472791984 | erot = 1.93539407204278 | epot = -22.8144859493263 | etot = -18.7172471493637 -449000 ekin = 2.21107967973114 | erot = 2.34659682978741 | epot = -22.9059503054159 | etot = -18.3482737958974 -450000 ekin = 2.7467774000444 | erot = 1.97222921372039 | epot = -22.8607559267161 | etot = -18.1417493129513 -451000 ekin = 2.2050889378155 | erot = 2.13042736119386 | epot = -22.8862608894796 | etot = -18.5507445904703 -452000 ekin = 2.52760608607095 | erot = 2.340068156366 | epot = -22.9138111972133 | etot = -18.0461369547764 -453000 ekin = 2.23448825172916 | erot = 1.77834418215733 | epot = -22.8879238301791 | etot = -18.8750913962927 -454000 ekin = 2.4343851915949 | erot = 2.59700848533281 | epot = -22.8184361849036 | etot = -17.7870425079759 -455000 ekin = 2.04195793930991 | erot = 2.7963904374768 | epot = -22.6032980500354 | etot = -17.7649496732487 -456000 ekin = 2.00799933710202 | erot = 2.53653815407519 | epot = -22.4355596266522 | etot = -17.891022135475 -457000 ekin = 2.60426208759883 | erot = 2.46609612876191 | epot = -22.3409120082078 | etot = -17.270553791847 -458000 ekin = 2.01368468059038 | erot = 1.99613816245311 | epot = -22.2549400327206 | etot = -18.2451171896771 -459000 ekin = 1.73688781588865 | erot = 2.48572034306893 | epot = -22.2282088298767 | etot = -18.0056006709191 -460000 ekin = 1.91682575775988 | erot = 2.08308677023945 | epot = -22.2211874714416 | etot = -18.2212749434423 -461000 ekin = 1.54933673126938 | erot = 1.29454502815254 | epot = -22.1945151049368 | etot = -19.3506333455149 -462000 ekin = 2.44160489340629 | erot = 1.34721473707675 | epot = -22.2846713076971 | etot = -18.495851677214 -463000 ekin = 2.63165365707667 | erot = 2.0814376012804 | epot = -22.4004513395625 | etot = -17.6873600812054 -464000 ekin = 2.67929276186416 | erot = 3.7256379306109 | epot = -22.5200042545289 | etot = -16.1150735620538 -465000 ekin = 1.94880111369479 | erot = 2.23148844819349 | epot = -22.685554296329 | etot = -18.5052647344407 -466000 ekin = 2.13853049638891 | erot = 2.95056624305957 | epot = -22.7822881705531 | etot = -17.6931914311047 -467000 ekin = 2.46452767169615 | erot = 2.1077848077008 | epot = -22.9485753844866 | etot = -18.3762629050897 -468000 ekin = 1.98589158006998 | erot = 1.62816092182055 | epot = -23.0180008829524 | etot = -19.4039483810619 -469000 ekin = 2.498810820967 | erot = 2.63615462725918 | epot = -23.0547833968841 | etot = -17.9198179486579 -470000 ekin = 2.91491361681313 | erot = 3.19115611298995 | epot = -23.0448741101699 | etot = -16.9388043803669 -471000 ekin = 2.37554627514204 | erot = 1.71739792236247 | epot = -22.9932329645513 | etot = -18.9002887670468 -472000 ekin = 2.18486807923518 | erot = 2.00687069908098 | epot = -22.9563182572702 | etot = -18.764579478954 -473000 ekin = 2.36185345820899 | erot = 2.86259041401025 | epot = -22.9161024426125 | etot = -17.6916585703933 -474000 ekin = 2.17077693495272 | erot = 2.59376596740918 | epot = -22.7894018760353 | etot = -18.0248589736733 -475000 ekin = 2.37844153079293 | erot = 2.01112751381906 | epot = -22.6793191497969 | etot = -18.2897501051849 -476000 ekin = 2.08763676439641 | erot = 2.59647624455221 | epot = -22.6700039875052 | etot = -17.9858909785566 -477000 ekin = 2.52249432714936 | erot = 3.55251934739865 | epot = -22.6424099194917 | etot = -16.5673962449437 -478000 ekin = 2.40424947791157 | erot = 2.73239117258611 | epot = -22.544776325228 | etot = -17.4081356747303 -479000 ekin = 1.27637524434413 | erot = 2.99749792697945 | epot = -22.4994949498981 | etot = -18.2256217785745 -480000 ekin = 1.81374950293817 | erot = 2.14389317135941 | epot = -22.4678405170785 | etot = -18.5101978427809 -481000 ekin = 2.394967741862 | erot = 3.1829944182452 | epot = -22.4930736763178 | etot = -16.9151115162106 -482000 ekin = 3.21051763720184 | erot = 2.40962326270834 | epot = -22.4479376181304 | etot = -16.8277967182202 -483000 ekin = 3.06081116762377 | erot = 2.49856996934407 | epot = -22.4288948733282 | etot = -16.8695137363604 -484000 ekin = 2.7452293328759 | erot = 2.530126299931 | epot = -22.4837563329191 | etot = -17.2084007001122 -485000 ekin = 3.33103095180521 | erot = 2.42091818181916 | epot = -22.4922555047182 | etot = -16.7403063710938 -486000 ekin = 1.99323479363108 | erot = 1.76127718142275 | epot = -22.5432098594132 | etot = -18.7886978843593 -487000 ekin = 2.64825718911653 | erot = 2.50204426232019 | epot = -22.6407366935242 | etot = -17.4904352420874 -488000 ekin = 1.7638589171947 | erot = 2.642665551735 | epot = -22.6990728058786 | etot = -18.2925483369489 -489000 ekin = 2.10357630534276 | erot = 2.95613916443127 | epot = -22.7877124402073 | etot = -17.7279969704332 -490000 ekin = 2.33515649128314 | erot = 2.32995416999057 | epot = -22.7920703811403 | etot = -18.1269597198666 -491000 ekin = 2.48752587426647 | erot = 2.58310949760555 | epot = -22.7834811495388 | etot = -17.7128457776668 -492000 ekin = 3.29820665204488 | erot = 2.18682924183923 | epot = -22.7674519489923 | etot = -17.2824160551082 -493000 ekin = 3.40238156707505 | erot = 2.35717041222451 | epot = -22.7149408840448 | etot = -16.9553889047453 -494000 ekin = 3.59348050162499 | erot = 2.23182460532058 | epot = -22.7081682295491 | etot = -16.8828631226035 -495000 ekin = 2.52030309238562 | erot = 2.16229430067424 | epot = -22.6973031832711 | etot = -18.0147057902113 -496000 ekin = 1.96100991422337 | erot = 3.58581695215168 | epot = -22.7342002900883 | etot = -17.1873734237132 -497000 ekin = 2.2228647925968 | erot = 2.49495319949133 | epot = -22.752706201593 | etot = -18.0348882095049 -498000 ekin = 1.71033952564695 | erot = 2.41331591511584 | epot = -22.7131621100868 | etot = -18.589506669324 -499000 ekin = 2.41919864300729 | erot = 2.82349519531823 | epot = -22.7304918052927 | etot = -17.4877979669671 -500000 ekin = 2.76271068346558 | erot = 2.22796445937144 | epot = -22.810945568044 | etot = -17.820270425207 -501000 ekin = 2.97642553987186 | erot = 1.97769778889399 | epot = -22.8306304048616 | etot = -17.8765070760957 -502000 ekin = 2.96175345860855 | erot = 1.80859086419487 | epot = -22.8525538190094 | etot = -18.082209496206 -503000 ekin = 2.51126831088417 | erot = 2.88572311841925 | epot = -22.8673362278446 | etot = -17.4703447985412 -504000 ekin = 2.84611165351303 | erot = 2.67626783872457 | epot = -22.7848919576011 | etot = -17.2625124653635 -505000 ekin = 2.96124584448914 | erot = 2.59100575301934 | epot = -22.8251284225259 | etot = -17.2728768250174 -506000 ekin = 2.19858217910528 | erot = 1.97142936872075 | epot = -22.8530995461461 | etot = -18.6830879983201 -507000 ekin = 2.27398115142402 | erot = 2.68837996151516 | epot = -22.8141163798141 | etot = -17.8517552668749 -508000 ekin = 2.64439339973837 | erot = 2.0475646786945 | epot = -22.8146247157346 | etot = -18.1226666373017 -509000 ekin = 2.96023637315629 | erot = 2.90549934754532 | epot = -22.8719625385966 | etot = -17.006226817895 -510000 ekin = 2.26067558634545 | erot = 2.8086491851952 | epot = -22.9774448292236 | etot = -17.9081200576829 -511000 ekin = 2.88512738978599 | erot = 2.15263877534436 | epot = -23.086672848248 | etot = -18.0489066831176 -512000 ekin = 2.17783748155516 | erot = 2.31389139764187 | epot = -23.1520181882638 | etot = -18.6602893090668 -513000 ekin = 1.69717952556151 | erot = 2.88265468656802 | epot = -23.1640284548406 | etot = -18.5841942427111 -514000 ekin = 1.72432024724117 | erot = 2.32742209152174 | epot = -23.1602225830814 | etot = -19.1084802443185 -515000 ekin = 2.00525337522086 | erot = 1.80102864435033 | epot = -23.1548763180746 | etot = -19.3485942985034 -516000 ekin = 3.04706172157038 | erot = 1.54171785431327 | epot = -23.1202751246552 | etot = -18.5314955487716 -517000 ekin = 2.47323892251936 | erot = 2.10799615007355 | epot = -23.0942246440307 | etot = -18.5129895714378 -518000 ekin = 2.03556879740597 | erot = 2.51531294708502 | epot = -23.01998934344 | etot = -18.469107598949 -519000 ekin = 1.59255614728459 | erot = 1.63520468579905 | epot = -22.9787913166931 | etot = -19.7510304836094 -520000 ekin = 2.17210761761845 | erot = 1.89753667353918 | epot = -22.9877149955356 | etot = -18.918070704378 -521000 ekin = 1.98466680078867 | erot = 2.09219045542651 | epot = -23.0348541858322 | etot = -18.9579969296171 -522000 ekin = 2.72098469914433 | erot = 2.19565658619461 | epot = -23.1001210576502 | etot = -18.1834797723112 -523000 ekin = 2.26033454380754 | erot = 1.67112114369623 | epot = -23.1475509854345 | etot = -19.2160952979307 -524000 ekin = 2.34603831546138 | erot = 2.10546610119491 | epot = -23.1746761633772 | etot = -18.723171746721 -525000 ekin = 2.13671314300235 | erot = 2.07172081705865 | epot = -23.241177743004 | etot = -19.032743782943 -526000 ekin = 2.50849953901566 | erot = 2.27662230434506 | epot = -23.3179050583979 | etot = -18.5327832150372 -527000 ekin = 3.04322527932213 | erot = 1.81280570832388 | epot = -23.3977373118239 | etot = -18.5417063241779 -528000 ekin = 2.572303182379 | erot = 2.54386055260816 | epot = -23.4208428708383 | etot = -18.3046791358511 -529000 ekin = 2.39361269633634 | erot = 1.91637577362226 | epot = -23.3966015599491 | etot = -19.0866130899905 -530000 ekin = 3.3562937907424 | erot = 3.4168381587646 | epot = -23.2977853851851 | etot = -16.5246534356781 -531000 ekin = 2.52741741752381 | erot = 2.34075342407641 | epot = -23.1721175623278 | etot = -18.3039467207276 -532000 ekin = 2.78397051305127 | erot = 1.78575123294094 | epot = -23.2171711834401 | etot = -18.6474494374478 -533000 ekin = 2.27408274334043 | erot = 2.01427501035042 | epot = -23.2885684059727 | etot = -19.0002106522818 -534000 ekin = 2.54998010491125 | erot = 2.01645453645072 | epot = -23.340767920006 | etot = -18.7743332786441 -535000 ekin = 2.49595662250557 | erot = 2.09586427439366 | epot = -23.3878755759449 | etot = -18.7960546790457 -536000 ekin = 2.47717157546008 | erot = 1.92116873587363 | epot = -23.3847675210096 | etot = -18.9864272096758 -537000 ekin = 1.75235621440218 | erot = 2.11852052216091 | epot = -23.4590860280326 | etot = -19.5882092914695 -538000 ekin = 2.19317209186627 | erot = 2.75191518419657 | epot = -23.5517834707225 | etot = -18.6066961946597 -539000 ekin = 2.16135327665112 | erot = 2.25935011393787 | epot = -23.5718250119029 | etot = -19.1511216213139 -540000 ekin = 2.35701554620646 | erot = 1.6449529057333 | epot = -23.5490867129451 | etot = -19.5471182610053 -541000 ekin = 2.61451212811978 | erot = 2.52550284426681 | epot = -23.5334576350385 | etot = -18.3934426626519 -542000 ekin = 2.78909215024063 | erot = 2.09346850400965 | epot = -23.5754619290989 | etot = -18.6929012748486 -543000 ekin = 2.77024528778678 | erot = 1.84116991183092 | epot = -23.4849560716084 | etot = -18.8735408719907 -544000 ekin = 2.15807529188369 | erot = 1.50139575300257 | epot = -23.4530822422947 | etot = -19.7936111974084 -545000 ekin = 1.72860204886328 | erot = 2.56468335549414 | epot = -23.4524953434144 | etot = -19.159209939057 -546000 ekin = 2.38494138419347 | erot = 1.87772638427254 | epot = -23.4950389557032 | etot = -19.2323711872372 -547000 ekin = 2.44871634556834 | erot = 2.44464466893214 | epot = -23.544915775382 | etot = -18.6515547608815 -548000 ekin = 2.36962922994878 | erot = 2.40235228488721 | epot = -23.5548428056052 | etot = -18.7828612907692 -549000 ekin = 2.57958168249613 | erot = 2.04930779813673 | epot = -23.5565149978684 | etot = -18.9276255172355 -550000 ekin = 1.9793136647427 | erot = 1.85207468704396 | epot = -23.5614067919063 | etot = -19.7300184401196 -551000 ekin = 2.41217743270811 | erot = 2.03489368862993 | epot = -23.5115216908382 | etot = -19.0644505695002 -552000 ekin = 2.6621149390197 | erot = 1.41279265378133 | epot = -23.3450678435402 | etot = -19.2701602507392 -553000 ekin = 1.76359346131444 | erot = 2.63019210822712 | epot = -23.1435570943958 | etot = -18.7497715248543 -554000 ekin = 2.29840754300073 | erot = 2.34424452982824 | epot = -23.1114395278817 | etot = -18.4687874550528 -555000 ekin = 3.29672420152566 | erot = 1.64146930698359 | epot = -23.0891292168918 | etot = -18.1509357083826 -556000 ekin = 2.92076699655596 | erot = 2.59602967895818 | epot = -23.0268314200473 | etot = -17.5100347445331 -557000 ekin = 2.90322014804994 | erot = 3.16052668894917 | epot = -23.0146480567182 | etot = -16.9509012197191 -558000 ekin = 2.78018761002223 | erot = 2.59826947006757 | epot = -22.7877399275349 | etot = -17.4092828474451 -559000 ekin = 2.48661596771863 | erot = 3.22596665511861 | epot = -22.8226574327834 | etot = -17.1100748099462 -560000 ekin = 2.34942852601698 | erot = 2.32773162877397 | epot = -22.8255608134696 | etot = -18.1484006586787 -561000 ekin = 2.0520192544917 | erot = 2.90306975046937 | epot = -22.848851605114 | etot = -17.8937626001529 -562000 ekin = 2.18821919117372 | erot = 3.66499439159819 | epot = -22.7618817506902 | etot = -16.9086681679183 -563000 ekin = 3.11505518852414 | erot = 2.28057725990562 | epot = -22.7914306402871 | etot = -17.3957981918573 -564000 ekin = 2.45343120006931 | erot = 2.36321638506708 | epot = -22.75807077839 | etot = -17.9414231932536 -565000 ekin = 2.7783583550222 | erot = 2.07073547186411 | epot = -22.7486053888412 | etot = -17.8995115619549 -566000 ekin = 2.43655641927934 | erot = 2.19832280178868 | epot = -22.7227654505167 | etot = -18.0878862294486 -567000 ekin = 2.71233133108495 | erot = 2.01281091173406 | epot = -22.8839744455115 | etot = -18.1588322026925 -568000 ekin = 3.12450796157709 | erot = 1.93520150351058 | epot = -22.9625972279254 | etot = -17.9028877628378 -569000 ekin = 3.72714267701978 | erot = 2.06562452789051 | epot = -22.9814174117752 | etot = -17.188650206865 -570000 ekin = 2.68808623045676 | erot = 2.36042122391806 | epot = -22.9989590266921 | etot = -17.9504515723173 -571000 ekin = 1.97223467321357 | erot = 2.85558181274649 | epot = -22.9369001315648 | etot = -18.1090836456048 -572000 ekin = 2.41820497321229 | erot = 2.40910077907643 | epot = -22.934930836907 | etot = -18.1076250846183 -573000 ekin = 1.76702714285012 | erot = 2.31739567602695 | epot = -22.9768902017483 | etot = -18.8924673828712 -574000 ekin = 2.0874025921411 | erot = 2.59288012722137 | epot = -23.0518321557917 | etot = -18.3715494364293 -575000 ekin = 2.34020490338786 | erot = 2.78500973557003 | epot = -23.106579446946 | etot = -17.9813648079881 -576000 ekin = 2.15506609467458 | erot = 3.30452875380292 | epot = -23.1521162771299 | etot = -17.6925214286524 -577000 ekin = 2.45698150895878 | erot = 2.31876672704205 | epot = -23.1781917242716 | etot = -18.4024434882707 -578000 ekin = 2.59353106592521 | erot = 2.33790294336518 | epot = -23.2101395643707 | etot = -18.2787055550803 -579000 ekin = 2.58102015460711 | erot = 1.71748063175119 | epot = -23.1865014452815 | etot = -18.8880006589232 -580000 ekin = 2.30361750578347 | erot = 2.87410564379617 | epot = -23.2045008793077 | etot = -18.0267777297281 -581000 ekin = 2.45915247103344 | erot = 2.59640238490727 | epot = -23.1882783600354 | etot = -18.1327235040947 -582000 ekin = 2.33801590725494 | erot = 3.19256035650614 | epot = -23.2501410058056 | etot = -17.7195647420445 -583000 ekin = 1.95982078382855 | erot = 2.8194405158621 | epot = -23.4085593869414 | etot = -18.6292980872508 -584000 ekin = 2.00358327245437 | erot = 1.71267270263011 | epot = -23.4960310960901 | etot = -19.7797751210056 -585000 ekin = 2.28859150562676 | erot = 2.06309046911261 | epot = -23.5306230166998 | etot = -19.1789410419605 -586000 ekin = 2.21858454582016 | erot = 1.97776854350185 | epot = -23.4873397268817 | etot = -19.2909866375596 -587000 ekin = 3.70065233550663 | erot = 1.82187748311298 | epot = -23.4652388428899 | etot = -17.9427090242703 -588000 ekin = 3.49447328534893 | erot = 2.31981981591506 | epot = -23.3985567739262 | etot = -17.5842636726622 -589000 ekin = 2.66144502802388 | erot = 3.02756546370717 | epot = -23.2783756079917 | etot = -17.5893651162607 -590000 ekin = 1.52141257336428 | erot = 2.09874614600561 | epot = -23.1290158071881 | etot = -19.5088570878182 -591000 ekin = 1.82897193042273 | erot = 1.75592223095376 | epot = -23.0622736076074 | etot = -19.4773794462309 -592000 ekin = 2.49491276892191 | erot = 2.54829881978519 | epot = -23.054885494985 | etot = -18.0116739062779 -593000 ekin = 2.36845716276159 | erot = 1.78503341410575 | epot = -23.0052643101941 | etot = -18.8517737333267 -594000 ekin = 2.07907010887474 | erot = 2.14563658430187 | epot = -22.9611396232755 | etot = -18.7364329300989 -595000 ekin = 2.62736231723873 | erot = 2.0397582574453 | epot = -22.9495489717352 | etot = -18.2824283970512 -596000 ekin = 2.58985967531624 | erot = 2.12449830164849 | epot = -22.9908505579803 | etot = -18.2764925810155 -597000 ekin = 3.02540042664855 | erot = 3.14256707367048 | epot = -22.9740991012936 | etot = -16.8061316009746 -598000 ekin = 3.44397104083287 | erot = 2.86057908398566 | epot = -23.0035411551227 | etot = -16.6989910303042 -599000 ekin = 2.13932500926497 | erot = 3.49187029024977 | epot = -22.9657391359988 | etot = -17.334543836484 -600000 ekin = 2.19758597945325 | erot = 2.49610822362375 | epot = -22.9452235009931 | etot = -18.2515292979161 -601000 ekin = 2.80918982916751 | erot = 2.81768433603376 | epot = -22.8970508934525 | etot = -17.2701767282513 -602000 ekin = 2.30031523379462 | erot = 2.40907304500535 | epot = -22.8523950981498 | etot = -18.1430068193498 -603000 ekin = 1.9133550139642 | erot = 1.99518053980754 | epot = -22.7884152302357 | etot = -18.879879676464 -604000 ekin = 2.59767150954919 | erot = 3.14351403383689 | epot = -22.7430641975849 | etot = -17.0018786541988 -605000 ekin = 2.63203298717972 | erot = 2.07906613894388 | epot = -22.7307949909782 | etot = -18.0196958648546 -606000 ekin = 2.94678399289781 | erot = 2.03982213630798 | epot = -22.6555302524726 | etot = -17.6689241232668 -607000 ekin = 2.85272606479019 | erot = 2.3669346725768 | epot = -22.6318548820143 | etot = -17.4121941446474 -608000 ekin = 3.6642968125636 | erot = 2.46706737589233 | epot = -22.5724662590778 | etot = -16.4411020706218 -609000 ekin = 2.69343886620625 | erot = 2.25873504143678 | epot = -22.6007364465804 | etot = -17.6485625389374 -610000 ekin = 2.99904616523658 | erot = 2.13621966615343 | epot = -22.5973658485054 | etot = -17.4621000171154 -611000 ekin = 3.86832985948943 | erot = 2.1209664457764 | epot = -22.5702925425382 | etot = -16.5809962372724 -612000 ekin = 2.88515301824618 | erot = 2.45910554524355 | epot = -22.4848584522585 | etot = -17.1405998887688 -613000 ekin = 2.9367425327116 | erot = 2.14436169371534 | epot = -22.465526703267 | etot = -17.38442247684 -614000 ekin = 2.79116462876301 | erot = 2.024409539648 | epot = -22.5207406301148 | etot = -17.7051664617038 -615000 ekin = 2.29338048298908 | erot = 2.38828872470981 | epot = -22.6082782403584 | etot = -17.9266090326595 -616000 ekin = 1.78195169789474 | erot = 2.45334803626967 | epot = -22.6887534547644 | etot = -18.4534537206 -617000 ekin = 2.57505808534158 | erot = 2.55345758187856 | epot = -22.7014638394959 | etot = -17.5729481722758 -618000 ekin = 2.29561379442387 | erot = 2.68043259355499 | epot = -22.629958627306 | etot = -17.6539122393272 -619000 ekin = 1.94323313590202 | erot = 2.00964911157701 | epot = -22.5681911047399 | etot = -18.6153088572609 -620000 ekin = 2.92263589097657 | erot = 2.15657756066214 | epot = -22.6264664894927 | etot = -17.547253037854 -621000 ekin = 2.90437881656455 | erot = 1.70649555848315 | epot = -22.6654194475729 | etot = -18.0545450725253 -622000 ekin = 2.03426149564846 | erot = 2.51826459248401 | epot = -22.6086250578043 | etot = -18.0560989696718 -623000 ekin = 1.98348786592097 | erot = 3.08484972830225 | epot = -22.6234743341759 | etot = -17.5551367399527 -624000 ekin = 2.08463083558978 | erot = 2.64004606903046 | epot = -22.6266529328942 | etot = -17.901976028274 -625000 ekin = 2.52963490334089 | erot = 2.37033264022622 | epot = -22.6750436783155 | etot = -17.7750761347484 -626000 ekin = 2.73147680333727 | erot = 2.07051651598002 | epot = -22.7272383647964 | etot = -17.9252450454791 -627000 ekin = 2.23447399123207 | erot = 2.35288557052271 | epot = -22.7136740507756 | etot = -18.1263144890208 -628000 ekin = 2.28933754695898 | erot = 2.29676268895052 | epot = -22.6176528573237 | etot = -18.0315526214142 -629000 ekin = 2.5355466362136 | erot = 1.9208254303353 | epot = -22.5693331526924 | etot = -18.1129610861435 -630000 ekin = 3.11700824717166 | erot = 2.51611049765933 | epot = -22.5144695759915 | etot = -16.8813508311605 -631000 ekin = 2.38844807455605 | erot = 3.31601650504462 | epot = -22.5190998334878 | etot = -16.8146352538871 -632000 ekin = 2.59939587493746 | erot = 2.51496212358954 | epot = -22.4711049664696 | etot = -17.3567469679426 -633000 ekin = 2.45338619933597 | erot = 1.89874016257143 | epot = -22.4394257686937 | etot = -18.0872994067863 -634000 ekin = 2.23819111967046 | erot = 1.98305652730465 | epot = -22.3433365860708 | etot = -18.1220889390957 -635000 ekin = 2.22438000857701 | erot = 1.95893208021228 | epot = -22.2877959440852 | etot = -18.1044838552959 -636000 ekin = 2.26938644192167 | erot = 2.77816773779857 | epot = -22.304696935737 | etot = -17.2571427560168 -637000 ekin = 1.97799147515644 | erot = 2.59610837639354 | epot = -22.3353238115757 | etot = -17.7612239600257 -638000 ekin = 2.54901279963355 | erot = 3.14232301833368 | epot = -22.3113570318406 | etot = -16.6200212138734 -639000 ekin = 2.38194254982011 | erot = 2.49468098011846 | epot = -22.2696251856513 | etot = -17.3930016557128 -640000 ekin = 2.07438054408915 | erot = 2.20336226777045 | epot = -22.1673693230787 | etot = -17.8896265112191 -641000 ekin = 2.49150296422893 | erot = 3.53882164550032 | epot = -22.0473233874349 | etot = -16.0169987777057 -642000 ekin = 3.37964058409635 | erot = 2.18458831029804 | epot = -21.9324522713975 | etot = -16.3682233770031 -643000 ekin = 2.80862431007863 | erot = 2.40815089193717 | epot = -21.8726014240441 | etot = -16.6558262220283 -644000 ekin = 2.952235016065 | erot = 1.92776262379329 | epot = -21.8260574231829 | etot = -16.9460597833247 -645000 ekin = 4.10488984334312 | erot = 1.89062109330211 | epot = -21.7981661301139 | etot = -15.8026551934687 -646000 ekin = 2.50234872105284 | erot = 2.00205075040523 | epot = -21.7221642434957 | etot = -17.2177647720376 -647000 ekin = 2.52267281239589 | erot = 2.19481558810103 | epot = -21.7438885460027 | etot = -17.0264001455058 -648000 ekin = 2.99344241657583 | erot = 2.11139263207284 | epot = -21.7373240000025 | etot = -16.6324889513538 -649000 ekin = 2.55027365085817 | erot = 3.20350991793737 | epot = -21.7192481424448 | etot = -15.9654645736493 -650000 ekin = 3.75163896052814 | erot = 2.44189212282279 | epot = -21.6756681314986 | etot = -15.4821370481477 -651000 ekin = 3.29740056237165 | erot = 2.36780448747273 | epot = -21.5372361691657 | etot = -15.8720311193214 -652000 ekin = 2.54645886055823 | erot = 2.99097829596978 | epot = -21.4549655298412 | etot = -15.9175283733131 -653000 ekin = 2.88682688109756 | erot = 2.53633970608343 | epot = -21.4696471597398 | etot = -16.0464805725588 -654000 ekin = 2.28614085804932 | erot = 2.12026601708473 | epot = -21.5642684321318 | etot = -17.1578615569977 -655000 ekin = 2.20709609517086 | erot = 2.10729950549552 | epot = -21.5349466292622 | etot = -17.2205510285958 -656000 ekin = 2.40310876229412 | erot = 2.09663823500904 | epot = -21.5631924595208 | etot = -17.0634454622177 -657000 ekin = 2.78865513467509 | erot = 2.19608839827217 | epot = -21.794507747247 | etot = -16.8097642142997 -658000 ekin = 3.10257138071619 | erot = 2.59154293692776 | epot = -21.9667559942099 | etot = -16.272641676566 -659000 ekin = 2.88891106020275 | erot = 3.47010878893494 | epot = -22.0542552611187 | etot = -15.695235411981 -660000 ekin = 2.90074521854052 | erot = 1.62850743298557 | epot = -22.1003034196589 | etot = -17.5710507681328 -661000 ekin = 3.26666543815737 | erot = 1.86223225384177 | epot = -22.202664217118 | etot = -17.0737665251188 -662000 ekin = 3.1558491019044 | erot = 2.16868634291728 | epot = -22.3049478747804 | etot = -16.9804124299587 -663000 ekin = 1.94349853674084 | erot = 2.45687952722593 | epot = -22.3908978754177 | etot = -17.990519811451 -664000 ekin = 1.45445820960401 | erot = 1.37641815749116 | epot = -22.5088813854798 | etot = -19.6780050183846 -665000 ekin = 1.57568561901953 | erot = 2.30379312359824 | epot = -22.5957949572926 | etot = -18.7163162146748 -666000 ekin = 2.46162449261636 | erot = 1.76978614573264 | epot = -22.7431602236663 | etot = -18.5117495853173 -667000 ekin = 2.82410423268351 | erot = 2.3383666365949 | epot = -22.9350563238978 | etot = -17.7725854546193 -668000 ekin = 2.73717686116191 | erot = 3.18779777915034 | epot = -23.0188768131827 | etot = -17.0939021728704 -669000 ekin = 3.41035672635339 | erot = 2.4547960177761 | epot = -23.0718232403885 | etot = -17.206670496259 -670000 ekin = 2.54649164859505 | erot = 1.9952097916917 | epot = -23.0246775830826 | etot = -18.4829761427958 -671000 ekin = 2.3802025684166 | erot = 3.00742736998539 | epot = -23.0023479116088 | etot = -17.6147179732068 -672000 ekin = 3.0126952152146 | erot = 2.55297219144565 | epot = -22.9947723733501 | etot = -17.4291049666898 -673000 ekin = 3.39486270740071 | erot = 2.38087002620332 | epot = -22.9033457919094 | etot = -17.1276130583054 -674000 ekin = 3.13698489626098 | erot = 2.10609113054064 | epot = -22.8089270617647 | etot = -17.565851034963 -675000 ekin = 2.32294130821675 | erot = 1.52858514820731 | epot = -22.6840603385672 | etot = -18.8325338821432 -676000 ekin = 2.43564726401376 | erot = 2.26860623636409 | epot = -22.6133446272028 | etot = -17.9090911268249 -677000 ekin = 2.75162757613842 | erot = 1.94219014743456 | epot = -22.7039380847023 | etot = -18.0101203611293 -678000 ekin = 2.86321973687601 | erot = 1.66387788364136 | epot = -22.7223510604726 | etot = -18.1952534399552 -679000 ekin = 2.3507920877287 | erot = 2.70386328048644 | epot = -22.7977445343494 | etot = -17.7430891661343 -680000 ekin = 2.48449675729004 | erot = 2.90645575582477 | epot = -22.8559375688936 | etot = -17.4649850557788 -681000 ekin = 1.91581136662334 | erot = 2.58179603882022 | epot = -22.7891325966099 | etot = -18.2915251911664 -682000 ekin = 2.10466427353706 | erot = 2.69470735868805 | epot = -22.6959043279182 | etot = -17.896532695693 -683000 ekin = 2.34504535409022 | erot = 2.1159203570079 | epot = -22.5718670441909 | etot = -18.1109013330928 -684000 ekin = 2.87198876498959 | erot = 2.65732173958705 | epot = -22.4986977268025 | etot = -16.9693872222258 -685000 ekin = 3.03375238110976 | erot = 2.18190577381517 | epot = -22.4634189289575 | etot = -17.2477607740326 -686000 ekin = 2.46248931777657 | erot = 2.43025710170918 | epot = -22.4079029677658 | etot = -17.5151565482801 -687000 ekin = 2.74662486817896 | erot = 1.79609152562409 | epot = -22.3360381567114 | etot = -17.7933217629083 -688000 ekin = 1.81703718003042 | erot = 2.06511603415634 | epot = -22.3083758541197 | etot = -18.426222639933 -689000 ekin = 2.84202633430563 | erot = 1.92033962884778 | epot = -22.3752571185822 | etot = -17.6128911554288 -690000 ekin = 2.07525448405017 | erot = 2.46342632176817 | epot = -22.4633535431152 | etot = -17.9246727372969 -691000 ekin = 2.12558517800138 | erot = 2.52961097164 | epot = -22.483426266766 | etot = -17.8282301171246 -692000 ekin = 2.86720433292881 | erot = 2.65102150657025 | epot = -22.4003374064863 | etot = -16.8821115669872 -693000 ekin = 2.30143055084864 | erot = 2.5229094638336 | epot = -22.2859681228791 | etot = -17.4616281081969 -694000 ekin = 2.88400701080874 | erot = 2.34320802755438 | epot = -22.2063185842819 | etot = -16.9791035459188 -695000 ekin = 2.93184722112895 | erot = 2.22933507376833 | epot = -22.2348177906806 | etot = -17.0736354957833 -696000 ekin = 2.63173546326796 | erot = 2.34275369570834 | epot = -22.274597219839 | etot = -17.3001080608627 -697000 ekin = 1.87084079501972 | erot = 1.78050094908736 | epot = -22.2730387150935 | etot = -18.6216969709864 -698000 ekin = 2.19791428580687 | erot = 2.8288358175635 | epot = -22.2819378523404 | etot = -17.2551877489701 -699000 ekin = 2.34279295545267 | erot = 2.07514436344563 | epot = -22.2061425261575 | etot = -17.7882052072592 -700000 ekin = 2.576803119019 | erot = 2.32167543064962 | epot = -22.1658685747825 | etot = -17.2673900251139 -701000 ekin = 2.99438658075389 | erot = 1.89982533986207 | epot = -22.2191193266439 | etot = -17.3249074060279 -702000 ekin = 2.68548464757459 | erot = 2.65050744453206 | epot = -22.2547415922756 | etot = -16.918749500169 -703000 ekin = 2.01996957402024 | erot = 2.04032822241736 | epot = -22.3253693056515 | etot = -18.2650715092139 -704000 ekin = 1.58871069317829 | erot = 1.64014270467761 | epot = -22.3617232281452 | etot = -19.1328698302893 -705000 ekin = 2.3089415754982 | erot = 1.90252913035993 | epot = -22.4307958564623 | etot = -18.2193251506042 -706000 ekin = 2.61729186445575 | erot = 3.21879868039103 | epot = -22.5603358780911 | etot = -16.7242453332443 -707000 ekin = 2.60797107906866 | erot = 2.31455039977394 | epot = -22.7102471053997 | etot = -17.7877256265571 -708000 ekin = 1.81633850341999 | erot = 2.34822575669419 | epot = -22.841408787855 | etot = -18.6768445277408 -709000 ekin = 1.83541322105378 | erot = 2.51792380003796 | epot = -23.0137235815795 | etot = -18.6603865604877 -710000 ekin = 2.21420583262459 | erot = 1.92378721690472 | epot = -23.1433453130908 | etot = -19.0053522635615 -711000 ekin = 2.06744054454462 | erot = 2.39811709353194 | epot = -23.1532717948854 | etot = -18.6877141568089 -712000 ekin = 2.17279472706345 | erot = 1.75362175342097 | epot = -23.0479262273955 | etot = -19.121509746911 -713000 ekin = 2.87118830138473 | erot = 1.54943993787556 | epot = -22.8430575230906 | etot = -18.4224292838303 -714000 ekin = 2.01079466743971 | erot = 1.87510988392749 | epot = -22.9212969433222 | etot = -19.035392391955 -715000 ekin = 2.49921829589269 | erot = 1.91934008289237 | epot = -22.9679126658062 | etot = -18.5493542870212 -716000 ekin = 2.94666510633352 | erot = 2.18714442405523 | epot = -23.0339970974289 | etot = -17.9001875670402 -717000 ekin = 3.07404079722084 | erot = 2.46628262765134 | epot = -23.1869721551174 | etot = -17.6466487302452 -718000 ekin = 3.47060078371108 | erot = 2.28206620506098 | epot = -23.2524492340768 | etot = -17.4997822453048 -719000 ekin = 4.08343792096551 | erot = 3.10429377075216 | epot = -23.2448292181926 | etot = -16.0570975264749 -720000 ekin = 2.52774819763971 | erot = 1.92867508904585 | epot = -23.1435084559681 | etot = -18.6870851692826 -721000 ekin = 2.58294244811584 | erot = 2.0383053178033 | epot = -23.0601633758883 | etot = -18.4389156099691 -722000 ekin = 1.94458885450861 | erot = 2.32008660802526 | epot = -22.9811929404572 | etot = -18.7165174779233 -723000 ekin = 2.4199834057626 | erot = 2.12369728979368 | epot = -23.0570939793876 | etot = -18.5134132838313 -724000 ekin = 1.90406371300862 | erot = 1.97533505769877 | epot = -23.1267629042383 | etot = -19.2473641335309 -725000 ekin = 2.14287056473423 | erot = 2.79289687450021 | epot = -23.1695632046138 | etot = -18.2337957653793 -726000 ekin = 2.26423317099721 | erot = 2.55343019202652 | epot = -23.2432909083709 | etot = -18.4256275453472 -727000 ekin = 1.69816397656716 | erot = 2.64011919415554 | epot = -23.2988376893209 | etot = -18.9605545185982 -728000 ekin = 2.23000862561934 | erot = 3.5852147057867 | epot = -23.3528245832468 | etot = -17.5376012518407 -729000 ekin = 2.70076566380343 | erot = 1.73367306410751 | epot = -23.3971276122796 | etot = -18.9626888843686 -730000 ekin = 2.54818673802759 | erot = 2.77394958410254 | epot = -23.3988686964744 | etot = -18.0767323743443 -731000 ekin = 2.69782550956093 | erot = 2.04855826523075 | epot = -23.4310969813891 | etot = -18.6847132065974 -732000 ekin = 2.79613002753751 | erot = 1.87867430486714 | epot = -23.4885161441653 | etot = -18.8137118117607 -733000 ekin = 2.20346728125046 | erot = 2.64365594749976 | epot = -23.5261309431819 | etot = -18.6790077144316 -734000 ekin = 1.69780111261444 | erot = 2.30917909560789 | epot = -23.5188046470474 | etot = -19.5118244388251 -735000 ekin = 2.18402736165936 | erot = 2.72051620230872 | epot = -23.4712689506937 | etot = -18.5667253867257 -736000 ekin = 2.26138696009405 | erot = 1.17083930058802 | epot = -23.4348107178754 | etot = -20.0025844571933 -737000 ekin = 2.22219419044796 | erot = 3.14114682990359 | epot = -23.3869288757725 | etot = -18.0235878554209 -738000 ekin = 1.75464981631085 | erot = 2.28485941478059 | epot = -23.2709893028052 | etot = -19.2314800717138 -739000 ekin = 1.41806378584362 | erot = 2.1671403411282 | epot = -23.2213775300888 | etot = -19.636173403117 -740000 ekin = 1.90901017596351 | erot = 2.27102763422489 | epot = -23.1829198366046 | etot = -19.0028820264162 -741000 ekin = 1.9930994487751 | erot = 2.73523269523397 | epot = -23.1169670577823 | etot = -18.3886349137733 -742000 ekin = 1.99876411117685 | erot = 1.89882876917752 | epot = -23.030082580085 | etot = -19.1324896997307 -743000 ekin = 1.96472814667687 | erot = 2.79504722629176 | epot = -22.8990488521609 | etot = -18.1392734791923 -744000 ekin = 2.02442646092311 | erot = 2.35044838626025 | epot = -22.8186526150799 | etot = -18.4437777678966 -745000 ekin = 1.65344231988822 | erot = 1.87919095141019 | epot = -22.7624827109091 | etot = -19.2298494396107 -746000 ekin = 2.1034668185472 | erot = 2.03078530569664 | epot = -22.743454277698 | etot = -18.6092021534541 -747000 ekin = 3.06690414848489 | erot = 1.67540297869492 | epot = -22.7625979159322 | etot = -18.0202907887524 -748000 ekin = 3.06965414483401 | erot = 1.86014593098646 | epot = -22.8118567150739 | etot = -17.8820566392534 -749000 ekin = 2.53718696167216 | erot = 2.02710579059033 | epot = -22.8431046011969 | etot = -18.2788118489344 -750000 ekin = 2.756573548081 | erot = 2.34953156046293 | epot = -22.9548205390759 | etot = -17.8487154305319 -751000 ekin = 2.52290020835147 | erot = 2.34873763599979 | epot = -23.0238691402084 | etot = -18.1522312958572 -752000 ekin = 2.47222247869325 | erot = 1.68679846444685 | epot = -22.9958559112491 | etot = -18.836834968109 -753000 ekin = 2.48263277172423 | erot = 1.54669382815741 | epot = -23.0858212396418 | etot = -19.0564946397602 -754000 ekin = 2.54806257410878 | erot = 2.26636466676166 | epot = -23.1896472696843 | etot = -18.3752200288138 -755000 ekin = 1.53168409517921 | erot = 2.22665478278013 | epot = -23.2059118234918 | etot = -19.4475729455324 -756000 ekin = 2.10751715527953 | erot = 2.40525774326678 | epot = -23.114150245375 | etot = -18.6013753468287 -757000 ekin = 2.93395895491028 | erot = 2.05821177584912 | epot = -23.0783355599275 | etot = -18.0861648291681 -758000 ekin = 2.38307945406233 | erot = 2.50598165375059 | epot = -22.9691152621287 | etot = -18.0800541543158 -759000 ekin = 2.60292884338835 | erot = 2.36916677072546 | epot = -22.7987274767845 | etot = -17.8266318626707 -760000 ekin = 3.2284318196987 | erot = 2.73822716520639 | epot = -22.6756147646272 | etot = -16.7089557797221 -761000 ekin = 3.41868727786494 | erot = 1.68975765213406 | epot = -22.5638952547581 | etot = -17.4554503247591 -762000 ekin = 3.43033946346107 | erot = 2.5283975140253 | epot = -22.3549032489322 | etot = -16.3961662714458 -763000 ekin = 2.65773094814485 | erot = 1.8397513397556 | epot = -22.234833339183 | etot = -17.7373510512825 -764000 ekin = 2.3815484472129 | erot = 2.70684992442146 | epot = -22.0890752688231 | etot = -17.0006768971887 -765000 ekin = 2.23212803588897 | erot = 1.94868597739427 | epot = -21.9918715237933 | etot = -17.81105751051 -766000 ekin = 2.49097891886065 | erot = 1.96764603993155 | epot = -21.8443436680801 | etot = -17.3857187092879 -767000 ekin = 2.34579214976749 | erot = 2.64636009163515 | epot = -21.7634962034012 | etot = -16.7713439619986 -768000 ekin = 1.87671147825105 | erot = 2.05549869178485 | epot = -21.7324638416527 | etot = -17.8002536716168 -769000 ekin = 3.05058687860238 | erot = 2.66104171022372 | epot = -21.6679219598699 | etot = -15.9562933710438 -770000 ekin = 2.44115683640632 | erot = 1.9755493247975 | epot = -21.644882066475 | etot = -17.2281759052712 -771000 ekin = 2.23687464004429 | erot = 2.5504097070879 | epot = -21.5811924169691 | etot = -16.793908069837 -772000 ekin = 2.76529680592008 | erot = 1.97873499811186 | epot = -21.6543448952384 | etot = -16.9103130912064 -773000 ekin = 2.14632888240094 | erot = 2.41330587525516 | epot = -21.7728828090227 | etot = -17.2132480513667 -774000 ekin = 2.19848545803079 | erot = 1.9765131024719 | epot = -21.8398858604883 | etot = -17.6648872999856 -775000 ekin = 2.52300137989083 | erot = 2.80935365273516 | epot = -22.0219985274259 | etot = -16.6896434947999 -776000 ekin = 3.15842485269273 | erot = 2.47066157093646 | epot = -22.183029096161 | etot = -16.5539426725318 -777000 ekin = 1.91784338934576 | erot = 1.76045300517084 | epot = -22.2259652888115 | etot = -18.5476688942949 -778000 ekin = 2.93738066043323 | erot = 2.2945784249029 | epot = -22.2339481852393 | etot = -17.0019890999032 -779000 ekin = 3.09847206114319 | erot = 2.0455771700605 | epot = -22.240438366259 | etot = -17.0963891350553 -780000 ekin = 2.86127568397807 | erot = 3.12055135138657 | epot = -22.1865692766137 | etot = -16.2047422412491 -781000 ekin = 2.36069914420785 | erot = 3.53186431088488 | epot = -22.1210563364352 | etot = -16.2284928813425 -782000 ekin = 2.31592690319261 | erot = 2.85730598644035 | epot = -22.0302855151548 | etot = -16.8570526255218 -783000 ekin = 1.86647729944746 | erot = 3.03450246093096 | epot = -21.8860143679489 | etot = -16.9850346075705 -784000 ekin = 2.04055627573201 | erot = 2.26047908607292 | epot = -21.7534271639393 | etot = -17.4523918021343 -785000 ekin = 2.02248469828703 | erot = 2.13950421850547 | epot = -21.6318967501918 | etot = -17.4699078333993 -786000 ekin = 2.34211746551601 | erot = 2.34838133643264 | epot = -21.5890308210084 | etot = -16.8985320190598 -787000 ekin = 2.74971447554938 | erot = 2.24123553296042 | epot = -21.5192132515563 | etot = -16.5282632430465 -788000 ekin = 2.14142056672039 | erot = 2.27008574684963 | epot = -21.4982362621713 | etot = -17.0867299486013 -789000 ekin = 1.98580913341303 | erot = 2.00702444041792 | epot = -21.5235331659838 | etot = -17.5306995921528 -790000 ekin = 1.68578263083924 | erot = 1.43485602862152 | epot = -21.64400815936 | etot = -18.5233694998993 -791000 ekin = 2.13583938840528 | erot = 2.53730095458942 | epot = -21.7916440698418 | etot = -17.1185037268471 -792000 ekin = 1.71937483898028 | erot = 2.1956380421601 | epot = -21.8794946709408 | etot = -17.9644817898004 -793000 ekin = 3.15868943755338 | erot = 1.94575875708421 | epot = -22.0398145404618 | etot = -16.9353663458242 -794000 ekin = 2.45478602538953 | erot = 3.00825554959564 | epot = -22.0843165283013 | etot = -16.6212749533161 -795000 ekin = 2.87760320917193 | erot = 3.06920266633565 | epot = -22.1595628991904 | etot = -16.2127570236828 -796000 ekin = 2.29816690595058 | erot = 1.61510864654314 | epot = -22.1869705548184 | etot = -18.2736950023247 -797000 ekin = 2.1901525606721 | erot = 3.65734446008351 | epot = -22.1432608090644 | etot = -16.2957637883088 -798000 ekin = 2.12018787925578 | erot = 2.92822258455554 | epot = -22.1311312789224 | etot = -17.0827208151111 -799000 ekin = 2.49416140154829 | erot = 2.73328283280217 | epot = -22.0825726051882 | etot = -16.8551283708377 -800000 ekin = 2.18932007838552 | erot = 2.97640731559392 | epot = -21.9793621521909 | etot = -16.8136347582115 -801000 ekin = 2.58827112124839 | erot = 2.7440442483726 | epot = -21.9108490336924 | etot = -16.5785336640714 -802000 ekin = 3.07870342348167 | erot = 2.87961505564285 | epot = -21.822560433681 | etot = -15.8642419545565 -803000 ekin = 2.2398624368064 | erot = 2.50525058807594 | epot = -21.72759408181 | etot = -16.9824810569277 -804000 ekin = 2.91885860068427 | erot = 1.57889040451429 | epot = -21.6896376725624 | etot = -17.1918886673638 -805000 ekin = 2.68277363980194 | erot = 3.0552786891574 | epot = -21.6710764398127 | etot = -15.9330241108533 -806000 ekin = 2.77769607049014 | erot = 2.18887276909081 | epot = -21.6314833902336 | etot = -16.6649145506527 -807000 ekin = 2.12673239079668 | erot = 2.86003407600807 | epot = -21.7295924017744 | etot = -16.7428259349697 -808000 ekin = 1.89599614774678 | erot = 2.29237053227661 | epot = -21.7511361510417 | etot = -17.5627694710183 -809000 ekin = 1.96405066221971 | erot = 1.92110393348367 | epot = -21.7075506883706 | etot = -17.8223960926672 -810000 ekin = 2.01518137594275 | erot = 2.60119247286596 | epot = -21.6788385874729 | etot = -17.0624647386642 -811000 ekin = 2.31084800889289 | erot = 1.75270367309064 | epot = -21.6837819033718 | etot = -17.6202302213883 -812000 ekin = 2.57701031002089 | erot = 2.34932304073588 | epot = -21.7246716033188 | etot = -16.798338252562 -813000 ekin = 2.87706904926076 | erot = 2.35686610624156 | epot = -21.8375922236049 | etot = -16.6036570681026 -814000 ekin = 2.89908405023865 | erot = 2.31423299883227 | epot = -21.8379261473901 | etot = -16.6246090983192 -815000 ekin = 2.54050064212256 | erot = 2.82732568868832 | epot = -21.6068952707049 | etot = -16.239068939894 -816000 ekin = 2.17040404256386 | erot = 2.53711088209171 | epot = -21.5560322071982 | etot = -16.8485172825427 -817000 ekin = 1.7842696071831 | erot = 2.67810959410575 | epot = -21.8738878035325 | etot = -17.4115086022436 -818000 ekin = 2.29659398017837 | erot = 2.63718862373661 | epot = -22.164277271391 | etot = -17.230494667476 -819000 ekin = 2.15801167884061 | erot = 2.62095572928876 | epot = -22.1816109590115 | etot = -17.4026435508821 -820000 ekin = 1.94384548213955 | erot = 2.28597987799276 | epot = -22.0986187375021 | etot = -17.8687933773698 -821000 ekin = 2.10513194007576 | erot = 2.3869817556922 | epot = -22.1146754444784 | etot = -17.6225617487105 -822000 ekin = 2.2481971678644 | erot = 2.15258805680876 | epot = -22.0539472940485 | etot = -17.6531620693753 -823000 ekin = 2.26584952085582 | erot = 2.60619852526611 | epot = -22.0924201800579 | etot = -17.2203721339359 -824000 ekin = 1.65187935478514 | erot = 1.48703119037229 | epot = -22.1682955997985 | etot = -19.0293850546411 -825000 ekin = 1.60213094818649 | erot = 1.98592524368393 | epot = -22.1687104063708 | etot = -18.5806542145004 -826000 ekin = 1.97430720107255 | erot = 2.19175014677162 | epot = -22.1061881978654 | etot = -17.9401308500212 -827000 ekin = 2.1793755983405 | erot = 2.44975419075935 | epot = -21.9704586607304 | etot = -17.3413288716305 -828000 ekin = 1.90399088418587 | erot = 2.72532994798818 | epot = -21.9585923270582 | etot = -17.3292714948841 -829000 ekin = 2.06478103068884 | erot = 2.96583035402589 | epot = -21.9849402038681 | etot = -16.9543288191534 -830000 ekin = 1.98920675238979 | erot = 2.15331250444998 | epot = -22.0339146439702 | etot = -17.8913953871304 -831000 ekin = 2.33567462674689 | erot = 2.36888807413497 | epot = -22.1271573756461 | etot = -17.4225946747642 -832000 ekin = 2.01194709991921 | erot = 1.94769143293624 | epot = -22.2038482709588 | etot = -18.2442097381033 -833000 ekin = 2.26025933495882 | erot = 2.16012558191462 | epot = -22.2882501045414 | etot = -17.867865187668 -834000 ekin = 2.11529426445865 | erot = 1.52405523315359 | epot = -22.3075608649825 | etot = -18.6682113673703 -835000 ekin = 2.89920750905511 | erot = 2.7380108175103 | epot = -22.3942491248321 | etot = -16.7570307982667 -836000 ekin = 3.33069528982658 | erot = 2.42771267807862 | epot = -22.4321737300743 | etot = -16.6737657621691 -837000 ekin = 2.74831774333782 | erot = 2.31991750378627 | epot = -22.4290234552872 | etot = -17.3607882081631 -838000 ekin = 3.13714871682188 | erot = 3.21601751721778 | epot = -22.464238390645 | etot = -16.1110721566054 -839000 ekin = 2.73358272751807 | erot = 2.60144488190506 | epot = -22.4062682687367 | etot = -17.0712406593136 -840000 ekin = 2.96121930874636 | erot = 1.42725942278117 | epot = -22.3293755621293 | etot = -17.9408968306018 -841000 ekin = 2.95134811170866 | erot = 2.67666861874609 | epot = -22.2936348151224 | etot = -16.6656180846676 -842000 ekin = 2.15783928636402 | erot = 2.30287195796691 | epot = -22.2978011147172 | etot = -17.8370898703863 -843000 ekin = 2.84565152669617 | erot = 2.05108014775139 | epot = -22.3162908719778 | etot = -17.4195591975303 -844000 ekin = 2.99645803669157 | erot = 1.50433298006521 | epot = -22.3768320579304 | etot = -17.8760410411736 -845000 ekin = 3.20248025697125 | erot = 2.27246140825564 | epot = -22.3985708422076 | etot = -16.9236291769807 -846000 ekin = 3.35773945734322 | erot = 2.54074745551552 | epot = -22.4144833015876 | etot = -16.5159963887288 -847000 ekin = 2.17779203733109 | erot = 2.7381758118846 | epot = -22.3524825149514 | etot = -17.4365146657357 -848000 ekin = 2.51627348417144 | erot = 2.81170686694718 | epot = -22.2066307862469 | etot = -16.8786504351283 -849000 ekin = 1.99679455190557 | erot = 2.5685584677309 | epot = -22.0763062134929 | etot = -17.5109531938564 -850000 ekin = 2.05799123916877 | erot = 1.80888056240785 | epot = -22.0665032506705 | etot = -18.1996314490939 -851000 ekin = 2.08889793767921 | erot = 1.86172181790291 | epot = -22.0629711763889 | etot = -18.1123514208068 -852000 ekin = 1.68990805178902 | erot = 1.42763535981882 | epot = -22.002100112701 | etot = -18.8845567010931 -853000 ekin = 1.99310886654811 | erot = 3.05226969048294 | epot = -22.0306903552277 | etot = -16.9853117981967 -854000 ekin = 2.98378700534986 | erot = 2.23102745240542 | epot = -22.1115820238811 | etot = -16.8967675661258 -855000 ekin = 2.17087415585277 | erot = 2.83781472268791 | epot = -22.111510639597 | etot = -17.1028217610564 -856000 ekin = 2.42228475387308 | erot = 1.53328604594476 | epot = -22.0841888628208 | etot = -18.128618063003 -857000 ekin = 2.50431566526893 | erot = 2.80498769176513 | epot = -21.9881235267533 | etot = -16.6788201697193 -858000 ekin = 2.17333686672378 | erot = 2.8259111550717 | epot = -21.9093201368614 | etot = -16.9100721150659 -859000 ekin = 2.29930070497242 | erot = 2.32417368939059 | epot = -21.8849849636103 | etot = -17.2615105692473 -860000 ekin = 1.99153024057672 | erot = 1.9467463860015 | epot = -21.8998709373216 | etot = -17.9615943107434 -861000 ekin = 2.69177523559624 | erot = 2.23997750036371 | epot = -21.8915522194994 | etot = -16.9597994835394 -862000 ekin = 2.86117050047985 | erot = 2.41530060322761 | epot = -21.876687883023 | etot = -16.6002167793155 -863000 ekin = 2.59841547044276 | erot = 3.35017050085432 | epot = -21.8162649771436 | etot = -15.8676790058466 -864000 ekin = 2.92496272611018 | erot = 2.30350236144452 | epot = -21.7820358973268 | etot = -16.5535708097721 -865000 ekin = 1.94718216128952 | erot = 2.16572180916633 | epot = -21.7000823492195 | etot = -17.5871783787636 -866000 ekin = 1.9900612787169 | erot = 1.65011901234952 | epot = -21.6190182409267 | etot = -17.9788379498603 -867000 ekin = 1.76250718110787 | erot = 3.37958608370307 | epot = -21.5401486584561 | etot = -16.3980553936451 -868000 ekin = 1.845623450314 | erot = 2.78812196028613 | epot = -21.5771917352235 | etot = -16.9434463246233 -869000 ekin = 2.39300849969204 | erot = 2.38301618173174 | epot = -21.6710790825578 | etot = -16.895054401134 -870000 ekin = 1.91899243212541 | erot = 3.22222440717391 | epot = -21.6734733803871 | etot = -16.5322565410878 -871000 ekin = 3.10255827845531 | erot = 2.95454268850897 | epot = -21.5913249106744 | etot = -15.5342239437101 -872000 ekin = 2.94582883077842 | erot = 1.38261935263093 | epot = -21.4597055547832 | etot = -17.1312573713739 -873000 ekin = 2.72830997927423 | erot = 2.23223699637276 | epot = -21.3657566950046 | etot = -16.4052097193576 -874000 ekin = 2.41464704842014 | erot = 2.10351476791497 | epot = -21.2635161734954 | etot = -16.7453543571603 -875000 ekin = 2.99468455803481 | erot = 2.72761242382523 | epot = -21.248888128938 | etot = -15.526591147078 -876000 ekin = 2.13382009818493 | erot = 2.23152059294678 | epot = -21.2388603913311 | etot = -16.8735197001994 -877000 ekin = 1.839391763993 | erot = 1.60727997722602 | epot = -21.2015948102408 | etot = -17.7549230690217 -878000 ekin = 2.01267175782178 | erot = 2.73109796378376 | epot = -21.2125253160263 | etot = -16.4687555944207 -879000 ekin = 1.42911941081343 | erot = 2.17371661448624 | epot = -21.1345316334464 | etot = -17.5316956081467 -880000 ekin = 2.10605339224632 | erot = 2.58847517789128 | epot = -21.0787246891645 | etot = -16.3841961190269 -881000 ekin = 1.54924791070118 | erot = 2.00685139154178 | epot = -21.1356465207066 | etot = -17.5795472184636 -882000 ekin = 2.199643157135 | erot = 2.65509097106009 | epot = -21.2389026935677 | etot = -16.3841685653726 -883000 ekin = 2.20850404171077 | erot = 2.22833605977577 | epot = -21.3067394383395 | etot = -16.8698993368529 -884000 ekin = 2.76978562647275 | erot = 2.10395845939753 | epot = -21.3429618615584 | etot = -16.4692177756882 -885000 ekin = 1.93339807672781 | erot = 1.77156241344965 | epot = -21.3858074096933 | etot = -17.6808469195158 -886000 ekin = 2.00408769971894 | erot = 3.10736267931433 | epot = -21.3935346347812 | etot = -16.2820842557479 -887000 ekin = 1.96987943750801 | erot = 2.82035886899742 | epot = -21.3967073105592 | etot = -16.6064690040538 -888000 ekin = 1.91464371566412 | erot = 2.33371232948869 | epot = -21.4767119016419 | etot = -17.2283558564891 -889000 ekin = 1.88227414130201 | erot = 2.45915914930409 | epot = -21.5790392436829 | etot = -17.2376059530768 -890000 ekin = 1.84515176532447 | erot = 2.24992378831496 | epot = -21.6747594004542 | etot = -17.5796838468148 -891000 ekin = 2.6016566869706 | erot = 2.34500453305756 | epot = -21.8016735536793 | etot = -16.8550123336512 -892000 ekin = 2.71287751886859 | erot = 2.69544224573132 | epot = -21.9063749565584 | etot = -16.4980551919585 -893000 ekin = 2.17862714611329 | erot = 2.98452123742221 | epot = -21.9155556335136 | etot = -16.7524072499781 -894000 ekin = 2.52079948361477 | erot = 2.46355933674926 | epot = -21.9151100794549 | etot = -16.9307512590909 -895000 ekin = 2.53566097944338 | erot = 2.45130454442939 | epot = -21.9477860878339 | etot = -16.9608205639611 -896000 ekin = 1.84455393639213 | erot = 2.77499090684944 | epot = -21.9167554809878 | etot = -17.2972106377462 -897000 ekin = 2.38519326880694 | erot = 2.019802873173 | epot = -21.8644918203992 | etot = -17.4594956784193 -898000 ekin = 2.14354914407572 | erot = 1.89196669459414 | epot = -21.7953104274974 | etot = -17.7597945888275 -899000 ekin = 2.65485657727374 | erot = 2.32374560038191 | epot = -21.6964754705568 | etot = -16.7178732929011 -900000 ekin = 2.1437154528087 | erot = 2.28119066740276 | epot = -21.6934954112434 | etot = -17.2685892910319 -901000 ekin = 1.9396581494688 | erot = 1.81495571440908 | epot = -21.7369092433376 | etot = -17.9822953794597 -902000 ekin = 2.60993957981555 | erot = 2.50321386623392 | epot = -21.6842517568354 | etot = -16.5710983107859 -903000 ekin = 1.87484955546756 | erot = 2.17008893987963 | epot = -21.6383913984978 | etot = -17.5934529031506 -904000 ekin = 1.87454064845764 | erot = 2.32484081519397 | epot = -21.5866637125315 | etot = -17.3872822488799 -905000 ekin = 2.31407473814843 | erot = 2.15094868542393 | epot = -21.5154415841816 | etot = -17.0504181606092 -906000 ekin = 2.49583383758853 | erot = 2.25091096848465 | epot = -21.5170853902294 | etot = -16.7703405841562 -907000 ekin = 4.19798796104343 | erot = 2.50305323228071 | epot = -21.5976736513859 | etot = -14.8966324580617 -908000 ekin = 3.26730891548756 | erot = 2.11222217905481 | epot = -21.7526644402475 | etot = -16.3731333457052 -909000 ekin = 2.64106561110374 | erot = 1.92197432194202 | epot = -21.8748043207924 | etot = -17.3117643877466 -910000 ekin = 2.61805562731904 | erot = 2.90737422678698 | epot = -21.9709470207745 | etot = -16.4455171666685 -911000 ekin = 2.62012718860141 | erot = 4.35318528241845 | epot = -22.0282478750366 | etot = -15.0549354040167 -912000 ekin = 3.07628909273119 | erot = 3.69371809788395 | epot = -22.0511180009901 | etot = -15.2811108103749 -913000 ekin = 2.82956898268832 | erot = 2.17078429141201 | epot = -22.0149543706266 | etot = -17.0146010965263 -914000 ekin = 2.16386655780066 | erot = 1.22303673036132 | epot = -21.9243495493208 | etot = -18.5374462611588 -915000 ekin = 1.59447095066509 | erot = 2.95966391292003 | epot = -21.8264580452026 | etot = -17.2723231816175 -916000 ekin = 2.58365539107524 | erot = 3.75147270955028 | epot = -21.8922962938607 | etot = -15.5571681932352 -917000 ekin = 3.01643029206973 | erot = 2.88035639021002 | epot = -21.9150526568514 | etot = -16.0182659745717 -918000 ekin = 2.89929776900147 | erot = 2.64137394041291 | epot = -21.9078998623094 | etot = -16.367228152895 -919000 ekin = 3.20476671865013 | erot = 2.76036957969153 | epot = -21.8878055443404 | etot = -15.9226692459987 -920000 ekin = 2.28949350558684 | erot = 2.38558870046817 | epot = -21.8659406759967 | etot = -17.1908584699417 -921000 ekin = 2.39158312157106 | erot = 2.44959700788171 | epot = -21.8638974869224 | etot = -17.0227173574696 -922000 ekin = 2.30678787768013 | erot = 2.42145678067296 | epot = -21.8218369909645 | etot = -17.0935923326114 -923000 ekin = 2.49697778842282 | erot = 2.66565493744118 | epot = -21.8078634464732 | etot = -16.6452307206092 -924000 ekin = 1.55676047489502 | erot = 2.97115254541009 | epot = -21.7829722234117 | etot = -17.2550592031066 -925000 ekin = 1.86603413909288 | erot = 1.96274861601778 | epot = -21.7288604040748 | etot = -17.9000776489642 -926000 ekin = 1.36993364395821 | erot = 2.11749584641399 | epot = -21.7083442855147 | etot = -18.2209147951426 -927000 ekin = 2.55718977538496 | erot = 2.08109095048878 | epot = -21.7242353526192 | etot = -17.0859546267455 -928000 ekin = 2.0974272910786 | erot = 2.73922911267238 | epot = -21.7673808868818 | etot = -16.9307244831309 -929000 ekin = 1.85550591174835 | erot = 1.84990976935039 | epot = -21.8639426090856 | etot = -18.1585269279869 -930000 ekin = 1.99594723517184 | erot = 2.09151231016389 | epot = -21.8461015073052 | etot = -17.7586419619695 -931000 ekin = 2.45331651079282 | erot = 1.86703658018612 | epot = -21.7382799817761 | etot = -17.4179268907972 -932000 ekin = 2.76909250526758 | erot = 2.34990175754267 | epot = -21.7639792890093 | etot = -16.6449850261991 -933000 ekin = 3.0474736633548 | erot = 2.52740756503517 | epot = -21.6783727845496 | etot = -16.1034915561596 -934000 ekin = 2.93463275640818 | erot = 2.48893095891024 | epot = -21.5784996926913 | etot = -16.1549359773729 -935000 ekin = 2.77799347567549 | erot = 2.13929358412251 | epot = -21.5334239467005 | etot = -16.6161368869025 -936000 ekin = 2.96529953690397 | erot = 2.07095365726712 | epot = -21.5249249864243 | etot = -16.4886717922532 -937000 ekin = 3.04850537701749 | erot = 2.32432162998049 | epot = -21.4386642161072 | etot = -16.0658372091092 -938000 ekin = 2.99262628505359 | erot = 2.35224559307842 | epot = -21.3457080466207 | etot = -16.0008361684887 -939000 ekin = 2.61238181353702 | erot = 2.2678035683729 | epot = -21.3079422537804 | etot = -16.4277568718705 -940000 ekin = 2.65930112044941 | erot = 2.75497479722395 | epot = -21.2170493356503 | etot = -15.8027734179769 -941000 ekin = 2.27574261339217 | erot = 2.61419196501686 | epot = -21.1297657597672 | etot = -16.2398311813582 -942000 ekin = 1.89172011891054 | erot = 2.82029488513786 | epot = -21.0410099256113 | etot = -16.3289949215629 -943000 ekin = 2.47643464476757 | erot = 2.34737109151874 | epot = -21.0466687727979 | etot = -16.2228630365116 -944000 ekin = 2.13883995897326 | erot = 1.92577316206135 | epot = -21.0114219746513 | etot = -16.9468088536167 -945000 ekin = 2.57768697869113 | erot = 2.21470136124071 | epot = -21.0634624131724 | etot = -16.2710740732406 -946000 ekin = 2.36420709243626 | erot = 2.89647330776423 | epot = -21.088814693033 | etot = -15.8281342928325 -947000 ekin = 2.07104171538468 | erot = 1.86575631327233 | epot = -21.1004860950451 | etot = -17.1636880663881 -948000 ekin = 1.85532958802996 | erot = 1.36952834086551 | epot = -21.1364231315615 | etot = -17.911565202666 -949000 ekin = 1.76206591178366 | erot = 2.3173732855863 | epot = -21.1463744779337 | etot = -17.0669352805637 -950000 ekin = 1.72021033353108 | erot = 2.24191394295309 | epot = -21.1376324866855 | etot = -17.1755082102013 -951000 ekin = 1.96140007830504 | erot = 2.32248863487758 | epot = -21.1955927656813 | etot = -16.9117040524986 -952000 ekin = 2.93256201500607 | erot = 2.74550490827502 | epot = -21.234781024541 | etot = -15.5567141012599 -953000 ekin = 2.95031285986316 | erot = 2.39822873263992 | epot = -21.252609183133 | etot = -15.9040675906299 -954000 ekin = 3.09579074538113 | erot = 1.98159252445734 | epot = -21.1641538136741 | etot = -16.0867705438357 -955000 ekin = 3.59360323486037 | erot = 2.06789679071824 | epot = -21.0522880782497 | etot = -15.3907880526711 -956000 ekin = 2.97416074498495 | erot = 3.66953591785754 | epot = -20.9097603766373 | etot = -14.2660637137948 -957000 ekin = 3.03140562067951 | erot = 2.6607808376071 | epot = -20.741905867784 | etot = -15.0497194094974 -958000 ekin = 2.68913434704071 | erot = 2.94057112873837 | epot = -20.5488384129042 | etot = -14.9191329371251 -959000 ekin = 1.93264217407773 | erot = 2.45198406257091 | epot = -20.468781161493 | etot = -16.0841549248444 -960000 ekin = 1.49632279167951 | erot = 3.13346348599985 | epot = -20.4844974178568 | etot = -15.8547111401775 -961000 ekin = 1.96353429663481 | erot = 2.07553358516997 | epot = -20.4805590123498 | etot = -16.441491130545 -962000 ekin = 2.02830196392006 | erot = 1.88908496389356 | epot = -20.5374211599972 | etot = -16.6200342321836 -963000 ekin = 1.80829526034561 | erot = 2.46258345726266 | epot = -20.5841835730968 | etot = -16.3133048554885 -964000 ekin = 2.79449124937198 | erot = 2.42527551362847 | epot = -20.6238805444481 | etot = -15.4041137814477 -965000 ekin = 2.53493670506137 | erot = 2.27804362684502 | epot = -20.6549300812152 | etot = -15.8419497493088 -966000 ekin = 2.0920817650402 | erot = 2.27478990703181 | epot = -20.7044739042411 | etot = -16.3376022321691 -967000 ekin = 1.55562260797661 | erot = 3.55543363172461 | epot = -20.739375276301 | etot = -15.6283190365998 -968000 ekin = 1.93439891222236 | erot = 2.37295903815892 | epot = -20.7189229543386 | etot = -16.4115650039573 -969000 ekin = 2.16199728898304 | erot = 2.4601205252494 | epot = -20.6747113173024 | etot = -16.05259350307 -970000 ekin = 1.84926216722517 | erot = 2.96951777569265 | epot = -20.601159998151 | etot = -15.7823800552332 -971000 ekin = 1.93656411083027 | erot = 3.08724923997924 | epot = -20.5835250734813 | etot = -15.5597117226718 -972000 ekin = 1.90452783927712 | erot = 2.58230766783159 | epot = -20.578290598021 | etot = -16.0914550909123 -973000 ekin = 2.1922712122506 | erot = 2.92686386394504 | epot = -20.586817370265 | etot = -15.4676822940694 -974000 ekin = 2.53094641465528 | erot = 2.69271305556799 | epot = -20.5382547781502 | etot = -15.314595307927 -975000 ekin = 3.41187201669924 | erot = 2.32917219553093 | epot = -20.5109803919918 | etot = -14.7699361797616 -976000 ekin = 2.88156114272554 | erot = 3.10474521611249 | epot = -20.5158119249461 | etot = -14.5295055661081 -977000 ekin = 2.73962881168093 | erot = 2.50884169958543 | epot = -20.4964590298 | etot = -15.2479885185336 -978000 ekin = 1.79682802545478 | erot = 2.06924041504343 | epot = -20.4730821934977 | etot = -16.6070137529995 -979000 ekin = 1.86521389998383 | erot = 2.22151626929011 | epot = -20.4069392895634 | etot = -16.3202091202895 -980000 ekin = 1.92383169177415 | erot = 1.56425965548878 | epot = -20.3533353734709 | etot = -16.8652440262079 -981000 ekin = 1.5511019928294 | erot = 2.05381225133937 | epot = -20.3970890782077 | etot = -16.7921748340389 -982000 ekin = 1.85559395816059 | erot = 1.96991369841494 | epot = -20.499354149896 | etot = -16.6738464933205 -983000 ekin = 2.75061857015335 | erot = 1.7944840218308 | epot = -20.5241519929379 | etot = -15.9790494009537 -984000 ekin = 3.65069712553538 | erot = 2.64237329124735 | epot = -20.6374699142713 | etot = -14.3443994974885 -985000 ekin = 2.95637321931061 | erot = 2.18846412126771 | epot = -20.8122975273334 | etot = -15.6674601867551 -986000 ekin = 2.87072902054599 | erot = 2.18810434250117 | epot = -20.9390290724606 | etot = -15.8801957094134 -987000 ekin = 3.37463328642758 | erot = 2.53713666674669 | epot = -21.0098323012659 | etot = -15.0980623480916 -988000 ekin = 3.45107854450337 | erot = 3.23625536313168 | epot = -21.0554260480417 | etot = -14.3680921404067 -989000 ekin = 2.83591404363755 | erot = 2.20564156324815 | epot = -21.19499265416 | etot = -16.1534370472743 -990000 ekin = 2.79864389348437 | erot = 1.8317842666354 | epot = -21.1880268304373 | etot = -16.5575986703175 -991000 ekin = 3.14781925181036 | erot = 3.20782471808907 | epot = -21.1115234865128 | etot = -14.7558795166134 -992000 ekin = 3.30033725309946 | erot = 2.62749912694386 | epot = -21.0030296251663 | etot = -15.0751932451229 -993000 ekin = 3.07374297249948 | erot = 2.22697230616357 | epot = -20.9385586572609 | etot = -15.6378433785979 -994000 ekin = 3.21461776403449 | erot = 2.80599707993708 | epot = -20.8790524582442 | etot = -14.8584376142727 -995000 ekin = 3.25071478747346 | erot = 1.73415439498321 | epot = -20.8037804714003 | etot = -15.8189112889436 -996000 ekin = 3.07999632962569 | erot = 3.18107550500821 | epot = -20.7805295335828 | etot = -14.5194576989489 -997000 ekin = 2.97118118001025 | erot = 3.14046656474895 | epot = -20.7334885248756 | etot = -14.6218407801164 -998000 ekin = 3.09169861594907 | erot = 1.99060706981745 | epot = -20.6553134096535 | etot = -15.573007723887 -999000 ekin = 2.0749813057658 | erot = 2.75045972766915 | epot = -20.6160915262949 | etot = -15.79065049286 -1000000 ekin = 2.07851119592056 | erot = 2.11869313853033 | epot = -20.4539417072874 | etot = -16.2567373728365 - 1000000 0.092378275 -1.3359709 0.057599499 -1.1484644 -5.0252938e-05 -Loop time of 41.7341 on 1 procs for 1000000 steps with 16 atoms - -Performance: 20702.495 tau/day, 23961.221 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 29.954 | 29.954 | 29.954 | 0.0 | 71.77 -Bond | 1.0147 | 1.0147 | 1.0147 | 0.0 | 2.43 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.32043 | 0.32043 | 0.32043 | 0.0 | 0.77 -Output | 6.9141e-06 | 6.9141e-06 | 6.9141e-06 | 0.0 | 0.00 -Modify | 10.025 | 10.025 | 10.025 | 0.0 | 24.02 -Other | | 0.4203 | | | 1.01 - -Nlocal: 16 ave 16 max 16 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 88 ave 88 max 88 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 88 -Ave neighs/atom = 5.5 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:41 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.4 deleted file mode 100644 index 54ec267735..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/log.24Mar17.duplex2.g++.4 +++ /dev/null @@ -1,1161 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.466 | 7.648 | 7.83 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 -1000 ekin = 1.34565986428024 | erot = 2.31051421234078 | epot = -24.5061991591502 | etot = -20.8500250825292 -2000 ekin = 2.15911766687235 | erot = 2.16031365874706 | epot = -24.4723177103698 | etot = -20.1528863847504 -3000 ekin = 3.26561948796015 | erot = 2.75651822936605 | epot = -24.412573068346 | etot = -18.3904353510198 -4000 ekin = 1.92438809241066 | erot = 2.12016940074985 | epot = -24.3496233970111 | etot = -20.3050659038505 -5000 ekin = 1.35986357015476 | erot = 1.99413493074226 | epot = -24.2789445616949 | etot = -20.9249460607979 -6000 ekin = 2.19432475124593 | erot = 1.74281260409078 | epot = -24.2128064295788 | etot = -20.2756690742421 -7000 ekin = 2.65619274477635 | erot = 1.74094257048458 | epot = -24.1673462333493 | etot = -19.7702109180883 -8000 ekin = 2.51333548501169 | erot = 2.34649854571052 | epot = -24.0812769481836 | etot = -19.2214429174614 -9000 ekin = 2.24506493169711 | erot = 2.0652555461504 | epot = -23.9906736063989 | etot = -19.6803531285514 -10000 ekin = 2.36632635249862 | erot = 1.79592471761529 | epot = -23.9002627850602 | etot = -19.7380117149463 -11000 ekin = 2.03296432220126 | erot = 1.687070009478 | epot = -23.8527188138995 | etot = -20.1326844822202 -12000 ekin = 2.65352743446956 | erot = 2.50226345616878 | epot = -23.8480805937578 | etot = -18.6922897031194 -13000 ekin = 1.89067421214403 | erot = 2.35043092595414 | epot = -23.7714712440931 | etot = -19.5303661059949 -14000 ekin = 1.90680463918722 | erot = 2.127459870274 | epot = -23.7545354032947 | etot = -19.7202708938335 -15000 ekin = 2.40428667481004 | erot = 2.06172433796653 | epot = -23.6726347642127 | etot = -19.2066237514361 -16000 ekin = 2.7510166356243 | erot = 1.18896277635345 | epot = -23.5745121257654 | etot = -19.6345327137876 -17000 ekin = 2.44090826892662 | erot = 2.38166706806442 | epot = -23.5888433865641 | etot = -18.766268049573 -18000 ekin = 2.16977970545217 | erot = 2.46915729098831 | epot = -23.6023194416344 | etot = -18.9633824451939 -19000 ekin = 2.19378610033861 | erot = 2.45183819484608 | epot = -23.5449084745393 | etot = -18.8992841793546 -20000 ekin = 2.07734013817241 | erot = 1.81448496219961 | epot = -23.5782673056894 | etot = -19.6864422053173 -21000 ekin = 2.27781532351243 | erot = 2.76369118136087 | epot = -23.5986545956161 | etot = -18.5571480907428 -22000 ekin = 2.69375785791379 | erot = 1.86436952967315 | epot = -23.5521083325077 | etot = -18.9939809449208 -23000 ekin = 1.99952884103097 | erot = 2.28032953163858 | epot = -23.4448504933921 | etot = -19.1649921207226 -24000 ekin = 2.19993258930349 | erot = 2.97916455146846 | epot = -23.365299008021 | etot = -18.1862018672491 -25000 ekin = 2.28089469652686 | erot = 2.97627567077201 | epot = -23.2873526827526 | etot = -18.0301823154537 -26000 ekin = 1.99390998801618 | erot = 2.79250495479073 | epot = -23.1859723519608 | etot = -18.3995574091539 -27000 ekin = 2.00992865272585 | erot = 2.66533768693446 | epot = -23.0781687640813 | etot = -18.402902424421 -28000 ekin = 2.00322172723407 | erot = 2.36418499091004 | epot = -23.0032647032354 | etot = -18.6358579850913 -29000 ekin = 2.52361436071784 | erot = 2.06140753694879 | epot = -22.9685706338047 | etot = -18.383548736138 -30000 ekin = 1.94969919616482 | erot = 2.13601590002587 | epot = -22.8657664932105 | etot = -18.7800513970198 -31000 ekin = 1.81286761012387 | erot = 2.31717861791922 | epot = -22.8372197907213 | etot = -18.7071735626782 -32000 ekin = 1.88389491638451 | erot = 2.00512246825909 | epot = -22.9321024454487 | etot = -19.0430850608051 -33000 ekin = 1.78524470387102 | erot = 1.83154598239148 | epot = -22.9538943248059 | etot = -19.3371036385434 -34000 ekin = 2.28023843988047 | erot = 3.11357086039976 | epot = -23.0617618407572 | etot = -17.6679525404769 -35000 ekin = 2.88795920533174 | erot = 1.81662227096288 | epot = -23.1342233361349 | etot = -18.4296418598403 -36000 ekin = 2.40018487148211 | erot = 2.59182059399979 | epot = -23.2153198761915 | etot = -18.2233144107096 -37000 ekin = 2.22699211630433 | erot = 1.73889017332476 | epot = -23.2291614908027 | etot = -19.2632792011736 -38000 ekin = 2.13593461964592 | erot = 3.07590136326317 | epot = -23.1607724763685 | etot = -17.9489364934594 -39000 ekin = 2.08839393640823 | erot = 2.80471150509565 | epot = -23.1352878747759 | etot = -18.242182433272 -40000 ekin = 2.94982054413846 | erot = 2.19484102372242 | epot = -23.1842229043853 | etot = -18.0395613365244 -41000 ekin = 2.47855373480178 | erot = 3.46795094832273 | epot = -23.1698888629099 | etot = -17.2233841797854 -42000 ekin = 2.57225931171306 | erot = 3.11160980977123 | epot = -23.0914425999525 | etot = -17.4075734784682 -43000 ekin = 2.16695829201326 | erot = 2.67063324875933 | epot = -22.9841690345739 | etot = -18.1465774938013 -44000 ekin = 2.3251045436594 | erot = 3.31069456451417 | epot = -22.9099977707014 | etot = -17.2741986625278 -45000 ekin = 1.8593572517472 | erot = 3.48256913429863 | epot = -22.7853293556222 | etot = -17.4434029695763 -46000 ekin = 2.59906260222482 | erot = 2.2320785378511 | epot = -22.67184319375 | etot = -17.8407020536741 -47000 ekin = 1.9041935097682 | erot = 3.39352467596442 | epot = -22.5624536061979 | etot = -17.2647354204653 -48000 ekin = 2.46191536162938 | erot = 2.50024189038396 | epot = -22.5888330081063 | etot = -17.626675756093 -49000 ekin = 3.18008619674965 | erot = 2.18329398142911 | epot = -22.6110647388653 | etot = -17.2476845606865 -50000 ekin = 2.92380640638808 | erot = 1.5483538313346 | epot = -22.6682279672282 | etot = -18.1960677295055 -51000 ekin = 2.86729503225236 | erot = 2.67529217516738 | epot = -22.6748886664557 | etot = -17.132301459036 -52000 ekin = 2.30283827457731 | erot = 1.82645474029553 | epot = -22.6607030819086 | etot = -18.5314100670358 -53000 ekin = 3.18697616339313 | erot = 1.67211265049679 | epot = -22.7158951183044 | etot = -17.8568063044145 -54000 ekin = 2.63274995193146 | erot = 1.96664130685844 | epot = -22.7877787224364 | etot = -18.1883874636465 -55000 ekin = 3.18311630681888 | erot = 2.85127254864952 | epot = -22.8390589862477 | etot = -16.8046701307793 -56000 ekin = 2.55275960671527 | erot = 3.05720384772627 | epot = -22.8187750450683 | etot = -17.2088115906267 -57000 ekin = 2.43682051944963 | erot = 3.45782031837861 | epot = -22.7770565571277 | etot = -16.8824157192995 -58000 ekin = 1.93888380963701 | erot = 2.51321017005842 | epot = -22.7135987564736 | etot = -18.2615047767781 -59000 ekin = 2.5584899615086 | erot = 3.52166542523796 | epot = -22.6623202639297 | etot = -16.5821648771831 -60000 ekin = 2.80661395039301 | erot = 2.89055248290059 | epot = -22.5801959967487 | etot = -16.8830295634551 -61000 ekin = 2.68598657973729 | erot = 2.54741083070049 | epot = -22.4806361765055 | etot = -17.2472387660677 -62000 ekin = 2.74493324548126 | erot = 2.23648307303268 | epot = -22.4129547813458 | etot = -17.4315384628319 -63000 ekin = 2.65627195091608 | erot = 2.46107949280746 | epot = -22.3986334001314 | etot = -17.2812819564079 -64000 ekin = 2.12379240032878 | erot = 2.79203441675508 | epot = -22.3495990435982 | etot = -17.4337722265143 -65000 ekin = 1.86782238979936 | erot = 2.70277079938775 | epot = -22.3710220966341 | etot = -17.800428907447 -66000 ekin = 2.74983103317414 | erot = 1.93532287297328 | epot = -22.3642892005435 | etot = -17.6791352943961 -67000 ekin = 2.51092055125345 | erot = 2.46618624666164 | epot = -22.3997780561407 | etot = -17.4226712582257 -68000 ekin = 2.95469759114172 | erot = 1.97026833535316 | epot = -22.465077041847 | etot = -17.5401111153521 -69000 ekin = 2.60179538487173 | erot = 2.27022574694886 | epot = -22.4013876082186 | etot = -17.529366476398 -70000 ekin = 2.38624525335423 | erot = 2.82124637267728 | epot = -22.3329612644329 | etot = -17.1254696384013 -71000 ekin = 2.62641919853461 | erot = 2.89332429923839 | epot = -22.3324946257813 | etot = -16.8127511280083 -72000 ekin = 2.93199679301318 | erot = 2.83600213853038 | epot = -22.4418753486332 | etot = -16.6738764170897 -73000 ekin = 2.20521324648382 | erot = 3.0506384171445 | epot = -22.5078076718832 | etot = -17.2519560082549 -74000 ekin = 2.16594519672766 | erot = 2.82993872672918 | epot = -22.5187768617569 | etot = -17.5228929383001 -75000 ekin = 1.52753824412461 | erot = 1.91758574309003 | epot = -22.6434864113427 | etot = -19.198362424128 -76000 ekin = 1.89477517532868 | erot = 2.83145375092217 | epot = -22.7507099037207 | etot = -18.0244809774699 -77000 ekin = 2.84722966394523 | erot = 3.20523918524771 | epot = -22.8263123696514 | etot = -16.7738435204585 -78000 ekin = 2.44900478430451 | erot = 2.80964787966682 | epot = -22.8119237303111 | etot = -17.5532710663397 -79000 ekin = 2.16549328835506 | erot = 1.67531288307153 | epot = -22.8278994273521 | etot = -18.9870932559255 -80000 ekin = 2.38929173610466 | erot = 2.58355997375491 | epot = -22.7453472674483 | etot = -17.7724955575887 -81000 ekin = 2.74182188148999 | erot = 1.92580771183151 | epot = -22.6872721828913 | etot = -18.0196425895698 -82000 ekin = 1.90254633515813 | erot = 1.70958501101745 | epot = -22.5904815431895 | etot = -18.9783501970139 -83000 ekin = 1.63862423461032 | erot = 1.87668722448406 | epot = -22.5030898166236 | etot = -18.9877783575292 -84000 ekin = 1.65768128899531 | erot = 2.10186039233844 | epot = -22.4199436013011 | etot = -18.6604019199674 -85000 ekin = 2.40787065796921 | erot = 2.04965431830703 | epot = -22.3401854879212 | etot = -17.882660511645 -86000 ekin = 2.51073542405177 | erot = 1.79768841940749 | epot = -22.3948638623201 | etot = -18.0864400188608 -87000 ekin = 2.13729284484532 | erot = 1.97886338867606 | epot = -22.4457225556767 | etot = -18.3295663221553 -88000 ekin = 1.7511616822056 | erot = 2.36434608342924 | epot = -22.4232555875236 | etot = -18.3077478218887 -89000 ekin = 1.85498863251071 | erot = 3.29466014836527 | epot = -22.4615925106509 | etot = -17.3119437297749 -90000 ekin = 2.22730928223451 | erot = 2.36761183779185 | epot = -22.5498488806969 | etot = -17.9549277606706 -91000 ekin = 2.40026068010467 | erot = 3.1312454261103 | epot = -22.5445138059197 | etot = -17.0130076997047 -92000 ekin = 2.69184894487886 | erot = 3.01111638487596 | epot = -22.5488335054242 | etot = -16.8458681756693 -93000 ekin = 3.04452081584098 | erot = 3.0289315825034 | epot = -22.4857514998612 | etot = -16.4122991015169 -94000 ekin = 3.21054020599498 | erot = 1.87554208928457 | epot = -22.58235617796 | etot = -17.4962738826805 -95000 ekin = 3.49164555041805 | erot = 2.89107259754101 | epot = -22.651746211573 | etot = -16.2690280636139 -96000 ekin = 2.8961145983777 | erot = 2.38403691628048 | epot = -22.6376886129393 | etot = -17.3575370982811 -97000 ekin = 1.94001816357315 | erot = 2.09603205774619 | epot = -22.6212143095229 | etot = -18.5851640882036 -98000 ekin = 2.21812472183551 | erot = 3.66512951907029 | epot = -22.5400207863669 | etot = -16.6567665454611 -99000 ekin = 1.96304801418099 | erot = 2.78092002528644 | epot = -22.4500077741119 | etot = -17.7060397346444 -100000 ekin = 1.78146596589238 | erot = 2.66087063973067 | epot = -22.3806285021859 | etot = -17.9382918965629 -101000 ekin = 2.13576431486591 | erot = 2.39189697670582 | epot = -22.3671198416411 | etot = -17.8394585500694 -102000 ekin = 1.54265458925823 | erot = 2.31301627489861 | epot = -22.3596033820568 | etot = -18.5039325179 -103000 ekin = 1.6493299781162 | erot = 2.82700146777614 | epot = -22.4044472055819 | etot = -17.9281157596895 -104000 ekin = 1.88425130865015 | erot = 3.36695629589132 | epot = -22.4614117565727 | etot = -17.2102041520312 -105000 ekin = 2.0873628063424 | erot = 1.99902589912497 | epot = -22.4857870795246 | etot = -18.3993983740572 -106000 ekin = 2.85192200005481 | erot = 1.96124421177818 | epot = -22.4885148263279 | etot = -17.6753486144949 -107000 ekin = 2.27699301124082 | erot = 1.54572940373457 | epot = -22.4328687856414 | etot = -18.610146370666 -108000 ekin = 2.43341212242248 | erot = 1.7101452395327 | epot = -22.4750159709763 | etot = -18.3314586090212 -109000 ekin = 2.3240302459673 | erot = 2.92730273400661 | epot = -22.4544447404649 | etot = -17.203111760491 -110000 ekin = 2.75939007795593 | erot = 2.3726124845783 | epot = -22.4066316113363 | etot = -17.2746290488021 -111000 ekin = 2.30202775259985 | erot = 2.09098171366697 | epot = -22.340628179725 | etot = -17.9476187134581 -112000 ekin = 2.89672803093986 | erot = 1.84536318388285 | epot = -22.189229344937 | etot = -17.4471381301143 -113000 ekin = 2.802868120203 | erot = 1.68317583122193 | epot = -22.1739192926257 | etot = -17.6878753412008 -114000 ekin = 3.41134331362353 | erot = 2.66279011393036 | epot = -22.2993892060878 | etot = -16.2252557785339 -115000 ekin = 3.04096848543598 | erot = 1.72164164793761 | epot = -22.3101669297006 | etot = -17.547556796327 -116000 ekin = 3.18249263106367 | erot = 3.21872780579631 | epot = -22.3766120310369 | etot = -15.975391594177 -117000 ekin = 3.04033644338918 | erot = 2.4163277414929 | epot = -22.3406101341932 | etot = -16.8839459493111 -118000 ekin = 3.2297663279461 | erot = 1.46870208555873 | epot = -22.262910646297 | etot = -17.5644422327922 -119000 ekin = 2.35815331598994 | erot = 3.07464675916892 | epot = -22.21629705762 | etot = -16.7834969824611 -120000 ekin = 1.93901604028919 | erot = 2.21087803685818 | epot = -22.1596747789505 | etot = -18.0097807018031 -121000 ekin = 1.94791988346889 | erot = 3.06697908719322 | epot = -22.1473490758084 | etot = -17.1324501051462 -122000 ekin = 1.69642311218451 | erot = 1.71065948591522 | epot = -22.235021693017 | etot = -18.8279390949172 -123000 ekin = 1.74537927001903 | erot = 2.31042772730644 | epot = -22.3250546948603 | etot = -18.2692476975348 -124000 ekin = 2.74229806685692 | erot = 1.94346011848795 | epot = -22.3376426377462 | etot = -17.6518844524013 -125000 ekin = 2.77628031613761 | erot = 1.95737420539167 | epot = -22.3561899601979 | etot = -17.6225354386686 -126000 ekin = 2.05898577806786 | erot = 1.47493157618749 | epot = -22.3918669376121 | etot = -18.8579495833568 -127000 ekin = 1.88620727578863 | erot = 1.58698481884328 | epot = -22.3753405588623 | etot = -18.9021484642304 -128000 ekin = 1.65027256647601 | erot = 1.87589048163674 | epot = -22.3576574967822 | etot = -18.8314944486694 -129000 ekin = 2.51771860981078 | erot = 2.38745668871875 | epot = -22.3622404512641 | etot = -17.4570651527346 -130000 ekin = 1.60778116741171 | erot = 2.81983062254802 | epot = -22.3043401463426 | etot = -17.8767283563829 -131000 ekin = 2.27966529707091 | erot = 2.29465997580789 | epot = -22.1860056729234 | etot = -17.6116804000446 -132000 ekin = 2.94605151024306 | erot = 2.34727265039698 | epot = -22.1004107829512 | etot = -16.8070866223112 -133000 ekin = 2.00184520718143 | erot = 2.13597622566089 | epot = -22.0860804435183 | etot = -17.948259010676 -134000 ekin = 1.54536260297594 | erot = 2.86019181856985 | epot = -22.0324797134652 | etot = -17.6269252919194 -135000 ekin = 1.7899169229158 | erot = 2.40585579784188 | epot = -22.0564792277569 | etot = -17.8607065069992 -136000 ekin = 1.63315069688348 | erot = 2.13968964990471 | epot = -22.0645410751455 | etot = -18.2917007283573 -137000 ekin = 2.36475220491125 | erot = 1.93075105476848 | epot = -22.101884847306 | etot = -17.8063815876262 -138000 ekin = 2.9554682114977 | erot = 1.58329215843879 | epot = -22.158920719349 | etot = -17.6201603494125 -139000 ekin = 3.18559985564368 | erot = 2.24978247982886 | epot = -22.2766713145625 | etot = -16.84128897909 -140000 ekin = 2.25331500051846 | erot = 3.04264261269698 | epot = -22.4413209794807 | etot = -17.1453633662653 -141000 ekin = 1.8939664036255 | erot = 3.12730191483887 | epot = -22.6943708703895 | etot = -17.6731025519251 -142000 ekin = 2.48698722341786 | erot = 2.50204475841097 | epot = -22.8022645411412 | etot = -17.8132325593124 -143000 ekin = 2.39031114354901 | erot = 2.72027514737474 | epot = -22.7789363640121 | etot = -17.6683500730884 -144000 ekin = 1.93009742932803 | erot = 2.68112648713777 | epot = -22.6600942975092 | etot = -18.0488703810434 -145000 ekin = 1.81543048110687 | erot = 1.73927524532866 | epot = -22.6290694904769 | etot = -19.0743637640413 -146000 ekin = 2.4125202126428 | erot = 2.0856902293417 | epot = -22.560764077018 | etot = -18.0625536350335 -147000 ekin = 1.44642974398304 | erot = 1.86921415702345 | epot = -22.4437745695725 | etot = -19.128130668566 -148000 ekin = 1.94224767107089 | erot = 2.57935525538892 | epot = -22.4110987100046 | etot = -17.8894957835448 -149000 ekin = 2.03195649040454 | erot = 3.31786202502786 | epot = -22.312227106758 | etot = -16.9624085913256 -150000 ekin = 2.47792894576431 | erot = 2.68612874200302 | epot = -22.1392843642772 | etot = -16.9752266765099 -151000 ekin = 2.75692645092955 | erot = 1.88122565848133 | epot = -21.9329416416722 | etot = -17.2947895322613 -152000 ekin = 2.7753834344323 | erot = 1.78115734250796 | epot = -21.745072490984 | etot = -17.1885317140438 -153000 ekin = 3.09316888168833 | erot = 1.80744228044955 | epot = -21.6451473427313 | etot = -16.7445361805934 -154000 ekin = 2.31433640945477 | erot = 2.19304386678896 | epot = -21.5946356595636 | etot = -17.0872553833199 -155000 ekin = 1.94169881401553 | erot = 2.67959698479411 | epot = -21.6941053409436 | etot = -17.0728095421339 -156000 ekin = 2.69151609119638 | erot = 2.25048211983205 | epot = -21.7610571974251 | etot = -16.8190589863966 -157000 ekin = 3.89507004263776 | erot = 2.74501587672577 | epot = -21.8157728797742 | etot = -15.1756869604107 -158000 ekin = 2.88173407476086 | erot = 2.69702262693026 | epot = -21.8854957137509 | etot = -16.3067390120597 -159000 ekin = 3.15173323195919 | erot = 2.61743473710129 | epot = -21.8245251626835 | etot = -16.055357193623 -160000 ekin = 2.54983562435716 | erot = 3.26037467643908 | epot = -21.8527884226329 | etot = -16.0425781218366 -161000 ekin = 2.47569624391789 | erot = 2.44418416527208 | epot = -21.7973550812186 | etot = -16.8774746720287 -162000 ekin = 2.9422872213738 | erot = 2.59784970938383 | epot = -21.7813251561028 | etot = -16.2411882253452 -163000 ekin = 3.25812805712343 | erot = 2.2523933100784 | epot = -21.820089307521 | etot = -16.3095679403192 -164000 ekin = 3.52786799143084 | erot = 2.22392713421413 | epot = -21.7646946348872 | etot = -16.0128995092422 -165000 ekin = 2.47839548873417 | erot = 2.58744140761171 | epot = -21.679095294504 | etot = -16.6132583981582 -166000 ekin = 2.14435847552791 | erot = 3.04732688845808 | epot = -21.6219995979976 | etot = -16.4303142340116 -167000 ekin = 2.77664659649902 | erot = 2.89037999868329 | epot = -21.5339928834654 | etot = -15.8669662882831 -168000 ekin = 1.74464407802389 | erot = 2.78052653338967 | epot = -21.4288999288374 | etot = -16.9037293174239 -169000 ekin = 1.80689129093329 | erot = 2.46391033708927 | epot = -21.4128285618694 | etot = -17.1420269338468 -170000 ekin = 1.6949814594151 | erot = 2.88911238881154 | epot = -21.4319269866203 | etot = -16.8478331383937 -171000 ekin = 2.15326316196645 | erot = 1.61346547801869 | epot = -21.2861470779283 | etot = -17.5194184379432 -172000 ekin = 1.67904916339532 | erot = 2.36509147316375 | epot = -21.1250864759441 | etot = -17.080945839385 -173000 ekin = 2.05349972960735 | erot = 2.1886466510775 | epot = -21.0744450592631 | etot = -16.8322986785782 -174000 ekin = 2.49402795941962 | erot = 3.10392317000879 | epot = -20.9332609664624 | etot = -15.335309837034 -175000 ekin = 2.60611029063986 | erot = 2.90993176119182 | epot = -20.8533230180668 | etot = -15.3372809662352 -176000 ekin = 2.14535974511637 | erot = 2.67710511021539 | epot = -20.8508037764829 | etot = -16.0283389211511 -177000 ekin = 2.82654664242577 | erot = 2.80647819657321 | epot = -20.9303681620826 | etot = -15.2973433230836 -178000 ekin = 3.17006270723388 | erot = 1.88204403688962 | epot = -21.0665744865168 | etot = -16.0144677423933 -179000 ekin = 2.33834827123178 | erot = 2.84870047825869 | epot = -21.1082901606943 | etot = -15.9212414112039 -180000 ekin = 2.39362550925045 | erot = 2.94575326168227 | epot = -21.1089731290028 | etot = -15.7695943580701 -181000 ekin = 2.78703231260152 | erot = 3.29998898392537 | epot = -21.0761138110654 | etot = -14.9890925145385 -182000 ekin = 3.02338391239199 | erot = 2.32533107462881 | epot = -21.0444377426861 | etot = -15.6957227556653 -183000 ekin = 2.44126401356994 | erot = 2.19853056632819 | epot = -20.8846280234405 | etot = -16.2448334435424 -184000 ekin = 2.56448211253962 | erot = 2.77267067014066 | epot = -20.6657911214549 | etot = -15.3286383387746 -185000 ekin = 2.16427057092672 | erot = 1.95880146934286 | epot = -20.5647658775173 | etot = -16.4416938372477 -186000 ekin = 2.06536030915311 | erot = 3.14593463137772 | epot = -20.4537584304771 | etot = -15.2424634899463 -187000 ekin = 2.43846121057803 | erot = 1.93593042270703 | epot = -20.4775765627296 | etot = -16.1031849294445 -188000 ekin = 2.28827356508696 | erot = 2.89699235589217 | epot = -20.6028880527163 | etot = -15.4176221317372 -189000 ekin = 1.67206333515898 | erot = 3.05807378739729 | epot = -20.6184572736204 | etot = -15.8883201510642 -190000 ekin = 1.96995062226968 | erot = 2.94301967439401 | epot = -20.6150380630742 | etot = -15.7020677664105 -191000 ekin = 2.31558303301195 | erot = 2.65062200614568 | epot = -20.5845049099943 | etot = -15.6182998708367 -192000 ekin = 3.58105122568799 | erot = 2.89866835149675 | epot = -20.555036456006 | etot = -14.0753168788213 -193000 ekin = 2.69738971383614 | erot = 3.08390984677749 | epot = -20.5718609412494 | etot = -14.7905613806358 -194000 ekin = 2.65963556416735 | erot = 2.28486501061268 | epot = -20.4488832942326 | etot = -15.5043827194526 -195000 ekin = 1.85289053427901 | erot = 2.65318671222087 | epot = -20.3816844231208 | etot = -15.8756071766209 -196000 ekin = 2.28257181147918 | erot = 2.31175601065462 | epot = -20.4051132325268 | etot = -15.810785410393 -197000 ekin = 2.49770460330585 | erot = 2.55587879440511 | epot = -20.4716020539923 | etot = -15.4180186562814 -198000 ekin = 2.01700960777427 | erot = 1.51922008609382 | epot = -20.4907970823156 | etot = -16.9545673884475 -199000 ekin = 1.50027537520987 | erot = 2.19604462463446 | epot = -20.5138434458212 | etot = -16.8175234459769 -200000 ekin = 1.64850512926723 | erot = 2.4596633548257 | epot = -20.4934420686449 | etot = -16.385273584552 -201000 ekin = 2.62997533994907 | erot = 2.61637339049483 | epot = -20.5569645618355 | etot = -15.3106158313916 -202000 ekin = 2.3089517547524 | erot = 2.5565329388766 | epot = -20.6262537118088 | etot = -15.7607690181798 -203000 ekin = 1.64768887888551 | erot = 2.11556417528285 | epot = -20.6617888215465 | etot = -16.8985357673782 -204000 ekin = 2.01924097320136 | erot = 1.97748949636931 | epot = -20.7002685556682 | etot = -16.7035380860975 -205000 ekin = 2.97656554045711 | erot = 3.25408007971553 | epot = -20.9425038008424 | etot = -14.7118581806698 -206000 ekin = 2.56613069661945 | erot = 2.21624244224461 | epot = -21.0621833598182 | etot = -16.2798102209542 -207000 ekin = 3.44850636848559 | erot = 2.48816050856267 | epot = -21.2038849430867 | etot = -15.2672180660384 -208000 ekin = 2.54208934028226 | erot = 2.22605232144502 | epot = -21.3476404533667 | etot = -16.5794987916394 -209000 ekin = 3.84151461096732 | erot = 2.16534559513903 | epot = -21.4932373455843 | etot = -15.486377139478 -210000 ekin = 3.06873591712904 | erot = 2.24760815652574 | epot = -21.6427793540355 | etot = -16.3264352803807 -211000 ekin = 1.64176280869923 | erot = 2.17721976802011 | epot = -21.8130439048272 | etot = -17.9940613281078 -212000 ekin = 2.5985934050661 | erot = 2.41520703335869 | epot = -21.9964648294563 | etot = -16.9826643910315 -213000 ekin = 2.51136104390039 | erot = 1.99503544560738 | epot = -22.161492842604 | etot = -17.6550963530962 -214000 ekin = 2.77089845962619 | erot = 3.17247228684199 | epot = -22.208715104286 | etot = -16.2653443578179 -215000 ekin = 2.53408528186206 | erot = 1.84963848601798 | epot = -22.1148567901871 | etot = -17.7311330223071 -216000 ekin = 2.52671619876928 | erot = 2.77873014449688 | epot = -22.1370884570131 | etot = -16.8316421137469 -217000 ekin = 2.50171921508545 | erot = 1.89238935467003 | epot = -22.226079201001 | etot = -17.8319706312455 -218000 ekin = 2.43936294263937 | erot = 2.41974828067303 | epot = -22.2447049583244 | etot = -17.385593735012 -219000 ekin = 2.30221269367205 | erot = 2.65120674162376 | epot = -22.2807164841742 | etot = -17.3272970488784 -220000 ekin = 1.70065256620687 | erot = 2.34758543213915 | epot = -22.2809933538228 | etot = -18.2327553554768 -221000 ekin = 2.09298237125575 | erot = 2.47886481595909 | epot = -22.267957001012 | etot = -17.6961098137972 -222000 ekin = 1.58469709510937 | erot = 2.14490786301286 | epot = -22.1867412404881 | etot = -18.4571362823659 -223000 ekin = 1.83926923346352 | erot = 1.89456034969536 | epot = -22.131893392038 | etot = -18.3980638088791 -224000 ekin = 2.59583657132575 | erot = 2.93869915115497 | epot = -22.1425986650605 | etot = -16.6080629425798 -225000 ekin = 3.29351563254165 | erot = 2.8433953581414 | epot = -22.12757310355 | etot = -15.9906621128669 -226000 ekin = 3.03135339447922 | erot = 2.08293143143602 | epot = -22.15283624886 | etot = -17.0385514229448 -227000 ekin = 2.50176282992082 | erot = 3.15084128846395 | epot = -22.2250438959744 | etot = -16.5724397775897 -228000 ekin = 2.32013498351673 | erot = 2.67554406359438 | epot = -22.3177515383563 | etot = -17.3220724912452 -229000 ekin = 2.89545450975319 | erot = 2.90735055857068 | epot = -22.4361496683348 | etot = -16.6333446000109 -230000 ekin = 2.28321229485933 | erot = 3.48420465632866 | epot = -22.548785995051 | etot = -16.781369043863 -231000 ekin = 2.0778632375453 | erot = 3.10673973696435 | epot = -22.5896609633152 | etot = -17.4050579888055 -232000 ekin = 2.1202374109541 | erot = 1.98747810033066 | epot = -22.5738924334392 | etot = -18.4661769221544 -233000 ekin = 2.33571877855589 | erot = 2.83585090202738 | epot = -22.5402065195541 | etot = -17.3686368389708 -234000 ekin = 2.10578223747154 | erot = 2.07381218733636 | epot = -22.5507693150833 | etot = -18.3711748902754 -235000 ekin = 2.44321041214394 | erot = 2.80846352304319 | epot = -22.5606929563186 | etot = -17.3090190211315 -236000 ekin = 2.93630791731799 | erot = 3.0631591853173 | epot = -22.4860653874721 | etot = -16.4865982848369 -237000 ekin = 3.21264879506079 | erot = 3.268665084783 | epot = -22.3683553437861 | etot = -15.8870414639424 -238000 ekin = 2.46595539123277 | erot = 2.32502019506661 | epot = -22.3144456769666 | etot = -17.5234700906672 -239000 ekin = 2.10325864915823 | erot = 2.47631139904043 | epot = -22.3011392921811 | etot = -17.7215692439824 -240000 ekin = 1.77270999777839 | erot = 2.60141429112665 | epot = -22.2344206081543 | etot = -17.8602963192493 -241000 ekin = 1.94952922244078 | erot = 1.39715216866764 | epot = -22.2207225048761 | etot = -18.8740411137677 -242000 ekin = 3.05687991591411 | erot = 2.00862394928707 | epot = -22.2213200390944 | etot = -17.1558161738932 -243000 ekin = 2.86735711945299 | erot = 1.79948118674679 | epot = -22.2697610280427 | etot = -17.6029227218429 -244000 ekin = 2.00525854269389 | erot = 2.36445341214555 | epot = -22.2726788994494 | etot = -17.90296694461 -245000 ekin = 2.28011102404837 | erot = 2.78700520532799 | epot = -22.2995433574618 | etot = -17.2324271280854 -246000 ekin = 2.06819738789813 | erot = 2.24624952782285 | epot = -22.2551680110138 | etot = -17.9407210952928 -247000 ekin = 1.69964711256213 | erot = 3.22260619239828 | epot = -22.1916408256116 | etot = -17.2693875206512 -248000 ekin = 1.92997585194759 | erot = 3.61155944514372 | epot = -22.0096484177853 | etot = -16.468113120694 -249000 ekin = 2.16278530892653 | erot = 3.27771891456707 | epot = -21.8856058980727 | etot = -16.4451016745791 -250000 ekin = 2.32204054211024 | erot = 2.46317574116846 | epot = -21.8028762710591 | etot = -17.0176599877804 -251000 ekin = 1.23768964067254 | erot = 2.241505337621 | epot = -21.7630657074039 | etot = -18.2838707291104 -252000 ekin = 1.79818833522214 | erot = 2.12556386664126 | epot = -21.7586349357284 | etot = -17.8348827338651 -253000 ekin = 2.12809689846393 | erot = 2.59685639208402 | epot = -21.7226495687758 | etot = -16.9976962782278 -254000 ekin = 2.46813261968532 | erot = 2.0039181266287 | epot = -21.7113918037362 | etot = -17.2393410574222 -255000 ekin = 2.3156672908729 | erot = 2.03619058028115 | epot = -21.7265453183256 | etot = -17.3746874471716 -256000 ekin = 2.87223929491326 | erot = 2.61790933826623 | epot = -21.659332511914 | etot = -16.1691838787345 -257000 ekin = 2.85756762932927 | erot = 2.081746739162 | epot = -21.6161821054731 | etot = -16.6768677369818 -258000 ekin = 2.06111021157734 | erot = 2.32748664972428 | epot = -21.5132485706726 | etot = -17.124651709371 -259000 ekin = 2.23305784057759 | erot = 2.88843859953734 | epot = -21.5040039667854 | etot = -16.3825075266705 -260000 ekin = 2.49862397932476 | erot = 2.38336885848388 | epot = -21.488210637319 | etot = -16.6062177995103 -261000 ekin = 2.09280296934734 | erot = 2.39632540029207 | epot = -21.4325331777953 | etot = -16.9434048081559 -262000 ekin = 2.33576913564289 | erot = 2.67273419354396 | epot = -21.3832241450035 | etot = -16.3747208158166 -263000 ekin = 2.20536189489354 | erot = 2.71530627040564 | epot = -21.4329409070981 | etot = -16.5122727417989 -264000 ekin = 2.2858247573423 | erot = 2.76839346219664 | epot = -21.3931084431599 | etot = -16.338890223621 -265000 ekin = 1.70928536820409 | erot = 1.79395423442894 | epot = -21.2682341921474 | etot = -17.7649945895143 -266000 ekin = 2.48721735474525 | erot = 2.08745460533224 | epot = -21.1746995817337 | etot = -16.6000276216562 -267000 ekin = 2.69283567987774 | erot = 2.10301910407212 | epot = -21.1705161290062 | etot = -16.3746613450563 -268000 ekin = 3.00000233743719 | erot = 2.80954585635721 | epot = -21.164752112651 | etot = -15.3552039188566 -269000 ekin = 3.50713810468527 | erot = 2.35763817348001 | epot = -21.1537110688984 | etot = -15.2889347907331 -270000 ekin = 3.50686942248863 | erot = 1.86462765875889 | epot = -21.1925508822801 | etot = -15.8210538010326 -271000 ekin = 3.57026082273992 | erot = 2.08172467795386 | epot = -21.2775817182941 | etot = -15.6255962176003 -272000 ekin = 2.4484752533773 | erot = 3.08466485039761 | epot = -21.3619851902072 | etot = -15.8288450864323 -273000 ekin = 2.39748176307242 | erot = 3.13355050446718 | epot = -21.4386234252579 | etot = -15.9075911577183 -274000 ekin = 2.48208144431864 | erot = 2.00552494041966 | epot = -21.4476232953882 | etot = -16.9600169106499 -275000 ekin = 2.48721081149369 | erot = 3.05413598233601 | epot = -21.4713984309063 | etot = -15.9300516370766 -276000 ekin = 2.82709589676966 | erot = 2.88384306577856 | epot = -21.4434590118161 | etot = -15.7325200492679 -277000 ekin = 2.23479555963312 | erot = 2.20310851955638 | epot = -21.3883073251199 | etot = -16.9504032459304 -278000 ekin = 2.81418916407429 | erot = 3.24537052192614 | epot = -21.3155364074003 | etot = -15.2559767213999 -279000 ekin = 2.57366525203698 | erot = 1.81705578305927 | epot = -21.2862101233851 | etot = -16.8954890882888 -280000 ekin = 2.41063464320149 | erot = 1.76282693004731 | epot = -21.254962528096 | etot = -17.0815009548472 -281000 ekin = 2.58126226070486 | erot = 2.29258221702166 | epot = -21.306394928225 | etot = -16.4325504504985 -282000 ekin = 3.02016903398222 | erot = 2.43094523890342 | epot = -21.4340900724633 | etot = -15.9829757995777 -283000 ekin = 2.59269149790331 | erot = 2.11330689541034 | epot = -21.6296517079942 | etot = -16.9236533146805 -284000 ekin = 2.51704243107537 | erot = 3.13156683036761 | epot = -21.7452694753527 | etot = -16.0966602139097 -285000 ekin = 2.4236537221525 | erot = 1.77228258125504 | epot = -21.8557019037769 | etot = -17.6597656003694 -286000 ekin = 1.9446719552166 | erot = 2.0366097411672 | epot = -21.901435736722 | etot = -17.9201540403382 -287000 ekin = 2.56319670376172 | erot = 2.60867050510164 | epot = -21.90675099349 | etot = -16.7348837846266 -288000 ekin = 2.19574207425737 | erot = 1.69805542160022 | epot = -21.8143855675961 | etot = -17.9205880717385 -289000 ekin = 2.35326278833026 | erot = 1.65840109676147 | epot = -21.6976038565284 | etot = -17.6859399714367 -290000 ekin = 2.35194561775049 | erot = 1.99444238353746 | epot = -21.6551012116075 | etot = -17.3087132103195 -291000 ekin = 1.48585281531715 | erot = 2.66475825861553 | epot = -21.56036793472 | etot = -17.4097568607873 -292000 ekin = 2.10739944756451 | erot = 2.42809824662637 | epot = -21.4451596117638 | etot = -16.9096619175729 -293000 ekin = 2.11618090223715 | erot = 1.86694554151197 | epot = -21.3593625692767 | etot = -17.3762361255276 -294000 ekin = 2.06078090566331 | erot = 2.13941873359477 | epot = -21.232623310094 | etot = -17.032423670836 -295000 ekin = 2.11467178034793 | erot = 2.32673436675181 | epot = -21.1123588667461 | etot = -16.6709527196463 -296000 ekin = 1.53087058859332 | erot = 2.94008409149155 | epot = -21.2112197533847 | etot = -16.7402650732999 -297000 ekin = 2.52732986791198 | erot = 2.18380855337859 | epot = -21.1955190508786 | etot = -16.484380629588 -298000 ekin = 1.89033945823198 | erot = 2.02521913176 | epot = -21.2593750718295 | etot = -17.3438164818375 -299000 ekin = 1.87142873048437 | erot = 1.66404563221549 | epot = -21.2919162310488 | etot = -17.7564418683489 -300000 ekin = 2.23872615546787 | erot = 1.50807257618897 | epot = -21.3339204593826 | etot = -17.5871217277257 -301000 ekin = 1.99965506724557 | erot = 2.00145094516844 | epot = -21.4707589194324 | etot = -17.4696529070184 -302000 ekin = 1.76370349732521 | erot = 2.23787708901489 | epot = -21.5675275978257 | etot = -17.5659470114856 -303000 ekin = 2.69610887251788 | erot = 1.69957221429741 | epot = -21.5563765448092 | etot = -17.1606954579939 -304000 ekin = 2.55447143501921 | erot = 2.0206081309035 | epot = -21.5692327321341 | etot = -16.9941531662114 -305000 ekin = 2.38230604232717 | erot = 2.31489374428113 | epot = -21.5335950166329 | etot = -16.8363952300246 -306000 ekin = 2.07785475765118 | erot = 2.4523066068597 | epot = -21.4550895345846 | etot = -16.9249281700737 -307000 ekin = 3.17130424567277 | erot = 3.29574614566805 | epot = -21.4151535289882 | etot = -14.9481031376474 -308000 ekin = 3.40959217051674 | erot = 2.68389483402973 | epot = -21.4778643688409 | etot = -15.3843773642944 -309000 ekin = 2.36068264180092 | erot = 2.91715332823342 | epot = -21.5794336507741 | etot = -16.3015976807397 -310000 ekin = 2.4995235722922 | erot = 2.36028950896138 | epot = -21.5982142524176 | etot = -16.738401171164 -311000 ekin = 2.53288726180906 | erot = 2.29596940545853 | epot = -21.6418553661546 | etot = -16.8129986988871 -312000 ekin = 2.05123272208704 | erot = 2.92023923411837 | epot = -21.7377547517075 | etot = -16.7662827955021 -313000 ekin = 1.80834719374888 | erot = 2.29357283142129 | epot = -21.7993116362532 | etot = -17.697391611083 -314000 ekin = 2.30684015099018 | erot = 2.20859462712274 | epot = -21.8029398081388 | etot = -17.2875050300258 -315000 ekin = 1.86413924486173 | erot = 2.14748794238474 | epot = -21.8550418960799 | etot = -17.8434147088334 -316000 ekin = 2.20558056533517 | erot = 3.03447287931583 | epot = -21.8868412075708 | etot = -16.6467877629198 -317000 ekin = 2.4782093112548 | erot = 3.56870099099488 | epot = -21.9902146748518 | etot = -15.9433043726021 -318000 ekin = 2.3658234380168 | erot = 3.01887804681554 | epot = -22.1178732891163 | etot = -16.7331718042839 -319000 ekin = 2.40464629760757 | erot = 3.15910789488742 | epot = -22.2289401281564 | etot = -16.6651859356614 -320000 ekin = 1.80206494109346 | erot = 2.83527990295434 | epot = -22.3120263401861 | etot = -17.6746814961383 -321000 ekin = 2.91146951948762 | erot = 2.25772268449839 | epot = -22.3029455835946 | etot = -17.1337533796086 -322000 ekin = 2.8226351296685 | erot = 2.67950826833978 | epot = -22.3041650189947 | etot = -16.8020216209864 -323000 ekin = 2.067323568424 | erot = 2.31975284775299 | epot = -22.3338840353559 | etot = -17.9468076191789 -324000 ekin = 2.6012747278288 | erot = 2.58351861537748 | epot = -22.3215168526944 | etot = -17.1367235094881 -325000 ekin = 3.45560055552843 | erot = 2.50162515355503 | epot = -22.1825527777624 | etot = -16.225327068679 -326000 ekin = 3.51422890604519 | erot = 2.84426061018009 | epot = -22.0201095272525 | etot = -15.6616200110272 -327000 ekin = 2.63551490316293 | erot = 2.20570805472231 | epot = -21.9384479867006 | etot = -17.0972250288154 -328000 ekin = 1.8043914440792 | erot = 2.37599512200968 | epot = -21.8619803976419 | etot = -17.681593831553 -329000 ekin = 2.15766181563134 | erot = 2.45286496267963 | epot = -21.8518523862112 | etot = -17.2413256079002 -330000 ekin = 1.8483425992464 | erot = 2.03367429366602 | epot = -21.7684095252419 | etot = -17.8863926323295 -331000 ekin = 2.3531484336258 | erot = 1.80165819621477 | epot = -21.7197009414848 | etot = -17.5648943116443 -332000 ekin = 1.67855936307207 | erot = 2.53341219651313 | epot = -21.7336434355881 | etot = -17.5216718760029 -333000 ekin = 1.60376334688456 | erot = 2.14058675025446 | epot = -21.835637958395 | etot = -18.091287861256 -334000 ekin = 2.26551990081779 | erot = 2.62486254825419 | epot = -21.879497107847 | etot = -16.989114658775 -335000 ekin = 2.91208137486082 | erot = 3.1105287045201 | epot = -21.9161692767172 | etot = -15.8935591973362 -336000 ekin = 2.73132973682385 | erot = 2.56213100489406 | epot = -21.8312488568505 | etot = -16.5377881151326 -337000 ekin = 3.15411918141902 | erot = 3.87512819831196 | epot = -21.9061152574783 | etot = -14.8768678777473 -338000 ekin = 2.33141760424507 | erot = 2.1321194508968 | epot = -21.9137461112381 | etot = -17.4502090560962 -339000 ekin = 1.71915361945719 | erot = 2.31270220754043 | epot = -21.904207477372 | etot = -17.8723516503744 -340000 ekin = 1.62199393011805 | erot = 3.16990972384469 | epot = -21.8898233676232 | etot = -17.0979197136605 -341000 ekin = 1.71588704296646 | erot = 3.17642860992461 | epot = -21.834555812815 | etot = -16.9422401599239 -342000 ekin = 1.82178091247658 | erot = 2.58875985611026 | epot = -21.7161502950573 | etot = -17.3056095264705 -343000 ekin = 3.08559255942693 | erot = 2.94813449265469 | epot = -21.7030445300997 | etot = -15.6693174780181 -344000 ekin = 2.95985387154985 | erot = 3.11547515850353 | epot = -21.6815483295521 | etot = -15.6062192994987 -345000 ekin = 2.33428072266865 | erot = 2.88044431283022 | epot = -21.6567075042344 | etot = -16.4419824687355 -346000 ekin = 2.02077664062698 | erot = 3.45936833964703 | epot = -21.5877268821218 | etot = -16.1075819018478 -347000 ekin = 2.34924784800441 | erot = 1.93056350805623 | epot = -21.4896151766055 | etot = -17.2098038205449 -348000 ekin = 2.79839267202794 | erot = 2.79408776517964 | epot = -21.4682057474678 | etot = -15.8757253102603 -349000 ekin = 2.33820470114614 | erot = 3.1296631867051 | epot = -21.5603039389199 | etot = -16.0924360510686 -350000 ekin = 2.22383234890832 | erot = 2.38886870388012 | epot = -21.5375784703118 | etot = -16.9248774175233 -351000 ekin = 2.33329735253339 | erot = 2.84447430695178 | epot = -21.5078106306152 | etot = -16.3300389711301 -352000 ekin = 2.74923373919408 | erot = 2.76796181793624 | epot = -21.5537134920816 | etot = -16.0365179349513 -353000 ekin = 1.76111836153717 | erot = 2.12255592617519 | epot = -21.5037017999956 | etot = -17.6200275122832 -354000 ekin = 2.29967358188085 | erot = 2.37615363620184 | epot = -21.5592579778191 | etot = -16.8834307597364 -355000 ekin = 2.32956787601564 | erot = 2.41406261152026 | epot = -21.5311925684017 | etot = -16.7875620808658 -356000 ekin = 2.99536507165417 | erot = 3.01337867890171 | epot = -21.4612138261641 | etot = -15.4524700756082 -357000 ekin = 1.79487551861703 | erot = 2.14781775756833 | epot = -21.4425100027869 | etot = -17.4998167266016 -358000 ekin = 2.06856992699964 | erot = 1.9158505155371 | epot = -21.4597512525558 | etot = -17.475330810019 -359000 ekin = 2.03457633089973 | erot = 2.13725650388115 | epot = -21.434584367242 | etot = -17.2627515324611 -360000 ekin = 2.64289898809605 | erot = 2.45722294398597 | epot = -21.3798303659973 | etot = -16.2797084339153 -361000 ekin = 2.44681633772951 | erot = 2.40323525392196 | epot = -21.4535746870958 | etot = -16.6035230954443 -362000 ekin = 2.27284400709389 | erot = 2.04866562998476 | epot = -21.4444048899962 | etot = -17.1228952529175 -363000 ekin = 3.23945885057605 | erot = 1.79247859381386 | epot = -21.4992698914106 | etot = -16.4673324470207 -364000 ekin = 3.01124200487831 | erot = 2.1649586732171 | epot = -21.5330648567406 | etot = -16.3568641786452 -365000 ekin = 2.51472285580868 | erot = 2.29864111879033 | epot = -21.6252096459669 | etot = -16.8118456713679 -366000 ekin = 2.59356655410023 | erot = 2.21031948632572 | epot = -21.6397726115724 | etot = -16.8358865711464 -367000 ekin = 2.23422490605625 | erot = 1.85375489374335 | epot = -21.7036464131407 | etot = -17.6156666133411 -368000 ekin = 2.47747707853681 | erot = 2.36511710555107 | epot = -21.7442459693683 | etot = -16.9016517852804 -369000 ekin = 2.03854183495619 | erot = 2.80790943599038 | epot = -21.829546112742 | etot = -16.9830948417954 -370000 ekin = 2.08495509326204 | erot = 2.15717784784085 | epot = -21.8579547558589 | etot = -17.615821814756 -371000 ekin = 2.1649158804987 | erot = 2.10731342711638 | epot = -21.750730287247 | etot = -17.4785009796319 -372000 ekin = 1.83416420958724 | erot = 1.90082367490456 | epot = -21.678422472552 | etot = -17.9434345880602 -373000 ekin = 1.97176482573297 | erot = 1.77796007890949 | epot = -21.6393712386779 | etot = -17.8896463340354 -374000 ekin = 2.89940710658304 | erot = 1.91194262525379 | epot = -21.5337545453636 | etot = -16.7224048135268 -375000 ekin = 2.32339676163341 | erot = 1.92362318361283 | epot = -21.4217091025191 | etot = -17.1746891572729 -376000 ekin = 2.59047552311153 | erot = 2.32394149083979 | epot = -21.4139727856535 | etot = -16.4995557717022 -377000 ekin = 2.24598863840517 | erot = 1.65770205797294 | epot = -21.3405339068233 | etot = -17.4368432104452 -378000 ekin = 2.38351514056703 | erot = 2.54156262207209 | epot = -21.312238058745 | etot = -16.3871602961058 -379000 ekin = 2.08457212928957 | erot = 2.11819645676888 | epot = -21.2663127721438 | etot = -17.0635441860853 -380000 ekin = 2.62168026009058 | erot = 2.36576073073355 | epot = -21.2469701231192 | etot = -16.2595291322951 -381000 ekin = 2.42554871977308 | erot = 2.21588725182519 | epot = -21.2594018196932 | etot = -16.6179658480949 -382000 ekin = 2.04454090532124 | erot = 3.35199327879852 | epot = -21.3507561156205 | etot = -15.9542219315007 -383000 ekin = 2.57756769789844 | erot = 1.58356833947094 | epot = -21.4206473136968 | etot = -17.2595112763274 -384000 ekin = 2.32411392435713 | erot = 2.07034159075994 | epot = -21.4254017003271 | etot = -17.0309461852101 -385000 ekin = 1.93815279071873 | erot = 3.2997037447625 | epot = -21.4993838182002 | etot = -16.261527282719 -386000 ekin = 2.10645704249443 | erot = 2.94380940917573 | epot = -21.5050572923383 | etot = -16.4547908406682 -387000 ekin = 2.28625118399722 | erot = 2.404880226949 | epot = -21.4350466670763 | etot = -16.7439152561301 -388000 ekin = 2.84183807689895 | erot = 2.72440789072403 | epot = -21.4487672968481 | etot = -15.8825213292251 -389000 ekin = 3.39750799106374 | erot = 3.08194517695387 | epot = -21.6559630447604 | etot = -15.1765098767428 -390000 ekin = 2.82211920760116 | erot = 2.04880343622588 | epot = -21.7229608878359 | etot = -16.8520382440089 -391000 ekin = 2.25113345866117 | erot = 2.45876014532078 | epot = -21.7793475672489 | etot = -17.0694539632669 -392000 ekin = 2.67779739921769 | erot = 2.75278604715789 | epot = -21.9200377033299 | etot = -16.4894542569543 -393000 ekin = 2.07336639249413 | erot = 1.66102921524043 | epot = -22.0500496423094 | etot = -18.3156540345749 -394000 ekin = 2.1138614951422 | erot = 2.40654905841557 | epot = -22.0647062581753 | etot = -17.5442957046175 -395000 ekin = 2.46967791557608 | erot = 2.46187607744979 | epot = -22.0113006362932 | etot = -17.0797466432673 -396000 ekin = 3.17858061422169 | erot = 1.60030928107609 | epot = -21.9570022338793 | etot = -17.1781123385815 -397000 ekin = 2.37483507726777 | erot = 2.17387816921976 | epot = -21.8769234701935 | etot = -17.328210223706 -398000 ekin = 2.29815779154462 | erot = 2.20148627030488 | epot = -21.829364101453 | etot = -17.3297200396035 -399000 ekin = 2.66620669497936 | erot = 2.78316441348842 | epot = -21.7420307764658 | etot = -16.292659667998 -400000 ekin = 1.8196142363994 | erot = 2.77573291920479 | epot = -21.7225828560708 | etot = -17.1272357004667 -401000 ekin = 2.39347596566752 | erot = 3.11237720134101 | epot = -21.7632198127752 | etot = -16.2573666457667 -402000 ekin = 4.0137909252526 | erot = 3.58756310879364 | epot = -21.6952307126457 | etot = -14.0938766785994 -403000 ekin = 3.6423872335827 | erot = 3.44210139074533 | epot = -21.6932224157204 | etot = -14.6087337913923 -404000 ekin = 2.52116102522202 | erot = 2.99286839639892 | epot = -21.7395466120139 | etot = -16.225517190393 -405000 ekin = 2.80514548558626 | erot = 3.0980722844015 | epot = -21.8096811205532 | etot = -15.9064633505654 -406000 ekin = 2.32696376764903 | erot = 2.03572639782902 | epot = -21.9111381639249 | etot = -17.5484479984469 -407000 ekin = 2.33504128016395 | erot = 1.91320949168965 | epot = -21.9359478399848 | etot = -17.6876970681312 -408000 ekin = 1.90942025822265 | erot = 2.20375631379573 | epot = -21.9849314014528 | etot = -17.8717548294345 -409000 ekin = 1.98818542800297 | erot = 1.95540808206523 | epot = -22.0378349759701 | etot = -18.0942414659019 -410000 ekin = 1.59823476401333 | erot = 1.9127296785249 | epot = -22.0830507565097 | etot = -18.5720863139715 -411000 ekin = 1.87320182179615 | erot = 2.46575148951075 | epot = -22.1911106440468 | etot = -17.8521573327399 -412000 ekin = 2.51909186028136 | erot = 2.65534868642724 | epot = -22.2816800676061 | etot = -17.1072395208975 -413000 ekin = 2.80929435327117 | erot = 3.19888285052217 | epot = -22.1907679968742 | etot = -16.1825907930808 -414000 ekin = 2.79014519733558 | erot = 2.72515195410934 | epot = -22.144863024243 | etot = -16.6295658727981 -415000 ekin = 2.46789019087319 | erot = 2.24891720770209 | epot = -22.1977268949426 | etot = -17.4809194963673 -416000 ekin = 3.30766536008866 | erot = 1.55878918639506 | epot = -22.169487821356 | etot = -17.3030332748722 -417000 ekin = 3.95074944679108 | erot = 2.44780201516575 | epot = -22.1018895242095 | etot = -15.7033380622527 -418000 ekin = 2.77340936693415 | erot = 2.68993840817535 | epot = -21.9773275627671 | etot = -16.5139797876576 -419000 ekin = 2.38275203991916 | erot = 2.97769109273477 | epot = -21.9010102007429 | etot = -16.540567068089 -420000 ekin = 1.80397709765343 | erot = 1.82715488758969 | epot = -21.8849019003166 | etot = -18.2537699150735 -421000 ekin = 1.35294173647285 | erot = 1.77463275951321 | epot = -21.8324727162455 | etot = -18.7048982202595 -422000 ekin = 1.39101035408781 | erot = 2.74626781088313 | epot = -21.8922044238521 | etot = -17.7549262588812 -423000 ekin = 1.58313118355036 | erot = 3.07988587276089 | epot = -21.9303489156376 | etot = -17.2673318593264 -424000 ekin = 2.38308976422852 | erot = 2.0290563283423 | epot = -22.0003513420112 | etot = -17.5882052494404 -425000 ekin = 2.32292982636641 | erot = 2.54472792699356 | epot = -22.0461884305753 | etot = -17.1785306772154 -426000 ekin = 2.07274921207621 | erot = 3.12068562025982 | epot = -21.9899604929779 | etot = -16.7965256606419 -427000 ekin = 2.16499158921497 | erot = 2.43609860560846 | epot = -21.883756502818 | etot = -17.2826663079946 -428000 ekin = 1.81001230881453 | erot = 1.65184910311941 | epot = -21.8651168729134 | etot = -18.4032554609795 -429000 ekin = 1.67080799563552 | erot = 2.5582900403394 | epot = -21.8232038220611 | etot = -17.5941057860861 -430000 ekin = 2.68658781224626 | erot = 2.85919253371561 | epot = -21.8545360487503 | etot = -16.3087557027885 -431000 ekin = 2.77334901985547 | erot = 1.57746917070685 | epot = -21.8360353910944 | etot = -17.485217200532 -432000 ekin = 2.50244674166433 | erot = 1.60779258881598 | epot = -21.7381087453319 | etot = -17.6278694148516 -433000 ekin = 1.85649371322471 | erot = 2.49173358917941 | epot = -21.7919912827364 | etot = -17.4437639803323 -434000 ekin = 2.89302367450633 | erot = 2.79890045602689 | epot = -21.923157505168 | etot = -16.2312333746348 -435000 ekin = 3.67647442700573 | erot = 1.38588132381276 | epot = -22.1019777057281 | etot = -17.0396219549096 -436000 ekin = 3.05510329104704 | erot = 2.00142902882894 | epot = -22.1034257027066 | etot = -17.0468933828306 -437000 ekin = 3.2334117289381 | erot = 1.78346855436479 | epot = -22.113702088725 | etot = -17.0968218054222 -438000 ekin = 2.86378458795302 | erot = 1.84588842157478 | epot = -22.072414124752 | etot = -17.3627411152242 -439000 ekin = 2.41407153953135 | erot = 2.70066632790347 | epot = -22.0535011599236 | etot = -16.9387632924888 -440000 ekin = 2.22110309163133 | erot = 3.01674685818989 | epot = -22.0773629228072 | etot = -16.8395129729859 -441000 ekin = 2.8952003347941 | erot = 2.87911130379515 | epot = -22.209849236351 | etot = -16.4355375977618 -442000 ekin = 2.05598301233623 | erot = 1.73562369066665 | epot = -22.2689079268812 | etot = -18.4773012238783 -443000 ekin = 1.86650631344267 | erot = 2.0081617804031 | epot = -22.3072964279924 | etot = -18.4326283341466 -444000 ekin = 2.06088560705618 | erot = 2.15265011198711 | epot = -22.3186686701218 | etot = -18.1051329510785 -445000 ekin = 2.10029110633058 | erot = 2.28003314051319 | epot = -22.3739249314238 | etot = -17.99360068458 -446000 ekin = 2.42121462246176 | erot = 2.85365097104761 | epot = -22.4030820729313 | etot = -17.1282164794219 -447000 ekin = 2.19905370994783 | erot = 2.98216231903377 | epot = -22.4760062523441 | etot = -17.2947902233625 -448000 ekin = 2.35344530580997 | erot = 2.94496431571714 | epot = -22.4927466941726 | etot = -17.1943370726455 -449000 ekin = 2.39032460069844 | erot = 2.92889137252359 | epot = -22.5027878081879 | etot = -17.1835718349658 -450000 ekin = 1.87543018481826 | erot = 1.69603328668916 | epot = -22.4562462785528 | etot = -18.8847828070454 -451000 ekin = 2.01850498861612 | erot = 1.92812989993405 | epot = -22.4817672986218 | etot = -18.5351324100716 -452000 ekin = 1.36652609658347 | erot = 1.87105620810406 | epot = -22.4501755877893 | etot = -19.2125932831018 -453000 ekin = 2.0599225820261 | erot = 2.56027964608565 | epot = -22.2765869721545 | etot = -17.6563847440428 -454000 ekin = 1.47421749728914 | erot = 2.19120144206327 | epot = -22.1381671023588 | etot = -18.4727481630064 -455000 ekin = 1.65550022307771 | erot = 2.72165814308169 | epot = -21.9904394751434 | etot = -17.613281108984 -456000 ekin = 2.34827062603187 | erot = 2.00722438151076 | epot = -21.9105114729145 | etot = -17.5550164653719 -457000 ekin = 2.01338249991754 | erot = 2.37170378033694 | epot = -21.8819790372449 | etot = -17.4968927569905 -458000 ekin = 1.72815421955305 | erot = 2.26329746701053 | epot = -21.9116044050661 | etot = -17.9201527185025 -459000 ekin = 2.48347398227003 | erot = 2.3237619692994 | epot = -21.9949404038569 | etot = -17.1877044522874 -460000 ekin = 2.18770854699575 | erot = 2.0008166291832 | epot = -21.9585322440376 | etot = -17.7700070678586 -461000 ekin = 2.27716435663744 | erot = 2.90195656269069 | epot = -21.887768217766 | etot = -16.7086472984378 -462000 ekin = 2.61244889701714 | erot = 1.79757533309513 | epot = -21.9143949779913 | etot = -17.504370747879 -463000 ekin = 2.55684814656524 | erot = 3.31200610027657 | epot = -21.8497749242034 | etot = -15.9809206773616 -464000 ekin = 2.15312235839157 | erot = 2.38947690136821 | epot = -21.7825241097984 | etot = -17.2399248500386 -465000 ekin = 2.5257577253008 | erot = 3.61331808321477 | epot = -21.70727052519 | etot = -15.5681947166744 -466000 ekin = 1.97943618964772 | erot = 2.8868852833762 | epot = -21.7222514097775 | etot = -16.8559299367535 -467000 ekin = 1.62882257493983 | erot = 2.60892282315519 | epot = -21.8080861041928 | etot = -17.5703407060978 -468000 ekin = 1.09823854644375 | erot = 3.35073251937297 | epot = -21.852381101233 | etot = -17.4034100354163 -469000 ekin = 1.70229597385131 | erot = 2.75889840726388 | epot = -21.8665756757502 | etot = -17.4053812946351 -470000 ekin = 1.85844768422772 | erot = 2.87065462176252 | epot = -21.9036130079377 | etot = -17.1745107019474 -471000 ekin = 2.74399539924327 | erot = 2.3494335495508 | epot = -21.954398971724 | etot = -16.8609700229299 -472000 ekin = 2.7182617922689 | erot = 2.13581917182001 | epot = -22.0449294707038 | etot = -17.1908485066149 -473000 ekin = 2.29380642077303 | erot = 2.07595163501545 | epot = -22.0706135180041 | etot = -17.7008554622156 -474000 ekin = 2.22690782122655 | erot = 2.16470599013947 | epot = -22.0704871162387 | etot = -17.6788733048726 -475000 ekin = 2.49786795333289 | erot = 2.09510196885222 | epot = -22.0509742163569 | etot = -17.4580042941718 -476000 ekin = 2.20264299239668 | erot = 1.76757923556401 | epot = -21.9427521555982 | etot = -17.9725299276376 -477000 ekin = 2.45872237399503 | erot = 2.38426997478538 | epot = -21.9051474088983 | etot = -17.0621550601179 -478000 ekin = 1.8990596403089 | erot = 2.04864356713722 | epot = -21.9114508304737 | etot = -17.9637476230276 -479000 ekin = 2.27133902137491 | erot = 3.08755197682257 | epot = -21.8872829373266 | etot = -16.5283919391291 -480000 ekin = 1.67015605151468 | erot = 2.76560365045836 | epot = -21.8968158425889 | etot = -17.4610561406159 -481000 ekin = 1.81882995680353 | erot = 2.94136105971067 | epot = -21.8571304925408 | etot = -17.0969394760266 -482000 ekin = 2.15305069632652 | erot = 2.07327897823919 | epot = -21.8152992914386 | etot = -17.5889696168728 -483000 ekin = 1.50004535981758 | erot = 1.99364343935403 | epot = -21.7843644990947 | etot = -18.2906756999231 -484000 ekin = 1.85234844255529 | erot = 2.34000231202781 | epot = -21.8614293841666 | etot = -17.6690786295835 -485000 ekin = 1.64682178328831 | erot = 2.50437862576679 | epot = -21.8969405008956 | etot = -17.7457400918405 -486000 ekin = 1.86104257115938 | erot = 2.15995925522772 | epot = -21.8879397421696 | etot = -17.8669379157825 -487000 ekin = 2.34639026339217 | erot = 3.11622773972822 | epot = -21.9707194220383 | etot = -16.5081014189179 -488000 ekin = 2.27484994031488 | erot = 3.28147617368226 | epot = -21.9426475486812 | etot = -16.3863214346841 -489000 ekin = 2.38811933287365 | erot = 2.56070014238266 | epot = -21.860086116809 | etot = -16.9112666415526 -490000 ekin = 2.12976254880773 | erot = 3.54525746010285 | epot = -21.7617637919249 | etot = -16.0867437830143 -491000 ekin = 2.20850764560417 | erot = 2.48919239454316 | epot = -21.6468680069132 | etot = -16.9491679667659 -492000 ekin = 2.43957739853024 | erot = 2.76323186690379 | epot = -21.6230951653169 | etot = -16.4202858998828 -493000 ekin = 1.79391622496105 | erot = 2.29052518470038 | epot = -21.6945975278841 | etot = -17.6101561182227 -494000 ekin = 2.11542949642227 | erot = 3.0131386587248 | epot = -21.763700447204 | etot = -16.6351322920569 -495000 ekin = 2.1568591957283 | erot = 2.49005677705244 | epot = -21.8783556810054 | etot = -17.2314397082246 -496000 ekin = 2.06037552826019 | erot = 2.60698629104701 | epot = -21.9276220332962 | etot = -17.260260213989 -497000 ekin = 2.52228141248763 | erot = 1.71013019276801 | epot = -21.8769629373864 | etot = -17.6445513321308 -498000 ekin = 2.1539450080541 | erot = 1.78777085700021 | epot = -21.8243748366057 | etot = -17.8826589715514 -499000 ekin = 3.01296343053107 | erot = 1.73934813146709 | epot = -21.839263268044 | etot = -17.0869517060458 -500000 ekin = 2.76642119718551 | erot = 2.50182215373005 | epot = -21.830671988603 | etot = -16.5624286376875 -501000 ekin = 2.69367571720338 | erot = 2.99042817784737 | epot = -21.7039103667138 | etot = -16.0198064716631 -502000 ekin = 1.91666556639458 | erot = 3.89815239299715 | epot = -21.5845300715443 | etot = -15.7697121121526 -503000 ekin = 1.80513448090425 | erot = 2.94463129244924 | epot = -21.408846856306 | etot = -16.6590810829525 -504000 ekin = 1.70082883689617 | erot = 3.04312463877849 | epot = -21.3315058298564 | etot = -16.5875523541817 -505000 ekin = 2.75953000022913 | erot = 2.14635942194521 | epot = -21.3525103549444 | etot = -16.4466209327701 -506000 ekin = 2.29728093923375 | erot = 2.04403144683578 | epot = -21.3794572010067 | etot = -17.0381448149372 -507000 ekin = 3.17636857959624 | erot = 2.42164349794528 | epot = -21.4731108320935 | etot = -15.875098754552 -508000 ekin = 2.53590109429522 | erot = 2.52790695399207 | epot = -21.6300410847597 | etot = -16.5662330364724 -509000 ekin = 2.12748393236721 | erot = 2.83071060777934 | epot = -21.7781347526393 | etot = -16.8199402124928 -510000 ekin = 2.16138023827908 | erot = 1.44739524871433 | epot = -21.8661383228762 | etot = -18.2573628358828 -511000 ekin = 2.5432337386743 | erot = 2.77108674378181 | epot = -21.9670096484362 | etot = -16.6526891659801 -512000 ekin = 2.32820226144234 | erot = 2.80424931634042 | epot = -22.0177071813426 | etot = -16.8852556035598 -513000 ekin = 2.47700215188742 | erot = 2.17127792631491 | epot = -22.0110285387344 | etot = -17.362748460532 -514000 ekin = 2.76651136580705 | erot = 2.55680467976048 | epot = -22.0909970005814 | etot = -16.7676809550139 -515000 ekin = 2.52023319653878 | erot = 1.82499891391155 | epot = -22.1712715169566 | etot = -17.8260394065063 -516000 ekin = 2.81741012640847 | erot = 2.22255273815334 | epot = -22.2621950124767 | etot = -17.2222321479149 -517000 ekin = 2.03287831599843 | erot = 2.04932227860396 | epot = -22.2794486174447 | etot = -18.1972480228424 -518000 ekin = 2.18753527424292 | erot = 2.76011341951325 | epot = -22.2667176836094 | etot = -17.3190689898532 -519000 ekin = 2.23127004412532 | erot = 2.23036422155451 | epot = -22.3641437250362 | etot = -17.9025094593563 -520000 ekin = 1.88835704965194 | erot = 2.20137678015022 | epot = -22.4547788180202 | etot = -18.365044988218 -521000 ekin = 2.57911594310158 | erot = 1.87216207270883 | epot = -22.6071563154982 | etot = -18.1558782996878 -522000 ekin = 3.47551915105823 | erot = 1.7762374523623 | epot = -22.6852629490162 | etot = -17.4335063455957 -523000 ekin = 2.84545293485784 | erot = 2.47507537559666 | epot = -22.727728352182 | etot = -17.4072000417275 -524000 ekin = 2.40278895519472 | erot = 2.37529684497555 | epot = -22.6643160930412 | etot = -17.8862302928709 -525000 ekin = 1.5950703357501 | erot = 2.61508341973267 | epot = -22.5633164974796 | etot = -18.3531627419969 -526000 ekin = 1.67007684014044 | erot = 1.59545284095806 | epot = -22.5113199784161 | etot = -19.2457902973176 -527000 ekin = 2.19667533945248 | erot = 1.93330231246751 | epot = -22.4181345854018 | etot = -18.2881569334818 -528000 ekin = 2.6386695788743 | erot = 2.84200507572114 | epot = -22.4271496272375 | etot = -16.9464749726421 -529000 ekin = 2.71685924097596 | erot = 3.01195511036349 | epot = -22.4607209136928 | etot = -16.7319065623534 -530000 ekin = 2.59646038482582 | erot = 2.13176928192349 | epot = -22.3209630404852 | etot = -17.5927333737359 -531000 ekin = 2.96818211550215 | erot = 2.3583690601903 | epot = -22.2240561584029 | etot = -16.8975049827104 -532000 ekin = 2.54400448114086 | erot = 2.3226642368829 | epot = -22.2383323718679 | etot = -17.3716636538441 -533000 ekin = 2.47235456553947 | erot = 2.96337386592411 | epot = -22.2434312615742 | etot = -16.8077028301106 -534000 ekin = 2.104894788263 | erot = 2.0389464069744 | epot = -22.2624131617689 | etot = -18.1185719665315 -535000 ekin = 3.76811893478762 | erot = 2.64694643296528 | epot = -22.2342741399369 | etot = -15.819208772184 -536000 ekin = 2.78932048770647 | erot = 1.95046774407585 | epot = -22.1710588414063 | etot = -17.4312706096239 -537000 ekin = 2.84547413963847 | erot = 2.6235440651257 | epot = -22.0792539675812 | etot = -16.6102357628171 -538000 ekin = 2.67615418297319 | erot = 2.08962546790894 | epot = -21.9560559397442 | etot = -17.1902762888621 -539000 ekin = 2.73041224389434 | erot = 2.35761678189143 | epot = -22.0360310245606 | etot = -16.9480019987748 -540000 ekin = 2.45513520817503 | erot = 2.49807124796168 | epot = -22.1997448500024 | etot = -17.2465383938656 -541000 ekin = 3.48268229748521 | erot = 2.77797330372247 | epot = -22.2939060084685 | etot = -16.0332504072608 -542000 ekin = 2.48960436886327 | erot = 2.87332479229811 | epot = -22.3004887690915 | etot = -16.9375596079301 -543000 ekin = 2.34699181381528 | erot = 2.86167842257192 | epot = -22.3027783678197 | etot = -17.0941081314325 -544000 ekin = 2.22918134297117 | erot = 1.46827924617161 | epot = -22.2757921511235 | etot = -18.5783315619807 -545000 ekin = 2.45393652663684 | erot = 2.14178562937396 | epot = -22.2696521197313 | etot = -17.6739299637205 -546000 ekin = 1.98434977645848 | erot = 2.2414409311316 | epot = -22.232171992891 | etot = -18.0063812853009 -547000 ekin = 2.5623035019647 | erot = 1.89574625912019 | epot = -22.2013923967025 | etot = -17.7433426356176 -548000 ekin = 1.72907614338158 | erot = 1.64127030305736 | epot = -22.1897325934373 | etot = -18.8193861469984 -549000 ekin = 1.95696682165778 | erot = 2.6453998894305 | epot = -22.3281210018679 | etot = -17.7257542907796 -550000 ekin = 1.80672944936439 | erot = 1.58554489058936 | epot = -22.4379557312283 | etot = -19.0456813912745 -551000 ekin = 2.19785864069662 | erot = 2.26344341600384 | epot = -22.4944444264338 | etot = -18.0331423697333 -552000 ekin = 2.07444252867401 | erot = 2.49246441473271 | epot = -22.5313734934249 | etot = -17.9644665500182 -553000 ekin = 2.94841939583914 | erot = 2.12309786300738 | epot = -22.5870982488507 | etot = -17.5155809900042 -554000 ekin = 2.86687820100223 | erot = 1.94287298381727 | epot = -22.755332978123 | etot = -17.9455817933035 -555000 ekin = 2.43102414091851 | erot = 2.28708167460998 | epot = -22.8409516497234 | etot = -18.1228458341949 -556000 ekin = 2.31020008885682 | erot = 2.55815314755914 | epot = -22.8777743355339 | etot = -18.0094210991179 -557000 ekin = 2.81359485404958 | erot = 1.42586137655668 | epot = -22.93912738 | etot = -18.6996711493937 -558000 ekin = 2.79709708533549 | erot = 1.99545051650403 | epot = -22.9823826800611 | etot = -18.1898350782216 -559000 ekin = 3.34842854089642 | erot = 2.30939572175804 | epot = -23.0558646505447 | etot = -17.3980403878903 -560000 ekin = 3.12583165184862 | erot = 2.33613566970362 | epot = -23.0537007225862 | etot = -17.591733401034 -561000 ekin = 2.91276096736789 | erot = 2.07459481236914 | epot = -22.9822607654341 | etot = -17.994904985697 -562000 ekin = 3.33017095598493 | erot = 2.52215992853225 | epot = -22.8889363116258 | etot = -17.0366054271086 -563000 ekin = 2.70200701416854 | erot = 1.64770113379201 | epot = -22.8712722594835 | etot = -18.521564111523 -564000 ekin = 2.82953631474814 | erot = 2.52900560163794 | epot = -22.8387855460795 | etot = -17.4802436296934 -565000 ekin = 2.6799988891771 | erot = 2.05091800967452 | epot = -22.7937507048715 | etot = -18.0628338060199 -566000 ekin = 2.32986557500305 | erot = 2.16379904557211 | epot = -22.8028233873669 | etot = -18.3091587667918 -567000 ekin = 1.92319601586312 | erot = 2.83258522428556 | epot = -22.7588270107034 | etot = -18.0030457705547 -568000 ekin = 2.1767237164987 | erot = 2.23391201707385 | epot = -22.7857243432792 | etot = -18.3750886097067 -569000 ekin = 2.44197408396629 | erot = 2.65159536305571 | epot = -22.7197314796375 | etot = -17.6261620326155 -570000 ekin = 2.4317740620905 | erot = 1.89764945519459 | epot = -22.6963472615905 | etot = -18.3669237443054 -571000 ekin = 2.86160521289846 | erot = 2.96804382024775 | epot = -22.6961835038032 | etot = -16.866534470657 -572000 ekin = 1.92662919536386 | erot = 3.79135909534691 | epot = -22.6587081618988 | etot = -16.9407198711881 -573000 ekin = 2.40137439242945 | erot = 2.29982613356341 | epot = -22.6365074046859 | etot = -17.9353068786931 -574000 ekin = 1.68882589350908 | erot = 2.32097404492489 | epot = -22.6783832960446 | etot = -18.6685833576106 -575000 ekin = 1.85490665091732 | erot = 1.85640808911424 | epot = -22.7444448136904 | etot = -19.0331300736589 -576000 ekin = 3.24775679594035 | erot = 2.95569268214308 | epot = -22.6991990620438 | etot = -16.4957495839604 -577000 ekin = 2.89423151645282 | erot = 2.87486712706735 | epot = -22.6284365608021 | etot = -16.8593379172819 -578000 ekin = 2.40460916677569 | erot = 2.78216711024699 | epot = -22.4348874817266 | etot = -17.2481112047039 -579000 ekin = 2.40580528046575 | erot = 1.99557814482531 | epot = -22.2889136736671 | etot = -17.887530248376 -580000 ekin = 2.69817090358905 | erot = 1.94741864170503 | epot = -22.1754486864787 | etot = -17.5298591411846 -581000 ekin = 2.06309668646281 | erot = 2.97621367011722 | epot = -22.0670098600828 | etot = -17.0276995035028 -582000 ekin = 2.33869527454826 | erot = 3.07898324506954 | epot = -21.9478320300714 | etot = -16.5301535104536 -583000 ekin = 2.23428959741492 | erot = 2.6847669308886 | epot = -21.837983720672 | etot = -16.9189271923685 -584000 ekin = 2.94321016295283 | erot = 2.59995039730547 | epot = -21.7517635625832 | etot = -16.2086030023249 -585000 ekin = 2.36063475490837 | erot = 2.49112677628936 | epot = -21.7173359488816 | etot = -16.8655744176839 -586000 ekin = 3.56583702163526 | erot = 2.02487858259688 | epot = -21.7707868137139 | etot = -16.1800712094817 -587000 ekin = 3.53727585853246 | erot = 1.97258932652023 | epot = -21.7665121756112 | etot = -16.2566469905585 -588000 ekin = 2.82339556293759 | erot = 1.59340504807045 | epot = -21.7545319340973 | etot = -17.3377313230892 -589000 ekin = 2.31627310139819 | erot = 2.20582604523296 | epot = -21.8199173705564 | etot = -17.2978182239252 -590000 ekin = 2.57616671531331 | erot = 1.72768273328209 | epot = -21.8427138199643 | etot = -17.5388643713689 -591000 ekin = 1.91473306171853 | erot = 3.80604384238378 | epot = -21.9351393124188 | etot = -16.2143624083165 -592000 ekin = 2.11222958764659 | erot = 2.84208333850203 | epot = -21.9639458839076 | etot = -17.009632957759 -593000 ekin = 1.66462149590471 | erot = 2.46217253451013 | epot = -21.9921445323972 | etot = -17.8653505019823 -594000 ekin = 1.86314045588477 | erot = 2.37275936142266 | epot = -22.1149191228505 | etot = -17.8790193055431 -595000 ekin = 1.6397125755004 | erot = 2.1497024679856 | epot = -22.2960530768755 | etot = -18.5066380333895 -596000 ekin = 1.86247376576131 | erot = 1.56938095427868 | epot = -22.4014957466218 | etot = -18.9696410265818 -597000 ekin = 2.21073901406701 | erot = 2.3087175693751 | epot = -22.4599242604733 | etot = -17.9404676770312 -598000 ekin = 1.8660134932493 | erot = 3.0231172739981 | epot = -22.5165298316334 | etot = -17.627399064386 -599000 ekin = 2.86271635930755 | erot = 2.19928854437227 | epot = -22.536599708025 | etot = -17.4745948043452 -600000 ekin = 2.65062163067179 | erot = 2.14533898812783 | epot = -22.4620537969304 | etot = -17.6660931781308 -601000 ekin = 2.97018864875202 | erot = 3.19824090103877 | epot = -22.3271949752462 | etot = -16.1587654254554 -602000 ekin = 2.93416893709002 | erot = 2.68627449040959 | epot = -22.2245183728174 | etot = -16.6040749453178 -603000 ekin = 2.5987545006459 | erot = 2.71301833029982 | epot = -22.1705323477201 | etot = -16.8587595167744 -604000 ekin = 1.79059859762798 | erot = 2.11515305424794 | epot = -22.1931056020218 | etot = -18.2873539501458 -605000 ekin = 1.82914051863723 | erot = 2.27656979248767 | epot = -22.2183915784731 | etot = -18.1126812673482 -606000 ekin = 2.33864125390346 | erot = 2.20416493777799 | epot = -22.1617656383863 | etot = -17.6189594467049 -607000 ekin = 2.72666217259877 | erot = 2.97710334336214 | epot = -22.1572786906588 | etot = -16.4535131746979 -608000 ekin = 2.45226937954678 | erot = 2.41232790919958 | epot = -22.1263051367365 | etot = -17.2617078479901 -609000 ekin = 1.91032127854288 | erot = 2.62712516529569 | epot = -22.0127581830193 | etot = -17.4753117391808 -610000 ekin = 3.01319055031108 | erot = 2.17098104720966 | epot = -21.9304996298691 | etot = -16.7463280323483 -611000 ekin = 2.44410994437292 | erot = 2.75159061185423 | epot = -21.9258193850469 | etot = -16.7301188288197 -612000 ekin = 2.50271115837173 | erot = 2.1681764069217 | epot = -21.9676183236646 | etot = -17.2967307583711 -613000 ekin = 3.01842230632867 | erot = 2.12784419676568 | epot = -22.0277467117808 | etot = -16.8814802086865 -614000 ekin = 2.25331711369829 | erot = 2.99334048390158 | epot = -22.0701464667308 | etot = -16.8234888691309 -615000 ekin = 1.66376443031995 | erot = 2.63613776051568 | epot = -21.9985978951917 | etot = -17.6986957043561 -616000 ekin = 1.89454248699047 | erot = 2.8731835516953 | epot = -22.0041678369047 | etot = -17.2364417982189 -617000 ekin = 2.14789714287838 | erot = 2.51249074123956 | epot = -22.0251474680605 | etot = -17.3647595839426 -618000 ekin = 3.11174934178843 | erot = 2.74374306269143 | epot = -21.980284295602 | etot = -16.1247918911222 -619000 ekin = 3.41036213968179 | erot = 2.1061679415973 | epot = -21.9557959924962 | etot = -16.4392659112171 -620000 ekin = 4.28430989238204 | erot = 2.19572475327592 | epot = -21.9033881020935 | etot = -15.4233534564355 -621000 ekin = 3.095687767491 | erot = 2.55794040804606 | epot = -21.8286763731364 | etot = -16.1750481975993 -622000 ekin = 2.76030419206698 | erot = 2.60754397958252 | epot = -21.7459002641758 | etot = -16.3780520925263 -623000 ekin = 2.87269212022169 | erot = 2.9040131195019 | epot = -21.5853226709315 | etot = -15.8086174312079 -624000 ekin = 2.01889500087931 | erot = 3.41825755609796 | epot = -21.4095311686243 | etot = -15.972378611647 -625000 ekin = 2.87966631754696 | erot = 2.69115421564282 | epot = -21.2859406043045 | etot = -15.7151200711148 -626000 ekin = 2.56087279949319 | erot = 2.15801254335176 | epot = -21.2329175358056 | etot = -16.5140321929606 -627000 ekin = 2.30197939613517 | erot = 2.40176668957967 | epot = -21.2932794652839 | etot = -16.589533379569 -628000 ekin = 2.23988628353727 | erot = 2.75332535542197 | epot = -21.4558642198861 | etot = -16.4626525809268 -629000 ekin = 2.20891060851903 | erot = 1.97036896055006 | epot = -21.6109313731644 | etot = -17.4316518040953 -630000 ekin = 2.48711004105953 | erot = 2.14055508379567 | epot = -21.6286281269545 | etot = -17.0009630020993 -631000 ekin = 2.05035510102044 | erot = 1.7851913104256 | epot = -21.633635046353 | etot = -17.798088634907 -632000 ekin = 1.65439924450982 | erot = 3.28310987077495 | epot = -21.6999899301469 | etot = -16.7624808148621 -633000 ekin = 2.3465798853121 | erot = 2.34109631044867 | epot = -21.8317647703271 | etot = -17.1440885745664 -634000 ekin = 2.31570267703931 | erot = 2.47129317382499 | epot = -21.8814211467029 | etot = -17.0944252958386 -635000 ekin = 1.99068848818427 | erot = 3.35493927676214 | epot = -21.9111632351734 | etot = -16.565535470227 -636000 ekin = 2.50156763858618 | erot = 2.48847742334417 | epot = -21.8752689055208 | etot = -16.8852238435905 -637000 ekin = 2.76558055064046 | erot = 2.80410341825292 | epot = -21.7874464522771 | etot = -16.2177624833838 -638000 ekin = 2.45488734924466 | erot = 2.81516363335623 | epot = -21.8973623385979 | etot = -16.627311355997 -639000 ekin = 1.89221088715375 | erot = 2.13319565970053 | epot = -21.932098303477 | etot = -17.9066917566227 -640000 ekin = 2.12173400886946 | erot = 3.32302167857402 | epot = -21.8808288554835 | etot = -16.4360731680401 -641000 ekin = 2.09554541112561 | erot = 2.23098450754964 | epot = -21.9203390995502 | etot = -17.5938091808749 -642000 ekin = 2.28696138506763 | erot = 2.67378976619349 | epot = -21.9723604262128 | etot = -17.0116092749516 -643000 ekin = 2.74450005384909 | erot = 2.20403941809546 | epot = -21.9235240791533 | etot = -16.9749846072088 -644000 ekin = 2.87909523138454 | erot = 3.40688779630213 | epot = -21.9417833997401 | etot = -15.6558003720534 -645000 ekin = 2.38284095628021 | erot = 2.10846397463902 | epot = -21.8306349073152 | etot = -17.3393299763959 -646000 ekin = 2.68568471833194 | erot = 1.8085210536706 | epot = -21.6853054888873 | etot = -17.1910997168848 -647000 ekin = 2.44462012552757 | erot = 2.00446720103469 | epot = -21.497463529291 | etot = -17.0483762027288 -648000 ekin = 2.2215075315945 | erot = 1.69679185313771 | epot = -21.5947311257684 | etot = -17.6764317410362 -649000 ekin = 2.55943952639506 | erot = 1.77203724563613 | epot = -22.016770390185 | etot = -17.6852936181538 -650000 ekin = 2.7234725572106 | erot = 2.20418229003753 | epot = -22.1594214535889 | etot = -17.2317666063407 -651000 ekin = 2.25383373914402 | erot = 3.26326768595797 | epot = -22.2274805933885 | etot = -16.7103791682865 -652000 ekin = 2.35810253390822 | erot = 2.29591208392315 | epot = -22.233219519731 | etot = -17.5792049018997 -653000 ekin = 2.06421004499471 | erot = 2.14171845474572 | epot = -22.2265612208312 | etot = -18.0206327210908 -654000 ekin = 2.30460304373657 | erot = 1.85567946278893 | epot = -22.2521914868227 | etot = -18.0919089802972 -655000 ekin = 2.1118882401511 | erot = 1.79072614414006 | epot = -22.2262193909715 | etot = -18.3236050066803 -656000 ekin = 2.44561836830366 | erot = 2.32567811025773 | epot = -22.1872376286341 | etot = -17.4159411500727 -657000 ekin = 2.45751083141107 | erot = 2.86439216413735 | epot = -22.1805503246548 | etot = -16.8586473291064 -658000 ekin = 2.49955432693123 | erot = 2.85472680235228 | epot = -22.1390040132353 | etot = -16.7847228839518 -659000 ekin = 3.37980090980362 | erot = 2.77552992994232 | epot = -21.9898923341708 | etot = -15.8345614944249 -660000 ekin = 2.69414626219179 | erot = 1.99094454704573 | epot = -21.839770569098 | etot = -17.1546797598605 -661000 ekin = 2.21049176877593 | erot = 2.52393650500607 | epot = -21.6857326790216 | etot = -16.9513044052396 -662000 ekin = 2.06962867519899 | erot = 2.53976085175021 | epot = -21.6239147287107 | etot = -17.0145252017615 -663000 ekin = 2.27770295544224 | erot = 2.30124717941156 | epot = -21.5870186127932 | etot = -17.0080684779394 -664000 ekin = 2.39061717453215 | erot = 1.87616423363737 | epot = -21.4930500427881 | etot = -17.2262686346186 -665000 ekin = 2.6692440512318 | erot = 2.29240983153228 | epot = -21.4402310096657 | etot = -16.4785771269016 -666000 ekin = 1.66318176263893 | erot = 2.30827907651665 | epot = -21.3477804932103 | etot = -17.3763196540547 -667000 ekin = 1.65573830146343 | erot = 2.82613611933529 | epot = -21.2651811028886 | etot = -16.7833066820899 -668000 ekin = 2.50126196238916 | erot = 3.29062396521938 | epot = -21.1310768281354 | etot = -15.3391909005268 -669000 ekin = 1.61008562219097 | erot = 2.65727107854379 | epot = -21.0513800034041 | etot = -16.7840233026694 -670000 ekin = 2.21851826153845 | erot = 2.60770568109394 | epot = -20.9727942140714 | etot = -16.146570271439 -671000 ekin = 2.25905318343359 | erot = 2.1596549557503 | epot = -20.920836534986 | etot = -16.5021283958021 -672000 ekin = 1.93426342346647 | erot = 1.6536504766844 | epot = -20.8333028169839 | etot = -17.245388916833 -673000 ekin = 1.880896686753 | erot = 2.07483128120026 | epot = -20.79952620348 | etot = -16.8437982355267 -674000 ekin = 2.067834680573 | erot = 2.16234064938725 | epot = -20.8176950919606 | etot = -16.5875197620003 -675000 ekin = 2.03952283590142 | erot = 2.48129689359269 | epot = -20.8297865902612 | etot = -16.3089668607671 -676000 ekin = 2.44687523374789 | erot = 2.7793299573525 | epot = -20.8513819036484 | etot = -15.625176712548 -677000 ekin = 2.18851088067448 | erot = 2.6192892566419 | epot = -20.8589021998564 | etot = -16.0511020625401 -678000 ekin = 2.13451298865477 | erot = 2.78742961560772 | epot = -20.7380850837789 | etot = -15.8161424795164 -679000 ekin = 2.15556981522704 | erot = 2.17593910434841 | epot = -20.629255081746 | etot = -16.2977461621705 -680000 ekin = 2.0771745141444 | erot = 2.6843689719881 | epot = -20.6512705044544 | etot = -15.8897270183219 -681000 ekin = 2.16836766753576 | erot = 1.82666294843077 | epot = -20.7392652191905 | etot = -16.744234603224 -682000 ekin = 3.01810965188602 | erot = 2.39774897550359 | epot = -20.7185667085479 | etot = -15.3027080811583 -683000 ekin = 2.84169666492798 | erot = 2.09885122074905 | epot = -20.7261705834807 | etot = -15.7856226978037 -684000 ekin = 1.9625035286937 | erot = 2.99543980855399 | epot = -20.769704567373 | etot = -15.8117612301253 -685000 ekin = 1.50086016290167 | erot = 2.0447864872958 | epot = -20.778895252848 | etot = -17.2332486026506 -686000 ekin = 2.3009298353038 | erot = 2.55442118756325 | epot = -20.7673358731011 | etot = -15.911984850234 -687000 ekin = 1.86053862979302 | erot = 2.84846934037481 | epot = -20.7009117540897 | etot = -15.9919037839219 -688000 ekin = 2.56859020075851 | erot = 2.23263295871677 | epot = -20.6563366249256 | etot = -15.8551134654503 -689000 ekin = 2.74930141700633 | erot = 2.68327386026118 | epot = -20.8092642099637 | etot = -15.3766889326962 -690000 ekin = 2.674773108413 | erot = 2.52397256899153 | epot = -21.073030341665 | etot = -15.8742846642604 -691000 ekin = 2.28465281003007 | erot = 2.52273866559282 | epot = -21.2401157605126 | etot = -16.4327242848898 -692000 ekin = 2.42087744380445 | erot = 3.24812320332688 | epot = -21.2665776826931 | etot = -15.5975770355618 -693000 ekin = 2.37642605279042 | erot = 2.99546830568891 | epot = -21.3330277418611 | etot = -15.9611333833818 -694000 ekin = 2.69750178365982 | erot = 2.53085866970818 | epot = -21.521485598392 | etot = -16.293125145024 -695000 ekin = 2.49230316198816 | erot = 1.1810586448532 | epot = -21.6959912399269 | etot = -18.0226294330855 -696000 ekin = 1.86075498586632 | erot = 1.46501529683134 | epot = -21.6808441671222 | etot = -18.3550738844245 -697000 ekin = 2.40460770445907 | erot = 2.10461647488794 | epot = -21.7143559347048 | etot = -17.2051317553578 -698000 ekin = 2.32098148261584 | erot = 1.91506962097516 | epot = -21.7787361369849 | etot = -17.5426850333939 -699000 ekin = 2.44943497732061 | erot = 2.56143482106644 | epot = -21.7638026578475 | etot = -16.7529328594605 -700000 ekin = 2.13119890669415 | erot = 2.28802336161954 | epot = -21.6714710604343 | etot = -17.2522487921206 -701000 ekin = 2.15013169314239 | erot = 2.18565847708909 | epot = -21.5488216255628 | etot = -17.2130314553313 -702000 ekin = 1.57482438035702 | erot = 1.99931097090509 | epot = -21.5047640382371 | etot = -17.930628686975 -703000 ekin = 2.08829522236785 | erot = 2.17557396869524 | epot = -21.5242713758433 | etot = -17.2604021847802 -704000 ekin = 2.82144699483838 | erot = 1.94479401958833 | epot = -21.5462466947694 | etot = -16.7800056803427 -705000 ekin = 2.8101978674582 | erot = 2.16662483548887 | epot = -21.497690476826 | etot = -16.520867773879 -706000 ekin = 1.97639068263159 | erot = 2.31468002405234 | epot = -21.494117475981 | etot = -17.2030467692971 -707000 ekin = 1.90740387464487 | erot = 2.04436544372039 | epot = -21.5505486138141 | etot = -17.5987792954489 -708000 ekin = 2.4927128838246 | erot = 2.15829540621564 | epot = -21.5728746117359 | etot = -16.9218663216956 -709000 ekin = 2.89296518644075 | erot = 2.58120965850486 | epot = -21.6152997801577 | etot = -16.1411249352121 -710000 ekin = 2.18515172086139 | erot = 2.27924743097099 | epot = -21.5865916502443 | etot = -17.122192498412 -711000 ekin = 2.31589231212299 | erot = 1.40143925977899 | epot = -21.6089597508521 | etot = -17.8916281789502 -712000 ekin = 2.55835611026778 | erot = 2.27281573655802 | epot = -21.7227687229586 | etot = -16.8915968761328 -713000 ekin = 1.95615391137192 | erot = 2.31806852238961 | epot = -21.8059432402922 | etot = -17.5317208065307 -714000 ekin = 2.5623858309981 | erot = 2.10850361056242 | epot = -21.8681675013087 | etot = -17.1972780597482 -715000 ekin = 2.42321114653449 | erot = 3.74023135295617 | epot = -21.8498336266088 | etot = -15.6863911271181 -716000 ekin = 2.83316600532177 | erot = 2.84850242081136 | epot = -21.7640231598545 | etot = -16.0823547337214 -717000 ekin = 3.45113934412558 | erot = 3.20598462177205 | epot = -21.667790662391 | etot = -15.0106666964934 -718000 ekin = 3.10736232683018 | erot = 3.94031338601796 | epot = -21.5629179727886 | etot = -14.5152422599405 -719000 ekin = 2.38564322644682 | erot = 2.9508981175584 | epot = -21.5481188237003 | etot = -16.2115774796951 -720000 ekin = 2.22543420991222 | erot = 3.14305432696275 | epot = -21.5381615962024 | etot = -16.1696730593275 -721000 ekin = 1.71709109813907 | erot = 2.23939430363992 | epot = -21.4645851946692 | etot = -17.5080997928902 -722000 ekin = 1.93213958129581 | erot = 2.8157321827673 | epot = -21.4896847080113 | etot = -16.7418129439482 -723000 ekin = 2.38145345346889 | erot = 2.55666957995949 | epot = -21.4374887927968 | etot = -16.4993657593684 -724000 ekin = 1.74740284448188 | erot = 2.4555617568904 | epot = -21.4125175551609 | etot = -17.2095529537886 -725000 ekin = 2.29233638352031 | erot = 2.95267014777738 | epot = -21.4751392844086 | etot = -16.2301327531109 -726000 ekin = 1.63503646092183 | erot = 2.30649262262119 | epot = -21.5156851039583 | etot = -17.5741560204153 -727000 ekin = 2.46705454176009 | erot = 3.19802987014478 | epot = -21.5382715508197 | etot = -15.8731871389148 -728000 ekin = 2.21709576272191 | erot = 2.16616227421246 | epot = -21.5244744557247 | etot = -17.1412164187904 -729000 ekin = 1.89396537247993 | erot = 1.66596987620967 | epot = -21.5644109232526 | etot = -18.004475674563 -730000 ekin = 1.78155182892059 | erot = 2.15399661961712 | epot = -21.5594738957829 | etot = -17.6239254472452 -731000 ekin = 2.16713092512296 | erot = 2.96875570154116 | epot = -21.4952326145864 | etot = -16.3593459879223 -732000 ekin = 2.40927355189018 | erot = 2.27189990077001 | epot = -21.3831563581627 | etot = -16.7019829055025 -733000 ekin = 3.04824198143783 | erot = 2.57289903054808 | epot = -21.429005165309 | etot = -15.8078641533231 -734000 ekin = 2.36703883022854 | erot = 2.04468815017471 | epot = -21.4926214065431 | etot = -17.0808944261399 -735000 ekin = 2.13292788677937 | erot = 1.55097035487251 | epot = -21.5455592190822 | etot = -17.8616609774303 -736000 ekin = 2.13562110082197 | erot = 3.45795834862289 | epot = -21.6515763333194 | etot = -16.0579968838745 -737000 ekin = 1.73550703692746 | erot = 3.58781244645388 | epot = -21.6785680654269 | etot = -16.3552485820456 -738000 ekin = 2.0113668076702 | erot = 2.50533140705366 | epot = -21.7068415263434 | etot = -17.1901433116195 -739000 ekin = 1.85122466968334 | erot = 2.19323904324287 | epot = -21.7211705032462 | etot = -17.67670679032 -740000 ekin = 2.84677298867338 | erot = 2.79086338446698 | epot = -21.7460997683893 | etot = -16.1084633952489 -741000 ekin = 2.47281769013275 | erot = 2.90867674862124 | epot = -21.8038806031311 | etot = -16.4223861643772 -742000 ekin = 2.74212748781965 | erot = 3.26601844940295 | epot = -21.9417105639309 | etot = -15.9335646267083 -743000 ekin = 2.23337436613033 | erot = 3.20752099935253 | epot = -22.076993886109 | etot = -16.6360985206262 -744000 ekin = 2.0100758296396 | erot = 3.79208398827072 | epot = -22.1581491314472 | etot = -16.3559893135369 -745000 ekin = 3.14168435406401 | erot = 2.32756039064277 | epot = -22.1552791709709 | etot = -16.6860344262641 -746000 ekin = 2.96147960587595 | erot = 2.64919778641528 | epot = -22.131657657659 | etot = -16.5209802653677 -747000 ekin = 2.31713973406908 | erot = 2.05388385027238 | epot = -22.1362115743711 | etot = -17.7651879900297 -748000 ekin = 2.36228107661837 | erot = 2.41530550223615 | epot = -22.1703943251346 | etot = -17.3928077462801 -749000 ekin = 2.07006713072585 | erot = 2.7743291960411 | epot = -22.1708421357977 | etot = -17.3264458090308 -750000 ekin = 1.65834656870048 | erot = 2.38415657369845 | epot = -22.2465520170919 | etot = -18.2040488746929 -751000 ekin = 1.79302728344389 | erot = 2.82710216006101 | epot = -22.3488339479635 | etot = -17.7287045044586 -752000 ekin = 1.35555517803007 | erot = 1.46019783589211 | epot = -22.4342877547318 | etot = -19.6185347408096 -753000 ekin = 1.88586262445723 | erot = 2.44014879801272 | epot = -22.3837690917336 | etot = -18.0577576692636 -754000 ekin = 1.74745498380874 | erot = 2.736120118542 | epot = -22.2852965474798 | etot = -17.8017214451291 -755000 ekin = 2.39590781949903 | erot = 2.41019902787153 | epot = -22.2066358684386 | etot = -17.400529021068 -756000 ekin = 1.83745653598818 | erot = 2.79024351605604 | epot = -22.133592240187 | etot = -17.5058921881428 -757000 ekin = 1.97281200687049 | erot = 2.57792722235946 | epot = -22.0604464398181 | etot = -17.5097072105881 -758000 ekin = 1.18945619136922 | erot = 2.72372183682492 | epot = -21.9899494795137 | etot = -18.0767714513196 -759000 ekin = 2.16230453116658 | erot = 1.39722896511083 | epot = -22.0003304659983 | etot = -18.4407969697208 -760000 ekin = 2.57253050230034 | erot = 2.33269711137818 | epot = -22.0357457302398 | etot = -17.1305181165613 -761000 ekin = 2.08545216810509 | erot = 2.24940559703296 | epot = -22.1132097744113 | etot = -17.7783520092732 -762000 ekin = 2.13509249172209 | erot = 1.66078369856518 | epot = -22.1380840935026 | etot = -18.3422079032154 -763000 ekin = 2.42851727622128 | erot = 3.36016749294484 | epot = -22.2079173436287 | etot = -16.4192325744626 -764000 ekin = 2.84703530894743 | erot = 2.79172375883347 | epot = -22.2143624032421 | etot = -16.5756033354612 -765000 ekin = 1.81325658345262 | erot = 2.77448180912352 | epot = -22.1194010453623 | etot = -17.5316626527862 -766000 ekin = 2.64831101430988 | erot = 2.3138164970859 | epot = -21.9919179324216 | etot = -17.0297904210258 -767000 ekin = 2.58949745571041 | erot = 2.86718473216886 | epot = -21.9087370669525 | etot = -16.4520548790732 -768000 ekin = 1.86313167956692 | erot = 2.78552244417216 | epot = -21.9381577980074 | etot = -17.2895036742684 -769000 ekin = 2.40162376419982 | erot = 2.31402374045873 | epot = -22.0373843590673 | etot = -17.3217368544087 -770000 ekin = 2.49146487205158 | erot = 3.23101926076329 | epot = -22.1439576198693 | etot = -16.4214734870544 -771000 ekin = 2.33226337742861 | erot = 2.27787220200642 | epot = -22.1812213688413 | etot = -17.5710857894063 -772000 ekin = 2.28990016215835 | erot = 2.99389364569331 | epot = -22.2765115340955 | etot = -16.9927177262439 -773000 ekin = 2.23002457595115 | erot = 1.82240115552768 | epot = -22.3379686916384 | etot = -18.2855429601596 -774000 ekin = 2.82350297312971 | erot = 2.21054815770296 | epot = -22.331524297742 | etot = -17.2974731669094 -775000 ekin = 1.82305982105504 | erot = 1.8710033654222 | epot = -22.2729891281483 | etot = -18.578925941671 -776000 ekin = 1.39169167990076 | erot = 3.16027505319298 | epot = -22.2459295451277 | etot = -17.6939628120339 -777000 ekin = 1.6265637770548 | erot = 2.80881827044757 | epot = -22.1611617112313 | etot = -17.7257796637289 -778000 ekin = 1.49436478903863 | erot = 2.2416123685623 | epot = -22.1732646444852 | etot = -18.4372874868843 -779000 ekin = 1.88107404119767 | erot = 1.90732846459753 | epot = -22.2125828989308 | etot = -18.4241803931357 -780000 ekin = 1.70209634464212 | erot = 2.3051529921035 | epot = -22.2800747799124 | etot = -18.2728254431668 -781000 ekin = 2.12615575710869 | erot = 2.56065358398066 | epot = -22.3657963731658 | etot = -17.6789870320765 -782000 ekin = 2.60319344794517 | erot = 1.95716880667361 | epot = -22.2788895886639 | etot = -17.7185273340451 -783000 ekin = 2.19489638548848 | erot = 2.90033506167529 | epot = -22.2004563501245 | etot = -17.1052249029607 -784000 ekin = 2.84914111009348 | erot = 2.24051018422877 | epot = -22.2093010900996 | etot = -17.1196497957773 -785000 ekin = 3.14240765153577 | erot = 2.92860772919916 | epot = -22.2500274240077 | etot = -16.1790120432728 -786000 ekin = 2.83372300736035 | erot = 3.44593690351847 | epot = -22.2923595270367 | etot = -16.0126996161579 -787000 ekin = 2.41074903520556 | erot = 3.01381650302091 | epot = -22.2329745868673 | etot = -16.8084090486408 -788000 ekin = 1.99557665602945 | erot = 2.01600225895996 | epot = -22.1996915458458 | etot = -18.1881126308564 -789000 ekin = 2.46258971641133 | erot = 2.27406771625315 | epot = -22.1314921413931 | etot = -17.3948347087286 -790000 ekin = 3.5794195002921 | erot = 2.8244086481244 | epot = -22.0691321886934 | etot = -15.6653040402769 -791000 ekin = 3.1240271028451 | erot = 2.42401718962738 | epot = -22.0808685046086 | etot = -16.5328242121361 -792000 ekin = 3.95429056548242 | erot = 1.97241939137158 | epot = -22.0156932891881 | etot = -16.0889833323341 -793000 ekin = 2.26828416500901 | erot = 2.58677202552918 | epot = -21.9219598803777 | etot = -17.0669036898395 -794000 ekin = 2.16106559150924 | erot = 2.44310931274124 | epot = -21.7619518452423 | etot = -17.1577769409918 -795000 ekin = 1.62519700428841 | erot = 2.41826691867446 | epot = -21.6012749849542 | etot = -17.5578110619913 -796000 ekin = 2.18377144801669 | erot = 2.13093440679002 | epot = -21.4820337714693 | etot = -17.1673279166625 -797000 ekin = 1.81427862345353 | erot = 1.99534051513422 | epot = -21.4739195915569 | etot = -17.6643004529692 -798000 ekin = 2.22012195132989 | erot = 2.51363796316555 | epot = -21.5008270155092 | etot = -16.7670671010137 -799000 ekin = 1.88984581553595 | erot = 2.87047971528298 | epot = -21.4708608053325 | etot = -16.7105352745135 -800000 ekin = 2.14235800297794 | erot = 2.35196377273804 | epot = -21.3792596865245 | etot = -16.8849379108085 -801000 ekin = 1.84302686949433 | erot = 1.65480855802627 | epot = -21.2211741734437 | etot = -17.7233387459231 -802000 ekin = 2.20305615004888 | erot = 2.22355768328245 | epot = -21.1073599995259 | etot = -16.6807461661946 -803000 ekin = 2.64836814873033 | erot = 1.9076187180486 | epot = -21.075204188547 | etot = -16.5192173217681 -804000 ekin = 2.34495845479318 | erot = 2.89112045330491 | epot = -21.0176734836814 | etot = -15.7815945755833 -805000 ekin = 1.79915640284781 | erot = 2.71685844764876 | epot = -20.8858433761952 | etot = -16.3698285256986 -806000 ekin = 1.74992507845556 | erot = 2.08517047523251 | epot = -20.8503301901418 | etot = -17.0152346364538 -807000 ekin = 1.57172452594495 | erot = 1.70422569898767 | epot = -20.9092333967052 | etot = -17.6332831717726 -808000 ekin = 2.08106901002531 | erot = 2.40367065218828 | epot = -20.985869179598 | etot = -16.5011295173844 -809000 ekin = 2.61736488835992 | erot = 1.51251405170843 | epot = -20.9790910298502 | etot = -16.8492120897818 -810000 ekin = 3.07344763503492 | erot = 2.65428122600395 | epot = -20.8962978903169 | etot = -15.1685690292781 -811000 ekin = 3.02889983101699 | erot = 3.61686315729186 | epot = -20.9396616028789 | etot = -14.2938986145701 -812000 ekin = 2.13832655324419 | erot = 2.7919099294265 | epot = -21.0260005012596 | etot = -16.0957640185889 -813000 ekin = 2.19077235410927 | erot = 3.16158040032407 | epot = -21.2169108164963 | etot = -15.864558062063 -814000 ekin = 1.70775111413747 | erot = 2.98436840501864 | epot = -21.308951189013 | etot = -16.6168316698569 -815000 ekin = 2.14630779714624 | erot = 2.27335416843264 | epot = -21.3099230783926 | etot = -16.8902611128138 -816000 ekin = 2.70331501775258 | erot = 1.53093796189124 | epot = -21.3384418834225 | etot = -17.1041889037787 -817000 ekin = 2.55738086811903 | erot = 2.58558173150041 | epot = -21.4691891608916 | etot = -16.3262265612721 -818000 ekin = 2.27829786328906 | erot = 2.26089725682101 | epot = -21.5162183667694 | etot = -16.9770232466593 -819000 ekin = 2.10478260130361 | erot = 3.02380855832961 | epot = -21.5292309310152 | etot = -16.400639771382 -820000 ekin = 2.50608188233135 | erot = 2.71783485224718 | epot = -21.5036816055507 | etot = -16.2797648709722 -821000 ekin = 2.62609848062628 | erot = 2.55164634943843 | epot = -21.478766185164 | etot = -16.3010213550993 -822000 ekin = 3.63941681915299 | erot = 2.20246894917129 | epot = -21.4688230156577 | etot = -15.6269372473334 -823000 ekin = 3.58953515450024 | erot = 2.7355620654562 | epot = -21.4650227341942 | etot = -15.1399255142378 -824000 ekin = 4.11304720722591 | erot = 3.29174595135481 | epot = -21.4062011377905 | etot = -14.0014079792098 -825000 ekin = 2.90620097853795 | erot = 3.46409084826254 | epot = -21.2436944546109 | etot = -14.8734026278104 -826000 ekin = 1.72188438195169 | erot = 1.97028277378149 | epot = -21.0473904580338 | etot = -17.3552233023006 -827000 ekin = 1.9124069409458 | erot = 2.55760488338655 | epot = -20.9206700763424 | etot = -16.4506582520101 -828000 ekin = 2.38145056979363 | erot = 2.55544957149183 | epot = -20.8204865756543 | etot = -15.8835864343688 -829000 ekin = 2.24733826946604 | erot = 1.78474837345229 | epot = -20.7084449579388 | etot = -16.6763583150204 -830000 ekin = 2.52795893691035 | erot = 2.34146724282711 | epot = -20.5883731027638 | etot = -15.7189469230264 -831000 ekin = 2.68310001004752 | erot = 2.07407005901145 | epot = -20.4364451382899 | etot = -15.6792750692309 -832000 ekin = 2.6732342426401 | erot = 2.02167788192501 | epot = -20.3691783993746 | etot = -15.6742662748095 -833000 ekin = 2.55071664949192 | erot = 2.59972899624767 | epot = -20.3036213925319 | etot = -15.1531757467923 -834000 ekin = 2.87089088359562 | erot = 2.32463192225235 | epot = -20.2984653371648 | etot = -15.1029425313169 -835000 ekin = 2.77558903596269 | erot = 2.73757154391999 | epot = -20.4022293845421 | etot = -14.8890688046595 -836000 ekin = 2.57713146919653 | erot = 2.85322310545496 | epot = -20.5403137141641 | etot = -15.1099591395126 -837000 ekin = 1.78075406754283 | erot = 1.97503243561097 | epot = -20.5889142070484 | etot = -16.8331277038946 -838000 ekin = 1.98032617531702 | erot = 2.79829467073936 | epot = -20.6049667376349 | etot = -15.8263458915785 -839000 ekin = 2.0003179521848 | erot = 2.70198331564818 | epot = -20.5921495833285 | etot = -15.8898483154955 -840000 ekin = 1.70031236242703 | erot = 2.9568568949057 | epot = -20.6678372916037 | etot = -16.010668034271 -841000 ekin = 2.77705100359315 | erot = 2.84742847205068 | epot = -20.7929304121764 | etot = -15.1684509365325 -842000 ekin = 2.54393458307436 | erot = 2.87172695192626 | epot = -20.8173418291016 | etot = -15.401680294101 -843000 ekin = 2.00273625390939 | erot = 2.63437491598433 | epot = -20.8053999188197 | etot = -16.1682887489259 -844000 ekin = 1.5290074956935 | erot = 1.92882434140973 | epot = -20.8427655387949 | etot = -17.3849337016917 -845000 ekin = 2.27176799938834 | erot = 2.30843636540598 | epot = -20.9384881501645 | etot = -16.3582837853702 -846000 ekin = 2.06718804989496 | erot = 2.3310866232498 | epot = -21.008503215967 | etot = -16.6102285428222 -847000 ekin = 2.457310325364 | erot = 2.64112097293886 | epot = -20.9624761048838 | etot = -15.8640448065809 -848000 ekin = 2.13894899278458 | erot = 1.46487099434191 | epot = -20.9909626022983 | etot = -17.3871426151718 -849000 ekin = 2.0007946308419 | erot = 2.48568109050424 | epot = -20.9995492646628 | etot = -16.5130735433167 -850000 ekin = 2.54186297995285 | erot = 2.66929613872207 | epot = -20.9906717645297 | etot = -15.7795126458548 -851000 ekin = 2.16443404123471 | erot = 2.92830981454153 | epot = -20.9932718794596 | etot = -15.9005280236834 -852000 ekin = 2.48255398040851 | erot = 2.46238001266592 | epot = -21.0187491181079 | etot = -16.0738151250335 -853000 ekin = 2.4154146701692 | erot = 2.97520224443386 | epot = -20.9598722543997 | etot = -15.5692553397966 -854000 ekin = 2.35150751079563 | erot = 2.85453387569364 | epot = -20.8693696367608 | etot = -15.6633282502715 -855000 ekin = 2.36749640703667 | erot = 2.0675340835823 | epot = -20.8980197782033 | etot = -16.4629892875844 -856000 ekin = 2.52164598863741 | erot = 2.75265020302047 | epot = -20.800830948998 | etot = -15.5265347573401 -857000 ekin = 2.55862872070476 | erot = 3.03030828592916 | epot = -20.6910887919773 | etot = -15.1021517853433 -858000 ekin = 3.12628251408762 | erot = 2.14554604261068 | epot = -20.6394579492303 | etot = -15.367629392532 -859000 ekin = 2.91259413572113 | erot = 2.23773675238285 | epot = -20.6611486479508 | etot = -15.5108177598468 -860000 ekin = 2.88318377110753 | erot = 1.51972062646445 | epot = -20.6828066069552 | etot = -16.2799022093833 -861000 ekin = 2.33529167415754 | erot = 2.85116617791257 | epot = -20.6796212139896 | etot = -15.4931633619195 -862000 ekin = 3.06091745354044 | erot = 1.86960550588564 | epot = -20.7257485328209 | etot = -15.7952255733949 -863000 ekin = 2.88295223464283 | erot = 1.77743902656173 | epot = -20.8340328987095 | etot = -16.1736416375049 -864000 ekin = 2.95602292127633 | erot = 2.6505641071531 | epot = -21.016295456145 | etot = -15.4097084277156 -865000 ekin = 3.3172549369506 | erot = 2.24347319046511 | epot = -21.1441095096619 | etot = -15.5833813822461 -866000 ekin = 2.8446879555804 | erot = 3.16802464112882 | epot = -21.2275167371632 | etot = -15.214804140454 -867000 ekin = 2.74149808612436 | erot = 3.09628634794252 | epot = -21.2140642048229 | etot = -15.376279770756 -868000 ekin = 2.1914148486481 | erot = 2.23765996064102 | epot = -21.1661691183494 | etot = -16.7370943090603 -869000 ekin = 2.92726848075923 | erot = 2.49663936074753 | epot = -21.1109612585256 | etot = -15.6870534170188 -870000 ekin = 2.47986538741065 | erot = 2.11907230969517 | epot = -21.0900293946685 | etot = -16.4910916975627 -871000 ekin = 2.18342640526418 | erot = 2.37474045896628 | epot = -20.9804914418025 | etot = -16.422324577572 -872000 ekin = 1.52873571215979 | erot = 2.08908078804674 | epot = -20.9343176993392 | etot = -17.3165011991327 -873000 ekin = 1.39281578471524 | erot = 2.29034780878959 | epot = -21.0007866828842 | etot = -17.3176230893794 -874000 ekin = 1.40786554880768 | erot = 2.77007970032351 | epot = -21.1600842742429 | etot = -16.9821390251117 -875000 ekin = 1.18320018517441 | erot = 2.73058842883514 | epot = -21.2959059488291 | etot = -17.3821173348196 -876000 ekin = 1.8300189393038 | erot = 2.99586941144888 | epot = -21.3298635968753 | etot = -16.5039752461226 -877000 ekin = 2.38032906471077 | erot = 2.03722695211229 | epot = -21.4152790752831 | etot = -16.99772305846 -878000 ekin = 2.1293851684127 | erot = 1.75666654131943 | epot = -21.412657760354 | etot = -17.5266060506219 -879000 ekin = 2.23837299177367 | erot = 2.71307243504656 | epot = -21.4006541150457 | etot = -16.4492086882254 -880000 ekin = 2.68032631557358 | erot = 2.78439945590095 | epot = -21.4462782448912 | etot = -15.9815524734167 -881000 ekin = 2.86810525851389 | erot = 2.35959915589951 | epot = -21.4314549447334 | etot = -16.20375053032 -882000 ekin = 2.33172283615115 | erot = 2.17176020371466 | epot = -21.369535469283 | etot = -16.8660524294172 -883000 ekin = 2.36331150998289 | erot = 1.97634374053965 | epot = -21.1748990104138 | etot = -16.8352437598913 -884000 ekin = 2.53782271833829 | erot = 2.25243670168425 | epot = -21.0795767771653 | etot = -16.2893173571428 -885000 ekin = 2.86057103069745 | erot = 2.27462544190305 | epot = -21.0782171958267 | etot = -15.9430207232262 -886000 ekin = 3.17034195996096 | erot = 1.7483264672941 | epot = -21.1280719510454 | etot = -16.2094035237903 -887000 ekin = 2.66023408534638 | erot = 2.49426802108019 | epot = -21.1909579488463 | etot = -16.0364558424197 -888000 ekin = 2.14156056158802 | erot = 2.8306592029555 | epot = -21.2749898508176 | etot = -16.3027700862741 -889000 ekin = 2.13776380125426 | erot = 2.19994227158625 | epot = -21.1902576201104 | etot = -16.8525515472699 -890000 ekin = 1.76446650263826 | erot = 2.97354753014622 | epot = -21.2518724314555 | etot = -16.513858398671 -891000 ekin = 1.64433607192947 | erot = 2.28044235221045 | epot = -21.3759471910581 | etot = -17.4511687669181 -892000 ekin = 1.97381907006141 | erot = 2.35969977765341 | epot = -21.5200869372681 | etot = -17.1865680895533 -893000 ekin = 1.77998159671209 | erot = 1.83959134574388 | epot = -21.5960425863495 | etot = -17.9764696438936 -894000 ekin = 2.8098996128374 | erot = 2.80337844303783 | epot = -21.6896955865519 | etot = -16.0764175306767 -895000 ekin = 2.03570642281182 | erot = 2.73641442629082 | epot = -21.7763280754101 | etot = -17.0042072263074 -896000 ekin = 1.6670401968188 | erot = 2.55842313387757 | epot = -21.9079691828366 | etot = -17.6825058521403 -897000 ekin = 1.79364820755772 | erot = 2.35937074837064 | epot = -22.0466195733302 | etot = -17.8936006174019 -898000 ekin = 1.84103348909591 | erot = 2.41596980112089 | epot = -22.0792153246985 | etot = -17.8222120344817 -899000 ekin = 1.6644807831865 | erot = 3.06295573986189 | epot = -22.0050930291629 | etot = -17.2776565061145 -900000 ekin = 2.15301263014261 | erot = 2.62503812958041 | epot = -21.9769631774149 | etot = -17.1989124176919 -901000 ekin = 2.43323525076021 | erot = 2.69661561775584 | epot = -22.0455467285607 | etot = -16.9156958600446 -902000 ekin = 2.57983518470479 | erot = 2.40634661051269 | epot = -22.0504126836938 | etot = -17.0642308884763 -903000 ekin = 2.38804084084236 | erot = 2.40369143268286 | epot = -22.0548572254258 | etot = -17.2631249519006 -904000 ekin = 1.99756799382411 | erot = 3.1573673373966 | epot = -22.0783783499621 | etot = -16.9234430187413 -905000 ekin = 2.2804213599578 | erot = 2.20746001153528 | epot = -22.092475444409 | etot = -17.6045940729159 -906000 ekin = 2.49914497220395 | erot = 1.67106173041059 | epot = -22.0649292741971 | etot = -17.8947225715826 -907000 ekin = 2.3417075346135 | erot = 2.1683018981558 | epot = -21.9182395193391 | etot = -17.4082300865698 -908000 ekin = 2.83101675354561 | erot = 2.39226452568031 | epot = -21.9393923471479 | etot = -16.716111067922 -909000 ekin = 3.13519044247879 | erot = 2.07053636961478 | epot = -22.044039894957 | etot = -16.8383130828635 -910000 ekin = 2.91492350277448 | erot = 3.54269221448407 | epot = -22.1774209001616 | etot = -15.7198051829031 -911000 ekin = 1.86299522014884 | erot = 2.75425299355672 | epot = -22.2318842654016 | etot = -17.6146360516961 -912000 ekin = 2.64270620869814 | erot = 1.86916034984858 | epot = -22.2816929482531 | etot = -17.7698263897064 -913000 ekin = 2.45835259040075 | erot = 2.03343540339215 | epot = -22.4051980318983 | etot = -17.9134100381055 -914000 ekin = 2.01630257583653 | erot = 3.01931541129967 | epot = -22.505580829989 | etot = -17.4699628428528 -915000 ekin = 2.73550820750708 | erot = 2.14051989379168 | epot = -22.5067223019055 | etot = -17.6306942006067 -916000 ekin = 2.38833694849903 | erot = 3.26236542376324 | epot = -22.5299732656691 | etot = -16.8792708934069 -917000 ekin = 2.21211072529667 | erot = 2.24425221182158 | epot = -22.5175498112378 | etot = -18.0611868741196 -918000 ekin = 2.11721632678553 | erot = 2.05681940825278 | epot = -22.4485798442659 | etot = -18.2745441092276 -919000 ekin = 2.66065401645241 | erot = 2.41853759346264 | epot = -22.4819256778217 | etot = -17.4027340679067 -920000 ekin = 3.26471044916533 | erot = 2.75531911342506 | epot = -22.5858600689149 | etot = -16.5658305063245 -921000 ekin = 2.72028388628927 | erot = 1.96960596371279 | epot = -22.6394402751861 | etot = -17.949550425184 -922000 ekin = 1.43428549123067 | erot = 1.52428475569852 | epot = -22.6914991306333 | etot = -19.7329288837041 -923000 ekin = 1.67603986848274 | erot = 1.86522020655462 | epot = -22.7510571233686 | etot = -19.2097970483313 -924000 ekin = 2.15000311118185 | erot = 1.53327070095754 | epot = -22.7223413241931 | etot = -19.0390675120537 -925000 ekin = 2.27769316315994 | erot = 1.3558291477729 | epot = -22.6317669747038 | etot = -18.998244663771 -926000 ekin = 2.00370753803371 | erot = 2.07123237010034 | epot = -22.5811533157097 | etot = -18.5062134075757 -927000 ekin = 2.51631428248841 | erot = 1.98711239136865 | epot = -22.6957752134475 | etot = -18.1923485395904 -928000 ekin = 2.57502157703452 | erot = 2.51449316644153 | epot = -22.8486668477059 | etot = -17.7591521042298 -929000 ekin = 2.66015175923782 | erot = 1.82991995656988 | epot = -22.8894816710892 | etot = -18.3994099552814 -930000 ekin = 2.41758548277495 | erot = 2.009770197394 | epot = -22.9023129289068 | etot = -18.4749572487379 -931000 ekin = 3.01936517399358 | erot = 2.11115283295647 | epot = -22.8598478032753 | etot = -17.7293297963252 -932000 ekin = 2.34904883629148 | erot = 1.87134929534041 | epot = -22.900230384769 | etot = -18.6798322531371 -933000 ekin = 2.16775611540092 | erot = 2.83796264813669 | epot = -22.9075292968865 | etot = -17.9018105333489 -934000 ekin = 2.17428610858913 | erot = 2.11891276299499 | epot = -22.9275911153102 | etot = -18.6343922437261 -935000 ekin = 2.35380058127247 | erot = 2.22719757040086 | epot = -22.9178791070039 | etot = -18.3368809553306 -936000 ekin = 2.29398857252167 | erot = 2.52122883801967 | epot = -23.0254587453496 | etot = -18.2102413348083 -937000 ekin = 2.32405492839276 | erot = 2.82571975062453 | epot = -23.1134869099967 | etot = -17.9637122309794 -938000 ekin = 2.46190818228192 | erot = 1.99586541720566 | epot = -23.1690855883854 | etot = -18.7113119888978 -939000 ekin = 2.99494633358444 | erot = 2.11200579979091 | epot = -23.1621265982256 | etot = -18.0551744648502 -940000 ekin = 3.76773061527755 | erot = 2.67954167018356 | epot = -23.1020260319689 | etot = -16.6547537465078 -941000 ekin = 3.15108874053801 | erot = 2.26610050109568 | epot = -23.0042404655517 | etot = -17.587051223918 -942000 ekin = 3.50311245643908 | erot = 1.8837360214302 | epot = -22.9671180112669 | etot = -17.5802695333976 -943000 ekin = 3.82043792465856 | erot = 2.71285823250348 | epot = -22.9404059827705 | etot = -16.4071098256085 -944000 ekin = 2.68278476017665 | erot = 2.75585489458161 | epot = -22.9190580774811 | etot = -17.4804184227228 -945000 ekin = 2.55880828345199 | erot = 2.02741981318914 | epot = -22.8232630911495 | etot = -18.2370349945083 -946000 ekin = 2.47548691870273 | erot = 1.6686405936174 | epot = -22.6586979544826 | etot = -18.5145704421625 -947000 ekin = 2.41867478100658 | erot = 1.99274780926994 | epot = -22.5542133657001 | etot = -18.1427907754236 -948000 ekin = 3.54970439277899 | erot = 2.57756240201337 | epot = -22.4104376157297 | etot = -16.2831708209373 -949000 ekin = 2.98589976166071 | erot = 2.44208964275301 | epot = -22.1971411230011 | etot = -16.7691517185874 -950000 ekin = 1.82147308870196 | erot = 3.05083899379336 | epot = -22.0435130221228 | etot = -17.1712009396274 -951000 ekin = 2.20031505253436 | erot = 2.38004890424643 | epot = -22.0174402075992 | etot = -17.4370762508184 -952000 ekin = 2.14165422682636 | erot = 1.67045420750586 | epot = -21.9875031647928 | etot = -18.1753947304605 -953000 ekin = 2.2983346942831 | erot = 1.97349532600852 | epot = -21.9532851584682 | etot = -17.6814551381766 -954000 ekin = 1.48835290094507 | erot = 3.3569245199183 | epot = -21.8812774176255 | etot = -17.0359999967622 -955000 ekin = 1.87513794155827 | erot = 2.65898918540886 | epot = -21.7919528937349 | etot = -17.2578257667678 -956000 ekin = 1.6947359470094 | erot = 2.15427252360417 | epot = -21.7268035908356 | etot = -17.877795120222 -957000 ekin = 1.75579814865835 | erot = 1.63901039608816 | epot = -21.7007270322021 | etot = -18.3059184874556 -958000 ekin = 1.59869777656518 | erot = 2.20104985114387 | epot = -21.7023937250484 | etot = -17.9026460973393 -959000 ekin = 2.58438881562723 | erot = 2.4897790743314 | epot = -21.7153511733982 | etot = -16.6411832834396 -960000 ekin = 2.53916903929275 | erot = 2.05995138561217 | epot = -21.7134163297426 | etot = -17.1142959048376 -961000 ekin = 2.28282707786747 | erot = 2.18347157951508 | epot = -21.7152390799839 | etot = -17.2489404226013 -962000 ekin = 1.65520100959905 | erot = 3.51416445242778 | epot = -21.7329558565077 | etot = -16.5635903944808 -963000 ekin = 1.99568689924178 | erot = 1.50126173817714 | epot = -21.6847527677603 | etot = -18.1878041303414 -964000 ekin = 2.18616111169191 | erot = 2.27601428306195 | epot = -21.6212716735791 | etot = -17.1590962788252 -965000 ekin = 2.12688674785305 | erot = 2.31141713690627 | epot = -21.6018715374843 | etot = -17.163567652725 -966000 ekin = 3.18043989665768 | erot = 3.42455452205085 | epot = -21.638305203769 | etot = -15.0333107850605 -967000 ekin = 3.07300409154252 | erot = 2.17511749698304 | epot = -21.5951488445701 | etot = -16.3470272560445 -968000 ekin = 2.0866315065553 | erot = 2.13997027735021 | epot = -21.5232721871232 | etot = -17.2966704032177 -969000 ekin = 2.26951411936363 | erot = 2.21822796004341 | epot = -21.4611553284776 | etot = -16.9734132490706 -970000 ekin = 2.4916739659978 | erot = 2.62083774678042 | epot = -21.4077353682587 | etot = -16.2952236554805 -971000 ekin = 2.49745059610599 | erot = 2.64553775005006 | epot = -21.3712924820093 | etot = -16.2283041358532 -972000 ekin = 3.2069302084461 | erot = 2.4701129448845 | epot = -21.3144344371103 | etot = -15.6373912837797 -973000 ekin = 3.3593544808794 | erot = 2.62917582888825 | epot = -21.2433830591837 | etot = -15.2548527494161 -974000 ekin = 2.71069552226069 | erot = 2.13944446989064 | epot = -21.1404268855179 | etot = -16.2902868933666 -975000 ekin = 1.81165819781674 | erot = 2.10218924092727 | epot = -21.0499905566304 | etot = -17.1361431178864 -976000 ekin = 2.36984742020937 | erot = 1.38488988265326 | epot = -20.9803229653516 | etot = -17.2255856624889 -977000 ekin = 2.83728662155799 | erot = 3.02976542728586 | epot = -21.086860961914 | etot = -15.2198089130701 -978000 ekin = 3.14169266917129 | erot = 3.02799812032621 | epot = -21.1408187166748 | etot = -14.9711279271773 -979000 ekin = 3.63725915757345 | erot = 2.47075910077982 | epot = -21.0348329782418 | etot = -14.9268147198885 -980000 ekin = 3.42622785415583 | erot = 3.24164435781271 | epot = -20.9604411583363 | etot = -14.2925689463677 -981000 ekin = 2.9282364939793 | erot = 2.44516658563953 | epot = -20.999389015838 | etot = -15.6259859362192 -982000 ekin = 2.04558911070081 | erot = 2.21302288881358 | epot = -21.0172581853275 | etot = -16.7586461858131 -983000 ekin = 2.56053983213181 | erot = 1.98406283304104 | epot = -21.0054554868711 | etot = -16.4608528216982 -984000 ekin = 2.31455025377677 | erot = 2.58584391470351 | epot = -21.0528748947299 | etot = -16.1524807262496 -985000 ekin = 2.31703817263369 | erot = 2.99965025262556 | epot = -21.1270579315131 | etot = -15.8103695062538 -986000 ekin = 2.05103854432386 | erot = 2.15351550911371 | epot = -21.2182405597612 | etot = -17.0136865063236 -987000 ekin = 2.41899263793245 | erot = 1.58416150281503 | epot = -21.1906087726859 | etot = -17.1874546319384 -988000 ekin = 2.75135283132848 | erot = 2.70498731016258 | epot = -21.09026978368 | etot = -15.6339296421889 -989000 ekin = 2.29408577956131 | erot = 2.8565620534449 | epot = -21.0178170251465 | etot = -15.8671691921403 -990000 ekin = 2.23414139649767 | erot = 2.58987928207186 | epot = -20.9412338597721 | etot = -16.1172131812026 -991000 ekin = 2.20140095465642 | erot = 2.53421928109187 | epot = -20.8284298905317 | etot = -16.0928096547834 -992000 ekin = 1.73516341340694 | erot = 2.49726908126815 | epot = -20.8981414535471 | etot = -16.665708958872 -993000 ekin = 1.38883779880923 | erot = 1.96818984395136 | epot = -20.9939445972526 | etot = -17.6369169544921 -994000 ekin = 1.48978908674572 | erot = 2.95636513336705 | epot = -21.0608370227911 | etot = -16.6146828026783 -995000 ekin = 2.31404204513712 | erot = 1.67482961392507 | epot = -21.1264761824825 | etot = -17.1376045234203 -996000 ekin = 2.8977650484701 | erot = 2.85063328331352 | epot = -21.0879631716189 | etot = -15.3395648398352 -997000 ekin = 3.12980664910276 | erot = 2.14994147346884 | epot = -21.0789162715404 | etot = -15.7991681489688 -998000 ekin = 2.21592279552963 | erot = 3.03017611615787 | epot = -20.9989402817529 | etot = -15.7528413700654 -999000 ekin = 2.60947995309596 | erot = 1.73829419308785 | epot = -20.9136108602423 | etot = -16.5658367140585 -1000000 ekin = 2.32269547490305 | erot = 2.87794942105203 | epot = -20.9071852604882 | etot = -15.7065403645331 - 1000000 0.10323091 -1.356822 0.050122912 -1.1615306 -8.852818e-05 -Loop time of 33.1901 on 4 procs for 1000000 steps with 16 atoms - -Performance: 26031.848 tau/day, 30129.454 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.5594 | 12.197 | 22.984 | 287.1 | 36.75 -Bond | 0.088184 | 0.40908 | 0.68101 | 42.5 | 1.23 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 2.0155 | 2.194 | 2.4681 | 11.3 | 6.61 -Output | 1.6928e-05 | 2.3246e-05 | 2.5988e-05 | 0.0 | 0.00 -Modify | 0.2003 | 2.7296 | 5.1641 | 131.4 | 8.22 -Other | | 15.66 | | | 47.19 - -Nlocal: 4 ave 8 max 0 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 9 ave 10 max 8 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 34.5 ave 67 max 0 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 138 -Ave neighs/atom = 8.625 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:33 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 new file mode 100644 index 0000000000..56f1b72277 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 @@ -0,0 +1,172 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.861 | 2.861 | 2.861 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 +1000 ekin = 1.54234964773389 | erot = 1.71563526070267 | epot = -24.5477045187653 | etot = -21.2897196103287 +2000 ekin = 1.85988866919215 | erot = 1.9424302796508 | epot = -24.4843044999595 | etot = -20.6819855511165 +3000 ekin = 2.68354339452998 | erot = 2.14216528317607 | epot = -24.4019350693561 | etot = -19.57622639165 +4000 ekin = 2.04461800191989 | erot = 1.49015219763162 | epot = -24.2959428773347 | etot = -20.7611726777832 +5000 ekin = 1.76794859210155 | erot = 2.54289684465818 | epot = -24.2337587736863 | etot = -19.9229133369266 +6000 ekin = 3.1106424806079 | erot = 2.04409805200892 | epot = -24.1585729744133 | etot = -19.0038324417964 +7000 ekin = 3.21360097519306 | erot = 2.71941303605722 | epot = -24.0566262531609 | etot = -18.1236122419107 +8000 ekin = 2.82489935901743 | erot = 2.66790555575696 | epot = -24.0194805097633 | etot = -18.526675594989 +9000 ekin = 2.69381302856378 | erot = 2.59107820129446 | epot = -23.9216126050554 | etot = -18.6367213751972 +10000 ekin = 2.65765007662471 | erot = 1.95562671446597 | epot = -23.7978334881241 | etot = -19.1845566970334 + 10000 0.11811778 -1.4992295 0.011864944 -1.3212615 -0.00013416809 +Loop time of 0.295538 on 1 procs for 10000 steps with 16 atoms + +Performance: 29234.801 tau/day, 33836.575 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.20959 | 0.20959 | 0.20959 | 0.0 | 70.92 +Bond | 0.0073669 | 0.0073669 | 0.0073669 | 0.0 | 2.49 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0016472 | 0.0016472 | 0.0016472 | 0.0 | 0.56 +Output | 5.0068e-06 | 5.0068e-06 | 5.0068e-06 | 0.0 | 0.00 +Modify | 0.073117 | 0.073117 | 0.073117 | 0.0 | 24.74 +Other | | 0.003813 | | | 1.29 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 88 ave 88 max 88 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 88 +Ave neighs/atom = 5.5 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 new file mode 100644 index 0000000000..5cb953cd8c --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 @@ -0,0 +1,172 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.466 | 7.648 | 7.83 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 +1000 ekin = 1.34565986428024 | erot = 2.31051421234078 | epot = -24.5061991591502 | etot = -20.8500250825292 +2000 ekin = 2.15911766687235 | erot = 2.16031365874707 | epot = -24.4723177103698 | etot = -20.1528863847504 +3000 ekin = 3.26561948796015 | erot = 2.75651822936604 | epot = -24.412573068346 | etot = -18.3904353510198 +4000 ekin = 1.92438809241066 | erot = 2.12016940074985 | epot = -24.3496233970111 | etot = -20.3050659038506 +5000 ekin = 1.35986357015476 | erot = 1.99413493074226 | epot = -24.2789445616949 | etot = -20.9249460607979 +6000 ekin = 2.19432475124593 | erot = 1.74281260409078 | epot = -24.2128064295788 | etot = -20.2756690742421 +7000 ekin = 2.65619274477635 | erot = 1.74094257048458 | epot = -24.1673462333493 | etot = -19.7702109180883 +8000 ekin = 2.51333548501168 | erot = 2.34649854571051 | epot = -24.0812769481836 | etot = -19.2214429174614 +9000 ekin = 2.24506493169711 | erot = 2.0652555461504 | epot = -23.9906736063989 | etot = -19.6803531285514 +10000 ekin = 2.36632635249862 | erot = 1.7959247176153 | epot = -23.9002627850602 | etot = -19.7380117149463 + 10000 0.10517006 -1.5057137 0.011947302 -1.345871 -9.5924016e-05 +Loop time of 0.251867 on 4 procs for 10000 steps with 16 atoms + +Performance: 34303.820 tau/day, 39703.495 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0035377 | 0.092047 | 0.17435 | 26.0 | 36.55 +Bond | 0.00065637 | 0.0031857 | 0.0053554 | 3.8 | 1.26 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013929 | 0.01497 | 0.015733 | 0.6 | 5.94 +Output | 5.0783e-05 | 5.2691e-05 | 5.3883e-05 | 0.0 | 0.02 +Modify | 0.0013576 | 0.020825 | 0.040231 | 11.8 | 8.27 +Other | | 0.1208 | | | 47.96 + +Nlocal: 4 ave 8 max 0 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 9 ave 10 max 8 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 34.5 ave 67 max 0 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 138 +Ave neighs/atom = 8.625 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/input.duplex1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 similarity index 99% rename from examples/USER/cgdna/examples/oxDNA2/duplex1/input.duplex1 rename to examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 index 366e5db67a..5260e51330 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/input.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 @@ -73,6 +73,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 1000000 +run 10000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 deleted file mode 100644 index 25c705daf8..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.1 +++ /dev/null @@ -1,1167 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 3.023 | 3.023 | 3.023 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 -1000 ekin = 0.00113086229080528 | erot = 0.0043101016040658 | epot = -14.6229549982368 | etot = -14.617514034342 -2000 ekin = 0.0044853322434243 | erot = 0.0171407706505008 | epot = -14.6391401372615 | etot = -14.6175140343675 -3000 ekin = 0.00995035259649285 | erot = 0.0381961780846484 | epot = -14.6656605650904 | etot = -14.6175140344093 -4000 ekin = 0.0173418024862054 | erot = 0.0669935184860634 | epot = -14.7018493554381 | etot = -14.6175140344659 -5000 ekin = 0.0264109356286075 | erot = 0.102878288094517 | epot = -14.7468032582586 | etot = -14.6175140345355 -6000 ekin = 0.0368533113591442 | erot = 0.14504542056987 | epot = -14.7994127665447 | etot = -14.6175140346157 -7000 ekin = 0.0483200640564843 | erot = 0.192565862515508 | epot = -14.8583999612756 | etot = -14.6175140347036 -8000 ekin = 0.0604312317605998 | erot = 0.244417870131508 | epot = -14.9223631366883 | etot = -14.6175140347962 -9000 ekin = 0.0727907119671751 | erot = 0.299521949931839 | epot = -14.989826696789 | etot = -14.6175140348899 -10000 ekin = 0.0850022498875221 | erot = 0.356777997217902 | epot = -15.0592942820869 | etot = -14.6175140349815 -11000 ekin = 0.0966857134041704 | erot = 0.415102860829614 | epot = -15.1293026093013 | etot = -14.6175140350675 -12000 ekin = 0.107492790688446 | erot = 0.473466334178045 | epot = -15.1984731600115 | etot = -14.617514035145 -13000 ekin = 0.117121180381715 | erot = 0.530923485009724 | epot = -15.2655587006029 | etot = -14.6175140352115 -14000 ekin = 0.125326348459166 | erot = 0.586641324447693 | epot = -15.329481708172 | etot = -14.6175140352651 -15000 ekin = 0.131930017119452 | erot = 0.639918104234695 | epot = -15.389362156659 | etot = -14.6175140353048 -16000 ekin = 0.136824741331535 | erot = 0.690194029501056 | epot = -15.4445328061632 | etot = -14.6175140353306 -17000 ekin = 0.139974218116303 | erot = 0.73705286614779 | epot = -15.4945411196072 | etot = -14.6175140353432 -18000 ekin = 0.141409342139924 | erot = 0.780214750583505 | epot = -15.5391381280674 | etot = -14.617514035344 -19000 ekin = 0.14122042490348 | erot = 0.819521373491594 | epot = -15.5782558337303 | etot = -14.6175140353352 -20000 ekin = 0.139546371890615 | erot = 0.854915474127934 | epot = -15.6119758813378 | etot = -14.6175140353193 -21000 ekin = 0.136561897558623 | erot = 0.886417110947779 | epot = -15.6404930438051 | etot = -14.6175140352987 -22000 ekin = 0.132464002543739 | erot = 0.914099368829953 | epot = -15.6640774066495 | etot = -14.6175140352758 -23000 ekin = 0.127458921012922 | erot = 0.938065991541773 | epot = -15.6830389478072 | etot = -14.6175140352525 -24000 ekin = 0.121750582423385 | erot = 0.958432936326242 | epot = -15.6976975539802 | etot = -14.6175140352305 -25000 ekin = 0.115531361418989 | erot = 0.97531514293118 | epot = -15.7083605395609 | etot = -14.6175140352107 -26000 ekin = 0.108975565586104 | erot = 0.988819027952036 | epot = -15.7153086287315 | etot = -14.6175140351934 -27000 ekin = 0.102235785319049 | erot = 0.999040485514132 | epot = -15.7187903060115 | etot = -14.6175140351783 -28000 ekin = 0.095441943431881 | erot = 1.00606759140964 | epot = -15.7190235700066 | etot = -14.6175140351651 -29000 ekin = 0.0887026587343887 | erot = 1.00998681843601 | epot = -15.7162035123233 | etot = -14.6175140351529 -30000 ekin = 0.0821083868014372 | erot = 1.01089138149893 | epot = -15.7105138034411 | etot = -14.6175140351407 -31000 ekin = 0.0757357206087773 | erot = 1.00889031641317 | epot = -15.7021400721498 | etot = -14.6175140351278 -32000 ekin = 0.0696522149388972 | erot = 1.00411701389994 | epot = -15.691283263952 | etot = -14.6175140351132 -33000 ekin = 0.0639211300028632 | erot = 0.996736133735177 | epot = -15.6781712988344 | etot = -14.6175140350964 -34000 ekin = 0.0586055597939536 | erot = 0.986948071943124 | epot = -15.6630676668141 | etot = -14.617514035077 -35000 ekin = 0.0537715085519321 | erot = 0.97499041461744 | epot = -15.6462759582244 | etot = -14.617514035055 -36000 ekin = 0.0494895953264297 | erot = 0.961136064967259 | epot = -15.6281396953245 | etot = -14.6175140350308 -37000 ekin = 0.0458351949405726 | erot = 0.945687966086967 | epot = -15.6090371960325 | etot = -14.617514035005 -38000 ekin = 0.0428869588016531 | erot = 0.928970560852795 | epot = -15.5893715546332 | etot = -14.6175140349787 -39000 ekin = 0.0407237982122988 | erot = 0.9113183396798 | epot = -15.5695561728451 | etot = -14.617514034953 -40000 ekin = 0.0394205547754457 | erot = 0.893062038097747 | epot = -15.5499966278026 | etot = -14.6175140349294 -41000 ekin = 0.0390427256107104 | erot = 0.874513269990878 | epot = -15.5310700305109 | etot = -14.6175140349093 -42000 ekin = 0.0396407506458402 | erot = 0.855948622306271 | epot = -15.5131034078461 | etot = -14.617514034894 -43000 ekin = 0.0412444930542154 | erot = 0.837594480923697 | epot = -15.4963530088628 | etot = -14.6175140348849 -44000 ekin = 0.0438586280730372 | erot = 0.819614069272971 | epot = -15.4809867322287 | etot = -14.6175140348826 -45000 ekin = 0.0474596621516281 | erot = 0.802098297010783 | epot = -15.4670719940501 | etot = -14.6175140348877 -46000 ekin = 0.0519951857192148 | erot = 0.785061947877571 | epot = -15.4545711684965 | etot = -14.6175140348997 -47000 ekin = 0.0573856747191636 | erot = 0.76844639238657 | epot = -15.4433461020232 | etot = -14.6175140349174 -48000 ekin = 0.0635286843632004 | erot = 0.75212933501618 | epot = -15.433172054319 | etot = -14.6175140349396 -49000 ekin = 0.070304673538874 | erot = 0.735941123250837 | epot = -15.4237598317539 | etot = -14.6175140349642 -50000 ekin = 0.0775831019857076 | erot = 0.719686007781425 | epot = -15.4147831447563 | etot = -14.6175140349892 -51000 ekin = 0.0852270843845694 | erot = 0.703165726695028 | epot = -15.4059068460928 | etot = -14.6175140350132 -52000 ekin = 0.0930950223451647 | erot = 0.686202231166125 | epot = -15.396811288546 | etot = -14.6175140350347 -53000 ekin = 0.101038429252995 | erot = 0.668656546988927 | epot = -15.3872090112954 | etot = -14.6175140350535 -54000 ekin = 0.10889654098061 | erot = 0.650441726174306 | epot = -15.3768523022246 | etot = -14.6175140350697 -55000 ekin = 0.116489881626234 | erot = 0.631529329348001 | epot = -15.3655332460579 | etot = -14.6175140350836 -56000 ekin = 0.12361610349192 | erot = 0.611950383382611 | epot = -15.35308052197 | etot = -14.6175140350954 -57000 ekin = 0.130051530401153 | erot = 0.591792721317295 | epot = -15.3393582868232 | etot = -14.6175140351048 -58000 ekin = 0.135560625193501 | erot = 0.571196690673292 | epot = -15.3242713509773 | etot = -14.6175140351105 -59000 ekin = 0.139913350827135 | erot = 0.550350463180279 | epot = -15.307777849119 | etot = -14.6175140351115 -60000 ekin = 0.142907875045794 | erot = 0.529485019662529 | epot = -15.2899069298147 | etot = -14.6175140351063 -61000 ekin = 0.144394224777542 | erot = 0.508867904998907 | epot = -15.2707761648706 | etot = -14.6175140350941 -62000 ekin = 0.144294003785763 | erot = 0.488794507592477 | epot = -15.2506025464531 | etot = -14.6175140350748 -63000 ekin = 0.142612256998146 | erot = 0.469576039421557 | epot = -15.2297023314688 | etot = -14.6175140350491 -64000 ekin = 0.139439544726902 | erot = 0.45152434495459 | epot = -15.2084779247003 | etot = -14.6175140350188 -65000 ekin = 0.134944526553566 | erot = 0.434934714913839 | epot = -15.1873932764535 | etot = -14.6175140349861 -66000 ekin = 0.129359146358223 | erot = 0.420068607767106 | epot = -15.1669417890788 | etot = -14.6175140349535 -67000 ekin = 0.122959458764236 | erot = 0.407138362059705 | epot = -15.1476118557469 | etot = -14.617514034923 -68000 ekin = 0.116045210525559 | erot = 0.396295631876262 | epot = -15.1298548772986 | etot = -14.6175140348968 -69000 ekin = 0.108920722072365 | erot = 0.38762458997195 | epot = -15.1140593469202 | etot = -14.6175140348758 -70000 ekin = 0.101878740729572 | erot = 0.381140173640836 | epot = -15.1005329492313 | etot = -14.6175140348609 -71000 ekin = 0.0951880561484016 | erot = 0.376791007701538 | epot = -15.0894930987019 | etot = -14.617514034852 -72000 ekin = 0.0890849677261927 | erot = 0.374466237250371 | epot = -15.0810652398255 | etot = -14.6175140348489 -73000 ekin = 0.0837682427021612 | erot = 0.374005347599889 | epot = -15.0752876251531 | etot = -14.617514034851 -74000 ekin = 0.0793969849744096 | erot = 0.375210076750601 | epot = -15.0721210965825 | etot = -14.6175140348575 -75000 ekin = 0.0760907865069267 | erot = 0.377857644572265 | epot = -15.0714624659463 | etot = -14.6175140348671 -76000 ekin = 0.0739315834908328 | erot = 0.381714646755152 | epot = -15.0731602651247 | etot = -14.6175140348788 -77000 ekin = 0.0729667273608161 | erot = 0.386551032956121 | epot = -15.0770317952083 | etot = -14.6175140348914 -78000 ekin = 0.073212865507933 | erot = 0.392153586683229 | epot = -15.0828804870951 | etot = -14.617514034904 -79000 ekin = 0.074660287835072 | erot = 0.398338263929461 | epot = -15.09051258668 | etot = -14.6175140349155 -80000 ekin = 0.0772774298944847 | erot = 0.404960669863083 | epot = -15.0997521346826 | etot = -14.6175140349251 -81000 ekin = 0.0810152396746107 | erot = 0.411923913359048 | epot = -15.1104531879657 | etot = -14.617514034932 -82000 ekin = 0.0858111278279411 | erot = 0.419183131304986 | epot = -15.1225082940691 | etot = -14.6175140349362 -83000 ekin = 0.0915922459205373 | erot = 0.426746154030553 | epot = -15.1358524348887 | etot = -14.6175140349376 -84000 ekin = 0.0982778862653023 | erot = 0.434670094582779 | epot = -15.1504620157846 | etot = -14.6175140349365 -85000 ekin = 0.105780875252123 | erot = 0.443054055542032 | epot = -15.1663489657278 | etot = -14.6175140349337 -86000 ekin = 0.114007936320491 | erot = 0.452028591870552 | epot = -15.183550563121 | etot = -14.6175140349299 -87000 ekin = 0.122859117093021 | erot = 0.461742961599068 | epot = -15.2021161136185 | etot = -14.6175140349264 -88000 ekin = 0.132226490250365 | erot = 0.472351454260961 | epot = -15.2220919794351 | etot = -14.6175140349238 -89000 ekin = 0.14199243043518 | erot = 0.484000150228927 | epot = -15.2435066155872 | etot = -14.6175140349231 -90000 ekin = 0.152027823848745 | erot = 0.49681531383988 | epot = -15.2663571726137 | etot = -14.6175140349251 -91000 ekin = 0.162190574344125 | erot = 0.510894287760631 | epot = -15.2905988970349 | etot = -14.6175140349302 -92000 ekin = 0.172324730223241 | erot = 0.526299304076712 | epot = -15.3161380692387 | etot = -14.6175140349387 -93000 ekin = 0.182260479602514 | erot = 0.543054150883983 | epot = -15.342828665437 | etot = -14.6175140349505 -94000 ekin = 0.191815166424497 | erot = 0.561143224560487 | epot = -15.3704724259505 | etot = -14.6175140349655 -95000 ekin = 0.200795384589871 | erot = 0.580512230413669 | epot = -15.398821649987 | etot = -14.6175140349834 -96000 ekin = 0.209000133284301 | erot = 0.601069706845445 | epot = -15.4275838751336 | etot = -14.6175140350039 -97000 ekin = 0.216224974983076 | erot = 0.622688639933065 | epot = -15.4564276499427 | etot = -14.6175140350266 -98000 ekin = 0.222267131485452 | erot = 0.645207670246426 | epot = -15.4849888367829 | etot = -14.617514035051 -99000 ekin = 0.226931474008822 | erot = 0.668431711040234 | epot = -15.5128772201258 | etot = -14.6175140350768 -100000 ekin = 0.230037392185194 | erot = 0.692132125756912 | epot = -15.5396835530455 | etot = -14.6175140351034 -101000 ekin = 0.231426538774339 | erot = 0.716046886549487 | epot = -15.5649874604541 | etot = -14.6175140351302 -102000 ekin = 0.230971416186116 | erot = 0.739881303910906 | epot = -15.5883667552535 | etot = -14.6175140351565 -103000 ekin = 0.228584676860968 | erot = 0.763309953365433 | epot = -15.6094086654079 | etot = -14.6175140351815 -104000 ekin = 0.224228843046698 | erot = 0.785980326921886 | epot = -15.6277232051725 | etot = -14.6175140352039 -105000 ekin = 0.217925953180593 | erot = 0.807518535460022 | epot = -15.6429585238635 | etot = -14.6175140352229 -106000 ekin = 0.209766205881976 | erot = 0.827537066837565 | epot = -15.6548173079567 | etot = -14.6175140352372 -107000 ekin = 0.19991466311948 | erot = 0.845644346598459 | epot = -15.6630730449638 | etot = -14.6175140352459 -108000 ekin = 0.188614735691129 | erot = 0.861455562303715 | epot = -15.6675843332431 | etot = -14.6175140352483 -109000 ekin = 0.176187061061687 | erot = 0.874603999194433 | epot = -15.6683050955002 | etot = -14.6175140352441 -110000 ekin = 0.163022626611995 | erot = 0.88475208463374 | epot = -15.6652887464792 | etot = -14.6175140352335 -111000 ekin = 0.14956938211077 | erot = 0.89160140093568 | epot = -15.6586848182637 | etot = -14.6175140352173 -112000 ekin = 0.136312261124986 | erot = 0.8949011206007 | epot = -15.6487274169225 | etot = -14.6175140351968 -113000 ekin = 0.123747404857758 | erot = 0.894454602033368 | epot = -15.6357160420648 | etot = -14.6175140351736 -114000 ekin = 0.112352324429831 | erot = 0.890124196452667 | epot = -15.6199905560322 | etot = -14.6175140351497 -115000 ekin = 0.102554569787556 | erot = 0.881834585426713 | epot = -15.6019031903412 | etot = -14.6175140351269 -116000 ekin = 0.0947020047096738 | erot = 0.869575126614186 | epot = -15.5817911664307 | etot = -14.6175140351068 -117000 ekin = 0.0890378681937318 | erot = 0.853401690493949 | epot = -15.559953593778 | etot = -14.6175140350903 -118000 ekin = 0.0856833736308548 | erot = 0.833438318818926 | epot = -15.5366357275277 | etot = -14.6175140350779 -119000 ekin = 0.0846297171118248 | erot = 0.809878764032089 | epot = -15.5120225162133 | etot = -14.6175140350694 -120000 ekin = 0.0857402026936468 | erot = 0.782987649501416 | epot = -15.4862418872589 | etot = -14.6175140350638 -121000 ekin = 0.088761978164944 | erot = 0.753100709615785 | epot = -15.4593767228408 | etot = -14.61751403506 -122000 ekin = 0.0933458418336512 | erot = 0.720623403982127 | epot = -15.4314832808722 | etot = -14.6175140350564 -123000 ekin = 0.0990718975139699 | erot = 0.68602719834959 | epot = -15.4026131309152 | etot = -14.6175140350516 -124000 ekin = 0.105478567535099 | erot = 0.649842971567299 | epot = -15.3728355741467 | etot = -14.6175140350443 -125000 ekin = 0.112092583657528 | erot = 0.61265130691034 | epot = -15.3422579256011 | etot = -14.6175140350332 -126000 ekin = 0.118457948670349 | erot = 0.575069793125981 | epot = -15.3110417768144 | etot = -14.617514035018 -127000 ekin = 0.124162352097832 | erot = 0.537737821903371 | epot = -15.2794142089993 | etot = -14.6175140349981 -128000 ekin = 0.128860000475183 | erot = 0.501299660072983 | epot = -15.2476736955218 | etot = -14.6175140349736 -129000 ekin = 0.132290197681538 | erot = 0.466386755141783 | epot = -15.2161909877681 | etot = -14.6175140349448 -130000 ekin = 0.134291248323408 | erot = 0.433600287194685 | epot = -15.1854055704302 | etot = -14.6175140349121 -131000 ekin = 0.134809368079367 | erot = 0.403494917851113 | epot = -15.1558183208069 | etot = -14.6175140348764 -132000 ekin = 0.133902311413259 | erot = 0.376564532721602 | epot = -15.1279808789733 | etot = -14.6175140348385 -133000 ekin = 0.131737425950174 | erot = 0.353230559449875 | epot = -15.1024820201993 | etot = -14.6175140347993 -134000 ekin = 0.128583872250139 | erot = 0.333833200745338 | epot = -15.0799311077557 | etot = -14.6175140347602 -135000 ekin = 0.124798858319487 | erot = 0.31862567876175 | epot = -15.0609385718037 | etot = -14.6175140347224 -136000 ekin = 0.12080796695122 | erot = 0.307771366705934 | epot = -15.0460933683448 | etot = -14.6175140346877 -137000 ekin = 0.117080018573556 | erot = 0.301343503849859 | epot = -15.0359375570811 | etot = -14.6175140346577 -138000 ekin = 0.114097404451637 | erot = 0.299327064918768 | epot = -15.0309385040046 | etot = -14.6175140346342 -139000 ekin = 0.112323403877397 | erot = 0.301622293047273 | epot = -15.0314597315437 | etot = -14.6175140346191 -140000 ekin = 0.112168587317134 | erot = 0.308049410073558 | epot = -15.0377320320047 | etot = -14.617514034614 -141000 ekin = 0.113958896787483 | erot = 0.318354084563277 | epot = -15.0498270159712 | etot = -14.6175140346204 -142000 ekin = 0.117908250110044 | erot = 0.332213334114174 | epot = -15.0676356188633 | etot = -14.6175140346391 -143000 ekin = 0.124098500240116 | erot = 0.349241744868859 | epot = -15.0908542797794 | etot = -14.6175140346704 -144000 ekin = 0.132469049162244 | erot = 0.36899804234383 | epot = -15.1189811262199 | etot = -14.6175140347138 -145000 ekin = 0.142817534773294 | erot = 0.390992018433025 | epot = -15.1513235879745 | etot = -14.6175140347682 -146000 ekin = 0.154812002594044 | erot = 0.414692148538822 | epot = -15.1870181859643 | etot = -14.6175140348315 -147000 ekin = 0.168013608208165 | erot = 0.43953414756317 | epot = -15.2250617906724 | etot = -14.6175140349011 -148000 ekin = 0.181907755044192 | erot = 0.46493071599216 | epot = -15.2643525060103 | etot = -14.617514034974 -149000 ekin = 0.195940689918404 | erot = 0.490282644230507 | epot = -15.3037373691959 | etot = -14.6175140350469 -150000 ekin = 0.209558115498161 | erot = 0.514991307802203 | epot = -15.3420634584171 | etot = -14.6175140351168 -151000 ekin = 0.222242375358722 | erot = 0.538472447669863 | epot = -15.3782288582089 | etot = -14.6175140351803 -152000 ekin = 0.233545181100895 | erot = 0.560170967504241 | epot = -15.4112301838403 | etot = -14.6175140352351 -153000 ekin = 0.243113638171897 | erot = 0.579575715963473 | epot = -15.4402033894145 | etot = -14.6175140352791 -154000 ekin = 0.250708030719563 | erot = 0.596234520730074 | epot = -15.4644565867606 | etot = -14.617514035311 -155000 ekin = 0.256210874594961 | erot = 0.609768185048496 | epot = -15.4834930949732 | etot = -14.6175140353298 -156000 ekin = 0.259627463842806 | erot = 0.619882772314079 | epot = -15.4970242714923 | etot = -14.6175140353354 -157000 ekin = 0.26107875673392 | erot = 0.626379517381585 | epot = -15.5049723094438 | etot = -14.6175140353283 -158000 ekin = 0.260787877594978 | erot = 0.629161788909624 | epot = -15.5074637018139 | etot = -14.6175140353093 -159000 ekin = 0.259061752299553 | erot = 0.628238692725195 | epot = -15.5048144803046 | etot = -14.6175140352799 -160000 ekin = 0.256269476948141 | erot = 0.623725097357881 | epot = -15.4975086095477 | etot = -14.6175140352417 -161000 ekin = 0.252818974262866 | erot = 0.615838055765116 | epot = -15.4861710652245 | etot = -14.6175140351965 -162000 ekin = 0.249133354781009 | erot = 0.604889772114047 | epot = -15.4715371620415 | etot = -14.6175140351465 -163000 ekin = 0.245628201594233 | erot = 0.591277407066157 | epot = -15.4544196437542 | etot = -14.6175140350938 -164000 ekin = 0.242690765770646 | erot = 0.5754701254003 | epot = -15.4356749262112 | etot = -14.6175140350402 -165000 ekin = 0.240661818237773 | erot = 0.557993868664013 | epot = -15.4161697218898 | etot = -14.617514034988 -166000 ekin = 0.239820672159938 | erot = 0.539414388849556 | epot = -15.3967490959484 | etot = -14.6175140349389 -167000 ekin = 0.24037368261711 | erot = 0.520319112884873 | epot = -15.3782068303964 | etot = -14.6175140348944 -168000 ekin = 0.24244635767351 | erot = 0.501298426047331 | epot = -15.3612588185771 | etot = -14.6175140348562 -169000 ekin = 0.246079081489649 | erot = 0.482926967022199 | epot = -15.3465200833372 | etot = -14.6175140348253 -170000 ekin = 0.2512263556708 | erot = 0.465745518941327 | epot = -15.334485909415 | etot = -14.6175140348028 -171000 ekin = 0.257759407502687 | erot = 0.450244072412507 | epot = -15.3255175147045 | etot = -14.6175140347893 -172000 ekin = 0.265471962315305 | erot = 0.436846557572436 | epot = -15.3198325546728 | etot = -14.617514034785 -173000 ekin = 0.274088992052948 | erot = 0.425897760801831 | epot = -15.3175007876449 | etot = -14.6175140347901 -174000 ekin = 0.283278228108448 | erot = 0.417652965987037 | epot = -15.3184452288997 | etot = -14.6175140348042 -175000 ekin = 0.292664164217591 | erot = 0.412270652066437 | epot = -15.3224488511105 | etot = -14.6175140348264 -176000 ekin = 0.301844276744599 | erot = 0.409808663992694 | epot = -15.3291669755931 | etot = -14.6175140348558 -177000 ekin = 0.310407103278429 | erot = 0.410224178772685 | epot = -15.3381453169418 | etot = -14.6175140348907 -178000 ekin = 0.317951707449239 | erot = 0.413377690532346 | epot = -15.3488434329111 | etot = -14.6175140349295 -179000 ekin = 0.324107901132174 | erot = 0.419041092198358 | epot = -15.3606630283006 | etot = -14.6175140349701 -180000 ekin = 0.328556397749118 | erot = 0.426909726006353 | epot = -15.3729801587658 | etot = -14.6175140350103 -181000 ekin = 0.331047834154798 | erot = 0.436618006901549 | epot = -15.3851798761042 | etot = -14.6175140350478 -182000 ekin = 0.331419420115411 | erot = 0.447757936313848 | epot = -15.3966913915096 | etot = -14.6175140350804 -183000 ekin = 0.329607792338432 | erot = 0.459899520064776 | epot = -15.4070213475094 | etot = -14.6175140351062 -184000 ekin = 0.325656516855951 | erot = 0.472611792132538 | epot = -15.4157823441122 | etot = -14.6175140351237 -185000 ekin = 0.319716934488103 | erot = 0.485483030926984 | epot = -15.4227140005474 | etot = -14.6175140351323 -186000 ekin = 0.312041347783061 | erot = 0.498138700397667 | epot = -15.4276940833127 | etot = -14.6175140351319 -187000 ekin = 0.302968200961952 | erot = 0.510255791848641 | epot = -15.4307380279341 | etot = -14.6175140351235 -188000 ekin = 0.292899787357099 | erot = 0.521572552051206 | epot = -15.4319863745165 | etot = -14.6175140351082 -189000 ekin = 0.282274048056294 | erot = 0.531893031493142 | epot = -15.4316811146379 | etot = -14.6175140350885 -190000 ekin = 0.271533034589587 | erot = 0.541086413296707 | epot = -15.4301334829529 | etot = -14.6175140350666 -191000 ekin = 0.261091384545769 | erot = 0.54908161018572 | epot = -15.4276870297764 | etot = -14.6175140350449 -192000 ekin = 0.251308489708551 | erot = 0.555858063434352 | epot = -15.4246805881686 | etot = -14.6175140350257 -193000 ekin = 0.242467771120031 | erot = 0.561433978654736 | epot = -15.4214157847852 | etot = -14.6175140350104 -194000 ekin = 0.2347655816246 | erot = 0.565853352187793 | epot = -15.4181329688123 | etot = -14.6175140349999 -195000 ekin = 0.228310848061445 | erot = 0.569173077812631 | epot = -15.4149979608682 | etot = -14.6175140349941 -196000 ekin = 0.223134890550306 | erot = 0.57145120860725 | epot = -15.4121001341502 | etot = -14.6175140349926 -197000 ekin = 0.219209242156003 | erot = 0.572737138233763 | epot = -15.409460415384 | etot = -14.6175140349943 -198000 ekin = 0.216468062809104 | erot = 0.573064123808166 | epot = -15.4070462216152 | etot = -14.6175140349979 -199000 ekin = 0.214831137522652 | erot = 0.572444258403913 | epot = -15.4047894309289 | etot = -14.6175140350023 -200000 ekin = 0.214223573902254 | erot = 0.57086576066316 | epot = -15.4026033695722 | etot = -14.6175140350067 -201000 ekin = 0.214589119166907 | erot = 0.568292309386801 | epot = -15.4003954635645 | etot = -14.6175140350107 -202000 ekin = 0.215895325602457 | erot = 0.564664121433424 | epot = -15.3980734820503 | etot = -14.6175140350145 -203000 ekin = 0.218130347570136 | erot = 0.559900543318492 | epot = -15.395544925907 | etot = -14.6175140350184 -204000 ekin = 0.221292667473869 | erot = 0.553904074217835 | epot = -15.3927107767149 | etot = -14.6175140350232 -205000 ekin = 0.225376258610798 | erot = 0.546565915588112 | epot = -15.3894562092286 | etot = -14.6175140350297 -206000 ekin = 0.230354397529151 | erot = 0.537773288683187 | epot = -15.3856417212507 | etot = -14.6175140350384 -207000 ekin = 0.236165428414771 | erot = 0.527418806929786 | epot = -15.3810982703936 | etot = -14.617514035049 -208000 ekin = 0.242703261860427 | erot = 0.515412077175151 | epot = -15.3756293740966 | etot = -14.617514035061 -209000 ekin = 0.249814382550021 | erot = 0.501693407691568 | epot = -15.3690218253148 | etot = -14.6175140350732 -210000 ekin = 0.257301864855649 | erot = 0.486249049965564 | epot = -15.361064949905 | etot = -14.6175140350838 -211000 ekin = 0.264935635394273 | erot = 0.469126912720557 | epot = -15.3515765832057 | etot = -14.6175140350909 -212000 ekin = 0.272467183646406 | erot = 0.450451153648061 | epot = -15.3404323723872 | etot = -14.6175140350927 -213000 ekin = 0.279646306736793 | erot = 0.430433702677846 | epot = -15.3275940445023 | etot = -14.6175140350876 -214000 ekin = 0.286237611276688 | erot = 0.409381288017783 | epot = -15.3131329343691 | etot = -14.6175140350746 -215000 ekin = 0.292034643872632 | erot = 0.387696263734527 | epot = -15.2972449426606 | etot = -14.6175140350534 -216000 ekin = 0.296870258152624 | erot = 0.365870567411729 | epot = -15.2802548605889 | etot = -14.6175140350245 -217000 ekin = 0.300622666324868 | erot = 0.344472695102956 | epot = -15.2626093964168 | etot = -14.617514034989 -218000 ekin = 0.303217269541043 | erot = 0.324128407398458 | epot = -15.2448597118882 | etot = -14.6175140349487 -219000 ekin = 0.304624843911682 | erot = 0.305496496152239 | epot = -15.2276353749694 | etot = -14.6175140349055 -220000 ekin = 0.304856982073792 | erot = 0.289241221676068 | epot = -15.2116122386118 | etot = -14.6175140348619 -221000 ekin = 0.303959749544065 | erot = 0.276003133762455 | epot = -15.1974769181266 | etot = -14.61751403482 -222000 ekin = 0.302006434070655 | erot = 0.266369862265548 | epot = -15.1858903311184 | etot = -14.6175140347822 -223000 ekin = 0.299090105490396 | erot = 0.260848208954625 | epot = -15.1774523491954 | etot = -14.6175140347503 -224000 ekin = 0.29531650374511 | erot = 0.259838588557332 | epot = -15.1726691270288 | etot = -14.6175140347264 -225000 ekin = 0.290797600317434 | erot = 0.263612591735795 | epot = -15.1719242267649 | etot = -14.6175140347117 -226000 ekin = 0.285646103232653 | erot = 0.272294318080247 | epot = -15.1754544560203 | etot = -14.6175140347074 -227000 ekin = 0.279971018689074 | erot = 0.285846075011501 | epot = -15.1833311284151 | etot = -14.6175140347145 -228000 ekin = 0.273874374727583 | erot = 0.304059069119542 | epot = -15.1954474785804 | etot = -14.6175140347333 -229000 ekin = 0.267449174159942 | erot = 0.326549807965912 | epot = -15.2115130168895 | etot = -14.6175140347636 -230000 ekin = 0.260778614118952 | erot = 0.352763004039877 | epot = -15.2310556529637 | etot = -14.6175140348048 -231000 ekin = 0.253936564976955 | erot = 0.381981763344646 | epot = -15.2534323631772 | etot = -14.6175140348556 -232000 ekin = 0.24698923084228 | erot = 0.413345683736504 | epot = -15.2778489494931 | etot = -14.6175140349143 -233000 ekin = 0.239997814735683 | erot = 0.445877135783545 | epot = -15.3033889854978 | etot = -14.6175140349785 -234000 ekin = 0.233021891669698 | erot = 0.478515439398703 | epot = -15.3290513661138 | etot = -14.6175140350454 -235000 ekin = 0.226123071286244 | erot = 0.510157919201248 | epot = -15.3537950255994 | etot = -14.6175140351119 -236000 ekin = 0.219368436952614 | erot = 0.539706010633753 | epot = -15.3765884827609 | etot = -14.6175140351745 -237000 ekin = 0.212833212708479 | erot = 0.566113832023268 | epot = -15.3964610799618 | etot = -14.6175140352301 -238000 ekin = 0.206602165162757 | erot = 0.588436180449468 | epot = -15.412552380888 | etot = -14.6175140352757 -239000 ekin = 0.200769360307635 | erot = 0.605872583258753 | epot = -15.4241559788757 | etot = -14.6175140353093 -240000 ekin = 0.195436190928488 | erot = 0.617803458378408 | epot = -15.4307536846362 | etot = -14.6175140353293 -241000 ekin = 0.190707920284559 | erot = 0.623817360381655 | epot = -15.4320393160013 | etot = -14.6175140353351 -242000 ekin = 0.186689132523883 | erot = 0.623726737660644 | epot = -15.4279299055112 | etot = -14.6175140353267 -243000 ekin = 0.18347888087463 | erot = 0.61757185737741 | epot = -15.418564773557 | etot = -14.617514035305 -244000 ekin = 0.181166166759762 | erot = 0.60561292371356 | epot = -15.4042931257446 | etot = -14.6175140352713 -245000 ekin = 0.179826690515581 | erot = 0.588311983398978 | epot = -15.3856527091421 | etot = -14.6175140352276 -246000 ekin = 0.179521473344392 | erot = 0.566306329740652 | epot = -15.3633418382609 | etot = -14.6175140351758 -247000 ekin = 0.180297726608685 | erot = 0.54037552872489 | epot = -15.3381872904519 | etot = -14.6175140351184 -248000 ekin = 0.182192022180427 | erot = 0.511404282992934 | epot = -15.3111103402306 | etot = -14.6175140350572 -249000 ekin = 0.185235475058219 | erot = 0.480343275338998 | epot = -15.2830927853917 | etot = -14.6175140349945 -250000 ekin = 0.18946032457762 | erot = 0.448169956263045 | epot = -15.2551443157728 | etot = -14.6175140349321 -251000 ekin = 0.194907020011059 | erot = 0.415851007133659 | epot = -15.2282720620165 | etot = -14.6175140348718 -252000 ekin = 0.201630699422451 | erot = 0.384307951122869 | epot = -15.2034526853603 | etot = -14.617514034815 -253000 ekin = 0.209705815254746 | erot = 0.354387113740477 | epot = -15.1816069637584 | etot = -14.6175140347632 -254000 ekin = 0.219227629545986 | erot = 0.326834860919931 | epot = -15.1635765251836 | etot = -14.6175140347177 -255000 ekin = 0.230309407956005 | erot = 0.302278768995696 | epot = -15.1501022116313 | etot = -14.6175140346796 -256000 ekin = 0.243074422920893 | erot = 0.281215109558497 | epot = -15.1418035671295 | etot = -14.6175140346501 -257000 ekin = 0.257642364628865 | erot = 0.264002762945737 | epot = -15.139159162205 | etot = -14.6175140346304 -258000 ekin = 0.274110461102935 | erot = 0.250863404057276 | epot = -15.1424878997817 | etot = -14.6175140346215 -259000 ekin = 0.292530483428745 | erot = 0.241887528332562 | epot = -15.1519320463858 | etot = -14.6175140346245 -260000 ekin = 0.312883750214262 | erot = 0.237045600990929 | epot = -15.167443385845 | etot = -14.6175140346398 -261000 ekin = 0.335057071665646 | erot = 0.23620332462488 | epot = -15.1887744309582 | etot = -14.6175140346677 -262000 ekin = 0.358823075932977 | erot = 0.239139750883904 | epot = -15.2154768615246 | etot = -14.6175140347077 -263000 ekin = 0.383828346058697 | erot = 0.24556675356939 | epot = -15.2469091343868 | etot = -14.6175140347588 -264000 ekin = 0.409592161639846 | erot = 0.25514829095879 | epot = -15.2822544874178 | etot = -14.6175140348192 -265000 ekin = 0.435517425641053 | erot = 0.267517972446926 | epot = -15.3205494329745 | etot = -14.6175140348865 -266000 ekin = 0.460913759434934 | erot = 0.28229374222826 | epot = -15.3607215366211 | etot = -14.6175140349579 -267000 ekin = 0.485031075314244 | erot = 0.299088986461549 | epot = -15.4016340968062 | etot = -14.6175140350304 -268000 ekin = 0.507100517474285 | erot = 0.317519986657596 | epot = -15.4421345392328 | etot = -14.6175140351009 -269000 ekin = 0.526378761164296 | erot = 0.337210258004039 | epot = -15.4811030543346 | etot = -14.6175140351662 -270000 ekin = 0.542191399558024 | erot = 0.357792786171182 | epot = -15.5174982209533 | etot = -14.6175140352241 -271000 ekin = 0.55397150127625 | erot = 0.378911394713957 | epot = -15.5503969312626 | etot = -14.6175140352724 -272000 ekin = 0.561290243477908 | erot = 0.400222387434508 | epot = -15.579026666222 | etot = -14.6175140353095 -273000 ekin = 0.563877614618957 | erot = 0.421397250044594 | epot = -15.6027888999983 | etot = -14.6175140353347 -274000 ekin = 0.561632338448697 | erot = 0.442126671656052 | epot = -15.6212730454525 | etot = -14.6175140353478 -275000 ekin = 0.554621238225524 | erot = 0.462125606775959 | epot = -15.6342608803503 | etot = -14.6175140353488 -276000 ekin = 0.543069132888247 | erot = 0.481138682332307 | epot = -15.6417218505594 | etot = -14.6175140353389 -277000 ekin = 0.527340979966703 | erot = 0.498945052082944 | epot = -15.6438000673687 | etot = -14.617514035319 -278000 ekin = 0.507918337218215 | erot = 0.515361832412993 | epot = -15.6407942049222 | etot = -14.617514035291 -279000 ekin = 0.485372319602766 | erot = 0.53024547360125 | epot = -15.6331318284605 | etot = -14.6175140352565 -280000 ekin = 0.460335116507262 | erot = 0.543490744710295 | epot = -15.6213398964351 | etot = -14.6175140352175 -281000 ekin = 0.433471859961099 | erot = 0.555027349455695 | epot = -15.606013244593 | etot = -14.6175140351762 -282000 ekin = 0.405454262481042 | erot = 0.564814480005611 | epot = -15.5877827776215 | etot = -14.6175140351348 -283000 ekin = 0.376937038993841 | erot = 0.572833827991569 | epot = -15.56728490208 | etot = -14.6175140350946 -284000 ekin = 0.348537747962758 | erot = 0.579081711929156 | epot = -15.5451334949486 | etot = -14.6175140350567 -285000 ekin = 0.320820372083395 | erot = 0.583561068644996 | epot = -15.5218954757513 | etot = -14.6175140350229 -286000 ekin = 0.294282726921591 | erot = 0.586274110944376 | epot = -15.49807087286 | etot = -14.617514034994 -287000 ekin = 0.269347634013421 | erot = 0.58721647590847 | epot = -15.4740781448926 | etot = -14.6175140349707 -288000 ekin = 0.246357704467551 | erot = 0.586373659771232 | epot = -15.450245399192 | etot = -14.6175140349532 -289000 ekin = 0.22557352214567 | erot = 0.583720426230562 | epot = -15.4268079833179 | etot = -14.6175140349417 -290000 ekin = 0.207174962818393 | erot = 0.57922365744791 | epot = -15.4039126552014 | etot = -14.6175140349351 -291000 ekin = 0.191265313940187 | erot = 0.572848780862473 | epot = -15.3816281297352 | etot = -14.6175140349326 -292000 ekin = 0.177877757396419 | erot = 0.564569470031942 | epot = -15.3599612623613 | etot = -14.617514034933 -293000 ekin = 0.166983649288418 | erot = 0.554379837681261 | epot = -15.3388775219044 | etot = -14.6175140349348 -294000 ekin = 0.158501898150678 | erot = 0.542307895558042 | epot = -15.3183238286452 | etot = -14.6175140349364 -295000 ekin = 0.152308641379645 | erot = 0.528428741575596 | epot = -15.298251417892 | etot = -14.6175140349367 -296000 ekin = 0.148246390134139 | erot = 0.512875830575803 | epot = -15.2786362556445 | etot = -14.6175140349346 -297000 ekin = 0.146131889948737 | erot = 0.495848833634457 | epot = -15.2594947585125 | etot = -14.6175140349293 -298000 ekin = 0.145762142540829 | erot = 0.477616979344766 | epot = -15.2408931568064 | etot = -14.6175140349208 -299000 ekin = 0.146918339842591 | erot = 0.458517327975552 | epot = -15.2229497027275 | etot = -14.6175140349094 -300000 ekin = 0.149367830717969 | erot = 0.438948042713275 | epot = -15.205829908327 | etot = -14.6175140348958 -301000 ekin = 0.152864610233931 | erot = 0.419357266834875 | epot = -15.1897359119496 | etot = -14.6175140348808 -302000 ekin = 0.157149122640062 | erot = 0.400228590599294 | epot = -15.1748917481051 | etot = -14.6175140348658 -303000 ekin = 0.16194834771892 | erot = 0.382064246008704 | epot = -15.1615266285792 | etot = -14.6175140348516 -304000 ekin = 0.166977167327322 | erot = 0.365367110080369 | epot = -15.1498583122469 | etot = -14.6175140348392 -305000 ekin = 0.171941885875759 | erot = 0.350622387002877 | epot = -15.1400783077083 | etot = -14.6175140348297 -306000 ekin = 0.176546522696758 | erot = 0.338279561365245 | epot = -15.1323401188853 | etot = -14.6175140348233 -307000 ekin = 0.180502080572099 | erot = 0.328734935092634 | epot = -15.1267510504853 | etot = -14.6175140348206 -308000 ekin = 0.183539117579173 | erot = 0.32231506851894 | epot = -15.1233682209196 | etot = -14.6175140348214 -309000 ekin = 0.185422589168761 | erot = 0.31926113518105 | epot = -15.1221977591756 | etot = -14.6175140348258 -310000 ekin = 0.18596838252546 | erot = 0.319714556778101 | epot = -15.1231969741369 | etot = -14.6175140348333 -311000 ekin = 0.185060444471766 | erot = 0.323704474533048 | epot = -15.1262789538485 | etot = -14.6175140348436 -312000 ekin = 0.18266705569995 | erot = 0.331137883754578 | epot = -15.1313189743107 | etot = -14.6175140348562 -313000 ekin = 0.178854671448202 | erot = 0.341793554574001 | epot = -15.1381622608926 | etot = -14.6175140348704 -314000 ekin = 0.173797674113419 | erot = 0.355321045101389 | epot = -15.1466327541005 | etot = -14.6175140348857 -315000 ekin = 0.167782440686126 | erot = 0.371246117949507 | epot = -15.1565425935371 | etot = -14.6175140349014 -316000 ekin = 0.161204347699483 | erot = 0.388983636697569 | epot = -15.1677020193138 | etot = -14.6175140349167 -317000 ekin = 0.154556738723145 | erot = 0.407858516720337 | epot = -15.1799292903744 | etot = -14.6175140349309 -318000 ekin = 0.148411457828143 | erot = 0.427134549770667 | epot = -15.1930600425422 | etot = -14.6175140349434 -319000 ekin = 0.143391260343367 | erot = 0.446049980955804 | epot = -15.2069552762529 | etot = -14.6175140349537 -320000 ekin = 0.140135163879429 | erot = 0.463857713006082 | epot = -15.2215069118471 | etot = -14.6175140349616 -321000 ekin = 0.139258496830789 | erot = 0.479867117343116 | epot = -15.2366396491412 | etot = -14.6175140349673 -322000 ekin = 0.141309963686665 | erot = 0.493483840953484 | epot = -15.2523078396112 | etot = -14.6175140349711 -323000 ekin = 0.146728465401823 | erot = 0.504243890594755 | epot = -15.2684863909706 | etot = -14.6175140349741 -324000 ekin = 0.155802740978128 | erot = 0.511838753068286 | epot = -15.285155529024 | etot = -14.6175140349776 -325000 ekin = 0.168637192339279 | erot = 0.516129344219886 | epot = -15.3022805715426 | etot = -14.6175140349834 -326000 ekin = 0.185127492740314 | erot = 0.517147991937071 | epot = -15.31978951967 | etot = -14.6175140349926 -327000 ekin = 0.204949583924698 | erot = 0.515089155112464 | epot = -15.3375527740434 | etot = -14.6175140350062 -328000 ekin = 0.227565145375698 | erot = 0.510290835145397 | epot = -15.3553700155455 | etot = -14.6175140350244 -329000 ekin = 0.252245305620947 | erot = 0.503209396461946 | epot = -15.3729687371292 | etot = -14.6175140350463 -330000 ekin = 0.278112223737838 | erot = 0.494390678508285 | epot = -15.3900169373164 | etot = -14.6175140350703 -331000 ekin = 0.304195517643728 | erot = 0.484439927615862 | epot = -15.4061494803532 | etot = -14.6175140350936 -332000 ekin = 0.329497983391289 | erot = 0.473992405220338 | epot = -15.4210044237253 | etot = -14.6175140351137 -333000 ekin = 0.353063353197021 | erot = 0.463685785197061 | epot = -15.4342631735221 | etot = -14.617514035128 -334000 ekin = 0.374038491014966 | erot = 0.454134842084351 | epot = -15.4456873682339 | etot = -14.6175140351346 -335000 ekin = 0.391723520498624 | erot = 0.44590856262641 | epot = -15.4551461182577 | etot = -14.6175140351327 -336000 ekin = 0.405605581596876 | erot = 0.439509690041266 | epot = -15.4626293067607 | etot = -14.6175140351225 -337000 ekin = 0.415374601836511 | erot = 0.435356764652945 | epot = -15.4682454015947 | etot = -14.6175140351053 -338000 ekin = 0.420921997008494 | erot = 0.4337688621957 | epot = -15.4722048942871 | etot = -14.6175140350829 -339000 ekin = 0.422325110445994 | erot = 0.434953376212245 | epot = -15.4747925217162 | etot = -14.6175140350579 -340000 ekin = 0.419821259879065 | erot = 0.438997304560045 | epot = -15.4763325994719 | etot = -14.6175140350328 -341000 ekin = 0.413775534579932 | erot = 0.445862573585468 | epot = -15.4771521431752 | etot = -14.6175140350098 -342000 ekin = 0.404646174019828 | erot = 0.455385967573506 | epot = -15.4775461765844 | etot = -14.617514034991 -343000 ekin = 0.392950705832007 | erot = 0.467284215126369 | epot = -15.4777489559361 | etot = -14.6175140349777 -344000 ekin = 0.379235231728315 | erot = 0.481164689425287 | epot = -15.4779139561242 | etot = -14.6175140349706 -345000 ekin = 0.364048459932831 | erot = 0.49654196729344 | epot = -15.4781044621959 | etot = -14.6175140349696 -346000 ekin = 0.347921358320248 | erot = 0.512860132814242 | epot = -15.4782955261082 | etot = -14.6175140349738 -347000 ekin = 0.331352665808313 | erot = 0.529520204052381 | epot = -15.4783869048424 | etot = -14.6175140349817 -348000 ekin = 0.314799955037007 | erot = 0.545911447468509 | epot = -15.478225437497 | etot = -14.6175140349915 -349000 ekin = 0.298675493175969 | erot = 0.561444708833552 | epot = -15.4776342370106 | etot = -14.6175140350011 -350000 ekin = 0.28334581552179 | erot = 0.575585348315622 | epot = -15.4764451988457 | etot = -14.6175140350083 -351000 ekin = 0.269133730328657 | erot = 0.587883045338955 | epot = -15.474530810679 | etot = -14.6175140350114 -352000 ekin = 0.256321431306528 | erot = 0.597995738138102 | epot = -15.4718312044538 | etot = -14.6175140350092 -353000 ekin = 0.245153509655857 | erot = 0.605705335206491 | epot = -15.4683728798634 | etot = -14.617514035001 -354000 ekin = 0.235838910987786 | erot = 0.610923562934953 | epot = -15.4642765089099 | etot = -14.6175140349872 -355000 ekin = 0.228551231301984 | erot = 0.613687305426088 | epot = -15.4597525716969 | etot = -14.6175140349688 -356000 ekin = 0.223427131308619 | erot = 0.61414390282533 | epot = -15.4550850690815 | etot = -14.6175140349475 -357000 ekin = 0.220563006919496 | erot = 0.612527933402533 | epot = -15.4506049752473 | etot = -14.6175140349253 -358000 ekin = 0.220010333199303 | erot = 0.609131855544879 | epot = -15.4466562236489 | etot = -14.6175140349047 -359000 ekin = 0.221770268741646 | erot = 0.604273418958276 | epot = -15.443557722588 | etot = -14.6175140348881 -360000 ekin = 0.225788163654918 | erot = 0.598262925571842 | epot = -15.4415651241044 | etot = -14.6175140348777 -361000 ekin = 0.231948578438913 | erot = 0.59137325198523 | epot = -15.4408358652996 | etot = -14.6175140348754 -362000 ekin = 0.240071331019464 | erot = 0.583815109039738 | epot = -15.4414004749418 | etot = -14.6175140348826 -363000 ekin = 0.249908988059078 | erot = 0.575719406612622 | epot = -15.4431424295716 | etot = -14.6175140348999 -364000 ekin = 0.261146140583132 | erot = 0.56712790648618 | epot = -15.4457880819966 | etot = -14.6175140349273 -365000 ekin = 0.273400773646818 | erot = 0.557992653604894 | epot = -15.4489074622159 | etot = -14.6175140349642 -366000 ekin = 0.286228056504663 | erot = 0.548184015757871 | epot = -15.4519261072718 | etot = -14.6175140350093 -367000 ekin = 0.299126926926786 | erot = 0.537506547610907 | epot = -15.4541475095983 | etot = -14.6175140350606 -368000 ekin = 0.311549892639084 | erot = 0.525721330951755 | epot = -15.4547852587065 | etot = -14.6175140351156 -369000 ekin = 0.322916493342769 | erot = 0.512572942753926 | epot = -15.4530034712682 | etot = -14.6175140351715 -370000 ekin = 0.332630833324557 | erot = 0.497818805481132 | epot = -15.4479636740308 | etot = -14.6175140352251 -371000 ekin = 0.340103492446634 | erot = 0.481258447415918 | epot = -15.4388759751356 | etot = -14.6175140352731 -372000 ekin = 0.344777943664193 | erot = 0.462760223983496 | epot = -15.4250522029596 | etot = -14.6175140353119 -373000 ekin = 0.346161332162081 | erot = 0.442283380417406 | epot = -15.405958747918 | etot = -14.6175140353385 -374000 ekin = 0.343859062980667 | erot = 0.419893962766177 | epot = -15.3812670610967 | etot = -14.6175140353498 -375000 ekin = 0.337612023151491 | erot = 0.395773904235502 | epot = -15.35089996273 | etot = -14.617514035343 -376000 ekin = 0.327334336193659 | erot = 0.370223433835828 | epot = -15.3150718053453 | etot = -14.6175140353159 -377000 ekin = 0.313148263712968 | erot = 0.3436575453366 | epot = -15.2743198443167 | etot = -14.6175140352671 -378000 ekin = 0.295411338277735 | erot = 0.316597454537734 | epot = -15.2295228280119 | etot = -14.6175140351964 -379000 ekin = 0.274729408510529 | erot = 0.289657740939432 | epot = -15.1819011845551 | etot = -14.6175140351051 -380000 ekin = 0.251948675267414 | erot = 0.263529414055011 | epot = -15.1329921243187 | etot = -14.6175140349963 -381000 ekin = 0.228120837035203 | erot = 0.238958749468097 | epot = -15.0845936213794 | etot = -14.6175140348761 -382000 ekin = 0.204438854506746 | erot = 0.216721270519329 | epot = -15.0386741597779 | etot = -14.6175140347518 -383000 ekin = 0.182146263755385 | erot = 0.19759188098445 | epot = -14.9972521793722 | etot = -14.6175140346323 -384000 ekin = 0.162429780679522 | erot = 0.182311896924387 | epot = -14.9622557121308 | etot = -14.6175140345269 -385000 ekin = 0.146310622123822 | erot = 0.171555128911536 | epot = -14.9353797854792 | etot = -14.6175140344439 -386000 ekin = 0.134552389652403 | erot = 0.165895597224741 | epot = -14.9179620212657 | etot = -14.6175140343886 -387000 ekin = 0.127600986328395 | erot = 0.165779213534325 | epot = -14.9108942342266 | etot = -14.6175140343639 -388000 ekin = 0.125565151523028 | erot = 0.171500950984996 | epot = -14.9145801368772 | etot = -14.6175140343691 -389000 ekin = 0.128237001096973 | erot = 0.183188026636525 | epot = -14.9289390621349 | etot = -14.6175140344014 -390000 ekin = 0.135143637923168 | erot = 0.200788930663413 | epot = -14.9534466030433 | etot = -14.6175140344567 -391000 ekin = 0.145616156499953 | erot = 0.224068074688611 | epot = -14.9871982657191 | etot = -14.6175140345306 -392000 ekin = 0.158862235246809 | erot = 0.252606362171908 | epot = -15.0289826320371 | etot = -14.6175140346184 -393000 ekin = 0.174032087603698 | erot = 0.285808726839658 | epot = -15.0773548491589 | etot = -14.6175140347155 -394000 ekin = 0.190272707003915 | erot = 0.322920107512839 | epot = -15.1307068493349 | etot = -14.6175140348181 -395000 ekin = 0.206769905102427 | erot = 0.363051013228117 | epot = -15.1873349532527 | etot = -14.6175140349221 -396000 ekin = 0.222780272470673 | erot = 0.405212687947374 | epot = -15.2455069954414 | etot = -14.6175140350234 -397000 ekin = 0.23765569871957 | erot = 0.448360183482314 | epot = -15.3035299173199 | etot = -14.6175140351181 -398000 ekin = 0.250862154070767 | erot = 0.491439914329226 | epot = -15.3598161036022 | etot = -14.6175140352022 -399000 ekin = 0.261993055954332 | erot = 0.533437059170117 | epot = -15.4129441503972 | etot = -14.6175140352727 -400000 ekin = 0.270776550507805 | erot = 0.573417887949047 | epot = -15.4617084737844 | etot = -14.6175140353276 -401000 ekin = 0.277075831016468 | erot = 0.610562842823497 | epot = -15.505152709206 | etot = -14.6175140353661 -402000 ekin = 0.280882158892238 | erot = 0.644187798759039 | epot = -15.5425839930397 | etot = -14.6175140353884 -403000 ekin = 0.282301228579434 | erot = 0.67375296864169 | epot = -15.5735682326173 | etot = -14.6175140353962 -404000 ekin = 0.281534519812515 | erot = 0.698860907481897 | epot = -15.5979094626858 | etot = -14.6175140353913 -405000 ekin = 0.278857975737129 | erot = 0.719246574878127 | epot = -15.6156185859915 | etot = -14.6175140353763 -406000 ekin = 0.274600555759476 | erot = 0.734763157396773 | epot = -15.6268777485094 | etot = -14.6175140353531 -407000 ekin = 0.269124923358509 | erot = 0.745367259285043 | epot = -15.6320062179672 | etot = -14.6175140353237 -408000 ekin = 0.26281185316572 | erot = 0.751106276665205 | epot = -15.63143216512 | etot = -14.6175140352891 -409000 ekin = 0.256049112192118 | erot = 0.752109968276165 | epot = -15.6256731157185 | etot = -14.6175140352503 -410000 ekin = 0.249224269809733 | erot = 0.748584332259637 | epot = -15.6153226372768 | etot = -14.6175140352074 -411000 ekin = 0.242720888553438 | erot = 0.740809103918405 | epot = -15.6010440276326 | etot = -14.6175140351607 -412000 ekin = 0.236916379506096 | erot = 0.729136085380813 | epot = -15.5835664999974 | etot = -14.6175140351105 -413000 ekin = 0.232179735243654 | erot = 0.713985498456962 | epot = -15.5636792687578 | etot = -14.6175140350572 -414000 ekin = 0.228867632642245 | erot = 0.695838652585844 | epot = -15.5422203202303 | etot = -14.6175140350022 -415000 ekin = 0.227317772307857 | erot = 0.67522569539618 | epot = -15.520057502651 | etot = -14.6175140349469 -416000 ekin = 0.227838940777609 | erot = 0.652708261105125 | epot = -15.4980612367764 | etot = -14.6175140348937 -417000 ekin = 0.230697970866892 | erot = 0.628857925336008 | epot = -15.477069931048 | etot = -14.6175140348451 -418000 ekin = 0.236104416120682 | erot = 0.604232291329717 | epot = -15.4578507422538 | etot = -14.6175140348034 -419000 ekin = 0.244194252200402 | erot = 0.579351108945084 | epot = -15.4410593959167 | etot = -14.6175140347712 -420000 ekin = 0.255014214168465 | erot = 0.554674986841137 | epot = -15.4272032357599 | etot = -14.6175140347503 -421000 ekin = 0.268508458340296 | erot = 0.530589008736319 | epot = -15.4166115018185 | etot = -14.6175140347419 -422000 ekin = 0.284509119560497 | erot = 0.507392982380563 | epot = -15.4094161366875 | etot = -14.6175140347464 -423000 ekin = 0.302732060426935 | erot = 0.485299248118974 | epot = -15.4055453433094 | etot = -14.6175140347635 -424000 ekin = 0.322778728051397 | erot = 0.464438075670481 | epot = -15.4047308385137 | etot = -14.6175140347918 -425000 ekin = 0.344144594922636 | erot = 0.444869796712133 | epot = -15.4065284264641 | etot = -14.6175140348294 -426000 ekin = 0.366234204300036 | erot = 0.42660205298371 | epot = -15.4103502921573 | etot = -14.6175140348736 -427000 ekin = 0.388382398339813 | erot = 0.409609962240046 | epot = -15.4155063955013 | etot = -14.6175140349215 -428000 ekin = 0.409880900047521 | erot = 0.393856678091914 | epot = -15.4212516131094 | etot = -14.61751403497 -429000 ekin = 0.430009061106474 | erot = 0.379311788381608 | epot = -15.4268348845041 | etot = -14.617514035016 -430000 ekin = 0.448067283636569 | erot = 0.365965282400515 | epot = -15.4315466010941 | etot = -14.617514035057 -431000 ekin = 0.463411378723581 | erot = 0.353835411175173 | epot = -15.4347608249895 | etot = -14.6175140350908 -432000 ekin = 0.475485941535261 | erot = 0.342969616703679 | epot = -15.4359695933546 | etot = -14.6175140351157 -433000 ekin = 0.483854704021325 | erot = 0.333438714396286 | epot = -15.4348074535484 | etot = -14.6175140351308 -434000 ekin = 0.488225698519512 | erot = 0.325325491782385 | epot = -15.4310652254377 | etot = -14.6175140351358 -435000 ekin = 0.48846961521867 | erot = 0.318709988965961 | epot = -15.4246936393158 | etot = -14.6175140351311 -436000 ekin = 0.484629100798387 | erot = 0.313653867974887 | epot = -15.4157970038909 | etot = -14.6175140351177 -437000 ekin = 0.476917712285183 | erot = 0.310186654191005 | epot = -15.4046184015729 | etot = -14.6175140350967 -438000 ekin = 0.465707830236418 | erot = 0.308296241623084 | epot = -15.3915181069294 | etot = -14.6175140350699 -439000 ekin = 0.451507536801451 | erot = 0.307925153770687 | epot = -15.3769467256113 | etot = -14.6175140350392 -440000 ekin = 0.43492765901413 | erot = 0.308973010492867 | epot = -15.3614147045135 | etot = -14.6175140350065 -441000 ekin = 0.41664165734993 | erot = 0.311304747383586 | epot = -15.3454604397074 | etot = -14.6175140349739 -442000 ekin = 0.397341542601565 | erot = 0.314762618736299 | epot = -15.3296181962812 | etot = -14.6175140349433 -443000 ekin = 0.377694362715541 | erot = 0.319179725729324 | epot = -15.314388123361 | etot = -14.6175140349161 -444000 ekin = 0.358304425136815 | erot = 0.324393298190027 | epot = -15.3002117582203 | etot = -14.6175140348934 -445000 ekin = 0.339684383335157 | erot = 0.330254911559458 | epot = -15.2874533297707 | etot = -14.6175140348761 -446000 ekin = 0.322237701351825 | erot = 0.336636009507997 | epot = -15.2763877457241 | etot = -14.6175140348643 -447000 ekin = 0.306253086583715 | erot = 0.343428242757654 | epot = -15.2671953641993 | etot = -14.6175140348579 -448000 ekin = 0.291909091343981 | erot = 0.350538602019956 | epot = -15.2599617282208 | etot = -14.6175140348568 -449000 ekin = 0.279285717664383 | erot = 0.357880263087869 | epot = -15.254680015613 | etot = -14.6175140348608 -450000 ekin = 0.268379332693761 | erot = 0.365360767815961 | epot = -15.2512541353793 | etot = -14.6175140348696 -451000 ekin = 0.259117719163038 | erot = 0.372869677558774 | epot = -15.2495014316051 | etot = -14.6175140348833 -452000 ekin = 0.251373384973841 | erot = 0.380268095669017 | epot = -15.2491555155445 | etot = -14.6175140349017 -453000 ekin = 0.244974824127976 | erot = 0.387382402362654 | epot = -15.2498712614149 | etot = -14.6175140349243 -454000 ekin = 0.239716691076602 | erot = 0.394004131859282 | epot = -15.251234857886 | etot = -14.6175140349502 -455000 ekin = 0.235370413814525 | erot = 0.399897145639886 | epot = -15.252781594432 | etot = -14.6175140349776 -456000 ekin = 0.231696513790873 | erot = 0.404812188422494 | epot = -15.254022737218 | etot = -14.6175140350046 -457000 ekin = 0.22845901443235 | erot = 0.408507709512941 | epot = -15.2544807589739 | etot = -14.6175140350286 -458000 ekin = 0.225441196082655 | erot = 0.410774705621955 | epot = -15.2537299367515 | etot = -14.6175140350469 -459000 ekin = 0.222461018940778 | erot = 0.411462514810065 | epot = -15.251437568808 | etot = -14.6175140350572 -460000 ekin = 0.219384094438711 | erot = 0.410502136527464 | epot = -15.2474002660241 | etot = -14.6175140350579 -461000 ekin = 0.216132245240217 | erot = 0.407923844131223 | epot = -15.2415701244196 | etot = -14.6175140350481 -462000 ekin = 0.212686361973379 | erot = 0.403866554422698 | epot = -15.2340669514243 | etot = -14.6175140350282 -463000 ekin = 0.20908321848285 | erot = 0.398577486489113 | epot = -15.2251747399712 | etot = -14.6175140349992 -464000 ekin = 0.205406888263726 | erot = 0.392401883856584 | epot = -15.2153228070836 | etot = -14.6175140349633 -465000 ekin = 0.201776197881064 | erot = 0.385763783461888 | epot = -15.205054016266 | etot = -14.617514034923 -466000 ekin = 0.198330130961176 | erot = 0.379139817336958 | epot = -15.1949839831793 | etot = -14.6175140348812 -467000 ekin = 0.195213224017119 | erot = 0.373028711257446 | epot = -15.1857559701151 | etot = -14.6175140348405 -468000 ekin = 0.192562810062153 | erot = 0.367919448414883 | epot = -15.1779962932808 | etot = -14.6175140348038 -469000 ekin = 0.190499545154762 | erot = 0.364261004085585 | epot = -15.1722745840131 | etot = -14.6175140347728 -470000 ekin = 0.189122086032732 | erot = 0.362436180586967 | epot = -15.1690723013685 | etot = -14.6175140347488 -471000 ekin = 0.188506156938858 | erot = 0.362741456207262 | epot = -15.1687616478786 | etot = -14.6175140347325 -472000 ekin = 0.188707621222383 | erot = 0.365373993438327 | epot = -15.1715956493846 | etot = -14.6175140347239 -473000 ekin = 0.189768618622269 | erot = 0.370426120543873 | epot = -15.1777087738884 | etot = -14.6175140347222 -474000 ekin = 0.191725397341757 | erot = 0.377886798112627 | epot = -15.1871262301808 | etot = -14.6175140347264 -475000 ekin = 0.194616213071354 | erot = 0.387648901412458 | epot = -15.1997791492193 | etot = -14.6175140347355 -476000 ekin = 0.198487636161311 | erot = 0.39952067815555 | epot = -15.2155223490652 | etot = -14.6175140347483 -477000 ekin = 0.203397790430554 | erot = 0.413239540254437 | epot = -15.2341513654491 | etot = -14.6175140347641 -478000 ekin = 0.209415519783972 | erot = 0.42848646692651 | epot = -15.2554160214928 | etot = -14.6175140347823 -479000 ekin = 0.216615156595466 | erot = 0.444899686771501 | epot = -15.2790288781697 | etot = -14.6175140348028 -480000 ekin = 0.225067223158473 | erot = 0.462086880017466 | epot = -15.3046681380015 | etot = -14.6175140348255 -481000 ekin = 0.234826185148504 | erot = 0.479635803738671 | epot = -15.3319760237382 | etot = -14.617514034851 -482000 ekin = 0.24591693935591 | erot = 0.497123799837159 | epot = -15.3605547740724 | etot = -14.6175140348793 -483000 ekin = 0.258322039581452 | erot = 0.514126984880453 | epot = -15.3899630593723 | etot = -14.6175140349104 -484000 ekin = 0.27197166705544 | erot = 0.530229960568061 | epot = -15.4197156625675 | etot = -14.617514034944 -485000 ekin = 0.28673803081022 | erot = 0.545036619609118 | epot = -15.4492886853988 | etot = -14.6175140349795 -486000 ekin = 0.302435294442587 | erot = 0.558182125190107 | epot = -15.4781314546481 | etot = -14.6175140350154 -487000 ekin = 0.318825369858622 | erot = 0.569345540302361 | epot = -15.5056849452114 | etot = -14.6175140350504 -488000 ekin = 0.335629120856587 | erot = 0.578262027782387 | epot = -15.5314051837218 | etot = -14.6175140350828 -489000 ekin = 0.352541803825709 | erot = 0.584733173542209 | epot = -15.5547890124787 | etot = -14.6175140351108 -490000 ekin = 0.369251041133789 | erot = 0.588633902376135 | epot = -15.5753989786432 | etot = -14.6175140351333 -491000 ekin = 0.385455339944 | erot = 0.589914693970006 | epot = -15.5928840690632 | etot = -14.6175140351492 -492000 ekin = 0.400881156478982 | erot = 0.588598334680707 | epot = -15.6069935263179 | etot = -14.6175140351582 -493000 ekin = 0.415296746377544 | erot = 0.584771169137607 | epot = -15.6175819506758 | etot = -14.6175140351607 -494000 ekin = 0.428521503102922 | erot = 0.578569614095767 | epot = -15.6246051523561 | etot = -14.6175140351574 -495000 ekin = 0.440430011858761 | erot = 0.570163426568541 | epot = -15.6281074735769 | etot = -14.6175140351496 -496000 ekin = 0.450950706316723 | erot = 0.559737766477561 | epot = -15.628202507933 | etot = -14.6175140351387 -497000 ekin = 0.460059581798179 | erot = 0.547476355485722 | epot = -15.6250499724103 | etot = -14.6175140351264 -498000 ekin = 0.467769906492305 | erot = 0.533547985555255 | epot = -15.6188319271617 | etot = -14.6175140351141 -499000 ekin = 0.474119221073068 | erot = 0.518098277332677 | epot = -15.6097315335085 | etot = -14.6175140351028 -500000 ekin = 0.479155106635165 | erot = 0.50124797893749 | epot = -15.5979171206657 | etot = -14.617514035093 -501000 ekin = 0.482921233338954 | erot = 0.483098304082639 | epot = -15.5835335725064 | etot = -14.6175140350848 -502000 ekin = 0.485445093649074 | erot = 0.463742920559534 | epot = -15.5667020492864 | etot = -14.6175140350778 -503000 ekin = 0.486728599209635 | erot = 0.443285305605599 | epot = -15.5475279398862 | etot = -14.617514035071 -504000 ekin = 0.486742408087914 | erot = 0.42185937463177 | epot = -15.5261158177829 | etot = -14.6175140350632 -505000 ekin = 0.485424480827684 | erot = 0.399650657768078 | epot = -15.5025891736488 | etot = -14.6175140350531 -506000 ekin = 0.482682973411861 | erot = 0.376914939267211 | epot = -15.4771119477183 | etot = -14.6175140350393 -507000 ekin = 0.478403198154604 | erot = 0.353991273961022 | epot = -15.4499085071364 | etot = -14.6175140350208 -508000 ekin = 0.472458052935435 | erot = 0.33130671013391 | epot = -15.4212787980667 | etot = -14.6175140349973 -509000 ekin = 0.464721062855385 | erot = 0.309370883447746 | epot = -15.3916059812719 | etot = -14.6175140349688 -510000 ekin = 0.455081004104092 | erot = 0.288759823578743 | epot = -15.3613548626187 | etot = -14.6175140349359 -511000 ekin = 0.443456979180403 | erot = 0.270089690707412 | epot = -15.3310607047875 | etot = -14.6175140348997 -512000 ekin = 0.429812848219576 | erot = 0.253982534898693 | epot = -15.3013094179802 | etot = -14.617514034862 -513000 ekin = 0.414169942618991 | erot = 0.241027258547331 | epot = -15.2727112359909 | etot = -14.6175140348246 -514000 ekin = 0.396617122319463 | erot = 0.231739657368321 | epot = -15.2458708144771 | etot = -14.6175140347893 -515000 ekin = 0.377317407138792 | erot = 0.2265255487572 | epot = -15.221356990654 | etot = -14.617514034758 -516000 ekin = 0.356510629533619 | erot = 0.225650587239691 | epot = -15.1996752515051 | etot = -14.6175140347318 -517000 ekin = 0.334511811731562 | erot = 0.229219509886498 | epot = -15.18124535633 | etot = -14.6175140347119 -518000 ekin = 0.311705249160027 | erot = 0.237166415926756 | epot = -15.1663856997855 | etot = -14.6175140346987 -519000 ekin = 0.288534562405514 | erot = 0.24925645619383 | epot = -15.1553050532917 | etot = -14.6175140346924 -520000 ekin = 0.265489234982409 | erot = 0.265098165451265 | epot = -15.1481014351262 | etot = -14.6175140346926 -521000 ekin = 0.243088358087734 | erot = 0.28416474516013 | epot = -15.1447671379465 | etot = -14.6175140346986 -522000 ekin = 0.221862437060796 | erot = 0.305821970140485 | epot = -15.1451984419112 | etot = -14.6175140347099 -523000 ekin = 0.202334169776219 | erot = 0.329360070797331 | epot = -15.1492082752991 | etot = -14.6175140347255 -524000 ekin = 0.184999091076192 | erot = 0.354026911471077 | epot = -15.1565400372919 | etot = -14.6175140347446 -525000 ekin = 0.170306912739357 | erot = 0.379059948771681 | epot = -15.1668808962775 | etot = -14.6175140347665 -526000 ekin = 0.158644243148446 | erot = 0.403715126925617 | epot = -15.1798734048646 | etot = -14.6175140347905 -527000 ekin = 0.150319367666608 | erot = 0.42729102581269 | epot = -15.1951244282959 | etot = -14.6175140348166 -528000 ekin = 0.145549592055317 | erot = 0.449147424933789 | epot = -15.2122110518333 | etot = -14.6175140348442 -529000 ekin = 0.144451603984813 | erot = 0.468718121850924 | epot = -15.2306837607091 | etot = -14.6175140348734 -530000 ekin = 0.147035267138347 | erot = 0.485518371011576 | epot = -15.2500676730542 | etot = -14.6175140349043 -531000 ekin = 0.153201203684288 | erot = 0.49914783549727 | epot = -15.2698630741182 | etot = -14.6175140349366 -532000 ekin = 0.162742448479711 | erot = 0.509290301682675 | epot = -15.2895467851327 | etot = -14.6175140349703 -533000 ekin = 0.17535035488191 | erot = 0.515711587206687 | epot = -15.3085759770934 | etot = -14.6175140350048 -534000 ekin = 0.190624856013511 | erot = 0.518257146630579 | epot = -15.3263960376834 | etot = -14.6175140350393 -535000 ekin = 0.208088493536815 | erot = 0.516850140104718 | epot = -15.3424526687142 | etot = -14.6175140350727 -536000 ekin = 0.227204325842678 | erot = 0.511491240065689 | epot = -15.3562096010119 | etot = -14.6175140351036 -537000 ekin = 0.247396768812971 | erot = 0.502260311074144 | epot = -15.3671711150173 | etot = -14.6175140351302 -538000 ekin = 0.268074342413378 | erot = 0.489319600961445 | epot = -15.3749079785256 | etot = -14.6175140351508 -539000 ekin = 0.288653182933434 | erot = 0.472917679672164 | epot = -15.3790848977693 | etot = -14.6175140351637 -540000 ekin = 0.308579985825766 | erot = 0.453392904739558 | epot = -15.3794869257329 | etot = -14.6175140351676 -541000 ekin = 0.327353008191228 | erot = 0.431174973010935 | epot = -15.3760420163632 | etot = -14.6175140351611 -542000 ekin = 0.344539853506947 | erot = 0.406783142888998 | epot = -15.3688370315398 | etot = -14.6175140351439 -543000 ekin = 0.359790986513975 | erot = 0.380819988063775 | epot = -15.3581250096939 | etot = -14.6175140351162 -544000 ekin = 0.372848263090832 | erot = 0.35396003067243 | epot = -15.344322328842 | etot = -14.6175140350787 -545000 ekin = 0.383548167009797 | erot = 0.32693321248176 | epot = -15.3279954145248 | etot = -14.6175140350332 -546000 ekin = 0.39181986738573 | erot = 0.300503784237963 | epot = -15.3098376866052 | etot = -14.6175140349816 -547000 ekin = 0.397678590182378 | erot = 0.27544571388707 | epot = -15.2906383389957 | etot = -14.6175140349263 -548000 ekin = 0.401215088504814 | erot = 0.25251605036599 | epot = -15.2712451737407 | etot = -14.6175140348699 -549000 ekin = 0.402582175512773 | erot = 0.232427794767611 | epot = -15.2525240050959 | etot = -14.6175140348155 -550000 ekin = 0.401979352687952 | erot = 0.21582374083298 | epot = -15.2353171282862 | etot = -14.6175140347652 -551000 ekin = 0.399636550193979 | erot = 0.203252510909713 | epot = -15.220403095825 | etot = -14.6175140347213 -552000 ekin = 0.395797934840878 | erot = 0.195147714573752 | epot = -15.2084596841006 | etot = -14.617514034686 -553000 ekin = 0.390706676476181 | erot = 0.191810879117309 | epot = -15.2000315902546 | etot = -14.6175140346611 -554000 ekin = 0.384591526958083 | erot = 0.193398609454344 | epot = -15.1955041710601 | etot = -14.6175140346477 -555000 ekin = 0.377656068332665 | erot = 0.199914362893988 | epot = -15.1950844658734 | etot = -14.6175140346468 -556000 ekin = 0.370071512615674 | erot = 0.211205266307097 | epot = -15.1987908135806 | etot = -14.6175140346578 -557000 ekin = 0.361973939272807 | erot = 0.226964515102961 | epot = -15.2064524890562 | etot = -14.6175140346805 -558000 ekin = 0.353466765020814 | erot = 0.246739996102198 | epot = -15.2177207958362 | etot = -14.6175140347132 -559000 ekin = 0.344628961765223 | erot = 0.26994976567065 | epot = -15.2320927621895 | etot = -14.6175140347536 -560000 ekin = 0.335528980568069 | erot = 0.295904778796301 | epot = -15.2489477941631 | etot = -14.6175140347987 -561000 ekin = 0.326243446081701 | erot = 0.323838714909082 | epot = -15.2675961958353 | etot = -14.6175140348445 -562000 ekin = 0.316878486813716 | erot = 0.352943857553535 | epot = -15.2873363792543 | etot = -14.617514034887 -563000 ekin = 0.307590234582006 | erot = 0.382410843957942 | epot = -15.3075151134627 | etot = -14.6175140349228 -564000 ekin = 0.298599911427738 | erot = 0.411468934029839 | epot = -15.3275828804064 | etot = -14.6175140349488 -565000 ekin = 0.290198521501629 | erot = 0.439422606477971 | epot = -15.3471351629437 | etot = -14.6175140349641 -566000 ekin = 0.282736992095932 | erot = 0.465680158920132 | epot = -15.3659311859852 | etot = -14.6175140349691 -567000 ekin = 0.276599956454254 | erot = 0.489770841523124 | epot = -15.3838848329439 | etot = -14.6175140349665 -568000 ekin = 0.272165052790864 | erot = 0.511348887820875 | epot = -15.401027975572 | etot = -14.6175140349602 -569000 ekin = 0.269753809413365 | erot = 0.530185258477411 | epot = -15.4174531028455 | etot = -14.6175140349548 -570000 ekin = 0.269583567607375 | erot = 0.546150320474818 | epot = -15.4332479230362 | etot = -14.617514034954 -571000 ekin = 0.271731068577883 | erot = 0.559192265325737 | epot = -15.4484373688642 | etot = -14.6175140349606 -572000 ekin = 0.276116495687097 | erot = 0.5693163216341 | epot = -15.4629468522959 | etot = -14.6175140349747 -573000 ekin = 0.282512256444537 | erot = 0.576569321998212 | epot = -15.4765956134374 | etot = -14.6175140349947 -574000 ekin = 0.290574483947443 | erot = 0.581030490761516 | epot = -15.4891190097262 | etot = -14.6175140350173 -575000 ekin = 0.299890113326591 | erot = 0.582808418137568 | epot = -15.5002125665028 | etot = -14.6175140350386 -576000 ekin = 0.310029076130856 | erot = 0.582041678954806 | epot = -15.5095847901412 | etot = -14.6175140350555 -577000 ekin = 0.320591144135671 | erot = 0.578899817193345 | epot = -15.5170049963946 | etot = -14.6175140350656 -578000 ekin = 0.33123968081773 | erot = 0.573581904321356 | epot = -15.5223356202072 | etot = -14.6175140350681 -579000 ekin = 0.341718767395709 | erot = 0.566311213814785 | epot = -15.5255440162742 | etot = -14.6175140350637 -580000 ekin = 0.351854361646189 | erot = 0.557326170820722 | epot = -15.526694567521 | etot = -14.617514035054 -581000 ekin = 0.361543170719957 | erot = 0.546869043111496 | epot = -15.5259262488727 | etot = -14.6175140350413 -582000 ekin = 0.370734291431731 | erot = 0.535174473618109 | epot = -15.5234228000774 | etot = -14.6175140350276 -583000 ekin = 0.379408545146361 | erot = 0.522459863754298 | epot = -15.5193824439152 | etot = -14.6175140350145 -584000 ekin = 0.387559338332067 | erot = 0.508918999939668 | epot = -15.5139923732753 | etot = -14.6175140350036 -585000 ekin = 0.395177418309442 | erot = 0.494719483694806 | epot = -15.5074109369995 | etot = -14.6175140349952 -586000 ekin = 0.402240533516603 | erot = 0.480003760424766 | epot = -15.4997583289309 | etot = -14.6175140349896 -587000 ekin = 0.408707997145274 | erot = 0.464893014294149 | epot = -15.4911150464257 | etot = -14.6175140349863 -588000 ekin = 0.414519545772962 | erot = 0.449492951760492 | epot = -15.4815265325182 | etot = -14.6175140349848 -589000 ekin = 0.419597612555348 | erot = 0.433900487905301 | epot = -15.4710121354448 | etot = -14.6175140349842 -590000 ekin = 0.423852083806582 | erot = 0.418210489542943 | epot = -15.4595766083332 | etot = -14.6175140349837 -591000 ekin = 0.427186671517495 | erot = 0.402521929657886 | epot = -15.447222636158 | etot = -14.6175140349827 -592000 ekin = 0.429506137373701 | erot = 0.386943005728732 | epot = -15.4339631780827 | etot = -14.6175140349803 -593000 ekin = 0.430723706116628 | erot = 0.371594936609101 | epot = -15.4198326777017 | etot = -14.617514034976 -594000 ekin = 0.430768094953851 | erot = 0.356614269836485 | epot = -15.4048963997596 | etot = -14.6175140349693 -595000 ekin = 0.429589664830371 | erot = 0.342153609169837 | epot = -15.3892573089603 | etot = -14.6175140349601 -596000 ekin = 0.427165296133683 | erot = 0.328380718540713 | epot = -15.3730600496226 | etot = -14.6175140349482 -597000 ekin = 0.423501658500194 | erot = 0.315475989401854 | epot = -15.3564916828361 | etot = -14.6175140349341 -598000 ekin = 0.418636501255828 | erot = 0.303628359580228 | epot = -15.3397788957539 | etot = -14.6175140349179 -599000 ekin = 0.412638207582772 | erot = 0.293029673722308 | epot = -15.3231819162053 | etot = -14.6175140349002 -600000 ekin = 0.405603414753991 | erot = 0.283867637225042 | epot = -15.306985086861 | etot = -14.617514034882 -601000 ekin = 0.397652939448921 | erot = 0.276317573359969 | epot = -15.2914845476729 | etot = -14.617514034864 -602000 ekin = 0.388926339151973 | erot = 0.270533300127964 | epot = -15.2769736741272 | etot = -14.6175140348473 -603000 ekin = 0.379575547711316 | erot = 0.266637582798161 | epot = -15.2637271653423 | etot = -14.6175140348328 -604000 ekin = 0.36975811222467 | erot = 0.264712769809215 | epot = -15.2519849168554 | etot = -14.6175140348215 -605000 ekin = 0.359630614964768 | erot = 0.264792359550132 | epot = -15.241937009329 | etot = -14.6175140348141 -606000 ekin = 0.349342882571473 | erot = 0.266854337886995 | epot = -15.2337112552696 | etot = -14.6175140348112 -607000 ekin = 0.339033558751712 | erot = 0.270817131627804 | epot = -15.2273647251924 | etot = -14.6175140348129 -608000 ekin = 0.328827538259548 | erot = 0.276538908097638 | epot = -15.2228804811762 | etot = -14.617514034819 -609000 ekin = 0.31883562108778 | erot = 0.283820700144897 | epot = -15.2201703560617 | etot = -14.6175140348291 -610000 ekin = 0.30915654256846 | erot = 0.292413461056469 | epot = -15.219084038467 | etot = -14.617514034842 -611000 ekin = 0.299881272108338 | erot = 0.302028697870661 | epot = -15.2194240048357 | etot = -14.6175140348567 -612000 ekin = 0.291099167856369 | erot = 0.312351863790414 | epot = -15.2209650665183 | etot = -14.6175140348715 -613000 ekin = 0.282905257831717 | erot = 0.323057294042809 | epot = -15.2234765867597 | etot = -14.6175140348852 -614000 ekin = 0.275407632339979 | erot = 0.333823223653552 | epot = -15.2267448908899 | etot = -14.6175140348964 -615000 ekin = 0.268733725567263 | erot = 0.344345386321353 | epot = -15.2305931467927 | etot = -14.6175140349041 -616000 ekin = 0.26303418113654 | erot = 0.354347879927357 | epot = -15.2348960959719 | etot = -14.617514034908 -617000 ekin = 0.258483071857804 | erot = 0.363590372787407 | epot = -15.2395874795532 | etot = -14.617514034908 -618000 ekin = 0.255273496413556 | erot = 0.37187125453879 | epot = -15.2446587858571 | etot = -14.6175140349048 -619000 ekin = 0.253608004174612 | erot = 0.379026921287115 | epot = -15.2501489603613 | etot = -14.6175140348996 -620000 ekin = 0.253683881421971 | erot = 0.38492793451358 | epot = -15.2561258508295 | etot = -14.6175140348939 -621000 ekin = 0.255674023709782 | erot = 0.389473226071952 | epot = -15.2626612846714 | etot = -14.6175140348897 -622000 ekin = 0.259704853367547 | erot = 0.392583779639718 | epot = -15.2698026678959 | etot = -14.6175140348886 -623000 ekin = 0.26583342999938 | erot = 0.394197274405698 | epot = -15.2775447392974 | etot = -14.6175140348924 -624000 ekin = 0.274026439188205 | erot = 0.394265031624513 | epot = -15.2858055057147 | etot = -14.617514034902 -625000 ekin = 0.284144015738361 | erot = 0.392752285176072 | epot = -15.2944103358322 | etot = -14.6175140349178 -626000 ekin = 0.295931256226117 | erot = 0.3896423443803 | epot = -15.3030876355457 | etot = -14.6175140349393 -627000 ekin = 0.309019727829642 | erot = 0.384944676504115 | epot = -15.3114784392987 | etot = -14.6175140349649 -628000 ekin = 0.322940275279045 | erot = 0.378706350959298 | epot = -15.3191606612307 | etot = -14.6175140349924 -629000 ekin = 0.33714704369826 | erot = 0.371025698974093 | epot = -15.3256867776909 | etot = -14.6175140350185 -630000 ekin = 0.351051052994966 | erot = 0.362066500826319 | epot = -15.3306315888613 | etot = -14.61751403504 -631000 ekin = 0.364060148819084 | erot = 0.352070586245444 | epot = -15.333644770118 | etot = -14.6175140350535 -632000 ekin = 0.375621025661728 | erot = 0.341366514680726 | epot = -15.3345015753988 | etot = -14.6175140350564 -633000 ekin = 0.38525854122481 | erot = 0.330372092305293 | epot = -15.3331446685769 | etot = -14.6175140350468 -634000 ekin = 0.39260786561676 | erot = 0.319588956493476 | epot = -15.3297108571345 | etot = -14.6175140350243 -635000 ekin = 0.39743609727868 | erot = 0.309588318033233 | epot = -15.3245384503017 | etot = -14.6175140349898 -636000 ekin = 0.399651602685356 | erot = 0.300988094378316 | epot = -15.318153732009 | etot = -14.6175140349453 -637000 ekin = 0.399301141333133 | erot = 0.294422893568946 | epot = -15.3112380697961 | etot = -14.6175140348941 -638000 ekin = 0.396556439147412 | erot = 0.290509369489622 | epot = -15.3045798434768 | etot = -14.6175140348397 -639000 ekin = 0.391692975514002 | erot = 0.289810143797406 | epot = -15.2990171540975 | etot = -14.6175140347861 -640000 ekin = 0.385064212934167 | erot = 0.292799653113662 | epot = -15.2953779007848 | etot = -14.617514034737 -641000 ekin = 0.377074355551307 | erot = 0.299834934663043 | epot = -15.2944233249095 | etot = -14.6175140346952 -642000 ekin = 0.368152133961519 | erot = 0.311133625026294 | epot = -15.296799793651 | etot = -14.6175140346632 -643000 ekin = 0.358727298275115 | erot = 0.326760494743852 | epot = -15.3030018276615 | etot = -14.6175140346425 -644000 ekin = 0.349210670243501 | erot = 0.346622862554313 | epot = -15.3133475674318 | etot = -14.617514034634 -645000 ekin = 0.339977915474887 | erot = 0.370474376280179 | epot = -15.3279663263927 | etot = -14.6175140346377 -646000 ekin = 0.331356734049285 | erot = 0.397926004729584 | epot = -15.346796773432 | etot = -14.6175140346531 -647000 ekin = 0.323616951062017 | erot = 0.428462692622329 | epot = -15.3695936783638 | etot = -14.6175140346795 -648000 ekin = 0.316962984679742 | erot = 0.461463981264509 | epot = -15.39594100066 | etot = -14.6175140347157 -649000 ekin = 0.311528303721762 | erot = 0.496226945506592 | epot = -15.4252692839889 | etot = -14.6175140347606 -650000 ekin = 0.307371814502042 | erot = 0.531990113312007 | epot = -15.4568759626268 | etot = -14.6175140348128 -651000 ekin = 0.304476169211518 | erot = 0.567957247023611 | epot = -15.4899474511058 | etot = -14.6175140348706 -652000 ekin = 0.302748327843053 | erot = 0.603320352539316 | epot = -15.523582715315 | etot = -14.6175140349326 -653000 ekin = 0.302022769689551 | erot = 0.637281675063945 | epot = -15.5568184797506 | etot = -14.6175140349971 -654000 ekin = 0.302067723594143 | erot = 0.669074745116215 | epot = -15.5886565037724 | etot = -14.617514035062 -655000 ekin = 0.302594671774764 | erot = 0.697984728110322 | epot = -15.6180934350104 | etot = -14.6175140351253 -656000 ekin = 0.30327116127365 | erot = 0.723368330432018 | epot = -15.6441535268902 | etot = -14.6175140351846 -657000 ekin = 0.303736663270782 | erot = 0.744673311812384 | epot = -15.6659240103206 | etot = -14.6175140352374 -658000 ekin = 0.303620889262373 | erot = 0.761457272710321 | epot = -15.6825921972542 | etot = -14.6175140352815 -659000 ekin = 0.302563666907973 | erot = 0.773404945480973 | epot = -15.6934826477033 | etot = -14.6175140353143 -660000 ekin = 0.30023539569508 | erot = 0.780343280385769 | epot = -15.698092711415 | etot = -14.6175140353342 -661000 ekin = 0.296355710531891 | erot = 0.782250083093068 | epot = -15.6961198289648 | etot = -14.6175140353398 -662000 ekin = 0.290710478297174 | erot = 0.779257959177616 | epot = -15.6874824728051 | etot = -14.6175140353303 -663000 ekin = 0.283165147463628 | erot = 0.771650651991629 | epot = -15.6723298347615 | etot = -14.6175140353062 -664000 ekin = 0.273673427176436 | erot = 0.759850562455816 | epot = -15.6510380249007 | etot = -14.6175140352684 -665000 ekin = 0.262280913452373 | erot = 0.744397727319011 | epot = -15.6241926759904 | etot = -14.617514035219 -666000 ekin = 0.249123647022469 | erot = 0.725921231744643 | epot = -15.5925589139278 | etot = -14.6175140351607 -667000 ekin = 0.234422061210132 | erot = 0.705104954964981 | epot = -15.5570410512716 | etot = -14.6175140350965 -668000 ekin = 0.218471158369307 | erot = 0.682650243124726 | epot = -15.5186354365237 | etot = -14.6175140350297 -669000 ekin = 0.201627981911825 | erot = 0.659238455806499 | epot = -15.4783804726816 | etot = -14.6175140349633 -670000 ekin = 0.184297501939045 | erot = 0.635496303880848 | epot = -15.4373078407201 | etot = -14.6175140349002 -671000 ekin = 0.166917915804983 | erot = 0.61196652574798 | epot = -15.3963984763957 | etot = -14.6175140348427 -672000 ekin = 0.149946120674174 | erot = 0.589085832361449 | epot = -15.3565459878283 | etot = -14.6175140347927 -673000 ekin = 0.13384380190456 | erot = 0.56717130681257 | epot = -15.3185291434681 | etot = -14.617514034751 -674000 ekin = 0.119064262674554 | erot = 0.546415679820826 | epot = -15.2829939772136 | etot = -14.6175140347183 -675000 ekin = 0.106039855017063 | erot = 0.526891195482464 | epot = -15.2504450851941 | etot = -14.6175140346945 -676000 ekin = 0.0951697078773662 | erot = 0.508561175678426 | epot = -15.2212449182352 | etot = -14.6175140346794 -677000 ekin = 0.0868074519861716 | erot = 0.491297978909916 | epot = -15.1956194655684 | etot = -14.6175140346723 -678000 ekin = 0.0812485969712638 | erot = 0.474905301099129 | epot = -15.1736679327428 | etot = -14.6175140346724 -679000 ekin = 0.078717761980004 | erot = 0.459143233464715 | epot = -15.1553750301235 | etot = -14.6175140346788 -680000 ekin = 0.0793562024648403 | erot = 0.443753980649279 | epot = -15.140624217805 | etot = -14.6175140346909 -681000 ekin = 0.083210490078987 | erot = 0.428486254341738 | epot = -15.1292107791286 | etot = -14.6175140347079 -682000 ekin = 0.0902236865225082 | erot = 0.413116880933255 | epot = -15.1208546021848 | etot = -14.617514034729 -683000 ekin = 0.1002305434624 | erot = 0.397468585264337 | epot = -15.1152131634801 | etot = -14.6175140347534 -684000 ekin = 0.112958164258862 | erot = 0.381423459018558 | epot = -15.1118956580575 | etot = -14.61751403478 -685000 ekin = 0.128033094046143 | erot = 0.364932120277273 | epot = -15.1104792491312 | etot = -14.6175140348077 -686000 ekin = 0.144995008361598 | erot = 0.348018922992613 | epot = -15.1105279661894 | etot = -14.6175140348352 -687000 ekin = 0.163316207854765 | erot = 0.330783730220992 | epot = -15.1116139729366 | etot = -14.6175140348609 -688000 ekin = 0.182425234215549 | erot = 0.313400732953834 | epot = -15.1133400020526 | etot = -14.6175140348832 -689000 ekin = 0.201732335852576 | erot = 0.296114640201427 | epot = -15.1153610109552 | etot = -14.6175140349012 -690000 ekin = 0.220654383891153 | erot = 0.279234374240419 | epot = -15.1174027930454 | etot = -14.6175140349138 -691000 ekin = 0.23863718992453 | erot = 0.263124260136845 | epot = -15.119275484982 | etot = -14.6175140349206 -692000 ekin = 0.255173895596428 | erot = 0.248192653897456 | epot = -15.1208805844157 | etot = -14.6175140349218 -693000 ekin = 0.269818995118043 | erot = 0.234878024009094 | epot = -15.1222110540447 | etot = -14.6175140349176 -694000 ekin = 0.282198402189112 | erot = 0.223632668706412 | epot = -15.1233451058045 | etot = -14.617514034909 -695000 ekin = 0.292016609393229 | erot = 0.214904477348979 | epot = -15.1244351216391 | etot = -14.6175140348969 -696000 ekin = 0.299062308191109 | erot = 0.209117382947929 | epot = -15.1256937260213 | etot = -14.6175140348822 -697000 ekin = 0.303213809972136 | erot = 0.206651361568472 | epot = -15.1273792064065 | etot = -14.6175140348659 -698000 ekin = 0.304445256192184 | erot = 0.207822979229852 | epot = -15.1297822702706 | etot = -14.6175140348485 -699000 ekin = 0.30283398390494 | erot = 0.212867544425252 | epot = -15.1332155631608 | etot = -14.6175140348306 -700000 ekin = 0.298568596343312 | erot = 0.221923881123307 | epot = -15.1380065122785 | etot = -14.6175140348119 -701000 ekin = 0.291956369738233 | erot = 0.235022588976802 | epot = -15.1444929935075 | etot = -14.6175140347925 -702000 ekin = 0.283427734153824 | erot = 0.252078414121441 | epot = -15.153020183048 | etot = -14.6175140347727 -703000 ekin = 0.273534855576733 | erot = 0.272887068861325 | epot = -15.163935959191 | etot = -14.6175140347529 -704000 ekin = 0.26294104616422 | erot = 0.297126498876385 | epot = -15.1775815797744 | etot = -14.6175140347338 -705000 ekin = 0.252398060444351 | erot = 0.324362359960341 | epot = -15.1942744551221 | etot = -14.6175140347174 -706000 ekin = 0.242709489752058 | erot = 0.354057349893431 | epot = -15.2142808743514 | etot = -14.6175140347059 -707000 ekin = 0.234680465258621 | erot = 0.385584073394173 | epot = -15.2377785733552 | etot = -14.6175140347024 -708000 ekin = 0.229056562326141 | erot = 0.418241319394794 | epot = -15.264811916431 | etot = -14.6175140347101 -709000 ekin = 0.226457657533242 | erot = 0.451273895783572 | epot = -15.2952455880485 | etot = -14.6175140347317 -710000 ekin = 0.227314828595294 | erot = 0.483896330830862 | epot = -15.328725194195 | etot = -14.6175140347688 -711000 ekin = 0.23181947949711 | erot = 0.515320742171119 | epot = -15.3646542564899 | etot = -14.6175140348216 -712000 ekin = 0.239893150548946 | erot = 0.544788749312626 | epot = -15.4021959347498 | etot = -14.6175140348882 -713000 ekin = 0.25118375882327 | erot = 0.571606341188741 | epot = -15.4403041349767 | etot = -14.6175140349647 -714000 ekin = 0.265090036185506 | erot = 0.5951798863727 | epot = -15.4777839576035 | etot = -14.6175140350453 -715000 ekin = 0.280811306968538 | erot = 0.615050345044185 | epot = -15.5133756871366 | etot = -14.6175140351239 -716000 ekin = 0.297415784950386 | erot = 0.63092216570354 | epot = -15.5458519858478 | etot = -14.6175140351939 -717000 ekin = 0.313918116237893 | erot = 0.642683345316623 | epot = -15.5741154968041 | etot = -14.6175140352496 -718000 ekin = 0.329356373327087 | erot = 0.650413757300117 | epot = -15.597284165914 | etot = -14.6175140352868 -719000 ekin = 0.34286009348443 | erot = 0.654380316354403 | epot = -15.6147544451422 | etot = -14.6175140353033 -720000 ekin = 0.35370349740302 | erot = 0.655019233384483 | epot = -15.6262367660863 | etot = -14.6175140352988 -721000 ekin = 0.361340844905818 | erot = 0.652906431496234 | epot = -15.6317613116767 | etot = -14.6175140352747 -722000 ekin = 0.365423978941542 | erot = 0.648719378780847 | epot = -15.6316573929562 | etot = -14.6175140352338 -723000 ekin = 0.365803989072271 | erot = 0.643193727890392 | epot = -15.6265117521426 | etot = -14.6175140351799 -724000 ekin = 0.362520178745276 | erot = 0.637078359572933 | epot = -15.6171125734355 | etot = -14.6175140351173 -725000 ekin = 0.355779938480328 | erot = 0.631092082280429 | epot = -15.604386055811 | etot = -14.6175140350503 -726000 ekin = 0.345932952941784 | erot = 0.625884613514165 | epot = -15.5893316014386 | etot = -14.6175140349826 -727000 ekin = 0.333442641405631 | erot = 0.622003743386354 | epot = -15.5729604197102 | etot = -14.6175140349182 -728000 ekin = 0.318857050497206 | erot = 0.619869891937827 | epot = -15.5562409772948 | etot = -14.6175140348598 -729000 ekin = 0.302780724957336 | erot = 0.619758691690166 | epot = -15.5400534514572 | etot = -14.6175140348097 -730000 ekin = 0.285848455041273 | erot = 0.621791770570761 | epot = -15.5251542603814 | etot = -14.6175140347694 -731000 ekin = 0.268701272205121 | erot = 0.625935552811619 | epot = -15.5121508597567 | etot = -14.6175140347399 -732000 ekin = 0.251964649664111 | erot = 0.632007594592137 | epot = -15.5014862789778 | etot = -14.6175140347216 -733000 ekin = 0.236228569496749 | erot = 0.639689689353067 | epot = -15.493432293564 | etot = -14.6175140347142 -734000 ekin = 0.222028960746785 | erot = 0.648546698715147 | epot = -15.4880896941795 | etot = -14.6175140347175 -735000 ekin = 0.209830023527889 | erot = 0.658049804517642 | epot = -15.4853938627762 | etot = -14.6175140347306 -736000 ekin = 0.200007166761123 | erot = 0.667602683399471 | epot = -15.4851238849136 | etot = -14.617514034753 -737000 ekin = 0.19283071962502 | erot = 0.676569044421092 | epot = -15.4869137988299 | etot = -14.6175140347838 -738000 ekin = 0.188451200585513 | erot = 0.684300102137722 | epot = -15.4902653375454 | etot = -14.6175140348222 -739000 ekin = 0.186887639936557 | erot = 0.690160900651572 | epot = -15.4945625754553 | etot = -14.6175140348671 -740000 ekin = 0.188021068410415 | erot = 0.693554915034912 | epot = -15.4990900183627 | etot = -14.6175140349173 -741000 ekin = 0.19159556899499 | erot = 0.69394692273054 | epot = -15.503056526696 | etot = -14.6175140349705 -742000 ekin = 0.197228843628155 | erot = 0.690884208638677 | epot = -15.5056270872913 | etot = -14.6175140350244 -743000 ekin = 0.204433503637525 | erot = 0.684016821527742 | epot = -15.5059643602409 | etot = -14.6175140350756 -744000 ekin = 0.212648433381485 | erot = 0.673116668202851 | epot = -15.503279136705 | etot = -14.6175140351207 -745000 ekin = 0.221277722248097 | erot = 0.658094727365381 | epot = -15.4968864847691 | etot = -14.6175140351556 -746000 ekin = 0.229733012317463 | erot = 0.63901458378143 | epot = -15.4862616312764 | etot = -14.6175140351775 -747000 ekin = 0.237474044144344 | erot = 0.616100096672917 | epot = -15.4710881760012 | etot = -14.6175140351839 -748000 ekin = 0.244042266762894 | erot = 0.589734872787402 | epot = -15.4512911747244 | etot = -14.6175140351741 -749000 ekin = 0.249083597953193 | erot = 0.560451518403377 | epot = -15.4270491515054 | etot = -14.6175140351488 -750000 ekin = 0.252358330147156 | erot = 0.528910066811303 | epot = -15.3987824320686 | etot = -14.6175140351102 -751000 ekin = 0.253738423481677 | erot = 0.495866496254572 | epot = -15.367118954798 | etot = -14.6175140350618 -752000 ekin = 0.253194394015732 | erot = 0.46213378533314 | epot = -15.3328422143564 | etot = -14.6175140350075 -753000 ekin = 0.250775308155814 | erot = 0.428539072350427 | epot = -15.2968284154581 | etot = -14.6175140349519 -754000 ekin = 0.246585878546982 | erot = 0.395880964578682 | epot = -15.2599808780245 | etot = -14.6175140348988 -755000 ekin = 0.240764398113247 | erot = 0.364890850085507 | epot = -15.2231692830502 | etot = -14.6175140348515 -756000 ekin = 0.233464471043397 | erot = 0.336201330030416 | epot = -15.1871798358858 | etot = -14.6175140348119 -757000 ekin = 0.22484246715835 | erot = 0.310323830730206 | epot = -15.15268033267 | etot = -14.6175140347814 -758000 ekin = 0.215051562421395 | erot = 0.287636293952656 | epot = -15.1202018911341 | etot = -14.61751403476 -759000 ekin = 0.204242275876241 | erot = 0.26838075350982 | epot = -15.0901370641326 | etot = -14.6175140347466 -760000 ekin = 0.192568636065448 | erot = 0.252669695562805 | epot = -15.062752366368 | etot = -14.6175140347397 -761000 ekin = 0.180198520175862 | erot = 0.240499428911612 | epot = -15.0382119838248 | etot = -14.6175140347373 -762000 ekin = 0.167326299029169 | erot = 0.231768292967749 | epot = -15.016608626734 | etot = -14.6175140347371 -763000 ekin = 0.154185685901938 | erot = 0.226297425416151 | epot = -14.997997146055 | etot = -14.6175140347369 -764000 ekin = 0.14106063274887 | erot = 0.22385200334861 | epot = -14.9824266708324 | etot = -14.6175140347349 -765000 ekin = 0.128292252296672 | erot = 0.224161332818099 | epot = -14.9699676198448 | etot = -14.6175140347301 -766000 ekin = 0.116280064488082 | erot = 0.226936813023217 | epot = -14.9607309122327 | etot = -14.6175140347214 -767000 ekin = 0.105476340626952 | erot = 0.231887507270348 | epot = -14.9548778826068 | etot = -14.6175140347095 -768000 ekin = 0.0963728909459186 | erot = 0.238733641345068 | epot = -14.9526205669854 | etot = -14.6175140346944 -769000 ekin = 0.0894802427431469 | erot = 0.247218655408997 | epot = -14.9542129328296 | etot = -14.6175140346774 -770000 ekin = 0.0852997361092876 | erot = 0.257120353608144 | epot = -14.9599341243774 | etot = -14.61751403466 -771000 ekin = 0.0842896183570361 | erot = 0.268261228608818 | epot = -14.9700648816097 | etot = -14.6175140346439 -772000 ekin = 0.0868267987477087 | erot = 0.280517313419977 | epot = -14.984858146799 | etot = -14.6175140346314 -773000 ekin = 0.0931666172479923 | erot = 0.29382416266008 | epot = -15.004504814533 | etot = -14.6175140346249 -774000 ekin = 0.103403843826641 | erot = 0.308178073397097 | epot = -15.0290959518507 | etot = -14.6175140346269 -775000 ekin = 0.117439110045724 | erot = 0.323630675217774 | epot = -15.0585838199035 | etot = -14.61751403464 -776000 ekin = 0.134955835365939 | erot = 0.340275613675428 | epot = -15.0927454837075 | etot = -14.6175140346662 -777000 ekin = 0.155413263635942 | erot = 0.358227842745886 | epot = -15.1311551410881 | etot = -14.6175140347063 -778000 ekin = 0.178060391221854 | erot = 0.377596905889472 | epot = -15.1731713318715 | etot = -14.6175140347601 -779000 ekin = 0.201973803865606 | erot = 0.398457850158034 | epot = -15.217945688849 | etot = -14.6175140348253 -780000 ekin = 0.226119091214232 | erot = 0.420824480238242 | epot = -15.2644576063504 | etot = -14.6175140348979 -781000 ekin = 0.24943115662658 | erot = 0.444629585314812 | epot = -15.311574776914 | etot = -14.6175140349726 -782000 ekin = 0.270904470269597 | erot = 0.469715692367534 | epot = -15.3581341976802 | etot = -14.617514035043 -783000 ekin = 0.28968127378351 | erot = 0.495837747641239 | epot = -15.4030330565279 | etot = -14.6175140351032 -784000 ekin = 0.305125009986887 | erot = 0.522676532161855 | epot = -15.4453155772971 | etot = -14.6175140351484 -785000 ekin = 0.316868262923396 | erot = 0.54985935370727 | epot = -15.4842416518065 | etot = -14.6175140351758 -786000 ekin = 0.324828845889219 | erot = 0.576983310022926 | epot = -15.5193261910972 | etot = -14.6175140351851 -787000 ekin = 0.329193233879357 | erot = 0.603636505801434 | epot = -15.550343774859 | etot = -14.6175140351782 -788000 ekin = 0.330371864852122 | erot = 0.629413875563613 | epot = -15.5772997755747 | etot = -14.617514035159 -789000 ekin = 0.328934711355469 | erot = 0.653926193132238 | epot = -15.6003749396201 | etot = -14.6175140351324 -790000 ekin = 0.325537319473758 | erot = 0.676802790006183 | epot = -15.6198541445837 | etot = -14.6175140351038 -791000 ekin = 0.32084726793344 | erot = 0.69768994321138 | epot = -15.6360512462227 | etot = -14.6175140350779 -792000 ekin = 0.315479253539376 | erot = 0.716247584423856 | epot = -15.6492408730215 | etot = -14.6175140350583 -793000 ekin = 0.309944490982093 | erot = 0.732146955921931 | epot = -15.6596054819516 | etot = -14.6175140350476 -794000 ekin = 0.304617480925228 | erot = 0.745071299199299 | epot = -15.6672028151708 | etot = -14.6175140350463 -795000 ekin = 0.299720880976412 | erot = 0.754720862084488 | epot = -15.6719557781149 | etot = -14.617514035054 -796000 ekin = 0.29532739618015 | erot = 0.760822658787176 | epot = -15.6736640900359 | etot = -14.6175140350686 -797000 ekin = 0.291376296851662 | erot = 0.763144639344813 | epot = -15.6720349712838 | etot = -14.6175140350874 -798000 ekin = 0.287701294703692 | erot = 0.761513269131305 | epot = -15.6667285989415 | etot = -14.6175140351065 -799000 ekin = 0.284065979572203 | erot = 0.755832991336525 | epot = -15.6574130060308 | etot = -14.617514035122 -800000 ekin = 0.280202790631629 | erot = 0.746105645863904 | epot = -15.643822471626 | etot = -14.6175140351305 -801000 ekin = 0.275851560112625 | erot = 0.732447665813198 | epot = -15.6258132610544 | etot = -14.6175140351285 -802000 ekin = 0.27079403443356 | erot = 0.715102809072512 | epot = -15.6034108786199 | etot = -14.6175140351138 -803000 ekin = 0.264881442636428 | erot = 0.694448356025774 | epot = -15.5768438337476 | etot = -14.6175140350854 -804000 ekin = 0.258053167891064 | erot = 0.670993199746582 | epot = -15.5465604026809 | etot = -14.6175140350432 -805000 ekin = 0.250345604728439 | erot = 0.64536694143664 | epot = -15.5132265811537 | etot = -14.6175140349886 -806000 ekin = 0.241890533712057 | erot = 0.618299214644394 | epot = -15.4777037832804 | etot = -14.6175140349239 -807000 ekin = 0.232905655207338 | erot = 0.590591287736413 | epot = -15.4410109777962 | etot = -14.6175140348525 -808000 ekin = 0.223678061733332 | erot = 0.563080896688416 | epot = -15.4042729931999 | etot = -14.6175140347781 -809000 ekin = 0.214543035230941 | erot = 0.536602758842007 | epot = -15.3686598287782 | etot = -14.6175140347053 -810000 ekin = 0.20586048831352 | erot = 0.511947500023869 | epot = -15.3353220229752 | etot = -14.6175140346378 -811000 ekin = 0.197991117805961 | erot = 0.489821758278059 | epot = -15.3053269106636 | etot = -14.6175140345796 -812000 ekin = 0.191273941671482 | erot = 0.470812030934247 | epot = -15.2796000071394 | etot = -14.6175140345337 -813000 ekin = 0.186006404369946 | erot = 0.455354451062637 | epot = -15.2588748899354 | etot = -14.6175140345029 -814000 ekin = 0.182427753712325 | erot = 0.443712201374086 | epot = -15.243653989575 | etot = -14.6175140344886 -815000 ekin = 0.18070598633538 | erot = 0.435961774091637 | epot = -15.2341817949191 | etot = -14.617514034492 -816000 ekin = 0.180928373605466 | erot = 0.43198881411332 | epot = -15.2304312222318 | etot = -14.617514034513 -817000 ekin = 0.183095431234163 | erot = 0.431493858263641 | epot = -15.2321033240487 | etot = -14.6175140345509 -818000 ekin = 0.187118173911448 | erot = 0.434007895069537 | epot = -15.2386401035849 | etot = -14.617514034604 -819000 ekin = 0.19281856805337 | erot = 0.438917286806818 | epot = -15.24924988953 | etot = -14.6175140346698 -820000 ekin = 0.199933211814762 | erot = 0.445497181488378 | epot = -15.2629444280487 | etot = -14.6175140347455 -821000 ekin = 0.208120374081947 | erot = 0.45295206948383 | epot = -15.2785864783932 | etot = -14.6175140348274 -822000 ekin = 0.216970558498262 | erot = 0.460461605795687 | epot = -15.2949461992055 | etot = -14.6175140349115 -823000 ekin = 0.226020685629107 | erot = 0.467229260922838 | epot = -15.3107639815453 | etot = -14.6175140349933 -824000 ekin = 0.234771793851542 | erot = 0.472530858216688 | epot = -15.324816687137 | etot = -14.6175140350687 -825000 ekin = 0.242709867661977 | erot = 0.475759712130444 | epot = -15.3359836149261 | etot = -14.6175140351336 -826000 ekin = 0.24932906085789 | erot = 0.476465014357235 | epot = -15.3433081103995 | etot = -14.6175140351844 -827000 ekin = 0.254156259485729 | erot = 0.474380409602746 | epot = -15.3460507043068 | etot = -14.6175140352183 -828000 ekin = 0.256775693170751 | erot = 0.469440383344517 | epot = -15.3437301117489 | etot = -14.6175140352337 -829000 ekin = 0.256852201216646 | erot = 0.461783092102062 | epot = -15.3361493285486 | etot = -14.6175140352299 -830000 ekin = 0.254151805816703 | erot = 0.45173946704119 | epot = -15.3234053080652 | etot = -14.6175140352073 -831000 ekin = 0.248558416433715 | erot = 0.439809632306566 | epot = -15.3058820839078 | etot = -14.6175140351675 -832000 ekin = 0.240085737091028 | erot = 0.426628719076058 | epot = -15.2842284912798 | etot = -14.6175140351127 -833000 ekin = 0.228883712687663 | erot = 0.412924890624256 | epot = -15.2593226383578 | etot = -14.6175140350459 -834000 ekin = 0.215239082681816 | erot = 0.399472764056069 | epot = -15.2322258817084 | etot = -14.6175140349706 -835000 ekin = 0.199569787294636 | erot = 0.38704544051957 | epot = -15.2041292627046 | etot = -14.6175140348904 -836000 ekin = 0.182413100763742 | erot = 0.376368114580784 | epot = -15.176295250154 | etot = -14.6175140348094 -837000 ekin = 0.164407483062677 | erot = 0.368075825931377 | epot = -15.1499973437255 | etot = -14.6175140347315 -838000 ekin = 0.146268295773427 | erot = 0.362677435797702 | epot = -15.1264597662312 | etot = -14.6175140346601 -839000 ekin = 0.128757768426377 | erot = 0.360527421580394 | epot = -15.1067992246057 | etot = -14.6175140345989 -840000 ekin = 0.112649960717962 | erot = 0.361806618656276 | epot = -15.0919706139251 | etot = -14.6175140345508 -841000 ekin = 0.0986919456676882 | erot = 0.366512603929065 | epot = -15.0827185841154 | etot = -14.6175140345186 -842000 ekin = 0.0875630029234267 | erot = 0.374460003555766 | epot = -15.0795370409834 | etot = -14.6175140345042 -843000 ekin = 0.0798341847686289 | erot = 0.385290606532755 | epot = -15.08263882581 | etot = -14.6175140345086 -844000 ekin = 0.0759310929907371 | erot = 0.398492769729592 | epot = -15.0919378972526 | etot = -14.6175140345323 -845000 ekin = 0.0761029610203549 | erot = 0.413429207168603 | epot = -15.1070462027631 | etot = -14.6175140345741 -846000 ekin = 0.0804010613290312 | erot = 0.429371869322519 | epot = -15.1272869652842 | etot = -14.6175140346326 -847000 ekin = 0.0886689809240991 | erot = 0.445542241998012 | epot = -15.1517252576266 | etot = -14.6175140347045 -848000 ekin = 0.10054642145979 | erot = 0.461155038711596 | epot = -15.1792154949571 | etot = -14.6175140347857 -849000 ekin = 0.115486960010843 | erot = 0.475462945351667 | epot = -15.2084639402341 | etot = -14.6175140348716 -850000 ekin = 0.132788806695687 | erot = 0.487799837752767 | epot = -15.2381026794056 | etot = -14.6175140349572 -851000 ekin = 0.151636227786327 | erot = 0.497619785576575 | epot = -15.2667700484 | etot = -14.6175140350371 -852000 ekin = 0.171148194576108 | erot = 0.504529242627505 | epot = -15.2931914723103 | etot = -14.6175140351066 -853000 ekin = 0.19043015939565 | erot = 0.508310157461236 | epot = -15.3162543520186 | etot = -14.6175140351617 -854000 ekin = 0.208624756899518 | erot = 0.508932337650936 | epot = -15.3350711297498 | etot = -14.6175140351993 -855000 ekin = 0.224957674812131 | erot = 0.506554231539352 | epot = -15.3490259415693 | etot = -14.6175140352178 -856000 ekin = 0.238775816538927 | erot = 0.501512259960049 | epot = -15.3578021117157 | etot = -14.6175140352167 -857000 ekin = 0.249575992233873 | erot = 0.494299801981698 | epot = -15.3613898294123 | etot = -14.6175140351968 -858000 ekin = 0.257023502073655 | erot = 0.485537766821928 | epot = -15.3600753040554 | etot = -14.6175140351598 -859000 ekin = 0.260960921285528 | erot = 0.475939247615908 | epot = -15.3544142040099 | etot = -14.6175140351085 -860000 ekin = 0.261408037072217 | erot = 0.46627098460475 | epot = -15.3451930567228 | etot = -14.6175140350458 -861000 ekin = 0.258554187538184 | erot = 0.457314264403307 | epot = -15.3333824869164 | etot = -14.6175140349749 -862000 ekin = 0.252744258032984 | erot = 0.449827506886398 | epot = -15.3200857998187 | etot = -14.6175140348993 -863000 ekin = 0.244459417796508 | erot = 0.44451214183432 | epot = -15.3064855944533 | etot = -14.6175140348225 -864000 ekin = 0.234293368840137 | erot = 0.441983030939926 | epot = -15.2937904345275 | etot = -14.6175140347475 -865000 ekin = 0.222924696623973 | erot = 0.442744308395109 | epot = -15.2831830396966 | etot = -14.6175140346776 -866000 ekin = 0.211086026109098 | erot = 0.447169652381157 | epot = -15.275769713106 | etot = -14.6175140346158 -867000 ekin = 0.199530465892687 | erot = 0.455487658924226 | epot = -15.2725321593816 | etot = -14.6175140345647 -868000 ekin = 0.188996288427053 | erot = 0.467771811643752 | epot = -15.2742821345979 | etot = -14.6175140345271 -869000 ekin = 0.180171161859058 | erot = 0.4839348556269 | epot = -15.2816200519912 | etot = -14.6175140345052 -870000 ekin = 0.173657413868177 | erot = 0.503727420429686 | epot = -15.2948988687985 | etot = -14.6175140345006 -871000 ekin = 0.169940429081807 | erot = 0.526741193132036 | epot = -15.3141956567285 | etot = -14.6175140345146 -872000 ekin = 0.16936227417812 | erot = 0.552417088945945 | epot = -15.3392933976716 | etot = -14.6175140345475 -873000 ekin = 0.172102391201256 | erot = 0.580058846014348 | epot = -15.3696752718142 | etot = -14.6175140345986 -874000 ekin = 0.178167002901486 | erot = 0.608852557307869 | epot = -15.4045335948759 | etot = -14.6175140346666 -875000 ekin = 0.187388233890387 | erot = 0.637892396630056 | epot = -15.4427946652691 | etot = -14.6175140347487 -876000 ekin = 0.199433181367003 | erot = 0.666212376945488 | epot = -15.4831595931541 | etot = -14.6175140348416 -877000 ekin = 0.213822249050295 | erot = 0.69282332523819 | epot = -15.5241596092293 | etot = -14.6175140349408 -878000 ekin = 0.229955728385689 | erot = 0.716754212645022 | epot = -15.5642239760723 | etot = -14.6175140350416 -879000 ekin = 0.247146104644683 | erot = 0.737095186135023 | epot = -15.6017553259188 | etot = -14.6175140351391 -880000 ekin = 0.264653797001979 | erot = 0.753040153406023 | epot = -15.6352079856363 | etot = -14.6175140352283 -881000 ekin = 0.281723784261018 | erot = 0.76392624159128 | epot = -15.6631640611574 | etot = -14.6175140353051 -882000 ekin = 0.29762064160649 | erot = 0.769267373447792 | epot = -15.68440205042 | etot = -14.6175140353658 -883000 ekin = 0.311659967165901 | erot = 0.768779581882543 | epot = -15.6979535844562 | etot = -14.6175140354077 -884000 ekin = 0.323234773767649 | erot = 0.762396270684338 | epot = -15.7031450798815 | etot = -14.6175140354295 -885000 ekin = 0.331836099624964 | erot = 0.750272396067583 | epot = -15.6996225311231 | etot = -14.6175140354306 -886000 ekin = 0.337067751563746 | erot = 0.732777385265791 | epot = -15.6873591722412 | etot = -14.6175140354117 -887000 ekin = 0.338655649766074 | erot = 0.710477420750299 | epot = -15.6666471058906 | etot = -14.6175140353742 -888000 ekin = 0.336452632420706 | erot = 0.684108417156166 | epot = -15.6380750848972 | etot = -14.6175140353204 -889000 ekin = 0.330439768515544 | erot = 0.654541548240117 | epot = -15.6024953520084 | etot = -14.6175140352528 -890000 ekin = 0.320725208484752 | erot = 0.622743520027164 | epot = -15.5609827636863 | etot = -14.6175140351744 -891000 ekin = 0.307541386208986 | erot = 0.589733936087572 | epot = -15.5147893573846 | etot = -14.6175140350881 -892000 ekin = 0.2912409981298 | erot = 0.556542080398037 | epot = -15.4652971135247 | etot = -14.6175140349969 -893000 ekin = 0.272291667891316 | erot = 0.524165278720867 | epot = -15.413970981516 | etot = -14.6175140349038 -894000 ekin = 0.251268620703445 | erot = 0.493530718297755 | epot = -15.3623133738123 | etot = -14.6175140348111 -895000 ekin = 0.228844131843626 | erot = 0.465462234286617 | epot = -15.3118204008516 | etot = -14.6175140347214 -896000 ekin = 0.205772103521913 | erot = 0.440653137307236 | epot = -15.2639392754666 | etot = -14.6175140346375 -897000 ekin = 0.182866017803022 | erot = 0.419645693758353 | epot = -15.2200257461231 | etot = -14.6175140345618 -898000 ekin = 0.16096887000853 | erot = 0.402817425242944 | epot = -15.1813003297485 | etot = -14.617514034497 -899000 ekin = 0.1409146251284 | erot = 0.39037402416295 | epot = -15.1488026837377 | etot = -14.6175140344464 -900000 ekin = 0.123482269337589 | erot = 0.38234845168916 | epot = -15.1233447554394 | etot = -14.6175140344126 -901000 ekin = 0.109345484385139 | erot = 0.37860573755432 | epot = -15.1054652563377 | etot = -14.6175140343982 -902000 ekin = 0.0990229789068497 | erot = 0.378853140166106 | epot = -15.0953901534782 | etot = -14.6175140344052 -903000 ekin = 0.0928360184564096 | erot = 0.382655585825617 | epot = -15.0930056387162 | etot = -14.6175140344341 -904000 ekin = 0.090880112387998 | erot = 0.389456554773451 | epot = -15.0978507016453 | etot = -14.6175140344838 -905000 ekin = 0.0930167096525896 | erot = 0.39860464884997 | epot = -15.1091353930541 | etot = -14.6175140345515 -906000 ekin = 0.0988880708462436 | erot = 0.409385812369162 | epot = -15.1257879178478 | etot = -14.6175140346324 -907000 ekin = 0.107954659147334 | erot = 0.421060528764045 | epot = -15.1465292226318 | etot = -14.6175140347204 -908000 ekin = 0.119550305154274 | erot = 0.432904367174429 | epot = -15.1699687071372 | etot = -14.6175140348085 -909000 ekin = 0.132947118364179 | erot = 0.444249232158146 | epot = -15.1947103854125 | etot = -14.6175140348901 -910000 ekin = 0.147420543333259 | erot = 0.454521879656393 | epot = -15.2194564579492 | etot = -14.6175140349596 -911000 ekin = 0.162305506309105 | erot = 0.463275978359197 | epot = -15.243095519681 | etot = -14.6175140350127 -912000 ekin = 0.177037050912772 | erot = 0.470214361754794 | epot = -15.2647654477151 | etot = -14.6175140350475 -913000 ekin = 0.191172462463139 | erot = 0.47519909256644 | epot = -15.2838855900937 | etot = -14.6175140350642 -914000 ekin = 0.204395616840708 | erot = 0.478248345048065 | epot = -15.300157996953 | etot = -14.6175140350642 -915000 ekin = 0.21650723869536 | erot = 0.479520616572313 | epot = -15.3135418903184 | etot = -14.6175140350508 -916000 ekin = 0.227406352399341 | erot = 0.479288139236201 | epot = -15.3242085266631 | etot = -14.6175140350275 -917000 ekin = 0.237068358848407 | erot = 0.477902392723181 | epot = -15.33248478657 | etot = -14.6175140349984 -918000 ekin = 0.245524170399248 | erot = 0.475755244752233 | epot = -15.3387934501184 | etot = -14.6175140349669 -919000 ekin = 0.252843202023962 | erot = 0.473239468155714 | epot = -15.3435967051161 | etot = -14.6175140349364 -920000 ekin = 0.259121284815245 | erot = 0.470712244290019 | epot = -15.3473475640143 | etot = -14.6175140349091 -921000 ekin = 0.264473144076567 | erot = 0.468464808092164 | epot = -15.3504519870555 | etot = -14.6175140348867 -922000 ekin = 0.269028180853978 | erot = 0.466700668341743 | epot = -15.3532428840659 | etot = -14.6175140348702 -923000 ekin = 0.272927944745733 | erot = 0.465523908452111 | epot = -15.3559658880574 | etot = -14.6175140348595 -924000 ekin = 0.276323793829006 | erot = 0.464938026324776 | epot = -15.3587758550082 | etot = -14.6175140348544 -925000 ekin = 0.279373649323261 | erot = 0.464854721380715 | epot = -15.361742405558 | etot = -14.617514034854 -926000 ekin = 0.282237300897746 | erot = 0.465111106681012 | epot = -15.3648624424358 | etot = -14.617514034857 -927000 ekin = 0.285070250341514 | erot = 0.465493135293291 | epot = -15.368077420497 | etot = -14.6175140348622 -928000 ekin = 0.288016501944524 | erot = 0.465762600718085 | epot = -15.3712931375312 | etot = -14.6175140348686 -929000 ekin = 0.291201026098177 | erot = 0.465684740678902 | epot = -15.3743998016517 | etot = -14.6175140348746 -930000 ekin = 0.294722459178862 | erot = 0.465054261989064 | epot = -15.3772907560474 | etot = -14.6175140348795 -931000 ekin = 0.298646764015084 | erot = 0.463717248452556 | epot = -15.37987804735 | etot = -14.6175140348824 -932000 ekin = 0.303002304639533 | erot = 0.461587311532279 | epot = -15.3821036510548 | etot = -14.617514034883 -933000 ekin = 0.307776651094719 | erot = 0.45865494559038 | epot = -15.3839456315665 | etot = -14.6175140348814 -934000 ekin = 0.312915338271965 | erot = 0.454989722654165 | epot = -15.3854190958038 | etot = -14.6175140348777 -935000 ekin = 0.318322768321313 | erot = 0.450735625549507 | epot = -15.3865724287433 | etot = -14.6175140348725 -936000 ekin = 0.323865441581091 | erot = 0.446100385693733 | epot = -15.3874798621412 | etot = -14.6175140348664 -937000 ekin = 0.329377658420717 | erot = 0.441340069469407 | epot = -15.3882317627502 | etot = -14.6175140348601 -938000 ekin = 0.334669609401427 | erot = 0.436740154637041 | epot = -15.3889237988926 | etot = -14.6175140348541 -939000 ekin = 0.339538182698642 | erot = 0.432595723626032 | epot = -15.3896479411737 | etot = -14.617514034849 -940000 ekin = 0.343779460435288 | erot = 0.429190561371735 | epot = -15.3904840566522 | etot = -14.6175140348451 -941000 ekin = 0.347202304174036 | erot = 0.42677706535814 | epot = -15.391493404375 | etot = -14.6175140348428 -942000 ekin = 0.349642062607919 | erot = 0.425558062624862 | epot = -15.3927141600748 | etot = -14.617514034842 -943000 ekin = 0.350973206935886 | erot = 0.425671371650738 | epot = -15.3941586134297 | etot = -14.6175140348431 -944000 ekin = 0.351119786154907 | erot = 0.427178062459248 | epot = -15.3958118834598 | etot = -14.6175140348457 -945000 ekin = 0.35006281650887 | erot = 0.430055404933682 | epot = -15.3976322562924 | etot = -14.6175140348499 -946000 ekin = 0.347844068536815 | erot = 0.434195447789962 | epot = -15.3995535511821 | etot = -14.6175140348553 -947000 ekin = 0.344566017441613 | erot = 0.439410327984511 | epot = -15.4014903802876 | etot = -14.6175140348614 -948000 ekin = 0.340388212507457 | erot = 0.445444378277369 | epot = -15.4033466256523 | etot = -14.6175140348675 -949000 ekin = 0.335520427168566 | erot = 0.451992965714887 | epot = -15.405027427756 | etot = -14.6175140348726 -950000 ekin = 0.330213181196298 | erot = 0.458727107975925 | epot = -15.4064543240478 | etot = -14.6175140348755 -951000 ekin = 0.324745816556508 | erot = 0.465321341197559 | epot = -15.4075811926297 | etot = -14.6175140348756 -952000 ekin = 0.319412679962217 | erot = 0.471482169177577 | epot = -15.4084088840117 | etot = -14.6175140348719 -953000 ekin = 0.314508037100193 | erot = 0.476974139327336 | epot = -15.4089962112918 | etot = -14.6175140348643 -954000 ekin = 0.310309685024347 | erot = 0.48163943141791 | epot = -15.4094631512954 | etot = -14.6175140348532 -955000 ekin = 0.307061947765186 | erot = 0.485408201613806 | epot = -15.4099841842186 | etot = -14.6175140348396 -956000 ekin = 0.304958921288862 | erot = 0.488297803841355 | epot = -15.4107707599557 | etot = -14.6175140348255 -957000 ekin = 0.304129209168565 | erot = 0.490400499132381 | epot = -15.412043743114 | etot = -14.6175140348131 -958000 ekin = 0.304623714619813 | erot = 0.491860923621326 | epot = -15.4139986730459 | etot = -14.6175140348048 -959000 ekin = 0.306408207891363 | erot = 0.492846142548816 | epot = -15.416768385243 | etot = -14.6175140348028 -960000 ekin = 0.309362278813016 | erot = 0.493512316198131 | epot = -15.4203886298201 | etot = -14.617514034809 -961000 ekin = 0.313285873784613 | erot = 0.493972653387225 | epot = -15.4247725619958 | etot = -14.6175140348239 -962000 ekin = 0.317913924784037 | erot = 0.49427132476265 | epot = -15.4296992843941 | etot = -14.6175140348474 -963000 ekin = 0.322938673952701 | erot = 0.494367337737219 | epot = -15.4348200465675 | etot = -14.6175140348776 -964000 ekin = 0.328038281530663 | erot = 0.494131108238372 | epot = -15.4396834246808 | etot = -14.6175140349117 -965000 ekin = 0.332909295682717 | erot = 0.49335475067624 | epot = -15.4437780813052 | etot = -14.6175140349462 -966000 ekin = 0.337299689762522 | erot = 0.491775167781797 | epot = -15.4465888925212 | etot = -14.6175140349769 -967000 ekin = 0.34103857432651 | erot = 0.489107134739221 | epot = -15.4476597440656 | etot = -14.6175140349998 -968000 ekin = 0.344058508086205 | erot = 0.485082040988229 | epot = -15.4466545840861 | etot = -14.6175140350116 -969000 ekin = 0.346406687226285 | erot = 0.479487053292109 | epot = -15.4434077755287 | etot = -14.6175140350103 -970000 ekin = 0.34824225995059 | erot = 0.472199376075301 | epot = -15.4379556710211 | etot = -14.6175140349952 -971000 ekin = 0.349818577908303 | erot = 0.463211040207767 | epot = -15.4305436530838 | etot = -14.6175140349677 -972000 ekin = 0.351451221504232 | erot = 0.452641107454375 | epot = -15.4216063638894 | etot = -14.6175140349308 -973000 ekin = 0.353474851841729 | erot = 0.440734047140837 | epot = -15.4117229338711 | etot = -14.6175140348885 -974000 ekin = 0.356193968986766 | erot = 0.427844962323539 | epot = -15.4015529661561 | etot = -14.6175140348458 -975000 ekin = 0.359834072253365 | erot = 0.414413971021917 | epot = -15.3917620780827 | etot = -14.6175140348075 -976000 ekin = 0.364500158165173 | erot = 0.400933139115753 | epot = -15.3829473320587 | etot = -14.6175140347778 -977000 ekin = 0.370148756532453 | erot = 0.387909813696966 | epot = -15.3755726049891 | etot = -14.6175140347597 -978000 ekin = 0.376577842833186 | erot = 0.375830059082977 | epot = -15.3699219366708 | etot = -14.6175140347546 -979000 ekin = 0.383436289100162 | erot = 0.365125297246737 | epot = -15.3660756211092 | etot = -14.6175140347623 -980000 ekin = 0.390251542223268 | erot = 0.356144397459458 | epot = -15.3639099744644 | etot = -14.6175140347817 -981000 ekin = 0.396471539317057 | erot = 0.349132547197909 | epot = -15.3631181213249 | etot = -14.61751403481 -982000 ekin = 0.401514997592997 | erot = 0.34421743579967 | epot = -15.3632464682369 | etot = -14.6175140348443 -983000 ekin = 0.404823458771299 | erot = 0.341402706416171 | epot = -15.363740200069 | etot = -14.6175140348815 -984000 ekin = 0.40590886668649 | erot = 0.340568324597754 | epot = -15.363991226203 | etot = -14.6175140349188 -985000 ekin = 0.404391803061251 | erot = 0.341477444720376 | epot = -15.3633832827353 | etot = -14.6175140349537 -986000 ekin = 0.400027422801557 | erot = 0.343789434461309 | epot = -15.3613308922472 | etot = -14.6175140349843 -987000 ekin = 0.39271818074518 | erot = 0.347078806738243 | epot = -15.3573110224926 | etot = -14.6175140350092 -988000 ekin = 0.382514239214593 | erot = 0.350859769146629 | epot = -15.3508880433885 | etot = -14.6175140350273 -989000 ekin = 0.369603726654222 | erot = 0.35461583718875 | epot = -15.3417335988805 | etot = -14.6175140350376 -990000 ekin = 0.354295674461627 | erot = 0.357833454087969 | epot = -15.3296431635889 | etot = -14.6175140350393 -991000 ekin = 0.336998529351739 | erot = 0.360037895318097 | epot = -15.3145504597016 | etot = -14.6175140350318 -992000 ekin = 0.318196763890777 | erot = 0.36082906519084 | epot = -15.2965398640959 | etot = -14.6175140350143 -993000 ekin = 0.298427479538935 | erot = 0.35991430308946 | epot = -15.2758558176151 | etot = -14.6175140349867 -994000 ekin = 0.278258203580379 | erot = 0.357135170965394 | epot = -15.2529074094949 | etot = -14.6175140349491 -995000 ekin = 0.258266471895333 | erot = 0.3524854802127 | epot = -15.2282659870102 | etot = -14.6175140349022 -996000 ekin = 0.239021351636219 | erot = 0.346118523027928 | epot = -15.2026539095113 | etot = -14.6175140348472 -997000 ekin = 0.221066818081282 | erot = 0.338342492442889 | epot = -15.1769233453103 | etot = -14.6175140347861 -998000 ekin = 0.204906835818327 | erot = 0.329604233509051 | epot = -15.1520251040489 | etot = -14.6175140347215 -999000 ekin = 0.190992053959175 | erot = 0.320462575794979 | epot = -15.1289686644105 | etot = -14.6175140346564 -1000000 ekin = 0.179708146665515 | erot = 0.311553394429263 | epot = -15.1087755756886 | etot = -14.6175140345938 - 1000000 0.013311715 -1.5443684 0.033490821 -1.4929067 -0.00013590491 -Loop time of 22.0853 on 1 procs for 1000000 steps with 10 atoms - -Performance: 39120.988 tau/day, 45278.921 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 17.818 | 17.818 | 17.818 | 0.0 | 80.68 -Bond | 0.67599 | 0.67599 | 0.67599 | 0.0 | 3.06 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.29087 | 0.29087 | 0.29087 | 0.0 | 1.32 -Output | 8.1062e-06 | 8.1062e-06 | 8.1062e-06 | 0.0 | 0.00 -Modify | 2.8906 | 2.8906 | 2.8906 | 0.0 | 13.09 -Other | | 0.41 | | | 1.86 - -Nlocal: 10 ave 10 max 10 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 45 ave 45 max 45 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 45 -Ave neighs/atom = 4.5 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:22 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 deleted file mode 100644 index 6ee77cb005..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.24Mar17.duplex1.g++.4 +++ /dev/null @@ -1,1167 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.652 | 7.834 | 8.016 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 -1000 ekin = 0.00113086229080478 | erot = 0.00431010160406708 | epot = -14.6229549982368 | etot = -14.617514034342 -2000 ekin = 0.00448533224342286 | erot = 0.0171407706505013 | epot = -14.6391401372615 | etot = -14.6175140343675 -3000 ekin = 0.0099503525964896 | erot = 0.0381961780846439 | epot = -14.6656605650904 | etot = -14.6175140344093 -4000 ekin = 0.0173418024861991 | erot = 0.0669935184860482 | epot = -14.7018493554381 | etot = -14.6175140344659 -5000 ekin = 0.0264109356285965 | erot = 0.102878288094483 | epot = -14.7468032582586 | etot = -14.6175140345355 -6000 ekin = 0.0368533113591267 | erot = 0.14504542056981 | epot = -14.7994127665446 | etot = -14.6175140346157 -7000 ekin = 0.0483200640564583 | erot = 0.192565862515414 | epot = -14.8583999612755 | etot = -14.6175140347036 -8000 ekin = 0.0604312317605635 | erot = 0.244417870131371 | epot = -14.9223631366881 | etot = -14.6175140347962 -9000 ekin = 0.072790711967127 | erot = 0.299521949931656 | epot = -14.9898266967887 | etot = -14.6175140348899 -10000 ekin = 0.0850022498874609 | erot = 0.356777997217668 | epot = -15.0592942820866 | etot = -14.6175140349815 -11000 ekin = 0.0966857134040954 | erot = 0.415102860829322 | epot = -15.1293026093009 | etot = -14.6175140350675 -12000 ekin = 0.107492790688356 | erot = 0.473466334177699 | epot = -15.1984731600111 | etot = -14.617514035145 -13000 ekin = 0.117121180381612 | erot = 0.530923485009329 | epot = -15.2655587006024 | etot = -14.6175140352115 -14000 ekin = 0.125326348459051 | erot = 0.586641324447251 | epot = -15.3294817081714 | etot = -14.6175140352651 -15000 ekin = 0.131930017119328 | erot = 0.63991810423422 | epot = -15.3893621566583 | etot = -14.6175140353048 -16000 ekin = 0.136824741331405 | erot = 0.690194029500566 | epot = -15.4445328061626 | etot = -14.6175140353306 -17000 ekin = 0.139974218116171 | erot = 0.737052866147306 | epot = -15.4945411196066 | etot = -14.6175140353432 -18000 ekin = 0.141409342139797 | erot = 0.780214750583043 | epot = -15.5391381280668 | etot = -14.617514035344 -19000 ekin = 0.141220424903361 | erot = 0.819521373491177 | epot = -15.5782558337298 | etot = -14.6175140353352 -20000 ekin = 0.139546371890511 | erot = 0.854915474127585 | epot = -15.6119758813374 | etot = -14.6175140353193 -21000 ekin = 0.136561897558541 | erot = 0.886417110947522 | epot = -15.6404930438047 | etot = -14.6175140352986 -22000 ekin = 0.132464002543684 | erot = 0.914099368829796 | epot = -15.6640774066492 | etot = -14.6175140352758 -23000 ekin = 0.127458921012898 | erot = 0.938065991541741 | epot = -15.6830389478072 | etot = -14.6175140352525 -24000 ekin = 0.121750582423396 | erot = 0.958432936326346 | epot = -15.6976975539803 | etot = -14.6175140352306 -25000 ekin = 0.115531361419039 | erot = 0.975315142931434 | epot = -15.7083605395612 | etot = -14.6175140352107 -26000 ekin = 0.108975565586195 | erot = 0.988819027952452 | epot = -15.715308628732 | etot = -14.6175140351934 -27000 ekin = 0.102235785319183 | erot = 0.999040485514706 | epot = -15.7187903060122 | etot = -14.6175140351783 -28000 ekin = 0.0954419434320554 | erot = 1.00606759141037 | epot = -15.7190235700075 | etot = -14.6175140351651 -29000 ekin = 0.0887026587346012 | erot = 1.00998681843686 | epot = -15.7162035123244 | etot = -14.6175140351529 -30000 ekin = 0.0821083868016836 | erot = 1.01089138149989 | epot = -15.7105138034423 | etot = -14.6175140351407 -31000 ekin = 0.0757357206090521 | erot = 1.00889031641421 | epot = -15.702140072151 | etot = -14.6175140351278 -32000 ekin = 0.0696522149391935 | erot = 1.00411701390103 | epot = -15.6912832639534 | etot = -14.6175140351132 -33000 ekin = 0.0639211300031737 | erot = 0.996736133736263 | epot = -15.6781712988358 | etot = -14.6175140350964 -34000 ekin = 0.0586055597942697 | erot = 0.986948071944207 | epot = -15.6630676668155 | etot = -14.617514035077 -35000 ekin = 0.0537715085522448 | erot = 0.974990414618501 | epot = -15.6462759582258 | etot = -14.617514035055 -36000 ekin = 0.0494895953267295 | erot = 0.961136064968264 | epot = -15.6281396953257 | etot = -14.6175140350307 -37000 ekin = 0.0458351949408502 | erot = 0.945687966087874 | epot = -15.6090371960337 | etot = -14.617514035005 -38000 ekin = 0.0428869588018996 | erot = 0.928970560853581 | epot = -15.5893715546342 | etot = -14.6175140349787 -39000 ekin = 0.0407237982125063 | erot = 0.911318339680438 | epot = -15.5695561728459 | etot = -14.617514034953 -40000 ekin = 0.0394205547756063 | erot = 0.893062038098217 | epot = -15.5499966278032 | etot = -14.6175140349294 -41000 ekin = 0.0390427256108178 | erot = 0.874513269991183 | epot = -15.5310700305113 | etot = -14.6175140349092 -42000 ekin = 0.0396407506458889 | erot = 0.855948622306388 | epot = -15.5131034078463 | etot = -14.617514034894 -43000 ekin = 0.0412444930542012 | erot = 0.837594480923648 | epot = -15.4963530088627 | etot = -14.6175140348848 -44000 ekin = 0.0438586280729573 | erot = 0.819614069272763 | epot = -15.4809867322283 | etot = -14.6175140348826 -45000 ekin = 0.0474596621514809 | erot = 0.802098297010425 | epot = -15.4670719940496 | etot = -14.6175140348876 -46000 ekin = 0.0519951857190001 | erot = 0.785061947877089 | epot = -15.4545711684958 | etot = -14.6175140348997 -47000 ekin = 0.0573856747188828 | erot = 0.768446392385995 | epot = -15.4433461020223 | etot = -14.6175140349174 -48000 ekin = 0.0635286843628562 | erot = 0.752129335015535 | epot = -15.433172054318 | etot = -14.6175140349396 -49000 ekin = 0.0703046735384702 | erot = 0.735941123250163 | epot = -15.4237598317528 | etot = -14.6175140349642 -50000 ekin = 0.0775831019852491 | erot = 0.719686007780774 | epot = -15.4147831447551 | etot = -14.6175140349891 -51000 ekin = 0.0852270843840623 | erot = 0.703165726694424 | epot = -15.4059068460916 | etot = -14.6175140350132 -52000 ekin = 0.0930950223446157 | erot = 0.686202231165621 | epot = -15.3968112885448 | etot = -14.6175140350346 -53000 ekin = 0.101038429252411 | erot = 0.668656546988554 | epot = -15.3872090112944 | etot = -14.6175140350534 -54000 ekin = 0.108896540979999 | erot = 0.65044172617409 | epot = -15.3768523022237 | etot = -14.6175140350696 -55000 ekin = 0.116489881625605 | erot = 0.631529329347953 | epot = -15.3655332460571 | etot = -14.6175140350836 -56000 ekin = 0.12361610349128 | erot = 0.611950383382754 | epot = -15.3530805219694 | etot = -14.6175140350954 -57000 ekin = 0.130051530400511 | erot = 0.591792721317636 | epot = -15.3393582868229 | etot = -14.6175140351047 -58000 ekin = 0.135560625192868 | erot = 0.571196690673809 | epot = -15.3242713509772 | etot = -14.6175140351105 -59000 ekin = 0.13991335082652 | erot = 0.550350463180971 | epot = -15.307777849119 | etot = -14.6175140351115 -60000 ekin = 0.142907875045205 | erot = 0.529485019663366 | epot = -15.2899069298149 | etot = -14.6175140351063 -61000 ekin = 0.144394224776987 | erot = 0.508867904999859 | epot = -15.2707761648709 | etot = -14.6175140350941 -62000 ekin = 0.14429400378525 | erot = 0.488794507593493 | epot = -15.2506025464535 | etot = -14.6175140350748 -63000 ekin = 0.142612256997681 | erot = 0.469576039422599 | epot = -15.2297023314693 | etot = -14.617514035049 -64000 ekin = 0.139439544726489 | erot = 0.451524344955609 | epot = -15.2084779247008 | etot = -14.6175140350187 -65000 ekin = 0.134944526553205 | erot = 0.434934714914789 | epot = -15.1873932764541 | etot = -14.6175140349861 -66000 ekin = 0.129359146357915 | erot = 0.42006860776795 | epot = -15.1669417890793 | etot = -14.6175140349534 -67000 ekin = 0.122959458763979 | erot = 0.407138362060406 | epot = -15.1476118557473 | etot = -14.6175140349229 -68000 ekin = 0.116045210525348 | erot = 0.396295631876791 | epot = -15.1298548772989 | etot = -14.6175140348967 -69000 ekin = 0.108920722072196 | erot = 0.387624589972286 | epot = -15.1140593469203 | etot = -14.6175140348758 -70000 ekin = 0.10187874072944 | erot = 0.381140173640969 | epot = -15.1005329492312 | etot = -14.6175140348608 -71000 ekin = 0.0951880561483024 | erot = 0.376791007701474 | epot = -15.0894930987017 | etot = -14.6175140348519 -72000 ekin = 0.0890849677261225 | erot = 0.374466237250124 | epot = -15.0810652398251 | etot = -14.6175140348489 -73000 ekin = 0.0837682427021172 | erot = 0.37400534759948 | epot = -15.0752876251526 | etot = -14.617514034851 -74000 ekin = 0.0793969849743902 | erot = 0.375210076750066 | epot = -15.0721210965819 | etot = -14.6175140348574 -75000 ekin = 0.0760907865069309 | erot = 0.377857644571635 | epot = -15.0714624659456 | etot = -14.617514034867 -76000 ekin = 0.073931583490861 | erot = 0.381714646754472 | epot = -15.073160265124 | etot = -14.6175140348787 -77000 ekin = 0.0729667273608691 | erot = 0.386551032955436 | epot = -15.0770317952076 | etot = -14.6175140348913 -78000 ekin = 0.0732128655080132 | erot = 0.392153586682573 | epot = -15.0828804870945 | etot = -14.6175140349039 -79000 ekin = 0.0746602878351816 | erot = 0.398338263928879 | epot = -15.0905125866795 | etot = -14.6175140349154 -80000 ekin = 0.0772774298946258 | erot = 0.404960669862598 | epot = -15.0997521346822 | etot = -14.617514034925 -81000 ekin = 0.0810152396747851 | erot = 0.411923913358685 | epot = -15.1104531879654 | etot = -14.617514034932 -82000 ekin = 0.0858111278281503 | erot = 0.419183131304765 | epot = -15.122508294069 | etot = -14.6175140349361 -83000 ekin = 0.0915922459207823 | erot = 0.426746154030485 | epot = -15.1358524348888 | etot = -14.6175140349375 -84000 ekin = 0.0982778862655832 | erot = 0.434670094582864 | epot = -15.1504620157849 | etot = -14.6175140349364 -85000 ekin = 0.105780875252437 | erot = 0.443054055542249 | epot = -15.1663489657283 | etot = -14.6175140349336 -86000 ekin = 0.114007936320836 | erot = 0.452028591870875 | epot = -15.1835505631216 | etot = -14.6175140349299 -87000 ekin = 0.122859117093393 | erot = 0.461742961599463 | epot = -15.2021161136192 | etot = -14.6175140349264 -88000 ekin = 0.132226490250757 | erot = 0.472351454261397 | epot = -15.2220919794359 | etot = -14.6175140349237 -89000 ekin = 0.141992430435586 | erot = 0.48400015022936 | epot = -15.243506615588 | etot = -14.6175140349231 -90000 ekin = 0.152027823849156 | erot = 0.496815313840275 | epot = -15.2663571726144 | etot = -14.617514034925 -91000 ekin = 0.162190574344531 | erot = 0.510894287760946 | epot = -15.2905988970356 | etot = -14.6175140349301 -92000 ekin = 0.172324730223634 | erot = 0.526299304076921 | epot = -15.3161380692392 | etot = -14.6175140349387 -93000 ekin = 0.182260479602882 | erot = 0.543054150884053 | epot = -15.3428286654374 | etot = -14.6175140349505 -94000 ekin = 0.19181516642483 | erot = 0.561143224560411 | epot = -15.3704724259507 | etot = -14.6175140349654 -95000 ekin = 0.200795384590157 | erot = 0.580512230413436 | epot = -15.398821649987 | etot = -14.6175140349834 -96000 ekin = 0.209000133284529 | erot = 0.601069706845066 | epot = -15.4275838751334 | etot = -14.6175140350038 -97000 ekin = 0.216224974983237 | erot = 0.62268863993255 | epot = -15.4564276499423 | etot = -14.6175140350265 -98000 ekin = 0.222267131485539 | erot = 0.6452076702458 | epot = -15.4849888367823 | etot = -14.617514035051 -99000 ekin = 0.226931474008825 | erot = 0.668431711039527 | epot = -15.5128772201251 | etot = -14.6175140350767 -100000 ekin = 0.230037392185109 | erot = 0.692132125756159 | epot = -15.5396835530446 | etot = -14.6175140351033 -101000 ekin = 0.231426538774162 | erot = 0.716046886548711 | epot = -15.5649874604531 | etot = -14.6175140351302 -102000 ekin = 0.230971416185847 | erot = 0.739881303910146 | epot = -15.5883667552525 | etot = -14.6175140351565 -103000 ekin = 0.228584676860608 | erot = 0.763309953364731 | epot = -15.6094086654068 | etot = -14.6175140351814 -104000 ekin = 0.224228843046253 | erot = 0.78598032692129 | epot = -15.6277232051714 | etot = -14.6175140352039 -105000 ekin = 0.217925953180068 | erot = 0.807518535459536 | epot = -15.6429585238624 | etot = -14.6175140352228 -106000 ekin = 0.209766205881383 | erot = 0.827537066837229 | epot = -15.6548173079557 | etot = -14.6175140352371 -107000 ekin = 0.199914663118832 | erot = 0.845644346598305 | epot = -15.6630730449629 | etot = -14.6175140352458 -108000 ekin = 0.188614735690438 | erot = 0.86145556230374 | epot = -15.6675843332424 | etot = -14.6175140352482 -109000 ekin = 0.176187061060969 | erot = 0.874603999194657 | epot = -15.6683050954996 | etot = -14.617514035244 -110000 ekin = 0.163022626611269 | erot = 0.884752084634178 | epot = -15.6652887464788 | etot = -14.6175140352334 -111000 ekin = 0.149569382110055 | erot = 0.891601400936344 | epot = -15.6586848182636 | etot = -14.6175140352172 -112000 ekin = 0.136312261124298 | erot = 0.894901120601569 | epot = -15.6487274169225 | etot = -14.6175140351967 -113000 ekin = 0.123747404857111 | erot = 0.894454602034433 | epot = -15.635716042065 | etot = -14.6175140351735 -114000 ekin = 0.112352324429236 | erot = 0.89012419645392 | epot = -15.6199905560327 | etot = -14.6175140351496 -115000 ekin = 0.102554569787019 | erot = 0.881834585428133 | epot = -15.601903190342 | etot = -14.6175140351268 -116000 ekin = 0.094702004709198 | erot = 0.869575126615747 | epot = -15.5817911664316 | etot = -14.6175140351067 -117000 ekin = 0.0890378681933156 | erot = 0.853401690495617 | epot = -15.5599535937792 | etot = -14.6175140350902 -118000 ekin = 0.0856833736304911 | erot = 0.833438318820653 | epot = -15.536635727529 | etot = -14.6175140350778 -119000 ekin = 0.0846297171115028 | erot = 0.809878764033866 | epot = -15.5120225162146 | etot = -14.6175140350693 -120000 ekin = 0.0857402026933537 | erot = 0.782987649503194 | epot = -15.4862418872603 | etot = -14.6175140350638 -121000 ekin = 0.0887619781646647 | erot = 0.753100709617513 | epot = -15.4593767228421 | etot = -14.61751403506 -122000 ekin = 0.0933458418333701 | erot = 0.720623403983765 | epot = -15.4314832808735 | etot = -14.6175140350564 -123000 ekin = 0.0990718975136712 | erot = 0.686027198351099 | epot = -15.4026131309163 | etot = -14.6175140350515 -124000 ekin = 0.10547856753477 | erot = 0.649842971568616 | epot = -15.3728355741476 | etot = -14.6175140350442 -125000 ekin = 0.112092583657157 | erot = 0.612651306911466 | epot = -15.3422579256018 | etot = -14.6175140350331 -126000 ekin = 0.118457948669929 | erot = 0.575069793126885 | epot = -15.3110417768148 | etot = -14.6175140350179 -127000 ekin = 0.12416235209736 | erot = 0.537737821904032 | epot = -15.2794142089994 | etot = -14.617514034998 -128000 ekin = 0.12886000047466 | erot = 0.50129966007338 | epot = -15.2476736955216 | etot = -14.6175140349735 -129000 ekin = 0.132290197680968 | erot = 0.466386755141928 | epot = -15.2161909877676 | etot = -14.6175140349447 -130000 ekin = 0.134291248322799 | erot = 0.433600287194598 | epot = -15.1854055704295 | etot = -14.6175140349121 -131000 ekin = 0.134809368078731 | erot = 0.403494917850824 | epot = -15.1558183208059 | etot = -14.6175140348763 -132000 ekin = 0.133902311412609 | erot = 0.376564532721137 | epot = -15.1279808789722 | etot = -14.6175140348384 -133000 ekin = 0.131737425949523 | erot = 0.35323055944927 | epot = -15.102482020198 | etot = -14.6175140347992 -134000 ekin = 0.128583872249503 | erot = 0.333833200744645 | epot = -15.0799311077543 | etot = -14.6175140347601 -135000 ekin = 0.124798858318881 | erot = 0.318625678761018 | epot = -15.0609385718023 | etot = -14.6175140347224 -136000 ekin = 0.120807966950657 | erot = 0.307771366705204 | epot = -15.0460933683435 | etot = -14.6175140346876 -137000 ekin = 0.117080018573046 | erot = 0.301343503849178 | epot = -15.0359375570798 | etot = -14.6175140346576 -138000 ekin = 0.11409740445119 | erot = 0.299327064918184 | epot = -15.0309385040035 | etot = -14.6175140346342 -139000 ekin = 0.112323403877017 | erot = 0.30162229304682 | epot = -15.0314597315429 | etot = -14.6175140346191 -140000 ekin = 0.112168587316825 | erot = 0.308049410073269 | epot = -15.0377320320041 | etot = -14.617514034614 -141000 ekin = 0.113958896787242 | erot = 0.318354084563179 | epot = -15.0498270159708 | etot = -14.6175140346204 -142000 ekin = 0.117908250109871 | erot = 0.332213334114279 | epot = -15.0676356188632 | etot = -14.6175140346391 -143000 ekin = 0.124098500240005 | erot = 0.349241744869171 | epot = -15.0908542797795 | etot = -14.6175140346704 -144000 ekin = 0.132469049162189 | erot = 0.368998042344344 | epot = -15.1189811262203 | etot = -14.6175140347138 -145000 ekin = 0.142817534773286 | erot = 0.390992018433719 | epot = -15.1513235879751 | etot = -14.6175140347681 -146000 ekin = 0.154812002594074 | erot = 0.414692148539669 | epot = -15.1870181859652 | etot = -14.6175140348314 -147000 ekin = 0.168013608208222 | erot = 0.439534147564146 | epot = -15.2250617906734 | etot = -14.617514034901 -148000 ekin = 0.181907755044263 | erot = 0.464930715993231 | epot = -15.2643525060114 | etot = -14.617514034974 -149000 ekin = 0.195940689918476 | erot = 0.490282644231627 | epot = -15.303737369197 | etot = -14.6175140350469 -150000 ekin = 0.209558115498224 | erot = 0.514991307803342 | epot = -15.3420634584183 | etot = -14.6175140351167 -151000 ekin = 0.222242375358764 | erot = 0.538472447670959 | epot = -15.37822885821 | etot = -14.6175140351803 -152000 ekin = 0.233545181100908 | erot = 0.560170967505261 | epot = -15.4112301838413 | etot = -14.6175140352351 -153000 ekin = 0.243113638171877 | erot = 0.579575715964384 | epot = -15.4402033894153 | etot = -14.6175140352791 -154000 ekin = 0.250708030719506 | erot = 0.596234520730852 | epot = -15.4644565867613 | etot = -14.617514035311 -155000 ekin = 0.256210874594867 | erot = 0.60976818504912 | epot = -15.4834930949737 | etot = -14.6175140353297 -156000 ekin = 0.259627463842678 | erot = 0.619882772314523 | epot = -15.4970242714926 | etot = -14.6175140353354 -157000 ekin = 0.261078756733762 | erot = 0.626379517381851 | epot = -15.5049723094439 | etot = -14.6175140353283 -158000 ekin = 0.260787877594799 | erot = 0.629161788909728 | epot = -15.5074637018138 | etot = -14.6175140353093 -159000 ekin = 0.259061752299363 | erot = 0.628238692725143 | epot = -15.5048144803044 | etot = -14.6175140352799 -160000 ekin = 0.256269476947947 | erot = 0.623725097357694 | epot = -15.4975086095473 | etot = -14.6175140352416 -161000 ekin = 0.252818974262676 | erot = 0.615838055764808 | epot = -15.486171065224 | etot = -14.6175140351965 -162000 ekin = 0.249133354780831 | erot = 0.604889772113657 | epot = -15.471537162041 | etot = -14.6175140351465 -163000 ekin = 0.245628201594069 | erot = 0.591277407065719 | epot = -15.4544196437535 | etot = -14.6175140350937 -164000 ekin = 0.242690765770497 | erot = 0.575470125399849 | epot = -15.4356749262106 | etot = -14.6175140350402 -165000 ekin = 0.240661818237638 | erot = 0.557993868663582 | epot = -15.4161697218892 | etot = -14.617514034988 -166000 ekin = 0.239820672159809 | erot = 0.53941438884916 | epot = -15.3967490959478 | etot = -14.6175140349388 -167000 ekin = 0.240373682616981 | erot = 0.520319112884548 | epot = -15.3782068303959 | etot = -14.6175140348944 -168000 ekin = 0.24244635767337 | erot = 0.501298426047094 | epot = -15.3612588185766 | etot = -14.6175140348562 -169000 ekin = 0.246079081489486 | erot = 0.482926967022081 | epot = -15.3465200833369 | etot = -14.6175140348253 -170000 ekin = 0.251226355670601 | erot = 0.465745518941346 | epot = -15.3344859094148 | etot = -14.6175140348028 -171000 ekin = 0.257759407502439 | erot = 0.450244072412675 | epot = -15.3255175147044 | etot = -14.6175140347893 -172000 ekin = 0.265471962314995 | erot = 0.43684655757276 | epot = -15.3198325546728 | etot = -14.617514034785 -173000 ekin = 0.274088992052566 | erot = 0.425897760802307 | epot = -15.317500787645 | etot = -14.6175140347901 -174000 ekin = 0.283278228107989 | erot = 0.417652965987653 | epot = -15.3184452288998 | etot = -14.6175140348041 -175000 ekin = 0.292664164217049 | erot = 0.41227065206718 | epot = -15.3224488511106 | etot = -14.6175140348264 -176000 ekin = 0.301844276743974 | erot = 0.409808663993543 | epot = -15.3291669755933 | etot = -14.6175140348558 -177000 ekin = 0.310407103277722 | erot = 0.410224178773613 | epot = -15.338145316942 | etot = -14.6175140348907 -178000 ekin = 0.317951707448459 | erot = 0.413377690533319 | epot = -15.3488434329112 | etot = -14.6175140349295 -179000 ekin = 0.324107901131331 | erot = 0.419041092199345 | epot = -15.3606630283007 | etot = -14.61751403497 -180000 ekin = 0.328556397748226 | erot = 0.426909726007329 | epot = -15.3729801587658 | etot = -14.6175140350103 -181000 ekin = 0.331047834153872 | erot = 0.436618006902467 | epot = -15.3851798761041 | etot = -14.6175140350478 -182000 ekin = 0.331419420114469 | erot = 0.447757936314679 | epot = -15.3966913915095 | etot = -14.6175140350803 -183000 ekin = 0.32960779233749 | erot = 0.459899520065503 | epot = -15.4070213475091 | etot = -14.6175140351061 -184000 ekin = 0.325656516855028 | erot = 0.472611792133139 | epot = -15.4157823441118 | etot = -14.6175140351236 -185000 ekin = 0.319716934487211 | erot = 0.485483030927449 | epot = -15.4227140005469 | etot = -14.6175140351322 -186000 ekin = 0.312041347782212 | erot = 0.498138700398001 | epot = -15.4276940833121 | etot = -14.6175140351319 -187000 ekin = 0.302968200961153 | erot = 0.510255791848845 | epot = -15.4307380279334 | etot = -14.6175140351234 -188000 ekin = 0.292899787356355 | erot = 0.5215725520513 | epot = -15.4319863745157 | etot = -14.6175140351081 -189000 ekin = 0.282274048055605 | erot = 0.531893031493143 | epot = -15.4316811146372 | etot = -14.6175140350884 -190000 ekin = 0.271533034588949 | erot = 0.541086413296656 | epot = -15.4301334829521 | etot = -14.6175140350665 -191000 ekin = 0.261091384545176 | erot = 0.549081610185661 | epot = -15.4276870297757 | etot = -14.6175140350448 -192000 ekin = 0.251308489707993 | erot = 0.555858063434326 | epot = -15.4246805881679 | etot = -14.6175140350256 -193000 ekin = 0.242467771119499 | erot = 0.561433978654792 | epot = -15.4214157847846 | etot = -14.6175140350103 -194000 ekin = 0.234765581624083 | erot = 0.565853352187983 | epot = -15.4181329688119 | etot = -14.6175140349998 -195000 ekin = 0.228310848060933 | erot = 0.569173077812972 | epot = -15.414997960868 | etot = -14.6175140349941 -196000 ekin = 0.223134890549791 | erot = 0.571451208607789 | epot = -15.4121001341501 | etot = -14.6175140349925 -197000 ekin = 0.219209242155479 | erot = 0.572737138234515 | epot = -15.4094604153842 | etot = -14.6175140349942 -198000 ekin = 0.216468062808567 | erot = 0.573064123809139 | epot = -15.4070462216157 | etot = -14.6175140349979 -199000 ekin = 0.214831137522102 | erot = 0.572444258405115 | epot = -15.4047894309295 | etot = -14.6175140350023 -200000 ekin = 0.214223573901692 | erot = 0.570865760664587 | epot = -15.402603369573 | etot = -14.6175140350067 -201000 ekin = 0.214589119166338 | erot = 0.568292309388425 | epot = -15.4003954635655 | etot = -14.6175140350107 -202000 ekin = 0.215895325601886 | erot = 0.564664121435213 | epot = -15.3980734820515 | etot = -14.6175140350144 -203000 ekin = 0.218130347569574 | erot = 0.559900543320399 | epot = -15.3955449259083 | etot = -14.6175140350184 -204000 ekin = 0.221292667473328 | erot = 0.553904074219809 | epot = -15.3927107767163 | etot = -14.6175140350232 -205000 ekin = 0.225376258610291 | erot = 0.546565915590086 | epot = -15.3894562092301 | etot = -14.6175140350297 -206000 ekin = 0.230354397528691 | erot = 0.537773288685104 | epot = -15.3856417212522 | etot = -14.6175140350384 -207000 ekin = 0.236165428414371 | erot = 0.527418806931578 | epot = -15.381098270395 | etot = -14.617514035049 -208000 ekin = 0.242703261860097 | erot = 0.515412077176742 | epot = -15.3756293740978 | etot = -14.617514035061 -209000 ekin = 0.249814382549771 | erot = 0.501693407692904 | epot = -15.3690218253158 | etot = -14.6175140350732 -210000 ekin = 0.257301864855487 | erot = 0.486249049966601 | epot = -15.3610649499058 | etot = -14.6175140350838 -211000 ekin = 0.264935635394205 | erot = 0.469126912721255 | epot = -15.3515765832064 | etot = -14.6175140350909 -212000 ekin = 0.272467183646432 | erot = 0.450451153648385 | epot = -15.3404323723875 | etot = -14.6175140350927 -213000 ekin = 0.279646306736913 | erot = 0.43043370267778 | epot = -15.3275940445023 | etot = -14.6175140350876 -214000 ekin = 0.2862376112769 | erot = 0.409381288017335 | epot = -15.3131329343688 | etot = -14.6175140350746 -215000 ekin = 0.292034643872931 | erot = 0.387696263733716 | epot = -15.29724494266 | etot = -14.6175140350534 -216000 ekin = 0.296870258153004 | erot = 0.365870567410597 | epot = -15.2802548605881 | etot = -14.6175140350245 -217000 ekin = 0.300622666325324 | erot = 0.344472695101548 | epot = -15.2626093964159 | etot = -14.617514034989 -218000 ekin = 0.303217269541565 | erot = 0.324128407396833 | epot = -15.2448597118871 | etot = -14.6175140349487 -219000 ekin = 0.30462484391226 | erot = 0.305496496150472 | epot = -15.2276353749682 | etot = -14.6175140349055 -220000 ekin = 0.304856982074418 | erot = 0.28924122167423 | epot = -15.2116122386105 | etot = -14.6175140348619 -221000 ekin = 0.303959749544728 | erot = 0.276003133760621 | epot = -15.1974769181254 | etot = -14.61751403482 -222000 ekin = 0.302006434071344 | erot = 0.266369862263784 | epot = -15.1858903311172 | etot = -14.6175140347821 -223000 ekin = 0.299090105491097 | erot = 0.260848208952983 | epot = -15.1774523491944 | etot = -14.6175140347503 -224000 ekin = 0.295316503745814 | erot = 0.259838588555869 | epot = -15.172669127028 | etot = -14.6175140347263 -225000 ekin = 0.290797600318129 | erot = 0.263612591734552 | epot = -15.1719242267643 | etot = -14.6175140347116 -226000 ekin = 0.285646103233329 | erot = 0.272294318079252 | epot = -15.1754544560199 | etot = -14.6175140347073 -227000 ekin = 0.27997101868972 | erot = 0.285846075010759 | epot = -15.1833311284149 | etot = -14.6175140347144 -228000 ekin = 0.273874374728189 | erot = 0.30405906911905 | epot = -15.1954474785805 | etot = -14.6175140347332 -229000 ekin = 0.267449174160499 | erot = 0.326549807965651 | epot = -15.2115130168897 | etot = -14.6175140347636 -230000 ekin = 0.260778614119454 | erot = 0.352763004039823 | epot = -15.2310556529641 | etot = -14.6175140348048 -231000 ekin = 0.253936564977397 | erot = 0.381981763344756 | epot = -15.2534323631777 | etot = -14.6175140348555 -232000 ekin = 0.246989230842658 | erot = 0.413345683736729 | epot = -15.2778489494936 | etot = -14.6175140349142 -233000 ekin = 0.239997814735999 | erot = 0.445877135783826 | epot = -15.3033889854983 | etot = -14.6175140349785 -234000 ekin = 0.233021891669954 | erot = 0.478515439398985 | epot = -15.3290513661143 | etot = -14.6175140350454 -235000 ekin = 0.226123071286447 | erot = 0.510157919201476 | epot = -15.3537950255997 | etot = -14.6175140351118 -236000 ekin = 0.219368436952772 | erot = 0.539706010633882 | epot = -15.3765884827611 | etot = -14.6175140351745 -237000 ekin = 0.212833212708605 | erot = 0.566113832023257 | epot = -15.3964610799619 | etot = -14.61751403523 -238000 ekin = 0.206602165162868 | erot = 0.588436180449293 | epot = -15.4125523808878 | etot = -14.6175140352756 -239000 ekin = 0.200769360307751 | erot = 0.605872583258375 | epot = -15.4241559788754 | etot = -14.6175140353093 -240000 ekin = 0.195436190928629 | erot = 0.617803458377821 | epot = -15.4307536846357 | etot = -14.6175140353292 -241000 ekin = 0.190707920284747 | erot = 0.623817360380854 | epot = -15.4320393160006 | etot = -14.617514035335 -242000 ekin = 0.186689132524139 | erot = 0.623726737659663 | epot = -15.4279299055104 | etot = -14.6175140353266 -243000 ekin = 0.183478880874974 | erot = 0.617571857376276 | epot = -15.4185647735561 | etot = -14.6175140353049 -244000 ekin = 0.18116616676021 | erot = 0.605612923712308 | epot = -15.4042931257437 | etot = -14.6175140352712 -245000 ekin = 0.179826690516149 | erot = 0.588311983397651 | epot = -15.3856527091413 | etot = -14.6175140352275 -246000 ekin = 0.17952147334509 | erot = 0.566306329739293 | epot = -15.3633418382601 | etot = -14.6175140351757 -247000 ekin = 0.180297726609518 | erot = 0.540375528723556 | epot = -15.3381872904514 | etot = -14.6175140351183 -248000 ekin = 0.182192022181396 | erot = 0.511404282991674 | epot = -15.3111103402302 | etot = -14.6175140350572 -249000 ekin = 0.185235475059317 | erot = 0.480343275337862 | epot = -15.2830927853916 | etot = -14.6175140349945 -250000 ekin = 0.189460324578836 | erot = 0.448169956262068 | epot = -15.255144315773 | etot = -14.6175140349321 -251000 ekin = 0.194907020012373 | erot = 0.415851007132876 | epot = -15.228272062017 | etot = -14.6175140348717 -252000 ekin = 0.201630699423839 | erot = 0.384307951122292 | epot = -15.2034526853611 | etot = -14.617514034815 -253000 ekin = 0.20970581525618 | erot = 0.354387113740114 | epot = -15.1816069637594 | etot = -14.6175140347631 -254000 ekin = 0.219227629547435 | erot = 0.326834860919777 | epot = -15.1635765251848 | etot = -14.6175140347176 -255000 ekin = 0.230309407957435 | erot = 0.302278768995732 | epot = -15.1501022116327 | etot = -14.6175140346795 -256000 ekin = 0.243074422922269 | erot = 0.281215109558699 | epot = -15.141803567131 | etot = -14.61751403465 -257000 ekin = 0.257642364630155 | erot = 0.264002762946071 | epot = -15.1391591622066 | etot = -14.6175140346303 -258000 ekin = 0.27411046110411 | erot = 0.250863404057696 | epot = -15.1424878997833 | etot = -14.6175140346215 -259000 ekin = 0.292530483429778 | erot = 0.241887528333028 | epot = -15.1519320463872 | etot = -14.6175140346244 -260000 ekin = 0.312883750215132 | erot = 0.23704560099139 | epot = -15.1674433858462 | etot = -14.6175140346397 -261000 ekin = 0.335057071666337 | erot = 0.236203324625287 | epot = -15.1887744309592 | etot = -14.6175140346676 -262000 ekin = 0.358823075933478 | erot = 0.239139750884219 | epot = -15.2154768615253 | etot = -14.6175140347076 -263000 ekin = 0.383828346059002 | erot = 0.245566753569579 | epot = -15.2469091343872 | etot = -14.6175140347586 -264000 ekin = 0.409592161639953 | erot = 0.255148290958821 | epot = -15.2822544874178 | etot = -14.617514034819 -265000 ekin = 0.435517425640971 | erot = 0.267517972446788 | epot = -15.3205494329742 | etot = -14.6175140348864 -266000 ekin = 0.460913759434669 | erot = 0.282293742227945 | epot = -15.3607215366204 | etot = -14.6175140349578 -267000 ekin = 0.485031075313803 | erot = 0.299088986461064 | epot = -15.4016340968052 | etot = -14.6175140350303 -268000 ekin = 0.50710051747369 | erot = 0.317519986656959 | epot = -15.4421345392314 | etot = -14.6175140351007 -269000 ekin = 0.526378761163567 | erot = 0.337210258003277 | epot = -15.481103054333 | etot = -14.6175140351661 -270000 ekin = 0.542191399557179 | erot = 0.357792786170331 | epot = -15.5174982209515 | etot = -14.617514035224 -271000 ekin = 0.55397150127531 | erot = 0.37891139471306 | epot = -15.5503969312606 | etot = -14.6175140352722 -272000 ekin = 0.561290243476898 | erot = 0.40022238743361 | epot = -15.5790266662199 | etot = -14.6175140353094 -273000 ekin = 0.563877614617904 | erot = 0.42139725004376 | epot = -15.6027888999963 | etot = -14.6175140353346 -274000 ekin = 0.561632338447624 | erot = 0.44212667165534 | epot = -15.6212730454506 | etot = -14.6175140353476 -275000 ekin = 0.554621238224451 | erot = 0.462125606775406 | epot = -15.6342608803486 | etot = -14.6175140353487 -276000 ekin = 0.543069132887202 | erot = 0.481138682331976 | epot = -15.6417218505579 | etot = -14.6175140353387 -277000 ekin = 0.527340979965708 | erot = 0.498945052082867 | epot = -15.6438000673675 | etot = -14.6175140353189 -278000 ekin = 0.50791833721729 | erot = 0.515361832413215 | epot = -15.6407942049214 | etot = -14.6175140352909 -279000 ekin = 0.485372319601928 | erot = 0.530245473601801 | epot = -15.6331318284601 | etot = -14.6175140352564 -280000 ekin = 0.460335116506523 | erot = 0.543490744711177 | epot = -15.6213398964351 | etot = -14.6175140352174 -281000 ekin = 0.433471859960465 | erot = 0.555027349456908 | epot = -15.6060132445935 | etot = -14.6175140351761 -282000 ekin = 0.405454262480516 | erot = 0.56481448000714 | epot = -15.5877827776223 | etot = -14.6175140351346 -283000 ekin = 0.376937038993425 | erot = 0.572833827993367 | epot = -15.5672849020813 | etot = -14.6175140350945 -284000 ekin = 0.34853774796245 | erot = 0.57908171193117 | epot = -15.5451334949501 | etot = -14.6175140350565 -285000 ekin = 0.320820372083186 | erot = 0.583561068647179 | epot = -15.5218954757531 | etot = -14.6175140350227 -286000 ekin = 0.294282726921471 | erot = 0.586274110946644 | epot = -15.4980708728619 | etot = -14.6175140349938 -287000 ekin = 0.269347634013377 | erot = 0.587216475910743 | epot = -15.4740781448946 | etot = -14.6175140349705 -288000 ekin = 0.24635770446757 | erot = 0.586373659773426 | epot = -15.450245399194 | etot = -14.6175140349531 -289000 ekin = 0.22557352214574 | erot = 0.583720426232605 | epot = -15.4268079833199 | etot = -14.6175140349415 -290000 ekin = 0.2071749628185 | erot = 0.579223657449731 | epot = -15.4039126552032 | etot = -14.6175140349349 -291000 ekin = 0.191265313940318 | erot = 0.572848780864004 | epot = -15.3816281297367 | etot = -14.6175140349324 -292000 ekin = 0.177877757396561 | erot = 0.564569470033125 | epot = -15.3599612623625 | etot = -14.6175140349328 -293000 ekin = 0.166983649288562 | erot = 0.554379837682064 | epot = -15.3388775219052 | etot = -14.6175140349346 -294000 ekin = 0.158501898150816 | erot = 0.542307895558441 | epot = -15.3183238286455 | etot = -14.6175140349363 -295000 ekin = 0.152308641379775 | erot = 0.528428741575586 | epot = -15.2982514178919 | etot = -14.6175140349366 -296000 ekin = 0.148246390134261 | erot = 0.512875830575391 | epot = -15.278636255644 | etot = -14.6175140349344 -297000 ekin = 0.146131889948849 | erot = 0.495848833633677 | epot = -15.2594947585116 | etot = -14.6175140349291 -298000 ekin = 0.145762142540935 | erot = 0.477616979343651 | epot = -15.2408931568052 | etot = -14.6175140349206 -299000 ekin = 0.146918339842694 | erot = 0.45851732797416 | epot = -15.2229497027261 | etot = -14.6175140349092 -300000 ekin = 0.149367830718072 | erot = 0.438948042711665 | epot = -15.2058299083253 | etot = -14.6175140348956 -301000 ekin = 0.152864610234037 | erot = 0.419357266833116 | epot = -15.1897359119478 | etot = -14.6175140348806 -302000 ekin = 0.157149122640173 | erot = 0.400228590597456 | epot = -15.1748917481032 | etot = -14.6175140348656 -303000 ekin = 0.161948347719037 | erot = 0.382064246006854 | epot = -15.1615266285773 | etot = -14.6175140348514 -304000 ekin = 0.166977167327442 | erot = 0.365367110078576 | epot = -15.1498583122451 | etot = -14.617514034839 -305000 ekin = 0.171941885875878 | erot = 0.350622387001197 | epot = -15.1400783077066 | etot = -14.6175140348295 -306000 ekin = 0.17654652269687 | erot = 0.338279561363739 | epot = -15.1323401188837 | etot = -14.6175140348231 -307000 ekin = 0.180502080572199 | erot = 0.328734935091342 | epot = -15.126751050484 | etot = -14.6175140348204 -308000 ekin = 0.183539117579255 | erot = 0.322315068517902 | epot = -15.1233682209184 | etot = -14.6175140348212 -309000 ekin = 0.185422589168818 | erot = 0.319261135180292 | epot = -15.1221977591747 | etot = -14.6175140348256 -310000 ekin = 0.185968382525486 | erot = 0.319714556777639 | epot = -15.1231969741363 | etot = -14.6175140348331 -311000 ekin = 0.185060444471757 | erot = 0.323704474532877 | epot = -15.1262789538481 | etot = -14.6175140348434 -312000 ekin = 0.182667055699906 | erot = 0.331137883754682 | epot = -15.1313189743106 | etot = -14.617514034856 -313000 ekin = 0.178854671448125 | erot = 0.341793554574352 | epot = -15.1381622608927 | etot = -14.6175140348702 -314000 ekin = 0.173797674113312 | erot = 0.355321045101953 | epot = -15.1466327541008 | etot = -14.6175140348856 -315000 ekin = 0.167782440685997 | erot = 0.371246117950235 | epot = -15.1565425935375 | etot = -14.6175140349012 -316000 ekin = 0.161204347699341 | erot = 0.388983636698412 | epot = -15.1677020193143 | etot = -14.6175140349165 -317000 ekin = 0.154556738723005 | erot = 0.407858516721223 | epot = -15.179929290375 | etot = -14.6175140349308 -318000 ekin = 0.148411457828021 | erot = 0.427134549771537 | epot = -15.1930600425428 | etot = -14.6175140349433 -319000 ekin = 0.143391260343281 | erot = 0.446049980956607 | epot = -15.2069552762534 | etot = -14.6175140349535 -320000 ekin = 0.140135163879396 | erot = 0.463857713006752 | epot = -15.2215069118476 | etot = -14.6175140349615 -321000 ekin = 0.139258496830827 | erot = 0.479867117343613 | epot = -15.2366396491415 | etot = -14.6175140349671 -322000 ekin = 0.141309963686793 | erot = 0.493483840953768 | epot = -15.2523078396114 | etot = -14.6175140349709 -323000 ekin = 0.146728465402056 | erot = 0.504243890594794 | epot = -15.2684863909708 | etot = -14.6175140349739 -324000 ekin = 0.155802740978481 | erot = 0.511838753068078 | epot = -15.285155529024 | etot = -14.6175140349775 -325000 ekin = 0.168637192339767 | erot = 0.516129344219425 | epot = -15.3022805715425 | etot = -14.6175140349833 -326000 ekin = 0.185127492740946 | erot = 0.517147991936385 | epot = -15.3197895196698 | etot = -14.6175140349924 -327000 ekin = 0.204949583925484 | erot = 0.51508915511157 | epot = -15.3375527740431 | etot = -14.6175140350061 -328000 ekin = 0.227565145376643 | erot = 0.510290835144336 | epot = -15.3553700155452 | etot = -14.6175140350242 -329000 ekin = 0.252245305622049 | erot = 0.503209396460757 | epot = -15.372968737129 | etot = -14.6175140350462 -330000 ekin = 0.278112223739094 | erot = 0.494390678507019 | epot = -15.3900169373162 | etot = -14.6175140350701 -331000 ekin = 0.304195517645128 | erot = 0.48443992761456 | epot = -15.4061494803532 | etot = -14.6175140350935 -332000 ekin = 0.329497983392816 | erot = 0.473992405219049 | epot = -15.4210044237254 | etot = -14.6175140351136 -333000 ekin = 0.353063353198652 | erot = 0.463685785195841 | epot = -15.4342631735224 | etot = -14.6175140351279 -334000 ekin = 0.374038491016672 | erot = 0.454134842083235 | epot = -15.4456873682343 | etot = -14.6175140351344 -335000 ekin = 0.391723520500374 | erot = 0.445908562625435 | epot = -15.4551461182583 | etot = -14.6175140351325 -336000 ekin = 0.405605581598632 | erot = 0.439509690040463 | epot = -15.4626293067615 | etot = -14.6175140351224 -337000 ekin = 0.415374601838237 | erot = 0.435356764652333 | epot = -15.4682454015957 | etot = -14.6175140351051 -338000 ekin = 0.420921997010151 | erot = 0.433768862195292 | epot = -15.4722048942882 | etot = -14.6175140350828 -339000 ekin = 0.422325110447546 | erot = 0.43495337621205 | epot = -15.4747925217174 | etot = -14.6175140350578 -340000 ekin = 0.419821259880477 | erot = 0.438997304560058 | epot = -15.4763325994731 | etot = -14.6175140350326 -341000 ekin = 0.413775534581175 | erot = 0.44586257358568 | epot = -15.4771521431765 | etot = -14.6175140350096 -342000 ekin = 0.404646174020876 | erot = 0.455385967573906 | epot = -15.4775461765857 | etot = -14.6175140349909 -343000 ekin = 0.392950705832838 | erot = 0.467284215126923 | epot = -15.4777489559374 | etot = -14.6175140349776 -344000 ekin = 0.379235231728912 | erot = 0.481164689425971 | epot = -15.4779139561254 | etot = -14.6175140349705 -345000 ekin = 0.364048459933183 | erot = 0.496541967294209 | epot = -15.4781044621969 | etot = -14.6175140349695 -346000 ekin = 0.347921358320347 | erot = 0.512860132815035 | epot = -15.478295526109 | etot = -14.6175140349736 -347000 ekin = 0.331352665808157 | erot = 0.529520204053152 | epot = -15.4783869048429 | etot = -14.6175140349816 -348000 ekin = 0.314799955036598 | erot = 0.545911447469195 | epot = -15.4782254374972 | etot = -14.6175140349914 -349000 ekin = 0.298675493175313 | erot = 0.561444708834118 | epot = -15.4776342370104 | etot = -14.617514035001 -350000 ekin = 0.283345815520902 | erot = 0.575585348316022 | epot = -15.4764451988451 | etot = -14.6175140350082 -351000 ekin = 0.269133730327555 | erot = 0.587883045339148 | epot = -15.474530810678 | etot = -14.6175140350113 -352000 ekin = 0.256321431305235 | erot = 0.597995738138075 | epot = -15.4718312044524 | etot = -14.6175140350091 -353000 ekin = 0.245153509654402 | erot = 0.605705335206248 | epot = -15.4683728798615 | etot = -14.6175140350009 -354000 ekin = 0.235838910986199 | erot = 0.610923562934513 | epot = -15.4642765089078 | etot = -14.6175140349871 -355000 ekin = 0.228551231300299 | erot = 0.613687305425488 | epot = -15.4597525716945 | etot = -14.6175140349687 -356000 ekin = 0.223427131306872 | erot = 0.614143902824619 | epot = -15.4550850690789 | etot = -14.6175140349474 -357000 ekin = 0.220563006917723 | erot = 0.612527933401769 | epot = -15.4506049752447 | etot = -14.6175140349252 -358000 ekin = 0.220010333197538 | erot = 0.60913185554413 | epot = -15.4466562236462 | etot = -14.6175140349045 -359000 ekin = 0.221770268739923 | erot = 0.604273418957614 | epot = -15.4435577225855 | etot = -14.6175140348879 -360000 ekin = 0.225788163653265 | erot = 0.59826292557133 | epot = -15.4415651241022 | etot = -14.6175140348776 -361000 ekin = 0.231948578437353 | erot = 0.591373251984939 | epot = -15.4408358652976 | etot = -14.6175140348753 -362000 ekin = 0.240071331018014 | erot = 0.583815109039721 | epot = -15.4414004749402 | etot = -14.6175140348825 -363000 ekin = 0.249908988057748 | erot = 0.575719406612921 | epot = -15.4431424295704 | etot = -14.6175140348997 -364000 ekin = 0.261146140581928 | erot = 0.567127906486825 | epot = -15.4457880819959 | etot = -14.6175140349271 -365000 ekin = 0.273400773645737 | erot = 0.557992653605887 | epot = -15.4489074622157 | etot = -14.6175140349641 -366000 ekin = 0.286228056503698 | erot = 0.548184015759201 | epot = -15.451926107272 | etot = -14.6175140350091 -367000 ekin = 0.299126926925929 | erot = 0.537506547612545 | epot = -15.4541475095989 | etot = -14.6175140350605 -368000 ekin = 0.311549892638321 | erot = 0.525721330953661 | epot = -15.4547852587075 | etot = -14.6175140351155 -369000 ekin = 0.322916493342089 | erot = 0.512572942756051 | epot = -15.4530034712696 | etot = -14.6175140351714 -370000 ekin = 0.332630833323947 | erot = 0.497818805483414 | epot = -15.4479636740324 | etot = -14.617514035225 -371000 ekin = 0.340103492446085 | erot = 0.481258447418289 | epot = -15.4388759751373 | etot = -14.6175140352729 -372000 ekin = 0.344777943663694 | erot = 0.462760223985889 | epot = -15.4250522029613 | etot = -14.6175140353117 -373000 ekin = 0.346161332161625 | erot = 0.442283380419747 | epot = -15.4059587479197 | etot = -14.6175140353383 -374000 ekin = 0.34385906298025 | erot = 0.419893962768399 | epot = -15.3812670610983 | etot = -14.6175140353497 -375000 ekin = 0.337612023151115 | erot = 0.395773904237539 | epot = -15.3508999627315 | etot = -14.6175140353429 -376000 ekin = 0.327334336193325 | erot = 0.370223433837622 | epot = -15.3150718053467 | etot = -14.6175140353157 -377000 ekin = 0.313148263712678 | erot = 0.343657545338106 | epot = -15.2743198443178 | etot = -14.617514035267 -378000 ekin = 0.295411338277493 | erot = 0.31659745453892 | epot = -15.2295228280126 | etot = -14.6175140351962 -379000 ekin = 0.274729408510339 | erot = 0.289657740940279 | epot = -15.1819011845556 | etot = -14.617514035105 -380000 ekin = 0.251948675267282 | erot = 0.26352941405552 | epot = -15.132992124319 | etot = -14.6175140349962 -381000 ekin = 0.228120837035132 | erot = 0.238958749468289 | epot = -15.0845936213795 | etot = -14.617514034876 -382000 ekin = 0.204438854506735 | erot = 0.216721270519236 | epot = -15.0386741597777 | etot = -14.6175140347517 -383000 ekin = 0.18214626375543 | erot = 0.197591880984119 | epot = -14.9972521793718 | etot = -14.6175140346322 -384000 ekin = 0.162429780679613 | erot = 0.182311896923878 | epot = -14.9622557121303 | etot = -14.6175140345268 -385000 ekin = 0.14631062212394 | erot = 0.171555128910918 | epot = -14.9353797854786 | etot = -14.6175140344437 -386000 ekin = 0.134552389652524 | erot = 0.165895597224088 | epot = -14.9179620212651 | etot = -14.6175140343885 -387000 ekin = 0.127600986328493 | erot = 0.165779213533709 | epot = -14.910894234226 | etot = -14.6175140343638 -388000 ekin = 0.125565151523076 | erot = 0.171500950984482 | epot = -14.9145801368766 | etot = -14.617514034369 -389000 ekin = 0.128237001096944 | erot = 0.183188026636168 | epot = -14.9289390621344 | etot = -14.6175140344012 -390000 ekin = 0.135143637923039 | erot = 0.200788930663258 | epot = -14.9534466030429 | etot = -14.6175140344566 -391000 ekin = 0.145616156499708 | erot = 0.224068074688681 | epot = -14.9871982657188 | etot = -14.6175140345305 -392000 ekin = 0.158862235246441 | erot = 0.252606362172211 | epot = -15.0289826320369 | etot = -14.6175140346182 -393000 ekin = 0.174032087603203 | erot = 0.285808726840186 | epot = -15.0773548491587 | etot = -14.6175140347154 -394000 ekin = 0.190272707003301 | erot = 0.322920107513567 | epot = -15.1307068493349 | etot = -14.617514034818 -395000 ekin = 0.206769905101704 | erot = 0.363051013229015 | epot = -15.1873349532528 | etot = -14.617514034922 -396000 ekin = 0.222780272469859 | erot = 0.405212687948395 | epot = -15.2455069954415 | etot = -14.6175140350232 -397000 ekin = 0.237655698718688 | erot = 0.448360183483404 | epot = -15.30352991732 | etot = -14.6175140351179 -398000 ekin = 0.250862154069842 | erot = 0.491439914330344 | epot = -15.3598161036022 | etot = -14.617514035202 -399000 ekin = 0.26199305595339 | erot = 0.533437059171214 | epot = -15.4129441503972 | etot = -14.6175140352726 -400000 ekin = 0.270776550506873 | erot = 0.573417887950088 | epot = -15.4617084737844 | etot = -14.6175140353274 -401000 ekin = 0.277075831015576 | erot = 0.610562842824445 | epot = -15.505152709206 | etot = -14.6175140353659 -402000 ekin = 0.280882158891411 | erot = 0.644187798759867 | epot = -15.5425839930396 | etot = -14.6175140353883 -403000 ekin = 0.282301228578692 | erot = 0.673752968642393 | epot = -15.5735682326171 | etot = -14.6175140353961 -404000 ekin = 0.281534519811875 | erot = 0.698860907482472 | epot = -15.5979094626856 | etot = -14.6175140353912 -405000 ekin = 0.278857975736601 | erot = 0.719246574878549 | epot = -15.6156185859913 | etot = -14.6175140353761 -406000 ekin = 0.274600555759064 | erot = 0.734763157397056 | epot = -15.6268777485091 | etot = -14.617514035353 -407000 ekin = 0.269124923358215 | erot = 0.745367259285198 | epot = -15.632006217967 | etot = -14.6175140353236 -408000 ekin = 0.262811853165536 | erot = 0.751106276665246 | epot = -15.6314321651198 | etot = -14.617514035289 -409000 ekin = 0.256049112192036 | erot = 0.752109968276093 | epot = -15.6256731157183 | etot = -14.6175140352501 -410000 ekin = 0.249224269809745 | erot = 0.748584332259483 | epot = -15.6153226372765 | etot = -14.6175140352073 -411000 ekin = 0.242720888553536 | erot = 0.740809103918216 | epot = -15.6010440276323 | etot = -14.6175140351606 -412000 ekin = 0.236916379506269 | erot = 0.729136085380601 | epot = -15.5835664999972 | etot = -14.6175140351103 -413000 ekin = 0.232179735243895 | erot = 0.713985498456758 | epot = -15.5636792687577 | etot = -14.6175140350571 -414000 ekin = 0.228867632642548 | erot = 0.69583865258568 | epot = -15.5422203202302 | etot = -14.617514035002 -415000 ekin = 0.227317772308217 | erot = 0.675225695396091 | epot = -15.5200575026511 | etot = -14.6175140349468 -416000 ekin = 0.227838940778023 | erot = 0.652708261105137 | epot = -15.4980612367767 | etot = -14.6175140348936 -417000 ekin = 0.230697970867357 | erot = 0.628857925336153 | epot = -15.4770699310484 | etot = -14.6175140348449 -418000 ekin = 0.236104416121193 | erot = 0.604232291330004 | epot = -15.4578507422545 | etot = -14.6175140348033 -419000 ekin = 0.244194252200952 | erot = 0.579351108945525 | epot = -15.4410593959175 | etot = -14.617514034771 -420000 ekin = 0.255014214169041 | erot = 0.554674986841728 | epot = -15.4272032357609 | etot = -14.6175140347501 -421000 ekin = 0.268508458340882 | erot = 0.530589008737048 | epot = -15.4166115018197 | etot = -14.6175140347417 -422000 ekin = 0.284509119561071 | erot = 0.507392982381401 | epot = -15.4094161366887 | etot = -14.6175140347463 -423000 ekin = 0.302732060427469 | erot = 0.485299248119889 | epot = -15.4055453433107 | etot = -14.6175140347633 -424000 ekin = 0.322778728051863 | erot = 0.464438075671437 | epot = -15.404730838515 | etot = -14.6175140347917 -425000 ekin = 0.344144594922996 | erot = 0.444869796713076 | epot = -15.4065284264653 | etot = -14.6175140348292 -426000 ekin = 0.366234204300256 | erot = 0.426602052984605 | epot = -15.4103502921583 | etot = -14.6175140348734 -427000 ekin = 0.38838239833986 | erot = 0.409609962240836 | epot = -15.415506395502 | etot = -14.6175140349213 -428000 ekin = 0.40988090004737 | erot = 0.393856678092568 | epot = -15.4212516131098 | etot = -14.6175140349698 -429000 ekin = 0.430009061106105 | erot = 0.3793117883821 | epot = -15.4268348845041 | etot = -14.6175140350159 -430000 ekin = 0.448067283635965 | erot = 0.365965282400821 | epot = -15.4315466010937 | etot = -14.6175140350569 -431000 ekin = 0.463411378722737 | erot = 0.353835411175292 | epot = -15.4347608249886 | etot = -14.6175140350906 -432000 ekin = 0.47548594153418 | erot = 0.342969616703626 | epot = -15.4359695933533 | etot = -14.6175140351155 -433000 ekin = 0.483854704020027 | erot = 0.333438714396081 | epot = -15.4348074535467 | etot = -14.6175140351306 -434000 ekin = 0.488225698518024 | erot = 0.325325491782049 | epot = -15.4310652254357 | etot = -14.6175140351357 -435000 ekin = 0.488469615217025 | erot = 0.318709988965525 | epot = -15.4246936393136 | etot = -14.617514035131 -436000 ekin = 0.484629100796627 | erot = 0.313653867974387 | epot = -15.4157970038885 | etot = -14.6175140351175 -437000 ekin = 0.476917712283352 | erot = 0.31018665419048 | epot = -15.4046184015704 | etot = -14.6175140350966 -438000 ekin = 0.465707830234562 | erot = 0.308296241622574 | epot = -15.3915181069269 | etot = -14.6175140350697 -439000 ekin = 0.451507536799618 | erot = 0.307925153770233 | epot = -15.3769467256089 | etot = -14.617514035039 -440000 ekin = 0.434927659012361 | erot = 0.308973010492508 | epot = -15.3614147045112 | etot = -14.6175140350063 -441000 ekin = 0.416641657348261 | erot = 0.311304747383359 | epot = -15.3454604397054 | etot = -14.6175140349738 -442000 ekin = 0.397341542600016 | erot = 0.314762618736227 | epot = -15.3296181962794 | etot = -14.6175140349432 -443000 ekin = 0.377694362714129 | erot = 0.319179725729442 | epot = -15.3143881233595 | etot = -14.617514034916 -444000 ekin = 0.358304425135544 | erot = 0.324393298190371 | epot = -15.3002117582192 | etot = -14.6175140348933 -445000 ekin = 0.339684383334022 | erot = 0.330254911560055 | epot = -15.2874533297701 | etot = -14.617514034876 -446000 ekin = 0.322237701350815 | erot = 0.336636009508868 | epot = -15.2763877457239 | etot = -14.6175140348642 -447000 ekin = 0.306253086582814 | erot = 0.343428242758809 | epot = -15.2671953641995 | etot = -14.6175140348578 -448000 ekin = 0.291909091343174 | erot = 0.350538602021399 | epot = -15.2599617282213 | etot = -14.6175140348568 -449000 ekin = 0.279285717663651 | erot = 0.357880263089595 | epot = -15.254680015614 | etot = -14.6175140348607 -450000 ekin = 0.268379332693091 | erot = 0.365360767817947 | epot = -15.2512541353806 | etot = -14.6175140348695 -451000 ekin = 0.259117719162419 | erot = 0.37286967756099 | epot = -15.2495014316066 | etot = -14.6175140348832 -452000 ekin = 0.251373384973268 | erot = 0.380268095671416 | epot = -15.2491555155463 | etot = -14.6175140349016 -453000 ekin = 0.244974824127447 | erot = 0.38738240236518 | epot = -15.2498712614169 | etot = -14.6175140349242 -454000 ekin = 0.239716691076118 | erot = 0.394004131861865 | epot = -15.2512348578881 | etot = -14.6175140349501 -455000 ekin = 0.235370413814089 | erot = 0.39989714564245 | epot = -15.2527815944341 | etot = -14.6175140349775 -456000 ekin = 0.231696513790491 | erot = 0.404812188424975 | epot = -15.25402273722 | etot = -14.6175140350045 -457000 ekin = 0.228459014432025 | erot = 0.408507709515261 | epot = -15.2544807589758 | etot = -14.6175140350285 -458000 ekin = 0.225441196082393 | erot = 0.410774705624056 | epot = -15.2537299367532 | etot = -14.6175140350468 -459000 ekin = 0.222461018940579 | erot = 0.411462514811907 | epot = -15.2514375688096 | etot = -14.6175140350571 -460000 ekin = 0.219384094438575 | erot = 0.410502136529012 | epot = -15.2474002660254 | etot = -14.6175140350578 -461000 ekin = 0.216132245240139 | erot = 0.407923844132457 | epot = -15.2415701244206 | etot = -14.6175140350481 -462000 ekin = 0.212686361973351 | erot = 0.403866554423602 | epot = -15.2340669514251 | etot = -14.6175140350282 -463000 ekin = 0.209083218482862 | erot = 0.39857748648972 | epot = -15.2251747399718 | etot = -14.6175140349992 -464000 ekin = 0.205406888263765 | erot = 0.392401883856923 | epot = -15.2153228070839 | etot = -14.6175140349632 -465000 ekin = 0.201776197881114 | erot = 0.385763783462 | epot = -15.205054016266 | etot = -14.6175140349229 -466000 ekin = 0.19833013096122 | erot = 0.379139817336891 | epot = -15.1949839831792 | etot = -14.6175140348811 -467000 ekin = 0.19521322401714 | erot = 0.373028711257264 | epot = -15.1857559701149 | etot = -14.6175140348405 -468000 ekin = 0.192562810062132 | erot = 0.367919448414635 | epot = -15.1779962932805 | etot = -14.6175140348037 -469000 ekin = 0.190499545154684 | erot = 0.364261004085321 | epot = -15.1722745840127 | etot = -14.6175140347727 -470000 ekin = 0.189122086032584 | erot = 0.36243618058674 | epot = -15.169072301368 | etot = -14.6175140347487 -471000 ekin = 0.188506156938628 | erot = 0.36274145620712 | epot = -15.1687616478782 | etot = -14.6175140347324 -472000 ekin = 0.188707621222064 | erot = 0.365373993438309 | epot = -15.1715956493842 | etot = -14.6175140347238 -473000 ekin = 0.189768618621859 | erot = 0.370426120543988 | epot = -15.177708773888 | etot = -14.6175140347222 -474000 ekin = 0.19172539734126 | erot = 0.377886798112904 | epot = -15.1871262301805 | etot = -14.6175140347263 -475000 ekin = 0.194616213070776 | erot = 0.387648901412899 | epot = -15.1997791492191 | etot = -14.6175140347354 -476000 ekin = 0.198487636160664 | erot = 0.399520678156148 | epot = -15.215522349065 | etot = -14.6175140347482 -477000 ekin = 0.203397790429852 | erot = 0.413239540255191 | epot = -15.234151365449 | etot = -14.617514034764 -478000 ekin = 0.209415519783228 | erot = 0.428486466927386 | epot = -15.2554160214929 | etot = -14.6175140347822 -479000 ekin = 0.216615156594694 | erot = 0.444899686772485 | epot = -15.2790288781698 | etot = -14.6175140348026 -480000 ekin = 0.225067223157684 | erot = 0.462086880018517 | epot = -15.3046681380016 | etot = -14.6175140348254 -481000 ekin = 0.234826185147705 | erot = 0.479635803739747 | epot = -15.3319760237383 | etot = -14.6175140348509 -482000 ekin = 0.245916939355105 | erot = 0.497123799838217 | epot = -15.3605547740725 | etot = -14.6175140348792 -483000 ekin = 0.258322039580641 | erot = 0.514126984881453 | epot = -15.3899630593724 | etot = -14.6175140349103 -484000 ekin = 0.271971667054619 | erot = 0.530229960568958 | epot = -15.4197156625675 | etot = -14.617514034944 -485000 ekin = 0.286738030809382 | erot = 0.545036619609882 | epot = -15.4492886853986 | etot = -14.6175140349794 -486000 ekin = 0.302435294441725 | erot = 0.558182125190716 | epot = -15.4781314546478 | etot = -14.6175140350153 -487000 ekin = 0.318825369857728 | erot = 0.569345540302787 | epot = -15.5056849452108 | etot = -14.6175140350503 -488000 ekin = 0.335629120855656 | erot = 0.578262027782619 | epot = -15.531405183721 | etot = -14.6175140350827 -489000 ekin = 0.352541803824741 | erot = 0.584733173542245 | epot = -15.5547890124777 | etot = -14.6175140351107 -490000 ekin = 0.369251041132792 | erot = 0.588633902375989 | epot = -15.5753989786419 | etot = -14.6175140351332 -491000 ekin = 0.385455339942983 | erot = 0.589914693969693 | epot = -15.5928840690617 | etot = -14.6175140351491 -492000 ekin = 0.400881156477967 | erot = 0.588598334680247 | epot = -15.6069935263163 | etot = -14.6175140351581 -493000 ekin = 0.415296746376553 | erot = 0.584771169137042 | epot = -15.6175819506742 | etot = -14.6175140351606 -494000 ekin = 0.428521503101982 | erot = 0.578569614095138 | epot = -15.6246051523544 | etot = -14.6175140351573 -495000 ekin = 0.440430011857908 | erot = 0.570163426567876 | epot = -15.6281074735752 | etot = -14.6175140351495 -496000 ekin = 0.450950706315982 | erot = 0.559737766476903 | epot = -15.6282025079315 | etot = -14.6175140351386 -497000 ekin = 0.460059581797582 | erot = 0.547476355485087 | epot = -15.625049972409 | etot = -14.6175140351264 -498000 ekin = 0.467769906491875 | erot = 0.533547985554663 | epot = -15.6188319271606 | etot = -14.617514035114 -499000 ekin = 0.474119221072824 | erot = 0.518098277332154 | epot = -15.6097315335076 | etot = -14.6175140351027 -500000 ekin = 0.479155106635124 | erot = 0.501247978937035 | epot = -15.5979171206651 | etot = -14.6175140350929 -501000 ekin = 0.482921233339119 | erot = 0.483098304082253 | epot = -15.5835335725061 | etot = -14.6175140350847 -502000 ekin = 0.485445093649443 | erot = 0.463742920559215 | epot = -15.5667020492863 | etot = -14.6175140350777 -503000 ekin = 0.486728599210195 | erot = 0.443285305605345 | epot = -15.5475279398864 | etot = -14.6175140350709 -504000 ekin = 0.486742408088644 | erot = 0.421859374631577 | epot = -15.5261158177833 | etot = -14.6175140350631 -505000 ekin = 0.485424480828556 | erot = 0.399650657767951 | epot = -15.5025891736495 | etot = -14.617514035053 -506000 ekin = 0.482682973412845 | erot = 0.376914939267146 | epot = -15.4771119477192 | etot = -14.6175140350392 -507000 ekin = 0.478403198155664 | erot = 0.353991273961026 | epot = -15.4499085071374 | etot = -14.6175140350207 -508000 ekin = 0.472458052936533 | erot = 0.331306710133979 | epot = -15.4212787980677 | etot = -14.6175140349972 -509000 ekin = 0.464721062856486 | erot = 0.309370883447877 | epot = -15.391605981273 | etot = -14.6175140349687 -510000 ekin = 0.455081004105158 | erot = 0.288759823578934 | epot = -15.3613548626199 | etot = -14.6175140349358 -511000 ekin = 0.443456979181397 | erot = 0.270089690707654 | epot = -15.3310607047886 | etot = -14.6175140348996 -512000 ekin = 0.42981284822047 | erot = 0.253982534898966 | epot = -15.3013094179813 | etot = -14.6175140348619 -513000 ekin = 0.414169942619758 | erot = 0.241027258547605 | epot = -15.2727112359918 | etot = -14.6175140348245 -514000 ekin = 0.396617122320082 | erot = 0.231739657368568 | epot = -15.2458708144779 | etot = -14.6175140347892 -515000 ekin = 0.377317407139249 | erot = 0.226525548757382 | epot = -15.2213569906545 | etot = -14.6175140347578 -516000 ekin = 0.35651062953391 | erot = 0.225650587239776 | epot = -15.1996752515054 | etot = -14.6175140347317 -517000 ekin = 0.334511811731694 | erot = 0.229219509886453 | epot = -15.1812453563299 | etot = -14.6175140347118 -518000 ekin = 0.31170524916001 | erot = 0.237166415926557 | epot = -15.1663856997852 | etot = -14.6175140346986 -519000 ekin = 0.288534562405369 | erot = 0.249256456193465 | epot = -15.1553050532911 | etot = -14.6175140346923 -520000 ekin = 0.265489234982165 | erot = 0.26509816545072 | epot = -15.1481014351253 | etot = -14.6175140346925 -521000 ekin = 0.243088358087426 | erot = 0.28416474515941 | epot = -15.1447671379453 | etot = -14.6175140346985 -522000 ekin = 0.221862437060459 | erot = 0.305821970139614 | epot = -15.1451984419099 | etot = -14.6175140347098 -523000 ekin = 0.202334169775895 | erot = 0.329360070796339 | epot = -15.1492082752977 | etot = -14.6175140347254 -524000 ekin = 0.184999091075918 | erot = 0.354026911469998 | epot = -15.1565400372904 | etot = -14.6175140347445 -525000 ekin = 0.170306912739171 | erot = 0.379059948770565 | epot = -15.1668808962761 | etot = -14.6175140347663 -526000 ekin = 0.158644243148381 | erot = 0.403715126924508 | epot = -15.1798734048633 | etot = -14.6175140347904 -527000 ekin = 0.150319367666692 | erot = 0.427291025811637 | epot = -15.1951244282948 | etot = -14.6175140348165 -528000 ekin = 0.145549592055572 | erot = 0.449147424932832 | epot = -15.2122110518325 | etot = -14.6175140348441 -529000 ekin = 0.144451603985253 | erot = 0.468718121850102 | epot = -15.2306837607087 | etot = -14.6175140348733 -530000 ekin = 0.147035267138977 | erot = 0.485518371010921 | epot = -15.2500676730541 | etot = -14.6175140349042 -531000 ekin = 0.153201203685106 | erot = 0.499147835496811 | epot = -15.2698630741185 | etot = -14.6175140349365 -532000 ekin = 0.162742448480708 | erot = 0.509290301682427 | epot = -15.2895467851333 | etot = -14.6175140349702 -533000 ekin = 0.175350354883068 | erot = 0.515711587206655 | epot = -15.3085759770944 | etot = -14.6175140350047 -534000 ekin = 0.190624856014803 | erot = 0.518257146630764 | epot = -15.3263960376848 | etot = -14.6175140350392 -535000 ekin = 0.20808849353821 | erot = 0.516850140105114 | epot = -15.3424526687159 | etot = -14.6175140350726 -536000 ekin = 0.227204325844138 | erot = 0.511491240066273 | epot = -15.3562096010139 | etot = -14.6175140351035 -537000 ekin = 0.247396768814454 | erot = 0.502260311074903 | epot = -15.3671711150195 | etot = -14.6175140351301 -538000 ekin = 0.268074342414838 | erot = 0.48931960096235 | epot = -15.3749079785279 | etot = -14.6175140351507 -539000 ekin = 0.288653182934825 | erot = 0.472917679673195 | epot = -15.3790848977717 | etot = -14.6175140351636 -540000 ekin = 0.308579985827042 | erot = 0.453392904740686 | epot = -15.3794869257352 | etot = -14.6175140351675 -541000 ekin = 0.327353008192347 | erot = 0.431174973012141 | epot = -15.3760420163655 | etot = -14.617514035161 -542000 ekin = 0.34453985350787 | erot = 0.406783142890255 | epot = -15.3688370315419 | etot = -14.6175140351438 -543000 ekin = 0.359790986514668 | erot = 0.380819988065056 | epot = -15.3581250096958 | etot = -14.6175140351161 -544000 ekin = 0.372848263091271 | erot = 0.353960030673709 | epot = -15.3443223288436 | etot = -14.6175140350786 -545000 ekin = 0.383548167009962 | erot = 0.326933212483004 | epot = -15.3279954145261 | etot = -14.6175140350331 -546000 ekin = 0.391819867385613 | erot = 0.300503784239149 | epot = -15.3098376866062 | etot = -14.6175140349815 -547000 ekin = 0.397678590181979 | erot = 0.275445713888173 | epot = -15.2906383389964 | etot = -14.6175140349262 -548000 ekin = 0.401215088504143 | erot = 0.252516050366992 | epot = -15.271245173741 | etot = -14.6175140348699 -549000 ekin = 0.402582175511846 | erot = 0.2324277947685 | epot = -15.2525240050957 | etot = -14.6175140348154 -550000 ekin = 0.401979352686794 | erot = 0.215823740833745 | epot = -15.2353171282857 | etot = -14.6175140347651 -551000 ekin = 0.399636550192623 | erot = 0.203252510910342 | epot = -15.2204030958242 | etot = -14.6175140347212 -552000 ekin = 0.395797934839361 | erot = 0.195147714574245 | epot = -15.2084596840995 | etot = -14.6175140346859 -553000 ekin = 0.390706676474544 | erot = 0.191810879117663 | epot = -15.2000315902532 | etot = -14.617514034661 -554000 ekin = 0.384591526956369 | erot = 0.193398609454551 | epot = -15.1955041710585 | etot = -14.6175140346476 -555000 ekin = 0.377656068330916 | erot = 0.19991436289405 | epot = -15.1950844658716 | etot = -14.6175140346467 -556000 ekin = 0.370071512613931 | erot = 0.211205266307017 | epot = -15.1987908135787 | etot = -14.6175140346577 -557000 ekin = 0.36197393927111 | erot = 0.226964515102746 | epot = -15.2064524890542 | etot = -14.6175140346804 -558000 ekin = 0.353466765019197 | erot = 0.246739996101858 | epot = -15.2177207958342 | etot = -14.6175140347131 -559000 ekin = 0.344628961763717 | erot = 0.269949765670202 | epot = -15.2320927621874 | etot = -14.6175140347535 -560000 ekin = 0.335528980566697 | erot = 0.295904778795752 | epot = -15.248947794161 | etot = -14.6175140347986 -561000 ekin = 0.326243446080483 | erot = 0.323838714908449 | epot = -15.2675961958333 | etot = -14.6175140348444 -562000 ekin = 0.316878486812668 | erot = 0.352943857552838 | epot = -15.2873363792524 | etot = -14.6175140348869 -563000 ekin = 0.307590234581136 | erot = 0.382410843957192 | epot = -15.307515113461 | etot = -14.6175140349227 -564000 ekin = 0.298599911427049 | erot = 0.411468934029058 | epot = -15.3275828804048 | etot = -14.6175140349487 -565000 ekin = 0.29019852150112 | erot = 0.439422606477175 | epot = -15.3471351629423 | etot = -14.617514034964 -566000 ekin = 0.282736992095597 | erot = 0.465680158919343 | epot = -15.365931185984 | etot = -14.617514034969 -567000 ekin = 0.276599956454081 | erot = 0.489770841522359 | epot = -15.3838848329429 | etot = -14.6175140349664 -568000 ekin = 0.27216505279084 | erot = 0.511348887820148 | epot = -15.4010279755711 | etot = -14.6175140349601 -569000 ekin = 0.269753809413471 | erot = 0.530185258476735 | epot = -15.4174531028449 | etot = -14.6175140349547 -570000 ekin = 0.269583567607588 | erot = 0.546150320474201 | epot = -15.4332479230357 | etot = -14.6175140349539 -571000 ekin = 0.271731068578172 | erot = 0.559192265325177 | epot = -15.4484373688639 | etot = -14.6175140349605 -572000 ekin = 0.276116495687432 | erot = 0.569316321633614 | epot = -15.4629468522957 | etot = -14.6175140349746 -573000 ekin = 0.282512256444886 | erot = 0.576569321997795 | epot = -15.4765956134373 | etot = -14.6175140349946 -574000 ekin = 0.290574483947776 | erot = 0.581030490761164 | epot = -15.4891190097261 | etot = -14.6175140350172 -575000 ekin = 0.29989011332688 | erot = 0.582808418137279 | epot = -15.5002125665027 | etot = -14.6175140350386 -576000 ekin = 0.310029076131083 | erot = 0.58204167895457 | epot = -15.5095847901411 | etot = -14.6175140350554 -577000 ekin = 0.32059114413582 | erot = 0.578899817193175 | epot = -15.5170049963945 | etot = -14.6175140350655 -578000 ekin = 0.331239680817797 | erot = 0.57358190432124 | epot = -15.5223356202071 | etot = -14.617514035068 -579000 ekin = 0.341718767395696 | erot = 0.56631121381473 | epot = -15.525544016274 | etot = -14.6175140350636 -580000 ekin = 0.351854361646102 | erot = 0.557326170820742 | epot = -15.5266945675208 | etot = -14.6175140350539 -581000 ekin = 0.361543170719809 | erot = 0.546869043111593 | epot = -15.5259262488726 | etot = -14.6175140350412 -582000 ekin = 0.370734291431534 | erot = 0.535174473618308 | epot = -15.5234228000773 | etot = -14.6175140350275 -583000 ekin = 0.379408545146128 | erot = 0.522459863754616 | epot = -15.5193824439152 | etot = -14.6175140350144 -584000 ekin = 0.387559338331809 | erot = 0.508918999940124 | epot = -15.5139923732754 | etot = -14.6175140350035 -585000 ekin = 0.395177418309166 | erot = 0.494719483695415 | epot = -15.5074109369997 | etot = -14.6175140349952 -586000 ekin = 0.40224053351631 | erot = 0.480003760425538 | epot = -15.4997583289313 | etot = -14.6175140349895 -587000 ekin = 0.408707997144967 | erot = 0.46489301429509 | epot = -15.4911150464262 | etot = -14.6175140349862 -588000 ekin = 0.41451954577264 | erot = 0.449492951761598 | epot = -15.4815265325189 | etot = -14.6175140349847 -589000 ekin = 0.419597612555005 | erot = 0.433900487906577 | epot = -15.4710121354457 | etot = -14.6175140349841 -590000 ekin = 0.423852083806215 | erot = 0.418210489544372 | epot = -15.4595766083342 | etot = -14.6175140349836 -591000 ekin = 0.427186671517101 | erot = 0.402521929659454 | epot = -15.4472226361592 | etot = -14.6175140349826 -592000 ekin = 0.429506137373277 | erot = 0.386943005730419 | epot = -15.4339631780839 | etot = -14.6175140349802 -593000 ekin = 0.430723706116176 | erot = 0.371594936610879 | epot = -15.4198326777029 | etot = -14.6175140349759 -594000 ekin = 0.430768094953374 | erot = 0.356614269838323 | epot = -15.4048963997609 | etot = -14.6175140349692 -595000 ekin = 0.429589664829875 | erot = 0.342153609171697 | epot = -15.3892573089615 | etot = -14.61751403496 -596000 ekin = 0.427165296133174 | erot = 0.328380718542556 | epot = -15.3730600496239 | etot = -14.6175140349482 -597000 ekin = 0.423501658499685 | erot = 0.315475989403645 | epot = -15.3564916828373 | etot = -14.617514034934 -598000 ekin = 0.418636501255329 | erot = 0.303628359581922 | epot = -15.339778895755 | etot = -14.6175140349178 -599000 ekin = 0.412638207582293 | erot = 0.293029673723861 | epot = -15.3231819162063 | etot = -14.6175140349001 -600000 ekin = 0.405603414753543 | erot = 0.283867637226416 | epot = -15.3069850868619 | etot = -14.6175140348819 -601000 ekin = 0.397652939448511 | erot = 0.276317573361135 | epot = -15.2914845476735 | etot = -14.6175140348639 -602000 ekin = 0.388926339151605 | erot = 0.270533300128888 | epot = -15.2769736741277 | etot = -14.6175140348472 -603000 ekin = 0.379575547710993 | erot = 0.266637582798826 | epot = -15.2637271653425 | etot = -14.6175140348327 -604000 ekin = 0.369758112224389 | erot = 0.264712769809609 | epot = -15.2519849168554 | etot = -14.6175140348214 -605000 ekin = 0.359630614964524 | erot = 0.264792359550254 | epot = -15.2419370093288 | etot = -14.617514034814 -606000 ekin = 0.349342882571262 | erot = 0.266854337886864 | epot = -15.2337112552692 | etot = -14.617514034811 -607000 ekin = 0.339033558751527 | erot = 0.270817131627439 | epot = -15.2273647251917 | etot = -14.6175140348127 -608000 ekin = 0.328827538259385 | erot = 0.276538908097079 | epot = -15.2228804811754 | etot = -14.6175140348189 -609000 ekin = 0.318835621087638 | erot = 0.283820700144191 | epot = -15.2201703560608 | etot = -14.6175140348289 -610000 ekin = 0.309156542568334 | erot = 0.292413461055663 | epot = -15.2190840384659 | etot = -14.6175140348419 -611000 ekin = 0.299881272108232 | erot = 0.302028697869809 | epot = -15.2194240048346 | etot = -14.6175140348565 -612000 ekin = 0.291099167856286 | erot = 0.312351863789578 | epot = -15.2209650665173 | etot = -14.6175140348714 -613000 ekin = 0.282905257831661 | erot = 0.323057294042041 | epot = -15.2234765867588 | etot = -14.6175140348851 -614000 ekin = 0.275407632339961 | erot = 0.333823223652894 | epot = -15.2267448908891 | etot = -14.6175140348962 -615000 ekin = 0.26873372556729 | erot = 0.344345386320852 | epot = -15.2305931467921 | etot = -14.617514034904 -616000 ekin = 0.263034181136622 | erot = 0.354347879927032 | epot = -15.2348960959715 | etot = -14.6175140349079 -617000 ekin = 0.258483071857947 | erot = 0.363590372787281 | epot = -15.2395874795531 | etot = -14.6175140349079 -618000 ekin = 0.255273496413766 | erot = 0.371871254538862 | epot = -15.2446587858573 | etot = -14.6175140349047 -619000 ekin = 0.253608004174891 | erot = 0.37902692128738 | epot = -15.2501489603617 | etot = -14.6175140348994 -620000 ekin = 0.253683881422316 | erot = 0.384927934514025 | epot = -15.2561258508301 | etot = -14.6175140348938 -621000 ekin = 0.255674023710186 | erot = 0.38947322607256 | epot = -15.2626612846723 | etot = -14.6175140348895 -622000 ekin = 0.259704853368001 | erot = 0.392583779640456 | epot = -15.2698026678969 | etot = -14.6175140348885 -623000 ekin = 0.265833429999869 | erot = 0.394197274406528 | epot = -15.2775447392986 | etot = -14.6175140348922 -624000 ekin = 0.274026439188712 | erot = 0.39426503162541 | epot = -15.2858055057159 | etot = -14.6175140349018 -625000 ekin = 0.28414401573886 | erot = 0.392752285177006 | epot = -15.2944103358335 | etot = -14.6175140349177 -626000 ekin = 0.295931256226584 | erot = 0.389642344381237 | epot = -15.3030876355469 | etot = -14.6175140349391 -627000 ekin = 0.309019727830048 | erot = 0.38494467650503 | epot = -15.3114784392999 | etot = -14.6175140349648 -628000 ekin = 0.322940275279362 | erot = 0.378706350960167 | epot = -15.3191606612317 | etot = -14.6175140349922 -629000 ekin = 0.33714704369846 | erot = 0.371025698974889 | epot = -15.3256867776917 | etot = -14.6175140350184 -630000 ekin = 0.351051052995026 | erot = 0.362066500827023 | epot = -15.3306315888619 | etot = -14.6175140350398 -631000 ekin = 0.364060148818982 | erot = 0.352070586246042 | epot = -15.3336447701184 | etot = -14.6175140350534 -632000 ekin = 0.375621025661451 | erot = 0.341366514681197 | epot = -15.3345015753989 | etot = -14.6175140350562 -633000 ekin = 0.385258541224348 | erot = 0.330372092305628 | epot = -15.3331446685766 | etot = -14.6175140350467 -634000 ekin = 0.392607865616114 | erot = 0.319588956493675 | epot = -15.3297108571339 | etot = -14.6175140350242 -635000 ekin = 0.397436097277863 | erot = 0.309588318033291 | epot = -15.3245384503008 | etot = -14.6175140349896 -636000 ekin = 0.399651602684384 | erot = 0.300988094378239 | epot = -15.3181537320078 | etot = -14.6175140349452 -637000 ekin = 0.399301141332031 | erot = 0.294422893568743 | epot = -15.3112380697947 | etot = -14.6175140348939 -638000 ekin = 0.396556439146212 | erot = 0.290509369489303 | epot = -15.3045798434751 | etot = -14.6175140348396 -639000 ekin = 0.391692975512742 | erot = 0.289810143796987 | epot = -15.2990171540957 | etot = -14.617514034786 -640000 ekin = 0.385064212932884 | erot = 0.292799653113167 | epot = -15.2953779007829 | etot = -14.6175140347368 -641000 ekin = 0.377074355550043 | erot = 0.299834934662484 | epot = -15.2944233249075 | etot = -14.617514034695 -642000 ekin = 0.36815213396031 | erot = 0.311133625025692 | epot = -15.296799793649 | etot = -14.617514034663 -643000 ekin = 0.358727298273998 | erot = 0.326760494743229 | epot = -15.3030018276596 | etot = -14.6175140346424 -644000 ekin = 0.34921067024251 | erot = 0.346622862553685 | epot = -15.31334756743 | etot = -14.6175140346338 -645000 ekin = 0.339977915474048 | erot = 0.37047437627955 | epot = -15.3279663263911 | etot = -14.6175140346375 -646000 ekin = 0.331356734048622 | erot = 0.397926004728971 | epot = -15.3467967734305 | etot = -14.6175140346529 -647000 ekin = 0.323616951061544 | erot = 0.428462692621732 | epot = -15.3695936783625 | etot = -14.6175140346793 -648000 ekin = 0.316962984679468 | erot = 0.461463981263932 | epot = -15.395941000659 | etot = -14.6175140347156 -649000 ekin = 0.311528303721688 | erot = 0.496226945506027 | epot = -15.4252692839881 | etot = -14.6175140347604 -650000 ekin = 0.307371814502165 | erot = 0.531990113311448 | epot = -15.4568759626262 | etot = -14.6175140348126 -651000 ekin = 0.304476169211829 | erot = 0.567957247023059 | epot = -15.4899474511054 | etot = -14.6175140348705 -652000 ekin = 0.302748327843535 | erot = 0.60332035253876 | epot = -15.5235827153148 | etot = -14.6175140349325 -653000 ekin = 0.302022769690184 | erot = 0.637281675063402 | epot = -15.5568184797505 | etot = -14.6175140349969 -654000 ekin = 0.302067723594906 | erot = 0.669074745115681 | epot = -15.5886565037724 | etot = -14.6175140350619 -655000 ekin = 0.302594671775626 | erot = 0.697984728109799 | epot = -15.6180934350106 | etot = -14.6175140351251 -656000 ekin = 0.303271161274583 | erot = 0.723368330431512 | epot = -15.6441535268905 | etot = -14.6175140351844 -657000 ekin = 0.303736663271753 | erot = 0.744673311811916 | epot = -15.665924010321 | etot = -14.6175140352373 -658000 ekin = 0.303620889263351 | erot = 0.761457272709908 | epot = -15.6825921972546 | etot = -14.6175140352814 -659000 ekin = 0.302563666908925 | erot = 0.773404945480632 | epot = -15.6934826477037 | etot = -14.6175140353142 -660000 ekin = 0.300235395695972 | erot = 0.780343280385513 | epot = -15.6980927114155 | etot = -14.617514035334 -661000 ekin = 0.296355710532695 | erot = 0.782250083092907 | epot = -15.6961198289653 | etot = -14.6175140353397 -662000 ekin = 0.290710478297866 | erot = 0.779257959177568 | epot = -15.6874824728056 | etot = -14.6175140353302 -663000 ekin = 0.283165147464187 | erot = 0.771650651991695 | epot = -15.6723298347619 | etot = -14.6175140353061 -664000 ekin = 0.27367342717685 | erot = 0.759850562456021 | epot = -15.6510380249011 | etot = -14.6175140352683 -665000 ekin = 0.262280913452634 | erot = 0.744397727319339 | epot = -15.6241926759908 | etot = -14.6175140352189 -666000 ekin = 0.249123647022579 | erot = 0.725921231745118 | epot = -15.5925589139283 | etot = -14.6175140351606 -667000 ekin = 0.234422061210101 | erot = 0.705104954965606 | epot = -15.5570410512721 | etot = -14.6175140350964 -668000 ekin = 0.21847115836915 | erot = 0.682650243125486 | epot = -15.5186354365242 | etot = -14.6175140350295 -669000 ekin = 0.201627981911564 | erot = 0.659238455807376 | epot = -15.4783804726821 | etot = -14.6175140349631 -670000 ekin = 0.184297501938707 | erot = 0.635496303881828 | epot = -15.4373078407206 | etot = -14.6175140349 -671000 ekin = 0.166917915804601 | erot = 0.611966525749056 | epot = -15.3963984763962 | etot = -14.6175140348426 -672000 ekin = 0.14994612067378 | erot = 0.589085832362602 | epot = -15.3565459878289 | etot = -14.6175140347925 -673000 ekin = 0.133843801904186 | erot = 0.567171306813788 | epot = -15.3185291434687 | etot = -14.6175140347508 -674000 ekin = 0.11906426267423 | erot = 0.546415679822096 | epot = -15.2829939772144 | etot = -14.6175140347181 -675000 ekin = 0.106039855016816 | erot = 0.526891195483755 | epot = -15.250445085195 | etot = -14.6175140346944 -676000 ekin = 0.0951697078772152 | erot = 0.50856117567973 | epot = -15.2212449182362 | etot = -14.6175140346792 -677000 ekin = 0.0868074519861288 | erot = 0.491297978911212 | epot = -15.1956194655695 | etot = -14.6175140346721 -678000 ekin = 0.0812485969713333 | erot = 0.474905301100386 | epot = -15.1736679327439 | etot = -14.6175140346722 -679000 ekin = 0.0787177619801802 | erot = 0.459143233465912 | epot = -15.1553750301247 | etot = -14.6175140346786 -680000 ekin = 0.0793562024651087 | erot = 0.443753980650389 | epot = -15.1406242178062 | etot = -14.6175140346907 -681000 ekin = 0.0832104900793269 | erot = 0.428486254342735 | epot = -15.1292107791297 | etot = -14.6175140347077 -682000 ekin = 0.0902236865228919 | erot = 0.413116880934118 | epot = -15.1208546021858 | etot = -14.6175140347288 -683000 ekin = 0.100230543462796 | erot = 0.397468585265044 | epot = -15.115213163481 | etot = -14.6175140347532 -684000 ekin = 0.112958164259237 | erot = 0.381423459019101 | epot = -15.1118956580582 | etot = -14.6175140347798 -685000 ekin = 0.128033094046463 | erot = 0.364932120277628 | epot = -15.1104792491316 | etot = -14.6175140348076 -686000 ekin = 0.144995008361833 | erot = 0.348018922992772 | epot = -15.1105279661896 | etot = -14.617514034835 -687000 ekin = 0.163316207854889 | erot = 0.330783730220943 | epot = -15.1116139729365 | etot = -14.6175140348607 -688000 ekin = 0.182425234215544 | erot = 0.313400732953569 | epot = -15.1133400020522 | etot = -14.617514034883 -689000 ekin = 0.201732335852432 | erot = 0.296114640200949 | epot = -15.1153610109544 | etot = -14.617514034901 -690000 ekin = 0.220654383890869 | erot = 0.279234374239734 | epot = -15.1174027930442 | etot = -14.6175140349136 -691000 ekin = 0.238637189924115 | erot = 0.263124260135964 | epot = -15.1192754849805 | etot = -14.6175140349204 -692000 ekin = 0.255173895595901 | erot = 0.248192653896393 | epot = -15.1208805844139 | etot = -14.6175140349216 -693000 ekin = 0.269818995117429 | erot = 0.234878024007872 | epot = -15.1222110540427 | etot = -14.6175140349174 -694000 ekin = 0.282198402188447 | erot = 0.223632668705063 | epot = -15.1233451058023 | etot = -14.6175140349088 -695000 ekin = 0.292016609392549 | erot = 0.214904477347542 | epot = -15.1244351216368 | etot = -14.6175140348967 -696000 ekin = 0.299062308190453 | erot = 0.20911738294645 | epot = -15.1256937260189 | etot = -14.617514034882 -697000 ekin = 0.303213809971544 | erot = 0.206651361566997 | epot = -15.1273792064042 | etot = -14.6175140348657 -698000 ekin = 0.304445256191692 | erot = 0.207822979228434 | epot = -15.1297822702684 | etot = -14.6175140348483 -699000 ekin = 0.302833983904582 | erot = 0.212867544423939 | epot = -15.1332155631589 | etot = -14.6175140348303 -700000 ekin = 0.298568596343111 | erot = 0.221923881122147 | epot = -15.1380065122769 | etot = -14.6175140348117 -701000 ekin = 0.291956369738205 | erot = 0.235022588975841 | epot = -15.1444929935063 | etot = -14.6175140347923 -702000 ekin = 0.283427734153978 | erot = 0.252078414120717 | epot = -15.1530201830472 | etot = -14.6175140347725 -703000 ekin = 0.273534855577064 | erot = 0.272887068860867 | epot = -15.1639359591906 | etot = -14.6175140347527 -704000 ekin = 0.262941046164713 | erot = 0.297126498876207 | epot = -15.1775815797745 | etot = -14.6175140347336 -705000 ekin = 0.252398060444981 | erot = 0.324362359960446 | epot = -15.1942744551226 | etot = -14.6175140347171 -706000 ekin = 0.242709489752792 | erot = 0.354057349893809 | epot = -15.2142808743523 | etot = -14.6175140347057 -707000 ekin = 0.23468046525942 | erot = 0.385584073394808 | epot = -15.2377785733565 | etot = -14.6175140347022 -708000 ekin = 0.229056562326963 | erot = 0.418241319395649 | epot = -15.2648119164325 | etot = -14.6175140347099 -709000 ekin = 0.226457657534039 | erot = 0.451273895784603 | epot = -15.2952455880501 | etot = -14.6175140347315 -710000 ekin = 0.227314828596025 | erot = 0.483896330832019 | epot = -15.3287251941967 | etot = -14.6175140347686 -711000 ekin = 0.231819479497738 | erot = 0.515320742172354 | epot = -15.3646542564915 | etot = -14.6175140348214 -712000 ekin = 0.239893150549438 | erot = 0.544788749313879 | epot = -15.4021959347513 | etot = -14.617514034888 -713000 ekin = 0.251183758823603 | erot = 0.571606341189959 | epot = -15.4403041349781 | etot = -14.6175140349645 -714000 ekin = 0.265090036185668 | erot = 0.595179886373849 | epot = -15.4777839576047 | etot = -14.6175140350452 -715000 ekin = 0.28081130696852 | erot = 0.615050345045233 | epot = -15.5133756871375 | etot = -14.6175140351237 -716000 ekin = 0.297415784950189 | erot = 0.630922165704455 | epot = -15.5458519858483 | etot = -14.6175140351937 -717000 ekin = 0.313918116237523 | erot = 0.642683345317396 | epot = -15.5741154968043 | etot = -14.6175140352494 -718000 ekin = 0.329356373326552 | erot = 0.650413757300739 | epot = -15.5972841659139 | etot = -14.6175140352866 -719000 ekin = 0.342860093483745 | erot = 0.654380316354885 | epot = -15.6147544451418 | etot = -14.6175140353032 -720000 ekin = 0.353703497402202 | erot = 0.655019233384843 | epot = -15.6262367660857 | etot = -14.6175140352986 -721000 ekin = 0.361340844904886 | erot = 0.65290643149649 | epot = -15.6317613116759 | etot = -14.6175140352745 -722000 ekin = 0.365423978940517 | erot = 0.648719378781022 | epot = -15.6316573929551 | etot = -14.6175140352336 -723000 ekin = 0.365803989071178 | erot = 0.643193727890515 | epot = -15.6265117521415 | etot = -14.6175140351798 -724000 ekin = 0.362520178744139 | erot = 0.637078359573047 | epot = -15.6171125734343 | etot = -14.6175140351171 -725000 ekin = 0.355779938479173 | erot = 0.631092082280536 | epot = -15.6043860558098 | etot = -14.6175140350501 -726000 ekin = 0.345932952940639 | erot = 0.625884613514309 | epot = -15.5893316014374 | etot = -14.6175140349825 -727000 ekin = 0.333442641404524 | erot = 0.622003743386552 | epot = -15.5729604197091 | etot = -14.617514034918 -728000 ekin = 0.318857050496168 | erot = 0.619869891938089 | epot = -15.5562409772939 | etot = -14.6175140348596 -729000 ekin = 0.302780724956394 | erot = 0.619758691690499 | epot = -15.5400534514564 | etot = -14.6175140348095 -730000 ekin = 0.285848455040455 | erot = 0.621791770571174 | epot = -15.5251542603809 | etot = -14.6175140347692 -731000 ekin = 0.26870127220445 | erot = 0.625935552812111 | epot = -15.5121508597563 | etot = -14.6175140347397 -732000 ekin = 0.251964649663605 | erot = 0.632007594592718 | epot = -15.5014862789777 | etot = -14.6175140347214 -733000 ekin = 0.23622856949642 | erot = 0.639689689353724 | epot = -15.4934322935641 | etot = -14.617514034714 -734000 ekin = 0.22202896074664 | erot = 0.648546698715862 | epot = -15.4880896941799 | etot = -14.6175140347174 -735000 ekin = 0.209830023527923 | erot = 0.658049804518407 | epot = -15.4853938627768 | etot = -14.6175140347305 -736000 ekin = 0.200007166761325 | erot = 0.667602683400252 | epot = -15.4851238849144 | etot = -14.6175140347528 -737000 ekin = 0.192830719625369 | erot = 0.676569044421863 | epot = -15.4869137988308 | etot = -14.6175140347836 -738000 ekin = 0.188451200585979 | erot = 0.684300102138454 | epot = -15.4902653375465 | etot = -14.617514034822 -739000 ekin = 0.186887639937102 | erot = 0.690160900652221 | epot = -15.4945625754563 | etot = -14.617514034867 -740000 ekin = 0.188021068410999 | erot = 0.693554915035455 | epot = -15.4990900183636 | etot = -14.6175140349171 -741000 ekin = 0.191595568995565 | erot = 0.69394692273094 | epot = -15.5030565266968 | etot = -14.6175140349703 -742000 ekin = 0.197228843628675 | erot = 0.690884208638915 | epot = -15.5056270872918 | etot = -14.6175140350242 -743000 ekin = 0.204433503637947 | erot = 0.684016821527801 | epot = -15.5059643602412 | etot = -14.6175140350754 -744000 ekin = 0.212648433381768 | erot = 0.673116668202712 | epot = -15.503279136705 | etot = -14.6175140351205 -745000 ekin = 0.221277722248209 | erot = 0.658094727365056 | epot = -15.4968864847687 | etot = -14.6175140351555 -746000 ekin = 0.229733012317386 | erot = 0.639014583780922 | epot = -15.4862616312757 | etot = -14.6175140351773 -747000 ekin = 0.237474044144066 | erot = 0.616100096672262 | epot = -15.4710881760001 | etot = -14.6175140351838 -748000 ekin = 0.24404226676242 | erot = 0.589734872786629 | epot = -15.451291174723 | etot = -14.617514035174 -749000 ekin = 0.249083597952536 | erot = 0.56045151840253 | epot = -15.4270491515038 | etot = -14.6175140351487 -750000 ekin = 0.252358330146342 | erot = 0.528910066810434 | epot = -15.3987824320668 | etot = -14.61751403511 -751000 ekin = 0.253738423480739 | erot = 0.495866496253741 | epot = -15.3671189547961 | etot = -14.6175140350616 -752000 ekin = 0.253194394014706 | erot = 0.462133785332398 | epot = -15.3328422143544 | etot = -14.6175140350073 -753000 ekin = 0.250775308154742 | erot = 0.428539072349833 | epot = -15.2968284154563 | etot = -14.6175140349517 -754000 ekin = 0.246585878545906 | erot = 0.39588096457829 | epot = -15.2599808780228 | etot = -14.6175140348986 -755000 ekin = 0.240764398112206 | erot = 0.364890850085353 | epot = -15.2231692830488 | etot = -14.6175140348513 -756000 ekin = 0.233464471042429 | erot = 0.336201330030534 | epot = -15.1871798358847 | etot = -14.6175140348117 -757000 ekin = 0.224842467157488 | erot = 0.310323830730611 | epot = -15.1526803326693 | etot = -14.6175140347812 -758000 ekin = 0.215051562420665 | erot = 0.28763629395336 | epot = -15.1202018911339 | etot = -14.6175140347598 -759000 ekin = 0.204242275875669 | erot = 0.268380753510823 | epot = -15.0901370641329 | etot = -14.6175140347464 -760000 ekin = 0.192568636065047 | erot = 0.252669695564096 | epot = -15.0627523663687 | etot = -14.6175140347396 -761000 ekin = 0.180198520175642 | erot = 0.240499428913165 | epot = -15.0382119838259 | etot = -14.6175140347371 -762000 ekin = 0.167326299029133 | erot = 0.231768292969525 | epot = -15.0166086267356 | etot = -14.6175140347369 -763000 ekin = 0.154185685902082 | erot = 0.226297425418103 | epot = -14.9979971460569 | etot = -14.6175140347367 -764000 ekin = 0.141060632749181 | erot = 0.223852003350681 | epot = -14.9824266708346 | etot = -14.6175140347347 -765000 ekin = 0.12829225229713 | erot = 0.224161332820225 | epot = -14.9699676198472 | etot = -14.6175140347299 -766000 ekin = 0.116280064488657 | erot = 0.226936813025332 | epot = -14.9607309122353 | etot = -14.6175140347213 -767000 ekin = 0.105476340627603 | erot = 0.231887507272391 | epot = -14.9548778826093 | etot = -14.6175140347093 -768000 ekin = 0.0963728909465996 | erot = 0.238733641346968 | epot = -14.9526205669878 | etot = -14.6175140346942 -769000 ekin = 0.0894802427438036 | erot = 0.2472186554107 | epot = -14.9542129328318 | etot = -14.6175140346773 -770000 ekin = 0.08529973610986 | erot = 0.2571203536096 | epot = -14.9599341243793 | etot = -14.6175140346598 -771000 ekin = 0.0842896183574619 | erot = 0.268261228609979 | epot = -14.9700648816111 | etot = -14.6175140346437 -772000 ekin = 0.0868267987479274 | erot = 0.280517313420821 | epot = -14.9848581468 | etot = -14.6175140346312 -773000 ekin = 0.0931666172479489 | erot = 0.293824162660612 | epot = -15.0045048145333 | etot = -14.6175140346247 -774000 ekin = 0.10340384382629 | erot = 0.308178073397322 | epot = -15.0290959518504 | etot = -14.6175140346268 -775000 ekin = 0.117439110045037 | erot = 0.323630675217712 | epot = -15.0585838199026 | etot = -14.6175140346399 -776000 ekin = 0.134955835364906 | erot = 0.340275613675123 | epot = -15.092745483706 | etot = -14.617514034666 -777000 ekin = 0.155413263634573 | erot = 0.35822784274539 | epot = -15.1311551410861 | etot = -14.6175140347062 -778000 ekin = 0.178060391220184 | erot = 0.377596905888857 | epot = -15.173171331869 | etot = -14.6175140347599 -779000 ekin = 0.201973803863688 | erot = 0.398457850157365 | epot = -15.2179456888462 | etot = -14.6175140348252 -780000 ekin = 0.226119091212137 | erot = 0.420824480237588 | epot = -15.2644576063475 | etot = -14.6175140348978 -781000 ekin = 0.249431156624394 | erot = 0.44462958531423 | epot = -15.311574776911 | etot = -14.6175140349724 -782000 ekin = 0.270904470267411 | erot = 0.469715692367093 | epot = -15.3581341976773 | etot = -14.6175140350428 -783000 ekin = 0.28968127378142 | erot = 0.495837747640981 | epot = -15.4030330565254 | etot = -14.617514035103 -784000 ekin = 0.305125009984979 | erot = 0.522676532161812 | epot = -15.4453155772949 | etot = -14.6175140351481 -785000 ekin = 0.316868262921746 | erot = 0.549859353707455 | epot = -15.4842416518048 | etot = -14.6175140351756 -786000 ekin = 0.324828845887884 | erot = 0.576983310023367 | epot = -15.5193261910961 | etot = -14.6175140351849 -787000 ekin = 0.329193233878375 | erot = 0.603636505802115 | epot = -15.5503437748585 | etot = -14.617514035178 -788000 ekin = 0.330371864851512 | erot = 0.62941387556452 | epot = -15.5772997755748 | etot = -14.6175140351588 -789000 ekin = 0.328934711355232 | erot = 0.653926193133343 | epot = -15.6003749396208 | etot = -14.6175140351322 -790000 ekin = 0.325537319473875 | erot = 0.676802790007464 | epot = -15.6198541445849 | etot = -14.6175140351035 -791000 ekin = 0.32084726793388 | erot = 0.697689943212792 | epot = -15.6360512462243 | etot = -14.6175140350777 -792000 ekin = 0.315479253540088 | erot = 0.716247584425374 | epot = -15.6492408730235 | etot = -14.6175140350581 -793000 ekin = 0.309944490983019 | erot = 0.732146955923502 | epot = -15.6596054819539 | etot = -14.6175140350473 -794000 ekin = 0.304617480926299 | erot = 0.745071299200878 | epot = -15.6672028151732 | etot = -14.617514035046 -795000 ekin = 0.299720880977559 | erot = 0.754720862086029 | epot = -15.6719557781173 | etot = -14.6175140350537 -796000 ekin = 0.295327396181303 | erot = 0.76082265878866 | epot = -15.6736640900384 | etot = -14.6175140350684 -797000 ekin = 0.29137629685275 | erot = 0.763144639346192 | epot = -15.6720349712861 | etot = -14.6175140350872 -798000 ekin = 0.287701294704656 | erot = 0.761513269132569 | epot = -15.6667285989435 | etot = -14.6175140351063 -799000 ekin = 0.284065979572991 | erot = 0.755832991337627 | epot = -15.6574130060325 | etot = -14.6175140351218 -800000 ekin = 0.2802027906322 | erot = 0.746105645864821 | epot = -15.6438224716273 | etot = -14.6175140351303 -801000 ekin = 0.275851560112955 | erot = 0.732447665813925 | epot = -15.6258132610552 | etot = -14.6175140351283 -802000 ekin = 0.270794034433638 | erot = 0.715102809073011 | epot = -15.6034108786203 | etot = -14.6175140351136 -803000 ekin = 0.264881442636258 | erot = 0.694448356026044 | epot = -15.5768438337475 | etot = -14.6175140350852 -804000 ekin = 0.258053167890663 | erot = 0.670993199746617 | epot = -15.5465604026803 | etot = -14.617514035043 -805000 ekin = 0.250345604727835 | erot = 0.645366941436453 | epot = -15.5132265811527 | etot = -14.6175140349884 -806000 ekin = 0.241890533711289 | erot = 0.618299214643985 | epot = -15.477703783279 | etot = -14.6175140349237 -807000 ekin = 0.232905655206452 | erot = 0.590591287735814 | epot = -15.4410109777946 | etot = -14.6175140348523 -808000 ekin = 0.223678061732375 | erot = 0.563080896687659 | epot = -15.404272993198 | etot = -14.617514034778 -809000 ekin = 0.21454303522996 | erot = 0.536602758841135 | epot = -15.3686598287762 | etot = -14.6175140347051 -810000 ekin = 0.205860488312556 | erot = 0.511947500022913 | epot = -15.3353220229731 | etot = -14.6175140346377 -811000 ekin = 0.197991117805052 | erot = 0.489821758277054 | epot = -15.3053269106615 | etot = -14.6175140345794 -812000 ekin = 0.191273941670663 | erot = 0.470812030933229 | epot = -15.2796000071375 | etot = -14.6175140345336 -813000 ekin = 0.18600640436924 | erot = 0.45535445106164 | epot = -15.2588748899336 | etot = -14.6175140345027 -814000 ekin = 0.182427753711751 | erot = 0.443712201373144 | epot = -15.2436539895734 | etot = -14.6175140344885 -815000 ekin = 0.180705986334949 | erot = 0.435961774090769 | epot = -15.2341817949177 | etot = -14.6175140344919 -816000 ekin = 0.180928373605182 | erot = 0.431988814112557 | epot = -15.2304312222307 | etot = -14.6175140345129 -817000 ekin = 0.183095431234026 | erot = 0.431493858262996 | epot = -15.2321033240478 | etot = -14.6175140345508 -818000 ekin = 0.187118173911453 | erot = 0.434007895069015 | epot = -15.2386401035843 | etot = -14.6175140346039 -819000 ekin = 0.192818568053509 | erot = 0.438917286806428 | epot = -15.2492498895297 | etot = -14.6175140346697 -820000 ekin = 0.199933211815025 | erot = 0.445497181488113 | epot = -15.2629444280486 | etot = -14.6175140347454 -821000 ekin = 0.20812037408232 | erot = 0.452952069483673 | epot = -15.2785864783934 | etot = -14.6175140348274 -822000 ekin = 0.216970558498732 | erot = 0.460461605795622 | epot = -15.2949461992058 | etot = -14.6175140349114 -823000 ekin = 0.226020685629658 | erot = 0.467229260922841 | epot = -15.3107639815457 | etot = -14.6175140349932 -824000 ekin = 0.234771793852156 | erot = 0.472530858216735 | epot = -15.3248166871376 | etot = -14.6175140350687 -825000 ekin = 0.242709867662636 | erot = 0.475759712130497 | epot = -15.3359836149267 | etot = -14.6175140351335 -826000 ekin = 0.249329060858576 | erot = 0.476465014357267 | epot = -15.3433081104001 | etot = -14.6175140351843 -827000 ekin = 0.254156259486422 | erot = 0.474380409602728 | epot = -15.3460507043074 | etot = -14.6175140352182 -828000 ekin = 0.256775693171427 | erot = 0.469440383344433 | epot = -15.3437301117495 | etot = -14.6175140352336 -829000 ekin = 0.25685220121729 | erot = 0.46178309210189 | epot = -15.336149328549 | etot = -14.6175140352298 -830000 ekin = 0.254151805817293 | erot = 0.45173946704091 | epot = -15.3234053080654 | etot = -14.6175140352072 -831000 ekin = 0.248558416434232 | erot = 0.439809632306185 | epot = -15.3058820839078 | etot = -14.6175140351674 -832000 ekin = 0.240085737091458 | erot = 0.426628719075598 | epot = -15.2842284912796 | etot = -14.6175140351126 -833000 ekin = 0.228883712687993 | erot = 0.41292489062373 | epot = -15.2593226383575 | etot = -14.6175140350458 -834000 ekin = 0.21523908268204 | erot = 0.399472764055511 | epot = -15.232225881708 | etot = -14.6175140349705 -835000 ekin = 0.19956978729475 | erot = 0.38704544051902 | epot = -15.2041292627042 | etot = -14.6175140348904 -836000 ekin = 0.182413100763752 | erot = 0.376368114580287 | epot = -15.1762952501534 | etot = -14.6175140348094 -837000 ekin = 0.164407483062593 | erot = 0.368075825930974 | epot = -15.149997343725 | etot = -14.6175140347314 -838000 ekin = 0.146268295773265 | erot = 0.362677435797434 | epot = -15.1264597662307 | etot = -14.61751403466 -839000 ekin = 0.128757768426159 | erot = 0.360527421580297 | epot = -15.1067992246053 | etot = -14.6175140345988 -840000 ekin = 0.112649960717713 | erot = 0.361806618656372 | epot = -15.0919706139248 | etot = -14.6175140345507 -841000 ekin = 0.0986919456674347 | erot = 0.366512603929372 | epot = -15.0827185841153 | etot = -14.6175140345185 -842000 ekin = 0.0875630029231966 | erot = 0.374460003556287 | epot = -15.0795370409836 | etot = -14.6175140345041 -843000 ekin = 0.0798341847684494 | erot = 0.385290606533481 | epot = -15.0826388258105 | etot = -14.6175140345086 -844000 ekin = 0.0759310929906315 | erot = 0.3984927697305 | epot = -15.0919378972533 | etot = -14.6175140345322 -845000 ekin = 0.0761029610203411 | erot = 0.413429207169668 | epot = -15.1070462027641 | etot = -14.6175140345741 -846000 ekin = 0.0804010613291213 | erot = 0.429371869323703 | epot = -15.1272869652854 | etot = -14.6175140346325 -847000 ekin = 0.0886689809242991 | erot = 0.44554224199926 | epot = -15.151725257628 | etot = -14.6175140347044 -848000 ekin = 0.100546421460098 | erot = 0.461155038712865 | epot = -15.1792154949586 | etot = -14.6175140347856 -849000 ekin = 0.11548696001125 | erot = 0.4754629453529 | epot = -15.2084639402357 | etot = -14.6175140348715 -850000 ekin = 0.132788806696176 | erot = 0.487799837753922 | epot = -15.2381026794072 | etot = -14.6175140349571 -851000 ekin = 0.151636227786878 | erot = 0.497619785577613 | epot = -15.2667700484016 | etot = -14.6175140350371 -852000 ekin = 0.171148194576695 | erot = 0.50452924262839 | epot = -15.2931914723117 | etot = -14.6175140351066 -853000 ekin = 0.190430159396249 | erot = 0.50831015746194 | epot = -15.3162543520199 | etot = -14.6175140351617 -854000 ekin = 0.208624756900102 | erot = 0.508932337651427 | epot = -15.3350711297508 | etot = -14.6175140351993 -855000 ekin = 0.224957674812677 | erot = 0.506554231539623 | epot = -15.3490259415701 | etot = -14.6175140352178 -856000 ekin = 0.238775816539417 | erot = 0.501512259960098 | epot = -15.3578021117162 | etot = -14.6175140352166 -857000 ekin = 0.249575992234296 | erot = 0.494299801981519 | epot = -15.3613898294125 | etot = -14.6175140351967 -858000 ekin = 0.25702350207401 | erot = 0.485537766821524 | epot = -15.3600753040553 | etot = -14.6175140351598 -859000 ekin = 0.260960921285819 | erot = 0.475939247615288 | epot = -15.3544142040096 | etot = -14.6175140351085 -860000 ekin = 0.261408037072455 | erot = 0.466270984603919 | epot = -15.3451930567221 | etot = -14.6175140350458 -861000 ekin = 0.258554187538387 | erot = 0.457314264402285 | epot = -15.3333824869156 | etot = -14.6175140349749 -862000 ekin = 0.252744258033177 | erot = 0.449827506885211 | epot = -15.3200857998177 | etot = -14.6175140348993 -863000 ekin = 0.24445941779672 | erot = 0.444512141833 | epot = -15.3064855944522 | etot = -14.6175140348224 -864000 ekin = 0.234293368840396 | erot = 0.441983030938497 | epot = -15.2937904345264 | etot = -14.6175140347475 -865000 ekin = 0.222924696624307 | erot = 0.442744308393614 | epot = -15.2831830396955 | etot = -14.6175140346775 -866000 ekin = 0.211086026109529 | erot = 0.447169652379615 | epot = -15.2757697131049 | etot = -14.6175140346158 -867000 ekin = 0.199530465893234 | erot = 0.455487658922665 | epot = -15.2725321593806 | etot = -14.6175140345647 -868000 ekin = 0.188996288427726 | erot = 0.467771811642194 | epot = -15.274282134597 | etot = -14.6175140345271 -869000 ekin = 0.180171161859857 | erot = 0.483934855625369 | epot = -15.2816200519904 | etot = -14.6175140345052 -870000 ekin = 0.173657413869096 | erot = 0.503727420428206 | epot = -15.2948988687979 | etot = -14.6175140345006 -871000 ekin = 0.169940429082833 | erot = 0.526741193130623 | epot = -15.3141956567281 | etot = -14.6175140345146 -872000 ekin = 0.169362274179232 | erot = 0.552417088944611 | epot = -15.3392933976713 | etot = -14.6175140345475 -873000 ekin = 0.172102391202427 | erot = 0.580058846013093 | epot = -15.3696752718142 | etot = -14.6175140345987 -874000 ekin = 0.178167002902688 | erot = 0.608852557306719 | epot = -15.404533594876 | etot = -14.6175140346666 -875000 ekin = 0.187388233891592 | erot = 0.637892396629009 | epot = -15.4427946652693 | etot = -14.6175140347487 -876000 ekin = 0.199433181368184 | erot = 0.666212376944545 | epot = -15.4831595931543 | etot = -14.6175140348416 -877000 ekin = 0.213822249051427 | erot = 0.692823325237341 | epot = -15.5241596092295 | etot = -14.6175140349408 -878000 ekin = 0.229955728386756 | erot = 0.716754212644264 | epot = -15.5642239760726 | etot = -14.6175140350416 -879000 ekin = 0.24714610464567 | erot = 0.737095186134359 | epot = -15.601755325919 | etot = -14.617514035139 -880000 ekin = 0.26465379700288 | erot = 0.753040153405439 | epot = -15.6352079856366 | etot = -14.6175140352283 -881000 ekin = 0.281723784261826 | erot = 0.763926241590759 | epot = -15.6631640611576 | etot = -14.617514035305 -882000 ekin = 0.297620641607206 | erot = 0.769267373447322 | epot = -15.6844020504202 | etot = -14.6175140353657 -883000 ekin = 0.311659967166528 | erot = 0.768779581882121 | epot = -15.6979535844563 | etot = -14.6175140354077 -884000 ekin = 0.323234773768187 | erot = 0.762396270683934 | epot = -15.7031450798816 | etot = -14.6175140354295 -885000 ekin = 0.331836099625414 | erot = 0.750272396067172 | epot = -15.6996225311231 | etot = -14.6175140354306 -886000 ekin = 0.33706775156411 | erot = 0.732777385265372 | epot = -15.6873591722412 | etot = -14.6175140354117 -887000 ekin = 0.338655649766352 | erot = 0.710477420749861 | epot = -15.6666471058904 | etot = -14.6175140353742 -888000 ekin = 0.336452632420901 | erot = 0.6841084171557 | epot = -15.6380750848969 | etot = -14.6175140353203 -889000 ekin = 0.330439768515659 | erot = 0.654541548239618 | epot = -15.6024953520081 | etot = -14.6175140352528 -890000 ekin = 0.320725208484789 | erot = 0.622743520026649 | epot = -15.5609827636858 | etot = -14.6175140351743 -891000 ekin = 0.307541386208951 | erot = 0.589733936087058 | epot = -15.5147893573841 | etot = -14.6175140350881 -892000 ekin = 0.291240998129697 | erot = 0.556542080397536 | epot = -15.4652971135242 | etot = -14.6175140349969 -893000 ekin = 0.272291667891157 | erot = 0.524165278720401 | epot = -15.4139709815154 | etot = -14.6175140349038 -894000 ekin = 0.251268620703245 | erot = 0.493530718297354 | epot = -15.3623133738117 | etot = -14.6175140348111 -895000 ekin = 0.228844131843401 | erot = 0.465462234286291 | epot = -15.3118204008511 | etot = -14.6175140347214 -896000 ekin = 0.205772103521686 | erot = 0.440653137307012 | epot = -15.2639392754662 | etot = -14.6175140346375 -897000 ekin = 0.182866017802818 | erot = 0.41964569375824 | epot = -15.2200257461228 | etot = -14.6175140345617 -898000 ekin = 0.160968870008375 | erot = 0.402817425242945 | epot = -15.1813003297484 | etot = -14.6175140344971 -899000 ekin = 0.140914625128323 | erot = 0.390374024163074 | epot = -15.1488026837378 | etot = -14.6175140344464 -900000 ekin = 0.123482269337613 | erot = 0.382348451689397 | epot = -15.1233447554396 | etot = -14.6175140344126 -901000 ekin = 0.109345484385286 | erot = 0.378605737554656 | epot = -15.1054652563382 | etot = -14.6175140343982 -902000 ekin = 0.0990229789071331 | erot = 0.378853140166514 | epot = -15.0953901534789 | etot = -14.6175140344052 -903000 ekin = 0.0928360184568331 | erot = 0.382655585826067 | epot = -15.0930056387171 | etot = -14.6175140344342 -904000 ekin = 0.090880112388556 | erot = 0.389456554773916 | epot = -15.0978507016463 | etot = -14.6175140344839 -905000 ekin = 0.0930167096532645 | erot = 0.398604648850404 | epot = -15.1091353930552 | etot = -14.6175140345515 -906000 ekin = 0.0988880708470082 | erot = 0.409385812369539 | epot = -15.125787917849 | etot = -14.6175140346324 -907000 ekin = 0.107954659148151 | erot = 0.421060528764331 | epot = -15.1465292226329 | etot = -14.6175140347204 -908000 ekin = 0.119550305155103 | erot = 0.432904367174592 | epot = -15.1699687071382 | etot = -14.6175140348085 -909000 ekin = 0.132947118364974 | erot = 0.444249232158161 | epot = -15.1947103854133 | etot = -14.6175140348901 -910000 ekin = 0.147420543333974 | erot = 0.454521879656246 | epot = -15.2194564579498 | etot = -14.6175140349596 -911000 ekin = 0.1623055063097 | erot = 0.463275978358893 | epot = -15.2430955196813 | etot = -14.6175140350127 -912000 ekin = 0.177037050913212 | erot = 0.470214361754332 | epot = -15.2647654477151 | etot = -14.6175140350476 -913000 ekin = 0.191172462463397 | erot = 0.475199092565833 | epot = -15.2838855900934 | etot = -14.6175140350642 -914000 ekin = 0.204395616840769 | erot = 0.478248345047336 | epot = -15.3001579969523 | etot = -14.6175140350642 -915000 ekin = 0.216507238695221 | erot = 0.479520616571487 | epot = -15.3135418903175 | etot = -14.6175140350508 -916000 ekin = 0.22740635239901 | erot = 0.479288139235317 | epot = -15.3242085266619 | etot = -14.6175140350275 -917000 ekin = 0.237068358847904 | erot = 0.47790239272228 | epot = -15.3324847865685 | etot = -14.6175140349984 -918000 ekin = 0.245524170398601 | erot = 0.475755244751353 | epot = -15.3387934501169 | etot = -14.6175140349669 -919000 ekin = 0.252843202023208 | erot = 0.473239468154888 | epot = -15.3435967051145 | etot = -14.6175140349364 -920000 ekin = 0.259121284814425 | erot = 0.470712244289296 | epot = -15.3473475640128 | etot = -14.6175140349091 -921000 ekin = 0.264473144075726 | erot = 0.468464808091583 | epot = -15.350451987054 | etot = -14.6175140348867 -922000 ekin = 0.269028180853159 | erot = 0.466700668341345 | epot = -15.3532428840647 | etot = -14.6175140348702 -923000 ekin = 0.272927944744977 | erot = 0.465523908451933 | epot = -15.3559658880565 | etot = -14.6175140348596 -924000 ekin = 0.27632379382835 | erot = 0.464938026324847 | epot = -15.3587758550076 | etot = -14.6175140348544 -925000 ekin = 0.279373649322731 | erot = 0.464854721381053 | epot = -15.3617424055578 | etot = -14.617514034854 -926000 ekin = 0.282237300897359 | erot = 0.465111106681621 | epot = -15.364862442436 | etot = -14.6175140348571 -927000 ekin = 0.285070250341276 | erot = 0.465493135294172 | epot = -15.3680774204977 | etot = -14.6175140348622 -928000 ekin = 0.288016501944431 | erot = 0.465762600719218 | epot = -15.3712931375322 | etot = -14.6175140348686 -929000 ekin = 0.291201026098216 | erot = 0.465684740680258 | epot = -15.3743998016531 | etot = -14.6175140348746 -930000 ekin = 0.294722459179011 | erot = 0.46505426199062 | epot = -15.3772907560491 | etot = -14.6175140348795 -931000 ekin = 0.298646764015314 | erot = 0.46371724845426 | epot = -15.379878047352 | etot = -14.6175140348824 -932000 ekin = 0.30300230463981 | erot = 0.461587311534084 | epot = -15.3821036510569 | etot = -14.617514034883 -933000 ekin = 0.307776651095006 | erot = 0.458654945592231 | epot = -15.3839456315686 | etot = -14.6175140348814 -934000 ekin = 0.312915338272225 | erot = 0.454989722656003 | epot = -15.3854190958059 | etot = -14.6175140348777 -935000 ekin = 0.318322768321516 | erot = 0.450735625551274 | epot = -15.3865724287453 | etot = -14.6175140348725 -936000 ekin = 0.323865441581208 | erot = 0.446100385695376 | epot = -15.387479862143 | etot = -14.6175140348664 -937000 ekin = 0.329377658420725 | erot = 0.441340069470882 | epot = -15.3882317627517 | etot = -14.6175140348601 -938000 ekin = 0.334669609401316 | erot = 0.436740154638295 | epot = -15.3889237988937 | etot = -14.6175140348541 -939000 ekin = 0.339538182698404 | erot = 0.432595723627046 | epot = -15.3896479411745 | etot = -14.617514034849 -940000 ekin = 0.343779460434926 | erot = 0.429190561372464 | epot = -15.3904840566525 | etot = -14.6175140348451 -941000 ekin = 0.347202304173565 | erot = 0.426777065358581 | epot = -15.3914934043749 | etot = -14.6175140348428 -942000 ekin = 0.349642062607354 | erot = 0.425558062625005 | epot = -15.3927141600744 | etot = -14.617514034842 -943000 ekin = 0.350973206935252 | erot = 0.425671371650571 | epot = -15.3941586134289 | etot = -14.617514034843 -944000 ekin = 0.351119786154226 | erot = 0.427178062458784 | epot = -15.3958118834587 | etot = -14.6175140348457 -945000 ekin = 0.350062816508175 | erot = 0.430055404932934 | epot = -15.397632256291 | etot = -14.6175140348498 -946000 ekin = 0.347844068536132 | erot = 0.434195447788954 | epot = -15.3995535511804 | etot = -14.6175140348553 -947000 ekin = 0.344566017440973 | erot = 0.439410327983287 | epot = -15.4014903802857 | etot = -14.6175140348614 -948000 ekin = 0.340388212506886 | erot = 0.445444378275965 | epot = -15.4033466256503 | etot = -14.6175140348675 -949000 ekin = 0.335520427168089 | erot = 0.451992965713356 | epot = -15.405027427754 | etot = -14.6175140348726 -950000 ekin = 0.330213181195942 | erot = 0.458727107974317 | epot = -15.4064543240458 | etot = -14.6175140348755 -951000 ekin = 0.324745816556292 | erot = 0.465321341195928 | epot = -15.4075811926278 | etot = -14.6175140348756 -952000 ekin = 0.319412679962154 | erot = 0.471482169175981 | epot = -15.40840888401 | etot = -14.6175140348719 -953000 ekin = 0.314508037100295 | erot = 0.476974139325829 | epot = -15.4089962112904 | etot = -14.6175140348643 -954000 ekin = 0.310309685024622 | erot = 0.481639431416537 | epot = -15.4094631512943 | etot = -14.6175140348532 -955000 ekin = 0.307061947765635 | erot = 0.485408201612612 | epot = -15.4099841842179 | etot = -14.6175140348396 -956000 ekin = 0.304958921289484 | erot = 0.488297803840366 | epot = -15.4107707599553 | etot = -14.6175140348255 -957000 ekin = 0.304129209169354 | erot = 0.490400499131608 | epot = -15.4120437431141 | etot = -14.6175140348131 -958000 ekin = 0.304623714620758 | erot = 0.491860923620771 | epot = -15.4139986730463 | etot = -14.6175140348048 -959000 ekin = 0.306408207892448 | erot = 0.492846142548464 | epot = -15.4167683852437 | etot = -14.6175140348028 -960000 ekin = 0.309362278814217 | erot = 0.493512316197957 | epot = -15.4203886298212 | etot = -14.617514034809 -961000 ekin = 0.313285873785905 | erot = 0.493972653387197 | epot = -15.4247725619971 | etot = -14.617514034824 -962000 ekin = 0.317913924785389 | erot = 0.494271324762711 | epot = -15.4296992843955 | etot = -14.6175140348474 -963000 ekin = 0.322938673954078 | erot = 0.494367337737335 | epot = -15.434820046569 | etot = -14.6175140348776 -964000 ekin = 0.328038281532033 | erot = 0.494131108238473 | epot = -15.4396834246822 | etot = -14.6175140349117 -965000 ekin = 0.332909295684048 | erot = 0.493354750676282 | epot = -15.4437780813066 | etot = -14.6175140349462 -966000 ekin = 0.337299689763782 | erot = 0.491775167781756 | epot = -15.4465888925225 | etot = -14.6175140349769 -967000 ekin = 0.341038574327672 | erot = 0.489107134739068 | epot = -15.4476597440666 | etot = -14.6175140349999 -968000 ekin = 0.344058508087241 | erot = 0.485082040987962 | epot = -15.4466545840869 | etot = -14.6175140350117 -969000 ekin = 0.346406687227172 | erot = 0.479487053291733 | epot = -15.4434077755292 | etot = -14.6175140350103 -970000 ekin = 0.348242259951303 | erot = 0.472199376074833 | epot = -15.4379556710214 | etot = -14.6175140349953 -971000 ekin = 0.349818577908824 | erot = 0.46321104020724 | epot = -15.4305436530838 | etot = -14.6175140349678 -972000 ekin = 0.351451221504542 | erot = 0.452641107453832 | epot = -15.4216063638892 | etot = -14.6175140349308 -973000 ekin = 0.353474851841814 | erot = 0.440734047140308 | epot = -15.4117229338706 | etot = -14.6175140348885 -974000 ekin = 0.356193968986615 | erot = 0.427844962323066 | epot = -15.4015529661555 | etot = -14.6175140348458 -975000 ekin = 0.359834072252972 | erot = 0.41441397102154 | epot = -15.391762078082 | etot = -14.6175140348075 -976000 ekin = 0.364500158164539 | erot = 0.400933139115516 | epot = -15.3829473320579 | etot = -14.6175140347778 -977000 ekin = 0.370148756531585 | erot = 0.387909813696897 | epot = -15.3755726049882 | etot = -14.6175140347597 -978000 ekin = 0.376577842832097 | erot = 0.375830059083101 | epot = -15.3699219366698 | etot = -14.6175140347546 -979000 ekin = 0.383436289098875 | erot = 0.365125297247076 | epot = -15.3660756211083 | etot = -14.6175140347623 -980000 ekin = 0.39025154222181 | erot = 0.356144397460029 | epot = -15.3639099744636 | etot = -14.6175140347817 -981000 ekin = 0.396471539315466 | erot = 0.34913254719872 | epot = -15.3631181213242 | etot = -14.61751403481 -982000 ekin = 0.401514997591316 | erot = 0.344217435800717 | epot = -15.3632464682363 | etot = -14.6175140348443 -983000 ekin = 0.404823458769572 | erot = 0.341402706417443 | epot = -15.3637402000685 | etot = -14.6175140348815 -984000 ekin = 0.405908866684762 | erot = 0.340568324599231 | epot = -15.3639912262028 | etot = -14.6175140349188 -985000 ekin = 0.404391803059563 | erot = 0.341477444722043 | epot = -15.3633832827353 | etot = -14.6175140349537 -986000 ekin = 0.400027422799949 | erot = 0.343789434463128 | epot = -15.3613308922474 | etot = -14.6175140349843 -987000 ekin = 0.392718180743682 | erot = 0.347078806740175 | epot = -15.357311022493 | etot = -14.6175140350092 -988000 ekin = 0.38251423921323 | erot = 0.350859769148633 | epot = -15.3508880433891 | etot = -14.6175140350273 -989000 ekin = 0.36960372665301 | erot = 0.354615837190772 | epot = -15.3417335988814 | etot = -14.6175140350376 -990000 ekin = 0.354295674460579 | erot = 0.357833454089954 | epot = -15.3296431635899 | etot = -14.6175140350393 -991000 ekin = 0.336998529350858 | erot = 0.360037895319985 | epot = -15.3145504597026 | etot = -14.6175140350317 -992000 ekin = 0.318196763890059 | erot = 0.360829065192577 | epot = -15.2965398640969 | etot = -14.6175140350143 -993000 ekin = 0.298427479538372 | erot = 0.359914303090989 | epot = -15.2758558176161 | etot = -14.6175140349867 -994000 ekin = 0.278258203579959 | erot = 0.35713517096667 | epot = -15.2529074094957 | etot = -14.6175140349491 -995000 ekin = 0.25826647189504 | erot = 0.352485480213687 | epot = -15.2282659870109 | etot = -14.6175140349021 -996000 ekin = 0.239021351636035 | erot = 0.346118523028601 | epot = -15.2026539095118 | etot = -14.6175140348471 -997000 ekin = 0.221066818081189 | erot = 0.33834249244324 | epot = -15.1769233453105 | etot = -14.6175140347861 -998000 ekin = 0.204906835818305 | erot = 0.32960423350908 | epot = -15.1520251040489 | etot = -14.6175140347215 -999000 ekin = 0.190992053959206 | erot = 0.320462575794709 | epot = -15.1289686644102 | etot = -14.6175140346563 -1000000 ekin = 0.179708146665582 | erot = 0.311553394428723 | epot = -15.1087755756881 | etot = -14.6175140345938 - 1000000 0.013311715 -1.5443684 0.033490821 -1.4929067 -0.00013590491 -Loop time of 20.562 on 4 procs for 1000000 steps with 10 atoms - -Performance: 42019.279 tau/day, 48633.425 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.64919 | 7.8156 | 14.197 | 201.2 | 38.01 -Bond | 0.087187 | 0.29612 | 0.4961 | 30.3 | 1.44 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 1.7094 | 2.016 | 2.3707 | 16.8 | 9.80 -Output | 1.6928e-05 | 2.0683e-05 | 2.2888e-05 | 0.0 | 0.00 -Modify | 0.23071 | 0.97353 | 1.6748 | 60.0 | 4.73 -Other | | 9.461 | | | 46.01 - -Nlocal: 2.5 ave 5 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Nghost: 7.5 ave 10 max 5 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Neighs: 18.5 ave 35 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 - -Total # of neighbors = 74 -Ave neighs/atom = 7.4 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:20 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 new file mode 100644 index 0000000000..2c09a4f99d --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.023 | 3.023 | 3.023 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 +1000 ekin = 0.00113086229080528 | erot = 0.0043101016040658 | epot = -14.6229549982368 | etot = -14.617514034342 +2000 ekin = 0.0044853322434243 | erot = 0.0171407706505008 | epot = -14.6391401372615 | etot = -14.6175140343675 +3000 ekin = 0.00995035259649284 | erot = 0.0381961780846485 | epot = -14.6656605650904 | etot = -14.6175140344093 +4000 ekin = 0.0173418024862054 | erot = 0.0669935184860634 | epot = -14.7018493554381 | etot = -14.6175140344659 +5000 ekin = 0.0264109356286075 | erot = 0.102878288094517 | epot = -14.7468032582586 | etot = -14.6175140345355 +6000 ekin = 0.0368533113591442 | erot = 0.14504542056987 | epot = -14.7994127665447 | etot = -14.6175140346157 +7000 ekin = 0.0483200640564843 | erot = 0.19256586251551 | epot = -14.8583999612756 | etot = -14.6175140347036 +8000 ekin = 0.0604312317605998 | erot = 0.24441787013151 | epot = -14.9223631366883 | etot = -14.6175140347962 +9000 ekin = 0.0727907119671751 | erot = 0.299521949931843 | epot = -14.989826696789 | etot = -14.6175140348899 +10000 ekin = 0.0850022498875221 | erot = 0.356777997217908 | epot = -15.0592942820869 | etot = -14.6175140349815 + 10000 0.006296463 -1.5144685 0.0085391004 -1.4974292 -0.00010794792 +Loop time of 0.149406 on 1 procs for 10000 steps with 10 atoms + +Performance: 57828.835 tau/day, 66931.522 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.11971 | 0.11971 | 0.11971 | 0.0 | 80.12 +Bond | 0.0051196 | 0.0051196 | 0.0051196 | 0.0 | 3.43 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0013614 | 0.0013614 | 0.0013614 | 0.0 | 0.91 +Output | 5.0068e-06 | 5.0068e-06 | 5.0068e-06 | 0.0 | 0.00 +Modify | 0.018941 | 0.018941 | 0.018941 | 0.0 | 12.68 +Other | | 0.004268 | | | 2.86 + +Nlocal: 10 ave 10 max 10 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 45 ave 45 max 45 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 45 +Ave neighs/atom = 4.5 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 new file mode 100644 index 0000000000..a326248cdb --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.652 | 7.834 | 8.016 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 +1000 ekin = 0.00113086229080478 | erot = 0.00431010160406708 | epot = -14.6229549982368 | etot = -14.617514034342 +2000 ekin = 0.00448533224342286 | erot = 0.0171407706505013 | epot = -14.6391401372615 | etot = -14.6175140343675 +3000 ekin = 0.0099503525964896 | erot = 0.0381961780846438 | epot = -14.6656605650904 | etot = -14.6175140344093 +4000 ekin = 0.0173418024861991 | erot = 0.0669935184860479 | epot = -14.7018493554381 | etot = -14.6175140344659 +5000 ekin = 0.0264109356285965 | erot = 0.102878288094482 | epot = -14.7468032582586 | etot = -14.6175140345355 +6000 ekin = 0.0368533113591268 | erot = 0.145045420569809 | epot = -14.7994127665446 | etot = -14.6175140346156 +7000 ekin = 0.0483200640564584 | erot = 0.192565862515413 | epot = -14.8583999612755 | etot = -14.6175140347036 +8000 ekin = 0.0604312317605635 | erot = 0.24441787013137 | epot = -14.9223631366881 | etot = -14.6175140347962 +9000 ekin = 0.072790711967127 | erot = 0.299521949931654 | epot = -14.9898266967887 | etot = -14.6175140348899 +10000 ekin = 0.0850022498874609 | erot = 0.356777997217666 | epot = -15.0592942820866 | etot = -14.6175140349815 + 10000 0.006296463 -1.5144685 0.0085391004 -1.4974292 -0.00010794792 +Loop time of 0.14583 on 4 procs for 10000 steps with 10 atoms + +Performance: 59247.054 tau/day, 68572.979 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0034175 | 0.055587 | 0.10059 | 17.9 | 38.12 +Bond | 0.00064635 | 0.002131 | 0.0035357 | 2.5 | 1.46 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.014538 | 0.014932 | 0.015271 | 0.2 | 10.24 +Output | 5.7459e-05 | 5.7697e-05 | 5.7936e-05 | 0.0 | 0.04 +Modify | 0.0012829 | 0.0063873 | 0.011321 | 5.2 | 4.38 +Other | | 0.06674 | | | 45.76 + +Nlocal: 2.5 ave 5 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 7.5 ave 10 max 5 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 18.5 ave 35 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 74 +Ave neighs/atom = 7.4 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/input.duplex2 b/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 similarity index 99% rename from examples/USER/cgdna/examples/oxDNA2/duplex2/input.duplex2 rename to examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 index 451fe62e3c..3d4393e09b 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/input.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 @@ -73,6 +73,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 1000000 +run 10000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 deleted file mode 100644 index 386fbd7579..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.1 +++ /dev/null @@ -1,1167 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 3.025 | 3.025 | 3.025 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 -1000 ekin = 1.54282272464468 | erot = 1.71757897250772 | epot = -24.4403527731341 | etot = -21.1799510759817 -2000 ekin = 1.86109566690716 | erot = 1.93804145796026 | epot = -24.3759816748265 | etot = -20.5768445499591 -3000 ekin = 2.68769182431188 | erot = 2.14559269500086 | epot = -24.2916556822451 | etot = -19.4583711629324 -4000 ekin = 2.04710303757243 | erot = 1.48774072590987 | epot = -24.190371461807 | etot = -20.6555276983247 -5000 ekin = 1.77654023802719 | erot = 2.53418650522101 | epot = -24.1246365663843 | etot = -19.8139098231361 -6000 ekin = 3.12253137872527 | erot = 2.04028266818831 | epot = -24.0491248750916 | etot = -18.8863108281781 -7000 ekin = 3.22418765752177 | erot = 2.72037570174022 | epot = -23.9458569915548 | etot = -18.0012936322928 -8000 ekin = 2.83204202112963 | erot = 2.67060276413776 | epot = -23.9211291529766 | etot = -18.4184843677092 -9000 ekin = 2.69585642754481 | erot = 2.59559820250212 | epot = -23.8340823338302 | etot = -18.5426277037833 -10000 ekin = 2.66058119525512 | erot = 1.95965933336077 | epot = -23.7132443170725 | etot = -19.0930037884567 -11000 ekin = 2.34346978235591 | erot = 2.0608750207871 | epot = -23.5779637301072 | etot = -19.1736189269642 -12000 ekin = 2.71430148816282 | erot = 2.08352509995717 | epot = -23.4639027443831 | etot = -18.6660761562631 -13000 ekin = 2.61978682102879 | erot = 2.37135270083347 | epot = -23.3602247027812 | etot = -18.3690851809189 -14000 ekin = 3.07648218347461 | erot = 2.513719767243 | epot = -23.2345584968309 | etot = -17.6443565461133 -15000 ekin = 2.98155804409324 | erot = 1.87766202539412 | epot = -23.0833749664029 | etot = -18.2241548969156 -16000 ekin = 2.18215330648447 | erot = 2.12621179836828 | epot = -22.9601160092383 | etot = -18.6517509043856 -17000 ekin = 1.85636180329758 | erot = 2.31208745603367 | epot = -22.8022922969143 | etot = -18.633843037583 -18000 ekin = 2.26768559168017 | erot = 1.2389450409061 | epot = -22.668242963885 | etot = -19.1616123312987 -19000 ekin = 2.41605854545852 | erot = 2.44791952321404 | epot = -22.5387095337131 | etot = -17.6747314650405 -20000 ekin = 2.51175765558337 | erot = 2.15047735899709 | epot = -22.3909493829452 | etot = -17.7287143683647 -21000 ekin = 2.9915110961596 | erot = 2.41132105778464 | epot = -22.5047205397251 | etot = -17.1018883857809 -22000 ekin = 3.06067007914886 | erot = 1.83986675392832 | epot = -22.6049739626141 | etot = -17.7044371295369 -23000 ekin = 2.66061083480474 | erot = 2.22251362834379 | epot = -22.5979829967718 | etot = -17.7148585336233 -24000 ekin = 2.65745533322327 | erot = 2.79344397300952 | epot = -22.5688422615674 | etot = -17.1179429553346 -25000 ekin = 2.30064465907917 | erot = 2.20975367009042 | epot = -22.5633453862602 | etot = -18.0529470570906 -26000 ekin = 1.6282588103248 | erot = 2.51914272742421 | epot = -22.6015006270016 | etot = -18.4540990892526 -27000 ekin = 1.76021840072103 | erot = 3.70719293889859 | epot = -22.6409357152274 | etot = -17.1735243756077 -28000 ekin = 2.28064774169505 | erot = 2.34192414128161 | epot = -22.7124772012735 | etot = -18.0899053182968 -29000 ekin = 2.05883865245349 | erot = 1.85387249117169 | epot = -22.7242388348361 | etot = -18.811527691211 -30000 ekin = 2.41090888362676 | erot = 1.86304539977924 | epot = -22.6876650006964 | etot = -18.4137107172904 -31000 ekin = 2.76955959719985 | erot = 2.74117025737249 | epot = -22.6962463526981 | etot = -17.1855164981257 -32000 ekin = 2.08562644954365 | erot = 2.81609166367558 | epot = -22.7309387973059 | etot = -17.8292206840867 -33000 ekin = 2.08306771838837 | erot = 3.6412168312574 | epot = -22.671701882331 | etot = -16.9474173326852 -34000 ekin = 2.32648544880974 | erot = 3.09480128654123 | epot = -22.5637155764017 | etot = -17.1424288410507 -35000 ekin = 2.32492461599899 | erot = 2.02549181832456 | epot = -22.4811871522455 | etot = -18.1307707179219 -36000 ekin = 1.9160219633488 | erot = 1.97655634076097 | epot = -22.3849871062612 | etot = -18.4924088021514 -37000 ekin = 1.57338784336504 | erot = 2.62872199467344 | epot = -22.3528406869297 | etot = -18.1507308488912 -38000 ekin = 2.21547906806797 | erot = 2.89630123965964 | epot = -22.3056616105138 | etot = -17.1938813027862 -39000 ekin = 2.55049061085212 | erot = 2.46486573403212 | epot = -22.2602280028032 | etot = -17.244871657919 -40000 ekin = 2.25628181110086 | erot = 1.87515483835113 | epot = -22.2878959489406 | etot = -18.1564592994886 -41000 ekin = 2.46478791133629 | erot = 2.50742704532316 | epot = -22.3614598606398 | etot = -17.3892449039804 -42000 ekin = 2.69217693496336 | erot = 2.04021031621289 | epot = -22.3505245167544 | etot = -17.6181372655782 -43000 ekin = 2.40211339309477 | erot = 1.6668978842528 | epot = -22.353509525279 | etot = -18.2844982479314 -44000 ekin = 2.30891568897327 | erot = 2.40213237626172 | epot = -22.3871831090405 | etot = -17.6761350438055 -45000 ekin = 1.83275065976638 | erot = 2.26068140262528 | epot = -22.4994702091406 | etot = -18.406038146749 -46000 ekin = 1.97585087518641 | erot = 3.0186371421683 | epot = -22.4902643909032 | etot = -17.4957763735485 -47000 ekin = 1.30702141485601 | erot = 1.99592830992523 | epot = -22.4679405795691 | etot = -19.1649908547879 -48000 ekin = 2.58893650014613 | erot = 1.90050780837457 | epot = -22.5072015009757 | etot = -18.017757192455 -49000 ekin = 2.30293607053961 | erot = 2.71885537559561 | epot = -22.5026363414396 | etot = -17.4808448953044 -50000 ekin = 2.47053682632632 | erot = 3.4216531112208 | epot = -22.415032340787 | etot = -16.5228424032399 -51000 ekin = 2.70972992123879 | erot = 1.4301791663753 | epot = -22.3056750708571 | etot = -18.165765983243 -52000 ekin = 3.01390456844682 | erot = 1.97787470370191 | epot = -22.2827481318966 | etot = -17.2909688597479 -53000 ekin = 2.43796472406694 | erot = 4.25598325759163 | epot = -22.2611961774508 | etot = -15.5672481957922 -54000 ekin = 2.47286167616923 | erot = 2.3677730007818 | epot = -22.243519577301 | etot = -17.40288490035 -55000 ekin = 2.25994505035907 | erot = 1.91872181759988 | epot = -22.2996523252175 | etot = -18.1209854572585 -56000 ekin = 2.3461223108806 | erot = 2.20461695689782 | epot = -22.370356062429 | etot = -17.8196167946505 -57000 ekin = 2.51587877543148 | erot = 2.87451767129977 | epot = -22.4723343857415 | etot = -17.0819379390103 -58000 ekin = 2.49925674722554 | erot = 2.80569508565646 | epot = -22.5303780310556 | etot = -17.2254261981736 -59000 ekin = 2.75080755995156 | erot = 2.17181245800364 | epot = -22.5861118023788 | etot = -17.6634917844236 -60000 ekin = 3.2849676836621 | erot = 1.98487748777051 | epot = -22.5789662701264 | etot = -17.3091210986938 -61000 ekin = 2.4147550327795 | erot = 1.80972454908232 | epot = -22.5207352876114 | etot = -18.2962557057495 -62000 ekin = 2.82665653061546 | erot = 1.68517769072779 | epot = -22.4078181490349 | etot = -17.8959839276917 -63000 ekin = 3.70002607874218 | erot = 1.92704686824234 | epot = -22.2626867402007 | etot = -16.6356137932161 -64000 ekin = 3.61736288982706 | erot = 3.03600982585025 | epot = -22.2659045523542 | etot = -15.6125318366769 -65000 ekin = 3.40363639902008 | erot = 3.89044870099903 | epot = -22.2274777177663 | etot = -14.9333926177472 -66000 ekin = 2.94418257190202 | erot = 2.45963190668857 | epot = -22.1363667635561 | etot = -16.7325522849655 -67000 ekin = 2.60477940218663 | erot = 2.10479080523513 | epot = -22.038362895265 | etot = -17.3287926878432 -68000 ekin = 2.57158327795866 | erot = 2.46431755410219 | epot = -22.0244560205645 | etot = -16.9885551885036 -69000 ekin = 2.43845102321476 | erot = 2.85996177461682 | epot = -22.0620804569545 | etot = -16.7636676591229 -70000 ekin = 3.08348233524936 | erot = 2.49640850205841 | epot = -22.1433186271748 | etot = -16.563427789867 -71000 ekin = 2.5576093427884 | erot = 2.50957641127969 | epot = -22.2697187660694 | etot = -17.2025330120013 -72000 ekin = 1.7831483145096 | erot = 2.52806261120156 | epot = -22.3815818044114 | etot = -18.0703708787002 -73000 ekin = 1.86053585113659 | erot = 2.3350857968737 | epot = -22.4387359493251 | etot = -18.2431143013148 -74000 ekin = 3.14016175467449 | erot = 2.13186507521504 | epot = -22.447062887188 | etot = -17.1750360572984 -75000 ekin = 2.60368665360454 | erot = 2.18680067560206 | epot = -22.4438479629936 | etot = -17.653360633787 -76000 ekin = 1.9633244939079 | erot = 1.96057322365503 | epot = -22.4704022140376 | etot = -18.5465044964747 -77000 ekin = 2.09841107775422 | erot = 2.1471460143176 | epot = -22.4970899098551 | etot = -18.2515328177832 -78000 ekin = 2.49484391610508 | erot = 2.50538853212234 | epot = -22.4472882748805 | etot = -17.4470558266531 -79000 ekin = 3.10058476014063 | erot = 2.47637061915656 | epot = -22.3558276087081 | etot = -16.7788722294109 -80000 ekin = 2.52610159631253 | erot = 1.89085194000216 | epot = -22.2951000287249 | etot = -17.8781464924102 -81000 ekin = 2.34286765202483 | erot = 2.2376810918426 | epot = -22.2933034850974 | etot = -17.71275474123 -82000 ekin = 1.55517061572748 | erot = 2.02195112736337 | epot = -22.2470532436032 | etot = -18.6699315005123 -83000 ekin = 2.27421747802727 | erot = 3.34135950792192 | epot = -22.2406089881454 | etot = -16.6250320021963 -84000 ekin = 2.91603956429582 | erot = 2.09861057599124 | epot = -22.2305865946953 | etot = -17.2159364544083 -85000 ekin = 3.17172070756641 | erot = 2.91883241347319 | epot = -22.2381339647476 | etot = -16.147580843708 -86000 ekin = 3.48918734688943 | erot = 2.79711547316344 | epot = -22.2890012778608 | etot = -16.0026984578079 -87000 ekin = 3.648834525211 | erot = 2.30637362835037 | epot = -22.2817018896603 | etot = -16.3264937360989 -88000 ekin = 3.16156585935194 | erot = 2.24503314085539 | epot = -22.2225172277202 | etot = -16.8159182275129 -89000 ekin = 3.32092350591891 | erot = 1.79966969251215 | epot = -22.1549711261911 | etot = -17.03437792776 -90000 ekin = 2.41383485147934 | erot = 2.22694238351369 | epot = -21.9352492588881 | etot = -17.294472023895 -91000 ekin = 1.87769980964557 | erot = 2.50898156232204 | epot = -21.766796868726 | etot = -17.3801154967584 -92000 ekin = 2.06420930396832 | erot = 2.23853979300919 | epot = -21.6902828653619 | etot = -17.3875337683844 -93000 ekin = 1.94960374605101 | erot = 3.00245663654886 | epot = -21.6771969695753 | etot = -16.7251365869754 -94000 ekin = 2.07633340602167 | erot = 3.38669471112637 | epot = -21.7794316475531 | etot = -16.3164035304051 -95000 ekin = 2.09307446139111 | erot = 2.0811295310408 | epot = -21.9165143849258 | etot = -17.7423103924939 -96000 ekin = 2.66782345206074 | erot = 1.87453507536254 | epot = -21.9748225431664 | etot = -17.4324640157432 -97000 ekin = 1.93962158410337 | erot = 2.81228342262069 | epot = -22.0301811391172 | etot = -17.2782761323932 -98000 ekin = 1.98651083318125 | erot = 2.05358325550364 | epot = -22.1050988415859 | etot = -18.065004752901 -99000 ekin = 2.50729461715162 | erot = 3.55227490812968 | epot = -22.2148658268239 | etot = -16.1552963015426 -100000 ekin = 1.87954195221303 | erot = 2.38994009743578 | epot = -22.3826768493088 | etot = -18.11319479966 -101000 ekin = 1.66917867676911 | erot = 3.61296864361924 | epot = -22.4122779848186 | etot = -17.1301306644303 -102000 ekin = 1.63707836649616 | erot = 3.33958463197985 | epot = -22.3664797586262 | etot = -17.3898167601502 -103000 ekin = 2.00216132457488 | erot = 2.34409134088738 | epot = -22.338100531932 | etot = -17.9918478664698 -104000 ekin = 2.03704734920245 | erot = 2.74903331701925 | epot = -22.3478074938274 | etot = -17.5617268276057 -105000 ekin = 1.85601249652044 | erot = 2.00020228548217 | epot = -22.2937670136133 | etot = -18.4375522316107 -106000 ekin = 1.70582694215149 | erot = 1.90992656339968 | epot = -22.3252996603125 | etot = -18.7095461547614 -107000 ekin = 2.61183521416777 | erot = 1.56756438600251 | epot = -22.3815585845482 | etot = -18.2021589843779 -108000 ekin = 2.13345133147477 | erot = 2.1967764492834 | epot = -22.2873637709221 | etot = -17.9571359901639 -109000 ekin = 2.23517703897427 | erot = 2.12289589403282 | epot = -22.1519605830327 | etot = -17.7938876500256 -110000 ekin = 1.66340581480182 | erot = 2.52573727214601 | epot = -22.1681066766204 | etot = -17.9789635896725 -111000 ekin = 2.28529122032929 | erot = 2.24044883756493 | epot = -22.1711980210611 | etot = -17.6454579631669 -112000 ekin = 2.60405127944181 | erot = 2.43646974545776 | epot = -22.1582164438795 | etot = -17.11769541898 -113000 ekin = 2.40208651796091 | erot = 3.06270264515793 | epot = -22.1587051510952 | etot = -16.6939159879764 -114000 ekin = 2.34302229470158 | erot = 2.30426477746864 | epot = -22.1439772736805 | etot = -17.4966902015103 -115000 ekin = 1.69616053999229 | erot = 3.11049212247371 | epot = -22.1736739038021 | etot = -17.3670212413361 -116000 ekin = 1.51961045217859 | erot = 2.22203808801726 | epot = -22.2355447345615 | etot = -18.4938961943657 -117000 ekin = 1.69355164638512 | erot = 2.33913072714747 | epot = -22.2671845473364 | etot = -18.2345021738038 -118000 ekin = 2.1960991163694 | erot = 2.33815079858085 | epot = -22.2453229868293 | etot = -17.7110730718791 -119000 ekin = 2.55982892523823 | erot = 2.47378749563683 | epot = -22.2824155531543 | etot = -17.2487991322793 -120000 ekin = 1.76091001620491 | erot = 2.1741296357231 | epot = -22.2369948282136 | etot = -18.3019551762855 -121000 ekin = 2.80671234452976 | erot = 2.30128219469303 | epot = -22.2260257995407 | etot = -17.1180312603179 -122000 ekin = 3.23136903340218 | erot = 3.30036165167127 | epot = -22.2515019863338 | etot = -15.7197713012603 -123000 ekin = 2.8561114897291 | erot = 3.24294818442618 | epot = -22.2018342366988 | etot = -16.1027745625435 -124000 ekin = 2.14842162472016 | erot = 2.7693802805091 | epot = -22.0303368839078 | etot = -17.1125349786785 -125000 ekin = 1.83317468651689 | erot = 1.37271219749613 | epot = -21.8885764971633 | etot = -18.6826896131502 -126000 ekin = 2.45181092117661 | erot = 3.08753876167365 | epot = -21.8912653158441 | etot = -16.3519156329938 -127000 ekin = 2.39800706812202 | erot = 2.35255982488708 | epot = -21.8786845575463 | etot = -17.1281176645372 -128000 ekin = 2.72073389273301 | erot = 1.81206134758344 | epot = -21.8246886433981 | etot = -17.2918934030816 -129000 ekin = 2.76648233159587 | erot = 2.90133130407443 | epot = -21.9103698595755 | etot = -16.2425562239052 -130000 ekin = 3.26919771496399 | erot = 2.56804213542044 | epot = -22.0468205769693 | etot = -16.2095807265849 -131000 ekin = 2.65797021501453 | erot = 2.51912811588696 | epot = -22.1046945041584 | etot = -16.9275961732569 -132000 ekin = 2.60615175826329 | erot = 3.39821871959342 | epot = -22.1393658191679 | etot = -16.1349953413112 -133000 ekin = 2.01702653257964 | erot = 2.88164356754679 | epot = -22.1083395633022 | etot = -17.2096694631758 -134000 ekin = 1.62732528940444 | erot = 1.66916296573806 | epot = -22.0617984863721 | etot = -18.7653102312296 -135000 ekin = 2.44472224525446 | erot = 2.12100291286044 | epot = -22.0290071826116 | etot = -17.4632820244967 -136000 ekin = 2.29361895961086 | erot = 3.04813516280966 | epot = -21.9240579822781 | etot = -16.5823038598575 -137000 ekin = 2.71943103843212 | erot = 2.46250134466529 | epot = -21.759346222065 | etot = -16.5774138389676 -138000 ekin = 3.29026615453928 | erot = 1.74005246857097 | epot = -21.7424803627639 | etot = -16.7121617396537 -139000 ekin = 2.76078280183931 | erot = 1.72093988964439 | epot = -21.8915740702781 | etot = -17.4098513787944 -140000 ekin = 2.72717929836212 | erot = 2.46093572161851 | epot = -21.9730696792527 | etot = -16.784954659272 -141000 ekin = 2.79178566984556 | erot = 2.45152416051809 | epot = -21.9760531770405 | etot = -16.7327433466769 -142000 ekin = 3.51808959230238 | erot = 3.47662361887462 | epot = -21.9144706671159 | etot = -14.9197574559389 -143000 ekin = 2.56674276565954 | erot = 2.02320192154355 | epot = -21.887847774869 | etot = -17.2979030876659 -144000 ekin = 3.71876753045239 | erot = 3.03518010984555 | epot = -21.8693810552709 | etot = -15.115433414973 -145000 ekin = 3.61067898932004 | erot = 2.70461629179152 | epot = -21.7768865247848 | etot = -15.4615912436733 -146000 ekin = 3.85672431702576 | erot = 2.48360222237068 | epot = -21.7383083831155 | etot = -15.3979818437191 -147000 ekin = 3.26264642879795 | erot = 2.07790943830875 | epot = -21.612808589745 | etot = -16.2722527226383 -148000 ekin = 2.49411629896921 | erot = 1.64570933977901 | epot = -21.3601881264357 | etot = -17.2203624876875 -149000 ekin = 2.73353556199719 | erot = 2.27529903215971 | epot = -21.180923940444 | etot = -16.1720893462871 -150000 ekin = 2.6282457385967 | erot = 2.90058901460194 | epot = -21.0864924194498 | etot = -15.5576576662512 -151000 ekin = 2.07954165316093 | erot = 2.1164125590575 | epot = -20.9951076802445 | etot = -16.7991534680261 -152000 ekin = 2.41868973763601 | erot = 2.60413735099777 | epot = -20.8520585412647 | etot = -15.8292314526309 -153000 ekin = 2.12569822788918 | erot = 2.25674944787518 | epot = -20.8874716791535 | etot = -16.5050240033891 -154000 ekin = 2.34486280100484 | erot = 2.61050919353092 | epot = -20.9924730886396 | etot = -16.0371010941038 -155000 ekin = 2.06912274657395 | erot = 3.0299583491991 | epot = -21.0207700832301 | etot = -15.921688987457 -156000 ekin = 2.03235057930374 | erot = 3.18386486882217 | epot = -20.8574059636368 | etot = -15.6411905155109 -157000 ekin = 2.3579061324469 | erot = 1.91132393217369 | epot = -20.8256173876826 | etot = -16.556387323062 -158000 ekin = 2.17332819176356 | erot = 2.47832446500284 | epot = -20.9206749462161 | etot = -16.2690222894497 -159000 ekin = 2.87139796431922 | erot = 2.29125458595932 | epot = -21.0425793637301 | etot = -15.8799268134516 -160000 ekin = 2.19495281512895 | erot = 2.37206762182712 | epot = -21.12868212155 | etot = -16.5616616845939 -161000 ekin = 2.13209841436583 | erot = 2.44149028746738 | epot = -21.2267263358883 | etot = -16.6531376340551 -162000 ekin = 1.75046056470489 | erot = 2.66847316377717 | epot = -21.2792984888785 | etot = -16.8603647603965 -163000 ekin = 2.22203312194875 | erot = 2.03600602857084 | epot = -21.4244626156303 | etot = -17.1664234651107 -164000 ekin = 2.74926161019501 | erot = 1.42936965542836 | epot = -21.5631783920293 | etot = -17.384547126406 -165000 ekin = 2.66465183950737 | erot = 2.28908630196103 | epot = -21.572272285795 | etot = -16.6185341443266 -166000 ekin = 3.29267065001881 | erot = 2.38564084157004 | epot = -21.5039232020267 | etot = -15.8256117104378 -167000 ekin = 3.03664818915841 | erot = 2.03669674074452 | epot = -21.5747204885882 | etot = -16.5013755586853 -168000 ekin = 3.16556842965113 | erot = 1.85206282714724 | epot = -21.6223493129218 | etot = -16.6047180561234 -169000 ekin = 2.24511985727904 | erot = 2.66889068764969 | epot = -21.5368970033532 | etot = -16.6228864584245 -170000 ekin = 2.43734116474603 | erot = 2.49716986363814 | epot = -21.3912465276853 | etot = -16.4567354993011 -171000 ekin = 1.90620260936893 | erot = 2.39687883544744 | epot = -21.3008997539566 | etot = -16.9978183091402 -172000 ekin = 2.87444998880216 | erot = 3.21713663160875 | epot = -21.2616188758685 | etot = -15.1700322554576 -173000 ekin = 2.74942738368889 | erot = 2.14120450530294 | epot = -21.2850360200821 | etot = -16.3944041310903 -174000 ekin = 2.4529377396394 | erot = 2.23261644076142 | epot = -21.3299047479428 | etot = -16.644350567542 -175000 ekin = 2.84864650053625 | erot = 2.37733794803682 | epot = -21.2943230039461 | etot = -16.068338555373 -176000 ekin = 2.13647755199109 | erot = 1.89602819204849 | epot = -21.3605335602015 | etot = -17.3280278161619 -177000 ekin = 2.57740970525463 | erot = 2.74252419383388 | epot = -21.3306809364134 | etot = -16.0107470373249 -178000 ekin = 1.83680522170069 | erot = 2.5856914127028 | epot = -21.2632846497336 | etot = -16.8407880153301 -179000 ekin = 2.51484018139121 | erot = 2.38459479892641 | epot = -21.325303559771 | etot = -16.4258685794534 -180000 ekin = 1.88523508330591 | erot = 2.46381998482447 | epot = -21.4811020579528 | etot = -17.1320469898224 -181000 ekin = 1.75689043588625 | erot = 3.04324017089631 | epot = -21.474228259015 | etot = -16.6740976522324 -182000 ekin = 1.56534231241504 | erot = 2.04864866727399 | epot = -21.4129540971941 | etot = -17.798963117505 -183000 ekin = 2.00287899563344 | erot = 2.82515065812734 | epot = -21.49258719815 | etot = -16.6645575443892 -184000 ekin = 2.68544625765532 | erot = 2.43626281495748 | epot = -21.6103862218356 | etot = -16.4886771492228 -185000 ekin = 2.99891111533195 | erot = 3.19602779235331 | epot = -21.6822175762628 | etot = -15.4872786685775 -186000 ekin = 3.18195376963592 | erot = 2.43765957688182 | epot = -21.7117512273523 | etot = -16.0921378808346 -187000 ekin = 2.64722090162018 | erot = 3.43145857630564 | epot = -21.6694156065006 | etot = -15.5907361285748 -188000 ekin = 2.8593721905413 | erot = 3.05764002667605 | epot = -21.6129263142805 | etot = -15.6959140970631 -189000 ekin = 2.64258352431382 | erot = 1.81957536948003 | epot = -21.5503774009301 | etot = -17.0882185071363 -190000 ekin = 2.2190608435254 | erot = 1.84740673329965 | epot = -21.5105703637082 | etot = -17.4441027868831 -191000 ekin = 2.27442549063464 | erot = 2.06581774328105 | epot = -21.4485511972947 | etot = -17.108307963379 -192000 ekin = 2.27419285809427 | erot = 3.10822480468651 | epot = -21.4844439428341 | etot = -16.1020262800533 -193000 ekin = 1.95256612457884 | erot = 1.88944690058107 | epot = -21.4719648319093 | etot = -17.6299518067494 -194000 ekin = 2.46290863552507 | erot = 2.02714246570739 | epot = -21.3483686370757 | etot = -16.8583175358433 -195000 ekin = 3.12615833704228 | erot = 2.09882827884293 | epot = -21.2854694780647 | etot = -16.0604828621794 -196000 ekin = 2.70126861243405 | erot = 2.51307250710585 | epot = -21.2052184052664 | etot = -15.9908772857265 -197000 ekin = 2.55113347479427 | erot = 2.07490331769114 | epot = -21.0379488001649 | etot = -16.4119120076795 -198000 ekin = 2.7091171175815 | erot = 1.79542986755821 | epot = -21.0311079948236 | etot = -16.5265610096839 -199000 ekin = 2.57086088527333 | erot = 2.33194065149168 | epot = -21.0448935828999 | etot = -16.1420920461349 -200000 ekin = 2.89149033048946 | erot = 1.42165157230865 | epot = -21.03770919399 | etot = -16.7245672911919 -201000 ekin = 2.68304721320748 | erot = 1.55647352804279 | epot = -21.0368254418007 | etot = -16.7973047005504 -202000 ekin = 2.2656487707054 | erot = 2.24246330836477 | epot = -20.9783437689148 | etot = -16.4702316898446 -203000 ekin = 2.11263799464235 | erot = 2.0311722239375 | epot = -20.9045528293636 | etot = -16.7607426107837 -204000 ekin = 2.10289033168206 | erot = 1.89431766090034 | epot = -20.917707897003 | etot = -16.9204999044206 -205000 ekin = 1.32594040742044 | erot = 2.12787440210413 | epot = -20.9650467335179 | etot = -17.5112319239933 -206000 ekin = 1.37942510627947 | erot = 2.255876437166 | epot = -20.9344799697865 | etot = -17.299178426341 -207000 ekin = 1.89707208497052 | erot = 1.80792832329628 | epot = -21.0372131039119 | etot = -17.3322126956451 -208000 ekin = 1.82394216235567 | erot = 3.24636401083921 | epot = -21.2905133091558 | etot = -16.2202071359609 -209000 ekin = 2.80235035495642 | erot = 2.34817422826193 | epot = -21.4119988544966 | etot = -16.2614742712782 -210000 ekin = 3.17268831077415 | erot = 3.11920168004874 | epot = -21.4880486169942 | etot = -15.1961586261713 -211000 ekin = 2.46911290485391 | erot = 2.09583435351186 | epot = -21.6131156278285 | etot = -17.0481683694628 -212000 ekin = 2.36983963899524 | erot = 1.93490727968814 | epot = -21.6916906588951 | etot = -17.3869437402117 -213000 ekin = 1.90089387455099 | erot = 2.5187405361218 | epot = -21.7688631446424 | etot = -17.3492287339696 -214000 ekin = 1.97453946438608 | erot = 2.49804990679736 | epot = -21.7968032544022 | etot = -17.3242138832188 -215000 ekin = 1.97170537707849 | erot = 3.1720109210939 | epot = -21.7980499435109 | etot = -16.6543336453385 -216000 ekin = 1.89064429395263 | erot = 1.88113651267029 | epot = -21.7625464985643 | etot = -17.9907656919414 -217000 ekin = 2.0626433286583 | erot = 1.95286476791462 | epot = -21.8181895344454 | etot = -17.8026814378725 -218000 ekin = 2.31967181974704 | erot = 1.6896622434335 | epot = -21.7699992955268 | etot = -17.7606652323462 -219000 ekin = 2.46739391618502 | erot = 2.20775453602831 | epot = -21.776978875084 | etot = -17.1018304228706 -220000 ekin = 1.73785505731585 | erot = 3.0372433480804 | epot = -21.7321393101048 | etot = -16.9570409047086 -221000 ekin = 1.778697043089 | erot = 2.7846909329313 | epot = -21.7425830987872 | etot = -17.1791951227669 -222000 ekin = 2.62634865011186 | erot = 2.86077326472522 | epot = -21.7007933593054 | etot = -16.2136714444683 -223000 ekin = 3.04431297723215 | erot = 1.94008328047868 | epot = -21.7188465939138 | etot = -16.734450336203 -224000 ekin = 2.71939424183677 | erot = 2.42480251627533 | epot = -21.6866518782312 | etot = -16.5424551201191 -225000 ekin = 2.02593449761365 | erot = 3.37613250979673 | epot = -21.6919775986917 | etot = -16.2899105912813 -226000 ekin = 2.36496088602628 | erot = 2.39060577783945 | epot = -21.7612411053054 | etot = -17.0056744414397 -227000 ekin = 2.73527371921374 | erot = 2.63040468048003 | epot = -21.8235720454426 | etot = -16.4578936457488 -228000 ekin = 2.09009153610323 | erot = 2.26861924367323 | epot = -21.8859446312141 | etot = -17.5272338514377 -229000 ekin = 1.80131280326501 | erot = 1.7963110804324 | epot = -21.9677974652423 | etot = -18.3701735815449 -230000 ekin = 2.77436270232913 | erot = 2.22792046726092 | epot = -21.9902739646399 | etot = -16.9879907950498 -231000 ekin = 3.15789416871844 | erot = 2.77494856675301 | epot = -21.9771750398138 | etot = -16.0443323043424 -232000 ekin = 1.86920525086143 | erot = 1.70617009970185 | epot = -22.0127465263534 | etot = -18.4373711757901 -233000 ekin = 1.75915660001321 | erot = 1.56505378532405 | epot = -21.9936912811375 | etot = -18.6694808958002 -234000 ekin = 2.33631680564953 | erot = 2.05523369254154 | epot = -21.9151391633044 | etot = -17.5235886651133 -235000 ekin = 1.95729755108493 | erot = 2.52297007842176 | epot = -21.8622583087295 | etot = -17.3819906792228 -236000 ekin = 2.26174488772854 | erot = 1.90926942275389 | epot = -21.8776848863915 | etot = -17.7066705759091 -237000 ekin = 2.48859859508474 | erot = 2.6489237604941 | epot = -21.9479801146397 | etot = -16.8104577590608 -238000 ekin = 2.21074117955686 | erot = 2.74245988956904 | epot = -22.0027094279364 | etot = -17.0495083588105 -239000 ekin = 2.72897236706913 | erot = 2.49153579775713 | epot = -22.0211522435864 | etot = -16.8006440787602 -240000 ekin = 3.10410575629688 | erot = 2.19185039149975 | epot = -21.9285399490843 | etot = -16.6325838012877 -241000 ekin = 3.04659381738443 | erot = 2.65407823399251 | epot = -21.8553999209703 | etot = -16.1547278695933 -242000 ekin = 2.22634814860329 | erot = 2.33710119371497 | epot = -21.778295180705 | etot = -17.2148458383868 -243000 ekin = 1.53739989500925 | erot = 2.804422651144 | epot = -21.7210994015014 | etot = -17.3792768553481 -244000 ekin = 1.91594160283678 | erot = 2.43897673315061 | epot = -21.6239948430905 | etot = -17.2690765071031 -245000 ekin = 1.9573212108497 | erot = 2.60792757585164 | epot = -21.4969890421964 | etot = -16.931740255495 -246000 ekin = 2.07155268659352 | erot = 2.40712847472271 | epot = -21.4555802858827 | etot = -16.9768991245664 -247000 ekin = 1.55687592357629 | erot = 2.27937051296287 | epot = -21.415801560854 | etot = -17.5795551243148 -248000 ekin = 1.83815644169539 | erot = 2.56757546633135 | epot = -21.4396063392852 | etot = -17.0338744312585 -249000 ekin = 1.79880701831597 | erot = 2.0439839568354 | epot = -21.5116552123395 | etot = -17.6688642371882 -250000 ekin = 1.6819474109243 | erot = 3.39458382990459 | epot = -21.5432862054069 | etot = -16.466754964578 -251000 ekin = 2.13148829031636 | erot = 3.25959517865089 | epot = -21.5335137503413 | etot = -16.142430281374 -252000 ekin = 2.05395839402013 | erot = 2.53819950912971 | epot = -21.5603119938518 | etot = -16.9681540907019 -253000 ekin = 1.65837982841157 | erot = 3.21084156386521 | epot = -21.5856483774528 | etot = -16.716426985176 -254000 ekin = 2.32607189562296 | erot = 3.10904441141191 | epot = -21.5835562113995 | etot = -16.1484399043647 -255000 ekin = 2.50516183463011 | erot = 2.76806754476897 | epot = -21.5622650070292 | etot = -16.2890356276301 -256000 ekin = 1.97348594928106 | erot = 2.62554900973971 | epot = -21.5549569513865 | etot = -16.9559219923657 -257000 ekin = 2.23010268129159 | erot = 3.26394503338319 | epot = -21.5756937773404 | etot = -16.0816460626656 -258000 ekin = 2.0447966409083 | erot = 1.84671550533958 | epot = -21.6926265414806 | etot = -17.8011143952327 -259000 ekin = 2.87403716266236 | erot = 2.7890686554313 | epot = -21.799948240906 | etot = -16.1368424228124 -260000 ekin = 2.90780294403218 | erot = 2.19263097772001 | epot = -21.8560884935551 | etot = -16.7556545718029 -261000 ekin = 2.76828016335186 | erot = 2.34066383431491 | epot = -21.904753347489 | etot = -16.7958093498223 -262000 ekin = 3.52268021990509 | erot = 1.77075610541266 | epot = -21.923252751046 | etot = -16.6298164257282 -263000 ekin = 3.08420493567484 | erot = 2.42539400967894 | epot = -21.8573813915989 | etot = -16.3477824462451 -264000 ekin = 2.24745015945595 | erot = 2.03541588430139 | epot = -21.8692313889178 | etot = -17.5863653451605 -265000 ekin = 1.92522220276231 | erot = 2.5003676829468 | epot = -21.7418152763709 | etot = -17.3162253906618 -266000 ekin = 2.39641107663208 | erot = 3.25288398956727 | epot = -21.6961161037834 | etot = -16.046821037584 -267000 ekin = 1.71111784450077 | erot = 2.23671058890166 | epot = -21.6618183077995 | etot = -17.7139898743971 -268000 ekin = 2.10089423119538 | erot = 3.22434301936133 | epot = -21.6199098144813 | etot = -16.2946725639246 -269000 ekin = 1.9625053447265 | erot = 2.78709438989466 | epot = -21.512378343547 | etot = -16.7627786089258 -270000 ekin = 2.11347862898579 | erot = 2.66955708081142 | epot = -21.4131997021519 | etot = -16.6301639923547 -271000 ekin = 2.18755627878071 | erot = 3.10635949745237 | epot = -21.231195119641 | etot = -15.9372793434079 -272000 ekin = 2.53142755489725 | erot = 2.28018838604503 | epot = -21.0716416692008 | etot = -16.2600257282585 -273000 ekin = 1.9364743445402 | erot = 1.99261296885892 | epot = -21.007557675667 | etot = -17.0784703622679 -274000 ekin = 1.91013630831847 | erot = 2.2120127665723 | epot = -21.0477834541013 | etot = -16.9256343792105 -275000 ekin = 1.79273258693701 | erot = 3.10050032804429 | epot = -21.0858519409205 | etot = -16.1926190259392 -276000 ekin = 3.35719138398128 | erot = 2.41111345420191 | epot = -21.0304226706007 | etot = -15.2621178324176 -277000 ekin = 2.41774397151369 | erot = 1.50719443697989 | epot = -20.9759671563228 | etot = -17.0510287478292 -278000 ekin = 2.53951758510302 | erot = 2.14756601555722 | epot = -20.9653070148297 | etot = -16.2782234141694 -279000 ekin = 1.90856122527452 | erot = 2.38982437581387 | epot = -20.9745429336076 | etot = -16.6761573325192 -280000 ekin = 2.37131544290542 | erot = 3.59489996493466 | epot = -20.85613421052 | etot = -14.8899188026799 -281000 ekin = 1.76889591811704 | erot = 1.7951894912658 | epot = -20.9289254822807 | etot = -17.3648400728979 -282000 ekin = 2.27070827347114 | erot = 3.05009551199377 | epot = -20.8916515658568 | etot = -15.5708477803919 -283000 ekin = 2.18685960365006 | erot = 2.20812220616949 | epot = -20.8474969045899 | etot = -16.4525150947704 -284000 ekin = 1.91940159973892 | erot = 2.20890146173499 | epot = -20.8751887573221 | etot = -16.7468856958482 -285000 ekin = 3.15509933694634 | erot = 1.80738796351619 | epot = -21.0554892608396 | etot = -16.0930019603771 -286000 ekin = 3.87415003559708 | erot = 1.83530883692693 | epot = -21.2366462656484 | etot = -15.5271873931244 -287000 ekin = 3.65191681280166 | erot = 2.913547855761 | epot = -21.3085830740657 | etot = -14.7431184055031 -288000 ekin = 3.25566521528532 | erot = 1.61409275051713 | epot = -21.3016538192157 | etot = -16.4318958534132 -289000 ekin = 2.57277357969492 | erot = 2.7865509468974 | epot = -21.2753452951968 | etot = -15.9160207686044 -290000 ekin = 2.70842209282674 | erot = 2.41918512811132 | epot = -21.2877903800065 | etot = -16.1601831590685 -291000 ekin = 2.06014704473036 | erot = 2.36104758138505 | epot = -21.2845199368975 | etot = -16.8633253107821 -292000 ekin = 2.28556270655109 | erot = 2.04929815389926 | epot = -21.3435089189608 | etot = -17.0086480585104 -293000 ekin = 2.24999256733429 | erot = 2.35234276421049 | epot = -21.4532864362272 | etot = -16.8509511046824 -294000 ekin = 2.93128079968628 | erot = 2.88901294012339 | epot = -21.5344832077337 | etot = -15.7141894679241 -295000 ekin = 2.66786158124138 | erot = 2.29144551421467 | epot = -21.6972562684637 | etot = -16.7379491730076 -296000 ekin = 2.20703931624838 | erot = 2.91798090137806 | epot = -21.7499994740518 | etot = -16.6249792564254 -297000 ekin = 2.17711857895463 | erot = 3.3139407196584 | epot = -21.7438418246471 | etot = -16.2527825260341 -298000 ekin = 2.91263821701566 | erot = 2.35687557807243 | epot = -21.7003108484957 | etot = -16.4307970534076 -299000 ekin = 3.16765240032233 | erot = 2.23927360570976 | epot = -21.8111744518828 | etot = -16.4042484458507 -300000 ekin = 3.29571242152463 | erot = 1.38932168050636 | epot = -21.8854995787115 | etot = -17.2004654766805 -301000 ekin = 2.38336849338668 | erot = 3.30873138065989 | epot = -21.9040100279112 | etot = -16.2119101538647 -302000 ekin = 2.92546415072637 | erot = 3.247691767578 | epot = -21.8700812142841 | etot = -15.6969252959798 -303000 ekin = 2.4103373416559 | erot = 2.62018947425678 | epot = -21.8591741279587 | etot = -16.828647312046 -304000 ekin = 2.22974120288231 | erot = 2.69525972032883 | epot = -21.7977946057185 | etot = -16.8727936825074 -305000 ekin = 2.37900884029014 | erot = 2.39016080950149 | epot = -21.7722637572341 | etot = -17.0030941074424 -306000 ekin = 1.9446171443063 | erot = 2.89927908625624 | epot = -21.772518921465 | etot = -16.9286226909024 -307000 ekin = 2.51296678773709 | erot = 2.07871985749639 | epot = -21.7145354205816 | etot = -17.1228487753482 -308000 ekin = 2.81300442192371 | erot = 2.63068774502107 | epot = -21.7059595575782 | etot = -16.2622673906334 -309000 ekin = 2.33295752921531 | erot = 2.12114847477695 | epot = -21.6789859227475 | etot = -17.2248799187552 -310000 ekin = 2.52283407385729 | erot = 3.21577684610766 | epot = -21.6977338722704 | etot = -15.9591229523054 -311000 ekin = 2.34905401714491 | erot = 3.03961744974846 | epot = -21.7112095513776 | etot = -16.3225380844842 -312000 ekin = 1.82668239636477 | erot = 3.25882975871633 | epot = -21.5839087054203 | etot = -16.4983965503392 -313000 ekin = 1.63596397844578 | erot = 2.08106491982899 | epot = -21.6088054377576 | etot = -17.8917765394829 -314000 ekin = 2.27268061655198 | erot = 2.56861774872119 | epot = -21.622333325343 | etot = -16.7810349600698 -315000 ekin = 2.53123691731374 | erot = 2.1324731770604 | epot = -21.7018350864597 | etot = -17.0381249920856 -316000 ekin = 1.99511026234591 | erot = 1.80085053236165 | epot = -21.7165753862862 | etot = -17.9206145915787 -317000 ekin = 2.11342130166581 | erot = 2.00931752224566 | epot = -21.7049091699378 | etot = -17.5821703460263 -318000 ekin = 2.29657040201996 | erot = 1.9218952520588 | epot = -21.6732020643863 | etot = -17.4547364103076 -319000 ekin = 1.98100978177984 | erot = 1.68241530251755 | epot = -21.5700337503682 | etot = -17.9066086660708 -320000 ekin = 2.46277902525288 | erot = 3.0707129249839 | epot = -21.5118277867106 | etot = -15.9783358364738 -321000 ekin = 1.8533722862421 | erot = 2.67441728470359 | epot = -21.5413634192757 | etot = -17.01357384833 -322000 ekin = 1.94543884879318 | erot = 3.3613066315754 | epot = -21.4649757180038 | etot = -16.1582302376352 -323000 ekin = 1.92582236335168 | erot = 2.08582462630249 | epot = -21.5020070864549 | etot = -17.4903600968007 -324000 ekin = 2.21385975174577 | erot = 2.45972054558752 | epot = -21.6040339423077 | etot = -16.9304536449744 -325000 ekin = 2.71973574551436 | erot = 2.37172075216282 | epot = -21.7154750081878 | etot = -16.6240185105106 -326000 ekin = 1.88834012476607 | erot = 1.92160793718507 | epot = -21.7697066104337 | etot = -17.9597585484825 -327000 ekin = 3.03100650626309 | erot = 1.66914039489952 | epot = -21.8474776692767 | etot = -17.1473307681141 -328000 ekin = 2.74123304387623 | erot = 1.9170666048058 | epot = -21.8856206551572 | etot = -17.2273210064752 -329000 ekin = 2.94158338898171 | erot = 3.13997083102765 | epot = -21.9406516192959 | etot = -15.8590973992865 -330000 ekin = 2.91669398329971 | erot = 2.01301123001111 | epot = -21.9369752911326 | etot = -17.0072700778218 -331000 ekin = 2.28417665381006 | erot = 2.04960167200569 | epot = -21.927160006304 | etot = -17.5933816804883 -332000 ekin = 2.4148148688836 | erot = 3.18178691603942 | epot = -21.9797962539673 | etot = -16.3831944690443 -333000 ekin = 2.45630818257634 | erot = 2.70954264697347 | epot = -22.0834375892948 | etot = -16.917586759745 -334000 ekin = 2.37347521855933 | erot = 2.99534828037212 | epot = -22.119902754337 | etot = -16.7510792554055 -335000 ekin = 2.11274250313861 | erot = 3.56585847378427 | epot = -22.1620352555629 | etot = -16.48343427864 -336000 ekin = 2.63429420241716 | erot = 2.12841745309053 | epot = -22.1384285356293 | etot = -17.3757168801216 -337000 ekin = 2.74014146566976 | erot = 2.73588205536329 | epot = -22.1194416289215 | etot = -16.6434181078884 -338000 ekin = 1.84480508690214 | erot = 2.23455733552335 | epot = -22.1965093971539 | etot = -18.1171469747284 -339000 ekin = 1.56183988387053 | erot = 2.489100411134 | epot = -22.2396203002948 | etot = -18.1886800052903 -340000 ekin = 1.46409027371678 | erot = 4.0512372950447 | epot = -22.1584645354502 | etot = -16.6431369666887 -341000 ekin = 1.68589245970878 | erot = 2.79353148184118 | epot = -22.1393063295445 | etot = -17.6598823879945 -342000 ekin = 1.9632055547669 | erot = 2.74455536956775 | epot = -22.2008946996018 | etot = -17.4931337752671 -343000 ekin = 2.66782090058793 | erot = 3.18156117072004 | epot = -22.2922370675599 | etot = -16.4428549962519 -344000 ekin = 1.78878469299216 | erot = 2.18063379585249 | epot = -22.3229742728833 | etot = -18.3535557840387 -345000 ekin = 1.540972096623 | erot = 1.85836807653953 | epot = -22.3669594635967 | etot = -18.9676192904341 -346000 ekin = 1.69306131915114 | erot = 1.80797582028411 | epot = -22.3312791976866 | etot = -18.8302420582514 -347000 ekin = 1.37617258934979 | erot = 2.61616357123582 | epot = -22.3534264320593 | etot = -18.3610902714737 -348000 ekin = 2.13829045790164 | erot = 2.85908731375532 | epot = -22.3464198630052 | etot = -17.3490420913483 -349000 ekin = 1.82945196641201 | erot = 1.97678849263654 | epot = -22.3619223728943 | etot = -18.5556819138458 -350000 ekin = 1.78944470920989 | erot = 2.50950790539659 | epot = -22.3467767277336 | etot = -18.0478241131271 -351000 ekin = 1.68749587286921 | erot = 2.81742906170281 | epot = -22.4171372510498 | etot = -17.9122123164778 -352000 ekin = 2.77021178817643 | erot = 2.15256178979697 | epot = -22.5877268787862 | etot = -17.6649533008128 -353000 ekin = 3.5651579503159 | erot = 1.46627940614144 | epot = -22.6396840781933 | etot = -17.608246721736 -354000 ekin = 3.44763260550689 | erot = 2.25092776011915 | epot = -22.5553143373262 | etot = -16.8567539717001 -355000 ekin = 2.03402845200418 | erot = 2.90906782343746 | epot = -22.5137132330461 | etot = -17.5706169576044 -356000 ekin = 2.10644486273696 | erot = 3.31938387624324 | epot = -22.5442634045104 | etot = -17.1184346655302 -357000 ekin = 2.76535001946383 | erot = 2.50873330135166 | epot = -22.52215971412 | etot = -17.2480763933045 -358000 ekin = 2.53751054023787 | erot = 2.26477084741189 | epot = -22.5103746530379 | etot = -17.7080932653881 -359000 ekin = 3.23570364771486 | erot = 2.52813698122051 | epot = -22.6019986378314 | etot = -16.838158008896 -360000 ekin = 2.59175576606819 | erot = 1.97223576668381 | epot = -22.6470028729806 | etot = -18.0830113402286 -361000 ekin = 2.61182361704566 | erot = 2.50385714239847 | epot = -22.6927829246934 | etot = -17.5771021652493 -362000 ekin = 2.38475515872101 | erot = 3.84233912950958 | epot = -22.6454854809905 | etot = -16.4183911927599 -363000 ekin = 2.88487115582968 | erot = 1.98709532428838 | epot = -22.5316518293815 | etot = -17.6596853492635 -364000 ekin = 2.24456282663807 | erot = 1.87857741688963 | epot = -22.4065988337859 | etot = -18.2834585902582 -365000 ekin = 2.04295690198209 | erot = 2.81008642631349 | epot = -22.2314366274422 | etot = -17.3783932991466 -366000 ekin = 2.266544192376 | erot = 1.95642386899595 | epot = -22.1933765521819 | etot = -17.97040849081 -367000 ekin = 2.81580114465084 | erot = 2.51878026336671 | epot = -22.2503978612043 | etot = -16.9158164531867 -368000 ekin = 2.81616947616975 | erot = 2.18673959088794 | epot = -22.3700662776457 | etot = -17.367157210588 -369000 ekin = 2.31685128708704 | erot = 2.8485166214536 | epot = -22.4347113127671 | etot = -17.2693434042264 -370000 ekin = 2.66633369096824 | erot = 2.10373843245294 | epot = -22.5097473869516 | etot = -17.7396752635304 -371000 ekin = 2.19554700980946 | erot = 3.61136788339347 | epot = -22.5751109079912 | etot = -16.7681960147883 -372000 ekin = 1.77355024694411 | erot = 3.42422008956619 | epot = -22.6682235461143 | etot = -17.470453209604 -373000 ekin = 2.14882393689494 | erot = 2.79102164241389 | epot = -22.7183823639386 | etot = -17.7785367846297 -374000 ekin = 2.69471790401649 | erot = 3.57888941010137 | epot = -22.8644350080836 | etot = -16.5908276939657 -375000 ekin = 2.40588229328688 | erot = 2.98559431132055 | epot = -22.9231560989464 | etot = -17.5316794943389 -376000 ekin = 3.36525975858234 | erot = 3.24749522030667 | epot = -22.9448546765658 | etot = -16.3320996976767 -377000 ekin = 3.1898535090454 | erot = 2.65440981370779 | epot = -22.8890189773608 | etot = -17.0447556546076 -378000 ekin = 1.54661929765086 | erot = 2.66304115784623 | epot = -22.8894135140088 | etot = -18.6797530585117 -379000 ekin = 1.93848939303329 | erot = 2.54534330055222 | epot = -22.9081180555037 | etot = -18.4242853619182 -380000 ekin = 2.66258042260528 | erot = 2.88895789126712 | epot = -22.9376621442708 | etot = -17.3861238303984 -381000 ekin = 2.95374671041029 | erot = 2.1769850563328 | epot = -22.9816080577256 | etot = -17.8508762909825 -382000 ekin = 2.58850292280408 | erot = 2.01885613358327 | epot = -22.9279053853416 | etot = -18.3205463289542 -383000 ekin = 2.01542491830335 | erot = 2.50444856286716 | epot = -22.9509700194999 | etot = -18.4310965383294 -384000 ekin = 2.10088918623931 | erot = 2.19861971638621 | epot = -22.9637245689725 | etot = -18.664215666347 -385000 ekin = 1.91381637067085 | erot = 1.63023926713733 | epot = -22.9798616984434 | etot = -19.4358060606352 -386000 ekin = 1.55997375471681 | erot = 1.35864886272388 | epot = -23.026401230456 | etot = -20.1077786130153 -387000 ekin = 2.21265030198491 | erot = 1.7501227932087 | epot = -23.0266356759123 | etot = -19.0638625807187 -388000 ekin = 1.98732621523102 | erot = 1.96003045102707 | epot = -22.9343684877508 | etot = -18.9870118214927 -389000 ekin = 2.5418388293764 | erot = 2.33933777400626 | epot = -22.9288764120935 | etot = -18.0476998087109 -390000 ekin = 2.07840415144685 | erot = 1.88714080084969 | epot = -22.8368099519711 | etot = -18.8712649996745 -391000 ekin = 1.85201287716429 | erot = 2.41309749069991 | epot = -22.8035614550317 | etot = -18.5384510871675 -392000 ekin = 2.19897450334475 | erot = 2.90002030847564 | epot = -22.8026053664846 | etot = -17.7036105546642 -393000 ekin = 2.15250422129825 | erot = 3.1954140871906 | epot = -22.8935871868038 | etot = -17.5456688783149 -394000 ekin = 1.99220043003136 | erot = 2.14720550675182 | epot = -22.8839525821639 | etot = -18.7445466453807 -395000 ekin = 2.03384825587122 | erot = 2.5026704188622 | epot = -22.9355340107645 | etot = -18.3990153360311 -396000 ekin = 2.14388612805494 | erot = 1.95887569078926 | epot = -23.0314147787906 | etot = -18.9286529599464 -397000 ekin = 2.39817268086959 | erot = 1.65198489715495 | epot = -23.1381610188687 | etot = -19.0880034408442 -398000 ekin = 3.5848529329223 | erot = 2.5137795193631 | epot = -23.2493671328086 | etot = -17.1507346805232 -399000 ekin = 2.65690410152896 | erot = 1.78815540583896 | epot = -23.3551071826471 | etot = -18.9100476752792 -400000 ekin = 2.5116972230557 | erot = 2.10904464709597 | epot = -23.4242760069967 | etot = -18.803534136845 -401000 ekin = 2.05111703519218 | erot = 2.15375363886755 | epot = -23.4796569613041 | etot = -19.2747862872443 -402000 ekin = 2.43372934314587 | erot = 2.11260100954187 | epot = -23.4682554876931 | etot = -18.9219251350053 -403000 ekin = 2.53598880596584 | erot = 2.81278076880176 | epot = -23.5378775828587 | etot = -18.1891080080911 -404000 ekin = 2.18194702425602 | erot = 2.63711249102604 | epot = -23.6244518702206 | etot = -18.8053923549385 -405000 ekin = 2.45121967393562 | erot = 2.40500763090291 | epot = -23.6357713162683 | etot = -18.7795440114298 -406000 ekin = 2.21958671378093 | erot = 2.24922226746756 | epot = -23.6553601287 | etot = -19.1865511474515 -407000 ekin = 1.98564574231222 | erot = 2.77863717556005 | epot = -23.5607032705187 | etot = -18.7964203526464 -408000 ekin = 2.57646591315375 | erot = 2.58095218000659 | epot = -23.4398366413677 | etot = -18.2824185482073 -409000 ekin = 2.36945583486912 | erot = 2.25935935813466 | epot = -23.3294611001761 | etot = -18.7006459071724 -410000 ekin = 2.02254604345491 | erot = 1.96483214055515 | epot = -23.3122760741247 | etot = -19.3248978901146 -411000 ekin = 1.87895167522371 | erot = 2.65152784802951 | epot = -23.2919254735047 | etot = -18.7614459502515 -412000 ekin = 1.99369299492691 | erot = 2.68971636909523 | epot = -23.2559513781021 | etot = -18.57254201408 -413000 ekin = 2.38900558877156 | erot = 2.64564764432049 | epot = -23.2013938450539 | etot = -18.1667406119618 -414000 ekin = 2.42764300748033 | erot = 1.75174590229272 | epot = -23.1266922276306 | etot = -18.9473033178576 -415000 ekin = 2.76414124953308 | erot = 2.44215852210494 | epot = -23.1817305186064 | etot = -17.9754307469683 -416000 ekin = 2.08280868301927 | erot = 2.76578542751831 | epot = -23.1905832299196 | etot = -18.341989119382 -417000 ekin = 1.99968890800012 | erot = 1.95787693284286 | epot = -23.194417716001 | etot = -19.236851875158 -418000 ekin = 2.38298881868294 | erot = 2.55898711987873 | epot = -23.1586352965619 | etot = -18.2166593580002 -419000 ekin = 2.9839633883085 | erot = 2.57065203496089 | epot = -23.0544780894577 | etot = -17.4998626661883 -420000 ekin = 2.60178854557762 | erot = 2.46052060802045 | epot = -22.9622762729971 | etot = -17.899967119399 -421000 ekin = 2.51720276737396 | erot = 1.77804167911051 | epot = -22.9515897224038 | etot = -18.6563452759193 -422000 ekin = 2.7320348139792 | erot = 1.67298118116889 | epot = -22.9404137463627 | etot = -18.5353977512146 -423000 ekin = 2.13282380031375 | erot = 2.54987675813572 | epot = -22.8157706530705 | etot = -18.133070094621 -424000 ekin = 1.90610672595356 | erot = 2.31894231724673 | epot = -22.7787002443962 | etot = -18.553651201196 -425000 ekin = 2.37366400687573 | erot = 1.95578603620107 | epot = -22.7873996262579 | etot = -18.4579495831811 -426000 ekin = 2.23502410344739 | erot = 2.60951465135819 | epot = -22.8069525247999 | etot = -17.9624137699943 -427000 ekin = 1.88572309905852 | erot = 2.12675775194484 | epot = -22.973782602072 | etot = -18.9613017510686 -428000 ekin = 1.93180562731872 | erot = 2.45432362930894 | epot = -23.1062681387344 | etot = -18.7201388821067 -429000 ekin = 1.72618205037519 | erot = 2.1638575670951 | epot = -23.1203764425356 | etot = -19.2303368250654 -430000 ekin = 2.31236502680075 | erot = 2.14057167953237 | epot = -23.127316365141 | etot = -18.6743796588079 -431000 ekin = 2.45859340033276 | erot = 2.41557475448707 | epot = -23.137683007962 | etot = -18.2635148531422 -432000 ekin = 2.80043339920945 | erot = 2.19140888866301 | epot = -23.1459051340744 | etot = -18.1540628462019 -433000 ekin = 2.2038223816989 | erot = 1.62239062651454 | epot = -23.1902054552061 | etot = -19.3639924469927 -434000 ekin = 2.59117398719482 | erot = 2.35262979682601 | epot = -23.2174180769097 | etot = -18.2736142928889 -435000 ekin = 2.29283868462832 | erot = 2.54026007379789 | epot = -23.1968654207439 | etot = -18.3637666623176 -436000 ekin = 2.43256920688117 | erot = 2.74968424233253 | epot = -23.2466230085986 | etot = -18.0643695593849 -437000 ekin = 1.64425125112848 | erot = 3.23329270267647 | epot = -23.2380191669749 | etot = -18.3604752131699 -438000 ekin = 1.56124620606823 | erot = 2.60252333491232 | epot = -23.1341667906033 | etot = -18.9703972496228 -439000 ekin = 2.30501653948793 | erot = 1.93890022921162 | epot = -23.14170715719 | etot = -18.8977903884904 -440000 ekin = 2.52023257151789 | erot = 3.04669715760005 | epot = -23.2021590525686 | etot = -17.6352293234507 -441000 ekin = 2.79903748157629 | erot = 2.54578114158762 | epot = -23.1760357267403 | etot = -17.8312171035764 -442000 ekin = 2.93503932875119 | erot = 2.87674150367343 | epot = -23.1192988997858 | etot = -17.3075180673612 -443000 ekin = 1.96853850230447 | erot = 1.76444304280728 | epot = -23.0474504745021 | etot = -19.3144689293904 -444000 ekin = 2.00740903163919 | erot = 2.25338146232896 | epot = -22.9768126386128 | etot = -18.7160221446446 -445000 ekin = 2.22543241532629 | erot = 2.06325853122729 | epot = -22.8128736901554 | etot = -18.5241827436018 -446000 ekin = 2.44497213168066 | erot = 2.37296472072563 | epot = -22.7182187420116 | etot = -17.9002818896053 -447000 ekin = 2.27682912672612 | erot = 2.40590062157627 | epot = -22.73821768508 | etot = -18.0554879367776 -448000 ekin = 2.17717815648414 | erot = 1.94002353369628 | epot = -22.8515885285926 | etot = -18.7343868384122 -449000 ekin = 2.21957974285234 | erot = 2.34288028472299 | epot = -22.9413256171992 | etot = -18.3788655896239 -450000 ekin = 2.75054329798646 | erot = 1.97942707751151 | epot = -22.8960066852305 | etot = -18.1660363097325 -451000 ekin = 2.21127283509867 | erot = 2.13383865709095 | epot = -22.93012845553 | etot = -18.5850169633403 -452000 ekin = 2.54342208027875 | erot = 2.35725031977164 | epot = -22.9678192920236 | etot = -18.0671468919732 -453000 ekin = 2.22826691368246 | erot = 1.78505555998555 | epot = -22.9525856519538 | etot = -18.9392631782858 -454000 ekin = 2.43963081757063 | erot = 2.59545869820689 | epot = -22.8816014548474 | etot = -17.8465119390699 -455000 ekin = 2.04579285921012 | erot = 2.79600798010941 | epot = -22.6671256943706 | etot = -17.8253248550511 -456000 ekin = 2.02054568037702 | erot = 2.5142933737518 | epot = -22.4807651427491 | etot = -17.9459260886202 -457000 ekin = 2.62427297855768 | erot = 2.43881475758852 | epot = -22.3628471473124 | etot = -17.2997594111662 -458000 ekin = 2.00982157063058 | erot = 1.99237218757745 | epot = -22.2563036448067 | etot = -18.2541098865987 -459000 ekin = 1.75248702434071 | erot = 2.49686008961238 | epot = -22.2467888503062 | etot = -17.9974417363531 -460000 ekin = 1.91910131837566 | erot = 2.07619395094217 | epot = -22.2400567481829 | etot = -18.2447614788651 -461000 ekin = 1.56844353839394 | erot = 1.28973659789019 | epot = -22.2093526564538 | etot = -19.3511725201697 -462000 ekin = 2.45174884293064 | erot = 1.36031689293857 | epot = -22.3089787954009 | etot = -18.4969130595317 -463000 ekin = 2.64349839520108 | erot = 2.07831354185085 | epot = -22.4300376076151 | etot = -17.7082256705631 -464000 ekin = 2.67299819724031 | erot = 3.73615881795558 | epot = -22.554470130186 | etot = -16.1453131149901 -465000 ekin = 1.95390361110071 | erot = 2.23920710641231 | epot = -22.7384686297881 | etot = -18.545357912275 -466000 ekin = 2.13348556167989 | erot = 2.96280610170109 | epot = -22.8443072066537 | etot = -17.7480155432727 -467000 ekin = 2.46613760277875 | erot = 2.11616591175904 | epot = -23.0265043956358 | etot = -18.444200881098 -468000 ekin = 1.99036864211387 | erot = 1.62858187482038 | epot = -23.0961237334908 | etot = -19.4771732165565 -469000 ekin = 2.49659836745282 | erot = 2.63661728128629 | epot = -23.1411267023576 | etot = -18.0079110536185 -470000 ekin = 2.92199371715687 | erot = 3.21712399422296 | epot = -23.1457817109815 | etot = -17.0066639996017 -471000 ekin = 2.36477645073574 | erot = 1.72314859686431 | epot = -23.1045733261495 | etot = -19.0166482785494 -472000 ekin = 2.18519498855062 | erot = 2.00240720258206 | epot = -23.072627104452 | etot = -18.8850249133193 -473000 ekin = 2.3714321613692 | erot = 2.86124663404655 | epot = -23.0328429128019 | etot = -17.8001641173862 -474000 ekin = 2.1857949588469 | erot = 2.60051446256873 | epot = -22.9136735669303 | etot = -18.1273641455147 -475000 ekin = 2.39661135768768 | erot = 2.01358694537797 | epot = -22.813046501162 | etot = -18.4028481980963 -476000 ekin = 2.10676579065005 | erot = 2.60327856915634 | epot = -22.8119267991277 | etot = -18.1018824393213 -477000 ekin = 2.53295314095718 | erot = 3.55510942450984 | epot = -22.7955031957515 | etot = -16.7074406302845 -478000 ekin = 2.40630114318287 | erot = 2.73236241457618 | epot = -22.7034337758127 | etot = -17.5647702180536 -479000 ekin = 1.27745698905519 | erot = 2.99245403250463 | epot = -22.6605920931777 | etot = -18.3906810716179 -480000 ekin = 1.82390564518045 | erot = 2.13920354248295 | epot = -22.6299626931083 | etot = -18.6668535054449 -481000 ekin = 2.3880478628611 | erot = 3.18399864702822 | epot = -22.6553769169915 | etot = -17.0833304071022 -482000 ekin = 3.20116727691415 | erot = 2.41976760575225 | epot = -22.6125762236254 | etot = -16.991641340959 -483000 ekin = 3.03846588981692 | erot = 2.48627946336888 | epot = -22.5774232520165 | etot = -17.0526778988307 -484000 ekin = 2.70181776439228 | erot = 2.52677846233176 | epot = -22.6070502809988 | etot = -17.3784540542748 -485000 ekin = 3.27224317472663 | erot = 2.42431335826243 | epot = -22.5997277235211 | etot = -16.9031711905321 -486000 ekin = 1.96596043103987 | erot = 1.75891125021975 | epot = -22.642547970919 | etot = -18.9176762896594 -487000 ekin = 2.6234378417876 | erot = 2.50755895035553 | epot = -22.7339556642929 | etot = -17.6029588721497 -488000 ekin = 1.75208074499658 | erot = 2.6448687233026 | epot = -22.7917400975639 | etot = -18.3947906292648 -489000 ekin = 2.08733298303259 | erot = 2.9523180967106 | epot = -22.881879447047 | etot = -17.8422283673038 -490000 ekin = 2.30760030156363 | erot = 2.33161319100248 | epot = -22.8847649865187 | etot = -18.2455514939526 -491000 ekin = 2.48196214295004 | erot = 2.59523958504393 | epot = -22.8776771178079 | etot = -17.800475389814 -492000 ekin = 3.28209206383218 | erot = 2.1852502939697 | epot = -22.8577625078557 | etot = -17.3904201500538 -493000 ekin = 3.37967323337949 | erot = 2.35355143859173 | epot = -22.8047552632571 | etot = -17.0715305912858 -494000 ekin = 3.57464120696614 | erot = 2.24853455202993 | epot = -22.8042956353342 | etot = -16.9811198763381 -495000 ekin = 2.5052992174061 | erot = 2.15850924694968 | epot = -22.7996067752132 | etot = -18.1357983108574 -496000 ekin = 1.95429188426678 | erot = 3.5825937389492 | epot = -22.837298805698 | etot = -17.3004131824821 -497000 ekin = 2.22186292996358 | erot = 2.46502235984734 | epot = -22.8432554612651 | etot = -18.1563701714542 -498000 ekin = 1.72648192614392 | erot = 2.39641281876546 | epot = -22.7792810810776 | etot = -18.6563863361682 -499000 ekin = 2.44591165293457 | erot = 2.82720242160824 | epot = -22.7953427712295 | etot = -17.5222286966867 -500000 ekin = 2.7851302139546 | erot = 2.23270136622152 | epot = -22.8991185931508 | etot = -17.8812870129746 -501000 ekin = 2.99439211318652 | erot = 1.97783069072832 | epot = -22.9279475016441 | etot = -17.9557246977292 -502000 ekin = 2.9862206030979 | erot = 1.79973926744011 | epot = -22.956155459855 | etot = -18.170195589317 -503000 ekin = 2.51500932637374 | erot = 2.88863666961797 | epot = -22.9858023469845 | etot = -17.5821563509928 -504000 ekin = 2.84387999289216 | erot = 2.69340549636984 | epot = -22.9170131486245 | etot = -17.3797276593625 -505000 ekin = 2.95569075243612 | erot = 2.602585876956 | epot = -22.9907249028698 | etot = -17.4324482734777 -506000 ekin = 2.19812159740513 | erot = 1.96718410179931 | epot = -23.0318373952185 | etot = -18.8665316960141 -507000 ekin = 2.26250501037088 | erot = 2.70461320689487 | epot = -22.9974394720575 | etot = -18.0303212547917 -508000 ekin = 2.63634784309456 | erot = 2.05036585895923 | epot = -23.0090804345496 | etot = -18.3223667324958 -509000 ekin = 2.94151668821484 | erot = 2.91160221114196 | epot = -23.0621014211554 | etot = -17.2089825217986 -510000 ekin = 2.26258273420884 | erot = 2.8155823326395 | epot = -23.1767418648115 | etot = -18.0985767979631 -511000 ekin = 2.89871784417207 | erot = 2.15651428734314 | epot = -23.2992796007865 | etot = -18.2440474692713 -512000 ekin = 2.18241701331153 | erot = 2.32471024525139 | epot = -23.3744961479659 | etot = -18.867368889403 -513000 ekin = 1.69086971293502 | erot = 2.8783745660792 | epot = -23.3843289700052 | etot = -18.8150846909909 -514000 ekin = 1.72546832120935 | erot = 2.33325616873572 | epot = -23.3798363194193 | etot = -19.3211118294743 -515000 ekin = 1.99840202228396 | erot = 1.80255577214453 | epot = -23.3747953532199 | etot = -19.5738375587914 -516000 ekin = 3.02853898966319 | erot = 1.54004582498168 | epot = -23.3386782444955 | etot = -18.7700934298506 -517000 ekin = 2.46344499126943 | erot = 2.11388687673044 | epot = -23.3135548350045 | etot = -18.7362229670046 -518000 ekin = 2.0362169291028 | erot = 2.51796163147274 | epot = -23.2504637438686 | etot = -18.6962851832931 -519000 ekin = 1.58660977959654 | erot = 1.63211831489779 | epot = -23.2081782818072 | etot = -19.9894501873129 -520000 ekin = 2.16318611090781 | erot = 1.89658879288914 | epot = -23.2096974204855 | etot = -19.1499225166885 -521000 ekin = 1.97684804456375 | erot = 2.08731550434085 | epot = -23.2527315496486 | etot = -19.188568000744 -522000 ekin = 2.69827007409924 | erot = 2.19560826391663 | epot = -23.3133573112007 | etot = -18.4194789731848 -523000 ekin = 2.2478363305578 | erot = 1.67442261891177 | epot = -23.3604551637841 | etot = -19.4381962143146 -524000 ekin = 2.34895041229461 | erot = 2.10078601700867 | epot = -23.381233923661 | etot = -18.9314974943577 -525000 ekin = 2.13155817393156 | erot = 2.07239357304026 | epot = -23.4395046885398 | etot = -19.235552941568 -526000 ekin = 2.50234900291801 | erot = 2.25431525777582 | epot = -23.4988198653879 | etot = -18.7421556046941 -527000 ekin = 3.03511403104629 | erot = 1.80504692374136 | epot = -23.5562539149297 | etot = -18.7160929601421 -528000 ekin = 2.56074044727573 | erot = 2.54331285469023 | epot = -23.5735936308822 | etot = -18.4695403289162 -529000 ekin = 2.37500349152887 | erot = 1.93006279746846 | epot = -23.5580125050353 | etot = -19.252946216038 -530000 ekin = 3.34194424343389 | erot = 3.41373524710891 | epot = -23.4507267657596 | etot = -16.6950472752168 -531000 ekin = 2.42341072166937 | erot = 2.35978455298084 | epot = -23.1501712562452 | etot = -18.366975981595 -532000 ekin = 2.58886764526949 | erot = 1.86996947608086 | epot = -23.1663546344342 | etot = -18.7075175130839 -533000 ekin = 2.18022742299593 | erot = 2.16045486833456 | epot = -23.380637574335 | etot = -19.0399552830045 -534000 ekin = 2.34791679374047 | erot = 2.03855517230123 | epot = -23.463831563993 | etot = -19.0773595979513 -535000 ekin = 2.37817813408508 | erot = 2.07397219148902 | epot = -23.4832900392636 | etot = -19.0311397136895 -536000 ekin = 2.46210672665338 | erot = 1.8947790016655 | epot = -23.4672059982835 | etot = -19.1103202699646 -537000 ekin = 1.71186030024847 | erot = 2.1344462698512 | epot = -23.5555571897054 | etot = -19.7092506196057 -538000 ekin = 2.16671541009104 | erot = 2.76559932728314 | epot = -23.6609154290595 | etot = -18.7286006916853 -539000 ekin = 2.16621132370208 | erot = 2.29104148484627 | epot = -23.7377569804062 | etot = -19.2805041718579 -540000 ekin = 2.37610335621453 | erot = 1.63780764528448 | epot = -23.7325177726622 | etot = -19.7186067711632 -541000 ekin = 2.61201541528826 | erot = 2.52498155703037 | epot = -23.6623419839272 | etot = -18.5253450116085 -542000 ekin = 2.72898292667725 | erot = 2.10989431729706 | epot = -23.7000798212983 | etot = -18.861202577324 -543000 ekin = 2.72070152721044 | erot = 1.85641764017256 | epot = -23.6069628280622 | etot = -19.0298436606792 -544000 ekin = 2.11779438939827 | erot = 1.50576740930398 | epot = -23.5826778503359 | etot = -19.9591160516337 -545000 ekin = 1.70778076743634 | erot = 2.56995673058895 | epot = -23.583343914622 | etot = -19.3056064165967 -546000 ekin = 2.3805758278215 | erot = 1.86648142267507 | epot = -23.6114100683877 | etot = -19.3643528178911 -547000 ekin = 2.45245186799104 | erot = 2.45758854207408 | epot = -23.6611856045782 | etot = -18.7511451945131 -548000 ekin = 2.39042546399151 | erot = 2.39603897463391 | epot = -23.6735607421256 | etot = -18.8870963035002 -549000 ekin = 2.59234094316699 | erot = 2.03286284306236 | epot = -23.6646331709071 | etot = -19.0394293846778 -550000 ekin = 1.99320521419403 | erot = 1.84894458030441 | epot = -23.6669378249973 | etot = -19.8247880304988 -551000 ekin = 2.44898809443739 | erot = 2.0219242208942 | epot = -23.6235443659669 | etot = -19.1526320506353 -552000 ekin = 2.69502802037877 | erot = 1.40870700355959 | epot = -23.4610294466586 | etot = -19.3572944227202 -553000 ekin = 1.76133393557171 | erot = 2.61023484195893 | epot = -23.254624102607 | etot = -18.8830553250764 -554000 ekin = 2.30411800065654 | erot = 2.33064249173903 | epot = -23.2181242479504 | etot = -18.5833637555548 -555000 ekin = 3.27047384641377 | erot = 1.6422371773255 | epot = -23.1973795659522 | etot = -18.2846685422129 -556000 ekin = 2.90314776795354 | erot = 2.59897046564306 | epot = -23.1460736374982 | etot = -17.6439554039016 -557000 ekin = 2.91673821282758 | erot = 3.16411852075219 | epot = -23.1459806883625 | etot = -17.0651239547827 -558000 ekin = 2.82902946234823 | erot = 2.71147602500681 | epot = -23.1195640745749 | etot = -17.5790585872199 -559000 ekin = 2.44501247164481 | erot = 3.2946921444891 | epot = -23.1638653139107 | etot = -17.4241606977768 -560000 ekin = 2.31903153876872 | erot = 2.34794389762528 | epot = -23.1221343768987 | etot = -18.4551589405047 -561000 ekin = 2.04778211145284 | erot = 2.88230317636058 | epot = -23.0254469759625 | etot = -18.0953616881491 -562000 ekin = 2.23097749779459 | erot = 3.71637560430596 | epot = -22.8954878936692 | etot = -16.9481347915687 -563000 ekin = 3.13589796296721 | erot = 2.30360204009239 | epot = -22.9672461823823 | etot = -17.5277461793227 -564000 ekin = 2.43468506100309 | erot = 2.37780089042927 | epot = -22.9400399192094 | etot = -18.127553967777 -565000 ekin = 2.74707381978168 | erot = 2.07635638038451 | epot = -22.9404100305402 | etot = -18.116979830374 -566000 ekin = 2.4222424655432 | erot = 2.23675573588529 | epot = -22.964317030412 | etot = -18.3053188289835 -567000 ekin = 2.66075150820169 | erot = 2.00813116398473 | epot = -23.0598382212572 | etot = -18.3909555490708 -568000 ekin = 3.04180913535304 | erot = 1.98452490185762 | epot = -23.1129541055894 | etot = -18.0866200683787 -569000 ekin = 3.57499094364799 | erot = 2.06992850387417 | epot = -23.117960007112 | etot = -17.4730405595898 -570000 ekin = 2.66020768003306 | erot = 2.34012507933247 | epot = -23.1339632056245 | etot = -18.133630446259 -571000 ekin = 1.94924082891001 | erot = 2.84220462440654 | epot = -23.0609933320748 | etot = -18.2695478787583 -572000 ekin = 2.41536650984725 | erot = 2.40871845587551 | epot = -23.0560879925718 | etot = -18.232003026849 -573000 ekin = 1.75696177901838 | erot = 2.31680084915611 | epot = -23.107424588529 | etot = -19.0336619603545 -574000 ekin = 2.1071071848933 | erot = 2.59270710144433 | epot = -23.1966129698341 | etot = -18.4967986834965 -575000 ekin = 2.37668274547159 | erot = 2.79832262601946 | epot = -23.2697902014998 | etot = -18.0947848300088 -576000 ekin = 2.17648663043414 | erot = 3.28534323951364 | epot = -23.3035961850707 | etot = -17.8417663151229 -577000 ekin = 2.48653402473871 | erot = 2.29382004189646 | epot = -23.3348256872303 | etot = -18.5544716205951 -578000 ekin = 2.63497646120015 | erot = 2.38541222697017 | epot = -23.3938829535157 | etot = -18.3734942653454 -579000 ekin = 2.68807604490538 | erot = 1.70832449354964 | epot = -23.3711370904455 | etot = -18.9747365519905 -580000 ekin = 2.35405412912148 | erot = 2.8553242408976 | epot = -23.3804498064804 | etot = -18.1710714364613 -581000 ekin = 2.45622900796811 | erot = 2.60461398742566 | epot = -23.3507481421638 | etot = -18.28990514677 -582000 ekin = 2.33821855888559 | erot = 3.20610340688907 | epot = -23.4193095100182 | etot = -17.8749875442436 -583000 ekin = 1.96183085357235 | erot = 2.81826367270291 | epot = -23.5872275727996 | etot = -18.8071330465243 -584000 ekin = 2.00096559581716 | erot = 1.71662185522173 | epot = -23.6766993596687 | etot = -19.9591119086298 -585000 ekin = 2.2650842350347 | erot = 2.08204874292297 | epot = -23.7234738719865 | etot = -19.3763408940288 -586000 ekin = 2.20207640113325 | erot = 1.96861811478536 | epot = -23.6859240119471 | etot = -19.5152294960285 -587000 ekin = 3.67938790357027 | erot = 1.82484412869377 | epot = -23.6634672548209 | etot = -18.1592352225569 -588000 ekin = 3.48089636122829 | erot = 2.30691916064612 | epot = -23.5643712718911 | etot = -17.7765557500167 -589000 ekin = 2.63030533099327 | erot = 2.9702466869305 | epot = -23.3767694123201 | etot = -17.7762173943963 -590000 ekin = 1.60813837628253 | erot = 2.03263132264272 | epot = -23.1946522249358 | etot = -19.5538825260106 -591000 ekin = 1.81653381805571 | erot = 1.75591263591366 | epot = -23.1302877005862 | etot = -19.5578412466168 -592000 ekin = 2.57247249135485 | erot = 2.59257155085885 | epot = -23.1533569826366 | etot = -17.9883129404229 -593000 ekin = 2.43678836763256 | erot = 1.78797409267748 | epot = -23.1035527853187 | etot = -18.8787903250087 -594000 ekin = 2.12126425466624 | erot = 2.16319102375819 | epot = -23.0537965790237 | etot = -18.7693413005993 -595000 ekin = 2.61494655403376 | erot = 2.04015446622256 | epot = -23.041588630948 | etot = -18.3864876106917 -596000 ekin = 2.58385979830463 | erot = 2.125984026295 | epot = -23.0987578414776 | etot = -18.388914016878 -597000 ekin = 3.0356528884646 | erot = 3.13920569000609 | epot = -23.0959220060406 | etot = -16.92106342757 -598000 ekin = 3.448018111133 | erot = 2.86438132305443 | epot = -23.1524961324829 | etot = -16.8400966982954 -599000 ekin = 2.14568317629689 | erot = 3.49762367929462 | epot = -23.1236320419091 | etot = -17.4803251863176 -600000 ekin = 2.20856388598401 | erot = 2.50873295237986 | epot = -23.1229244675557 | etot = -18.4056276291918 -601000 ekin = 2.82305805419651 | erot = 2.82785171484619 | epot = -23.093817009667 | etot = -17.4429072406243 -602000 ekin = 2.33756515640057 | erot = 2.3814563165261 | epot = -23.0592036595801 | etot = -18.3401821866535 -603000 ekin = 1.93163217766375 | erot = 1.95544716703194 | epot = -22.941151667404 | etot = -19.0540723227083 -604000 ekin = 2.67918576808855 | erot = 3.14415640026539 | epot = -22.9119901406973 | etot = -17.0886479723434 -605000 ekin = 2.72017891571417 | erot = 2.06410352610178 | epot = -22.9250944568005 | etot = -18.1408120149845 -606000 ekin = 2.99653903957879 | erot = 2.03201724640129 | epot = -22.8426486789921 | etot = -17.814092393012 -607000 ekin = 2.88290327274547 | erot = 2.37629823895312 | epot = -22.8265624505584 | etot = -17.5673609388598 -608000 ekin = 3.6564890765792 | erot = 2.46096427245297 | epot = -22.7637531347954 | etot = -16.6462997857633 -609000 ekin = 2.67772613172483 | erot = 2.28052588350936 | epot = -22.784032519386 | etot = -17.8257805041518 -610000 ekin = 2.96660977711584 | erot = 2.13935236193287 | epot = -22.7753012812081 | etot = -17.6693391421594 -611000 ekin = 3.84936812341098 | erot = 2.13515328821562 | epot = -22.7555358965927 | etot = -16.7710144849661 -612000 ekin = 2.85991416578252 | erot = 2.46799936153364 | epot = -22.6670923038619 | etot = -17.3391787765458 -613000 ekin = 2.93458428860956 | erot = 2.15612272200133 | epot = -22.6620509726505 | etot = -17.5713439620396 -614000 ekin = 2.80109550846435 | erot = 2.03413630963325 | epot = -22.735929073337 | etot = -17.9006972552394 -615000 ekin = 2.29275572188425 | erot = 2.37295436060996 | epot = -22.8265717932651 | etot = -18.1608617107709 -616000 ekin = 1.78880182339297 | erot = 2.46512387757483 | epot = -22.9181914142038 | etot = -18.664265713236 -617000 ekin = 2.58548247747108 | erot = 2.53734413400793 | epot = -22.9371325341202 | etot = -17.8143059226412 -618000 ekin = 2.31891017470357 | erot = 2.68587322473765 | epot = -22.8737927646705 | etot = -17.8690093652293 -619000 ekin = 1.95260275466613 | erot = 2.00546202293513 | epot = -22.8346556656307 | etot = -18.8765908880295 -620000 ekin = 2.9312355259843 | erot = 2.17154966265513 | epot = -22.9093263040915 | etot = -17.806541115452 -621000 ekin = 2.92251791603671 | erot = 1.69365790820559 | epot = -22.9491849521548 | etot = -18.3330091279125 -622000 ekin = 2.04583493083921 | erot = 2.52347309118728 | epot = -22.8885087146283 | etot = -18.3192006926018 -623000 ekin = 1.97949309574552 | erot = 3.07796024634624 | epot = -22.899088756596 | etot = -17.8416354145043 -624000 ekin = 2.09648243468335 | erot = 2.65430331108241 | epot = -22.914733999871 | etot = -18.1639482541052 -625000 ekin = 2.53179488470072 | erot = 2.36095144458489 | epot = -22.9722766139489 | etot = -18.0795302846633 -626000 ekin = 2.71471201325311 | erot = 2.038002303651 | epot = -23.0006194176227 | etot = -18.2479051007186 -627000 ekin = 2.22374294193216 | erot = 2.35282114621755 | epot = -22.9588355159151 | etot = -18.3822714277654 -628000 ekin = 2.28003968408293 | erot = 2.28859673286464 | epot = -22.8537881524811 | etot = -18.2851517355335 -629000 ekin = 2.52123014813329 | erot = 1.89624895610832 | epot = -22.7908976494591 | etot = -18.3734185452175 -630000 ekin = 3.09551469183927 | erot = 2.51634259883875 | epot = -22.7156574639271 | etot = -17.1038001732491 -631000 ekin = 2.38491234780997 | erot = 3.31746706623938 | epot = -22.7274824388449 | etot = -17.0251030247955 -632000 ekin = 2.58509546960735 | erot = 2.52764681234154 | epot = -22.6801845001954 | etot = -17.5674422182465 -633000 ekin = 2.43450196234921 | erot = 1.9074646477535 | epot = -22.6545806388637 | etot = -18.312614028761 -634000 ekin = 2.22577935817066 | erot = 2.00781737526926 | epot = -22.5723806994747 | etot = -18.3387839660348 -635000 ekin = 2.21833116743445 | erot = 1.98256884900851 | epot = -22.5422908112103 | etot = -18.3413907947673 -636000 ekin = 2.25207449335774 | erot = 2.77890466668274 | epot = -22.5736742647701 | etot = -17.5426951047296 -637000 ekin = 1.94359576469155 | erot = 2.6121109986752 | epot = -22.6035657643129 | etot = -18.0478590009461 -638000 ekin = 2.53947002676468 | erot = 3.14006412371943 | epot = -22.5826147275244 | etot = -16.9030805770402 -639000 ekin = 2.37745481188141 | erot = 2.49540365345358 | epot = -22.5449630195302 | etot = -17.6721045541952 -640000 ekin = 2.08212454926531 | erot = 2.21940536991445 | epot = -22.453303862966 | etot = -18.1517739437862 -641000 ekin = 2.47971433110368 | erot = 3.55852071727848 | epot = -22.3500233136602 | etot = -16.3117882652781 -642000 ekin = 3.38958957156561 | erot = 2.18184701440171 | epot = -22.2389727056174 | etot = -16.6675361196501 -643000 ekin = 2.84881174665207 | erot = 2.413254877821 | epot = -22.1927147648616 | etot = -16.9306481403886 -644000 ekin = 2.9788163296922 | erot = 1.93799042516405 | epot = -22.1764728944767 | etot = -17.2596661396204 -645000 ekin = 4.12550859701587 | erot = 1.89960014649319 | epot = -22.1706973334318 | etot = -16.1455885899228 -646000 ekin = 2.52696357860359 | erot = 2.00637360005821 | epot = -22.1102258356952 | etot = -17.5768886570333 -647000 ekin = 2.55512268942677 | erot = 2.20922204555245 | epot = -22.1538572894812 | etot = -17.389512554502 -648000 ekin = 3.02957533574521 | erot = 2.11325139659861 | epot = -22.1575349215939 | etot = -17.0147081892501 -649000 ekin = 2.58453912449214 | erot = 3.20631221677863 | epot = -22.1339073532352 | etot = -16.3430560119644 -650000 ekin = 3.77204744414227 | erot = 2.43066777037188 | epot = -22.0837500061792 | etot = -15.8810347916651 -651000 ekin = 3.31369677202991 | erot = 2.36221103045568 | epot = -21.9243902112032 | etot = -16.2484824087176 -652000 ekin = 2.49262898649827 | erot = 3.02155153905954 | epot = -21.7253342697997 | etot = -16.2111537442419 -653000 ekin = 2.82559687485827 | erot = 2.53899564631137 | epot = -21.7211782659414 | etot = -16.3565857447718 -654000 ekin = 2.35170683287638 | erot = 2.15925543988734 | epot = -21.9219546077978 | etot = -17.4109923350341 -655000 ekin = 2.2746913368331 | erot = 2.12498780379593 | epot = -21.9020101665877 | etot = -17.5023310259586 -656000 ekin = 2.33856358324454 | erot = 2.10525554685067 | epot = -21.9227166217961 | etot = -17.4788974917008 -657000 ekin = 2.74434355807405 | erot = 2.19006149870653 | epot = -22.1368388094875 | etot = -17.2024337527069 -658000 ekin = 3.04721032533817 | erot = 2.59752520159664 | epot = -22.2936626687419 | etot = -16.6489271418071 -659000 ekin = 2.86427564828999 | erot = 3.42151988715138 | epot = -22.2986314842237 | etot = -16.0128359487823 -660000 ekin = 2.92506899234012 | erot = 1.63381738879488 | epot = -22.3375917964994 | etot = -17.7787054153644 -661000 ekin = 3.22051797741487 | erot = 1.86658559874782 | epot = -22.4692759662967 | etot = -17.382172390134 -662000 ekin = 3.06008561550976 | erot = 2.20194497946945 | epot = -22.5616874184536 | etot = -17.2996568234744 -663000 ekin = 1.91383924631387 | erot = 2.47155788641765 | epot = -22.6270449564058 | etot = -18.2416478236743 -664000 ekin = 1.43175220258741 | erot = 1.36481827202384 | epot = -22.714938601816 | etot = -19.9183681272047 -665000 ekin = 1.55751729325324 | erot = 2.30904543593978 | epot = -22.7903483651339 | etot = -18.9237856359409 -666000 ekin = 2.44554812999981 | erot = 1.7728381640758 | epot = -22.9292683336281 | etot = -18.7108820395525 -667000 ekin = 2.81292959120154 | erot = 2.33182461186713 | epot = -23.1152300896738 | etot = -17.9704758866051 -668000 ekin = 2.71701517852366 | erot = 3.1927510370022 | epot = -23.1898047541379 | etot = -17.2800385386121 -669000 ekin = 3.4211844979108 | erot = 2.4483988547294 | epot = -23.2367567149657 | etot = -17.3671733623255 -670000 ekin = 2.540272537006 | erot = 1.98108817711494 | epot = -23.1773017073799 | etot = -18.655940993259 -671000 ekin = 2.38054183576284 | erot = 2.98341127846263 | epot = -23.1403357669317 | etot = -17.7763826527062 -672000 ekin = 3.02714775234025 | erot = 2.54429912094893 | epot = -23.1240813931427 | etot = -17.5526345198536 -673000 ekin = 3.42342714962536 | erot = 2.36764796314287 | epot = -23.0365834633316 | etot = -17.2455083505634 -674000 ekin = 3.1787369792725 | erot = 2.10003598211897 | epot = -22.9565366380298 | etot = -17.6777636766383 -675000 ekin = 2.35379506516488 | erot = 1.53509045481238 | epot = -22.8504434741329 | etot = -18.9615579541557 -676000 ekin = 2.44888744246419 | erot = 2.24653163842729 | epot = -22.7725645250621 | etot = -18.0771454441706 -677000 ekin = 2.75831894151647 | erot = 1.93124166774781 | epot = -22.8527844251281 | etot = -18.1632238158638 -678000 ekin = 2.86751481243524 | erot = 1.65310315497864 | epot = -22.8648869805436 | etot = -18.3442690131297 -679000 ekin = 2.34238342331609 | erot = 2.69036620616395 | epot = -22.9330609670147 | etot = -17.9003113375347 -680000 ekin = 2.47092831167294 | erot = 2.90821987338148 | epot = -22.9893989293305 | etot = -17.610250744276 -681000 ekin = 1.90592213851373 | erot = 2.57738203916981 | epot = -22.9226803153478 | etot = -18.4393761376642 -682000 ekin = 2.11776015116235 | erot = 2.69956516894844 | epot = -22.8385618600593 | etot = -18.0212365399485 -683000 ekin = 2.36569744411279 | erot = 2.12377742206911 | epot = -22.7248964050232 | etot = -18.2354215388413 -684000 ekin = 2.87481829504096 | erot = 2.65568540935019 | epot = -22.6557781340276 | etot = -17.1252744296364 -685000 ekin = 3.04590812681261 | erot = 2.17384411148381 | epot = -22.6239841629455 | etot = -17.4042319246491 -686000 ekin = 2.45732454887051 | erot = 2.42727693460545 | epot = -22.5554269158738 | etot = -17.6708254323979 -687000 ekin = 2.74615797772517 | erot = 1.80419114366277 | epot = -22.4906419692597 | etot = -17.9402928478718 -688000 ekin = 1.7920739822545 | erot = 2.04572898801195 | epot = -22.4080555397627 | etot = -18.5702525694962 -689000 ekin = 2.87658871003945 | erot = 1.89509928788519 | epot = -22.4597913998897 | etot = -17.6881034019651 -690000 ekin = 2.12362847773645 | erot = 2.42433705189552 | epot = -22.5737079170673 | etot = -18.0257423874353 -691000 ekin = 2.15963929746743 | erot = 2.52975117929537 | epot = -22.5896382204305 | etot = -17.9002477436677 -692000 ekin = 2.88714768351631 | erot = 2.65189982514091 | epot = -22.4796475018852 | etot = -16.9405999932279 -693000 ekin = 2.30934205113368 | erot = 2.51896960835911 | epot = -22.3454093965687 | etot = -17.5170977370759 -694000 ekin = 2.90083400146798 | erot = 2.34214046553658 | epot = -22.2620689836397 | etot = -17.0190945166351 -695000 ekin = 2.9577943585455 | erot = 2.23887088042094 | epot = -22.303054593607 | etot = -17.1063893546405 -696000 ekin = 2.65803880066321 | erot = 2.33953886943022 | epot = -22.3444459486844 | etot = -17.3468682785909 -697000 ekin = 1.89104688866877 | erot = 1.78290264315477 | epot = -22.3519476787994 | etot = -18.6779981469758 -698000 ekin = 2.22763370474282 | erot = 2.82521193129044 | epot = -22.374966668557 | etot = -17.3221210325237 -699000 ekin = 2.35357258316915 | erot = 2.06864522211151 | epot = -22.302995332199 | etot = -17.8807775269184 -700000 ekin = 2.58206368687336 | erot = 2.33093601350411 | epot = -22.2613878464485 | etot = -17.3483881460711 -701000 ekin = 2.99704307093403 | erot = 1.89954183386767 | epot = -22.3232249760621 | etot = -17.4266400712604 -702000 ekin = 2.67512006336489 | erot = 2.64729282748452 | epot = -22.3604874692709 | etot = -17.0380745784215 -703000 ekin = 2.02348242287829 | erot = 2.03755058248806 | epot = -22.4348344343157 | etot = -18.3738014289493 -704000 ekin = 1.59657624705204 | erot = 1.63613322855987 | epot = -22.4674717825454 | etot = -19.2347623069335 -705000 ekin = 2.34019771505867 | erot = 1.91006554831154 | epot = -22.5441024225864 | etot = -18.2938391592161 -706000 ekin = 2.47926998793354 | erot = 3.26999075651193 | epot = -22.5117539612542 | etot = -16.7624932168087 -707000 ekin = 2.38604341038216 | erot = 2.41699636933021 | epot = -22.604009927914 | etot = -17.8009701482016 -708000 ekin = 1.68115636633466 | erot = 2.34002138995268 | epot = -22.7466665621618 | etot = -18.7254888058744 -709000 ekin = 1.80992626994918 | erot = 2.57911114058356 | epot = -23.0637398035031 | etot = -18.6747023929704 -710000 ekin = 2.07665974484992 | erot = 1.83617776589231 | epot = -23.1977961917903 | etot = -19.2849586810481 -711000 ekin = 1.95352231029107 | erot = 2.41454578486037 | epot = -23.2358193849337 | etot = -18.8677512897822 -712000 ekin = 2.13370686414587 | erot = 1.78661700982467 | epot = -23.2645434465923 | etot = -19.3442195726217 -713000 ekin = 2.90695161716251 | erot = 1.55091931636559 | epot = -23.1835772351912 | etot = -18.7257063016631 -714000 ekin = 2.06629801094757 | erot = 1.86611085535956 | epot = -23.2239032864041 | etot = -19.2914944200969 -715000 ekin = 2.52903922778277 | erot = 1.94261958015835 | epot = -23.1658397986034 | etot = -18.6941809906622 -716000 ekin = 3.03498992772823 | erot = 2.21064066235538 | epot = -23.2216970852983 | etot = -17.9760664952147 -717000 ekin = 3.07971375394894 | erot = 2.47094593918087 | epot = -23.3639588975855 | etot = -17.8132992044557 -718000 ekin = 3.49703192209654 | erot = 2.27170758510088 | epot = -23.4199184473786 | etot = -17.6511789401811 -719000 ekin = 4.06139770605771 | erot = 3.10418818480813 | epot = -23.4072026156126 | etot = -16.2416167247468 -720000 ekin = 2.49828440590245 | erot = 1.90909738802778 | epot = -23.262316602338 | etot = -18.8549348084078 -721000 ekin = 2.57931762358207 | erot = 1.98570897250437 | epot = -23.1440560046385 | etot = -18.579029408552 -722000 ekin = 2.01081836336836 | erot = 2.2747167647488 | epot = -23.1040519922181 | etot = -18.8185168641009 -723000 ekin = 2.44097316114449 | erot = 2.07630856281912 | epot = -23.1828606158314 | etot = -18.6655788918678 -724000 ekin = 1.90797367222605 | erot = 1.93592443836535 | epot = -23.2376437089983 | etot = -19.3937455984069 -725000 ekin = 2.19373210936071 | erot = 2.80513028222362 | epot = -23.2888134461385 | etot = -18.2899510545542 -726000 ekin = 2.2764864004673 | erot = 2.54378150467671 | epot = -23.3354979947709 | etot = -18.5152300896268 -727000 ekin = 1.72219216954142 | erot = 2.62563304726333 | epot = -23.3703740298761 | etot = -19.0225488130713 -728000 ekin = 2.25087046178847 | erot = 3.59486012962608 | epot = -23.435416924773 | etot = -17.5896863333584 -729000 ekin = 2.68839033328484 | erot = 1.72111131116557 | epot = -23.4784810452544 | etot = -19.0689794008039 -730000 ekin = 2.5329756962683 | erot = 2.7666773813211 | epot = -23.4899025882625 | etot = -18.1902495106731 -731000 ekin = 2.6760609901083 | erot = 2.04579712240261 | epot = -23.5241973416199 | etot = -18.802339229109 -732000 ekin = 2.77848516459028 | erot = 1.88432734797838 | epot = -23.5774208145874 | etot = -18.9146083020187 -733000 ekin = 2.18895381088671 | erot = 2.63471719118119 | epot = -23.6107634586383 | etot = -18.7870924565704 -734000 ekin = 1.69467760927658 | erot = 2.30338410687055 | epot = -23.5936446347431 | etot = -19.595582918596 -735000 ekin = 2.17749689272956 | erot = 2.71618098412724 | epot = -23.5330417303215 | etot = -18.6393638534647 -736000 ekin = 2.29375858428166 | erot = 1.1740900723812 | epot = -23.503450790287 | etot = -20.0356021336242 -737000 ekin = 2.20827752624533 | erot = 3.11531250945766 | epot = -23.4552023795231 | etot = -18.1316123438201 -738000 ekin = 1.72303720787712 | erot = 2.28747842674015 | epot = -23.3309270174989 | etot = -19.3204113828816 -739000 ekin = 1.39492824364512 | erot = 2.17488386602882 | epot = -23.28548996576 | etot = -19.7156778560861 -740000 ekin = 1.90426261774289 | erot = 2.27825159935278 | epot = -23.2514184467463 | etot = -19.0689042296506 -741000 ekin = 2.02024508457136 | erot = 2.72073546284876 | epot = -23.1876217096301 | etot = -18.4466411622099 -742000 ekin = 1.97487019042321 | erot = 1.87541960482772 | epot = -23.0929182320365 | etot = -19.2426284367856 -743000 ekin = 1.96486238454688 | erot = 2.76982785281128 | epot = -22.9318899502109 | etot = -18.1971997128528 -744000 ekin = 2.04909521933131 | erot = 2.34373814592941 | epot = -22.8510525613065 | etot = -18.4582191960458 -745000 ekin = 1.66771130319646 | erot = 1.87270341329448 | epot = -22.7977076876185 | etot = -19.2572929711276 -746000 ekin = 2.11650515037838 | erot = 2.03542197982564 | epot = -22.7785820280378 | etot = -18.6266548978338 -747000 ekin = 3.07964448387158 | erot = 1.66910106460583 | epot = -22.8037757029139 | etot = -18.0550301544365 -748000 ekin = 3.03811477337698 | erot = 1.85631102018694 | epot = -22.8436239146773 | etot = -17.9491981211133 -749000 ekin = 2.53753852426481 | erot = 2.01199117356573 | epot = -22.860297041716 | etot = -18.3107673438855 -750000 ekin = 2.77210902960465 | erot = 2.32628560304478 | epot = -22.9528220918576 | etot = -17.8544274592082 -751000 ekin = 2.52040431872467 | erot = 2.34903725042469 | epot = -23.0127359055533 | etot = -18.1432943364039 -752000 ekin = 2.46408285580806 | erot = 1.68868786663082 | epot = -22.9901282704654 | etot = -18.8373575480265 -753000 ekin = 2.47364326188914 | erot = 1.55776271670366 | epot = -23.1135680684223 | etot = -19.0821620898295 -754000 ekin = 2.5278916038673 | erot = 2.29496804643662 | epot = -23.2403939606523 | etot = -18.4175343103483 -755000 ekin = 1.52934303772527 | erot = 2.21322404979637 | epot = -23.262110017443 | etot = -19.5195429299214 -756000 ekin = 2.10423967353423 | erot = 2.40303050505255 | epot = -23.1685739957517 | etot = -18.6613038171649 -757000 ekin = 2.92559629660516 | erot = 2.0691293568206 | epot = -23.1502917576405 | etot = -18.1555661042147 -758000 ekin = 2.37300490719645 | erot = 2.51363215153151 | epot = -23.0495756460038 | etot = -18.1629385872758 -759000 ekin = 2.6014595730178 | erot = 2.39657042348208 | epot = -22.9025259489071 | etot = -17.9044959524072 -760000 ekin = 3.23086874355225 | erot = 2.77072134903012 | epot = -22.8089299952235 | etot = -16.8073399026412 -761000 ekin = 3.41475369307092 | erot = 1.70180532416599 | epot = -22.7404708369396 | etot = -17.6239118197027 -762000 ekin = 3.40874473404401 | erot = 2.52147443954634 | epot = -22.5276669204419 | etot = -16.5974477468515 -763000 ekin = 2.64281892112082 | erot = 1.82464895439093 | epot = -22.3890167593186 | etot = -17.9215488838069 -764000 ekin = 2.38098664175603 | erot = 2.71455563654527 | epot = -22.2309521785191 | etot = -17.1354099002178 -765000 ekin = 2.24221473762586 | erot = 1.94826539133556 | epot = -22.122583392123 | etot = -17.9321032631616 -766000 ekin = 2.50645584526003 | erot = 1.96129579948818 | epot = -21.9857907119498 | etot = -17.5180390672015 -767000 ekin = 2.34028568638226 | erot = 2.64592471376141 | epot = -21.9051815399867 | etot = -16.918971139843 -768000 ekin = 1.86752761821211 | erot = 2.06138447840236 | epot = -21.8874171216963 | etot = -17.9585050250818 -769000 ekin = 3.03590459157853 | erot = 2.66440802561784 | epot = -21.8247140853503 | etot = -16.124401468154 -770000 ekin = 2.42567220683552 | erot = 1.97830158892933 | epot = -21.8110526122117 | etot = -17.4070788164468 -771000 ekin = 2.20056711884501 | erot = 2.53255190976195 | epot = -21.7341162461991 | etot = -17.0009972175921 -772000 ekin = 2.75016173617492 | erot = 1.98403019503999 | epot = -21.8164316952287 | etot = -17.0822397640138 -773000 ekin = 2.14723076845117 | erot = 2.41512334908793 | epot = -21.9576017041203 | etot = -17.3952475865812 -774000 ekin = 2.20536023895281 | erot = 1.98379412617599 | epot = -22.043759647449 | etot = -17.8546052823202 -775000 ekin = 2.53158393271132 | erot = 2.8225938280108 | epot = -22.2469056379858 | etot = -16.8927278772637 -776000 ekin = 3.15988726149912 | erot = 2.46223044860468 | epot = -22.4204382258798 | etot = -16.798320515776 -777000 ekin = 1.91542872566335 | erot = 1.75408058586262 | epot = -22.4517075164596 | etot = -18.7821982049336 -778000 ekin = 2.94665474162607 | erot = 2.31805831302194 | epot = -22.4632153304498 | etot = -17.1985022758018 -779000 ekin = 3.10970934270731 | erot = 2.04446179405629 | epot = -22.4851490287702 | etot = -17.3309778920066 -780000 ekin = 2.85215832341045 | erot = 3.13312086675091 | epot = -22.4501531708741 | etot = -16.4648739807127 -781000 ekin = 2.36733074493229 | erot = 3.56399648845806 | epot = -22.4171363625471 | etot = -16.4858091291567 -782000 ekin = 2.32796510372074 | erot = 2.86343667143255 | epot = -22.3438054250098 | etot = -17.1524036498565 -783000 ekin = 1.86439500745061 | erot = 3.05233385447291 | epot = -22.2079509833896 | etot = -17.2912221214661 -784000 ekin = 2.05476588420882 | erot = 2.29789997988689 | epot = -22.1006364427793 | etot = -17.7479705786836 -785000 ekin = 2.03879516593738 | erot = 2.15052527915338 | epot = -22.0056061371158 | etot = -17.816285692025 -786000 ekin = 2.3752160296601 | erot = 2.32156698168742 | epot = -21.9727988200248 | etot = -17.2760158086773 -787000 ekin = 2.76686314352376 | erot = 2.23625261993099 | epot = -21.8969600931556 | etot = -16.8938443297008 -788000 ekin = 2.13318993659091 | erot = 2.25162748275281 | epot = -21.8604178455632 | etot = -17.4756004262194 -789000 ekin = 1.98216852118508 | erot = 1.98058785261598 | epot = -21.844134033761 | etot = -17.8813776599599 -790000 ekin = 1.67847851427146 | erot = 1.42560334440858 | epot = -21.941301490604 | etot = -18.837219631924 -791000 ekin = 2.12689982203095 | erot = 2.53200907087448 | epot = -22.0864434478656 | etot = -17.4275345549602 -792000 ekin = 1.72797703494859 | erot = 2.22448376175168 | epot = -22.1854190028922 | etot = -18.2329582061919 -793000 ekin = 3.18409314211953 | erot = 1.94056710411296 | epot = -22.3760603901177 | etot = -17.2514001438852 -794000 ekin = 2.49071782059139 | erot = 3.01186430180266 | epot = -22.4315505782774 | etot = -16.9289684558833 -795000 ekin = 2.89844296027926 | erot = 3.07659510288655 | epot = -22.5164404652995 | etot = -16.5414024021337 -796000 ekin = 2.32845268798927 | erot = 1.62708270564126 | epot = -22.5660647482766 | etot = -18.6105293546461 -797000 ekin = 2.20766900620157 | erot = 3.6597733457204 | epot = -22.5351911425215 | etot = -16.6677487905995 -798000 ekin = 2.12139450500735 | erot = 2.94419809776829 | epot = -22.53586560158 | etot = -17.4702729988044 -799000 ekin = 2.48452434226029 | erot = 2.7415786036137 | epot = -22.4941328101442 | etot = -17.2680298642702 -800000 ekin = 2.17521613585505 | erot = 2.96480330538541 | epot = -22.3818079549674 | etot = -17.2417885137269 -801000 ekin = 2.54690065539559 | erot = 2.74966931670846 | epot = -22.3008594124712 | etot = -17.0042894403671 -802000 ekin = 3.02823775407486 | erot = 2.8915936784506 | epot = -22.2024149184001 | etot = -16.2825834858746 -803000 ekin = 2.21042161290743 | erot = 2.51594019231142 | epot = -22.1069208353333 | etot = -17.3805590301145 -804000 ekin = 2.91061289296152 | erot = 1.5830418961718 | epot = -22.0839512655924 | etot = -17.5902964764591 -805000 ekin = 2.67762522194669 | erot = 3.06970455948968 | epot = -22.0793101970619 | etot = -16.3319804156255 -806000 ekin = 2.75979804034939 | erot = 2.2176860954027 | epot = -22.0549669082474 | etot = -17.0774827724953 -807000 ekin = 2.11041519443391 | erot = 2.83915265443807 | epot = -22.1073292774231 | etot = -17.1577614285511 -808000 ekin = 1.84392510139081 | erot = 2.29797054411878 | epot = -22.0753255923415 | etot = -17.9334299468319 -809000 ekin = 1.93171652686567 | erot = 1.94021167949754 | epot = -22.0668297694372 | etot = -18.194901563074 -810000 ekin = 1.97774334424761 | erot = 2.6472977913531 | epot = -22.1020544833021 | etot = -17.4770133477014 -811000 ekin = 2.2417092413671 | erot = 1.75505259459069 | epot = -22.1062654329495 | etot = -18.1095035969917 -812000 ekin = 2.49053159164605 | erot = 2.33986799245713 | epot = -22.124141511127 | etot = -17.2937419270238 -813000 ekin = 3.01755249739549 | erot = 2.24004680047387 | epot = -22.1167722656682 | etot = -16.8591729677989 -814000 ekin = 2.86045886242639 | erot = 2.24119269343823 | epot = -22.1084535534804 | etot = -17.0068019976158 -815000 ekin = 2.57503557502156 | erot = 2.76212054641368 | epot = -21.9950519676046 | etot = -16.6578958461694 -816000 ekin = 2.19961906931023 | erot = 2.59194277056134 | epot = -22.0843443380244 | etot = -17.2927824981528 -817000 ekin = 1.75062364873707 | erot = 2.66165019507354 | epot = -22.3739862599355 | etot = -17.9617124161249 -818000 ekin = 2.24809257416679 | erot = 2.59026399650675 | epot = -22.5610524731389 | etot = -17.7226959024654 -819000 ekin = 2.12537334404071 | erot = 2.59618311382673 | epot = -22.5606510650104 | etot = -17.839094607143 -820000 ekin = 1.93414650390356 | erot = 2.29085663493509 | epot = -22.4839314706954 | etot = -18.2589283318568 -821000 ekin = 2.11382182469737 | erot = 2.38685226676536 | epot = -22.47627897247 | etot = -17.9756048810073 -822000 ekin = 2.2613431095799 | erot = 2.12056938305333 | epot = -22.370909843474 | etot = -17.9889973508408 -823000 ekin = 2.31560863750917 | erot = 2.60350436456086 | epot = -22.4988996092736 | etot = -17.5797866072036 -824000 ekin = 1.73697879038959 | erot = 1.5185057021212 | epot = -22.6200401147494 | etot = -19.3645556222386 -825000 ekin = 1.63614248894086 | erot = 1.97731468932685 | epot = -22.6198150724223 | etot = -19.0063578941546 -826000 ekin = 2.00841233147246 | erot = 2.17850248200248 | epot = -22.5466518143203 | etot = -18.3597370008454 -827000 ekin = 2.18457105279113 | erot = 2.44711764942285 | epot = -22.4005870169979 | etot = -17.7688983147839 -828000 ekin = 1.91039404464085 | erot = 2.73449242191012 | epot = -22.3948651441296 | etot = -17.7499786775786 -829000 ekin = 2.07228257188588 | erot = 2.97134747466499 | epot = -22.4347910090961 | etot = -17.3911609625452 -830000 ekin = 1.99293621346915 | erot = 2.15765133255911 | epot = -22.4843800017124 | etot = -18.3337924556842 -831000 ekin = 2.33241187954984 | erot = 2.37634533076884 | epot = -22.5757045912718 | etot = -17.8669473809531 -832000 ekin = 2.02856108052035 | erot = 1.94729581180225 | epot = -22.6670251626246 | etot = -18.691168270302 -833000 ekin = 2.28623411522758 | erot = 2.15108044390973 | epot = -22.7566850878713 | etot = -18.319370528734 -834000 ekin = 2.12105013529711 | erot = 1.5116778668129 | epot = -22.7735851481702 | etot = -19.1408571460602 -835000 ekin = 2.88531776933573 | erot = 2.74027641398136 | epot = -22.8585330533172 | etot = -17.2329388700001 -836000 ekin = 3.32070208623905 | erot = 2.42231134749978 | epot = -22.8959107751695 | etot = -17.1528973414306 -837000 ekin = 2.74149226799164 | erot = 2.32127198719276 | epot = -22.8906677110002 | etot = -17.8279034558158 -838000 ekin = 3.13302338440878 | erot = 3.19829232559053 | epot = -22.9166668544453 | etot = -16.585351144446 -839000 ekin = 2.73522885875602 | erot = 2.61100294075548 | epot = -22.8499426413711 | etot = -17.5037108418596 -840000 ekin = 2.97139629828009 | erot = 1.43157972743722 | epot = -22.7763904271576 | etot = -18.3734144014403 -841000 ekin = 2.9571795545775 | erot = 2.67280681737836 | epot = -22.7408850128302 | etot = -17.1108986408743 -842000 ekin = 2.17222575948606 | erot = 2.30478646820068 | epot = -22.7382440804492 | etot = -18.2612318527624 -843000 ekin = 2.83292824269634 | erot = 2.04165126380544 | epot = -22.7426687858571 | etot = -17.8680892793554 -844000 ekin = 2.95938970875204 | erot = 1.50198210425589 | epot = -22.783719790782 | etot = -18.3223479777741 -845000 ekin = 3.16076837184522 | erot = 2.28216144351779 | epot = -22.7913524647186 | etot = -17.3484226493555 -846000 ekin = 3.3398977708405 | erot = 2.53602189023877 | epot = -22.7943227793905 | etot = -16.9184031183113 -847000 ekin = 2.14145435242079 | erot = 2.75036267291773 | epot = -22.7255800042885 | etot = -17.83376297895 -848000 ekin = 2.48912550447967 | erot = 2.81875176956459 | epot = -22.5834297802211 | etot = -17.2755525061768 -849000 ekin = 1.98023552181666 | erot = 2.5692134285068 | epot = -22.4587431120173 | etot = -17.9092941616939 -850000 ekin = 2.0475383789703 | erot = 1.80627608629883 | epot = -22.442868440532 | etot = -18.5890539752628 -851000 ekin = 2.09704360250612 | erot = 1.85768640504848 | epot = -22.4344168330881 | etot = -18.4796868255335 -852000 ekin = 1.70813487206096 | erot = 1.42387059402563 | epot = -22.3764553852037 | etot = -19.2444499191171 -853000 ekin = 2.00140314580349 | erot = 3.04689599134399 | epot = -22.4103147041128 | etot = -17.3620155669653 -854000 ekin = 3.02149896921022 | erot = 2.22990677084323 | epot = -22.4965128093929 | etot = -17.2451070693394 -855000 ekin = 2.19607047478225 | erot = 2.83672007906388 | epot = -22.5083573431917 | etot = -17.4755667893456 -856000 ekin = 2.44947669543341 | erot = 1.52884872890501 | epot = -22.4898047833717 | etot = -18.5114793590332 -857000 ekin = 2.53345481305323 | erot = 2.80399799726174 | epot = -22.39864736443 | etot = -17.061194554115 -858000 ekin = 2.20266598505728 | erot = 2.82477658278041 | epot = -22.322749893257 | etot = -17.2953073254193 -859000 ekin = 2.30655855498922 | erot = 2.31428920065484 | epot = -22.299458676259 | etot = -17.6786109206149 -860000 ekin = 1.99697183524065 | erot = 1.95028062775308 | epot = -22.3156691349687 | etot = -18.3684166719749 -861000 ekin = 2.69687116915107 | erot = 2.24433771449493 | epot = -22.3086232893581 | etot = -17.3674144057121 -862000 ekin = 2.86022987586877 | erot = 2.41684736135787 | epot = -22.2874375572893 | etot = -17.0103603200626 -863000 ekin = 2.60871204568914 | erot = 3.3557366458487 | epot = -22.2313024399491 | etot = -16.2668537484113 -864000 ekin = 2.90978326967391 | erot = 2.29745178043259 | epot = -22.1985713670251 | etot = -16.9913363169186 -865000 ekin = 1.92892881804686 | erot = 2.15731715168145 | epot = -22.0984656787339 | etot = -18.0122197090056 -866000 ekin = 1.96990768776308 | erot = 1.64764578107637 | epot = -21.9980087709689 | etot = -18.3804553021294 -867000 ekin = 1.75218832670564 | erot = 3.37220276943672 | epot = -21.9060579112704 | etot = -16.781666815128 -868000 ekin = 1.82818126605702 | erot = 2.79449094294287 | epot = -21.9401796601767 | etot = -17.3175074511768 -869000 ekin = 2.38095838431442 | erot = 2.38587739965205 | epot = -22.0329803939138 | etot = -17.2661446099473 -870000 ekin = 1.91334960398162 | erot = 3.22058637313173 | epot = -22.0372634175766 | etot = -16.9033274404632 -871000 ekin = 3.11762256076551 | erot = 2.95337521110721 | epot = -21.9585521021423 | etot = -15.8875543302696 -872000 ekin = 2.97995457097216 | erot = 1.38589789821627 | epot = -21.8388140547637 | etot = -17.4729615855753 -873000 ekin = 2.75063242740213 | erot = 2.24384409185972 | epot = -21.7621446383558 | etot = -16.767668119094 -874000 ekin = 2.42548187796032 | erot = 2.11160399589529 | epot = -21.6726796153781 | etot = -17.1355937415225 -875000 ekin = 2.99029080863986 | erot = 2.74119845235593 | epot = -21.6681717382462 | etot = -15.9366824772504 -876000 ekin = 2.13275197859305 | erot = 2.233203194222 | epot = -21.6687594523732 | etot = -17.3028042795581 -877000 ekin = 1.83070162423874 | erot = 1.6010526911626 | epot = -21.6263742280813 | etot = -18.19461991268 -878000 ekin = 2.01997494895548 | erot = 2.72070409004295 | epot = -21.632105565574 | etot = -16.8914265265756 -879000 ekin = 1.43444833027133 | erot = 2.17422677437648 | epot = -21.5501867528963 | etot = -17.9415116482485 -880000 ekin = 2.09181862571921 | erot = 2.57771231025419 | epot = -21.4847603093162 | etot = -16.8152293733428 -881000 ekin = 1.54081572899847 | erot = 1.98591498012594 | epot = -21.5197472943257 | etot = -17.9930165852013 -882000 ekin = 2.2061903789583 | erot = 2.64808794630213 | epot = -21.6149395754995 | etot = -16.760661250239 -883000 ekin = 2.22398786469444 | erot = 2.23146516226547 | epot = -21.6814015671086 | etot = -17.2259485401487 -884000 ekin = 2.78668802039765 | erot = 2.10130089852047 | epot = -21.7272273228039 | etot = -16.8392384038858 -885000 ekin = 1.92361997638943 | erot = 1.77572378933155 | epot = -21.7696517903878 | etot = -18.0703080246668 -886000 ekin = 1.99836032534883 | erot = 3.11596676947403 | epot = -21.7879382713548 | etot = -16.673611176532 -887000 ekin = 1.98879909318866 | erot = 2.81589132946027 | epot = -21.7923091863043 | etot = -16.9876187636554 -888000 ekin = 1.92041141945741 | erot = 2.3252911526479 | epot = -21.8607011941373 | etot = -17.614998622032 -889000 ekin = 1.8806357075667 | erot = 2.46119753007268 | epot = -21.9506056361693 | etot = -17.6087723985299 -890000 ekin = 1.86005551534237 | erot = 2.25705356539098 | epot = -22.0523870894554 | etot = -17.9352780087221 -891000 ekin = 2.60384568426052 | erot = 2.35330960558484 | epot = -22.1900620535717 | etot = -17.2329067637263 -892000 ekin = 2.68682478776143 | erot = 2.69192226449536 | epot = -22.2913421142228 | etot = -16.9125950619661 -893000 ekin = 2.17360632388892 | erot = 2.98553431183659 | epot = -22.2913111245685 | etot = -17.132170488843 -894000 ekin = 2.52600330506545 | erot = 2.45861329518365 | epot = -22.2813523194117 | etot = -17.2967357191626 -895000 ekin = 2.51964265942842 | erot = 2.458508768977 | epot = -22.3090530666537 | etot = -17.3309016382482 -896000 ekin = 1.83970949418621 | erot = 2.7876698428861 | epot = -22.2816769795447 | etot = -17.6542976424724 -897000 ekin = 2.36177466310812 | erot = 2.0208895092276 | epot = -22.2244555724411 | etot = -17.8417914001054 -898000 ekin = 2.11475930620727 | erot = 1.90142689771282 | epot = -22.1399515435435 | etot = -18.1237653396234 -899000 ekin = 2.62628238826603 | erot = 2.33607509693707 | epot = -22.040854543184 | etot = -17.0784970579809 -900000 ekin = 2.1134311489616 | erot = 2.28923041198217 | epot = -22.042922147544 | etot = -17.6402605866003 -901000 ekin = 1.9156742929676 | erot = 1.81441237665855 | epot = -22.0776682049659 | etot = -18.3475815353397 -902000 ekin = 2.56902181313363 | erot = 2.49856756454338 | epot = -22.0065137105888 | etot = -16.9389243329118 -903000 ekin = 1.85774740371253 | erot = 2.17490444163848 | epot = -21.9440961512363 | etot = -17.9114443058853 -904000 ekin = 1.86493397406833 | erot = 2.32873873815716 | epot = -21.8931358584844 | etot = -17.6994631462589 -905000 ekin = 2.31979070947169 | erot = 2.14360558294755 | epot = -21.824385320242 | etot = -17.3609890278228 -906000 ekin = 2.49844805906095 | erot = 2.24842339845928 | epot = -21.8343155675942 | etot = -17.087444110074 -907000 ekin = 4.2050069684007 | erot = 2.50213003512293 | epot = -21.926981437738 | etot = -15.2198444342144 -908000 ekin = 3.27384188266606 | erot = 2.113986364986 | epot = -22.0851390841283 | etot = -16.6973108364762 -909000 ekin = 2.63126156907554 | erot = 1.92589592890071 | epot = -22.2067426627273 | etot = -17.649585164751 -910000 ekin = 2.59247391196527 | erot = 2.91530974700789 | epot = -22.3083595488238 | etot = -16.8005758898507 -911000 ekin = 2.58542931349158 | erot = 4.35273181589072 | epot = -22.3703725466068 | etot = -15.4322114172245 -912000 ekin = 3.05788115941417 | erot = 3.70629270837706 | epot = -22.3924331468687 | etot = -15.6282592790774 -913000 ekin = 2.82179099955174 | erot = 2.17271040546975 | epot = -22.3592523787226 | etot = -17.3647509737011 -914000 ekin = 2.15502438011904 | erot = 1.21668409626845 | epot = -22.2678100512732 | etot = -18.8961015748857 -915000 ekin = 1.59606663662058 | erot = 2.96270026674799 | epot = -22.1740650061606 | etot = -17.615298102792 -916000 ekin = 2.59113116114426 | erot = 3.74925276784446 | epot = -22.2376802645764 | etot = -15.8972963355877 -917000 ekin = 3.04931771481537 | erot = 2.87183708314021 | epot = -22.2631766381559 | etot = -16.3420218402004 -918000 ekin = 2.92188996322642 | erot = 2.63336986904281 | epot = -22.2586011448583 | etot = -16.7033413125891 -919000 ekin = 3.21078589975638 | erot = 2.75946192406924 | epot = -22.2354679015341 | etot = -16.2652200777085 -920000 ekin = 2.28588196467068 | erot = 2.37332214874002 | epot = -22.2033589800159 | etot = -17.5441548666052 -921000 ekin = 2.38962275209347 | erot = 2.43661594631483 | epot = -22.1850468087942 | etot = -17.3588081103859 -922000 ekin = 2.30444121290069 | erot = 2.41446680487179 | epot = -22.1364838134968 | etot = -17.4175757957243 -923000 ekin = 2.49328668364371 | erot = 2.66692739305866 | epot = -22.1214525565084 | etot = -16.961238479806 -924000 ekin = 1.53749552443357 | erot = 2.96826070169594 | epot = -22.0894201538095 | etot = -17.58366392768 -925000 ekin = 1.85840160112661 | erot = 1.96300614534087 | epot = -22.0261080308484 | etot = -18.2047002843809 -926000 ekin = 1.36444139420093 | erot = 2.1171911056521 | epot = -22.0105169062661 | etot = -18.5288844064131 -927000 ekin = 2.55080456695379 | erot = 2.08771192494034 | epot = -22.0296775970306 | etot = -17.3911611051365 -928000 ekin = 2.08687563155734 | erot = 2.73937352627042 | epot = -22.0655254209395 | etot = -17.2392762631117 -929000 ekin = 1.85842465674464 | erot = 1.85229951899858 | epot = -22.161879510768 | etot = -18.4511553350248 -930000 ekin = 1.98312460976539 | erot = 2.1107410982594 | epot = -22.14836282055 | etot = -18.0544971125252 -931000 ekin = 2.44403538776918 | erot = 1.87099700190232 | epot = -22.0455015122594 | etot = -17.7304691225879 -932000 ekin = 2.7450847259232 | erot = 2.34428750425033 | epot = -22.0610452671158 | etot = -16.9716730369423 -933000 ekin = 3.03611053551161 | erot = 2.51768120120295 | epot = -21.9625013660046 | etot = -16.4087096292901 -934000 ekin = 2.94656859108538 | erot = 2.48807299457996 | epot = -21.861427363924 | etot = -16.4267857782587 -935000 ekin = 2.79276097099932 | erot = 2.14683659927043 | epot = -21.8273092000012 | etot = -16.8877116297315 -936000 ekin = 2.97178317336133 | erot = 2.07585468409967 | epot = -21.8285263420326 | etot = -16.7808884845716 -937000 ekin = 3.04678623330025 | erot = 2.3469475727902 | epot = -21.7540111620946 | etot = -16.3602773560041 -938000 ekin = 2.98751343731959 | erot = 2.36094469095133 | epot = -21.6698990656412 | etot = -16.3214409373703 -939000 ekin = 2.58148991378899 | erot = 2.28540307033942 | epot = -21.641624391377 | etot = -16.7747314072486 -940000 ekin = 2.64449140269543 | erot = 2.76444805229845 | epot = -21.5519193090555 | etot = -16.1429798540616 -941000 ekin = 2.27119597888968 | erot = 2.6047011226429 | epot = -21.4613787017959 | etot = -16.5854816002633 -942000 ekin = 1.87372343217533 | erot = 2.80846718394805 | epot = -21.3627475231486 | etot = -16.6805569070252 -943000 ekin = 2.47144243861285 | erot = 2.33780411758964 | epot = -21.3635196463293 | etot = -16.5542730901269 -944000 ekin = 2.13395812695593 | erot = 1.92152946754219 | epot = -21.3250397924826 | etot = -17.2695521979844 -945000 ekin = 2.55906013749132 | erot = 2.2064112111687 | epot = -21.3688330068161 | etot = -16.6033616581561 -946000 ekin = 2.36057360323902 | erot = 2.87561909021941 | epot = -21.3642087487724 | etot = -16.128016055314 -947000 ekin = 2.0664007802554 | erot = 1.8712733843037 | epot = -21.3615863875836 | etot = -17.4239122230245 -948000 ekin = 1.84827298766581 | erot = 1.37746869479931 | epot = -21.4042186851624 | etot = -18.1784770026972 -949000 ekin = 1.76268582715986 | erot = 2.31704980534492 | epot = -21.4240851264671 | etot = -17.3443494939624 -950000 ekin = 1.71596526195605 | erot = 2.24238613701562 | epot = -21.4136184248624 | etot = -17.4552670258908 -951000 ekin = 1.97739431794919 | erot = 2.32356723589743 | epot = -21.4746626443703 | etot = -17.1737010905236 -952000 ekin = 2.93969915889367 | erot = 2.72641565709973 | epot = -21.5183559681327 | etot = -15.8522411521393 -953000 ekin = 2.94576770934606 | erot = 2.38856498634115 | epot = -21.5141407104899 | etot = -16.1798080148027 -954000 ekin = 3.09120782928501 | erot = 1.98547863545544 | epot = -21.4220978424351 | etot = -16.3454113776947 -955000 ekin = 3.57635302907509 | erot = 2.07344226252239 | epot = -21.3055276294275 | etot = -15.65573233783 -956000 ekin = 2.96199697760255 | erot = 3.68176573533001 | epot = -21.1569123839441 | etot = -14.5131496710115 -957000 ekin = 2.99343140156395 | erot = 2.6641673976979 | epot = -20.9767503534011 | etot = -15.3191515541393 -958000 ekin = 2.66519710291016 | erot = 2.94296730915348 | epot = -20.778322783175 | etot = -15.1701583711114 -959000 ekin = 1.92859078964251 | erot = 2.44737003089627 | epot = -20.7022563699757 | etot = -16.3262955494369 -960000 ekin = 1.49451727360012 | erot = 3.13583888779427 | epot = -20.7118848436939 | etot = -16.0815286822995 -961000 ekin = 1.95030797402212 | erot = 2.08601754519332 | epot = -20.7116280307748 | etot = -16.6753025115593 -962000 ekin = 2.02519672504697 | erot = 1.8993614904036 | epot = -20.7772856698007 | etot = -16.8527274543501 -963000 ekin = 1.81866098250674 | erot = 2.47413067985077 | epot = -20.8446590259958 | etot = -16.5518673636383 -964000 ekin = 2.82274927013719 | erot = 2.43518028535965 | epot = -20.9038261011269 | etot = -15.64589654563 -965000 ekin = 2.55107687208175 | erot = 2.29878175210651 | epot = -20.9717669792334 | etot = -16.1219083550452 -966000 ekin = 2.1200913755337 | erot = 2.2846988725502 | epot = -21.0606259488472 | etot = -16.6558357007633 -967000 ekin = 1.58229605946639 | erot = 3.55757301639252 | epot = -21.1224849810159 | etot = -15.982615905157 -968000 ekin = 1.95011274740584 | erot = 2.3752003899703 | epot = -21.1147445818894 | etot = -16.7894314445132 -969000 ekin = 2.19259033480515 | erot = 2.45911844664679 | epot = -21.0841141670188 | etot = -16.4324053855669 -970000 ekin = 1.87048608890169 | erot = 2.95646346755995 | epot = -21.0142741201673 | etot = -16.1873245637056 -971000 ekin = 1.950153162929 | erot = 3.0717285905854 | epot = -20.9854323440231 | etot = -15.9635505905087 -972000 ekin = 1.93197938125398 | erot = 2.56232300543577 | epot = -20.9700672251306 | etot = -16.4757648384409 -973000 ekin = 2.21536036218028 | erot = 2.92680374210101 | epot = -20.9735070987956 | etot = -15.8313429945143 -974000 ekin = 2.53787477442507 | erot = 2.68950390909793 | epot = -20.9249780227203 | etot = -15.6975993391973 -975000 ekin = 3.3832404833891 | erot = 2.33888514036507 | epot = -20.8975294326534 | etot = -15.1754038088992 -976000 ekin = 2.84644457799265 | erot = 3.11578234174529 | epot = -20.8919958508098 | etot = -14.9297689310719 -977000 ekin = 2.71728271399263 | erot = 2.50842582300821 | epot = -20.8689034899506 | etot = -15.6431949529497 -978000 ekin = 1.79447160570111 | erot = 2.0736426807417 | epot = -20.8420102217514 | etot = -16.9738959353086 -979000 ekin = 1.87121723303036 | erot = 2.21930404593537 | epot = -20.7748213462523 | etot = -16.6843000672865 -980000 ekin = 1.92329753072694 | erot = 1.58075512357095 | epot = -20.7449893755876 | etot = -17.2409367212897 -981000 ekin = 1.54378956643562 | erot = 2.05667260838343 | epot = -20.8055475552994 | etot = -17.2050853804803 -982000 ekin = 1.84106018589786 | erot = 1.96434982363189 | epot = -20.9115392638984 | etot = -17.1061292543687 -983000 ekin = 2.72419781781661 | erot = 1.79041192395563 | epot = -20.935370561762 | etot = -16.4207608199898 -984000 ekin = 3.62592878226169 | erot = 2.63360520982709 | epot = -21.0391300854773 | etot = -14.7795960933885 -985000 ekin = 2.94852029277516 | erot = 2.17123324675229 | epot = -21.210668025134 | etot = -16.0909144856065 -986000 ekin = 2.87308205004233 | erot = 2.17802315487852 | epot = -21.3375937115616 | etot = -16.2864885066408 -987000 ekin = 3.37012638403781 | erot = 2.51985184465596 | epot = -21.4043627880157 | etot = -15.514384559322 -988000 ekin = 3.46870329025365 | erot = 3.24288958557111 | epot = -21.4574256625201 | etot = -14.7458327866953 -989000 ekin = 2.84167714920458 | erot = 2.20794124486355 | epot = -21.6063889534189 | etot = -16.5567705593508 -990000 ekin = 2.79616762915596 | erot = 1.83962543905575 | epot = -21.6049428673847 | etot = -16.969149799173 -991000 ekin = 3.12376374867622 | erot = 3.19217780569165 | epot = -21.5124272449002 | etot = -15.1964856905324 -992000 ekin = 3.28266282243327 | erot = 2.63435990952508 | epot = -21.3973672594977 | etot = -15.4803445275393 -993000 ekin = 3.03845590773447 | erot = 2.22451011589011 | epot = -21.3214832241627 | etot = -16.0585172005382 -994000 ekin = 3.17417330085466 | erot = 2.79358287085479 | epot = -21.2400043434466 | etot = -15.2722481717371 -995000 ekin = 3.20646780888655 | erot = 1.72565517852613 | epot = -21.1372155372729 | etot = -16.2050925498602 -996000 ekin = 3.05109485375234 | erot = 3.18000631651671 | epot = -21.0952864235923 | etot = -14.8641852533233 -997000 ekin = 2.95625677593347 | erot = 3.15916554858247 | epot = -21.058148007987 | etot = -14.942725683471 -998000 ekin = 3.06605914614908 | erot = 1.97682176881012 | epot = -20.9834240684974 | etot = -15.9405431535382 -999000 ekin = 2.08919327368179 | erot = 2.76364485800616 | epot = -20.9705413117635 | etot = -16.1177031800756 -1000000 ekin = 2.11761701334905 | erot = 2.1409630347026 | epot = -20.9096627221725 | etot = -16.6510826741208 - 1000000 0.094116312 -1.3659956 0.059141691 -1.1745029 -0.0001320501 -Loop time of 47.7342 on 1 procs for 1000000 steps with 16 atoms - -Performance: 18100.242 tau/day, 20949.354 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 35.978 | 35.978 | 35.978 | 0.0 | 75.37 -Bond | 1.0053 | 1.0053 | 1.0053 | 0.0 | 2.11 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.28221 | 0.28221 | 0.28221 | 0.0 | 0.59 -Output | 2.7895e-05 | 2.7895e-05 | 2.7895e-05 | 0.0 | 0.00 -Modify | 10.039 | 10.039 | 10.039 | 0.0 | 21.03 -Other | | 0.4294 | | | 0.90 - -Nlocal: 16 ave 16 max 16 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 116 ave 116 max 116 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 116 -Ave neighs/atom = 7.25 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:47 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 deleted file mode 100644 index 320d186f80..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.24Mar17.duplex2.g++.4 +++ /dev/null @@ -1,1167 +0,0 @@ -LAMMPS (24 Mar 2017) -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 1000000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.777 | 7.959 | 8.141 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 -1000 ekin = 1.34554291364716 | erot = 2.30525041754444 | epot = -24.3924150888896 | etot = -20.741621757698 -2000 ekin = 2.15972469811184 | erot = 2.1628675965276 | epot = -24.3548203354875 | etot = -20.0322280408481 -3000 ekin = 3.26433550542939 | erot = 2.76107866472087 | epot = -24.2947953202752 | etot = -18.269381150125 -4000 ekin = 1.9203212531997 | erot = 2.133394384253 | epot = -24.234098584123 | etot = -20.1803829466703 -5000 ekin = 1.35481075814721 | erot = 2.00854026688447 | epot = -24.1768963201279 | etot = -20.8135452950963 -6000 ekin = 2.18974627635306 | erot = 1.73271671162436 | epot = -24.1096616118305 | etot = -20.1871986238531 -7000 ekin = 2.65472853187395 | erot = 1.73258720631297 | epot = -24.0561118130561 | etot = -19.6687960748691 -8000 ekin = 2.51192327964357 | erot = 2.34132844779952 | epot = -23.9708695663488 | etot = -19.1176178389058 -9000 ekin = 2.24554900802464 | erot = 2.0522939078286 | epot = -23.874757758319 | etot = -19.5769148424658 -10000 ekin = 2.36227360512089 | erot = 1.80185994066737 | epot = -23.7793375260418 | etot = -19.6152039802535 -11000 ekin = 2.03264234985168 | erot = 1.68707706801736 | epot = -23.7396221351636 | etot = -20.0199027172945 -12000 ekin = 2.66329111303325 | erot = 2.49804687909781 | epot = -23.7366995564469 | etot = -18.5753615643158 -13000 ekin = 1.89677055811531 | erot = 2.34624821263612 | epot = -23.6591067615901 | etot = -19.4160879908387 -14000 ekin = 1.91279445145792 | erot = 2.13129118502405 | epot = -23.6468743458148 | etot = -19.6027887093328 -15000 ekin = 2.41876331112169 | erot = 2.07362128417238 | epot = -23.5767792498568 | etot = -19.0843946545628 -16000 ekin = 2.76615310647131 | erot = 1.19495009524763 | epot = -23.4862363509196 | etot = -19.5251331492006 -17000 ekin = 2.45632569069911 | erot = 2.37627186077148 | epot = -23.500787861849 | etot = -18.6681903103784 -18000 ekin = 2.18348858414473 | erot = 2.46933014500077 | epot = -23.5223047738331 | etot = -18.8694860446876 -19000 ekin = 2.2074746303434 | erot = 2.45349372324724 | epot = -23.4618353655003 | etot = -18.8008670119096 -20000 ekin = 2.06964129991908 | erot = 1.80832666230414 | epot = -23.4930879797962 | etot = -19.615120017573 -21000 ekin = 2.26572194434983 | erot = 2.76680470094409 | epot = -23.5023070260553 | etot = -18.4697803807614 -22000 ekin = 2.69295306575102 | erot = 1.86984875574017 | epot = -23.4463493063166 | etot = -18.8835474848254 -23000 ekin = 1.99930153068661 | erot = 2.27735339437466 | epot = -23.3493214662276 | etot = -19.0726665411663 -24000 ekin = 2.20679650752062 | erot = 2.98147599881873 | epot = -23.273517698415 | etot = -18.0852451920757 -25000 ekin = 2.28085541692287 | erot = 2.99165466281124 | epot = -23.2072100929465 | etot = -17.9347000132124 -26000 ekin = 1.9530124305314 | erot = 2.81680126246586 | epot = -23.0636678500934 | etot = -18.2938541570962 -27000 ekin = 1.96948983508855 | erot = 2.69266617300682 | epot = -22.9870601707012 | etot = -18.3249041626058 -28000 ekin = 2.02061868464074 | erot = 2.37038530969117 | epot = -22.9383598315964 | etot = -18.5473558372645 -29000 ekin = 2.51387846128098 | erot = 2.0265039132053 | epot = -22.888959880923 | etot = -18.3485775064367 -30000 ekin = 1.95889729807242 | erot = 2.1170713545074 | epot = -22.7896312662562 | etot = -18.7136626136764 -31000 ekin = 1.81775203419098 | erot = 2.326796842935 | epot = -22.7561124537192 | etot = -18.6115635765932 -32000 ekin = 1.87947265787065 | erot = 2.0009346769358 | epot = -22.8533570528062 | etot = -18.9729497179997 -33000 ekin = 1.77435214491107 | erot = 1.82826131933673 | epot = -22.8632647352802 | etot = -19.2606512710324 -34000 ekin = 2.27098719472917 | erot = 3.11275511420439 | epot = -22.9527052663856 | etot = -17.5689629574521 -35000 ekin = 2.88921171289845 | erot = 1.82538384737236 | epot = -23.0316569923336 | etot = -18.3170614320628 -36000 ekin = 2.40471013682393 | erot = 2.59817148723643 | epot = -23.1277697887139 | etot = -18.1248881646536 -37000 ekin = 2.23499312928139 | erot = 1.74662115184433 | epot = -23.1542126827759 | etot = -19.1725984016501 -38000 ekin = 2.13875747252781 | erot = 3.07733571118648 | epot = -23.0916051545794 | etot = -17.8755119708651 -39000 ekin = 2.08901196654187 | erot = 2.81975762995374 | epot = -23.0796147800379 | etot = -18.1708451835423 -40000 ekin = 2.95155149177527 | erot = 2.19459039829335 | epot = -23.141500571363 | etot = -17.9953586812944 -41000 ekin = 2.49235596566196 | erot = 3.45295839915509 | epot = -23.115526015811 | etot = -17.1702116509939 -42000 ekin = 2.58401591894786 | erot = 3.0976076851145 | epot = -23.0181097727229 | etot = -17.3364861686605 -43000 ekin = 2.17593293893362 | erot = 2.65403748718844 | epot = -22.8962504257564 | etot = -18.0662799996343 -44000 ekin = 2.34068034665607 | erot = 3.294882771572 | epot = -22.8143844644656 | etot = -17.1788213462375 -45000 ekin = 1.87200112415306 | erot = 3.49863859200052 | epot = -22.6989374637074 | etot = -17.3282977475538 -46000 ekin = 2.60943921333194 | erot = 2.23170007842725 | epot = -22.5884035122493 | etot = -17.7472642204901 -47000 ekin = 1.89594756436345 | erot = 3.4002587629387 | epot = -22.4938472923117 | etot = -17.1976409650096 -48000 ekin = 2.49339593279701 | erot = 2.5104785556399 | epot = -22.5372062210456 | etot = -17.5333317326087 -49000 ekin = 3.2041407554348 | erot = 2.17669016194865 | epot = -22.5688036423094 | etot = -17.1879727249259 -50000 ekin = 2.93024070185999 | erot = 1.55416219951966 | epot = -22.6087903765995 | etot = -18.1243874752199 -51000 ekin = 2.8585759501124 | erot = 2.69193261792584 | epot = -22.6228353253324 | etot = -17.0723267572942 -52000 ekin = 2.3079418078843 | erot = 1.84260643306147 | epot = -22.6230480697441 | etot = -18.4724998287983 -53000 ekin = 3.1803685919024 | erot = 1.67451273370508 | epot = -22.6834814309773 | etot = -17.8286001053698 -54000 ekin = 2.6151376953128 | erot = 1.96091197875017 | epot = -22.7484551927013 | etot = -18.1724055186384 -55000 ekin = 3.1639577845443 | erot = 2.86286196426802 | epot = -22.7917236196438 | etot = -16.7649038708315 -56000 ekin = 2.52994034294643 | erot = 3.05544364249365 | epot = -22.7651844773103 | etot = -17.1798004918702 -57000 ekin = 2.40889871674401 | erot = 3.4525690879514 | epot = -22.7113139496974 | etot = -16.849846145002 -58000 ekin = 1.9363727739706 | erot = 2.52762778976703 | epot = -22.6468058892224 | etot = -18.1828053254848 -59000 ekin = 2.55505415922972 | erot = 3.52385701835933 | epot = -22.6037443858311 | etot = -16.5248332082421 -60000 ekin = 2.80945252332612 | erot = 2.88606183204889 | epot = -22.5227874119079 | etot = -16.8272730565329 -61000 ekin = 2.69750183117722 | erot = 2.55373633146433 | epot = -22.4306469225965 | etot = -17.1794087599549 -62000 ekin = 2.74494354639602 | erot = 2.23074517653766 | epot = -22.3675792436719 | etot = -17.3918905207383 -63000 ekin = 2.66335513293138 | erot = 2.46159865380861 | epot = -22.3527707145482 | etot = -17.2278169278082 -64000 ekin = 2.12832019835147 | erot = 2.78772793164811 | epot = -22.3048690294469 | etot = -17.3888208994473 -65000 ekin = 1.88429801911228 | erot = 2.70719871478483 | epot = -22.3342736701749 | etot = -17.7427769362778 -66000 ekin = 2.77106091929282 | erot = 1.94126620531915 | epot = -22.338257942783 | etot = -17.625930818171 -67000 ekin = 2.53561386235746 | erot = 2.45901054739082 | epot = -22.3780784743028 | etot = -17.3834540645545 -68000 ekin = 2.9678648663671 | erot = 1.95502711706149 | epot = -22.4420512915713 | etot = -17.5191593081427 -69000 ekin = 2.61501630036274 | erot = 2.2429513448561 | epot = -22.3607835407198 | etot = -17.502815895501 -70000 ekin = 2.41492598760663 | erot = 2.80885610657203 | epot = -22.2905725083407 | etot = -17.066790414162 -71000 ekin = 2.65062529541957 | erot = 2.88868401392431 | epot = -22.2951070257787 | etot = -16.7557977164349 -72000 ekin = 2.93273744051009 | erot = 2.82552508252073 | epot = -22.4016757930526 | etot = -16.6434132700218 -73000 ekin = 2.18922665452238 | erot = 3.03559183860538 | epot = -22.4509770394845 | etot = -17.2261585463568 -74000 ekin = 2.16074843540078 | erot = 2.83668185121384 | epot = -22.4374624006144 | etot = -17.4400321139998 -75000 ekin = 1.52329638473031 | erot = 1.91520672578907 | epot = -22.5623153080324 | etot = -19.123812197513 -76000 ekin = 1.89250964827726 | erot = 2.83358650938892 | epot = -22.6698326202442 | etot = -17.943736462578 -77000 ekin = 2.82066630152179 | erot = 3.19779433197964 | epot = -22.7402096770599 | etot = -16.7217490435584 -78000 ekin = 2.42603824235662 | erot = 2.82319136688957 | epot = -22.7334053911689 | etot = -17.4841757819227 -79000 ekin = 2.1571494738421 | erot = 1.67722302323495 | epot = -22.7616861631187 | etot = -18.9273136660417 -80000 ekin = 2.3760789053548 | erot = 2.58372913427157 | epot = -22.6889139769023 | etot = -17.729105937276 -81000 ekin = 2.73468961033338 | erot = 1.92748741387075 | epot = -22.6388260929897 | etot = -17.9766490687856 -82000 ekin = 1.90565370838817 | erot = 1.71715050303634 | epot = -22.5547415381056 | etot = -18.9319373266811 -83000 ekin = 1.63698443616271 | erot = 1.88092293220519 | epot = -22.4792739412377 | etot = -18.9613665728698 -84000 ekin = 1.65571812906993 | erot = 2.10290321918187 | epot = -22.4031972735297 | etot = -18.6445759252779 -85000 ekin = 2.40863681830855 | erot = 2.04741059095057 | epot = -22.321221903585 | etot = -17.8651744943259 -86000 ekin = 2.50560893716733 | erot = 1.80624308622105 | epot = -22.3789065133115 | etot = -18.0670544899231 -87000 ekin = 2.13576456371582 | erot = 1.97115993651017 | epot = -22.4335511413526 | etot = -18.3266266411266 -88000 ekin = 1.74897318407528 | erot = 2.37233945814529 | epot = -22.4142028246849 | etot = -18.2928901824643 -89000 ekin = 1.85559683216276 | erot = 3.29559734355419 | epot = -22.4519626048678 | etot = -17.3007684291509 -90000 ekin = 2.22181579992018 | erot = 2.33948779846394 | epot = -22.5289826258985 | etot = -17.9676790275144 -91000 ekin = 2.40596540834273 | erot = 3.11545124680293 | epot = -22.4975752624166 | etot = -16.9761586072709 -92000 ekin = 2.6773157744569 | erot = 3.00279439655287 | epot = -22.4834827179575 | etot = -16.8033725469477 -93000 ekin = 3.0427813598525 | erot = 3.03722776158512 | epot = -22.4121259471479 | etot = -16.3321168257103 -94000 ekin = 3.20507830840023 | erot = 1.86440047317737 | epot = -22.5079833350679 | etot = -17.4385045534903 -95000 ekin = 3.4839955648833 | erot = 2.87934575393031 | epot = -22.5675869456428 | etot = -16.2042456268292 -96000 ekin = 2.8873631080951 | erot = 2.38554372248299 | epot = -22.5453635283434 | etot = -17.2724566977653 -97000 ekin = 1.92899149350272 | erot = 2.09886479790579 | epot = -22.5208382020819 | etot = -18.4929819106733 -98000 ekin = 2.21420868967462 | erot = 3.66528252896999 | epot = -22.4426781355708 | etot = -16.5631869169262 -99000 ekin = 1.98238051924192 | erot = 2.77358159119584 | epot = -22.3579409961467 | etot = -17.6019788857089 -100000 ekin = 1.80278462349605 | erot = 2.65457154995031 | epot = -22.2926900475079 | etot = -17.8353338740616 -101000 ekin = 2.14042196591663 | erot = 2.38610603254675 | epot = -22.2789462117326 | etot = -17.7524182132692 -102000 ekin = 1.54923043145398 | erot = 2.30485616158943 | epot = -22.27519637673 | etot = -18.4211097836866 -103000 ekin = 1.66618004359352 | erot = 2.82192794888076 | epot = -22.3284746660305 | etot = -17.8403666735562 -104000 ekin = 1.8840390723585 | erot = 3.37607054348826 | epot = -22.4068162519772 | etot = -17.1467066361304 -105000 ekin = 2.08970806137592 | erot = 2.01278733908098 | epot = -22.450865561264 | etot = -18.3483701608071 -106000 ekin = 2.87186619049714 | erot = 1.95029477179727 | epot = -22.46479383237 | etot = -17.6426328700756 -107000 ekin = 2.28516102595382 | erot = 1.55115426482474 | epot = -22.420448971169 | etot = -18.5841336803904 -108000 ekin = 2.4440862469061 | erot = 1.71323205815914 | epot = -22.4934628688132 | etot = -18.336144563748 -109000 ekin = 2.33376449416318 | erot = 2.92962175925398 | epot = -22.4792154966925 | etot = -17.2158292432753 -110000 ekin = 2.7815613020599 | erot = 2.36483486971455 | epot = -22.4384263756783 | etot = -17.2920302039039 -111000 ekin = 2.32472851347632 | erot = 2.09554567134106 | epot = -22.3756448055424 | etot = -17.955370620725 -112000 ekin = 2.91126509700492 | erot = 1.82787812400381 | epot = -22.2278235937356 | etot = -17.4886803727269 -113000 ekin = 2.82522334536064 | erot = 1.67936756938672 | epot = -22.2030639545535 | etot = -17.6984730398062 -114000 ekin = 3.42964629994365 | erot = 2.67287683722422 | epot = -22.3274259722919 | etot = -16.224902835124 -115000 ekin = 3.0542495603856 | erot = 1.72370226125567 | epot = -22.3530732875163 | etot = -17.575121465875 -116000 ekin = 3.19934505541307 | erot = 3.20304074939431 | epot = -22.4112422200445 | etot = -16.0088564152371 -117000 ekin = 3.03942349360439 | erot = 2.40720645224432 | epot = -22.3646852618703 | etot = -16.9180553160216 -118000 ekin = 3.21704225120818 | erot = 1.46425401673932 | epot = -22.2864155249032 | etot = -17.6051192569557 -119000 ekin = 2.33989996826882 | erot = 3.07668030790319 | epot = -22.2283862990246 | etot = -16.8118060228526 -120000 ekin = 1.93772242476321 | erot = 2.20130457047854 | epot = -22.1620199969907 | etot = -18.022993001749 -121000 ekin = 1.94013950333198 | erot = 3.08987281123524 | epot = -22.1565667857742 | etot = -17.126554471207 -122000 ekin = 1.68663003450368 | erot = 1.73461876453175 | epot = -22.2565715090021 | etot = -18.8353227099667 -123000 ekin = 1.72841976989173 | erot = 2.32750063038672 | epot = -22.3665160016578 | etot = -18.3105956013793 -124000 ekin = 2.73468934475335 | erot = 1.93313584543738 | epot = -22.378088078826 | etot = -17.7102628886353 -125000 ekin = 2.77507735763211 | erot = 1.95244582221335 | epot = -22.3863676939847 | etot = -17.6588445141392 -126000 ekin = 2.04549959008918 | erot = 1.485897173428 | epot = -22.4226219879524 | etot = -18.8912252244352 -127000 ekin = 1.86410777734907 | erot = 1.58829497411524 | epot = -22.4027380289015 | etot = -18.9503352774372 -128000 ekin = 1.63329448006254 | erot = 1.88032753965974 | epot = -22.3918784566533 | etot = -18.878256436931 -129000 ekin = 2.51522192674941 | erot = 2.38822614049101 | epot = -22.396225517968 | etot = -17.4927774507275 -130000 ekin = 1.61191166117177 | erot = 2.81688343133434 | epot = -22.341565060394 | etot = -17.9127699678879 -131000 ekin = 2.29569747740708 | erot = 2.28868769760912 | epot = -22.2184139794107 | etot = -17.6340288043945 -132000 ekin = 2.97393694467802 | erot = 2.36135254406015 | epot = -22.1410658382525 | etot = -16.8057763495143 -133000 ekin = 2.01357676743256 | erot = 2.125828419273 | epot = -22.1312019600638 | etot = -17.9917967733582 -134000 ekin = 1.56048037412857 | erot = 2.84208065022547 | epot = -22.0682869067536 | etot = -17.6657258823995 -135000 ekin = 1.79811942319758 | erot = 2.40075843487508 | epot = -22.0853555614258 | etot = -17.8864777033531 -136000 ekin = 1.63631696233012 | erot = 2.13166656554855 | epot = -22.0879615470249 | etot = -18.3199780191462 -137000 ekin = 2.36040439516093 | erot = 1.937854866329 | epot = -22.1234845924018 | etot = -17.8252253309118 -138000 ekin = 2.94591421775872 | erot = 1.58866111192914 | epot = -22.1783168558241 | etot = -17.6437415261363 -139000 ekin = 3.17560544591524 | erot = 2.24933296614108 | epot = -22.2966418842012 | etot = -16.8717034721449 -140000 ekin = 2.24781162873235 | erot = 3.05934139328613 | epot = -22.4681108223249 | etot = -17.1609578003064 -141000 ekin = 1.89078628042285 | erot = 3.13246933186327 | epot = -22.730922227649 | etot = -17.7076666153629 -142000 ekin = 2.51033894675651 | erot = 2.49428943091232 | epot = -22.8404165502847 | etot = -17.8357881726159 -143000 ekin = 2.40438807844298 | erot = 2.71461817456284 | epot = -22.8207220890737 | etot = -17.7017158360679 -144000 ekin = 1.93074254879639 | erot = 2.67760329085926 | epot = -22.6973757396236 | etot = -18.0890298999679 -145000 ekin = 1.82681171280412 | erot = 1.73674169257735 | epot = -22.6628534675149 | etot = -19.0993000621335 -146000 ekin = 2.42423538163981 | erot = 2.09087762946581 | epot = -22.6072904345337 | etot = -18.0921774234281 -147000 ekin = 1.44607209743073 | erot = 1.88012639062509 | epot = -22.5001275476876 | etot = -19.1739290596318 -148000 ekin = 1.9349809420382 | erot = 2.57774390934156 | epot = -22.4721664357448 | etot = -17.959441584365 -149000 ekin = 2.023702656427 | erot = 3.31795764580129 | epot = -22.3745153112138 | etot = -17.0328550089855 -150000 ekin = 2.48124469844233 | erot = 2.68185291250581 | epot = -22.1950329772129 | etot = -17.0319353662648 -151000 ekin = 2.76319440452883 | erot = 1.87355938382631 | epot = -21.986630645846 | etot = -17.3498768574909 -152000 ekin = 2.77453107952051 | erot = 1.77016628972892 | epot = -21.7977108098427 | etot = -17.2530134405933 -153000 ekin = 3.08827014622555 | erot = 1.80976617511255 | epot = -21.6910123469877 | etot = -16.7929760256496 -154000 ekin = 2.32051051770812 | erot = 2.18004857730092 | epot = -21.6406733490633 | etot = -17.1401142540543 -155000 ekin = 1.95766873014157 | erot = 2.67064554154833 | epot = -21.7315745360126 | etot = -17.1032602643227 -156000 ekin = 2.69830438989808 | erot = 2.24987636164773 | epot = -21.7962907570244 | etot = -16.8481100054785 -157000 ekin = 3.89340900899948 | erot = 2.7373331532516 | epot = -21.8437967078712 | etot = -15.2130545456202 -158000 ekin = 2.84737207100032 | erot = 2.70157958556584 | epot = -21.878244439129 | etot = -16.3292927825628 -159000 ekin = 3.1312088996125 | erot = 2.65375527842549 | epot = -21.8350703791794 | etot = -16.0501062011414 -160000 ekin = 2.54316260055465 | erot = 3.27950281054044 | epot = -21.8888467298127 | etot = -16.0661813187176 -161000 ekin = 2.49549109190182 | erot = 2.45028506429479 | epot = -21.8585593359585 | etot = -16.9127831797619 -162000 ekin = 3.05200272259996 | erot = 2.59164651185652 | epot = -21.8439750046483 | etot = -16.2003257701918 -163000 ekin = 3.30374280597554 | erot = 2.2419396021266 | epot = -21.8717863279577 | etot = -16.3261039198555 -164000 ekin = 3.53081155329031 | erot = 2.22419322011391 | epot = -21.8162094860939 | etot = -16.0612047126897 -165000 ekin = 2.48919804649028 | erot = 2.59105984700638 | epot = -21.7395563276218 | etot = -16.6592984341251 -166000 ekin = 2.14880495285182 | erot = 3.05770380831397 | epot = -21.6850566092694 | etot = -16.4785478481036 -167000 ekin = 2.78181890034675 | erot = 2.90402826001926 | epot = -21.5971987360122 | etot = -15.9113515756462 -168000 ekin = 1.74726050172142 | erot = 2.76898886506122 | epot = -21.490566893224 | etot = -16.9743175264413 -169000 ekin = 1.8134289785439 | erot = 2.45780601602371 | epot = -21.4680710936728 | etot = -17.1968360991052 -170000 ekin = 1.69364478039988 | erot = 2.87928997590298 | epot = -21.4668806356843 | etot = -16.8939458793814 -171000 ekin = 2.14879448642638 | erot = 1.61442218455816 | epot = -21.3172106430715 | etot = -17.5539939720869 -172000 ekin = 1.68431962963431 | erot = 2.36087816720613 | epot = -21.1539793618528 | etot = -17.1087815650124 -173000 ekin = 2.05784071815669 | erot = 2.17142592689102 | epot = -21.0926393885011 | etot = -16.8633727434534 -174000 ekin = 2.49611606122761 | erot = 3.09665692560808 | epot = -20.9460348670979 | etot = -15.3532618802622 -175000 ekin = 2.61673440848865 | erot = 2.88720331620429 | epot = -20.8525764091519 | etot = -15.348638684459 -176000 ekin = 2.16190213742438 | erot = 2.672518464664 | epot = -20.8442274508468 | etot = -16.0098068487584 -177000 ekin = 2.83236394902012 | erot = 2.81489135382761 | epot = -20.925759607446 | etot = -15.2785043045983 -178000 ekin = 3.17804494293424 | erot = 1.88346790512582 | epot = -21.0677853312893 | etot = -16.0062724832292 -179000 ekin = 2.33267448424064 | erot = 2.85731052069526 | epot = -21.1181390109479 | etot = -15.9281540060119 -180000 ekin = 2.39061531304011 | erot = 2.93791308775999 | epot = -21.1146449531392 | etot = -15.7861165523391 -181000 ekin = 2.79990361156737 | erot = 3.2889152028739 | epot = -21.0834365456108 | etot = -14.9946177311695 -182000 ekin = 3.02616507870526 | erot = 2.33414327030088 | epot = -21.0600545808658 | etot = -15.6997462318597 -183000 ekin = 2.45290144562467 | erot = 2.21141617846261 | epot = -20.911866387917 | etot = -16.2475487638297 -184000 ekin = 2.56560515060991 | erot = 2.7739810551646 | epot = -20.6989716212004 | etot = -15.3593854154259 -185000 ekin = 2.17586139274635 | erot = 1.95913868179524 | epot = -20.5985322435751 | etot = -16.4635321690335 -186000 ekin = 2.07303044902321 | erot = 3.15122816264526 | epot = -20.4965070011281 | etot = -15.2722483894597 -187000 ekin = 2.44319481307615 | erot = 1.92784212082445 | epot = -20.5124982035642 | etot = -16.1414612696636 -188000 ekin = 2.28870879542405 | erot = 2.8871121346017 | epot = -20.6323506293031 | etot = -15.4565296992773 -189000 ekin = 1.6804728023783 | erot = 3.05535775765803 | epot = -20.6378101864803 | etot = -15.901979626444 -190000 ekin = 1.97184665786398 | erot = 2.95271452778011 | epot = -20.6376534135265 | etot = -15.7130922278824 -191000 ekin = 2.30626539196432 | erot = 2.64854814117513 | epot = -20.6037323569657 | etot = -15.6489188238262 -192000 ekin = 3.54976671698923 | erot = 2.91090725702116 | epot = -20.552550883251 | etot = -14.0918769092406 -193000 ekin = 2.63938438600417 | erot = 3.14409581682355 | epot = -20.5892132844066 | etot = -14.8057330815789 -194000 ekin = 2.67903757365036 | erot = 2.30768318132376 | epot = -20.4753987179502 | etot = -15.488677962976 -195000 ekin = 1.89257615363316 | erot = 2.64508051866103 | epot = -20.4197880125066 | etot = -15.8821313402124 -196000 ekin = 2.29151017050608 | erot = 2.32636787964873 | epot = -20.4440761857987 | etot = -15.8261981356439 -197000 ekin = 2.48344018982904 | erot = 2.56544009419632 | epot = -20.516126938087 | etot = -15.4672466540617 -198000 ekin = 2.01386156849612 | erot = 1.52779840514975 | epot = -20.537160292649 | etot = -16.9955003190031 -199000 ekin = 1.50729232131931 | erot = 2.19878124720505 | epot = -20.5584754599869 | etot = -16.8524018914625 -200000 ekin = 1.64236235330806 | erot = 2.46736341802313 | epot = -20.5387924113649 | etot = -16.4290666400337 -201000 ekin = 2.627066472214 | erot = 2.61321940355395 | epot = -20.6089911163939 | etot = -15.368705240626 -202000 ekin = 2.3129503751722 | erot = 2.54874856259559 | epot = -20.6732219111123 | etot = -15.8115229733446 -203000 ekin = 1.63961009223968 | erot = 2.10835750593015 | epot = -20.7002051999768 | etot = -16.9522376018069 -204000 ekin = 2.0558049009161 | erot = 1.9161072834091 | epot = -20.8154459612946 | etot = -16.8435337769694 -205000 ekin = 3.0460386009419 | erot = 3.24233043438683 | epot = -20.9297600758299 | etot = -14.6413910405012 -206000 ekin = 2.56775422508359 | erot = 2.20992928465511 | epot = -21.0192669133083 | etot = -16.2415834035696 -207000 ekin = 3.46597997409567 | erot = 2.48427015330086 | epot = -21.1513990264881 | etot = -15.2011488990916 -208000 ekin = 2.51159742060494 | erot = 2.22948191756654 | epot = -21.2942477400986 | etot = -16.5531684019271 -209000 ekin = 3.78908644724162 | erot = 2.17660742759512 | epot = -21.4499700336111 | etot = -15.4842761587744 -210000 ekin = 3.03133642129733 | erot = 2.21595982730354 | epot = -21.5648709610245 | etot = -16.3175747124237 -211000 ekin = 1.63075564056512 | erot = 2.12650387194817 | epot = -21.6099552204253 | etot = -17.852695707912 -212000 ekin = 2.67694215598975 | erot = 2.47186432110288 | epot = -21.8481434074352 | etot = -16.6993369303426 -213000 ekin = 2.70688282449408 | erot = 1.96666534072977 | epot = -22.1170796448084 | etot = -17.4435314795845 -214000 ekin = 2.88993887341391 | erot = 3.16392577542177 | epot = -22.1689844550676 | etot = -16.1151198062319 -215000 ekin = 2.59587305508912 | erot = 1.84775314628516 | epot = -22.0799472955548 | etot = -17.6363210941805 -216000 ekin = 2.59710486720184 | erot = 2.7917023259487 | epot = -22.123050002636 | etot = -16.7342428094855 -217000 ekin = 2.50043297628753 | erot = 1.89569946865143 | epot = -22.2232445790842 | etot = -17.8271121341452 -218000 ekin = 2.42608117861514 | erot = 2.42380011003406 | epot = -22.2442965405807 | etot = -17.3944152519315 -219000 ekin = 2.31038806457502 | erot = 2.64910389607573 | epot = -22.2862511100887 | etot = -17.326759149438 -220000 ekin = 1.69989575631519 | erot = 2.34717348369245 | epot = -22.293625326138 | etot = -18.2465560861304 -221000 ekin = 2.0597604328414 | erot = 2.46172578709591 | epot = -22.2693428350923 | etot = -17.747856615155 -222000 ekin = 1.56778478035701 | erot = 2.12765432596981 | epot = -22.1639011265164 | etot = -18.4684620201895 -223000 ekin = 1.84761048251748 | erot = 1.88006246465219 | epot = -22.0932628941084 | etot = -18.3655899469387 -224000 ekin = 2.59436846043989 | erot = 2.94714248251078 | epot = -22.1101977210218 | etot = -16.5686867780712 -225000 ekin = 3.30446830369106 | erot = 2.86069163428056 | epot = -22.113033571733 | etot = -15.9478736337614 -226000 ekin = 3.03148439961004 | erot = 2.08577158411852 | epot = -22.1515480756286 | etot = -17.0342920919 -227000 ekin = 2.52473737037051 | erot = 3.15152330374791 | epot = -22.2272979755787 | etot = -16.5510373014602 -228000 ekin = 2.32773029487821 | erot = 2.67887550863526 | epot = -22.328984615758 | etot = -17.3223788122445 -229000 ekin = 2.908632187774 | erot = 2.89972099244785 | epot = -22.4590990625922 | etot = -16.6507458823704 -230000 ekin = 2.30901008738396 | erot = 3.48892218468537 | epot = -22.5811133380348 | etot = -16.7831810659655 -231000 ekin = 2.09445974553367 | erot = 3.10137653837904 | epot = -22.6273628788263 | etot = -17.4315265949136 -232000 ekin = 2.11347252785341 | erot = 1.99214840222577 | epot = -22.6148559367411 | etot = -18.509235006662 -233000 ekin = 2.31469131808301 | erot = 2.82702779723523 | epot = -22.5734680782721 | etot = -17.4317489629539 -234000 ekin = 2.08691986790862 | erot = 2.09006771152618 | epot = -22.5768924885421 | etot = -18.3999049091073 -235000 ekin = 2.43602788311011 | erot = 2.79756094595937 | epot = -22.5841308018507 | etot = -17.3505419727812 -236000 ekin = 2.93232983655882 | erot = 3.05945149934942 | epot = -22.501128172066 | etot = -16.5093468361577 -237000 ekin = 3.2236915032749 | erot = 3.26810349425041 | epot = -22.3869936414795 | etot = -15.8951986439542 -238000 ekin = 2.46749959233529 | erot = 2.31630563795609 | epot = -22.3210409459326 | etot = -17.5372357156412 -239000 ekin = 2.10887317283391 | erot = 2.47562990634414 | epot = -22.3008221039948 | etot = -17.7163190248167 -240000 ekin = 1.76092230208337 | erot = 2.62077674301801 | epot = -22.2503883436817 | etot = -17.8686892985803 -241000 ekin = 1.93966929781469 | erot = 1.41063904300122 | epot = -22.2367099354245 | etot = -18.8864015946086 -242000 ekin = 3.03220831764684 | erot = 2.02809667614525 | epot = -22.2529237351146 | etot = -17.1926187413225 -243000 ekin = 2.84396619393303 | erot = 1.7910064306681 | epot = -22.276868026587 | etot = -17.6418954019859 -244000 ekin = 1.94630661585722 | erot = 2.3722540427007 | epot = -22.2272698315536 | etot = -17.9087091729957 -245000 ekin = 2.21268964174709 | erot = 2.75899365563148 | epot = -22.1926413343767 | etot = -17.2209580369981 -246000 ekin = 2.07547606015104 | erot = 2.22089229769684 | epot = -22.1194718227511 | etot = -17.8231034649033 -247000 ekin = 1.58341517009487 | erot = 3.06778333448389 | epot = -22.0033087190278 | etot = -17.352110214449 -248000 ekin = 2.13651389755269 | erot = 3.53502738921422 | epot = -21.8495423719647 | etot = -16.1780010851978 -249000 ekin = 2.17149547481658 | erot = 3.29316066315612 | epot = -21.8139336708841 | etot = -16.3492775329114 -250000 ekin = 2.39365756609178 | erot = 2.39580124119371 | epot = -21.7677335444041 | etot = -16.9782747371186 -251000 ekin = 1.2828204065042 | erot = 2.24293125468608 | epot = -21.720961335271 | etot = -18.1952096740807 -252000 ekin = 1.76792385357404 | erot = 2.13774913157991 | epot = -21.7157436468391 | etot = -17.8100706616851 -253000 ekin = 2.15844787240193 | erot = 2.599108391401 | epot = -21.6939194867274 | etot = -16.9363632229245 -254000 ekin = 2.46988601582316 | erot = 1.99393049965303 | epot = -21.6738244724958 | etot = -17.2100079570196 -255000 ekin = 2.31014544453096 | erot = 2.03140480982291 | epot = -21.6888108217888 | etot = -17.3472605674349 -256000 ekin = 2.90570988017011 | erot = 2.61779108741194 | epot = -21.6304219101589 | etot = -16.1069209425768 -257000 ekin = 2.87227426842453 | erot = 2.08598550349755 | epot = -21.5998306482427 | etot = -16.6415708763207 -258000 ekin = 2.06365418401471 | erot = 2.33103720962374 | epot = -21.5019981919812 | etot = -17.1073067983428 -259000 ekin = 2.23106413601667 | erot = 2.88992031738565 | epot = -21.4929751490586 | etot = -16.3719906956563 -260000 ekin = 2.49064109684832 | erot = 2.38083177290805 | epot = -21.4659963710748 | etot = -16.5945235013184 -261000 ekin = 2.09140199827798 | erot = 2.40209752473159 | epot = -21.4076397934529 | etot = -16.9141402704434 -262000 ekin = 2.36091906713391 | erot = 2.66652490187928 | epot = -21.3599371255921 | etot = -16.3324931565789 -263000 ekin = 2.21121697961579 | erot = 2.73059503173093 | epot = -21.4187723839514 | etot = -16.4769603726047 -264000 ekin = 2.28961718487932 | erot = 2.75455515229635 | epot = -21.370776058554 | etot = -16.3266037213784 -265000 ekin = 1.71596203334806 | erot = 1.76104932073226 | epot = -21.2034176623528 | etot = -17.7264063082725 -266000 ekin = 2.51424635704546 | erot = 2.09488481391075 | epot = -21.081865694267 | etot = -16.4727345233107 -267000 ekin = 2.813938959256 | erot = 2.1423270532825 | epot = -21.1259701200623 | etot = -16.1697041075238 -268000 ekin = 3.10191854871685 | erot = 2.80451383793942 | epot = -21.0933882633303 | etot = -15.186955876674 -269000 ekin = 3.52550118014124 | erot = 2.35973600910592 | epot = -21.0585255577117 | etot = -15.1732883684646 -270000 ekin = 3.50731584216641 | erot = 1.86855463358786 | epot = -21.0937109465411 | etot = -15.7178404707868 -271000 ekin = 3.56753314536821 | erot = 2.08234599715571 | epot = -21.171785030296 | etot = -15.5219058877721 -272000 ekin = 2.43382567191708 | erot = 3.09591378837426 | epot = -21.2584464912719 | etot = -15.7287070309805 -273000 ekin = 2.38177594135517 | erot = 3.14028416008422 | epot = -21.3418702267284 | etot = -15.819810125289 -274000 ekin = 2.46408091312733 | erot = 2.01407385193325 | epot = -21.3513679347442 | etot = -16.8732131696836 -275000 ekin = 2.45653813926169 | erot = 3.0678001028164 | epot = -21.3769507768007 | etot = -15.8526125347226 -276000 ekin = 2.79508720985829 | erot = 2.87011619931109 | epot = -21.3368600634474 | etot = -15.671656654278 -277000 ekin = 2.21394865880381 | erot = 2.19504097967887 | epot = -21.2606836087454 | etot = -16.8516939702627 -278000 ekin = 2.75723780567064 | erot = 3.25107227641374 | epot = -21.1755556732392 | etot = -15.1672455911548 -279000 ekin = 2.50738352588257 | erot = 1.80312795092015 | epot = -21.119949297869 | etot = -16.8094378210663 -280000 ekin = 2.35419479075042 | erot = 1.75661043515291 | epot = -21.0612865360218 | etot = -16.9504813101184 -281000 ekin = 2.54091624756361 | erot = 2.29354970120308 | epot = -21.0950091005498 | etot = -16.2605431517831 -282000 ekin = 2.99712896075656 | erot = 2.42094408338315 | epot = -21.2220089565005 | etot = -15.8039359123608 -283000 ekin = 2.56696810638689 | erot = 2.10068113035835 | epot = -21.4031615768381 | etot = -16.7355123400928 -284000 ekin = 2.50149529685552 | erot = 3.1289485057255 | epot = -21.5256946024496 | etot = -15.8952507998685 -285000 ekin = 2.42104861452631 | erot = 1.77738842506871 | epot = -21.6343236201922 | etot = -17.4358865805972 -286000 ekin = 1.95703367775988 | erot = 2.02947038358404 | epot = -21.6777606373855 | etot = -17.6912565760416 -287000 ekin = 2.563069553437 | erot = 2.57822888294094 | epot = -21.709678841217 | etot = -16.5683804048391 -288000 ekin = 2.18408141161779 | erot = 1.69724000161795 | epot = -21.6059228036046 | etot = -17.7246013903688 -289000 ekin = 2.32975723406078 | erot = 1.67288237726622 | epot = -21.4690249265466 | etot = -17.4663853152196 -290000 ekin = 2.22773933829103 | erot = 2.00568808096403 | epot = -21.3936416309444 | etot = -17.1602142116893 -291000 ekin = 1.46140048209222 | erot = 2.68187349132486 | epot = -21.3203096611521 | etot = -17.1770356877351 -292000 ekin = 2.07752653885401 | erot = 2.42042811850752 | epot = -21.222571015269 | etot = -16.7246163579075 -293000 ekin = 2.14598735312316 | erot = 1.87232699516306 | epot = -21.150311210566 | etot = -17.1319968622798 -294000 ekin = 2.15249843510191 | erot = 2.17548638187735 | epot = -21.1209057143322 | etot = -16.7929208973529 -295000 ekin = 2.1341724680407 | erot = 2.31578295657372 | epot = -21.023273761855 | etot = -16.5733183372406 -296000 ekin = 1.52381700282725 | erot = 2.92433462308731 | epot = -21.0839283123443 | etot = -16.6357766864297 -297000 ekin = 2.45165869902148 | erot = 2.17953392904489 | epot = -21.0491333291916 | etot = -16.4179407011253 -298000 ekin = 1.77920935759372 | erot = 2.01251348063453 | epot = -21.0971977522748 | etot = -17.3054749140466 -299000 ekin = 1.87538650376615 | erot = 1.65135039658662 | epot = -21.119277949862 | etot = -17.5925410495092 -300000 ekin = 2.31670567519938 | erot = 1.51090264865399 | epot = -21.1789130994511 | etot = -17.3513047755977 -301000 ekin = 2.00567209290794 | erot = 2.01270349508403 | epot = -21.2857234594099 | etot = -17.2673478714179 -302000 ekin = 1.78598592595272 | erot = 2.23540554928791 | epot = -21.3905601140029 | etot = -17.3691686387623 -303000 ekin = 2.73278841880506 | erot = 1.64856089415774 | epot = -21.3608973804115 | etot = -16.9795480674487 -304000 ekin = 2.5809493598196 | erot = 2.00558555026354 | epot = -21.400198286629 | etot = -16.8136633765459 -305000 ekin = 2.43647384348742 | erot = 2.28275438290433 | epot = -21.3863075230184 | etot = -16.6670792966266 -306000 ekin = 2.14332823539982 | erot = 2.43384616344108 | epot = -21.3233075109442 | etot = -16.7461331121033 -307000 ekin = 3.21424191196813 | erot = 3.27591538479567 | epot = -21.289790084126 | etot = -14.7996327873622 -308000 ekin = 3.45838026839177 | erot = 2.68116130354005 | epot = -21.3419403426811 | etot = -15.2023987707493 -309000 ekin = 2.38041738433959 | erot = 2.92081370932153 | epot = -21.4463399141034 | etot = -16.1451088204423 -310000 ekin = 2.50977269558789 | erot = 2.34824464102404 | epot = -21.4648074532888 | etot = -16.6067901166769 -311000 ekin = 2.5748862881926 | erot = 2.29375467353798 | epot = -21.5151382155269 | etot = -16.6464972537963 -312000 ekin = 2.09623150906876 | erot = 2.93795890592973 | epot = -21.6260240426366 | etot = -16.5918336276381 -313000 ekin = 1.81844997291941 | erot = 2.28463898505894 | epot = -21.6999003790643 | etot = -17.596811421086 -314000 ekin = 2.32283241742321 | erot = 2.19580475273395 | epot = -21.6870491287185 | etot = -17.1684119585614 -315000 ekin = 1.84546653836013 | erot = 2.13886071139629 | epot = -21.7312132691438 | etot = -17.7468860193874 -316000 ekin = 2.1657114199577 | erot = 3.03124199276296 | epot = -21.7430929234306 | etot = -16.54613951071 -317000 ekin = 2.42793755919909 | erot = 3.57187833839243 | epot = -21.8303487369249 | etot = -15.8305328393334 -318000 ekin = 2.31418145055206 | erot = 3.02858542885927 | epot = -21.9347898317926 | etot = -16.5920229523813 -319000 ekin = 2.35032973997068 | erot = 3.16078759112676 | epot = -22.0387665246751 | etot = -16.5276491935776 -320000 ekin = 1.78202525445684 | erot = 2.83297321443626 | epot = -22.1187616541783 | etot = -17.5037631852852 -321000 ekin = 2.87441941784728 | erot = 2.26223197636946 | epot = -22.1065455913123 | etot = -16.9698941970956 -322000 ekin = 2.79013397204362 | erot = 2.68769432639937 | epot = -22.1121405540936 | etot = -16.6343122556507 -323000 ekin = 2.070121980457 | erot = 2.31830584817614 | epot = -22.1539458855415 | etot = -17.7655180569083 -324000 ekin = 2.58383941134684 | erot = 2.58296807603305 | epot = -22.1539753505052 | etot = -16.9871678631253 -325000 ekin = 3.43451304817783 | erot = 2.45405386180799 | epot = -21.938960387404 | etot = -16.0503934774182 -326000 ekin = 3.49680929786584 | erot = 2.85196633398114 | epot = -21.8204400999953 | etot = -15.4716644681484 -327000 ekin = 2.68799300805475 | erot = 2.21805195956658 | epot = -21.7892073548558 | etot = -16.8831623872344 -328000 ekin = 1.81477491971657 | erot = 2.35891534842887 | epot = -21.7275637950057 | etot = -17.5538735268603 -329000 ekin = 2.19319322627005 | erot = 2.40717958919079 | epot = -21.6826095784948 | etot = -17.0822367630339 -330000 ekin = 1.87131927244382 | erot = 2.03694340108432 | epot = -21.5934239674848 | etot = -17.6851612939566 -331000 ekin = 2.37197683084607 | erot = 1.80087022346347 | epot = -21.5641185835514 | etot = -17.3912715292419 -332000 ekin = 1.69601394569049 | erot = 2.54947032294377 | epot = -21.5986464339748 | etot = -17.3531621653406 -333000 ekin = 1.59867443991714 | erot = 2.14911483871163 | epot = -21.7162173059518 | etot = -17.968428027323 -334000 ekin = 2.25811733625553 | erot = 2.62323988136569 | epot = -21.7749416190679 | etot = -16.8935844014467 -335000 ekin = 2.93433632601273 | erot = 3.10350297573265 | epot = -21.7966831809595 | etot = -15.7588438792141 -336000 ekin = 2.76337640462581 | erot = 2.54930710489016 | epot = -21.7180312833467 | etot = -16.4053477738307 -337000 ekin = 3.19235531401951 | erot = 3.871461468741 | epot = -21.8022396262892 | etot = -14.7384228435286 -338000 ekin = 2.33305125173567 | erot = 2.13094194678888 | epot = -21.8068682042896 | etot = -17.3428750057651 -339000 ekin = 1.71673308889604 | erot = 2.30964121170971 | epot = -21.7941224580796 | etot = -17.7677481574738 -340000 ekin = 1.59424151294027 | erot = 3.16324993863714 | epot = -21.7679173396748 | etot = -17.0104258880974 -341000 ekin = 1.69465464335694 | erot = 3.18694861883741 | epot = -21.7067352043109 | etot = -16.8251319421166 -342000 ekin = 1.81243763026219 | erot = 2.60448215582795 | epot = -21.5993126794634 | etot = -17.1823928933732 -343000 ekin = 3.08243814047349 | erot = 2.92174663333229 | epot = -21.5855979229594 | etot = -15.5814131491537 -344000 ekin = 2.94964594107349 | erot = 3.10231272046814 | epot = -21.5506154266351 | etot = -15.4986567650935 -345000 ekin = 2.34525111670595 | erot = 2.88045261854214 | epot = -21.530734043011 | etot = -16.3050303077629 -346000 ekin = 2.03136740406842 | erot = 3.44352096435561 | epot = -21.4703041890966 | etot = -15.9954158206726 -347000 ekin = 2.34515762081498 | erot = 1.91414074840887 | epot = -21.3488386855954 | etot = -17.0895403163716 -348000 ekin = 2.76763212340836 | erot = 2.78035348102326 | epot = -21.3102796687364 | etot = -15.7622940643048 -349000 ekin = 2.29342234253801 | erot = 3.14526664575919 | epot = -21.3922932631024 | etot = -15.9536042748052 -350000 ekin = 2.17828641691343 | erot = 2.38211689163937 | epot = -21.3570978647003 | etot = -16.7966945561475 -351000 ekin = 2.2787342054874 | erot = 2.85568682453816 | epot = -21.3165609660186 | etot = -16.182139935993 -352000 ekin = 2.70894563927919 | erot = 2.77656375044279 | epot = -21.3565059314145 | etot = -15.8709965416925 -353000 ekin = 1.74748047732916 | erot = 2.14191122851258 | epot = -21.3195625770357 | etot = -17.430170871194 -354000 ekin = 2.30492780756569 | erot = 2.37159952583724 | epot = -21.3742968901642 | etot = -16.6977695567613 -355000 ekin = 2.32493886573113 | erot = 2.38411746089986 | epot = -21.339340741587 | etot = -16.630284414956 -356000 ekin = 2.97496495432681 | erot = 2.99166555175531 | epot = -21.2468948072712 | etot = -15.2802643011891 -357000 ekin = 1.79541671946026 | erot = 2.13971792108731 | epot = -21.2216819829681 | etot = -17.2865473424205 -358000 ekin = 2.06637919290965 | erot = 1.90765307155781 | epot = -21.2447441674953 | etot = -17.2707119030279 -359000 ekin = 2.02344077580052 | erot = 2.11726163321539 | epot = -21.2183688961264 | etot = -17.0776664871105 -360000 ekin = 2.64012587839158 | erot = 2.43776362828977 | epot = -21.1472477161847 | etot = -16.0693582095034 -361000 ekin = 2.41850555983883 | erot = 2.39054736245268 | epot = -21.2133787743639 | etot = -16.4043258520724 -362000 ekin = 2.2486199222758 | erot = 2.04489136793498 | epot = -21.2088914287919 | etot = -16.9153801385811 -363000 ekin = 3.21904252076973 | erot = 1.79717950163014 | epot = -21.2620537293498 | etot = -16.24583170695 -364000 ekin = 2.98456974484978 | erot = 2.18316673460244 | epot = -21.2883338312843 | etot = -16.120597351832 -365000 ekin = 2.49427392981408 | erot = 2.31205455481899 | epot = -21.4001153296815 | etot = -16.5937868450484 -366000 ekin = 2.61706523565787 | erot = 2.20229130507576 | epot = -21.4506718008963 | etot = -16.6313152601626 -367000 ekin = 2.24650816549397 | erot = 1.87906237362997 | epot = -21.5207044850599 | etot = -17.395133945936 -368000 ekin = 2.46672276241561 | erot = 2.37638546053105 | epot = -21.5628581383217 | etot = -16.719749915375 -369000 ekin = 2.0361463514985 | erot = 2.85426887707092 | epot = -21.6803034764487 | etot = -16.7898882478793 -370000 ekin = 2.13410724028003 | erot = 2.17304603842011 | epot = -21.7343761700059 | etot = -17.4272228913057 -371000 ekin = 2.21722409826113 | erot = 2.11058746733931 | epot = -21.6422617131999 | etot = -17.3144501475994 -372000 ekin = 1.88083333566672 | erot = 1.90617172826128 | epot = -21.6005499693119 | etot = -17.8135449053839 -373000 ekin = 1.98298204516521 | erot = 1.7826768212841 | epot = -21.5708808628646 | etot = -17.8052219964153 -374000 ekin = 2.88981201933267 | erot = 1.90326894499807 | epot = -21.4624711307906 | etot = -16.6693901664599 -375000 ekin = 2.31951869092548 | erot = 1.92779670517485 | epot = -21.3521768069862 | etot = -17.1048614108859 -376000 ekin = 2.60113015271721 | erot = 2.31181306588443 | epot = -21.34681055463 | etot = -16.4338673360284 -377000 ekin = 2.23867315344603 | erot = 1.65923992926405 | epot = -21.2611852709132 | etot = -17.3632721882031 -378000 ekin = 2.38125181613767 | erot = 2.54002618279123 | epot = -21.2390275318703 | etot = -16.3177495329414 -379000 ekin = 2.06952281308678 | erot = 2.11888196225294 | epot = -21.1940256065771 | etot = -17.0056208312374 -380000 ekin = 2.59961269461524 | erot = 2.37512007885032 | epot = -21.1885781090515 | etot = -16.213845335586 -381000 ekin = 2.42019573552876 | erot = 2.20667402504615 | epot = -21.1989968748535 | etot = -16.5721271142786 -382000 ekin = 2.04746564398744 | erot = 3.34439482672214 | epot = -21.2903574441546 | etot = -15.898496973445 -383000 ekin = 2.65699216362738 | erot = 1.56546061375907 | epot = -21.3572338418187 | etot = -17.1347810644323 -384000 ekin = 2.43156675693925 | erot = 2.00097327452754 | epot = -21.3434156392383 | etot = -16.9108756077715 -385000 ekin = 1.95152101616516 | erot = 3.28345377140316 | epot = -21.4173973675699 | etot = -16.1824225800016 -386000 ekin = 2.10919215730741 | erot = 2.90700736383438 | epot = -21.3963452767616 | etot = -16.3801457556198 -387000 ekin = 2.34448447096483 | erot = 2.50155013212482 | epot = -21.3487258248085 | etot = -16.5026912217188 -388000 ekin = 2.71771591111728 | erot = 2.76803950274557 | epot = -21.3515918112167 | etot = -15.8658363973538 -389000 ekin = 3.06825183100774 | erot = 3.06148533146043 | epot = -21.4826430036712 | etot = -15.352905841203 -390000 ekin = 2.56997560639923 | erot = 2.05646161654306 | epot = -21.5623801506969 | etot = -16.9359429277546 -391000 ekin = 2.1110114400687 | erot = 2.44612603817532 | epot = -21.6052888202632 | etot = -17.0481513420192 -392000 ekin = 2.58328475785099 | erot = 2.75249392862467 | epot = -21.7336094646939 | etot = -16.3978307782182 -393000 ekin = 2.03977041996533 | erot = 1.67448219405537 | epot = -21.8740604202475 | etot = -18.1598078062268 -394000 ekin = 2.1229408356241 | erot = 2.43410977254956 | epot = -21.9094739378951 | etot = -17.3524233297215 -395000 ekin = 2.48696003315341 | erot = 2.48225062557349 | epot = -21.8799685903484 | etot = -16.9107579316215 -396000 ekin = 3.18909661029635 | erot = 1.62675064803774 | epot = -21.852000027704 | etot = -17.0361527693699 -397000 ekin = 2.39161566907255 | erot = 2.17052346752456 | epot = -21.7939512244376 | etot = -17.2318120878405 -398000 ekin = 2.29946433742665 | erot = 2.18115834594541 | epot = -21.7285069861956 | etot = -17.2478843028235 -399000 ekin = 2.65449075133045 | erot = 2.80318185995815 | epot = -21.6503181327212 | etot = -16.1926455214326 -400000 ekin = 1.800915604111 | erot = 2.76596769548035 | epot = -21.6418619272709 | etot = -17.0749786276796 -401000 ekin = 2.35073130822393 | erot = 3.12299222057742 | epot = -21.6675586342212 | etot = -16.1938351054199 -402000 ekin = 3.95550191914708 | erot = 3.58855023837879 | epot = -21.5840051268209 | etot = -14.039952969295 -403000 ekin = 3.59615502379622 | erot = 3.44558176696766 | epot = -21.5781150073618 | etot = -14.5363782165979 -404000 ekin = 2.50360365952137 | erot = 3.01285184176069 | epot = -21.6258060641304 | etot = -16.1093505628483 -405000 ekin = 2.77241560720114 | erot = 3.10596549510785 | epot = -21.7046789178921 | etot = -15.8262978155831 -406000 ekin = 2.33934923007339 | erot = 2.04671975867732 | epot = -21.8191042863881 | etot = -17.4330352976373 -407000 ekin = 2.34277955096233 | erot = 1.89301717692528 | epot = -21.8450916691373 | etot = -17.6092949412497 -408000 ekin = 1.91561948833426 | erot = 2.1955160435361 | epot = -21.874404183535 | etot = -17.7632686516646 -409000 ekin = 1.98819074442449 | erot = 1.93870533007335 | epot = -21.9219030266971 | etot = -17.9950069521992 -410000 ekin = 1.59047218684375 | erot = 1.93259851333215 | epot = -21.9698907875581 | etot = -18.4468200873822 -411000 ekin = 1.88305362601542 | erot = 2.47249081001964 | epot = -22.0985208042932 | etot = -17.7429763682581 -412000 ekin = 2.51301623282815 | erot = 2.67550740966368 | epot = -22.2078537029906 | etot = -17.0193300604988 -413000 ekin = 2.81407439938451 | erot = 3.21402559358061 | epot = -22.1310120840188 | etot = -16.1029120910537 -414000 ekin = 2.79247479268938 | erot = 2.73425265524032 | epot = -22.0977113063587 | etot = -16.570983858429 -415000 ekin = 2.47916660937973 | erot = 2.25382914436718 | epot = -22.1646477745645 | etot = -17.4316520208176 -416000 ekin = 3.33232223339091 | erot = 1.56386062957 | epot = -22.1461937000839 | etot = -17.250010837123 -417000 ekin = 3.95877285814837 | erot = 2.43917045295872 | epot = -22.0789469190763 | etot = -15.6810036079692 -418000 ekin = 2.77978041892218 | erot = 2.67961998913592 | epot = -21.9429456651674 | etot = -16.4835452571093 -419000 ekin = 2.38024484823695 | erot = 2.99229133054454 | epot = -21.8677152868897 | etot = -16.4951791081082 -420000 ekin = 1.8087119495316 | erot = 1.84151089264677 | epot = -21.8596865313186 | etot = -18.2094636891402 -421000 ekin = 1.25971024821534 | erot = 1.84154088985395 | epot = -21.8144945739243 | etot = -18.713243435855 -422000 ekin = 1.38801644153196 | erot = 2.76287955544761 | epot = -21.9448046693443 | etot = -17.7939086723647 -423000 ekin = 1.61378102360037 | erot = 3.08643589903682 | epot = -21.9876910184368 | etot = -17.2874740957996 -424000 ekin = 2.38187559636675 | erot = 2.03497345340564 | epot = -22.0529622043823 | etot = -17.6361131546099 -425000 ekin = 2.30172600419956 | erot = 2.56124787306542 | epot = -22.0909144547264 | etot = -17.2279405774614 -426000 ekin = 2.08135734353847 | erot = 3.11029155110105 | epot = -22.0318884881516 | etot = -16.840239593512 -427000 ekin = 2.14905284759742 | erot = 2.44063059706749 | epot = -21.9221859408585 | etot = -17.3325024961936 -428000 ekin = 1.77884336055357 | erot = 1.65616500997461 | epot = -21.9003025672496 | etot = -18.4652941967215 -429000 ekin = 1.6463484323549 | erot = 2.54977814749913 | epot = -21.8505053104909 | etot = -17.6543787306369 -430000 ekin = 2.66566369380164 | erot = 2.85826638798746 | epot = -21.8749831872768 | etot = -16.3510531054877 -431000 ekin = 2.77262842672212 | erot = 1.57008239418361 | epot = -21.8682859290024 | etot = -17.5255751080967 -432000 ekin = 2.55459213758159 | erot = 1.62943387255927 | epot = -21.8357562133881 | etot = -17.6517302032473 -433000 ekin = 1.99645419170626 | erot = 2.46386731011039 | epot = -21.9426115259013 | etot = -17.4822900240846 -434000 ekin = 3.03855037499723 | erot = 2.70114732868001 | epot = -22.0521183162707 | etot = -16.3124206125934 -435000 ekin = 3.56249359412514 | erot = 1.3916907800745 | epot = -22.1907087359577 | etot = -17.236524361758 -436000 ekin = 2.9919519436941 | erot = 2.00780906096745 | epot = -22.1944569501236 | etot = -17.194695945462 -437000 ekin = 3.22983002449305 | erot = 1.78457838368284 | epot = -22.2079862630257 | etot = -17.1935778548498 -438000 ekin = 2.89357954274282 | erot = 1.84712438388029 | epot = -22.1640149633625 | etot = -17.4233110367394 -439000 ekin = 2.43548109922482 | erot = 2.6972566722099 | epot = -22.15552566419 | etot = -17.0227878927553 -440000 ekin = 2.2623759777343 | erot = 3.00532913929839 | epot = -22.1911581748161 | etot = -16.9234530577835 -441000 ekin = 2.91169601545459 | erot = 2.87109172357539 | epot = -22.3349024428918 | etot = -16.5521147038619 -442000 ekin = 2.09099397022228 | erot = 1.73520313922451 | epot = -22.4051258365299 | etot = -18.5789287270832 -443000 ekin = 1.89190436364779 | erot = 2.0033880577304 | epot = -22.4571595679749 | etot = -18.5618671465967 -444000 ekin = 2.07260612589383 | erot = 2.15261859961606 | epot = -22.4762155543905 | etot = -18.2509908288806 -445000 ekin = 2.10794043544075 | erot = 2.27849500108989 | epot = -22.528911365565 | etot = -18.1424759290343 -446000 ekin = 2.43249129570082 | erot = 2.857987858417 | epot = -22.5578450371516 | etot = -17.2673658830337 -447000 ekin = 2.18427449291498 | erot = 2.9948705870288 | epot = -22.6332096652429 | etot = -17.4540645852991 -448000 ekin = 2.33125251154889 | erot = 2.9537271150568 | epot = -22.6544934614541 | etot = -17.3695138348484 -449000 ekin = 2.34830834177128 | erot = 2.93433423081579 | epot = -22.6524261630772 | etot = -17.3697835904901 -450000 ekin = 1.83059864091627 | erot = 1.69583085832557 | epot = -22.5959718193006 | etot = -19.0695423200588 -451000 ekin = 1.97008420530445 | erot = 1.93005789483907 | epot = -22.6042016377466 | etot = -18.7040595376031 -452000 ekin = 1.36031716300771 | erot = 1.88416646481666 | epot = -22.5654500281941 | etot = -19.3209664003697 -453000 ekin = 2.08394677326601 | erot = 2.55637003071466 | epot = -22.3996731437446 | etot = -17.759356339764 -454000 ekin = 1.46122132979163 | erot = 2.19325045587991 | epot = -22.2559783518549 | etot = -18.6015065661833 -455000 ekin = 1.66159562683808 | erot = 2.72214658377913 | epot = -22.1100881227337 | etot = -17.7263459121165 -456000 ekin = 2.35139002285136 | erot = 1.99736695780608 | epot = -22.0265180206658 | etot = -17.6777610400084 -457000 ekin = 2.02337666353787 | erot = 2.36288174917836 | epot = -21.987041986587 | etot = -17.6007835738707 -458000 ekin = 1.74388716034854 | erot = 2.25704341258626 | epot = -22.0124765184275 | etot = -18.0115459454927 -459000 ekin = 2.51302694941203 | erot = 2.31610812350976 | epot = -22.0905335599533 | etot = -17.2613984870315 -460000 ekin = 2.20235980851235 | erot = 2.00073208070751 | epot = -22.0624281815267 | etot = -17.8593362923069 -461000 ekin = 2.27697813860511 | erot = 2.92153186175594 | epot = -22.0043780203814 | etot = -16.8058680200203 -462000 ekin = 2.61751250591993 | erot = 1.79446367088041 | epot = -22.034566251344 | etot = -17.6225900745436 -463000 ekin = 2.59076396942114 | erot = 3.29959067151567 | epot = -21.9680597931617 | etot = -16.0777051522249 -464000 ekin = 2.18897688760923 | erot = 2.37342380725931 | epot = -21.9014176363545 | etot = -17.3390169414859 -465000 ekin = 2.55336811292171 | erot = 3.60208553232435 | epot = -21.8218243406516 | etot = -15.6663706954055 -466000 ekin = 1.98087073364118 | erot = 2.88377492118972 | epot = -21.8240279062597 | etot = -16.9593822514288 -467000 ekin = 1.63963444033068 | erot = 2.61720118783827 | epot = -21.9072568806945 | etot = -17.6504212525255 -468000 ekin = 1.11353612829142 | erot = 3.36362638075103 | epot = -21.9675488944805 | etot = -17.490386385438 -469000 ekin = 1.72228182007046 | erot = 2.77659856111655 | epot = -21.9967286251287 | etot = -17.4978482439417 -470000 ekin = 1.86957223270987 | erot = 2.88200736733018 | epot = -22.0532435258198 | etot = -17.3016639257798 -471000 ekin = 2.73889257490363 | erot = 2.33805868565126 | epot = -22.1018048913227 | etot = -17.0248536307678 -472000 ekin = 2.69336835751318 | erot = 2.14497398823592 | epot = -22.1783319655624 | etot = -17.3399896198133 -473000 ekin = 2.2834012228809 | erot = 2.08779065134066 | epot = -22.2062566289287 | etot = -17.8350647547071 -474000 ekin = 2.2375339334342 | erot = 2.18021358366906 | epot = -22.2186470965394 | etot = -17.8008995794361 -475000 ekin = 2.52144972759887 | erot = 2.10742888877791 | epot = -22.2200376200674 | etot = -17.5911590036907 -476000 ekin = 2.21750839437398 | erot = 1.76993465858265 | epot = -22.122840778158 | etot = -18.1353977252014 -477000 ekin = 2.49639604606981 | erot = 2.38997154938616 | epot = -22.0914213950017 | etot = -17.2050537995458 -478000 ekin = 1.92476411077776 | erot = 2.05068061613982 | epot = -22.1165013146126 | etot = -18.141056587695 -479000 ekin = 2.27814065534965 | erot = 3.09902158675162 | epot = -22.1039609371193 | etot = -16.726798695018 -480000 ekin = 1.67684718675217 | erot = 2.75298455656159 | epot = -22.107572084908 | etot = -17.6777403415942 -481000 ekin = 1.82004035403442 | erot = 2.94243611851483 | epot = -22.0570042571709 | etot = -17.2945277846216 -482000 ekin = 2.15620792762657 | erot = 2.07225318674483 | epot = -22.0195504604851 | etot = -17.7910893461137 -483000 ekin = 1.49597937205779 | erot = 1.99748154603234 | epot = -21.9846691787552 | etot = -18.4912082606651 -484000 ekin = 1.84801031899853 | erot = 2.33839306142132 | epot = -22.057622803598 | etot = -17.8712194231781 -485000 ekin = 1.63994449952444 | erot = 2.49474020960605 | epot = -22.0873319631203 | etot = -17.9526472539898 -486000 ekin = 1.86878710017944 | erot = 2.15121977781066 | epot = -22.0738722433192 | etot = -18.0538653653291 -487000 ekin = 2.36575535267026 | erot = 3.1012540127672 | epot = -22.144928398152 | etot = -16.6779190327145 -488000 ekin = 2.28442246943195 | erot = 3.25683393002514 | epot = -22.0988506325681 | etot = -16.557594233111 -489000 ekin = 2.42271484675 | erot = 2.545421459121 | epot = -22.0089541135478 | etot = -17.0408178076768 -490000 ekin = 2.15700463004959 | erot = 3.54046810332718 | epot = -21.9046622319151 | etot = -16.2071894985384 -491000 ekin = 2.21877065503535 | erot = 2.48745097433186 | epot = -21.7908019627883 | etot = -17.0845803334211 -492000 ekin = 2.42517437413503 | erot = 2.76311171529556 | epot = -21.7601749752715 | etot = -16.5718888858409 -493000 ekin = 1.78704503482098 | erot = 2.27560531894263 | epot = -21.8193757259442 | etot = -17.7567253721806 -494000 ekin = 2.08676036701357 | erot = 2.99995787427429 | epot = -21.8611051542237 | etot = -16.7743869129359 -495000 ekin = 2.13526814465422 | erot = 2.49327519100041 | epot = -21.9512664264056 | etot = -17.322723090751 -496000 ekin = 2.04396376951351 | erot = 2.616205394925 | epot = -21.9926597066747 | etot = -17.3324905422362 -497000 ekin = 2.51384009922531 | erot = 1.7082513952147 | epot = -21.9316573881385 | etot = -17.7095658936985 -498000 ekin = 2.15599563393455 | erot = 1.79545847566161 | epot = -21.8684844569259 | etot = -17.9170303473297 -499000 ekin = 3.01748439271979 | erot = 1.75754764004203 | epot = -21.8933218662966 | etot = -17.1182898335348 -500000 ekin = 2.75260982901106 | erot = 2.51842805388797 | epot = -21.8943946135574 | etot = -16.6233567306584 -501000 ekin = 2.67931288903133 | erot = 3.01160406637169 | epot = -21.7750232065095 | etot = -16.0841062511065 -502000 ekin = 1.89360306182664 | erot = 3.89791941021244 | epot = -21.6573468922303 | etot = -15.8658244201912 -503000 ekin = 1.79321931974652 | erot = 2.94204976962203 | epot = -21.4684952360274 | etot = -16.7332261466588 -504000 ekin = 1.67757593959819 | erot = 3.03667519772549 | epot = -21.3740498051044 | etot = -16.6597986677807 -505000 ekin = 2.71879314198246 | erot = 2.13553052885652 | epot = -21.3748517524097 | etot = -16.5205280815708 -506000 ekin = 2.26416011641767 | erot = 2.03983903573872 | epot = -21.3744734731022 | etot = -17.0704743209458 -507000 ekin = 3.1361217829786 | erot = 2.43598082432094 | epot = -21.4637546760327 | etot = -15.8916520687332 -508000 ekin = 2.50986106907072 | erot = 2.54739392181408 | epot = -21.6231060681634 | etot = -16.5658510772786 -509000 ekin = 2.11468804004737 | erot = 2.82565642150502 | epot = -21.7737120459513 | etot = -16.833367584399 -510000 ekin = 2.15001055304937 | erot = 1.42727017491936 | epot = -21.8417870574446 | etot = -18.2645063294759 -511000 ekin = 2.52545394756595 | erot = 2.75161712587396 | epot = -21.9086876613652 | etot = -16.6316165879253 -512000 ekin = 2.30866784309731 | erot = 2.74554976662382 | epot = -21.9096028664776 | etot = -16.8553852567565 -513000 ekin = 2.48902345599679 | erot = 2.14823762928073 | epot = -21.8729373600799 | etot = -17.2356762748023 -514000 ekin = 2.80071109914889 | erot = 2.54489890263222 | epot = -22.0260959105663 | etot = -16.6804859087852 -515000 ekin = 2.54951114466541 | erot = 1.81830545608794 | epot = -22.1182236024142 | etot = -17.7504070016608 -516000 ekin = 2.82429114749714 | erot = 2.22223190254032 | epot = -22.2027443448739 | etot = -17.1562212948364 -517000 ekin = 2.0440652856654 | erot = 2.05268379810237 | epot = -22.2270328001489 | etot = -18.1302837163812 -518000 ekin = 2.19098614618396 | erot = 2.75233490105158 | epot = -22.2209877154937 | etot = -17.2776666682582 -519000 ekin = 2.24036502705843 | erot = 2.22532553600965 | epot = -22.3180679614818 | etot = -17.8523773984137 -520000 ekin = 1.89058003919379 | erot = 2.20041260684314 | epot = -22.4024099853452 | etot = -18.3114173393083 -521000 ekin = 2.59235690452871 | erot = 1.87867658572833 | epot = -22.562076955749 | etot = -18.091043465492 -522000 ekin = 3.47612340255834 | erot = 1.77091315262669 | epot = -22.6560013672146 | etot = -17.4089648120296 -523000 ekin = 2.86973311568959 | erot = 2.45931135481362 | epot = -22.7015468187878 | etot = -17.3725023482846 -524000 ekin = 2.43256318748705 | erot = 2.35726786724123 | epot = -22.6382055947879 | etot = -17.8483745400596 -525000 ekin = 1.5862220801759 | erot = 2.67712917770356 | epot = -22.6016118927227 | etot = -18.3382606348432 -526000 ekin = 1.68941966580457 | erot = 1.56387338489763 | epot = -22.5489288531346 | etot = -19.2956358024324 -527000 ekin = 2.25322718958956 | erot = 1.91908592764601 | epot = -22.4417549635527 | etot = -18.2694418463172 -528000 ekin = 2.66412422381676 | erot = 2.81704928468167 | epot = -22.424921723381 | etot = -16.9437482148826 -529000 ekin = 2.68379060052796 | erot = 3.01205280488719 | epot = -22.4295574265689 | etot = -16.7337140211538 -530000 ekin = 2.58073227215728 | erot = 2.12870295195895 | epot = -22.2883086480465 | etot = -17.5788734239303 -531000 ekin = 2.96770457160388 | erot = 2.3539174245284 | epot = -22.185671173874 | etot = -16.8640491777417 -532000 ekin = 2.56038964370912 | erot = 2.30878740571671 | epot = -22.1997799918586 | etot = -17.3306029424328 -533000 ekin = 2.47143825522097 | erot = 2.96338918263316 | epot = -22.2065233272062 | etot = -16.771695889352 -534000 ekin = 2.10112886915673 | erot = 2.0617073534125 | epot = -22.2366529232831 | etot = -18.0738167007138 -535000 ekin = 3.76894732289842 | erot = 2.64646203076615 | epot = -22.2276744548844 | etot = -15.8122651012198 -536000 ekin = 2.7696162230836 | erot = 1.9580523477121 | epot = -22.165452917338 | etot = -17.4377843465423 -537000 ekin = 2.84154244437418 | erot = 2.62704512023092 | epot = -22.0849688339384 | etot = -16.6163812693333 -538000 ekin = 2.6844256357838 | erot = 2.11441739965432 | epot = -22.0125688846838 | etot = -17.2137258492457 -539000 ekin = 2.71421145807768 | erot = 2.40915133591279 | epot = -22.1313332530724 | etot = -17.0079704590819 -540000 ekin = 2.43518407250594 | erot = 2.49363815768249 | epot = -22.2749632551309 | etot = -17.3461410249425 -541000 ekin = 3.40444579850307 | erot = 2.79359613706623 | epot = -22.3466180642399 | etot = -16.1485761286706 -542000 ekin = 2.43275262454038 | erot = 2.89267129498909 | epot = -22.3556133688797 | etot = -17.0301894493503 -543000 ekin = 2.33375802900843 | erot = 2.8782226670354 | epot = -22.3545030310921 | etot = -17.1425223350483 -544000 ekin = 2.20372430185483 | erot = 1.45976141003991 | epot = -22.3227611685587 | etot = -18.659275456664 -545000 ekin = 2.44172510086273 | erot = 2.14426798374486 | epot = -22.3064237448697 | etot = -17.7204306602621 -546000 ekin = 1.97339115566055 | erot = 2.22847557914697 | epot = -22.2636677476265 | etot = -18.061801012819 -547000 ekin = 2.54002001617726 | erot = 1.88945501268907 | epot = -22.2158143598029 | etot = -17.7863393309366 -548000 ekin = 1.68526456618957 | erot = 1.65049155866195 | epot = -22.1214578510427 | etot = -18.7857017261912 -549000 ekin = 1.87014690614357 | erot = 2.68376307045223 | epot = -22.3040985050479 | etot = -17.7501885284521 -550000 ekin = 1.8122987774087 | erot = 1.59166644509218 | epot = -22.4560870327804 | etot = -19.0521218102795 -551000 ekin = 2.18773128797503 | erot = 2.27087388044657 | epot = -22.5158361799814 | etot = -18.0572310115598 -552000 ekin = 2.05249497087455 | erot = 2.50761265901317 | epot = -22.5719393540104 | etot = -18.0118317241227 -553000 ekin = 2.95454924363312 | erot = 2.14558063826842 | epot = -22.6616695566089 | etot = -17.5615396747074 -554000 ekin = 2.82907288726942 | erot = 1.93583607418193 | epot = -22.8114472173087 | etot = -18.0465382558574 -555000 ekin = 2.39144194814064 | erot = 2.26903467149231 | epot = -22.8607776699893 | etot = -18.2003010503564 -556000 ekin = 2.29377130416531 | erot = 2.58082229477441 | epot = -22.912355957237 | etot = -18.0377623582973 -557000 ekin = 2.83942594504113 | erot = 1.46630323732686 | epot = -22.995524783667 | etot = -18.689795601299 -558000 ekin = 2.74466783679159 | erot = 2.01704787654692 | epot = -23.0269943374554 | etot = -18.2652786241169 -559000 ekin = 3.32013685758138 | erot = 2.33070588278053 | epot = -23.0724440783112 | etot = -17.4216013379493 -560000 ekin = 3.06575014862304 | erot = 2.32407723614369 | epot = -23.0584521203812 | etot = -17.6686247356144 -561000 ekin = 2.86678914129225 | erot = 2.08494050984237 | epot = -22.9757329649368 | etot = -18.0240033138022 -562000 ekin = 3.27279507804288 | erot = 2.51484206553919 | epot = -22.876340054703 | etot = -17.0887029111209 -563000 ekin = 2.66038070150058 | erot = 1.6411653076616 | epot = -22.8496252506976 | etot = -18.5480792415354 -564000 ekin = 2.80463843262515 | erot = 2.52666063138349 | epot = -22.8040898690868 | etot = -17.4727908050782 -565000 ekin = 2.64623234011006 | erot = 2.04560086917497 | epot = -22.7528472206812 | etot = -18.0610140113961 -566000 ekin = 2.31861442156789 | erot = 2.17941765713977 | epot = -22.7559143900142 | etot = -18.2578823113065 -567000 ekin = 1.93226018038665 | erot = 2.82020539323093 | epot = -22.7113049006744 | etot = -17.9588393270568 -568000 ekin = 2.20139908423164 | erot = 2.21734716414422 | epot = -22.7309883250973 | etot = -18.3122420767214 -569000 ekin = 2.47190977966691 | erot = 2.65968832242272 | epot = -22.6724326928843 | etot = -17.5408345907946 -570000 ekin = 2.43697670060318 | erot = 1.88669477532771 | epot = -22.6652860601546 | etot = -18.3416145842237 -571000 ekin = 2.89014026085716 | erot = 2.95617526869998 | epot = -22.6585089246085 | etot = -16.8121933950514 -572000 ekin = 1.93596118948627 | erot = 3.77290573984752 | epot = -22.6179860492832 | etot = -16.9091191199494 -573000 ekin = 2.40454634711712 | erot = 2.31316721466244 | epot = -22.5941857447927 | etot = -17.8764721830132 -574000 ekin = 1.69171540489496 | erot = 2.32939319863946 | epot = -22.6485181547003 | etot = -18.6274095511659 -575000 ekin = 1.84147438222145 | erot = 1.86451086977538 | epot = -22.7257563443533 | etot = -19.0197710923564 -576000 ekin = 3.22125710715105 | erot = 2.95826776175098 | epot = -22.6735851458117 | etot = -16.4940602769097 -577000 ekin = 2.86653117003728 | erot = 2.88010628292142 | epot = -22.6061554079342 | etot = -16.8595179549755 -578000 ekin = 2.38032268318988 | erot = 2.7671019602175 | epot = -22.4015577816724 | etot = -17.254133138265 -579000 ekin = 2.40088404436445 | erot = 1.99411758494037 | epot = -22.2441807849415 | etot = -17.8491791556366 -580000 ekin = 2.62022193893446 | erot = 1.97772953708398 | epot = -22.0981459564787 | etot = -17.5001944804603 -581000 ekin = 2.04609920382364 | erot = 3.02021971917519 | epot = -21.9713515823038 | etot = -16.9050326593049 -582000 ekin = 2.17556767215607 | erot = 3.10885810822425 | epot = -21.8451828402322 | etot = -16.5607570598519 -583000 ekin = 2.12792577884129 | erot = 2.7142175246668 | epot = -21.8090540348 | etot = -16.9669107312919 -584000 ekin = 2.99197492146327 | erot = 2.6185428756741 | epot = -21.801471166218 | etot = -16.1909533690806 -585000 ekin = 2.41600413666428 | erot = 2.49968403996097 | epot = -21.758207975142 | etot = -16.8425197985167 -586000 ekin = 3.57880609498066 | erot = 1.99026777936242 | epot = -21.7793800190222 | etot = -16.2103061446791 -587000 ekin = 3.5356931879588 | erot = 1.96660845702857 | epot = -21.7574182658134 | etot = -16.255116620826 -588000 ekin = 2.80385841316336 | erot = 1.58927534150912 | epot = -21.7290695763864 | etot = -17.3359358217139 -589000 ekin = 2.31178332958481 | erot = 2.19605556561578 | epot = -21.7771889269559 | etot = -17.2693500317554 -590000 ekin = 2.57159955455666 | erot = 1.71441305781987 | epot = -21.7801644206484 | etot = -17.4941518082719 -591000 ekin = 1.90027597697965 | erot = 3.807942925131 | epot = -21.8693595444135 | etot = -16.1611406423029 -592000 ekin = 2.10287592275467 | erot = 2.85572724854608 | epot = -21.9132458203291 | etot = -16.9546426490283 -593000 ekin = 1.6630679389305 | erot = 2.4593797067513 | epot = -21.9499391362603 | etot = -17.8274914905785 -594000 ekin = 1.85147249869391 | erot = 2.37596539021725 | epot = -22.0748010854883 | etot = -17.8473631965771 -595000 ekin = 1.62801913987931 | erot = 2.13760745860406 | epot = -22.2650343535208 | etot = -18.4994077550374 -596000 ekin = 1.8507787756783 | erot = 1.55277904845735 | epot = -22.3618759263936 | etot = -18.958318102258 -597000 ekin = 2.21873580046472 | erot = 2.31247364510899 | epot = -22.4218283315558 | etot = -17.8906188859821 -598000 ekin = 1.87152940931079 | erot = 3.02770945247866 | epot = -22.4928956008977 | etot = -17.5936567391083 -599000 ekin = 2.84160333456022 | erot = 2.19202304201413 | epot = -22.5210806388342 | etot = -17.4874542622599 -600000 ekin = 2.63824255094171 | erot = 2.13280883838529 | epot = -22.4361553764614 | etot = -17.6651039871344 -601000 ekin = 2.95991744971104 | erot = 3.20891387142302 | epot = -22.3089419175364 | etot = -16.1401105964023 -602000 ekin = 2.94287171911394 | erot = 2.68015446943143 | epot = -22.2205146380183 | etot = -16.5974884494729 -603000 ekin = 2.59651768027527 | erot = 2.70994674634415 | epot = -22.1626040385702 | etot = -16.8561396119508 -604000 ekin = 1.79237423166218 | erot = 2.11638057359598 | epot = -22.1934477586593 | etot = -18.2846929534011 -605000 ekin = 1.83068473031178 | erot = 2.27957438186889 | epot = -22.2254684973409 | etot = -18.1152093851602 -606000 ekin = 2.3318585405123 | erot = 2.19626289047849 | epot = -22.1692552740622 | etot = -17.6411338430714 -607000 ekin = 2.71184010988539 | erot = 2.97108975720826 | epot = -22.1536579122904 | etot = -16.4707280451968 -608000 ekin = 2.42009843612053 | erot = 2.4160965003039 | epot = -22.110570505977 | etot = -17.2743755695526 -609000 ekin = 1.88829617874732 | erot = 2.63290748875971 | epot = -21.9999822454274 | etot = -17.4787785779204 -610000 ekin = 3.00361337450474 | erot = 2.1770990927646 | epot = -21.9226199750059 | etot = -16.7419075077366 -611000 ekin = 2.45804405292799 | erot = 2.74756316868512 | epot = -21.9190479764513 | etot = -16.7134407548382 -612000 ekin = 2.52217588638914 | erot = 2.13391253924555 | epot = -21.9544188877756 | etot = -17.2983304621409 -613000 ekin = 3.03676008822022 | erot = 2.11841016157454 | epot = -22.0017416346015 | etot = -16.8465713848068 -614000 ekin = 2.28555718180927 | erot = 3.00540928021108 | epot = -22.076196502849 | etot = -16.7852300408287 -615000 ekin = 1.68510287809686 | erot = 2.62386193001631 | epot = -22.0327006368424 | etot = -17.7237358287293 -616000 ekin = 1.93880828018172 | erot = 2.84237691352499 | epot = -22.0612297066235 | etot = -17.2800445129167 -617000 ekin = 2.16704933019324 | erot = 2.51662857724104 | epot = -22.0595683849495 | etot = -17.3758904775152 -618000 ekin = 3.09933970351516 | erot = 2.74545743402537 | epot = -22.0170483082271 | etot = -16.1722511706866 -619000 ekin = 3.43176670397203 | erot = 2.12195823326367 | epot = -21.9875785418916 | etot = -16.4338536046559 -620000 ekin = 4.28780554984769 | erot = 2.22709196760531 | epot = -21.9605251543895 | etot = -15.4456276369365 -621000 ekin = 3.0817124482252 | erot = 2.57159564010566 | epot = -21.9025163812385 | etot = -16.2492082929077 -622000 ekin = 2.7316886075754 | erot = 2.62820058118157 | epot = -21.8412338594045 | etot = -16.4813446706475 -623000 ekin = 2.85452079274903 | erot = 2.89943500147418 | epot = -21.6852443941174 | etot = -15.9312885998942 -624000 ekin = 2.03273271064348 | erot = 3.41737453659277 | epot = -21.5180611078538 | etot = -16.0679538606176 -625000 ekin = 2.93860287466087 | erot = 2.67773023023639 | epot = -21.3855450802948 | etot = -15.7692119753975 -626000 ekin = 2.62772208534214 | erot = 2.18165419852426 | epot = -21.3747765229082 | etot = -16.5654002390418 -627000 ekin = 2.31977818310487 | erot = 2.39484209061114 | epot = -21.4372090577008 | etot = -16.7225887839848 -628000 ekin = 2.22183190227213 | erot = 2.76412054255637 | epot = -21.5969078027882 | etot = -16.6109553579597 -629000 ekin = 2.21761787409423 | erot = 1.98066149405243 | epot = -21.7578561859452 | etot = -17.5595768177986 -630000 ekin = 2.47350494176362 | erot = 2.13931642231379 | epot = -21.7773766650218 | etot = -17.1645553009444 -631000 ekin = 2.05047278007875 | erot = 1.79296462014617 | epot = -21.7869475538217 | etot = -17.9435101535968 -632000 ekin = 1.64845667747476 | erot = 3.28396465847895 | epot = -21.8333012025328 | etot = -16.9008798665791 -633000 ekin = 2.3500132343185 | erot = 2.33909753328782 | epot = -21.9539301797825 | etot = -17.2648194121761 -634000 ekin = 2.35704893279045 | erot = 2.4648325451317 | epot = -22.0204072629832 | etot = -17.1985257850611 -635000 ekin = 1.98907577162677 | erot = 3.37071781675286 | epot = -22.0690924871448 | etot = -16.7092988987652 -636000 ekin = 2.50984196335063 | erot = 2.4868899453394 | epot = -22.0714906026257 | etot = -17.0747586939356 -637000 ekin = 2.77501317112848 | erot = 2.80709332215511 | epot = -21.9923972278243 | etot = -16.4102907345407 -638000 ekin = 2.43799129572064 | erot = 2.79007198504632 | epot = -22.0591413868447 | etot = -16.8310781060777 -639000 ekin = 1.88073995546173 | erot = 2.09679843998315 | epot = -22.0499554202514 | etot = -18.0724170248065 -640000 ekin = 2.08188045172847 | erot = 3.35894090591921 | epot = -21.9976614802368 | etot = -16.5568401225891 -641000 ekin = 2.09182367506332 | erot = 2.24091541077085 | epot = -22.0969663672431 | etot = -17.764227281409 -642000 ekin = 2.29630816296813 | erot = 2.69496533496292 | epot = -22.1529742829376 | etot = -17.1617007850066 -643000 ekin = 2.73580847855275 | erot = 2.20074971448877 | epot = -22.0965451673466 | etot = -17.1599869743051 -644000 ekin = 2.87754738253099 | erot = 3.41752705378108 | epot = -22.1314614085222 | etot = -15.8363869722101 -645000 ekin = 2.42917363330758 | erot = 2.10617126422417 | epot = -22.0684179655268 | etot = -17.5330730679951 -646000 ekin = 2.69471397724187 | erot = 1.80009045225373 | epot = -21.899080412774 | etot = -17.4042759832784 -647000 ekin = 2.47700110999563 | erot = 1.99221351689818 | epot = -21.6986646197609 | etot = -17.2294499928671 -648000 ekin = 2.27330015032657 | erot = 1.67398094476719 | epot = -21.7984825454865 | etot = -17.8512014503928 -649000 ekin = 2.56285740395647 | erot = 1.7492398457574 | epot = -22.193749898698 | etot = -17.8816526489841 -650000 ekin = 2.76035969172864 | erot = 2.20984080080436 | epot = -22.3536470081185 | etot = -17.3834465155855 -651000 ekin = 2.26255154523698 | erot = 3.27496991661066 | epot = -22.4274148303115 | etot = -16.8898933684638 -652000 ekin = 2.37279828196649 | erot = 2.29630046443082 | epot = -22.4456643066012 | etot = -17.7765655602039 -653000 ekin = 2.07651844100825 | erot = 2.14699861111495 | epot = -22.4487464586909 | etot = -18.2252294065677 -654000 ekin = 2.31499263290336 | erot = 1.84798657187727 | epot = -22.4715481148371 | etot = -18.3085689100565 -655000 ekin = 2.12344600536595 | erot = 1.79742316518917 | epot = -22.4407504825062 | etot = -18.5198813119511 -656000 ekin = 2.44238672537433 | erot = 2.33314467296102 | epot = -22.4050518721078 | etot = -17.6295204737724 -657000 ekin = 2.44684720738066 | erot = 2.8701090435522 | epot = -22.3954429054341 | etot = -17.0784866545012 -658000 ekin = 2.49369435044193 | erot = 2.86933833355584 | epot = -22.3577847118899 | etot = -16.9947520278921 -659000 ekin = 3.38707666874149 | erot = 2.79117377884123 | epot = -22.223368870827 | etot = -16.0451184232443 -660000 ekin = 2.69464750718904 | erot = 1.98877163007961 | epot = -22.0868371976708 | etot = -17.4034180604021 -661000 ekin = 2.21484386108131 | erot = 2.52686187560577 | epot = -21.9324475602906 | etot = -17.1907418236035 -662000 ekin = 2.04483468145689 | erot = 2.52786214958085 | epot = -21.8656118118387 | etot = -17.2929149808009 -663000 ekin = 2.25554994547888 | erot = 2.29981193022508 | epot = -21.8121151333291 | etot = -17.2567532576251 -664000 ekin = 2.38378154392877 | erot = 1.87242521142839 | epot = -21.7163692740767 | etot = -17.4601625187196 -665000 ekin = 2.64936843119576 | erot = 2.29899861147532 | epot = -21.6597356727188 | etot = -16.7113686300477 -666000 ekin = 1.64494457505825 | erot = 2.30638161556459 | epot = -21.5641898301394 | etot = -17.6128636395165 -667000 ekin = 1.65735220589392 | erot = 2.82614341732318 | epot = -21.4751653585362 | etot = -16.9916697353191 -668000 ekin = 2.4984482511387 | erot = 3.27950898400316 | epot = -21.3387145475146 | etot = -15.5607573123728 -669000 ekin = 1.61611201967415 | erot = 2.67203522811057 | epot = -21.2655442255719 | etot = -16.9773969777871 -670000 ekin = 2.23077474650819 | erot = 2.61363425835143 | epot = -21.200889249368 | etot = -16.3564802445084 -671000 ekin = 2.26765830930916 | erot = 2.16388121545908 | epot = -21.1515274648836 | etot = -16.7199879401153 -672000 ekin = 1.94916146819699 | erot = 1.65479713709718 | epot = -21.0650678898705 | etot = -17.4611092845763 -673000 ekin = 1.92556066199439 | erot = 2.07900172108798 | epot = -21.0394363569889 | etot = -17.0348739739065 -674000 ekin = 2.12432357869026 | erot = 2.16781085660272 | epot = -21.0725830613714 | etot = -16.7804486260784 -675000 ekin = 2.06851819258985 | erot = 2.48317287761026 | epot = -21.1036073609478 | etot = -16.5519162907477 -676000 ekin = 2.45484997181755 | erot = 2.79183078710856 | epot = -21.1301283632783 | etot = -15.8834476043522 -677000 ekin = 2.20334154136532 | erot = 2.62444584525115 | epot = -21.1495626618895 | etot = -16.321775275273 -678000 ekin = 2.1472401432145 | erot = 2.79545747432264 | epot = -21.0405241444795 | etot = -16.0978265269423 -679000 ekin = 2.17033413623503 | erot = 2.18513653140294 | epot = -20.9421185444834 | etot = -16.5866478768454 -680000 ekin = 2.0995303513191 | erot = 2.68744418062156 | epot = -20.96987060062 | etot = -16.1828960686794 -681000 ekin = 2.18304447310098 | erot = 1.84812119436562 | epot = -21.0743862151371 | etot = -17.0432205476705 -682000 ekin = 3.04278123794938 | erot = 2.40409586716962 | epot = -21.0797568548334 | etot = -15.6328797497144 -683000 ekin = 2.86269023881705 | erot = 2.09728443896194 | epot = -21.0991655055584 | etot = -16.1391908277794 -684000 ekin = 1.98767037715953 | erot = 2.9959196882898 | epot = -21.1362036730577 | etot = -16.1526136076084 -685000 ekin = 1.57295457528713 | erot = 2.03034771002016 | epot = -21.146987158564 | etot = -17.5436848732567 -686000 ekin = 2.37743960028747 | erot = 2.54064910359147 | epot = -21.1479154694211 | etot = -16.2298267655422 -687000 ekin = 1.90905424981707 | erot = 2.87649471802562 | epot = -21.1390488337729 | etot = -16.3534998659303 -688000 ekin = 2.62740557427769 | erot = 2.25087525520175 | epot = -21.1259808926564 | etot = -16.247700063177 -689000 ekin = 2.68026630351849 | erot = 2.6526429118304 | epot = -21.2405393346747 | etot = -15.9076301193258 -690000 ekin = 2.56393304559924 | erot = 2.48495065222977 | epot = -21.4016015121778 | etot = -16.3527178143488 -691000 ekin = 2.19270435018289 | erot = 2.52704457861404 | epot = -21.5068265566119 | etot = -16.787077627815 -692000 ekin = 2.34077396593207 | erot = 3.24867065054241 | epot = -21.5176021816803 | etot = -15.9281575652058 -693000 ekin = 2.29029075483227 | erot = 3.0057489559252 | epot = -21.5358866889498 | etot = -16.2398469781924 -694000 ekin = 2.65674046511194 | erot = 2.58629868712488 | epot = -21.7490636357026 | etot = -16.5060244834658 -695000 ekin = 2.43126197328693 | erot = 1.19706323700545 | epot = -21.9401398969725 | etot = -18.3118146866802 -696000 ekin = 1.81474808623755 | erot = 1.46920096781106 | epot = -21.9089223337524 | etot = -18.6249732797038 -697000 ekin = 2.39476771383887 | erot = 2.11183502257124 | epot = -21.9420332766104 | etot = -17.4354305402003 -698000 ekin = 2.35926337724267 | erot = 1.92783320549515 | epot = -22.0277191263436 | etot = -17.7406225436057 -699000 ekin = 2.48176872675363 | erot = 2.56000644090341 | epot = -22.0212596021869 | etot = -16.9794844345299 -700000 ekin = 2.14129959772679 | erot = 2.29861037684921 | epot = -21.9318234409146 | etot = -17.4919134663386 -701000 ekin = 2.17049668499625 | erot = 2.20225192400486 | epot = -21.8245513288874 | etot = -17.4518027198863 -702000 ekin = 1.56275271552921 | erot = 2.01171151000642 | epot = -21.7865003044462 | etot = -18.2120360789105 -703000 ekin = 2.06065227779357 | erot = 2.17329473717682 | epot = -21.8026608939335 | etot = -17.5687138789631 -704000 ekin = 2.81952809577903 | erot = 1.94266087393332 | epot = -21.8212186788769 | etot = -17.0590297091646 -705000 ekin = 2.82050127519938 | erot = 2.18154028834386 | epot = -21.7752102636878 | etot = -16.7731687001446 -706000 ekin = 1.98267828238497 | erot = 2.32706466032388 | epot = -21.7893242385512 | etot = -17.4795812958423 -707000 ekin = 1.9119199256382 | erot = 2.05897787647104 | epot = -21.8430722730707 | etot = -17.8721744709615 -708000 ekin = 2.5016490217549 | erot = 2.18383615173375 | epot = -21.8544847432184 | etot = -17.1689995697297 -709000 ekin = 2.87304116461984 | erot = 2.56843564623619 | epot = -21.904442472254 | etot = -16.462965661398 -710000 ekin = 2.19867234802447 | erot = 2.26714812026437 | epot = -21.8819798989583 | etot = -17.4161594306695 -711000 ekin = 2.3389229861775 | erot = 1.44633862250318 | epot = -21.9197827259336 | etot = -18.1345211172529 -712000 ekin = 2.57005480809075 | erot = 2.2870655996051 | epot = -22.0346026838636 | etot = -17.1774822761678 -713000 ekin = 1.98393390580316 | erot = 2.33525788511066 | epot = -22.1280127822608 | etot = -17.808820991347 -714000 ekin = 2.59844561627729 | erot = 2.10769412707777 | epot = -22.1916311346269 | etot = -17.4854913912719 -715000 ekin = 2.41851974197057 | erot = 3.74888525577189 | epot = -22.1607861798611 | etot = -15.9933811821186 -716000 ekin = 2.84180231325819 | erot = 2.85971600497619 | epot = -22.0686589684412 | etot = -16.3671406502068 -717000 ekin = 3.44841444935858 | erot = 3.22605040091162 | epot = -21.9727882885698 | etot = -15.2983234382996 -718000 ekin = 3.10436184228426 | erot = 3.94950630255786 | epot = -21.8709253031511 | etot = -14.817057158309 -719000 ekin = 2.37806574336788 | erot = 2.95502686702169 | epot = -21.8563367317645 | etot = -16.523244121375 -720000 ekin = 2.2124258408194 | erot = 3.13473166149202 | epot = -21.8329644507669 | etot = -16.4858069484555 -721000 ekin = 1.6946894391771 | erot = 2.2319374275637 | epot = -21.7424084526643 | etot = -17.8157815859235 -722000 ekin = 1.90287140868432 | erot = 2.80483524098529 | epot = -21.7497487144859 | etot = -17.0420420648163 -723000 ekin = 2.36731223380046 | erot = 2.56327951769446 | epot = -21.6831418267135 | etot = -16.7525500752186 -724000 ekin = 1.73555921199202 | erot = 2.45238016332292 | epot = -21.6581802464112 | etot = -17.4702408710963 -725000 ekin = 2.29059437023039 | erot = 2.94575894857245 | epot = -21.7174261464808 | etot = -16.481072827678 -726000 ekin = 1.6348314779852 | erot = 2.30383185500796 | epot = -21.7564933587679 | etot = -17.8178300257747 -727000 ekin = 2.48240653489463 | erot = 3.20354227059191 | epot = -21.7912108634862 | etot = -16.1052620579997 -728000 ekin = 2.22769215153325 | erot = 2.16489072994622 | epot = -21.7890771091799 | etot = -17.3964942277004 -729000 ekin = 1.89768095869013 | erot = 1.6572167258809 | epot = -21.828690265207 | etot = -18.273792580636 -730000 ekin = 1.81050835100381 | erot = 2.15777747975244 | epot = -21.8264469741817 | etot = -17.8581611434255 -731000 ekin = 2.19898236908282 | erot = 2.98408098832206 | epot = -21.78613179764 | etot = -16.6030684402351 -732000 ekin = 2.43355047343304 | erot = 2.27170844305627 | epot = -21.6883863408735 | etot = -16.9831274243842 -733000 ekin = 3.07212273972684 | erot = 2.56783751855607 | epot = -21.7364921079321 | etot = -16.0965318496492 -734000 ekin = 2.38307322516835 | erot = 2.02726646964742 | epot = -21.7939757502944 | etot = -17.3836360554786 -735000 ekin = 2.14195880954703 | erot = 1.5562480724188 | epot = -21.8426856981853 | etot = -18.1444788162194 -736000 ekin = 2.14667447582535 | erot = 3.43698049451813 | epot = -21.9502105525335 | etot = -16.36655558219 -737000 ekin = 1.74866123585724 | erot = 3.58266975404538 | epot = -21.9688156583779 | etot = -16.6374846684753 -738000 ekin = 2.03996249374858 | erot = 2.50844136963081 | epot = -22.0013918784185 | etot = -17.4529880150391 -739000 ekin = 1.85238190118676 | erot = 2.20010970404148 | epot = -22.0186271684577 | etot = -17.9661355632294 -740000 ekin = 2.83862945300649 | erot = 2.79090377324796 | epot = -22.0338814904878 | etot = -16.4043482642334 -741000 ekin = 2.46678702773207 | erot = 2.91050038280045 | epot = -22.0853235069126 | etot = -16.7080360963801 -742000 ekin = 2.71529029375188 | erot = 3.27395653072503 | epot = -22.2140748190892 | etot = -16.2248279946123 -743000 ekin = 2.22536600879676 | erot = 3.21179247126421 | epot = -22.3431375024118 | etot = -16.9059790223508 -744000 ekin = 2.01371736615449 | erot = 3.77601393842181 | epot = -22.4261509869247 | etot = -16.6364196823484 -745000 ekin = 3.15730296333415 | erot = 2.31558796250714 | epot = -22.4108926873302 | etot = -16.9380017614889 -746000 ekin = 2.9774013013854 | erot = 2.63107362961468 | epot = -22.3694265664285 | etot = -16.7609516354285 -747000 ekin = 2.34209064832564 | erot = 2.04683419375201 | epot = -22.362862794452 | etot = -17.9739379523744 -748000 ekin = 2.37156256463876 | erot = 2.40538773919507 | epot = -22.3979208424336 | etot = -17.6209705385998 -749000 ekin = 2.06136855553992 | erot = 2.76585915349198 | epot = -22.3831536512816 | etot = -17.5559259422497 -750000 ekin = 1.6465677500269 | erot = 2.38368935068673 | epot = -22.444703911786 | etot = -18.4144468110724 -751000 ekin = 1.78122844885827 | erot = 2.81833836133589 | epot = -22.533438976529 | etot = -17.9338721663348 -752000 ekin = 1.34730592473949 | erot = 1.45838401317446 | epot = -22.6090848823224 | etot = -19.8033949444084 -753000 ekin = 1.87571626319839 | erot = 2.45354665197219 | epot = -22.5588053116254 | etot = -18.2295423964549 -754000 ekin = 1.7497031355263 | erot = 2.74314075044426 | epot = -22.4698920344377 | etot = -17.9770481484671 -755000 ekin = 2.42081076696332 | erot = 2.41217357398057 | epot = -22.3964223120254 | etot = -17.5634379710815 -756000 ekin = 1.85475003398 | erot = 2.78259891044769 | epot = -22.320596272712 | etot = -17.6832473282843 -757000 ekin = 1.97578050121355 | erot = 2.51781218539579 | epot = -22.1263927786385 | etot = -17.6328000920292 -758000 ekin = 1.22826853890878 | erot = 2.60763168332871 | epot = -21.9863700054333 | etot = -18.1504697831958 -759000 ekin = 2.21637457917738 | erot = 1.43949125248239 | epot = -22.1514665432947 | etot = -18.4956007116349 -760000 ekin = 2.68033406797328 | erot = 2.41719679588396 | epot = -22.2590376675296 | etot = -17.1615068036723 -761000 ekin = 2.17537440635552 | erot = 2.27171718649739 | epot = -22.3344047362676 | etot = -17.8873131434147 -762000 ekin = 2.18577068124738 | erot = 1.66829735822053 | epot = -22.3621686129861 | etot = -18.5081005735182 -763000 ekin = 2.45478818575914 | erot = 3.35299551820635 | epot = -22.4281249366375 | etot = -16.620341232672 -764000 ekin = 2.82872579097198 | erot = 2.78775814269904 | epot = -22.4216595904293 | etot = -16.8051756567583 -765000 ekin = 1.82575545759012 | erot = 2.76238969739238 | epot = -22.3222506299712 | etot = -17.7341054749887 -766000 ekin = 2.64667028577446 | erot = 2.30816231818548 | epot = -22.178450499249 | etot = -17.2236178952891 -767000 ekin = 2.57518863120179 | erot = 2.85636091304187 | epot = -22.0829371218307 | etot = -16.651387577587 -768000 ekin = 1.86419535586237 | erot = 2.77038508826208 | epot = -22.1032134089885 | etot = -17.4686329648641 -769000 ekin = 2.3968210365344 | erot = 2.30725355924691 | epot = -22.1808553751715 | etot = -17.4767807793902 -770000 ekin = 2.47007838986713 | erot = 3.2324442599133 | epot = -22.2845706013469 | etot = -16.5820479515665 -771000 ekin = 2.32978280625416 | erot = 2.29082247939233 | epot = -22.3223780040389 | etot = -17.7017727183924 -772000 ekin = 2.26109456847871 | erot = 3.00930315380543 | epot = -22.420252339108 | etot = -17.1498546168239 -773000 ekin = 2.23291379974971 | erot = 1.81993150945886 | epot = -22.4876821856977 | etot = -18.4348368764892 -774000 ekin = 2.82112723374611 | erot = 2.20399964233336 | epot = -22.478004597296 | etot = -17.4528777212165 -775000 ekin = 1.80765894464448 | erot = 1.85918506821 | epot = -22.4072882679054 | etot = -18.7404442550509 -776000 ekin = 1.4002136736383 | erot = 3.15411215412015 | epot = -22.3650958887673 | etot = -17.8107700610088 -777000 ekin = 1.64184304615234 | erot = 2.80565056199557 | epot = -22.2758630382017 | etot = -17.8283694300538 -778000 ekin = 1.48552010960747 | erot = 2.23385655322066 | epot = -22.280627961357 | etot = -18.5612512985289 -779000 ekin = 1.8612416844269 | erot = 1.89467011122748 | epot = -22.3098169150752 | etot = -18.5539051194208 -780000 ekin = 1.69992943470698 | erot = 2.31253245346999 | epot = -22.3678364729485 | etot = -18.3553745847716 -781000 ekin = 2.09952906112346 | erot = 2.56012058482574 | epot = -22.4462778123775 | etot = -17.7866281664283 -782000 ekin = 2.5656681981454 | erot = 1.9584872929859 | epot = -22.3478635193415 | etot = -17.8237080282102 -783000 ekin = 2.16529384416182 | erot = 2.88344914114143 | epot = -22.2446053910143 | etot = -17.1958624057111 -784000 ekin = 2.82003342353257 | erot = 2.22795791523757 | epot = -22.2211041777196 | etot = -17.1731128389495 -785000 ekin = 3.1175846654813 | erot = 2.90935771938994 | epot = -22.2344563156641 | etot = -16.2075139307929 -786000 ekin = 2.80016717549673 | erot = 3.42867564957488 | epot = -22.249645155972 | etot = -16.0208023309004 -787000 ekin = 2.38498105317564 | erot = 3.01080705704522 | epot = -22.1644901078413 | etot = -16.7687019976204 -788000 ekin = 1.98689482841944 | erot = 2.00265266168407 | epot = -22.1102205855985 | etot = -18.120673095495 -789000 ekin = 2.4429381578802 | erot = 2.28303571912851 | epot = -22.0438356575627 | etot = -17.317861780554 -790000 ekin = 3.54942607073523 | erot = 2.80791853998026 | epot = -21.9672470303852 | etot = -15.6099024196697 -791000 ekin = 3.07978044254695 | erot = 2.41844793702322 | epot = -21.9558944305006 | etot = -16.4576660509305 -792000 ekin = 3.91878473045569 | erot = 1.97318255021653 | epot = -21.8851857762129 | etot = -15.9932184955406 -793000 ekin = 2.24379464034279 | erot = 2.58359475602036 | epot = -21.774610681239 | etot = -16.9472212848758 -794000 ekin = 2.14799943871595 | erot = 2.45378042225318 | epot = -21.6055963838422 | etot = -17.0038165228731 -795000 ekin = 1.62858645550717 | erot = 2.41208539626205 | epot = -21.4428264365968 | etot = -17.4021545848276 -796000 ekin = 2.20626767900772 | erot = 2.13905661758329 | epot = -21.3317362060421 | etot = -16.9864119094511 -797000 ekin = 1.82996184067328 | erot = 1.99906119944912 | epot = -21.3393574083459 | etot = -17.5103343682235 -798000 ekin = 2.25667499558209 | erot = 2.51245793530998 | epot = -21.3768565865698 | etot = -16.6077236556778 -799000 ekin = 1.90911035219009 | erot = 2.87369878279889 | epot = -21.3617435253193 | etot = -16.5789343903304 -800000 ekin = 2.1677625897713 | erot = 2.3474017295601 | epot = -21.2761013083254 | etot = -16.760936988994 -801000 ekin = 1.87638787205728 | erot = 1.64434088909027 | epot = -21.119685062831 | etot = -17.5989563016835 -802000 ekin = 2.22686790237102 | erot = 2.21112245128269 | epot = -21.0065136937552 | etot = -16.5685233401015 -803000 ekin = 2.68797844582698 | erot = 1.9055042783616 | epot = -20.977533512373 | etot = -16.3840507881845 -804000 ekin = 2.34860603481644 | erot = 2.89571698053519 | epot = -20.9203141084123 | etot = -15.6759910930607 -805000 ekin = 1.76197291834029 | erot = 2.71253740465393 | epot = -20.7889998983483 | etot = -16.3144895753541 -806000 ekin = 1.74735080203811 | erot = 2.06758975379032 | epot = -20.7361939926422 | etot = -16.9212534368137 -807000 ekin = 1.56935370454675 | erot = 1.70438269927345 | epot = -20.7922156879383 | etot = -17.5184792841181 -808000 ekin = 2.10918656723178 | erot = 2.39856508826458 | epot = -20.8730295437323 | etot = -16.3652778882359 -809000 ekin = 2.6421817829379 | erot = 1.51718119689586 | epot = -20.8620425969582 | etot = -16.7026796171244 -810000 ekin = 3.0961523233869 | erot = 2.66382304688042 | epot = -20.7945446198551 | etot = -15.0345692495878 -811000 ekin = 3.044772851549 | erot = 3.63336291459448 | epot = -20.8540215443024 | etot = -14.1758857781589 -812000 ekin = 2.15160716251187 | erot = 2.79673763715996 | epot = -20.9409883926875 | etot = -15.9926435930156 -813000 ekin = 2.18680935122609 | erot = 3.17362835755789 | epot = -21.1408022790473 | etot = -15.7803645702634 -814000 ekin = 1.72092572696808 | erot = 2.99575126024499 | epot = -21.2437075371712 | etot = -16.5270305499581 -815000 ekin = 2.15299829462666 | erot = 2.27035656487164 | epot = -21.2458654890398 | etot = -16.8225106295415 -816000 ekin = 2.70812245065399 | erot = 1.52125307187337 | epot = -21.2616781989935 | etot = -17.0323026764661 -817000 ekin = 2.58901717437677 | erot = 2.58536627670114 | epot = -21.3956545078513 | etot = -16.2212710567734 -818000 ekin = 2.27875756856436 | erot = 2.24624264725762 | epot = -21.4318935062254 | etot = -16.9068932904034 -819000 ekin = 2.10656184615864 | erot = 3.01130039050671 | epot = -21.4327594058407 | etot = -16.3148971691754 -820000 ekin = 2.45661353119087 | erot = 2.70775294944127 | epot = -21.3798106611916 | etot = -16.2154441805595 -821000 ekin = 2.56789243532195 | erot = 2.54922758508946 | epot = -21.3170915318809 | etot = -16.1999715114695 -822000 ekin = 3.57333066089329 | erot = 2.21054956102183 | epot = -21.2861057645662 | etot = -15.5022255426511 -823000 ekin = 3.55383413213107 | erot = 2.72435850620162 | epot = -21.2727846567926 | etot = -14.9945920184599 -824000 ekin = 4.1160622349429 | erot = 3.29139599112172 | epot = -21.2039659493682 | etot = -13.7965077233036 -825000 ekin = 2.91568774544338 | erot = 3.47057612959321 | epot = -21.0618933558847 | etot = -14.6756294808481 -826000 ekin = 1.71667097443836 | erot = 1.97830555981832 | epot = -20.877676668146 | etot = -17.1827001338893 -827000 ekin = 1.87676981471837 | erot = 2.56467088925009 | epot = -20.7862250182708 | etot = -16.3447843143024 -828000 ekin = 2.38071607948713 | erot = 2.54624446499465 | epot = -20.7057379171107 | etot = -15.778777372629 -829000 ekin = 2.23087866970086 | erot = 1.78456567522681 | epot = -20.6078136299298 | etot = -16.5923692850021 -830000 ekin = 2.54758016482261 | erot = 2.32440405635603 | epot = -20.4881081818274 | etot = -15.6161239606487 -831000 ekin = 2.68445862644274 | erot = 2.08263260479753 | epot = -20.3542193485844 | etot = -15.5871281173442 -832000 ekin = 2.63412360308727 | erot = 2.01244922883236 | epot = -20.215817212176 | etot = -15.5692443802563 -833000 ekin = 2.52816532834198 | erot = 2.59604450500369 | epot = -20.1546011863618 | etot = -15.0303913530161 -834000 ekin = 2.89178882882708 | erot = 2.32656568068784 | epot = -20.1544579940429 | etot = -14.936103484528 -835000 ekin = 2.77377023733644 | erot = 2.76167763911259 | epot = -20.2925945781537 | etot = -14.7571467017047 -836000 ekin = 2.5461758373878 | erot = 2.86272526489881 | epot = -20.4572179712234 | etot = -15.0483168689368 -837000 ekin = 1.73852270651189 | erot = 1.97943492340463 | epot = -20.5100877279362 | etot = -16.7921300980197 -838000 ekin = 1.97190789156808 | erot = 2.79058337256638 | epot = -20.5305299708183 | etot = -15.7680387066838 -839000 ekin = 1.97773711155226 | erot = 2.72413991034569 | epot = -20.5265807034223 | etot = -15.8247036815244 -840000 ekin = 1.72329638748709 | erot = 2.96738113282628 | epot = -20.6321231069653 | etot = -15.9414455866519 -841000 ekin = 2.83071457484448 | erot = 2.84941397463212 | epot = -20.7926258530585 | etot = -15.1124973035819 -842000 ekin = 2.59731855411368 | erot = 2.84178819703383 | epot = -20.8313063579288 | etot = -15.3921996067813 -843000 ekin = 2.04928376150595 | erot = 2.61288435498261 | epot = -20.8099267672998 | etot = -16.1477586508113 -844000 ekin = 1.54583411960153 | erot = 1.93893729147582 | epot = -20.8613105352917 | etot = -17.3765391242144 -845000 ekin = 2.31382540600799 | erot = 2.32466241883301 | epot = -20.9823282893205 | etot = -16.3438404644795 -846000 ekin = 2.08903634512997 | erot = 2.31578856009953 | epot = -21.0646153757684 | etot = -16.6597904705389 -847000 ekin = 2.48001373621179 | erot = 2.63006614696695 | epot = -21.0262265568771 | etot = -15.9161466736983 -848000 ekin = 2.15184282735255 | erot = 1.47311006297177 | epot = -21.0583979355085 | etot = -17.4334450451842 -849000 ekin = 2.01842760273387 | erot = 2.48110730715335 | epot = -21.0805165806606 | etot = -16.5809816707734 -850000 ekin = 2.55741512224125 | erot = 2.68263416508461 | epot = -21.0773082596903 | etot = -15.8372589723644 -851000 ekin = 2.18005669935449 | erot = 2.93569398882538 | epot = -21.0924777064981 | etot = -15.9767270183182 -852000 ekin = 2.4696261459638 | erot = 2.47026576605629 | epot = -21.121182921383 | etot = -16.1812910093629 -853000 ekin = 2.39950550338299 | erot = 2.98750142132014 | epot = -21.0612995182631 | etot = -15.67429259356 -854000 ekin = 2.33465924490094 | erot = 2.85274307519462 | epot = -20.968723969517 | etot = -15.7813216494214 -855000 ekin = 2.3422738818298 | erot = 2.06894784165372 | epot = -20.9841257021182 | etot = -16.5729039786347 -856000 ekin = 2.50117711580693 | erot = 2.74791206324423 | epot = -20.8738269143243 | etot = -15.6247377352732 -857000 ekin = 2.54090672086302 | erot = 3.01990349760069 | epot = -20.7453092144205 | etot = -15.1844989959568 -858000 ekin = 3.06946696795817 | erot = 2.15496603972172 | epot = -20.6851307548641 | etot = -15.4606977471842 -859000 ekin = 2.85023303418271 | erot = 2.24419946408454 | epot = -20.6787263175177 | etot = -15.5842938192505 -860000 ekin = 2.81341243833326 | erot = 1.51974619370821 | epot = -20.6783502445099 | etot = -16.3451916124685 -861000 ekin = 2.27419936469319 | erot = 2.84736568193219 | epot = -20.6476685348769 | etot = -15.5261034882515 -862000 ekin = 2.99814535919907 | erot = 1.87200304458179 | epot = -20.6714218686896 | etot = -15.8012734649087 -863000 ekin = 2.82320132781551 | erot = 1.77959785908835 | epot = -20.7642045825074 | etot = -16.1614053956035 -864000 ekin = 2.91892607599649 | erot = 2.64325528924267 | epot = -20.9317153856013 | etot = -15.3695340203621 -865000 ekin = 3.32989545880504 | erot = 2.25510784979563 | epot = -21.0557741374338 | etot = -15.4707708288331 -866000 ekin = 2.85710406140164 | erot = 3.16185395635699 | epot = -21.1425088224093 | etot = -15.1235508046507 -867000 ekin = 2.74742982523498 | erot = 3.06773761977148 | epot = -21.134531707449 | etot = -15.3193642624426 -868000 ekin = 2.1948650568198 | erot = 2.22458860510737 | epot = -21.0697126630059 | etot = -16.6502590010787 -869000 ekin = 2.92239964068214 | erot = 2.50065925324413 | epot = -21.0149378764857 | etot = -15.5918789825595 -870000 ekin = 2.48931117933877 | erot = 2.13038554226927 | epot = -20.9976655364142 | etot = -16.3779688148061 -871000 ekin = 2.19107246828585 | erot = 2.37839051284132 | epot = -20.8765191273408 | etot = -16.3070561462136 -872000 ekin = 1.55081886521515 | erot = 2.09762459684261 | epot = -20.8521940121747 | etot = -17.203750550117 -873000 ekin = 1.3896067615701 | erot = 2.27757856660906 | epot = -20.9255865429236 | etot = -17.2584012147445 -874000 ekin = 1.41282979514325 | erot = 2.76881886831622 | epot = -21.0901483490344 | etot = -16.9084996855749 -875000 ekin = 1.18979270807644 | erot = 2.71872907877546 | epot = -21.2270266717577 | etot = -17.3185048849058 -876000 ekin = 1.81100671707876 | erot = 2.98963277694411 | epot = -21.2472610575188 | etot = -16.446621563496 -877000 ekin = 2.36243541111364 | erot = 2.03609143795482 | epot = -21.3277863705839 | etot = -16.9292595215155 -878000 ekin = 2.12451961824681 | erot = 1.75451707226955 | epot = -21.3222506595257 | etot = -17.4432139690093 -879000 ekin = 2.2716997631568 | erot = 2.70191568133045 | epot = -21.3119311913779 | etot = -16.3383157468906 -880000 ekin = 2.68326313012635 | erot = 2.77340532358103 | epot = -21.3535728447366 | etot = -15.8969043910293 -881000 ekin = 2.87483307600209 | erot = 2.33652901733378 | epot = -21.3292700652532 | etot = -16.1179079719173 -882000 ekin = 2.32758906799515 | erot = 2.16795489269515 | epot = -21.2584233833351 | etot = -16.7628794226448 -883000 ekin = 2.35908631800799 | erot = 1.97904048991531 | epot = -21.0655746410777 | etot = -16.7274478331544 -884000 ekin = 2.52269362644082 | erot = 2.25025361307444 | epot = -20.9641879640376 | etot = -16.1912407245223 -885000 ekin = 2.84711898438829 | erot = 2.26506458535076 | epot = -20.9641383727442 | etot = -15.8519548030051 -886000 ekin = 3.18322288605135 | erot = 1.73470875511279 | epot = -21.0012427194847 | etot = -16.0833110783206 -887000 ekin = 2.68813414464724 | erot = 2.50204216522369 | epot = -21.067976555709 | etot = -15.8778002458381 -888000 ekin = 2.15187544250472 | erot = 2.83221089603917 | epot = -21.1763900792301 | etot = -16.1923037406862 -889000 ekin = 2.16956995574787 | erot = 2.20198656261183 | epot = -21.1017572530619 | etot = -16.7302007347022 -890000 ekin = 1.78556825977743 | erot = 2.98410700070924 | epot = -21.186208638226 | etot = -16.4165333777394 -891000 ekin = 1.64917016933854 | erot = 2.2775040392346 | epot = -21.3189640243097 | etot = -17.3922898157365 -892000 ekin = 1.96583947510742 | erot = 2.36271973263346 | epot = -21.4596361006042 | etot = -17.1310768928634 -893000 ekin = 1.79314340564254 | erot = 1.84111074899918 | epot = -21.5470179462123 | etot = -17.9127637915706 -894000 ekin = 2.81442382935654 | erot = 2.80759818283315 | epot = -21.6538835081476 | etot = -16.031861495958 -895000 ekin = 2.0070369904664 | erot = 2.75374249882318 | epot = -21.7499760057857 | etot = -16.9891965164962 -896000 ekin = 1.6507008342202 | erot = 2.56296228195541 | epot = -21.8927812332096 | etot = -17.679118117034 -897000 ekin = 1.78139405234358 | erot = 2.35356223356247 | epot = -22.0286409132692 | etot = -17.8936846273632 -898000 ekin = 1.85207490030025 | erot = 2.39285557286479 | epot = -22.0495390022753 | etot = -17.8046085291103 -899000 ekin = 1.66216066819287 | erot = 3.04222938639383 | epot = -21.9579747350568 | etot = -17.2535846804701 -900000 ekin = 2.15165827067079 | erot = 2.62356927804176 | epot = -21.9156104880733 | etot = -17.1403829393607 -901000 ekin = 2.41248642142908 | erot = 2.69714418093218 | epot = -21.9837417963999 | etot = -16.8741111940386 -902000 ekin = 2.57545214239909 | erot = 2.40635843208184 | epot = -21.996436412966 | etot = -17.0146258384851 -903000 ekin = 2.40335601179058 | erot = 2.40575417529011 | epot = -22.0230111828253 | etot = -17.2139009957446 -904000 ekin = 1.99365997109403 | erot = 3.12264199705155 | epot = -22.0954468558153 | etot = -16.9791448876697 -905000 ekin = 2.45160047861299 | erot = 2.11889478277437 | epot = -22.0620083174753 | etot = -17.491513056088 -906000 ekin = 2.69446662881179 | erot = 1.66991631401457 | epot = -22.0555442490735 | etot = -17.6911613062472 -907000 ekin = 2.57344988637111 | erot = 2.16877319112329 | epot = -22.0376984236082 | etot = -17.2954753461138 -908000 ekin = 2.96467760769891 | erot = 2.40252252045293 | epot = -22.0191047803794 | etot = -16.6519046522276 -909000 ekin = 3.12793409264581 | erot = 2.12009742665766 | epot = -22.0610667288554 | etot = -16.813035209552 -910000 ekin = 2.92206025021313 | erot = 3.50302372345589 | epot = -22.1277774480558 | etot = -15.7026934743868 -911000 ekin = 1.85381948048669 | erot = 2.73401011795405 | epot = -22.1683975531304 | etot = -17.5805679546896 -912000 ekin = 2.64405242900444 | erot = 1.86324838607163 | epot = -22.2002570143971 | etot = -17.6929561993211 -913000 ekin = 2.46824283660222 | erot = 2.03086335466052 | epot = -22.3203806242275 | etot = -17.8212744329648 -914000 ekin = 2.01871966356281 | erot = 2.94283156821208 | epot = -22.3513452914152 | etot = -17.3897940596404 -915000 ekin = 2.82676643872102 | erot = 2.11643553756711 | epot = -22.3640471312087 | etot = -17.4208451549205 -916000 ekin = 2.54227707175729 | erot = 3.23335822897872 | epot = -22.4652663102875 | etot = -16.6896310095515 -917000 ekin = 2.31676859881433 | erot = 2.24272005825761 | epot = -22.4635852813361 | etot = -17.9040966242641 -918000 ekin = 2.08681780124232 | erot = 2.05685815910104 | epot = -22.3748058531194 | etot = -18.231129892776 -919000 ekin = 2.60282015977208 | erot = 2.38968293687317 | epot = -22.3822670579485 | etot = -17.3897639613033 -920000 ekin = 3.21847224306531 | erot = 2.75010700480467 | epot = -22.4646189595793 | etot = -16.4960397117093 -921000 ekin = 2.67829101318105 | erot = 1.98386933580364 | epot = -22.5250186592845 | etot = -17.8628583102998 -922000 ekin = 1.43283799739774 | erot = 1.5210967069851 | epot = -22.5925015236451 | etot = -19.6385668192623 -923000 ekin = 1.69052063428542 | erot = 1.88300391650268 | epot = -22.66377714455 | etot = -19.0902525937619 -924000 ekin = 2.14340021014736 | erot = 1.52248843908133 | epot = -22.6402388027506 | etot = -18.9743501535219 -925000 ekin = 2.26091939109784 | erot = 1.33050454776919 | epot = -22.5227280014395 | etot = -18.9313040625724 -926000 ekin = 2.00930540350536 | erot = 2.07372939007629 | epot = -22.4428200376094 | etot = -18.3597852440277 -927000 ekin = 2.5328908262125 | erot = 1.99783542507571 | epot = -22.5727269691716 | etot = -18.0420007178834 -928000 ekin = 2.57275295957812 | erot = 2.50503787417692 | epot = -22.7397714760282 | etot = -17.6619806422732 -929000 ekin = 2.66131598383108 | erot = 1.82871097568714 | epot = -22.7889092091996 | etot = -18.2988822496813 -930000 ekin = 2.41369096322635 | erot = 2.00598415451169 | epot = -22.802343205586 | etot = -18.3826680878479 -931000 ekin = 3.02636364754007 | erot = 2.11596225016102 | epot = -22.7562575819635 | etot = -17.6139316842624 -932000 ekin = 2.34573343934799 | erot = 1.88269819474442 | epot = -22.8028018252265 | etot = -18.5743701911341 -933000 ekin = 2.16951834533283 | erot = 2.85677231086966 | epot = -22.8240172791918 | etot = -17.7977266229894 -934000 ekin = 2.17177152489559 | erot = 2.1194660688678 | epot = -22.8652321779361 | etot = -18.5739945841727 -935000 ekin = 2.34485090948927 | erot = 2.23417606918542 | epot = -22.85888707632 | etot = -18.2798600976453 -936000 ekin = 2.28188124919414 | erot = 2.53015822921571 | epot = -22.9782518612072 | etot = -18.1662123827973 -937000 ekin = 2.30619254942948 | erot = 2.82857457174385 | epot = -23.071665648819 | etot = -17.9368985276457 -938000 ekin = 2.44229226509269 | erot = 2.00737414808354 | epot = -23.1363676072135 | etot = -18.6867011940373 -939000 ekin = 2.97744015155648 | erot = 2.10212870842129 | epot = -23.1206613400026 | etot = -18.0410924800248 -940000 ekin = 3.7421966126526 | erot = 2.68184060115532 | epot = -23.0494489680041 | etot = -16.6254117541962 -941000 ekin = 3.11307007541058 | erot = 2.28700344636989 | epot = -22.9451834918749 | etot = -17.5451099700944 -942000 ekin = 3.46654816859627 | erot = 1.87509182259239 | epot = -22.9048558084883 | etot = -17.5632158172997 -943000 ekin = 3.79224818385642 | erot = 2.70927084823341 | epot = -22.8698482349085 | etot = -16.3683292028187 -944000 ekin = 2.65995525590795 | erot = 2.74912726816421 | epot = -22.8317889960132 | etot = -17.422706471941 -945000 ekin = 2.54659137616624 | erot = 2.02239421261016 | epot = -22.725938832337 | etot = -18.1569532435606 -946000 ekin = 2.46388617435412 | erot = 1.67037983156325 | epot = -22.5545307163886 | etot = -18.4202647104712 -947000 ekin = 2.40803821488281 | erot = 1.99424876436282 | epot = -22.4581247656852 | etot = -18.0558377864396 -948000 ekin = 3.53604042034896 | erot = 2.5799787743484 | epot = -22.3226574127032 | etot = -16.2066382180059 -949000 ekin = 2.9885427180707 | erot = 2.43476486608199 | epot = -22.1081978358245 | etot = -16.6848902516719 -950000 ekin = 1.85098760333696 | erot = 3.01138499180169 | epot = -21.9481390655564 | etot = -17.0857664704178 -951000 ekin = 2.24140231384639 | erot = 2.36101456496683 | epot = -21.9054305662226 | etot = -17.3030136874094 -952000 ekin = 2.17674596142229 | erot = 1.66164476273624 | epot = -21.8857446244282 | etot = -18.0473539002697 -953000 ekin = 2.32434436644842 | erot = 1.96780923551529 | epot = -21.8640893071839 | etot = -17.5719357052202 -954000 ekin = 1.49071594272053 | erot = 3.34931219540536 | epot = -21.7966718941877 | etot = -16.9566437560618 -955000 ekin = 1.88457697665867 | erot = 2.69006961792184 | epot = -21.7221575712774 | etot = -17.1475109766969 -956000 ekin = 1.69307087749047 | erot = 2.16469646035311 | epot = -21.6721199805375 | etot = -17.8143526426939 -957000 ekin = 1.73487330688787 | erot = 1.64307450157791 | epot = -21.6559256952542 | etot = -18.2779778867884 -958000 ekin = 1.60385894866933 | erot = 2.19168737006629 | epot = -21.6476897105174 | etot = -17.8521433917818 -959000 ekin = 2.59262245343361 | erot = 2.48219361032085 | epot = -21.6596277279705 | etot = -16.584811664216 -960000 ekin = 2.55386671368679 | erot = 2.05771846301768 | epot = -21.6626200672137 | etot = -17.0510348905092 -961000 ekin = 2.27765806186204 | erot = 2.17958354193564 | epot = -21.6544957188757 | etot = -17.1972541150781 -962000 ekin = 1.66004639932187 | erot = 3.51004740828815 | epot = -21.6650529510448 | etot = -16.4949591434348 -963000 ekin = 1.98935936955203 | erot = 1.50490949194663 | epot = -21.6088711497268 | etot = -18.1146022882282 -964000 ekin = 2.17983717879189 | erot = 2.29031074234418 | epot = -21.5586262428097 | etot = -17.0884783216737 -965000 ekin = 2.10787439045543 | erot = 2.32210778851089 | epot = -21.5497920382512 | etot = -17.1198098592848 -966000 ekin = 3.1408040905672 | erot = 3.41823133718859 | epot = -21.5836404263087 | etot = -15.0246049985529 -967000 ekin = 3.0568623124503 | erot = 2.17332066321312 | epot = -21.5260931467357 | etot = -16.2959101710723 -968000 ekin = 2.05064192877793 | erot = 2.14124924922395 | epot = -21.4479972163208 | etot = -17.2561060383189 -969000 ekin = 2.21517858837653 | erot = 2.21735686304379 | epot = -21.3822587820383 | etot = -16.9497233306179 -970000 ekin = 2.44665062708038 | erot = 2.63919176763313 | epot = -21.3192840477867 | etot = -16.2334416530732 -971000 ekin = 2.47241679333996 | erot = 2.68621090896416 | epot = -21.3036698600043 | etot = -16.1450421577002 -972000 ekin = 3.18976408247807 | erot = 2.45901954667695 | epot = -21.2523934460447 | etot = -15.6036098168897 -973000 ekin = 3.35475115149159 | erot = 2.61012752320777 | epot = -21.183068859057 | etot = -15.2181901843576 -974000 ekin = 2.71127807449815 | erot = 2.1297435585203 | epot = -21.0816906098712 | etot = -16.2406689768527 -975000 ekin = 1.81295894463494 | erot = 2.07595649769211 | epot = -20.9964165264668 | etot = -17.1075010841398 -976000 ekin = 2.3761992679076 | erot = 1.37981441384236 | epot = -20.8930101654835 | etot = -17.1369964837335 -977000 ekin = 2.85555210767403 | erot = 3.03619369635209 | epot = -21.0095574945916 | etot = -15.1178116905655 -978000 ekin = 3.13849116757389 | erot = 3.01118356119965 | epot = -21.0732326779662 | etot = -14.9235579491927 -979000 ekin = 3.64170438280054 | erot = 2.46121267957824 | epot = -20.9593695826043 | etot = -14.8564525202255 -980000 ekin = 3.43680535726821 | erot = 3.27333588575054 | epot = -20.9004670674902 | etot = -14.1903258244714 -981000 ekin = 2.95806185202903 | erot = 2.46811293942084 | epot = -20.98680384597 | etot = -15.5606290545201 -982000 ekin = 2.05823037945997 | erot = 2.23573651589998 | epot = -21.0420814071853 | etot = -16.7481145118254 -983000 ekin = 2.5553610304344 | erot = 1.97272050888113 | epot = -21.0434200461187 | etot = -16.5153385068031 -984000 ekin = 2.32140326985734 | erot = 2.58284655378619 | epot = -21.0826601835728 | etot = -16.1784103599293 -985000 ekin = 2.30327577152247 | erot = 3.01569210622986 | epot = -21.1731422974946 | etot = -15.8541744197423 -986000 ekin = 2.0247579133688 | erot = 2.17885674714072 | epot = -21.2745593334951 | etot = -17.0709446729856 -987000 ekin = 2.38610984160001 | erot = 1.60437579739601 | epot = -21.2569575649581 | etot = -17.2664719259621 -988000 ekin = 2.73926231299059 | erot = 2.71146350841209 | epot = -21.1552791211024 | etot = -15.7045532996998 -989000 ekin = 2.26697151561908 | erot = 2.87750604798637 | epot = -21.0937789068057 | etot = -15.9493013432003 -990000 ekin = 2.20943106152859 | erot = 2.59684886899362 | epot = -21.0203331776817 | etot = -16.2140532471594 -991000 ekin = 2.18249266283081 | erot = 2.5464965741117 | epot = -20.9130337682104 | etot = -16.1840445312678 -992000 ekin = 1.6979885228163 | erot = 2.49592807829765 | epot = -20.9758495875099 | etot = -16.7819329863959 -993000 ekin = 1.37413745875443 | erot = 1.97736806672933 | epot = -21.0653195519546 | etot = -17.7138140264709 -994000 ekin = 1.46489942286098 | erot = 2.9578292103502 | epot = -21.1261867461739 | etot = -16.7034581129628 -995000 ekin = 2.313206084368 | erot = 1.68064795849454 | epot = -21.1907262676308 | etot = -17.1968722247682 -996000 ekin = 2.91635623044139 | erot = 2.86817278212845 | epot = -21.1749728841881 | etot = -15.3904438716183 -997000 ekin = 3.14117227050211 | erot = 2.13892951607982 | epot = -21.1714996184257 | etot = -15.8913978318438 -998000 ekin = 2.24297046385175 | erot = 3.02327291553882 | epot = -21.1032039558863 | etot = -15.8369605764957 -999000 ekin = 2.61553981530106 | erot = 1.73872891845711 | epot = -21.0217257279765 | etot = -16.6674569942184 -1000000 ekin = 2.34012577497833 | erot = 2.86436388995813 | epot = -21.020156604404 | etot = -15.8156669394675 - 1000000 0.10400559 -1.3746133 0.060853481 -1.1675019 -8.3808461e-05 -Loop time of 39.3636 on 4 procs for 1000000 steps with 16 atoms - -Performance: 21949.237 tau/day, 25404.210 timesteps/s -99.2% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.71602 | 15.145 | 28.607 | 317.4 | 38.47 -Bond | 0.090624 | 0.44555 | 0.74546 | 44.3 | 1.13 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 2.0699 | 2.2587 | 2.5059 | 10.9 | 5.74 -Output | 3.0994e-05 | 4.0352e-05 | 4.5061e-05 | 0.0 | 0.00 -Modify | 0.21689 | 2.7926 | 5.2575 | 132.2 | 7.09 -Other | | 18.72 | | | 47.56 - -Nlocal: 4 ave 8 max 0 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 11 ave 14 max 8 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Neighs: 46 ave 89 max 0 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 184 -Ave neighs/atom = 11.5 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:39 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 new file mode 100644 index 0000000000..ba36d696fb --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.025 | 3.025 | 3.025 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 +1000 ekin = 1.54282272464468 | erot = 1.71757897250772 | epot = -24.4403527731341 | etot = -21.1799510759817 +2000 ekin = 1.86109566690716 | erot = 1.93804145796026 | epot = -24.3759816748265 | etot = -20.5768445499591 +3000 ekin = 2.68769182431188 | erot = 2.14559269500086 | epot = -24.2916556822451 | etot = -19.4583711629324 +4000 ekin = 2.04710303757243 | erot = 1.48774072590987 | epot = -24.190371461807 | etot = -20.6555276983247 +5000 ekin = 1.77654023802719 | erot = 2.534186505221 | epot = -24.1246365663843 | etot = -19.8139098231361 +6000 ekin = 3.12253137872527 | erot = 2.04028266818831 | epot = -24.0491248750916 | etot = -18.886310828178 +7000 ekin = 3.22418765752177 | erot = 2.72037570174023 | epot = -23.9458569915548 | etot = -18.0012936322928 +8000 ekin = 2.83204202112963 | erot = 2.67060276413777 | epot = -23.9211291529766 | etot = -18.4184843677092 +9000 ekin = 2.69585642754481 | erot = 2.59559820250212 | epot = -23.8340823338302 | etot = -18.5426277037833 +10000 ekin = 2.66058119525512 | erot = 1.95965933336077 | epot = -23.7132443170725 | etot = -19.0930037884566 + 10000 0.11824805 -1.4953627 0.013284973 -1.3157914 -0.00012999454 +Loop time of 0.32781 on 1 procs for 10000 steps with 16 atoms + +Performance: 26356.746 tau/day, 30505.493 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.24211 | 0.24211 | 0.24211 | 0.0 | 73.86 +Bond | 0.0075173 | 0.0075173 | 0.0075173 | 0.0 | 2.29 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0014515 | 0.0014515 | 0.0014515 | 0.0 | 0.44 +Output | 5.4836e-06 | 5.4836e-06 | 5.4836e-06 | 0.0 | 0.00 +Modify | 0.073331 | 0.073331 | 0.073331 | 0.0 | 22.37 +Other | | 0.003398 | | | 1.04 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 116 ave 116 max 116 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 116 +Ave neighs/atom = 7.25 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 new file mode 100644 index 0000000000..3237d4849e --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 @@ -0,0 +1,178 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.777 | 7.959 | 8.142 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 +1000 ekin = 1.34554291364716 | erot = 2.30525041754444 | epot = -24.3924150888896 | etot = -20.741621757698 +2000 ekin = 2.15972469811184 | erot = 2.1628675965276 | epot = -24.3548203354875 | etot = -20.0322280408481 +3000 ekin = 3.26433550542939 | erot = 2.76107866472085 | epot = -24.2947953202752 | etot = -18.269381150125 +4000 ekin = 1.9203212531997 | erot = 2.13339438425299 | epot = -24.234098584123 | etot = -20.1803829466703 +5000 ekin = 1.35481075814721 | erot = 2.00854026688447 | epot = -24.1768963201279 | etot = -20.8135452950963 +6000 ekin = 2.18974627635306 | erot = 1.73271671162435 | epot = -24.1096616118305 | etot = -20.1871986238531 +7000 ekin = 2.65472853187395 | erot = 1.73258720631296 | epot = -24.0561118130561 | etot = -19.6687960748691 +8000 ekin = 2.51192327964357 | erot = 2.34132844779952 | epot = -23.9708695663488 | etot = -19.1176178389058 +9000 ekin = 2.24554900802464 | erot = 2.0522939078286 | epot = -23.874757758319 | etot = -19.5769148424658 +10000 ekin = 2.36227360512089 | erot = 1.80185994066737 | epot = -23.7793375260418 | etot = -19.6152039802535 + 10000 0.10498994 -1.5020657 0.015857071 -1.3385665 -8.8930899e-05 +Loop time of 0.291642 on 4 procs for 10000 steps with 16 atoms + +Performance: 29625.313 tau/day, 34288.557 timesteps/s +96.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0035026 | 0.1107 | 0.20674 | 28.3 | 37.96 +Bond | 0.00062203 | 0.0029532 | 0.0049176 | 3.6 | 1.01 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.016712 | 0.018041 | 0.01914 | 0.7 | 6.19 +Output | 5.0306e-05 | 5.424e-05 | 5.579e-05 | 0.0 | 0.02 +Modify | 0.0013862 | 0.020914 | 0.039594 | 11.7 | 7.17 +Other | | 0.139 | | | 47.65 + +Nlocal: 4 ave 8 max 0 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11 ave 14 max 8 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Neighs: 46 ave 89 max 0 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 184 +Ave neighs/atom = 11.5 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:00 From a5f75bbabd3c2071770313e5ed074a58f10d0075 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 04:33:33 -0500 Subject: [PATCH 250/273] plug memory leaks in USER-CGDNA package pair styles --- src/USER-CGDNA/pair_oxdna2_coaxstk.cpp | 1 + src/USER-CGDNA/pair_oxdna_coaxstk.cpp | 1 + src/USER-CGDNA/pair_oxdna_hbond.cpp | 1 + src/USER-CGDNA/pair_oxdna_xstk.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp index 569f911eb9..0b220a3275 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp @@ -64,6 +64,7 @@ PairOxdna2Coaxstk::~PairOxdna2Coaxstk() memory->destroy(cut_cxst_hc); memory->destroy(b_cxst_lo); memory->destroy(b_cxst_hi); + memory->destroy(cutsq_cxst_hc); memory->destroy(a_cxst1); memory->destroy(theta_cxst1_0); diff --git a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp index ca03bcb35c..ef0ff16150 100644 --- a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp @@ -64,6 +64,7 @@ PairOxdnaCoaxstk::~PairOxdnaCoaxstk() memory->destroy(cut_cxst_hc); memory->destroy(b_cxst_lo); memory->destroy(b_cxst_hi); + memory->destroy(cutsq_cxst_hc); memory->destroy(a_cxst1); memory->destroy(theta_cxst1_0); diff --git a/src/USER-CGDNA/pair_oxdna_hbond.cpp b/src/USER-CGDNA/pair_oxdna_hbond.cpp index cb9f61bd7e..d8305e30de 100644 --- a/src/USER-CGDNA/pair_oxdna_hbond.cpp +++ b/src/USER-CGDNA/pair_oxdna_hbond.cpp @@ -74,6 +74,7 @@ PairOxdnaHbond::~PairOxdnaHbond() memory->destroy(b_hb_lo); memory->destroy(b_hb_hi); memory->destroy(shift_hb); + memory->destroy(cutsq_hb_hc); memory->destroy(a_hb1); memory->destroy(theta_hb1_0); diff --git a/src/USER-CGDNA/pair_oxdna_xstk.cpp b/src/USER-CGDNA/pair_oxdna_xstk.cpp index c4c23bf2c9..a354a604fd 100644 --- a/src/USER-CGDNA/pair_oxdna_xstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_xstk.cpp @@ -64,6 +64,7 @@ PairOxdnaXstk::~PairOxdnaXstk() memory->destroy(cut_xst_hc); memory->destroy(b_xst_lo); memory->destroy(b_xst_hi); + memory->destroy(cutsq_xst_hc); memory->destroy(a_xst1); memory->destroy(theta_xst1_0); From c44620f00e564874dd09d884999d108a0692eca3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 04:34:00 -0500 Subject: [PATCH 251/273] make sure all class pointers in the LAMMPS class are initialized to NULL some early use of the LAMMPS class may produce segmentation faults, if member classes are not yet initialized and their pointers are pointing to random locations. For NULL we can easily test. --- src/lammps.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 699efe37a3..894239924d 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -65,13 +65,15 @@ static void print_style(FILE *fp, const char *str, int &pos); input is allocated at end after MPI info is setup ------------------------------------------------------------------------- */ -LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) +LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : + memory(NULL), error(NULL), universe(NULL), input(NULL), atom(NULL), + update(NULL), neighbor(NULL), comm(NULL), domain(NULL), force(NULL), + modify(NULL), group(NULL), output(NULL), timer(NULL), kokkos(NULL), + atomKK(NULL), memoryKK(NULL), python(NULL), citeme(NULL) { memory = new Memory(this); error = new Error(this); universe = new Universe(this,communicator); - output = NULL; - python = NULL; clientserver = 0; cslib = NULL; From 8ce60d8761c33f4b53c18a7bc07b91a97a3285cb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 05:03:26 -0500 Subject: [PATCH 252/273] update USER-CGSDK and USER-COLVARS log files --- ...angle => log.27Nov18.pegc12e8-angle.g++.1} | 64 +- .../log.27Nov18.pegc12e8-angle.g++.4 | 127 ++++ ...og.pegc12e8 => log.27Nov18.pegc12e8.g++.1} | 64 +- .../peg-verlet/log.27Nov18.pegc12e8.g++.4 | 127 ++++ .../log.27Nov18.sds-hybrid.g++.1 | 145 ++++ ...ds-hybrid => log.27Nov18.sds-hybrid.g++.4} | 50 +- .../log.27Nov18.sds-regular.g++.1 | 129 ++++ ...-regular => log.27Nov18.sds-regular.g++.4} | 43 +- ...vars => log.27Nov18.peptide-colvars.g++.1} | 518 +++++++++------ .../colvars/log.27Nov18.peptide-colvars.g++.4 | 629 ++++++++++++++++++ ...rs2 => log.27Nov18.peptide-colvars2.g++.1} | 171 +++-- .../log.27Nov18.peptide-colvars2.g++.4 | 260 ++++++++ .../colvars/log.27Nov18.peptide-spring.g++.1 | 163 +++++ .../colvars/log.27Nov18.peptide-spring.g++.4 | 163 +++++ .../colvars/log.27Nov18.peptide-spring2.g++.1 | 158 +++++ .../colvars/log.27Nov18.peptide-spring2.g++.4 | 158 +++++ examples/USER/colvars/log.peptide-colvars-1 | 516 -------------- examples/USER/colvars/log.peptide-colvars-4 | 516 -------------- examples/USER/colvars/log.peptide-colvars2-1 | 182 ----- examples/USER/colvars/log.peptide-colvars2-4 | 182 ----- examples/USER/colvars/log.peptide-spring | 150 ----- examples/USER/colvars/log.peptide-spring2 | 145 ---- examples/USER/colvars/out.colvars.state | 9 +- examples/USER/colvars/out.colvars.state.old | 23 + examples/USER/colvars/out.colvars.traj | 305 ++++++--- examples/USER/colvars/out2.colvars.state | 9 +- examples/USER/colvars/out2.colvars.traj | 204 +++--- examples/USER/colvars/peptide2.colvars.state | 7 +- examples/USER/colvars/peptide2.colvars.traj | 204 +++--- 29 files changed, 3044 insertions(+), 2377 deletions(-) rename examples/USER/cgsdk/peg-verlet/{log.pegc12e8-angle => log.27Nov18.pegc12e8-angle.g++.1} (66%) create mode 100644 examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.4 rename examples/USER/cgsdk/peg-verlet/{log.pegc12e8 => log.27Nov18.pegc12e8.g++.1} (66%) create mode 100644 examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.4 create mode 100644 examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.1 rename examples/USER/cgsdk/sds-monolayer/{log.sds-hybrid => log.27Nov18.sds-hybrid.g++.4} (72%) create mode 100644 examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.1 rename examples/USER/cgsdk/sds-monolayer/{log.sds-regular => log.27Nov18.sds-regular.g++.4} (72%) rename examples/USER/colvars/{log.peptide-colvars => log.27Nov18.peptide-colvars.g++.1} (52%) create mode 100644 examples/USER/colvars/log.27Nov18.peptide-colvars.g++.4 rename examples/USER/colvars/{log.peptide-colvars2 => log.27Nov18.peptide-colvars2.g++.1} (56%) create mode 100644 examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.4 create mode 100644 examples/USER/colvars/log.27Nov18.peptide-spring.g++.1 create mode 100644 examples/USER/colvars/log.27Nov18.peptide-spring.g++.4 create mode 100644 examples/USER/colvars/log.27Nov18.peptide-spring2.g++.1 create mode 100644 examples/USER/colvars/log.27Nov18.peptide-spring2.g++.4 delete mode 100644 examples/USER/colvars/log.peptide-colvars-1 delete mode 100644 examples/USER/colvars/log.peptide-colvars-4 delete mode 100644 examples/USER/colvars/log.peptide-colvars2-1 delete mode 100644 examples/USER/colvars/log.peptide-colvars2-4 delete mode 100644 examples/USER/colvars/log.peptide-spring delete mode 100644 examples/USER/colvars/log.peptide-spring2 create mode 100644 examples/USER/colvars/out.colvars.state.old diff --git a/examples/USER/cgsdk/peg-verlet/log.pegc12e8-angle b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.1 similarity index 66% rename from examples/USER/cgsdk/peg-verlet/log.pegc12e8-angle rename to examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.1 index c57ca24963..0650210418 100644 --- a/examples/USER/cgsdk/peg-verlet/log.pegc12e8-angle +++ b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -19,7 +18,7 @@ special_bonds lj/coul 0.0 0.0 1.0 read_data data.pegc12e8.gz orthogonal box = (-63.7 -63.7 -200) to (63.7 63.7 200) - 2 by 1 by 1 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 40140 atoms reading velocities ... @@ -52,59 +51,71 @@ fix 1 all nvt temp 303.0 303.0 100.0 thermo_style multi thermo 200 run 1000 -Memory usage per processor = 12.4188 Mbytes +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 15 15 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 47.18 | 47.18 | 47.18 Mbytes ---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- TotEng = -217835.8659 KinEng = 36252.9606 Temp = 303.0000 PotEng = -254088.8265 E_bond = 4468.5931 E_angle = 3565.0955 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262122.5151 E_coul = 0.0000 E_long = 0.0000 Press = 114.4952 ----------------- Step 200 ----- CPU = 8.7547 (sec) ---------------- +---------------- Step 200 ----- CPU = 11.2079 (sec) ---------------- TotEng = -217870.2208 KinEng = 36451.9852 Temp = 304.6634 PotEng = -254322.2060 E_bond = 4534.3652 E_angle = 3349.2174 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262205.7887 E_coul = 0.0000 E_long = 0.0000 Press = 39.4030 ----------------- Step 400 ----- CPU = 17.7479 (sec) ---------------- +---------------- Step 400 ----- CPU = 22.6137 (sec) ---------------- TotEng = -218169.7022 KinEng = 36263.1022 Temp = 303.0848 PotEng = -254432.8045 E_bond = 4598.1819 E_angle = 3416.3763 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262447.3627 E_coul = 0.0000 E_long = 0.0000 Press = 9.8923 ----------------- Step 600 ----- CPU = 26.7299 (sec) ---------------- +---------------- Step 600 ----- CPU = 33.9441 (sec) ---------------- TotEng = -217912.9317 KinEng = 36465.5757 Temp = 304.7770 PotEng = -254378.5074 E_bond = 4648.1881 E_angle = 3412.8346 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262439.5301 E_coul = 0.0000 E_long = 0.0000 Press = 25.6392 ----------------- Step 800 ----- CPU = 35.8941 (sec) ---------------- +---------------- Step 800 ----- CPU = 45.4291 (sec) ---------------- TotEng = -218439.8078 KinEng = 36035.8518 Temp = 301.1854 PotEng = -254475.6596 E_bond = 4557.5842 E_angle = 3438.5605 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262471.8043 E_coul = 0.0000 E_long = 0.0000 Press = -1.6281 ----------------- Step 1000 ----- CPU = 45.1542 (sec) ---------------- +---------------- Step 1000 ----- CPU = 56.9328 (sec) ---------------- TotEng = -217925.0543 KinEng = 36271.3928 Temp = 303.1541 PotEng = -254196.4471 E_bond = 4624.7673 E_angle = 3487.7805 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262308.9949 E_coul = 0.0000 E_long = 0.0000 Press = -7.3081 +Loop time of 56.9329 on 1 procs for 1000 steps with 40140 atoms -Loop time of 45.1542 on 2 procs for 1000 steps with 40140 atoms -99.5% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 9.567 ns/day 2.509 hours/ns 22.146 timesteps/s +Performance: 7.588 ns/day, 3.163 hours/ns, 17.565 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 38.906 | 38.953 | 39.001 | 0.8 | 86.27 -Bond | 0.90927 | 0.96844 | 1.0276 | 6.0 | 2.14 -Neigh | 3.7623 | 3.7641 | 3.766 | 0.1 | 8.34 -Comm | 0.56974 | 0.67309 | 0.77643 | 12.6 | 1.49 -Output | 0.00067949 | 0.00072169 | 0.00076389 | 0.2 | 0.00 -Modify | 0.52627 | 0.53756 | 0.54885 | 1.5 | 1.19 -Other | | 0.2571 | | | 0.57 +Pair | 50.734 | 50.734 | 50.734 | 0.0 | 89.11 +Bond | 0.94032 | 0.94032 | 0.94032 | 0.0 | 1.65 +Neigh | 4.5195 | 4.5195 | 4.5195 | 0.0 | 7.94 +Comm | 0.15045 | 0.15045 | 0.15045 | 0.0 | 0.26 +Output | 0.00056767 | 0.00056767 | 0.00056767 | 0.0 | 0.00 +Modify | 0.47228 | 0.47228 | 0.47228 | 0.0 | 0.83 +Other | | 0.1154 | | | 0.20 -Nlocal: 20070 ave 20100 max 20040 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 20230.5 ave 20241 max 20220 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 2.84338e+06 ave 2.85198e+06 max 2.83477e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 40140 ave 40140 max 40140 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 25966 ave 25966 max 25966 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5.68676e+06 ave 5.68676e+06 max 5.68676e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 5686756 Ave neighs/atom = 141.673 @@ -113,3 +124,4 @@ Neighbor list builds = 38 Dangerous builds = 0 #write_restart pegc12e8-1.restart +Total wall time: 0:00:57 diff --git a/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.4 b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.4 new file mode 100644 index 0000000000..bebab0e390 --- /dev/null +++ b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8-angle.g++.4 @@ -0,0 +1,127 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +dimension 3 +atom_style angle + +# enforce that in z-direction there is only one +# processor (could be two) for optimal performance +processors * * 1 + +# read topology and force field +pair_style lj/sdk 15.0 +bond_style harmonic +angle_style sdk +special_bonds lj/coul 0.0 0.0 1.0 + +read_data data.pegc12e8.gz + orthogonal box = (-63.7 -63.7 -200) to (63.7 63.7 200) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 40140 atoms + reading velocities ... + 40140 velocities + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 13284 bonds + reading angles ... + 12177 angles + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of special neighbors + +neighbor 3.0 bin +neigh_modify delay 5 + +timestep 5.0 +#dump 1 all xtc 200 pegc12e8-1.xtc +#dump_modify 1 unwrap yes +#dump 2 all dcd 200 pegc12e8-1.dcd unwrap +#dump_modify 2 unwrap yes + +velocity all create 303.0 46659 mom yes rot yes dist gaussian + +fix 1 all nvt temp 303.0 303.0 100.0 + +thermo_style multi +thermo 200 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 15 15 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 15.87 | 15.87 | 15.87 Mbytes +---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- +TotEng = -217835.8659 KinEng = 36252.9606 Temp = 303.0000 +PotEng = -254088.8265 E_bond = 4468.5931 E_angle = 3565.0955 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262122.5151 +E_coul = 0.0000 E_long = 0.0000 Press = 114.4952 +---------------- Step 200 ----- CPU = 3.0597 (sec) ---------------- +TotEng = -217870.2208 KinEng = 36451.9852 Temp = 304.6634 +PotEng = -254322.2060 E_bond = 4534.3652 E_angle = 3349.2174 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262205.7887 +E_coul = 0.0000 E_long = 0.0000 Press = 39.4030 +---------------- Step 400 ----- CPU = 6.2514 (sec) ---------------- +TotEng = -218169.7022 KinEng = 36263.1022 Temp = 303.0848 +PotEng = -254432.8045 E_bond = 4598.1819 E_angle = 3416.3763 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262447.3627 +E_coul = 0.0000 E_long = 0.0000 Press = 9.8923 +---------------- Step 600 ----- CPU = 9.4073 (sec) ---------------- +TotEng = -217912.9317 KinEng = 36465.5757 Temp = 304.7770 +PotEng = -254378.5074 E_bond = 4648.1881 E_angle = 3412.8346 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262439.5301 +E_coul = 0.0000 E_long = 0.0000 Press = 25.6392 +---------------- Step 800 ----- CPU = 12.6096 (sec) ---------------- +TotEng = -218439.8078 KinEng = 36035.8518 Temp = 301.1854 +PotEng = -254475.6596 E_bond = 4557.5842 E_angle = 3438.5605 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262471.8043 +E_coul = 0.0000 E_long = 0.0000 Press = -1.6281 +---------------- Step 1000 ----- CPU = 15.9134 (sec) ---------------- +TotEng = -217925.0543 KinEng = 36271.3928 Temp = 303.1541 +PotEng = -254196.4471 E_bond = 4624.7673 E_angle = 3487.7805 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262308.9949 +E_coul = 0.0000 E_long = 0.0000 Press = -7.3081 +Loop time of 15.9135 on 4 procs for 1000 steps with 40140 atoms + +Performance: 27.147 ns/day, 0.884 hours/ns, 62.840 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 13.325 | 13.6 | 13.755 | 4.7 | 85.46 +Bond | 0.2432 | 0.25007 | 0.25671 | 1.0 | 1.57 +Neigh | 1.2394 | 1.2399 | 1.2402 | 0.0 | 7.79 +Comm | 0.41026 | 0.5737 | 0.85471 | 23.4 | 3.61 +Output | 0.00025368 | 0.0004195 | 0.00091338 | 0.0 | 0.00 +Modify | 0.17159 | 0.17316 | 0.17459 | 0.3 | 1.09 +Other | | 0.0768 | | | 0.48 + +Nlocal: 10035 ave 10084 max 9971 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Nghost: 14548.8 ave 14610 max 14509 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Neighs: 1.42169e+06 ave 1.42961e+06 max 1.40922e+06 min +Histogram: 1 0 0 0 0 0 1 0 1 1 + +Total # of neighbors = 5686756 +Ave neighs/atom = 141.673 +Ave special neighs/atom = 1.26861 +Neighbor list builds = 38 +Dangerous builds = 0 +#write_restart pegc12e8-1.restart + +Total wall time: 0:00:16 diff --git a/examples/USER/cgsdk/peg-verlet/log.pegc12e8 b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.1 similarity index 66% rename from examples/USER/cgsdk/peg-verlet/log.pegc12e8 rename to examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.1 index 13f7a0cf18..3c85fcfb54 100644 --- a/examples/USER/cgsdk/peg-verlet/log.pegc12e8 +++ b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -19,7 +18,7 @@ special_bonds lj/coul 0.0 0.0 1.0 read_data data.pegc12e8.gz orthogonal box = (-63.7 -63.7 -200) to (63.7 63.7 200) - 2 by 1 by 1 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 40140 atoms reading velocities ... @@ -52,59 +51,71 @@ fix 1 all nvt temp 303.0 303.0 100.0 thermo_style multi thermo 200 run 1000 -Memory usage per processor = 12.4188 Mbytes +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 15 15 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 47.18 | 47.18 | 47.18 Mbytes ---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- TotEng = -217990.7972 KinEng = 36252.9606 Temp = 303.0000 PotEng = -254243.7577 E_bond = 4468.5931 E_angle = 3410.1642 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262122.5151 E_coul = 0.0000 E_long = 0.0000 Press = 105.8245 ----------------- Step 200 ----- CPU = 8.6552 (sec) ---------------- +---------------- Step 200 ----- CPU = 11.2074 (sec) ---------------- TotEng = -218203.1886 KinEng = 36162.5201 Temp = 302.2441 PotEng = -254365.7087 E_bond = 4568.6683 E_angle = 3409.8838 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262344.2608 E_coul = 0.0000 E_long = 0.0000 Press = 29.3660 ----------------- Step 400 ----- CPU = 17.5807 (sec) ---------------- +---------------- Step 400 ----- CPU = 22.6113 (sec) ---------------- TotEng = -217955.7366 KinEng = 36340.4946 Temp = 303.7316 PotEng = -254296.2312 E_bond = 4621.0208 E_angle = 3512.1547 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262429.4067 E_coul = 0.0000 E_long = 0.0000 Press = 16.4419 ----------------- Step 600 ----- CPU = 28.1043 (sec) ---------------- +---------------- Step 600 ----- CPU = 34.0551 (sec) ---------------- TotEng = -218291.9151 KinEng = 36079.2122 Temp = 301.5478 PotEng = -254371.1273 E_bond = 4626.3494 E_angle = 3476.1668 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262473.6435 E_coul = 0.0000 E_long = 0.0000 Press = 14.0304 ----------------- Step 800 ----- CPU = 40.5132 (sec) ---------------- +---------------- Step 800 ----- CPU = 45.5316 (sec) ---------------- TotEng = -218539.5667 KinEng = 36042.0419 Temp = 301.2372 PotEng = -254581.6086 E_bond = 4563.0010 E_angle = 3616.1814 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262760.7910 E_coul = 0.0000 E_long = 0.0000 Press = -6.8312 ----------------- Step 1000 ----- CPU = 52.8166 (sec) ---------------- +---------------- Step 1000 ----- CPU = 56.9111 (sec) ---------------- TotEng = -217783.9370 KinEng = 36453.9620 Temp = 304.6800 PotEng = -254237.8990 E_bond = 4693.8725 E_angle = 3528.1925 E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262459.9639 E_coul = 0.0000 E_long = 0.0000 Press = 0.0980 +Loop time of 56.9112 on 1 procs for 1000 steps with 40140 atoms -Loop time of 52.8166 on 2 procs for 1000 steps with 40140 atoms -99.6% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 8.179 ns/day 2.934 hours/ns 18.933 timesteps/s +Performance: 7.591 ns/day, 3.162 hours/ns, 17.571 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 45.657 | 45.84 | 46.022 | 2.7 | 86.79 -Bond | 0.98427 | 0.99283 | 1.0014 | 0.9 | 1.88 -Neigh | 4.4454 | 4.4458 | 4.4462 | 0.0 | 8.42 -Comm | 0.49872 | 0.6719 | 0.84508 | 21.1 | 1.27 -Output | 0.00076818 | 0.00083113 | 0.00089407 | 0.2 | 0.00 -Modify | 0.59218 | 0.59264 | 0.5931 | 0.1 | 1.12 -Other | | 0.2731 | | | 0.52 +Pair | 50.775 | 50.775 | 50.775 | 0.0 | 89.22 +Bond | 0.88358 | 0.88358 | 0.88358 | 0.0 | 1.55 +Neigh | 4.5176 | 4.5176 | 4.5176 | 0.0 | 7.94 +Comm | 0.14942 | 0.14942 | 0.14942 | 0.0 | 0.26 +Output | 0.00057101 | 0.00057101 | 0.00057101 | 0.0 | 0.00 +Modify | 0.4728 | 0.4728 | 0.4728 | 0.0 | 0.83 +Other | | 0.1127 | | | 0.20 -Nlocal: 20070 ave 20109 max 20031 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 20234 ave 20281 max 20187 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 2.84584e+06 ave 2.85375e+06 max 2.83793e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 40140 ave 40140 max 40140 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 25968 ave 25968 max 25968 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5.69168e+06 ave 5.69168e+06 max 5.69168e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 5691680 Ave neighs/atom = 141.796 @@ -113,3 +124,4 @@ Neighbor list builds = 38 Dangerous builds = 0 #write_restart pegc12e8-1.restart +Total wall time: 0:00:57 diff --git a/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.4 b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.4 new file mode 100644 index 0000000000..b214e0d6bc --- /dev/null +++ b/examples/USER/cgsdk/peg-verlet/log.27Nov18.pegc12e8.g++.4 @@ -0,0 +1,127 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +dimension 3 +atom_style angle + +# enforce that in z-direction there is only one +# processor (could be two) for optimal performance +processors * * 1 + +# read topology and force field +pair_style lj/sdk 15.0 +bond_style harmonic +angle_style harmonic +special_bonds lj/coul 0.0 0.0 1.0 + +read_data data.pegc12e8.gz + orthogonal box = (-63.7 -63.7 -200) to (63.7 63.7 200) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 40140 atoms + reading velocities ... + 40140 velocities + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 13284 bonds + reading angles ... + 12177 angles + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of special neighbors + +neighbor 3.0 bin +neigh_modify delay 5 + +timestep 5.0 +#dump 1 all xtc 200 pegc12e8-1.xtc +#dump_modify 1 unwrap yes +#dump 2 all dcd 200 pegc12e8-1.dcd unwrap +#dump_modify 2 unwrap yes + +velocity all create 303.0 46659 mom yes rot yes dist gaussian + +fix 1 all nvt temp 303.0 303.0 100.0 + +thermo_style multi +thermo 200 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 15 15 45 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 15.87 | 15.87 | 15.87 Mbytes +---------------- Step 0 ----- CPU = 0.0000 (sec) ---------------- +TotEng = -217990.7972 KinEng = 36252.9606 Temp = 303.0000 +PotEng = -254243.7577 E_bond = 4468.5931 E_angle = 3410.1642 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262122.5151 +E_coul = 0.0000 E_long = 0.0000 Press = 105.8245 +---------------- Step 200 ----- CPU = 3.0107 (sec) ---------------- +TotEng = -218203.1886 KinEng = 36162.5201 Temp = 302.2441 +PotEng = -254365.7087 E_bond = 4568.6683 E_angle = 3409.8838 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262344.2608 +E_coul = 0.0000 E_long = 0.0000 Press = 29.3660 +---------------- Step 400 ----- CPU = 6.1324 (sec) ---------------- +TotEng = -217955.7366 KinEng = 36340.4946 Temp = 303.7316 +PotEng = -254296.2312 E_bond = 4621.0208 E_angle = 3512.1547 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262429.4067 +E_coul = 0.0000 E_long = 0.0000 Press = 16.4419 +---------------- Step 600 ----- CPU = 9.3443 (sec) ---------------- +TotEng = -218291.9151 KinEng = 36079.2122 Temp = 301.5478 +PotEng = -254371.1273 E_bond = 4626.3494 E_angle = 3476.1668 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262473.6435 +E_coul = 0.0000 E_long = 0.0000 Press = 14.0304 +---------------- Step 800 ----- CPU = 12.5388 (sec) ---------------- +TotEng = -218539.5667 KinEng = 36042.0419 Temp = 301.2372 +PotEng = -254581.6086 E_bond = 4563.0010 E_angle = 3616.1814 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262760.7910 +E_coul = 0.0000 E_long = 0.0000 Press = -6.8312 +---------------- Step 1000 ----- CPU = 15.7416 (sec) ---------------- +TotEng = -217783.9370 KinEng = 36453.9620 Temp = 304.6800 +PotEng = -254237.8990 E_bond = 4693.8725 E_angle = 3528.1925 +E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -262459.9639 +E_coul = 0.0000 E_long = 0.0000 Press = 0.0980 +Loop time of 15.7417 on 4 procs for 1000 steps with 40140 atoms + +Performance: 27.443 ns/day, 0.875 hours/ns, 63.525 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 13.591 | 13.612 | 13.626 | 0.4 | 86.47 +Bond | 0.22508 | 0.23213 | 0.23791 | 1.0 | 1.47 +Neigh | 1.2257 | 1.2261 | 1.2266 | 0.0 | 7.79 +Comm | 0.39628 | 0.41769 | 0.44666 | 2.9 | 2.65 +Output | 0.000247 | 0.00041109 | 0.00090098 | 0.0 | 0.00 +Modify | 0.17674 | 0.17803 | 0.17952 | 0.2 | 1.13 +Other | | 0.07576 | | | 0.48 + +Nlocal: 10035 ave 10098 max 10004 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Nghost: 14546.5 ave 14564 max 14503 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 1.42292e+06 ave 1.43408e+06 max 1.41615e+06 min +Histogram: 1 1 0 1 0 0 0 0 0 1 + +Total # of neighbors = 5691680 +Ave neighs/atom = 141.796 +Ave special neighs/atom = 1.26861 +Neighbor list builds = 38 +Dangerous builds = 0 +#write_restart pegc12e8-1.restart + +Total wall time: 0:00:15 diff --git a/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.1 b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.1 new file mode 100644 index 0000000000..65ad480bdd --- /dev/null +++ b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.1 @@ -0,0 +1,145 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# coarse grained SDS surfactant monolayer + +units real +dimension 3 +atom_style full +processors * * 1 + +pair_style hybrid/overlay lj/sdk 15.0 coul/long 26.5 +bond_style harmonic +angle_style sdk +special_bonds lj/coul 0.0 0.0 1.0 + +read_data data.sds.gz + orthogonal box = (-27.713 -27.713 -200) to (193.991 83.139 200) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 31280 atoms + reading velocities ... + 31280 velocities + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 4096 bonds + reading angles ... + 3072 angles + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of special neighbors + +pair_coeff 1 4 coul/long # SO4 SOD +pair_coeff 4 4 coul/long # SOD SOD +pair_coeff 1 1 lj/sdk lj9_6 0.7000 4.3210 # SO4 SO4 +pair_coeff 1 2 lj/sdk lj9_6 0.3830 4.4135 # SO4 CM +pair_coeff 1 3 lj/sdk lj9_6 0.4050 4.4530 # SO4 CT +pair_coeff 1 4 lj/sdk lj12_4 1.1000 4.1000 # SO4 SOD +pair_coeff 1 5 lj/sdk lj12_4 1.1000 4.1000 # SO4 W +pair_coeff 2 2 lj/sdk lj9_6 0.4200 4.5060 # CM CM +pair_coeff 2 3 lj/sdk lj9_6 0.4440 4.5455 # CT CM +pair_coeff 2 4 lj/sdk lj12_4 0.3400 4.4385 # SOD CM +pair_coeff 2 5 lj/sdk lj12_4 0.3400 4.4385 # W CM +pair_coeff 3 3 lj/sdk lj9_6 0.4690 4.5850 # CT CT +pair_coeff 3 4 lj/sdk lj12_4 0.3600 4.4780 # SOD CT +pair_coeff 3 5 lj/sdk lj12_4 0.3600 4.4780 # W CT +pair_coeff 4 4 lj/sdk lj12_4 0.3500 4.3710 # SOD SOD +pair_coeff 4 5 lj/sdk lj12_4 0.8950 4.3710 # SOD W +pair_coeff 5 5 lj/sdk lj12_4 0.8950 4.3710 # W W + + +group charged type 1 4 +2048 atoms in group charged +atom_modify first charged + +kspace_style pppm/cg 0.00001 +kspace_modify order 3 + +comm_modify mode multi +neighbor 2.0 multi +neigh_modify delay 4 every 2 check yes + +timestep 10.0 + +fix 1 all nvt temp 310.0 310.0 100.0 + +thermo 10 + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.0416781 + grid = 8 4 12 + stencil order = 3 + estimated absolute RMS force accuracy = 0.00248777 + estimated relative force accuracy = 7.49185e-06 + using double precision FFTs + 3d grid and FFT values/proc = 1155 384 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 28.5 + ghost atom cutoff = 28.5 + binsize = 8.5, bins = 27 14 48 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/multi/newton + stencil: half/multi/3d/newton + bin: standard + (2) pair coul/long, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + PPPM/cg optimization cutoff: 1e-05 + Total charged atoms: 6.5% + Min/max charged atoms/proc: 6.5% 6.5% +Per MPI rank memory allocation (min/avg/max) = 35.49 | 35.49 | 35.49 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 310.0934 -249339.72 2566.2036 -217861.41 -25.664516 + 10 310.88051 -249369.1 2549.1166 -217834.49 -29.095262 + 20 310.33025 -249325.09 2543.0138 -217847.89 -30.069751 + 30 308.24273 -249331.54 2604.3227 -217987.66 -28.033129 + 40 309.41339 -249363.5 2560.6727 -217954.13 -25.802838 + 50 309.16857 -249071.94 2571.9117 -217674.15 -17.946457 + 60 312.67237 -249288.77 2621.0185 -217515.19 -25.723545 + 70 310.13623 -249262.32 2595.874 -217750.35 -26.276067 + 80 310.60448 -249415.99 2596.6752 -217859.56 -27.942924 + 90 309.63209 -249403.14 2606.3186 -217927.73 -24.456575 + 100 309.40793 -249341.62 2599.6402 -217893.79 -22.554823 +Loop time of 9.61984 on 1 procs for 100 steps with 31280 atoms + +Performance: 8.981 ns/day, 2.672 hours/ns, 10.395 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.2928 | 7.2928 | 7.2928 | 0.0 | 75.81 +Bond | 0.036198 | 0.036198 | 0.036198 | 0.0 | 0.38 +Kspace | 0.053125 | 0.053125 | 0.053125 | 0.0 | 0.55 +Neigh | 2.117 | 2.117 | 2.117 | 0.0 | 22.01 +Comm | 0.029731 | 0.029731 | 0.029731 | 0.0 | 0.31 +Output | 0.0014369 | 0.0014369 | 0.0014369 | 0.0 | 0.01 +Modify | 0.079014 | 0.079014 | 0.079014 | 0.0 | 0.82 +Other | | 0.01051 | | | 0.11 + +Nlocal: 31280 ave 31280 max 31280 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 16629 ave 16629 max 16629 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3.40168e+06 ave 3.40168e+06 max 3.40168e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3401676 +Ave neighs/atom = 108.749 +Ave special neighs/atom = 0.458312 +Neighbor list builds = 10 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:10 diff --git a/examples/USER/cgsdk/sds-monolayer/log.sds-hybrid b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.4 similarity index 72% rename from examples/USER/cgsdk/sds-monolayer/log.sds-hybrid rename to examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.4 index 1a8e3b65f3..247f553ecc 100644 --- a/examples/USER/cgsdk/sds-monolayer/log.sds-hybrid +++ b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-hybrid.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # coarse grained SDS surfactant monolayer @@ -58,7 +57,7 @@ atom_modify first charged kspace_style pppm/cg 0.00001 kspace_modify order 3 -communicate multi +comm_modify mode multi neighbor 2.0 multi neigh_modify delay 4 every 2 check yes @@ -70,6 +69,7 @@ thermo 10 run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.0416781 grid = 8 4 12 stencil order = 3 @@ -77,10 +77,27 @@ PPPM initialization ... estimated relative force accuracy = 7.49185e-06 using double precision FFTs 3d grid and FFT values/proc = 525 96 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 28.5 + ghost atom cutoff = 28.5 + binsize = 8.5, bins = 27 14 48 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/sdk, perpetual + attributes: half, newton on + pair build: half/multi/newton + stencil: half/multi/3d/newton + bin: standard + (2) pair coul/long, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none PPPM/cg optimization cutoff: 1e-05 Total charged atoms: 6.5% Min/max charged atoms/proc: 6.4% 6.7% -Memory usage per processor = 7.66668 Mbytes +Per MPI rank memory allocation (min/avg/max) = 17.48 | 17.48 | 17.48 Mbytes Step Temp E_pair E_mol TotEng Press 0 310.0934 -249339.72 2566.2036 -217861.41 -25.664516 10 310.88051 -249369.1 2549.1166 -217834.49 -29.095262 @@ -93,22 +110,22 @@ Step Temp E_pair E_mol TotEng Press 80 310.60448 -249415.99 2596.6752 -217859.56 -27.942924 90 309.63209 -249403.14 2606.3186 -217927.73 -24.456575 100 309.40793 -249341.62 2599.6402 -217893.79 -22.554823 +Loop time of 2.54454 on 4 procs for 100 steps with 31280 atoms -Loop time of 4.07239 on 4 procs for 100 steps with 31280 atoms -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads -Performance: 21.216 ns/day 1.131 hours/ns 24.556 timesteps/s +Performance: 33.955 ns/day, 0.707 hours/ns, 39.300 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.082 | 3.0928 | 3.1091 | 0.6 | 75.95 -Bond | 0.021077 | 0.021421 | 0.021823 | 0.2 | 0.53 -Kspace | 0.042646 | 0.058859 | 0.069797 | 4.1 | 1.45 -Neigh | 0.79689 | 0.79696 | 0.79711 | 0.0 | 19.57 -Comm | 0.048668 | 0.049552 | 0.050446 | 0.3 | 1.22 -Output | 0.00072145 | 0.00095147 | 0.0016341 | 1.3 | 0.02 -Modify | 0.034767 | 0.035175 | 0.035714 | 0.2 | 0.86 -Other | | 0.01665 | | | 0.41 +Pair | 1.8639 | 1.8913 | 1.9283 | 1.8 | 74.33 +Bond | 0.0092797 | 0.0094567 | 0.0095828 | 0.1 | 0.37 +Kspace | 0.018389 | 0.056616 | 0.084424 | 10.7 | 2.23 +Neigh | 0.53553 | 0.53569 | 0.53605 | 0.0 | 21.05 +Comm | 0.023819 | 0.02433 | 0.02506 | 0.3 | 0.96 +Output | 0.00058866 | 0.00084978 | 0.0016243 | 0.0 | 0.03 +Modify | 0.021841 | 0.022059 | 0.022308 | 0.1 | 0.87 +Other | | 0.004233 | | | 0.17 Nlocal: 7820 ave 7866 max 7774 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -125,3 +142,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation +Total wall time: 0:00:02 diff --git a/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.1 b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.1 new file mode 100644 index 0000000000..ab0a9a33e9 --- /dev/null +++ b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# coarse grained SDS surfactant monolayer + +units real +dimension 3 +atom_style full +processors * * 1 + +pair_style lj/sdk/coul/long 15.0 +bond_style harmonic +angle_style sdk +special_bonds lj/coul 0.0 0.0 1.0 + +read_data data.sds.gz + orthogonal box = (-27.713 -27.713 -200) to (193.991 83.139 200) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 31280 atoms + reading velocities ... + 31280 velocities + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 4096 bonds + reading angles ... + 3072 angles + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of special neighbors + +pair_coeff 1 1 lj9_6 0.7000 4.3210 # SO4 SO4 +pair_coeff 1 2 lj9_6 0.3830 4.4135 # SO4 CM +pair_coeff 1 3 lj9_6 0.4050 4.4530 # SO4 CT +pair_coeff 1 4 lj12_4 1.1000 4.1000 # SO4 SOD +pair_coeff 1 5 lj12_4 1.1000 4.1000 # SO4 W +pair_coeff 2 2 lj9_6 0.4200 4.5060 # CM CM +pair_coeff 2 3 lj9_6 0.4440 4.5455 # CT CM +pair_coeff 2 4 lj12_4 0.3400 4.4385 # SOD CM +pair_coeff 2 5 lj12_4 0.3400 4.4385 # W CM +pair_coeff 3 3 lj9_6 0.4690 4.5850 # CT CT +pair_coeff 3 4 lj12_4 0.3600 4.4780 # SOD CT +pair_coeff 3 5 lj12_4 0.3600 4.4780 # W CT +pair_coeff 4 4 lj12_4 0.3500 4.3710 # SOD SOD +pair_coeff 4 5 lj12_4 0.8950 4.3710 # SOD W +pair_coeff 5 5 lj12_4 0.8950 4.3710 # W W + +kspace_style pppm/cg 0.00001 +kspace_modify order 3 + +neighbor 2.0 bin +neigh_modify delay 4 every 2 check yes + +timestep 10.0 + +fix 1 all nvt temp 310.0 310.0 100.0 + +thermo 10 + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.0789325 + grid = 15 8 25 + stencil order = 3 + estimated absolute RMS force accuracy = 0.00275556 + estimated relative force accuracy = 8.29828e-06 + using double precision FFTs + 3d grid and FFT values/proc = 5544 3000 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 17 + ghost atom cutoff = 17 + binsize = 8.5, bins = 27 14 48 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + PPPM/cg optimization cutoff: 1e-05 + Total charged atoms: 6.5% + Min/max charged atoms/proc: 6.5% 6.5% +Per MPI rank memory allocation (min/avg/max) = 35.36 | 35.36 | 35.36 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 310.0934 -247030.21 2566.2036 -215551.9 -14.547393 + 10 310.89138 -247061.61 2549.4854 -215525.62 -18.043512 + 20 310.29287 -247017.8 2542.4491 -215544.65 -19.148631 + 30 308.13371 -247024.82 2602.1061 -215693.32 -17.390902 + 40 309.40426 -247058.41 2558.7402 -215651.82 -15.445066 + 50 309.11317 -246753.92 2570.8603 -215362.36 -7.4232007 + 60 312.52974 -246964.73 2618.8108 -215206.66 -15.23965 + 70 310.11675 -246941.68 2591.8668 -215435.53 -16.153691 + 80 310.48262 -247090.02 2595.0493 -215546.58 -18.080368 + 90 309.60017 -247067.1 2604.6545 -215596.33 -14.583764 + 100 309.7356 -247004.05 2604.8729 -215520.43 -12.78624 +Loop time of 9.23618 on 1 procs for 100 steps with 31280 atoms + +Performance: 9.355 ns/day, 2.566 hours/ns, 10.827 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.7363 | 7.7363 | 7.7363 | 0.0 | 83.76 +Bond | 0.032901 | 0.032901 | 0.032901 | 0.0 | 0.36 +Kspace | 0.078907 | 0.078907 | 0.078907 | 0.0 | 0.85 +Neigh | 1.2706 | 1.2706 | 1.2706 | 0.0 | 13.76 +Comm | 0.026005 | 0.026005 | 0.026005 | 0.0 | 0.28 +Output | 0.0014131 | 0.0014131 | 0.0014131 | 0.0 | 0.02 +Modify | 0.079446 | 0.079446 | 0.079446 | 0.0 | 0.86 +Other | | 0.01055 | | | 0.11 + +Nlocal: 31280 ave 31280 max 31280 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 15812 ave 15812 max 15812 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3.3521e+06 ave 3.3521e+06 max 3.3521e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3352103 +Ave neighs/atom = 107.164 +Ave special neighs/atom = 0.458312 +Neighbor list builds = 10 +Dangerous builds = 0 +Total wall time: 0:00:09 diff --git a/examples/USER/cgsdk/sds-monolayer/log.sds-regular b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.4 similarity index 72% rename from examples/USER/cgsdk/sds-monolayer/log.sds-regular rename to examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.4 index 7ab9d1a760..934b0ae0f2 100644 --- a/examples/USER/cgsdk/sds-monolayer/log.sds-regular +++ b/examples/USER/cgsdk/sds-monolayer/log.27Nov18.sds-regular.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # coarse grained SDS surfactant monolayer @@ -62,6 +61,7 @@ thermo 10 run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.0789325 grid = 15 8 25 stencil order = 3 @@ -69,10 +69,22 @@ PPPM initialization ... estimated relative force accuracy = 8.29828e-06 using double precision FFTs 3d grid and FFT values/proc = 2156 840 +Neighbor list info ... + update every 2 steps, delay 4 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 17 + ghost atom cutoff = 17 + binsize = 8.5, bins = 27 14 48 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/sdk/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard PPPM/cg optimization cutoff: 1e-05 Total charged atoms: 6.5% Min/max charged atoms/proc: 6.4% 6.7% -Memory usage per processor = 8.05923 Mbytes +Per MPI rank memory allocation (min/avg/max) = 17.32 | 17.32 | 17.32 Mbytes Step Temp E_pair E_mol TotEng Press 0 310.0934 -247030.21 2566.2036 -215551.9 -14.547393 10 310.89138 -247061.61 2549.4854 -215525.62 -18.043512 @@ -85,22 +97,22 @@ Step Temp E_pair E_mol TotEng Press 80 310.48262 -247090.02 2595.0493 -215546.58 -18.080368 90 309.60017 -247067.1 2604.6545 -215596.33 -14.583764 100 309.7356 -247004.05 2604.8729 -215520.43 -12.78624 +Loop time of 2.45408 on 4 procs for 100 steps with 31280 atoms -Loop time of 3.44972 on 4 procs for 100 steps with 31280 atoms -98.1% CPU use with 4 MPI tasks x 1 OpenMP threads -Performance: 25.046 ns/day 0.958 hours/ns 28.988 timesteps/s +Performance: 35.207 ns/day, 0.682 hours/ns, 40.748 timesteps/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.7883 | 2.817 | 2.8415 | 1.1 | 81.66 -Bond | 0.017868 | 0.018973 | 0.020636 | 0.7 | 0.55 -Kspace | 0.063881 | 0.088012 | 0.11571 | 6.2 | 2.55 -Neigh | 0.42765 | 0.42828 | 0.42882 | 0.1 | 12.41 -Comm | 0.043887 | 0.044575 | 0.045079 | 0.2 | 1.29 -Output | 0.00072694 | 0.00096422 | 0.0016718 | 1.3 | 0.03 -Modify | 0.035513 | 0.035955 | 0.036887 | 0.3 | 1.04 -Other | | 0.01597 | | | 0.46 +Pair | 2.0065 | 2.0143 | 2.0326 | 0.8 | 82.08 +Bond | 0.0084255 | 0.0086145 | 0.0088007 | 0.1 | 0.35 +Kspace | 0.033373 | 0.052041 | 0.060933 | 4.8 | 2.12 +Neigh | 0.32741 | 0.32748 | 0.32754 | 0.0 | 13.34 +Comm | 0.022403 | 0.023025 | 0.023735 | 0.4 | 0.94 +Output | 0.00060058 | 0.00086623 | 0.0016549 | 0.0 | 0.04 +Modify | 0.022533 | 0.022723 | 0.022876 | 0.1 | 0.93 +Other | | 0.005038 | | | 0.21 Nlocal: 7820 ave 7866 max 7775 min Histogram: 1 1 0 0 0 0 0 1 0 1 @@ -114,3 +126,4 @@ Ave neighs/atom = 107.164 Ave special neighs/atom = 0.458312 Neighbor list builds = 10 Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/USER/colvars/log.peptide-colvars b/examples/USER/colvars/log.27Nov18.peptide-colvars.g++.1 similarity index 52% rename from examples/USER/colvars/log.peptide-colvars rename to examples/USER/colvars/log.27Nov18.peptide-colvars.g++.1 index 6fb85fddc0..3b5203ba6f 100644 --- a/examples/USER/colvars/log.peptide-colvars +++ b/examples/USER/colvars/log.27Nov18.peptide-colvars.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -15,7 +14,7 @@ kspace_style pppm 0.0001 read_data data.peptide orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 2004 atoms reading velocities ... @@ -78,134 +77,179 @@ thermo 10 run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 estimated absolute RMS force accuracy = 0.0228209 estimated relative force accuracy = 6.87243e-05 using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 + 3d grid and FFT values/proc = 10648 3375 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard colvars: Creating proxy instance colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2013-10-22. -colvars: # indexFile = "" [default] -colvars: # analysis = off [default] +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars": +colvars: # smp = on [default] colvars: # colvarsTrajFrequency = 1 colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out.colvars.state". -colvars: Writing to colvar trajectory file "out.colvars.traj". +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] colvars: ---------------------------------------------------------------------- colvars: Initializing a new collective variable. -colvars: # name = one +colvars: # name = "one" colvars: Initializing a new "distance" component. +colvars: # name = "" [default] colvars: # componentCoeff = 1 [default] colvars: # componentExp = 1 [default] colvars: # period = 0 [default] colvars: # wrapAround = 0 [default] colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] +colvars: # scalable = on [default] colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] colvars: # width = 1 [default] colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] colvars: # expandBoundaries = off [default] colvars: # extendedLagrangian = off [default] colvars: # outputValue = on [default] colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] +colvars: # outputTotalForce = off [default] colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] colvars: ---------------------------------------------------------------------- colvars: Initializing a new collective variable. -colvars: # name = two +colvars: # name = "two" colvars: Initializing a new "distance" component. +colvars: # name = "" [default] colvars: # componentCoeff = 1 [default] colvars: # componentExp = 1 [default] colvars: # period = 0 [default] colvars: # wrapAround = 0 [default] colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] +colvars: # scalable = on [default] colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] colvars: # width = 1 [default] colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] colvars: # expandBoundaries = off [default] colvars: # extendedLagrangian = off [default] colvars: # outputValue = on [default] colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] +colvars: # outputTotalForce = off [default] colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables initialized, 2 in total. colvars: ---------------------------------------------------------------------- colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot +colvars: # name = "h_pot" colvars: # colvars = { one, two } colvars: # outputEnergy = off [default] -colvars: # forceConstant = 100 +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] colvars: # centers = { 10, 10 } colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] colvars: # outputCenters = off [default] -colvars: # outputAccumulatedWork = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables biases initialized, 1 in total. colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. +colvars: Collective variables module (re)initialized. colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 1. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 1. +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "out.colvars.state". +colvars: Writing to colvar trajectory file "out.colvars.traj". colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. +colvars: Performing analysis. SHAKE stats (type/ave/delta) on step 0 4 1.111 1.44264e-05 6 0.996998 7.26967e-06 @@ -215,51 +259,52 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Memory usage per processor = 10.4104 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 292.14604 - 10 305.06198 -5058.89 -6286.1848 1227.2948 -6413.0968 58.849896 103.38344 - 20 311.00591 -4999.0544 -6250.2623 1251.2079 -6417.0983 47.695275 36.699706 - 30 314.22398 -4993.6951 -6257.8496 1264.1545 -6421.9641 35.344161 10.563914 - 40 297.87525 -5020.8339 -6219.2158 1198.3819 -6389.8501 27.7232 3.8354396 - 50 304.02085 -5056.2539 -6279.3602 1223.1063 -6456.818 55.459511 0.20679816 - 60 285.92595 -5104.0436 -6254.3523 1150.3087 -6435.5793 32.767289 0.69356527 - 70 277.83498 -5163.9751 -6281.733 1117.7579 -6447.7013 39.62715 11.433633 - 80 267.51476 -5206.4041 -6282.6428 1076.2386 -6456.6352 31.611841 6.3553235 - 90 278.15512 -5245.383 -6364.4288 1119.0458 -6499.8036 28.849902 0.36938817 + 10 305.06149 -5058.8972 -6286.1901 1227.2929 -6413.1021 58.8499 103.38345 + 20 311.00516 -4999.0612 -6250.266 1251.2048 -6417.1021 47.695297 36.699695 + 30 314.22337 -4993.7012 -6257.8532 1264.152 -6421.9679 35.344144 10.563933 + 40 297.87491 -5020.8378 -6219.2184 1198.3805 -6389.8528 27.723133 3.8354517 + 50 304.02071 -5056.2576 -6279.3633 1223.1057 -6456.8214 55.459505 0.20678217 + 60 285.92576 -5104.0461 -6254.354 1150.3079 -6435.5814 32.767229 0.69352945 + 70 277.83519 -5163.9758 -6281.7345 1117.7587 -6447.7033 39.627168 11.433603 + 80 267.51495 -5206.4046 -6282.644 1076.2394 -6456.6369 31.611883 6.3554178 + 90 278.15579 -5245.3824 -6364.431 1119.0485 -6499.8063 28.849773 0.36941576 SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97185e-05 - 6 0.996996 1.00569e-05 - 8 1.08 6.02346e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 14 0.959996 0 - 18 0.957198 3.36078e-05 - 31 104.52 0.00306008 - 100 260.10505 -5292.689 -6339.1177 1046.4286 -6471.6693 25.361881 0.21986866 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 +colvars: Saving collective variables state to "out.colvars.state". +Loop time of 2.17304 on 1 procs for 100 steps with 2004 atoms -Loop time of 1.04673 on 2 procs for 100 steps with 2004 atoms -99.3% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 16.509 ns/day 1.454 hours/ns 95.536 timesteps/s +Performance: 7.952 ns/day, 3.018 hours/ns, 46.018 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.76537 | 0.76832 | 0.77127 | 0.3 | 73.40 -Bond | 0.0024452 | 0.0025067 | 0.0025682 | 0.1 | 0.24 -Kspace | 0.088877 | 0.092861 | 0.096845 | 1.3 | 8.87 -Neigh | 0.13657 | 0.13657 | 0.13658 | 0.0 | 13.05 -Comm | 0.0172 | 0.018169 | 0.019137 | 0.7 | 1.74 -Output | 0.0002296 | 0.00031686 | 0.00040412 | 0.5 | 0.03 -Modify | 0.025518 | 0.025554 | 0.025591 | 0.0 | 2.44 -Other | | 0.002431 | | | 0.23 +Pair | 1.5817 | 1.5817 | 1.5817 | 0.0 | 72.79 +Bond | 0.0031469 | 0.0031469 | 0.0031469 | 0.0 | 0.14 +Kspace | 0.17366 | 0.17366 | 0.17366 | 0.0 | 7.99 +Neigh | 0.37354 | 0.37354 | 0.37354 | 0.0 | 17.19 +Comm | 0.013652 | 0.013652 | 0.013652 | 0.0 | 0.63 +Output | 0.00026059 | 0.00026059 | 0.00026059 | 0.0 | 0.01 +Modify | 0.025484 | 0.025484 | 0.025484 | 0.0 | 1.17 +Other | | 0.001615 | | | 0.07 -Nlocal: 1002 ave 1013 max 991 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8629.5 ave 8641 max 8618 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354118 ave 356534 max 351703 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11124 ave 11124 max 11124 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708237 ave 708237 max 708237 min +Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 708237 Ave neighs/atom = 353.412 @@ -269,279 +314,316 @@ Dangerous builds = 2 run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 estimated absolute RMS force accuracy = 0.0228209 estimated relative force accuracy = 6.87243e-05 using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 + 3d grid and FFT values/proc = 10648 3375 colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97185e-05 - 6 0.996996 1.00569e-05 - 8 1.08 6.02346e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 14 0.959996 0 - 18 0.957198 3.36078e-05 - 31 104.52 0.00306008 -Memory usage per processor = 10.4104 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 100 260.10505 -5292.689 -6339.1177 1046.4286 -6471.6693 25.361881 0.21986866 - 110 266.26279 -5341.2085 -6412.4103 1071.2018 -6552.7566 33.572973 1.9229795 - 120 262.66439 -5386.2495 -6442.9746 1056.7251 -6587.5499 29.859549 2.712489 - 130 252.83437 -5422.5446 -6439.7226 1017.1779 -6580.4751 25.979056 1.2031649 - 140 253.85101 -5452.1904 -6473.4584 1021.268 -6609.4883 26.071526 0.30586448 - 150 261.31821 -5490.4808 -6541.7901 1051.3093 -6646.615 16.258546 6.904992 - 160 255.73714 -5521.6048 -6550.4609 1028.8561 -6658.1531 19.717543 12.339834 - 170 253.42881 -5540.0985 -6559.668 1019.5695 -6656.6862 23.293616 10.289885 - 180 248.51049 -5550.3254 -6550.1079 999.78252 -6661.4178 26.200082 3.4339077 - 190 250.80375 -5555.2616 -6564.2702 1009.0086 -6666.1496 25.536628 3.3495235 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 + 110 266.26438 -5341.1991 -6412.4073 1071.2082 -6552.7551 33.573173 1.9229657 + 120 262.66604 -5386.2387 -6442.9704 1056.7317 -6587.5483 29.859587 2.7124812 + 130 252.83379 -5422.5401 -6439.7157 1017.1756 -6580.4703 25.979343 1.2031592 + 140 253.85111 -5452.1838 -6473.4522 1021.2684 -6609.4826 26.071651 0.30585517 + 150 261.31816 -5490.4727 -6541.7817 1051.3091 -6646.6076 16.258823 6.9051008 + 160 255.7352 -5521.5941 -6550.4424 1028.8483 -6658.1373 19.717399 12.339679 + 170 253.42527 -5540.0942 -6559.6494 1019.5552 -6656.6678 23.293812 10.290217 + 180 248.51161 -5550.3253 -6550.1124 999.78705 -6661.4235 26.200127 3.4336038 + 190 250.80862 -5555.2554 -6564.2836 1009.0282 -6666.164 25.53634 3.3494288 SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.81287e-06 - 6 0.997 7.79626e-07 - 8 1.08 1.08933e-06 - 10 1.111 2.96498e-07 - 12 1.08 4.69169e-07 + 4 1.111 1.81266e-06 + 6 0.997 7.79424e-07 + 8 1.08 1.08903e-06 + 10 1.111 2.96503e-07 + 12 1.08 4.69038e-07 14 0.960001 0 - 18 0.957201 3.76617e-06 - 31 104.52 0.000411076 - 200 251.50646 -5557.4204 -6569.256 1011.8356 -6674.0889 24.805155 7.13891 + 18 0.957201 3.76471e-06 + 31 104.52 0.000411055 + 200 251.50475 -5557.4251 -6569.2538 1011.8287 -6674.0845 24.804906 7.1387574 +colvars: Saving collective variables state to "out.colvars.state". +Loop time of 2.03298 on 1 procs for 100 steps with 2004 atoms -Loop time of 1.00434 on 2 procs for 100 steps with 2004 atoms -99.1% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 17.205 ns/day 1.395 hours/ns 99.568 timesteps/s +Performance: 8.500 ns/day, 2.824 hours/ns, 49.189 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.78001 | 0.78091 | 0.78181 | 0.1 | 77.75 -Bond | 0.0025158 | 0.0025688 | 0.0026219 | 0.1 | 0.26 -Kspace | 0.093375 | 0.094821 | 0.096266 | 0.5 | 9.44 -Neigh | 0.080238 | 0.08025 | 0.080261 | 0.0 | 7.99 -Comm | 0.01671 | 0.017204 | 0.017699 | 0.4 | 1.71 -Output | 0.0002296 | 0.00031531 | 0.00040102 | 0.5 | 0.03 -Modify | 0.025788 | 0.025804 | 0.02582 | 0.0 | 2.57 -Other | | 0.002469 | | | 0.25 +Pair | 1.5975 | 1.5975 | 1.5975 | 0.0 | 78.58 +Bond | 0.0033164 | 0.0033164 | 0.0033164 | 0.0 | 0.16 +Kspace | 0.17349 | 0.17349 | 0.17349 | 0.0 | 8.53 +Neigh | 0.21971 | 0.21971 | 0.21971 | 0.0 | 10.81 +Comm | 0.012045 | 0.012045 | 0.012045 | 0.0 | 0.59 +Output | 0.00026226 | 0.00026226 | 0.00026226 | 0.0 | 0.01 +Modify | 0.025034 | 0.025034 | 0.025034 | 0.0 | 1.23 +Other | | 0.001596 | | | 0.08 -Nlocal: 1002 ave 1014 max 990 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8654 ave 8667 max 8641 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354044 ave 355332 max 352756 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11159 ave 11159 max 11159 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708083 ave 708083 max 708083 min +Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 708088 -Ave neighs/atom = 353.337 +Total # of neighbors = 708083 +Ave neighs/atom = 353.335 Ave special neighs/atom = 2.34032 Neighbor list builds = 7 Dangerous builds = 0 fix 2 all colvars peptide.colvars input out.colvars.state output out2 -colvars: Saving collective variables state to "out.colvars.state". +colvars: Resetting the Collective Variables module. run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 estimated absolute RMS force accuracy = 0.0228209 estimated relative force accuracy = 6.87243e-05 using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 + 3d grid and FFT values/proc = 10648 3375 colvars: Creating proxy instance colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2013-10-22. -colvars: # indexFile = "" [default] -colvars: # analysis = off [default] +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars": +colvars: # smp = on [default] colvars: # colvarsTrajFrequency = 1 colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out2.colvars.state". -colvars: Writing to colvar trajectory file "out2.colvars.traj". +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] colvars: ---------------------------------------------------------------------- colvars: Initializing a new collective variable. -colvars: # name = one +colvars: # name = "one" colvars: Initializing a new "distance" component. +colvars: # name = "" [default] colvars: # componentCoeff = 1 [default] colvars: # componentExp = 1 [default] colvars: # period = 0 [default] colvars: # wrapAround = 0 [default] colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] +colvars: # scalable = on [default] colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] colvars: # width = 1 [default] colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] colvars: # expandBoundaries = off [default] colvars: # extendedLagrangian = off [default] colvars: # outputValue = on [default] colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] +colvars: # outputTotalForce = off [default] colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] colvars: ---------------------------------------------------------------------- colvars: Initializing a new collective variable. -colvars: # name = two +colvars: # name = "two" colvars: Initializing a new "distance" component. +colvars: # name = "" [default] colvars: # componentCoeff = 1 [default] colvars: # componentExp = 1 [default] colvars: # period = 0 [default] colvars: # wrapAround = 0 [default] colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] +colvars: # scalable = on [default] colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] colvars: # width = 1 [default] colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] colvars: # expandBoundaries = off [default] colvars: # extendedLagrangian = off [default] colvars: # outputValue = on [default] colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] +colvars: # outputTotalForce = off [default] colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables initialized, 2 in total. colvars: ---------------------------------------------------------------------- colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot +colvars: # name = "h_pot" colvars: # colvars = { one, two } colvars: # outputEnergy = off [default] -colvars: # forceConstant = 100 +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] colvars: # centers = { 10, 10 } colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] colvars: # outputCenters = off [default] -colvars: # outputAccumulatedWork = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables biases initialized, 1 in total. colvars: ---------------------------------------------------------------------- +colvars: Collective variables module (re)initialized. +colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 1. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 1. +colvars: ---------------------------------------------------------------------- colvars: Restarting from file "out.colvars.state". colvars: Restarting collective variable "one" from value: 10.0128 colvars: Restarting collective variable "two" from value: 9.62236 -colvars: Restarting harmonic bias "h_pot". colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -colvars: Initializing step number as firstTimestep. +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "out2.colvars.state". +colvars: Writing to colvar trajectory file "out2.colvars.traj". +colvars: Setting initial step number from LAMMPS: 200 colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. +colvars: Performing analysis. SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.81287e-06 - 6 0.997 7.79626e-07 - 8 1.08 1.08933e-06 - 10 1.111 2.96498e-07 - 12 1.08 4.69169e-07 + 4 1.111 1.81266e-06 + 6 0.997 7.79424e-07 + 8 1.08 1.08903e-06 + 10 1.111 2.96503e-07 + 12 1.08 4.69038e-07 14 0.960001 0 - 18 0.957201 3.76617e-06 - 31 104.52 0.000411076 -Memory usage per processor = 10.4104 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 200 251.50646 -5557.4204 -6569.256 1011.8356 -6674.0889 24.805155 7.13891 - 210 253.15173 -5538.5647 -6557.0194 1018.4547 -6672.044 37.671405 0.61299805 - 220 245.19832 -5522.5253 -6508.9826 986.45735 -6628.2043 36.656213 0.04862311 - 230 258.65093 -5495.7204 -6536.2989 1040.5785 -6658.0891 34.855426 0.22044707 - 240 260.80348 -5469.8527 -6519.0912 1049.2385 -6624.1806 31.576284 3.7570152 - 250 269.06517 -5438.3941 -6520.8701 1082.4761 -6616.3835 25.443998 8.6642401 - 260 266.10873 -5397.3229 -6467.905 1070.582 -6580.6583 26.873845 8.3331291 - 270 272.81399 -5350.8435 -6448.4015 1097.5579 -6563.7941 23.11303 10.972811 - 280 279.52614 -5307.9857 -6432.5473 1124.5616 -6557.7474 33.640052 8.5474491 - 290 286.8015 -5260.87 -6414.7011 1153.8311 -6515.4961 28.571844 5.9093384 + 18 0.957201 3.76471e-06 + 31 104.52 0.000411055 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 200 251.50475 -5557.4251 -6569.2538 1011.8287 -6674.0845 24.804906 7.1387574 + 210 253.15303 -5538.5615 -6557.0215 1018.46 -6672.0498 37.67662 0.61219496 + 220 245.19621 -5522.519 -6508.9679 986.44888 -6628.1899 36.657688 0.04864338 + 230 258.69884 -5495.7275 -6536.4988 1040.7713 -6658.2885 34.857911 0.22092547 + 240 260.79635 -5469.8678 -6519.0776 1049.2098 -6624.1801 31.576951 3.7574816 + 250 269.07527 -5438.3946 -6520.9114 1082.5167 -6616.4383 25.447674 8.6600014 + 260 266.01049 -5397.3485 -6467.5353 1070.1868 -6580.2897 26.871917 8.3323097 + 270 272.81313 -5350.882 -6448.4365 1097.5545 -6563.8231 23.114195 10.973131 + 280 279.42263 -5307.9798 -6432.125 1124.1452 -6557.3367 33.644027 8.5490492 + 290 286.85172 -5260.841 -6414.8741 1154.0331 -6515.6798 28.574838 5.9100133 SHAKE stats (type/ave/delta) on step 300 - 4 1.111 1.79747e-05 - 6 0.997005 1.02624e-05 - 8 1.08 1.84986e-05 - 10 1.111 9.9852e-06 - 12 1.08 8.8315e-06 + 4 1.111 1.79792e-05 + 6 0.997005 1.02512e-05 + 8 1.08 1.85102e-05 + 10 1.111 9.98839e-06 + 12 1.08 8.84111e-06 14 0.960008 0 - 18 0.957203 1.84856e-05 - 31 104.52 0.00169095 - 300 291.51723 -5216.3366 -6389.1396 1172.803 -6503.1168 27.877108 2.2481775 + 18 0.957203 1.8445e-05 + 31 104.52 0.00168383 + 300 291.52798 -5216.288 -6389.1341 1172.8462 -6503.1276 27.889154 2.2482459 +colvars: Saving collective variables state to "out2.colvars.state". +Loop time of 2.07171 on 1 procs for 100 steps with 2004 atoms -Loop time of 1.0092 on 2 procs for 100 steps with 2004 atoms -99.1% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 17.123 ns/day 1.402 hours/ns 99.089 timesteps/s +Performance: 8.341 ns/day, 2.877 hours/ns, 48.269 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.77015 | 0.77511 | 0.78007 | 0.6 | 76.80 -Bond | 0.0022984 | 0.0024998 | 0.0027013 | 0.4 | 0.25 -Kspace | 0.088884 | 0.093076 | 0.097267 | 1.4 | 9.22 -Neigh | 0.092871 | 0.092888 | 0.092905 | 0.0 | 9.20 -Comm | 0.016476 | 0.017 | 0.017524 | 0.4 | 1.68 -Output | 0.00022602 | 0.00031459 | 0.00040317 | 0.5 | 0.03 -Modify | 0.025814 | 0.025818 | 0.025823 | 0.0 | 2.56 -Other | | 0.002488 | | | 0.25 +Pair | 1.6047 | 1.6047 | 1.6047 | 0.0 | 77.46 +Bond | 0.0031033 | 0.0031033 | 0.0031033 | 0.0 | 0.15 +Kspace | 0.17325 | 0.17325 | 0.17325 | 0.0 | 8.36 +Neigh | 0.25117 | 0.25117 | 0.25117 | 0.0 | 12.12 +Comm | 0.012173 | 0.012173 | 0.012173 | 0.0 | 0.59 +Output | 0.00026488 | 0.00026488 | 0.00026488 | 0.0 | 0.01 +Modify | 0.025317 | 0.025317 | 0.025317 | 0.0 | 1.22 +Other | | 0.001731 | | | 0.08 -Nlocal: 1002 ave 1024 max 980 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8717.5 ave 8755 max 8680 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354073 ave 358151 max 349995 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11296 ave 11296 max 11296 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708152 ave 708152 max 708152 min +Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 708146 -Ave neighs/atom = 353.366 +Total # of neighbors = 708152 +Ave neighs/atom = 353.369 Ave special neighs/atom = 2.34032 Neighbor list builds = 8 Dangerous builds = 0 -colvars: Saving collective variables state to "out2.colvars.state". +colvars: Resetting the Collective Variables module. Please see the log.cite file for references relevant to this simulation +Total wall time: 0:00:06 diff --git a/examples/USER/colvars/log.27Nov18.peptide-colvars.g++.4 b/examples/USER/colvars/log.27Nov18.peptide-colvars.g++.4 new file mode 100644 index 0000000000..586ebbc5c5 --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-colvars.g++.4 @@ -0,0 +1,629 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +shell "rm -f out*.colvars.*" +fix 2 all colvars peptide.colvars +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +colvars: Creating proxy instance +colvars: ---------------------------------------------------------------------- +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars": +colvars: # smp = on [default] +colvars: # colvarsTrajFrequency = 1 +colvars: # colvarsRestartFrequency = 1000 +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new collective variable. +colvars: # name = "one" +colvars: Initializing a new "distance" component. +colvars: # name = "" [default] +colvars: # componentCoeff = 1 [default] +colvars: # componentExp = 1 [default] +colvars: # period = 0 [default] +colvars: # wrapAround = 0 [default] +colvars: # forceNoPBC = off [default] +colvars: # scalable = on [default] +colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] +colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] +colvars: # width = 1 [default] +colvars: # lowerBoundary = 0 [default] +colvars: # upperBoundary = 0 [default] +colvars: # expandBoundaries = off [default] +colvars: # extendedLagrangian = off [default] +colvars: # outputValue = on [default] +colvars: # outputVelocity = off [default] +colvars: # outputTotalForce = off [default] +colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new collective variable. +colvars: # name = "two" +colvars: Initializing a new "distance" component. +colvars: # name = "" [default] +colvars: # componentCoeff = 1 [default] +colvars: # componentExp = 1 [default] +colvars: # period = 0 [default] +colvars: # wrapAround = 0 [default] +colvars: # forceNoPBC = off [default] +colvars: # scalable = on [default] +colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] +colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] +colvars: # width = 1 [default] +colvars: # lowerBoundary = 0 [default] +colvars: # upperBoundary = 0 [default] +colvars: # expandBoundaries = off [default] +colvars: # extendedLagrangian = off [default] +colvars: # outputValue = on [default] +colvars: # outputVelocity = off [default] +colvars: # outputTotalForce = off [default] +colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables initialized, 2 in total. +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new "harmonic" instance. +colvars: # name = "h_pot" +colvars: # colvars = { one, two } +colvars: # outputEnergy = off [default] +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] +colvars: # centers = { 10, 10 } +colvars: # targetCenters = { 10, 10 } [default] +colvars: # outputCenters = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables biases initialized, 1 in total. +colvars: ---------------------------------------------------------------------- +colvars: Collective variables module (re)initialized. +colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 1. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 1. +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "out.colvars.state". +colvars: Writing to colvar trajectory file "out.colvars.traj". +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. +colvars: Performing analysis. +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 292.14604 + 10 305.06149 -5058.8972 -6286.1901 1227.2929 -6413.1021 58.8499 103.38345 + 20 311.00516 -4999.0612 -6250.266 1251.2048 -6417.1021 47.695297 36.699695 + 30 314.22337 -4993.7012 -6257.8532 1264.152 -6421.9679 35.344144 10.563933 + 40 297.87491 -5020.8378 -6219.2184 1198.3805 -6389.8528 27.723133 3.8354517 + 50 304.02071 -5056.2576 -6279.3633 1223.1057 -6456.8214 55.459505 0.20678217 + 60 285.92576 -5104.0461 -6254.354 1150.3079 -6435.5814 32.767229 0.69352945 + 70 277.83519 -5163.9758 -6281.7345 1117.7587 -6447.7033 39.627168 11.433603 + 80 267.51495 -5206.4046 -6282.644 1076.2394 -6456.6369 31.611883 6.3554178 + 90 278.15579 -5245.3824 -6364.431 1119.0485 -6499.8063 28.849773 0.36941576 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 + 14 0.959996 0 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 +colvars: Saving collective variables state to "out.colvars.state". +Loop time of 0.614168 on 4 procs for 100 steps with 2004 atoms + +Performance: 28.136 ns/day, 0.853 hours/ns, 162.822 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.40413 | 0.41468 | 0.42573 | 1.4 | 67.52 +Bond | 0.00056815 | 0.0011595 | 0.0017791 | 1.6 | 0.19 +Kspace | 0.056367 | 0.066512 | 0.076213 | 3.3 | 10.83 +Neigh | 0.095025 | 0.09507 | 0.095124 | 0.0 | 15.48 +Comm | 0.015385 | 0.015831 | 0.01623 | 0.2 | 2.58 +Output | 0.00026512 | 0.00034493 | 0.00057554 | 0.0 | 0.06 +Modify | 0.01938 | 0.019431 | 0.019474 | 0.0 | 3.16 +Other | | 0.001141 | | | 0.19 + +Nlocal: 501 ave 513 max 489 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +Nghost: 6563.25 ave 6596 max 6519 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 177059 ave 181742 max 172942 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 708237 +Ave neighs/atom = 353.412 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 12 +Dangerous builds = 2 + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. +SHAKE stats (type/ave/delta) on step 100 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 + 14 0.959996 0 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 +Per MPI rank memory allocation (min/avg/max) = 15.66 | 15.86 | 16.06 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 + 110 266.26438 -5341.1991 -6412.4073 1071.2082 -6552.7551 33.573173 1.9229657 + 120 262.66604 -5386.2387 -6442.9704 1056.7317 -6587.5483 29.859587 2.7124812 + 130 252.83379 -5422.5401 -6439.7157 1017.1756 -6580.4703 25.979343 1.2031592 + 140 253.85111 -5452.1838 -6473.4521 1021.2684 -6609.4826 26.071651 0.30585517 + 150 261.31816 -5490.4726 -6541.7817 1051.3091 -6646.6075 16.258823 6.9051008 + 160 255.7352 -5521.5941 -6550.4423 1028.8483 -6658.1373 19.717399 12.339679 + 170 253.42527 -5540.0941 -6559.6493 1019.5552 -6656.6677 23.293812 10.290217 + 180 248.51161 -5550.3253 -6550.1124 999.78704 -6661.4235 26.200127 3.4336037 + 190 250.80862 -5555.2553 -6564.2834 1009.0282 -6666.1638 25.53634 3.3494287 +SHAKE stats (type/ave/delta) on step 200 + 4 1.111 1.81266e-06 + 6 0.997 7.79424e-07 + 8 1.08 1.08903e-06 + 10 1.111 2.96503e-07 + 12 1.08 4.69038e-07 + 14 0.960001 0 + 18 0.957201 3.76471e-06 + 31 104.52 0.000411055 + 200 251.50475 -5557.4251 -6569.2539 1011.8288 -6674.0845 24.804905 7.1387572 +colvars: Saving collective variables state to "out.colvars.state". +Loop time of 0.569733 on 4 procs for 100 steps with 2004 atoms + +Performance: 30.330 ns/day, 0.791 hours/ns, 175.521 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.40512 | 0.41306 | 0.42363 | 1.3 | 72.50 +Bond | 0.00061107 | 0.001151 | 0.0017512 | 1.4 | 0.20 +Kspace | 0.054393 | 0.063988 | 0.07198 | 3.0 | 11.23 +Neigh | 0.056063 | 0.056079 | 0.05609 | 0.0 | 9.84 +Comm | 0.013584 | 0.014145 | 0.014649 | 0.3 | 2.48 +Output | 0.00026965 | 0.00042897 | 0.00090265 | 0.0 | 0.08 +Modify | 0.019253 | 0.019257 | 0.01926 | 0.0 | 3.38 +Other | | 0.001623 | | | 0.28 + +Nlocal: 501 ave 513 max 481 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 6556.5 ave 6608 max 6514 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 177021 ave 182259 max 172089 min +Histogram: 2 0 0 0 0 0 0 0 1 1 + +Total # of neighbors = 708083 +Ave neighs/atom = 353.335 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 7 +Dangerous builds = 0 + +fix 2 all colvars peptide.colvars input out.colvars.state output out2 +colvars: Resetting the Collective Variables module. + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +colvars: Creating proxy instance +colvars: ---------------------------------------------------------------------- +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars": +colvars: # smp = on [default] +colvars: # colvarsTrajFrequency = 1 +colvars: # colvarsRestartFrequency = 1000 +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new collective variable. +colvars: # name = "one" +colvars: Initializing a new "distance" component. +colvars: # name = "" [default] +colvars: # componentCoeff = 1 [default] +colvars: # componentExp = 1 [default] +colvars: # period = 0 [default] +colvars: # wrapAround = 0 [default] +colvars: # forceNoPBC = off [default] +colvars: # scalable = on [default] +colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] +colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] +colvars: # width = 1 [default] +colvars: # lowerBoundary = 0 [default] +colvars: # upperBoundary = 0 [default] +colvars: # expandBoundaries = off [default] +colvars: # extendedLagrangian = off [default] +colvars: # outputValue = on [default] +colvars: # outputVelocity = off [default] +colvars: # outputTotalForce = off [default] +colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new collective variable. +colvars: # name = "two" +colvars: Initializing a new "distance" component. +colvars: # name = "" [default] +colvars: # componentCoeff = 1 [default] +colvars: # componentExp = 1 [default] +colvars: # period = 0 [default] +colvars: # wrapAround = 0 [default] +colvars: # forceNoPBC = off [default] +colvars: # scalable = on [default] +colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 1 atoms initialized: total mass = 1, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] +colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] +colvars: # width = 1 [default] +colvars: # lowerBoundary = 0 [default] +colvars: # upperBoundary = 0 [default] +colvars: # expandBoundaries = off [default] +colvars: # extendedLagrangian = off [default] +colvars: # outputValue = on [default] +colvars: # outputVelocity = off [default] +colvars: # outputTotalForce = off [default] +colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables initialized, 2 in total. +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new "harmonic" instance. +colvars: # name = "h_pot" +colvars: # colvars = { one, two } +colvars: # outputEnergy = off [default] +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] +colvars: # centers = { 10, 10 } +colvars: # targetCenters = { 10, 10 } [default] +colvars: # outputCenters = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables biases initialized, 1 in total. +colvars: ---------------------------------------------------------------------- +colvars: Collective variables module (re)initialized. +colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 1. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 1. +colvars: ---------------------------------------------------------------------- +colvars: Restarting from file "out.colvars.state". +colvars: Restarting collective variable "one" from value: 10.0128 +colvars: Restarting collective variable "two" from value: 9.62236 +colvars: ---------------------------------------------------------------------- +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "out2.colvars.state". +colvars: Writing to colvar trajectory file "out2.colvars.traj". +colvars: Setting initial step number from LAMMPS: 200 +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group one:0/1. 1 atoms: total mass = 12.011. +colvars: Re-initialized atom group two:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group two:0/1. 1 atoms: total mass = 12.011. +colvars: Performing analysis. +SHAKE stats (type/ave/delta) on step 200 + 4 1.111 1.81266e-06 + 6 0.997 7.79424e-07 + 8 1.08 1.08903e-06 + 10 1.111 2.96503e-07 + 12 1.08 4.69038e-07 + 14 0.960001 0 + 18 0.957201 3.76471e-06 + 31 104.52 0.000411055 +Per MPI rank memory allocation (min/avg/max) = 15.66 | 15.86 | 16.06 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 200 251.50475 -5557.4251 -6569.2539 1011.8288 -6674.0845 24.804905 7.1387572 + 210 253.15304 -5538.5615 -6557.0215 1018.46 -6672.0498 37.676621 0.61219486 + 220 245.19621 -5522.5189 -6508.9678 986.44888 -6628.1898 36.657688 0.048643368 + 230 258.69885 -5495.7276 -6536.4989 1040.7713 -6658.2887 34.857911 0.22092541 + 240 260.79635 -5469.8677 -6519.0775 1049.2098 -6624.18 31.576952 3.7574818 + 250 269.07527 -5438.3947 -6520.9115 1082.5167 -6616.4384 25.447674 8.6600013 + 260 266.0105 -5397.3486 -6467.5354 1070.1868 -6580.2898 26.871917 8.3323096 + 270 272.81314 -5350.8819 -6448.4364 1097.5545 -6563.823 23.114195 10.973131 + 280 279.42263 -5307.9799 -6432.125 1124.1452 -6557.3367 33.644027 8.5490488 + 290 286.8517 -5260.8409 -6414.874 1154.0331 -6515.6797 28.574839 5.9100135 +SHAKE stats (type/ave/delta) on step 300 + 4 1.111 1.79792e-05 + 6 0.997005 1.02512e-05 + 8 1.08 1.85102e-05 + 10 1.111 9.98838e-06 + 12 1.08 8.84113e-06 + 14 0.960008 0 + 18 0.957203 1.8445e-05 + 31 104.52 0.00168382 + 300 291.52794 -5216.2881 -6389.1342 1172.846 -6503.1276 27.889153 2.248246 +colvars: Saving collective variables state to "out2.colvars.state". +Loop time of 0.584942 on 4 procs for 100 steps with 2004 atoms + +Performance: 29.541 ns/day, 0.812 hours/ns, 170.957 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.41044 | 0.41882 | 0.42773 | 1.1 | 71.60 +Bond | 0.00056911 | 0.0011486 | 0.0018017 | 1.4 | 0.20 +Kspace | 0.056211 | 0.064277 | 0.072168 | 2.7 | 10.99 +Neigh | 0.064606 | 0.064613 | 0.064617 | 0.0 | 11.05 +Comm | 0.013311 | 0.013966 | 0.015175 | 0.6 | 2.39 +Output | 0.00027871 | 0.00051689 | 0.0012221 | 0.0 | 0.09 +Modify | 0.019776 | 0.0199 | 0.020015 | 0.1 | 3.40 +Other | | 0.001705 | | | 0.29 + +Nlocal: 501 ave 513 max 472 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Nghost: 6612.75 ave 6681 max 6561 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Neighs: 177038 ave 180136 max 170218 min +Histogram: 1 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 708152 +Ave neighs/atom = 353.369 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 8 +Dangerous builds = 0 + +colvars: Resetting the Collective Variables module. + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/USER/colvars/log.peptide-colvars2 b/examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.1 similarity index 56% rename from examples/USER/colvars/log.peptide-colvars2 rename to examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.1 index 9966f34a3a..8e5c990f40 100644 --- a/examples/USER/colvars/log.peptide-colvars2 +++ b/examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) +LAMMPS (27 Nov 2018) using 1 OpenMP thread(s) per MPI task # Solvated 5-mer peptide @@ -15,7 +14,7 @@ kspace_style pppm 0.0001 read_data data.peptide orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 2 MPI processor grid + 1 by 1 by 1 MPI processor grid reading atoms ... 2004 atoms reading velocities ... @@ -77,88 +76,122 @@ thermo 10 run 100 PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.268725 grid = 15 15 15 stencil order = 5 estimated absolute RMS force accuracy = 0.0228209 estimated relative force accuracy = 6.87243e-05 using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 + 3d grid and FFT values/proc = 10648 3375 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard colvars: Creating proxy instance colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2013-10-22. -colvars: # indexFile = "" [default] -colvars: # analysis = off [default] +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars2": +colvars: # smp = on [default] colvars: # colvarsTrajFrequency = 1 colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "peptide2.colvars.state". -colvars: Writing to colvar trajectory file "peptide2.colvars.traj". +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] colvars: ---------------------------------------------------------------------- colvars: Initializing a new collective variable. -colvars: # name = one +colvars: # name = "one" colvars: Initializing a new "distance" component. +colvars: # name = "" [default] colvars: # componentCoeff = 1 [default] colvars: # componentExp = 1 [default] colvars: # period = 0 [default] colvars: # wrapAround = 0 [default] colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] +colvars: # scalable = on [default] colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] colvars: # indexGroup = "" [default] colvars: # psfSegID = [default] colvars: # atomsFile = "" [default] colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] colvars: # enableForces = on [default] -colvars: # disableForces = off [default] -colvars: # centerReference = off [default] -colvars: # rotateReference = off [default] colvars: # enableFitGradients = on [default] -colvars: Atom group "group2" defined, 4 atoms initialized: total mass = 0. +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] colvars: # width = 1 [default] colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] colvars: # expandBoundaries = off [default] colvars: # extendedLagrangian = off [default] colvars: # outputValue = on [default] colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] +colvars: # outputTotalForce = off [default] colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables initialized, 1 in total. colvars: ---------------------------------------------------------------------- colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot +colvars: # name = "h_pot" colvars: # colvars = { one } colvars: # outputEnergy = off [default] -colvars: # forceConstant = 100 +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] colvars: # centers = { 10 } colvars: # targetCenters = { 10 } [default] -colvars: # targetForceConstant = 0 [default] colvars: # outputCenters = off [default] -colvars: # outputAccumulatedWork = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] colvars: ---------------------------------------------------------------------- colvars: Collective variables biases initialized, 1 in total. colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. +colvars: Collective variables module (re)initialized. colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 4 atoms: total mass = 4. +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "peptide2.colvars.state". +colvars: Writing to colvar trajectory file "peptide2.colvars.traj". colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. colvars: Re-initialized atom group one:0/1. 4 atoms: total mass = 15.035. +colvars: Performing analysis. SHAKE stats (type/ave/delta) on step 0 4 1.111 1.44264e-05 6 0.996998 7.26967e-06 @@ -168,58 +201,60 @@ SHAKE stats (type/ave/delta) on step 0 14 0.96 0 18 0.957206 4.37979e-05 31 104.519 0.00396029 -Memory usage per processor = 10.4103 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 273.74323 - 10 333.47973 -4982.3893 -6324.0116 1341.6223 -6400.417 21.367753 12.393269 - 20 309.56974 -4999.4934 -6244.9234 1245.43 -6401.6969 43.595447 13.004393 - 30 316.97689 -5025.5598 -6300.7895 1275.2297 -6422.5335 27.323113 6.7588862 - 40 297.55811 -5088.2155 -6285.3215 1197.106 -6395.3714 13.676871 25.625154 - 50 296.80002 -5117.2927 -6311.3488 1194.0561 -6451.8274 30.631277 5.3320302 - 60 281.72798 -5188.494 -6321.9138 1133.4198 -6427.8833 26.28765 20.573958 - 70 277.26045 -5224.8416 -6340.2881 1115.4465 -6447.8495 27.742889 0.69414895 - 80 268.01458 -5281.8501 -6360.0996 1078.2495 -6496.6062 20.300729 5.260642 - 90 270.43384 -5334.0847 -6422.0671 1087.9824 -6563.2486 39.845992 1.183249 + 10 333.47919 -4982.3968 -6324.0169 1341.6201 -6400.4223 21.367762 12.393263 + 20 309.56902 -4999.4978 -6244.9249 1245.4271 -6401.6981 43.59542 13.004314 + 30 316.9763 -5025.5662 -6300.7935 1275.2273 -6422.5375 27.323196 6.7589585 + 40 297.55779 -5088.2204 -6285.3252 1197.1047 -6395.375 13.6769 25.625024 + 50 296.79994 -5117.2966 -6311.3525 1194.0558 -6451.8309 30.631241 5.3320863 + 60 281.72778 -5188.4969 -6321.9159 1133.419 -6427.8856 26.287723 20.574037 + 70 277.26053 -5224.8434 -6340.2902 1115.4468 -6447.8521 27.742893 0.69420283 + 80 268.01484 -5281.8509 -6360.1014 1078.2505 -6496.6086 20.300754 5.2607186 + 90 270.43472 -5334.0835 -6422.0694 1087.9859 -6563.2511 39.846095 1.1832272 SHAKE stats (type/ave/delta) on step 100 - 4 1.11096 0.000191466 - 6 0.996989 3.5552e-05 - 8 1.08 9.10001e-06 - 10 1.111 1.58547e-05 - 12 1.08 5.80613e-06 + 4 1.11096 0.000191462 + 6 0.996989 3.55508e-05 + 8 1.08 9.0997e-06 + 10 1.111 1.58544e-05 + 12 1.08 5.80604e-06 14 0.959997 0 - 18 0.957198 2.92454e-05 - 31 104.52 0.00239929 - 100 260.35617 -5387.2298 -6434.6687 1047.4389 -6534.1957 20.246734 0.075048991 + 18 0.957198 2.92445e-05 + 31 104.52 0.00239923 + 100 260.35636 -5387.2284 -6434.6681 1047.4397 -6534.1956 20.246866 0.075048487 +colvars: Saving collective variables state to "peptide2.colvars.state". +Loop time of 2.25958 on 1 procs for 100 steps with 2004 atoms -Loop time of 1.07439 on 2 procs for 100 steps with 2004 atoms -98.2% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 16.084 ns/day 1.492 hours/ns 93.076 timesteps/s +Performance: 7.647 ns/day, 3.138 hours/ns, 44.256 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads -MPI task timings breakdown: +MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.77154 | 0.77308 | 0.77462 | 0.2 | 71.96 -Bond | 0.0023637 | 0.0025266 | 0.0026896 | 0.3 | 0.24 -Kspace | 0.095779 | 0.097411 | 0.099043 | 0.5 | 9.07 -Neigh | 0.15521 | 0.15521 | 0.15522 | 0.0 | 14.45 -Comm | 0.018134 | 0.018364 | 0.018594 | 0.2 | 1.71 -Output | 0.00024295 | 0.00032854 | 0.00041413 | 0.5 | 0.03 -Modify | 0.024936 | 0.024973 | 0.02501 | 0.0 | 2.32 -Other | | 0.002498 | | | 0.23 +Pair | 1.6373 | 1.6373 | 1.6373 | 0.0 | 72.46 +Bond | 0.0031531 | 0.0031531 | 0.0031531 | 0.0 | 0.14 +Kspace | 0.17439 | 0.17439 | 0.17439 | 0.0 | 7.72 +Neigh | 0.40442 | 0.40442 | 0.40442 | 0.0 | 17.90 +Comm | 0.014091 | 0.014091 | 0.014091 | 0.0 | 0.62 +Output | 0.00027752 | 0.00027752 | 0.00027752 | 0.0 | 0.01 +Modify | 0.024481 | 0.024481 | 0.024481 | 0.0 | 1.08 +Other | | 0.001465 | | | 0.06 -Nlocal: 1002 ave 1010 max 994 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8645 ave 8652 max 8638 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354116 ave 356373 max 351860 min -Histogram: 1 0 0 0 0 0 0 0 0 1 +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11143 ave 11143 max 11143 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708234 ave 708234 max 708234 min +Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 708233 +Total # of neighbors = 708234 Ave neighs/atom = 353.41 Ave special neighs/atom = 2.34032 Neighbor list builds = 13 Dangerous builds = 1 -colvars: Saving collective variables state to "peptide2.colvars.state". +colvars: Resetting the Collective Variables module. Please see the log.cite file for references relevant to this simulation +Total wall time: 0:00:02 diff --git a/examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.4 b/examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.4 new file mode 100644 index 0000000000..47f1b672df --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-colvars2.g++.4 @@ -0,0 +1,260 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +shell "rm -f peptide2.colvars.*" +fix 2 all colvars peptide.colvars2 output peptide2 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.colvar2.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_2 +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +colvars: Creating proxy instance +colvars: ---------------------------------------------------------------------- +colvars: Initializing the collective variables module, version 2018-11-16. +colvars: Please cite Fiorin et al, Mol Phys 2013: +colvars: http://dx.doi.org/10.1080/00268976.2013.813594 +colvars: in any publication based on this calculation. +colvars: SMP parallelism is available. +colvars: Using LAMMPS interface, version 2018-08-29. +colvars: ---------------------------------------------------------------------- +colvars: Reading new configuration from file "peptide.colvars2": +colvars: # smp = on [default] +colvars: # colvarsTrajFrequency = 1 +colvars: # colvarsRestartFrequency = 1000 +colvars: # scriptedColvarForces = off [default] +colvars: # scriptingAfterBiases = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new collective variable. +colvars: # name = "one" +colvars: Initializing a new "distance" component. +colvars: # name = "" [default] +colvars: # componentCoeff = 1 [default] +colvars: # componentExp = 1 [default] +colvars: # period = 0 [default] +colvars: # wrapAround = 0 [default] +colvars: # forceNoPBC = off [default] +colvars: # scalable = on [default] +colvars: Initializing atom group "group1". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group1" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: Initializing atom group "group2". +colvars: # name = "" [default] +colvars: # centerReference = off [default] +colvars: # rotateReference = off [default] +colvars: # atomsOfGroup = "" [default] +colvars: # indexGroup = "" [default] +colvars: # psfSegID = [default] +colvars: # atomsFile = "" [default] +colvars: # dummyAtom = ( 0 , 0 , 0 ) [default] +colvars: # enableForces = on [default] +colvars: # enableFitGradients = on [default] +colvars: # printAtomIDs = off [default] +colvars: Atom group "group2" defined, 4 atoms initialized: total mass = 4, total charge = 0. +colvars: # oneSiteSystemForce = off [default] +colvars: # oneSiteTotalForce = off [default] +colvars: All components initialized. +colvars: # timeStepFactor = 1 [default] +colvars: # width = 1 [default] +colvars: # lowerBoundary = 0 [default] +colvars: # upperBoundary = 0 [default] +colvars: # expandBoundaries = off [default] +colvars: # extendedLagrangian = off [default] +colvars: # outputValue = on [default] +colvars: # outputVelocity = off [default] +colvars: # outputTotalForce = off [default] +colvars: # outputAppliedForce = off [default] +colvars: # subtractAppliedForce = off [default] +colvars: # runAve = off [default] +colvars: # corrFunc = off [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables initialized, 1 in total. +colvars: ---------------------------------------------------------------------- +colvars: Initializing a new "harmonic" instance. +colvars: # name = "h_pot" +colvars: # colvars = { one } +colvars: # outputEnergy = off [default] +colvars: # timeStepFactor = 1 [default] +colvars: # writeTISamples = off [default] +colvars: # writeTIPMF = off [default] +colvars: # centers = { 10 } +colvars: # targetCenters = { 10 } [default] +colvars: # outputCenters = off [default] +colvars: # forceConstant = 100 +colvars: # targetForceConstant = -1 [default] +colvars: ---------------------------------------------------------------------- +colvars: Collective variables biases initialized, 1 in total. +colvars: ---------------------------------------------------------------------- +colvars: Collective variables module (re)initialized. +colvars: ---------------------------------------------------------------------- +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 4. +colvars: Re-initialized atom group one:0/1. 4 atoms: total mass = 4. +colvars: The restart output state file will be "rest.colvars.state". +colvars: The final output state file will be "peptide2.colvars.state". +colvars: Writing to colvar trajectory file "peptide2.colvars.traj". +colvars: Re-initialized atom group one:0/0. 4 atoms: total mass = 15.035. +colvars: Re-initialized atom group one:0/1. 4 atoms: total mass = 15.035. +colvars: Performing analysis. +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_2 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 273.74323 + 10 333.47919 -4982.3968 -6324.0169 1341.6201 -6400.4223 21.367762 12.393263 + 20 309.56902 -4999.4978 -6244.9249 1245.4271 -6401.6981 43.59542 13.004314 + 30 316.9763 -5025.5662 -6300.7935 1275.2273 -6422.5375 27.323196 6.7589585 + 40 297.55779 -5088.2204 -6285.3252 1197.1047 -6395.375 13.6769 25.625024 + 50 296.79994 -5117.2966 -6311.3525 1194.0558 -6451.8309 30.631241 5.3320863 + 60 281.72778 -5188.4969 -6321.9159 1133.419 -6427.8856 26.287723 20.574037 + 70 277.26053 -5224.8434 -6340.2902 1115.4468 -6447.8521 27.742893 0.69420283 + 80 268.01484 -5281.8509 -6360.1014 1078.2505 -6496.6086 20.300754 5.2607186 + 90 270.43472 -5334.0835 -6422.0694 1087.9859 -6563.2511 39.846095 1.1832272 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11096 0.000191462 + 6 0.996989 3.55508e-05 + 8 1.08 9.0997e-06 + 10 1.111 1.58544e-05 + 12 1.08 5.80604e-06 + 14 0.959997 0 + 18 0.957198 2.92445e-05 + 31 104.52 0.00239923 + 100 260.35636 -5387.2284 -6434.6681 1047.4397 -6534.1956 20.246866 0.075048487 +colvars: Saving collective variables state to "peptide2.colvars.state". +Loop time of 0.629325 on 4 procs for 100 steps with 2004 atoms + +Performance: 27.458 ns/day, 0.874 hours/ns, 158.900 timesteps/s +99.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.4012 | 0.41532 | 0.42829 | 1.9 | 65.99 +Bond | 0.0005219 | 0.0011545 | 0.0018291 | 1.8 | 0.18 +Kspace | 0.059271 | 0.071301 | 0.084393 | 4.4 | 11.33 +Neigh | 0.10416 | 0.10419 | 0.10424 | 0.0 | 16.56 +Comm | 0.015643 | 0.016628 | 0.017256 | 0.5 | 2.64 +Output | 0.00025177 | 0.00033599 | 0.00058722 | 0.0 | 0.05 +Modify | 0.01912 | 0.019129 | 0.019141 | 0.0 | 3.04 +Other | | 0.001264 | | | 0.20 + +Nlocal: 501 ave 513 max 494 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Nghost: 6572.5 ave 6593 max 6548 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 177058 ave 181778 max 174301 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 708234 +Ave neighs/atom = 353.41 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 13 +Dangerous builds = 1 +colvars: Resetting the Collective Variables module. + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/USER/colvars/log.27Nov18.peptide-spring.g++.1 b/examples/USER/colvars/log.27Nov18.peptide-spring.g++.1 new file mode 100644 index 0000000000..a6801fe306 --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-spring.g++.1 @@ -0,0 +1,163 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 3a one spring couple ref 100.0 0.0 0.0 0.0 10.0 +fix 3b two spring couple ref 100.0 0.0 0.0 0.0 10.0 + +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.spring.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +variable sp equal f_3a+f_3b + +thermo_style custom step temp etotal pe ke epair ebond v_sp +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 10648 3375 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond v_sp + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 292.14604 + 10 305.06149 -5058.8972 -6286.1901 1227.2929 -6413.1021 58.8499 103.38345 + 20 311.00516 -4999.0612 -6250.266 1251.2048 -6417.1021 47.695297 36.699695 + 30 314.22337 -4993.7012 -6257.8532 1264.152 -6421.9679 35.344144 10.563933 + 40 297.87491 -5020.8378 -6219.2184 1198.3805 -6389.8528 27.723133 3.8354517 + 50 304.02071 -5056.2576 -6279.3633 1223.1057 -6456.8214 55.459505 0.20678217 + 60 285.92576 -5104.0461 -6254.354 1150.3079 -6435.5814 32.767229 0.69352945 + 70 277.83519 -5163.9758 -6281.7345 1117.7587 -6447.7033 39.627168 11.433603 + 80 267.51495 -5206.4046 -6282.644 1076.2394 -6456.6369 31.611883 6.3554178 + 90 278.15579 -5245.3824 -6364.431 1119.0485 -6499.8063 28.849773 0.36941576 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 + 14 0.959996 0 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 +Loop time of 2.21146 on 1 procs for 100 steps with 2004 atoms + +Performance: 7.814 ns/day, 3.071 hours/ns, 45.219 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.6195 | 1.6195 | 1.6195 | 0.0 | 73.23 +Bond | 0.0033534 | 0.0033534 | 0.0033534 | 0.0 | 0.15 +Kspace | 0.17464 | 0.17464 | 0.17464 | 0.0 | 7.90 +Neigh | 0.37337 | 0.37337 | 0.37337 | 0.0 | 16.88 +Comm | 0.013891 | 0.013891 | 0.013891 | 0.0 | 0.63 +Output | 0.00037336 | 0.00037336 | 0.00037336 | 0.0 | 0.02 +Modify | 0.024753 | 0.024753 | 0.024753 | 0.0 | 1.12 +Other | | 0.001613 | | | 0.07 + +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11124 ave 11124 max 11124 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708237 ave 708237 max 708237 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 708237 +Ave neighs/atom = 353.412 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 12 +Dangerous builds = 2 +Total wall time: 0:00:02 diff --git a/examples/USER/colvars/log.27Nov18.peptide-spring.g++.4 b/examples/USER/colvars/log.27Nov18.peptide-spring.g++.4 new file mode 100644 index 0000000000..025c371640 --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-spring.g++.4 @@ -0,0 +1,163 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 3a one spring couple ref 100.0 0.0 0.0 0.0 10.0 +fix 3b two spring couple ref 100.0 0.0 0.0 0.0 10.0 + +fix 2a ref setforce 0.0 0.0 0.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.spring.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +variable sp equal f_3a+f_3b + +thermo_style custom step temp etotal pe ke epair ebond v_sp +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond v_sp + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 292.14604 + 10 305.06149 -5058.8972 -6286.1901 1227.2929 -6413.1021 58.8499 103.38345 + 20 311.00516 -4999.0612 -6250.266 1251.2048 -6417.1021 47.695297 36.699695 + 30 314.22337 -4993.7012 -6257.8532 1264.152 -6421.9679 35.344144 10.563933 + 40 297.87491 -5020.8378 -6219.2184 1198.3805 -6389.8528 27.723133 3.8354517 + 50 304.02071 -5056.2576 -6279.3633 1223.1057 -6456.8214 55.459505 0.20678217 + 60 285.92576 -5104.0461 -6254.354 1150.3079 -6435.5814 32.767229 0.69352945 + 70 277.83519 -5163.9758 -6281.7345 1117.7587 -6447.7033 39.627168 11.433603 + 80 267.51495 -5206.4046 -6282.644 1076.2394 -6456.6369 31.611883 6.3554178 + 90 278.15579 -5245.3824 -6364.431 1119.0485 -6499.8063 28.849773 0.36941576 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11098 8.97155e-05 + 6 0.996996 1.00568e-05 + 8 1.08 6.02345e-06 + 10 1.111 1.84253e-05 + 12 1.08 7.2713e-06 + 14 0.959996 0 + 18 0.957198 3.36079e-05 + 31 104.52 0.0030599 + 100 260.10613 -5292.6885 -6339.1215 1046.433 -6471.6734 25.362042 0.21987323 +Loop time of 0.620672 on 4 procs for 100 steps with 2004 atoms + +Performance: 27.841 ns/day, 0.862 hours/ns, 161.116 timesteps/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.4029 | 0.41752 | 0.4307 | 1.7 | 67.27 +Bond | 0.00054789 | 0.0011698 | 0.0018225 | 1.8 | 0.19 +Kspace | 0.055853 | 0.069798 | 0.083975 | 4.3 | 11.25 +Neigh | 0.096553 | 0.096622 | 0.096707 | 0.0 | 15.57 +Comm | 0.015383 | 0.016022 | 0.01632 | 0.3 | 2.58 +Output | 0.00033116 | 0.00057495 | 0.0012989 | 0.0 | 0.09 +Modify | 0.017549 | 0.017693 | 0.017826 | 0.1 | 2.85 +Other | | 0.001274 | | | 0.21 + +Nlocal: 501 ave 513 max 489 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +Nghost: 6563.25 ave 6596 max 6519 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 177059 ave 181742 max 172942 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 708237 +Ave neighs/atom = 353.412 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 12 +Dangerous builds = 2 +Total wall time: 0:00:00 diff --git a/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.1 b/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.1 new file mode 100644 index 0000000000..7397c5475d --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.1 @@ -0,0 +1,158 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 3 one spring couple two 100.0 0.0 0.0 0.0 10.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.spring2.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_3 +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 10648 3375 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 18.7 | 18.7 | 18.7 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_3 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 273.74323 + 10 333.47919 -4982.3968 -6324.0169 1341.6201 -6400.4223 21.367762 12.393263 + 20 309.56902 -4999.4978 -6244.9249 1245.4271 -6401.6981 43.59542 13.004314 + 30 316.9763 -5025.5662 -6300.7935 1275.2273 -6422.5375 27.323196 6.7589585 + 40 297.55779 -5088.2204 -6285.3252 1197.1047 -6395.375 13.6769 25.625024 + 50 296.79994 -5117.2966 -6311.3525 1194.0558 -6451.8309 30.631241 5.3320863 + 60 281.72778 -5188.4969 -6321.9159 1133.419 -6427.8856 26.287723 20.574037 + 70 277.26053 -5224.8434 -6340.2902 1115.4468 -6447.8521 27.742893 0.69420283 + 80 268.01484 -5281.8509 -6360.1014 1078.2505 -6496.6086 20.300754 5.2607186 + 90 270.43472 -5334.0835 -6422.0694 1087.9859 -6563.2511 39.846095 1.1832272 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11096 0.000191462 + 6 0.996989 3.55508e-05 + 8 1.08 9.0997e-06 + 10 1.111 1.58544e-05 + 12 1.08 5.80604e-06 + 14 0.959997 0 + 18 0.957198 2.92445e-05 + 31 104.52 0.00239923 + 100 260.35636 -5387.2284 -6434.6681 1047.4397 -6534.1956 20.246866 0.075048487 +Loop time of 2.2037 on 1 procs for 100 steps with 2004 atoms + +Performance: 7.841 ns/day, 3.061 hours/ns, 45.378 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.5852 | 1.5852 | 1.5852 | 0.0 | 71.93 +Bond | 0.0032725 | 0.0032725 | 0.0032725 | 0.0 | 0.15 +Kspace | 0.17308 | 0.17308 | 0.17308 | 0.0 | 7.85 +Neigh | 0.4027 | 0.4027 | 0.4027 | 0.0 | 18.27 +Comm | 0.014041 | 0.014041 | 0.014041 | 0.0 | 0.64 +Output | 0.00032306 | 0.00032306 | 0.00032306 | 0.0 | 0.01 +Modify | 0.023546 | 0.023546 | 0.023546 | 0.0 | 1.07 +Other | | 0.001546 | | | 0.07 + +Nlocal: 2004 ave 2004 max 2004 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11143 ave 11143 max 11143 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 708234 ave 708234 max 708234 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 708234 +Ave neighs/atom = 353.41 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 13 +Dangerous builds = 1 +Total wall time: 0:00:02 diff --git a/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.4 b/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.4 new file mode 100644 index 0000000000..0e3f0d3b6b --- /dev/null +++ b/examples/USER/colvars/log.27Nov18.peptide-spring2.g++.4 @@ -0,0 +1,158 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# Solvated 5-mer peptide + +units real +atom_style full + +pair_style lj/charmm/coul/long 8.0 10.0 10.0 +bond_style harmonic +angle_style charmm +dihedral_style charmm +improper_style harmonic +kspace_style pppm 0.0001 + +read_data data.peptide + orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2004 atoms + reading velocities ... + 2004 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 14 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 1365 bonds + reading angles ... + 786 angles + reading dihedrals ... + 207 dihedrals + reading impropers ... + 12 impropers + 4 = max # of 1-2 neighbors + 7 = max # of 1-3 neighbors + 14 = max # of 1-4 neighbors + 18 = max # of special neighbors + +neighbor 2.0 bin +neigh_modify delay 5 + +timestep 2.0 + +group peptide type <= 12 +84 atoms in group peptide +group one id 2 4 5 6 +4 atoms in group one +group two id 80 82 83 84 +4 atoms in group two +group ref id 37 +1 atoms in group ref +group colvar union one two ref +9 atoms in group colvar + +fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 + +fix 3 one spring couple two 100.0 0.0 0.0 0.0 10.0 + +fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 + 19 = # of size 2 clusters + 6 = # of size 3 clusters + 3 = # of size 4 clusters + 640 = # of frozen angles + +#dump 1 colvar custom 1 dump.spring2.lammpstrj id xu yu zu fx fy fz +#dump_modify 1 sort id + +thermo_style custom step temp etotal pe ke epair ebond f_3 +thermo 10 + + +run 100 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.268725 + grid = 15 15 15 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0228209 + estimated relative force accuracy = 6.87243e-05 + using double precision FFTs + 3d grid and FFT values/proc = 4312 960 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/charmm/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +SHAKE stats (type/ave/delta) on step 0 + 4 1.111 1.44264e-05 + 6 0.996998 7.26967e-06 + 8 1.08 1.32536e-05 + 10 1.111 1.22749e-05 + 12 1.08 1.11767e-05 + 14 0.96 0 + 18 0.957206 4.37979e-05 + 31 104.519 0.00396029 +Per MPI rank memory allocation (min/avg/max) = 15.65 | 15.86 | 16.05 Mbytes +Step Temp TotEng PotEng KinEng E_pair E_bond f_3 + 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 273.74323 + 10 333.47919 -4982.3968 -6324.0169 1341.6201 -6400.4223 21.367762 12.393263 + 20 309.56902 -4999.4978 -6244.9249 1245.4271 -6401.6981 43.59542 13.004314 + 30 316.9763 -5025.5662 -6300.7935 1275.2273 -6422.5375 27.323196 6.7589585 + 40 297.55779 -5088.2204 -6285.3252 1197.1047 -6395.375 13.6769 25.625024 + 50 296.79994 -5117.2966 -6311.3525 1194.0558 -6451.8309 30.631241 5.3320863 + 60 281.72778 -5188.4969 -6321.9159 1133.419 -6427.8856 26.287723 20.574037 + 70 277.26053 -5224.8434 -6340.2902 1115.4468 -6447.8521 27.742893 0.69420283 + 80 268.01484 -5281.8509 -6360.1014 1078.2505 -6496.6086 20.300754 5.2607186 + 90 270.43472 -5334.0835 -6422.0694 1087.9859 -6563.2511 39.846095 1.1832272 +SHAKE stats (type/ave/delta) on step 100 + 4 1.11096 0.000191462 + 6 0.996989 3.55508e-05 + 8 1.08 9.0997e-06 + 10 1.111 1.58544e-05 + 12 1.08 5.80604e-06 + 14 0.959997 0 + 18 0.957198 2.92445e-05 + 31 104.52 0.00239923 + 100 260.35636 -5387.2284 -6434.6681 1047.4397 -6534.1956 20.246866 0.075048487 +Loop time of 0.616036 on 4 procs for 100 steps with 2004 atoms + +Performance: 28.050 ns/day, 0.856 hours/ns, 162.328 timesteps/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.40372 | 0.41244 | 0.41714 | 0.8 | 66.95 +Bond | 0.00053573 | 0.0011384 | 0.0017946 | 1.8 | 0.18 +Kspace | 0.060087 | 0.063993 | 0.07306 | 2.1 | 10.39 +Neigh | 0.1033 | 0.10349 | 0.1036 | 0.0 | 16.80 +Comm | 0.01568 | 0.016453 | 0.017178 | 0.5 | 2.67 +Output | 0.00028253 | 0.00032026 | 0.00043178 | 0.0 | 0.05 +Modify | 0.016238 | 0.016955 | 0.017704 | 0.5 | 2.75 +Other | | 0.001239 | | | 0.20 + +Nlocal: 501 ave 513 max 494 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Nghost: 6572.5 ave 6593 max 6548 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 177058 ave 181778 max 174301 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 708234 +Ave neighs/atom = 353.41 +Ave special neighs/atom = 2.34032 +Neighbor list builds = 13 +Dangerous builds = 1 +Total wall time: 0:00:00 diff --git a/examples/USER/colvars/log.peptide-colvars-1 b/examples/USER/colvars/log.peptide-colvars-1 deleted file mode 100644 index 515480efe5..0000000000 --- a/examples/USER/colvars/log.peptide-colvars-1 +++ /dev/null @@ -1,516 +0,0 @@ -LAMMPS (21 May 2012-ICMS) -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - 3 = max bonds/atom - 6 = max angles/atom - 14 = max dihedrals/atom - 1 = max impropers/atom - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 1 MPI processor grid - 2004 atoms - 2004 velocities - 1365 bonds - 786 angles - 207 dihedrals - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -shell "rm -f out*.colvars.*" -fix 2 all colvars peptide.colvars -fix 2a ref setforce 0.0 0.0 0.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 10648 3375 5808 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out.colvars.state". -colvars: The trajectory file will be "out.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 22.5866 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 0 282.10052 -5237.458 -6372.3765 1134.9186 -6442.7679 16.557152 292.14604 - 10 305.06198 -5058.8899 -6286.1847 1227.2948 -6413.0967 58.849896 103.38344 - 20 311.00592 -4999.0544 -6250.2623 1251.2079 -6417.0984 47.695274 36.699706 - 30 314.22398 -4993.6953 -6257.8498 1264.1545 -6421.9643 35.344163 10.563914 - 40 297.87524 -5020.8339 -6219.2158 1198.3819 -6389.8501 27.723201 3.8354392 - 50 304.02086 -5056.2539 -6279.3602 1223.1063 -6456.8181 55.459508 0.20679801 - 60 285.92594 -5104.0436 -6254.3523 1150.3086 -6435.5793 32.76729 0.69356508 - 70 277.835 -5163.9752 -6281.7332 1117.758 -6447.7015 39.627148 11.433632 - 80 267.51473 -5206.4042 -6282.6427 1076.2385 -6456.6352 31.611843 6.3553235 - 90 278.15513 -5245.383 -6364.4289 1119.0459 -6499.8037 28.849899 0.36938867 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97184e-05 - 6 0.996996 1.00568e-05 - 8 1.08 6.02345e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 - 14 0.959996 0 - 18 0.957198 3.36077e-05 - 31 104.52 0.00306008 - 100 260.10505 -5292.6892 -6339.1178 1046.4286 -6471.6694 25.361885 0.2198687 -colvars: Saving collective variables state to "out.colvars.state". -Loop time of 2.39102 on 1 procs for 100 steps with 2004 atoms - - Pair time (%) = 1.86583 (78.0347) - Bond time (%) = 0.00628591 (0.262896) -Kspace time (%) = 0.165128 (6.90614) -Neigh time (%) = 0.314792 (13.1656) - Comm time (%) = 0.0111108 (0.464687) -Output time (%) = 0.000252724 (0.0105697) -Modify time (%) = 0.0253747 (1.06125) -Other time (%) = 0.0022521 (0.0941899) - -FFT time (% of Kspce) = 0.0274372 (16.6158) -FFT Gflps 3d (1d only) = 1.99867 2.86506 - -Nlocal: 2004 ave 2004 max 2004 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 11124 ave 11124 max 11124 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 708237 ave 708237 max 708237 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 708237 -Ave neighs/atom = 353.412 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 12 -Dangerous builds = 2 - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 10648 3375 5808 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out.colvars.state". -colvars: The trajectory file will be "out.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Restarting from file "out.colvars.state". -colvars: Restarting collective variable "one" from value: 10.0137 -colvars: Restarting collective variable "two" from value: 10.0649 -colvars: Restarting harmonic bias "h_pot". -colvars: Reading current stage from the restart. -colvars: # stage = 3900175693153042431 -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -colvars: Initializing step number as firstTimestep. -SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97184e-05 - 6 0.996996 1.00568e-05 - 8 1.08 6.02345e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 - 14 0.959996 0 - 18 0.957198 3.36077e-05 - 31 104.52 0.00306008 -Memory usage per processor = 22.5866 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 100 260.10505 -5292.6892 -6339.1178 1046.4286 -6471.6694 25.361885 0.2198687 - 110 266.26278 -5341.2103 -6412.412 1071.2018 -6552.7583 33.572968 1.9229782 - 120 262.66442 -5386.2494 -6442.9746 1056.7252 -6587.5499 29.859553 2.7124877 - 130 252.8344 -5422.5446 -6439.7226 1017.1781 -6580.4752 25.979049 1.2031628 - 140 253.85115 -5452.1905 -6473.4591 1021.2686 -6609.489 26.071514 0.30586247 - 150 261.31825 -5490.48 -6541.7895 1051.3095 -6646.6144 16.258548 6.9049974 - 160 255.7368 -5521.6048 -6550.4596 1028.8547 -6658.1517 19.717533 12.339821 - 170 253.42877 -5540.1003 -6559.6695 1019.5693 -6656.6878 23.293662 10.289878 - 180 248.51086 -5550.3244 -6550.1084 999.78404 -6661.4182 26.200056 3.4339065 - 190 250.8039 -5555.2614 -6564.2706 1009.0092 -6666.15 25.536594 3.3495152 -SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.8129e-06 - 6 0.997 7.7964e-07 - 8 1.08 1.08934e-06 - 10 1.111 2.96501e-07 - 12 1.08 4.69174e-07 - 14 0.960001 0 - 18 0.957201 3.76571e-06 - 31 104.52 0.000411068 - 200 251.50581 -5557.4209 -6569.2539 1011.833 -6674.0867 24.805164 7.1388858 -colvars: Saving collective variables state to "out.colvars.state". -Loop time of 2.23495 on 1 procs for 100 steps with 2004 atoms - - Pair time (%) = 1.84544 (82.572) - Bond time (%) = 0.00609159 (0.27256) -Kspace time (%) = 0.163201 (7.30223) -Neigh time (%) = 0.183405 (8.20622) - Comm time (%) = 0.00959301 (0.429227) -Output time (%) = 0.000245094 (0.0109664) -Modify time (%) = 0.0247326 (1.10663) -Other time (%) = 0.00223875 (0.10017) - -FFT time (% of Kspce) = 0.0272989 (16.7271) -FFT Gflps 3d (1d only) = 2.0088 2.93901 - -Nlocal: 2004 ave 2004 max 2004 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 11159 ave 11159 max 11159 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 708088 ave 708088 max 708088 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 708088 -Ave neighs/atom = 353.337 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 7 -Dangerous builds = 0 - -fix 2 all colvars peptide.colvars input out.colvars.state output out2 - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 10648 3375 5808 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out2.colvars.state". -colvars: The trajectory file will be "out2.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Restarting from file "out.colvars.state". -colvars: Restarting collective variable "one" from value: 10.0128 -colvars: Restarting collective variable "two" from value: 9.62236 -colvars: Restarting harmonic bias "h_pot". -colvars: Reading current stage from the restart. -colvars: # stage = 3900175693153042431 -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -colvars: Initializing step number as firstTimestep. -SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.8129e-06 - 6 0.997 7.7964e-07 - 8 1.08 1.08934e-06 - 10 1.111 2.96501e-07 - 12 1.08 4.69174e-07 - 14 0.960001 0 - 18 0.957201 3.76571e-06 - 31 104.52 0.000411068 -Memory usage per processor = 22.5866 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 200 251.50581 -5557.4209 -6569.2539 1011.833 -6674.0867 24.805164 7.1388858 - 210 253.15043 -5538.5668 -6557.0163 1018.4495 -6672.041 37.67158 0.61296982 - 220 245.19746 -5522.5242 -6508.9781 986.4539 -6628.1999 36.656356 0.048624555 - 230 258.65299 -5495.7177 -6536.3046 1040.5868 -6658.0952 34.855726 0.22046598 - 240 260.80143 -5469.8517 -6519.0819 1049.2302 -6624.1723 31.576409 3.7570726 - 250 269.06507 -5438.3971 -6520.8727 1082.4757 -6616.3871 25.444125 8.6640978 - 260 266.10282 -5397.3162 -6467.8744 1070.5583 -6580.628 26.873936 8.3330854 - 270 272.81993 -5350.8393 -6448.4211 1097.5819 -6563.8139 23.113421 10.972906 - 280 279.52079 -5307.9855 -6432.5256 1124.5401 -6557.7274 33.641095 8.5474821 - 290 286.81184 -5260.8728 -6414.7455 1153.8727 -6515.5418 28.572468 5.9092648 -SHAKE stats (type/ave/delta) on step 300 - 4 1.111 1.79733e-05 - 6 0.997005 1.02622e-05 - 8 1.08 1.84996e-05 - 10 1.111 9.98595e-06 - 12 1.08 8.83195e-06 - 14 0.960008 0 - 18 0.957203 1.84801e-05 - 31 104.52 0.00169221 - 300 291.51842 -5216.3285 -6389.1362 1172.8077 -6503.1141 27.877464 2.2482411 -colvars: Saving collective variables state to "out2.colvars.state". -Loop time of 2.25031 on 1 procs for 100 steps with 2004 atoms - - Pair time (%) = 1.83745 (81.6533) - Bond time (%) = 0.00609803 (0.270987) -Kspace time (%) = 0.162178 (7.20694) -Neigh time (%) = 0.207886 (9.23812) - Comm time (%) = 0.00977254 (0.434276) -Output time (%) = 0.000240803 (0.0107009) -Modify time (%) = 0.024461 (1.08701) -Other time (%) = 0.00221944 (0.0986283) - -FFT time (% of Kspce) = 0.0273609 (16.8709) -FFT Gflps 3d (1d only) = 2.00425 2.94806 - -Nlocal: 2004 ave 2004 max 2004 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 11292 ave 11292 max 11292 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 708145 ave 708145 max 708145 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 708145 -Ave neighs/atom = 353.366 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 8 -Dangerous builds = 0 - diff --git a/examples/USER/colvars/log.peptide-colvars-4 b/examples/USER/colvars/log.peptide-colvars-4 deleted file mode 100644 index 4b7c045c4c..0000000000 --- a/examples/USER/colvars/log.peptide-colvars-4 +++ /dev/null @@ -1,516 +0,0 @@ -LAMMPS (21 May 2012-ICMS) -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - 3 = max bonds/atom - 6 = max angles/atom - 14 = max dihedrals/atom - 1 = max impropers/atom - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 2 by 2 MPI processor grid - 2004 atoms - 2004 velocities - 1365 bonds - 786 angles - 207 dihedrals - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -shell "rm -f out*.colvars.*" -fix 2 all colvars peptide.colvars -fix 2a ref setforce 0.0 0.0 0.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -#dump 1 colvar custom 1 dump.colvar.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 4312 960 3696 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out.colvars.state". -colvars: The trajectory file will be "out.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 10.1924 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 0 282.10052 -5237.458 -6372.3765 1134.9186 -6442.7679 16.557152 292.14604 - 10 305.06198 -5058.8898 -6286.1847 1227.2948 -6413.0967 58.849896 103.38344 - 20 311.00592 -4999.0545 -6250.2624 1251.2079 -6417.0984 47.695274 36.699706 - 30 314.22398 -4993.6953 -6257.8498 1264.1545 -6421.9643 35.344162 10.563914 - 40 297.87524 -5020.8339 -6219.2157 1198.3819 -6389.85 27.723201 3.8354392 - 50 304.02086 -5056.254 -6279.3603 1223.1063 -6456.8182 55.459508 0.206798 - 60 285.92594 -5104.0436 -6254.3523 1150.3086 -6435.5793 32.767289 0.69356507 - 70 277.835 -5163.9751 -6281.7331 1117.758 -6447.7014 39.627147 11.433632 - 80 267.51474 -5206.4042 -6282.6428 1076.2385 -6456.6352 31.611843 6.3553237 - 90 278.15513 -5245.383 -6364.4289 1119.0459 -6499.8036 28.849898 0.36938879 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97184e-05 - 6 0.996996 1.00568e-05 - 8 1.08 6.02345e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 - 14 0.959996 0 - 18 0.957198 3.36077e-05 - 31 104.52 0.00306008 - 100 260.10504 -5292.6891 -6339.1176 1046.4286 -6471.6693 25.361886 0.21986866 -colvars: Saving collective variables state to "out.colvars.state". -Loop time of 0.686681 on 4 procs for 100 steps with 2004 atoms - - Pair time (%) = 0.47104 (68.5966) - Bond time (%) = 0.00184608 (0.26884) -Kspace time (%) = 0.0808357 (11.7719) -Neigh time (%) = 0.0772016 (11.2427) - Comm time (%) = 0.0293136 (4.26888) -Output time (%) = 0.000323951 (0.0471764) -Modify time (%) = 0.0247293 (3.60128) -Other time (%) = 0.00139064 (0.202516) - -FFT time (% of Kspce) = 0.0117171 (14.4949) -FFT Gflps 3d (1d only) = 4.68018 10.009 - -Nlocal: 501 ave 513 max 489 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Nghost: 6563.25 ave 6596 max 6519 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 177059 ave 181741 max 172943 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 708237 -Ave neighs/atom = 353.412 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 12 -Dangerous builds = 2 - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 4312 960 3696 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out.colvars.state". -colvars: The trajectory file will be "out.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Restarting from file "out.colvars.state". -colvars: Restarting collective variable "one" from value: 10.0137 -colvars: Restarting collective variable "two" from value: 10.0649 -colvars: Restarting harmonic bias "h_pot". -colvars: Reading current stage from the restart. -colvars: # stage = 8103505641670189088 -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -colvars: Initializing step number as firstTimestep. -SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97184e-05 - 6 0.996996 1.00568e-05 - 8 1.08 6.02345e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 - 14 0.959996 0 - 18 0.957198 3.36077e-05 - 31 104.52 0.00306008 -Memory usage per processor = 10.1967 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 100 260.10504 -5292.6891 -6339.1176 1046.4286 -6471.6693 25.361886 0.21986866 - 110 266.26278 -5341.2101 -6412.4119 1071.2018 -6552.7582 33.572969 1.9229778 - 120 262.66442 -5386.2494 -6442.9746 1056.7252 -6587.5499 29.859555 2.7124877 - 130 252.83442 -5422.5444 -6439.7226 1017.1781 -6580.4752 25.979048 1.2031628 - 140 253.85116 -5452.1905 -6473.4591 1021.2686 -6609.489 26.071518 0.30586252 - 150 261.31828 -5490.48 -6541.7895 1051.3096 -6646.6145 16.25855 6.9049978 - 160 255.73681 -5521.6048 -6550.4596 1028.8548 -6658.1518 19.717536 12.339819 - 170 253.42879 -5540.1004 -6559.6697 1019.5694 -6656.688 23.293657 10.289879 - 180 248.51083 -5550.3244 -6550.1084 999.78393 -6661.4181 26.200057 3.433906 - 190 250.80387 -5555.2613 -6564.2703 1009.009 -6666.1497 25.536596 3.3495164 -SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.8129e-06 - 6 0.997 7.79639e-07 - 8 1.08 1.08934e-06 - 10 1.111 2.96501e-07 - 12 1.08 4.69175e-07 - 14 0.960001 0 - 18 0.957201 3.76571e-06 - 31 104.52 0.000411069 - 200 251.50575 -5557.4209 -6569.2537 1011.8328 -6674.0864 24.805164 7.1388874 -colvars: Saving collective variables state to "out.colvars.state". -Loop time of 0.653275 on 4 procs for 100 steps with 2004 atoms - - Pair time (%) = 0.47279 (72.3723) - Bond time (%) = 0.00182116 (0.278774) -Kspace time (%) = 0.079544 (12.1762) -Neigh time (%) = 0.0451868 (6.91696) - Comm time (%) = 0.027427 (4.19838) -Output time (%) = 0.000316501 (0.0484483) -Modify time (%) = 0.0247022 (3.78129) -Other time (%) = 0.00148731 (0.227671) - -FFT time (% of Kspce) = 0.0109947 (13.8221) -FFT Gflps 3d (1d only) = 4.98769 10.1728 - -Nlocal: 501 ave 513 max 481 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 6556.5 ave 6608 max 6514 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 177022 ave 182261 max 172093 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 708086 -Ave neighs/atom = 353.336 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 7 -Dangerous builds = 0 - -fix 2 all colvars peptide.colvars input out.colvars.state output out2 - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 4312 960 3696 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "out2.colvars.state". -colvars: The trajectory file will be "out2.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = two -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 1 initialized: total mass = 12.011. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 2 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one, two } -colvars: # forceConstant = 100 -colvars: # centers = { 10, 10 } -colvars: # targetCenters = { 10, 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Restarting from file "out.colvars.state". -colvars: Restarting collective variable "one" from value: 10.0128 -colvars: Restarting collective variable "two" from value: 9.62236 -colvars: Restarting harmonic bias "h_pot". -colvars: Reading current stage from the restart. -colvars: # stage = 8103505641670189088 -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -colvars: Initializing step number as firstTimestep. -SHAKE stats (type/ave/delta) on step 200 - 4 1.111 1.8129e-06 - 6 0.997 7.79639e-07 - 8 1.08 1.08934e-06 - 10 1.111 2.96501e-07 - 12 1.08 4.69175e-07 - 14 0.960001 0 - 18 0.957201 3.76571e-06 - 31 104.52 0.000411069 -Memory usage per processor = 10.201 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 200 251.50575 -5557.4209 -6569.2537 1011.8328 -6674.0864 24.805164 7.1388874 - 210 253.15047 -5538.5669 -6557.0165 1018.4497 -6672.0412 37.671574 0.61297094 - 220 245.19752 -5522.5242 -6508.9784 986.45412 -6628.2001 36.656348 0.048624447 - 230 258.65297 -5495.7177 -6536.3044 1040.5868 -6658.0951 34.855726 0.22046446 - 240 260.8016 -5469.8518 -6519.0827 1049.2309 -6624.173 31.576408 3.757081 - 250 269.06524 -5438.3971 -6520.8735 1082.4764 -6616.3878 25.444134 8.6641098 - 260 266.10241 -5397.317 -6467.8736 1070.5566 -6580.6272 26.87393 8.333095 - 270 272.82004 -5350.8402 -6448.4225 1097.5823 -6563.8152 23.113398 10.972914 - 280 279.52006 -5307.9867 -6432.5238 1124.5371 -6557.7256 33.641067 8.5474809 - 290 286.81221 -5260.8707 -6414.7449 1153.8742 -6515.5413 28.572449 5.9092582 -SHAKE stats (type/ave/delta) on step 300 - 4 1.111 1.79733e-05 - 6 0.997005 1.02621e-05 - 8 1.08 1.84996e-05 - 10 1.111 9.98591e-06 - 12 1.08 8.83192e-06 - 14 0.960008 0 - 18 0.957203 1.84805e-05 - 31 104.52 0.00169223 - 300 291.51901 -5216.3298 -6389.1399 1172.8101 -6503.1178 27.877408 2.2482392 -colvars: Saving collective variables state to "out2.colvars.state". -Loop time of 0.662081 on 4 procs for 100 steps with 2004 atoms - - Pair time (%) = 0.47307 (71.452) - Bond time (%) = 0.00178617 (0.269781) -Kspace time (%) = 0.0802494 (12.1208) -Neigh time (%) = 0.0528576 (7.98355) - Comm time (%) = 0.0277618 (4.19311) -Output time (%) = 0.000293612 (0.0443469) -Modify time (%) = 0.0245907 (3.71416) -Other time (%) = 0.00147164 (0.222275) - -FFT time (% of Kspce) = 0.011487 (14.3141) -FFT Gflps 3d (1d only) = 4.77392 9.91625 - -Nlocal: 501 ave 514 max 471 min -Histogram: 1 0 0 0 0 0 0 0 1 2 -Nghost: 6609.75 ave 6681 max 6555 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Neighs: 177036 ave 180240 max 169752 min -Histogram: 1 0 0 0 0 0 0 0 1 2 - -Total # of neighbors = 708146 -Ave neighs/atom = 353.366 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 8 -Dangerous builds = 0 - diff --git a/examples/USER/colvars/log.peptide-colvars2-1 b/examples/USER/colvars/log.peptide-colvars2-1 deleted file mode 100644 index 21b4ce5f27..0000000000 --- a/examples/USER/colvars/log.peptide-colvars2-1 +++ /dev/null @@ -1,182 +0,0 @@ -LAMMPS (21 May 2012-ICMS) -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - 3 = max bonds/atom - 6 = max angles/atom - 14 = max dihedrals/atom - 1 = max impropers/atom - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 1 MPI processor grid - 2004 atoms - 2004 velocities - 1365 bonds - 786 angles - 207 dihedrals - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -shell "rm -f peptide2.colvars.*" -fix 2 all colvars peptide.colvars2 output peptide2 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -#dump 1 colvar custom 1 dump.colvar2.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 10648 3375 5808 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "peptide2.colvars.state". -colvars: The trajectory file will be "peptide2.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 4 initialized: total mass = 15.035. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one } -colvars: # forceConstant = 100 -colvars: # centers = { 10 } -colvars: # targetCenters = { 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 22.5865 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 0 282.10052 -5237.458 -6372.3765 1134.9186 -6442.7679 16.557152 273.74323 - 10 333.47973 -4982.3893 -6324.0116 1341.6223 -6400.4169 21.367753 12.393269 - 20 309.56974 -4999.4934 -6244.9234 1245.43 -6401.697 43.595449 13.004392 - 30 316.97689 -5025.5598 -6300.7895 1275.2297 -6422.5335 27.323113 6.7588862 - 40 297.5581 -5088.2156 -6285.3215 1197.106 -6395.3714 13.676872 25.625156 - 50 296.80003 -5117.2926 -6311.3488 1194.0562 -6451.8274 30.631279 5.3320296 - 60 281.72797 -5188.4941 -6321.9139 1133.4198 -6427.8834 26.287652 20.573958 - 70 277.26045 -5224.8417 -6340.2882 1115.4465 -6447.8496 27.742888 0.69414894 - 80 268.01458 -5281.8503 -6360.0997 1078.2494 -6496.6064 20.300731 5.2606438 - 90 270.43386 -5334.0846 -6422.067 1087.9824 -6563.2486 39.845993 1.1832496 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11096 0.000191466 - 6 0.996989 3.5552e-05 - 8 1.08 9.1e-06 - 10 1.111 1.58547e-05 - 12 1.08 5.80613e-06 - 14 0.959997 0 - 18 0.957198 2.92453e-05 - 31 104.52 0.00239929 - 100 260.3562 -5387.2263 -6434.6653 1047.439 -6534.1923 20.24674 0.075048834 -colvars: Saving collective variables state to "peptide2.colvars.state". -Loop time of 2.37975 on 1 procs for 100 steps with 2004 atoms - - Pair time (%) = 1.83713 (77.1984) - Bond time (%) = 0.00636029 (0.267267) -Kspace time (%) = 0.162295 (6.81981) -Neigh time (%) = 0.336338 (14.1333) - Comm time (%) = 0.0106671 (0.448243) -Output time (%) = 0.000264168 (0.0111006) -Modify time (%) = 0.024472 (1.02834) -Other time (%) = 0.00222516 (0.0935038) - -FFT time (% of Kspce) = 0.028162 (17.3524) -FFT Gflps 3d (1d only) = 1.94723 2.85015 - -Nlocal: 2004 ave 2004 max 2004 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 11143 ave 11143 max 11143 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 708233 ave 708233 max 708233 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 708233 -Ave neighs/atom = 353.41 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 13 -Dangerous builds = 1 diff --git a/examples/USER/colvars/log.peptide-colvars2-4 b/examples/USER/colvars/log.peptide-colvars2-4 deleted file mode 100644 index 38e6cc9384..0000000000 --- a/examples/USER/colvars/log.peptide-colvars2-4 +++ /dev/null @@ -1,182 +0,0 @@ -LAMMPS (21 May 2012-ICMS) -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - 3 = max bonds/atom - 6 = max angles/atom - 14 = max dihedrals/atom - 1 = max impropers/atom - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 2 by 2 MPI processor grid - 2004 atoms - 2004 velocities - 1365 bonds - 786 angles - 207 dihedrals - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -shell "rm -f peptide2.colvars.*" -fix 2 all colvars peptide.colvars2 output peptide2 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -#dump 1 colvar custom 1 dump.colvar2.lammpstrj id xu yu zu fx fy fz -#dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_2 -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268721 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.01614 - estimated relative force accuracy = 4.86052e-05 - using single precision FFTs - brick FFT buffer size/proc = 4312 960 3696 -colvars: ---------------------------------------------------------------------- -colvars: Initializing the collective variables module, version 2012-03-23. -colvars: # analysis = off [default] -colvars: # colvarsTrajFrequency = 1 -colvars: # colvarsRestartFrequency = 1000 -colvars: # colvarsTrajAppend = off [default] -colvars: The restart output state file will be "rest.colvars.state". -colvars: The final output state file will be "peptide2.colvars.state". -colvars: The trajectory file will be "peptide2.colvars.traj". -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new collective variable. -colvars: # name = one -colvars: Initializing a new "distance" component. -colvars: # componentCoeff = 1 [default] -colvars: # componentExp = 1 [default] -colvars: # period = 0 [default] -colvars: # wrapAround = 0 [default] -colvars: # forceNoPBC = off [default] -colvars: # oneSiteSystemForce = off [default] -colvars: Initializing atom group "group1". -colvars: Atom group "group1" defined, 4 initialized: total mass = 15.035. -colvars: Initializing atom group "group2". -colvars: Atom group "group2" defined, 4 initialized: total mass = 15.035. -colvars: All components initialized. -colvars: # width = 1 [default] -colvars: # lowerBoundary = 0 [default] -colvars: # lowerWallConstant = 0 [default] -colvars: # upperBoundary = 0 [default] -colvars: # upperWallConstant = 0 [default] -colvars: # expandBoundaries = off [default] -colvars: # extendedLagrangian = off [default] -colvars: # outputValue = on [default] -colvars: # outputVelocity = off [default] -colvars: # outputSystemForce = off [default] -colvars: # outputAppliedForce = off [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Initializing a new "harmonic" instance. -colvars: # name = h_pot -colvars: # colvars = { one } -colvars: # forceConstant = 100 -colvars: # centers = { 10 } -colvars: # targetCenters = { 10 } [default] -colvars: # targetForceConstant = 0 [default] -colvars: ---------------------------------------------------------------------- -colvars: Collective variables biases initialized, 1 in total. -colvars: ---------------------------------------------------------------------- -colvars: Collective variables module initialized. -colvars: ---------------------------------------------------------------------- -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 10.1924 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 2 - 0 282.10052 -5237.458 -6372.3765 1134.9186 -6442.7679 16.557152 273.74323 - 10 333.47973 -4982.3893 -6324.0116 1341.6223 -6400.417 21.367753 12.393269 - 20 309.56974 -4999.4934 -6244.9234 1245.43 -6401.697 43.595449 13.004392 - 30 316.97689 -5025.5598 -6300.7896 1275.2297 -6422.5336 27.323113 6.7588863 - 40 297.5581 -5088.2155 -6285.3215 1197.106 -6395.3714 13.676872 25.625156 - 50 296.80003 -5117.2927 -6311.3488 1194.0562 -6451.8275 30.631279 5.3320297 - 60 281.72797 -5188.494 -6321.9138 1133.4198 -6427.8833 26.287652 20.573959 - 70 277.26045 -5224.8417 -6340.2882 1115.4465 -6447.8496 27.742889 0.69414888 - 80 268.01458 -5281.8503 -6360.0997 1078.2494 -6496.6064 20.300731 5.2606437 - 90 270.43386 -5334.0846 -6422.067 1087.9825 -6563.2486 39.845992 1.1832495 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11096 0.000191466 - 6 0.996989 3.5552e-05 - 8 1.08 9.10001e-06 - 10 1.111 1.58547e-05 - 12 1.08 5.80613e-06 - 14 0.959997 0 - 18 0.957198 2.92453e-05 - 31 104.52 0.00239929 - 100 260.35619 -5387.2298 -6434.6688 1047.439 -6534.1958 20.24674 0.07504876 -colvars: Saving collective variables state to "peptide2.colvars.state". -Loop time of 0.650999 on 4 procs for 100 steps with 2004 atoms - - Pair time (%) = 0.466917 (71.7232) - Bond time (%) = 0.00176847 (0.271655) -Kspace time (%) = 0.0588512 (9.04015) -Neigh time (%) = 0.0832494 (12.788) - Comm time (%) = 0.0190871 (2.93197) -Output time (%) = 0.000295341 (0.0453674) -Modify time (%) = 0.0194815 (2.99255) -Other time (%) = 0.00134867 (0.20717) - -FFT time (% of Kspce) = 0.010457 (17.7686) -FFT Gflps 3d (1d only) = 5.24412 9.93123 - -Nlocal: 501 ave 513 max 494 min -Histogram: 1 1 0 1 0 0 0 0 0 1 -Nghost: 6572.5 ave 6593 max 6548 min -Histogram: 1 0 1 0 0 0 0 0 0 2 -Neighs: 177058 ave 181777 max 174301 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 708233 -Ave neighs/atom = 353.41 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 13 -Dangerous builds = 1 diff --git a/examples/USER/colvars/log.peptide-spring b/examples/USER/colvars/log.peptide-spring deleted file mode 100644 index f88eb4a6ba..0000000000 --- a/examples/USER/colvars/log.peptide-spring +++ /dev/null @@ -1,150 +0,0 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) - using 1 OpenMP thread(s) per MPI task -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 2004 atoms - reading velocities ... - 2004 velocities - scanning bonds ... - 3 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 14 = max dihedrals/atom - scanning impropers ... - 1 = max impropers/atom - reading bonds ... - 1365 bonds - reading angles ... - 786 angles - reading dihedrals ... - 207 dihedrals - reading impropers ... - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -fix 3a one spring couple ref 100.0 0.0 0.0 0.0 10.0 -fix 3b two spring couple ref 100.0 0.0 0.0 0.0 10.0 - -fix 2a ref setforce 0.0 0.0 0.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -dump 1 colvar custom 1 dump.spring.lammpstrj id xu yu zu fx fy fz -dump_modify 1 sort id - -variable sp equal f_3a+f_3b - -thermo_style custom step temp etotal pe ke epair ebond v_sp -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268725 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0228209 - estimated relative force accuracy = 6.87243e-05 - using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 11.5952 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond sp - 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 292.14604 - 10 305.06198 -5058.89 -6286.1848 1227.2948 -6413.0968 58.849896 103.38344 - 20 311.00591 -4999.0544 -6250.2623 1251.2079 -6417.0983 47.695275 36.699706 - 30 314.22398 -4993.6951 -6257.8496 1264.1545 -6421.9641 35.344161 10.563914 - 40 297.87525 -5020.8339 -6219.2158 1198.3819 -6389.8501 27.7232 3.8354396 - 50 304.02085 -5056.2539 -6279.3602 1223.1063 -6456.8181 55.459511 0.20679816 - 60 285.92595 -5104.0436 -6254.3523 1150.3087 -6435.5793 32.767289 0.69356527 - 70 277.83498 -5163.9751 -6281.733 1117.7579 -6447.7013 39.627151 11.433633 - 80 267.51476 -5206.4042 -6282.6428 1076.2386 -6456.6353 31.611841 6.3553235 - 90 278.15512 -5245.383 -6364.4289 1119.0458 -6499.8037 28.849902 0.36938816 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11098 8.97185e-05 - 6 0.996996 1.00569e-05 - 8 1.08 6.02346e-06 - 10 1.111 1.84257e-05 - 12 1.08 7.27136e-06 - 14 0.959996 0 - 18 0.957198 3.36078e-05 - 31 104.52 0.00306008 - 100 260.10505 -5292.689 -6339.1176 1046.4286 -6471.6693 25.361881 0.21986866 - -Loop time of 1.07153 on 2 procs for 100 steps with 2004 atoms -98.1% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 16.126 ns/day 1.488 hours/ns 93.325 timesteps/s - -MPI task timings breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.76688 | 0.77633 | 0.78579 | 1.1 | 72.45 -Bond | 0.0024021 | 0.0025222 | 0.0026424 | 0.2 | 0.24 -Kspace | 0.095468 | 0.10394 | 0.1124 | 2.6 | 9.70 -Neigh | 0.13518 | 0.13518 | 0.13519 | 0.0 | 12.62 -Comm | 0.018154 | 0.018954 | 0.019754 | 0.6 | 1.77 -Output | 0.005975 | 0.0066451 | 0.0073152 | 0.8 | 0.62 -Modify | 0.025297 | 0.025306 | 0.025314 | 0.0 | 2.36 -Other | | 0.002651 | | | 0.25 - -Nlocal: 1002 ave 1013 max 991 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8629.5 ave 8641 max 8618 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354118 ave 356534 max 351703 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 708237 -Ave neighs/atom = 353.412 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 12 -Dangerous builds = 2 diff --git a/examples/USER/colvars/log.peptide-spring2 b/examples/USER/colvars/log.peptide-spring2 deleted file mode 100644 index e32506b6cd..0000000000 --- a/examples/USER/colvars/log.peptide-spring2 +++ /dev/null @@ -1,145 +0,0 @@ -LAMMPS (20 Mar 2014-ICMS) -WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:100) - using 1 OpenMP thread(s) per MPI task -# Solvated 5-mer peptide - -units real -atom_style full - -pair_style lj/charmm/coul/long 8.0 10.0 10.0 -bond_style harmonic -angle_style charmm -dihedral_style charmm -improper_style harmonic -kspace_style pppm 0.0001 - -read_data data.peptide - orthogonal box = (36.8402 41.0137 29.7681) to (64.2116 68.3851 57.1395) - 1 by 1 by 2 MPI processor grid - reading atoms ... - 2004 atoms - reading velocities ... - 2004 velocities - scanning bonds ... - 3 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 14 = max dihedrals/atom - scanning impropers ... - 1 = max impropers/atom - reading bonds ... - 1365 bonds - reading angles ... - 786 angles - reading dihedrals ... - 207 dihedrals - reading impropers ... - 12 impropers - 4 = max # of 1-2 neighbors - 7 = max # of 1-3 neighbors - 14 = max # of 1-4 neighbors - 18 = max # of special neighbors - -neighbor 2.0 bin -neigh_modify delay 5 - -timestep 2.0 - -group peptide type <= 12 -84 atoms in group peptide -group one id 2 4 5 6 -4 atoms in group one -group two id 80 82 83 84 -4 atoms in group two -group ref id 37 -1 atoms in group ref -group colvar union one two ref -9 atoms in group colvar - -fix 1 all nvt temp 275.0 275.0 100.0 tchain 1 - -fix 3 one spring couple two 100.0 0.0 0.0 0.0 10.0 - -fix 4 all shake 0.0001 10 100 b 4 6 8 10 12 14 18 a 31 - 19 = # of size 2 clusters - 6 = # of size 3 clusters - 3 = # of size 4 clusters - 640 = # of frozen angles - -dump 1 colvar custom 1 dump.spring2.lammpstrj id xu yu zu fx fy fz -dump_modify 1 sort id - -thermo_style custom step temp etotal pe ke epair ebond f_3 -thermo 10 - - -run 100 -PPPM initialization ... - G vector (1/distance) = 0.268725 - grid = 15 15 15 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0228209 - estimated relative force accuracy = 6.87243e-05 - using double precision FFTs - 3d grid and FFT values/proc = 6776 1800 -SHAKE stats (type/ave/delta) on step 0 - 4 1.111 1.44264e-05 - 6 0.996998 7.26967e-06 - 8 1.08 1.32536e-05 - 10 1.111 1.22749e-05 - 12 1.08 1.11767e-05 - 14 0.96 0 - 18 0.957206 4.37979e-05 - 31 104.519 0.00396029 -Memory usage per processor = 11.5952 Mbytes -Step Temp TotEng PotEng KinEng E_pair E_bond 3 - 0 282.10052 -5237.458 -6372.3766 1134.9186 -6442.768 16.557152 273.74323 - 10 333.47973 -4982.3893 -6324.0116 1341.6223 -6400.417 21.367753 12.393269 - 20 309.56974 -4999.4934 -6244.9234 1245.43 -6401.6969 43.595447 13.004393 - 30 316.97689 -5025.5598 -6300.7895 1275.2297 -6422.5335 27.323113 6.7588862 - 40 297.55811 -5088.2155 -6285.3215 1197.106 -6395.3714 13.676871 25.625154 - 50 296.80002 -5117.2927 -6311.3488 1194.0561 -6451.8274 30.631277 5.3320302 - 60 281.72798 -5188.494 -6321.9138 1133.4198 -6427.8834 26.28765 20.573958 - 70 277.26045 -5224.8415 -6340.288 1115.4465 -6447.8494 27.742889 0.69414895 - 80 268.01458 -5281.8501 -6360.0995 1078.2495 -6496.6062 20.300729 5.260642 - 90 270.43384 -5334.0847 -6422.0671 1087.9824 -6563.2486 39.845992 1.183249 -SHAKE stats (type/ave/delta) on step 100 - 4 1.11096 0.000191466 - 6 0.996989 3.5552e-05 - 8 1.08 9.10001e-06 - 10 1.111 1.58547e-05 - 12 1.08 5.80613e-06 - 14 0.959997 0 - 18 0.957198 2.92454e-05 - 31 104.52 0.00239929 - 100 260.35617 -5387.2297 -6434.6686 1047.4389 -6534.1956 20.246734 0.075048996 - -Loop time of 1.07264 on 2 procs for 100 steps with 2004 atoms -98.6% CPU use with 2 MPI tasks x 1 OpenMP threads -Performance: 16.110 ns/day 1.490 hours/ns 93.228 timesteps/s - -MPI task timings breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.76647 | 0.77219 | 0.77792 | 0.7 | 71.99 -Bond | 0.0024974 | 0.0025403 | 0.0025833 | 0.1 | 0.24 -Kspace | 0.091998 | 0.096921 | 0.10184 | 1.6 | 9.04 -Neigh | 0.14764 | 0.14765 | 0.14767 | 0.0 | 13.77 -Comm | 0.018904 | 0.01937 | 0.019835 | 0.3 | 1.81 -Output | 0.005985 | 0.0067209 | 0.0074568 | 0.9 | 0.63 -Modify | 0.024529 | 0.024536 | 0.024542 | 0.0 | 2.29 -Other | | 0.002705 | | | 0.25 - -Nlocal: 1002 ave 1010 max 994 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 8645 ave 8652 max 8638 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 354116 ave 356373 max 351860 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 708233 -Ave neighs/atom = 353.41 -Ave special neighs/atom = 2.34032 -Neighbor list builds = 13 -Dangerous builds = 1 diff --git a/examples/USER/colvars/out.colvars.state b/examples/USER/colvars/out.colvars.state index 3c0b4752e8..e5c6e98ef5 100644 --- a/examples/USER/colvars/out.colvars.state +++ b/examples/USER/colvars/out.colvars.state @@ -1,22 +1,23 @@ configuration { step 200 dt 2.000000e+00 + version 2018-11-16 } colvar { name one - x 1.00127641579482e+01 + x 1.00127732034965e+01 } colvar { name two - x 9.62235621950587e+00 + x 9.62235997490241e+00 } -harmonic { +restraint { configuration { + step 200 name h_pot - stage 8103505641670189088 } } diff --git a/examples/USER/colvars/out.colvars.state.old b/examples/USER/colvars/out.colvars.state.old new file mode 100644 index 0000000000..ea33a8b1b1 --- /dev/null +++ b/examples/USER/colvars/out.colvars.state.old @@ -0,0 +1,23 @@ +configuration { + step 100 + dt 2.000000e+00 + version 2018-11-16 +} + +colvar { + name one + x 1.00136989326255e+01 +} + +colvar { + name two + x 1.00648830006091e+01 +} + +restraint { + configuration { + step 100 + name h_pot + } +} + diff --git a/examples/USER/colvars/out.colvars.traj b/examples/USER/colvars/out.colvars.traj index 4d835cadcd..15aa912846 100644 --- a/examples/USER/colvars/out.colvars.traj +++ b/examples/USER/colvars/out.colvars.traj @@ -1,102 +1,203 @@ -# step one two - 100 1.00136999784453e+01 1.00648820764882e+01 - 101 1.00137686830422e+01 1.00611307186442e+01 - 102 1.00135851804620e+01 1.00551774768670e+01 - 103 1.00127019172615e+01 1.00448609599088e+01 - 104 1.00107148677220e+01 1.00279880647254e+01 - 105 1.00073753998706e+01 1.00031566249892e+01 - 106 1.00026887490897e+01 9.97035299845099e+00 - 107 9.99696380204809e+00 9.93114513453873e+00 - 108 9.99079173947846e+00 9.88834426761621e+00 - 109 9.98495634348822e+00 9.84525182069547e+00 - 110 9.98029608653331e+00 9.80488128973958e+00 - 111 9.97755063903513e+00 9.76956423088248e+00 - 112 9.97722827031026e+00 9.74089978578719e+00 - 113 9.97952719395978e+00 9.71964890219001e+00 - 114 9.98433213818614e+00 9.70572160189541e+00 - 115 9.99128820986690e+00 9.69882648932897e+00 - 116 9.99993078708906e+00 9.69906675982844e+00 - 117 1.00098268026590e+01 9.70676032193502e+00 - 118 1.00206800068605e+01 9.72193925284532e+00 - 119 1.00323638324515e+01 9.74392975114862e+00 - 120 1.00448758513666e+01 9.77144823009299e+00 - 121 1.00582368252610e+01 9.80293582393448e+00 - 122 1.00723784561855e+01 9.83653845611926e+00 - 123 1.00870571871815e+01 9.86996653086528e+00 - 124 1.01018149909563e+01 9.90067054070927e+00 - 125 1.01159957146856e+01 9.92637090832991e+00 - 126 1.01288197202732e+01 9.94568593115900e+00 - 127 1.01395051017779e+01 9.95858909349258e+00 - 128 1.01474031546764e+01 9.96651060978132e+00 - 129 1.01521102583250e+01 9.97197886676780e+00 - 130 1.01535305336566e+01 9.97782726175993e+00 - 131 1.01518703644018e+01 9.98617108245763e+00 - 132 1.01475651582407e+01 9.99754271679455e+00 - 133 1.01411660808109e+01 1.00106700599276e+01 - 134 1.01332313643590e+01 1.00230219318765e+01 - 135 1.01242577071328e+01 1.00317168123542e+01 - 136 1.01146539200964e+01 1.00343611311947e+01 - 137 1.01047327535065e+01 1.00296410219261e+01 - 138 1.00947009258946e+01 1.00175740354601e+01 - 139 1.00846525340704e+01 9.99930113951843e+00 - 140 1.00745850435896e+01 9.97645596333061e+00 - 141 1.00644392647413e+01 9.95041162930873e+00 - 142 1.00541491709691e+01 9.92180111647481e+00 - 143 1.00436823424749e+01 9.89050169056719e+00 - 144 1.00330636529660e+01 9.85603208426972e+00 - 145 1.00223839228086e+01 9.81818334237853e+00 - 146 1.00118047065649e+01 9.77758921505729e+00 - 147 1.00015612314349e+01 9.73590349870836e+00 - 148 9.99195527218088e+00 9.69551788236989e+00 - 149 9.98332631801527e+00 9.65911749675800e+00 - 150 9.97599491711484e+00 9.62915810268995e+00 - 151 9.97018870425343e+00 9.60717358806770e+00 - 152 9.96597676149386e+00 9.59319263515552e+00 - 153 9.96323912038658e+00 9.58560496094010e+00 - 154 9.96168472712778e+00 9.58154384221214e+00 - 155 9.96091708239459e+00 9.57764409185937e+00 - 156 9.96053284836430e+00 9.57094226701891e+00 - 157 9.96022340231744e+00 9.55966218699141e+00 - 158 9.95984104841431e+00 9.54367921177888e+00 - 159 9.95941115970323e+00 9.52452532866834e+00 - 160 9.95909775592352e+00 9.50490062318069e+00 - 161 9.95913472197875e+00 9.48781177595095e+00 - 162 9.95973716567135e+00 9.47562216260840e+00 - 163 9.96102283681378e+00 9.46939618474568e+00 - 164 9.96297512061468e+00 9.46883909503368e+00 - 165 9.96545450087319e+00 9.47284744786104e+00 - 166 9.96824446676367e+00 9.48032505757766e+00 - 167 9.97111490093449e+00 9.49080999053287e+00 - 168 9.97388723087919e+00 9.50468382474366e+00 - 169 9.97648454853684e+00 9.52297944488190e+00 - 170 9.97895120221314e+00 9.54683939172159e+00 - 171 9.98143439573287e+00 9.57673744631037e+00 - 172 9.98412851702981e+00 9.61177677879831e+00 - 173 9.98719912546727e+00 9.64941646139346e+00 - 174 9.99071466036109e+00 9.68581516318204e+00 - 175 9.99461255041478e+00 9.71674194992540e+00 - 176 9.99871362276481e+00 9.73875618365856e+00 - 177 1.00027752607551e+01 9.75023319932384e+00 - 178 1.00065593228689e+01 9.75187374895997e+00 - 179 1.00098932819698e+01 9.74651102922357e+00 - 180 1.00127089751067e+01 9.73824323715410e+00 - 181 1.00150539578018e+01 9.73118937807432e+00 - 182 1.00170703552922e+01 9.72834303011533e+00 - 183 1.00189424568686e+01 9.73087964994846e+00 - 184 1.00208211796404e+01 9.73798531353725e+00 - 185 1.00227525196798e+01 9.74722518450810e+00 - 186 1.00246411639883e+01 9.75544038568881e+00 - 187 1.00262714680409e+01 9.75985920611179e+00 - 188 1.00273770464779e+01 9.75895332491778e+00 - 189 1.00277296204562e+01 9.75275348211835e+00 - 190 1.00272109105395e+01 9.74260945002776e+00 - 191 1.00258469602549e+01 9.73056029017316e+00 - 192 1.00238019119674e+01 9.71852969006276e+00 - 193 1.00213411099718e+01 9.70760780505631e+00 - 194 1.00187745961566e+01 9.69771723529251e+00 - 195 1.00163957858114e+01 9.68783387106584e+00 - 196 1.00144342355802e+01 9.67665900893200e+00 - 197 1.00130379562453e+01 9.66342567131686e+00 - 198 1.00122840592666e+01 9.64853643967174e+00 - 199 1.00121986038636e+01 9.63383126934824e+00 - 200 1.00127641579482e+01 9.62235621950587e+00 +# step one two + 0 9.93490813652661e+00 7.58366314453810e+00 + 1 9.95511870046091e+00 7.60655947684375e+00 + 2 9.97738607194270e+00 7.65732201855527e+00 + 3 1.00007618482085e+01 7.73339023313853e+00 + 4 1.00245083583281e+01 7.83083600267188e+00 + 5 1.00481503915519e+01 7.94485550041547e+00 + 6 1.00714236148569e+01 8.07022633606012e+00 + 7 1.00941640085929e+01 8.20149351409018e+00 + 8 1.01161917254501e+01 8.33270968029044e+00 + 9 1.01372195147989e+01 8.45743087998851e+00 + 10 1.01568094484822e+01 8.57063657043322e+00 + 11 1.01744058364969e+01 8.66916428851601e+00 + 12 1.01894584969823e+01 8.75011341291751e+00 + 13 1.02015949657517e+01 8.81261373358815e+00 + 14 1.02107634786499e+01 8.86010572643564e+00 + 15 1.02172802335367e+01 8.89996164389908e+00 + 16 1.02217586687617e+01 8.94046117354318e+00 + 17 1.02249400729821e+01 8.98764357480963e+00 + 18 1.02274821194763e+01 9.04385418276306e+00 + 19 1.02297694921722e+01 9.10767828090644e+00 + 20 1.02317948794015e+01 9.17521818721732e+00 + 21 1.02331324174422e+01 9.24256921345538e+00 + 22 1.02330115052436e+01 9.30670040650459e+00 + 23 1.02304888847637e+01 9.36477739916766e+00 + 24 1.02246905091409e+01 9.41471338314027e+00 + 25 1.02150557312054e+01 9.45578119421866e+00 + 26 1.02015018849614e+01 9.48855148434622e+00 + 27 1.01844563445019e+01 9.51414398880334e+00 + 28 1.01647618536435e+01 9.53348342780342e+00 + 29 1.01435075836914e+01 9.54736918677922e+00 + 30 1.01218448127414e+01 9.55679294480281e+00 + 31 1.01008234685872e+01 9.56289707955055e+00 + 32 1.00812605992407e+01 9.56689852729787e+00 + 33 1.00636482078211e+01 9.57008522470066e+00 + 34 1.00481219532447e+01 9.57404682801174e+00 + 35 1.00345149123742e+01 9.58097344406653e+00 + 36 1.00224896192326e+01 9.59352147402459e+00 + 37 1.00117065902086e+01 9.61412496221624e+00 + 38 1.00019625883763e+01 9.64369256665448e+00 + 39 9.99324045988116e+00 9.68100279483232e+00 + 40 9.98566198277188e+00 9.72340741886406e+00 + 41 9.97939087537504e+00 9.76737558060000e+00 + 42 9.97455220189940e+00 9.80830263552738e+00 + 43 9.97120052013341e+00 9.84185625268822e+00 + 44 9.96933202180119e+00 9.86623764187619e+00 + 45 9.96891976615505e+00 9.88235950966856e+00 + 46 9.96994868341340e+00 9.89287033859050e+00 + 47 9.97242707411381e+00 9.90111363064262e+00 + 48 9.97636549450466e+00 9.91016536955268e+00 + 49 9.98173560597232e+00 9.92197275407224e+00 + 50 9.98843048433684e+00 9.93674029911159e+00 + 51 9.99624064138588e+00 9.95286099036568e+00 + 52 1.00048525916104e+01 9.96759873289121e+00 + 53 1.00138780764319e+01 9.97821328789638e+00 + 54 1.00229204333232e+01 9.98289434996108e+00 + 55 1.00316676518615e+01 9.98113328544968e+00 + 56 1.00399758142293e+01 9.97358294450079e+00 + 57 1.00479031641095e+01 9.96154574170506e+00 + 58 1.00556838347250e+01 9.94624156425743e+00 + 59 1.00636555959318e+01 9.92816580065099e+00 + 60 1.00721640105110e+01 9.90692505955277e+00 + 61 1.00814536313753e+01 9.88155118527262e+00 + 62 1.00915547252798e+01 9.85098082230735e+00 + 63 1.01021918256653e+01 9.81456141006142e+00 + 64 1.01127650365675e+01 9.77251908261309e+00 + 65 1.01224426616504e+01 9.72626626484817e+00 + 66 1.01303500341168e+01 9.67844790721581e+00 + 67 1.01357827497794e+01 9.63264342158540e+00 + 68 1.01383594707679e+01 9.59267551611127e+00 + 69 1.01380701059532e+01 9.56168371312923e+00 + 70 1.01352290156399e+01 9.54132235576289e+00 + 71 1.01303782422632e+01 9.53145207033862e+00 + 72 1.01241807468998e+01 9.53052072472080e+00 + 73 1.01173118912092e+01 9.53632715678295e+00 + 74 1.01103471939659e+01 9.54668992740772e+00 + 75 1.01036629090248e+01 9.55984803752009e+00 + 76 1.00973931139318e+01 9.57467381743772e+00 + 77 1.00914805900150e+01 9.59078681449290e+00 + 78 1.00857806923796e+01 9.60849062320413e+00 + 79 1.00801732463746e+01 9.62847591791803e+00 + 80 1.00746211947647e+01 9.65137407697197e+00 + 81 1.00691682828698e+01 9.67731006831009e+00 + 82 1.00638992393184e+01 9.70564969348618e+00 + 83 1.00589006124327e+01 9.73510953407921e+00 + 84 1.00542402131510e+01 9.76420390471647e+00 + 85 1.00499602946160e+01 9.79180385249033e+00 + 86 1.00460706235439e+01 9.81755460563928e+00 + 87 1.00425414168408e+01 9.84200765912343e+00 + 88 1.00393046004480e+01 9.86642899323320e+00 + 89 1.00362677210398e+01 9.89232615597538e+00 + 90 1.00333326702222e+01 9.92077091295346e+00 + 91 1.00304190984417e+01 9.95163431119817e+00 + 92 1.00274924302484e+01 9.98320614724761e+00 + 93 1.00245832030580e+01 1.00126809229005e+01 + 94 1.00217818712298e+01 1.00372157022896e+01 + 95 1.00192174478224e+01 1.00549229065348e+01 + 96 1.00170334876474e+01 1.00654011519876e+01 + 97 1.00153609154724e+01 1.00697015600771e+01 + 98 1.00142801210350e+01 1.00698014812365e+01 + 99 1.00137749686339e+01 1.00677656407202e+01 + 100 1.00136989326255e+01 1.00648830006091e+01 + 100 1.00136989326255e+01 1.00648830006091e+01 + 101 1.00137674082083e+01 1.00611318434583e+01 + 102 1.00135836692120e+01 1.00551787890126e+01 + 103 1.00127001705469e+01 1.00448624179689e+01 + 104 1.00107128955990e+01 1.00279896008852e+01 + 105 1.00073732210918e+01 1.00031581615939e+01 + 106 1.00026863896858e+01 9.97035446256176e+00 + 107 9.99696129324890e+00 9.93114647843641e+00 + 108 9.99078911556410e+00 9.88834547941894e+00 + 109 9.98495363939735e+00 9.84525289783234e+00 + 110 9.98029333636388e+00 9.80488218664815e+00 + 111 9.97754787492958e+00 9.76956483721087e+00 + 112 9.97722552172005e+00 9.74089998776836e+00 + 113 9.97952448720610e+00 9.71964869280979e+00 + 114 9.98432949668635e+00 9.70572109422863e+00 + 115 9.99128565538624e+00 9.69882579496975e+00 + 116 9.99992834152120e+00 9.69906594532193e+00 + 117 1.00098244901113e+01 9.70675942684906e+00 + 118 1.00206778548564e+01 9.72193838510829e+00 + 119 1.00323618718055e+01 9.74392916146852e+00 + 120 1.00448741144078e+01 9.77144817149792e+00 + 121 1.00582353428180e+01 9.80293643028548e+00 + 122 1.00723772537607e+01 9.83653980628752e+00 + 123 1.00870562810006e+01 9.86996874359296e+00 + 124 1.01018143847617e+01 9.90067377124461e+00 + 125 1.01159953973120e+01 9.92637526075002e+00 + 126 1.01288196652442e+01 9.94569135970445e+00 + 127 1.01395052692626e+01 9.95859533688896e+00 + 128 1.01474034953817e+01 9.96651718147533e+00 + 129 1.01521107193303e+01 9.97198512417321e+00 + 130 1.01535310646235e+01 9.97783256102044e+00 + 131 1.01518709230597e+01 9.98617497185904e+00 + 132 1.01475657142497e+01 9.99754506682891e+00 + 133 1.01411666167305e+01 1.00106710657684e+01 + 134 1.01332318751871e+01 1.00230220357698e+01 + 135 1.01242581986854e+01 1.00317166064461e+01 + 136 1.01146544066986e+01 1.00343612487317e+01 + 137 1.01047332554016e+01 1.00296420246780e+01 + 138 1.00947014667735e+01 1.00175763327172e+01 + 139 1.00846531387645e+01 9.99930494674974e+00 + 140 1.00745857366623e+01 9.97646128131491e+00 + 141 1.00644400706802e+01 9.95041823440337e+00 + 142 1.00541501159131e+01 9.92180857541951e+00 + 143 1.00436834569978e+01 9.89050941872713e+00 + 144 1.00330649757401e+01 9.85603943350860e+00 + 145 1.00223855042347e+01 9.81818968302844e+00 + 146 1.00118066120717e+01 9.77759398920638e+00 + 147 1.00015635423691e+01 9.73590632972306e+00 + 148 9.99195808427061e+00 9.69551862637489e+00 + 149 9.98332973799261e+00 9.65911623085002e+00 + 150 9.97599905761175e+00 9.62915505877515e+00 + 151 9.97019367767784e+00 9.60716909686955e+00 + 152 9.96598267281873e+00 9.59318709200410e+00 + 153 9.96324605944343e+00 9.58559881047527e+00 + 154 9.96169276126796e+00 9.58153758556819e+00 + 155 9.96092625032814e+00 9.57763829311044e+00 + 156 9.96054315607791e+00 9.57093750799266e+00 + 157 9.96023482227745e+00 9.55965895377840e+00 + 158 9.95985352165466e+00 9.54367776307569e+00 + 159 9.95942460039566e+00 9.52452561463833e+00 + 160 9.95911205589222e+00 9.50490226824346e+00 + 161 9.95914975443396e+00 9.48781410600212e+00 + 162 9.95975278911406e+00 9.47562429341561e+00 + 163 9.96103890040379e+00 9.46939719079233e+00 + 164 9.96299147170478e+00 9.46883821286236e+00 + 165 9.96547099380307e+00 9.47284423942468e+00 + 166 9.96826097146115e+00 9.48031949605208e+00 + 167 9.97113131026389e+00 9.49080246783928e+00 + 168 9.97390346515378e+00 9.50467508257787e+00 + 169 9.97650055807565e+00 9.52297045210046e+00 + 170 9.97896696852481e+00 9.54683120799382e+00 + 171 9.98144993167344e+00 9.57673108800475e+00 + 172 9.98414386605973e+00 9.61177309775590e+00 + 173 9.98721435874383e+00 9.64941604907962e+00 + 174 9.99072987081047e+00 9.68581828149366e+00 + 175 9.99462784290560e+00 9.71674849920838e+00 + 176 9.99872910050856e+00 9.73876571566039e+00 + 177 1.00027910094647e+01 9.75024496509227e+00 + 178 1.00065753933095e+01 9.75188677631197e+00 + 179 1.00099096736715e+01 9.74652424002240e+00 + 180 1.00127256239536e+01 9.73825559652692e+00 + 181 1.00150707323506e+01 9.73120003142692e+00 + 182 1.00170870650914e+01 9.72835138795971e+00 + 183 1.00189588719574e+01 9.73088542644806e+00 + 184 1.00208370553711e+01 9.73798855694274e+00 + 185 1.00227676206971e+01 9.74722630488312e+00 + 186 1.00246552838286e+01 9.75544013816019e+00 + 187 1.00262844434324e+01 9.75985859738447e+00 + 188 1.00273887691195e+01 9.75895345517658e+00 + 189 1.00277400472209e+01 9.75275536148299e+00 + 190 1.00272200725279e+01 9.74261382746486e+00 + 191 1.00258549688160e+01 9.73056754269459e+00 + 192 1.00238089567536e+01 9.71853980670345e+00 + 193 1.00213474465750e+01 9.70762043885231e+00 + 194 1.00187805230869e+01 9.69773175124558e+00 + 195 1.00164016154513e+01 9.68784935173366e+00 + 196 1.00144402674219e+01 9.67667427007303e+00 + 197 1.00130444574495e+01 9.66343938720852e+00 + 198 1.00122912607270e+01 9.64854739476250e+00 + 199 1.00122066750836e+01 9.63383866331536e+00 + 200 1.00127732034965e+01 9.62235997490241e+00 diff --git a/examples/USER/colvars/out2.colvars.state b/examples/USER/colvars/out2.colvars.state index 8917077caf..e923862831 100644 --- a/examples/USER/colvars/out2.colvars.state +++ b/examples/USER/colvars/out2.colvars.state @@ -1,22 +1,23 @@ configuration { step 300 dt 2.000000e+00 + version 2018-11-16 } colvar { name one - x 9.95354148699614e+00 + x 9.95315918568411e+00 } colvar { name two - x 9.79310294857288e+00 + x 9.79318883680258e+00 } -harmonic { +restraint { configuration { + step 300 name h_pot - stage 8103505641670189088 } } diff --git a/examples/USER/colvars/out2.colvars.traj b/examples/USER/colvars/out2.colvars.traj index 5130ca99f1..365f9b8306 100644 --- a/examples/USER/colvars/out2.colvars.traj +++ b/examples/USER/colvars/out2.colvars.traj @@ -1,102 +1,102 @@ -# step one two - 200 1.00127641579482e+01 9.62235621950587e+00 - 201 1.00139098397954e+01 9.61766067322651e+00 - 202 1.00154895322849e+01 9.62284260846102e+00 - 203 1.00172625720562e+01 9.63964717046032e+00 - 204 1.00188930177704e+01 9.66786064733448e+00 - 205 1.00199761813056e+01 9.70519780219794e+00 - 206 1.00200944106384e+01 9.74779969655747e+00 - 207 1.00188963572281e+01 9.79111374012340e+00 - 208 1.00161883604793e+01 9.83086787098858e+00 - 209 1.00120201470551e+01 9.86403984083060e+00 - 210 1.00067290723642e+01 9.88948240692241e+00 - 211 1.00009114042457e+01 9.90790280320401e+00 - 212 9.99530858712775e+00 9.92119319076851e+00 - 213 9.99063126799011e+00 9.93149262690681e+00 - 214 9.98737350983788e+00 9.94043951053174e+00 - 215 9.98567811211086e+00 9.94878566374960e+00 - 216 9.98529977833156e+00 9.95640488686023e+00 - 217 9.98567740511041e+00 9.96270367197379e+00 - 218 9.98609281741416e+00 9.96726160094494e+00 - 219 9.98586784093273e+00 9.97033437532426e+00 - 220 9.98454831898211e+00 9.97291246609646e+00 - 221 9.98202887687821e+00 9.97627400695988e+00 - 222 9.97858776161328e+00 9.98128372296812e+00 - 223 9.97481791063232e+00 9.98787692577356e+00 - 224 9.97146915301902e+00 9.99495319867179e+00 - 225 9.96924741695340e+00 1.00005781312739e+01 - 226 9.96863280571612e+00 1.00023562928510e+01 - 227 9.96977462939505e+00 9.99793468396390e+00 - 228 9.97249206995624e+00 9.98558877312050e+00 - 229 9.97637419760570e+00 9.96476526430303e+00 - 230 9.98093600414111e+00 9.93639297716863e+00 - 231 9.98577334632368e+00 9.90279138444459e+00 - 232 9.99066901099700e+00 9.86714667869485e+00 - 233 9.99562704815141e+00 9.83274230148512e+00 - 234 1.00008356809073e+01 9.80226834521352e+00 - 235 1.00065772362800e+01 9.77744581513232e+00 - 236 1.00131097048912e+01 9.75894408214992e+00 - 237 1.00205553485494e+01 9.74639403983496e+00 - 238 1.00288314258010e+01 9.73851464709533e+00 - 239 1.00376482262668e+01 9.73355843502651e+00 - 240 1.00465718867162e+01 9.72986544373201e+00 - 241 1.00551241447104e+01 9.72616365347388e+00 - 242 1.00628799016098e+01 9.72156081057173e+00 - 243 1.00695359569141e+01 9.71533506969961e+00 - 244 1.00749394351078e+01 9.70669135454371e+00 - 245 1.00790729024702e+01 9.69470862769774e+00 - 246 1.00820010382698e+01 9.67869454326621e+00 - 247 1.00837917095021e+01 9.65894101136318e+00 - 248 1.00844414119874e+01 9.63696223650643e+00 - 249 1.00838441989246e+01 9.61423476365400e+00 - 250 1.00818306797879e+01 9.59185059543549e+00 - 251 1.00782686429397e+01 9.57154356576350e+00 - 252 1.00731806695096e+01 9.55550278600070e+00 - 253 1.00668200834919e+01 9.54554307033366e+00 - 254 1.00596730176507e+01 9.54248962932697e+00 - 255 1.00523895763009e+01 9.54590976255577e+00 - 256 1.00456784264533e+01 9.55421544253452e+00 - 257 1.00402005024002e+01 9.56513899116782e+00 - 258 1.00364831006552e+01 9.57640458000444e+00 - 259 1.00348576492106e+01 9.58619146455749e+00 - 260 1.00354210621162e+01 9.59329709957898e+00 - 261 1.00380245202744e+01 9.59728096353517e+00 - 262 1.00422960600822e+01 9.59832037848005e+00 - 263 1.00476990763950e+01 9.59672497993560e+00 - 264 1.00536104533027e+01 9.59261911381189e+00 - 265 1.00594002482137e+01 9.58602304006163e+00 - 266 1.00644981793165e+01 9.57714719542419e+00 - 267 1.00684482704210e+01 9.56662135439055e+00 - 268 1.00709580655557e+01 9.55551489305294e+00 - 269 1.00719418900228e+01 9.54518226195314e+00 - 270 1.00715463773733e+01 9.53703197862875e+00 - 271 1.00701345227997e+01 9.53228911010047e+00 - 272 1.00682184887617e+01 9.53176321322706e+00 - 273 1.00663378629920e+01 9.53558933249131e+00 - 274 1.00649132448630e+01 9.54304329234477e+00 - 275 1.00641243212406e+01 9.55266696753925e+00 - 276 1.00638595454980e+01 9.56275901409309e+00 - 277 1.00637587244679e+01 9.57196213233751e+00 - 278 1.00633313189549e+01 9.57961568108488e+00 - 279 1.00621123193119e+01 9.58575692732997e+00 - 280 1.00598117112007e+01 9.59088855190189e+00 - 281 1.00564177173993e+01 9.59570566223894e+00 - 282 1.00522270044392e+01 9.60088836897012e+00 - 283 1.00477888199161e+01 9.60693590561625e+00 - 284 1.00437690523107e+01 9.61400570555926e+00 - 285 1.00407622307256e+01 9.62182265962647e+00 - 286 1.00391028258991e+01 9.62979902243492e+00 - 287 1.00387366035163e+01 9.63738040674711e+00 - 288 1.00391979793082e+01 9.64439605217689e+00 - 289 1.00397008587343e+01 9.65118231683256e+00 - 290 1.00393154139857e+01 9.65847479887268e+00 - 291 1.00371856971467e+01 9.66716430247627e+00 - 292 1.00327325013742e+01 9.67799413246555e+00 - 293 1.00257889436952e+01 9.69130066948859e+00 - 294 1.00166284740574e+01 9.70687426338097e+00 - 295 1.00058767991341e+01 9.72395332252100e+00 - 296 9.99433972822595e+00 9.74134088397850e+00 - 297 9.98281255441855e+00 9.75768650006539e+00 - 298 9.97193339524040e+00 9.77194269576588e+00 - 299 9.96211387496966e+00 9.78370254738211e+00 - 300 9.95354148699614e+00 9.79310294857288e+00 +# step one two + 200 1.00127732034965e+01 9.62235997490241e+00 + 201 1.00139198864982e+01 9.61766167925624e+00 + 202 1.00155004339120e+01 9.62284272858813e+00 + 203 1.00172741972246e+01 9.63964899323068e+00 + 204 1.00189052021826e+01 9.66786718571673e+00 + 205 1.00199887119842e+01 9.70521202056400e+00 + 206 1.00201070660155e+01 9.74782380666112e+00 + 207 1.00189089093749e+01 9.79114913038349e+00 + 208 1.00162005540278e+01 9.83091553260188e+00 + 209 1.00120316562035e+01 9.86409994884863e+00 + 210 1.00067394529596e+01 9.88955328455197e+00 + 211 1.00009200584653e+01 9.90798080826055e+00 + 212 9.99531475905311e+00 9.92127385542524e+00 + 213 9.99063400342297e+00 9.93157198661852e+00 + 214 9.98737188807678e+00 9.94051482696048e+00 + 215 9.98567127567181e+00 9.94885527957784e+00 + 216 9.98528704043382e+00 9.95646746111755e+00 + 217 9.98565832937415e+00 9.96275739929720e+00 + 218 9.98606724184677e+00 9.96730423246689e+00 + 219 9.98583582550472e+00 9.97036378703713e+00 + 220 9.98451001643477e+00 9.97292736129215e+00 + 221 9.98198434901656e+00 9.97627439806637e+00 + 222 9.97853678731273e+00 9.98127100659218e+00 + 223 9.97475984191141e+00 9.98785371236258e+00 + 224 9.97140286510626e+00 9.99492286335624e+00 + 225 9.96917137580259e+00 1.00005443231922e+01 + 226 9.96854523900174e+00 1.00023222923235e+01 + 227 9.96967375964547e+00 9.99790273206806e+00 + 228 9.97237636771905e+00 9.98555960216881e+00 + 229 9.97624253505807e+00 9.96473792067690e+00 + 230 9.98078777310055e+00 9.93636511602182e+00 + 231 9.98560846780419e+00 9.90275990393703e+00 + 232 9.99048787217569e+00 9.86710855077386e+00 + 233 9.99543040822038e+00 9.83269539984149e+00 + 234 1.00006246021103e+01 9.80221208335553e+00 + 235 1.00063530848982e+01 9.77738136586701e+00 + 236 1.00128741709083e+01 9.75887400813685e+00 + 237 1.00203106975850e+01 9.74632163179798e+00 + 238 1.00285805371730e+01 9.73844350416337e+00 + 239 1.00373945897865e+01 9.73349215182819e+00 + 240 1.00463194539327e+01 9.72980720779576e+00 + 241 1.00548770491533e+01 9.72611599020063e+00 + 242 1.00626421174965e+01 9.72152572108181e+00 + 243 1.00693109823863e+01 9.71531423107737e+00 + 244 1.00747300690509e+01 9.70668632474813e+00 + 245 1.00788811512303e+01 9.69472082245661e+00 + 246 1.00818281591535e+01 9.67872530149764e+00 + 247 1.00836382918008e+01 9.65899116363609e+00 + 248 1.00843077585461e+01 9.63702967428387e+00 + 249 1.00837304601058e+01 9.61431312359133e+00 + 250 1.00817369874724e+01 9.59193249256670e+00 + 251 1.00781951382998e+01 9.57162234547176e+00 + 252 1.00731274409141e+01 9.55557274350384e+00 + 253 1.00667870632608e+01 9.54560001126946e+00 + 254 1.00596598859158e+01 9.54253147668434e+00 + 255 1.00523956909045e+01 9.54593692832520e+00 + 256 1.00457028282132e+01 9.55423082330650e+00 + 257 1.00402418669526e+01 9.56514761944992e+00 + 258 1.00365397691695e+01 9.57641296971103e+00 + 259 1.00349276270394e+01 9.58620624196598e+00 + 260 1.00355019919770e+01 9.59332346959128e+00 + 261 1.00381137097146e+01 9.59732188686984e+00 + 262 1.00423905760179e+01 9.59837618250971e+00 + 263 1.00477959188736e+01 9.59679324477687e+00 + 264 1.00537068007149e+01 9.59269523141530e+00 + 265 1.00594937260641e+01 9.58610120816249e+00 + 266 1.00645870781682e+01 9.57722117048002e+00 + 267 1.00685316571224e+01 9.56668493985151e+00 + 268 1.00710357823615e+01 9.55556251047062e+00 + 269 1.00720144042107e+01 9.54520978473172e+00 + 270 1.00716144493745e+01 9.53703781183182e+00 + 271 1.00701992199135e+01 9.53227489206590e+00 + 272 1.00682808706064e+01 9.53173333554826e+00 + 273 1.00663988075209e+01 9.53554943194497e+00 + 274 1.00649733063520e+01 9.54299862049767e+00 + 275 1.00641836485840e+01 9.55262143610080e+00 + 276 1.00639178664285e+01 9.56271517955029e+00 + 277 1.00638153921535e+01 9.57192148747872e+00 + 278 1.00633853985923e+01 9.57957875475062e+00 + 279 1.00621626720543e+01 9.58572327394556e+00 + 280 1.00598570838615e+01 9.59085686511578e+00 + 281 1.00564566071967e+01 9.59567423393283e+00 + 282 1.00522576614697e+01 9.60085550637412e+00 + 283 1.00478091897332e+01 9.60690040068280e+00 + 284 1.00437767664032e+01 9.61396708331890e+00 + 285 1.00407546813490e+01 9.62178118810825e+00 + 286 1.00390773261870e+01 9.62975547860500e+00 + 287 1.00386906040191e+01 9.63733595704590e+00 + 288 1.00391292740982e+01 9.64435229335154e+00 + 289 1.00396077171765e+01 9.65114124926381e+00 + 290 1.00391967746350e+01 9.65843904962787e+00 + 291 1.00370409303829e+01 9.66713735495098e+00 + 292 1.00325613495850e+01 9.67798035621834e+00 + 293 1.00255913568518e+01 9.69130440474672e+00 + 294 1.00164044158125e+01 9.70689841022156e+00 + 295 1.00056261321876e+01 9.72399810930261e+00 + 296 9.99406221883501e+00 9.74140402524052e+00 + 297 9.98250803362175e+00 9.75776438941627e+00 + 298 9.97160202027972e+00 9.77203069297329e+00 + 299 9.96175637151037e+00 9.78379375044905e+00 + 300 9.95315918568411e+00 9.79318883680258e+00 diff --git a/examples/USER/colvars/peptide2.colvars.state b/examples/USER/colvars/peptide2.colvars.state index cfb7c49930..5272bb7c4a 100644 --- a/examples/USER/colvars/peptide2.colvars.state +++ b/examples/USER/colvars/peptide2.colvars.state @@ -1,17 +1,18 @@ configuration { step 100 dt 2.000000e+00 + version 2018-11-16 } colvar { name one - x 1.00387424212228e+01 + x 1.00387423506482e+01 } -harmonic { +restraint { configuration { + step 100 name h_pot - stage 4044288781530052640 } } diff --git a/examples/USER/colvars/peptide2.colvars.traj b/examples/USER/colvars/peptide2.colvars.traj index 2c4bf7ad54..0d8931bda7 100644 --- a/examples/USER/colvars/peptide2.colvars.traj +++ b/examples/USER/colvars/peptide2.colvars.traj @@ -1,102 +1,102 @@ -# step one - 0 1.23398428397332e+01 - 1 1.23379000531837e+01 - 2 1.22833752132682e+01 - 3 1.21783464524822e+01 - 4 1.20268109152646e+01 - 5 1.18342676552027e+01 - 6 1.16071240696111e+01 - 7 1.13522568477758e+01 - 8 1.10769760454451e+01 - 9 1.07892333501017e+01 - 10 1.04978607983300e+01 - 11 1.02148368912480e+01 - 12 9.95820967758655e+00 - 13 9.74528082635713e+00 - 14 9.59065550809125e+00 - 15 9.49025917553263e+00 - 16 9.43254360388750e+00 - 17 9.41011962734900e+00 - 18 9.41602364253240e+00 - 19 9.44413444723206e+00 - 20 9.49001191595699e+00 - 21 9.55036186844267e+00 - 22 9.62258413071055e+00 - 23 9.70460340526413e+00 - 24 9.79475248209609e+00 - 25 9.89135077720185e+00 - 26 9.99213105078110e+00 - 27 1.00938499722663e+01 - 28 1.01925349210626e+01 - 29 1.02845107805173e+01 - 30 1.03676652352347e+01 - 31 1.04416367894860e+01 - 32 1.05071334937552e+01 - 33 1.05650452299048e+01 - 34 1.06158824214188e+01 - 35 1.06595186275218e+01 - 36 1.06948928511102e+01 - 37 1.07202580715959e+01 - 38 1.07337399401028e+01 - 39 1.07331885445159e+01 - 40 1.07158932314825e+01 - 41 1.06789136129953e+01 - 42 1.06198862520319e+01 - 43 1.05380120055201e+01 - 44 1.04346603936480e+01 - 45 1.03132931131809e+01 - 46 1.01792839195940e+01 - 47 1.00398967921774e+01 - 48 9.90373826474332e+00 - 49 9.77934819842326e+00 - 50 9.67344128626180e+00 - 51 9.58957431460176e+00 - 52 9.52771755964755e+00 - 53 9.48463676001684e+00 - 54 9.45495927636316e+00 - 55 9.43277262066999e+00 - 56 9.41329687195946e+00 - 57 9.39418023785890e+00 - 58 9.37608079167942e+00 - 59 9.36244026161597e+00 - 60 9.35853356967195e+00 - 61 9.36993825765332e+00 - 62 9.40084295384763e+00 - 63 9.45286334548428e+00 - 64 9.52464492798022e+00 - 65 9.61230778865749e+00 - 66 9.71074173620872e+00 - 67 9.81506921139973e+00 - 68 9.92117599348263e+00 - 69 1.00244217575122e+01 - 70 1.01178260477346e+01 - 71 1.01986938379172e+01 - 72 1.02670956368544e+01 - 73 1.03213051063305e+01 - 74 1.03597191337854e+01 - 75 1.03817745676591e+01 - 76 1.03880610583944e+01 - 77 1.03809103738027e+01 - 78 1.03645558156884e+01 - 79 1.03441497701913e+01 - 80 1.03243653409000e+01 - 81 1.03082112818858e+01 - 82 1.02961296917318e+01 - 83 1.02862106580352e+01 - 84 1.02756069146933e+01 - 85 1.02618115908758e+01 - 86 1.02435132305408e+01 - 87 1.02212121470422e+01 - 88 1.01972799936680e+01 - 89 1.01743931780361e+01 - 90 1.01538342930689e+01 - 91 1.01363020288600e+01 - 92 1.01223080393853e+01 - 93 1.01118050646187e+01 - 94 1.01038513159042e+01 - 95 1.00967020139234e+01 - 96 1.00885782989097e+01 - 97 1.00784257293241e+01 - 98 1.00661428832570e+01 - 99 1.00524912515310e+01 - 100 1.00387424212228e+01 +# step one + 0 1.23398428397332e+01 + 1 1.23379000532662e+01 + 2 1.22833752135957e+01 + 3 1.21783464514507e+01 + 4 1.20268109095184e+01 + 5 1.18342676394048e+01 + 6 1.16071240372003e+01 + 7 1.13522567926249e+01 + 8 1.10769759646337e+01 + 9 1.07892332454600e+01 + 10 1.04978606745989e+01 + 11 1.02148367517604e+01 + 12 9.95820954052204e+00 + 13 9.74528077043305e+00 + 14 9.59065564952749e+00 + 15 9.49025959957862e+00 + 16 9.43254431868731e+00 + 17 9.41012058917623e+00 + 18 9.41602481112176e+00 + 19 9.44413580740584e+00 + 20 9.49001346044027e+00 + 21 9.55036359015270e+00 + 22 9.62258602486444e+00 + 23 9.70460545744668e+00 + 24 9.79475465622561e+00 + 25 9.89135302429916e+00 + 26 9.99213332770717e+00 + 27 1.00938522423366e+01 + 28 1.01925371414626e+01 + 29 1.02845129002944e+01 + 30 1.03676671987640e+01 + 31 1.04416385355998e+01 + 32 1.05071349561950e+01 + 33 1.05650463398331e+01 + 34 1.06158831174766e+01 + 35 1.06595188661313e+01 + 36 1.06948926085038e+01 + 37 1.07202573517647e+01 + 38 1.07337387802787e+01 + 39 1.07331870068021e+01 + 40 1.07158913924701e+01 + 41 1.06789115566470e+01 + 42 1.06198840652253e+01 + 43 1.05380097743725e+01 + 44 1.04346581978275e+01 + 45 1.03132910149185e+01 + 46 1.01792819503691e+01 + 47 1.00398949454818e+01 + 48 9.90373650268307e+00 + 49 9.77934647164350e+00 + 50 9.67343955381284e+00 + 51 9.58957255517495e+00 + 52 9.52771577288560e+00 + 53 9.48463495848957e+00 + 54 9.45495747488851e+00 + 55 9.43277083061229e+00 + 56 9.41329510571902e+00 + 57 9.39417852043035e+00 + 58 9.37607916767444e+00 + 59 9.36243879601093e+00 + 60 9.35853234890725e+00 + 61 9.36993739187210e+00 + 62 9.40084256925489e+00 + 63 9.45286356660258e+00 + 64 9.52464585631223e+00 + 65 9.61230948096192e+00 + 66 9.71074418990813e+00 + 67 9.81507236552599e+00 + 68 9.92117974657176e+00 + 69 1.00244259961919e+01 + 70 1.01178306268727e+01 + 71 1.01986985644537e+01 + 72 1.02671003889995e+01 + 73 1.03213098011429e+01 + 74 1.03597236984298e+01 + 75 1.03817789163109e+01 + 76 1.03880650963390e+01 + 77 1.03809140245635e+01 + 78 1.03645590344102e+01 + 79 1.03441525373194e+01 + 80 1.03243676495902e+01 + 81 1.03082131278348e+01 + 82 1.02961310659179e+01 + 83 1.02862115513553e+01 + 84 1.02756073299153e+01 + 85 1.02618115461408e+01 + 86 1.02435127550163e+01 + 87 1.02212112849545e+01 + 88 1.01972788307491e+01 + 89 1.01743918261207e+01 + 90 1.01538328424605e+01 + 91 1.01363005552771e+01 + 92 1.01223066231827e+01 + 93 1.01118037967830e+01 + 94 1.01038502876980e+01 + 95 1.00967012947728e+01 + 96 1.00885779123137e+01 + 97 1.00784256309007e+01 + 98 1.00661429612272e+01 + 99 1.00524913461711e+01 + 100 1.00387423506482e+01 From d802817ccad57f755c8cde20bcd39b62c6cea3f5 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 7 Dec 2018 10:39:10 +0000 Subject: [PATCH 253/273] Small changes to the documentation for building and using PLUMED --- doc/src/Build_extras.txt | 65 +++++++++++++++++++++------------------- doc/src/fix_plumed.txt | 6 ++-- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index fb2fe95341..c35418ae5f 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -735,28 +735,31 @@ from LAMMPS using the generic "plumed installation instructions"_plumedinstall. :link(plumedinstall,http://plumed.github.io/doc-master/user-doc/html/_installation.html) PLUMED can be linked into MD codes in three different modes: static, -shared, and runtime. With the "static" mode, all required PLUMED code -is linked statically into the MD code. The MD code is then fully -independent from the PLUMED installation, but also you have to -rebuild/relink the MD code to update the PLUMED code inside it. With -"shared" linkage mode, the MD code is linked to a shared library -containing the PLUMED code, preferably after it was installed in a -globally accessible location. This way the same installed PLUMED code -can be shared across multiple MD packages and can be updated, for as -long as the shared PLUMED library is ABI-compatible. The third linkage -mode is "runtime" which allows to switch the PLUMED kernel at runtime -between different variants through setting the PLUMED_KERNEL environment -variable, which has to point to the location of the libplumedKernel.so -dynamical shared object, which is then loaded at runtime. This is +shared, and runtime. With the "static" mode, all the code that PLUMED requires +is linked statically into LAMMPS. LAMMPS is then fully +independent from the PLUMED installation, but you have to +rebuild/relink it in order to update the PLUMED code inside it. With +the "shared" linkage mode, LAMMPS is linked to a shared library +that contains the PLUMED code. This library should preferably be installed in a +globally accessible location. When PLUMED is linked in this way the same library +can be used by multiple MD packages. Furthermore, the PLUMED library LAMMPS uses can be updated +without the need for a recompile of LAMMPS for as +long as the shared PLUMED library is ABI-compatible. + +The third linkage +mode is "runtime" which allows the user to specify which PLUMED kernel should be used at runtime +by using the PLUMED_KERNEL environment +variable. This variable should point to the location of the libplumedKernel.so +dynamical shared object, which is then loaded at runtime. This mode of linking is particularly convenient for doing PLUMED development and comparing -multiple PLUMED versions without having to recompile the hosting MD +multiple PLUMED versions as these sorts of comparisons can be done without recompiling the hosting MD code. All three linkage modes are supported by LAMMPS on selected operating systems (e.g. Linux) and using either CMake or traditional -make build. The "static" mode should be most portable, the "runtime" +make build. The "static" mode should be the most portable, while the "runtime" mode support in LAMMPS makes the most assumptions about operating system and compiler environment. If one mode does not work, try a -different one, or switch to a different build system, or consider -a global PLUMED installation or downloading it during building LAMMPS. +different one, switch to a different build system, consider +a global PLUMED installation or consider downloading PLUMED during the LAMMPS build. [CMake build]: @@ -764,25 +767,25 @@ a global PLUMED installation or downloading it during building LAMMPS. -D PLUMED_MODE=value # Linkage mode for PLUMED, value = static (default), shared, or runtime :pre If DOWNLOAD_PLUMED is set to "yes", the PLUMED library will be -downloaded (the version of that is hard-coded to a vetted version of +downloaded (the version of PLUMED that will be downloaded is hard-coded to a vetted version of PLUMED, usually a recent stable release version) and built inside the CMake build directory. If DOWNLOAD_PLUMED is set to "no" (the default), -CMake will try to detect an installed version of PLUMED and link to -that. For this to work, the PLUMED library has to be installed into a +CMake will try to detect and link to an installed version of PLUMED. +For this to work, the PLUMED library has to be installed into a location where the pkg-config tool can find it or the PKG_CONFIG_PATH -environment variable has to be set up accordingly. +environment variable has to be set up accordingly. PLUMED should be installed +in such a location if you compile it using the default make; make install commands. -The PLUMED_MODE setting determines the linkage mode of the PLUMED -library. Allowed values are "static" (default), "shared", or "runtime". +The PLUMED_MODE setting determines the linkage mode for the PLUMED +library. The allowed values for this flag are "static" (default), "shared", or "runtime". For a discussion of PLUMED linkage modes, please see above. When -enabling DOWNLOAD_PLUMED, the static linkage mode is recommended. +DOWNLOAD_PLUMED is enabled the static linkage mode is recommended. [Traditional make]: -Before installing the USER-PLUMED package, first the PLUMED library -needs to be configured so that LAMMPS can find the right settings when -compiling and linking the LAMMPS executable itself. You can either -download and build PLUMED inside the LAMMPS plumed library folder or use +PLUMED needs to be installed before the USER-PLUMED package is installed +so that LAMMPS can find the right settings when compiling and linking the LAMMPS executable. +You can either download and build PLUMED inside the LAMMPS plumed library folder or use a previously installed PLUMED library and point LAMMPS to its location. You also have to choose the linkage mode: "static" (default), "shared" or "runtime". For a discussion of PLUMED linkage modes, please @@ -799,9 +802,9 @@ make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installati :pre Note that 2 symbolic (soft) links, "includelink" and "liblink" are -created in lib/plumed to point into the location of the PLUMED build to -use and also a new file lib/plumed/Makefile.lammps is created with -settings suitable for LAMMPS to compile and link PLUMED in the desired +created in lib/plumed that point to the location of the PLUMED build to +use. A new file lib/plumed/Makefile.lammps is also created with +settings suitable for LAMMPS to compile and link PLUMED using the desired linkage mode. After this step is completed, you can install the USER-PLUMED package and compile LAMMPS in the usual manner: diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index 30e8b2766c..1f548d11ea 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -32,7 +32,7 @@ enhance the sampling of phase space. The documentation included here only describes the fix plumed command itself. This command is LAMMPS specific, whereas most of the -functionality implemented in PLUMED, however, will work with a range of +functionality implemented in PLUMED will work with a range of MD codes, and when PLUMED is used as a stand alone code for analysis. The full "documentation for PLUMED"_plumeddocs is available online and included in the PLUMED source code. The PLUMED library development is @@ -54,8 +54,8 @@ have been set. The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED and there can only be one instance of the plumed fix at a -time. The plumed fix communicates the minimum amount of information -required and the PLUMED supports multiple, completely independent +time. The way the plumed fix is implmented ensures that the minimum amount of information +required is communicated. Furthremore, PLUMED supports multiple, completely independent collective variables, multiple independent biases and multiple independent forms of analysis. There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. From 20eca799b17c213475b927c9ddcb44b3cb275fd1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 05:50:39 -0500 Subject: [PATCH 254/273] update log files for USER-DIFFRACTION package --- .../USER/diffraction/{BulkNi.in => in.BulkNi} | 3 +- .../USER/diffraction/log.27Nov18.BulkNi.g++.1 | 72 +++++++++++++++++++ .../USER/diffraction/log.27Nov18.BulkNi.g++.4 | 72 +++++++++++++++++++ 3 files changed, 145 insertions(+), 2 deletions(-) rename examples/USER/diffraction/{BulkNi.in => in.BulkNi} (92%) create mode 100644 examples/USER/diffraction/log.27Nov18.BulkNi.g++.1 create mode 100644 examples/USER/diffraction/log.27Nov18.BulkNi.g++.4 diff --git a/examples/USER/diffraction/BulkNi.in b/examples/USER/diffraction/in.BulkNi similarity index 92% rename from examples/USER/diffraction/BulkNi.in rename to examples/USER/diffraction/in.BulkNi index 8315e57750..ab82986f50 100644 --- a/examples/USER/diffraction/BulkNi.in +++ b/examples/USER/diffraction/in.BulkNi @@ -1,5 +1,4 @@ variable A string bulkNi -log $A.log boundary p p p @@ -26,7 +25,7 @@ fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] & fix 2 all saed/vtk 1 1 1 c_SAED file $A_001.saed -dump 1 all custom 1 $A.dump id x y z +#dump 1 all custom 1 $A.dump id x y z run 0 unfix 1 diff --git a/examples/USER/diffraction/log.27Nov18.BulkNi.g++.1 b/examples/USER/diffraction/log.27Nov18.BulkNi.g++.1 new file mode 100644 index 0000000000..d716f827e0 --- /dev/null +++ b/examples/USER/diffraction/log.27Nov18.BulkNi.g++.1 @@ -0,0 +1,72 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable A string bulkNi + +boundary p p p + +units metal +timestep 0.001 + +lattice fcc 3.52 +Lattice spacing in x,y,z = 3.52 3.52 3.52 +region box block 0 20 0 20 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (70.4 70.4 70.4) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 32000 atoms + Time spent = 0.0037179 secs + +pair_style none +mass * 58.71 +atom_modify sort 0 0 + +compute XRD all xrd 1.541838 Ni 2Theta 40 80 c 2 2 2 LP 1 echo + +compute SAED all saed 0.0251 Ni Kmax 0.85 Zone 0 0 0 c 0.025 0.025 0.025 dR_Ewald 0.01 echo manual + +fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] mode vector file $A.hist.xrd +fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] mode vector file bulkNi.hist.xrd + +fix 2 all saed/vtk 1 1 1 c_SAED file $A_001.saed +fix 2 all saed/vtk 1 1 1 c_SAED file bulkNi_001.saed + +#dump 1 all custom 1 $A.dump id x y z +run 0 +Per MPI rank memory allocation (min/avg/max) = 21.91 | 21.91 | 21.91 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 0 0 0 0 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 32000 atoms + +314.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 9.537e-07 | | |100.00 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2461 ave 2461 max 2461 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +unfix 1 +unfix 2 +uncompute XRD +uncompute SAED + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:03:30 diff --git a/examples/USER/diffraction/log.27Nov18.BulkNi.g++.4 b/examples/USER/diffraction/log.27Nov18.BulkNi.g++.4 new file mode 100644 index 0000000000..04761a1e06 --- /dev/null +++ b/examples/USER/diffraction/log.27Nov18.BulkNi.g++.4 @@ -0,0 +1,72 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +variable A string bulkNi + +boundary p p p + +units metal +timestep 0.001 + +lattice fcc 3.52 +Lattice spacing in x,y,z = 3.52 3.52 3.52 +region box block 0 20 0 20 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (70.4 70.4 70.4) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 32000 atoms + Time spent = 0.0010488 secs + +pair_style none +mass * 58.71 +atom_modify sort 0 0 + +compute XRD all xrd 1.541838 Ni 2Theta 40 80 c 2 2 2 LP 1 echo + +compute SAED all saed 0.0251 Ni Kmax 0.85 Zone 0 0 0 c 0.025 0.025 0.025 dR_Ewald 0.01 echo manual + +fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] mode vector file $A.hist.xrd +fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] mode vector file bulkNi.hist.xrd + +fix 2 all saed/vtk 1 1 1 c_SAED file $A_001.saed +fix 2 all saed/vtk 1 1 1 c_SAED file bulkNi_001.saed + +#dump 1 all custom 1 $A.dump id x y z +run 0 +Per MPI rank memory allocation (min/avg/max) = 16.08 | 16.08 | 16.08 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 0 0 0 0 +Loop time of 1.84774e-06 on 4 procs for 0 steps with 32000 atoms + +162.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.848e-06 | | |100.00 + +Nlocal: 8000 ave 8000 max 8000 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1041 ave 1041 max 1041 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +unfix 1 +unfix 2 +uncompute XRD +uncompute SAED + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:54 From f8da830c073a2f95d4b8d51abd3d9a2d65e0a630 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 05:51:02 -0500 Subject: [PATCH 255/273] fix new[]/delete mismatches and a memory leak in USER-DIFFRACTION package --- src/USER-DIFFRACTION/compute_saed.cpp | 2 +- src/USER-DIFFRACTION/compute_xrd.cpp | 2 +- src/USER-DIFFRACTION/fix_saed_vtk.cpp | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/USER-DIFFRACTION/compute_saed.cpp b/src/USER-DIFFRACTION/compute_saed.cpp index 3d09955275..dcafe57ba8 100644 --- a/src/USER-DIFFRACTION/compute_saed.cpp +++ b/src/USER-DIFFRACTION/compute_saed.cpp @@ -281,7 +281,7 @@ ComputeSAED::~ComputeSAED() { memory->destroy(vector); memory->destroy(store_tmp); - delete ztype; + delete[] ztype; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-DIFFRACTION/compute_xrd.cpp b/src/USER-DIFFRACTION/compute_xrd.cpp index 4d5cccdc50..d6b7549272 100644 --- a/src/USER-DIFFRACTION/compute_xrd.cpp +++ b/src/USER-DIFFRACTION/compute_xrd.cpp @@ -247,7 +247,7 @@ ComputeXRD::~ComputeXRD() { memory->destroy(array); memory->destroy(store_tmp); - delete ztype; + delete[] ztype; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-DIFFRACTION/fix_saed_vtk.cpp b/src/USER-DIFFRACTION/fix_saed_vtk.cpp index 882c13bc3e..4d9af66818 100644 --- a/src/USER-DIFFRACTION/fix_saed_vtk.cpp +++ b/src/USER-DIFFRACTION/fix_saed_vtk.cpp @@ -287,6 +287,8 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : FixSAEDVTK::~FixSAEDVTK() { delete [] extlist; + delete [] filename; + delete [] ids; memory->destroy(vector); memory->destroy(vector_total); if (fp && me == 0) fclose(fp); From e61b553bb3e372071ddfe09b6cd07f66a882678a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 05:54:02 -0500 Subject: [PATCH 256/273] update USER-MOFF log files --- ...n18.hkust1.g++.1 => log.27Nov18.hkust1.g++.1} | 10 ++++++---- ...n18.hkust1.g++.4 => log.27Nov18.hkust1.g++.4} | 14 ++++++++------ ..._long.g++.1 => log.27Nov18.hkust1_long.g++.1} | 16 +++++++++------- ..._long.g++.4 => log.27Nov18.hkust1_long.g++.4} | 16 +++++++++------- 4 files changed, 32 insertions(+), 24 deletions(-) rename examples/USER/mofff/{log.17Jan18.hkust1.g++.1 => log.27Nov18.hkust1.g++.1} (97%) rename examples/USER/mofff/{log.17Jan18.hkust1.g++.4 => log.27Nov18.hkust1.g++.4} (96%) rename examples/USER/mofff/{log.17Jan18.hkust1_long.g++.1 => log.27Nov18.hkust1_long.g++.1} (96%) rename examples/USER/mofff/{log.17Jan18.hkust1_long.g++.4 => log.27Nov18.hkust1_long.g++.4} (96%) diff --git a/examples/USER/mofff/log.17Jan18.hkust1.g++.1 b/examples/USER/mofff/log.27Nov18.hkust1.g++.1 similarity index 97% rename from examples/USER/mofff/log.17Jan18.hkust1.g++.1 rename to examples/USER/mofff/log.27Nov18.hkust1.g++.1 index 13074b5054..49fb746116 100644 --- a/examples/USER/mofff/log.17Jan18.hkust1.g++.1 +++ b/examples/USER/mofff/log.27Nov18.hkust1.g++.1 @@ -1,5 +1,7 @@ -LAMMPS (17 Jan 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task clear + using 1 OpenMP thread(s) per MPI task units real boundary p p p atom_style full @@ -119,7 +121,7 @@ special_bonds lj 0.0 0.0 1.0 coul 1.0 1.0 1.0 # ------------------------ MOF-FF FORCE FIELD END -------------------------- run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -132,13 +134,13 @@ Neighbor list info ... pair build: half/bin/newton/tri stencil: half/bin/3d/newton/tri bin: standard -WARNING: Inconsistent image flags (../domain.cpp:786) +WARNING: Inconsistent image flags (src/domain.cpp:782) Per MPI rank memory allocation (min/avg/max) = 21.23 | 21.23 | 21.23 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -11833.81 343.7619 -11490.048 -5.8508834 Loop time of 9.53674e-07 on 1 procs for 0 steps with 624 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +314.6% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total diff --git a/examples/USER/mofff/log.17Jan18.hkust1.g++.4 b/examples/USER/mofff/log.27Nov18.hkust1.g++.4 similarity index 96% rename from examples/USER/mofff/log.17Jan18.hkust1.g++.4 rename to examples/USER/mofff/log.27Nov18.hkust1.g++.4 index bba6ff5c2e..832bdfea94 100644 --- a/examples/USER/mofff/log.17Jan18.hkust1.g++.4 +++ b/examples/USER/mofff/log.27Nov18.hkust1.g++.4 @@ -1,5 +1,7 @@ -LAMMPS (17 Jan 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task clear + using 1 OpenMP thread(s) per MPI task units real boundary p p p atom_style full @@ -119,7 +121,7 @@ special_bonds lj 0.0 0.0 1.0 coul 1.0 1.0 1.0 # ------------------------ MOF-FF FORCE FIELD END -------------------------- run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -132,13 +134,13 @@ Neighbor list info ... pair build: half/bin/newton/tri stencil: half/bin/3d/newton/tri bin: standard -WARNING: Inconsistent image flags (../domain.cpp:786) +WARNING: Inconsistent image flags (src/domain.cpp:782) Per MPI rank memory allocation (min/avg/max) = 20.68 | 20.68 | 20.68 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -11833.81 343.7619 -11490.048 -5.8508834 -Loop time of 2.20537e-06 on 4 procs for 0 steps with 624 atoms +Loop time of 2.01464e-05 on 4 procs for 0 steps with 624 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +86.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -149,7 +151,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 2.205e-06 | | |100.00 +Other | | 2.015e-05 | | |100.00 Nlocal: 156 ave 156 max 156 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/mofff/log.17Jan18.hkust1_long.g++.1 b/examples/USER/mofff/log.27Nov18.hkust1_long.g++.1 similarity index 96% rename from examples/USER/mofff/log.17Jan18.hkust1_long.g++.1 rename to examples/USER/mofff/log.27Nov18.hkust1_long.g++.1 index 8f5d33c067..d67c0a11c5 100644 --- a/examples/USER/mofff/log.17Jan18.hkust1_long.g++.1 +++ b/examples/USER/mofff/log.27Nov18.hkust1_long.g++.1 @@ -1,5 +1,7 @@ -LAMMPS (17 Jan 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task clear + using 1 OpenMP thread(s) per MPI task units real boundary p p p atom_style full @@ -120,9 +122,9 @@ special_bonds lj 0.0 0.0 1.0 coul 1.0 1.0 1.0 # ------------------------ MOF-FF FORCE FIELD END -------------------------- run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.267593 estimated absolute RMS force accuracy = 0.000333665 estimated relative force accuracy = 1.00482e-06 @@ -140,13 +142,13 @@ Neighbor list info ... pair build: half/bin/newton/tri stencil: half/bin/3d/newton/tri bin: standard -WARNING: Inconsistent image flags (../domain.cpp:786) +WARNING: Inconsistent image flags (src/domain.cpp:782) Per MPI rank memory allocation (min/avg/max) = 34.64 | 34.64 | 34.64 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -16541.109 343.7619 -16197.347 -629.64956 -Loop time of 9.53674e-07 on 1 procs for 0 steps with 624 atoms +Loop time of 1.19209e-06 on 1 procs for 0 steps with 624 atoms -0.0% CPU use with 1 MPI tasks x no OpenMP threads +167.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -158,7 +160,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 9.537e-07 | | |100.00 +Other | | 1.192e-06 | | |100.00 Nlocal: 624 ave 624 max 624 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/mofff/log.17Jan18.hkust1_long.g++.4 b/examples/USER/mofff/log.27Nov18.hkust1_long.g++.4 similarity index 96% rename from examples/USER/mofff/log.17Jan18.hkust1_long.g++.4 rename to examples/USER/mofff/log.27Nov18.hkust1_long.g++.4 index 8201f7da00..235db2fcda 100644 --- a/examples/USER/mofff/log.17Jan18.hkust1_long.g++.4 +++ b/examples/USER/mofff/log.27Nov18.hkust1_long.g++.4 @@ -1,5 +1,7 @@ -LAMMPS (17 Jan 2018) +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task clear + using 1 OpenMP thread(s) per MPI task units real boundary p p p atom_style full @@ -120,9 +122,9 @@ special_bonds lj 0.0 0.0 1.0 coul 1.0 1.0 1.0 # ------------------------ MOF-FF FORCE FIELD END -------------------------- run 0 -WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +WARNING: No fixes defined, atoms won't move (src/verlet.cpp:55) Ewald initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) G vector (1/distance) = 0.267593 estimated absolute RMS force accuracy = 0.000333665 estimated relative force accuracy = 1.00482e-06 @@ -140,13 +142,13 @@ Neighbor list info ... pair build: half/bin/newton/tri stencil: half/bin/3d/newton/tri bin: standard -WARNING: Inconsistent image flags (../domain.cpp:786) +WARNING: Inconsistent image flags (src/domain.cpp:782) Per MPI rank memory allocation (min/avg/max) = 34.1 | 34.1 | 34.1 Mbytes Step Temp E_pair E_mol TotEng Press 0 0 -16541.109 343.7619 -16197.347 -629.64956 -Loop time of 6.13928e-06 on 4 procs for 0 steps with 624 atoms +Loop time of 2.71797e-05 on 4 procs for 0 steps with 624 atoms -0.0% CPU use with 4 MPI tasks x no OpenMP threads +84.6% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total @@ -158,7 +160,7 @@ Neigh | 0 | 0 | 0 | 0.0 | 0.00 Comm | 0 | 0 | 0 | 0.0 | 0.00 Output | 0 | 0 | 0 | 0.0 | 0.00 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 6.139e-06 | | |100.00 +Other | | 2.718e-05 | | |100.00 Nlocal: 156 ave 156 max 156 min Histogram: 4 0 0 0 0 0 0 0 0 0 From ee98dc0b9630e5098e610ee90b30c0aa838bb06f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 06:11:30 -0500 Subject: [PATCH 257/273] step version number to 7 December 2018 --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index d6202f684a..6fcd5d1f49 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -27 Nov 2018 version :c,h2 +7 Dec 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index d907ef2b85..4bbc739421 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "27 Nov 2018" +#define LAMMPS_VERSION "7 Dec 2018" From 0244841b27be674e602f7db858d5a7c75a43a0d9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 06:15:03 -0500 Subject: [PATCH 258/273] auto-request a review from @sjplimp when the LAMMPS version is updated --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7aab6bef92..7d1f1a417b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -126,3 +126,6 @@ python/* @rbberger doc/utils/*/* @rbberger doc/Makefile @rbberger doc/README @rbberger + +# for releases +src/version.h @sjplimp From 4a4dbc7da5e728efaf3d5a2c84d568be81512e7d Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 7 Dec 2018 12:49:00 +0000 Subject: [PATCH 259/273] Added further instructions on building of PLUMED+LAMMPS --- doc/src/Build_extras.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index c35418ae5f..9841acd1f6 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -763,6 +763,11 @@ a global PLUMED installation or consider downloading PLUMED during the LAMMPS bu [CMake build]: +When the "-D PKG_USER-PLUMED" flag is included in the cmake command you must ensure that +gsl, blas and lapack are installed in locations that are specified in your environment. There +are then two additional commands that control the manner in which PLUMED is obtained and linked +into LAMMPS. + -D DOWNLOAD_PLUMED=value # download PLUMED for build, value = no (default) or yes -D PLUMED_MODE=value # Linkage mode for PLUMED, value = static (default), shared, or runtime :pre From a30e1b2670fe6a3af5e441807612cfea21e2160b Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 7 Dec 2018 06:10:29 -0700 Subject: [PATCH 260/273] cmake: USER-PLUMED does not LAPACK anymore --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aa42ed9a87..7ee1b7f521 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -354,7 +354,7 @@ if(PKG_KSPACE) endif() endif() -if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE OR PKG_USER-PLUMED) +if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) find_package(LAPACK) find_package(BLAS) if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) @@ -569,7 +569,7 @@ if(PKG_USER-PLUMED) if(PLUMED_MODE STREQUAL "STATIC") add_definitions(-D__PLUMED_WRAPPER_CXX=1) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o - "${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o" ${GSL_LIBRARIES} ${CMAKE_DL_LIBS} ${LAPACK_LIBRARIES}) + "${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o" ${GSL_LIBRARIES} ${CMAKE_DL_LIBS}) elseif(PLUMED_MODE STREQUAL "SHARED") list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${CMAKE_DL_LIBS}) elseif(PLUMED_MODE STREQUAL "RUNTIME") From 1bd81db9b3f569ca498a17586293ab0e1e8de9aa Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 7 Dec 2018 15:15:35 +0000 Subject: [PATCH 261/273] Fixed spelling mistakes --- doc/src/Build_extras.txt | 2 +- doc/src/fix_plumed.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 9841acd1f6..273b6b11df 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -764,7 +764,7 @@ a global PLUMED installation or consider downloading PLUMED during the LAMMPS bu [CMake build]: When the "-D PKG_USER-PLUMED" flag is included in the cmake command you must ensure that -gsl, blas and lapack are installed in locations that are specified in your environment. There +GSL, BLAS and LAPACK are installed in locations that are specified in your environment. There are then two additional commands that control the manner in which PLUMED is obtained and linked into LAMMPS. diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index 1f548d11ea..eff6c88327 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -54,8 +54,8 @@ have been set. The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED and there can only be one instance of the plumed fix at a -time. The way the plumed fix is implmented ensures that the minimum amount of information -required is communicated. Furthremore, PLUMED supports multiple, completely independent +time. The way the plumed fix is implemented ensures that the minimum amount of information +required is communicated. Furthermore, PLUMED supports multiple, completely independent collective variables, multiple independent biases and multiple independent forms of analysis. There is thus really no restriction in functionality by only allowing only one plumed fix in the LAMMPS input. From 29dcf8348b8636d66c1ec9502e8d5522b3f37afe Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Fri, 7 Dec 2018 15:16:40 +0000 Subject: [PATCH 262/273] No longer require LAPACK and BLAS to compile PLUMED+LAMMPS so removed this statement from docs --- doc/src/Build_extras.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 273b6b11df..99d52c29e4 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -764,7 +764,7 @@ a global PLUMED installation or consider downloading PLUMED during the LAMMPS bu [CMake build]: When the "-D PKG_USER-PLUMED" flag is included in the cmake command you must ensure that -GSL, BLAS and LAPACK are installed in locations that are specified in your environment. There +GSL is installed in locations that are specified in your environment. There are then two additional commands that control the manner in which PLUMED is obtained and linked into LAMMPS. From 998a5121433727765f7a42f2ddaf0fd573e43d5e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 10:19:34 -0500 Subject: [PATCH 263/273] update log files for USER-UEF --- .../npt_biaxial/log.22Sep17.npt_biaxial.g++.1 | 284 ----------------- .../npt_biaxial/log.22Sep17.npt_biaxial.g++.4 | 284 ----------------- .../npt_biaxial/log.27Nov18.npt_biaxial.g++.1 | 285 ++++++++++++++++++ .../npt_biaxial/log.27Nov18.npt_biaxial.g++.4 | 285 ++++++++++++++++++ .../log.22Sep17.npt_uniaxial.g++.1 | 281 ----------------- .../log.22Sep17.npt_uniaxial.g++.4 | 281 ----------------- .../log.27Nov18.nvt_uniaxial.g++.1 | 282 +++++++++++++++++ .../log.27Nov18.nvt_uniaxial.g++.4 | 282 +++++++++++++++++ 8 files changed, 1134 insertions(+), 1130 deletions(-) delete mode 100644 examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.1 delete mode 100644 examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.4 create mode 100644 examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.1 create mode 100644 examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.4 delete mode 100644 examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.1 delete mode 100644 examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.4 create mode 100644 examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.1 create mode 100644 examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.4 diff --git a/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.1 b/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.1 deleted file mode 100644 index e6d3b30cdb..0000000000 --- a/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.1 +++ /dev/null @@ -1,284 +0,0 @@ -LAMMPS (22 Sep 2017) -# biaxial NPT deformation of WCA fluid - -units lj -atom_style atomic - - -pair_style lj/cut 1.122562 -read_data data.wca - orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 500 atoms - reading velocities ... - 500 velocities -pair_coeff 1 1 1.0 1.0 -pair_modify shift yes - -neighbor 0.5 bin -neigh_modify delay 0 - -change_box all triclinic - triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) - -# these commads show the different methods that may be used to impose -# a constant stress through isotropic or anisotropic coupling -fix 1 all npt/uef temp 0.722 0.722 0.5 iso 10 10 5 erate 0.5 0.5 ext z -#fix 1 all npt/uef temp 0.722 0.722 0.5 z 10 10 5 erate 0.5 0.5 ext xyz - -fix 2 all momentum 100 linear 1 1 1 - -#dump 1 all atom 25 dump.lammpstrj - -#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs - -thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] - -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.62256 - ghost atom cutoff = 1.62256 - binsize = 0.811281, bins = 11 11 11 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton/tri - stencil: half/bin/3d/newton/tri - bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.742 | 2.742 | 2.742 Mbytes -Step c_1_press[1] c_1_press[2] c_1_press[3] - 0 6.3937851 7.0436438 6.4461087 - 50 7.9020345 7.303289 14.733929 - 100 8.3214325 8.385843 13.166247 - 150 5.7168419 5.6083988 9.7224198 - 200 3.8875348 4.0840705 7.9912973 - 250 4.2933724 4.2410519 7.7200953 - 300 4.5452314 4.2434949 8.6709832 - 350 5.446489 5.6166962 11.300536 - 400 6.0682558 5.7787878 12.106852 - 450 5.3884296 5.5066688 9.9100012 - 500 4.8046418 4.7115986 9.9769201 - 550 4.9043933 4.6240966 9.319336 - 600 4.6843238 4.9571246 9.5325487 - 650 5.1952989 5.195648 9.6187047 - 700 5.4163364 5.2938289 10.136655 - 750 5.6723178 5.0670261 11.415221 - 800 5.9379901 5.6402916 10.815209 - 850 5.0695389 5.3021432 10.742859 - 900 4.6498962 4.7111912 9.8453523 - 950 4.4811641 5.170132 9.421765 - 1000 4.7501483 4.2420772 9.3510803 - 1050 4.5973379 5.2046799 9.8632975 - 1100 4.7879562 4.9051316 9.8658626 - 1150 5.0528771 5.5048545 10.110913 - 1200 4.9926563 5.2482081 9.9610863 - 1250 4.8476232 4.8498859 9.5752989 - 1300 5.2932038 5.0594534 10.869545 - 1350 5.4720421 5.0830442 10.69386 - 1400 4.8175566 4.9863651 10.041898 - 1450 4.6307145 4.5615459 9.231299 - 1500 5.0296259 4.5433558 8.7180513 - 1550 4.8708444 5.1601014 10.256791 - 1600 5.5098593 5.316773 10.224386 - 1650 5.5055907 5.0516814 10.272037 - 1700 4.6965552 5.2436628 9.8272905 - 1750 5.0212307 4.740601 8.9738802 - 1800 4.7756351 5.199734 9.9929449 - 1850 4.7107092 5.177203 10.580427 - 1900 5.0935608 4.5286844 9.3036832 - 1950 4.8035855 4.894359 9.4423987 - 2000 4.5643937 4.7480477 9.4384251 - 2050 4.9314701 4.990414 10.151815 - 2100 5.9828824 5.8188026 12.262691 - 2150 5.5337303 5.4598468 10.136112 - 2200 4.892172 4.8699674 9.1629905 - 2250 4.5680591 4.5740533 9.5633545 - 2300 5.0023535 4.3948659 8.9645774 - 2350 5.2533056 4.9803884 10.255653 - 2400 5.3330196 5.3888322 10.021617 - 2450 5.2095527 4.8765336 10.135381 - 2500 5.221153 5.2974568 10.2493 - 2550 5.385331 5.0801192 10.490479 - 2600 5.3274988 5.0253548 10.147587 - 2650 4.718677 5.2710337 9.7549521 - 2700 4.5811521 4.6083971 8.1923164 - 2750 4.4743752 4.3319737 8.8690805 - 2800 5.0215013 5.2262961 9.8627954 - 2850 6.1005107 5.5994942 11.170661 - 2900 5.9673524 5.362124 10.401699 - 2950 5.5400849 5.7523993 10.292536 - 3000 4.9202636 5.1210431 10.125839 - 3050 4.5286487 5.3586164 9.8634322 - 3100 4.5719961 5.1615414 9.8027972 - 3150 5.4091919 4.8581943 9.96938 - 3200 5.522125 5.3564838 9.7638407 - 3250 4.9019062 5.2514758 9.2993079 - 3300 5.2375918 5.1439012 9.4313575 - 3350 4.750235 4.8692016 10.54193 - 3400 5.5793211 5.4184157 11.021389 - 3450 4.9022614 5.3166498 9.4629659 - 3500 4.6348617 4.4650979 9.0665548 - 3550 4.7922405 4.8961269 10.255446 - 3600 4.8914457 5.1158894 9.4736084 - 3650 5.062771 4.6725475 10.263484 - 3700 5.4842823 5.7793971 10.342915 - 3750 5.3136012 5.063065 10.398307 - 3800 4.9372149 4.9270414 9.5304748 - 3850 5.2144752 5.1716455 9.7575725 - 3900 5.0892665 5.1697057 9.918052 - 3950 5.1124507 5.354702 9.791366 - 4000 5.1255084 5.1143653 10.913101 - 4050 5.1891698 4.9913681 9.6871728 - 4100 4.7663368 4.2435014 8.3815668 - 4150 4.8060033 4.3415868 9.6553386 - 4200 4.8548303 4.8006768 9.5995801 - 4250 5.0976366 5.2683175 10.386444 - 4300 5.8921937 5.5134696 10.788143 - 4350 5.8323871 5.5255869 11.199128 - 4400 5.2464655 5.0005905 10.311055 - 4450 4.9264849 5.2499854 10.26702 - 4500 4.4431895 4.536981 8.7489096 - 4550 4.5180914 4.2080277 8.6525529 - 4600 5.1782188 5.1224059 10.683341 - 4650 5.4156233 4.8714464 10.473939 - 4700 5.3107669 5.224614 10.569391 - 4750 4.9538022 5.2509475 10.288918 - 4800 4.6976945 4.8107142 9.8299772 - 4850 5.1227936 5.0737571 10.440452 - 4900 4.7580514 4.6375995 9.1971008 - 4950 5.0647601 4.6470735 9.583131 - 5000 5.196231 5.7531491 10.409807 - 5050 5.6691323 5.7163652 12.335701 - 5100 5.3603738 5.4887106 10.961712 - 5150 4.455028 4.6494465 9.8096968 - 5200 4.7596912 4.4804896 9.3762885 - 5250 5.3144927 5.0113772 9.553101 - 5300 5.3445266 4.8262035 9.1220802 - 5350 5.1540657 5.5982676 10.765178 - 5400 5.1773418 5.2684381 10.452351 - 5450 4.8946859 5.3283747 9.8015564 - 5500 5.2009608 4.7183522 9.4558009 - 5550 5.4158589 5.5005458 10.539505 - 5600 4.7196831 5.4181991 9.6439249 - 5650 4.8333571 4.8601728 8.9350189 - 5700 5.4395698 4.9730096 10.669681 - 5750 5.2947443 5.6973259 10.020539 - 5800 5.4391993 5.5255143 10.264969 - 5850 4.9921388 5.2643827 10.217028 - 5900 5.0048643 4.7952641 8.9718929 - 5950 5.1843818 4.5987295 9.6858944 - 6000 5.0343993 4.946933 9.7436708 - 6050 4.6202714 5.3502658 10.752915 - 6100 5.6914422 5.3621964 10.281827 - 6150 5.1928763 5.9652686 10.923881 - 6200 5.0030409 5.2013891 10.056308 - 6250 4.9699876 5.2363753 9.9964211 - 6300 4.9129606 4.4558458 9.0419952 - 6350 4.6623958 4.4078264 8.528649 - 6400 4.9811441 5.1183207 10.261751 - 6450 5.3644017 5.5153937 10.401295 - 6500 5.6674981 5.7427566 11.928777 - 6550 5.1622364 5.3212928 10.067198 - 6600 4.5954278 5.1645397 10.16724 - 6650 4.9192712 5.0413326 9.95656 - 6700 4.6179845 4.5656214 9.3798952 - 6750 4.7287495 4.5071148 8.7890116 - 6800 4.8600442 4.8083512 10.245595 - 6850 5.0515531 5.1609272 10.553855 - 6900 5.1159742 5.1359869 10.594699 - 6950 4.8908884 5.0592418 9.5698704 - 7000 4.7654136 4.7530776 8.9439321 - 7050 4.779293 4.7534957 9.7244349 - 7100 5.2265831 5.6869073 10.32717 - 7150 5.4019177 5.15174 10.457567 - 7200 4.9817102 5.0596098 10.337574 - 7250 5.1836654 5.6065238 10.723108 - 7300 4.2916569 4.457143 8.5419099 - 7350 4.3906104 4.5439294 9.0805415 - 7400 4.998572 5.3386063 10.491418 - 7450 5.1109022 5.0506801 10.636116 - 7500 5.0248381 5.019932 10.217023 - 7550 5.0109265 5.1438717 9.9032426 - 7600 4.6628614 4.6204146 8.9459669 - 7650 4.8930717 5.0650009 10.049331 - 7700 4.9373454 5.6265835 10.210644 - 7750 5.5001067 5.3133253 10.667995 - 7800 5.0816102 5.0125753 10.591986 - 7850 4.9638046 5.1969015 9.9728333 - 7900 4.8438207 4.9217213 8.9978809 - 7950 4.7318805 4.6248537 8.6806596 - 8000 5.2808543 5.2892613 10.932535 - 8050 5.9609722 5.87087 10.47602 - 8100 5.2190231 5.6693244 11.244536 - 8150 5.3481127 5.2849903 10.222845 - 8200 4.7833053 4.7404657 9.2034474 - 8250 4.5461994 4.510467 10.294452 - 8300 4.6025175 4.8332817 8.7967546 - 8350 5.0389897 5.6642908 10.243402 - 8400 4.8414338 4.8925143 9.3653631 - 8450 5.5087429 4.7830361 10.831666 - 8500 5.2678146 5.1697789 9.9105782 - 8550 5.1211843 4.9097801 9.4165956 - 8600 5.8239149 5.0821022 10.803261 - 8650 5.3620154 5.5831747 11.16202 - 8700 5.1625813 4.8791404 10.537681 - 8750 4.5622461 5.0157549 10.013227 - 8800 4.4051517 5.0224553 9.6364273 - 8850 4.1711629 4.635617 8.5470244 - 8900 4.7049907 5.2458435 10.100728 - 8950 4.8568883 5.2360772 9.2306469 - 9000 5.0091899 5.2203574 10.718541 - 9050 5.1037824 4.9022451 10.24271 - 9100 5.0789015 4.9331454 9.173614 - 9150 5.3865455 5.3427553 11.40199 - 9200 5.5089482 5.9423232 10.976063 - 9250 5.1353552 5.0650262 10.040607 - 9300 4.6761948 4.9155175 9.6413722 - 9350 4.4780834 4.3934708 8.7049819 - 9400 4.2561799 4.7906324 9.046134 - 9450 5.6162819 5.2881846 9.9040868 - 9500 5.7554547 5.6111262 10.23849 - 9550 5.4230462 5.5656045 10.908006 - 9600 5.5045685 4.9818892 9.8929535 - 9650 5.0541481 5.0183351 9.5226021 - 9700 4.9712829 5.2395398 9.9996693 - 9750 5.0960017 5.4419775 10.914719 - 9800 5.0790688 5.6378474 10.00789 - 9850 4.9661747 5.114502 9.4585052 - 9900 5.0133498 4.7456254 9.4572653 - 9950 5.3318846 4.6643122 10.096292 - 10000 5.2227687 4.8924305 9.5894615 -Loop time of 4.78247 on 1 procs for 10000 steps with 500 atoms - -Performance: 903298.340 tau/day, 2090.968 timesteps/s -99.2% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.73894 | 0.73894 | 0.73894 | 0.0 | 15.45 -Neigh | 2.9092 | 2.9092 | 2.9092 | 0.0 | 60.83 -Comm | 0.32306 | 0.32306 | 0.32306 | 0.0 | 6.76 -Output | 0.003392 | 0.003392 | 0.003392 | 0.0 | 0.07 -Modify | 0.6959 | 0.6959 | 0.6959 | 0.0 | 14.55 -Other | | 0.112 | | | 2.34 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 905 ave 905 max 905 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3340 ave 3340 max 3340 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3340 -Ave neighs/atom = 6.68 -Neighbor list builds = 4580 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:04 diff --git a/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.4 b/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.4 deleted file mode 100644 index 9be4413a96..0000000000 --- a/examples/USER/uef/npt_biaxial/log.22Sep17.npt_biaxial.g++.4 +++ /dev/null @@ -1,284 +0,0 @@ -LAMMPS (22 Sep 2017) -# biaxial NPT deformation of WCA fluid - -units lj -atom_style atomic - - -pair_style lj/cut 1.122562 -read_data data.wca - orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 500 atoms - reading velocities ... - 500 velocities -pair_coeff 1 1 1.0 1.0 -pair_modify shift yes - -neighbor 0.5 bin -neigh_modify delay 0 - -change_box all triclinic - triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) - -# these commads show the different methods that may be used to impose -# a constant stress through isotropic or anisotropic coupling -fix 1 all npt/uef temp 0.722 0.722 0.5 iso 10 10 5 erate 0.5 0.5 ext z -#fix 1 all npt/uef temp 0.722 0.722 0.5 z 10 10 5 erate 0.5 0.5 ext xyz - -fix 2 all momentum 100 linear 1 1 1 - -#dump 1 all atom 25 dump.lammpstrj - -#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs - -thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] - -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.62256 - ghost atom cutoff = 1.62256 - binsize = 0.811281, bins = 11 11 11 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton/tri - stencil: half/bin/3d/newton/tri - bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.71 | 2.71 | 2.71 Mbytes -Step c_1_press[1] c_1_press[2] c_1_press[3] - 0 6.3937851 7.0436438 6.4461087 - 50 7.9020345 7.303289 14.733929 - 100 8.3214325 8.385843 13.166247 - 150 5.7168419 5.6083988 9.7224198 - 200 3.8875348 4.0840705 7.9912973 - 250 4.2933724 4.2410519 7.7200953 - 300 4.5452314 4.2434949 8.6709832 - 350 5.446489 5.6166962 11.300536 - 400 6.0682558 5.7787878 12.106852 - 450 5.3884296 5.5066688 9.9100012 - 500 4.8046418 4.7115986 9.9769201 - 550 4.9043933 4.6240966 9.319336 - 600 4.6843238 4.9571246 9.5325487 - 650 5.1952989 5.195648 9.6187047 - 700 5.4163364 5.2938289 10.136655 - 750 5.6723178 5.0670261 11.415221 - 800 5.9379901 5.6402916 10.815209 - 850 5.0695389 5.3021432 10.742859 - 900 4.6498961 4.7111912 9.8453524 - 950 4.4811637 5.1701321 9.4217645 - 1000 4.750149 4.2420768 9.3510788 - 1050 4.5973376 5.2046787 9.8633025 - 1100 4.7879517 4.9051339 9.8658578 - 1150 5.0528775 5.5048671 10.110905 - 1200 4.9926841 5.2482049 9.9610519 - 1250 4.8475836 4.8499116 9.5753651 - 1300 5.2930219 5.0593566 10.869335 - 1350 5.4722342 5.0830411 10.693439 - 1400 4.8165803 4.9851498 10.04213 - 1450 4.6276458 4.5642988 9.2306141 - 1500 5.0196773 4.5470773 8.7204145 - 1550 4.878246 5.1583406 10.263895 - 1600 5.4921049 5.3126759 10.274755 - 1650 5.4363266 5.1708866 9.9880665 - 1700 4.9186005 5.2841155 9.5911223 - 1750 4.9105668 4.7112031 8.9221295 - 1800 4.9833291 4.886821 9.6573393 - 1850 5.0729703 4.8331712 10.094971 - 1900 5.7220173 5.9330299 10.580261 - 1950 5.3176022 5.7140521 11.11604 - 2000 5.3247727 5.5172893 10.622834 - 2050 5.2055235 4.8768078 9.9819356 - 2100 4.4604981 4.1427844 7.8106592 - 2150 4.4406592 4.8264893 9.6662695 - 2200 5.2350836 5.1039145 10.36006 - 2250 5.3777857 5.3274609 11.357157 - 2300 5.4888334 5.9555482 10.76346 - 2350 4.6122564 4.7356468 9.0833059 - 2400 4.6670237 4.4895588 9.0619648 - 2450 4.2201177 4.2558397 9.4898835 - 2500 5.452448 5.4336384 10.50224 - 2550 5.012581 5.316158 10.324517 - 2600 5.0880279 5.1264772 10.085103 - 2650 4.8885834 5.2368982 9.6002032 - 2700 5.1549266 5.3419678 11.335447 - 2750 5.497105 5.3643445 9.9990393 - 2800 4.8826744 4.9875712 10.125435 - 2850 4.8617121 5.1282348 9.5629401 - 2900 4.7883446 4.6187804 9.0562496 - 2950 4.7656266 5.1293592 10.693811 - 3000 5.2676745 5.110172 9.3512146 - 3050 4.5749222 4.8413907 10.311305 - 3100 5.0794819 5.265009 9.1598496 - 3150 5.2078869 5.1879882 10.412548 - 3200 5.0187616 4.6226213 9.7266174 - 3250 5.1541897 4.5157063 9.8355764 - 3300 5.0721396 5.3545282 10.174356 - 3350 5.3984495 5.3222207 10.008886 - 3400 5.1263226 5.1189192 10.361534 - 3450 5.1251845 4.8312752 9.6546597 - 3500 5.1133696 5.2646289 10.320765 - 3550 4.9884235 5.3861707 9.1944042 - 3600 5.196909 5.203186 10.085965 - 3650 5.4717592 5.2205442 10.251283 - 3700 5.4429771 5.3027898 11.385714 - 3750 5.5688484 5.5980199 10.558193 - 3800 4.5239453 4.7021545 8.952588 - 3850 4.6438079 4.6409958 9.3890154 - 3900 5.1108473 4.8787691 10.665694 - 3950 5.6398426 5.4386578 10.668189 - 4000 5.063697 4.9663173 10.513266 - 4050 4.8770847 4.4603573 9.8101845 - 4100 4.3950768 4.3579384 8.3402845 - 4150 4.3355402 5.0429352 10.323111 - 4200 4.7688478 5.051487 9.0632339 - 4250 4.9879366 5.3367146 10.409554 - 4300 5.4578199 5.4889206 10.418789 - 4350 5.6598068 5.4538572 10.842349 - 4400 5.3705312 5.3796871 10.430547 - 4450 4.663804 5.058851 9.2705923 - 4500 4.3439039 4.3523422 8.1747925 - 4550 4.5414802 4.3750772 9.2702452 - 4600 4.9216199 5.2897069 10.747727 - 4650 5.5154852 5.9628437 10.5168 - 4700 5.45199 5.382787 10.654544 - 4750 4.7525419 5.4701385 9.3189378 - 4800 5.3696365 4.6134207 9.4455676 - 4850 5.2444123 5.035993 9.4148435 - 4900 5.6006507 4.8536828 10.283579 - 4950 5.155711 4.978634 10.58973 - 5000 5.0854607 4.9853307 9.2414296 - 5050 5.1098462 4.7349164 9.8739001 - 5100 5.1989395 5.0217416 9.8780949 - 5150 5.612116 5.2165007 10.338464 - 5200 5.0571356 5.3109846 10.685262 - 5250 5.4832657 5.0371665 8.9420853 - 5300 4.5312549 4.9629392 8.2478064 - 5350 5.1617038 5.0533699 10.452218 - 5400 5.7873394 5.6776926 11.926526 - 5450 5.7002516 5.243239 10.940265 - 5500 4.7896799 4.898544 10.163856 - 5550 4.9155627 4.9567495 9.4445476 - 5600 4.2447343 4.5045912 8.7732992 - 5650 5.070197 4.7343938 9.9908239 - 5700 4.9609446 5.0901934 10.812786 - 5750 5.4001631 5.5552888 10.085896 - 5800 5.4209837 4.7153245 9.6865245 - 5850 4.9801041 5.180338 9.8930439 - 5900 5.3423595 5.2341361 10.294159 - 5950 5.683047 5.6830131 10.24313 - 6000 5.0618789 5.4533644 10.713412 - 6050 5.4034888 4.6341621 10.031976 - 6100 5.1934299 4.7525347 9.1287151 - 6150 5.0092398 4.806931 10.024305 - 6200 5.3046516 5.3083532 9.6396223 - 6250 5.2824046 4.7957557 10.305279 - 6300 5.3007029 5.0071874 11.175322 - 6350 5.1128883 4.990408 9.3439118 - 6400 5.0543602 4.9971378 9.8259954 - 6450 4.8843692 4.9116343 10.08132 - 6500 4.5966453 4.8042861 9.160272 - 6550 4.8510961 4.7096646 9.8009968 - 6600 5.658307 5.2330511 10.739519 - 6650 5.2374409 5.3241249 10.291779 - 6700 4.9006975 5.0036186 9.9872029 - 6750 5.2209104 5.1826025 9.5671875 - 6800 4.5238727 4.3070529 8.6072303 - 6850 4.2617247 4.7551571 9.7302077 - 6900 5.6499354 4.8714257 10.723511 - 6950 5.6881769 5.1800721 10.18134 - 7000 5.588834 5.0104896 10.304105 - 7050 4.9404045 4.8589121 9.7096741 - 7100 5.2208179 4.9339808 9.7737491 - 7150 5.4507842 5.046485 10.734783 - 7200 4.9737171 5.5760486 9.1627431 - 7250 4.5967409 4.750471 9.315832 - 7300 5.5147308 5.3202861 10.542679 - 7350 5.7730418 5.5363574 10.384376 - 7400 4.9879586 5.2837443 9.4485798 - 7450 5.1862431 4.8357842 10.017598 - 7500 5.4528245 5.1864957 10.941774 - 7550 5.4202434 5.1089468 10.128264 - 7600 4.8063537 4.8723653 9.0364984 - 7650 4.3144701 4.6148377 9.4939315 - 7700 4.9033831 5.5327473 9.9054613 - 7750 5.0693093 5.0768222 10.473081 - 7800 5.0591805 5.6009473 10.006225 - 7850 5.15269 5.468248 10.404619 - 7900 5.1971759 5.0615117 9.9614488 - 7950 4.9771238 4.886213 9.4730722 - 8000 4.7731123 5.1111433 9.9550597 - 8050 5.1655183 5.4432364 9.6649669 - 8100 5.4597006 5.4026039 11.631184 - 8150 5.3229643 5.4394219 9.9830611 - 8200 4.5420712 4.9359646 9.0121988 - 8250 4.5455108 4.3883996 10.304568 - 8300 5.219721 5.1571958 10.305462 - 8350 4.7291561 4.7391636 9.0768372 - 8400 5.3262934 5.8221591 11.065466 - 8450 4.7583026 5.2282086 10.291955 - 8500 4.9174536 4.5701979 10.140444 - 8550 4.459922 4.8293188 9.4438719 - 8600 4.7962584 4.5811071 9.5158666 - 8650 4.6097275 4.431952 9.4350505 - 8700 5.166554 5.2000584 11.162202 - 8750 5.2353596 5.1668944 10.829751 - 8800 5.3150111 4.9983333 9.8402224 - 8850 4.9571197 4.9196589 9.4880549 - 8900 4.902223 4.7539187 10.002425 - 8950 4.9531983 5.0517321 9.7838444 - 9000 5.4003802 4.9900303 10.550808 - 9050 4.9254643 5.0678701 10.24321 - 9100 4.9902263 4.9056928 9.0326566 - 9150 5.1003677 5.1555374 10.049056 - 9200 5.2358131 5.5834504 10.354698 - 9250 5.5781649 5.1188429 10.361369 - 9300 5.2100192 5.0737267 10.074694 - 9350 5.1462976 4.8010759 9.0279769 - 9400 5.0177693 5.4890092 10.03612 - 9450 5.2507957 5.541141 10.639854 - 9500 5.836784 4.9498236 10.288015 - 9550 5.4698183 5.8761209 10.979924 - 9600 5.0534023 5.0043428 10.436057 - 9650 4.3619773 4.5413125 9.047513 - 9700 4.3777508 4.7902251 8.9501908 - 9750 4.6851974 4.3152085 8.825764 - 9800 5.7312665 4.850913 10.247637 - 9850 6.2290614 5.5480801 10.934907 - 9900 6.0316892 6.1098926 11.562223 - 9950 5.6370814 5.3933342 11.148805 - 10000 4.6429923 5.0853156 9.4267693 -Loop time of 3.06414 on 4 procs for 10000 steps with 500 atoms - -Performance: 1409858.531 tau/day, 3263.561 timesteps/s -99.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.27954 | 0.30916 | 0.3866 | 8.1 | 10.09 -Neigh | 1.0657 | 1.129 | 1.2853 | 8.5 | 36.85 -Comm | 0.56334 | 0.80526 | 0.89816 | 15.6 | 26.28 -Output | 0.0032749 | 0.0041527 | 0.006541 | 2.1 | 0.14 -Modify | 0.6522 | 0.67016 | 0.69843 | 2.1 | 21.87 -Other | | 0.1464 | | | 4.78 - -Nlocal: 125 ave 130 max 122 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Nghost: 459.75 ave 470 max 448 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 837 ave 867 max 811 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 3348 -Ave neighs/atom = 6.696 -Neighbor list builds = 4589 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.1 b/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.1 new file mode 100644 index 0000000000..640a28f9b5 --- /dev/null +++ b/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.1 @@ -0,0 +1,285 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# biaxial NPT deformation of WCA fluid + +units lj +atom_style atomic + + +pair_style lj/cut 1.122562 +read_data data.wca + orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 500 atoms + reading velocities ... + 500 velocities +pair_coeff 1 1 1.0 1.0 +pair_modify shift yes + +neighbor 0.5 bin +neigh_modify delay 0 + +change_box all triclinic + triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) + +# these commads show the different methods that may be used to impose +# a constant stress through isotropic or anisotropic coupling +fix 1 all npt/uef temp 0.722 0.722 0.5 iso 10 10 5 erate 0.5 0.5 ext z +#fix 1 all npt/uef temp 0.722 0.722 0.5 z 10 10 5 erate 0.5 0.5 ext xyz + +fix 2 all momentum 100 linear 1 1 1 + +#dump 1 all atom 25 dump.lammpstrj + +#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs + +thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] + +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.62256 + ghost atom cutoff = 1.62256 + binsize = 0.811281, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.742 | 2.742 | 2.742 Mbytes +Step c_1_press[1] c_1_press[2] c_1_press[3] + 0 6.3937851 7.0436438 6.4461087 + 50 7.9021894 7.3034499 14.734246 + 100 8.3198606 8.3842654 13.16397 + 150 5.7076656 5.5982431 9.7076087 + 200 3.8796305 4.0770762 7.9770769 + 250 4.2919032 4.238322 7.7197548 + 300 4.5471904 4.2439152 8.6784073 + 350 5.4499339 5.6138035 11.342244 + 400 6.0971324 5.7822211 12.109875 + 450 5.3647873 5.5491216 10.23872 + 500 4.7330582 4.9093422 9.5012486 + 550 4.7299281 4.8129828 8.9138674 + 600 5.0292698 5.1135021 10.070768 + 650 5.1900397 5.5845625 11.350623 + 700 5.1727128 5.2582562 10.567787 + 750 4.9027287 5.191078 10.36931 + 800 4.388688 4.9604327 10.059407 + 850 4.5645376 5.0369956 9.0534539 + 900 4.5706965 4.6288161 9.4845585 + 950 4.7846561 4.9221506 9.3307162 + 1000 5.2833925 5.0190193 9.8590467 + 1050 5.1489396 5.2489756 10.687019 + 1100 5.7646259 5.602148 11.94447 + 1150 4.9866799 5.6939822 10.344135 + 1200 4.5833981 4.5773728 9.4777252 + 1250 4.7783135 4.9004848 9.2356004 + 1300 4.2398409 4.615078 8.7232141 + 1350 5.0506617 5.1063295 8.9250218 + 1400 5.7596032 5.6925832 11.16017 + 1450 5.7463278 5.8799898 11.91113 + 1500 5.4673173 5.8848951 11.6597 + 1550 5.0514131 5.1189654 10.546707 + 1600 4.9176147 4.1974593 8.7559871 + 1650 4.7931674 4.0362562 9.2200844 + 1700 4.7777009 4.60455 9.3914386 + 1750 4.9917958 4.7710286 10.165995 + 1800 5.2878704 5.5858079 11.379962 + 1850 5.4762341 5.3559539 10.721841 + 1900 4.6136909 4.5841745 9.7970945 + 1950 4.6842216 4.6974096 9.4870028 + 2000 5.184473 4.9322483 9.8842281 + 2050 4.5704007 4.8389652 9.6076323 + 2100 4.731755 5.1286396 9.6765813 + 2150 4.9627984 5.2100464 10.411354 + 2200 5.5505018 5.2407864 10.814884 + 2250 5.1845435 5.3669868 10.41897 + 2300 4.7670519 5.0308883 9.2387629 + 2350 4.9576226 4.8044307 10.012093 + 2400 4.8229281 5.4438547 10.382479 + 2450 5.248646 5.0912182 9.6595448 + 2500 4.5705024 5.2219593 9.7339159 + 2550 4.8641037 4.8403069 10.837472 + 2600 4.992522 4.9890222 10.285939 + 2650 5.0975741 4.8716384 9.1436874 + 2700 5.0915762 4.8597862 10.084163 + 2750 5.2367693 5.3621151 9.0409101 + 2800 5.622419 5.0745161 10.864692 + 2850 5.4124822 5.1270063 10.529586 + 2900 4.9512714 4.9771705 10.399134 + 2950 4.9086056 5.0481759 10.175282 + 3000 4.7222615 4.9375912 9.9580179 + 3050 4.5538609 4.3906993 8.8014332 + 3100 4.5597935 4.8460914 9.0447372 + 3150 4.5797444 4.9881963 8.9865982 + 3200 5.344343 5.9378413 10.300797 + 3250 5.7394225 5.729666 10.393771 + 3300 5.7241388 5.6422002 11.420378 + 3350 5.7371735 5.5517544 10.421863 + 3400 4.7912531 5.1087978 10.044837 + 3450 4.7552647 5.1176239 9.4485297 + 3500 4.6004309 4.3453595 8.9125932 + 3550 4.9184353 5.1436174 9.7470471 + 3600 5.1448379 5.4587206 10.165912 + 3650 5.6421488 4.7860491 10.10303 + 3700 5.3222064 4.9006491 9.5460889 + 3750 5.092313 5.2169901 9.9356306 + 3800 4.9801751 5.5561465 10.128499 + 3850 5.3094304 5.3782291 10.264236 + 3900 5.3126758 5.188821 11.351077 + 3950 4.8915881 5.1644345 10.288019 + 4000 4.5416371 4.6946129 9.3622014 + 4050 4.5022234 4.4690638 10.012634 + 4100 4.4299746 4.7336989 9.3569727 + 4150 4.7581629 4.8536378 9.0409304 + 4200 4.9710073 5.1630615 10.407298 + 4250 5.6374144 5.4881368 10.247062 + 4300 5.1408355 5.2940493 10.43495 + 4350 5.3459236 6.1022236 11.70019 + 4400 4.969296 5.3035229 9.0524362 + 4450 4.6229598 4.8806514 8.8791459 + 4500 4.9518994 4.9395758 9.7992747 + 4550 4.7885188 5.4827408 10.569473 + 4600 5.1209124 5.1413191 9.96529 + 4650 4.642043 4.6618949 10.76236 + 4700 5.1144846 5.499524 9.8381957 + 4750 4.8799532 5.3405099 10.623812 + 4800 4.6075583 4.9659041 9.7525443 + 4850 4.5846434 4.5795043 8.9731754 + 4900 4.9225237 4.7748458 9.9316644 + 4950 4.9244884 5.2020183 10.120389 + 5000 5.6517752 5.2456778 10.778682 + 5050 5.690954 5.93441 11.019793 + 5100 5.414263 4.9849471 10.286106 + 5150 4.6403857 4.6021283 8.6873358 + 5200 4.4356878 4.8433705 9.0391816 + 5250 4.9737985 4.587079 9.9192911 + 5300 5.8002123 5.311289 10.44249 + 5350 5.307608 5.2150013 10.758409 + 5400 5.5956239 5.7062478 10.239561 + 5450 4.9762354 4.8541637 9.5752211 + 5500 4.4187604 4.8494725 9.4936376 + 5550 4.8266999 4.8436252 9.8148366 + 5600 5.0972098 5.3722443 9.5084475 + 5650 5.6753757 5.5321731 11.580265 + 5700 5.4238765 5.7052353 10.573799 + 5750 4.971213 4.7631056 10.309824 + 5800 4.5834127 4.6186465 8.6771163 + 5850 4.5848316 4.6314011 9.304245 + 5900 4.9686648 4.9363314 9.20327 + 5950 5.5225484 5.4699081 9.8202357 + 6000 5.1154967 5.4159103 11.365369 + 6050 6.2280757 5.9528656 10.896266 + 6100 4.9952626 4.8579703 9.9255705 + 6150 4.9072665 4.9180355 9.3070012 + 6200 4.9980254 4.6451563 9.6882833 + 6250 4.9274701 4.843916 9.248074 + 6300 4.7151735 4.8269527 10.215966 + 6350 5.3385638 4.9034159 10.242033 + 6400 5.1869704 5.1267673 9.3800463 + 6450 5.1033726 4.7937297 9.8448947 + 6500 5.5449526 5.2691074 10.689638 + 6550 5.2074561 5.060495 9.6009695 + 6600 5.0396844 5.1516197 9.8904407 + 6650 5.1593731 5.4506319 10.462558 + 6700 4.5221329 4.5495865 8.9180743 + 6750 4.5110386 4.5741907 9.3171993 + 6800 4.7533826 4.876553 9.7084497 + 6850 5.0605867 4.973688 9.662081 + 6900 5.2087631 5.1959274 10.13267 + 6950 5.6362175 5.6963964 11.29584 + 7000 5.576673 5.9467144 11.050861 + 7050 5.0264206 5.2946524 9.6572419 + 7100 4.3402188 4.5108706 10.089382 + 7150 4.3936062 4.7647229 10.059301 + 7200 4.4855959 4.8454956 8.7993639 + 7250 4.6376839 4.510911 9.34682 + 7300 5.1789012 5.5962982 9.8488588 + 7350 5.1642017 5.7861968 11.256613 + 7400 5.579834 5.4968053 10.458099 + 7450 5.149371 5.1220487 10.334194 + 7500 4.8048448 5.3089412 9.5345436 + 7550 4.2194278 4.6923534 8.8959444 + 7600 4.6725406 5.0908615 10.476709 + 7650 5.4411341 6.0356547 9.8581093 + 7700 5.4495963 4.9208089 10.165184 + 7750 5.0399074 5.1009352 9.9838045 + 7800 5.5620123 5.44628 11.417925 + 7850 4.9256715 4.8516742 9.6209317 + 7900 4.5979669 4.4223413 9.3118322 + 7950 4.7917041 4.1972832 9.5471092 + 8000 5.1301858 4.9674852 10.424156 + 8050 5.748976 5.406546 10.373017 + 8100 5.3810447 5.4890332 10.586819 + 8150 4.9586471 5.4037102 9.9944559 + 8200 4.8044905 4.9263889 9.8245965 + 8250 5.1890626 4.8840094 9.7558687 + 8300 5.1432598 4.9320019 9.5772204 + 8350 5.4751159 5.4465332 10.829543 + 8400 5.2404265 5.8728396 10.05644 + 8450 4.4832074 4.4327489 8.9569293 + 8500 4.7544224 4.8037462 9.8855364 + 8550 5.4523169 5.2905182 9.1832957 + 8600 5.263837 5.5303415 10.025825 + 8650 5.9855618 5.8626459 10.979494 + 8700 5.5999724 6.0400058 10.170144 + 8750 4.9578968 5.5337422 10.757767 + 8800 4.9516411 5.0981136 10.107278 + 8850 5.3097468 4.8852969 9.7556365 + 8900 4.9022802 4.5332799 9.9128314 + 8950 4.5798287 4.9654454 9.3983545 + 9000 4.6863328 4.6733925 9.2061315 + 9050 5.3305895 5.1208488 10.303653 + 9100 5.2508029 4.9931355 10.111519 + 9150 5.8456247 5.4272407 11.050285 + 9200 5.5908453 4.9848894 10.085967 + 9250 5.1045049 5.2151002 9.4749781 + 9300 5.0960954 5.135387 10.252554 + 9350 5.2143619 5.011559 10.041876 + 9400 5.0022922 4.999297 9.9435905 + 9450 4.5307558 4.8357118 9.2329515 + 9500 5.2777602 4.9195148 9.6776364 + 9550 5.4997839 5.5573251 10.338272 + 9600 5.4457202 5.0366677 10.150373 + 9650 4.8065991 4.8888395 9.4042123 + 9700 4.6046806 4.9965077 10.156526 + 9750 5.3833033 5.329118 10.51264 + 9800 5.1963178 4.9792777 10.438061 + 9850 5.3142717 5.2298222 10.296422 + 9900 4.918227 5.1840342 9.0013389 + 9950 4.5248956 4.7735581 8.9338178 + 10000 5.3267032 4.9182263 10.19245 +Loop time of 3.73058 on 1 procs for 10000 steps with 500 atoms + +Performance: 1157997.888 tau/day, 2680.551 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.52144 | 0.52144 | 0.52144 | 0.0 | 13.98 +Neigh | 2.2369 | 2.2369 | 2.2369 | 0.0 | 59.96 +Comm | 0.24337 | 0.24337 | 0.24337 | 0.0 | 6.52 +Output | 0.0015652 | 0.0015652 | 0.0015652 | 0.0 | 0.04 +Modify | 0.64512 | 0.64512 | 0.64512 | 0.0 | 17.29 +Other | | 0.0822 | | | 2.20 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 912 ave 912 max 912 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3370 ave 3370 max 3370 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3370 +Ave neighs/atom = 6.74 +Neighbor list builds = 4581 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:03 diff --git a/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.4 b/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.4 new file mode 100644 index 0000000000..65919b8955 --- /dev/null +++ b/examples/USER/uef/npt_biaxial/log.27Nov18.npt_biaxial.g++.4 @@ -0,0 +1,285 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# biaxial NPT deformation of WCA fluid + +units lj +atom_style atomic + + +pair_style lj/cut 1.122562 +read_data data.wca + orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 500 atoms + reading velocities ... + 500 velocities +pair_coeff 1 1 1.0 1.0 +pair_modify shift yes + +neighbor 0.5 bin +neigh_modify delay 0 + +change_box all triclinic + triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) + +# these commads show the different methods that may be used to impose +# a constant stress through isotropic or anisotropic coupling +fix 1 all npt/uef temp 0.722 0.722 0.5 iso 10 10 5 erate 0.5 0.5 ext z +#fix 1 all npt/uef temp 0.722 0.722 0.5 z 10 10 5 erate 0.5 0.5 ext xyz + +fix 2 all momentum 100 linear 1 1 1 + +#dump 1 all atom 25 dump.lammpstrj + +#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs + +thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] + +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.62256 + ghost atom cutoff = 1.62256 + binsize = 0.811281, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.71 | 2.71 | 2.71 Mbytes +Step c_1_press[1] c_1_press[2] c_1_press[3] + 0 6.3937851 7.0436438 6.4461087 + 50 7.9021894 7.3034499 14.734246 + 100 8.3198606 8.3842654 13.16397 + 150 5.7076656 5.5982431 9.7076087 + 200 3.8796305 4.0770762 7.9770769 + 250 4.2919032 4.238322 7.7197548 + 300 4.5471904 4.2439152 8.6784073 + 350 5.4499339 5.6138035 11.342244 + 400 6.0971324 5.7822211 12.109875 + 450 5.3647873 5.5491216 10.23872 + 500 4.7330582 4.9093422 9.5012486 + 550 4.7299281 4.8129828 8.9138674 + 600 5.0292698 5.1135021 10.070768 + 650 5.1900397 5.5845625 11.350623 + 700 5.1727128 5.2582562 10.567787 + 750 4.9027287 5.191078 10.36931 + 800 4.388688 4.9604327 10.059407 + 850 4.5645375 5.0369956 9.053454 + 900 4.5706968 4.6288162 9.4845589 + 950 4.7846558 4.9221509 9.3307157 + 1000 5.2833916 5.0190189 9.8590443 + 1050 5.1489424 5.2489801 10.687018 + 1100 5.7646249 5.6021408 11.944487 + 1150 4.9866349 5.6939763 10.344098 + 1200 4.5834696 4.5773711 9.4777656 + 1250 4.7782628 4.9003931 9.2354794 + 1300 4.2398086 4.6156458 8.7235594 + 1350 5.0516664 5.106151 8.925344 + 1400 5.7599281 5.693153 11.161569 + 1450 5.74929 5.8792255 11.905985 + 1500 5.4770201 5.8663899 11.634664 + 1550 5.0842872 5.0979505 10.526591 + 1600 4.8431505 4.2339226 8.7429902 + 1650 4.733907 4.1990477 9.0573593 + 1700 5.2670297 4.8937733 9.5161206 + 1750 5.0933882 5.0840957 10.003455 + 1800 5.0762036 5.3282866 10.370587 + 1850 5.5253602 5.8193463 11.162205 + 1900 4.9830867 5.1984155 9.9505494 + 1950 5.0833879 5.0020521 9.4919371 + 2000 5.1066344 5.1579719 9.8668875 + 2050 5.3988406 5.5046098 10.419135 + 2100 5.2433191 5.1605828 10.335759 + 2150 4.9353676 4.3373911 9.6748317 + 2200 4.5278686 4.7876115 10.186293 + 2250 5.3058781 5.1020131 10.807037 + 2300 5.3049465 5.4198068 9.4589098 + 2350 4.9691623 4.6449463 9.6883654 + 2400 5.0591959 4.6871509 10.501085 + 2450 5.6485626 5.7934938 10.40336 + 2500 4.8529542 4.8645589 9.7522638 + 2550 4.6185478 4.6833643 9.9536174 + 2600 5.3007332 5.5198106 9.9052474 + 2650 5.0990987 5.1565356 10.46545 + 2700 4.7312547 4.9440008 9.8533728 + 2750 5.1788563 5.2765759 10.151495 + 2800 4.9110276 4.7663836 9.1840513 + 2850 5.2237628 5.1726783 11.249313 + 2900 5.2809505 5.5441058 10.201093 + 2950 5.3076988 5.6051526 10.514995 + 3000 5.1184905 5.5419286 10.601518 + 3050 4.6911631 5.3808828 10.457661 + 3100 4.8607911 4.9603546 9.4301575 + 3150 4.5154241 4.2391572 8.793511 + 3200 4.9225855 4.8553117 10.097738 + 3250 5.2806657 5.0883118 10.019105 + 3300 5.6211399 5.4189754 10.031345 + 3350 5.3272587 5.3012125 10.511112 + 3400 5.1537795 5.2751757 10.586364 + 3450 4.9755489 4.7379757 9.5319067 + 3500 4.639772 4.2724622 8.6134078 + 3550 4.429646 4.4744424 9.6934076 + 3600 4.7884194 5.0029165 10.298349 + 3650 5.187187 5.3525308 10.776252 + 3700 5.4484919 5.252409 10.249911 + 3750 5.4023844 5.4702812 10.510152 + 3800 5.5390275 5.5558904 11.637892 + 3850 5.0607613 4.7094507 10.655553 + 3900 4.7039017 4.6735214 9.2616315 + 3950 4.4841881 4.177444 8.2781294 + 4000 4.4476096 4.644048 9.2288327 + 4050 5.3377013 5.4161214 10.327745 + 4100 5.5088439 5.472021 10.160241 + 4150 5.2563495 5.7227923 10.944344 + 4200 5.7697457 5.9285173 11.01361 + 4250 5.5588517 5.6191129 10.10097 + 4300 4.7979693 5.160914 8.9640624 + 4350 4.5787515 4.921702 9.3202685 + 4400 4.7553573 4.6660054 9.1421637 + 4450 5.1209721 5.6522 10.972614 + 4500 5.4707365 5.73796 11.766141 + 4550 5.3811545 5.1951701 10.080047 + 4600 4.6186413 4.6707428 10.171706 + 4650 4.5253667 4.2958906 8.357902 + 4700 4.7727574 5.0615193 9.9593597 + 4750 5.1177598 4.818905 10.331896 + 4800 5.7793785 5.4309352 10.528804 + 4850 5.2737538 5.3926071 10.911118 + 4900 4.9248662 5.1161409 9.9553052 + 4950 4.5438154 4.5542986 9.7231827 + 5000 4.5792931 5.037416 9.4471877 + 5050 5.4657934 4.6463368 10.525459 + 5100 5.1929248 5.3150781 10.600995 + 5150 5.2424553 5.6037815 11.400125 + 5200 5.3554776 5.1462851 10.312698 + 5250 4.5621722 4.6536715 8.9629186 + 5300 4.3302701 4.0032142 8.2178001 + 5350 4.4089902 4.4070826 9.98944 + 5400 5.4923486 5.243049 9.8450519 + 5450 5.9651716 5.7058525 10.868126 + 5500 5.7119235 5.8769703 11.394999 + 5550 5.2139995 5.1454474 11.033523 + 5600 4.7379338 4.942432 9.4940872 + 5650 4.5231066 4.4487457 8.7695323 + 5700 4.708033 4.6389279 9.6186407 + 5750 4.9251705 5.2008226 9.7552276 + 5800 5.1820518 5.1298277 9.9062279 + 5850 5.1682714 5.5417945 10.510452 + 5900 5.3240541 5.447607 10.196406 + 5950 5.0230117 5.2275764 10.023658 + 6000 4.7808616 4.9572765 9.3874738 + 6050 5.3665339 5.0259733 10.08598 + 6100 4.3792707 4.498684 9.2981408 + 6150 5.5644405 5.0701965 9.6641099 + 6200 5.5089344 5.2024156 10.681185 + 6250 5.2016449 5.1923702 10.58283 + 6300 5.0820055 4.9044561 9.2080884 + 6350 5.2807998 5.3178136 10.960667 + 6400 5.2356859 5.3937694 10.444279 + 6450 4.9141004 5.0424402 9.8583318 + 6500 4.730159 4.3778519 8.3347658 + 6550 4.4680692 4.1557934 8.2081388 + 6600 5.1035106 5.5797859 10.011564 + 6650 6.0395438 5.9206816 11.127476 + 6700 5.8615491 6.3110504 11.394217 + 6750 5.6633011 5.4526334 11.052886 + 6800 5.0080995 5.057409 10.062444 + 6850 4.7698449 4.6981695 9.4610313 + 6900 4.7354667 4.37141 9.9744222 + 6950 4.7911975 5.0203879 9.7662892 + 7000 5.2428984 5.5119167 10.442666 + 7050 4.682975 4.9969905 9.7644109 + 7100 5.01603 5.0199261 10.21075 + 7150 5.1231276 4.9029064 9.6731597 + 7200 5.0505154 4.7700974 9.368416 + 7250 4.5832902 4.862384 9.3573655 + 7300 4.9754198 4.8922117 10.281497 + 7350 5.3775547 5.0882575 9.6564673 + 7400 4.7805076 5.1817965 10.671837 + 7450 4.9477584 4.8112232 10.521294 + 7500 5.0159196 4.5830513 10.315726 + 7550 4.5457712 4.3742672 8.2750411 + 7600 4.5562458 4.7579489 9.4828599 + 7650 5.0911757 5.4088122 10.241168 + 7700 5.8998331 5.158098 10.533196 + 7750 5.2573341 5.6316362 11.582955 + 7800 5.5208399 5.5724767 10.552019 + 7850 4.2579682 4.4297565 9.0720476 + 7900 4.4805314 4.2668697 8.5308736 + 7950 5.0361726 4.7345663 9.053936 + 8000 4.9653741 5.0377825 9.7367426 + 8050 5.6899681 5.2423091 10.791377 + 8100 5.7463021 5.7578506 10.412899 + 8150 5.2759991 5.4104042 10.070985 + 8200 5.458295 5.8367826 11.164512 + 8250 5.0428079 5.1837655 9.9204724 + 8300 4.6809536 4.5537928 9.4697904 + 8350 4.8813528 4.8364418 10.099128 + 8400 4.7682666 5.2049648 9.5798138 + 8450 5.0663986 4.5988946 9.4560847 + 8500 4.9165971 4.860584 9.5549796 + 8550 5.3481259 5.3835901 10.844579 + 8600 5.5975372 5.5878997 10.943816 + 8650 4.3283508 4.7046268 8.8049918 + 8700 5.089621 4.7172523 9.9647935 + 8750 5.1012591 4.5471991 9.9327107 + 8800 5.268596 5.2408733 10.867265 + 8850 5.4760815 4.9428094 10.748623 + 8900 4.6100656 5.146025 10.553286 + 8950 4.4411237 5.0226732 9.6226103 + 9000 4.3935196 4.591527 8.462486 + 9050 4.5657639 4.7316578 10.336313 + 9100 4.8547926 4.7683761 10.473456 + 9150 5.2718858 5.1274542 9.4487204 + 9200 5.6536596 5.0085121 10.538513 + 9250 4.8978022 5.5399287 11.227994 + 9300 5.1949276 5.2477679 9.4501652 + 9350 4.614631 4.5123768 8.9589058 + 9400 4.9004056 5.2279931 9.6976631 + 9450 5.2069446 5.0233778 9.9944637 + 9500 5.9550777 5.5494597 11.15982 + 9550 5.0613169 5.0592065 9.7027551 + 9600 5.1136537 4.826222 10.615866 + 9650 4.7063369 5.1309647 9.3445464 + 9700 5.03856 4.8819472 9.6814972 + 9750 4.5600617 4.8391307 10.209608 + 9800 4.9439503 4.9625294 10.613186 + 9850 5.4817844 5.1051439 10.055569 + 9900 5.0079108 4.8100264 9.0562123 + 9950 4.8676477 4.6891998 9.3252737 + 10000 4.9643649 5.9339432 10.816137 +Loop time of 1.53648 on 4 procs for 10000 steps with 500 atoms + +Performance: 2811615.788 tau/day, 6508.370 timesteps/s +94.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.13145 | 0.13475 | 0.13936 | 0.9 | 8.77 +Neigh | 0.56509 | 0.57539 | 0.58617 | 1.2 | 37.45 +Comm | 0.34317 | 0.35857 | 0.37377 | 2.4 | 23.34 +Output | 0.0018919 | 0.0046901 | 0.012948 | 7.0 | 0.31 +Modify | 0.38306 | 0.39165 | 0.39657 | 0.8 | 25.49 +Other | | 0.07143 | | | 4.65 + +Nlocal: 125 ave 128 max 122 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 457.5 ave 468 max 453 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Neighs: 850.75 ave 868 max 824 min +Histogram: 1 0 0 0 0 1 0 0 0 2 + +Total # of neighbors = 3403 +Ave neighs/atom = 6.806 +Neighbor list builds = 4589 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.1 b/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.1 deleted file mode 100644 index 2c13448192..0000000000 --- a/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.1 +++ /dev/null @@ -1,281 +0,0 @@ -LAMMPS (22 Sep 2017) -# uniaxial NVT deformation of WCA fluid - -units lj -atom_style atomic - - -pair_style lj/cut 1.122562 -read_data data.wca - orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 500 atoms - reading velocities ... - 500 velocities -pair_coeff 1 1 1.0 1.0 -pair_modify shift yes - -neighbor 0.5 bin -neigh_modify delay 0 - -change_box all triclinic - triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) - -fix 1 all nvt/uef temp 0.722 0.722 0.5 erate -0.5 -0.5 - -fix 2 all momentum 100 linear 1 1 1 - -#dump 1 all atom 25 dump.lammpstrj - -#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs - -thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] - -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.62256 - ghost atom cutoff = 1.62256 - binsize = 0.811281, bins = 11 11 11 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton/tri - stencil: half/bin/3d/newton/tri - bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.742 | 2.742 | 2.742 Mbytes -Step c_1_press[1] c_1_press[2] c_1_press[3] - 0 6.3937851 7.0436438 6.4461087 - 50 10.369902 10.999889 6.5437384 - 100 12.411384 13.145871 7.8892802 - 150 12.88182 12.114068 7.5155182 - 200 10.375571 10.979773 6.5624056 - 250 10.158901 10.251273 5.4525068 - 300 10.011314 9.8371382 5.4031393 - 350 9.4890008 9.7992108 5.054963 - 400 9.1715116 9.2647886 4.9600208 - 450 9.8495961 9.3353483 4.986786 - 500 9.5903809 8.576173 4.8252116 - 550 8.8057509 9.7152078 4.9089022 - 600 8.9743682 10.031277 4.8924072 - 650 10.233852 9.3059527 5.1977058 - 700 9.2361906 9.6439971 5.0923763 - 750 10.449751 9.5911465 5.2548714 - 800 9.8366857 9.9873885 4.9456956 - 850 10.266351 9.9620134 5.0602713 - 900 9.6325813 9.3910946 5.1466624 - 950 9.1911919 9.1519006 4.8275345 - 1000 9.2871712 9.8508501 5.2674099 - 1050 9.7052035 10.291793 5.160359 - 1100 9.9425552 10.361827 5.5520484 - 1150 10.377563 10.26588 5.5997436 - 1200 9.6368269 10.354413 5.4137873 - 1250 9.2071055 9.1706334 4.9800411 - 1300 9.7140516 8.7257777 4.8536943 - 1350 10.145983 9.8247797 4.8921813 - 1400 9.1998975 9.6935675 5.2269871 - 1450 9.4838136 8.9035726 4.6867121 - 1500 9.066389 9.811658 4.8875316 - 1550 10.007083 9.8946118 5.204609 - 1600 9.722137 9.9291588 5.326712 - 1650 9.7424614 9.6995966 5.3577819 - 1700 9.7185135 9.5922931 5.385856 - 1750 9.6368481 8.1414594 5.0046079 - 1800 9.8065782 9.6798036 4.92473 - 1850 9.0463737 10.024205 5.6495695 - 1900 9.0774484 10.527582 5.0363426 - 1950 9.1691461 10.049703 4.8517514 - 2000 9.7619602 10.049532 5.2088038 - 2050 9.9203348 9.8056395 5.7699852 - 2100 9.1455665 9.5864018 5.1410542 - 2150 8.8501135 9.7917307 5.141824 - 2200 9.1433685 9.8168548 5.1742441 - 2250 9.3248968 10.454532 5.5456356 - 2300 10.210505 9.361499 5.0935226 - 2350 9.5041186 9.598986 5.2451005 - 2400 8.968896 9.2811921 4.7799868 - 2450 9.8201159 10.133892 4.9981817 - 2500 9.4421084 9.7875766 5.4124809 - 2550 9.6410643 9.9148309 5.0603288 - 2600 9.3810676 9.5346849 5.3233836 - 2650 9.2340337 8.7233538 5.0361302 - 2700 9.405597 9.7848488 4.7537042 - 2750 9.9447412 9.2366502 4.9736459 - 2800 10.189443 9.452684 5.624362 - 2850 9.6680124 9.0941543 5.0101469 - 2900 8.4350889 9.1595018 4.7706866 - 2950 9.0056117 9.3498593 4.7655963 - 3000 9.4795416 9.7400747 5.4705868 - 3050 9.6605264 9.4558374 5.1240166 - 3100 9.681451 9.7966554 5.3174458 - 3150 9.7887528 9.7371194 4.9349103 - 3200 9.9720054 9.5592538 5.2306417 - 3250 10.185023 9.9436037 5.4127312 - 3300 9.9670676 9.6069307 5.026261 - 3350 9.0090411 9.5975249 4.8881019 - 3400 9.6535707 9.748683 4.9933873 - 3450 9.7774977 9.7570511 4.8512619 - 3500 9.7250053 10.36386 5.4057249 - 3550 9.567788 9.773413 5.3936671 - 3600 9.2094148 9.0211247 5.2328675 - 3650 9.3512098 9.73407 4.576624 - 3700 9.159074 9.2611591 5.2996448 - 3750 9.4772798 8.9792211 5.1007079 - 3800 9.3898357 9.1150609 5.2126508 - 3850 9.2466312 9.1460651 4.867472 - 3900 9.9316993 9.3061137 5.1219265 - 3950 9.2550913 9.780254 5.371885 - 4000 10.005356 9.7328972 5.2535791 - 4050 9.5228242 9.5134113 5.4181393 - 4100 9.576808 10.082425 5.1272491 - 4150 10.20265 9.6667058 5.529118 - 4200 9.9443671 10.09427 5.6163734 - 4250 9.4956875 9.9462818 5.0820085 - 4300 10.350144 10.003702 5.1621505 - 4350 10.119486 9.8691507 5.4913457 - 4400 9.4991604 10.516185 5.2512264 - 4450 9.0812854 9.2835603 5.1695714 - 4500 9.7538478 8.5298834 4.5954607 - 4550 9.8920394 9.3581299 5.202587 - 4600 9.2694921 9.3338291 5.201958 - 4650 10.925818 9.5062049 4.8694531 - 4700 11.020014 10.130224 5.582409 - 4750 9.5005142 9.3571561 5.456739 - 4800 9.6670147 9.6628702 5.0451252 - 4850 9.134147 9.1308788 4.7950594 - 4900 9.7466206 8.6171443 4.8716275 - 4950 9.0397505 9.1996036 5.2010502 - 5000 9.6898652 9.8914655 5.3959279 - 5050 10.06771 9.7523891 5.3690408 - 5100 10.000963 9.6279379 5.4077384 - 5150 9.8686159 10.179702 5.0686824 - 5200 9.8866247 9.725152 5.4350049 - 5250 9.2068346 10.214424 5.3187713 - 5300 9.713992 9.8069045 5.496359 - 5350 9.423852 9.364085 5.2144606 - 5400 9.4350241 9.5584633 5.0339001 - 5450 10.555124 10.784922 5.1938072 - 5500 9.4147344 10.33187 5.4360602 - 5550 9.8514653 9.6575827 5.4959779 - 5600 9.3138107 9.6592624 4.941387 - 5650 9.1224809 8.7112257 5.0435936 - 5700 8.8289158 10.749686 4.8916132 - 5750 9.7200279 10.030606 5.2033161 - 5800 9.8439873 9.6289015 5.5131934 - 5850 9.6257294 9.4128988 4.9196038 - 5900 9.7490214 9.5776313 5.0301815 - 5950 9.1430855 10.108944 5.1406243 - 6000 9.3358644 9.5633737 4.9787073 - 6050 9.4432774 8.9464304 5.1466052 - 6100 8.8878373 9.5048946 4.9190238 - 6150 9.6451898 9.2419823 5.0159841 - 6200 9.5042173 8.9414307 5.2634247 - 6250 9.0896505 9.7230651 5.3340322 - 6300 8.8100599 8.8781352 5.4117914 - 6350 9.3104601 9.0233294 5.3136432 - 6400 9.368101 9.6387362 4.7833216 - 6450 10.334343 9.8384149 5.3606204 - 6500 9.8824036 10.022627 6.0857086 - 6550 9.7034443 10.026765 5.17604 - 6600 9.3757845 9.899268 5.2301359 - 6650 10.540821 10.4343 5.5287065 - 6700 9.6317649 9.8923579 5.6045768 - 6750 9.5982772 10.07897 5.1221451 - 6800 10.239883 10.189967 5.3167447 - 6850 10.017271 9.7680902 5.229621 - 6900 9.6200416 10.129301 5.1998759 - 6950 9.0361417 8.923798 5.1652612 - 7000 9.3153521 9.063054 4.6860773 - 7050 8.6434091 9.0363436 4.7811975 - 7100 9.4955395 9.3830541 5.022538 - 7150 9.3392402 9.1847119 5.1544622 - 7200 9.4676321 9.8370036 4.8854442 - 7250 9.5115882 10.350324 4.9780525 - 7300 9.6025583 9.6247917 5.473794 - 7350 9.8919524 10.049446 4.9816931 - 7400 9.6814319 9.9410894 5.265078 - 7450 9.4130955 10.191436 5.2531256 - 7500 9.8114668 8.8461635 5.0562894 - 7550 10.321567 9.4730124 5.2043655 - 7600 9.5059024 9.8330367 5.0749721 - 7650 10.067084 10.606423 5.5598818 - 7700 10.896159 10.084281 5.5159718 - 7750 9.754306 10.162301 5.2475876 - 7800 9.7278145 9.801009 5.0685504 - 7850 9.8639905 10.323104 5.2458864 - 7900 9.7246799 9.1377357 5.1841319 - 7950 10.381792 9.6977533 5.0977386 - 8000 9.7265224 9.2999829 4.7925571 - 8050 9.5203288 9.3144956 4.7539211 - 8100 9.6900973 9.6614063 5.304712 - 8150 9.713677 9.9154149 4.8178575 - 8200 9.4733597 9.8948632 5.036112 - 8250 9.7783036 9.9554334 5.3355682 - 8300 9.4034783 9.9156801 5.5539279 - 8350 9.2984025 9.2013949 5.0753991 - 8400 9.9299078 9.6166801 5.115776 - 8450 9.526737 9.3312125 4.7800587 - 8500 9.581956 10.065906 4.9756092 - 8550 9.2767953 9.326006 5.3024978 - 8600 9.799968 8.4660845 5.0199109 - 8650 9.8985354 10.127852 4.9098064 - 8700 8.7952691 10.521133 5.6840528 - 8750 9.8299997 9.5588553 5.3085734 - 8800 9.0811776 9.5704532 5.1684993 - 8850 9.8303571 9.7618932 5.1251259 - 8900 9.9238794 9.9654863 5.2999683 - 8950 10.851304 9.9682289 5.4133763 - 9000 9.5523794 9.1890766 5.1469144 - 9050 9.7461948 8.9611236 4.9490826 - 9100 10.138917 9.6757567 5.0473544 - 9150 9.4869835 9.4786575 5.0142464 - 9200 10.263518 10.079135 5.1493398 - 9250 9.8691684 9.0908275 5.3221203 - 9300 9.8586707 9.4177643 5.1525265 - 9350 9.3375816 9.9167208 5.4846207 - 9400 9.5603903 9.4813199 4.6237495 - 9450 10.30892 9.5217736 5.6163214 - 9500 9.327949 9.9831649 4.8923915 - 9550 9.8421656 9.3202702 5.3352046 - 9600 8.8543704 9.4556702 4.6430041 - 9650 10.103399 9.2161072 4.8658062 - 9700 9.507811 9.9647378 5.227369 - 9750 9.4988096 8.9942893 5.2491418 - 9800 9.8007958 9.234452 5.1740203 - 9850 9.6029685 10.076042 5.023107 - 9900 9.4035691 10.13782 5.2775777 - 9950 9.6517135 10.355994 5.3035779 - 10000 9.9157616 9.7741952 5.5269431 -Loop time of 3.47119 on 1 procs for 10000 steps with 500 atoms - -Performance: 1244529.812 tau/day, 2880.856 timesteps/s -99.5% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.53077 | 0.53077 | 0.53077 | 0.0 | 15.29 -Neigh | 2.219 | 2.219 | 2.219 | 0.0 | 63.93 -Comm | 0.21866 | 0.21866 | 0.21866 | 0.0 | 6.30 -Output | 0.0027909 | 0.0027909 | 0.0027909 | 0.0 | 0.08 -Modify | 0.41956 | 0.41956 | 0.41956 | 0.0 | 12.09 -Other | | 0.08042 | | | 2.32 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 908 ave 908 max 908 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3489 ave 3489 max 3489 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3489 -Ave neighs/atom = 6.978 -Neighbor list builds = 4567 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.4 b/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.4 deleted file mode 100644 index 276eb2f443..0000000000 --- a/examples/USER/uef/nvt_uniaxial/log.22Sep17.npt_uniaxial.g++.4 +++ /dev/null @@ -1,281 +0,0 @@ -LAMMPS (22 Sep 2017) -# uniaxial NVT deformation of WCA fluid - -units lj -atom_style atomic - - -pair_style lj/cut 1.122562 -read_data data.wca - orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 500 atoms - reading velocities ... - 500 velocities -pair_coeff 1 1 1.0 1.0 -pair_modify shift yes - -neighbor 0.5 bin -neigh_modify delay 0 - -change_box all triclinic - triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) - -fix 1 all nvt/uef temp 0.722 0.722 0.5 erate -0.5 -0.5 - -fix 2 all momentum 100 linear 1 1 1 - -#dump 1 all atom 25 dump.lammpstrj - -#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs - -thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] - -thermo 50 -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.62256 - ghost atom cutoff = 1.62256 - binsize = 0.811281, bins = 11 11 11 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton/tri - stencil: half/bin/3d/newton/tri - bin: standard -Per MPI rank memory allocation (min/avg/max) = 2.71 | 2.71 | 2.71 Mbytes -Step c_1_press[1] c_1_press[2] c_1_press[3] - 0 6.3937851 7.0436438 6.4461087 - 50 10.369902 10.999889 6.5437384 - 100 12.411384 13.145871 7.8892802 - 150 12.88182 12.114068 7.5155182 - 200 10.375571 10.979773 6.5624056 - 250 10.158901 10.251273 5.4525068 - 300 10.011314 9.8371382 5.4031393 - 350 9.4890008 9.7992108 5.054963 - 400 9.1715116 9.2647886 4.9600208 - 450 9.8495961 9.3353483 4.986786 - 500 9.5903809 8.576173 4.8252116 - 550 8.8057509 9.7152078 4.9089022 - 600 8.9743682 10.031277 4.8924072 - 650 10.233852 9.3059527 5.1977058 - 700 9.2361906 9.6439971 5.0923762 - 750 10.449751 9.5911465 5.2548714 - 800 9.8366858 9.9873885 4.9456956 - 850 10.266351 9.9620134 5.0602713 - 900 9.6325811 9.3910947 5.1466627 - 950 9.1911906 9.1518996 4.8275336 - 1000 9.2871726 9.8508561 5.2674079 - 1050 9.7052019 10.291782 5.1603609 - 1100 9.9425827 10.361848 5.5520588 - 1150 10.37757 10.265891 5.5997246 - 1200 9.6367069 10.354451 5.4138749 - 1250 9.2075006 9.1705136 4.9806417 - 1300 9.7126123 8.7247301 4.8528533 - 1350 10.146034 9.8319205 4.8958266 - 1400 9.19638 9.7052094 5.2332913 - 1450 9.4667073 8.9014702 4.7073387 - 1500 9.0949401 9.8381729 4.8904182 - 1550 10.068959 9.8096692 5.1613658 - 1600 10.131443 9.7086921 5.0913546 - 1650 9.9557572 9.9183989 5.2635245 - 1700 9.3820418 8.6135867 4.9395498 - 1750 8.9486365 9.3433293 5.2674469 - 1800 10.352322 10.354432 5.3335153 - 1850 8.9629784 9.6172224 5.0824828 - 1900 8.5429652 9.749815 5.1577895 - 1950 8.9828002 8.9631646 5.0948426 - 2000 9.4171989 9.7122117 5.1386251 - 2050 9.767299 9.6146113 4.8965319 - 2100 10.049399 10.02243 5.3856622 - 2150 9.2639644 10.09669 5.3020322 - 2200 9.1916162 10.841127 5.0271109 - 2250 9.9859708 8.519568 5.24568 - 2300 9.9462279 9.5850706 5.0632906 - 2350 9.8043011 9.7605126 5.3148323 - 2400 9.089818 9.6474522 5.0012486 - 2450 9.655874 9.3255636 4.8291262 - 2500 9.0259445 9.3074827 5.1593031 - 2550 9.1610478 9.7356492 5.0741161 - 2600 9.3153881 9.3936949 5.4830363 - 2650 9.6212696 9.598252 4.7172875 - 2700 9.318906 9.665656 5.1917527 - 2750 9.6613838 9.7106796 5.1843146 - 2800 10.231844 9.9407641 4.6940455 - 2850 10.008093 9.2781076 5.2624957 - 2900 10.464168 9.808666 5.1457978 - 2950 9.7080601 9.6972304 5.406456 - 3000 9.6851209 10.050737 5.1198394 - 3050 8.9093581 9.213428 5.233108 - 3100 8.8098921 9.6607476 4.9625331 - 3150 8.6608386 9.7503441 5.0737533 - 3200 9.7004403 9.6748778 5.0734462 - 3250 10.077054 10.318711 5.3233841 - 3300 10.63887 9.4901739 5.516542 - 3350 10.232909 9.3407073 5.4989967 - 3400 9.8854134 9.9542625 5.1982468 - 3450 9.9388203 9.3394716 4.8135833 - 3500 9.2514026 9.5857527 5.4605449 - 3550 8.3940282 9.0549836 4.6951548 - 3600 8.7696659 9.6262816 4.6302087 - 3650 9.0695173 8.8520895 5.0814723 - 3700 9.4700744 9.2777557 4.6825004 - 3750 9.0221844 9.3407486 5.3984156 - 3800 9.1478369 9.1420043 5.3024474 - 3850 9.2652818 9.700053 5.3355364 - 3900 10.248456 9.2480211 5.2375956 - 3950 9.8259922 9.6130415 5.5978761 - 4000 9.404877 9.7931698 5.3767927 - 4050 10.131713 9.7047295 5.2964594 - 4100 9.8128638 9.4253237 5.5308166 - 4150 10.25183 9.1333595 5.1957555 - 4200 10.449736 9.295762 4.7863033 - 4250 9.7304858 9.4482515 5.356439 - 4300 9.2773777 9.4110855 4.9879246 - 4350 8.9325082 9.3429549 5.0410132 - 4400 9.2603855 9.7905381 4.7436126 - 4450 8.7600443 9.9160722 5.196316 - 4500 9.0824514 10.036035 4.873051 - 4550 9.3884333 9.6644343 5.1154951 - 4600 9.8181676 9.6385118 5.3639835 - 4650 9.1574799 9.5386974 4.7487094 - 4700 10.275911 9.5383553 5.1084297 - 4750 9.2476854 9.3353591 5.4773008 - 4800 9.3422407 9.1931821 4.9210291 - 4850 9.9033126 9.6443642 5.1334553 - 4900 9.8469467 9.6836455 5.5101146 - 4950 10.211229 9.760253 5.0151668 - 5000 9.3256273 10.109873 5.4129479 - 5050 9.9704879 9.8504809 5.2191163 - 5100 9.4820718 9.711504 4.9633504 - 5150 9.2952171 9.6955742 5.3214246 - 5200 9.8400791 9.4763906 4.9149518 - 5250 10.080112 9.5634741 5.1701348 - 5300 9.4221014 9.8149742 5.3605931 - 5350 8.8228402 10.121343 5.3192212 - 5400 9.7318719 10.508763 5.0044083 - 5450 8.7429847 9.6583774 5.033313 - 5500 9.9243256 10.239521 5.2956506 - 5550 9.6088558 9.8555986 5.359257 - 5600 10.904352 10.72033 5.7874034 - 5650 9.4774477 9.7246962 5.596949 - 5700 9.8527139 9.2188245 4.6518586 - 5750 9.7932375 9.2763721 4.6663307 - 5800 9.5630073 9.1704583 5.4784197 - 5850 10.159996 9.5206168 5.0012706 - 5900 9.1667978 9.6891715 5.1959301 - 5950 9.2194131 9.2170699 5.1653264 - 6000 9.5917124 9.2038051 5.1004966 - 6050 9.4141124 9.9166471 5.0535712 - 6100 10.231166 9.7746591 5.2399634 - 6150 9.6054192 9.34446 5.0711646 - 6200 9.9279645 8.9546561 5.4698039 - 6250 9.1581437 8.95439 4.9336111 - 6300 8.9257232 9.0665473 5.188718 - 6350 9.7685695 9.0822789 4.8454457 - 6400 9.5140226 9.5073414 5.3420644 - 6450 9.5379198 9.3316002 5.1940338 - 6500 10.216584 9.8982859 5.2790157 - 6550 10.221286 10.913585 5.4521496 - 6600 10.925166 10.088055 5.2079758 - 6650 10.012501 9.3870455 5.1740433 - 6700 10.176139 9.4869588 5.3783369 - 6750 9.2819415 8.1431975 4.8256476 - 6800 9.790723 9.7932943 5.3602927 - 6850 9.1327199 9.8354267 5.1356642 - 6900 9.240909 9.3854618 5.1767268 - 6950 10.652806 9.4355671 5.1314851 - 7000 9.1676917 10.055501 5.2824651 - 7050 9.6486488 9.1063089 4.9596976 - 7100 9.3733678 9.5875095 5.0882285 - 7150 9.282243 9.354934 4.6752644 - 7200 8.7370777 10.1445 5.0217245 - 7250 9.563419 9.929442 5.1720916 - 7300 9.9128346 9.2426863 5.3595023 - 7350 9.9319949 9.9479477 5.4844629 - 7400 9.4671739 9.2380048 5.3274217 - 7450 9.7531193 9.4075641 4.9426738 - 7500 10.331422 9.4704554 5.3036636 - 7550 8.7724434 9.663179 4.9492563 - 7600 10.222748 9.1674852 4.8135992 - 7650 9.5288583 8.5866929 5.0342955 - 7700 8.8832847 8.8035037 4.6184473 - 7750 9.4847076 9.7969656 5.0035855 - 7800 9.2782486 9.1283641 5.3151299 - 7850 8.962989 8.7729872 5.0374817 - 7900 9.6336556 9.4975426 4.9832641 - 7950 10.125279 10.044247 5.2740873 - 8000 9.9705097 9.6925988 5.2344188 - 8050 9.7836318 9.5794261 4.9174534 - 8100 10.79561 10.04809 5.1604639 - 8150 9.7261726 10.372878 5.3083843 - 8200 10.338569 10.08189 5.6555172 - 8250 9.7833315 9.9834209 5.3790753 - 8300 9.5857944 9.6052323 5.0689289 - 8350 9.6706688 9.6189242 4.7725678 - 8400 10.570423 9.5786093 5.1894242 - 8450 9.6514599 10.168359 5.0733592 - 8500 10.273682 9.9179284 5.4014563 - 8550 9.3120287 10.146837 4.9895115 - 8600 9.511943 9.644112 5.462624 - 8650 10.380674 9.1117114 5.156727 - 8700 10.068596 8.7687113 5.1440814 - 8750 9.2484971 9.2477678 4.9318794 - 8800 9.7298469 8.9480303 5.1151321 - 8850 9.7299502 10.415138 4.7902908 - 8900 10.966912 10.732962 5.4793574 - 8950 10.328384 9.9501313 5.6238396 - 9000 9.7385041 9.8319224 5.1926497 - 9050 9.7971055 9.5740203 5.1111302 - 9100 9.7789727 9.9281901 5.1786549 - 9150 9.9306964 9.3360599 4.9524547 - 9200 9.8798841 10.240752 5.1691344 - 9250 10.185445 9.4934917 4.9188964 - 9300 8.9184663 8.9349408 4.8079511 - 9350 9.6552187 9.9846949 4.9619969 - 9400 10.304306 9.2298208 5.2822855 - 9450 9.8379613 10.041703 5.4186514 - 9500 10.221443 9.5342818 4.8929802 - 9550 9.9723047 10.072856 5.4169676 - 9600 9.3923879 9.2984387 5.4452785 - 9650 8.9072589 9.7482374 4.7835208 - 9700 9.8370121 10.205922 5.0385145 - 9750 9.4274542 9.4653248 5.6340681 - 9800 9.7668106 9.3265705 5.3154126 - 9850 10.422549 10.362922 5.361592 - 9900 9.6264407 9.9790162 5.6381052 - 9950 10.35018 9.8853593 5.2639184 - 10000 9.6190853 9.7903758 5.1583115 -Loop time of 1.32471 on 4 procs for 10000 steps with 500 atoms - -Performance: 3261084.476 tau/day, 7548.807 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.1301 | 0.13489 | 0.13886 | 0.9 | 10.18 -Neigh | 0.5654 | 0.575 | 0.5883 | 1.3 | 43.41 -Comm | 0.35135 | 0.37147 | 0.38856 | 2.4 | 28.04 -Output | 0.0028336 | 0.0032777 | 0.004292 | 1.0 | 0.25 -Modify | 0.16328 | 0.16711 | 0.17231 | 0.8 | 12.61 -Other | | 0.07297 | | | 5.51 - -Nlocal: 125 ave 128 max 122 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 477 ave 489 max 469 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 861 ave 877 max 848 min -Histogram: 1 0 1 0 0 1 0 0 0 1 - -Total # of neighbors = 3444 -Ave neighs/atom = 6.888 -Neighbor list builds = 4560 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:01 diff --git a/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.1 b/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.1 new file mode 100644 index 0000000000..0d97a3793a --- /dev/null +++ b/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.1 @@ -0,0 +1,282 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# uniaxial NVT deformation of WCA fluid + +units lj +atom_style atomic + + +pair_style lj/cut 1.122562 +read_data data.wca + orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 500 atoms + reading velocities ... + 500 velocities +pair_coeff 1 1 1.0 1.0 +pair_modify shift yes + +neighbor 0.5 bin +neigh_modify delay 0 + +change_box all triclinic + triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) + +fix 1 all nvt/uef temp 0.722 0.722 0.5 erate -0.5 -0.5 + +fix 2 all momentum 100 linear 1 1 1 + +#dump 1 all atom 25 dump.lammpstrj + +#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs + +thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] + +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.62256 + ghost atom cutoff = 1.62256 + binsize = 0.811281, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.742 | 2.742 | 2.742 Mbytes +Step c_1_press[1] c_1_press[2] c_1_press[3] + 0 6.3937851 7.0436438 6.4461087 + 50 10.369902 10.999889 6.5437384 + 100 12.411384 13.145871 7.8892802 + 150 12.88182 12.114068 7.5155182 + 200 10.375571 10.979773 6.5624056 + 250 10.158901 10.251273 5.4525068 + 300 10.011314 9.8371382 5.4031393 + 350 9.4890008 9.7992108 5.054963 + 400 9.1715116 9.2647886 4.9600208 + 450 9.8495961 9.3353483 4.986786 + 500 9.5903809 8.576173 4.8252116 + 550 8.8057509 9.7152078 4.9089022 + 600 8.9743682 10.031277 4.8924072 + 650 10.233852 9.3059527 5.1977058 + 700 9.2361906 9.6439971 5.0923763 + 750 10.449751 9.5911465 5.2548714 + 800 9.8366857 9.9873885 4.9456956 + 850 10.266351 9.9620134 5.0602713 + 900 9.6325813 9.3910946 5.1466624 + 950 9.1911919 9.1519006 4.8275345 + 1000 9.2871712 9.8508501 5.2674099 + 1050 9.7052036 10.291793 5.1603591 + 1100 9.9425548 10.361827 5.5520486 + 1150 10.377563 10.265879 5.5997431 + 1200 9.6368288 10.354415 5.413788 + 1250 9.2071084 9.1706343 4.9800415 + 1300 9.7140475 8.725759 4.8536998 + 1350 10.145943 9.8247688 4.8921964 + 1400 9.1998769 9.6934121 5.2269945 + 1450 9.4838819 8.9036871 4.6868425 + 1500 9.0660596 9.8119073 4.8875027 + 1550 10.008516 9.8942392 5.2035321 + 1600 9.7143761 9.9244983 5.3261192 + 1650 9.7387193 9.6991715 5.3519995 + 1700 9.7244046 9.6152132 5.3981523 + 1750 9.5710027 8.0741432 4.9456613 + 1800 9.9774654 9.6678929 4.9160721 + 1850 9.8364707 9.6445265 5.314823 + 1900 9.1249414 9.9271775 5.1286354 + 1950 9.6652829 9.0384584 5.2340419 + 2000 9.5265979 10.26158 5.2813427 + 2050 9.9173922 9.5527322 4.8940699 + 2100 9.9415753 9.8016834 5.4442305 + 2150 9.5497688 9.9967881 5.3150264 + 2200 10.334645 9.9712509 5.361381 + 2250 9.7205034 9.7973449 5.0447949 + 2300 9.2264367 9.7244096 5.1908235 + 2350 9.3549971 8.9425394 5.0163909 + 2400 9.1923971 8.6026816 4.9142184 + 2450 9.3318993 9.2876986 5.2092509 + 2500 9.2703657 9.7375808 4.9579591 + 2550 9.1967438 10.010085 4.9842759 + 2600 9.5606002 10.387986 5.7530846 + 2650 9.609164 9.4442273 5.5362122 + 2700 9.093698 8.9706057 4.8616368 + 2750 9.0180363 10.16255 4.7751355 + 2800 9.8966449 9.6404143 5.2088441 + 2850 9.7039267 9.6911675 5.1261088 + 2900 9.2003002 10.333632 5.1375334 + 2950 9.7470703 9.6392635 5.2311731 + 3000 9.0259323 9.0011546 5.0023767 + 3050 9.4620827 9.8701001 5.0220394 + 3100 9.1559748 9.5498091 5.1765241 + 3150 10.100442 9.8148718 5.2819275 + 3200 9.6668354 9.470653 5.3759397 + 3250 9.3371207 9.3274667 4.9318779 + 3300 9.091848 9.5112327 5.2200157 + 3350 9.1269693 9.6133794 5.1310717 + 3400 9.1027229 9.416857 5.0819883 + 3450 9.2658402 9.0401432 5.0990609 + 3500 10.377313 9.5626011 5.202188 + 3550 9.2947039 9.505877 5.5438005 + 3600 9.076374 9.5507698 5.1345649 + 3650 10.333552 9.0606354 5.0508117 + 3700 9.8802406 9.7469806 5.5088992 + 3750 9.7912998 9.2253084 5.5336078 + 3800 9.5643045 9.7834307 5.0726418 + 3850 9.8238806 9.9734109 5.4322981 + 3900 9.6518341 9.0747014 5.6444988 + 3950 9.1405553 9.3360768 4.8837062 + 4000 9.3606196 9.9269401 5.1633636 + 4050 9.4414403 9.9408674 5.2935162 + 4100 9.6568918 9.6131494 5.0426715 + 4150 9.864223 9.2610429 5.1413271 + 4200 10.292607 9.2650093 4.9732741 + 4250 9.7702935 10.274775 5.3607379 + 4300 9.4790352 8.8735538 4.8580655 + 4350 9.5504854 10.340269 4.4428322 + 4400 9.5556697 9.2862997 5.1467218 + 4450 9.6741368 10.007913 5.3062768 + 4500 9.938524 9.1645202 5.3414548 + 4550 9.9970823 9.6116985 5.0880012 + 4600 10.035008 9.8767746 5.1253207 + 4650 10.109616 10.971392 5.3742955 + 4700 10.080373 10.656347 5.4138717 + 4750 10.252518 10.563308 5.0535706 + 4800 9.3426418 9.4491805 5.1587548 + 4850 9.2885747 9.7058018 4.9715619 + 4900 9.2136015 9.0234401 4.7395994 + 4950 9.1361149 9.6758285 4.9981501 + 5000 9.5474982 9.0493007 5.2137701 + 5050 9.635291 9.7591762 4.8415939 + 5100 9.5719703 9.5689732 5.1787863 + 5150 9.4201066 10.449653 5.222846 + 5200 9.1962218 9.6566128 5.4026011 + 5250 8.6281903 9.0441148 5.1187247 + 5300 9.6429057 9.6840319 4.9475686 + 5350 10.388834 9.417967 5.224683 + 5400 10.047564 10.073369 5.2814251 + 5450 9.2430362 9.8508143 5.4960461 + 5500 9.9812959 9.4140317 5.0437339 + 5550 10.045822 10.077244 5.3796453 + 5600 9.6625863 9.5277882 5.0780914 + 5650 9.0185037 8.8319729 4.7626372 + 5700 9.16337 9.4156456 4.6766204 + 5750 9.3777054 9.292911 5.3348738 + 5800 8.8347896 9.0603847 5.2325469 + 5850 9.307492 10.066699 4.8439039 + 5900 9.6261925 9.8782796 5.5750224 + 5950 8.7773987 9.5456497 5.0858933 + 6000 9.7327023 9.9029484 5.202036 + 6050 9.370819 9.3128466 5.3681069 + 6100 9.4568801 9.3082668 5.1480307 + 6150 10.336417 9.4569418 5.152047 + 6200 9.4969856 9.7198161 5.1648394 + 6250 9.4844976 9.6958021 5.2628856 + 6300 9.2406959 9.9330467 5.205557 + 6350 9.9508721 9.4577577 5.1630178 + 6400 9.6759763 8.9531754 5.274062 + 6450 9.4062719 8.8404288 5.2379186 + 6500 9.553735 9.0313724 4.8620144 + 6550 9.1947496 9.289295 4.834747 + 6600 9.7299026 9.6968225 4.9198957 + 6650 10.467984 11.039001 5.0952273 + 6700 9.8488093 10.142611 5.3922943 + 6750 9.7484714 9.2403353 4.9210254 + 6800 8.7424625 9.4374325 5.1391373 + 6850 8.7654476 9.3003008 5.0486754 + 6900 9.5001642 9.5361838 5.0300213 + 6950 9.3807018 9.4573472 4.8452481 + 7000 9.6055795 10.087276 4.9469866 + 7050 9.5823321 9.439522 5.2882226 + 7100 9.8653958 9.4652195 5.7972727 + 7150 9.9148149 9.2324819 5.049893 + 7200 8.9502172 8.8138734 4.9123769 + 7250 8.8968143 9.2721861 5.0210042 + 7300 10.356078 9.6753595 4.9074775 + 7350 8.9771028 9.5585959 4.7967768 + 7400 9.8494816 9.7347288 5.3771897 + 7450 8.6771311 8.8770175 5.2917845 + 7500 9.612851 9.1856901 4.8593785 + 7550 9.4248312 9.5312938 5.1662239 + 7600 10.284524 9.6561627 5.000118 + 7650 10.322322 9.8314081 5.6316726 + 7700 9.3491815 9.103061 4.7351973 + 7750 9.7524148 9.3729475 5.3109482 + 7800 9.5120985 9.7507452 4.797863 + 7850 9.0245453 10.008972 5.0798698 + 7900 9.7587351 9.5831457 4.9297543 + 7950 10.122804 9.2235043 5.4337028 + 8000 9.7771103 9.567766 5.1963733 + 8050 9.7806594 10.298163 4.895879 + 8100 10.448182 10.515639 5.3289479 + 8150 9.8343933 10.008423 5.3820067 + 8200 9.5352286 10.361378 4.7917095 + 8250 9.5998667 9.548455 5.3325917 + 8300 8.6800132 8.9296257 5.1167116 + 8350 9.5002383 9.3974769 4.7360673 + 8400 9.1465982 9.9114657 4.8444228 + 8450 9.4052506 9.8253802 5.0409773 + 8500 9.8500797 9.3743233 5.4810341 + 8550 10.397958 9.9150945 5.2311945 + 8600 10.050509 10.469527 5.3628699 + 8650 9.8765677 9.9046431 5.2097096 + 8700 9.4719729 9.4809771 5.1901684 + 8750 10.655877 9.3045558 5.0291182 + 8800 9.3839631 9.0770977 5.4169863 + 8850 8.5563701 9.5609016 4.9363846 + 8900 9.1540031 9.1138085 5.0313556 + 8950 9.0683988 9.0612961 5.4303556 + 9000 9.0034656 9.3514159 5.1108578 + 9050 9.6175649 10.008811 5.4158707 + 9100 9.6318001 9.8674826 5.1353951 + 9150 9.6137113 9.0624145 4.8918834 + 9200 9.6383354 9.6193304 5.1957729 + 9250 9.9634948 9.5555506 5.1157666 + 9300 9.4959396 9.2081906 4.7966165 + 9350 9.4990471 9.6393468 5.038926 + 9400 9.8650474 9.5013204 5.1687108 + 9450 10.096601 9.7576279 5.1541738 + 9500 10.287174 9.1309869 5.2725889 + 9550 9.6880559 10.46627 5.2567677 + 9600 9.4560894 10.118705 5.504487 + 9650 9.4243792 9.1251893 5.356545 + 9700 9.2088034 9.5449084 4.7599797 + 9750 9.18092 9.4732177 4.7610484 + 9800 9.7077531 9.3400296 5.1136769 + 9850 9.2906762 9.2543264 5.1607448 + 9900 9.3504492 9.4905057 4.8533019 + 9950 10.121028 9.4893638 5.0876648 + 10000 9.6330262 9.8877889 5.255801 +Loop time of 3.55576 on 1 procs for 10000 steps with 500 atoms + +Performance: 1214931.314 tau/day, 2812.341 timesteps/s +98.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.48327 | 0.48327 | 0.48327 | 0.0 | 13.59 +Neigh | 2.239 | 2.239 | 2.239 | 0.0 | 62.97 +Comm | 0.24938 | 0.24938 | 0.24938 | 0.0 | 7.01 +Output | 0.0024805 | 0.0024805 | 0.0024805 | 0.0 | 0.07 +Modify | 0.49693 | 0.49693 | 0.49693 | 0.0 | 13.98 +Other | | 0.08466 | | | 2.38 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 894 ave 894 max 894 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3473 ave 3473 max 3473 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3473 +Ave neighs/atom = 6.946 +Neighbor list builds = 4571 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:03 diff --git a/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.4 b/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.4 new file mode 100644 index 0000000000..475aa9a02d --- /dev/null +++ b/examples/USER/uef/nvt_uniaxial/log.27Nov18.nvt_uniaxial.g++.4 @@ -0,0 +1,282 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# uniaxial NVT deformation of WCA fluid + +units lj +atom_style atomic + + +pair_style lj/cut 1.122562 +read_data data.wca + orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 500 atoms + reading velocities ... + 500 velocities +pair_coeff 1 1 1.0 1.0 +pair_modify shift yes + +neighbor 0.5 bin +neigh_modify delay 0 + +change_box all triclinic + triclinic box = (0 0 0) to (8.39798 8.39798 8.39798) with tilt (0 0 0) + +fix 1 all nvt/uef temp 0.722 0.722 0.5 erate -0.5 -0.5 + +fix 2 all momentum 100 linear 1 1 1 + +#dump 1 all atom 25 dump.lammpstrj + +#dump 2 all cfg/uef 25 dump.*.cfg mass type xs ys zs + +thermo_style custom step c_1_press[1] c_1_press[2] c_1_press[3] + +thermo 50 +run 10000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.62256 + ghost atom cutoff = 1.62256 + binsize = 0.811281, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/3d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.71 | 2.71 | 2.71 Mbytes +Step c_1_press[1] c_1_press[2] c_1_press[3] + 0 6.3937851 7.0436438 6.4461087 + 50 10.369902 10.999889 6.5437384 + 100 12.411384 13.145871 7.8892802 + 150 12.88182 12.114068 7.5155182 + 200 10.375571 10.979773 6.5624056 + 250 10.158901 10.251273 5.4525068 + 300 10.011314 9.8371382 5.4031393 + 350 9.4890008 9.7992108 5.054963 + 400 9.1715116 9.2647886 4.9600208 + 450 9.8495961 9.3353483 4.986786 + 500 9.5903809 8.576173 4.8252116 + 550 8.8057509 9.7152078 4.9089022 + 600 8.9743682 10.031277 4.8924072 + 650 10.233852 9.3059527 5.1977058 + 700 9.2361906 9.6439971 5.0923762 + 750 10.449751 9.5911465 5.2548714 + 800 9.8366858 9.9873884 4.9456956 + 850 10.266351 9.9620134 5.0602713 + 900 9.6325811 9.3910947 5.1466627 + 950 9.1911905 9.1518997 4.8275336 + 1000 9.2871725 9.8508562 5.2674079 + 1050 9.7052017 10.291782 5.1603605 + 1100 9.9425819 10.36185 5.552059 + 1150 10.377567 10.265893 5.5997253 + 1200 9.6367074 10.354441 5.4138714 + 1250 9.2075345 9.1705121 4.9806597 + 1300 9.7125304 8.7247864 4.8527961 + 1350 10.146279 9.8320637 4.8957733 + 1400 9.1958551 9.7053733 5.2334299 + 1450 9.4652827 8.9011309 4.7064679 + 1500 9.097059 9.8376542 4.8890705 + 1550 10.073762 9.8105951 5.1618299 + 1600 10.132035 9.7140421 5.0910485 + 1650 9.9272143 9.8919667 5.1764704 + 1700 9.387078 8.5379185 4.9433787 + 1750 9.2411549 9.6783579 5.1290917 + 1800 10.111692 9.9975429 4.96325 + 1850 9.4723913 9.3032011 5.0282162 + 1900 9.1909638 9.8626554 4.9377276 + 1950 9.5697796 9.7975713 4.8435878 + 2000 9.8478931 9.0884861 5.2329856 + 2050 9.4412451 9.3925057 5.0522524 + 2100 9.9067445 9.8587735 4.979452 + 2150 10.200525 9.3061345 5.2583418 + 2200 9.7020113 9.5542846 5.5306109 + 2250 9.6915356 10.520416 5.3194622 + 2300 9.2391264 9.464931 5.0772628 + 2350 10.054609 9.7850417 5.653202 + 2400 9.3803459 9.4323134 4.7562131 + 2450 9.1007052 9.6904074 5.2520835 + 2500 9.2586085 9.1371198 5.1371392 + 2550 9.091608 9.3685259 5.1482359 + 2600 8.9237293 9.0406832 5.2104216 + 2650 9.7360268 9.2519429 5.0398315 + 2700 9.9929147 9.036125 4.9901821 + 2750 9.2907663 9.3352821 4.9289845 + 2800 9.5368804 10.008157 4.8400379 + 2850 9.278721 9.5887435 5.3877385 + 2900 9.6424072 9.329667 4.6934542 + 2950 9.1689315 9.9502359 5.2742219 + 3000 9.6407238 9.6896783 5.4236624 + 3050 9.4180757 9.6335563 4.9475952 + 3100 9.3014748 9.8883475 5.3334153 + 3150 9.2596884 9.3730863 4.7044615 + 3200 9.4852847 10.063705 5.1115729 + 3250 9.5837854 9.8570045 5.2152566 + 3300 10.4346 9.5070868 5.3051491 + 3350 9.2432868 9.1515564 5.1465518 + 3400 9.9697276 9.4093982 4.82531 + 3450 10.209003 10.231731 5.0156036 + 3500 10.308668 10.368321 5.8799821 + 3550 9.4034117 9.7554506 5.2690776 + 3600 9.3545829 8.9994226 5.0278441 + 3650 8.7888087 9.1237694 5.0935882 + 3700 9.0666265 9.1732984 4.877327 + 3750 9.4200226 8.6735321 4.8452306 + 3800 9.465348 9.4091671 5.0179 + 3850 8.9727774 9.0192234 4.8767313 + 3900 9.436289 10.157156 5.269109 + 3950 8.5421593 9.4062573 5.2140073 + 4000 9.3051483 8.8716005 4.7590488 + 4050 9.0535105 9.1280971 5.1646893 + 4100 9.5480831 10.259875 5.1875536 + 4150 9.9237867 10.269757 5.6394637 + 4200 9.7126407 9.5984958 5.2415146 + 4250 10.12528 9.5182979 5.5850325 + 4300 8.9818181 9.144527 5.0107697 + 4350 9.3098797 9.8024806 4.8397827 + 4400 9.2427164 9.699184 5.1366641 + 4450 9.9356359 10.651145 5.1151886 + 4500 9.7524551 9.9912434 5.2412686 + 4550 10.078703 9.5328151 5.2060043 + 4600 9.3983698 9.6152 4.9376041 + 4650 9.9963375 9.5887427 4.9306202 + 4700 10.012303 9.7114835 5.0668394 + 4750 9.6449888 9.496676 5.299027 + 4800 9.7912528 9.6515788 5.1308053 + 4850 10.063515 9.4960168 5.2149877 + 4900 9.5951954 9.2870056 4.928229 + 4950 10.20955 10.184708 5.2096074 + 5000 10.732623 9.8250159 5.3978002 + 5050 10.439323 9.6161959 4.9561115 + 5100 10.26424 9.4611487 5.6919308 + 5150 9.4638719 9.8167726 5.1475905 + 5200 9.8482876 9.4899672 5.1930896 + 5250 9.7150245 9.6183215 4.920446 + 5300 8.722617 9.3382522 4.7819079 + 5350 9.0836368 9.4113687 5.1447731 + 5400 9.6207733 9.5737842 5.0414277 + 5450 9.3552951 9.3288804 5.2373326 + 5500 9.2143176 9.024929 4.6883468 + 5550 10.372758 9.1381198 4.8012855 + 5600 9.5520148 9.7896053 5.1547238 + 5650 9.6980784 10.951142 5.0241161 + 5700 10.611679 9.6523346 5.5326608 + 5750 9.1742649 9.6494073 5.5851624 + 5800 9.953586 9.9617747 4.7007718 + 5850 10.702009 11.067871 5.1330231 + 5900 9.8673283 9.7543507 5.2206639 + 5950 10.16692 10.060199 5.0400651 + 6000 9.9341281 9.6212713 5.1712869 + 6050 9.9281773 9.4342521 5.4660461 + 6100 9.567855 9.7513309 4.7343918 + 6150 8.795041 9.9236745 5.0766601 + 6200 8.692139 9.1845134 5.1633685 + 6250 9.0701253 9.7521268 4.8172065 + 6300 9.4583102 9.3188937 5.1569152 + 6350 8.6428721 9.2062944 4.9110217 + 6400 9.3818856 9.4262935 4.9271667 + 6450 9.4895013 9.5741062 5.0173634 + 6500 9.9822263 9.1903289 5.4171946 + 6550 10.010639 9.4613863 5.6106556 + 6600 8.847069 9.180382 5.0007521 + 6650 8.8684678 9.3900848 4.6876604 + 6700 9.7575413 10.054084 4.6587676 + 6750 10.115414 9.4226624 5.4854908 + 6800 9.8529501 9.4369048 5.2366418 + 6850 10.25008 10.202239 4.929119 + 6900 10.405896 10.46272 5.2636294 + 6950 9.3342275 9.9980868 5.4788629 + 7000 9.9933544 9.3374018 4.8181134 + 7050 10.115734 10.072388 5.6490688 + 7100 10.240083 9.4087789 4.6102705 + 7150 9.2524065 9.7472716 5.0925137 + 7200 9.264148 9.9229773 5.0557618 + 7250 10.05753 9.2914209 4.6450615 + 7300 10.147183 9.8973958 5.1521105 + 7350 10.557244 9.5876788 5.2394875 + 7400 9.0062903 9.1139724 4.9104291 + 7450 10.026016 9.1880235 5.0812661 + 7500 9.770617 9.7098832 5.0578123 + 7550 8.865352 9.5783696 5.127484 + 7600 10.606037 9.9212374 5.1338765 + 7650 9.2293794 9.74635 5.3595397 + 7700 10.136014 10.510875 4.8300321 + 7750 9.9974018 9.5151713 5.0779843 + 7800 10.168972 9.5247801 5.1045215 + 7850 10.487704 9.9748481 4.9660756 + 7900 9.7134418 9.6505576 5.3677417 + 7950 9.5874439 9.6696709 4.7790879 + 8000 8.9025499 9.3980684 4.9181099 + 8050 8.9385458 9.4324137 4.8704298 + 8100 9.429405 9.6231169 4.8712228 + 8150 9.471228 9.1507346 4.9513613 + 8200 9.0945803 9.2568274 4.9583007 + 8250 9.0486717 10.276196 5.0469026 + 8300 9.5270225 9.3578605 5.0959132 + 8350 10.019204 10.255987 5.3215538 + 8400 9.3804378 9.572985 5.3114559 + 8450 9.7622725 10.933028 5.0042871 + 8500 9.980802 10.387463 5.624029 + 8550 10.177065 10.736812 5.6835861 + 8600 9.4853991 9.4572634 5.2662391 + 8650 10.021383 9.6398577 5.0548533 + 8700 10.417762 10.551382 5.1401022 + 8750 9.2932185 9.6410107 5.1252967 + 8800 10.411184 10.005891 5.5464139 + 8850 9.1394978 9.0334923 5.2709589 + 8900 9.2577227 9.1885981 4.7441276 + 8950 9.5694417 9.420939 5.1766071 + 9000 9.3252516 9.6541534 4.76132 + 9050 10.129917 10.38226 5.5151239 + 9100 9.9469348 8.7671772 5.1494135 + 9150 9.6919911 8.6522594 5.0200023 + 9200 9.4052126 9.3008012 5.0004827 + 9250 9.599934 9.5285434 4.6368794 + 9300 9.9175442 9.8256117 4.9899989 + 9350 9.5819019 9.7558559 5.2795764 + 9400 10.133518 10.376403 5.2600124 + 9450 9.6970983 9.672896 5.3803885 + 9500 9.6338577 9.8443768 5.5143033 + 9550 9.0843344 10.00471 5.3399662 + 9600 9.5235958 9.7746182 5.0639295 + 9650 9.6467057 9.3897673 5.0335239 + 9700 10.070033 8.9260067 4.9535787 + 9750 9.9158669 10.292546 4.9937494 + 9800 9.5814408 9.8764893 5.2999138 + 9850 9.4928079 9.2662598 5.5435789 + 9900 8.8291515 8.9602162 5.08972 + 9950 9.5382191 9.9064194 5.0468896 + 10000 10.212615 9.4812174 5.0704059 +Loop time of 1.34397 on 4 procs for 10000 steps with 500 atoms + +Performance: 3214349.906 tau/day, 7440.625 timesteps/s +95.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.11223 | 0.11662 | 0.12747 | 1.8 | 8.68 +Neigh | 0.57426 | 0.59024 | 0.62229 | 2.5 | 43.92 +Comm | 0.30675 | 0.35437 | 0.37755 | 4.8 | 26.37 +Output | 0.0025589 | 0.0054465 | 0.014064 | 6.7 | 0.41 +Modify | 0.17845 | 0.18351 | 0.19314 | 1.3 | 13.65 +Other | | 0.09378 | | | 6.98 + +Nlocal: 125 ave 132 max 120 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Nghost: 462.75 ave 467 max 457 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Neighs: 863.25 ave 919 max 834 min +Histogram: 2 0 1 0 0 0 0 0 0 1 + +Total # of neighbors = 3453 +Ave neighs/atom = 6.906 +Neighbor list builds = 4557 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 From 57204a0f660b1f5c1e72e37127d78962bfebdf1c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Dec 2018 10:38:01 -0500 Subject: [PATCH 264/273] reformat recently changed paragraphs in the manual --- doc/src/Build_extras.txt | 101 ++++++++++++++++++++------------------- doc/src/fix_plumed.txt | 20 ++++---- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 99d52c29e4..60bb5bbfea 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -735,66 +735,69 @@ from LAMMPS using the generic "plumed installation instructions"_plumedinstall. :link(plumedinstall,http://plumed.github.io/doc-master/user-doc/html/_installation.html) PLUMED can be linked into MD codes in three different modes: static, -shared, and runtime. With the "static" mode, all the code that PLUMED requires -is linked statically into LAMMPS. LAMMPS is then fully -independent from the PLUMED installation, but you have to -rebuild/relink it in order to update the PLUMED code inside it. With -the "shared" linkage mode, LAMMPS is linked to a shared library -that contains the PLUMED code. This library should preferably be installed in a -globally accessible location. When PLUMED is linked in this way the same library -can be used by multiple MD packages. Furthermore, the PLUMED library LAMMPS uses can be updated -without the need for a recompile of LAMMPS for as -long as the shared PLUMED library is ABI-compatible. +shared, and runtime. With the "static" mode, all the code that PLUMED +requires is linked statically into LAMMPS. LAMMPS is then fully +independent from the PLUMED installation, but you have to rebuild/relink +it in order to update the PLUMED code inside it. With the "shared" +linkage mode, LAMMPS is linked to a shared library that contains the +PLUMED code. This library should preferably be installed in a globally +accessible location. When PLUMED is linked in this way the same library +can be used by multiple MD packages. Furthermore, the PLUMED library +LAMMPS uses can be updated without the need for a recompile of LAMMPS +for as long as the shared PLUMED library is ABI-compatible. -The third linkage -mode is "runtime" which allows the user to specify which PLUMED kernel should be used at runtime -by using the PLUMED_KERNEL environment -variable. This variable should point to the location of the libplumedKernel.so -dynamical shared object, which is then loaded at runtime. This mode of linking is -particularly convenient for doing PLUMED development and comparing -multiple PLUMED versions as these sorts of comparisons can be done without recompiling the hosting MD -code. All three linkage modes are supported by LAMMPS on selected -operating systems (e.g. Linux) and using either CMake or traditional -make build. The "static" mode should be the most portable, while the "runtime" -mode support in LAMMPS makes the most assumptions about operating -system and compiler environment. If one mode does not work, try a -different one, switch to a different build system, consider -a global PLUMED installation or consider downloading PLUMED during the LAMMPS build. +The third linkage mode is "runtime" which allows the user to specify +which PLUMED kernel should be used at runtime by using the PLUMED_KERNEL +environment variable. This variable should point to the location of the +libplumedKernel.so dynamical shared object, which is then loaded at +runtime. This mode of linking is particularly convenient for doing +PLUMED development and comparing multiple PLUMED versions as these sorts +of comparisons can be done without recompiling the hosting MD code. All +three linkage modes are supported by LAMMPS on selected operating +systems (e.g. Linux) and using either CMake or traditional make +build. The "static" mode should be the most portable, while the +"runtime" mode support in LAMMPS makes the most assumptions about +operating system and compiler environment. If one mode does not work, +try a different one, switch to a different build system, consider a +global PLUMED installation or consider downloading PLUMED during the +LAMMPS build. [CMake build]: -When the "-D PKG_USER-PLUMED" flag is included in the cmake command you must ensure that -GSL is installed in locations that are specified in your environment. There -are then two additional commands that control the manner in which PLUMED is obtained and linked -into LAMMPS. +When the "-D PKG_USER-PLUMED" flag is included in the cmake command you +must ensure that GSL is installed in locations that are specified in +your environment. There are then two additional commands that control +the manner in which PLUMED is obtained and linked into LAMMPS. -D DOWNLOAD_PLUMED=value # download PLUMED for build, value = no (default) or yes -D PLUMED_MODE=value # Linkage mode for PLUMED, value = static (default), shared, or runtime :pre If DOWNLOAD_PLUMED is set to "yes", the PLUMED library will be -downloaded (the version of PLUMED that will be downloaded is hard-coded to a vetted version of -PLUMED, usually a recent stable release version) and built inside the -CMake build directory. If DOWNLOAD_PLUMED is set to "no" (the default), -CMake will try to detect and link to an installed version of PLUMED. -For this to work, the PLUMED library has to be installed into a -location where the pkg-config tool can find it or the PKG_CONFIG_PATH -environment variable has to be set up accordingly. PLUMED should be installed -in such a location if you compile it using the default make; make install commands. +downloaded (the version of PLUMED that will be downloaded is hard-coded +to a vetted version of PLUMED, usually a recent stable release version) +and built inside the CMake build directory. If DOWNLOAD_PLUMED is set +to "no" (the default), CMake will try to detect and link to an installed +version of PLUMED. For this to work, the PLUMED library has to be +installed into a location where the pkg-config tool can find it or the +PKG_CONFIG_PATH environment variable has to be set up accordingly. +PLUMED should be installed in such a location if you compile it using +the default make; make install commands. The PLUMED_MODE setting determines the linkage mode for the PLUMED -library. The allowed values for this flag are "static" (default), "shared", or "runtime". -For a discussion of PLUMED linkage modes, please see above. When -DOWNLOAD_PLUMED is enabled the static linkage mode is recommended. +library. The allowed values for this flag are "static" (default), +"shared", or "runtime". For a discussion of PLUMED linkage modes, +please see above. When DOWNLOAD_PLUMED is enabled the static linkage +mode is recommended. [Traditional make]: PLUMED needs to be installed before the USER-PLUMED package is installed -so that LAMMPS can find the right settings when compiling and linking the LAMMPS executable. -You can either download and build PLUMED inside the LAMMPS plumed library folder or use -a previously installed PLUMED library and point LAMMPS to its -location. You also have to choose the linkage mode: "static" (default), -"shared" or "runtime". For a discussion of PLUMED linkage modes, please -see above. +so that LAMMPS can find the right settings when compiling and linking +the LAMMPS executable. You can either download and build PLUMED inside +the LAMMPS plumed library folder or use a previously installed PLUMED +library and point LAMMPS to its location. You also have to choose the +linkage mode: "static" (default), "shared" or "runtime". For a +discussion of PLUMED linkage modes, please see above. Download/compilation/configuration of the plumed library can be done from the src folder through the following make args: @@ -808,10 +811,10 @@ make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installati Note that 2 symbolic (soft) links, "includelink" and "liblink" are created in lib/plumed that point to the location of the PLUMED build to -use. A new file lib/plumed/Makefile.lammps is also created with -settings suitable for LAMMPS to compile and link PLUMED using the desired -linkage mode. After this step is completed, you can install the -USER-PLUMED package and compile LAMMPS in the usual manner: +use. A new file lib/plumed/Makefile.lammps is also created with settings +suitable for LAMMPS to compile and link PLUMED using the desired linkage +mode. After this step is completed, you can install the USER-PLUMED +package and compile LAMMPS in the usual manner: make yes-user-plumed make machine :pre diff --git a/doc/src/fix_plumed.txt b/doc/src/fix_plumed.txt index eff6c88327..97b3150a0b 100644 --- a/doc/src/fix_plumed.txt +++ b/doc/src/fix_plumed.txt @@ -32,11 +32,10 @@ enhance the sampling of phase space. The documentation included here only describes the fix plumed command itself. This command is LAMMPS specific, whereas most of the -functionality implemented in PLUMED will work with a range of -MD codes, and when PLUMED is used as a stand alone code for analysis. -The full "documentation for PLUMED"_plumeddocs is available online and -included in the PLUMED source code. The PLUMED library development is -hosted at +functionality implemented in PLUMED will work with a range of MD codes, +and when PLUMED is used as a stand alone code for analysis. The full +"documentation for PLUMED"_plumeddocs is available online and included +in the PLUMED source code. The PLUMED library development is hosted at "https://github.com/plumed/plumed2"_https://github.com/plumed/plumed2 A detailed discussion of the code can be found in "(PLUMED)"_#PLUMED. @@ -54,11 +53,12 @@ have been set. The {group-ID} entry is ignored. LAMMPS will always pass all the atoms to PLUMED and there can only be one instance of the plumed fix at a -time. The way the plumed fix is implemented ensures that the minimum amount of information -required is communicated. Furthermore, PLUMED supports multiple, completely independent -collective variables, multiple independent biases and multiple -independent forms of analysis. There is thus really no restriction in -functionality by only allowing only one plumed fix in the LAMMPS input. +time. The way the plumed fix is implemented ensures that the minimum +amount of information required is communicated. Furthermore, PLUMED +supports multiple, completely independent collective variables, multiple +independent biases and multiple independent forms of analysis. There is +thus really no restriction in functionality by only allowing only one +plumed fix in the LAMMPS input. The {plumedfile} keyword allows the user to specify the name of the PLUMED input file. Instructions as to what should be included in a From 4078c7897e442a64ec27f161f52a2479dfd4b259 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 8 Dec 2018 15:00:14 -0500 Subject: [PATCH 265/273] fix permissions --- src/MAKE/MACHINES/Makefile.cori2 | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/MAKE/MACHINES/Makefile.cori2 diff --git a/src/MAKE/MACHINES/Makefile.cori2 b/src/MAKE/MACHINES/Makefile.cori2 old mode 100755 new mode 100644 From 802bf4bc1fa89c3197f323ee064d97afbd735252 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 8 Dec 2018 15:00:33 -0500 Subject: [PATCH 266/273] update .gitignore for recently added files --- src/.gitignore | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index acba20b79d..13aeee4d6e 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -225,6 +225,10 @@ /atom_vec_template.h /body_nparticle.cpp /body_nparticle.h +/body_rounded_polygon.cpp +/body_rounded_polygon.h +/body_rounded_polyhedron.cpp +/body_rounded_polyhedron.h /bond_class2.cpp /bond_class2.h /bond_fene.cpp @@ -309,8 +313,12 @@ /compute_pressure_cylinder.h /compute_pressure_grem.cpp /compute_pressure_grem.h +/compute_ptm_atom.cpp +/compute_ptm_atom.h /compute_rigid_local.cpp /compute_rigid_local.h +/compute_smd_triangle_vertices.cpp +/compute_smd_triangle_vertices.h /compute_spec_atom.cpp /compute_spec_atom.h /compute_stress_mop.cpp @@ -421,6 +429,8 @@ /fix_bond_react.h /fix_bond_swap.cpp /fix_bond_swap.h +/fix_client_md.cpp +/fix_client_md.h /fix_cmap.cpp /fix_cmap.h /fix_deposit.cpp @@ -445,6 +455,8 @@ /fix_ehex.h /fix_event.cpp /fix_event.h +/fix_event_hyper.cpp +/fix_event_hyper.h /fix_event_prd.cpp /fix_event_prd.h /fix_event_tad.cpp @@ -463,6 +475,12 @@ /fix_gpu.h /fix_grem.cpp /fix_grem.h +/fix_hyper.cpp +/fix_hyper.h +/fix_hyper_global.cpp +/fix_hyper_global.h +/fix_hyper_local.cpp +/fix_hyper_local.h /fix_imd.cpp /fix_imd.h /fix_ipi.cpp @@ -626,6 +644,10 @@ /fix_ttm.h /fix_tune_kspace.cpp /fix_tune_kspace.h +/fix_wall_body_polygon.cpp +/fix_wall_body_polygon.h +/fix_wall_body_polyhedron.cpp +/fix_wall_body_polyhedron.h /fix_wall_colloid.cpp /fix_wall_colloid.h /fix_wall_ees.cpp @@ -647,6 +669,8 @@ /group_ndx.h /ndx_group.cpp /ndx_group.h +/hyper.cpp +/hyper.h /improper_class2.cpp /improper_class2.h /improper_cossq.cpp @@ -671,6 +695,8 @@ /lj_sdk_common.h /math_complex.h /math_vector.h +/message.cpp +/message.h /mgpt_*.cpp /mgpt_*.h /msm.cpp @@ -688,8 +714,14 @@ /pair_airebo.h /pair_airebo_morse.cpp /pair_airebo_morse.h -/pair_body.cpp -/pair_body.h +/pair_atm.cpp +/pair_atm.h +/pair_body_nparticle.cpp +/pair_body_nparticle.h +/pair_body_rounded_polygon.cpp +/pair_body_rounded_polygon.h +/pair_body_rounded_polyhedron.cpp +/pair_body_rounded_polyhedron.h /pair_bop.cpp /pair_bop.h /pair_born_coul_long.cpp @@ -1028,6 +1060,14 @@ /remap_wrap.h /restart_mpiio.cpp /restart_mpiio.h +/scafacos.cpp +/scafacos.h +/server.cpp +/server.h +/server_mc.cpp +/server_mc.h +/server_md.cpp +/server_md.h /smd_kernels.h /smd_material_models.cpp /smd_material_models.h From 8f95cdcb2727eaa747ba0605a29cdba48e121e83 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 9 Dec 2018 16:24:06 -0500 Subject: [PATCH 267/273] small update to the fix rigid/meso command docs --- doc/src/fix_rigid_meso.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt index d86d359f1d..0819fdb2fb 100644 --- a/doc/src/fix_rigid_meso.txt +++ b/doc/src/fix_rigid_meso.txt @@ -160,7 +160,7 @@ unaffected by interactions with other particles. Note that if you expect a rigid body not to move or rotate by using these keywords, you must insure its initial center-of-mass translational or angular velocity is 0.0. Otherwise the initial translational or angular -momentum the body has will persist. +momentum, the body has, will persist. An xflag, yflag, or zflag set to {off} means turn off the component of force or torque in that dimension. A setting of {on} means turn on @@ -287,9 +287,10 @@ bodies. The number of columns is 28. Thus for each rigid body, 28 values are stored: the xyz coords of the center of mass (COM), the xyz components of the COM velocity, the xyz components of the force acting on the COM, the components of the 4-vector quaternion representing the -orientation of the rigid body, the xyz components of the angular momentum +orientation of the rigid body, the xyz components of the angular velocity of the body around its COM, the xyz components of the torque acting on the -COM, the 3 principal components of the moment of inertia and the xyz image +COM, the 3 principal components of the moment of inertia, the xyz components +of the angular momentum of the body around its COM, and the xyz image flags of the COM. The center of mass (COM) for each body is similar to unwrapped From b6b813459bddedaa11faee95debeb8c89c77bbae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 11:04:52 -0500 Subject: [PATCH 268/273] update example logfiles for USER-DRUDE package --- .../butane/log.27Nov18.butane.lang.g++.1 | 193 ++++++++++++ .../butane/log.27Nov18.butane.lang.g++.4 | 193 ++++++++++++ .../drude/butane/log.27Nov18.butane.nh.g++.1 | 199 ++++++++++++ .../drude/butane/log.27Nov18.butane.nh.g++.4 | 199 ++++++++++++ .../butane/log.butane.lang.18Jul15.linux.1 | 171 ----------- .../butane/log.butane.lang.18Jul15.linux.4 | 171 ----------- .../butane/log.butane.nh.18Jul15.linux.3 | 177 ----------- .../butane/log.butane.nh.18Jul15.linux.4 | 177 ----------- .../ethanol/log.27Nov18.ethanol.lang.g++.1 | 277 +++++++++++++++++ .../ethanol/log.27Nov18.ethanol.lang.g++.4 | 277 +++++++++++++++++ .../ethanol/log.27Nov18.ethanol.nh.g++.1 | 286 ++++++++++++++++++ .../ethanol/log.27Nov18.ethanol.nh.g++.4 | 286 ++++++++++++++++++ .../ethanol/log.ethanol.lang.8Jul15.linux.1 | 254 ---------------- .../ethanol/log.ethanol.lang.8Jul15.linux.4 | 254 ---------------- .../ethanol/log.ethanol.nh.8Jul15.linux.1 | 263 ---------------- .../ethanol/log.ethanol.nh.8Jul15.linux.4 | 263 ---------------- .../swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.1 | 246 +++++++++++++++ .../swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.4 | 246 +++++++++++++++ .../swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.1 | 252 +++++++++++++++ .../swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.4 | 252 +++++++++++++++ .../swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.1 | 230 -------------- .../swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.4 | 230 -------------- .../swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.1 | 236 --------------- .../swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.4 | 236 --------------- .../toluene/log.27Nov18.toluene.lang.g++.1 | 14 + .../toluene/log.27Nov18.toluene.lang.g++.4 | 14 + .../toluene/log.27Nov18.toluene.nh.g++.1 | 14 + .../toluene/log.27Nov18.toluene.nh.g++.4 | 14 + .../toluene/log.toluene.lang.11Aug17.linux.1 | 251 --------------- .../toluene/log.toluene.lang.11Aug17.linux.4 | 251 --------------- .../toluene/log.toluene.nh.11Aug17.linux.1 | 259 ---------------- .../toluene/log.toluene.nh.11Aug17.linux.4 | 259 ---------------- 32 files changed, 2962 insertions(+), 3682 deletions(-) create mode 100644 examples/USER/drude/butane/log.27Nov18.butane.lang.g++.1 create mode 100644 examples/USER/drude/butane/log.27Nov18.butane.lang.g++.4 create mode 100644 examples/USER/drude/butane/log.27Nov18.butane.nh.g++.1 create mode 100644 examples/USER/drude/butane/log.27Nov18.butane.nh.g++.4 delete mode 100644 examples/USER/drude/butane/log.butane.lang.18Jul15.linux.1 delete mode 100644 examples/USER/drude/butane/log.butane.lang.18Jul15.linux.4 delete mode 100644 examples/USER/drude/butane/log.butane.nh.18Jul15.linux.3 delete mode 100644 examples/USER/drude/butane/log.butane.nh.18Jul15.linux.4 create mode 100644 examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.1 create mode 100644 examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.4 create mode 100644 examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.1 create mode 100644 examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.4 delete mode 100644 examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.1 delete mode 100644 examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.4 delete mode 100644 examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.1 delete mode 100644 examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.4 create mode 100644 examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.1 create mode 100644 examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.4 create mode 100644 examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.1 create mode 100644 examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.4 delete mode 100644 examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.1 delete mode 100644 examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.4 delete mode 100644 examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.1 delete mode 100644 examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.4 create mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 create mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 create mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 create mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 delete mode 100644 examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.1 delete mode 100644 examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.4 delete mode 100644 examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.1 delete mode 100644 examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.4 diff --git a/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.1 b/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.1 new file mode 100644 index 0000000000..0302966447 --- /dev/null +++ b/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.1 @@ -0,0 +1,193 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 butane system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.butane + orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 4250 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6750 dihedrals + 5 = max # of 1-2 neighbors + 8 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 17 = max # of special neighbors + +comm_modify vel yes + +group gBUTANE molecule 1:250 +4500 atoms in group gBUTANE +group gCORES type 1 2 3 +3500 atoms in group gCORES +group gDRUDES type 4 5 +1000 atoms in group gDRUDES + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 * thole 1.368000 +pair_coeff 2 * thole 1.368000 +pair_coeff 4 * thole 1.368000 +pair_coeff 5 * thole 1.368000 + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 + 0 = # of size 2 clusters + 500 = # of size 3 clusters + 500 = # of size 4 clusters + 0 = # of frozen angles + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nve + +compute cTEMP all temp/drude + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.367867 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.031354 + estimated relative force accuracy = 9.44215e-05 + using double precision FFTs + 3d grid and FFT values/proc = 79507 46656 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 17 +New max number of 1-2 to 1-4 neighbors: 17 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 26.29 | 26.29 | 26.29 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 4439.7916 55742.797 334.61375 18.435655 + 50 1.8285224 3442.9216 2047.8425 187.41713 1395.0792 844.61103 802.43438 114.10967 0 -765.532 595242.44 -594842.98 3027.409 55742.797 200.4343 152.51723 + 100 3.7075663 2949.9137 1973.6229 180.62461 976.29073 358.0742 923.62856 174.43734 0 -919.88297 595306.76 -594866.72 2009.106 55742.797 229.49986 50.10998 + 150 5.5383921 2885.0697 1951.4547 178.59578 933.61499 234.26452 991.10197 194.44106 0 -910.03339 595293.22 -594869.38 4963.8801 55742.797 240.13548 14.311317 + 200 7.4217758 2890.343 1901.2801 174.00384 989.06297 227.57533 1077.5605 200.01467 0 -943.83325 595298.11 -594870.36 2977.5804 55742.797 237.27186 5.1150968 + 250 9.2994335 2922.348 1945.2702 178.02978 977.07781 212.26144 1127.8726 194.65284 0 -984.2934 595297.59 -594871.01 1592.2372 55742.797 243.81864 2.4147813 + 300 11.125204 2986.575 2013.159 184.24291 973.41608 212.85963 1130.6272 194.90599 0 -992.98724 595299.3 -594871.29 2816.8628 55742.797 252.63444 1.681279 + 350 12.99769 3051.4916 1978.4541 181.06675 1073.0375 228.43411 1195.4688 205.43169 0 -982.55178 595297.25 -594871 1408.7973 55742.797 248.34887 1.4666749 + 400 14.865399 3011.3983 1995.0047 182.58145 1016.3936 237.79955 1167.8185 197.49857 0 -1014.9362 595298.99 -594870.78 1456.5007 55742.797 250.45674 1.3981189 + 450 16.681866 3010.262 1976.9744 180.93133 1033.2876 216.3478 1196.7189 197.65964 0 -1005.6015 595298.72 -594870.56 1296.528 55742.797 248.1869 1.4022273 + 500 18.553431 3051.4554 2022.049 185.05652 1029.4064 220.84993 1196.1502 199.57249 0 -1014.3775 595298.27 -594871.05 2481.7571 55742.797 253.85835 1.3999256 + 550 20.416665 3086.0021 2018.9226 184.7704 1067.0796 221.95877 1215.9767 213.3405 0 -1012.5564 595299.48 -594871.12 1694.9376 55742.797 253.47686 1.3683935 + 600 22.27849 3110.9928 2030.8992 185.86649 1080.0935 220.35725 1253.9571 208.13083 0 -1030.4314 595298.96 -594870.88 -76.102661 55742.797 254.95682 1.4397403 + 650 24.087152 3154.373 2024.8469 185.31258 1129.5261 221.85968 1283.352 210.69451 0 -1015.2311 595299.67 -594870.82 1280.5683 55742.797 254.20302 1.4194509 + 700 25.941822 3133.85 2054.2045 187.99938 1079.6454 225.19338 1242.7819 192.54094 0 -1010.8971 595301.2 -594871.18 696.8538 55742.797 257.8878 1.4422435 + 750 27.79477 3189.0815 2103.7507 192.53381 1085.3308 219.46949 1243.7676 203.10695 0 -1010.2442 595299.93 -594870.7 483.46393 55742.797 264.14441 1.3796789 + 800 29.64589 3173.663 2053.4832 187.93336 1120.1799 219.59931 1256.2721 218.76191 0 -1003.0067 595299.37 -594870.81 543.09774 55742.797 257.81268 1.4005681 + 850 31.44585 3221.2873 2083.5215 190.68244 1137.7658 224.0492 1276.9143 219.91997 0 -1011.193 595298.47 -594870.4 143.54962 55742.797 261.60038 1.3772624 + 900 33.293605 3214.96 2053.8414 187.96614 1161.1187 222.21434 1296.0291 226.57612 0 -1013.6289 595300.61 -594870.68 473.39553 55742.797 257.85596 1.4053153 + 950 35.166863 3213.1086 2123.777 194.3666 1089.3317 221.79126 1251.6851 200.63798 0 -1014.0889 595300.01 -594870.7 1206.8497 55742.797 266.62111 1.4935247 + 1000 36.983663 3211.3103 2079.738 190.33618 1131.5723 225.4767 1260.2162 204.61245 0 -986.95685 595298.7 -594870.48 787.31501 55742.797 261.0928 1.4615275 + 1050 38.806926 3199.3221 2095.9148 191.81667 1103.4073 212.62976 1255.417 208.36886 0 -1001.9237 595299.13 -594870.21 239.45594 55742.797 263.14173 1.4246893 + 1100 40.634771 3199.8694 2067.6467 189.2296 1132.2227 235.50505 1264.2214 198.42446 0 -994.78564 595299.12 -594870.26 830.67515 55742.797 259.58627 1.4225726 + 1150 42.427903 3172.4663 2083.0988 190.64376 1089.3675 209.20043 1236.7213 204.50261 0 -990.26027 595299.43 -594870.22 1355.1408 55742.797 261.54264 1.389433 + 1200 44.302469 3178.2153 2055.1801 188.08866 1123.0351 230.76616 1258.2175 205.04893 0 -999.28826 595298.25 -594869.96 819.5423 55742.797 258.01926 1.4189827 + 1250 46.164956 3224.5367 2108.1449 192.93596 1116.3918 235.56939 1247.0387 212.74774 0 -1007.3896 595298.16 -594869.74 -146.38102 55742.797 264.67477 1.4395372 + 1300 48.015128 3286.0631 2125.3364 194.50931 1160.7267 236.69229 1272.7247 218.49151 0 -995.46842 595298.38 -594870.1 434.46496 55742.797 266.83295 1.451771 + 1350 49.79655 3247.1808 2087.4518 191.04214 1159.7291 215.07571 1301.219 211.43766 0 -995.15128 595297.24 -594870.09 1501.3496 55742.797 262.07016 1.44305 + 1400 51.624074 3194.7716 2041.9251 186.87557 1152.8466 236.94802 1261.0635 209.14663 0 -982.03995 595297.35 -594869.63 346.64925 55742.797 256.31352 1.5208162 + 1450 53.450535 3229.6083 2087.4545 191.04239 1142.1538 246.85361 1264.077 205.22437 0 -1003.5382 595299.44 -594869.9 278.1536 55742.797 262.08335 1.4087832 + 1500 55.288627 3249.6608 2089.8541 191.262 1159.8067 238.99337 1274.9502 206.61799 0 -988.99015 595297.98 -594869.75 636.34142 55742.797 262.36618 1.4595924 + 1550 57.093174 3273.2213 2122.5463 194.25397 1150.675 230.16428 1274.9965 195.7686 0 -979.24728 595298.84 -594869.85 528.01943 55742.797 266.47594 1.4678006 + 1600 58.978489 3288.6787 2120.7284 194.0876 1167.9503 229.10278 1274.2494 205.30619 0 -969.94195 595298.85 -594869.62 1126.6579 55742.797 266.23416 1.5026913 + 1650 60.803467 3286.3327 2148.1031 196.59291 1138.2295 234.18582 1256.2009 214.69184 0 -995.41699 595298.38 -594869.81 -457.07393 55742.797 269.67989 1.4977223 + 1700 62.624963 3296.9487 2092.8432 191.53556 1204.1055 238.05554 1313.8592 213.47968 0 -989.09874 595297.16 -594869.35 981.42569 55742.797 262.7423 1.4593707 + 1750 64.39829 3310.3958 2097.6547 191.97591 1212.7411 243.56621 1309.681 210.07115 0 -978.63733 595297.78 -594869.72 -41.877565 55742.797 263.31945 1.5344885 + 1800 66.216881 3229.7417 2079.7567 190.33789 1149.985 226.57585 1276.3941 202.60118 0 -984.26122 595298.62 -594869.94 515.97995 55742.797 261.07174 1.5239416 + 1850 68.038292 3199.6375 2033.1459 186.0721 1166.4916 242.84458 1267.7768 212.87764 0 -984.52187 595296.72 -594869.21 440.77319 55742.797 255.22287 1.4839954 + 1900 69.841965 3155.3872 2019.0731 184.78417 1136.3141 213.38104 1263.0105 213.0042 0 -980.43253 595296.92 -594869.57 469.76979 55742.797 253.48524 1.3965366 + 1950 71.702563 3191.9366 2051.5475 187.75621 1140.3891 211.61608 1278.9441 206.1048 0 -984.04544 595297.56 -594869.79 758.07165 55742.797 257.54478 1.4655839 + 2000 73.520102 3214.3938 2041.9357 186.87654 1172.4582 237.13198 1275.4194 218.0467 0 -985.25597 595296.76 -594869.64 375.81502 55742.797 256.33161 1.4761528 +Loop time of 73.5201 on 1 procs for 2000 steps with 4500 atoms + +Performance: 1.175 ns/day, 20.422 hours/ns, 27.203 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 50.346 | 50.346 | 50.346 | 0.0 | 68.48 +Bond | 3.3227 | 3.3227 | 3.3227 | 0.0 | 4.52 +Kspace | 16.003 | 16.003 | 16.003 | 0.0 | 21.77 +Neigh | 1.3495 | 1.3495 | 1.3495 | 0.0 | 1.84 +Comm | 0.33013 | 0.33013 | 0.33013 | 0.0 | 0.45 +Output | 0.0044131 | 0.0044131 | 0.0044131 | 0.0 | 0.01 +Modify | 2.1068 | 2.1068 | 2.1068 | 0.0 | 2.87 +Other | | 0.05755 | | | 0.08 + +Nlocal: 4500 ave 4500 max 4500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 8703 ave 8703 max 8703 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 860806 ave 860806 max 860806 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 860806 +Ave neighs/atom = 191.29 +Ave special neighs/atom = 13.3333 +Neighbor list builds = 28 +Dangerous builds = 0 +Total wall time: 0:01:13 diff --git a/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.4 b/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.4 new file mode 100644 index 0000000000..3a0f60f3cb --- /dev/null +++ b/examples/USER/drude/butane/log.27Nov18.butane.lang.g++.4 @@ -0,0 +1,193 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 butane system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.butane + orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) + 2 by 1 by 2 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 4250 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6750 dihedrals + 5 = max # of 1-2 neighbors + 8 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 17 = max # of special neighbors + +comm_modify vel yes + +group gBUTANE molecule 1:250 +4500 atoms in group gBUTANE +group gCORES type 1 2 3 +3500 atoms in group gCORES +group gDRUDES type 4 5 +1000 atoms in group gDRUDES + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 * thole 1.368000 +pair_coeff 2 * thole 1.368000 +pair_coeff 4 * thole 1.368000 +pair_coeff 5 * thole 1.368000 + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 + 0 = # of size 2 clusters + 500 = # of size 3 clusters + 500 = # of size 4 clusters + 0 = # of frozen angles + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nve + +compute cTEMP all temp/drude + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.367867 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.031354 + estimated relative force accuracy = 9.44215e-05 + using double precision FFTs + 3d grid and FFT values/proc = 26875 11664 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 17 +New max number of 1-2 to 1-4 neighbors: 17 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 16.75 | 17.03 | 17.13 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 4439.7916 55742.797 334.61375 18.435655 + 50 0.60067916 3418.0026 2021.3092 184.98882 1396.6934 835.43668 808.1357 113.8069 0 -759.89265 595242.48 -594843.28 3040.8412 55742.797 197.07838 152.67751 + 100 1.1808443 2892.8432 1932.7674 176.88554 960.07578 363.31823 924.84568 164.52097 0 -931.84989 595306.29 -594867.05 1694.4336 55742.797 224.44681 49.87859 + 150 1.7504072 2833.9225 1947.7257 178.2545 886.19681 243.64601 972.03324 186.73658 0 -941.85405 595295.47 -594869.83 4603.775 55742.797 239.63159 14.40403 + 200 2.3280952 2870.6299 1920.2424 175.73925 950.38759 226.3737 1061.7175 186.27763 0 -950.17253 595296.43 -594870.24 2606.5041 55742.797 239.64552 5.1468097 + 250 2.9009523 2894.0913 1933.574 176.95936 960.51728 215.18824 1118.0957 195.43563 0 -993.95102 595296.54 -594870.8 1812.6379 55742.797 242.26101 2.6446653 + 300 3.4866827 2959.1219 1970.1936 180.31075 988.92834 209.63552 1155.4811 193.64322 0 -996.9511 595297.92 -594870.8 3371.5528 55742.797 247.17325 1.8304564 + 350 4.1206505 2988.7765 1988.8664 182.01968 999.91007 217.65998 1148.4029 204.96757 0 -996.5586 595296.05 -594870.61 3021.4005 55742.797 249.63956 1.5179762 + 400 4.7467482 3014.5638 1983.6589 181.54309 1030.9049 225.81008 1174.5083 214.70193 0 -1012.492 595298.89 -594870.51 668.28879 55742.797 249.02834 1.40089 + 450 5.3385043 3065.528 2028.5299 185.64965 1036.9981 206.85828 1232.536 204.7453 0 -1034.5447 595297.52 -594870.12 1276.895 55742.797 254.65283 1.4568976 + 500 5.8841732 3087.3359 1998.9143 182.93925 1088.4216 209.84037 1244.2781 211.45124 0 -1004.5214 595297.9 -594870.53 1811.1357 55742.797 250.95893 1.3696214 + 550 6.495003 3082.7524 2000.662 183.0992 1082.0904 218.46927 1229.7948 204.12764 0 -997.16039 595297.23 -594870.37 2005.0512 55742.797 251.16775 1.399994 + 600 7.0529547 3089.1148 2008.9702 183.85957 1080.1445 215.63956 1239.6501 205.6559 0 -1008.3414 595297.61 -594870.07 1579.3906 55742.797 252.19307 1.453043 + 650 7.6147993 3094.7607 1984.215 181.59398 1110.5457 217.2587 1270.5436 217.11567 0 -1021.7236 595297.37 -594870.02 922.17911 55742.797 249.09972 1.3970954 + 700 8.1847589 3085.7974 1977.7443 181.00179 1108.0531 226.89107 1263.0937 209.93619 0 -1019.8382 595298.21 -594870.24 1358.6744 55742.797 248.27153 1.4348071 + 750 8.7551639 3098.7075 1990.5214 182.17114 1108.186 210.53964 1263.8112 208.67005 0 -1002.6807 595298.31 -594870.47 1389.4827 55742.797 249.86686 1.4670711 + 800 9.3312614 3106.7743 2001.1286 183.14191 1105.6457 223.39008 1267.3688 200.94765 0 -1014.1025 595298.4 -594870.36 498.96153 55742.797 251.20537 1.4561965 + 850 9.9120548 3162.1905 2015.7594 184.4809 1146.4311 238.91403 1296.3319 216.49567 0 -1033.2993 595298.07 -594870.08 -146.24973 55742.797 253.06241 1.4124079 + 900 10.506582 3151.6622 2017.7351 184.66172 1133.9272 225.66798 1259.6857 214.41352 0 -993.82625 595298.42 -594870.44 855.52595 55742.797 253.32946 1.3630807 + 950 11.073148 3108.5571 1984.4638 181.61676 1124.0933 219.09683 1258.9728 215.5009 0 -998.11162 595299.1 -594870.46 742.29532 55742.797 249.13228 1.3937456 + 1000 11.712476 3151.1431 2010.1073 183.96363 1141.0358 234.62673 1262.3296 218.152 0 -1001.9319 595297.94 -594870.08 -15.429859 55742.797 252.31702 1.5039719 + 1050 12.416933 3154.9906 2025.2409 185.34864 1129.7498 240.28475 1245.2732 211.12104 0 -994.07995 595297.56 -594870.41 220.34341 55742.797 254.21036 1.5313366 + 1100 13.000971 3146.7058 2015.0512 184.41609 1131.6546 217.69098 1255.773 216.52818 0 -985.5434 595297.52 -594870.32 245.54987 55742.797 252.9731 1.4117211 + 1150 13.566174 3184.3315 2097.0388 191.91954 1087.2926 210.06417 1226.6616 216.15719 0 -994.73562 595299.65 -594870.51 960.8241 55742.797 263.29333 1.3975188 + 1200 14.098352 3181.1191 2062.3454 188.74443 1118.7737 228.90526 1255.3357 202.92363 0 -997.73355 595299.52 -594870.18 341.31357 55742.797 258.91222 1.4415835 + 1250 14.653097 3174.3638 2030.9146 185.8679 1143.4492 239.32477 1267.7689 201.40964 0 -992.67835 595297.78 -594870.16 399.69023 55742.797 254.97189 1.4037218 + 1300 15.198202 3181.4157 2020.4604 184.91114 1160.9553 213.94195 1283.8134 212.79399 0 -977.52401 595298.12 -594870.19 141.81633 55742.797 253.64065 1.447907 + 1350 15.763844 3221.4526 2077.8786 190.16601 1143.574 237.97099 1261.8854 206.43835 0 -991.01514 595298.43 -594870.14 293.86155 55742.797 260.85797 1.4643006 + 1400 16.36341 3273.4082 2117.3713 193.78035 1156.0369 241.63847 1257.3077 215.03947 0 -986.42491 595298.6 -594870.13 881.28305 55742.797 265.82788 1.4598428 + 1450 16.907335 3277.2159 2086.1619 190.92409 1191.054 245.42292 1289.0177 220.33432 0 -991.71405 595297.92 -594869.93 24.577369 55742.797 261.91752 1.4173689 + 1500 17.461373 3277.8652 2139.2814 195.78556 1138.5838 230.79453 1253.5268 210.7018 0 -984.94169 595298.66 -594870.16 612.24618 55742.797 268.59444 1.432741 + 1550 17.996041 3247.9903 2120.4397 194.06118 1127.5505 237.85251 1244.2413 207.38138 0 -989.02975 595297.17 -594870.07 908.40409 55742.797 266.20105 1.4941148 + 1600 18.546506 3263.2065 2095.2604 191.75678 1167.9461 222.27478 1287.0828 217.80256 0 -988.01164 595299.17 -594870.37 372.09439 55742.797 263.06244 1.4165997 + 1650 19.087156 3279.007 2102.6708 192.43497 1176.3363 228.35925 1287.432 218.78886 0 -987.87117 595299.94 -594870.32 -277.43091 55742.797 263.9961 1.4129192 + 1700 19.665064 3297.4084 2103.7436 192.53316 1193.6648 248.40926 1304.8649 202.53258 0 -989.5236 595297.12 -594869.74 1158.9952 55742.797 264.11122 1.4655993 + 1750 20.367483 3280.0391 2075.6964 189.9663 1204.3427 240.06411 1311.9499 213.18798 0 -987.79028 595296.5 -594869.56 437.83034 55742.797 260.60055 1.4183112 + 1800 20.942509 3272.2429 2082.8406 190.62013 1189.4023 235.68331 1306.7318 216.11438 0 -997.06553 595297.79 -594869.86 1293.8956 55742.797 261.49937 1.4181999 + 1850 21.546463 3288.8649 2088.0429 191.09624 1200.822 239.22801 1297.8732 214.15066 0 -979.04152 595298.01 -594869.39 217.43385 55742.797 262.15237 1.4245994 + 1900 22.118972 3213.0018 2032.382 186.00219 1180.6198 222.35796 1278.9261 222.52754 0 -969.8068 595296.01 -594869.39 563.16684 55742.797 255.16077 1.393322 + 1950 22.701752 3228.1804 2084.1556 190.74048 1144.0248 232.43889 1247.3333 216.54358 0 -981.18306 595298.59 -594869.7 -309.06733 55742.797 261.65433 1.4460719 + 2000 23.402514 3297.5065 2091.6171 191.42335 1205.8894 238.75396 1287.293 220.47084 0 -968.78447 595297.97 -594869.81 128.84944 55742.797 262.59803 1.4363623 +Loop time of 23.4026 on 4 procs for 2000 steps with 4500 atoms + +Performance: 3.692 ns/day, 6.501 hours/ns, 85.461 timesteps/s +96.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 12.545 | 13.094 | 13.896 | 14.0 | 55.95 +Bond | 0.83177 | 0.90776 | 0.96459 | 5.1 | 3.88 +Kspace | 6.3904 | 7.1918 | 7.7297 | 18.8 | 30.73 +Neigh | 0.38941 | 0.38974 | 0.38988 | 0.0 | 1.67 +Comm | 0.65148 | 0.70795 | 0.7821 | 5.6 | 3.03 +Output | 0.0028274 | 0.0036304 | 0.0057163 | 2.0 | 0.02 +Modify | 1.0483 | 1.0571 | 1.0693 | 0.9 | 4.52 +Other | | 0.05109 | | | 0.22 + +Nlocal: 1125 ave 1207 max 1003 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Nghost: 5763 ave 5904 max 5656 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 214633 ave 220347 max 204542 min +Histogram: 1 0 0 0 0 0 1 0 1 1 + +Total # of neighbors = 858532 +Ave neighs/atom = 190.785 +Ave special neighs/atom = 13.3333 +Neighbor list builds = 28 +Dangerous builds = 0 +Total wall time: 0:00:23 diff --git a/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.1 b/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.1 new file mode 100644 index 0000000000..fbbe14192e --- /dev/null +++ b/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.1 @@ -0,0 +1,199 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 butane system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.butane + orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 4250 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6750 dihedrals + 5 = max # of 1-2 neighbors + 8 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 17 = max # of special neighbors + +group gBUTANE molecule 1:250 +4500 atoms in group gBUTANE +group gCORES type 1 2 3 +3500 atoms in group gCORES +group gDRUDES type 4 5 +1000 atoms in group gDRUDES + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 * thole 1.368000 +pair_coeff 2 * thole 1.368000 +pair_coeff 4 * thole 1.368000 +pair_coeff 5 * thole 1.368000 + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 + 0 = # of size 2 clusters + 500 = # of size 3 clusters + 500 = # of size 4 clusters + 0 = # of frozen angles + +comm_modify vel yes +compute cTEMP_CORE gCORES temp/com +compute cTEMP all temp/drude + +fix fDIRECT all drude/transform/direct +fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 260 100.0 +fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 1 20.0 +fix fINVERSE all drude/transform/inverse + +fix fMOMENTUM all momentum 100 linear 1 1 1 + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.367867 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.031354 + estimated relative force accuracy = 9.44215e-05 + using double precision FFTs + 3d grid and FFT values/proc = 79507 46656 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 17 +New max number of 1-2 to 1-4 neighbors: 17 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 26.29 | 26.29 | 26.29 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 4439.7916 55742.797 334.61375 18.435655 + 50 1.9199426 2090.3465 1466.1274 134.17896 624.21909 190.60044 660.09649 113.3603 0 -768.0633 595300.82 -594872.6 2826.2298 55742.797 184.22006 0.60185015 + 100 3.8672287 2131.9775 1633.3979 149.48744 498.57958 179.65934 694.88741 164.06284 0 -972.81644 595305.26 -594872.47 1226.789 55742.797 205.4291 0.16019587 + 150 5.7598403 2177.6381 1711.4959 156.63492 466.14214 134.74039 700.59918 168.27759 0 -965.58407 595300.38 -594872.27 4413.0226 55742.797 215.26856 0.12192183 + 200 7.7044377 2233.5218 1730.4556 158.3701 503.06611 188.43014 712.9189 165.88668 0 -988.5136 595295.4 -594871.06 2113.5946 55742.797 217.61368 0.22886584 + 250 9.6830325 2297.301 1773.2292 162.28471 524.07183 151.53589 821.1354 166.81416 0 -1042.1458 595297.16 -594870.43 1173.0574 55742.797 222.691 1.0389647 + 300 11.612487 2368.3956 1891.828 173.13879 476.56753 142.49028 789.96852 154.5939 0 -1037.1885 595297.25 -594870.54 2520.9226 55742.797 236.85673 3.051144 + 350 13.534112 2414.4805 1843.9331 168.75548 570.54737 181.42276 808.67959 163.12794 0 -1005.9572 595293.4 -594870.13 2879.5958 55742.797 231.57282 1.0738202 + 400 15.432559 2466.7093 1924.3089 176.11142 542.40037 167.48008 817.71904 181.25315 0 -1050.6473 595296.37 -594869.77 494.79722 55742.797 241.94266 0.38534823 + 450 17.325742 2522.7871 1875.8855 171.67974 646.90166 133.40905 944.20903 180.31147 0 -1037.0957 595295.5 -594869.43 63.401476 55742.797 235.86638 0.34369113 + 500 19.162983 2580.277 1955.7507 178.98895 624.52624 185.08446 827.39298 175.04156 0 -984.94513 595290.88 -594868.93 3484.9214 55742.797 245.79119 0.67067789 + 550 21.070935 2640.6835 1866.0349 170.77823 774.64852 176.89611 988.92025 176.49761 0 -991.07213 595292.32 -594868.91 1773.3487 55742.797 234.10561 1.7344182 + 600 22.994624 2690.8564 1876.0664 171.6963 814.79004 186.23916 1032.0131 182.3033 0 -1010.7649 595293.3 -594868.3 919.72494 55742.797 235.38014 1.7010295 + 650 24.877667 2732.1824 1963.5421 179.70202 768.64029 165.39218 949.23884 183.81872 0 -951.98446 595290.3 -594868.13 2658.9019 55742.797 246.76774 0.68037803 + 700 26.759878 2775.7295 1921.9362 175.89427 853.7933 175.21242 987.66711 186.48684 0 -918.75412 595291.36 -594868.18 670.06325 55742.797 241.62283 0.44222016 + 750 28.615888 2820.0743 2038.1503 186.53011 781.92393 168.58533 929.80575 193.62705 0 -939.93789 595298.09 -594868.25 398.72744 55742.797 256.20117 0.55407341 + 800 30.410775 2865.9592 1943.5754 177.87467 922.38383 197.16018 1009.2236 201.50387 0 -914.81706 595297.54 -594868.23 -717.10982 55742.797 244.0452 1.2420646 + 850 32.248099 2909.1134 2101.5572 192.33306 807.55624 195.1889 876.12791 184.47417 0 -876.31499 595296.17 -594868.09 -1403.423 55742.797 263.69793 1.8344087 + 900 34.102496 2938.1375 2038.9241 186.60092 899.21338 183.32678 989.0166 184.31256 0 -889.86015 595300.05 -594867.63 -1087.2756 55742.797 256.12731 1.0106116 + 950 35.940632 2965.6943 2007.942 183.76546 957.75234 227.45507 972.71509 206.37948 0 -880.42319 595299.46 -594867.83 -1848.76 55742.797 252.40652 0.53885795 + 1000 37.768527 2994.2318 2058.0187 188.34845 936.2131 170.68954 965.88084 205.36587 0 -833.14442 595294.86 -594867.44 327.63778 55742.797 258.71295 0.52143526 + 1050 39.603905 3022.9502 2095.3849 191.76817 927.56532 203.90713 935.91395 205.082 0 -845.07245 595294.32 -594866.59 -355.70498 55742.797 263.25608 0.94199109 + 1100 41.345196 3051.1765 2047.7198 187.4059 1003.4567 212.39896 989.65688 227.20813 0 -856.11279 595297.04 -594866.74 -1402.0226 55742.797 256.98382 1.677375 + 1150 43.126233 3071.8156 2127.8628 194.74053 943.95283 188.38429 926.24314 223.28057 0 -821.63214 595294.06 -594866.38 550.31162 55742.797 267.19152 1.343134 + 1200 44.919531 3087.7694 2015.2957 184.43847 1072.4737 199.90941 1034.9531 215.15479 0 -804.43316 595293.38 -594866.49 -333.57889 55742.797 253.2678 0.70913779 + 1250 46.708812 3102.5825 2176.9514 199.23308 925.63109 155.81514 956.83605 230.07299 0 -847.4765 595296.65 -594866.26 -932.66378 55742.797 273.66546 0.54750847 + 1300 48.515239 3116.8403 2087.6042 191.05609 1029.2361 209.96221 974.81036 241.13636 0 -823.38395 595292.74 -594866.03 -825.75374 55742.797 262.34482 0.76176534 + 1350 50.311301 3131.0791 2089.6528 191.24358 1041.4264 186.48162 998.11153 233.70979 0 -801.36955 595290.06 -594865.57 684.79541 55742.797 262.36803 1.3871258 + 1400 52.135502 3138.996 2186.2583 200.08485 952.73772 168.60362 957.20176 227.71916 0 -826.52254 595291.08 -594865.34 1796.7314 55742.797 274.47405 1.5135697 + 1450 53.920154 3139.5791 2010.7381 184.02136 1128.841 192.80138 1074.5202 245.37245 0 -807.31625 595288.01 -594864.55 -16.506503 55742.797 252.6314 0.8772328 + 1500 55.713369 3143.899 2099.4529 192.14047 1044.4461 186.04036 980.83507 242.01351 0 -784.81179 595285 -594864.63 2343.8872 55742.797 263.89144 0.6124176 + 1550 57.492258 3149.7317 2086.0668 190.91539 1063.6649 165.80538 1056.0892 230.89557 0 -813.37736 595289.09 -594864.84 2260.7336 55742.797 262.17651 0.69483863 + 1600 59.30172 3156.5347 2013.4253 184.26729 1143.1093 210.65899 1098.2888 243.95147 0 -835.61974 595290.47 -594864.64 -838.56538 55742.797 252.86557 1.1543025 + 1650 61.139585 3160.0034 2081.0689 190.45799 1078.9345 212.2197 1005.7495 250.37949 0 -813.72039 595289.15 -594864.85 796.20008 55742.797 261.22489 1.5557795 + 1700 62.942445 3155.5695 2113.3768 193.41478 1042.1927 146.0358 1019.0909 249.77844 0 -798.16322 595290.59 -594865.14 359.703 55742.797 265.47004 1.0739924 + 1750 64.762126 3151.7963 2063.5473 188.85442 1088.249 224.89092 997.01992 247.37169 0 -807.87664 595291.82 -594864.98 -1081.2896 55742.797 259.34344 0.69485895 + 1800 66.592646 3150.4284 2097.9263 192.00076 1052.5021 202.22769 974.42253 248.58755 0 -799.53819 595291.61 -594864.8 94.59915 55742.797 263.68436 0.65251966 + 1850 68.418504 3153.4497 2106.6304 192.79735 1046.8193 177.57201 971.73173 249.90467 0 -777.13268 595289.76 -594865.02 881.42667 55742.797 264.65056 0.99601086 + 1900 70.216536 3159.2067 2092.2719 191.48328 1066.9348 198.78887 969.41481 260.03017 0 -787.26086 595290.41 -594864.45 606.42691 55742.797 262.6612 1.4839999 + 1950 72.044671 3164.5166 2059.5681 188.49025 1104.9485 214.12266 1000.4479 263.39571 0 -799.45144 595291.13 -594864.69 -1248.7635 55742.797 258.62997 1.2624764 + 2000 73.841754 3171.2996 2080.1586 190.37468 1091.1409 179.21893 996.41501 248.41662 0 -760.00915 595292.04 -594864.94 940.6962 55742.797 261.39988 0.78376244 +Loop time of 73.8418 on 1 procs for 2000 steps with 4500 atoms + +Performance: 1.170 ns/day, 20.512 hours/ns, 27.085 timesteps/s +98.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 48.171 | 48.171 | 48.171 | 0.0 | 65.23 +Bond | 3.3962 | 3.3962 | 3.3962 | 0.0 | 4.60 +Kspace | 16.344 | 16.344 | 16.344 | 0.0 | 22.13 +Neigh | 1.6599 | 1.6599 | 1.6599 | 0.0 | 2.25 +Comm | 0.35976 | 0.35976 | 0.35976 | 0.0 | 0.49 +Output | 0.0045705 | 0.0045705 | 0.0045705 | 0.0 | 0.01 +Modify | 3.8475 | 3.8475 | 3.8475 | 0.0 | 5.21 +Other | | 0.05927 | | | 0.08 + +Nlocal: 4500 ave 4500 max 4500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10103 ave 10103 max 10103 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 774433 ave 774433 max 774433 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 774433 +Ave neighs/atom = 172.096 +Ave special neighs/atom = 13.3333 +Neighbor list builds = 35 +Dangerous builds = 0 +Total wall time: 0:01:14 diff --git a/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.4 b/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.4 new file mode 100644 index 0000000000..d91bba57b1 --- /dev/null +++ b/examples/USER/drude/butane/log.27Nov18.butane.nh.g++.4 @@ -0,0 +1,199 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 butane system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.butane + orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) + 2 by 1 by 2 MPI processor grid + reading atoms ... + 4500 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 4250 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6750 dihedrals + 5 = max # of 1-2 neighbors + 8 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 17 = max # of special neighbors + +group gBUTANE molecule 1:250 +4500 atoms in group gBUTANE +group gCORES type 1 2 3 +3500 atoms in group gCORES +group gDRUDES type 4 5 +1000 atoms in group gDRUDES + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 * thole 1.368000 +pair_coeff 2 * thole 1.368000 +pair_coeff 4 * thole 1.368000 +pair_coeff 5 * thole 1.368000 + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 + 0 = # of size 2 clusters + 500 = # of size 3 clusters + 500 = # of size 4 clusters + 0 = # of frozen angles + +comm_modify vel yes +compute cTEMP_CORE gCORES temp/com +compute cTEMP all temp/drude + +fix fDIRECT all drude/transform/direct +fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 260 100.0 +fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 1 20.0 +fix fINVERSE all drude/transform/inverse + +fix fMOMENTUM all momentum 100 linear 1 1 1 + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.367867 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.031354 + estimated relative force accuracy = 9.44215e-05 + using double precision FFTs + 3d grid and FFT values/proc = 26875 11664 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 17 +New max number of 1-2 to 1-4 neighbors: 17 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 16.75 | 17.03 | 17.13 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 4439.7916 55742.797 334.61375 18.435655 + 50 0.63524747 2090.3465 1466.1274 134.17896 624.2191 190.60044 660.09649 113.3603 0 -768.0633 595300.82 -594872.6 2826.2298 55742.797 184.22006 0.60185015 + 100 1.2804167 2131.9774 1633.3979 149.48744 498.57955 179.65934 694.88741 164.06284 0 -972.81644 595305.26 -594872.47 1226.789 55742.797 205.4291 0.16019587 + 150 1.9264774 2177.6381 1711.4959 156.63492 466.14218 134.74039 700.59917 168.27759 0 -965.58407 595300.38 -594872.27 4413.0227 55742.797 215.26856 0.12192187 + 200 2.5798194 2233.5217 1730.4557 158.3701 503.06601 188.43014 712.9189 165.88668 0 -988.5136 595295.4 -594871.06 2113.5944 55742.797 217.61368 0.22886584 + 250 3.234822 2297.3011 1773.2292 162.28471 524.07191 151.5359 821.1354 166.81416 0 -1042.1458 595297.16 -594870.43 1173.0577 55742.797 222.691 1.0389643 + 300 3.9885037 2368.3956 1891.828 173.13879 476.56759 142.49027 789.96852 154.5939 0 -1037.1885 595297.25 -594870.54 2520.9227 55742.797 236.85673 3.0511439 + 350 4.7276039 2414.4804 1843.9331 168.75548 570.54727 181.42277 808.6796 163.12794 0 -1005.9572 595293.4 -594870.13 2879.5954 55742.797 231.57282 1.0738212 + 400 5.3416793 2466.7094 1924.3089 176.11142 542.40044 167.48008 817.71904 181.25315 0 -1050.6473 595296.37 -594869.77 494.79737 55742.797 241.94266 0.38534799 + 450 6.0018888 2522.7872 1875.8855 171.67974 646.90169 133.40906 944.20903 180.31147 0 -1037.0957 595295.5 -594869.43 63.40141 55742.797 235.86638 0.34369111 + 500 6.6298664 2580.2771 1955.7507 178.98895 624.52635 185.08445 827.39297 175.04156 0 -984.94513 595290.88 -594868.93 3484.9216 55742.797 245.79119 0.67067791 + 550 7.2369561 2640.6835 1866.035 170.77823 774.64858 176.89609 988.92025 176.49761 0 -991.07212 595292.32 -594868.91 1773.3486 55742.797 234.10561 1.7344207 + 600 7.8453741 2690.8569 1876.0664 171.6963 814.7905 186.23916 1032.0131 182.3033 0 -1010.7649 595293.3 -594868.3 919.72487 55742.797 235.38014 1.7010285 + 650 8.4387105 2732.1825 1963.5421 179.70202 768.64035 165.39219 949.23884 183.81872 0 -951.98446 595290.3 -594868.13 2658.9017 55742.797 246.76774 0.68037827 + 700 9.0765064 2775.7294 1921.9362 175.89427 853.79318 175.21242 987.66712 186.48684 0 -918.75413 595291.36 -594868.18 670.06264 55742.797 241.62283 0.44222019 + 750 9.6925657 2820.0741 2038.1504 186.53011 781.92376 168.58531 929.80574 193.62706 0 -939.9379 595298.09 -594868.25 398.72752 55742.797 256.20117 0.55407442 + 800 10.302839 2865.959 1943.5754 177.87467 922.38359 197.16019 1009.2236 201.50386 0 -914.81706 595297.54 -594868.23 -717.10975 55742.797 244.0452 1.2420644 + 850 10.916842 2909.1138 2101.5572 192.33306 807.55656 195.18897 876.12792 184.47417 0 -876.31499 595296.17 -594868.09 -1403.4232 55742.797 263.69793 1.8344028 + 900 11.513051 2938.1376 2038.9242 186.60093 899.21343 183.32681 989.01659 184.31258 0 -889.86018 595300.05 -594867.63 -1087.2761 55742.797 256.12732 1.0106144 + 950 12.11419 2965.6942 2007.942 183.76546 957.75216 227.45503 972.71506 206.37949 0 -880.4232 595299.46 -594867.83 -1848.7603 55742.797 252.40653 0.53885876 + 1000 12.740639 2994.2317 2058.0187 188.34845 936.21302 170.68957 965.88085 205.36589 0 -833.14441 595294.86 -594867.44 327.6391 55742.797 258.71295 0.52143283 + 1050 13.346812 3022.9501 2095.3848 191.76817 927.56526 203.90712 935.91396 205.08197 0 -845.07232 595294.32 -594866.59 -355.70418 55742.797 263.25608 0.94198602 + 1100 13.938097 3051.1769 2047.7199 187.4059 1003.457 212.39892 989.65684 227.20812 0 -856.11277 595297.04 -594866.74 -1402.022 55742.797 256.98383 1.6773742 + 1150 14.508841 3071.8157 2127.8626 194.74051 943.95311 188.38445 926.24309 223.28071 0 -821.63207 595294.06 -594866.38 550.31236 55742.797 267.1915 1.3431353 + 1200 15.110682 3087.7694 2015.2955 184.43845 1072.4739 199.90932 1034.9531 215.15511 0 -804.43314 595293.38 -594866.49 -333.57793 55742.797 253.26777 0.70913778 + 1250 15.728746 3102.5825 2176.9518 199.23312 925.63076 155.81519 956.83624 230.0728 0 -847.47674 595296.65 -594866.26 -932.66685 55742.797 273.66551 0.54750805 + 1300 16.365541 3116.8403 2087.6045 191.05612 1029.2357 209.96201 974.81053 241.13608 0 -823.38398 595292.74 -594866.03 -825.75383 55742.797 262.34486 0.76175709 + 1350 16.943579 3131.0787 2089.6524 191.24354 1041.4264 186.48189 998.11168 233.71019 0 -801.37003 595290.06 -594865.57 684.79151 55742.797 262.36797 1.3871293 + 1400 17.542898 3138.996 2186.2582 200.08483 952.73785 168.60338 957.20178 227.71944 0 -826.52269 595291.08 -594865.34 1796.7295 55742.797 274.47403 1.5135537 + 1450 18.144658 3139.5791 2010.7377 184.02132 1128.8414 192.8015 1074.5205 245.37206 0 -807.3159 595288.01 -594864.55 -16.504608 55742.797 252.63135 0.87723467 + 1500 18.759382 3143.8991 2099.4529 192.14048 1044.4462 186.04014 980.83524 242.01309 0 -784.81131 595285 -594864.63 2343.8986 55742.797 263.89145 0.61241549 + 1550 19.331644 3149.7316 2086.068 190.9155 1063.6635 165.80546 1056.0893 230.89463 0 -813.37768 595289.09 -594864.84 2260.7364 55742.797 262.17666 0.69483626 + 1600 19.91757 3156.535 2013.4276 184.2675 1143.1073 210.65881 1098.2892 243.94955 0 -835.62037 595290.47 -594864.64 -838.57356 55742.797 252.86585 1.1542996 + 1650 20.503137 3160.0031 2081.0656 190.45768 1078.9375 212.2197 1005.7509 250.38023 0 -813.71955 595289.15 -594864.85 796.21731 55742.797 261.22447 1.5557945 + 1700 21.130273 3155.5677 2113.3761 193.41472 1042.1916 146.036 1019.0909 249.77802 0 -798.16357 595290.59 -594865.14 359.69262 55742.797 265.46995 1.074008 + 1750 21.735444 3151.796 2063.5487 188.85455 1088.2472 224.89093 997.02075 247.36817 0 -807.87592 595291.82 -594864.98 -1081.2667 55742.797 259.34362 0.69484916 + 1800 22.302735 3150.4232 2097.9294 192.00105 1052.4938 202.22751 974.42358 248.58229 0 -799.53722 595291.6 -594864.8 94.58692 55742.797 263.68474 0.65252808 + 1850 22.902581 3153.4477 2106.6272 192.79706 1046.8205 177.57166 971.73469 249.90348 0 -777.13298 595289.76 -594865.02 881.42516 55742.797 264.65016 0.99601444 + 1900 23.480426 3159.2037 2092.2693 191.48304 1066.9343 198.78895 969.41309 260.03288 0 -787.26163 595290.41 -594864.45 606.40366 55742.797 262.66088 1.4839893 + 1950 24.086136 3164.5139 2059.5653 188.48999 1104.9485 214.12027 1000.4493 263.39543 0 -799.45067 595291.13 -594864.69 -1248.7209 55742.797 258.62963 1.2624825 + 2000 24.655188 3171.2963 2080.1555 190.37439 1091.1408 179.21892 996.41486 248.41626 0 -760.00877 595292.04 -594864.94 940.70366 55742.797 261.39948 0.7837686 +Loop time of 24.6553 on 4 procs for 2000 steps with 4500 atoms + +Performance: 3.504 ns/day, 6.849 hours/ns, 81.119 timesteps/s +96.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.825 | 12.439 | 13.012 | 12.2 | 50.45 +Bond | 0.82239 | 0.89713 | 0.95859 | 5.7 | 3.64 +Kspace | 6.6353 | 7.2001 | 7.8139 | 15.7 | 29.20 +Neigh | 0.44976 | 0.44994 | 0.45003 | 0.0 | 1.82 +Comm | 0.55452 | 0.62432 | 0.70013 | 6.6 | 2.53 +Output | 0.003664 | 0.0043042 | 0.0061252 | 1.6 | 0.02 +Modify | 2.9457 | 2.959 | 2.9736 | 0.7 | 12.00 +Other | | 0.08099 | | | 0.33 + +Nlocal: 1125 ave 1166 max 1096 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 5867.25 ave 5956 max 5793 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Neighs: 193608 ave 200510 max 186198 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 774433 +Ave neighs/atom = 172.096 +Ave special neighs/atom = 13.3333 +Neighbor list builds = 35 +Dangerous builds = 0 +Total wall time: 0:00:24 diff --git a/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.1 b/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.1 deleted file mode 100644 index a46d9b7cd5..0000000000 --- a/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.1 +++ /dev/null @@ -1,171 +0,0 @@ -LAMMPS (18 Jul 2015) -# 250 butane system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.butane - orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 4250 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6750 dihedrals - 5 = max # of 1-2 neighbors - 8 = max # of 1-3 neighbors - 12 = max # of 1-4 neighbors - 17 = max # of special neighbors - -comm_modify vel yes - -group gBUTANE molecule 1:250 -4500 atoms in group gBUTANE -group gCORES type 1 2 3 -3500 atoms in group gCORES -group gDRUDES type 4 5 -1000 atoms in group gDRUDES - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 * thole 1.368000 -pair_coeff 2 * thole 1.368000 -pair_coeff 4 * thole 1.368000 -pair_coeff 5 * thole 1.368000 - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 - 0 = # of size 2 clusters - 500 = # of size 3 clusters - 500 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nve - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.367867 - grid = 36 36 36 - stencil order = 5 - estimated absolute RMS force accuracy = 0.031354 - estimated relative force accuracy = 9.44215e-05 - using double precision FFTs - 3d grid and FFT values/proc = 79507 46656 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 17 -New max number of 1-2 to 1-4 neighbors: 17 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 - ghost atom cutoff = 10 -Memory usage per processor = 20.1567 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 -353319.1 55742.797 334.61375 18.435655 - 50 2.8944459 3475.1575 2067.5082 189.21692 1407.6493 846.00752 810.92425 115.58516 0 -764.28457 595242.38 -594842.96 3029.5187 55742.797 202.89871 152.54291 - 100 5.6009829 2975.2938 1988.4777 181.98411 986.81605 358.65377 931.63831 175.54125 0 -919.10691 595306.8 -594866.71 2010.6143 55742.797 231.36532 50.118891 - 150 8.2652578 2904.7202 1962.6821 179.62331 942.03808 234.91712 997.34884 195.22618 0 -909.31364 595293.23 -594869.37 4956.5664 55742.797 241.54715 14.313437 - 200 10.97319 2905.616 1909.813 174.78477 995.80302 228.33514 1082.3513 200.51771 0 -943.19777 595298.16 -594870.37 2973.6338 55742.797 238.34584 5.1137785 - 250 13.676164 2934.0626 1952.0155 178.6471 982.0471 212.76463 1131.5055 194.94566 0 -983.79846 595297.63 -594871 1591.8677 55742.797 244.66672 2.4161409 - 300 16.381759 2995.4781 2017.7772 184.66557 977.70088 213.25867 1133.9492 195.13329 0 -992.6543 595299.31 -594871.29 2817.7518 55742.797 253.21545 1.6812532 - 350 19.14905 3058.4882 1982.338 181.4222 1076.1502 228.54692 1197.9766 205.68279 0 -982.30502 595297.25 -594871 1408.2609 55742.797 248.83728 1.4672371 - 400 21.914272 3016.5895 1998.3531 182.8879 1018.2363 238.06518 1169.309 197.52924 0 -1014.8678 595298.98 -594870.78 1454.1926 55742.797 250.8778 1.3985907 - 450 24.629148 3014.232 1979.0496 181.12125 1035.1824 216.45567 1198.2831 197.81853 0 -1005.5029 595298.68 -594870.56 1296.2887 55742.797 248.44786 1.4025051 - 500 27.390589 3054.4694 2023.8824 185.22432 1030.587 220.97548 1197.2137 199.51957 0 -1014.3543 595298.28 -594871.05 2481.3102 55742.797 254.08894 1.4000969 - 550 30.147365 3088.0877 2020.1967 184.887 1067.8909 221.93439 1216.8427 213.27263 0 -1012.4867 595299.44 -594871.11 1697.8283 55742.797 253.63701 1.3687703 - 600 32.854639 3112.7966 2031.7038 185.94013 1081.0928 220.37419 1254.8806 208.09272 0 -1030.3329 595298.95 -594870.87 -75.358619 55742.797 255.05809 1.439614 - 650 35.725004 3155.4753 2025.6962 185.39031 1129.7792 221.82928 1284.1281 210.16702 0 -1015.1565 595299.63 -594870.82 1286.1601 55742.797 254.30974 1.4197689 - 700 38.70379 3134.5524 2054.9292 188.0657 1079.6232 225.36387 1243.5643 191.53984 0 -1010.9148 595301.25 -594871.18 700.78109 55742.797 257.97902 1.4421042 - 750 41.679769 3189.6098 2103.3042 192.49294 1086.3056 219.5641 1243.9772 203.81533 0 -1010.2161 595299.86 -594870.7 482.90086 55742.797 264.08828 1.3795515 - 800 44.637671 3173.7718 2053.4131 187.92694 1120.3587 219.52183 1256.8457 218.62858 0 -1003.175 595299.34 -594870.81 538.9293 55742.797 257.80398 1.4002525 - 850 47.531367 3221.5884 2084.0326 190.72922 1137.5559 224.32279 1277.7167 218.74781 0 -1011.3685 595298.54 -594870.4 145.40179 55742.797 261.66451 1.3777132 - 900 50.379314 3214.7916 2054.2398 188.00261 1160.5518 222.07439 1296.738 225.4151 0 -1013.6054 595300.61 -594870.68 490.09072 55742.797 257.90629 1.4047863 - 950 53.038527 3213.4974 2122.2134 194.2235 1091.284 221.85551 1252.3002 201.89089 0 -1014.1089 595300.04 -594870.69 1203.4321 55742.797 266.42418 1.4941572 - 1000 55.653448 3212.7244 2079.8287 190.34449 1132.8956 225.42816 1261.5078 204.71764 0 -986.95829 595298.68 -594870.48 790.47665 55742.797 261.10437 1.4611106 - 1050 58.290098 3216.1124 2106.2454 192.76212 1109.8669 213.54607 1261.1068 207.93437 0 -1001.5715 595299.05 -594870.2 69.145866 55742.797 264.43815 1.4332898 - 1100 60.921228 3218.0797 2082.4185 190.5815 1135.6611 236.95827 1266.8625 198.25038 0 -995.08857 595298.88 -594870.2 694.35787 55742.797 261.43907 1.4374087 - 1150 63.510285 3208.3968 2119.1968 193.94742 1089.2 210.20908 1236.1825 202.19163 0 -988.56762 595299.35 -594870.17 1528.4475 55742.797 266.08185 1.3950176 - 1200 66.140576 3219.1289 2078.071 190.18362 1141.0579 234.57015 1268.2146 206.93186 0 -997.01686 595298.32 -594869.97 939.70203 55742.797 260.89628 1.4263352 - 1250 68.774998 3268.5006 2115.3231 193.5929 1153.1775 241.50662 1262.3711 220.71001 0 -1000.1626 595298.37 -594869.62 -187.61926 55742.797 265.57695 1.4418423 - 1300 71.409732 3324.099 2138.7146 195.73368 1185.3844 242.3031 1279.7915 223.94399 0 -989.04901 595298.47 -594870.08 258.69655 55742.797 268.51674 1.4497832 - 1350 73.990336 3290.8471 2103.0993 192.47419 1187.7477 219.60844 1312.8653 221.57552 0 -993.69832 595297.61 -594870.21 1651.4259 55742.797 264.03877 1.4428477 - 1400 76.620059 3227.0141 2052.6998 187.86167 1174.3143 236.01325 1272.4804 217.65692 0 -979.6779 595297.5 -594869.66 595.11702 55742.797 257.67276 1.5108922 - 1450 79.249466 3253.5975 2107.984 192.92124 1145.6135 248.51645 1261.8304 208.79164 0 -1002.8333 595299.15 -594869.84 170.12671 55742.797 264.66781 1.4041436 - 1500 81.830899 3276.1976 2101.6206 192.33886 1174.577 242.38394 1288.61 204.9722 0 -989.7383 595298.02 -594869.67 619.26135 55742.797 263.84288 1.4691362 - 1550 84.449908 3271.9376 2117.6914 193.80965 1154.2463 234.62432 1268.5368 202.02117 0 -979.66071 595298.65 -594869.92 568.43047 55742.797 265.86458 1.4693675 - 1600 87.073373 3281.1387 2105.1447 192.66139 1175.994 219.69265 1288.3244 205.52796 0 -966.68015 595298.79 -594869.67 1351.6273 55742.797 264.27256 1.5056051 - 1650 89.695136 3287.675 2131.7955 195.10045 1155.8795 235.54527 1262.9178 220.26583 0 -991.68887 595298.56 -594869.72 -750.34342 55742.797 267.63101 1.4905169 - 1700 92.342235 3295.9626 2079.4982 190.31424 1216.4644 232.74928 1329.4691 218.51323 0 -992.04439 595297.16 -594869.38 589.94184 55742.797 261.06357 1.4590401 - 1750 94.911541 3315.2639 2097.2605 191.93983 1218.0035 241.24927 1312.3575 214.88139 0 -978.98823 595298.34 -594869.84 -92.971422 55742.797 263.26817 1.5389785 - 1800 97.525025 3241.5219 2086.8653 190.98847 1154.6566 221.03432 1282.1774 209.03793 0 -986.54668 595299 -594870.05 456.17335 55742.797 261.96332 1.5311996 - 1850 100.13804 3222.7069 2040.0335 186.70245 1182.6734 242.74754 1272.8794 221.80974 0 -982.51665 595296.99 -594869.24 279.00233 55742.797 256.09213 1.4766233 - 1900 102.70693 3190.3766 2032.3946 186.00335 1157.9819 213.06329 1268.187 220.21025 0 -971.50314 595297.54 -594869.51 499.15225 55742.797 255.16226 1.3935863 - 1950 105.30868 3208.3096 2053.9844 187.97923 1154.3252 212.46296 1277.2726 210.16078 0 -974.19087 595298.44 -594869.82 807.22906 55742.797 257.85261 1.4622515 - 2000 107.9105 3231.8811 2053.6913 187.9524 1178.1899 229.11239 1280.6492 220.1084 0 -979.25259 595297.02 -594869.45 474.05197 55742.797 257.80782 1.4833297 -Loop time of 107.911 on 1 procs for 2000 steps with 4500 atoms - -Pair time (%) = 65.8442 (61.0173) -Bond time (%) = 16.6061 (15.3887) -Kspce time (%) = 20.7451 (19.2244) -Neigh time (%) = 1.24307 (1.15195) -Comm time (%) = 0.386346 (0.358024) -Outpt time (%) = 0.00603366 (0.00559135) -Other time (%) = 3.07976 (2.854) - -Nlocal: 4500 ave 4500 max 4500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 8739 ave 8739 max 8739 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 860638 ave 860638 max 860638 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 860638 -Ave neighs/atom = 191.253 -Ave special neighs/atom = 13.3333 -Neighbor list builds = 28 -Dangerous builds = 0 diff --git a/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.4 b/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.4 deleted file mode 100644 index 18e16e4975..0000000000 --- a/examples/USER/drude/butane/log.butane.lang.18Jul15.linux.4 +++ /dev/null @@ -1,171 +0,0 @@ -LAMMPS (18 Jul 2015) -# 250 butane system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.butane - orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 4250 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6750 dihedrals - 5 = max # of 1-2 neighbors - 8 = max # of 1-3 neighbors - 12 = max # of 1-4 neighbors - 17 = max # of special neighbors - -comm_modify vel yes - -group gBUTANE molecule 1:250 -4500 atoms in group gBUTANE -group gCORES type 1 2 3 -3500 atoms in group gCORES -group gDRUDES type 4 5 -1000 atoms in group gDRUDES - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 * thole 1.368000 -pair_coeff 2 * thole 1.368000 -pair_coeff 4 * thole 1.368000 -pair_coeff 5 * thole 1.368000 - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 - 0 = # of size 2 clusters - 500 = # of size 3 clusters - 500 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nve - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.367867 - grid = 36 36 36 - stencil order = 5 - estimated absolute RMS force accuracy = 0.031354 - estimated relative force accuracy = 9.44215e-05 - using double precision FFTs - 3d grid and FFT values/proc = 26875 11664 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 17 -New max number of 1-2 to 1-4 neighbors: 17 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 - ghost atom cutoff = 10 -Memory usage per processor = 14.7792 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 -353319.1 55742.797 334.61375 18.435655 - 50 0.91017509 3449.6475 2040.7698 186.76984 1408.8777 836.85155 816.32124 115.24642 0 -758.7276 595242.44 -594843.26 3042.2937 55742.797 199.51659 152.7045 - 100 1.829694 2917.9137 1947.102 178.19743 970.81176 363.96553 932.94225 165.60761 0 -931.00296 595306.34 -594867.04 1697.0127 55742.797 226.24749 49.885738 - 150 2.6620312 2853.3142 1959.0731 179.29301 894.24108 244.19792 978.17893 187.28366 0 -941.03478 595295.44 -594869.82 4597.2005 55742.797 241.05848 14.405808 - 200 3.4969041 2885.6715 1928.6381 176.50762 957.03347 227.09245 1066.5297 186.6858 0 -949.52603 595296.49 -594870.24 2602.8275 55742.797 240.70211 5.1458056 - 250 4.621171 2905.8961 1939.7876 177.52802 966.10847 215.77945 1122.1238 195.98218 0 -993.52132 595296.54 -594870.79 1808.1681 55742.797 243.04306 2.643716 - 300 5.5216351 2968.5517 1974.9277 180.74402 993.624 210.11413 1158.7871 194.142 0 -996.53154 595297.91 -594870.79 3371.8618 55742.797 247.7682 1.8321312 - 350 6.3789251 2996.151 1992.9982 182.39782 1003.1527 217.80518 1150.726 205.32316 0 -996.14478 595296.05 -594870.61 3022.9945 55742.797 250.15947 1.5176819 - 400 7.208317 2991.7201 1975.3852 180.78589 1016.3349 221.46133 1169.8254 213.90874 0 -1016.9906 595298.44 -594870.31 753.59124 55742.797 247.99744 1.3743032 - 450 8.0359671 3061.6051 2009.1302 183.87421 1052.4749 212.54169 1234.7697 205.71762 0 -1028.2259 595297.95 -594870.28 996.71341 55742.797 252.23801 1.3870863 - 500 8.8456361 3127.3783 2009.8033 183.93581 1117.5749 222.16507 1246.5854 215.82607 0 -994.66665 595298.3 -594870.63 2537.6157 55742.797 252.32947 1.367397 - 550 9.6647151 3181.037 2069.9836 189.44346 1111.0534 218.00575 1246.961 212.55852 0 -992.83597 595296.16 -594869.79 1333.8768 55742.797 259.86467 1.4641506 - 600 10.484356 3194.2009 2007.5349 183.7282 1186.666 228.93838 1309.4718 215.93595 0 -995.70641 595297.81 -594869.79 1336.7994 55742.797 252.00698 1.4677515 - 650 11.30116 3145.4387 2028.2544 185.62444 1117.1843 209.73722 1277.9793 217.12799 0 -1015.2398 595297.88 -594870.3 1442.6875 55742.797 254.61499 1.4639962 - 700 12.106719 3163.3345 2053.2645 187.91335 1110.07 209.45249 1257.3108 216.7541 0 -1000.1505 595296.63 -594869.92 1093.9724 55742.797 257.76091 1.4652884 - 750 12.924665 3145.6215 2010.7195 184.01966 1134.902 224.53065 1248.3301 222.25374 0 -988.4479 595298.83 -594870.59 470.73988 55742.797 252.39115 1.5116555 - 800 13.736913 3191.2614 2043.4195 187.01234 1147.842 225.71717 1239.3564 234.89539 0 -980.97352 595299.07 -594870.22 1472.0305 55742.797 256.53524 1.4309304 - 850 14.550736 3157.6279 2004.8472 183.48223 1152.7806 217.72587 1269.3398 224.40554 0 -987.51794 595299.15 -594870.32 293.76575 55742.797 251.69397 1.4007963 - 900 15.344895 3188.5027 2077.065 190.09155 1111.4377 216.92608 1251.4141 213.7672 0 -1000.1269 595299.5 -594870.05 702.56821 55742.797 260.7853 1.3847905 - 950 16.157597 3205.6761 2090.9807 191.3651 1114.6954 223.7729 1252.7887 225.91029 0 -1016.3682 595299.15 -594870.56 -19.492925 55742.797 262.50762 1.4603579 - 1000 16.969809 3231.5931 2078.7058 190.24172 1152.8873 228.77504 1273.1611 219.28923 0 -995.58473 595296.82 -594869.57 1292.4071 55742.797 260.98775 1.3954023 - 1050 17.771785 3264.2837 2106.0113 192.7407 1158.2724 224.16481 1278.5557 212.91309 0 -985.93386 595298.71 -594870.14 1357.1588 55742.797 264.40381 1.4463397 - 1100 18.572331 3243.3355 2125.1664 194.49376 1118.1691 227.38559 1247.5134 210.61488 0 -996.85878 595299.68 -594870.17 650.53225 55742.797 266.82195 1.4240918 - 1150 19.40463 3255.4144 2096.5982 191.87922 1158.8162 234.11389 1267.4257 217.02225 0 -989.70892 595299.81 -594869.84 688.78475 55742.797 263.2133 1.4631154 - 1200 20.321045 3266.2609 2088.3727 191.12642 1177.8882 225.40174 1284.1097 225.77008 0 -985.63518 595297.81 -594869.57 182.80287 55742.797 262.21901 1.3550749 - 1250 21.233994 3277.4365 2093.1481 191.56346 1184.2884 250.33569 1267.9985 235.70102 0 -999.80819 595299.96 -594869.9 780.87528 55742.797 262.80001 1.4077597 - 1300 22.113268 3280.4141 2121.4996 194.15818 1158.9145 228.23585 1259.7304 230.65174 0 -989.06345 595298.99 -594869.63 932.19341 55742.797 266.34543 1.4646736 - 1350 23.007421 3272.2214 2088.047 191.09662 1184.1744 224.66504 1284.656 217.03214 0 -970.5252 595297.72 -594869.37 63.097535 55742.797 262.16781 1.3823451 - 1400 23.903494 3239.3096 2099.1837 192.11584 1140.1259 221.3215 1252.8691 215.64014 0 -978.70393 595298.89 -594869.89 1125.3057 55742.797 263.59141 1.3221979 - 1450 24.833224 3226.293 2042.7354 186.94973 1183.5576 241.40449 1273.025 233.66813 0 -994.70934 595299.55 -594869.38 -412.31857 55742.797 256.45155 1.4245996 - 1500 25.736203 3245.4596 2097.0431 191.91994 1148.4164 250.3854 1248.1507 212.36871 0 -990.48467 595297.36 -594869.36 245.49743 55742.797 263.28349 1.4252034 - 1550 26.633033 3308.5518 2113.8467 193.45778 1194.7051 234.5293 1286.7563 233.20552 0 -987.36764 595297.06 -594869.48 1324.7098 55742.797 265.37419 1.4864431 - 1600 27.530123 3319.786 2130.8949 195.01803 1188.8911 234.06508 1292.3987 225.94876 0 -992.81161 595299.1 -594869.81 343.14209 55742.797 267.51024 1.5104547 - 1650 28.41116 3239.0425 2066.8485 189.15654 1172.194 219.46922 1303.0071 210.00869 0 -989.28577 595298.63 -594869.64 -505.97551 55742.797 259.48305 1.4300292 - 1700 29.313339 3281.3023 2054.581 188.03383 1226.7213 224.72686 1339.1948 208.65914 0 -974.24634 595297.79 -594869.4 331.11846 55742.797 257.92342 1.4735531 - 1750 30.216241 3237.8348 2043.3835 187.00904 1194.4513 238.16066 1281.9383 221.74494 0 -976.72731 595299.4 -594870.06 612.69867 55742.797 256.53793 1.4116726 - 1800 31.113153 3242.1274 2087.94 191.08683 1154.1873 240.53142 1256.6966 210.49591 0 -983.16111 595299.34 -594869.72 -8.1277769 55742.797 262.14149 1.4166426 - 1850 31.993161 3249.8016 2079.8947 190.35052 1169.9069 233.21641 1269.4077 215.23716 0 -975.12835 595296.5 -594869.33 1156.1724 55742.797 261.13101 1.4122227 - 1900 32.891621 3251.9579 2097.6037 191.97124 1154.3541 243.13703 1228.3357 235.37914 0 -983.06313 595300.37 -594869.8 293.60486 55742.797 263.33664 1.4715416 - 1950 33.791255 3202.0703 2076.0894 190.00227 1125.9809 233.71337 1217.6976 227.58496 0 -981.8352 595298.07 -594869.25 -544.65606 55742.797 260.61868 1.5018224 - 2000 34.690323 3215.7987 2015.5993 184.46625 1200.1994 242.43605 1281.6846 227.48326 0 -980.70325 595298.82 -594869.52 248.82508 55742.797 253.04055 1.4169879 -Loop time of 34.6904 on 4 procs for 2000 steps with 4500 atoms - -Pair time (%) = 16.514 (47.6038) -Bond time (%) = 4.35555 (12.5555) -Kspce time (%) = 10.6198 (30.613) -Neigh time (%) = 0.393407 (1.13405) -Comm time (%) = 1.18699 (3.42165) -Outpt time (%) = 0.00467861 (0.0134867) -Other time (%) = 1.6161 (4.65863) - -Nlocal: 1125 ave 1219 max 1009 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Nghost: 5768 ave 5890 max 5664 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Neighs: 215002 ave 223956 max 206872 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 860008 -Ave neighs/atom = 191.113 -Ave special neighs/atom = 13.3333 -Neighbor list builds = 29 -Dangerous builds = 0 diff --git a/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.3 b/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.3 deleted file mode 100644 index 26ef8dad2c..0000000000 --- a/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.3 +++ /dev/null @@ -1,177 +0,0 @@ -LAMMPS (18 Jul 2015) -# 250 butane system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.butane - orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 4250 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6750 dihedrals - 5 = max # of 1-2 neighbors - 8 = max # of 1-3 neighbors - 12 = max # of 1-4 neighbors - 17 = max # of special neighbors - -group gBUTANE molecule 1:250 -4500 atoms in group gBUTANE -group gCORES type 1 2 3 -3500 atoms in group gCORES -group gDRUDES type 4 5 -1000 atoms in group gDRUDES - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 * thole 1.368000 -pair_coeff 2 * thole 1.368000 -pair_coeff 4 * thole 1.368000 -pair_coeff 5 * thole 1.368000 - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 - 0 = # of size 2 clusters - 500 = # of size 3 clusters - 500 = # of size 4 clusters - 0 = # of frozen angles - -comm_modify vel yes -compute cTEMP_CORE gCORES temp/com -compute cTEMP all temp/drude - -fix fDIRECT all drude/transform/direct -fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 260 100.0 -fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 1 20.0 -fix fINVERSE all drude/transform/inverse - -fix fMOMENTUM all momentum 100 linear 1 1 1 - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.367867 - grid = 36 36 36 - stencil order = 5 - estimated absolute RMS force accuracy = 0.031354 - estimated relative force accuracy = 9.44215e-05 - using double precision FFTs - 3d grid and FFT values/proc = 79507 46656 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 17 -New max number of 1-2 to 1-4 neighbors: 17 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 - ghost atom cutoff = 10 -Memory usage per processor = 20.1567 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 -353319.1 55742.797 334.61375 18.435655 - 50 2.8816051 2130.0808 1490.8248 136.43926 639.25601 192.16834 670.26518 115.15685 0 -766.5636 595300.83 -594872.6 2829.5958 55742.797 187.32686 0.60253137 - 100 5.569447 2172.0554 1656.5476 151.60609 515.50773 180.41449 708.03397 165.80788 0 -971.62525 595305.35 -594872.47 1231.388 55742.797 208.34096 0.16151117 - 150 8.2248161 2216.471 1733.4485 158.644 483.02256 136.16281 713.34485 169.62608 0 -964.30363 595300.47 -594872.27 4400.6234 55742.797 218.02975 0.12336382 - 200 10.911476 2271.1314 1750.9955 160.2499 520.13587 190.12953 725.63606 167.04635 0 -987.11203 595295.5 -594871.06 2107.4949 55742.797 220.19714 0.23035017 - 250 13.588019 2333.7822 1793.0252 164.09642 540.75705 153.18169 833.95287 168.1507 0 -1041.2955 595297.2 -594870.43 1165.6922 55742.797 225.18334 1.0339004 - 300 16.26521 2403.6147 1909.3441 174.74185 494.27059 144.27299 803.8452 155.85505 0 -1036.4615 595297.31 -594870.55 2511.3721 55742.797 239.06243 3.0455686 - 350 18.937858 2448.2389 1862.67 170.47027 585.56885 181.70523 821.7917 164.10713 0 -1005.4167 595293.5 -594870.12 2874.0826 55742.797 233.92745 1.0806435 - 400 21.590191 2498.6994 1942.5496 177.7808 556.14976 168.5792 828.99117 182.0756 0 -1050.149 595296.43 -594869.77 485.86761 55742.797 244.23632 0.3882729 - 450 24.247025 2552.9641 1890.0917 172.97989 662.87241 134.42613 957.3361 181.42951 0 -1036.4237 595295.53 -594869.43 66.452669 55742.797 237.65323 0.34464588 - 500 26.850275 2608.55 1970.0729 180.29971 638.4771 187.01392 838.62129 176.10775 0 -985.23355 595290.89 -594868.93 3471.1633 55742.797 247.59402 0.66791252 - 550 29.482354 2667.002 1875.8227 171.67399 791.17931 178.48765 1003.6885 176.78989 0 -991.21705 595292.35 -594868.92 1767.0543 55742.797 235.34039 1.7252619 - 600 32.10773 2715.2399 1883.279 172.35639 831.96094 186.79504 1047.6877 183.04311 0 -1010.5423 595293.27 -594868.29 931.85523 55742.797 236.28437 1.7094253 - 650 34.715398 2754.4497 1970.794 180.3657 783.65568 166.02823 963.09399 184.8464 0 -952.45217 595290.25 -594868.11 2640.017 55742.797 247.67755 0.68709275 - 700 37.337317 2795.9461 1928.2674 176.4737 867.67874 176.09641 1002.4636 186.11483 0 -920.14356 595291.32 -594868.18 664.78904 55742.797 242.41897 0.44316381 - 750 39.927419 2838.2052 2043.2258 186.99461 794.97945 170.34991 941.73148 193.53082 0 -940.49604 595298.1 -594868.23 410.24758 55742.797 256.84035 0.55229077 - 800 42.469991 2881.9788 1945.9722 178.09402 936.00667 197.5203 1021.5571 202.83524 0 -915.18511 595297.49 -594868.21 -716.81442 55742.797 244.35112 1.2303511 - 850 45.05362 2923.3858 2106.5752 192.79231 816.81052 195.94987 886.41681 184.36064 0 -878.10485 595296.29 -594868.1 -1407.5711 55742.797 264.3276 1.8387296 - 900 47.651245 2950.6673 2039.6221 186.6648 911.04515 183.79618 1000.7954 184.49766 0 -890.38965 595299.97 -594867.63 -1085.794 55742.797 256.21167 1.0198208 - 950 50.451391 2976.6436 2006.5932 183.64202 970.05039 228.60059 985.21322 206.18529 0 -881.65815 595299.54 -594867.83 -1851.9703 55742.797 252.23637 0.54012241 - 1000 53.018937 3003.743 2056.8471 188.24122 946.89587 171.73287 976.85675 207.05097 0 -836.24563 595294.95 -594867.45 282.61914 55742.797 258.5658 0.52076804 - 1050 55.532595 3031.3535 2095.4846 191.7773 935.86887 203.54188 945.75569 204.8504 0 -846.10969 595294.45 -594866.62 -376.91112 55742.797 263.27093 0.93584407 - 1100 58.115412 3058.5347 2047.3098 187.36838 1011.2249 211.94076 1001.093 223.66214 0 -855.82424 595297.13 -594866.78 -1381.6531 55742.797 256.93409 1.6724456 - 1150 60.799698 3078.3996 2123.1811 194.31206 955.21855 189.50189 937.18685 224.21465 0 -823.63222 595294.38 -594866.43 524.70113 55742.797 266.5974 1.3568376 - 1200 63.295243 3093.556 2005.8939 183.57802 1087.6621 201.3428 1044.9909 219.39202 0 -805.37122 595293.83 -594866.52 -370.32492 55742.797 252.0829 0.71475597 - 1250 65.797931 3108.5155 2175.8972 199.13661 932.61826 156.6571 969.72254 225.30586 0 -850.00503 595297.25 -594866.31 -1015.3093 55742.797 273.53154 0.55100418 - 1300 68.300441 3122.9792 2090.3719 191.30939 1032.6073 209.92015 984.36624 236.75408 0 -825.27583 595292.92 -594866.08 -798.51816 55742.797 262.69421 0.75855207 - 1350 70.793202 3136.8213 2084.47 190.76925 1052.3513 186.49827 1004.7564 234.55362 0 -798.08335 595290.25 -594865.63 702.53782 55742.797 261.71553 1.3884089 - 1400 73.326733 3144.9028 2180.3659 199.54558 964.53687 170.02484 962.43948 235.07761 0 -829.27156 595291.77 -594865.51 1682.2488 55742.797 273.7286 1.5246324 - 1450 75.821906 3146.3365 2013.3816 184.26329 1132.9549 193.77936 1084.1403 252.3227 0 -821.23045 595288.54 -594864.6 -160.21484 55742.797 252.96375 0.87780357 - 1500 78.325264 3150.6861 2107.4863 192.87569 1043.1998 185.11752 988.72532 245.47682 0 -796.86739 595285.46 -594864.71 2242.3101 55742.797 264.90216 0.61222547 - 1550 80.779931 3156.3483 2074.5953 189.86552 1081.7531 166.52863 1062.4971 238.93518 0 -810.65247 595289.34 -594864.9 2224.9015 55742.797 260.73559 0.68881715 - 1600 83.275807 3163.8714 2000.6756 183.10045 1163.1958 210.70823 1110.4519 256.16493 0 -840.1463 595290.73 -594864.71 -830.17884 55742.797 251.26533 1.1443116 - 1650 85.768304 3169.3489 2056.4309 188.20313 1112.918 214.6419 1021.762 268.00157 0 -815.69477 595289 -594864.8 813.12089 55742.797 258.12835 1.5476743 - 1700 88.261463 3168.7666 2119.4079 193.96675 1049.3587 147.25006 1027.6415 246.49221 0 -797.55007 595290.74 -594865.22 412.59618 55742.797 266.23017 1.0703149 - 1750 90.746918 3168.2304 2066.7675 189.14913 1101.463 224.44009 1005.0052 243.56874 0 -797.83359 595291.25 -594864.96 -858.91314 55742.797 259.74684 0.69942293 - 1800 93.246077 3169.7579 2109.6017 193.06929 1060.1562 204.57678 981.05867 249.37843 0 -801.42006 595291.51 -594864.95 137.05559 55742.797 265.15197 0.65571606 - 1850 95.734661 3174.8532 2133.5052 195.25692 1041.348 175.87566 982.18775 244.55231 0 -786.49546 595290.43 -594865.21 882.03323 55742.797 268.02768 1.006296 - 1900 98.221874 3180.3842 2106.4808 192.78367 1073.9034 207.8879 977.47746 250.68948 0 -788.04039 595290.55 -594864.66 574.40162 55742.797 264.45175 1.4759897 - 1950 100.72148 3182.921 2084.8893 190.80763 1098.0317 207.26976 1007.5583 256.52302 0 -800.37789 595291.76 -594864.71 -981.75066 55742.797 261.81202 1.271779 - 2000 103.20588 3185.2881 2079.8136 190.3431 1105.4745 185.44441 1008.6997 251.0561 0 -766.97142 595292.22 -594864.97 661.65951 55742.797 261.35563 0.78600155 -Loop time of 103.206 on 1 procs for 2000 steps with 4500 atoms - -Pair time (%) = 60.3651 (58.49) -Bond time (%) = 16.8315 (16.3087) -Kspce time (%) = 20.1106 (19.4859) -Neigh time (%) = 1.52801 (1.48054) -Comm time (%) = 0.328804 (0.318591) -Outpt time (%) = 0.00495553 (0.00480159) -Other time (%) = 4.03695 (3.91155) - -Nlocal: 4500 ave 4500 max 4500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 10060 ave 10060 max 10060 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 774908 ave 774908 max 774908 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 774908 -Ave neighs/atom = 172.202 -Ave special neighs/atom = 13.3333 -Neighbor list builds = 35 -Dangerous builds = 0 diff --git a/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.4 b/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.4 deleted file mode 100644 index 6a310d08dc..0000000000 --- a/examples/USER/drude/butane/log.butane.nh.18Jul15.linux.4 +++ /dev/null @@ -1,177 +0,0 @@ -LAMMPS (18 Jul 2015) -# 250 butane system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.089 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.butane - orthogonal box = (-19.1 -19.0999 -19.1) to (19.1 19.1 19.1) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 4500 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 4250 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6750 dihedrals - 5 = max # of 1-2 neighbors - 8 = max # of 1-3 neighbors - 12 = max # of 1-4 neighbors - 17 = max # of special neighbors - -group gBUTANE molecule 1:250 -4500 atoms in group gBUTANE -group gCORES type 1 2 3 -3500 atoms in group gCORES -group gDRUDES type 4 5 -1000 atoms in group gDRUDES - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H C2H -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # C2H C2H -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # C2H H -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff * 4*5 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 * thole 1.368000 -pair_coeff 2 * thole 1.368000 -pair_coeff 4 * thole 1.368000 -pair_coeff 5 * thole 1.368000 - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 2 4 - 0 = # of size 2 clusters - 500 = # of size 3 clusters - 500 = # of size 4 clusters - 0 = # of frozen angles - -comm_modify vel yes -compute cTEMP_CORE gCORES temp/com -compute cTEMP all temp/drude - -fix fDIRECT all drude/transform/direct -fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 260 100.0 -fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 1 20.0 -fix fINVERSE all drude/transform/inverse - -fix fMOMENTUM all momentum 100 linear 1 1 1 - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.367867 - grid = 36 36 36 - stencil order = 5 - estimated absolute RMS force accuracy = 0.031354 - estimated relative force accuracy = 9.44215e-05 - using double precision FFTs - 3d grid and FFT values/proc = 26875 11664 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 17 -New max number of 1-2 to 1-4 neighbors: 17 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 - ghost atom cutoff = 10 -Memory usage per processor = 14.7792 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 6535.5187 2714.74 248.45112 3820.7787 3724.3278 140.75328 1.4735401 0 -518.77975 595169.42 -594696.41 -353319.1 55742.797 334.61375 18.435655 - 50 1.019057 2130.0808 1490.8248 136.43926 639.25599 192.16834 670.26518 115.15685 0 -766.5636 595300.83 -594872.6 2829.5958 55742.797 187.32686 0.60253137 - 100 2.043848 2172.0553 1656.5476 151.60609 515.50769 180.41449 708.03397 165.80788 0 -971.62525 595305.35 -594872.47 1231.388 55742.797 208.34096 0.16151117 - 150 3.0405529 2216.471 1733.4485 158.644 483.02256 136.16281 713.34485 169.62608 0 -964.30363 595300.47 -594872.27 4400.6233 55742.797 218.02975 0.12336381 - 200 4.0440719 2271.1314 1750.9955 160.2499 520.13584 190.12953 725.63606 167.04635 0 -987.11203 595295.5 -594871.06 2107.495 55742.797 220.19714 0.23035002 - 250 5.0482569 2333.7821 1793.0252 164.09642 540.75694 153.18169 833.95288 168.1507 0 -1041.2955 595297.2 -594870.43 1165.6922 55742.797 225.18334 1.0339003 - 300 6.044857 2403.6147 1909.3441 174.74185 494.27053 144.273 803.8452 155.85505 0 -1036.4615 595297.31 -594870.55 2511.3723 55742.797 239.06243 3.0455683 - 350 7.0382209 2448.239 1862.67 170.47027 585.56896 181.70522 821.79171 164.10713 0 -1005.4167 595293.5 -594870.12 2874.0826 55742.797 233.92745 1.0806438 - 400 8.025661 2498.6992 1942.5496 177.78079 556.14963 168.5792 828.99116 182.0756 0 -1050.149 595296.43 -594869.77 485.86784 55742.797 244.23632 0.38827289 - 450 9.010309 2552.9639 1890.0917 172.97988 662.87225 134.42613 957.3361 181.42951 0 -1036.4237 595295.53 -594869.43 66.452466 55742.797 237.65323 0.34464586 - 500 9.979717 2608.5501 1970.0729 180.29971 638.47718 187.01392 838.62128 176.10774 0 -985.23355 595290.89 -594868.93 3471.1636 55742.797 247.59402 0.66791289 - 550 10.965174 2667.002 1875.8227 171.674 791.17932 178.48766 1003.6885 176.78987 0 -991.21707 595292.35 -594868.92 1767.0547 55742.797 235.34039 1.7252612 - 600 11.944224 2715.2397 1883.279 172.35639 831.96067 186.79504 1047.6877 183.0431 0 -1010.5423 595293.27 -594868.29 931.85415 55742.797 236.28437 1.7094243 - 650 12.916431 2754.4495 1970.794 180.36571 783.65547 166.02823 963.09393 184.84638 0 -952.45216 595290.25 -594868.11 2640.0169 55742.797 247.67755 0.68709272 - 700 13.889729 2795.9463 1928.2674 176.47369 867.67893 176.09642 1002.4636 186.11482 0 -920.14357 595291.32 -594868.18 664.78857 55742.797 242.41896 0.44316458 - 750 14.849284 2838.2051 2043.2257 186.9946 794.97938 170.34989 941.73149 193.53082 0 -940.49605 595298.1 -594868.23 410.24692 55742.797 256.84034 0.55228895 - 800 15.765569 2881.9786 1945.9721 178.09402 936.00653 197.52035 1021.5571 202.83523 0 -915.18508 595297.49 -594868.21 -716.8133 55742.797 244.35111 1.2303486 - 850 16.62147 2923.386 2106.5752 192.79231 816.81079 195.9499 886.4168 184.36063 0 -878.10486 595296.29 -594868.1 -1407.5716 55742.797 264.3276 1.8387295 - 900 17.476931 2950.6672 2039.6221 186.6648 911.04508 183.7962 1000.7955 184.49765 0 -890.38971 595299.97 -594867.63 -1085.795 55742.797 256.21167 1.0198179 - 950 18.332394 2976.6435 2006.5931 183.64202 970.05037 228.60059 985.21322 206.18531 0 -881.65816 595299.54 -594867.83 -1851.9704 55742.797 252.23636 0.54012295 - 1000 19.192022 3003.7432 2056.8471 188.24122 946.89612 171.73291 976.85679 207.05089 0 -836.24565 595294.95 -594867.45 282.61893 55742.797 258.5658 0.52076763 - 1050 20.070536 3031.3535 2095.4845 191.77729 935.86893 203.54188 945.75571 204.85039 0 -846.10968 595294.45 -594866.62 -376.91144 55742.797 263.27092 0.93584075 - 1100 20.978902 3058.5346 2047.3099 187.36839 1011.2247 211.94079 1001.093 223.66207 0 -855.82432 595297.13 -594866.78 -1381.6546 55742.797 256.93411 1.6724371 - 1150 21.886788 3078.3992 2123.1811 194.31206 955.21814 189.50191 937.18689 224.21463 0 -823.63239 595294.38 -594866.43 524.69914 55742.797 266.59741 1.3568273 - 1200 22.731807 3093.5558 2005.8937 183.57801 1087.6621 201.34278 1044.991 219.39206 0 -805.37129 595293.83 -594866.52 -370.32731 55742.797 252.08289 0.71475598 - 1250 23.577332 3108.5154 2175.8971 199.1366 932.61825 156.65715 969.72264 225.30585 0 -850.00508 595297.25 -594866.31 -1015.3099 55742.797 273.53152 0.55101046 - 1300 24.41954 3122.979 2090.3725 191.30944 1032.6065 209.92008 984.36627 236.75348 0 -825.27575 595292.92 -594866.08 -798.51517 55742.797 262.69428 0.75855174 - 1350 25.260247 3136.8213 2084.4701 190.76926 1052.3512 186.49846 1004.7564 234.55382 0 -798.08358 595290.25 -594865.63 702.53502 55742.797 261.71554 1.3884097 - 1400 26.111855 3144.9027 2180.3656 199.54555 964.53705 170.02479 962.43949 235.07796 0 -829.2718 595291.77 -594865.51 1682.2458 55742.797 273.72857 1.5246347 - 1450 26.950639 3146.3362 2013.3813 184.26326 1132.955 193.77936 1084.1402 252.32287 0 -821.23025 595288.54 -594864.6 -160.21134 55742.797 252.96371 0.87779957 - 1500 27.790502 3150.6919 2107.4861 192.87567 1043.2058 185.11758 988.72513 245.47693 0 -796.86696 595285.47 -594864.71 2242.3607 55742.797 264.90213 0.61222945 - 1550 28.619789 3156.3482 2074.5978 189.86575 1081.7504 166.52858 1062.4966 238.93331 0 -810.65249 595289.34 -594864.9 2224.9023 55742.797 260.7359 0.68881915 - 1600 29.460929 3163.8714 2000.6737 183.10027 1163.1978 210.70797 1110.4522 256.16659 0 -840.14623 595290.73 -594864.71 -830.17835 55742.797 251.26509 1.1443132 - 1650 30.299437 3169.3484 2056.4317 188.20321 1112.9167 214.64223 1021.7623 268.00145 0 -815.6963 595289 -594864.8 813.10459 55742.797 258.12846 1.5476742 - 1700 31.139599 3168.7665 2119.4084 193.96679 1049.3581 147.25025 1027.6419 246.49323 0 -797.55219 595290.74 -594865.22 412.56019 55742.797 266.23023 1.0703144 - 1750 31.982883 3168.2311 2066.7649 189.14889 1101.4662 224.43981 1005.0038 243.56888 0 -797.82899 595291.25 -594864.96 -858.8853 55742.797 259.74652 0.69941609 - 1800 32.826623 3169.7582 2109.6043 193.06952 1060.154 204.57671 981.05578 249.38028 0 -801.42264 595291.51 -594864.95 137.07377 55742.797 265.1523 0.65571522 - 1850 33.670608 3174.8602 2133.4946 195.25594 1041.3657 175.87741 982.18471 244.56078 0 -786.49062 595290.44 -594865.21 882.07943 55742.797 268.02634 1.0063027 - 1900 34.515605 3180.392 2106.493 192.78478 1073.8991 207.88481 977.47602 250.68433 0 -788.04013 595290.55 -594864.66 574.47687 55742.797 264.45328 1.4759962 - 1950 35.361549 3182.9198 2084.8984 190.80846 1098.0214 207.26715 1007.5534 256.52264 0 -800.37486 595291.76 -594864.71 -981.72234 55742.797 261.81317 1.2717649 - 2000 36.208456 3185.292 2079.8093 190.34271 1105.4827 185.44479 1008.7001 251.06381 0 -766.97114 595292.22 -594864.97 661.65731 55742.797 261.3551 0.78598984 -Loop time of 36.2086 on 4 procs for 2000 steps with 4500 atoms - -Pair time (%) = 15.6569 (43.2408) -Bond time (%) = 4.33273 (11.966) -Kspce time (%) = 10.271 (28.3662) -Neigh time (%) = 0.435532 (1.20284) -Comm time (%) = 0.83936 (2.31813) -Outpt time (%) = 0.00456434 (0.0126057) -Other time (%) = 4.66849 (12.8933) - -Nlocal: 1125 ave 1165 max 1096 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 5854.5 ave 5931 max 5788 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 193727 ave 200966 max 187020 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 774908 -Ave neighs/atom = 172.202 -Ave special neighs/atom = 13.3333 -Neighbor list builds = 35 -Dangerous builds = 0 diff --git a/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.1 b/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.1 new file mode 100644 index 0000000000..127d859702 --- /dev/null +++ b/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.1 @@ -0,0 +1,277 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 +kspace_style pppm 1.0e-4 + +comm_modify vel yes +read_data data.ethanol + orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3000 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2750 bonds + reading angles ... + 3250 angles + reading dihedrals ... + 3000 dihedrals + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 11 = max # of special neighbors + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH +pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H +pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH +pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH +pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO +pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH +pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO +pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO +pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 1 thole 2.051000 +pair_coeff 1 2 thole 1.580265 +pair_coeff 1 4 thole 1.416087 +pair_coeff 1 6 thole 2.051000 +pair_coeff 1 7 thole 1.580265 +pair_coeff 1 8 thole 1.416087 +pair_coeff 2 2 thole 1.217570 +pair_coeff 2 4 thole 1.091074 +pair_coeff 2 6 thole 1.580265 +pair_coeff 2 7 thole 1.217570 +pair_coeff 2 8 thole 1.091074 +pair_coeff 4 4 thole 0.977720 +pair_coeff 4 6 thole 1.416087 +pair_coeff 4 7 thole 1.091074 +pair_coeff 4 8 thole 0.977720 +pair_coeff 6 6 thole 2.051000 +pair_coeff 6 7 thole 1.580265 +pair_coeff 6 8 thole 1.416087 +pair_coeff 7 7 thole 1.217570 +pair_coeff 7 8 thole 1.091074 +pair_coeff 8 8 thole 0.977720 + +group gETHANOL molecule 1:250 +3000 atoms in group gETHANOL +group gATOMS type 1 2 3 4 5 +2250 atoms in group gATOMS +group gDRUDES type 6 7 8 +750 atoms in group gDRUDES + +neighbor 2.0 bin + +variable vTEMP equal 300.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gATOMS create ${vTEMP} 12345 +velocity gATOMS create 300 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N C N D D D + +fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 + 250 = # of size 2 clusters + 250 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 300 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 300 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nph iso ${vPRESS} ${vPRESS} 500.0 +fix fNPH all nph iso 1 ${vPRESS} 500.0 +fix fNPH all nph iso 1 1 500.0 + +compute cTEMP all temp/drude + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 20 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.379738 + grid = 30 30 30 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0289979 + estimated relative force accuracy = 8.73262e-05 + using double precision FFTs + 3d grid and FFT values/proc = 50653 27000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 11 +New max number of 1-2 to 1-4 neighbors: 11 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 22.48 | 22.48 | 22.48 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170210.19 22094.109 381.62759 10.134301 + 20 0.81254506 10970.11 5646.659 758.03805 5323.451 2059.6082 2216.9981 125.92585 0 1728.656 514096.92 -514904.66 75437.598 22442.383 899.52209 426.89792 + 40 1.7067263 8946.2741 5328.0351 715.26425 3618.239 1462.1404 1696.2927 256.70344 0 1227.0694 513938.28 -514962.25 46636.214 23048.268 913.15414 252.56747 + 60 2.5404506 7510.8082 4723.1172 634.0568 2787.6909 1200.8053 1745.3972 301.30817 0 557.80687 513950.19 -514967.82 37794.247 23517.363 840.69812 151.04831 + 80 3.3801596 6348.9157 4602.0926 617.80981 1746.8231 881.76663 1380.8166 300.54007 0 204.03797 513929.56 -514949.9 33851.301 23924.559 841.20021 95.741792 + 100 4.2437606 5485.1689 4144.6876 556.40528 1340.4814 784.82013 1301.8493 289.61476 0 -77.16227 514016.31 -514974.95 23853.877 24319.093 768.90717 59.825643 + 120 5.0577445 4861.8148 3777.2483 507.07825 1084.5665 621.85238 1297.2272 283.15722 0 -165.13412 514030.3 -514982.83 17461.708 24661.819 708.89192 35.503576 + 140 5.8777206 4340.7393 3447.4973 462.81068 893.24198 643.1178 1248.6088 275.35463 0 -264.6674 513962.95 -514972.12 14977.074 24942.76 650.90916 23.297159 + 160 6.688663 3926.6789 3280.6852 440.41693 645.99367 590.74309 1125.6956 275.31466 0 -402.41978 514040.08 -514983.42 17550.63 25183.539 623.01495 13.767656 + 180 7.4729645 3510.0638 3034.3628 407.34927 475.70103 580.84695 1065.6783 271.61808 0 -478.33275 514008.17 -514972.28 9895.4157 25410.444 577.92533 8.7953368 + 200 8.2036176 3232.9542 2804.7026 376.51845 428.25158 560.53426 1096.7584 268.56297 0 -524.94297 514009.86 -514982.53 8536.536 25604.126 535.28025 5.5722323 + 220 8.9682925 3019.8368 2679.2202 359.67301 340.61655 534.32413 1086.0764 252.71411 0 -554.59208 514001.04 -514978.94 7625.0406 25766.134 511.84268 4.1308947 + 240 9.730809 2817.4084 2557.6953 343.35885 259.71311 533.47006 1096.7331 235.22275 0 -594.9152 513968.32 -514979.12 6062.2975 25913.841 489.03736 2.9845074 + 260 10.499042 2630.9155 2460.3336 330.28849 170.58193 520.16741 1043.8106 228.53526 0 -637.28205 514004.22 -514988.87 5628.429 26050.517 470.64131 2.358198 + 280 11.217016 2462.5369 2379.2296 319.40065 83.307285 525.29091 971.98774 226.2588 0 -624.49241 513966.97 -514982.71 4755.8332 26171.267 455.29613 1.8853352 + 300 11.964113 2313.8618 2233.2275 299.80054 80.634294 520.99642 985.55834 216.66019 0 -623.05887 513969.74 -514989.27 3495.3603 26275.734 427.3819 1.7109763 + 320 12.723562 2171.4928 2215.8464 297.4672 -44.353519 513.03114 926.86216 206.3972 0 -647.51178 513946.73 -514989.86 3549.145 26372.81 424.12312 1.5400892 + 340 13.426266 2048.6698 2102.88 282.30198 -54.210215 517.14417 972.13286 198.86927 0 -648.61225 513890.91 -514984.65 3715.5702 26466.519 402.53006 1.3933858 + 360 14.168186 1940.223 2045.0378 274.53693 -104.81473 499.08868 932.31216 187.54718 0 -652.27824 513915.74 -514987.22 2294.4616 26556.528 391.47399 1.3177584 + 380 14.864166 1826.4204 1933.7705 259.59981 -107.3501 518.46244 919.38664 182.02964 0 -651.82587 513909.74 -514985.14 2611.0855 26637.685 370.14008 1.326376 + 400 15.599668 1760.0086 1974.1623 265.02222 -214.15371 494.76522 905.22476 184.88378 0 -673.22096 513861.68 -514987.49 2090.4168 26713.916 377.90359 1.2789937 + 420 16.2925 1674.2391 1874.8006 251.68337 -200.56147 494.23164 919.14316 191.46494 0 -660.1575 513844.17 -514989.42 350.12478 26785.636 358.83667 1.3234235 + 440 17.041535 1636.4128 1886.5254 253.25737 -250.11252 501.29431 885.94965 180.12472 0 -646.62075 513813.8 -514984.66 458.70321 26849.461 361.09661 1.2948048 + 460 17.740912 1593.2246 1860.4472 249.7565 -267.22259 491.27176 906.91419 174.59456 0 -666.47423 513815.28 -514988.81 115.45351 26902.557 356.10559 1.2755931 + 480 18.472947 1505.1612 1836.7228 246.5716 -331.56157 509.71008 860.32948 173.58748 0 -651.36822 513766.31 -514990.13 1635.9711 26947.857 351.56234 1.2644252 + 500 19.162812 1442.4712 1798.4284 241.43076 -355.95719 522.31402 861.73677 168.27586 0 -655.15129 513739.29 -514992.42 1516.6732 26993.542 344.22674 1.2515652 + 520 19.89256 1429.3971 1796.9572 241.23326 -367.5601 524.35274 871.7445 162.49855 0 -664.89069 513732.49 -514993.75 -691.80782 27036.842 343.93996 1.2626321 + 540 20.616937 1386.8087 1788.7933 240.13729 -401.98456 549.1041 874.95416 154.29758 0 -656.88358 513668.46 -514991.91 -119.32561 27073.387 342.35804 1.3020275 + 560 21.306129 1344.6077 1829.0478 245.54127 -484.44012 543.60765 827.52373 145.03505 0 -643.55003 513639.44 -514996.5 693.36148 27104.757 350.07417 1.3037885 + 580 22.040812 1286.9423 1718.4962 230.70022 -431.5539 560.81872 873.95523 152.40482 0 -615.47818 513591.3 -514994.56 817.2745 27136.551 328.90573 1.2464245 + 600 22.724418 1275.6074 1701.8955 228.47166 -426.28816 557.82466 895.29544 163.06547 0 -608.8133 513562.03 -514995.69 275.46334 27163.636 325.68453 1.3370122 + 620 23.44057 1274.2239 1712.0781 229.83862 -437.85423 558.25658 859.2033 175.17918 0 -603.74788 513569.12 -514995.87 -810.10874 27182.704 327.68601 1.2216086 + 640 24.123536 1217.5949 1736.1449 233.06948 -518.54993 572.30838 823.15943 163.38189 0 -606.64686 513521.66 -514992.42 -536.21523 27199.467 332.28881 1.2469404 + 660 24.805612 1140.2496 1676.0527 225.00239 -535.80312 572.19423 829.86027 152.55649 0 -620.66616 513527.68 -514997.43 120.66196 27215.98 320.75861 1.2712041 + 680 25.520239 1133.2378 1685.4319 226.26149 -552.19407 578.85784 824.91421 153.63895 0 -613.65105 513498.02 -514993.97 -379.30914 27230.138 322.5583 1.2672644 + 700 26.205342 1124.125 1689.5449 226.81364 -565.41988 579.11835 817.50558 160.54964 0 -604.5409 513474.09 -514992.14 528.42535 27241.45 323.33965 1.2838662 + 720 26.921122 1109.6569 1678.6607 225.35249 -569.00385 580.40773 815.63482 166.4848 0 -599.13557 513461.32 -514993.72 1376.5605 27253.659 321.24203 1.3097627 + 740 27.601695 1104.3735 1664.4944 223.45073 -560.12097 598.18143 826.47186 162.20687 0 -577.40038 513419.67 -514989.25 -685.80791 27266.235 318.55379 1.2456749 + 760 28.28271 1069.6794 1657.3304 222.48899 -587.65098 602.19554 832.68475 153.62759 0 -575.90127 513395.19 -514995.45 28.38921 27277.988 317.17055 1.268719 + 780 28.996149 1035.0873 1654.5397 222.11435 -619.45236 585.73597 809.21796 152.24623 0 -573.92716 513400.09 -514992.82 -549.23892 27289.878 316.65381 1.2261365 + 800 29.675426 1040.0427 1664.7856 223.48982 -624.74286 604.87479 803.38738 148.64588 0 -581.4825 513396.97 -514997.14 530.67038 27299.723 318.5938 1.2825531 + 820 30.402455 1058.8049 1736.3913 233.10256 -677.58644 598.66467 784.93293 144.90816 0 -597.9166 513390.25 -514998.43 653.33362 27310.17 332.34765 1.2198792 + 840 31.118422 1045.2817 1676.2729 225.03194 -630.99122 612.88019 813.4753 148.32663 0 -579.43245 513373.31 -514999.55 -720.22991 27320.116 320.80475 1.2620189 + 860 31.799375 1020.82 1671.7525 224.4251 -650.93249 601.80247 814.81617 150.65389 0 -579.97174 513366.24 -515004.47 -498.60966 27326.379 319.94744 1.2404059 + 880 32.481784 989.86496 1624.1319 218.03225 -634.26695 614.48607 850.33389 145.79505 0 -574.15578 513329.88 -515000.6 644.59976 27330.958 310.79513 1.2948148 + 900 33.198209 951.41059 1655.2127 222.20471 -703.80214 612.33731 803.86098 146.44258 0 -578.12695 513314.46 -515002.78 -25.904297 27339.169 316.76616 1.2650626 + 920 33.878012 990.08562 1682.4801 225.86523 -692.39448 625.27768 804.9682 145.49836 0 -566.22584 513298.29 -515000.2 -208.28417 27347.438 322.01282 1.2196912 + 940 34.556311 974.83201 1654.4008 222.09571 -679.56876 644.46748 830.40192 142.42832 0 -571.21787 513274.72 -515000.37 -71.952805 27352.639 316.60661 1.2741508 + 960 35.269557 970.36001 1647.0909 221.11439 -676.73092 621.42437 860.53358 137.22199 0 -570.51798 513277.98 -515003.38 339.47273 27355.862 315.21012 1.2628848 + 980 35.951764 922.33531 1622.6042 217.82716 -700.2689 618.59396 850.9916 132.49991 0 -567.44171 513265.42 -515000.33 -3.755395 27360.701 310.51565 1.2635959 + 1000 36.662547 903.55733 1693.4113 227.3327 -789.854 615.39097 786.15607 135.3415 0 -548.74582 513226.2 -515004.2 -1219.6014 27365.318 324.08684 1.2699177 + 1020 37.341981 880.90138 1612.1831 216.42818 -731.2817 641.82697 825.92774 137.67854 0 -547.87626 513212.88 -515001.72 -125.90779 27364.725 308.51463 1.2712085 + 1040 38.019606 859.45089 1636.4941 219.69182 -777.04323 642.81093 781.73583 128.96061 0 -535.59867 513206.15 -515001.1 -135.59253 27365.446 313.17007 1.2829993 + 1060 38.725149 841.77495 1587.4484 213.10766 -745.67345 645.21049 847.89954 128.65218 0 -530.86511 513167.42 -515003.99 -78.288456 27368.183 303.75381 1.3158354 + 1080 39.38038 821.88019 1590.6204 213.53349 -768.74022 655.77353 810.91879 133.42328 0 -519.68745 513152.23 -515001.39 -104.67266 27368.299 304.3695 1.2980829 + 1100 40.035902 809.65728 1576.7543 211.67203 -767.09702 656.19162 822.82454 142.23371 0 -516.69506 513132.98 -515004.64 1031.9055 27367.566 301.722 1.273181 + 1120 40.726126 820.5289 1619.3681 217.39273 -798.83918 672.50004 801.37058 138.45512 0 -522.82421 513115.49 -515003.84 754.43464 27372.483 309.87476 1.3114682 + 1140 41.387774 841.02858 1618.789 217.315 -777.76045 662.62238 819.67645 137.92965 0 -530.61485 513139.41 -515006.78 -1113.1328 27379.657 309.76952 1.298026 + 1160 42.057621 817.85003 1643.6698 220.65512 -825.81977 662.19692 793.93829 135.32496 0 -560.64736 513151.2 -515007.83 -185.68314 27379.995 314.55458 1.262201 + 1180 42.715174 828.80176 1642.913 220.55353 -814.11124 676.87917 807.99197 132.86256 0 -551.49814 513123.1 -515003.45 -1104.1521 27375.422 314.43929 1.1926696 + 1200 43.406653 824.66892 1602.5917 215.14058 -777.92278 660.24947 818.58601 137.75245 0 -536.80435 513150.81 -515008.52 417.52586 27368.971 306.71463 1.1809397 + 1220 44.070962 793.59171 1650.4888 221.57054 -856.89708 643.52358 800.09599 140.67504 0 -559.82512 513124.22 -515005.59 -2053.0708 27364.593 315.86306 1.2592409 + 1240 44.763665 784.17746 1595.2933 214.1608 -811.11582 645.81703 823.62179 144.27417 0 -541.81494 513125.24 -515008.25 -522.45199 27354.125 305.31945 1.1717212 + 1260 45.426509 771.80674 1579.9594 212.1023 -808.15267 647.37467 839.39464 139.48231 0 -533.91983 513105.35 -515005.84 -236.36749 27340.092 302.33234 1.2827322 + 1280 46.090314 757.30829 1571.2053 210.9271 -813.89703 677.57798 806.17559 134.09538 0 -505.01959 513077.27 -515003.99 811.20493 27324.568 300.65658 1.2770862 + 1300 46.786592 784.63599 1620.5544 217.55198 -835.91837 658.42232 810.22801 135.68533 0 -515.37984 513080.18 -515005.05 -382.12012 27312.082 310.1031 1.3093104 + 1320 47.448243 775.54897 1628.6454 218.63816 -853.0964 663.39683 830.11901 133.1559 0 -535.66369 513055.76 -514999.87 -555.79114 27302.584 311.6778 1.2541558 + 1340 48.112453 748.355 1610.6902 216.22777 -862.33523 657.81748 804.32588 131.93735 0 -513.6202 513058.67 -515001.47 313.47767 27291.01 308.20033 1.3368285 + 1360 48.811392 751.32155 1595.4402 214.18052 -844.11861 657.51903 845.03718 137.87132 0 -513.62167 513031.45 -515002.37 -79.880845 27279.506 305.28326 1.321866 + 1380 49.475022 731.26314 1608.1608 215.88821 -876.89769 669.57446 814.19938 135.69586 0 -498.14752 513005.56 -515003.78 494.44462 27274.725 307.73144 1.2994877 + 1400 50.172106 710.15416 1589.3213 213.35909 -879.16715 684.55854 812.02642 130.05555 0 -491.32449 512986.97 -515001.46 -1873.3431 27271.561 304.096 1.3551531 + 1420 50.837606 696.15497 1589.6894 213.40851 -893.53445 692.24474 827.32888 125.48151 0 -496.67739 512958.77 -515000.68 -534.37168 27263.105 304.19764 1.2826528 + 1440 51.508246 698.08943 1637.5392 219.83212 -939.44977 695.24634 786.95383 130.67316 0 -494.65965 512945.4 -515003.07 -237.78467 27250.78 313.40258 1.2079267 + 1460 52.205405 699.73512 1625.071 218.15832 -925.33587 701.89168 802.08732 135.45068 0 -501.703 512938.62 -515001.68 28.171339 27240.652 310.98643 1.268512 + 1480 52.872982 689.70566 1597.6417 214.47607 -907.93608 674.72811 845.78451 136.8906 0 -497.50953 512935.14 -515002.97 -602.11556 27230.827 305.70908 1.3130701 + 1500 53.569404 691.1995 1561.7613 209.65929 -870.56183 692.08042 858.4753 135.61947 0 -493.28793 512938.1 -515001.55 -597.63867 27214.771 298.8608 1.2428754 + 1520 54.234223 674.25149 1622.6123 217.82825 -948.36077 668.17586 834.50429 135.26557 0 -517.17765 512934.73 -515003.86 -104.64931 27195.923 310.52105 1.2545913 + 1540 54.899103 660.26416 1645.0423 220.83937 -984.77813 693.47571 799.50207 124.8185 0 -510.40009 512910.64 -515002.81 -1254.5226 27176.861 314.81806 1.2613124 + 1560 55.595102 664.64562 1650.033 221.50935 -985.38737 697.98896 795.13498 120.20295 0 -510.91599 512918.67 -515006.46 -950.50992 27153.028 315.75626 1.3045633 + 1580 56.262 663.46124 1633.8238 219.33335 -970.36258 704.49765 795.17437 132.71647 0 -502.08537 512906.5 -515007.16 -205.86006 27124.708 312.66475 1.2676295 + 1600 56.928335 645.68029 1598.5467 214.59755 -952.86639 706.45777 828.29528 135.72398 0 -513.58629 512891.73 -515001.49 -1147.6441 27091.638 305.87496 1.3308059 + 1620 57.629507 637.7525 1562.3603 209.7397 -924.60782 721.14412 846.17365 136.34063 0 -517.2706 512894.92 -515005.91 -1271.6076 27054.822 298.95752 1.2851255 + 1640 58.297866 616.11852 1583.9447 212.63731 -967.82623 714.38783 803.96933 137.27846 0 -500.85436 512879.67 -515002.28 -1169.7751 27016.776 303.10683 1.2582529 + 1660 58.96682 632.47606 1599.1228 214.6749 -966.64675 723.96119 799.81022 125.78728 0 -480.98243 512865.44 -515000.66 -688.27485 26977.191 305.98571 1.3301015 + 1680 59.679934 614.14317 1630.4077 218.87475 -1016.2646 712.35781 795.2823 112.38484 0 -463.91464 512831.48 -515003.86 -303.49292 26939.363 311.98958 1.314989 + 1700 60.35184 607.54886 1616.1532 216.96114 -1008.6043 724.48093 799.01068 115.53655 0 -450.47755 512806.86 -515004.02 1086.8644 26904.035 309.27252 1.2786556 + 1720 61.066244 609.2294 1580.6054 212.18902 -971.37599 725.61177 813.06406 121.47504 0 -440.04715 512818.91 -515010.39 5.983342 26873.897 302.44224 1.3152539 + 1740 61.74157 625.35389 1606.0174 215.60047 -980.66354 721.92477 812.41005 127.04476 0 -435.05634 512799.07 -515006.06 333.20671 26849.324 307.31957 1.3017468 + 1760 62.417318 594.94962 1568.3514 210.54397 -973.40177 730.56559 805.35837 129.49326 0 -450.75311 512821.57 -515009.64 891.72675 26828.071 300.13536 1.2166782 + 1780 63.140649 600.36677 1620.4389 217.53648 -1020.0721 722.22052 795.19804 123.74183 0 -460.16037 512805.38 -515006.45 6.5230083 26812.903 310.0854 1.2989361 + 1800 63.824508 579.73219 1609.3524 216.04817 -1029.6202 711.53963 793.77661 123.12265 0 -451.25398 512797.31 -515004.11 -1303.7286 26799.27 307.96564 1.2860154 + 1820 64.545172 598.84205 1608.9687 215.99665 -1010.1266 714.09002 799.02749 122.43878 0 -453.90843 512813.78 -515005.56 632.28614 26785.698 307.91501 1.2325029 + 1840 65.22587 586.50951 1587.5928 213.12705 -1001.0833 727.94474 823.60521 129.12956 0 -460.11816 512780.21 -515001.85 1024.9885 26777.699 303.8049 1.2612311 + 1860 65.909234 575.80278 1557.8819 209.13849 -982.07909 727.5608 800.91998 138.66389 0 -454.06531 512808.05 -515003.21 -696.69404 26772.219 298.09238 1.3005467 + 1880 66.632258 611.28789 1604.6616 215.41846 -993.37373 737.40385 802.26484 139.2269 0 -450.63031 512780.24 -515001.88 -40.643962 26765.841 307.08153 1.2507275 + 1900 67.314627 606.24473 1611.9641 216.39878 -1005.7194 718.10757 783.64683 141.16739 0 -478.54415 512835.51 -515005.61 564.61472 26761.053 308.45922 1.3025385 + 1920 67.997687 622.32128 1652.1009 221.78697 -1029.7797 709.21175 808.86628 140.79666 0 -489.67469 512806.75 -515005.73 -2045.2966 26762.21 316.16296 1.280607 + 1940 68.720055 585.91734 1580.5482 212.18134 -994.63085 701.86656 823.41307 141.76963 0 -476.56128 512820.97 -515006.09 -1477.9457 26758.847 302.44297 1.2879495 + 1960 69.400974 599.23183 1573.8307 211.27954 -974.59884 703.80549 834.20676 141.74855 0 -473.96154 512825.62 -515006.02 -555.31861 26748.97 301.16698 1.2604779 + 1980 70.082469 604.67649 1570.9488 210.89266 -966.27229 709.67328 842.22196 142.29376 0 -479.29842 512823.2 -515004.37 220.13578 26738.567 300.59944 1.2956585 + 2000 70.804962 610.11958 1559.2324 209.31979 -949.11278 723.21777 823.79015 145.64191 0 -461.27302 512827.63 -515008.12 -226.50414 26731.515 298.36269 1.2739114 +Loop time of 70.805 on 1 procs for 2000 steps with 3000 atoms + +Performance: 1.220 ns/day, 19.668 hours/ns, 28.247 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 46.358 | 46.358 | 46.358 | 0.0 | 65.47 +Bond | 1.8097 | 1.8097 | 1.8097 | 0.0 | 2.56 +Kspace | 10.643 | 10.643 | 10.643 | 0.0 | 15.03 +Neigh | 1.8814 | 1.8814 | 1.8814 | 0.0 | 2.66 +Comm | 0.38412 | 0.38412 | 0.38412 | 0.0 | 0.54 +Output | 0.008601 | 0.008601 | 0.008601 | 0.0 | 0.01 +Modify | 9.6728 | 9.6728 | 9.6728 | 0.0 | 13.66 +Other | | 0.04689 | | | 0.07 + +Nlocal: 3000 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10022 ave 10022 max 10022 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 721937 ave 721937 max 721937 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 721937 +Ave neighs/atom = 240.646 +Ave special neighs/atom = 10.5 +Neighbor list builds = 49 +Dangerous builds = 0 +Total wall time: 0:01:10 diff --git a/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.4 b/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.4 new file mode 100644 index 0000000000..a0f886795b --- /dev/null +++ b/examples/USER/drude/ethanol/log.27Nov18.ethanol.lang.g++.4 @@ -0,0 +1,277 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 +kspace_style pppm 1.0e-4 + +comm_modify vel yes +read_data data.ethanol + orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2750 bonds + reading angles ... + 3250 angles + reading dihedrals ... + 3000 dihedrals + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 11 = max # of special neighbors + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH +pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H +pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH +pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH +pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO +pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH +pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO +pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO +pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 1 thole 2.051000 +pair_coeff 1 2 thole 1.580265 +pair_coeff 1 4 thole 1.416087 +pair_coeff 1 6 thole 2.051000 +pair_coeff 1 7 thole 1.580265 +pair_coeff 1 8 thole 1.416087 +pair_coeff 2 2 thole 1.217570 +pair_coeff 2 4 thole 1.091074 +pair_coeff 2 6 thole 1.580265 +pair_coeff 2 7 thole 1.217570 +pair_coeff 2 8 thole 1.091074 +pair_coeff 4 4 thole 0.977720 +pair_coeff 4 6 thole 1.416087 +pair_coeff 4 7 thole 1.091074 +pair_coeff 4 8 thole 0.977720 +pair_coeff 6 6 thole 2.051000 +pair_coeff 6 7 thole 1.580265 +pair_coeff 6 8 thole 1.416087 +pair_coeff 7 7 thole 1.217570 +pair_coeff 7 8 thole 1.091074 +pair_coeff 8 8 thole 0.977720 + +group gETHANOL molecule 1:250 +3000 atoms in group gETHANOL +group gATOMS type 1 2 3 4 5 +2250 atoms in group gATOMS +group gDRUDES type 6 7 8 +750 atoms in group gDRUDES + +neighbor 2.0 bin + +variable vTEMP equal 300.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gATOMS create ${vTEMP} 12345 +velocity gATOMS create 300 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N C N D D D + +fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 + 250 = # of size 2 clusters + 250 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 300 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 300 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nph iso ${vPRESS} ${vPRESS} 500.0 +fix fNPH all nph iso 1 ${vPRESS} 500.0 +fix fNPH all nph iso 1 1 500.0 + +compute cTEMP all temp/drude + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 20 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.379738 + grid = 30 30 30 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0289979 + estimated relative force accuracy = 8.73262e-05 + using double precision FFTs + 3d grid and FFT values/proc = 17908 7200 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 11 +New max number of 1-2 to 1-4 neighbors: 11 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 15.7 | 15.72 | 15.75 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170210.19 22094.109 381.62759 10.134301 + 20 0.24885726 10977.523 5649.4234 758.40916 5328.0995 2062.3542 2228.2406 127.20787 0 1716.2655 514097.62 -514903.59 75540.788 22441.711 900.66455 425.71754 + 40 0.52037597 8971.222 5307.0197 712.44303 3664.2023 1468.3101 1727.552 263.87374 0 1220.3688 513944.03 -514959.93 46704.125 23047.094 909.55742 251.59686 + 60 0.7807281 7598.3479 4774.3053 640.92856 2824.0427 1194.6424 1771.6653 314.85756 0 553.7151 513952.94 -514963.78 37329.2 23513.994 850.78607 150.29302 + 80 1.1572349 6500.0058 4632.0732 621.83456 1867.9325 914.32396 1444.2432 317.24546 0 213.11185 513930.12 -514951.11 33256.762 23919.646 847.27963 94.966975 + 100 1.4178512 5591.472 4319.1968 579.83234 1272.2752 772.47756 1235.8385 306.35435 0 -56.189361 513990.32 -514976.52 21842.59 24315.598 802.33641 59.89227 + 120 1.6625795 4952.7621 3881.7096 521.1017 1071.0525 630.88446 1260.1912 299.84296 0 -147.16305 514014.9 -514987.6 17191.638 24657.729 728.78527 35.811873 + 140 1.8984792 4373.9331 3440.7548 461.90553 933.1783 670.28429 1238.1308 300.44834 0 -260.57044 513963.56 -514978.68 17252.83 24939.26 649.60264 23.329745 + 160 2.1378865 3923.229 3251.2581 436.46647 671.97091 632.15143 1144.4146 307.32283 0 -436.68046 514014.07 -514989.31 17845.825 25185.451 617.37678 13.751529 + 180 2.3720722 3558.1557 3060.4382 410.84977 497.71755 621.70998 1085.8204 297.1556 0 -495.34468 513968.54 -514980.16 9885.361 25415.428 582.93783 8.7536435 + 200 2.6049569 3228.4936 2864.4301 384.53659 364.06344 591.33636 1077.5366 257.50944 0 -521.78289 513950.34 -514990.87 5925.7217 25605.563 546.61818 5.8335105 + 220 2.8426785 2922.7424 2668.2075 358.19461 254.5349 552.38924 1045.2135 238.94168 0 -548.4004 513955.45 -514989.06 7136.0052 25761.984 509.82785 3.9098309 + 240 3.1155882 2721.0612 2574.2915 345.58681 146.76969 547.99652 1035.0606 226.51837 0 -609.21222 513928.45 -514982.05 6971.5001 25907.597 492.18737 3.0535008 + 260 3.3265111 2525.7518 2460.9077 330.36557 64.844061 536.78625 1022.3311 211.32544 0 -633.92783 513919.8 -514991.47 4534.5804 26040.845 470.74694 2.3688839 + 280 3.5478129 2338.039 2324.3983 312.03981 13.640708 519.09042 970.16233 197.76897 0 -621.27548 513937.32 -514989.43 2909.3322 26151.714 444.74626 1.9753672 + 300 3.7687361 2194.851 2189.0474 293.86956 5.8036062 530.74509 982.33557 190.99311 0 -652.24555 513946.83 -514992.86 4224.0345 26246.212 418.93917 1.6487718 + 320 3.9801922 2045.4487 2132.0617 286.21949 -86.613049 531.53518 935.90803 188.46605 0 -683.41226 513935.36 -514994.47 1710.734 26338.321 408.05555 1.5540687 + 340 4.1992741 1929.4058 2083.452 279.69387 -154.04619 509.02677 906.15126 186.62933 0 -668.19644 513908.44 -514996.09 2736.2098 26423.379 398.77795 1.4580758 + 360 4.4171088 1853.7062 1992.5995 267.49733 -138.89334 525.34864 891.90355 178.21101 0 -654.64078 513920.99 -515000.71 3816.7092 26502.12 381.4127 1.3381612 + 380 4.6217661 1760.9358 1947.0158 261.37793 -186.07997 516.89889 919.58404 172.53796 0 -676.7004 513879.46 -514997.86 2960.1316 26580.115 372.6985 1.2814406 + 400 4.8376818 1687.8988 1905.9227 255.86137 -218.0239 535.53769 922.01769 176.20545 0 -684.03744 513833.88 -515001.63 1297.7806 26648.895 364.81828 1.2874209 + 420 5.0580292 1605.7787 1889.0825 253.60065 -283.30381 517.08427 857.72563 180.14818 0 -663.15367 513826.27 -515001.38 2609.7387 26710.911 361.58795 1.2934789 + 440 5.2613502 1518.1412 1794.5719 240.91304 -276.43077 531.12246 893.04683 188.1283 0 -667.41934 513778.75 -515000.06 1448.9344 26771.955 343.49864 1.2323194 + 460 5.474973 1455.6369 1796.1847 241.12955 -340.54775 527.17043 846.65061 188.73693 0 -650.46422 513749.2 -515001.84 161.63078 26825.587 343.80003 1.2432983 + 480 5.6766918 1423.3951 1780.4686 239.01974 -357.07349 555.37302 861.62016 179.25213 0 -642.3686 513685.22 -514996.17 1728.4109 26870.018 340.77367 1.2753301 + 500 5.8963647 1414.5107 1792.5124 240.63656 -378.00171 562.06965 865.1732 172.51081 0 -638.43613 513657.38 -514996.7 2852.5688 26914.25 343.08652 1.2642269 + 520 6.1024427 1359.8646 1801.0839 241.78725 -441.21931 573.29268 804.68005 169.59419 0 -635.98014 513644.06 -514996.86 917.97283 26965.499 344.72952 1.264948 + 540 6.3182905 1320.129 1763.768 236.77776 -443.63898 564.54015 851.18104 169.65891 0 -632.69528 513601.13 -514997.45 393.78094 27008.775 337.59196 1.2311182 + 560 6.5340965 1288.8769 1741.0597 233.72927 -452.18283 588.80641 843.7906 164.29947 0 -639.61003 513594.25 -515003.72 2022.6586 27046.802 333.24957 1.2004945 + 580 6.738924 1250.8612 1701.7462 228.45162 -450.88502 575.95012 877.76059 153.10544 0 -632.21312 513575.06 -515000.54 319.43567 27087.59 325.68988 1.258461 + 600 6.9839265 1237.7875 1721.861 231.15193 -484.0735 586.2774 851.82884 147.45104 0 -635.34134 513566.1 -515000.39 -1495.8007 27125.397 329.56435 1.2147693 + 620 7.1886187 1255.6883 1741.6598 233.80983 -485.97147 593.81316 838.06474 152.61844 0 -618.48814 513546.09 -514998.07 -239.76675 27153.275 333.35756 1.2207133 + 640 7.403686 1231.453 1734.6085 232.86323 -503.15553 592.94732 847.14537 157.31902 0 -622.72191 513517.06 -514994.9 1262.739 27174.105 331.96914 1.3100227 + 660 7.6087363 1205.9453 1720.7921 231.00844 -514.84686 605.97637 844.61854 156.72343 0 -608.38182 513480.7 -514994.48 541.26917 27199.495 329.34901 1.2412012 + 680 7.8241618 1168.82 1693.3809 227.32862 -524.5609 610.91696 859.82389 152.3176 0 -616.40743 513464.95 -514996.17 -529.37821 27221.433 324.05587 1.3283313 + 700 8.0318077 1139.7968 1686.9214 226.46146 -547.12461 600.49589 835.94756 154.05863 0 -606.7429 513467.63 -514998.52 679.06473 27236.703 322.81056 1.3423643 + 720 8.2363923 1092.9537 1676.7232 225.09239 -583.76953 599.79941 810.70949 154.32485 0 -586.40642 513433.08 -514995.27 -585.69662 27255.925 320.84689 1.3625931 + 740 8.4505181 1128.5561 1686.198 226.36434 -557.64189 608.39888 814.40376 148.31341 0 -576.35219 513440.47 -514992.87 1244.5446 27274.826 322.70284 1.2739521 + 760 8.6553326 1117.7278 1739.2464 233.48585 -621.51863 612.4462 767.55338 143.8046 0 -557.71655 513408.23 -514995.84 1093.5729 27295.505 332.85864 1.3081834 + 780 8.8741109 1106.8963 1694.5955 227.49166 -587.69917 621.94129 814.60472 148.54444 0 -544.5269 513368.24 -514996.5 1020.894 27319.829 324.31438 1.2670368 + 800 9.0792463 1119.8416 1718.8899 230.75307 -599.04828 615.79521 822.09893 150.20192 0 -544.21016 513354.51 -514997.44 -145.29684 27346.503 328.96744 1.27833 + 820 9.2923503 1100.7099 1661.8207 223.0918 -561.11086 634.74953 843.11877 146.78045 0 -554.19608 513367.17 -514998.73 1869.737 27372.705 318.03624 1.2563109 + 840 9.4957469 1050.0874 1692.7796 227.24789 -642.69222 601.30056 816.98683 139.43809 0 -553.50651 513352.19 -514999.1 1348.2664 27400.511 323.96534 1.2729707 + 860 9.7094629 1042.7553 1659.2043 222.74056 -616.44901 621.75625 821.47309 138.21191 0 -555.05691 513354.19 -514997.03 -727.5674 27429.255 317.50236 1.3339135 + 880 9.9195423 1033.8676 1659.2249 222.74333 -625.35739 603.51906 847.42057 149.36712 0 -565.95565 513337.79 -514997.5 -313.44149 27451.297 317.53888 1.2570577 + 900 10.142613 1033.7624 1637.6339 219.84483 -603.87149 622.06547 811.88787 155.52952 0 -542.52312 513343.54 -514994.37 1047.3137 27471.84 313.40683 1.2403795 + 920 10.345829 1008.6446 1641.2497 220.33024 -632.60508 603.07732 856.65655 154.41458 0 -548.68151 513295.17 -514993.24 103.24221 27494.927 314.0879 1.2685922 + 940 10.547752 1014.9632 1643.6054 220.64648 -628.64224 651.79962 816.08408 149.02041 0 -527.85081 513276.54 -514994.23 -364.67163 27515.823 314.56245 1.2150283 + 960 10.760628 1032.4206 1694.3296 227.45598 -661.90901 631.32636 826.29861 143.25116 0 -525.82257 513258.93 -514995.89 1416.1446 27534.39 324.25519 1.2878583 + 980 10.96867 997.2143 1637.471 219.82297 -640.25673 649.17389 840.91105 145.10691 0 -527.22384 513248.84 -514997.07 1027.4324 27556.624 313.33467 1.3359011 + 1000 11.181152 980.70328 1679.6252 225.48198 -698.92196 616.29851 808.49173 143.96963 0 -518.492 513246.09 -514995.28 328.95214 27580.508 321.45785 1.23763 + 1020 11.385127 964.62633 1655.3416 222.22201 -690.71527 637.09502 844.75137 135.25445 0 -525.02956 513212.27 -514995.06 80.148272 27602.021 316.79063 1.2656102 + 1040 11.594135 956.01316 1683.0451 225.94108 -727.03194 631.81212 818.33077 128.9891 0 -520.68359 513210.27 -514995.75 470.78306 27620.292 322.12502 1.2135338 + 1060 11.787688 933.22039 1693.9231 227.4014 -760.70274 646.39135 803.29817 130.04881 0 -528.24124 513182.71 -514994.91 239.4629 27638.164 324.20286 1.2314242 + 1080 12.019302 924.08701 1655.3855 222.2279 -731.29849 657.61421 824.59227 129.04796 0 -511.96678 513168.73 -514999.31 303.67371 27653.716 316.81728 1.223067 + 1100 12.213108 898.91261 1623.3761 217.93078 -724.46344 664.01917 828.5969 133.99752 0 -516.0614 513164.69 -514999.71 -222.62542 27666.941 310.68427 1.2153994 + 1120 12.41604 853.75082 1604.1305 215.34715 -750.37966 641.42123 819.9451 135.53827 0 -522.84677 513174.17 -514998.61 -712.60931 27680.156 306.99082 1.2247886 + 1140 12.609285 856.11685 1597.8188 214.49984 -741.70197 667.36627 802.82977 138.4139 0 -519.32453 513168.41 -514999.4 -102.39627 27691.615 305.78084 1.224836 + 1160 12.804644 841.06502 1588.8444 213.29507 -747.7794 639.48731 820.18846 145.23411 0 -514.61341 513163.68 -515001.76 -1183.509 27699.206 304.05355 1.2408942 + 1180 13.054664 860.51613 1621.2063 217.6395 -760.69016 641.94901 812.05607 135.63519 0 -518.65348 513173.02 -515004.7 281.47746 27701.81 310.24087 1.2817118 + 1200 13.250304 837.02718 1605.8013 215.57145 -768.77412 647.08878 819.62137 134.70383 0 -535.25329 513169.92 -515004.85 -741.61789 27704.108 307.27044 1.3202509 + 1220 13.454972 847.88424 1630.4606 218.88185 -782.57635 632.73877 814.55949 134.45986 0 -543.58866 513187.28 -515008.03 301.16905 27705.337 312.02884 1.2480776 + 1240 13.650697 847.8463 1613.1526 216.55833 -765.3063 657.26308 817.09263 131.44411 0 -533.77746 513168.85 -515006.17 -1738.246 27705.837 308.69599 1.2825009 + 1260 13.848417 864.10938 1604.3359 215.37473 -740.22655 654.64386 830.80471 136.50167 0 -518.80899 513162.82 -515006.19 -457.58037 27701.516 306.99469 1.3056189 + 1280 14.058141 892.58539 1622.354 217.79358 -729.76865 654.56025 853.72132 146.37045 0 -502.50853 513124.64 -515006.56 1617.9621 27698.218 310.47185 1.2538957 + 1300 14.25655 910.15714 1649.6144 221.45317 -739.4573 669.55948 824.60696 152.88156 0 -495.91044 513118.29 -515008.89 -947.37179 27701.819 315.68715 1.2786016 + 1320 14.462712 881.86464 1653.5515 221.98169 -771.68682 667.15825 811.67934 146.31009 0 -501.83979 513113.06 -515008.06 -836.07194 27703.296 316.44487 1.2716419 + 1340 14.66221 870.89257 1685.0409 226.20901 -814.14836 639.83879 820.7611 137.05399 0 -502.59799 513100.73 -515009.93 1322.9199 27705.806 322.51431 1.1950205 + 1360 14.876581 853.37228 1650.3504 221.55197 -796.97814 646.59807 828.89771 128.53685 0 -518.68585 513127.01 -515009.33 -685.77178 27711.07 315.84173 1.2552323 + 1380 15.07645 846.05537 1652.3957 221.82654 -806.34037 655.80177 845.42057 123.99858 0 -508.17399 513084.95 -515008.34 -1611.4393 27715.739 316.20591 1.3081133 + 1400 15.290876 845.61911 1643.3419 220.6111 -797.72277 681.7704 794.40988 122.51167 0 -491.96431 513103.8 -515008.25 1340.3832 27715.764 314.49703 1.249787 + 1420 15.489104 803.39863 1630.1296 218.83742 -826.73099 671.35628 807.63619 122.01003 0 -484.93762 513065.22 -515008.01 1599.9415 27715.83 311.97673 1.2205741 + 1440 15.695448 798.11794 1586.2583 212.94789 -788.14035 691.5246 832.65594 120.76201 0 -465.82995 513043.17 -515010.42 693.27083 27722.616 303.53977 1.2829192 + 1460 15.91282 786.25408 1614.9027 216.79327 -828.64859 657.62541 813.69119 123.75957 0 -476.8708 513064.69 -515011.54 411.32225 27731.39 309.03286 1.2785029 + 1480 16.12012 763.25782 1608.2178 215.89585 -844.95995 668.25992 798.0135 125.60791 0 -501.0795 513074.18 -515009.94 -210.6788 27739.429 307.75344 1.2722038 + 1500 16.31711 742.2781 1642.6489 220.51807 -900.3708 642.57755 747.85628 128.7751 0 -506.59888 513093.85 -515006.83 657.03263 27745.692 314.34071 1.3056262 + 1520 16.523088 729.1993 1560.7352 209.52153 -831.53586 684.2385 779.3475 135.75119 0 -498.45899 513072.79 -515005.21 64.426284 27753.859 298.64905 1.276366 + 1540 16.719949 744.18971 1581.6321 212.32685 -837.44244 684.68705 806.72314 139.08406 0 -507.07664 513045.21 -515006.07 -1592.594 27760.726 302.65236 1.2826649 + 1560 16.955894 732.25034 1589.2114 213.34434 -856.96111 671.90468 790.0602 135.77523 0 -516.63197 513069.7 -515007.77 -483.90212 27760.814 304.08818 1.324249 + 1580 17.152081 767.01867 1612.3153 216.44593 -845.29663 682.6108 787.28261 132.5621 0 -507.32097 513069.61 -515010.04 -555.1036 27759.537 308.50615 1.3501402 + 1600 17.357651 765.40129 1608.2406 215.89892 -842.8393 685.49537 792.49876 133.14916 0 -503.66586 513056.44 -515006.76 205.34219 27753.467 307.76245 1.2628065 + 1620 17.55409 772.17408 1631.4594 219.01594 -859.28536 668.94991 789.22477 139.7312 0 -488.80931 513038.28 -515006.66 869.15057 27745.263 312.19213 1.312809 + 1640 17.750204 790.00313 1585.8898 212.89842 -795.88666 698.581 834.90324 141.30234 0 -480.2032 513014.32 -515004.79 425.63098 27741.564 303.48802 1.2388328 + 1660 17.9655 747.54165 1583.9657 212.64013 -836.4241 681.84949 818.22116 144.32659 0 -480.9488 513005 -515004.87 393.07342 27741.508 303.09446 1.2953283 + 1680 18.160659 733.30069 1561.2237 209.58711 -827.92298 700.21145 825.04894 140.46392 0 -471.32136 512986.07 -515008.4 358.86819 27742.435 298.74386 1.2734665 + 1700 18.356133 711.44468 1578.4996 211.90632 -867.05487 695.93174 805.45219 136.97231 0 -472.62368 512976.67 -515009.46 536.5943 27744.152 302.06506 1.2553362 + 1720 18.560144 721.96636 1575.331 211.48095 -853.36463 702.17681 830.22534 135.88637 0 -477.83518 512966.99 -515010.81 -645.91282 27748.165 301.45254 1.2652763 + 1740 18.756074 711.63956 1586.0957 212.92606 -874.45612 689.4748 798.79974 136.08847 0 -473.58719 512984.43 -515009.66 -1624.8445 27748.356 303.52048 1.2551975 + 1760 18.958437 724.24881 1594.573 214.0641 -870.32418 693.92297 821.07919 134.86949 0 -499.044 512991.53 -515012.68 -67.704697 27743.489 305.14895 1.2473787 + 1780 19.161341 715.10685 1646.5039 221.03559 -931.39709 696.96446 758.9442 137.66678 0 -506.22154 512995.87 -515014.62 -40.253747 27743.38 315.10841 1.2414332 + 1800 19.355029 729.61134 1620.3158 217.51995 -890.70444 705.93766 795.61246 140.68696 0 -489.30347 512967.54 -515011.18 -766.11724 27742.605 310.0618 1.2972844 + 1820 19.55902 729.31305 1608.8589 215.98192 -879.54588 679.10327 811.20714 148.4305 0 -487.995 512981.33 -515011.62 -171.78807 27733.221 307.90957 1.1975335 + 1840 19.753109 755.00585 1604.0683 215.33881 -849.06248 704.5529 836.72831 145.47772 0 -486.71807 512964.36 -515013.46 214.63499 27724.953 306.97134 1.2429474 + 1860 19.967638 750.425 1611.9697 216.39953 -861.54467 681.08979 817.41958 140.85922 0 -481.23461 512994.18 -515013.86 458.39691 27723.378 308.4884 1.2369562 + 1880 20.162438 731.26375 1599.4322 214.71642 -868.16842 699.34308 809.01864 139.89206 0 -501.58244 512999.06 -515013.9 -1549.9632 27725.425 306.09592 1.211311 + 1900 20.356956 708.62541 1610.6874 216.22739 -902.06199 683.06943 810.51769 134.55613 0 -508.02851 512990.33 -515012.5 675.39868 27720.583 308.23181 1.2620963 + 1920 20.560648 703.81181 1586.8847 213.03199 -883.0729 690.93049 825.78591 131.84894 0 -498.42445 512977.68 -515010.9 367.15667 27713.888 303.69961 1.1917227 + 1940 20.754765 701.93422 1590.5107 213.51875 -888.57645 687.55932 818.62417 128.12087 0 -485.00453 512971.02 -515008.9 1457.2723 27711.175 304.3668 1.2586653 + 1960 20.966151 702.58467 1615.2174 216.83553 -912.63277 695.227 811.79161 131.25635 0 -468.08028 512925.61 -515008.44 812.93978 27708.617 309.10899 1.2402714 + 1980 21.169778 704.12312 1614.6957 216.76549 -910.5726 710.51045 811.95687 140.34792 0 -452.87904 512887.51 -515008.02 -604.37886 27705.003 309.00871 1.242271 + 2000 21.363046 700.52702 1604.4991 215.39664 -903.9721 726.08016 810.67383 139.90807 0 -443.00664 512870.59 -515008.22 148.09738 27699.21 307.02152 1.3180547 +Loop time of 21.3631 on 4 procs for 2000 steps with 3000 atoms + +Performance: 4.044 ns/day, 5.934 hours/ns, 93.619 timesteps/s +97.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 10.835 | 11.289 | 12.258 | 17.2 | 52.85 +Bond | 0.4537 | 0.48285 | 0.50792 | 3.1 | 2.26 +Kspace | 4.2572 | 5.2354 | 5.6853 | 25.4 | 24.51 +Neigh | 0.54701 | 0.5472 | 0.54747 | 0.0 | 2.56 +Comm | 0.60596 | 0.64067 | 0.67884 | 3.8 | 3.00 +Output | 0.0058618 | 0.0073152 | 0.011671 | 2.9 | 0.03 +Modify | 2.769 | 2.9549 | 3.1306 | 8.9 | 13.83 +Other | | 0.2055 | | | 0.96 + +Nlocal: 750 ave 757 max 742 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Nghost: 5838 ave 5894 max 5784 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 175398 ave 186533 max 165750 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 701594 +Ave neighs/atom = 233.865 +Ave special neighs/atom = 10.5 +Neighbor list builds = 53 +Dangerous builds = 0 +Total wall time: 0:00:21 diff --git a/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.1 b/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.1 new file mode 100644 index 0000000000..f6d4d7452e --- /dev/null +++ b/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.1 @@ -0,0 +1,286 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 +kspace_style pppm 1.0e-4 + +read_data data.ethanol + orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3000 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2750 bonds + reading angles ... + 3250 angles + reading dihedrals ... + 3000 dihedrals + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 11 = max # of special neighbors + + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH +pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H +pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH +pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH +pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO +pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH +pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO +pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO +pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 1 thole 2.051000 +pair_coeff 1 2 thole 1.580265 +pair_coeff 1 4 thole 1.416087 +pair_coeff 1 6 thole 2.051000 +pair_coeff 1 7 thole 1.580265 +pair_coeff 1 8 thole 1.416087 +pair_coeff 2 2 thole 1.217570 +pair_coeff 2 4 thole 1.091074 +pair_coeff 2 6 thole 1.580265 +pair_coeff 2 7 thole 1.217570 +pair_coeff 2 8 thole 1.091074 +pair_coeff 4 4 thole 0.977720 +pair_coeff 4 6 thole 1.416087 +pair_coeff 4 7 thole 1.091074 +pair_coeff 4 8 thole 0.977720 +pair_coeff 6 6 thole 2.051000 +pair_coeff 6 7 thole 1.580265 +pair_coeff 6 8 thole 1.416087 +pair_coeff 7 7 thole 1.217570 +pair_coeff 7 8 thole 1.091074 +pair_coeff 8 8 thole 0.977720 + +group gETHANOL molecule 1:250 +3000 atoms in group gETHANOL +group gATOMS type 1 2 3 4 5 +2250 atoms in group gATOMS +group gDRUDES type 6 7 8 +750 atoms in group gDRUDES + + +neighbor 2.0 bin + +variable vTEMP equal 300.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gATOMS create ${vTEMP} 12345 +velocity gATOMS create 300 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N C N D D D + +fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 + 250 = # of size 2 clusters + 250 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + +comm_modify vel yes +compute cTEMP_ATOM gATOMS temp +compute cTEMP all temp/drude + +fix fDTDIR all drude/transform/direct +fix fNPT gATOMS npt temp ${vTEMP} ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso 1 ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso 1 1 500 +fix_modify fNPT temp cTEMP_ATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1404) +fix fNVT gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 100.0 +fix fNVT gDRUDES nvt temp 1 ${vTEMP_D} 100.0 +fix fNVT gDRUDES nvt temp 1 1 100.0 +fix fDTINV all drude/transform/inverse + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 20 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.379738 + grid = 30 30 30 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0289979 + estimated relative force accuracy = 8.73262e-05 + using double precision FFTs + 3d grid and FFT values/proc = 50653 27000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 11 +New max number of 1-2 to 1-4 neighbors: 11 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 22.48 | 22.48 | 22.48 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170210.19 22094.109 381.62759 10.134301 + 20 0.82186079 11385.283 5995.2608 804.83624 5390.0219 2039.7455 2312.5467 131.6964 0 1710.3725 514098.33 -514902.67 75869.034 22408.215 975.27381 406.07545 + 40 1.7293625 9812.345 6009.1868 806.70574 3803.1582 1442.3552 1826.1503 275.19417 0 1288.22 513934.99 -514963.75 48672.13 22980.211 1057.0198 221.56388 + 60 2.5726278 8857.8006 5779.5918 775.88366 3078.2088 1190.8886 1938.5953 328.68401 0 619.17987 513971 -514970.14 39706.347 23441.277 1050.8999 133.14459 + 80 3.4535189 8115.6222 5997.8743 805.18709 2117.7479 901.83124 1587.5299 325.40736 0 288.22238 513957.46 -514942.7 37586.493 23835.221 1111.6406 89.055348 + 100 4.2757752 7496.057 5770.3042 774.63685 1725.7528 829.61731 1420.6409 325.39973 0 62.226626 514051.66 -514963.79 27290.384 24226.433 1080.2534 60.498681 + 120 5.1343639 6986.3331 5396.8054 724.49634 1589.5277 678.23213 1535.5139 325.88286 0 -9.8121501 514027.1 -514967.39 21714.378 24578.965 1016.2738 42.716174 + 140 5.9375162 6548.6966 5126.4765 688.20593 1422.2201 724.92776 1477.7366 315.11557 0 -99.615083 513960.65 -514956.6 19741.549 24878.09 969.48208 30.977308 + 160 6.7352271 6130.9708 5000.2242 671.25714 1130.7466 703.21482 1302.0806 314.9338 0 -258.62211 514042.38 -514973.24 23045.182 25144.056 948.68855 23.022183 + 180 7.5256455 5749.5567 4700.6896 631.046 1048.867 674.90328 1301.3631 310.04329 0 -326.92492 514044.37 -514954.88 14218.695 25401.78 893.70987 17.322259 + 200 8.3062081 5429.1755 4392.2849 589.64408 1036.8906 611.96666 1296.169 303.15486 0 -300.5535 514093.83 -514967.68 10827.179 25624.937 836.11247 13.764989 + 220 9.0794528 5133.41 4290.3608 575.96124 843.04924 572.47213 1261.7692 289.97557 0 -383.86544 514078.49 -514975.79 12503.3 25816.637 817.71346 11.104784 + 240 9.8436809 4849.9512 4119.9044 553.07825 730.04677 553.72774 1263.639 278.92306 0 -487.89901 514091.57 -514969.91 10886.302 25998.932 785.78404 9.3606461 + 260 10.605034 4583.5435 3910.7331 524.99797 672.81042 541.41982 1175.0582 273.43969 0 -475.41044 514139.92 -514981.62 8078.6171 26172.119 746.49788 7.4648407 + 280 11.362397 4348.81 3691.9428 495.62637 656.86725 598.7722 1148.0372 278.86509 0 -444.28194 514045.6 -514970.12 5115.8688 26326.635 704.97777 6.4789284 + 300 12.115575 4128.489 3579.1998 480.49114 549.2892 583.98038 1089.487 267.65383 0 -457.0616 514043.78 -514978.55 8341.4597 26460.833 683.88483 5.2652332 + 320 12.823282 3913.3823 3456.6176 464.03504 456.76476 556.22095 1103.3421 263.7791 0 -485.68641 514000.55 -514981.44 9109.6369 26597.284 660.68384 4.5691163 + 340 13.570274 3712.2734 3258.0793 437.38219 454.19409 533.60879 1068.9434 271.82635 0 -454.64507 514002.17 -514967.71 7179.0605 26741.746 622.91874 3.8804069 + 360 14.315206 3532.9579 3023.6802 405.91518 509.27768 522.48836 1104.2686 276.28278 0 -456.22486 514036.79 -514974.33 4545.215 26882.126 578.23151 3.3025371 + 380 15.055002 3366.746 2970.7631 398.8113 395.98299 508.12217 1059.1562 257.91185 0 -499.79406 514032.85 -514962.26 5636.5329 27008.105 568.28965 2.830075 + 400 15.75335 3204.5091 2873.415 385.74277 331.09416 543.77882 1018.7946 231.10838 0 -519.43553 514029.65 -514972.81 7243.9791 27130.53 549.73386 2.5825543 + 420 16.480976 3050.3022 2775.7673 372.63402 274.53487 517.37336 953.14854 225.86836 0 -505.67105 514057.58 -514973.77 4018.2502 27257.578 531.12039 2.3356262 + 440 17.20372 2915.9612 2639.1922 354.29944 276.76899 507.07374 983.90795 236.07195 0 -534.71742 514060.31 -514975.87 1699.7076 27372.134 505.04906 2.0779128 + 460 17.925103 2787.2795 2609.7668 350.34921 177.51264 485.49348 933.6558 234.43516 0 -560.63202 514070.07 -514985.51 3390.2752 27466.686 499.52337 1.8090485 + 480 18.647898 2662.2222 2514.1136 337.50821 148.10854 464.53566 928.19247 239.15967 0 -570.39028 514071.12 -514984.5 5075.4159 27556.806 481.25552 1.6478036 + 500 19.332267 2540.2584 2432.8576 326.59997 107.40071 473.20947 888.84623 239.12328 0 -565.53809 514057.83 -514986.07 3129.6192 27653.186 465.74774 1.486379 + 520 20.047809 2431.9884 2374.7243 318.79583 57.264134 460.05267 838.76564 228.73042 0 -579.0486 514094.39 -514985.63 462.28535 27743.092 454.64978 1.3782218 + 540 20.762916 2328.6134 2274.6313 305.35881 53.982075 473.12149 875.45698 220.60795 0 -604.15461 514076.11 -514987.16 2622.3468 27815.745 435.47546 1.3461692 + 560 21.477821 2228.4408 2278.1084 305.82559 -49.667558 455.45537 820.96545 214.46954 0 -604.66916 514053.07 -514988.96 3774.7454 27887.17 436.23203 1.136117 + 580 22.156966 2134.2145 2127.7975 285.64705 6.4169804 480.53632 836.99951 218.25579 0 -563.43994 514020.11 -514986.04 1347.9073 27963.805 407.4267 1.1136558 + 600 22.868461 2048.3341 2102.8549 282.29862 -54.520854 486.1799 795.85772 224.19443 0 -574.58492 514004 -514990.16 -100.5692 28031.415 402.6784 1.0360651 + 620 23.582384 1967.2649 2050.2745 275.23994 -83.009549 477.31366 785.52916 222.26776 0 -570.5843 513998.54 -514996.08 1809.6235 28084.448 392.60381 1.0239108 + 640 24.25969 1887.8882 1984.0464 266.34912 -96.158235 482.78351 800.40092 220.19212 0 -557.48535 513952.64 -514994.69 3804.7495 28138.319 379.94961 0.92618662 + 660 24.968904 1812.5853 1960.7266 263.21855 -148.1413 497.47994 750.65798 215.15703 0 -556.35598 513938.64 -514993.72 1173.0953 28202.964 375.50038 0.8766551 + 680 25.642951 1744.2287 1912.3074 256.71848 -168.07864 497.12304 725.28297 210.74936 0 -554.7656 513943.75 -514990.22 81.489372 28262.329 366.24876 0.80553628 + 700 26.349596 1677.5524 1912.8593 256.79258 -235.30692 490.36723 720.72019 204.81758 0 -570.32399 513908.13 -514989.01 2139.1872 28311.757 366.38002 0.74614938 + 720 27.054473 1611.7133 1859.3776 249.61291 -247.66437 499.44111 727.86981 195.52975 0 -552.65485 513871.24 -514989.09 3009.9637 28365.384 356.12743 0.74621105 + 740 27.725048 1549.685 1790.3493 240.34617 -240.66425 496.25123 737.75419 180.00468 0 -548.11159 513879.93 -514986.49 718.56841 28427.109 342.91326 0.7024951 + 760 28.446277 1492.9982 1801.2374 241.80786 -308.23923 502.49459 708.38808 172.24218 0 -560.93888 513860.87 -514991.3 -859.12137 28481.474 345.01555 0.6674887 + 780 29.148375 1436.9239 1823.9643 244.85884 -387.0404 509.26814 663.93976 171.61087 0 -556.48284 513815.66 -514991.04 1168.7449 28521.446 349.36331 0.6885803 + 800 29.818515 1382.5968 1737.4206 233.24074 -354.82378 513.00178 695.57772 172.42262 0 -552.28591 513804.68 -514988.22 1805.011 28561.249 332.78321 0.66397175 + 820 30.524059 1332.0207 1689.2759 226.77754 -357.25521 509.51717 686.84564 172.57648 0 -548.44359 513812.21 -514989.96 -66.311617 28604.787 323.58511 0.59083949 + 840 31.201142 1285.6252 1683.5729 226.01193 -397.94769 507.59079 662.90068 169.36995 0 -553.69874 513804.36 -514988.47 -621.19538 28640.472 322.48932 0.59667555 + 860 31.914963 1240.0349 1703.7814 228.72483 -463.74645 497.11887 658.78716 169.54588 0 -569.52851 513767.79 -514987.46 792.58789 28666.426 326.36247 0.59868606 + 880 32.585058 1195.4713 1670.1212 224.2061 -474.64983 499.64545 651.51445 170.02281 0 -554.71997 513740.96 -514982.07 1233.1339 28693.075 319.91881 0.57749338 + 900 33.283366 1153.5526 1643.4626 220.62731 -489.90999 500.29806 640.14014 177.39649 0 -558.06916 513735.19 -514984.87 -525.66059 28722.393 314.81615 0.5591618 + 920 33.951266 1114.6093 1618.9458 217.33604 -504.3365 511.75888 633.60684 175.10475 0 -554.17306 513720.73 -514991.36 -1519.3862 28743.137 310.10475 0.58591773 + 940 34.650169 1076.5361 1629.6248 218.76965 -553.08868 510.90659 619.76241 167.78799 0 -557.43468 513695.73 -514989.85 296.76427 28751.218 312.16525 0.55489087 + 960 35.315701 1040.3478 1609.1044 216.01487 -568.7566 511.15544 602.92746 166.01646 0 -548.67061 513692.97 -514993.15 742.32048 28759.401 308.22081 0.57967815 + 980 36.013822 1006.0783 1560.5473 209.49631 -554.46902 516.03243 629.22012 171.82488 0 -544.97376 513663.64 -514990.21 -1243.6962 28769.845 298.9291 0.54046046 + 1000 36.709116 974.24875 1558.0215 209.15723 -583.77273 506.6472 601.9316 165.11551 0 -553.06573 513688.1 -514992.5 -1282.1536 28770.759 298.43904 0.55412832 + 1020 37.34906 943.47684 1567.4776 210.42667 -624.00074 507.7679 618.07297 152.13649 0 -569.64661 513661.22 -514993.55 -186.03132 28762.516 300.24615 0.56731507 + 1040 38.021245 913.48747 1599.9646 214.7879 -686.47709 487.43669 574.25818 153.42118 0 -593.34764 513684.82 -514993.06 479.26449 28754.262 306.47982 0.55368609 + 1060 38.667195 884.53789 1558.1773 209.17815 -673.63945 500.21603 593.70139 157.67768 0 -604.58442 513672.34 -514992.99 -2207.1953 28748.02 298.45285 0.59162362 + 1080 39.342256 857.28828 1538.9142 206.59217 -681.62596 503.64978 574.76485 165.14388 0 -584.10927 513643.02 -514984.09 -1836.7583 28728.357 294.75731 0.59805527 + 1100 39.987321 832.19678 1479.2179 198.57822 -647.02114 514.08633 608.91942 165.26491 0 -569.63464 513616.87 -514982.52 -27.127273 28698.734 283.30588 0.61555857 + 1120 40.665662 809.16107 1516.8748 203.63348 -707.71373 513.27211 567.99212 169.86948 0 -560.7949 513584.25 -514982.3 -372.41735 28671.493 290.52752 0.60920143 + 1140 41.313559 787.50744 1484.3806 199.27128 -696.87314 526.25364 582.78208 167.73401 0 -550.7679 513559.52 -514982.4 -1728.2274 28644.545 284.28679 0.6360583 + 1160 41.993408 767.41852 1497.6302 201.04998 -730.21173 515.9345 580.51745 159.02047 0 -534.99467 513529.39 -514980.08 -1872.4418 28608.964 286.81617 0.66081293 + 1180 42.642904 750.18943 1492.2376 200.32605 -742.04816 532.34349 570.6807 154.35233 0 -512.26701 513492.93 -514980.09 926.11765 28566.848 285.74878 0.73922998 + 1200 43.293101 735.32682 1504.5521 201.97921 -769.22524 536.2319 594.47464 155.80234 0 -515.01641 513442.47 -514983.19 33.948973 28534.509 288.11106 0.73558261 + 1220 43.977824 720.73905 1495.8029 200.80467 -775.06381 558.11107 561.07651 159.20703 0 -503.03817 513434.59 -514985.01 -986.07615 28506.699 286.43244 0.73880049 + 1240 44.630923 707.60909 1486.697 199.58224 -779.08789 564.73341 574.9815 160.19665 0 -467.65622 513371.76 -514983.1 39.386144 28476.751 284.65743 0.8073656 + 1260 45.316338 696.90935 1495.2634 200.73224 -798.35401 576.91144 565.71232 154.53813 0 -455.98096 513344.03 -514983.57 859.74504 28450.875 286.27774 0.85844048 + 1280 45.972141 687.90416 1485.152 199.37484 -797.24786 581.1043 593.28449 150.90626 0 -447.852 513310.83 -514985.52 746.2051 28434.182 284.33627 0.86567683 + 1300 46.659596 680.05111 1479.108 198.56346 -799.05687 585.50039 589.75255 148.14575 0 -422.7668 513283.23 -514982.92 -524.66474 28424.119 283.14576 0.93998516 + 1320 47.315349 673.52979 1476.4577 198.20767 -802.9279 572.81659 595.26192 147.37054 0 -424.83034 513287.53 -514981.08 106.77633 28412.923 282.64612 0.92033657 + 1340 48.004338 668.69073 1484.7214 199.31704 -816.03069 582.3039 588.40727 153.74406 0 -434.27973 513271.16 -514977.36 731.28971 28403.842 284.19266 1.0081579 + 1360 48.666622 665.51033 1519.3878 203.97084 -853.87752 575.99453 554.12668 159.19953 0 -458.43153 513293.36 -514978.13 422.98973 28400.634 290.81807 1.0553453 + 1380 49.357293 663.82821 1467.8065 197.04629 -803.97832 578.21925 592.65789 156.17923 0 -458.90398 513308.34 -514980.47 -203.04754 28400.637 280.90634 1.1101023 + 1400 50.048356 663.49309 1516.9007 203.63695 -853.40759 571.04838 580.61589 146.23345 0 -462.76173 513293.95 -514982.5 -448.98731 28399.279 290.29749 1.1575012 + 1420 50.708454 664.15896 1499.9167 201.35693 -835.75773 566.58488 603.52748 148.50712 0 -471.56553 513299.67 -514982.48 260.66933 28395.449 287.02615 1.1936028 + 1440 51.401936 665.7749 1505.3913 202.09187 -839.61636 568.31696 588.02115 157.51085 0 -462.77296 513294.54 -514985.23 686.32226 28393.937 288.0844 1.1731726 + 1460 52.062043 668.60203 1501.3101 201.54398 -832.70805 581.33476 579.96642 157.99886 0 -456.96282 513291.57 -514986.61 -271.294 28396.763 287.25414 1.2848928 + 1480 52.756437 672.78069 1509.7227 202.67334 -836.94203 577.59283 567.71153 162.7344 0 -467.11093 513309.03 -514986.9 -936.72661 28397.351 288.85976 1.3014708 + 1500 53.420877 678.15981 1516.2442 203.54882 -838.08436 568.973 592.07243 169.01021 0 -495.80017 513315.7 -514988.04 88.20689 28392.187 290.08472 1.3603151 + 1520 54.114697 684.70508 1526.4386 204.91738 -841.73356 557.42832 581.42465 168.54996 0 -496.59211 513336.95 -514989.5 515.33669 28387.812 292.03285 1.3747328 + 1540 54.776816 692.26725 1535.4798 206.13111 -843.21253 551.89278 584.81969 156.31938 0 -472.91843 513327.8 -514991.12 -260.08916 28386.831 293.74312 1.4282442 + 1560 55.471466 700.38373 1542.1981 207.03301 -841.81433 551.6024 611.83194 152.66068 0 -499.25336 513334.3 -514992.96 -881.89875 28383.701 295.04052 1.4061086 + 1580 56.134557 708.58784 1550.4384 208.13924 -841.85055 556.69767 582.39421 162.30767 0 -515.06887 513365.13 -514993.31 317.46976 28375.679 296.61441 1.4196493 + 1600 56.831572 717.16972 1560.1894 209.44826 -843.01966 549.14904 592.56757 172.02873 0 -494.96769 513331.32 -514993.12 268.64262 28369.888 298.46813 1.4559812 + 1620 57.496371 726.01824 1544.6646 207.36413 -818.64636 564.25447 620.2534 171.6366 0 -481.33955 513299.03 -514992.48 -928.98251 28365.608 295.50693 1.4211187 + 1640 58.192956 734.97748 1599.5833 214.73672 -864.60585 559.51067 584.21101 166.15126 0 -484.99381 513300.49 -514989.98 -395.19323 28356.094 306.02332 1.448322 + 1660 58.859821 743.85098 1568.6598 210.58537 -824.80879 567.20594 620.40617 159.81333 0 -485.47565 513302.38 -514989.14 275.6277 28344.463 300.08676 1.4680092 + 1680 59.556888 752.397 1614.4574 216.7335 -862.06044 567.74587 617.24576 156.34105 0 -474.64789 513259.55 -514988.29 153.36452 28335.561 308.89368 1.4040884 + 1700 60.222487 760.11363 1574.8766 211.41996 -814.76301 589.13636 635.26767 165.24375 0 -441.39255 513225.54 -514988.56 -449.5961 28328.169 301.30175 1.4138952 + 1720 60.92238 767.32908 1633.2653 219.25837 -865.93623 593.92768 614.12149 168.83762 0 -435.93625 513180.07 -514986.96 625.88498 28319.407 312.50976 1.3794422 + 1740 61.588997 773.58335 1604.1264 215.34661 -830.5431 611.54553 634.6288 170.13873 0 -425.1955 513161.11 -514982.77 1258.1591 28315.688 306.93109 1.3623528 + 1760 62.288118 778.46232 1604.1065 215.34394 -825.64421 601.28947 635.92844 169.10255 0 -409.79824 513164.39 -514986.55 923.97553 28321.077 306.93241 1.3503708 + 1780 62.95488 782.68573 1585.9867 212.91143 -803.30098 634.82805 637.66853 173.52039 0 -396.05083 513134.96 -514988.23 308.41322 28332.765 303.45213 1.3659282 + 1800 63.656662 786.45168 1632.4834 219.1534 -846.0317 626.46808 612.859 170.73849 0 -389.28328 513124.73 -514991.55 434.99541 28346.181 312.38153 1.3288883 + 1820 64.322505 789.07103 1622.34 217.7917 -833.26902 631.84388 628.97419 164.08777 0 -403.37081 513135.19 -514989.99 1423.3137 28362.768 310.45751 1.2810964 + 1840 65.020631 790.43307 1598.2845 214.56235 -807.85142 593.52496 652.49021 167.51591 0 -408.69698 513177.63 -514990.32 862.95994 28387.747 305.87197 1.2204936 + 1860 65.687176 791.36821 1585.9825 212.91087 -794.61429 619.37616 661.00216 170.47785 0 -410.28902 513156.18 -514991.36 -22.140042 28417.059 303.51149 1.2255437 + 1880 66.353485 791.94788 1630.1749 218.8435 -838.22706 591.52981 652.79092 178.67552 0 -433.7293 513160.08 -514987.57 -35.653011 28444.349 312.01504 1.151451 + 1900 67.051143 791.5025 1611.2186 216.2987 -819.71613 604.66631 614.52658 185.27138 0 -426.58089 513192.07 -514989.67 1492.9051 28470.603 308.39205 1.1258287 + 1920 67.749766 789.33745 1638.8687 220.0106 -849.53124 604.75057 634.21383 186.54046 0 -427.33715 513139.73 -514987.43 863.10157 28504.605 313.697 1.1156351 + 1940 68.417711 786.91982 1566.7995 210.33564 -779.87972 606.00187 648.68271 182.72186 0 -430.75201 513205.37 -514991.9 -1132.9713 28541.397 299.9167 1.0327394 + 1960 69.114583 784.25672 1592.2094 213.7468 -807.95267 595.81907 669.03472 172.75782 0 -436.10776 513181.4 -514990.86 78.431195 28569.12 304.79729 1.0106551 + 1980 69.778898 780.04995 1637.1409 219.77865 -857.09092 606.44426 629.01991 163.80784 0 -440.75819 513180.63 -514996.23 1330.6593 28595.247 313.42473 0.97808647 + 2000 70.476083 774.653 1633.3807 219.27386 -858.72771 607.3352 611.62149 162.37854 0 -449.5387 513203.88 -514994.4 -192.50999 28627.445 312.71969 0.94122657 +Loop time of 70.4761 on 1 procs for 2000 steps with 3000 atoms + +Performance: 1.226 ns/day, 19.577 hours/ns, 28.378 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 43.881 | 43.881 | 43.881 | 0.0 | 62.26 +Bond | 1.8093 | 1.8093 | 1.8093 | 0.0 | 2.57 +Kspace | 10.585 | 10.585 | 10.585 | 0.0 | 15.02 +Neigh | 2.3196 | 2.3196 | 2.3196 | 0.0 | 3.29 +Comm | 0.38965 | 0.38965 | 0.38965 | 0.0 | 0.55 +Output | 0.0086887 | 0.0086887 | 0.0086887 | 0.0 | 0.01 +Modify | 11.438 | 11.438 | 11.438 | 0.0 | 16.23 +Other | | 0.04561 | | | 0.06 + +Nlocal: 3000 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10476 ave 10476 max 10476 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 658684 ave 658684 max 658684 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 658684 +Ave neighs/atom = 219.561 +Ave special neighs/atom = 10.5 +Neighbor list builds = 65 +Dangerous builds = 0 +Total wall time: 0:01:10 diff --git a/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.4 b/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.4 new file mode 100644 index 0000000000..593ed8c982 --- /dev/null +++ b/examples/USER/drude/ethanol/log.27Nov18.ethanol.nh.g++.4 @@ -0,0 +1,286 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 +kspace_style pppm 1.0e-4 + +read_data data.ethanol + orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + scanning bonds ... + 5 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2750 bonds + reading angles ... + 3250 angles + reading dihedrals ... + 3000 dihedrals + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 11 = max # of special neighbors + + +pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H +pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO +pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H +pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH +pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO +pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO +pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H +pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH +pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO +pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H +pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH +pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO +pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH +pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO +pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO +pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes +pair_coeff 1 1 thole 2.051000 +pair_coeff 1 2 thole 1.580265 +pair_coeff 1 4 thole 1.416087 +pair_coeff 1 6 thole 2.051000 +pair_coeff 1 7 thole 1.580265 +pair_coeff 1 8 thole 1.416087 +pair_coeff 2 2 thole 1.217570 +pair_coeff 2 4 thole 1.091074 +pair_coeff 2 6 thole 1.580265 +pair_coeff 2 7 thole 1.217570 +pair_coeff 2 8 thole 1.091074 +pair_coeff 4 4 thole 0.977720 +pair_coeff 4 6 thole 1.416087 +pair_coeff 4 7 thole 1.091074 +pair_coeff 4 8 thole 0.977720 +pair_coeff 6 6 thole 2.051000 +pair_coeff 6 7 thole 1.580265 +pair_coeff 6 8 thole 1.416087 +pair_coeff 7 7 thole 1.217570 +pair_coeff 7 8 thole 1.091074 +pair_coeff 8 8 thole 0.977720 + +group gETHANOL molecule 1:250 +3000 atoms in group gETHANOL +group gATOMS type 1 2 3 4 5 +2250 atoms in group gATOMS +group gDRUDES type 6 7 8 +750 atoms in group gDRUDES + + +neighbor 2.0 bin + +variable vTEMP equal 300.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gATOMS create ${vTEMP} 12345 +velocity gATOMS create 300 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C N C N D D D + +fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 + 250 = # of size 2 clusters + 250 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + +comm_modify vel yes +compute cTEMP_ATOM gATOMS temp +compute cTEMP all temp/drude + +fix fDTDIR all drude/transform/direct +fix fNPT gATOMS npt temp ${vTEMP} ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso ${vPRESS} ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso 1 ${vPRESS} 500 +fix fNPT gATOMS npt temp 300 300 100 iso 1 1 500 +fix_modify fNPT temp cTEMP_ATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1404) +fix fNVT gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 100.0 +fix fNVT gDRUDES nvt temp 1 ${vTEMP_D} 100.0 +fix fNVT gDRUDES nvt temp 1 1 100.0 +fix fDTINV all drude/transform/inverse + +thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 20 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.379738 + grid = 30 30 30 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0289979 + estimated relative force accuracy = 8.73262e-05 + using double precision FFTs + 3d grid and FFT values/proc = 17908 7200 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 11 +New max number of 1-2 to 1-4 neighbors: 11 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 15.7 | 15.72 | 15.75 Mbytes +Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170210.19 22094.109 381.62759 10.134301 + 20 0.26940155 11385.283 5995.2608 804.83624 5390.0219 2039.7455 2312.5467 131.6964 0 1710.3725 514098.33 -514902.67 75869.034 22408.215 975.27381 406.07545 + 40 0.56039548 9812.345 6009.1868 806.70574 3803.1582 1442.3552 1826.1503 275.19417 0 1288.22 513934.99 -514963.75 48672.13 22980.211 1057.0198 221.56388 + 60 0.88414049 8857.8007 5779.5918 775.88366 3078.2089 1190.8886 1938.5954 328.68401 0 619.17987 513971 -514970.14 39706.347 23441.277 1050.8999 133.14459 + 80 1.1696272 8115.6221 5997.8743 805.18709 2117.7478 901.83126 1587.5299 325.40736 0 288.22238 513957.46 -514942.7 37586.493 23835.221 1111.6406 89.055345 + 100 1.4401748 7496.0571 5770.3042 774.63685 1725.7529 829.6173 1420.6409 325.39973 0 62.226624 514051.66 -514963.79 27290.384 24226.433 1080.2534 60.498679 + 120 1.7223158 6986.3333 5396.8053 724.49634 1589.528 678.23214 1535.5139 325.88286 0 -9.8121501 514027.1 -514967.39 21714.378 24578.965 1016.2738 42.716172 + 140 1.9845128 6548.697 5126.4765 688.20593 1422.2205 724.92774 1477.7367 315.11557 0 -99.615085 513960.65 -514956.6 19741.55 24878.09 969.48208 30.977306 + 160 2.2419188 6130.9704 5000.2242 671.25714 1130.7463 703.21482 1302.0806 314.9338 0 -258.62211 514042.38 -514973.24 23045.181 25144.056 948.68855 23.022185 + 180 2.4937162 5749.5572 4700.6896 631.046 1048.8675 674.90328 1301.3631 310.04329 0 -326.92492 514044.37 -514954.88 14218.696 25401.78 893.70987 17.322259 + 200 2.7779307 5429.1755 4392.2849 589.64408 1036.8906 611.96667 1296.169 303.15487 0 -300.55349 514093.83 -514967.68 10827.18 25624.937 836.11247 13.764988 + 220 3.0248075 5133.4101 4290.3608 575.96124 843.04929 572.47215 1261.7692 289.97559 0 -383.86544 514078.49 -514975.79 12503.299 25816.637 817.71346 11.104783 + 240 3.2623236 4849.9512 4119.9045 553.07826 730.04673 553.72776 1263.639 278.92307 0 -487.89902 514091.57 -514969.91 10886.301 25998.932 785.78405 9.3606436 + 260 3.4997547 4583.5434 3910.7331 524.99797 672.81028 541.41985 1175.0582 273.43967 0 -475.41047 514139.92 -514981.62 8078.6153 26172.119 746.49788 7.4648392 + 280 3.7359712 4348.8096 3691.9428 495.62637 656.86681 598.77221 1148.0372 278.86509 0 -444.28193 514045.6 -514970.12 5115.867 26326.635 704.97778 6.478926 + 300 3.9722769 4128.4892 3579.1998 480.49114 549.28936 583.98039 1089.487 267.65383 0 -457.0616 514043.78 -514978.55 8341.4601 26460.833 683.88483 5.2652305 + 320 4.1924908 3913.3825 3456.6177 464.03505 456.76481 556.22097 1103.342 263.77912 0 -485.6864 514000.55 -514981.44 9109.6369 26597.284 660.68387 4.569117 + 340 4.4220572 3712.2735 3258.0794 437.3822 454.19406 533.60886 1068.9435 271.82625 0 -454.64506 514002.17 -514967.71 7179.0608 26741.746 622.91875 3.8804079 + 360 4.651022 3532.9576 3023.6802 405.91518 509.27748 522.48821 1104.2686 276.28277 0 -456.22485 514036.79 -514974.33 4545.2157 26882.126 578.2315 3.3025369 + 380 4.8867376 3366.7464 2970.763 398.8113 395.98341 508.12225 1059.1562 257.91185 0 -499.7941 514032.85 -514962.26 5636.5327 27008.105 568.28964 2.8300765 + 400 5.1070464 3204.509 2873.4151 385.74278 331.09386 543.77873 1018.7946 231.10847 0 -519.43554 514029.65 -514972.81 7243.9777 27130.53 549.73389 2.582555 + 420 5.3353672 3050.3029 2775.7676 372.63405 274.53536 517.37318 953.14843 225.86866 0 -505.67104 514057.59 -514973.77 4018.2518 27257.578 531.12044 2.3356247 + 440 5.5616498 2915.9614 2639.1925 354.29947 276.76893 507.07348 983.90798 236.07196 0 -534.7174 514060.31 -514975.87 1699.7058 27372.134 505.04911 2.0779123 + 460 5.7944629 2787.2801 2609.7652 350.34899 177.51494 485.49336 933.65567 234.4359 0 -560.632 514070.07 -514985.51 3390.2812 27466.685 499.52306 1.8090438 + 480 6.0186839 2662.2225 2514.1129 337.50812 148.10954 464.53577 928.19233 239.15956 0 -570.39024 514071.12 -514984.5 5075.4176 27556.806 481.25539 1.6478044 + 500 6.2357466 2540.259 2432.8587 326.60011 107.40032 473.20958 888.84591 239.12382 0 -565.53821 514057.83 -514986.07 3129.6111 27653.186 465.74794 1.4863829 + 520 6.462676 2431.9888 2374.7256 318.79601 57.263157 460.05319 838.76524 228.73041 0 -579.04849 514094.39 -514985.63 462.28097 27743.092 454.65004 1.3782188 + 540 6.6893921 2328.6141 2274.6316 305.35885 53.982526 473.12143 875.45686 220.60764 0 -604.15443 514076.11 -514987.16 2622.3509 27815.745 435.4755 1.3461673 + 560 6.915879 2228.4408 2278.108 305.82554 -49.667226 455.45527 820.9654 214.46985 0 -604.66926 514053.07 -514988.96 3774.7446 27887.17 436.23196 1.1361161 + 580 7.129838 2134.2136 2127.7972 285.64701 6.4164029 480.53569 836.9992 218.2561 0 -563.43996 514020.11 -514986.04 1347.8991 27963.805 407.42665 1.1136548 + 600 7.3513916 2048.334 2102.8555 282.2987 -54.521528 486.17968 795.85755 224.19382 0 -574.58522 514004 -514990.17 -100.56264 28031.415 402.67851 1.0360672 + 620 7.571908 1967.2653 2050.2743 275.23991 -83.008964 477.31341 785.52964 222.26773 0 -570.58461 513998.54 -514996.08 1809.6139 28084.448 392.60377 1.023916 + 640 7.822695 1887.8873 1984.0468 266.34918 -96.159502 482.78324 800.4011 220.19183 0 -557.48586 513952.64 -514994.69 3804.7387 28138.319 379.94969 0.92618308 + 660 8.0473323 1812.5849 1960.7275 263.21866 -148.14251 497.48053 750.6579 215.15723 0 -556.35642 513938.64 -514993.72 1173.0782 28202.964 375.50053 0.87666213 + 680 8.2574785 1744.229 1912.3049 256.71816 -168.07594 497.12359 725.28373 210.75068 0 -554.76517 513943.75 -514990.22 81.483029 28262.329 366.2483 0.80553356 + 700 8.4756997 1677.5494 1912.8562 256.79217 -235.30682 490.36725 720.72028 204.81842 0 -570.32326 513908.12 -514989.01 2139.1574 28311.757 366.37944 0.74614771 + 720 8.6941352 1611.7137 1859.3792 249.61312 -247.66551 499.4419 727.86911 195.529 0 -552.65432 513871.24 -514989.09 3009.9813 28365.384 356.12774 0.74621707 + 740 8.9091365 1549.6852 1790.3521 240.34656 -240.66693 496.25202 737.75393 180.00372 0 -548.11093 513879.92 -514986.49 718.57423 28427.108 342.91382 0.70248974 + 760 9.1269078 1492.9984 1801.2402 241.80823 -308.24181 502.49565 708.38773 172.24112 0 -560.93884 513860.87 -514991.3 -859.1512 28481.473 345.01608 0.66749339 + 780 9.3445795 1436.924 1823.9645 244.85885 -387.04046 509.26901 663.94064 171.61073 0 -556.48262 513815.66 -514991.04 1168.7425 28521.446 349.36333 0.68859382 + 800 9.5536196 1382.5971 1737.4248 233.2413 -354.82766 513.0037 695.57852 172.42075 0 -552.28635 513804.68 -514988.22 1805.0199 28561.249 332.78401 0.66398258 + 820 9.778646 1332.0198 1689.275 226.77742 -357.25518 509.51804 686.84757 172.57573 0 -548.44337 513812.21 -514989.96 -66.330382 28604.787 323.58493 0.59085762 + 840 9.9888568 1285.6245 1683.5728 226.01192 -397.9483 507.59294 662.89974 169.37203 0 -553.69839 513804.35 -514988.47 -621.21477 28640.472 322.48931 0.59668678 + 860 10.20852 1240.0357 1703.7808 228.72476 -463.74517 497.12172 658.78743 169.54895 0 -569.53018 513767.79 -514987.46 792.62408 28666.425 326.36236 0.5987066 + 880 10.41846 1195.4711 1670.1197 224.2059 -474.64858 499.64663 651.5165 170.02534 0 -554.71869 513740.96 -514982.08 1233.144 28693.074 319.91853 0.57749627 + 900 10.636871 1153.5523 1643.4571 220.62657 -489.90477 500.29822 640.14056 177.40242 0 -558.06881 513735.19 -514984.87 -525.65607 28722.392 314.8151 0.5591483 + 920 10.892932 1114.609 1618.9439 217.33579 -504.33488 511.75888 633.60856 175.1138 0 -554.17472 513720.72 -514991.36 -1519.4599 28743.136 310.10438 0.58594249 + 940 11.111583 1076.5388 1629.6394 218.77161 -553.10061 510.90787 619.76339 167.7895 0 -557.43647 513695.72 -514989.85 296.67789 28751.217 312.16803 0.5549268 + 960 11.321271 1040.3467 1609.1144 216.01622 -568.76774 511.14781 602.93181 166.00661 0 -548.6701 513692.97 -514993.16 742.31157 28759.398 308.22272 0.57970476 + 980 11.542122 1006.0767 1560.5644 209.4986 -554.48764 516.02585 629.21936 171.81429 0 -544.97384 513663.64 -514990.21 -1243.6779 28769.841 298.93237 0.54048524 + 1000 11.766886 974.24702 1558.0041 209.15489 -583.75705 506.64122 601.93463 165.12035 0 -553.064 513688.11 -514992.5 -1282.0718 28770.754 298.4357 0.55413455 + 1020 11.970261 943.47512 1567.4558 210.42375 -623.98071 507.76272 618.07613 152.14193 0 -569.64333 513661.22 -514993.54 -185.99703 28762.511 300.24196 0.56735077 + 1040 12.182541 913.49183 1599.9518 214.78618 -686.45996 487.4406 574.26298 153.41685 0 -593.34617 513684.82 -514993.05 479.3652 28754.257 306.47736 0.55370848 + 1060 12.385323 884.5384 1558.1791 209.17839 -673.64068 500.22922 593.70741 157.65505 0 -604.58403 513672.33 -514992.98 -2207.1147 28748.016 298.45318 0.59162923 + 1080 12.597323 857.28841 1538.9194 206.59286 -681.63097 503.67593 574.77226 165.12151 0 -584.10752 513643 -514984.09 -1836.8716 28728.353 294.7583 0.59804385 + 1100 12.806903 832.2002 1479.2217 198.57873 -647.02154 514.11416 608.92484 165.24735 0 -569.63674 513616.86 -514982.53 -27.131764 28698.73 283.30662 0.61552981 + 1120 13.021407 809.16206 1516.8721 203.63312 -707.71008 513.30089 567.99641 169.86685 0 -560.80062 513584.24 -514982.32 -372.41029 28671.488 290.52701 0.60920306 + 1140 13.226424 787.50897 1484.3443 199.26641 -696.83535 526.29673 582.76992 167.79235 0 -550.76364 513559.47 -514982.41 -1728.2731 28644.54 284.27985 0.6360204 + 1160 13.439471 767.42267 1497.5383 201.03765 -730.11567 515.96405 580.5165 159.12444 0 -534.97892 513529.33 -514980.08 -1872.3497 28608.958 286.79856 0.66079274 + 1180 13.643181 750.19166 1492.1028 200.30795 -741.9111 532.36765 570.69633 154.43336 0 -512.25199 513492.9 -514980.06 926.80786 28566.842 285.72289 0.73932156 + 1200 13.878355 735.34196 1504.4584 201.96663 -769.11641 536.29872 594.4765 155.773 0 -514.98695 513442.46 -514983.13 34.590808 28534.508 288.09313 0.73549598 + 1220 14.095265 720.75191 1495.8784 200.81481 -775.12649 558.18322 561.11868 159.16072 0 -503.00794 513434.4 -514984.98 -986.83251 28506.707 286.44694 0.73874965 + 1240 14.302587 707.62702 1486.8261 199.59958 -779.19911 564.76327 574.98748 160.18253 0 -467.67421 513371.66 -514983.12 38.339148 28476.761 284.68236 0.80695809 + 1260 14.5169 696.93229 1495.1997 200.7237 -798.26742 576.84276 565.66929 154.59183 0 -456.04034 513344.28 -514983.61 859.97875 28450.881 286.26551 0.85851389 + 1280 14.723275 687.92791 1485.1331 199.3723 -797.20519 581.04737 593.2454 150.87332 0 -447.80111 513310.98 -514985.55 747.71864 28434.188 284.33268 0.86557314 + 1300 14.940926 680.08292 1479.193 198.57487 -799.11011 585.53803 589.87487 148.01029 0 -422.72639 513283.11 -514982.92 -525.51472 28424.13 283.16208 0.93995449 + 1320 15.146466 673.56377 1476.0598 198.15425 -802.496 572.76673 595.29767 147.53133 0 -424.76316 513287.72 -514981.04 109.20091 28412.937 282.56994 0.92008603 + 1340 15.360807 668.74056 1484.8781 199.33807 -816.13759 582.36447 588.33732 153.88508 0 -434.18175 513270.79 -514977.34 733.42094 28403.872 284.22277 1.0080038 + 1360 15.565801 665.56738 1519.4405 203.97791 -853.8731 575.96075 554.2097 159.14168 0 -458.4083 513293.33 -514978.1 423.26533 28400.693 290.82823 1.0551985 + 1380 15.785992 663.88904 1467.7833 197.04317 -803.89424 578.34934 592.76078 156.17583 0 -458.96296 513308.25 -514980.47 -202.88792 28400.724 280.90163 1.1107077 + 1400 16.000381 663.53838 1516.5314 203.58738 -852.99304 571.11885 580.68736 146.25518 0 -462.81788 513294.24 -514982.47 -449.44011 28399.391 290.22677 1.1573629 + 1420 16.208723 664.23926 1499.3076 201.27517 -835.06836 566.43752 603.59629 148.52977 0 -471.69399 513300.52 -514982.46 261.17724 28395.582 286.90991 1.1923832 + 1440 16.424351 665.87924 1504.925 202.02927 -839.04575 568.21243 588.179 157.65461 0 -462.88044 513294.99 -514985.2 684.75502 28394.09 287.99547 1.1721041 + 1460 16.630685 668.71536 1501.3751 201.55271 -832.6597 581.26842 579.88403 157.98256 0 -456.9524 513291.74 -514986.58 -272.14551 28396.923 287.26686 1.284286 + 1480 16.851607 672.94191 1510.1794 202.73465 -837.23749 577.53887 567.63332 162.86706 0 -467.21952 513308.9 -514986.95 -937.06962 28397.511 288.94723 1.3016431 + 1500 17.060401 678.34496 1516.5383 203.58831 -838.19335 568.9071 592.24094 169.15958 0 -495.91214 513315.52 -514988.11 85.894805 28392.343 290.14127 1.359925 + 1520 17.280722 684.91448 1526.955 204.9867 -842.04054 557.53201 581.42008 168.46993 0 -496.76555 513336.83 -514989.52 513.1704 28387.948 292.13159 1.3753055 + 1540 17.489951 692.4859 1536.0578 206.20871 -843.5719 552.11665 584.87851 156.09211 0 -473.22273 513327.75 -514991.18 -267.31574 28386.929 293.85398 1.4281354 + 1560 17.713041 700.59595 1541.593 206.95178 -840.99701 551.44763 612.32187 152.35924 0 -499.17884 513335.07 -514993.01 -882.17955 28383.721 294.92477 1.4055318 + 1580 17.929113 708.77379 1550.3407 208.12612 -841.56691 556.60852 582.39053 162.12325 0 -515.10224 513365.77 -514993.35 322.32831 28375.626 296.59534 1.4204419 + 1600 18.144745 717.39964 1559.9665 209.41835 -842.56689 549.07216 592.74611 171.9088 0 -494.99998 513331.85 -514993.14 267.08424 28369.799 298.42556 1.4556193 + 1620 18.363554 726.25369 1544.67 207.36486 -818.41631 564.24547 620.11593 171.47239 0 -481.42668 513299.67 -514992.5 -929.2129 28365.483 295.50817 1.4206365 + 1640 18.578192 735.20307 1599.669 214.74822 -864.46597 559.44554 584.31101 166.36248 0 -485.25281 513300.68 -514990.01 -400.32794 28355.927 306.03975 1.4483397 + 1660 18.788682 744.13508 1567.4804 210.42705 -823.34534 567.22939 620.98009 160.76689 0 -485.86239 513302.82 -514989.28 275.23727 28344.229 299.86144 1.466234 + 1680 19.002967 752.73626 1613.0757 216.548 -860.33939 567.6576 617.82475 157.94412 0 -474.89518 513259.71 -514988.58 145.60417 28335.257 308.62904 1.4035192 + 1700 19.208987 760.45858 1575.0294 211.44047 -814.57086 588.97206 634.68664 166.27782 0 -441.79702 513226.22 -514988.93 -455.69419 28327.746 301.33081 1.4144311 + 1720 19.424031 767.76378 1634.9553 219.48525 -867.19156 594.28118 613.97792 169.57851 0 -435.89528 513178.39 -514987.52 624.6147 28318.833 312.83371 1.3795127 + 1740 19.630425 774.0707 1607.3304 215.77673 -833.25975 612.27366 635.89702 170.90768 0 -425.06946 513156.42 -514983.69 1245.2476 28314.962 307.54418 1.3649994 + 1760 19.88556 778.94063 1606.5499 215.67195 -827.60929 602.10334 636.54708 169.93908 0 -409.46967 513160.13 -514986.86 900.23197 28320.117 307.40099 1.3499664 + 1780 20.156405 783.13015 1582.8925 212.49605 -799.76233 635.8022 637.81662 173.60641 0 -395.27083 513136.4 -514988.12 303.67422 28331.437 302.86049 1.3623691 + 1800 20.394003 786.8472 1629.8795 218.80383 -843.03226 626.87797 613.50519 171.66383 0 -388.22631 513124.5 -514991.35 452.45767 28344.488 311.88054 1.3331104 + 1820 20.604631 789.49317 1623.8201 217.99039 -834.32693 632.3375 629.50791 165.54164 0 -402.81199 513130.95 -514989.85 1435.9558 28360.845 310.74273 1.2776203 + 1840 20.882926 790.84026 1595.8459 214.23498 -805.0056 593.44998 654.04584 168.32988 0 -408.05005 513177.2 -514989.98 869.17595 28385.701 305.40649 1.2158021 + 1860 21.104003 791.82787 1587.2175 213.07667 -795.38968 618.69585 660.77302 168.60246 0 -408.77525 513157.18 -514991.87 14.63364 28414.975 303.75155 1.217843 + 1880 21.318712 792.39264 1628.8097 218.66022 -836.41704 590.23683 653.83304 177.71688 0 -432.28625 513162.12 -514988.04 -17.001449 28442.457 311.75357 1.1508692 + 1900 21.52406 792.00166 1611.7686 216.37254 -819.76695 604.55866 613.59005 183.84763 0 -425.02508 513192.41 -514989.15 1501.7473 28469.05 308.49923 1.1217532 + 1920 21.740008 789.87504 1640.0559 220.16997 -850.18086 603.67271 634.84308 183.31253 0 -426.75252 513142.08 -514987.34 889.51113 28503.487 313.92438 1.1161317 + 1940 21.949681 787.46267 1570.9429 210.89187 -783.48022 605.27114 651.32573 181.65051 0 -435.56723 513206.5 -514992.66 -1213.4071 28540.767 300.71188 1.0306517 + 1960 22.16336 784.79852 1591.8755 213.70197 -807.07695 594.43439 669.69922 174.81078 0 -440.94269 513185.58 -514990.66 -9.1610879 28568.421 304.73308 1.0111234 + 1980 22.368034 780.57674 1632.8138 219.19775 -852.23704 605.41038 630.06225 169.19473 0 -441.49651 513181.33 -514996.74 1265.2908 28593.818 312.59942 0.96826781 + 2000 22.581326 775.20404 1636.2577 219.66008 -861.05366 609.0993 612.37884 163.97498 0 -448.27188 513197.01 -514995.24 -167.85231 28624.885 313.26825 0.94815628 +Loop time of 22.5814 on 4 procs for 2000 steps with 3000 atoms + +Performance: 3.826 ns/day, 6.273 hours/ns, 88.568 timesteps/s +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 10.479 | 10.867 | 11.348 | 9.5 | 48.12 +Bond | 0.47013 | 0.48392 | 0.50035 | 1.7 | 2.14 +Kspace | 4.4559 | 4.9538 | 5.3493 | 14.5 | 21.94 +Neigh | 0.65502 | 0.65523 | 0.65539 | 0.0 | 2.90 +Comm | 0.47358 | 0.47448 | 0.47606 | 0.1 | 2.10 +Output | 0.0062618 | 0.0089129 | 0.014062 | 3.2 | 0.04 +Modify | 5.0877 | 5.0948 | 5.1016 | 0.3 | 22.56 +Other | | 0.04382 | | | 0.19 + +Nlocal: 750 ave 769 max 722 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Nghost: 5829.25 ave 5873 max 5791 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Neighs: 164687 ave 168810 max 157995 min +Histogram: 1 0 0 0 0 0 1 0 1 1 + +Total # of neighbors = 658749 +Ave neighs/atom = 219.583 +Ave special neighs/atom = 10.5 +Neighbor list builds = 65 +Dangerous builds = 0 +Total wall time: 0:00:22 diff --git a/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.1 b/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.1 deleted file mode 100644 index 5509458f14..0000000000 --- a/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.1 +++ /dev/null @@ -1,254 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 -kspace_style pppm 1.0e-4 - -comm_modify vel yes -read_data data.ethanol - orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 3000 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2750 bonds - reading angles ... - 3250 angles - reading dihedrals ... - 3000 dihedrals - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 11 = max # of special neighbors - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH -pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H -pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH -pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH -pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO -pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH -pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO -pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO -pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 1 thole 2.051000 -pair_coeff 1 2 thole 1.580265 -pair_coeff 1 4 thole 1.416087 -pair_coeff 1 6 thole 2.051000 -pair_coeff 1 7 thole 1.580265 -pair_coeff 1 8 thole 1.416087 -pair_coeff 2 2 thole 1.217570 -pair_coeff 2 4 thole 1.091074 -pair_coeff 2 6 thole 1.580265 -pair_coeff 2 7 thole 1.217570 -pair_coeff 2 8 thole 1.091074 -pair_coeff 4 4 thole 0.977720 -pair_coeff 4 6 thole 1.416087 -pair_coeff 4 7 thole 1.091074 -pair_coeff 4 8 thole 0.977720 -pair_coeff 6 6 thole 2.051000 -pair_coeff 6 7 thole 1.580265 -pair_coeff 6 8 thole 1.416087 -pair_coeff 7 7 thole 1.217570 -pair_coeff 7 8 thole 1.091074 -pair_coeff 8 8 thole 0.977720 - -group gETHANOL molecule 1:250 -3000 atoms in group gETHANOL -group gATOMS type 1 2 3 4 5 -2250 atoms in group gATOMS -group gDRUDES type 6 7 8 -750 atoms in group gDRUDES - -neighbor 2.0 bin - -variable vTEMP equal 300.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gATOMS create ${vTEMP} 12345 -velocity gATOMS create 300 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N C N D D D - -fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 - 250 = # of size 2 clusters - 250 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 300 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 300 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nph iso ${vPRESS} ${vPRESS} 500.0 -fix fNPH all nph iso 1 ${vPRESS} 500.0 -fix fNPH all nph iso 1 1 500.0 - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 20 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.379738 - grid = 30 30 30 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0289979 - estimated relative force accuracy = 8.73262e-05 - using double precision FFTs - 3d grid and FFT values/proc = 50653 27000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 11 -New max number of 1-2 to 1-4 neighbors: 11 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 -Memory usage per processor = 17.0416 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170217.61 22094.109 381.62759 10.134301 - 20 1.385576 10970.012 5646.6301 758.03417 5323.3819 2059.5936 2216.9884 125.92554 0 1728.6053 514096.92 -514904.65 75436.064 22442.45 899.51659 426.89782 - 40 2.8551838 8946.3004 5328.0205 715.26229 3618.2799 1462.1369 1696.2859 256.70292 0 1227.1291 513938.28 -514962.25 46638.926 23048.183 913.15135 252.56746 - 60 4.256644 7510.9138 4723.1153 634.05655 2787.7985 1200.8153 1745.4103 301.30777 0 557.91727 513950.17 -514967.82 37797.472 23517.111 840.69781 151.04819 - 80 5.6700039 6349.0396 4602.1226 617.81383 1746.917 881.77472 1380.8268 300.54011 0 204.13917 513929.54 -514949.9 33853.354 23924.249 841.20585 95.742025 - 100 7.1165569 5485.3222 4144.7402 556.41234 1340.582 784.84009 1301.8671 289.61557 0 -77.062714 514016.28 -514974.95 23857.465 24318.637 768.91722 59.825738 - 120 8.510273 4862.0053 3777.3363 507.09006 1084.669 621.87069 1297.2363 283.15963 0 -165.00092 514030.24 -514982.84 17467.301 24661.1 708.90876 35.503627 - 140 9.89271 4340.9652 3447.5936 462.82361 893.3716 643.1449 1248.6314 275.36087 0 -264.51028 513962.87 -514972.13 14982.178 24941.74 650.92753 23.297372 - 160 11.266981 3926.9368 3280.8104 440.43373 646.12637 590.77624 1125.7232 275.3221 0 -402.26335 514039.99 -514983.43 17555.529 25182.215 623.03896 13.767615 - 180 12.636709 3510.3411 3034.5182 407.37013 475.82289 580.88726 1065.7063 271.62555 0 -478.17514 514008.07 -514972.29 9901.7384 25408.806 577.95511 8.7953435 - 200 13.951961 3233.2057 2804.8754 376.54165 428.33026 560.57334 1096.7788 268.56938 0 -524.79217 514009.74 -514982.54 8543.4492 25602.16 535.31334 5.5723047 - 220 15.315 3020.0557 2679.3857 359.69523 340.66996 534.37676 1086.1078 252.72365 0 -554.44877 514000.87 -514978.96 7630.6161 25763.835 511.8744 4.1309201 - 240 16.66608 2817.6362 2557.8968 343.3859 259.73947 533.53125 1096.7513 235.23483 0 -594.78212 513968.14 -514979.14 6067.9397 25911.192 489.07601 2.9844639 - 260 18.020921 2631.1316 2460.4934 330.30994 170.63824 520.23801 1043.849 228.55335 0 -637.15729 514004.04 -514988.88 5635.1903 26047.493 470.67196 2.358136 - 280 19.327414 2462.7215 2379.403 319.42393 83.318543 525.36331 972.01762 226.26993 0 -624.36335 513966.76 -514982.73 4763.2439 26167.845 455.32938 1.8853017 - 300 20.664073 2314.007 2233.3945 299.82295 80.612529 521.07514 985.58156 216.6623 0 -622.92535 513969.51 -514989.29 3501.9257 26271.903 427.41388 1.7110326 - 320 21.998284 2171.6005 2216.0458 297.49398 -44.445373 513.1225 926.87268 206.39293 0 -647.39127 513946.45 -514989.89 3556.0249 26368.557 424.16134 1.5401544 - 340 23.295565 2048.7645 2103.0412 282.32362 -54.276671 517.24017 972.17593 198.86832 0 -648.49462 513890.61 -514984.68 3723.4258 26461.822 402.56097 1.3933654 - 360 24.639426 1940.255 2045.2119 274.5603 -104.95688 499.1817 932.32957 187.5616 0 -652.16846 513915.39 -514987.25 2301.433 26551.361 391.50737 1.3177372 - 380 25.919177 1826.4337 1933.9251 259.62057 -107.49138 518.5733 919.38362 182.08763 0 -651.72644 513909.35 -514985.16 2618.7931 26632.025 370.16974 1.3263382 - 400 27.23436 1760.0079 1974.3468 265.04699 -214.33884 494.88766 905.27809 184.94874 0 -673.15814 513861.2 -514987.5 2096.731 26707.742 377.93896 1.2790015 - 420 28.50932 1674.2459 1875.0429 251.7159 -200.79701 494.32791 919.1307 191.42967 0 -660.09631 513843.82 -514989.41 358.06627 26778.924 358.8831 1.3234648 - 440 29.823068 1636.3668 1886.8736 253.30412 -250.50682 501.37304 885.96911 179.94725 0 -646.55634 513813.44 -514984.68 465.97294 26842.197 361.1633 1.2949713 - 460 31.092765 1593.0934 1860.7484 249.79693 -267.65503 491.39115 906.9344 174.33035 0 -666.38274 513814.92 -514988.85 126.16052 26894.743 356.1632 1.2759204 - 480 32.406062 1505.0407 1837.1657 246.63106 -332.12503 509.85902 860.16645 173.43061 0 -651.2259 513765.85 -514990.2 1646.3283 26939.521 351.6473 1.2643358 - 500 33.677199 1442.2558 1798.394 241.42613 -356.13819 522.53768 861.77071 168.42903 0 -655.02572 513738.55 -514992.4 1526.9168 26984.71 344.22043 1.2508825 - 520 34.98888 1429.2148 1796.9298 241.22958 -367.71495 524.55666 871.69773 162.68814 0 -664.81406 513731.94 -514993.79 -680.86121 27027.519 343.9346 1.2628675 - 540 36.290854 1386.5466 1788.8853 240.14964 -402.33868 549.35219 874.93475 154.34652 0 -656.82759 513667.79 -514991.93 -112.10182 27063.585 342.37563 1.3021222 - 560 37.52542 1344.4167 1829.4102 245.58992 -484.99349 543.86102 827.43025 144.96524 0 -643.51447 513638.79 -514996.53 701.10406 27094.487 350.14354 1.3040182 - 580 38.796225 1286.7629 1718.567 230.70973 -431.80414 561.04865 874.04358 152.41827 0 -615.40981 513590.72 -514994.62 826.08615 27125.818 328.91939 1.2462575 - 600 40.032106 1275.3861 1701.9169 228.47454 -426.53082 558.07219 895.26591 163.23964 0 -608.79386 513561.43 -514995.74 284.53547 27152.441 325.68878 1.3366627 - 620 41.297358 1273.8918 1712.1906 229.85372 -438.29876 558.54787 859.08268 175.40704 0 -603.76978 513568.36 -514995.92 -799.98388 27171.09 327.70761 1.2215062 - 640 42.526453 1217.1518 1736.1072 233.06442 -518.95534 572.52862 823.16123 163.5653 0 -606.82177 513521.07 -514992.46 -528.59646 27187.499 332.28172 1.2466277 - 660 43.751388 1139.8934 1675.8281 224.97222 -535.93471 572.5104 829.99341 152.69698 0 -620.77477 513527.1 -514997.46 127.63393 27203.689 320.71564 1.270961 - 680 44.951294 1132.7801 1684.9691 226.19937 -552.18903 579.17897 824.9868 153.95243 0 -613.89121 513497.59 -514994 -375.69988 27217.538 322.46995 1.266406 - 700 46.114508 1123.7259 1689.7673 226.8435 -566.04141 579.34852 817.35591 160.76324 0 -604.95952 513473.67 -514992.22 539.9968 27228.562 323.38291 1.2824201 - 720 47.311101 1109.2452 1679.3944 225.45099 -570.14919 580.49864 815.37954 166.39557 0 -599.53737 513460.9 -514993.78 1379.628 27240.51 321.38269 1.3097525 - 740 48.482072 1103.9038 1664.1003 223.39782 -560.19651 598.28549 826.45607 162.40108 0 -577.67737 513419.55 -514989.21 -688.06905 27252.803 318.47888 1.2441535 - 760 49.66032 1069.6322 1656.8299 222.42181 -587.19776 602.32252 832.89566 153.82032 0 -575.90234 513395.07 -514995.41 40.843646 27264.248 317.07409 1.2699292 - 780 50.861186 1034.9853 1655.3151 222.21845 -620.3298 585.98097 809.14501 152.10567 0 -574.09092 513399.41 -514992.88 -542.13898 27275.872 316.80217 1.2268067 - 800 52.028532 1040.3169 1665.5678 223.59483 -625.25085 605.03042 803.57295 148.68705 0 -581.69335 513396.32 -514997.16 535.8591 27285.478 318.74392 1.2821524 - 820 53.219595 1058.9481 1736.3976 233.1034 -677.4495 598.69968 784.98413 145.24433 0 -598.32684 513390.35 -514998.4 661.30446 27295.669 332.34879 1.2200226 - 840 54.41621 1045.3784 1676.8277 225.10642 -631.4493 612.87881 813.63091 148.70121 0 -579.94856 513372.94 -514999.65 -709.36037 27305.36 320.91078 1.2627849 - 860 55.601647 1020.7309 1672.697 224.55189 -651.96607 601.90752 814.84165 150.80576 0 -580.50172 513365.58 -515004.6 -495.61008 27311.4 320.12878 1.239739 - 880 56.769503 989.87899 1623.5853 217.95888 -633.70636 614.6379 850.57766 146.023 0 -574.97001 513330.69 -515000.67 642.87966 27315.764 310.68993 1.2958041 - 900 57.983504 951.29928 1656.7713 222.41394 -705.47199 612.66694 803.70933 146.11306 0 -578.97014 513313.84 -515002.83 -24.66438 27323.702 317.06441 1.2662666 - 920 59.146542 990.23712 1682.9256 225.92504 -692.68849 625.49291 805.11902 145.39781 0 -566.50947 513298.1 -515000.28 -197.4677 27331.656 322.09842 1.2192545 - 940 60.311439 975.32007 1655.1496 222.19623 -679.82952 644.56888 830.44185 142.39994 0 -571.05582 513274.28 -515000.46 -57.36251 27336.591 316.75027 1.2738836 - 960 61.537265 970.70957 1646.9748 221.0988 -676.26523 621.55653 860.81553 137.50196 0 -570.35847 513277.66 -515003.44 356.66027 27339.657 315.18748 1.2637636 - 980 62.841358 922.60821 1622.7907 217.8522 -700.18247 618.71597 851.23286 133.07652 0 -567.79027 513264.96 -515000.37 5.1281321 27344.467 310.55109 1.2643077 - 1000 64.061049 903.52078 1692.943 227.26982 -789.4222 615.63909 786.17473 136.0751 0 -548.92889 513225.82 -515004.21 -1215.8274 27349.08 323.99743 1.2690479 - 1020 65.198298 880.82937 1611.9406 216.39562 -731.11119 641.95133 825.78985 138.47494 0 -548.19881 513212.76 -515001.89 -120.47994 27348.478 308.46852 1.2703282 - 1040 66.338573 859.35882 1637.2347 219.79124 -777.87584 642.91383 781.96671 129.07882 0 -535.68978 513205.22 -515001.36 -128.41699 27349.25 313.3121 1.2828435 - 1060 67.506762 843.6634 1588.9732 213.31236 -745.30982 645.93104 848.24527 128.71177 0 -531.00457 513167.02 -515004.21 111.3449 27352.063 304.04699 1.3138151 - 1080 68.625545 819.34273 1604.5527 215.40383 -785.20997 653.64454 797.74835 132.82208 0 -520.03981 513152.36 -515001.74 -705.09278 27353.042 307.03668 1.306641 - 1100 69.741567 799.10089 1574.7957 211.40909 -775.69478 654.13763 825.37479 142.68152 0 -514.52184 513120.3 -515003.67 1350.915 27353.287 301.3473 1.2713755 - 1120 70.887971 807.77511 1606.5291 215.66916 -798.75403 677.02 802.76738 138.71115 0 -519.19695 513103.61 -515001.67 551.01047 27358.309 307.4238 1.2874498 - 1140 72.009922 822.40019 1605.593 215.54349 -783.19283 664.08656 825.14971 139.5036 0 -525.0726 513119.2 -515006.06 -1500.6927 27365.732 307.25006 1.2741015 - 1160 73.11993 799.60355 1627.1824 218.44176 -827.57881 660.53797 810.61642 135.99659 0 -549.15929 513120.99 -515006.56 -463.83247 27365.87 311.39885 1.2506312 - 1180 74.237157 808.71869 1627.4862 218.48255 -818.76747 671.07453 814.08104 132.68184 0 -536.0374 513101.27 -515001.83 -1497.9686 27360.344 311.48219 1.1920705 - 1200 75.389495 800.76402 1602.0973 215.0742 -801.33325 661.27319 818.56681 137.56688 0 -528.29009 513116.11 -515006.56 727.09082 27352.249 306.62538 1.1680129 - 1220 76.512266 786.90424 1625.6159 218.23148 -838.7117 654.42667 808.06282 144.23638 0 -544.37793 513103.11 -515004.17 -1016.333 27347.251 311.10383 1.2383451 - 1240 77.618425 784.43915 1618.0202 217.21178 -833.58101 652.75565 810.84854 144.21786 0 -538.55907 513104.01 -515006.86 -1688.0609 27338.945 309.66351 1.2014646 - 1260 78.767789 792.64493 1616.6996 217.03449 -824.05464 659.33158 832.96211 136.95679 0 -535.25333 513087.8 -515005.85 -240.86746 27324.585 309.38787 1.2538953 - 1280 79.890153 772.02964 1579.0067 211.9744 -806.97707 680.62465 825.10068 128.65485 0 -522.39638 513085.1 -515004.06 1026.3484 27308.077 302.15133 1.2789362 - 1300 81.045542 794.71268 1640.9493 220.28991 -846.23661 653.48559 809.8286 126.57126 0 -529.35975 513101 -515007.77 -222.24259 27295.577 314.02093 1.2904787 - 1320 82.165808 784.00371 1619.7825 217.44836 -835.77876 666.10367 843.1839 129.04786 0 -537.48412 513064.75 -515001.38 -904.29245 27284.448 309.98624 1.2367093 - 1340 83.287128 768.52183 1621.7783 217.71629 -853.25649 658.65554 797.98287 135.92558 0 -517.31157 513072.35 -515000.86 556.43774 27269.699 310.3284 1.3310985 - 1360 84.450531 750.55548 1561.8653 209.67325 -811.30983 659.33682 849.22159 146.12076 0 -514.99584 513050.84 -515001.83 156.64838 27254.169 298.83628 1.3466087 - 1380 85.572197 744.55824 1600.9118 214.91506 -856.35357 669.28688 822.92318 135.57716 0 -509.75984 513027.33 -515001.71 395.88113 27246.862 306.32946 1.3282506 - 1400 86.727889 740.37698 1618.0191 217.21163 -877.6421 680.34192 804.16104 122.37614 0 -510.05578 513028.7 -515003.17 -1778.0909 27242.463 309.60983 1.3262175 - 1420 87.853329 707.95242 1606.2301 215.62901 -898.27766 681.75825 834.81666 117.56052 0 -511.14444 512980.84 -515002.11 132.87977 27231.78 307.36642 1.2875563 - 1440 88.999557 701.0459 1631.5857 219.03289 -930.53982 689.29026 778.55166 121.13791 0 -503.03703 512986.74 -515003.22 502.08629 27220.348 312.26072 1.2092436 - 1460 90.173845 691.9965 1611.7145 216.36527 -919.71797 691.89285 800.91685 123.97376 0 -504.76462 512970.72 -515002.46 530.64797 27214.26 308.41315 1.2983911 - 1480 91.318457 691.7249 1594.0369 213.99213 -902.31197 688.47809 838.61898 125.21502 0 -504.16566 512953.09 -515003.55 -1094.2326 27210.327 305.01536 1.3192889 - 1500 92.483926 665.64633 1571.5229 210.96973 -905.87653 681.91529 823.02708 127.30163 0 -506.25486 512973.62 -515005.48 -1022.5661 27200.233 300.72872 1.2507982 - 1520 93.612424 675.29951 1631.0635 218.96279 -955.76401 670.77264 825.29942 133.56984 0 -531.08736 512951.49 -515005.81 -389.61365 27187.165 312.13799 1.2620465 - 1540 94.741199 653.89323 1632.9694 219.21864 -979.07615 678.96106 792.69599 132.07987 0 -515.25022 512939.14 -515006.7 -1030.2457 27174.091 312.51532 1.234099 - 1560 95.9062 636.91726 1590.0999 213.46361 -953.18262 687.04134 809.44011 127.54619 0 -523.45302 512956.52 -515010.28 -951.93121 27155.942 304.27362 1.288966 - 1580 97.028125 627.56968 1601.8646 215.04297 -974.29496 686.96797 803.53231 128.08068 0 -517.28126 512935.11 -515010.71 -1043.2395 27131.362 306.54052 1.2619672 - 1600 98.159189 639.59673 1591.5973 213.66464 -952.00062 695.73225 820.03411 126.92265 0 -523.57295 512936.97 -515008.08 -516.36154 27101.901 304.53745 1.3431812 - 1620 99.322595 631.83759 1582.6681 212.46592 -950.83047 708.36138 817.50888 123.99588 0 -518.92537 512930.72 -515012.49 -2198.9765 27071.135 302.85679 1.2706043 - 1640 100.45901 621.88183 1569.4451 210.6908 -947.56326 703.57599 823.87187 132.80048 0 -497.70649 512900.32 -515010.43 -1335.78 27038.969 300.32548 1.2622751 - 1660 101.60839 642.07332 1595.5476 214.19493 -953.47423 705.46998 794.82235 141.09052 0 -484.29874 512898.11 -515008.66 -403.23344 27004.83 305.30235 1.3253687 - 1680 102.77636 620.05889 1604.721 215.42642 -984.66208 704.63874 808.2235 139.26176 0 -475.937 512849.25 -515010.1 -336.0674 26974.635 307.06907 1.3063348 - 1700 103.9216 625.14905 1627.936 218.54293 -1002.7869 700.41444 790.63143 141.47429 0 -472.95296 512847.83 -515010.18 432.43074 26948.842 311.5388 1.2611748 - 1720 105.07527 635.67026 1585.5068 212.84701 -949.83654 711.22133 826.38676 138.90157 0 -470.74615 512857.96 -515013.56 -927.08791 26927.403 303.39054 1.2949652 - 1740 106.19526 622.55036 1629.9419 218.81221 -1007.3915 701.72972 807.03841 133.88234 0 -462.62233 512821.73 -515009.15 60.724835 26906.734 311.91698 1.2759906 - 1760 107.3157 601.07861 1563.031 209.82973 -961.95237 721.05163 813.03641 135.83107 0 -472.1521 512852.13 -515011.85 1071.0762 26889.11 299.11764 1.211508 - 1780 108.47195 615.76689 1612.7311 216.50175 -996.96425 712.00335 812.2101 135.93651 0 -469.54632 512821.55 -515009.11 -1171.9908 26876.291 308.62781 1.2522701 - 1800 109.60652 590.39061 1576.6095 211.65259 -986.21891 706.7567 822.39219 137.15671 0 -470.15251 512825.84 -515008.21 -1051.5297 26860.1 301.6752 1.3176335 - 1820 110.78553 603.65994 1596.51 214.32414 -992.85007 711.49043 808.94991 132.38543 0 -461.89866 512827.37 -515011.15 180.50052 26844.34 305.50815 1.2756752 - 1840 111.93685 591.93917 1596.2013 214.2827 -1004.2621 720.41618 814.51338 137.96161 0 -460.4745 512793.12 -515009.8 605.10058 26833.73 305.47844 1.2069138 - 1860 113.12134 609.8248 1577.7772 211.80934 -967.95236 716.21723 808.30329 144.61624 0 -461.04538 512833.46 -515009.51 -1143.3982 26826.019 301.93343 1.2373879 - 1880 114.2602 614.25513 1599.756 214.7599 -985.50088 748.39555 792.89735 140.36606 0 -460.16996 512800.85 -515007.84 -261.10141 26816.306 306.15319 1.2225442 - 1900 115.40316 615.77501 1599.1853 214.68329 -983.41029 729.35936 798.81735 146.34452 0 -492.16069 512844.21 -515009.98 493.95161 26806.893 306.01603 1.2873103 - 1920 116.55442 628.99417 1652.3184 221.81616 -1023.3242 715.08536 813.8821 147.49091 0 -508.7856 512818.33 -515009.33 -2250.9701 26803.895 316.19125 1.3118467 - 1940 117.73809 613.28705 1595.717 214.21768 -982.42996 719.54904 821.80704 150.0739 0 -493.66309 512828.25 -515008.45 -2187.7221 26796.819 305.33907 1.3154875 - 1960 118.91834 594.22322 1584.9306 212.76966 -990.7074 717.75467 820.27772 151.35897 0 -491.90915 512819.49 -515007.68 -736.31063 26780.283 303.29276 1.2654066 - 1980 120.06148 614.4096 1572.4353 211.09222 -958.02568 732.31342 826.01815 154.79578 0 -487.35165 512824.93 -515008.73 39.731855 26764.092 300.89417 1.2728833 - 2000 121.20194 604.51985 1580.7247 212.20504 -976.20489 716.50209 820.59198 155.66948 0 -482.48478 512823.08 -515009.56 -465.82593 26752.509 302.47674 1.2881296 -Loop time of 121.202 on 1 procs for 2000 steps with 3000 atoms - -Pair time (%) = 58.9106 (48.6053) -Bond time (%) = 7.9266 (6.53999) -Kspce time (%) = 14.2366 (11.7462) -Neigh time (%) = 1.79608 (1.48189) -Comm time (%) = 0.562635 (0.464213) -Outpt time (%) = 0.0137095 (0.0113113) -Other time (%) = 37.7558 (31.1511) - -Nlocal: 3000 ave 3000 max 3000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 10007 ave 10007 max 10007 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 720894 ave 720894 max 720894 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 720894 -Ave neighs/atom = 240.298 -Ave special neighs/atom = 10.5 -Neighbor list builds = 49 -Dangerous builds = 0 diff --git a/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.4 b/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.4 deleted file mode 100644 index 245a37c6d0..0000000000 --- a/examples/USER/drude/ethanol/log.ethanol.lang.8Jul15.linux.4 +++ /dev/null @@ -1,254 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 -kspace_style pppm 1.0e-4 - -comm_modify vel yes -read_data data.ethanol - orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 3000 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2750 bonds - reading angles ... - 3250 angles - reading dihedrals ... - 3000 dihedrals - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 11 = max # of special neighbors - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH -pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H -pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH -pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH -pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO -pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH -pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO -pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO -pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 1 thole 2.051000 -pair_coeff 1 2 thole 1.580265 -pair_coeff 1 4 thole 1.416087 -pair_coeff 1 6 thole 2.051000 -pair_coeff 1 7 thole 1.580265 -pair_coeff 1 8 thole 1.416087 -pair_coeff 2 2 thole 1.217570 -pair_coeff 2 4 thole 1.091074 -pair_coeff 2 6 thole 1.580265 -pair_coeff 2 7 thole 1.217570 -pair_coeff 2 8 thole 1.091074 -pair_coeff 4 4 thole 0.977720 -pair_coeff 4 6 thole 1.416087 -pair_coeff 4 7 thole 1.091074 -pair_coeff 4 8 thole 0.977720 -pair_coeff 6 6 thole 2.051000 -pair_coeff 6 7 thole 1.580265 -pair_coeff 6 8 thole 1.416087 -pair_coeff 7 7 thole 1.217570 -pair_coeff 7 8 thole 1.091074 -pair_coeff 8 8 thole 0.977720 - -group gETHANOL molecule 1:250 -3000 atoms in group gETHANOL -group gATOMS type 1 2 3 4 5 -2250 atoms in group gATOMS -group gDRUDES type 6 7 8 -750 atoms in group gDRUDES - -neighbor 2.0 bin - -variable vTEMP equal 300.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gATOMS create ${vTEMP} 12345 -velocity gATOMS create 300 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N C N D D D - -fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 - 250 = # of size 2 clusters - 250 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 300 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 300 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nph iso ${vPRESS} ${vPRESS} 500.0 -fix fNPH all nph iso 1 ${vPRESS} 500.0 -fix fNPH all nph iso 1 1 500.0 - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 20 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.379738 - grid = 30 30 30 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0289979 - estimated relative force accuracy = 8.73262e-05 - using double precision FFTs - 3d grid and FFT values/proc = 17908 7200 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 11 -New max number of 1-2 to 1-4 neighbors: 11 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 -Memory usage per processor = 13.7041 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170217.61 22094.109 381.62759 10.134301 - 20 0.44569397 10977.424 5649.3945 758.40528 5328.0296 2062.3394 2228.2308 127.20754 0 1716.2152 514097.63 -514903.59 75539.256 22441.778 900.65907 425.71739 - 40 0.90527296 8971.2482 5307.0059 712.44118 3664.2423 1468.3059 1727.5451 263.87315 0 1220.4282 513944.02 -514959.93 46706.836 23047.009 909.55477 251.59684 - 60 1.361037 7598.4556 4774.303 640.92826 2824.1526 1194.6529 1771.6791 314.85714 0 553.82536 513952.92 -514963.78 37332.483 23513.741 850.78562 150.29304 - 80 1.7987111 6500.1249 4632.1069 621.83909 1868.0179 914.33309 1444.251 317.2453 0 213.21366 513930.08 -514951.11 33258.709 23919.334 847.28599 94.967207 - 100 2.243571 5591.6251 4319.2496 579.83942 1272.3755 772.49711 1235.8559 306.35507 0 -56.084846 513990.28 -514976.52 21846.137 24315.14 802.34652 59.892261 - 120 2.672169 4952.948 3881.7989 521.11369 1071.1491 630.90018 1260.1994 299.84546 0 -147.02839 514014.84 -514987.6 17197.209 24657.008 728.80233 35.812029 - 140 3.0969729 4374.1711 3440.8515 461.91852 933.31957 670.31509 1238.1527 300.45294 0 -260.41129 513963.49 -514978.68 17258.201 24938.237 649.62114 23.329848 - 160 3.522228 3923.495 3251.4038 436.48603 672.0912 632.18705 1144.4394 307.33026 0 -436.52375 514013.97 -514989.32 17850.515 25184.125 617.40474 13.751472 - 180 3.939676 3558.426 3060.6065 410.87237 497.81946 621.75343 1085.8467 297.16091 0 -495.18434 513968.41 -514980.17 9891.4148 25413.786 582.97006 8.7537197 - 200 4.3550711 3228.7597 2864.5929 384.55845 364.16674 591.37767 1077.5669 257.51603 0 -521.62174 513950.21 -514990.89 5932.7994 25603.593 546.64932 5.8336845 - 220 4.781127 2922.9928 2668.3732 358.21686 254.61956 552.45115 1045.2477 238.95571 0 -548.2597 513955.3 -514989.07 7141.8585 25759.687 509.85961 3.9098706 - 240 5.195529 2721.2831 2574.4897 345.61343 146.79339 548.06208 1035.0795 226.53387 0 -609.08183 513928.26 -514982.06 6976.8028 25904.957 492.22535 3.0535597 - 260 5.5978601 2525.9513 2461.0955 330.39077 64.855761 536.85769 1022.3488 211.33422 0 -633.79065 513919.59 -514991.49 4541.0707 26037.832 470.78293 2.3688827 - 280 6.0106721 2338.1989 2324.5678 312.06255 13.63115 519.14801 970.18634 197.76634 0 -621.14257 513937.12 -514989.44 2916.5572 26148.311 444.7787 1.975451 - 300 6.4294651 2194.9975 2189.2141 293.89194 5.7833943 530.82824 982.37216 190.98549 0 -652.12498 513946.6 -514992.88 4231.0047 26242.419 418.97109 1.6488796 - 320 6.825505 2045.5803 2132.2428 286.24381 -86.66256 531.61575 935.95137 188.46723 0 -683.29899 513935.09 -514994.49 1717.7425 26334.126 408.09021 1.554221 - 340 7.23614 1929.4862 2083.5954 279.71312 -154.10925 509.11673 906.18183 186.63991 0 -668.08147 513908.15 -514996.11 2743.5013 26418.758 398.8054 1.4581893 - 360 7.6401701 1853.7734 1992.7639 267.5194 -138.99054 525.44894 891.90785 178.2228 0 -654.5178 513920.68 -515000.73 3824.9512 26497.054 381.4442 1.3381947 - 380 8.035013 1760.9758 1947.1807 261.40007 -186.20493 517.02356 919.61194 172.55666 0 -676.58938 513879.08 -514997.89 2968.2379 26574.581 372.73009 1.2814975 - 400 8.439594 1687.9145 1906.019 255.8743 -218.10451 535.676 922.06535 176.24936 0 -683.92633 513833.49 -515001.66 1305.3348 26642.871 364.83666 1.2876267 - 420 8.849108 1605.8081 1889.1783 253.61351 -283.37015 517.23187 857.77943 180.22369 0 -663.03698 513825.85 -515001.41 2618.2332 26704.387 361.60626 1.2936035 - 440 9.2419581 1518.1322 1794.7348 240.93491 -276.60265 531.28729 893.06522 188.20612 0 -667.29018 513778.24 -515000.11 1458.8151 26764.917 343.52984 1.2323667 - 460 9.6461852 1455.546 1796.4 241.15845 -340.85398 527.34366 846.65226 188.77031 0 -650.31889 513748.59 -515001.89 169.77154 26818.027 343.8413 1.2433195 - 480 10.037471 1423.2564 1780.6643 239.04601 -357.40797 555.56132 861.65053 179.25353 0 -642.23744 513684.59 -514996.23 1737.2169 26861.945 340.81112 1.2754844 - 500 10.442603 1414.4159 1792.7736 240.67163 -378.35771 562.25347 865.25285 172.51254 0 -638.36916 513656.76 -514996.77 2862.5086 26905.68 343.13664 1.264128 - 520 10.840656 1359.8057 1801.5592 241.85105 -441.75349 573.49082 804.76936 169.51784 0 -635.89324 513643.32 -514996.96 927.77773 26956.407 344.82065 1.2649106 - 540 11.24422 1319.969 1763.9685 236.80467 -443.9995 564.76203 851.23442 169.85422 0 -632.66442 513600.38 -514997.57 402.68456 26999.135 337.63034 1.2312338 - 560 11.656965 1288.5175 1741.1847 233.74605 -452.66718 589.0843 843.68941 164.33111 0 -639.59483 513593.61 -515003.78 2031.8562 27036.616 333.27376 1.1999696 - 580 12.050085 1250.4981 1701.8135 228.46065 -451.3154 576.17535 877.82925 152.94556 0 -632.24298 513574.54 -515000.56 328.36451 27076.846 325.70282 1.2583556 - 600 12.463133 1212.0751 1699.8202 228.19306 -487.74513 586.11242 850.6289 146.9891 0 -635.87543 513564.76 -515000.36 -593.07635 27114.131 325.34702 1.1966401 - 620 12.857609 1202.6969 1724.5891 231.51816 -521.8922 586.546 815.3615 149.33058 0 -627.92161 513553.83 -514999.04 -16.881985 27141.295 330.08328 1.2224592 - 640 13.267988 1180.7392 1717.1928 230.52525 -536.45363 595.45079 837.47314 150.14341 0 -635.92342 513512.84 -514996.44 1253.4658 27161.366 328.61164 1.3535393 - 660 13.661833 1146.6245 1693.9969 227.4113 -547.37231 603.66965 823.99031 147.75109 0 -616.07296 513489.44 -514996.15 -632.85642 27186.187 324.23124 1.1905446 - 680 14.057714 1112.6845 1649.8772 221.48844 -537.19275 594.76928 869.75332 148.3474 0 -610.67856 513459.02 -514998.41 -656.86895 27208.556 315.75904 1.2280206 - 700 14.46045 1080.853 1662.6225 223.19944 -581.76952 607.13692 800.72097 155.37025 0 -590.53466 513444.43 -514998.9 1478.4986 27230.38 318.17518 1.2929123 - 720 14.858115 1074.1453 1681.4035 225.7207 -607.2582 602.55649 804.73664 155.69335 0 -578.62035 513406.54 -514998.16 -312.12065 27255.88 321.76305 1.3178416 - 740 15.262165 1057.2173 1626.1913 218.30872 -568.97405 614.54113 851.40449 158.65878 0 -585.61227 513391.12 -514999.09 -252.45558 27276.192 311.20516 1.2592718 - 760 15.664885 1062.4809 1661.9166 223.10468 -599.4357 613.01783 805.30824 157.10102 0 -572.92999 513401.46 -515003.4 8.2424603 27294.015 318.05423 1.2582564 - 780 16.067218 1054.4338 1611.1036 216.28327 -556.66986 619.88711 869.25572 154.03862 0 -563.00792 513365.76 -515002.61 -325.5131 27313.202 308.30577 1.2766112 - 800 16.469454 1045.3661 1667.4808 223.85165 -622.11476 607.72536 819.84304 154.6324 0 -551.0017 513351.46 -515004.78 -711.73517 27333.225 319.1255 1.2459692 - 820 16.874566 1025.6074 1655.4437 222.23572 -629.83638 617.12876 822.09062 147.69173 0 -566.57998 513354.87 -515005.04 399.28085 27347.385 316.79906 1.2953686 - 840 17.272044 995.37917 1669.6204 224.13888 -674.24128 600.79611 821.7655 140.46192 0 -568.05887 513337.46 -515006.66 583.69527 27361.364 319.5132 1.2991152 - 860 17.673279 971.05977 1639.0518 220.03518 -667.99202 608.93496 824.23202 133.94234 0 -564.33929 513334.29 -515005.05 -413.73876 27378.37 313.69629 1.2004828 - 880 18.080302 944.37506 1628.7217 218.64842 -684.34669 617.46083 825.05882 135.40531 0 -569.6048 513312.82 -515005.49 512.87669 27389.533 311.69643 1.2448601 - 900 18.477336 949.5982 1677.4393 225.18853 -727.84115 624.49844 772.75351 136.94704 0 -549.4139 513292.05 -515004.67 271.20937 27400.579 321.05001 1.211493 - 920 18.873705 932.25995 1610.381 216.18626 -678.12109 623.29028 843.94403 144.55915 0 -557.17786 513270.07 -515002.81 1097.4299 27412.447 308.17027 1.2686712 - 940 19.284093 916.57919 1640.5258 220.23305 -723.94658 619.65583 814.76133 144.02609 0 -552.83588 513253.39 -515002.95 -342.60513 27424.209 313.98093 1.1943711 - 960 19.678839 941.9627 1630.8148 218.9294 -688.85213 647.73279 836.44195 147.48183 0 -533.27218 513217.4 -515004.64 -291.64501 27431.009 312.08648 1.2709839 - 980 20.091488 888.07492 1615.6407 216.89235 -727.56578 644.39061 818.66717 151.18945 0 -530.05167 513198.49 -515010.26 835.04931 27433.771 309.19916 1.2205907 - 1000 20.484026 903.45687 1626.7477 218.38341 -723.29085 660.33039 814.13089 154.52432 0 -517.32081 513174.16 -515009.12 -597.08083 27441.855 311.29984 1.2872278 - 1020 20.884939 884.61313 1628.0576 218.55926 -743.44446 659.18164 792.2445 148.42138 0 -501.95147 513167.72 -515009.06 -227.27612 27447.478 311.54441 1.3024911 - 1040 21.279846 852.14085 1593.0292 213.85686 -740.88834 648.79571 822.31823 141.59479 0 -492.90372 513148.22 -515008.91 1544.7468 27454.311 304.83469 1.2878493 - 1060 21.655111 848.20594 1615.8134 216.91553 -767.60742 629.3671 795.01871 137.79728 0 -487.7332 513167.91 -515009.96 818.90975 27467.219 309.21127 1.2684583 - 1080 22.037992 831.86637 1618.7361 217.30789 -786.86971 636.48473 828.1039 138.80398 0 -531.02117 513152.33 -515011.57 -796.09024 27482.281 309.76171 1.2933978 - 1100 22.412974 796.80267 1592.7483 213.81915 -795.94567 625.90981 798.78644 146.80857 0 -536.96836 513184.36 -515014.85 -84.200922 27491.353 304.78282 1.2860228 - 1120 22.801171 772.10069 1567.5834 210.44088 -795.48274 658.82509 788.14264 148.88807 0 -539.176 513162.6 -515014.76 867.66407 27496.215 299.95125 1.3027473 - 1140 23.17888 770.63813 1565.9379 210.21998 -795.2998 640.7064 799.36864 147.80124 0 -535.9357 513166.65 -515013.89 -1183.537 27499.574 299.64709 1.2856405 - 1160 23.563832 764.75496 1564.5598 210.03497 -799.80482 647.22053 811.27899 146.29888 0 -543.29534 513150.92 -515012.23 -1228.125 27500.914 299.39235 1.2526237 - 1180 23.941609 764.17598 1617.4255 217.13195 -853.24954 659.94837 768.65464 144.94873 0 -529.07191 513110.91 -515008.64 107.09246 27498.487 309.51287 1.287252 - 1200 24.317012 762.98696 1589.6792 213.40714 -826.69227 651.88091 816.19739 145.19502 0 -517.91574 513088.48 -515010.53 -1052.4085 27492.624 304.22381 1.2172354 - 1220 24.706198 764.88104 1566.9504 210.3559 -802.06936 679.17803 822.8538 134.80594 0 -509.18914 513076.83 -515006.55 694.03102 27483.433 299.85098 1.253554 - 1240 25.083107 767.93518 1615.6009 216.887 -847.66571 671.38696 801.01511 123.2586 0 -498.24308 513061.33 -515006.42 -367.46541 27476.952 309.13859 1.3441052 - 1260 25.461219 769.84629 1597.441 214.44912 -827.59471 670.93506 820.00134 122.64096 0 -489.27375 513053.94 -515005.84 -58.54717 27470.667 305.70834 1.2250043 - 1280 25.850924 761.02257 1637.0908 219.77192 -876.06819 685.99978 801.7347 121.99508 0 -498.90642 513022.12 -515009.01 667.72097 27460.84 313.30874 1.2269128 - 1300 26.230407 725.15653 1614.5991 216.75252 -889.44257 676.06266 795.73111 129.44616 0 -500.04123 513019.86 -515010.51 346.28961 27453.003 309.01166 1.1958813 - 1320 26.616651 690.04147 1555.4057 208.80608 -865.36428 674.77824 814.17441 138.30234 0 -503.84683 513024.03 -515012.8 -953.72011 27450.174 297.64076 1.2471902 - 1340 26.997168 731.37012 1629.8044 218.79375 -898.43423 672.50861 814.71248 139.58285 0 -509.67436 512995.22 -515010.78 -1831.2948 27443.855 311.896 1.2621742 - 1360 27.377617 745.65434 1610.5181 216.20467 -864.8638 691.11602 810.45797 140.60405 0 -508.77522 513011.95 -515010.21 -479.36536 27427.931 308.19958 1.2616878 - 1380 27.768431 746.41678 1674.6182 224.8098 -928.2014 661.11056 795.29365 134.53957 0 -512.17435 513003.03 -515010 726.71849 27412.674 320.49072 1.2545772 - 1400 28.151466 706.81871 1607.416 215.78822 -900.5973 709.47611 804.4224 129.7539 0 -509.52634 512973.57 -515008.29 -712.21584 27401.879 307.61219 1.2445794 - 1420 28.544365 667.95202 1582.3831 212.42766 -914.43103 664.88892 801.83372 136.47795 0 -514.32654 513008.75 -515012.06 -674.60825 27385.407 302.81863 1.2330197 - 1440 28.92417 662.21363 1572.2132 211.0624 -909.99957 695.6883 812.01519 141.73013 0 -511.80853 512960.55 -515008.18 -73.453766 27362.02 300.86905 1.233181 - 1460 29.303746 673.3058 1590.356 213.49799 -917.05016 660.8122 809.16185 137.34151 0 -506.78651 512991.4 -515008.98 487.20204 27337.657 304.34864 1.2293292 - 1480 29.683979 690.74904 1599.4915 214.72439 -908.74246 688.89665 819.23241 129.49598 0 -495.16925 512954.44 -515005.64 487.60757 27316.061 306.12959 1.159563 - 1500 30.073856 696.13426 1627.5685 218.49359 -931.4342 677.25983 808.26514 125.60011 0 -489.59764 512955.4 -515008.36 519.17541 27293.341 311.4741 1.2480919 - 1520 30.451939 716.4485 1613.3483 216.5846 -896.89978 696.36687 820.98027 134.70464 0 -469.43851 512929.25 -515008.76 544.98379 27271.903 308.73614 1.2765559 - 1540 30.839949 711.84578 1602.4823 215.1259 -890.63656 708.76314 793.80104 146.48285 0 -451.73842 512918.02 -515005.96 454.52189 27257.543 306.63893 1.3081885 - 1560 31.255883 702.95447 1604.1384 215.34821 -901.1839 701.09472 795.80519 150.09855 0 -450.00841 512908.1 -515006.27 -175.16964 27248.208 306.99599 1.217717 - 1580 31.634972 666.16399 1593.9574 213.98146 -927.79341 709.48317 798.22341 141.85062 0 -483.91855 512915.54 -515008.98 -174.37068 27241.403 305.02798 1.2549165 - 1600 32.013681 688.42678 1613.6536 216.62559 -925.22683 708.7011 810.24587 137.18807 0 -474.54073 512902.73 -515009.55 175.74764 27236.695 308.81599 1.2269417 - 1620 32.377997 686.38631 1599.6555 214.7464 -913.26914 723.55612 796.07516 144.8931 0 -474.73319 512907.37 -515010.43 33.582792 27234.316 306.09396 1.3145429 - 1640 32.739099 705.79223 1615.3667 216.85556 -909.57442 705.06325 806.35123 150.08668 0 -479.53397 512919.18 -515010.72 -276.47112 27230.877 309.12408 1.2740414 - 1660 33.111364 701.27726 1607.2688 215.76845 -905.99149 721.97907 787.92231 144.01692 0 -463.68107 512916.64 -515012.87 929.51954 27224.725 307.57382 1.2682264 - 1680 33.474256 700.51394 1604.7821 215.43463 -904.2682 712.18636 816.32021 135.23856 0 -471.34583 512915.88 -515012.55 169.46579 27223.825 307.07661 1.316103 - 1700 33.847599 653.51775 1574.3177 211.34492 -920.79992 708.22805 829.01689 135.77013 0 -456.72703 512872.35 -515009.44 -1331.9277 27225.869 301.24451 1.2944188 - 1720 34.210801 646.19978 1583.018 212.5129 -936.81823 721.83771 788.24431 140.19453 0 -469.87575 512893.23 -515010.45 722.29697 27224.305 302.91185 1.3016769 - 1740 34.57351 650.08331 1600.9298 214.91747 -950.84647 709.99119 789.79721 138.23225 0 -460.97413 512880.98 -515008.87 1102.6045 27225.414 306.34618 1.3045986 - 1760 34.947762 647.44786 1591.6127 213.6667 -944.16484 703.25888 831.27698 133.1631 0 -463.47718 512860.59 -515008.98 1152.8885 27230.97 304.56068 1.2966664 - 1780 35.311829 634.92036 1581.508 212.31019 -946.58767 707.7771 807.97758 140.70709 0 -473.2579 512882.95 -515012.74 229.64632 27235.632 302.63254 1.2770484 - 1800 35.686407 609.58199 1563.2412 209.85795 -953.65919 706.83652 811.29431 136.56443 0 -482.58705 512887.2 -515012.97 -1428.3239 27239.537 299.14762 1.235579 - 1820 36.050632 615.78755 1553.6653 208.57243 -937.87771 721.32849 827.06658 126.75248 0 -476.19143 512873.72 -515010.55 -1558.7353 27240.307 297.30295 1.2564383 - 1840 36.425851 595.24691 1623.2931 217.91965 -1028.0462 715.62813 759.44377 125.14223 0 -486.38933 512873.86 -515015.73 -393.40048 27233.914 310.63049 1.3037899 - 1860 36.791862 584.14833 1580.8506 212.22194 -996.70229 725.49209 786.41557 129.34385 0 -497.01606 512871.73 -515012.67 -445.7964 27227.234 302.53512 1.2082224 - 1880 37.159068 571.94192 1587.3128 213.08945 -1015.3709 727.21492 776.53831 128.97058 0 -472.95741 512835.25 -515010.39 -2430.0222 27217.82 303.74009 1.2871788 - 1900 37.534434 588.18296 1575.532 211.50794 -987.34908 735.18962 822.01431 121.27343 0 -474.15326 512820.83 -515012.5 -1004.9937 27200.966 301.48221 1.2875721 - 1920 37.899018 595.6429 1593.2862 213.89136 -997.64331 728.16052 813.67464 116.25522 0 -474.41478 512829.4 -515010.72 56.20061 27185.033 304.87735 1.3063391 - 1940 38.263855 552.10655 1586.7384 213.01234 -1034.6318 727.69915 794.08444 116.66262 0 -474.42985 512811.77 -515010.42 229.42949 27173.976 303.61874 1.3140118 - 1960 38.637106 571.50083 1614.8554 216.78693 -1043.3546 729.51741 761.23804 128.23909 0 -464.44507 512811.41 -515009.31 -496.32744 27162.867 309.02606 1.2732453 - 1980 38.999486 554.31018 1603.5237 215.26569 -1049.2135 738.87358 785.7371 126.13553 0 -468.044 512779.36 -515011.27 467.45037 27149.813 306.82565 1.3387674 - 2000 39.362048 570.16479 1585.0529 212.78608 -1014.8882 754.53304 813.00379 125.06015 0 -448.86583 512751.21 -515009.83 -257.98779 27141.691 303.29539 1.313977 -Loop time of 39.3621 on 4 procs for 2000 steps with 3000 atoms - -Pair time (%) = 15.1636 (38.5233) -Bond time (%) = 2.04281 (5.18978) -Kspce time (%) = 8.76608 (22.2704) -Neigh time (%) = 0.513343 (1.30415) -Comm time (%) = 1.60174 (4.06924) -Outpt time (%) = 0.00888807 (0.0225803) -Other time (%) = 11.2657 (28.6206) - -Nlocal: 750 ave 771 max 713 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 5881.75 ave 5954 max 5826 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Neighs: 178004 ave 198102 max 168052 min -Histogram: 1 2 0 0 0 0 0 0 0 1 - -Total # of neighbors = 712018 -Ave neighs/atom = 237.339 -Ave special neighs/atom = 10.5 -Neighbor list builds = 50 -Dangerous builds = 0 diff --git a/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.1 b/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.1 deleted file mode 100644 index d8b8fb07f7..0000000000 --- a/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.1 +++ /dev/null @@ -1,263 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 -kspace_style pppm 1.0e-4 - -read_data data.ethanol - orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 3000 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2750 bonds - reading angles ... - 3250 angles - reading dihedrals ... - 3000 dihedrals - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 11 = max # of special neighbors - - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH -pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H -pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH -pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH -pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO -pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH -pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO -pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO -pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 1 thole 2.051000 -pair_coeff 1 2 thole 1.580265 -pair_coeff 1 4 thole 1.416087 -pair_coeff 1 6 thole 2.051000 -pair_coeff 1 7 thole 1.580265 -pair_coeff 1 8 thole 1.416087 -pair_coeff 2 2 thole 1.217570 -pair_coeff 2 4 thole 1.091074 -pair_coeff 2 6 thole 1.580265 -pair_coeff 2 7 thole 1.217570 -pair_coeff 2 8 thole 1.091074 -pair_coeff 4 4 thole 0.977720 -pair_coeff 4 6 thole 1.416087 -pair_coeff 4 7 thole 1.091074 -pair_coeff 4 8 thole 0.977720 -pair_coeff 6 6 thole 2.051000 -pair_coeff 6 7 thole 1.580265 -pair_coeff 6 8 thole 1.416087 -pair_coeff 7 7 thole 1.217570 -pair_coeff 7 8 thole 1.091074 -pair_coeff 8 8 thole 0.977720 - -group gETHANOL molecule 1:250 -3000 atoms in group gETHANOL -group gATOMS type 1 2 3 4 5 -2250 atoms in group gATOMS -group gDRUDES type 6 7 8 -750 atoms in group gDRUDES - - -neighbor 2.0 bin - -variable vTEMP equal 300.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gATOMS create ${vTEMP} 12345 -velocity gATOMS create 300 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N C N D D D - -fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 - 250 = # of size 2 clusters - 250 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -comm_modify vel yes -compute cTEMP_ATOM gATOMS temp -compute cTEMP all temp/drude - -fix fDTDIR all drude/transform/direct -fix fNPT gATOMS npt temp ${vTEMP} ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso 1 ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso 1 1 500 -fix_modify fNPT temp cTEMP_ATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1349) -fix fNVT gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 100.0 -fix fNVT gDRUDES nvt temp 1 ${vTEMP_D} 100.0 -fix fNVT gDRUDES nvt temp 1 1 100.0 -fix fDTINV all drude/transform/inverse - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 20 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.379738 - grid = 30 30 30 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0289979 - estimated relative force accuracy = 8.73262e-05 - using double precision FFTs - 3d grid and FFT values/proc = 50653 27000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 11 -New max number of 1-2 to 1-4 neighbors: 11 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 -Memory usage per processor = 17.0416 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170217.61 22094.109 381.62759 10.134301 - 20 1.485518 11385.192 5995.2334 804.83256 5389.9589 2039.7325 2312.5375 131.6961 0 1710.3266 514098.34 -514902.67 75867.639 22408.275 975.26848 406.07565 - 40 2.9579411 9812.3728 6009.1747 806.70411 3803.1981 1442.3489 1826.1439 275.19367 0 1288.2864 513934.98 -514963.76 48675.043 22980.115 1057.0176 221.56359 - 60 4.3728549 8857.9452 5779.5973 775.8844 3078.348 1190.8978 1938.6134 328.6837 0 619.31805 513970.98 -514970.15 39710.61 23440.966 1050.9011 133.14424 - 80 5.817939 8115.7843 5997.9225 805.19356 2117.8618 901.84106 1587.5472 325.40763 0 288.34562 513957.43 -514942.71 37588.951 23834.833 1111.65 89.054921 - 100 7.207612 7496.2553 5770.3833 774.64747 1725.872 829.63908 1420.6659 325.4016 0 62.343574 514051.62 -514963.79 27294.064 24225.918 1080.2687 60.498472 - 120 8.656971 6986.593 5396.9479 724.51547 1589.6452 678.24993 1535.5197 325.88462 0 -9.6649617 514027.05 -514967.4 21720.902 24578.195 1016.3014 42.715636 - 140 10.075453 6549.0006 5126.6341 688.22709 1422.3665 724.95472 1477.7714 315.11964 0 -99.456486 513960.58 -514956.6 19747.307 24877.008 969.51239 30.977085 - 160 11.492728 6131.3317 5000.4421 671.2864 1130.8896 703.24858 1302.1192 314.93994 0 -258.4539 514042.29 -514973.25 23050.008 25142.654 948.73049 23.021806 - 180 12.899685 5749.9765 4700.9451 631.0803 1049.0314 674.94525 1301.4114 310.04938 0 -326.73679 514044.26 -514954.9 14225.485 25400.048 893.75893 17.322076 - 200 14.301162 5429.601 4392.5738 589.68286 1037.0272 612.00108 1296.2432 303.16019 0 -300.38658 514093.7 -514967.69 10835.073 25622.866 836.16806 13.764486 - 220 15.696118 5133.8318 4290.7369 576.01173 843.09487 572.51989 1261.8055 289.99072 0 -383.71584 514078.3 -514975.81 12509.826 25814.229 817.78562 11.104636 - 240 17.080213 4850.3856 4120.3632 553.13985 730.0224 553.79224 1263.6533 278.92142 0 -487.76523 514091.35 -514969.93 10891.878 25996.167 785.87194 9.360776 - 260 18.465174 4583.9875 3911.0361 525.03865 672.95138 541.52251 1175.1552 273.43365 0 -475.23638 514139.68 -514981.61 8086.1512 26168.96 746.55574 7.4653786 - 280 19.852883 4349.224 3692.2792 495.67153 656.9448 598.81912 1148.0997 278.8781 0 -444.09603 514045.38 -514970.13 5124.6373 26323.056 705.04252 6.4783461 - 300 21.231065 4128.9017 3579.5067 480.53234 549.39506 584.06591 1089.5131 267.69425 0 -456.87099 514043.55 -514978.56 8350.7757 26456.831 683.9437 5.2650983 - 320 22.561911 3913.7712 3456.9151 464.07498 456.85609 556.31985 1103.3901 263.88855 0 -485.54294 514000.27 -514981.47 9117.6459 26592.844 660.74075 4.5694113 - 340 23.929412 3712.7166 3258.4133 437.42702 454.30336 533.72419 1069.0448 271.85689 0 -454.53939 514001.97 -514967.75 7187.6779 26736.819 622.98237 3.8812919 - 360 25.298241 3533.3834 3024.1004 405.9716 509.283 522.55431 1104.3208 276.30858 0 -456.06655 514036.53 -514974.36 4554.9866 26876.658 578.31181 3.3031408 - 380 26.653809 3367.1792 2971.2716 398.87957 395.9076 508.27241 1059.2248 257.85685 0 -499.68496 514032.55 -514962.31 5645.8914 27002.069 568.38695 2.8305175 - 400 27.984353 3204.91 2874.2403 385.85357 330.6697 543.88404 1018.8809 231.0702 0 -519.33317 514029.07 -514972.9 7250.7332 27123.905 549.89179 2.5832582 - 420 29.327209 3050.6948 2776.6044 372.74639 274.09045 517.42853 953.07587 226.06727 0 -505.60565 514057.02 -514973.9 4026.2599 27250.314 531.28066 2.3360848 - 440 30.659683 2916.2839 2640.2361 354.43958 276.04784 507.06292 983.97321 236.01275 0 -534.64355 514059.65 -514976.01 1708.709 27364.195 505.24974 2.0766005 - 460 31.992583 2787.525 2609.5902 350.32551 177.93474 485.64363 933.57925 234.95003 0 -560.61762 514069.83 -514985.45 3400.5279 27458.081 499.48923 1.8097259 - 480 33.31755 2662.4984 2514.178 337.51686 148.32032 464.67048 928.26208 239.37956 0 -570.38407 514070.86 -514984.47 5084.8141 27547.559 481.26944 1.6441427 - 500 34.613889 2540.5549 2433.5506 326.693 107.00428 473.2945 888.73268 239.40601 0 -565.68704 514057.33 -514986.07 3134.3501 27643.279 465.87942 1.4891047 - 520 35.938482 2432.2066 2375.3401 318.8785 56.866542 460.28751 838.60926 229.00792 0 -579.13212 514093.74 -514985.64 468.2133 27732.471 454.76753 1.3789356 - 540 37.265891 2328.8169 2275.0595 305.41629 53.757389 473.08203 875.54175 220.60944 0 -604.11384 514075.79 -514987.16 2632.7788 27804.408 435.55773 1.3457265 - 560 38.585909 2228.615 2278.3234 305.85446 -49.708475 455.58479 820.87878 215.10334 0 -604.72924 514052.45 -514989 3784.1482 27875.141 436.2741 1.1341618 - 580 39.864162 2134.4158 2127.9962 285.67372 6.4195621 480.68268 836.80009 219.13915 0 -563.30768 514019.28 -514986.18 1359.5813 27951.068 407.46382 1.1159366 - 600 41.132397 2048.4786 2102.9549 282.31205 -54.476369 486.301 796.4297 225.04029 0 -574.89865 514003.04 -514990.39 -91.415091 28017.963 402.69767 1.0358319 - 620 42.405012 1967.4398 2048.4364 274.99318 -80.996617 477.38045 786.20744 223.98682 0 -570.14553 513997.93 -514996.35 1828.8595 28070.312 392.2521 1.022392 - 640 43.643353 1888.1318 1981.566 266.01614 -93.434276 482.74658 801.17689 222.6863 0 -557.43781 513952.32 -514994.92 3812.5364 28123.574 379.47296 0.92888928 - 660 44.915581 1813.0614 1959.0105 262.98817 -145.94913 498.25019 750.64037 217.17325 0 -556.66234 513938.55 -514993.9 1151.2432 28187.531 375.17108 0.87739869 - 680 46.131009 1744.832 1911.6741 256.63347 -166.84215 497.042 725.1867 211.01897 0 -553.89849 513944.3 -514990.49 108.93436 28245.999 366.12859 0.80270448 - 700 47.378681 1678.1626 1915.3894 257.13223 -237.22675 490.51486 719.69339 202.0347 0 -569.53306 513909.13 -514989.07 2213.2126 28294.676 366.86703 0.7415387 - 720 48.690897 1612.159 1862.0857 249.97645 -249.92665 500.42275 728.44427 190.27551 0 -551.64449 513871.72 -514989.15 3052.5203 28347.921 356.64837 0.74199709 - 740 49.934569 1549.9154 1792.3586 240.61591 -242.44316 497.29161 738.6029 175.53735 0 -547.70029 513880.64 -514986.81 738.07583 28409.346 343.29748 0.7047584 - 760 51.094031 1493.142 1799.8956 241.62772 -306.75355 503.57846 709.28495 169.315 0 -559.17689 513862.16 -514991.92 -783.63021 28463.359 344.75885 0.66625263 - 780 52.252971 1437.0347 1824.9884 244.99631 -387.95371 510.42774 661.31982 170.22096 0 -556.6031 513818.26 -514991.58 1267.2418 28503.342 349.56302 0.68065177 - 800 53.379442 1382.5833 1736.7991 233.1573 -354.21576 514.27927 697.39594 172.11416 0 -554.93314 513805.74 -514988.82 1744.7887 28543.483 332.6636 0.66505935 - 820 54.535354 1332.0444 1690.9869 227.00722 -358.94246 509.37721 686.56084 172.95747 0 -552.9503 513815.42 -514990.31 -146.04973 28586.706 323.91193 0.59356881 - 840 55.662329 1285.5292 1685.7755 226.30763 -400.2463 507.19453 662.75433 170.55434 0 -559.51859 513807.26 -514988.49 -690.17907 28621.308 322.91069 0.59874377 - 860 56.818479 1239.7941 1704.701 228.84829 -464.90694 495.88426 658.89439 170.35 0 -574.82793 513772.87 -514988.08 747.19844 28645.708 326.53594 0.60530564 - 880 57.943864 1195.2063 1673.557 224.66734 -478.35068 498.99876 648.88199 170.51747 0 -557.50857 513743.81 -514983.05 1172.7738 28670.551 320.58027 0.57096305 - 900 59.0976 1153.211 1639.9315 220.15327 -486.72046 502.47627 643.51354 178.69816 0 -556.38628 513730.32 -514985.34 -511.45034 28697.8 314.13849 0.56088797 - 920 60.220959 1114.1597 1616.0109 216.94205 -501.85117 514.79499 630.19604 179.36393 0 -549.5453 513714.55 -514991.21 -1422.3991 28716.8 309.54311 0.58363424 - 940 61.375362 1076.2186 1627.0408 218.42275 -550.82218 512.57892 621.31041 171.65194 0 -553.00757 513686.04 -514989.39 298.61672 28723.941 311.6754 0.54200743 - 960 62.499341 1040.0389 1613.5611 216.61317 -573.52223 511.50602 601.98148 170.02159 0 -546.21393 513682.82 -514993.64 795.9161 28731.421 309.07527 0.57946382 - 980 63.655075 1005.556 1568.0264 210.50035 -562.47043 514.81982 629.32987 175.28567 0 -544.55487 513654.62 -514991.97 -1246.9263 28741.462 300.35589 0.55675479 - 1000 64.806202 973.43261 1565.2247 210.12423 -591.79208 505.29272 600.76239 165.17131 0 -554.93533 513685.36 -514993.44 -1299.5982 28742.028 299.81847 0.55749205 - 1020 65.904504 942.29451 1571.0425 210.90525 -628.74802 506.25414 614.54444 152.41332 0 -569.19989 513660.6 -514993.36 -197.56562 28733.474 300.93111 0.56370125 - 1040 67.002294 912.00673 1595.282 214.15928 -683.27525 489.63949 569.70488 159.39981 0 -590.61096 513680.38 -514991.79 467.80409 28724.916 305.58073 0.55701412 - 1060 68.131496 883.21094 1542.2424 207.03896 -659.03142 503.00762 589.40955 165.92561 0 -599.75208 513674.64 -514992.26 -2147.8302 28718.434 295.39729 0.59345978 - 1080 69.232333 856.19557 1533.4133 205.85369 -677.21769 507.87992 576.5184 168.18594 0 -578.48413 513634.34 -514985.66 -1762.0347 28699.147 293.70385 0.59551254 - 1100 70.364775 831.37376 1484.1452 199.23968 -652.77147 514.07523 608.66719 163.10107 0 -567.48676 513613.52 -514984.65 33.310994 28670.682 284.25195 0.61206838 - 1120 71.467535 808.52739 1521.0421 204.19292 -712.51473 513.69276 561.64386 163.23813 0 -559.45919 513591.61 -514983.24 -310.61111 28645.19 291.32265 0.61797603 - 1140 72.601129 786.87835 1489.4671 199.95412 -702.58878 523.98829 584.70722 162.29577 0 -549.08561 513559.92 -514984.41 -1685.4255 28620.437 285.26086 0.63846185 - 1160 73.705792 766.63847 1508.1762 202.46573 -741.53775 514.32182 584.88936 152.54558 0 -535.15913 513525.59 -514983.73 -1902.1776 28587.352 288.83351 0.67096701 - 1180 74.841457 749.02843 1510.9898 202.84344 -761.96133 536.04857 571.2202 147.21017 0 -519.34217 513485.23 -514982.33 867.83936 28547.617 289.35403 0.71492747 - 1200 75.948637 733.34578 1503.6833 201.86257 -770.33748 533.86604 589.40444 152.04389 0 -519.58392 513457.87 -514983.94 16.285861 28517.381 287.94489 0.73468233 - 1220 77.086539 718.25616 1498.0744 201.1096 -779.81819 559.89022 564.22113 156.14265 0 -507.10566 513432.51 -514985.47 -1279.2454 28491.203 286.86449 0.74672427 - 1240 78.196455 704.4456 1488.8421 199.87022 -784.3965 566.03391 579.8182 161.3278 0 -468.50406 513361.56 -514984.64 -54.414997 28461.145 285.0822 0.7757678 - 1260 79.336046 693.03071 1494.0932 200.57516 -801.06253 573.59408 573.29809 158.50778 0 -453.3769 513333.73 -514986.81 977.78497 28434.874 286.06644 0.82806578 - 1280 80.450187 683.34372 1478.8974 198.53519 -795.55372 580.51573 596.90975 153.51449 0 -437.44107 513297.84 -514986.89 809.72996 28418.785 283.14058 0.85789606 - 1300 81.562086 675.21003 1490.4096 200.08064 -815.19955 586.94949 575.877 144.63393 0 -412.94901 513274.99 -514984.7 -448.50658 28409.979 285.3107 0.94374006 - 1320 82.704837 668.21879 1489.4584 199.95295 -821.23962 576.22292 605.97557 140.59647 0 -423.93742 513262.85 -514982.94 -41.054413 28400.286 285.13719 0.9231239 - 1340 83.820401 662.582 1506.0415 202.17916 -843.45952 580.69502 578.24319 144.89986 0 -430.94868 513260.2 -514976.55 977.60126 28392.044 288.28069 1.0060194 - 1360 84.965785 658.24059 1527.9683 205.12273 -869.7277 577.91541 570.19843 152.39114 0 -451.12207 513259.47 -514978.58 371.63239 28390.774 292.47304 1.0318294 - 1380 86.080907 654.92452 1486.6437 199.57509 -831.71915 580.08964 585.152 157.63831 0 -437.00747 513263.59 -514981.18 -247.9673 28392.439 284.5256 1.0911219 - 1400 87.195704 652.93764 1510.6586 202.79899 -857.721 568.92903 573.37125 151.89337 0 -426.43036 513257.39 -514982.88 -51.617883 28392.618 289.11402 1.1268379 - 1420 88.34689 651.93794 1494.4977 200.62946 -842.55979 571.38046 600.63765 145.50987 0 -443.12588 513270.14 -514987.1 743.13616 28392.861 285.98783 1.1924311 - 1440 89.493044 651.84231 1520.3977 204.10641 -868.55537 569.30886 591.50444 144.87083 0 -452.53315 513268.23 -514989.93 461.56063 28397.854 290.94803 1.2038182 - 1460 90.608597 652.79726 1538.7134 206.56522 -885.91619 576.98896 569.0177 144.49629 0 -461.96923 513277.97 -514992.42 -706.12558 28404.942 294.4277 1.2773313 - 1480 91.757208 654.35279 1560.3813 209.47403 -906.02856 573.31257 551.02062 151.79154 0 -471.83285 513285.31 -514995.63 -636.13512 28406.735 298.57005 1.3040147 - 1500 92.886091 656.18474 1535.2238 206.09675 -879.03909 565.77757 581.30733 155.02848 0 -493.04533 513302.18 -514990.29 143.11549 28404.04 293.73748 1.3269254 - 1520 94.042872 658.68485 1540.4536 206.79882 -881.76871 562.4227 566.55678 153.51217 0 -481.25224 513306.12 -514989.13 320.11741 28402.365 294.71422 1.3871403 - 1540 95.163877 662.00561 1525.2953 204.7639 -863.28974 547.96338 591.50659 150.34534 0 -461.18073 513297.4 -514989.32 -131.34055 28402.834 291.79671 1.4143192 - 1560 96.312922 666.1124 1506.6675 202.2632 -840.55513 559.7266 593.99441 157.20165 0 -475.77029 513317.32 -514993.02 -361.762 28402.279 288.23662 1.3888658 - 1580 97.430754 670.56531 1535.7659 206.16953 -865.20063 562.32491 577.33497 164.90914 0 -495.18787 513321.56 -514996.14 281.32907 28399.686 293.815 1.3885206 - 1600 98.548553 676.03467 1559.0361 209.29344 -883.00142 570.63265 568.63747 171.76131 0 -497.53636 513299.62 -514996.12 -83.071675 28398.615 298.25471 1.4380743 - 1620 99.69614 681.61565 1551.6098 208.29649 -869.99417 572.80627 589.25676 175.66645 0 -486.29635 513275.79 -514997.22 -1208.1908 28396.28 296.81124 1.4843702 - 1640 100.81368 687.56466 1565.2232 210.12403 -877.65855 578.7743 586.81939 173.9181 0 -490.97778 513266.56 -514992.76 -587.86248 28386.365 299.44244 1.4342399 - 1660 101.96336 693.76095 1558.3222 209.1976 -864.56124 583.58497 605.24119 171.44101 0 -488.52963 513255.46 -514991.76 335.92415 28373.356 298.0981 1.4841753 - 1680 103.08285 699.76249 1608.1314 215.88426 -908.36892 585.35458 590.64567 171.79357 0 -478.93732 513211.41 -514988.64 91.212095 28363.527 307.67509 1.4177962 - 1700 104.23343 705.16423 1586.5697 212.9897 -881.40546 609.44211 582.01973 172.76356 0 -457.12517 513197.39 -514985.89 -662.76266 28354.912 303.56619 1.3605633 - 1720 105.38429 709.98606 1609.0843 216.01219 -899.09829 612.02708 597.82638 167.68834 0 -444.72348 513153.41 -514985.33 -92.038463 28343.124 307.84128 1.4562833 - 1740 106.50511 714.51622 1579.8945 212.09359 -865.37833 624.49924 619.60972 166.03466 0 -425.9731 513136.37 -514985.92 1173.1099 28332.574 302.27863 1.3790325 - 1760 107.65668 718.07347 1624.056 218.02206 -905.9825 608.96798 597.96224 154.72096 0 -409.37211 513132.37 -514990.63 786.32681 28330.712 310.74964 1.3669913 - 1780 108.77729 720.46707 1606.3817 215.64937 -885.91465 639.71765 615.06161 152.57928 0 -394.48439 513088.38 -514987.17 -271.86201 28334.236 307.3761 1.3327989 - 1800 109.92899 721.98649 1608.1038 215.88055 -886.11732 621.68949 602.68633 163.61329 0 -397.09967 513111.57 -514988.58 587.45646 28336.693 307.73281 1.2707867 - 1820 111.05093 722.92155 1567.2948 210.40212 -844.3732 657.9717 609.80843 174.58395 0 -387.74403 513087.19 -514986.18 1657.5204 28343.522 299.9292 1.2250789 - 1840 112.17289 723.61458 1561.6308 209.64177 -838.01626 621.38222 638.008 181.56394 0 -392.76804 513100.91 -514987.12 951.04423 28360.92 298.8574 1.192447 - 1860 113.32517 724.57888 1559.5079 209.35678 -834.92903 648.61916 621.88348 182.62731 0 -413.59874 513115.13 -514989.59 -474.05956 28382.975 298.4495 1.1946089 - 1880 114.44655 725.74322 1588.6378 213.26733 -862.89459 616.10137 598.6142 185.03327 0 -431.03949 513153.5 -514985.11 326.23753 28401.004 304.06324 1.1258592 - 1900 115.60092 726.63642 1552.6045 208.43002 -825.96805 615.20719 632.90186 175.31959 0 -439.29325 513177.07 -514987.17 1080.7061 28419.738 297.15171 1.1348451 - 1920 116.72882 727.57597 1579.3221 212.01674 -851.74611 606.50987 618.17792 169.75157 0 -442.63284 513179.83 -514983.38 -43.794187 28443.345 302.3028 1.0665772 - 1940 117.88137 728.52961 1573.1141 211.18335 -844.58454 624.72383 626.3057 166.98593 0 -453.41808 513175.12 -514984.3 -900.58801 28464.403 301.13166 1.0223996 - 1960 119.003 728.94698 1626.2629 218.31833 -897.31596 599.28223 602.89095 166.05528 0 -470.08979 513190.07 -514985.52 -260.33773 28477.732 311.33029 0.99933978 - 1980 120.15553 728.20483 1628.3695 218.60113 -900.16467 612.33461 601.10447 163.81406 0 -448.48915 513155.61 -514984.54 821.49207 28488.285 311.74795 0.96708127 - 2000 121.27853 726.32991 1617.7225 217.17182 -891.39259 608.69121 604.99032 169.22497 0 -445.16887 513154.27 -514983.4 -472.67394 28502.073 309.74198 0.88520672 -Loop time of 121.279 on 1 procs for 2000 steps with 3000 atoms - -Pair time (%) = 55.4018 (45.6815) -Bond time (%) = 7.86978 (6.48901) -Kspce time (%) = 13.9231 (11.4803) -Neigh time (%) = 2.17099 (1.79008) -Comm time (%) = 0.43024 (0.354754) -Outpt time (%) = 0.0126977 (0.0104699) -Other time (%) = 41.4699 (34.194) - -Nlocal: 3000 ave 3000 max 3000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 10468 ave 10468 max 10468 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 662422 ave 662422 max 662422 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 662422 -Ave neighs/atom = 220.807 -Ave special neighs/atom = 10.5 -Neighbor list builds = 63 -Dangerous builds = 0 diff --git a/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.4 b/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.4 deleted file mode 100644 index 893c889b8b..0000000000 --- a/examples/USER/drude/ethanol/log.ethanol.nh.8Jul15.linux.4 +++ /dev/null @@ -1,263 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 -kspace_style pppm 1.0e-4 - -read_data data.ethanol - orthogonal box = (-14.0138 -14.0278 -14.0189) to (14.0169 14.0177 14.0857) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 3000 atoms - scanning bonds ... - 5 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2750 bonds - reading angles ... - 3250 angles - reading dihedrals ... - 3000 dihedrals - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 11 = max # of special neighbors - - -pair_coeff 1 1 lj/cut/coul/long 0.065997 3.500000 # C3H C3H -pair_coeff 1 2 lj/cut/coul/long 0.065997 3.500000 # C3H CTO -pair_coeff 1 3 lj/cut/coul/long 0.044496 2.958040 # C3H H -pair_coeff 1 4 lj/cut/coul/long 0.105921 3.304542 # C3H OH -pair_coeff 1 5 lj/cut/coul/long 0.000000 0.000000 # C3H HO -pair_coeff 2 2 lj/cut/coul/long 0.065997 3.500000 # CTO CTO -pair_coeff 2 3 lj/cut/coul/long 0.044496 2.958040 # CTO H -pair_coeff 2 4 lj/cut/coul/long 0.105921 3.304542 # CTO OH -pair_coeff 2 5 lj/cut/coul/long 0.000000 0.000000 # CTO HO -pair_coeff 3 3 lj/cut/coul/long 0.029999 2.500000 # H H -pair_coeff 3 4 lj/cut/coul/long 0.071413 2.792848 # H OH -pair_coeff 3 5 lj/cut/coul/long 0.000000 0.000000 # H HO -pair_coeff 4 4 lj/cut/coul/long 0.169996 3.120000 # OH OH -pair_coeff 4 5 lj/cut/coul/long 0.000000 0.000000 # OH HO -pair_coeff 5 5 lj/cut/coul/long 0.000000 0.000000 # HO HO -pair_coeff * 6*8 lj/cut/coul/long 0.000000 0.000000 # No lj for drudes -pair_coeff 1 1 thole 2.051000 -pair_coeff 1 2 thole 1.580265 -pair_coeff 1 4 thole 1.416087 -pair_coeff 1 6 thole 2.051000 -pair_coeff 1 7 thole 1.580265 -pair_coeff 1 8 thole 1.416087 -pair_coeff 2 2 thole 1.217570 -pair_coeff 2 4 thole 1.091074 -pair_coeff 2 6 thole 1.580265 -pair_coeff 2 7 thole 1.217570 -pair_coeff 2 8 thole 1.091074 -pair_coeff 4 4 thole 0.977720 -pair_coeff 4 6 thole 1.416087 -pair_coeff 4 7 thole 1.091074 -pair_coeff 4 8 thole 0.977720 -pair_coeff 6 6 thole 2.051000 -pair_coeff 6 7 thole 1.580265 -pair_coeff 6 8 thole 1.416087 -pair_coeff 7 7 thole 1.217570 -pair_coeff 7 8 thole 1.091074 -pair_coeff 8 8 thole 0.977720 - -group gETHANOL molecule 1:250 -3000 atoms in group gETHANOL -group gATOMS type 1 2 3 4 5 -2250 atoms in group gATOMS -group gDRUDES type 6 7 8 -750 atoms in group gDRUDES - - -neighbor 2.0 bin - -variable vTEMP equal 300.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gATOMS create ${vTEMP} 12345 -velocity gATOMS create 300 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C N C N D D D - -fix fSHAKE gATOMS shake 0.0001 20 0 b 2 3 5 - 250 = # of size 2 clusters - 250 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -comm_modify vel yes -compute cTEMP_ATOM gATOMS temp -compute cTEMP all temp/drude - -fix fDTDIR all drude/transform/direct -fix fNPT gATOMS npt temp ${vTEMP} ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 ${vTEMP} 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso ${vPRESS} ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso 1 ${vPRESS} 500 -fix fNPT gATOMS npt temp 300 300 100 iso 1 1 500 -fix_modify fNPT temp cTEMP_ATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1349) -fix fNVT gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 100.0 -fix fNVT gDRUDES nvt temp 1 ${vTEMP_D} 100.0 -fix fNVT gDRUDES nvt temp 1 1 100.0 -fix fDTINV all drude/transform/inverse - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 20 - -timestep 0.5 -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.379738 - grid = 30 30 30 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0289979 - estimated relative force accuracy = 8.73262e-05 - using double precision FFTs - 3d grid and FFT values/proc = 17908 7200 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 11 -New max number of 1-2 to 1-4 neighbors: 11 (+0) -Neighbor list info ... - 2 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 10 -Memory usage per processor = 13.7041 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume cTEMP[1] cTEMP[2] - 0 0 13868.828 2013.3852 270.28772 11855.443 3145.896 51.880809 0.00019113234 0 8481.5109 514734.14 -514557.98 170217.61 22094.109 381.62759 10.134301 - 20 0.48582006 11385.192 5995.2334 804.83256 5389.9589 2039.7325 2312.5375 131.6961 0 1710.3266 514098.34 -514902.67 75867.639 22408.275 975.26848 406.07565 - 40 0.99611902 9812.3727 6009.1747 806.70411 3803.198 1442.3489 1826.1439 275.19367 0 1288.2864 513934.98 -514963.76 48675.043 22980.115 1057.0177 221.56359 - 60 1.4878449 8857.9452 5779.5973 775.8844 3078.348 1190.8978 1938.6134 328.6837 0 619.31805 513970.98 -514970.15 39710.611 23440.966 1050.9011 133.14424 - 80 1.9926319 8115.7842 5997.9225 805.19356 2117.8617 901.84105 1587.5472 325.40763 0 288.34562 513957.43 -514942.71 37588.95 23834.833 1111.65 89.05492 - 100 2.476769 7496.2555 5770.3833 774.64747 1725.8722 829.63908 1420.6659 325.4016 0 62.343573 514051.62 -514963.79 27294.064 24225.918 1080.2687 60.498473 - 120 2.9719281 6986.5933 5396.9479 724.51547 1589.6454 678.24993 1535.5197 325.88462 0 -9.6649715 514027.05 -514967.4 21720.902 24578.195 1016.3014 42.715633 - 140 3.4472849 6549.0004 5126.6341 688.22709 1422.3663 724.95473 1477.7714 315.11964 0 -99.456489 513960.58 -514956.6 19747.305 24877.008 969.51239 30.977084 - 160 3.8980451 6131.3313 5000.4421 671.2864 1130.8892 703.24856 1302.1192 314.93994 0 -258.4539 514042.28 -514973.25 23050.008 25142.654 948.73049 23.021804 - 180 4.3219371 5749.9765 4700.9451 631.0803 1049.0314 674.94524 1301.4114 310.04938 0 -326.73679 514044.26 -514954.9 14225.484 25400.048 893.75892 17.322075 - 200 4.740237 5429.6012 4392.5738 589.68286 1037.0274 612.00109 1296.2432 303.16019 0 -300.38659 514093.7 -514967.69 10835.073 25622.866 836.16806 13.764486 - 220 5.15255 5133.8314 4290.7369 576.01173 843.09448 572.5199 1261.8055 289.99074 0 -383.71584 514078.3 -514975.81 12509.825 25814.229 817.78562 11.104636 - 240 5.5619049 4850.3859 4120.3634 553.13987 730.0225 553.79223 1263.6533 278.92141 0 -487.76524 514091.35 -514969.93 10891.878 25996.167 785.87197 9.3607763 - 260 5.9694359 4583.988 3911.0361 525.03865 672.95183 541.52258 1175.1553 273.43363 0 -475.23639 514139.68 -514981.61 8086.1508 26168.96 746.55574 7.4653781 - 280 6.3831999 4349.2238 3692.2792 495.67153 656.94461 598.81909 1148.0997 278.87809 0 -444.09603 514045.38 -514970.13 5124.6371 26323.056 705.04252 6.4783461 - 300 6.8002019 4128.9011 3579.5067 480.53234 549.39444 584.0659 1089.513 267.69426 0 -456.87099 514043.55 -514978.56 8350.7748 26456.831 683.94371 5.2650989 - 320 7.2020841 3913.7715 3456.9151 464.07498 456.85644 556.31985 1103.3901 263.8886 0 -485.54294 514000.27 -514981.47 9117.645 26592.844 660.74075 4.5694128 - 340 7.614501 3712.7165 3258.4132 437.42702 454.30329 533.72422 1069.0449 271.85681 0 -454.53938 514001.97 -514967.75 7187.6789 26736.819 622.98237 3.8812925 - 360 8.0251679 3533.3831 3024.1004 405.97159 509.28269 522.55432 1104.3208 276.30864 0 -456.06652 514036.53 -514974.36 4554.9866 26876.658 578.3118 3.3031414 - 380 8.4368989 3367.1791 2971.2717 398.87959 395.90735 508.27248 1059.2247 257.85692 0 -499.68504 514032.55 -514962.31 5645.8885 27002.069 568.38697 2.8305185 - 400 8.841274 3204.9102 2874.2407 385.85361 330.66952 543.884 1018.8809 231.07032 0 -519.33317 514029.07 -514972.9 7250.7314 27123.905 549.89185 2.58326 - 420 9.2528131 3050.6946 2776.6047 372.74643 274.08991 517.42853 953.07588 226.06762 0 -505.60561 514057.02 -514973.9 4026.258 27250.314 531.28072 2.3360857 - 440 9.6643951 2916.2842 2640.2367 354.43965 276.04748 507.06285 983.97334 236.01271 0 -534.64347 514059.65 -514976.01 1708.7076 27364.195 505.24986 2.0765971 - 460 10.070477 2787.525 2609.5902 350.3255 177.93484 485.64382 933.57906 234.95019 0 -560.61753 514069.83 -514985.45 3400.5283 27458.081 499.48921 1.8097272 - 480 10.475857 2662.4983 2514.1778 337.51682 148.3205 464.67048 928.2622 239.37954 0 -570.38391 514070.86 -514984.47 5084.8137 27547.559 481.26939 1.6441432 - 500 10.904204 2540.5544 2433.5504 326.69297 107.00399 473.29419 888.73276 239.40578 0 -565.68691 514057.33 -514986.07 3134.3575 27643.279 465.87938 1.4891037 - 520 11.343421 2432.2068 2375.3395 318.87842 56.867315 460.28707 838.60936 229.00812 0 -579.13202 514093.74 -514985.64 468.2212 27732.471 454.76741 1.3789343 - 540 11.792302 2328.8171 2275.0598 305.41633 53.757301 473.0817 875.54202 220.60952 0 -604.11383 514075.79 -514987.16 2632.7729 27804.408 435.55777 1.3457292 - 560 12.22888 2228.6146 2278.324 305.85454 -49.709377 455.5848 820.87873 215.10398 0 -604.72916 514052.45 -514989 3784.1433 27875.141 436.27421 1.1341637 - 580 12.654423 2134.4153 2127.9966 285.67378 6.418699 480.68271 836.79983 219.13997 0 -563.30761 514019.28 -514986.18 1359.5795 27951.068 407.46389 1.1159357 - 600 13.083667 2048.478 2102.9555 282.31212 -54.477504 486.30135 796.43014 225.04094 0 -574.89912 514003.04 -514990.39 -91.420338 28017.963 402.69778 1.0358317 - 620 13.5203 1967.44 2048.4369 274.99325 -80.99691 477.38009 786.20772 223.98767 0 -570.14552 513997.92 -514996.35 1828.852 28070.312 392.2522 1.022388 - 640 13.946543 1888.1309 1981.5653 266.01604 -93.434406 482.74621 801.17707 222.68721 0 -557.43764 513952.32 -514994.92 3812.5405 28123.574 379.47281 0.92888841 - 660 14.383896 1813.0614 1959.0076 262.98777 -145.94621 498.24936 750.64093 217.17501 0 -556.66175 513938.55 -514993.9 1151.2704 28187.531 375.17051 0.8773937 - 680 14.80455 1744.8321 1911.6727 256.63328 -166.84059 497.04089 725.18698 211.02114 0 -553.89822 513944.3 -514990.49 108.9445 28245.999 366.1283 0.80270876 - 700 15.246875 1678.1628 1915.389 257.13218 -237.22624 490.51443 719.69473 202.03683 0 -569.53274 513909.13 -514989.07 2213.2168 28294.676 366.86695 0.74153849 - 720 15.683303 1612.159 1862.0857 249.97646 -249.9267 500.42186 728.44302 190.2785 0 -551.64436 513871.73 -514989.15 3052.5153 28347.921 356.64838 0.74199104 - 740 16.103407 1549.912 1792.3564 240.61562 -242.44438 497.29156 738.60345 175.54129 0 -547.7015 513880.63 -514986.81 737.97658 28409.346 343.29706 0.70477013 - 760 16.533572 1493.1418 1799.8951 241.62766 -306.75333 503.57865 709.28516 169.31508 0 -559.17797 513862.16 -514991.92 -783.64904 28463.359 344.75876 0.66625709 - 780 16.963103 1437.0356 1824.9946 244.99715 -387.959 510.43018 661.31998 170.2197 0 -556.60498 513818.25 -514991.58 1267.2099 28503.341 349.56422 0.68065257 - 800 17.384911 1382.5837 1736.8044 233.15801 -354.22065 514.28158 697.39733 172.11237 0 -554.93413 513805.74 -514988.82 1744.7575 28543.482 332.66462 0.66506284 - 820 17.818295 1332.0449 1690.9863 227.00714 -358.94137 509.37962 686.56323 172.95557 0 -552.94994 513815.42 -514990.31 -146.04099 28586.704 323.91181 0.59356692 - 840 18.239769 1285.5293 1685.7656 226.30629 -400.23625 507.19659 662.75791 170.55111 0 -559.5183 513807.26 -514988.49 -690.12588 28621.306 322.90879 0.59871543 - 860 18.672279 1239.7943 1704.6913 228.84697 -464.89697 495.88249 658.89516 170.34465 0 -574.82534 513772.88 -514988.07 747.30519 28645.706 326.53407 0.60529545 - 880 19.094243 1195.2074 1673.5516 224.66662 -478.34417 498.99767 648.88222 170.51909 0 -557.50585 513743.81 -514983.05 1172.8191 28670.55 320.57923 0.57095732 - 900 19.530344 1153.213 1639.9317 220.1533 -486.71872 502.48114 643.51414 178.70544 0 -556.38218 513730.3 -514985.34 -511.40662 28697.799 314.13852 0.56091919 - 920 19.954644 1114.1622 1615.9735 216.93702 -501.81127 514.7973 630.19712 179.3982 0 -549.54237 513714.55 -514991.21 -1422.316 28716.8 309.53594 0.58362776 - 940 20.390261 1076.2212 1626.9734 218.41371 -550.75226 512.58732 621.31396 171.70796 0 -553.00677 513686.03 -514989.39 298.59388 28723.942 311.66248 0.54203006 - 960 20.813949 1040.0451 1613.5266 216.60854 -573.48149 511.51922 601.98585 170.02867 0 -546.21382 513682.83 -514993.63 795.90454 28731.424 309.06864 0.57947773 - 980 21.252467 1005.5683 1568.0671 210.50581 -562.49882 514.83412 629.32638 175.23649 0 -544.55558 513654.63 -514991.97 -1246.8402 28741.467 300.36369 0.55676445 - 1000 21.687328 973.43654 1565.2947 210.13362 -591.85814 505.31069 600.76156 165.13032 0 -554.93709 513685.33 -514993.45 -1299.6769 28742.033 299.8319 0.55747244 - 1020 22.104826 942.30585 1571.1252 210.91634 -628.81931 506.25625 614.52982 152.39206 0 -569.20109 513660.58 -514993.37 -197.40138 28733.481 300.94692 0.5637722 - 1040 22.524452 912.01118 1595.3373 214.16671 -683.32616 489.65166 569.71087 159.37841 0 -590.61264 513680.34 -514991.8 467.8096 28724.925 305.59134 0.55703469 - 1060 22.949422 883.20635 1542.2363 207.03814 -659.02996 503.02658 589.43979 165.92415 0 -599.75711 513674.6 -514992.27 -2148.0784 28718.444 295.39616 0.59339691 - 1080 23.371693 856.19688 1533.476 205.86212 -677.27914 507.92146 576.49892 168.14482 0 -578.48635 513634.3 -514985.66 -1762.3643 28699.157 293.71591 0.59543987 - 1100 23.796874 831.36718 1484.0494 199.22681 -652.68218 514.09435 608.64804 163.13622 0 -567.49464 513613.56 -514984.63 33.441222 28670.69 284.23352 0.61219688 - 1120 24.215957 808.52756 1520.8457 204.16656 -712.31817 513.70662 561.61909 163.36198 0 -559.46566 513591.68 -514983.22 -310.69178 28645.197 291.28494 0.61812087 - 1140 24.641242 786.87445 1489.3947 199.9444 -702.52028 523.97711 584.65081 162.32286 0 -549.07998 513560 -514984.39 -1685.574 28620.442 285.24697 0.63849523 - 1160 25.055568 766.64827 1508.2693 202.47822 -741.62101 514.35266 584.91055 152.45332 0 -535.165 513525.54 -514983.72 -1901.0493 28587.357 288.85135 0.67096559 - 1180 25.482658 749.02928 1511.1172 202.86054 -762.08788 536.05747 571.22043 147.19144 0 -519.37083 513485.14 -514982.32 866.88063 28547.627 289.37844 0.71496578 - 1200 25.894749 733.35099 1503.6268 201.85499 -770.27581 533.87098 589.37041 152.16808 0 -519.57804 513457.84 -514983.94 14.805399 28517.39 287.93411 0.73458768 - 1220 26.325628 718.27504 1498.0867 201.11126 -779.81165 559.91487 564.18647 156.27378 0 -507.13199 513432.42 -514985.48 -1279.1075 28491.202 286.86673 0.74700594 - 1240 26.738918 704.4507 1488.7649 199.85985 -784.31417 566.05166 579.79847 161.35046 0 -468.44357 513361.55 -514984.62 -53.3159 28461.135 285.06732 0.77592838 - 1260 27.171522 693.03769 1494.1149 200.57807 -801.07721 573.62194 573.3094 158.43371 0 -453.27917 513333.62 -514986.78 977.9179 28434.863 286.07064 0.82794452 - 1280 27.586875 683.35215 1479.0049 198.54962 -795.65277 580.54264 596.95031 153.53994 0 -437.44286 513297.62 -514986.86 808.24663 28418.774 283.16101 0.85830865 - 1300 28.005456 675.21985 1490.3973 200.079 -815.1775 586.97926 575.85031 144.74048 0 -412.9591 513274.88 -514984.67 -448.16581 28409.96 285.30833 0.9437975 - 1320 28.436763 668.22782 1489.1302 199.90889 -820.90236 576.19343 605.89694 140.779 0 -423.95547 513263.1 -514982.91 -40.766531 28400.261 285.0744 0.92283057 - 1340 28.854671 662.60827 1506.0283 202.17738 -843.42002 580.70797 578.1842 144.8341 0 -430.96333 513260.37 -514976.56 977.60336 28392.015 288.27815 1.0060347 - 1360 29.284718 658.23752 1527.6526 205.08035 -869.41511 577.91716 570.16602 152.14574 0 -451.11548 513260.04 -514978.56 374.82603 28390.744 292.41271 1.031412 - 1380 29.707547 654.96847 1486.4979 199.55551 -831.52939 580.08595 585.05597 157.33942 0 -437.07207 513264.24 -514981.18 -245.84993 28392.431 284.49746 1.0915693 - 1400 30.132399 652.9829 1510.7519 202.81151 -857.76902 568.8718 573.40304 151.53282 0 -426.40132 513257.71 -514982.89 -48.059208 28392.645 289.13172 1.1272637 - 1420 30.56509 652.00089 1494.6519 200.65015 -842.65097 571.38637 600.46686 145.25854 0 -443.09809 513270.44 -514987.1 744.84418 28392.941 286.01743 1.1922923 - 1440 30.993519 651.93656 1520.3356 204.09807 -868.39904 569.20772 591.53184 144.73613 0 -452.45231 513268.58 -514990 462.47894 28397.996 290.93612 1.2038241 - 1460 31.413554 652.8797 1538.7905 206.57555 -885.91076 576.968 569.3361 144.29397 0 -461.95958 513278 -514992.55 -703.88926 28405.143 294.44272 1.2767432 - 1480 31.854234 654.43984 1560.998 209.55681 -906.55813 573.32119 550.83703 151.55603 0 -471.87704 513285.3 -514995.69 -634.5939 28407.003 298.6883 1.3039308 - 1500 32.258767 656.25668 1535.2085 206.0947 -878.95186 565.7821 581.34544 155.11099 0 -493.26681 513302.34 -514990.27 141.09795 28404.376 293.73526 1.3252685 - 1520 32.667376 658.76245 1540.1255 206.75478 -881.36305 562.28162 566.2439 153.62339 0 -481.21787 513306.74 -514989.04 320.45957 28402.754 294.65144 1.3869014 - 1540 33.067487 662.13708 1524.8473 204.70375 -862.71024 547.98628 591.76817 150.15973 0 -460.97843 513297.6 -514989.25 -130.86158 28403.27 291.71099 1.413931 - 1560 33.480413 666.19858 1506.8716 202.29059 -840.67298 559.57219 594.04584 156.75269 0 -475.69342 513317.61 -514992.96 -357.4244 28402.761 288.27566 1.3890257 - 1580 33.881172 670.71346 1535.3958 206.11984 -864.68236 562.04024 577.64202 164.82634 0 -495.24757 513322.21 -514996.15 278.58466 28400.233 293.74325 1.3903967 - 1600 34.282713 676.13061 1559.338 209.33397 -883.20743 570.25038 568.59163 172.20015 0 -497.5923 513299.59 -514996.24 -86.394917 28399.201 298.31271 1.4378209 - 1620 34.693053 681.80099 1552.6868 208.44108 -870.88582 572.69475 589.3952 176.11924 0 -485.89655 513274.18 -514997.38 -1204.2981 28396.883 297.01677 1.4865321 - 1640 35.094327 687.72244 1565.9114 210.21642 -878.189 578.48421 587.25138 174.28163 0 -490.691 513265.29 -514992.8 -581.44816 28387.006 299.57429 1.4344443 - 1660 35.50466 693.90688 1558.2867 209.19283 -864.37979 583.51938 605.39763 171.58103 0 -488.26355 513255.15 -514991.76 341.26177 28374.079 298.09208 1.4823162 - 1680 35.905614 699.81947 1608.5571 215.9414 -908.73759 585.45342 590.42357 171.65094 0 -478.75081 513211.28 -514988.8 77.131096 28364.346 307.75695 1.4172031 - 1700 36.320681 705.27021 1587.164 213.06948 -881.89376 609.44479 581.8672 172.3033 0 -457.17018 513197.71 -514986.05 -666.39751 28355.734 303.6806 1.3594258 - 1720 36.728727 710.00906 1608.1379 215.88513 -898.12885 612.49125 598.01777 167.03198 0 -445.09105 513154.85 -514985.42 -87.720392 28343.913 307.66062 1.454487 - 1740 37.130271 714.53567 1580.0753 212.11786 -865.53967 624.57295 619.34825 165.15138 0 -426.77348 513138.14 -514985.98 1176.8164 28333.357 302.31339 1.3787996 - 1760 37.542675 718.03805 1624.8218 218.12487 -906.78379 608.77029 596.31671 153.7484 0 -409.62158 513134.59 -514990.59 800.3654 28331.535 310.89569 1.3688034 - 1780 37.943518 720.37511 1609.0275 216.00455 -888.65236 640.15257 613.63079 151.83793 0 -394.53333 513087.34 -514987.08 -257.84624 28335.192 307.88341 1.3325434 - 1800 38.353172 721.7956 1606.901 215.71908 -885.1054 621.86791 602.54827 163.37359 0 -396.5738 513111.86 -514988.19 600.83028 28337.874 307.50221 1.2708112 - 1820 38.755103 722.6791 1563.6639 209.9147 -840.98481 658.28036 609.55302 175.97253 0 -386.62661 513087.76 -514985.92 1673.6509 28345.014 299.23272 1.2261086 - 1840 39.156883 723.36526 1560.0643 209.43147 -836.69905 621.56238 639.2919 183.25684 0 -391.12333 513097.3 -514986.98 948.98786 28362.795 298.55837 1.1894608 - 1860 39.568864 724.34062 1560.3485 209.46963 -836.00792 648.95076 621.00344 183.45409 0 -412.61997 513112.89 -514989.69 -494.41519 28385.176 298.60946 1.1973936 - 1880 39.96934 725.55016 1589.2514 213.34971 -863.70126 617.1181 598.13412 185.78351 0 -430.81566 513151.32 -514985.25 301.61577 28403.364 304.1812 1.1250834 - 1900 40.379241 726.4494 1555.4145 208.80726 -828.96513 616.25066 631.90687 175.77829 0 -439.44651 513173.5 -514986.96 1079.4893 28422.072 297.69125 1.1328664 - 1920 40.778163 727.328 1577.4105 211.76012 -850.08251 606.30559 616.55697 170.46944 0 -442.17245 513181.84 -514983.08 4.4471417 28445.679 301.93699 1.065083 - 1940 41.186491 728.19228 1574.1105 211.3171 -845.91818 625.03022 624.89302 167.86917 0 -451.74938 513172.29 -514984.25 -891.08022 28467.03 301.3211 1.026012 - 1960 41.58233 728.61768 1624.4163 218.07043 -895.79862 599.93561 599.92993 167.38843 0 -465.99755 513188.14 -514985.2 -216.32489 28480.762 310.97645 0.99894847 - 1980 41.996931 727.92162 1627.8345 218.52931 -899.91293 612.92861 601.82319 165.16403 0 -447.59836 513151.59 -514983.82 865.41931 28491.981 311.64212 0.97473559 - 2000 42.398021 726.10625 1615.3704 216.85607 -889.26418 609.59944 604.55036 169.50136 0 -443.24252 513152.61 -514982.28 -436.06261 28506.736 309.2898 0.88821892 -Loop time of 42.3981 on 4 procs for 2000 steps with 3000 atoms - -Pair time (%) = 14.495 (34.1878) -Bond time (%) = 2.06082 (4.86065) -Kspce time (%) = 7.76109 (18.3053) -Neigh time (%) = 0.634993 (1.49769) -Comm time (%) = 1.07386 (2.53281) -Outpt time (%) = 0.0100121 (0.0236145) -Other time (%) = 16.3623 (38.5921) - -Nlocal: 750 ave 774 max 711 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 5796.5 ave 5864 max 5731 min -Histogram: 1 0 0 1 0 0 1 0 0 1 -Neighs: 165579 ave 169096 max 157793 min -Histogram: 1 0 0 0 0 0 0 0 1 2 - -Total # of neighbors = 662315 -Ave neighs/atom = 220.772 -Ave special neighs/atom = 10.5 -Neighbor list builds = 63 -Dangerous builds = 0 diff --git a/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.1 b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.1 new file mode 100644 index 0000000000..f68de51a79 --- /dev/null +++ b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.1 @@ -0,0 +1,246 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/coul/long 12.0 12.0 +kspace_style pppm 1.0e-3 + +comm_modify vel yes +read_data data.swm4-ndp + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2500 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 2000 bonds + reading angles ... + 500 angles + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 3 = max # of 1-4 neighbors + 4 = max # of special neighbors + +pair_coeff 1 1 0.210939 3.183950 # ODw ODw +pair_coeff * 2* 0.000000 0.0 + +group ATOMS type 1:3 +2000 atoms in group ATOMS +group CORES type 1 +500 atoms in group CORES +group DRUDES type 4 +500 atoms in group DRUDES + +variable TK equal 300.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +neighbor 2.0 bin + +timestep 1.0 + +fix DRUDE all drude C N N D + +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 300 12345 +velocity DRUDES create ${TDK} 12345 +velocity DRUDES create 1 12345 + +delete_bonds ATOMS multi +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 3375 1000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 4 +New max number of 1-2 to 1-4 neighbors: 4 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + 2000 total bonds, 500 turned on, 1500 turned off + 500 total angles, 0 turned on, 500 turned off + 0 total dihedrals, 0 turned on, 0 turned off + 0 total impropers, 0 turned on, 0 turned off + +fix TEMP all langevin/drude ${TK} 100. 1256 ${TDK} 20. 13977 zero yes +fix TEMP all langevin/drude 300 100. 1256 ${TDK} 20. 13977 zero yes +fix TEMP all langevin/drude 300 100. 1256 1 20. 13977 zero yes +fix NPH ATOMS rigid/nph/small molecule iso ${PBAR} ${PBAR} 500. +fix NPH ATOMS rigid/nph/small molecule iso 1 ${PBAR} 500. +fix NPH ATOMS rigid/nph/small molecule iso 1 1 500. +500 rigid bodies with 2000 atoms + 0.832099 = max distance from body owner to body atom +fix NVE DRUDES nve + +compute TEMP all temp/drude + +thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] +thermo 20 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 3375 1000 +Per MPI rank memory allocation (min/avg/max) = 36.15 | 36.15 | 36.15 Mbytes +Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp c_TEMP[1] c_TEMP[2] + 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 + 20 1.2941742 2882.4586 4527.8074 -1645.3488 561.72856 0 600.34616 155114.77 -157922.19 27167.701 14058.741 1013.3326 1438.6699 160.63128 + 40 2.6812835 1331.3822 3348.9313 -2017.5492 681.52311 0 553.09465 154668.62 -157920.79 17925.928 14484.215 749.4977 1105.2032 36.587791 + 60 4.0337768 297.35951 2604.4137 -2307.0542 583.99973 0 409.03992 154634.74 -157934.83 13017.752 15026.564 582.87312 864.55899 18.335647 + 80 5.3483341 -374.31059 2263.3247 -2637.6353 534.80336 0 212.27979 154543.18 -157927.9 6155.9233 15645.855 506.53672 755.45209 7.6929097 + 100 6.6217718 -905.58895 1911.7191 -2817.308 532.30402 0 87.570164 154497.48 -157934.66 2149.3102 16288.797 427.84665 639.27768 4.1289095 + 120 7.8588221 -1233.6892 1675.0884 -2908.7776 544.76423 0 59.500422 154422.72 -157935.76 233.49801 16915.818 374.88821 560.54178 2.8313109 + 140 8.9570706 -1463.4914 1468.7447 -2932.2361 539.69696 0 41.083518 154424.91 -157937.93 -1492.9875 17509.345 328.70809 491.66367 2.1395091 + 160 10.032995 -1695.7544 1385.9606 -3081.7149 552.9156 0 30.022825 154274.72 -157939.37 -3010.5044 18061.925 310.18082 463.9681 1.9858861 + 180 11.181687 -1818.1852 1253.1677 -3071.3529 559.57415 0 20.017285 154289.69 -157940.63 -3354.2207 18564.877 280.4615 419.5755 1.6725842 + 200 12.212811 -1949.6488 1210.0648 -3159.7136 570.0554 0 16.320167 154195.04 -157941.13 -4117.951 19014.456 270.81499 405.06855 1.7662371 + 220 13.224296 -2031.6068 1148.1459 -3179.7527 598.02848 0 30.832907 154127.13 -157935.75 -4514.6121 19406.767 256.95741 384.33718 1.6839577 + 240 14.315843 -2118.6272 1120.0031 -3238.6303 613.29235 0 59.889003 154030.6 -157942.41 -4415.1885 19738.97 250.659 374.93927 1.5971322 + 260 15.300218 -2203.4151 1065.8468 -3269.2619 614.19212 0 77.618884 153980.71 -157941.79 -4563.8872 20011.077 238.53871 356.80712 1.5248251 + 280 16.273073 -2317.9388 1033.2702 -3351.2091 650.51355 0 126.14935 153811.62 -157939.49 -4722.8063 20224.149 231.248 345.84878 1.5839508 + 300 17.240341 -2377.6039 992.48386 -3370.0878 688.02302 0 179.7828 153701.2 -157939.1 -4125.8573 20378.438 222.11992 332.08746 1.7406198 + 320 18.20275 -2419.6151 1023.0261 -3442.6412 720.31006 0 227.7006 153549.39 -157940.04 -4083.286 20479.24 228.95535 342.33558 1.7369708 + 340 19.161978 -2456.7614 1048.823 -3505.5844 754.12989 0 264.46876 153415.73 -157939.91 -3894.4573 20529.72 234.72874 351.04481 1.6271431 + 360 20.2149 -2504.7183 1041.9917 -3546.71 785.42914 0 335.38633 153271.5 -157939.03 -3464.0342 20531.324 233.19988 348.66948 1.7942822 + 380 21.17402 -2596.3611 1000.1227 -3596.4839 825.3161 0 390.15783 153129.43 -157941.39 -3357.8641 20490.649 223.82952 334.61582 1.8092697 + 400 22.139238 -2666.6886 1006.4834 -3673.172 866.01231 0 422.49717 152978.53 -157940.22 -3329.7321 20411.001 225.25305 336.79329 1.7220591 + 420 23.107117 -2676.0182 1036.9614 -3712.9796 909.17035 0 490.73558 152826 -157938.88 -2909.4385 20294.307 232.07409 346.93054 1.8970578 + 440 24.079176 -2731.6451 1054.3541 -3785.9992 935.99044 0 530.99271 152684.71 -157937.69 -2566.5271 20147.069 235.96661 352.81301 1.8018782 + 460 25.058476 -2808.7306 996.20963 -3804.9403 986.66566 0 582.2501 152565.84 -157939.7 -2490.6211 19973.642 222.95376 333.32458 1.7662208 + 480 26.045001 -2862.5602 1012.8284 -3875.3886 1005.2147 0 610.1273 152450.46 -157941.19 -2032.2463 19777.578 226.67307 338.84478 1.876307 + 500 27.043275 -2935.1165 989.42859 -3924.5451 1019.8833 0 633.91479 152362.53 -157940.87 -2210.2423 19561.788 221.43615 331.0551 1.7553824 + 520 28.052607 -2989.5984 969.48801 -3959.0864 1057.825 0 655.88112 152268.64 -157941.44 -2303.725 19328.454 216.97341 324.39473 1.6968168 + 540 29.169729 -3036.3745 1016.2059 -4052.5804 1091.3747 0 658.52433 152140.18 -157942.65 -2235.4034 19080.73 227.42896 340.04854 1.7349328 + 560 30.202366 -3093.8922 946.57093 -4040.4631 1140.9835 0 764.01213 151997.25 -157942.71 -1159.9486 18819.788 211.84452 316.62558 1.85871 + 580 31.245469 -3165.5156 988.32907 -4153.8446 1198.6661 0 795.79314 151795.81 -157944.12 -1299.7687 18555.467 221.19007 330.67963 1.7685771 + 600 32.305233 -3193.4945 981.48315 -4174.9776 1207.1636 0 842.25251 151717.63 -157942.02 -845.49527 18290.083 219.65794 328.37122 1.7920774 + 620 33.378728 -3254.0556 966.92094 -4220.9766 1219.0239 0 848.81235 151653.93 -157942.75 -633.10425 18027.72 216.39889 323.4395 1.8848743 + 640 34.465769 -3267.9659 1003.5996 -4271.5655 1273.644 0 929.19275 151468.58 -157942.99 146.55456 17770.457 224.60765 335.70351 1.9667214 + 660 35.565967 -3292.3649 1001.1012 -4293.4661 1299.7838 0 957.48532 151393.06 -157943.79 252.79622 17523.772 224.0485 334.86273 1.9719336 + 680 36.678817 -3311.7859 1008.4763 -4320.2622 1356.4829 0 987.54908 151279.12 -157943.41 715.95691 17290.15 225.69907 337.35795 1.9299071 + 700 37.804361 -3384.7539 970.95734 -4355.7113 1376.9176 0 1003.218 151209.28 -157945.12 602.03837 17070.444 217.30224 324.76399 1.9441468 + 720 38.944631 -3389.983 1003.4282 -4393.4112 1388.0708 0 1009.042 151153.78 -157944.31 799.15462 16864.409 224.5693 335.74485 1.7690575 + 740 40.095444 -3390.8892 1011.8969 -4402.786 1395.7801 0 1060.0508 151084.65 -157943.27 1475.2637 16672.377 226.4646 338.45322 2.034426 + 760 41.257411 -3430.7027 1037.7609 -4468.4636 1415.8714 0 1069.0374 150989.87 -157943.24 1304.5866 16496.661 232.25301 347.18143 1.9316673 + 780 42.432308 -3457.167 1031.0329 -4488.1999 1428.7433 0 1114.4772 150912.91 -157944.33 1885.5157 16338.236 230.74728 344.90463 1.9710957 + 800 43.614638 -3510.8663 985.5619 -4496.4282 1454.853 0 1136.1159 150858.74 -157946.14 1646.2494 16199.542 220.57078 329.56096 2.1492639 + 820 44.806214 -3561.3122 954.7588 -4516.071 1480.1009 0 1122.7071 150826.81 -157945.69 1635.0446 16080.49 213.67698 319.29136 2.0208705 + 840 46.008772 -3574.3488 957.87693 -4532.2258 1470.2766 0 1075.5497 150865.51 -157943.56 1501.6257 15978.031 214.37482 320.32468 2.0463654 + 860 47.215247 -3579.685 964.25763 -4543.9426 1434.0326 0 1038.1021 150929.67 -157945.75 1011.7367 15888.91 215.80284 322.50392 1.9690629 + 880 48.426587 -3621.2356 959.70408 -4580.9397 1439.8947 0 1036.0768 150886.22 -157943.13 506.78826 15810.176 214.78374 320.9264 2.0688639 + 900 49.644699 -3666.1303 946.8746 -4613.0049 1466.4484 0 1064.2478 150801.81 -157945.51 1109.1589 15739.244 211.91248 316.66479 1.9840376 + 920 50.870043 -3689.2489 931.40538 -4620.6543 1504.5475 0 1112.6525 150708.42 -157946.28 1403.0057 15677.776 208.45044 311.4521 2.0302083 + 940 52.10243 -3721.3501 909.43101 -4630.7811 1542.2534 0 1138.863 150634.25 -157946.14 1347.0651 15627.828 203.53253 304.13886 1.9127999 + 960 53.227722 -3765.0247 879.73583 -4644.7606 1542.4842 0 1151.7551 150607.39 -157946.39 1704.8479 15589.06 196.88668 294.16244 1.9413966 + 980 54.463265 -3768.795 907.84469 -4676.6397 1541.4855 0 1133.986 150593.62 -157945.73 1307.1066 15561.731 203.1775 303.56604 1.9940794 + 1000 55.701727 -3785.8075 880.81809 -4666.6256 1521.7209 0 1096.2695 150662.35 -157946.97 970.21043 15543.592 197.1289 294.56486 1.8627129 + 1020 56.889708 -3802.4725 921.96298 -4724.4355 1530.0248 0 1066.8927 150623.76 -157945.11 4.0693062 15531.676 206.33721 308.27171 2.0555342 + 1040 58.073551 -3805.5983 892.97259 -4698.5709 1517.1505 0 1090.904 150638.66 -157945.28 814.78747 15522.075 199.8491 298.65131 1.8449766 + 1060 59.268992 -3814.9754 904.37152 -4719.3469 1516.0462 0 1073.1076 150635.42 -157943.93 352.09813 15517.26 202.4002 302.40986 1.9760806 + 1080 60.368197 -3799.7772 900.93602 -4700.7132 1525.3102 0 1076.0639 150645.06 -157947.15 399.96911 15516.854 201.63133 301.25571 1.9793146 + 1100 61.57456 -3802.9637 891.80847 -4694.7721 1493.3846 0 1048.571 150708.35 -157945.08 296.41566 15520.259 199.58857 298.21614 1.9342423 + 1120 62.780309 -3783.7153 915.24553 -4698.9609 1504.5486 0 1057.5171 150684.14 -157945.17 489.89871 15526.377 204.83383 306.05465 1.9825112 + 1140 63.986179 -3799.4039 915.28328 -4714.6872 1498.182 0 1037.3595 150696.49 -157946.72 -57.392244 15535.825 204.84228 306.06136 1.9944283 + 1160 65.193113 -3821.1813 889.41687 -4710.5981 1485.5696 0 1035.222 150714.63 -157946.02 -132.88199 15546.599 199.05332 297.34747 2.0669157 + 1180 66.295017 -3815.3668 883.81796 -4699.1847 1475.1971 0 1029.0735 150742.62 -157946.07 -12.015088 15557.826 197.80027 295.60821 1.7888039 + 1200 67.501339 -3799.2243 924.83203 -4724.0563 1503.6728 0 1039.8081 150676.17 -157943.71 -279.42673 15568.706 206.97931 309.25452 2.0149166 + 1220 68.70749 -3793.2571 918.16669 -4711.4238 1500.7028 0 1072.1543 150660.33 -157944.61 396.95956 15579.039 205.48759 307.10011 1.8515828 + 1240 69.913097 -3807.1761 903.62796 -4710.804 1518.0566 0 1098.727 150617.61 -157945.19 571.77344 15592.05 202.23379 302.09539 2.1061249 + 1260 71.120192 -3813.0785 928.88909 -4741.9676 1522.8082 0 1080.2068 150602.14 -157947.12 143.45803 15608.285 207.88729 310.67334 1.8994019 + 1280 72.221799 -3825.0477 896.43989 -4721.4876 1498.3409 0 1057.1098 150667.73 -157944.67 -469.23041 15626.738 200.62509 299.78768 1.8986521 + 1300 73.424948 -3846.2307 907.67631 -4753.907 1477.8354 0 1013.4733 150700.69 -157945.9 -661.19665 15644.394 203.13982 303.56549 1.8822105 + 1320 74.627469 -3829.941 882.93628 -4712.8773 1476.7417 0 1016.2042 150741.02 -157946.85 -14.196904 15658.043 197.60295 295.24326 1.9271172 + 1340 75.833837 -3851.5034 857.32804 -4708.8314 1465.5881 0 1021.2072 150749.47 -157945.1 -96.242387 15669.364 191.87178 286.7037 1.8241831 + 1360 76.936204 -3860.3024 888.18647 -4748.4888 1464.1796 0 984.93111 150747.8 -157945.4 -974.33424 15678.357 198.77795 297.0089 1.9185093 + 1380 78.140865 -3836.5819 880.98802 -4717.5699 1461.9764 0 985.01748 150781.29 -157945.85 -872.9259 15682.263 197.16693 294.58145 1.9435476 + 1400 79.344863 -3828.5386 906.27947 -4734.8181 1482.8705 0 991.46422 150736.59 -157945.74 -1233.9461 15680.599 202.82721 303.0834 1.909166 + 1420 80.548134 -3814.3258 902.48807 -4716.8139 1475.6502 0 1014.0056 150738.18 -157944.65 -555.01708 15672.591 201.97868 301.83062 1.8708541 + 1440 81.755274 -3856.0851 862.48793 -4718.573 1498.2382 0 1065.2356 150663.3 -157945.35 32.56482 15661.106 193.02657 288.38598 1.9216938 + 1460 82.860741 -3844.5162 901.31045 -4745.8266 1509.4529 0 1079.4605 150610.73 -157945.47 187.59843 15650.274 201.71513 301.41292 1.9161214 + 1480 84.068614 -3830.9341 924.4504 -4755.3845 1492.3743 0 1043.7244 150654.84 -157946.33 -493.49005 15640.167 206.8939 309.17217 1.9235617 + 1500 85.277247 -3837.3277 905.31407 -4742.6418 1493.7224 0 1030.5512 150679.62 -157946.53 -614.09435 15628.452 202.61115 302.74791 1.9324006 + 1520 86.48688 -3826.0085 909.05297 -4735.0615 1484.1418 0 1034.4558 150691.85 -157945.51 -146.17552 15614.976 203.44792 304.03751 1.8618391 + 1540 87.592599 -3841.6696 938.60068 -4780.2703 1507.974 0 1041.0705 150616.87 -157946.18 -507.85898 15599.499 210.06076 313.85613 2.0498944 + 1560 88.805017 -3826.9957 909.65333 -4736.649 1544.8227 0 1126.866 150538.2 -157946.54 606.26354 15581.816 203.58228 304.19548 1.9487298 + 1580 90.020651 -3832.1768 912.93266 -4745.1095 1574.5895 0 1176.6062 150449.01 -157945.31 1282.9622 15569.746 204.3162 305.24469 2.0505914 + 1600 91.237675 -3854.9438 913.45738 -4768.4012 1573.5937 0 1137.9072 150465.94 -157945.85 833.4472 15566.901 204.43364 305.43089 2.0302658 + 1620 92.456385 -3858.2579 926.48289 -4784.7408 1547.7966 0 1104.6836 150506.72 -157943.94 175.66142 15569.538 207.34877 309.84283 1.9459647 + 1640 93.67173 -3891.1815 918.17278 -4809.3543 1552.442 0 1100.5019 150484.4 -157946.7 -21.914006 15574.644 205.48895 307.0691 1.9176872 + 1660 94.887992 -3919.3626 865.63387 -4784.9964 1520.4861 0 1071.2498 150569.18 -157945.91 76.169452 15580.674 193.73064 289.45503 1.8943961 + 1680 96.104407 -3895.1048 904.57852 -4799.6834 1528.5992 0 1025.321 150591.92 -157945.52 -806.96969 15586.13 202.44653 302.49383 1.9470391 + 1700 97.217725 -3867.858 892.51088 -4760.3689 1529.7738 0 1070.8486 150584.86 -157945.86 140.65618 15587.548 199.74577 298.38679 2.0642365 + 1720 98.434344 -3893.3744 901.29331 -4794.6677 1574.0498 0 1116.4639 150460.62 -157945.8 58.347282 15588.502 201.71129 301.37785 1.974756 + 1740 99.650283 -3863.7002 920.58199 -4784.2822 1591.6512 0 1158.7562 150411.66 -157946.35 690.62331 15590.533 206.02814 307.90557 1.8612258 + 1760 100.86726 -3861.1571 936.31333 -4797.4705 1577.1868 0 1147.145 150425.93 -157947.74 479.33327 15596.819 209.54885 313.12745 1.9725316 + 1780 102.08407 -3902.9055 937.9542 -4840.8597 1574.1479 0 1089.8436 150439.21 -157944.06 -423.26154 15606.503 209.91608 313.72161 1.8851726 + 1800 103.30044 -3924.3367 882.83761 -4807.1743 1548.9296 0 1083.4742 150506.67 -157946.25 -165.30212 15613.782 197.58087 295.18333 1.9807824 + 1820 104.51493 -3933.257 906.13467 -4839.3917 1566.2208 0 1066.4802 150474.1 -157946.19 -704.84936 15618.451 202.7948 303.015 1.948802 + 1840 105.73189 -3925.7774 886.11608 -4811.8935 1541.3194 0 1071.3574 150522.01 -157946.58 -603.17056 15617.998 198.3146 296.30423 1.9386975 + 1860 106.94721 -3888.206 921.52432 -4809.7304 1579.4857 0 1109.6812 150447.64 -157946.54 104.6013 15613.197 206.23903 308.2177 1.8692298 + 1880 108.06014 -3916.0862 918.21234 -4834.2985 1583.1417 0 1094.2365 150433.88 -157945.56 -253.01422 15607.47 205.49781 306.96538 2.1516579 + 1900 109.27602 -3899.0882 918.64022 -4817.7285 1556.1431 0 1115.1484 150457.92 -157946.94 -143.94816 15600.312 205.59357 307.17307 2.0233622 + 1920 110.49415 -3920.9798 896.1905 -4817.1703 1548.5569 0 1085.0712 150496.68 -157947.48 -337.28194 15592.107 200.56927 299.64783 2.0110119 + 1940 111.71421 -3968.3536 874.10309 -4842.4567 1572.4606 0 1094.9587 150436.32 -157946.19 -303.02321 15581.696 195.62607 292.28508 1.9167899 + 1960 112.93472 -3934.8475 883.5952 -4818.4427 1591.4146 0 1141.0692 150394.9 -157945.83 393.7304 15568.475 197.75042 295.48636 1.883029 + 1980 114.15483 -3907.4423 937.55746 -4844.9997 1643.691 0 1216.6376 150240.27 -157945.59 815.94743 15556.713 209.82728 313.50122 2.0597469 + 2000 115.37626 -3925.4165 915.08958 -4840.506 1623.4406 0 1190.2236 150292.14 -157946.31 519.99833 15550.966 204.79893 305.95187 2.083444 +Loop time of 115.376 on 1 procs for 2000 steps with 2500 atoms + +Performance: 1.498 ns/day, 16.024 hours/ns, 17.335 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 97.091 | 97.091 | 97.091 | 0.0 | 84.15 +Bond | 0.031897 | 0.031897 | 0.031897 | 0.0 | 0.03 +Kspace | 3.7648 | 3.7648 | 3.7648 | 0.0 | 3.26 +Neigh | 10.041 | 10.041 | 10.041 | 0.0 | 8.70 +Comm | 0.79701 | 0.79701 | 0.79701 | 0.0 | 0.69 +Output | 0.0071344 | 0.0071344 | 0.0071344 | 0.0 | 0.01 +Modify | 3.5966 | 3.5966 | 3.5966 | 0.0 | 3.12 +Other | | 0.0467 | | | 0.04 + +Nlocal: 2500 ave 2500 max 2500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 21222 ave 21222 max 21222 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.30826e+06 ave 2.30826e+06 max 2.30826e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2308257 +Ave neighs/atom = 923.303 +Ave special neighs/atom = 4 +Neighbor list builds = 100 +Dangerous builds = 6 + +Total wall time: 0:01:55 diff --git a/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.4 b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.4 new file mode 100644 index 0000000000..c6a45c4ab5 --- /dev/null +++ b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.lang.g++.4 @@ -0,0 +1,246 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/coul/long 12.0 12.0 +kspace_style pppm 1.0e-3 + +comm_modify vel yes +read_data data.swm4-ndp + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2500 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 2000 bonds + reading angles ... + 500 angles + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 3 = max # of 1-4 neighbors + 4 = max # of special neighbors + +pair_coeff 1 1 0.210939 3.183950 # ODw ODw +pair_coeff * 2* 0.000000 0.0 + +group ATOMS type 1:3 +2000 atoms in group ATOMS +group CORES type 1 +500 atoms in group CORES +group DRUDES type 4 +500 atoms in group DRUDES + +variable TK equal 300.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +neighbor 2.0 bin + +timestep 1.0 + +fix DRUDE all drude C N N D + +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 300 12345 +velocity DRUDES create ${TDK} 12345 +velocity DRUDES create 1 12345 + +delete_bonds ATOMS multi +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 1500 300 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 4 +New max number of 1-2 to 1-4 neighbors: 4 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + 2000 total bonds, 500 turned on, 1500 turned off + 500 total angles, 0 turned on, 500 turned off + 0 total dihedrals, 0 turned on, 0 turned off + 0 total impropers, 0 turned on, 0 turned off + +fix TEMP all langevin/drude ${TK} 100. 1256 ${TDK} 20. 13977 zero yes +fix TEMP all langevin/drude 300 100. 1256 ${TDK} 20. 13977 zero yes +fix TEMP all langevin/drude 300 100. 1256 1 20. 13977 zero yes +fix NPH ATOMS rigid/nph/small molecule iso ${PBAR} ${PBAR} 500. +fix NPH ATOMS rigid/nph/small molecule iso 1 ${PBAR} 500. +fix NPH ATOMS rigid/nph/small molecule iso 1 1 500. +500 rigid bodies with 2000 atoms + 0.832099 = max distance from body owner to body atom +fix NVE DRUDES nve + +compute TEMP all temp/drude + +thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] +thermo 20 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 1500 300 +Per MPI rank memory allocation (min/avg/max) = 18.29 | 18.3 | 18.3 Mbytes +Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp c_TEMP[1] c_TEMP[2] + 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 + 20 0.3966074 2915.1579 4579.5774 -1664.4194 561.91893 0 600.76451 155095.13 -157922.23 27379.771 14058.574 1024.9188 1455.9194 160.86778 + 40 0.81358027 1320.1722 3337.6372 -2017.4651 726.83344 0 585.5439 154587.28 -157917.12 18749.425 14485.651 746.97006 1101.4061 36.530914 + 60 1.2173033 284.06793 2671.4324 -2387.3645 575.54155 0 387.8792 154580.74 -157931.53 12104.74 15031.425 597.87206 886.98502 18.450412 + 80 1.6120358 -462.53073 2214.284 -2676.8148 560.36346 0 254.65244 154447.22 -157939.05 6285.2446 15651.216 495.56131 739.13811 7.4024414 + 100 1.9901412 -965.1962 1839.8309 -2805.0271 544.5953 0 115.80813 154469.59 -157935.02 2361.9408 16295.72 411.75794 615.12768 4.1969771 + 120 2.4076366 -1316.6354 1649.5851 -2966.2205 554.66642 0 50.928948 154365.49 -157937.3 -493.85718 16925.293 369.18054 552.03453 2.7331858 + 140 2.7559175 -1590.9197 1440.667 -3031.5867 526.07695 0 -24.440541 154404.35 -157937.57 -2586.3198 17517.285 322.42423 482.1612 2.2975751 + 160 3.1113834 -1742.3406 1326.8813 -3069.2219 539.49038 0 -43.846686 154369.1 -157933.96 -3549.2199 18059.707 296.95875 444.11027 2.0644718 + 180 3.4379854 -1895.133 1224.1815 -3119.3145 555.27915 0 -18.261199 154275.94 -157932.27 -3762.2323 18545.519 273.97433 409.78407 1.8069068 + 200 3.772357 -2004.4681 1176.8827 -3181.3508 565.04401 0 0.21397152 154190.38 -157936.99 -4346.6082 18973.343 263.38877 393.94854 1.740057 + 220 4.0741081 -2094.1886 1098.386 -3192.5745 592.45711 0 36.50232 154113.36 -157934.89 -4135.0776 19341.735 245.82103 367.67719 1.6170754 + 240 4.3758588 -2178.9977 1086.8337 -3265.8313 617.63759 0 96.837785 153957.25 -157937.56 -4121.8002 19651.8 243.23561 363.77451 1.6722528 + 260 4.6875975 -2264.8204 1078.4367 -3343.2571 663.36053 0 167.77029 153763.13 -157937.51 -3799.2337 19907.053 241.35634 360.97449 1.6377088 + 280 4.9870708 -2325.8017 1097.4329 -3423.2346 717.74153 0 235.01385 153562.93 -157938.92 -3696.4866 20111.415 245.60773 367.30986 1.7042226 + 300 5.2866828 -2390.4714 1068.102 -3458.5734 751.64774 0 295.31519 153435.36 -157940.9 -3511.7651 20268.755 239.04342 357.49315 1.6658672 + 320 5.587172 -2455.1882 1041.7365 -3496.9247 765.89806 0 331.14936 153345 -157938.97 -3020.2521 20383.476 233.14276 348.62201 1.7179837 + 340 5.8844874 -2536.9586 1050.7417 -3587.7004 793.64691 0 352.69902 153205.76 -157939.81 -3447.4347 20457.614 235.15816 351.64191 1.7214644 + 360 6.1785333 -2603.5522 966.91828 -3570.4705 819.14562 0 391.00832 153158.88 -157939.51 -3164.7275 20490.766 216.3983 323.52165 1.7255664 + 380 6.475884 -2594.7716 1024.7965 -3619.5682 836.45788 0 434.31956 153047.12 -157937.46 -2902.8144 20485.924 229.35156 342.91613 1.7641391 + 400 6.7656763 -2647.3629 982.4772 -3629.8401 864.60508 0 479.09794 152963.5 -157937.04 -2535.5559 20447.667 219.88041 328.70004 1.8030439 + 420 7.0558476 -2687.5292 1023.0073 -3710.5365 928.03183 0 538.52272 152760.85 -157937.94 -2383.1875 20380.424 228.95113 342.29995 1.8044464 + 440 7.3502834 -2765.1784 999.349 -3764.5274 966.2891 0 577.16135 152631.19 -157939.17 -2390.6308 20286.677 223.65636 334.36519 1.794568 + 460 7.6480289 -2806.7277 1004.2012 -3810.9289 996.86402 0 599.42684 152532.82 -157940.04 -2476.2951 20168.787 224.74229 335.9677 1.8474231 + 480 7.9473393 -2830.1149 1013.7084 -3843.8233 1009.5457 0 624.67244 152464.69 -157942.73 -2208.5836 20027.763 226.87003 339.15378 1.8588625 + 500 8.2545588 -2849.2101 1033.8059 -3883.016 1018.8936 0 665.65423 152373.57 -157941.13 -1864.5049 19866.3 231.36788 345.90443 1.8323172 + 520 8.591975 -2883.363 982.80834 -3866.1713 1046.7496 0 716.08257 152311.55 -157940.55 -1180.4653 19690.017 219.95452 328.79387 1.8393955 + 540 8.9018662 -2922.4604 979.55307 -3902.0135 1068.293 0 739.88796 152230.57 -157940.76 -1048.6961 19504.92 219.22599 327.7909 1.6577051 + 560 9.2518864 -2966.9519 973.53114 -3940.4831 1078.4149 0 742.20771 152177.5 -157938.6 -840.75895 19313.099 217.87827 325.70841 1.7798986 + 580 9.5821679 -3053.0997 924.19412 -3977.2939 1102.7966 0 751.05657 152109.51 -157940.66 -919.12753 19115.431 206.83654 309.16882 1.7634757 + 600 9.9095862 -3062.7056 960.18758 -4022.8932 1105.4131 0 725.33328 152088.02 -157941.66 -1565.9872 18911.303 214.89195 321.19255 1.860965 + 620 10.237109 -3087.2168 1011.0151 -4098.2319 1138.4545 0 715.92859 151990.05 -157942.66 -1858.9668 18697.232 226.26725 338.29838 1.752463 + 640 10.571446 -3104.3903 1013.9671 -4118.3574 1151.4213 0 771.17657 151902.66 -157943.62 -1042.667 18472.317 226.92791 339.23913 1.8477429 + 660 10.904144 -3140.5527 1003.0482 -4143.6009 1209.2262 0 856.88154 151734.42 -157944.13 -209.63558 18243.884 224.48425 335.54573 1.90792 + 680 11.269296 -3178.318 984.55406 -4162.872 1244.5687 0 912.27932 151624.96 -157944.68 342.27035 18019.714 220.34522 329.38006 1.8427138 + 700 11.61204 -3220.4931 991.39835 -4211.8914 1287.1899 0 958.87881 151484.75 -157942.71 561.06968 17805.512 221.87699 331.61354 1.9544592 + 720 11.956387 -3270.5677 968.72596 -4239.2937 1318.9328 0 1005.2488 151379.5 -157942.98 980.32825 17604.484 216.80286 324.06313 1.8724276 + 740 12.307601 -3290.3786 992.65117 -4283.0298 1300.6067 0 994.6404 151364.88 -157943.15 981.03868 17418.67 222.15737 332.13302 1.7636245 + 760 12.709807 -3328.535 955.47413 -4284.0092 1326.3889 0 996.60158 151337.63 -157944.63 1057.2942 17247.311 213.83707 319.58671 1.9099364 + 780 13.073534 -3357.4814 992.18506 -4349.6664 1339.5541 0 988.34064 151267.55 -157945.11 569.82212 17090.619 222.05305 331.88822 1.9447924 + 800 13.464632 -3375.243 920.44154 -4295.6846 1344.9357 0 1033.5805 151270.88 -157945.08 1522.7002 16947.373 205.99671 307.8875 1.8152213 + 820 13.825511 -3384.8564 957.24296 -4342.0994 1353.9907 0 1040.4762 151209.02 -157945.59 1664.2884 16820.422 214.23294 320.13875 1.9919112 + 840 14.161551 -3422.503 978.5056 -4401.0087 1362.0589 0 1015.2074 151166.38 -157944.65 799.30788 16709.133 218.99156 327.32752 1.887971 + 860 14.533048 -3467.9469 967.207 -4435.1539 1359.5363 0 1012.6359 151135.59 -157942.92 781.21407 16610.402 216.46291 323.49791 1.9571626 + 880 14.90632 -3453.3858 998.28194 -4451.6677 1357.904 0 965.66218 151167.88 -157943.11 327.66041 16521.416 223.41755 333.88219 2.0414314 + 900 15.304111 -3462.8392 980.22919 -4443.0684 1356.3167 0 986.69144 151157.82 -157943.9 1027.2464 16438.193 219.37731 327.82432 2.0328217 + 920 15.679265 -3447.1555 973.44396 -4420.5994 1360.7957 0 1016.6188 151146.99 -157945 1288.3873 16362.953 217.85876 325.51992 2.1081109 + 940 16.057773 -3481.2586 989.56656 -4470.8252 1370.2709 0 978.71463 151124.98 -157944.79 462.51008 16297.794 221.46703 330.96437 2.0294765 + 960 16.417333 -3513.0231 967.65653 -4480.6797 1332.0395 0 924.14851 151207.66 -157944.53 130.65949 16238.731 216.56352 323.68471 1.8694768 + 980 16.809043 -3552.9742 930.52856 -4483.5028 1369.5671 0 943.1948 151148.51 -157944.78 162.05947 16182.544 208.2542 311.18346 1.9699974 + 1000 17.204374 -3547.8316 928.6749 -4476.5065 1345.2729 0 939.82999 151183.66 -157945.27 165.47858 16127.801 207.83935 310.6291 1.8515304 + 1020 17.596776 -3544.884 939.68436 -4484.5683 1339.8295 0 954.31534 151165.65 -157944.37 520.88879 16074.311 210.30329 314.30017 1.8816955 + 1040 17.979123 -3574.7347 918.01852 -4492.7532 1348.2798 0 985.63357 151118.04 -157944.71 667.98123 16024.2 205.45443 307.00947 1.9378696 + 1060 18.387169 -3558.0092 961.56557 -4519.5748 1357.9517 0 960.15956 151105.93 -157943.62 125.05193 15979.251 215.20035 321.61047 1.9569155 + 1080 18.773684 -3578.9948 924.98329 -4503.9781 1328.198 0 963.29308 151149.83 -157945.3 446.98896 15936.835 207.01316 309.36635 1.8873208 + 1100 19.16304 -3608.0441 897.53939 -4505.5835 1374.0861 0 1014.8258 151052.01 -157946.5 903.7649 15898.367 200.87116 300.13546 1.9333063 + 1120 19.575293 -3614.8945 952.97919 -4567.8736 1384.5634 0 1021.0735 150973.5 -157947.01 900.30601 15866.787 213.2787 318.78179 1.850125 + 1140 19.971095 -3618.8945 941.15802 -4560.0526 1413.1629 0 1052.0922 150920.8 -157946.1 946.48705 15842.856 210.6331 314.72329 2.0381081 + 1160 20.367334 -3593.6555 965.54035 -4559.1959 1410.1926 0 1056.4577 150917.31 -157943.16 1255.7185 15827.388 216.08991 322.92339 1.9871263 + 1180 20.80204 -3616.5746 928.17105 -4544.7457 1396.8419 0 1016.2295 150986.13 -157943.95 787.12503 15820.166 207.72659 310.40871 1.9519704 + 1200 21.354242 -3640.0065 913.1866 -4553.1931 1389.564 0 1003.0365 150999.43 -157945.23 124.9066 15819.562 204.37304 305.34426 2.0128932 + 1220 21.797356 -3633.6726 951.90864 -4585.5813 1378.6589 0 960.35277 151020.87 -157945.46 18.165228 15822.414 213.03911 318.39602 1.9062762 + 1240 22.183053 -3647.5993 945.94087 -4593.5401 1389.2708 0 951.90886 151011.29 -157946.01 -36.466949 15826.558 211.70351 316.39869 1.8959 + 1260 22.604321 -3652.8431 945.01497 -4597.8581 1429.1559 0 1004.3575 150913.05 -157944.42 362.05633 15830.563 211.49629 316.0745 1.946701 + 1280 22.99465 -3653.7982 950.39456 -4604.1928 1435.3114 0 1049.5949 150856.36 -157945.46 625.62312 15836.724 212.70025 317.85889 1.9726129 + 1300 23.381442 -3629.7936 957.73231 -4587.5259 1443.1612 0 1053.2561 150860.98 -157944.93 702.06174 15846.916 214.34246 320.25498 2.0929604 + 1320 23.76752 -3646.7132 952.84473 -4599.5579 1452.1034 0 1053.24 150842.08 -157946.98 574.37181 15862.45 213.24861 318.70565 1.9106871 + 1340 24.144538 -3671.1813 963.35534 -4634.5366 1444.4873 0 998.25657 150869.14 -157946.42 -322.65814 15883.001 215.6009 322.16079 2.04787 + 1360 24.525885 -3706.8433 911.96869 -4618.812 1408.7597 0 994.56958 150923.67 -157945.81 -57.178556 15902.95 204.10046 304.98731 1.9206183 + 1380 24.900833 -3729.8666 893.54172 -4623.4083 1421.5285 0 989.13168 150911.03 -157945.1 -299.2294 15921.536 199.97647 298.78606 1.9572022 + 1400 25.273009 -3793.6665 896.59455 -4690.261 1407.5033 0 927.03218 150922.27 -157947.07 -1625.2355 15935.372 200.6597 299.82059 1.9326242 + 1420 25.649713 -3798.9041 894.49834 -4693.4024 1387.2314 0 908.98338 150956.58 -157946.2 -1336.2681 15939.126 200.19057 299.08979 1.99336 + 1440 26.019568 -3770.2203 926.96956 -4697.1899 1408.3234 0 930.94218 150909.09 -157945.54 -1479.4839 15931.76 207.45769 309.99863 1.9420101 + 1460 26.391048 -3765.611 925.8388 -4691.4498 1453.7458 0 991.60997 150809.05 -157945.85 -840.19764 15915.083 207.20462 309.58977 2.0206113 + 1480 26.764417 -3775.5533 897.45722 -4673.0106 1448.3682 0 1017.1514 150806.55 -157945.08 -350.56805 15893.71 200.85277 300.10571 1.945031 + 1500 27.13281 -3774.5729 890.65309 -4665.226 1446.7764 0 1001.4176 150830.42 -157943.84 -410.46342 15870.464 199.32999 297.86004 1.8712264 + 1520 27.500265 -3789.599 873.98319 -4663.5822 1442.1868 0 1012.8814 150826.03 -157944.68 24.399796 15844.317 195.59923 292.31265 1.7812003 + 1540 27.868039 -3799.4214 879.9876 -4679.409 1470.7765 0 1043.5857 150751.8 -157945.57 -117.3494 15817.531 196.94303 294.27937 1.8764714 + 1560 28.237804 -3808.5737 884.02221 -4692.5959 1476.2544 0 1031.065 150745.8 -157945.71 -134.38328 15790.497 197.84599 295.60533 1.9624808 + 1580 28.614069 -3810.3826 881.02258 -4691.4052 1494.8044 0 1056.2914 150703.91 -157946.41 143.72796 15761.802 197.17466 294.61532 1.9194335 + 1600 28.98594 -3811.3999 900.38301 -4711.7829 1484.7896 0 1008.1585 150740.82 -157945.55 -606.18902 15732.936 201.50757 301.08426 1.975131 + 1620 29.390152 -3806.3652 923.83116 -4730.1964 1451.5712 0 974.75532 150788.99 -157945.52 -803.66402 15700.793 206.75531 308.94868 1.9548773 + 1640 29.770757 -3780.4823 926.08598 -4706.5682 1473.3966 0 1001.2541 150764.99 -157946.2 -267.61953 15664.228 207.25994 309.69886 1.9804041 + 1660 30.150359 -3781.8554 904.38999 -4686.2453 1480.8669 0 1044.4828 150733.32 -157944.92 334.93631 15626.039 202.40434 302.41882 1.9682532 + 1680 30.535691 -3806.1604 913.1776 -4719.338 1495.1709 0 1047.1796 150684.96 -157946.64 187.42287 15589.003 204.37102 305.37701 1.9489831 + 1700 30.914774 -3833.9683 889.78762 -4723.756 1506.0651 0 1085.1426 150631.7 -157946.67 484.91155 15553.147 199.1363 297.62268 1.7777001 + 1720 31.295628 -3842.1369 894.05081 -4736.1877 1523.554 0 1111.0586 150574.13 -157944.93 644.7439 15520.678 200.09041 298.99568 1.8760829 + 1740 31.688478 -3846.6021 868.65036 -4715.2525 1537.3591 0 1138.8056 150555.14 -157946.56 899.91638 15492.771 194.40573 290.47895 1.8712221 + 1760 32.046871 -3857.9528 883.26637 -4741.2192 1542.993 0 1087.2616 150575.49 -157946.97 551.51344 15470.089 197.67683 295.29782 2.0345443 + 1780 32.474213 -3871.4941 935.07928 -4806.5734 1526.7468 0 1036.0478 150576.57 -157945.93 -636.02229 15449.192 209.27266 312.71251 1.9801693 + 1800 32.86394 -3840.4408 916.271 -4756.7118 1576.9326 0 1100.9058 150511.02 -157945.57 628.83596 15425.726 205.06333 306.41471 1.9480945 + 1820 33.2544 -3863.8057 928.94676 -4792.7524 1566.8662 0 1091.867 150492.97 -157944.46 127.39479 15404.045 207.90019 310.61713 2.0438685 + 1840 33.654639 -3866.4315 882.39729 -4748.8287 1571.1231 0 1116.2191 150510.49 -157946.66 775.21837 15384.034 197.48232 295.08631 1.8701078 + 1860 34.049358 -3854.7362 943.50575 -4798.2419 1598.0765 0 1094.2606 150455.31 -157945.89 -185.76137 15367.771 211.15852 315.55119 1.9664963 + 1880 34.452703 -3862.4907 910.1166 -4772.6073 1551.4788 0 1069.6982 150551.3 -157945.09 75.157314 15353.364 203.68596 304.30419 2.0643731 + 1900 34.820253 -3879.6568 921.99593 -4801.6528 1541.8636 0 1071.1404 150530.01 -157944.67 -243.29034 15340.544 206.34458 308.28647 2.0409636 + 1920 35.24159 -3914.6053 894.91511 -4809.5205 1545.6295 0 1087.8419 150502.25 -157945.24 585.4907 15327.629 200.28384 299.29163 1.8721306 + 1940 35.641894 -3916.7204 893.69522 -4810.4157 1558.0228 0 1078.6893 150498.47 -157945.6 -213.58892 15315.774 200.01082 298.82901 1.9662798 + 1960 36.036489 -3916.4155 889.43523 -4805.8507 1569.5342 0 1087.2216 150483.46 -157946.07 197.26075 15304.142 199.05743 297.4414 1.897782 + 1980 36.439917 -3885.2222 890.76008 -4775.9823 1562.1737 0 1087.3549 150520.37 -157945.88 448.96019 15293.261 199.35393 297.81895 2.0239285 + 2000 36.842032 -3890.9997 883.71903 -4774.7187 1561.3244 0 1092.1688 150517.76 -157945.97 292.74093 15284.861 197.77813 295.50959 1.9186189 +Loop time of 36.8421 on 4 procs for 2000 steps with 2500 atoms + +Performance: 4.690 ns/day, 5.117 hours/ns, 54.286 timesteps/s +97.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 24.965 | 26.526 | 28.829 | 27.6 | 72.00 +Bond | 0.011653 | 0.012315 | 0.013344 | 0.6 | 0.03 +Kspace | 1.5367 | 3.8315 | 5.3771 | 72.2 | 10.40 +Neigh | 2.6221 | 2.6225 | 2.6227 | 0.0 | 7.12 +Comm | 1.2339 | 1.2536 | 1.2758 | 1.3 | 3.40 +Output | 0.0057538 | 0.0073775 | 0.012186 | 3.2 | 0.02 +Modify | 2.4848 | 2.5068 | 2.5296 | 1.2 | 6.80 +Other | | 0.08209 | | | 0.22 + +Nlocal: 625 ave 639 max 613 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Nghost: 13529.2 ave 13635 max 13449 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Neighs: 587190 ave 645917 max 526348 min +Histogram: 1 0 0 1 0 0 1 0 0 1 + +Total # of neighbors = 2348759 +Ave neighs/atom = 939.504 +Ave special neighs/atom = 4 +Neighbor list builds = 102 +Dangerous builds = 7 + +Total wall time: 0:00:36 diff --git a/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.1 b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.1 new file mode 100644 index 0000000000..54fe5ecb01 --- /dev/null +++ b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.1 @@ -0,0 +1,252 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/coul/long 12.0 12.0 +kspace_style pppm 1.0e-3 + +read_data data.swm4-ndp + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2500 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 2000 bonds + reading angles ... + 500 angles + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 3 = max # of 1-4 neighbors + 4 = max # of special neighbors + +pair_coeff 1 1 0.210939 3.183950 # ODw ODw +pair_coeff * 2* 0.000000 0.0 + +group ATOMS type 1:3 +2000 atoms in group ATOMS +group CORES type 1 +500 atoms in group CORES +group DRUDES type 4 +500 atoms in group DRUDES + +variable TK equal 300.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +neighbor 2.0 bin + +timestep 1.0 + +fix DRUDE all drude C N N D + +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 300 12345 +velocity DRUDES create ${TDK} 12345 +velocity DRUDES create 1 12345 + +delete_bonds ATOMS multi +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 3375 1000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 4 +New max number of 1-2 to 1-4 neighbors: 4 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + 2000 total bonds, 500 turned on, 1500 turned off + 500 total angles, 0 turned on, 500 turned off + 0 total dihedrals, 0 turned on, 0 turned off + 0 total impropers, 0 turned on, 0 turned off + +comm_modify vel yes +compute TATOM ATOMS temp/com +compute TEMP all temp/drude + +fix DTDIR all drude/transform/direct +fix RIGID ATOMS rigid/npt/small molecule temp ${TK} ${TK} 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 ${TK} 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 1 500 +500 rigid bodies with 2000 atoms + 0.832099 = max distance from body owner to body atom +fix_modify RIGID temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/RIGID/fix_rigid_nh_small.cpp:1338) +fix NVT DRUDES nvt temp ${TDK} ${TDK} 100.0 +fix NVT DRUDES nvt temp 1 ${TDK} 100.0 +fix NVT DRUDES nvt temp 1 1 100.0 +fix DTINV all drude/transform/inverse + +thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] +thermo 20 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 3375 1000 +Per MPI rank memory allocation (min/avg/max) = 36.15 | 36.15 | 36.15 Mbytes +Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp c_TEMP[1] c_TEMP[2] + 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 + 20 1.3635511 3742.6843 5338.7884 -1596.1041 567.30749 0 662.23765 155098.37 -157924.01 31679.425 13979.574 1194.8318 1690.2246 201.65659 + 40 2.8319206 2752.8326 4407.7651 -1654.9326 793.00136 0 870.3308 154593.76 -157912.03 27394.569 14278.56 986.46689 1450.7477 55.932383 + 60 4.2769592 1995.5898 3982.037 -1986.4472 660.67727 0 750.60931 154536.67 -157934.4 22230.525 14691.401 891.18805 1315.7323 40.317105 + 80 5.6864653 1376.4611 3451.5427 -2075.0816 617.739 0 606.36728 154625.69 -157924.88 17342.361 15201.343 772.46234 1147.1933 21.455572 + 100 7.0593393 885.62035 3037.6307 -2152.0103 536.23281 0 448.92338 154793.05 -157930.22 13263.277 15783.251 679.82798 1011.6853 14.753602 + 120 8.3966329 487.59021 2926.9825 -2439.3923 534.45241 0 332.92674 154624.58 -157931.35 8680.1218 16409.225 655.06468 977.01117 9.8615821 + 140 9.6922171 159.94255 2531.0921 -2371.1495 507.26507 0 248.61566 154802.72 -157929.75 6400.0155 17052.819 566.4636 845.55884 7.140197 + 160 10.950651 -100.91956 2408.1664 -2509.0859 490.99483 0 134.36058 154800.6 -157935.04 3836.9925 17698.151 538.95257 805.1915 5.3968131 + 180 12.172047 -313.40678 2221.7371 -2535.1439 469.97826 0 75.806422 154853.24 -157934.17 1959.0003 18334.826 497.22932 743.13919 4.4151403 + 200 13.369177 -490.93825 2067.2564 -2558.1946 455.16083 0 77.543554 154841.16 -157932.06 1193.4025 18956.449 462.65622 691.72198 3.5993868 + 220 14.438093 -642.88359 1962.7222 -2605.6058 481.40176 0 64.823738 154779.31 -157931.14 258.47931 19559.018 439.26127 657.06568 2.7739198 + 240 15.577558 -770.43472 1795.7362 -2566.1709 467.25739 0 68.825446 154830.01 -157932.26 19.605411 20139.418 401.88945 601.23804 2.3884997 + 260 16.688265 -878.62151 1752.9509 -2631.5724 476.39236 0 71.926651 154747.16 -157927.05 -779.07206 20696.166 392.31402 587.06568 2.0260792 + 280 17.682964 -971.81622 1649.6272 -2621.4434 473.84812 0 58.450385 154779.58 -157933.32 -1008.5258 21226.441 369.18995 552.55677 1.7179235 + 300 18.755012 -1057.4737 1581.0153 -2638.4889 480.33302 0 92.047223 154721.85 -157932.72 -1272.4892 21728.979 353.83447 529.64527 1.5051853 + 320 19.774572 -1132.8157 1506.8725 -2639.6882 477.53234 0 107.39639 154707.65 -157932.27 -1097.9626 22203.697 337.24116 504.84512 1.3587573 + 340 20.69206 -1199.489 1494.9584 -2694.4474 479.87519 0 106.49874 154656.38 -157937.2 -1428.8049 22652.416 334.57476 500.90442 1.2462835 + 360 21.652272 -1264.9018 1440.9759 -2705.8778 491.74088 0 107.21802 154624.72 -157929.55 -1585.5815 23073.033 322.49337 482.81675 1.2016239 + 380 22.541014 -1323.4812 1376.8139 -2700.295 497.62389 0 130.73162 154602.95 -157931.6 -1822.4176 23465.34 308.13377 461.36583 1.0533711 + 400 23.429899 -1373.4313 1375.7746 -2749.2059 504.5216 0 124.40122 154554.57 -157932.7 -2024.2519 23828.151 307.90118 461.05182 0.98409512 + 420 24.30185 -1426.2004 1375.0825 -2801.2829 515.4234 0 141.95789 154473.92 -157932.58 -2211.7434 24159.844 307.74628 460.87881 0.86572884 + 440 25.220268 -1475.8906 1324.8476 -2800.7382 535.08125 0 196.94504 154398.6 -157931.36 -1603.3424 24460.372 296.50361 443.98822 0.94139759 + 460 26.069995 -1526.8146 1312.6512 -2839.4658 567.30401 0 263.15706 154263.01 -157932.94 -1446.573 24734.601 293.77403 439.95008 0.83440493 + 480 26.912804 -1575.0902 1310.7022 -2885.7924 595.89933 0 312.71625 154137.37 -157931.78 -1115.9617 24986.067 293.33784 439.29118 0.84448526 + 500 27.750046 -1625.867 1316.9545 -2942.8215 622.71944 0 334.05272 154029.75 -157929.34 -1178.3349 25218.467 294.73713 441.38984 0.84223525 + 520 28.580007 -1677.8147 1275.1901 -2953.0048 636.81498 0 364.43482 153975.25 -157929.51 -1185.7191 25432.383 285.39015 427.42176 0.75616765 + 540 29.461706 -1724.6335 1253.4762 -2978.1096 632.62875 0 336.7701 153984.65 -157932.16 -1475.652 25627.637 280.53054 420.14989 0.73078744 + 560 30.284055 -1768.8039 1262.2867 -3031.0907 642.26972 0 309.98943 153946.77 -157930.12 -1811.8157 25800.729 282.50237 423.09732 0.74744177 + 580 31.099254 -1811.2401 1227.9083 -3039.1484 678.22201 0 368.41929 153846.44 -157932.23 -1409.4088 25948.882 274.80841 411.53414 0.80732891 + 600 31.912324 -1853.2774 1206.9943 -3060.2717 700.63403 0 436.68693 153737.89 -157935.48 -992.41608 26077.285 270.12781 404.5385 0.76616257 + 620 32.720867 -1895.189 1204.3588 -3099.5478 691.72649 0 400.33253 153741.91 -157933.52 -1388.6703 26189.589 269.53797 403.65884 0.75715127 + 640 33.582986 -1935.0173 1187.9183 -3122.9356 705.21393 0 424.23263 153679.52 -157931.9 -1350.2348 26282.622 265.85856 398.13366 0.77665339 + 660 34.390937 -1971.7086 1162.7479 -3134.4565 702.26031 0 428.42789 153668.92 -157934.06 -1188.7971 26357.244 260.22536 389.70613 0.74337722 + 680 35.194277 -2009.3204 1181.9615 -3191.282 730.54911 0 440.01944 153571.31 -157933.16 -1362.8153 26413.989 264.52542 396.12452 0.79816042 + 700 35.997317 -2050.9709 1191.8391 -3242.8101 753.00327 0 467.6939 153468.36 -157931.87 -1482.0887 26451.007 266.73604 399.41272 0.84921753 + 720 36.797657 -2089.4271 1150.0076 -3239.4347 754.31976 0 503.35736 153436.75 -157933.87 -1244.458 26468.888 257.37407 385.38778 0.83191363 + 740 37.600469 -2125.3798 1154.3541 -3279.7339 774.13557 0 529.42004 153350.85 -157934.14 -1118.7575 26470.499 258.34683 386.83315 0.85749243 + 760 38.401939 -2161.7135 1130.3511 -3292.0647 796.77441 0 536.43801 153307.45 -157932.73 -1175.0129 26456.703 252.9749 378.79415 0.83045948 + 780 39.260591 -2198.2814 1150.3816 -3348.6631 831.65486 0 563.13944 153188.89 -157932.35 -1176.261 26427.139 257.45777 385.51594 0.82651674 + 800 40.064371 -2234.1521 1110.6647 -3344.8168 855.23508 0 601.01417 153131.92 -157932.98 -862.30786 26382.746 248.56904 372.17004 0.86990233 + 820 40.870016 -2267.8439 1102.4715 -3370.3153 860.65298 0 594.70187 153108.56 -157934.23 -1010.8125 26326.235 246.73537 369.40044 0.91177598 + 840 41.681368 -2299.1566 1078.3708 -3377.5273 859.59901 0 593.35932 153101.25 -157931.73 -865.53535 26257.386 241.34159 361.33643 0.86924241 + 860 42.495518 -2331.8875 1107.384 -3439.2715 881.30207 0 614.64915 152998.03 -157933.26 -1071.9258 26177.36 247.83481 371.04249 0.92379597 + 880 43.30765 -2362.8811 1111.5783 -3474.4594 878.94272 0 592.04533 152990.05 -157935.5 -1381.2745 26084.115 248.77351 372.40018 1.0226212 + 900 44.121972 -2394.8169 1068.126 -3462.9429 875.67985 0 600.20259 152996.32 -157935.15 -1082.6484 25975.468 239.0488 357.84385 0.98060155 + 920 44.942671 -2427.7497 1051.3836 -3479.1333 900.00235 0 630.10877 152926.67 -157935.91 -1219.7107 25853.048 235.30182 352.19248 1.049881 + 940 45.823624 -2454.734 1033.0018 -3487.7359 898.98611 0 622.98212 152924.56 -157934.26 -1017.3685 25716.622 231.18793 346.03843 1.0245683 + 960 46.651637 -2482.3376 1051.4989 -3533.8365 882.79039 0 607.4772 152907.91 -157932.02 -1287.7224 25567.669 235.32761 352.20104 1.1100984 + 980 47.483709 -2510.9021 1063.1436 -3574.0457 917.45654 0 628.78148 152815.06 -157935.34 -1318.0782 25404.812 237.93373 356.07751 1.1703057 + 1000 48.3218 -2539.3123 1076.5262 -3615.8385 929.24497 0 620.5376 152770.95 -157936.57 -1437.1421 25228.96 240.92878 360.5539 1.1966823 + 1020 49.120018 -2568.5635 1047.1393 -3615.7027 927.28535 0 622.11842 152769.9 -157935 -1455.4685 25039.532 234.35192 350.71529 1.1564745 + 1040 49.90245 -2600.2331 1062.6806 -3662.9136 955.48542 0 644.04662 152672.56 -157935.01 -1384.5306 24836.175 237.83009 355.87178 1.2710552 + 1060 50.69897 -2630.1462 1061.5152 -3691.6614 986.58819 0 682.07977 152579.13 -157939.46 -1344.1472 24620.038 237.56929 355.4358 1.3611209 + 1080 51.503865 -2659.3124 1028.5625 -3687.8749 1013.1448 0 748.60853 152486.11 -157935.74 -632.77731 24393.781 230.1944 344.4159 1.2910154 + 1100 52.317019 -2686.7631 1046.6402 -3733.4033 1010.8277 0 734.27617 152460.31 -157938.82 -853.90087 24163.398 234.24022 350.47672 1.2987412 + 1120 53.191877 -2717.3602 1100.2788 -3817.639 1053.1519 0 729.94563 152339.1 -157939.84 -1341.3046 23928.078 246.24466 368.47141 1.2986799 + 1140 54.021756 -2749.0229 1075.5657 -3824.5886 1053.2247 0 772.2959 152288.35 -157938.46 -589.3316 23686.107 240.71381 360.21003 1.2399432 + 1160 54.861993 -2781.7214 1067.9567 -3849.6781 1074.5488 0 806.08569 152208.08 -157938.39 -831.19568 23442.775 239.0109 357.6544 1.2458686 + 1180 55.710942 -2810.148 1089.8079 -3899.9559 1109.6809 0 845.87985 152083.25 -157938.76 -222.17835 23198.413 243.90125 365.01942 1.1770946 + 1200 56.57052 -2842.1991 1074.027 -3916.2261 1125.4801 0 878.8665 152014.69 -157935.26 -448.25353 22957.682 240.36945 359.7275 1.1726032 + 1220 57.436566 -2870.9683 1065.5007 -3936.469 1121.3024 0 895.48147 151984.11 -157937.36 -49.04933 22721.016 238.46125 356.86483 1.1771853 + 1240 58.31029 -2898.6134 1082.9239 -3981.5374 1156.8878 0 872.68215 151926.15 -157937.26 -519.72203 22490.6 242.3606 362.72866 1.139753 + 1260 59.192157 -2928.7913 1040.5848 -3969.3761 1145.0651 0 909.81511 151912.71 -157936.97 -29.590267 22264.147 232.88502 348.55509 1.0791106 + 1280 60.142411 -2955.6846 1022.8912 -3978.5758 1140.672 0 883.63602 151933.74 -157936.62 -175.91605 22043.467 228.92516 342.58962 1.1383994 + 1300 61.07528 -2981.9373 1075.9497 -4057.887 1158.7075 0 849.86519 151871.92 -157938.38 -934.6555 21827.24 240.79975 360.40764 1.1023778 + 1320 62.024172 -3008.7547 1034.6665 -4043.4212 1150.8314 0 884.82764 151858.67 -157937.75 -365.70526 21611.763 231.56049 346.60301 1.0123134 + 1340 62.982555 -3034.4981 1059.0543 -4093.5524 1167.4937 0 873.78686 151802.9 -157937.73 -607.20768 21399.603 237.01853 354.83546 0.91062335 + 1360 63.941291 -3061.6404 1086.842 -4148.4824 1203.2944 0 877.27308 151711.62 -157940.67 -877.19102 21189.111 243.23747 364.15541 0.91512372 + 1380 64.90951 -3092.7485 1046.5902 -4139.3388 1239.0597 0 915.00432 151646.1 -157939.51 -519.03533 20978.348 234.22904 350.66459 0.8894947 + 1400 65.889121 -3121.488 1051.0689 -4172.5569 1298.7247 0 989.25234 151480.54 -157941.07 -54.596483 20769.447 235.23138 352.15827 0.90714599 + 1420 66.880954 -3149.3299 1046.1867 -4195.5166 1316.5513 0 1013.5453 151416.57 -157942.18 -12.199056 20566.196 234.13872 350.49775 0.95239313 + 1440 67.876446 -3172.8201 1046.5913 -4219.4114 1319.1146 0 989.68846 151410.33 -157938.54 -145.84664 20369.571 234.22928 350.68677 0.84585946 + 1460 68.88107 -3200.8425 1052.2514 -4253.0939 1296.3997 0 914.27128 151478.83 -157942.59 -1047.6067 20177.139 235.49603 352.58952 0.83805114 + 1480 69.894247 -3229.1329 1032.538 -4261.6708 1273.6899 0 884.58641 151521.54 -157941.48 -877.62887 19983.452 231.08411 345.95296 0.88426485 + 1500 71.009717 -3256.5597 1060.231 -4316.7907 1291.1374 0 874.13592 151461.84 -157943.91 -1479.1729 19788.536 237.28186 355.23846 0.89410552 + 1520 72.041054 -3283.4789 1004.9547 -4288.4336 1248.3551 0 849.40507 151555.63 -157941.83 -1210.342 19590.335 224.91093 336.73148 0.81999833 + 1540 73.084395 -3307.2541 1008.328 -4315.5821 1259.4211 0 846.2933 151520.12 -157941.42 -1328.6534 19389.457 225.66587 337.86416 0.81796565 + 1560 74.135646 -3333.4164 1009.8078 -4343.2242 1290.3482 0 843.72954 151464.8 -157942.1 -1492.5376 19185.011 225.99706 338.35783 0.82352496 + 1580 75.198241 -3359.5746 1031.9507 -4391.5253 1301.979 0 907.32598 151341.72 -157942.55 -931.21229 18977.005 230.95268 345.78871 0.81873619 + 1600 76.272058 -3383.7255 977.90216 -4361.6277 1350.9107 0 1005.0889 151225.61 -157943.23 -265.11417 18769.775 218.85651 327.62822 0.87537743 + 1620 77.356282 -3399.3062 994.75129 -4394.0575 1387.4383 0 1059.1407 151101.4 -157942.03 574.54697 18568.615 222.62738 333.25885 0.91918263 + 1640 78.448545 -3415.8361 1023.468 -4439.304 1398.4672 0 1052.931 151054.15 -157944.85 470.27927 18377.301 229.05423 342.8805 0.94357863 + 1660 79.550247 -3434.561 975.54176 -4410.1027 1429.1617 0 1081.052 151023.2 -157943.52 1049.9178 18195.592 218.32825 326.8381 0.87189374 + 1680 80.667191 -3451.4085 987.31735 -4438.7259 1473.5691 0 1116.4474 150914.31 -157943.05 1058.2306 18025.735 220.96365 330.80265 0.84371639 + 1700 81.797154 -3467.686 964.72099 -4432.407 1455.6679 0 1109.6516 150945 -157942.73 1282.6999 17867.835 215.90654 323.18716 0.91347876 + 1720 82.926758 -3484.8522 984.05698 -4468.9092 1459.9348 0 1102.3739 150911.78 -157943 919.74849 17722.037 220.23397 329.6527 0.95604421 + 1740 84.064705 -3497.8606 976.97179 -4474.8324 1401.3809 0 1034.3626 151032.67 -157943.25 535.35483 17586.464 218.64829 327.27748 0.95261024 + 1760 85.25497 -3516.3474 990.65511 -4507.0025 1393.0104 0 1015.5429 151026.85 -157942.4 -45.078457 17457.877 221.71065 331.88315 0.92222263 + 1780 86.432811 -3532.5203 981.67325 -4514.1936 1381.8497 0 1018.8916 151028.12 -157943.05 419.25311 17333.542 219.70049 328.86023 0.94159899 + 1800 87.629265 -3551.0627 978.09831 -4529.161 1409.4225 0 1023.8144 150980.45 -157942.84 -136.21958 17214.117 218.90041 327.67684 0.90973891 + 1820 88.810324 -3566.367 953.86873 -4520.2357 1386.004 0 1027.6913 151009.66 -157943.59 272.29498 17097.552 213.47778 319.53574 0.93491142 + 1840 89.996806 -3581.9401 989.35892 -4571.299 1438.2511 0 1011.4985 150924.05 -157945.1 -277.89182 16984.647 221.42056 331.39393 1.0309706 + 1860 91.192728 -3597.0855 939.72505 -4536.8105 1424.7503 0 1045.0751 150938.2 -157944.83 769.1418 16874.282 210.31239 314.73818 1.0402053 + 1880 92.395072 -3609.1452 988.80243 -4597.9477 1452.2757 0 1054.8324 150839.43 -157944.48 448.42199 16769.952 221.29601 331.17499 1.095477 + 1900 93.599308 -3623.9274 981.88757 -4605.815 1467.8981 0 1058.3428 150811.66 -157943.72 440.93441 16671.114 219.74845 328.86095 1.0839713 + 1920 94.800441 -3637.4995 962.46738 -4599.9668 1472.6584 0 1100.9414 150770.55 -157944.12 927.11674 16577.506 215.40217 322.39885 0.97801499 + 1940 96.006696 -3649.8745 932.46317 -4582.3377 1482.9302 0 1127.1576 150751.01 -157943.44 1275.661 16490.871 208.68717 312.30264 1.0388692 + 1960 97.217233 -3660.5717 957.9057 -4618.4774 1471.5387 0 1090.5959 150763.08 -157943.69 926.00133 16412.162 214.38126 320.81698 1.081062 + 1980 98.432616 -3673.974 955.97217 -4629.9462 1448.9016 0 1043.2494 150823.46 -157945.55 585.7993 16339.534 213.94853 320.15896 1.0997884 + 2000 99.651307 -3687.9477 943.17863 -4631.1263 1431.8862 0 1028.9334 150853.1 -157945.05 406.94681 16271.378 211.08531 315.85857 1.1166274 +Loop time of 99.6513 on 1 procs for 2000 steps with 2500 atoms + +Performance: 1.734 ns/day, 13.840 hours/ns, 20.070 timesteps/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 78.424 | 78.424 | 78.424 | 0.0 | 78.70 +Bond | 0.032606 | 0.032606 | 0.032606 | 0.0 | 0.03 +Kspace | 3.7865 | 3.7865 | 3.7865 | 0.0 | 3.80 +Neigh | 9.511 | 9.511 | 9.511 | 0.0 | 9.54 +Comm | 0.71185 | 0.71185 | 0.71185 | 0.0 | 0.71 +Output | 0.0071998 | 0.0071998 | 0.0071998 | 0.0 | 0.01 +Modify | 7.1361 | 7.1361 | 7.1361 | 0.0 | 7.16 +Other | | 0.04205 | | | 0.04 + +Nlocal: 2500 ave 2500 max 2500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 20897 ave 20897 max 20897 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.20428e+06 ave 2.20428e+06 max 2.20428e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2204275 +Ave neighs/atom = 881.71 +Ave special neighs/atom = 4 +Neighbor list builds = 122 +Dangerous builds = 16 + +Total wall time: 0:01:39 diff --git a/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.4 b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.4 new file mode 100644 index 0000000000..332359e659 --- /dev/null +++ b/examples/USER/drude/swm4-ndp/log.27Nov18.swm4-ndp.nh.g++.4 @@ -0,0 +1,252 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/coul/long 12.0 12.0 +kspace_style pppm 1.0e-3 + +read_data data.swm4-ndp + orthogonal box = (-12 -12 -12) to (12 12 12) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2500 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 2000 bonds + reading angles ... + 500 angles + 4 = max # of 1-2 neighbors + 3 = max # of 1-3 neighbors + 3 = max # of 1-4 neighbors + 4 = max # of special neighbors + +pair_coeff 1 1 0.210939 3.183950 # ODw ODw +pair_coeff * 2* 0.000000 0.0 + +group ATOMS type 1:3 +2000 atoms in group ATOMS +group CORES type 1 +500 atoms in group CORES +group DRUDES type 4 +500 atoms in group DRUDES + +variable TK equal 300.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +neighbor 2.0 bin + +timestep 1.0 + +fix DRUDE all drude C N N D + +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 300 12345 +velocity DRUDES create ${TDK} 12345 +velocity DRUDES create 1 12345 + +delete_bonds ATOMS multi +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 1500 300 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 4 +New max number of 1-2 to 1-4 neighbors: 4 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + 2000 total bonds, 500 turned on, 1500 turned off + 500 total angles, 0 turned on, 500 turned off + 0 total dihedrals, 0 turned on, 0 turned off + 0 total impropers, 0 turned on, 0 turned off + +comm_modify vel yes +compute TATOM ATOMS temp/com +compute TEMP all temp/drude + +fix DTDIR all drude/transform/direct +fix RIGID ATOMS rigid/npt/small molecule temp ${TK} ${TK} 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 ${TK} 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso ${PBAR} ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 ${PBAR} 500 +fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 1 500 +500 rigid bodies with 2000 atoms + 0.832099 = max distance from body owner to body atom +fix_modify RIGID temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/RIGID/fix_rigid_nh_small.cpp:1338) +fix NVT DRUDES nvt temp ${TDK} ${TDK} 100.0 +fix NVT DRUDES nvt temp 1 ${TDK} 100.0 +fix NVT DRUDES nvt temp 1 1 100.0 +fix DTINV all drude/transform/inverse + +thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] +thermo 20 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:321) + G vector (1/distance) = 0.217457 + grid = 10 10 10 + stencil order = 5 + estimated absolute RMS force accuracy = 0.197288 + estimated relative force accuracy = 0.000594128 + using double precision FFTs + 3d grid and FFT values/proc = 1500 300 +Per MPI rank memory allocation (min/avg/max) = 18.29 | 18.3 | 18.3 Mbytes +Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp c_TEMP[1] c_TEMP[2] + 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 + 20 0.45823026 3742.7989 5338.7966 -1595.9977 567.29056 0 662.23349 155098.48 -157924 31679.045 13979.575 1194.8336 1690.2267 201.65776 + 40 0.95719695 2752.9392 4407.9332 -1654.994 792.86724 0 870.27523 154593.92 -157912.06 27392.303 14278.564 986.5045 1450.7624 56.079839 + 60 1.4402499 1995.9776 3980.851 -1984.8734 660.64219 0 750.43211 154538.47 -157934.42 22242.677 14691.413 890.92262 1315.3403 40.305318 + 80 1.9050057 1377.133 3449.7879 -2072.6549 617.64238 0 605.75691 154628.64 -157924.69 17345.359 15201.397 772.06961 1146.6088 21.447181 + 100 2.3745039 886.38999 3038.411 -2152.021 537.89929 0 450.99966 154789.13 -157930.05 13299.226 15783.335 680.00261 1011.6773 15.016235 + 120 2.8589215 488.05512 2928.1336 -2440.0785 536.23142 0 334.886 154620.05 -157931.25 8694.3495 16409.509 655.32232 977.40122 9.853881 + 140 3.2965367 160.14918 2538.5119 -2378.3627 509.19544 0 249.89187 154793.34 -157930.79 6363.0936 17053.486 568.12418 847.92535 7.2744487 + 160 3.7223189 -103.57483 2403.1617 -2506.7365 494.69852 0 144.07166 154790.83 -157936.34 4017.2081 17699.095 537.83252 803.44789 5.3901447 + 180 4.1554348 -315.60495 2216.8001 -2532.405 477.29347 0 80.852028 154842.41 -157932.96 1958.2418 18336.716 496.1244 741.47039 4.4401782 + 200 4.5533779 -490.60343 2058.8989 -2549.5023 470.22934 0 80.797892 154831.65 -157932.18 1260.3909 18960.132 460.78579 688.924 3.5878094 + 220 4.9085493 -644.11131 2001.1202 -2645.2315 494.11411 0 53.067462 154741.64 -157934.05 -16.783051 19564.819 447.8548 669.94702 2.7746354 + 240 5.2955835 -773.77077 1911.0789 -2684.8496 491.56671 0 36.573942 154722.87 -157935.86 -773.28467 20144.754 427.70337 639.97783 2.2990474 + 260 5.7046614 -886.74825 1719.7065 -2606.4547 462.97836 0 47.58745 154814.53 -157931.55 -695.31939 20696.484 384.87384 575.96438 1.9230094 + 280 6.0633757 -983.59043 1659.2126 -2642.803 476.05207 0 65.528 154749.28 -157933.67 -1099.7766 21220.608 371.33519 555.77921 1.7044743 + 300 6.4097662 -1069.381 1531.6365 -2601.0175 487.38768 0 130.0599 154709.01 -157927.47 -548.94313 21717.512 342.78339 513.13082 1.4029607 + 320 6.7455602 -1144.854 1562.925 -2707.779 508.98546 0 127.16624 154591.4 -157935.34 -1515.6429 22190.677 349.78582 523.6096 1.414493 + 340 7.0504746 -1216.4848 1511.8539 -2728.3386 518.41635 0 144.67031 154541.86 -157933.28 -1346.5299 22636.537 338.356 506.57907 1.2331509 + 360 7.3652327 -1279.8842 1434.5465 -2714.4306 524.92137 0 153.81139 154537.16 -157930.32 -1445.625 23056.451 321.05444 480.69079 1.1396531 + 380 7.6638732 -1340.1922 1391.8227 -2732.0149 537.12747 0 180.48607 154482.89 -157932.52 -1316.0441 23450.122 311.49278 466.4254 1.0045437 + 400 7.9763258 -1398.97 1401.3049 -2800.275 547.10484 0 190.74701 154394.07 -157932.19 -1697.8502 23818.202 313.61492 469.64586 0.92579849 + 420 8.2703266 -1450.483 1357.937 -2808.4199 555.88824 0 178.22829 154390.11 -157932.65 -1958.9883 24158.533 303.90908 455.10587 0.90768013 + 440 8.5902264 -1501.4161 1341.5516 -2842.9677 573.14949 0 195.16753 154320.41 -157931.7 -1876.025 24469.636 300.24201 449.65628 0.81297929 + 460 8.8937869 -1551.3256 1326.1262 -2877.4518 581.25352 0 206.82716 154267.73 -157933.26 -2033.2771 24752.01 296.78977 444.48443 0.8068672 + 480 9.1780484 -1598.4261 1289.0614 -2887.4875 599.31424 0 250.55266 154195.32 -157932.67 -1734.9907 25004.733 288.4946 432.05986 0.78706924 + 500 9.4627533 -1647.1265 1310.6504 -2957.7768 620.75343 0 278.84436 154075.73 -157933.11 -1819.9564 25230.755 293.32624 439.2975 0.79707067 + 520 9.744127 -1694.4448 1256.1824 -2950.6272 640.46082 0 300.05753 154043.8 -157934.95 -1676.1925 25430.395 281.13621 421.05228 0.74177674 + 540 10.022904 -1741.636 1235.1581 -2976.794 663.79651 0 343.79844 153947.6 -157931.99 -1450.0194 25605.442 276.43091 414.00136 0.73713962 + 560 10.317977 -1784.6341 1213.4226 -2998.0567 667.043 0 361.93171 153904.04 -157931.07 -1633.3649 25757.73 271.56648 406.71944 0.71740617 + 580 10.599227 -1824.7401 1203.2527 -3027.9928 695.49991 0 399.21355 153809.37 -157932.08 -1210.3391 25887.112 269.29042 403.29611 0.74045254 + 600 10.872629 -1865.8971 1201.7743 -3067.6714 714.59075 0 432.45767 153718.17 -157932.89 -1199.4783 25998.228 268.95956 402.78195 0.77684613 + 620 11.144566 -1905.4349 1175.2733 -3080.7082 746.97979 0 456.14057 153649.58 -157933.41 -952.82994 26092.511 263.02858 393.89597 0.76773558 + 640 11.426686 -1943.5065 1165.9307 -3109.4372 755.41374 0 483.29607 153585.09 -157933.23 -984.52156 26172.87 260.93768 390.78613 0.7189019 + 660 11.699499 -1980.6601 1149.4782 -3130.1383 744.34638 0 460.44858 153597.74 -157932.67 -1312.9908 26238.692 257.25559 385.23533 0.78159645 + 680 12.011345 -2017.8555 1159.1341 -3176.9896 734.22636 0 422.37481 153599.86 -157933.45 -1747.0103 26285.639 259.41659 388.49552 0.73989774 + 700 12.310963 -2054.4791 1156.1376 -3210.6166 733.10466 0 423.00212 153565.55 -157932.27 -1636.1386 26309.504 258.74596 387.47025 0.77987596 + 720 12.582198 -2091.6681 1174.8015 -3266.4696 739.49203 0 428.4236 153500.55 -157934.93 -1696.6642 26311.163 262.923 393.72409 0.79497316 + 740 12.970993 -2130.5966 1159.8063 -3290.403 749.2778 0 449.89501 153443.16 -157932.74 -1820.153 26290.013 259.56704 388.70043 0.78112554 + 760 13.328577 -2169.5713 1138.8137 -3308.385 783.90384 0 538.06269 153303 -157933.35 -1011.1163 26246.385 254.86884 381.62657 0.84363887 + 780 13.701648 -2205.5168 1142.2259 -3347.7427 832.2034 0 585.43846 153169.83 -157935.21 -877.81856 26188.431 255.63251 382.73539 0.91548041 + 800 14.064343 -2244.3113 1142.1063 -3386.4176 846.00692 0 618.31624 153083.94 -157934.68 -661.72264 26119.157 255.60573 382.69013 0.92572469 + 820 14.33644 -2280.7153 1109.9081 -3390.6234 858.49264 0 654.04808 153031.02 -157934.18 -465.91138 26042.068 248.39971 371.86079 0.98075233 + 840 14.635953 -2313.2679 1104.4689 -3417.7368 870.71302 0 653.66264 152993.54 -157935.66 -613.02846 25959.467 247.1824 370.05309 0.94666727 + 860 14.907509 -2345.7077 1108.2969 -3454.0045 887.72574 0 641.79104 152948.54 -157932.06 -761.70678 25870.075 248.03912 371.27357 1.0741475 + 880 15.183513 -2377.4774 1063.4515 -3440.9289 869.82787 0 628.04321 152993.89 -157932.69 -855.49925 25771.822 238.00263 356.26939 0.99311617 + 900 15.507916 -2408.6686 1102.0685 -3510.7371 895.2471 0 633.04968 152893.8 -157932.84 -816.76925 25662.984 246.64518 369.19309 1.0560774 + 920 15.786689 -2440.9159 1064.6296 -3505.5455 907.99426 0 640.59576 152879.85 -157933.98 -771.43262 25544.45 238.26628 356.60949 1.103337 + 940 16.081306 -2471.511 1069.129 -3540.64 935.37062 0 676.1306 152783.76 -157935.9 -835.05654 25417.183 239.27326 358.07731 1.186596 + 960 16.361392 -2501.4199 1106.6503 -3608.0702 940.89653 0 655.04578 152730.01 -157934.03 -1188.2588 25280.379 247.6706 370.62835 1.259746 + 980 16.6468 -2536.7151 1106.7401 -3643.4553 955.83568 0 689.00094 152647 -157935.3 -1034.563 25131.304 247.69072 370.65118 1.2744144 + 1000 16.935502 -2570.2795 1086.764 -3657.0436 980.59572 0 714.89208 152582.49 -157935.02 -778.85654 24971.385 243.22002 363.90242 1.3687958 + 1020 17.227137 -2602.1046 1057.6875 -3659.7921 986.13374 0 727.61595 152561.35 -157934.9 -733.05283 24804.434 236.71263 354.20236 1.2597408 + 1040 17.498504 -2630.2834 1061.6996 -3691.9831 979.55337 0 702.15346 152561.09 -157934.78 -845.34279 24631.58 237.61056 355.56436 1.2277288 + 1060 17.773529 -2662.6359 1059.732 -3722.3679 987.68613 0 704.67809 152519.16 -157933.89 -870.46195 24451.603 237.17019 354.91872 1.1988053 + 1080 18.050301 -2692.4034 1097.314 -3789.7174 1025.2827 0 758.27603 152361.94 -157935.22 -859.61672 24264.679 245.58112 367.45939 1.3334136 + 1100 18.32944 -2721.6082 1035.0808 -3756.689 1024.3757 0 793.48607 152361.85 -157936.4 -398.00889 24072.334 231.65321 346.6143 1.2677215 + 1120 18.641844 -2749.785 1044.4525 -3794.2375 1055.3749 0 824.30266 152262.04 -157935.96 -237.96338 23879.17 233.75062 349.76962 1.2451155 + 1140 18.960959 -2772.8286 1065.2495 -3838.078 1064.0529 0 819.37794 152214.82 -157936.33 -419.50711 23686.912 238.40502 356.77133 1.1955971 + 1160 19.294018 -2799.8843 1046.0072 -3845.8914 1068.2773 0 805.55181 152215.61 -157935.33 -627.01178 23494.818 234.09856 350.34221 1.1430413 + 1180 19.649965 -2828.7115 1062.1027 -3890.8142 1081.854 0 768.64664 152195.11 -157936.43 -1113.3883 23300.677 237.70076 355.77198 1.0829394 + 1200 19.96859 -2856.704 1046.499 -3903.203 1081.2546 0 753.81059 152196.72 -157934.99 -1184.6559 23100.615 234.20861 350.52914 1.0991524 + 1220 20.326653 -2886.057 1023.9211 -3909.9781 1088.5712 0 740.41133 152197.78 -157936.75 -1477.5653 22893.4 229.15565 343.00067 1.0072919 + 1240 20.659779 -2913.7708 995.31097 -3909.0818 1069.874 0 758.11146 152202.13 -157939.2 -1090.4758 22677.17 222.75264 333.41163 0.98913753 + 1260 20.982659 -2936.9388 1011.886 -3948.8248 1101.8407 0 796.10406 152091.56 -157938.33 -917.17194 22454.903 226.46216 338.97372 0.98612749 + 1280 21.296781 -2960.7771 994.15899 -3954.9361 1129.3448 0 823.90727 152029.43 -157937.61 -820.42886 22229.299 222.49482 333.04692 0.94562797 + 1300 21.610997 -2984.3569 1049.8825 -4034.2394 1141.808 0 815.97434 151946.6 -157938.63 -777.81536 22002.292 234.96586 351.7259 0.97584665 + 1320 21.939147 -3010.5287 1015.4181 -4025.9468 1162.122 0 814.19766 151933.87 -157936.14 -896.97771 21774.771 227.25266 340.00602 1.1005558 + 1340 22.290971 -3038.0553 985.5931 -4023.6484 1161.8588 0 834.2486 151919.16 -157938.92 -776.69761 21546.055 220.57776 330.09107 1.0139801 + 1360 22.647999 -3060.107 995.10747 -4055.2145 1155.9364 0 823.15336 151904.81 -157939.11 -1060.7954 21316.783 222.70709 333.36443 0.91659915 + 1380 23.10948 -3084.6301 1045.0151 -4129.6452 1182.7352 0 811.15693 151815.78 -157939.31 -1245.9569 21085.59 233.87652 350.01917 1.0453875 + 1400 23.508905 -3109.9777 987.57375 -4097.5514 1174.5153 0 826.73317 151839.75 -157938.55 -936.38803 20851.737 221.02103 330.8031 0.91405623 + 1420 23.906708 -3133.4897 996.08018 -4129.5698 1204.428 0 883.9796 151722.31 -157940.29 -279.27606 20617.831 222.92479 333.68351 0.93320818 + 1440 24.340815 -3156.6284 1002.5391 -4159.1675 1256.8861 0 938.67074 151584.42 -157939.15 -252.37357 20388.73 224.3703 335.78661 1.0353205 + 1460 24.814756 -3174.2482 1025.2447 -4199.493 1219.0264 0 890.12474 151633.42 -157942.07 -472.20532 20165.369 229.45188 343.47039 0.91379457 + 1480 25.194546 -3199.1381 1019.3011 -4218.4392 1263.6197 0 907.8062 151551.73 -157941.59 -357.34642 19946.233 228.12168 341.47893 0.95052162 + 1500 25.6163 -3221.8311 999.94752 -4221.7787 1277.1026 0 966.69277 151477.62 -157943.19 163.84163 19732.291 223.79031 334.84833 1.1106364 + 1520 26.062775 -3240.6737 1026.9402 -4267.6139 1307.0169 0 971.17205 151397.27 -157943.07 300.59837 19526.783 229.83132 344.05076 0.92328807 + 1540 26.51185 -3263.1162 1054.1755 -4317.2916 1310.0417 0 972.81145 151342.02 -157942.16 -71.812538 19330.083 235.92663 353.19321 0.92162655 + 1560 26.975349 -3285.1217 1012.3967 -4297.5183 1317.4278 0 1037.4478 151290.29 -157942.68 862.26427 19140.892 226.57645 339.17946 0.91729521 + 1580 27.358741 -3305.5601 989.56962 -4295.1297 1340.9939 0 1081.7847 151223.92 -157941.82 1218.8084 18963.059 221.46771 331.53455 0.89110049 + 1600 27.75085 -3325.3691 1029.8506 -4355.2197 1351.2586 0 1061.6722 151170.95 -157939.1 749.81991 18797.795 230.48267 344.98106 1.0044287 + 1620 28.144375 -3345.1891 1016.654 -4361.8431 1337.3071 0 1043.5237 151199.64 -157942.31 600.76159 18642.93 227.52925 340.61677 0.89914217 + 1640 28.539596 -3364.6709 980.13009 -4344.801 1354.0177 0 1066.4673 151176.84 -157942.13 1010.3991 18496.839 219.35513 328.33786 0.95094445 + 1660 28.935194 -3382.7945 996.82121 -4379.6158 1343.4606 0 1016.5523 151199.22 -157938.85 546.93155 18360.15 223.09063 333.92162 0.96051901 + 1680 29.338179 -3403.1864 976.66081 -4379.8472 1355.1038 0 1029.6963 151176.44 -157941.09 748.54459 18230.922 218.57869 327.20355 0.89183674 + 1700 29.743355 -3417.6904 994.06517 -4411.7556 1368.1157 0 1013.9323 151145.57 -157939.38 351.45668 18109.291 222.47382 332.98346 0.9529814 + 1720 30.14859 -3434.6282 979.89215 -4414.5203 1377.0869 0 1043.321 151104.18 -157939.11 1004.1915 17993.82 219.30187 328.11073 1.0747474 + 1740 30.591568 -3451.0422 966.54361 -4417.5858 1376.9794 0 1050.8109 151097.44 -157942.82 1079.9737 17886.467 216.31444 323.72083 1.0159044 + 1760 31.006144 -3469.3784 980.75469 -4450.1331 1396.5756 0 1015.9581 151078.09 -157940.75 190.14272 17786.919 219.49491 328.49844 0.97971363 + 1780 31.424875 -3485.9292 1008.375 -4494.3041 1373.9658 0 984.95385 151090.2 -157943.42 -155.51723 17691.03 225.67639 337.7992 0.97942677 + 1800 31.849784 -3502.475 976.23102 -4478.706 1385.4591 0 994.63329 151084.94 -157943.74 288.55406 17597.361 218.48251 327.04845 0.91364963 + 1820 32.275504 -3520.5204 971.19507 -4491.7155 1407.4082 0 1049.909 150992.97 -157942.01 526.1499 17507.18 217.35545 325.30923 0.99414761 + 1840 32.701591 -3535.2936 982.97322 -4518.2668 1419.0124 0 1050.2222 150955.57 -157943.08 420.31843 17421.408 219.99142 329.22593 1.0824421 + 1860 33.133267 -3551.8598 947.45359 -4499.3134 1430.136 0 1069.4805 150943.73 -157942.66 669.02599 17340.063 212.04206 317.36556 0.97096264 + 1880 33.56593 -3564.7527 963.54319 -4528.2959 1418.0293 0 1050.1008 150947.78 -157944.21 529.33841 17263.982 215.64294 322.72997 0.96836521 + 1900 34.00203 -3580.0607 963.5239 -4543.5846 1424.6268 0 1048.9836 150925.17 -157942.36 464.00157 17192.083 215.63863 322.69033 1.0695571 + 1920 34.44279 -3593.8573 957.94124 -4551.7986 1437.3475 0 1061.2427 150893.58 -157943.97 400.78058 17123.621 214.38922 320.8512 1.015936 + 1940 34.877758 -3608.3005 951.71962 -4560.0201 1421.2611 0 1059.2678 150903.97 -157944.52 332.6227 17058.096 212.9968 318.72703 1.0660417 + 1960 35.315982 -3623.3562 948.66706 -4572.0233 1438.6049 0 1066.4475 150868.57 -157945.64 448.04656 16995.11 212.31364 317.61154 1.1874864 + 1980 35.79727 -3635.1448 958.32383 -4593.4687 1448.1655 0 1056.2971 150846.27 -157944.2 110.28409 16935.142 214.47484 320.97102 1.0535213 + 2000 36.231822 -3649.7345 959.87855 -4609.6131 1458.7554 0 1080.5488 150796.28 -157945.2 615.27816 16877.582 214.82279 321.49302 1.0526861 +Loop time of 36.2319 on 4 procs for 2000 steps with 2500 atoms + +Performance: 4.769 ns/day, 5.032 hours/ns, 55.200 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 19.246 | 21.089 | 23.446 | 32.8 | 58.21 +Bond | 0.012314 | 0.012709 | 0.013402 | 0.4 | 0.04 +Kspace | 2.0259 | 4.3875 | 6.228 | 72.1 | 12.11 +Neigh | 2.6629 | 2.6673 | 2.6718 | 0.3 | 7.36 +Comm | 0.95863 | 0.96795 | 0.97884 | 0.9 | 2.67 +Output | 0.0071304 | 0.0093493 | 0.0142 | 2.9 | 0.03 +Modify | 7.0096 | 7.0134 | 7.0186 | 0.1 | 19.36 +Other | | 0.08472 | | | 0.23 + +Nlocal: 625 ave 683 max 565 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 12687 ave 12923 max 12461 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 531145 ave 625145 max 458041 min +Histogram: 1 0 1 0 1 0 0 0 0 1 + +Total # of neighbors = 2124581 +Ave neighs/atom = 849.832 +Ave special neighs/atom = 4 +Neighbor list builds = 122 +Dangerous builds = 16 + +Total wall time: 0:00:36 diff --git a/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.1 b/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.1 deleted file mode 100644 index e66f4c69c2..0000000000 --- a/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.1 +++ /dev/null @@ -1,230 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/coul/long 12.0 12.0 -kspace_style pppm 1.0e-3 - -comm_modify vel yes -read_data data.swm4-ndp - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2500 atoms - scanning bonds ... - 1 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 2000 bonds - reading angles ... - 500 angles - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 3 = max # of 1-4 neighbors - 4 = max # of special neighbors - -pair_coeff 1 1 0.210939 3.183950 # ODw ODw -pair_coeff * 2* 0.000000 0.0 - -group ATOMS type 1:3 -2000 atoms in group ATOMS -group CORES type 1 -500 atoms in group CORES -group DRUDES type 4 -500 atoms in group DRUDES - -variable TK equal 300.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -neighbor 2.0 bin - -timestep 1.0 - -fix DRUDE all drude C N N D - -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 300 12345 -velocity DRUDES create ${TDK} 12345 -velocity DRUDES create 1 12345 - -delete_bonds ATOMS multi -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 3375 1000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 14 - 2000 total bonds, 500 turned on, 1500 turned off - 500 total angles, 0 turned on, 500 turned off - 0 total dihedrals, 0 turned on, 0 turned off - 0 total impropers, 0 turned on, 0 turned off - -fix TEMP all langevin/drude ${TK} 100. 1256 ${TDK} 20. 13977 zero yes -fix TEMP all langevin/drude 300 100. 1256 ${TDK} 20. 13977 zero yes -fix TEMP all langevin/drude 300 100. 1256 1 20. 13977 zero yes -fix NPH ATOMS rigid/nph/small molecule iso ${PBAR} ${PBAR} 500. -fix NPH ATOMS rigid/nph/small molecule iso 1 ${PBAR} 500. -fix NPH ATOMS rigid/nph/small molecule iso 1 1 500. -500 rigid bodies with 2000 atoms - 0.832099 = max distance from body owner to body atom -fix NVE DRUDES nve - -compute TEMP all temp/drude - -thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] -thermo 20 - -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 3375 1000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Memory usage per processor = 24.8361 Mbytes -Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp TEMP[1] TEMP[2] - 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 - 20 1.529202 2882.459 4527.8074 -1645.3484 561.72857 0 600.34616 155114.77 -157922.19 27167.702 14058.741 1013.3326 1438.6699 160.63128 - 40 3.073256 1331.3826 3348.9313 -2017.5487 681.52309 0 553.09465 154668.62 -157920.79 17925.93 14484.215 749.4977 1105.2032 36.587791 - 60 4.584862 297.35979 2604.4137 -2307.0539 583.99971 0 409.0399 154634.74 -157934.83 13017.752 15026.564 582.87312 864.55899 18.335649 - 80 6.053256 -374.31023 2263.3247 -2637.635 534.80338 0 212.27981 154543.18 -157927.9 6155.9261 15645.855 506.53672 755.45209 7.6929084 - 100 7.4787509 -905.58889 1911.7191 -2817.308 532.30405 0 87.570168 154497.48 -157934.66 2149.3099 16288.797 427.84666 639.27768 4.1289101 - 120 8.8570309 -1233.6894 1675.0881 -2908.7775 544.7643 0 59.500519 154422.72 -157935.76 233.4994 16915.818 374.88816 560.54169 2.8313123 - 140 10.102229 -1463.4927 1468.7443 -2932.237 539.69692 0 41.083584 154424.91 -157937.93 -1492.9865 17509.345 328.70799 491.66353 2.1394958 - 160 11.319324 -1695.7535 1385.9603 -3081.7137 552.91518 0 30.022893 154274.72 -157939.37 -3010.4983 18061.925 310.18075 463.968 1.9858941 - 180 12.62008 -1818.1958 1253.169 -3071.3648 559.57456 0 20.01719 154289.67 -157940.63 -3354.4536 18564.877 280.4618 419.57594 1.6725953 - 200 13.836408 -1949.6497 1210.0669 -3159.7167 570.055 0 16.319449 154195.04 -157941.13 -4118.0013 19014.456 270.81546 405.06925 1.766255 - 220 15.032024 -2031.6125 1148.1454 -3179.7579 598.02981 0 30.833041 154127.13 -157935.75 -4514.7299 19406.767 256.9573 384.33701 1.6839691 - 240 16.302775 -2118.6259 1120.0048 -3238.6307 613.2903 0 59.888138 154030.6 -157942.41 -4415.1944 19738.97 250.65937 374.93983 1.5971234 - 260 17.465169 -2203.4348 1065.8476 -3269.2823 614.19171 0 77.619746 153980.69 -157941.79 -4564.2677 20011.077 238.53887 356.80737 1.5247856 - 280 18.614435 -2317.9282 1033.2676 -3351.1958 650.51218 0 126.14976 153811.64 -157939.49 -4722.7543 20224.149 231.24742 345.8479 1.5839508 - 300 19.757547 -2377.6306 992.4842 -3370.1148 688.02217 0 179.77994 153701.18 -157939.1 -4126.4983 20378.439 222.12 332.08757 1.7406267 - 320 20.888309 -2419.6547 1023.0345 -3442.6892 720.31567 0 227.70007 153549.33 -157940.04 -4083.8776 20479.241 228.95722 342.33844 1.7368676 - 340 22.018005 -2456.7661 1048.83 -3505.5961 754.13021 0 264.44865 153415.74 -157939.91 -3894.7125 20529.721 234.73031 351.04714 1.6271854 - 360 23.241519 -2504.7475 1041.9912 -3546.7386 785.42547 0 335.38743 153271.47 -157939.03 -3464.4465 20531.323 233.19976 348.66924 1.7943874 - 380 24.370763 -2596.2223 1000.109 -3596.3313 825.31479 0 390.18238 153129.56 -157941.39 -3355.5804 20490.646 223.82645 334.61119 1.8093168 - 400 25.499192 -2666.6702 1006.474 -3673.1442 865.9858 0 422.51674 152978.57 -157940.21 -3329.4637 20411.001 225.25095 336.79016 1.7220267 - 420 26.635042 -2675.8885 1036.9567 -3712.8452 909.14044 0 490.71452 152826.18 -157938.88 -2907.7096 20294.317 232.07303 346.92895 1.8970394 - 440 27.774963 -2731.5399 1054.4488 -3785.9886 935.99349 0 530.9675 152684.75 -157937.7 -2566.587 20147.094 235.9878 352.84462 1.8021906 - 460 28.922784 -2808.5929 996.20283 -3804.7957 986.6991 0 582.25374 152565.95 -157939.7 -2489.2912 19973.682 222.95224 333.32237 1.7660757 - 480 30.07189 -2862.64 1012.7035 -3875.3436 1005.1596 0 610.07691 152450.62 -157941.2 -2031.6453 19777.635 226.64513 338.80268 1.8767218 - 500 31.210731 -2935.4679 989.23412 -3924.702 1019.9115 0 633.87354 152362.4 -157940.89 -2214.2821 19561.863 221.39263 330.98935 1.7563884 - 520 32.363073 -2989.4684 968.83888 -3958.3072 1057.5825 0 655.88302 152269.68 -157941.45 -2298.887 19328.548 216.82813 324.17678 1.6971802 - 540 33.631173 -3036.6833 1016.2589 -4052.9421 1091.2498 0 658.37327 152140.1 -157942.67 -2240.561 19080.875 227.44082 340.06628 1.7350202 - 560 34.815099 -3093.7794 947.7515 -4041.5309 1141.2318 0 764.1603 151995.79 -157942.71 -1157.5191 18819.961 212.10873 317.02152 1.858938 - 580 36.012327 -3166.4133 987.9563 -4154.3696 1199.2171 0 796.34125 151794.12 -157944.05 -1304.4967 18555.635 221.10665 330.55449 1.7687509 - 600 37.228579 -3194.8572 979.66264 -4174.5199 1206.8265 0 842.68836 151717.96 -157941.99 -843.16439 18290.222 219.25051 327.76152 1.7899831 - 620 38.457464 -3255.2052 965.87596 -4221.0812 1218.8406 0 849.13897 151653.64 -157942.7 -628.0114 18027.862 216.16502 323.08905 1.8846337 - 640 39.700987 -3269.6729 1003.1309 -4272.8038 1273.0417 0 928.68865 151468.54 -157943.07 117.71698 17770.578 224.50275 335.54575 1.9677468 - 660 40.961165 -3293.6967 1002.4504 -4296.1471 1299.7531 0 955.60765 151392.37 -157943.87 207.76414 17523.763 224.35045 335.3089 1.9848634 - 680 42.237597 -3310.539 1011.7934 -4322.3324 1358.9202 0 986.69345 151275.62 -157943.56 677.05046 17289.864 226.44145 338.46824 1.9349743 - 700 43.530486 -3380.6882 976.5597 -4357.2479 1378.7945 0 1003.8845 151205.15 -157945.07 605.30766 17069.732 218.55607 326.63938 1.9523301 - 720 44.837568 -3385.7377 1005.1302 -4390.8679 1389.9512 0 1012.3035 151151.06 -157944.19 817.35931 16863.381 224.95021 336.31657 1.7675955 - 740 46.162222 -3378.6942 1023.8252 -4402.5194 1400.0688 0 1063.4211 151077.64 -157943.65 1513.5741 16671.518 229.13418 342.45655 2.0311926 - 760 47.500172 -3425.4378 1036.4011 -4461.8389 1408.8321 0 1068.7339 151003.75 -157943.15 1350.0894 16496.502 231.9487 346.7108 1.9605952 - 780 48.851472 -3453.9533 1021.8895 -4475.8428 1425.2091 0 1104.5857 150938.44 -157944.08 1801.2205 16339.019 228.70097 341.83264 1.9802343 - 800 50.2129 -3497.6136 979.31494 -4476.9285 1441.1399 0 1119.8292 150908.27 -157946.17 1649.8638 16200.982 219.17269 327.47284 2.1340593 - 820 51.586885 -3545.7792 969.50276 -4515.282 1479.3831 0 1103.1191 150847.98 -157945.76 1410.2174 16081.771 216.97671 324.23659 2.0229826 - 840 52.968935 -3562.4777 972.83071 -4535.3084 1470.5582 0 1079.9217 150857.46 -157943.25 1608.0813 15977.891 217.72151 325.33963 2.0498221 - 860 54.3603 -3569.1307 987.8631 -4556.9938 1446.8392 0 1055.8137 150885.62 -157945.27 1110.2002 15887.947 221.08579 330.4231 1.9689916 - 880 55.752677 -3612.6783 957.13055 -4569.8088 1435.3619 0 1056.264 150883.35 -157944.78 914.27883 15809.361 214.20778 320.06673 2.0614732 - 900 57.105164 -3660.821 939.51428 -4600.3353 1463.6114 0 1070.121 150812.25 -157946.31 1261.3306 15740.285 210.26522 314.20385 1.967446 - 920 58.464501 -3685.0371 941.21956 -4626.2567 1483.8487 0 1096.8187 150737.38 -157944.31 1236.4144 15680.989 210.64687 314.81024 1.89883 - 940 59.82202 -3719.0907 915.61639 -4634.7071 1515.6474 0 1104.1119 150691.39 -157945.86 1066.5855 15632.292 204.91683 306.20627 1.9280979 - 960 61.189826 -3752.7758 893.54303 -4646.3189 1517.1996 0 1125.6182 150656.81 -157945.94 1449.4275 15593.029 199.97676 298.74917 2.0320058 - 980 62.459059 -3752.1139 925.61635 -4677.7302 1528.3468 0 1137.3575 150600.83 -157944.27 1493.1803 15564.263 207.15484 309.5242 2.0018169 - 1000 63.8395 -3737.7642 905.82477 -4643.589 1505.254 0 1110.1192 150686.75 -157945.72 1296.1084 15546.258 202.72544 302.92529 1.9202879 - 1020 65.169118 -3767.2178 892.14155 -4659.3593 1493.2162 0 1085.8721 150707.12 -157945.57 922.80521 15537.177 199.66311 298.24598 2.0980372 - 1040 66.474103 -3783.5702 891.57404 -4675.1442 1484.1631 0 1076.2171 150710.25 -157945.77 707.15481 15535.102 199.5361 298.15469 1.8998396 - 1060 67.68596 -3816.1219 868.55884 -4684.6807 1478.7568 0 1060.3026 150723.2 -157946.94 638.16846 15538.641 194.38525 290.46937 1.8282435 - 1080 69.003517 -3807.3485 875.34276 -4682.6913 1482.2148 0 1055.6143 150725.66 -157946.19 416.14661 15546.427 195.90351 292.75831 1.802085 - 1100 70.315532 -3814.5517 894.42504 -4708.9768 1492.6318 0 1053.4891 150692.22 -157947.31 341.55654 15557.253 200.17416 299.12904 1.8640462 - 1120 71.62724 -3837.42 886.31149 -4723.7315 1497.9422 0 1047.1133 150677.33 -157946.12 4.9308474 15569.465 198.35833 296.42678 1.8247148 - 1140 72.956868 -3802.3965 899.40687 -4701.8034 1479.6329 0 1020.1254 150744.44 -157946 -142.99064 15582.446 201.2891 300.81318 1.8383791 - 1160 74.274932 -3810.7658 902.84695 -4713.6127 1472.5916 0 1018.8174 150740.5 -157945.52 12.783208 15594.928 202.059 301.90406 1.9647721 - 1180 75.595463 -3786.4338 929.44447 -4715.8783 1477.4053 0 1016.2942 150735.81 -157945.39 -53.70556 15606.416 208.01158 310.85718 1.9043666 - 1200 76.915409 -3800.0338 897.43664 -4697.4705 1483.1401 0 1059.31 150706.14 -157946.06 534.37576 15617.028 200.84816 300.11638 1.9100302 - 1220 78.119883 -3799.6824 882.65153 -4682.3339 1488.5302 0 1036.1696 150739.15 -157946.19 155.57627 15628.242 197.53922 295.16257 1.8974641 - 1240 79.419663 -3800.7533 911.18613 -4711.9394 1475.5968 0 1005.3229 150752.61 -157945.47 -457.64009 15638.953 203.92533 304.69739 1.9733514 - 1260 80.721954 -3763.5149 950.12041 -4713.6353 1441.6787 0 964.69517 150825.9 -157945.91 -604.24646 15647.017 212.6389 317.74138 2.0086447 - 1280 82.018768 -3770.742 937.09634 -4707.8384 1445.4659 0 949.37244 150842.61 -157945.28 -993.94783 15650.702 209.72409 313.39122 1.9703726 - 1300 83.314893 -3777.4899 904.34062 -4681.8306 1435.5873 0 967.49755 150860.85 -157945.76 -640.04936 15648.293 202.39329 302.46077 1.8535337 - 1320 84.617907 -3766.6204 885.81908 -4652.4395 1416.0678 0 971.89494 150906.86 -157947.27 -366.46049 15641.654 198.24813 296.26647 1.8149522 - 1340 85.931152 -3774.8032 919.58694 -4694.3901 1425.1776 0 939.16654 150887.07 -157945.81 -950.33698 15631.589 205.80544 307.5014 2.0019282 - 1360 87.242691 -3787.4243 922.65238 -4710.0767 1430.1028 0 964.01827 150842.71 -157946.91 -767.13405 15614.998 206.4915 308.53756 1.9863831 - 1380 88.556261 -3792.754 900.77391 -4693.5279 1420.8035 0 953.09514 150878.52 -157945.95 -1072.9667 15593.378 201.59505 301.19366 1.9946415 - 1400 89.868914 -3772.1032 910.85489 -4682.9581 1401.9732 0 959.20659 150901.09 -157945.23 -640.48972 15566.828 203.85119 304.58411 1.9776581 - 1420 91.085535 -3782.5246 898.64718 -4681.1718 1436.1885 0 1010.9254 150817.16 -157945.45 -21.80524 15536.721 201.11908 300.5555 1.8440133 - 1440 92.406331 -3775.4206 919.73488 -4695.1554 1446.1057 0 1018.1835 150785.23 -157944.68 46.810177 15507.157 205.83855 307.4904 2.123189 - 1460 93.732761 -3757.7457 938.91361 -4696.6593 1451.5945 0 1008.6517 150787.38 -157944.28 -175.88589 15478.297 210.13079 313.97065 2.030827 - 1480 95.057074 -3776.8625 933.4271 -4710.2896 1469.7064 0 1033.8521 150731.34 -157945.19 171.44717 15450.004 208.9029 312.19981 1.8912834 - 1500 96.391192 -3764.5196 945.12068 -4709.6403 1483.0898 0 1052.3029 150699.59 -157944.62 431.18844 15423.716 211.51995 316.14058 1.85565 - 1520 97.721669 -3760.514 960.29952 -4720.8136 1507.6965 0 1068.2902 150648.96 -157945.76 714.27148 15402.108 214.917 321.14587 2.0294443 - 1540 99.056402 -3787.9932 950.73472 -4738.728 1514.4781 0 1058.2368 150635.29 -157946.73 547.92963 15384.955 212.77638 318.01984 1.8639142 - 1560 100.30064 -3822.5612 921.12091 -4743.6821 1519.8628 0 1084.8337 150596.5 -157944.88 479.4088 15370.571 206.14875 308.02344 1.987069 - 1580 101.63827 -3832.4207 936.50822 -4768.9289 1562.5808 0 1124.0034 150490.87 -157946.38 833.06708 15360.019 209.59246 313.15266 2.0528778 - 1600 102.98354 -3862.3688 922.42346 -4784.7923 1571.2038 0 1110.9988 150479.2 -157946.19 674.29885 15354.399 206.44026 308.48417 1.9395764 - 1620 104.32562 -3863.8731 946.37539 -4810.2485 1562.9498 0 1094.323 150478.98 -157946.5 -224.35579 15352.811 211.80075 316.51174 1.9551706 - 1640 105.66368 -3834.5163 952.04367 -4786.5599 1536.5144 0 1078.6783 150544.66 -157946.41 -30.565669 15352.152 213.06933 318.41145 1.9589345 - 1660 107.00124 -3859.131 892.31028 -4751.4413 1515.0462 0 1076.4059 150603.91 -157946.81 227.01045 15352.058 199.70087 298.41871 1.8658052 - 1680 108.2363 -3858.2995 918.6578 -4776.9573 1533.9319 0 1064.9106 150570.69 -157946.49 335.15388 15352.595 205.5975 307.20976 1.9617869 - 1700 109.5659 -3850.0817 929.25672 -4779.3384 1552.5519 0 1094.2161 150519.21 -157945.31 393.76719 15353.331 207.96956 310.72982 2.0330981 - 1720 110.90017 -3890.603 917.87519 -4808.4781 1566.3302 0 1075.6092 150495.91 -157946.33 -76.371955 15355.997 205.42235 306.92393 2.0083539 - 1740 112.13829 -3891.5259 936.37478 -4827.9007 1568.2195 0 1085.8514 150464.14 -157946.11 0.9297943 15358.36 209.5626 313.09836 2.0719603 - 1760 113.46951 -3881.0244 903.38798 -4784.4124 1524.2547 0 1079.0557 150557.47 -157945.19 192.41461 15360.098 202.18008 302.05776 2.0203699 - 1780 114.81068 -3885.7248 910.74799 -4796.4728 1532.8732 0 1055.4583 150560.36 -157945.17 -530.84683 15362.305 203.82727 304.58876 1.8966227 - 1800 116.14689 -3907.0506 885.50025 -4792.5508 1533.7624 0 1068.2841 150550.77 -157945.37 240.13827 15362.751 198.17677 296.0834 1.9671724 - 1820 117.48197 -3898.1244 894.18625 -4792.3107 1521.378 0 1059.1428 150574.05 -157946.88 34.574046 15361.495 200.12072 298.96924 2.0234207 - 1840 118.82815 -3874.3766 895.94028 -4770.3169 1523.7865 0 1077.7882 150573.72 -157945.61 324.16201 15359.092 200.51327 299.59285 1.9530985 - 1860 120.06522 -3892.2617 891.17198 -4783.4337 1526.1544 0 1091.1167 150543.11 -157943.82 574.32363 15357.261 199.44612 297.92332 2.0928308 - 1880 121.40834 -3906.8943 911.93286 -4818.8271 1552.4086 0 1113.1993 150462.35 -157946.79 279.12422 15356.96 204.09245 304.90059 2.0679776 - 1900 122.76151 -3922.7591 879.82965 -4802.5888 1550.6607 0 1108.3657 150485.77 -157947.38 356.47291 15359.386 196.90768 294.18644 1.9563556 - 1920 124.11267 -3960.2437 869.21003 -4829.4537 1521.5339 0 1036.9974 150558.9 -157946.89 -839.29936 15362.76 194.53099 290.66184 1.8802157 - 1940 125.45713 -3954.661 876.75754 -4831.4186 1506.7448 0 1007.0383 150601.14 -157946.34 -1316.6937 15361.338 196.22014 293.17781 1.9123591 - 1960 126.70769 -3938.7558 876.41976 -4815.1756 1481.7627 0 996.84388 150652.15 -157945.93 -887.63902 15352.095 196.14454 293.08662 1.8680915 - 1980 128.05176 -3911.4383 894.43818 -4805.8765 1516.4382 0 1037.517 150585.32 -157945.15 -176.75144 15336.185 200.1771 299.12472 1.8815139 - 2000 129.4091 -3920.2641 888.06919 -4808.3333 1495.9942 0 1040.703 150601.72 -157946.75 -243.72475 15316.676 198.75171 296.94612 1.9653682 -Loop time of 129.409 on 1 procs for 2000 steps with 2500 atoms - -Pair time (%) = 109.108 (84.3128) -Bond time (%) = 0.0499372 (0.0385887) -Kspce time (%) = 3.30969 (2.55754) -Neigh time (%) = 9.70209 (7.49723) -Comm time (%) = 0.829103 (0.640684) -Outpt time (%) = 0.00999022 (0.00771987) -Other time (%) = 6.39989 (4.94547) - -Nlocal: 2500 ave 2500 max 2500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 21780 ave 21780 max 21780 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.34087e+06 ave 2.34087e+06 max 2.34087e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2340869 -Ave neighs/atom = 936.348 -Ave special neighs/atom = 4 -Neighbor list builds = 100 -Dangerous builds = 6 - diff --git a/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.4 b/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.4 deleted file mode 100644 index b43b75cc35..0000000000 --- a/examples/USER/drude/swm4-ndp/log.swm4-ndp.lang.8Jul15.linux.4 +++ /dev/null @@ -1,230 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/coul/long 12.0 12.0 -kspace_style pppm 1.0e-3 - -comm_modify vel yes -read_data data.swm4-ndp - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 2500 atoms - scanning bonds ... - 1 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 2000 bonds - reading angles ... - 500 angles - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 3 = max # of 1-4 neighbors - 4 = max # of special neighbors - -pair_coeff 1 1 0.210939 3.183950 # ODw ODw -pair_coeff * 2* 0.000000 0.0 - -group ATOMS type 1:3 -2000 atoms in group ATOMS -group CORES type 1 -500 atoms in group CORES -group DRUDES type 4 -500 atoms in group DRUDES - -variable TK equal 300.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -neighbor 2.0 bin - -timestep 1.0 - -fix DRUDE all drude C N N D - -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 300 12345 -velocity DRUDES create ${TDK} 12345 -velocity DRUDES create 1 12345 - -delete_bonds ATOMS multi -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 1500 300 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 14 - 2000 total bonds, 500 turned on, 1500 turned off - 500 total angles, 0 turned on, 500 turned off - 0 total dihedrals, 0 turned on, 0 turned off - 0 total impropers, 0 turned on, 0 turned off - -fix TEMP all langevin/drude ${TK} 100. 1256 ${TDK} 20. 13977 zero yes -fix TEMP all langevin/drude 300 100. 1256 ${TDK} 20. 13977 zero yes -fix TEMP all langevin/drude 300 100. 1256 1 20. 13977 zero yes -fix NPH ATOMS rigid/nph/small molecule iso ${PBAR} ${PBAR} 500. -fix NPH ATOMS rigid/nph/small molecule iso 1 ${PBAR} 500. -fix NPH ATOMS rigid/nph/small molecule iso 1 1 500. -500 rigid bodies with 2000 atoms - 0.832099 = max distance from body owner to body atom -fix NVE DRUDES nve - -compute TEMP all temp/drude - -thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] -thermo 20 - -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 1500 300 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Memory usage per processor = 15.0906 Mbytes -Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp TEMP[1] TEMP[2] - 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 - 20 0.47649789 2915.1578 4579.5774 -1664.4195 561.91893 0 600.76451 155095.13 -157922.23 27379.77 14058.574 1024.9188 1455.9194 160.86778 - 40 0.97488093 1320.1721 3337.6372 -2017.4651 726.83344 0 585.5439 154587.28 -157917.12 18749.425 14485.651 746.97006 1101.4061 36.530914 - 60 1.4631288 284.06852 2671.4325 -2387.3639 575.54157 0 387.8792 154580.74 -157931.53 12104.741 15031.425 597.87207 886.98502 18.450413 - 80 1.937151 -462.53017 2214.284 -2676.8142 560.36347 0 254.65245 154447.22 -157939.05 6285.2465 15651.216 495.56131 739.13811 7.4024411 - 100 2.3922298 -965.19662 1839.831 -2805.0276 544.59528 0 115.80812 154469.59 -157935.02 2361.9397 16295.72 411.75795 615.12769 4.196977 - 120 2.832803 -1316.6351 1649.585 -2966.2202 554.6664 0 50.928925 154365.49 -157937.3 -493.85523 16925.293 369.18052 552.0345 2.7331855 - 140 3.2340388 -1590.9162 1440.6669 -3031.5831 526.07679 0 -24.44055 154404.35 -157937.57 -2586.2431 17517.285 322.42421 482.16117 2.297578 - 160 3.6521859 -1742.3401 1326.8812 -3069.2213 539.49044 0 -43.846659 154369.1 -157933.96 -3549.2196 18059.707 296.95874 444.11026 2.0644677 - 180 4.033325 -1895.1332 1224.1816 -3119.3148 555.27887 0 -18.261233 154275.94 -157932.27 -3762.2304 18545.518 273.97437 409.78413 1.806893 - 200 4.4333398 -2004.4682 1176.8828 -3181.351 565.0443 0 0.21425471 154190.38 -157936.99 -4346.6036 18973.342 263.38879 393.94856 1.7400558 - 220 4.8055639 -2094.1888 1098.3856 -3192.5744 592.45764 0 36.50238 154113.36 -157934.89 -4135.0794 19341.735 245.82095 367.67707 1.617053 - 240 5.1688328 -2178.9829 1086.8322 -3265.8151 617.63697 0 96.836936 153957.27 -157937.56 -4121.5262 19651.8 243.23528 363.77401 1.6722646 - 260 5.5313618 -2264.8265 1078.4348 -3343.2613 663.35817 0 167.76882 153763.13 -157937.52 -3799.3346 19907.052 241.35592 360.97385 1.6377289 - 280 5.8937738 -2325.7764 1097.4356 -3423.212 717.74089 0 235.0127 153562.96 -157938.92 -3696.0526 20111.414 245.60833 367.31076 1.7042318 - 300 6.254128 -2390.4932 1068.1054 -3458.5986 751.64681 0 295.31516 153435.34 -157940.9 -3512.2095 20268.754 239.04419 357.49427 1.665921 - 320 6.6138928 -2455.1776 1041.7419 -3496.9195 765.8972 0 331.14997 153345 -157938.97 -3020.0674 20383.474 233.14397 348.62385 1.7179273 - 340 6.9748628 -2536.9935 1050.7304 -3587.7239 793.64536 0 352.69908 153205.74 -157939.81 -3447.9127 20457.612 235.15562 351.6381 1.7214573 - 360 7.3319299 -2603.5606 966.90943 -3570.47 819.14306 0 391.00909 153158.89 -157939.51 -3164.629 20490.764 216.39631 323.51872 1.7254892 - 380 7.691319 -2594.787 1024.7927 -3619.5797 836.44816 0 434.32118 153047.12 -157937.47 -2902.9345 20485.923 229.35071 342.91482 1.7641915 - 400 8.044276 -2647.3896 982.46478 -3629.8543 864.59805 0 479.08516 152963.5 -157937.04 -2535.9236 20447.668 219.87764 328.69587 1.8030508 - 420 8.3971269 -2687.5263 1023.0437 -3710.57 928.04551 0 538.49845 152760.83 -157937.94 -2383.6292 20380.427 228.95928 342.31215 1.8044964 - 440 8.753284 -2765.2192 999.28342 -3764.5026 966.26754 0 577.15359 152631.24 -157939.17 -2391.0923 20286.676 223.64168 334.34309 1.7947669 - 460 9.1102748 -2806.7385 1004.2311 -3810.9696 996.86893 0 599.41867 152532.79 -157940.05 -2476.5754 20168.782 224.74899 335.97767 1.8475589 - 480 9.471664 -2830.2582 1013.6925 -3843.9506 1009.5553 0 624.64584 152464.58 -157942.73 -2210.7254 20027.747 226.86645 339.14841 1.8588685 - 500 9.8365009 -2865.4993 1024.473 -3889.9723 1017.2606 0 658.56598 152375.13 -157940.93 -2047.5735 19865.992 229.27916 342.78576 1.8103481 - 520 10.207523 -2918.9299 973.10292 -3892.0328 1049.357 0 699.16951 152300.27 -157940.83 -1453.4121 19688.211 217.78243 325.51403 1.8799495 - 540 10.583098 -2970.1121 925.84385 -3895.956 1077.9578 0 758.25478 152208.67 -157940.84 -821.19447 19499.417 207.20575 309.67486 1.8442683 - 560 10.962813 -3008.9942 954.33133 -3963.3255 1114.7309 0 751.85274 152112.75 -157942.66 -1023.0801 19304.314 213.58131 319.23167 1.8463043 - 580 11.351938 -3069.9822 951.38041 -4021.3626 1127.8186 0 765.20411 152027.82 -157942.2 -954.30565 19101.694 212.92089 318.20155 1.9391088 - 600 11.74351 -3090.3867 973.25557 -4063.6423 1123.3487 0 744.86978 152009.46 -157941.32 -1226.2333 18891.444 217.81659 325.5949 1.8227604 - 620 12.138507 -3114.2347 1002.2136 -4116.4483 1159.4812 0 766.24573 151899.05 -157941.23 -1406.6638 18672.922 224.29746 335.32178 1.8002314 - 640 12.53874 -3160.3172 973.01388 -4133.3311 1181.5814 0 805.79135 151821.94 -157942.65 -1444.0821 18448.163 217.7625 325.51017 1.8464735 - 660 12.945363 -3185.1871 975.57462 -4160.7618 1177.1798 0 795.84414 151809.59 -157943.38 -962.08053 18220.064 218.3356 326.36793 1.8252243 - 680 13.358243 -3226.8034 977.21534 -4204.0187 1215.3088 0 862.3869 151662.05 -157943.76 -538.09214 17991.009 218.7028 326.90984 1.8513045 - 700 13.774714 -3267.0358 979.72611 -4246.7619 1229.2873 0 878.80049 151588.58 -157943.43 -526.4724 17765.058 219.26471 327.74412 1.86738 - 720 14.198356 -3275.0063 987.91851 -4262.9248 1260.2342 0 905.19546 151515.01 -157943.36 -285.51035 17544.004 221.09819 330.48021 1.8901628 - 740 14.624448 -3298.9204 992.679 -4291.5994 1283.7665 0 917.78414 151449.24 -157942.39 351.98558 17329.448 222.1636 332.09658 1.843264 - 760 15.05056 -3316.7113 1010.6458 -4327.3571 1296.6728 0 951.2091 151368.47 -157943.71 419.51796 17123.095 226.18459 338.07068 1.9518407 - 780 15.504961 -3294.5707 1053.9493 -4348.52 1300.722 0 975.60682 151317.15 -157942 1040.7668 16927.715 235.87602 352.49204 2.1793007 - 800 15.933704 -3363.0539 987.22337 -4350.2773 1325.1641 0 1013.664 151255.26 -157944.36 1462.6199 16747.7 220.94262 330.24432 1.8985721 - 820 16.364414 -3437.2117 980.5397 -4417.7514 1350.8684 0 1029.953 151144.46 -157943.03 817.95684 16584.026 219.4468 327.9943 1.9129039 - 840 16.799625 -3465.5868 981.23685 -4446.8236 1388.7125 0 1043.4314 151066.43 -157945.4 1366.0731 16434.707 219.60282 328.17006 2.0308095 - 860 17.241996 -3460.2301 1020.3681 -4480.5981 1418.4709 0 1090.9207 150954.21 -157944.2 1450.0443 16300.524 228.36046 341.31823 2.0218282 - 880 17.688347 -3499.5491 994.43799 -4493.9871 1444.4283 0 1113.276 150893.43 -157945.12 2227.6739 16183.439 222.55726 332.59403 2.0408296 - 900 18.136371 -3526.9176 952.87144 -4479.789 1443.8422 0 1118.5107 150902.72 -157944.87 2220.1643 16085.505 213.25458 318.69359 1.9574553 - 920 18.599828 -3545.2479 976.95271 -4522.2006 1443.4309 0 1118.3924 150859.69 -157943.71 2107.6215 16006.466 218.64402 326.75181 1.9926282 - 940 19.064528 -3560.4406 994.62379 -4555.0644 1431.3624 0 1098.4902 150860.38 -157945.3 1495.9356 15944.46 222.59885 332.62316 2.0953461 - 960 19.529192 -3590.569 964.78915 -4555.3582 1431.9284 0 1092.1793 150866.87 -157946.34 1559.1687 15897.003 215.92179 322.6406 2.0442546 - 980 19.991661 -3599.6592 986.56344 -4586.2227 1435.7543 0 1034.8682 150889.35 -157946.2 679.01087 15862.242 220.79492 330.01359 1.9307016 - 1000 20.427668 -3634.9266 939.78172 -4574.7083 1424.4834 0 1022.664 150924.73 -157946.59 733.04572 15834.345 210.32508 314.30018 1.9584145 - 1020 20.873712 -3669.298 934.76265 -4604.0606 1452.3 0 1016.3445 150873.46 -157946.16 143.60284 15811.749 209.2018 312.55492 2.0808526 - 1040 21.319204 -3682.4175 935.86127 -4618.2788 1447.0344 0 1035.4526 150844.58 -157945.34 515.93558 15792.261 209.44767 312.98247 1.9790896 - 1060 21.766855 -3704.0833 901.03929 -4605.1226 1476.4857 0 1067.779 150794.42 -157943.8 1092.0636 15777.267 201.65444 301.3325 1.8948719 - 1080 22.214459 -3699.4923 921.66268 -4621.155 1475.7351 0 1079.7576 150767.2 -157943.85 1003.4205 15769.569 206.27 308.27973 1.8458618 - 1100 22.662445 -3667.6761 957.47147 -4625.1476 1507.2355 0 1102.9252 150708.15 -157943.46 927.20789 15768.898 214.28408 320.17339 2.0742837 - 1120 23.085055 -3668.1399 935.38917 -4603.5291 1507.3367 0 1080.9826 150753.9 -157945.75 810.87137 15775.175 209.34202 312.79082 2.0279075 - 1140 23.534417 -3710.7149 937.22068 -4647.9356 1499.5413 0 1020.4759 150776.54 -157944.49 -138.27816 15786.277 209.75191 313.34734 2.1346658 - 1160 23.985544 -3711.7493 900.74897 -4612.4983 1430.3269 0 990.84122 150911.11 -157944.78 8.4592568 15798.538 201.58947 301.24561 1.8661211 - 1180 24.439474 -3729.7115 928.82825 -4658.5398 1435.7711 0 937.43508 150913.97 -157945.72 -905.33202 15809.125 207.87367 310.65722 1.8872897 - 1200 24.895124 -3738.2838 909.79315 -4648.077 1436.4199 0 938.10918 150922.8 -157945.41 -1112.9968 15812.511 203.61357 304.28121 1.8714711 - 1220 25.352201 -3757.8302 907.08742 -4664.9176 1424.1514 0 930.13653 150924.86 -157944.06 -1078.0621 15807.893 203.00803 303.40134 1.8521625 - 1240 25.780748 -3778.5355 905.88168 -4684.4171 1453.9568 0 959.37689 150846.21 -157943.96 -975.25032 15795.393 202.73818 303.00695 1.778808 - 1260 26.238145 -3773.7584 879.94641 -4653.7048 1473.5812 0 1002.67 150815.41 -157945.36 -360.58922 15776.466 196.93381 294.2433 1.9174557 - 1280 26.696751 -3755.4956 904.13603 -4659.6316 1493.7103 0 1017.8327 150773.94 -157945.12 -256.88128 15755.525 202.3475 302.35592 1.9294965 - 1300 27.158244 -3754.9246 903.51795 -4658.4425 1498.1329 0 1006.1786 150782.15 -157944.9 -455.2258 15732.436 202.20917 302.19365 1.8353806 - 1320 27.619539 -3758.1232 913.25769 -4671.3808 1500.2049 0 1032.0703 150739.71 -157943.37 -251.62277 15706.775 204.38895 305.38485 1.9968111 - 1340 28.079132 -3784.7481 937.61449 -4722.3626 1505.7439 0 993.46365 150723.27 -157944.84 -853.9871 15680.38 209.84005 313.60153 1.8911101 - 1360 28.514251 -3808.7787 864.89279 -4673.6715 1475.0618 0 1009.2569 150785.65 -157943.64 -331.64382 15650.208 193.56478 289.20988 1.8929896 - 1380 28.975972 -3798.7281 892.2622 -4690.9903 1465.561 0 993.58051 150793.83 -157943.96 -567.64508 15617.156 199.69011 298.39786 1.8757635 - 1400 29.439238 -3807.9228 893.51775 -4701.4406 1459.3875 0 1000.4434 150784.38 -157945.65 -456.80001 15580.856 199.97111 298.79789 1.925086 - 1420 29.904427 -3818.6783 890.66153 -4709.3398 1515.8208 0 1064.6851 150655.36 -157945.21 450.86768 15542.76 199.33188 297.83132 1.927452 - 1440 30.368352 -3822.016 910.79285 -4732.8089 1539.2325 0 1076.0339 150597.99 -157946.07 429.02044 15506.302 203.83731 304.53724 2.0216852 - 1460 30.835555 -3821.2117 931.47963 -4752.6914 1540.1582 0 1089.9477 150561.76 -157944.55 645.54716 15472.89 208.46705 311.56653 1.8487206 - 1480 31.306455 -3838.255 920.25737 -4758.5124 1546.6509 0 1107.4468 150533.86 -157946.47 556.76352 15443.298 205.95549 307.74395 1.9637305 - 1500 31.747528 -3839.4323 942.18813 -4781.6204 1557.1836 0 1105.7209 150502.68 -157947.21 535.34633 15417.723 210.86364 315.07463 2.0384198 - 1520 32.218974 -3827.551 925.42642 -4752.9774 1555.4578 0 1097.174 150540.89 -157946.5 680.16246 15396 207.11233 309.42351 2.0793499 - 1540 32.691924 -3836.1802 885.40721 -4721.5874 1558.3851 0 1144.6478 150521.13 -157945.75 1216.5367 15378.972 198.15595 296.02524 2.015983 - 1560 33.164075 -3830.4342 955.31807 -4785.7523 1574.0464 0 1105.7294 150481.06 -157946.59 169.17645 15369.126 213.80214 319.4694 2.0400237 - 1580 33.636497 -3808.4082 948.31996 -4756.7281 1556.8058 0 1079.1205 150552.4 -157945.06 603.87966 15363.124 212.23595 317.13706 2.0112224 - 1600 34.111529 -3835.9681 925.63461 -4761.6027 1575.0508 0 1091.3896 150517.16 -157945.2 356.94873 15359.871 207.15893 309.60148 1.8514712 - 1620 34.558112 -3865.8357 866.45292 -4732.2886 1577.3357 0 1137.1716 150497.63 -157944.43 945.81112 15359.844 193.91394 289.72922 1.8926829 - 1640 35.029171 -3849.5025 884.49282 -4733.9954 1547.0606 0 1101.4292 150561.92 -157944.41 703.96326 15365.598 197.95131 295.76038 1.913597 - 1660 35.495665 -3861.3162 906.62112 -4767.9373 1547.2773 0 1074.8986 150555.48 -157945.6 46.512723 15375.298 202.90367 303.1667 1.9573677 - 1680 35.959871 -3857.7679 907.8657 -4765.6336 1547.7327 0 1089.3299 150543.52 -157946.22 383.48079 15386.165 203.18221 303.5736 2.0202069 - 1700 36.428885 -3869.0902 891.82145 -4760.9117 1512.1728 0 1012.6239 150658.31 -157944.02 -488.95961 15397.869 199.59147 298.24425 1.8990607 - 1720 36.903833 -3870.4685 893.82411 -4764.2926 1485.7646 0 989.27762 150706.25 -157945.59 -542.70653 15406.338 200.03967 298.80302 2.1113341 - 1740 37.380529 -3847.3408 893.93384 -4741.2746 1509.8117 0 1031.6641 150663.04 -157945.79 -307.1162 15410.521 200.06423 298.90093 2.0090208 - 1760 37.827319 -3840.438 868.84851 -4709.2865 1474.404 0 1018.599 150744.2 -157946.49 -276.44721 15412.838 194.45008 290.51398 1.9203414 - 1780 38.297568 -3842.0322 910.50606 -4752.5383 1494.2187 0 1002.3762 150696.05 -157945.18 -585.57252 15412.983 203.77313 304.47127 1.9624414 - 1800 38.76671 -3861.9431 881.98228 -4743.9254 1471.6721 0 978.01808 150752.55 -157946.17 -711.07254 15409.636 197.38944 294.90206 1.9749925 - 1820 39.233968 -3890.8613 856.10452 -4746.9658 1505.1405 0 991.9875 150701.72 -157945.82 -509.17282 15401.428 191.59795 286.24213 1.9311068 - 1840 39.704207 -3860.2881 907.57785 -4767.866 1492.5264 0 999.80677 150685.45 -157945.65 -697.50098 15387.414 203.11779 303.52338 1.9123566 - 1860 40.174673 -3879.0681 938.58496 -4817.653 1532.9628 0 1046.6919 150550.41 -157947.72 -311.83188 15369.15 210.05724 313.84514 2.0580305 - 1880 40.646746 -3871.1182 925.64972 -4796.7679 1531.6363 0 1064.5321 150553.96 -157946.9 136.0161 15350.638 207.16231 309.48972 2.0957912 - 1900 41.120691 -3868.9005 949.1652 -4818.0657 1593.1686 0 1150.4095 150384.01 -157945.65 753.94006 15333.301 212.42512 317.39691 2.0615952 - 1920 41.59464 -3868.6343 954.03473 -4822.669 1610.5603 0 1192.2159 150320.88 -157946.33 1209.5547 15321.106 213.51493 319.06152 2.011006 - 1940 42.037294 -3884.0548 926.13369 -4810.1885 1595.5448 0 1167.6153 150372.25 -157945.6 1289.8018 15318.433 207.27062 309.70304 1.9619634 - 1960 42.507917 -3889.403 953.52537 -4842.9284 1598.8799 0 1116.9498 150388.89 -157947.65 327.93587 15323.804 213.40093 318.9112 1.9579466 - 1980 42.973861 -3911.0951 911.40927 -4822.5043 1553.4244 0 1085.4519 150485.64 -157947.02 169.14591 15332.113 203.97527 304.77814 1.9637281 - 2000 43.43889 -3892.0279 902.31728 -4794.3452 1534.2125 0 1088.703 150530.25 -157947.51 473.37009 15341.654 201.94046 301.71557 1.9929295 -Loop time of 43.4389 on 4 procs for 2000 steps with 2500 atoms - -Pair time (%) = 30.8131 (70.9343) -Bond time (%) = 0.0167851 (0.0386406) -Kspce time (%) = 2.78529 (6.41196) -Neigh time (%) = 2.7229 (6.26835) -Comm time (%) = 2.36382 (5.4417) -Outpt time (%) = 0.00704503 (0.0162182) -Other time (%) = 4.72998 (10.8888) - -Nlocal: 625 ave 641 max 600 min -Histogram: 1 0 0 0 0 0 0 2 0 1 -Nghost: 13465.2 ave 13518 max 13362 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Neighs: 585334 ave 608376 max 546210 min -Histogram: 1 0 0 0 0 0 1 0 1 1 - -Total # of neighbors = 2341334 -Ave neighs/atom = 936.534 -Ave special neighs/atom = 4 -Neighbor list builds = 100 -Dangerous builds = 7 - diff --git a/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.1 b/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.1 deleted file mode 100644 index 5180a5ff69..0000000000 --- a/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.1 +++ /dev/null @@ -1,236 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/coul/long 12.0 12.0 -kspace_style pppm 1.0e-3 - -read_data data.swm4-ndp - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2500 atoms - scanning bonds ... - 1 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 2000 bonds - reading angles ... - 500 angles - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 3 = max # of 1-4 neighbors - 4 = max # of special neighbors - -pair_coeff 1 1 0.210939 3.183950 # ODw ODw -pair_coeff * 2* 0.000000 0.0 - -group ATOMS type 1:3 -2000 atoms in group ATOMS -group CORES type 1 -500 atoms in group CORES -group DRUDES type 4 -500 atoms in group DRUDES - -variable TK equal 300.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -neighbor 2.0 bin - -timestep 1.0 - -fix DRUDE all drude C N N D - -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 300 12345 -velocity DRUDES create ${TDK} 12345 -velocity DRUDES create 1 12345 - -delete_bonds ATOMS multi -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 3375 1000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 14 - 2000 total bonds, 500 turned on, 1500 turned off - 500 total angles, 0 turned on, 500 turned off - 0 total dihedrals, 0 turned on, 0 turned off - 0 total impropers, 0 turned on, 0 turned off - -comm_modify vel yes -compute TATOM ATOMS temp/com -compute TEMP all temp/drude - -fix DTDIR all drude/transform/direct -fix RIGID ATOMS rigid/npt/small molecule temp ${TK} ${TK} 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 ${TK} 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 1 500 -500 rigid bodies with 2000 atoms - 0.832099 = max distance from body owner to body atom -fix_modify RIGID temp TATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_rigid_nh_small.cpp:1395) -fix NVT DRUDES nvt temp ${TDK} ${TDK} 100.0 -fix NVT DRUDES nvt temp 1 ${TDK} 100.0 -fix NVT DRUDES nvt temp 1 1 100.0 -fix DTINV all drude/transform/inverse - -thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] -thermo 20 - -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 3375 1000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Memory usage per processor = 24.8361 Mbytes -Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp TEMP[1] TEMP[2] - 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 - 20 1.5779378 3742.6839 5338.7884 -1596.1045 567.30749 0 662.23765 155098.36 -157924.01 31679.424 13979.574 1194.8318 1690.2246 201.65659 - 40 3.2595179 2752.8331 4407.7651 -1654.932 793.00135 0 870.33079 154593.76 -157912.03 27394.571 14278.56 986.46688 1450.7477 55.932382 - 60 4.9160559 1995.591 3982.0372 -1986.4462 660.67737 0 750.60932 154536.67 -157934.4 22230.527 14691.401 891.1881 1315.7324 40.317107 - 80 6.5368109 1376.4607 3451.5429 -2075.0822 617.73899 0 606.3673 154625.69 -157924.88 17342.36 15201.343 772.46238 1147.1933 21.455584 - 100 8.1206679 885.61474 3037.6308 -2152.0161 536.23281 0 448.92334 154793.04 -157930.22 13263.15 15783.251 679.82802 1011.6854 14.7536 - 120 9.6622779 487.58833 2926.9844 -2439.396 534.45257 0 332.92672 154624.58 -157931.35 8680.1072 16409.225 655.06511 977.0118 9.8615914 - 140 11.151044 159.92993 2531.0941 -2371.1641 507.26614 0 248.61605 154802.7 -157929.75 6399.7614 17052.819 566.46405 845.55948 7.1402545 - 160 12.594065 -100.92554 2408.1685 -2509.0941 490.99513 0 134.36067 154800.59 -157935.04 3836.8939 17698.15 538.95306 805.19219 5.3968881 - 180 13.99897 -313.40437 2221.7416 -2535.1459 469.97779 0 75.805558 154853.24 -157934.17 1959.0151 18334.826 497.23032 743.14066 4.4151864 - 200 15.366489 -490.94535 2067.2605 -2558.2059 455.16264 0 77.545085 154841.14 -157932.06 1193.2843 18956.449 462.65715 691.7234 3.5993432 - 220 16.600555 -642.90899 1962.7268 -2605.6358 481.409 0 64.82886 154779.27 -157931.14 257.97318 19559.017 439.26229 657.06726 2.7738353 - 240 17.905356 -770.44499 1795.759 -2566.204 467.25833 0 68.82314 154829.98 -157932.26 19.366424 20139.417 401.89456 601.24562 2.3886434 - 260 19.179106 -878.63388 1752.9497 -2631.5836 476.38325 0 71.933328 154747.16 -157927.06 -779.27927 20696.165 392.31375 587.06527 2.0260796 - 280 20.338816 -971.86313 1649.5511 -2621.4143 473.83718 0 58.460942 154779.6 -157933.32 -1008.6839 21226.44 369.17293 552.5314 1.7176302 - 300 21.569212 -1057.5245 1580.9766 -2638.5012 480.33124 0 92.042617 154721.84 -157932.72 -1273.0871 21728.981 353.82581 529.63244 1.5049172 - 320 22.749114 -1132.8131 1507.0527 -2639.8658 477.51281 0 107.39942 154707.48 -157932.26 -1098.1682 22203.702 337.28149 504.90539 1.3591193 - 340 23.866651 -1199.4814 1495.1233 -2694.6047 479.99745 0 106.51864 154656.08 -157937.2 -1429.2857 22652.428 334.61166 500.95977 1.2462004 - 360 25.082959 -1264.8469 1440.8985 -2705.7454 491.71868 0 107.29672 154624.8 -157929.57 -1584.3973 23073.056 322.47604 482.79111 1.2009575 - 380 26.115491 -1323.6479 1376.047 -2699.695 497.4857 0 130.64748 154603.75 -157931.58 -1822.0261 23465.375 307.96215 461.10877 1.0530068 - 400 27.098619 -1373.3921 1374.977 -2748.3691 504.29487 0 124.46131 154555.55 -157932.67 -2021.5919 23828.229 307.72267 460.78429 0.98399317 - 420 28.070089 -1426.0355 1375.3813 -2801.4168 515.478 0 142.00079 154473.71 -157932.61 -2208.8244 24160.02 307.81316 460.97813 0.86759754 - 440 29.088747 -1476.2448 1329.2669 -2805.5117 535.72651 0 196.6858 154393.5 -157931.42 -1618.3009 24460.675 297.49266 445.47247 0.93805929 - 460 30.039555 -1527.7744 1320.4118 -2848.1861 568.66085 0 263.35802 154252.43 -157932.64 -1494.5444 24734.828 295.51087 442.54962 0.84234766 - 480 30.98472 -1576.2009 1300.9323 -2877.1332 594.86236 0 314.31593 154144.87 -157931.19 -1089.6762 24985.934 291.15132 436.02273 0.82622001 - 500 31.921181 -1626.4788 1317.6697 -2944.1486 623.62396 0 334.61944 154026.32 -157928.71 -1168.0859 25218.234 294.89719 441.63818 0.82542904 - 520 32.850868 -1678.487 1262.6568 -2941.1438 633.47682 0 363.44379 153992.91 -157930.98 -1163.3304 25431.978 282.58518 423.21273 0.76490406 - 540 33.831238 -1726.1374 1271.5003 -2997.6376 640.74261 0 345.52688 153948.98 -157932.89 -1537.3705 25626.826 284.56437 426.19842 0.72713952 - 560 34.751061 -1771.2597 1269.233 -3040.4927 644.30805 0 317.8435 153929.28 -157931.92 -1722.5181 25799.253 284.05695 425.41542 0.77189915 - 580 35.665466 -1815.0265 1246.413 -3061.4395 683.24088 0 371.72686 153815.69 -157932.1 -1494.5382 25947.498 278.94979 417.73291 0.82565978 - 600 36.573731 -1858.3541 1196.3137 -3054.6678 696.06741 0 437.52527 153744.09 -157932.35 -954.95797 26075.526 267.73745 400.95599 0.76490653 - 620 37.479106 -1899.6548 1179.8195 -3079.4743 696.68256 0 400.17078 153755.86 -157932.18 -1545.546 26187.542 264.04602 395.42296 0.76404516 - 640 38.439799 -1936.5953 1175.0129 -3111.6082 690.67817 0 392.53009 153736.67 -157931.49 -1651.1722 26278.598 262.97029 393.82361 0.73771389 - 660 39.342719 -1974.4946 1176.582 -3151.0766 687.10898 0 368.78109 153725.56 -157932.53 -1642.1352 26346.954 263.32147 394.35652 0.72471807 - 680 40.233007 -2011.9427 1170.7634 -3182.7062 704.7553 0 376.83243 153670.03 -157934.32 -1891.1355 26391.697 262.01926 392.39338 0.74699214 - 700 41.124436 -2051.0351 1135.0688 -3186.1039 725.49013 0 408.02789 153612.64 -157932.26 -1554.558 26411.443 254.03072 380.39243 0.79925352 - 720 42.014817 -2087.2728 1127.2712 -3214.544 747.73788 0 483.80639 153486.98 -157933.07 -1246.9189 26409.313 252.28561 377.77086 0.81053421 - 740 42.908141 -2122.8783 1145.0602 -3267.9385 791.69089 0 545.96341 153327.46 -157933.05 -1064.8488 26390.224 256.26683 383.71741 0.85313379 - 760 43.799068 -2155.8658 1189.0654 -3344.9312 789.63603 0 492.27945 153309.89 -157936.74 -1502.4138 26356.52 266.11528 398.4847 0.84422302 - 780 44.690825 -2197.1759 1166.0016 -3363.1774 813.89866 0 521.14986 153239.56 -157937.79 -1316.1431 26304.488 260.95354 390.75511 0.82849551 - 800 45.65434 -2236.6034 1147.1342 -3383.7376 858.77647 0 581.50775 153111.46 -157935.49 -1059.9568 26235.547 256.73099 384.3699 0.93971538 - 820 46.655089 -2273.5686 1128.3309 -3401.8996 876.66305 0 635.8842 153020.42 -157934.87 -522.03009 26154.47 252.52277 378.09253 0.87820184 - 840 47.581215 -2310.5392 1107.1453 -3417.6845 906.73 0 663.59923 152946.29 -157934.31 -660.73299 26066.561 247.78139 370.96848 0.9116362 - 860 48.461532 -2342.7319 1130.0857 -3472.8176 942.10066 0 680.8635 152839.09 -157934.87 -541.95751 25971.767 252.91551 378.61448 1.0117334 - 880 49.348792 -2377.0856 1100.1359 -3477.2215 941.37588 0 700.77054 152814.73 -157934.1 -443.18233 25871.504 246.21267 368.56741 1.0107473 - 900 50.240716 -2408.6694 1120.4615 -3529.131 953.77939 0 683.49952 152768.93 -157935.34 -805.27426 25765.603 250.76159 375.35036 1.0825367 - 920 51.130132 -2442.8312 1111.7289 -3554.56 950.77289 0 674.01395 152754.6 -157933.95 -905.29746 25651.192 248.80721 372.46424 0.9955159 - 940 52.02236 -2475.7651 1083.1001 -3558.8652 929.08218 0 652.94438 152792.16 -157933.05 -788.57962 25527.175 242.40003 362.8243 1.0666862 - 960 52.924057 -2508.9913 1065.8755 -3574.8668 958.92048 0 698.81111 152699.64 -157932.24 -628.47136 25394.225 238.54512 356.97396 1.2103698 - 980 53.828788 -2536.4577 1080.5323 -3616.99 965.47688 0 709.51639 152642.64 -157934.62 -711.96055 25254.689 241.82535 361.89287 1.2066617 - 1000 54.736123 -2567.3495 1049.6524 -3617.0019 961.00327 0 711.26219 152645.74 -157935.01 -767.44539 25108.887 234.91437 351.52221 1.2288643 - 1020 55.707224 -2595.1206 1073.4918 -3668.6124 974.79134 0 682.20149 152609.52 -157935.12 -1086.5823 24955.503 240.24966 359.53972 1.1890491 - 1040 56.677394 -2626.5258 1072.5969 -3699.1227 1013.3934 0 711.73335 152511.92 -157936.17 -993.59976 24792.452 240.04939 359.23966 1.1887504 - 1060 57.582305 -2655.4118 1059.0687 -3714.4806 1011.7018 0 747.43846 152460.24 -157933.86 -555.51961 24621.133 237.02176 354.6316 1.3280226 - 1080 58.451085 -2684.3286 1093.9034 -3778.232 1041.5624 0 765.98574 152348.29 -157934.07 -993.29607 24444.559 244.81782 366.39031 1.183205 - 1100 59.320593 -2716.1558 1073.5935 -3789.7493 1046.6309 0 741.4524 152358.32 -157936.15 -1031.9439 24260.537 240.27243 359.559 1.2187426 - 1120 60.197434 -2748.4358 1043.9493 -3792.3851 1050.7685 0 732.61894 152361.65 -157937.42 -1173.2273 24068.431 233.638 349.62448 1.1977845 - 1140 61.088693 -2777.1545 1036.6106 -3813.7651 1060.884 0 757.21086 152307.36 -157939.22 -1043.4335 23867.228 231.99557 347.17994 1.1628589 - 1160 62.010573 -2805.5456 1027.0164 -3832.5621 1057.9262 0 777.84714 152269.56 -157937.89 -729.25379 23659.194 229.84839 343.97766 1.1301417 - 1180 62.973114 -2832.7144 1030.8608 -3863.5752 1084.2376 0 767.80175 152221.94 -157937.56 -1365.8515 23446.354 230.70875 345.24169 1.1814637 - 1200 63.943778 -2860.0062 1032.0824 -3892.0886 1078.2587 0 781.38106 152185.86 -157937.59 -1050.1069 23225.033 230.98216 345.65138 1.1817665 - 1220 64.923382 -2887.3006 1026.4756 -3913.7762 1073.1543 0 809.51178 152141.13 -157937.57 -956.1976 22997.996 229.72734 343.81693 1.0887098 - 1240 65.912183 -2912.0696 1020.0729 -3932.1425 1095.3889 0 826.297 152085.57 -157939.4 -534.84968 22767.897 228.2944 341.63565 1.15531 - 1260 66.908861 -2938.0025 1009.7902 -3947.7927 1120.1948 0 846.76965 152025.28 -157940.04 -581.84084 22538.229 225.99312 338.22714 1.0731061 - 1280 67.970707 -2960.3724 1046.6347 -4007.0071 1144.3297 0 866.43256 151921.62 -157939.39 -368.35961 22310.088 234.239 350.59018 1.0681573 - 1300 68.984941 -2983.8905 1039.0599 -4022.9504 1162.4788 0 878.40157 151876.66 -157940.49 -408.4644 22085.613 232.54373 348.07145 1.0232144 - 1320 70.043952 -3009.5808 969.8918 -3979.4726 1186.5907 0 935.08613 151836.22 -157937.36 431.8242 21865.457 217.06378 324.88371 0.98977725 - 1340 71.117119 -3028.1057 1016.1027 -4044.2084 1215.7197 0 933.65661 151744.63 -157938.22 -118.90908 21653.612 227.40587 340.39676 0.96927182 - 1360 72.19871 -3048.8293 986.21586 -4035.0452 1231.0917 0 974.10814 151697.47 -157937.72 485.3122 21448.458 220.71713 330.39668 0.91660237 - 1380 73.289545 -3067.6975 1046.3647 -4114.0622 1252.358 0 948.20869 151626.66 -157941.29 -131.77945 21251.912 234.17856 350.55699 0.95332826 - 1400 74.389534 -3091.6437 1003.804 -4095.4478 1223.2343 0 914.21639 151708.69 -157941.59 -228.59592 21060.319 224.6534 336.27611 0.95868112 - 1420 75.496459 -3117.9845 1017.2871 -4135.2716 1252.8701 0 934.95412 151617.13 -157940.22 -328.62774 20872.161 227.67095 340.80959 0.93833238 - 1440 76.611495 -3137.2342 990.73612 -4127.9703 1224.5861 0 925.81135 151661.05 -157939.42 -23.294916 20687.614 221.72878 331.93708 0.86871384 - 1460 77.73649 -3159.4947 1040.535 -4200.0297 1218.936 0 881.92261 151636.87 -157937.75 -581.29505 20507.346 232.87387 348.59778 0.96029886 - 1480 78.872562 -3183.8273 1037.9432 -4221.7705 1246.5207 0 908.21966 151561.59 -157938.1 -884.42345 20328.04 232.29381 347.7323 0.95226246 - 1500 80.110645 -3206.5826 1008.5663 -4215.1489 1236.8936 0 929.15034 151558.28 -157939.47 -91.502556 20149.349 225.7192 337.88949 0.92718943 - 1520 81.168804 -3228.1152 994.3422 -4222.4574 1276.2214 0 948.25706 151492.45 -157939.39 -262.49453 19974.554 222.53583 333.16141 0.83959152 - 1540 82.328931 -3248.9878 997.70762 -4246.6954 1273.2453 0 944.04689 151475.31 -157939.3 -310.12487 19802.717 223.28901 334.28865 0.84316615 - 1560 83.500822 -3268.9264 1001.6639 -4270.5903 1283.2174 0 972.25539 151413.47 -157939.53 -368.92162 19633.499 224.17444 335.57814 0.91870789 - 1580 84.681217 -3289.8506 972.05937 -4261.9099 1290.892 0 995.40503 151394.08 -157942.29 309.3174 19467.313 217.54888 325.64947 0.91261747 - 1600 85.872982 -3306.0485 999.0593 -4305.1078 1336.2852 0 1018.2817 151281.27 -157940.94 78.176324 19307.332 223.59152 334.68976 0.94786237 - 1620 87.166941 -3323.911 1023.7518 -4347.6628 1346.5659 0 1012.0297 151235.76 -157942.02 401.58054 19152.885 229.11774 342.98696 0.92107142 - 1640 88.373719 -3346.3201 1013.0953 -4359.4153 1368.3551 0 1038.3633 151174.74 -157940.87 115.49888 19004.339 226.7328 339.39185 0.96123977 - 1660 89.588199 -3366.6764 980.18808 -4346.8645 1385.5623 0 1066.3348 151143.21 -157941.97 785.51107 18860.969 219.3681 328.38652 0.89253119 - 1680 90.812635 -3382.4343 999.75094 -4382.1852 1367.9173 0 1045.8848 151142.33 -157938.32 549.73441 18726.008 223.74631 334.953 0.88544944 - 1700 92.044767 -3400.8462 996.00209 -4396.8483 1351.6629 0 1019.0394 151174.27 -157941.83 32.327852 18598.28 222.90731 333.67893 0.91827006 - 1720 93.284649 -3418.3313 989.38116 -4407.7125 1347.9882 0 1026.3475 151161.41 -157943.46 700.69172 18474.978 221.42553 331.45637 0.92100955 - 1740 94.538928 -3435.1347 964.16624 -4399.301 1357.6456 0 1051.1466 151135.74 -157943.84 477.68306 18358.2 215.78238 322.997 0.92157841 - 1760 95.90276 -3452.4681 996.08241 -4448.5506 1365.9896 0 1001.3994 151128.36 -157944.3 -77.655143 18246.618 222.92529 333.72093 0.88815023 - 1780 97.200704 -3470.0186 947.16368 -4417.1823 1357.1769 0 1006.9477 151162.27 -157943.57 100.19368 18137.3 211.97718 317.3159 0.87577473 - 1800 98.461648 -3484.6818 988.75293 -4473.4348 1367.5971 0 995.1924 151106.14 -157942.36 -208.37477 18030.204 221.28494 331.23294 0.94635825 - 1820 99.729642 -3503.5324 959.4974 -4463.0298 1386.9033 0 1035.1867 151057.26 -157942.38 196.09637 17924.392 214.73749 321.44422 0.89454363 - 1840 101.00392 -3518.4137 985.10207 -4503.5157 1425.227 0 1062.1927 150951.14 -157942.08 189.40933 17821.795 220.46787 330.02248 0.91769756 - 1860 102.28783 -3531.6076 978.71334 -4510.3209 1447.6145 0 1081.8026 150905.2 -157944.94 369.13672 17723.495 219.03805 327.84302 0.99005655 - 1880 103.57975 -3546.6803 982.10151 -4528.7818 1416.6032 0 1040.8725 150959.42 -157945.68 206.83653 17629.384 219.79633 328.97668 0.9960403 - 1900 104.81168 -3563.7438 961.75306 -4525.4969 1426.2883 0 1055.2567 150936.42 -157943.46 223.06115 17537.856 215.24231 322.15829 0.97986655 - 1920 106.04042 -3579.7815 953.8957 -4533.6772 1420.242 0 1053.3469 150938.67 -157945.93 264.48404 17448.909 213.48382 319.52979 0.96489929 - 1940 107.27692 -3592.4628 995.11883 -4587.5816 1434.5738 0 1036.2736 150885.59 -157944.02 -203.71783 17362.885 222.70964 333.32982 1.0238542 - 1960 108.52049 -3607.1225 959.8186 -4566.9411 1454.811 0 1091.6157 150830.59 -157943.96 412.09226 17278.194 214.80937 321.46995 1.0586113 - 1980 109.76987 -3621.5836 950.82575 -4572.4094 1481.3655 0 1148.5036 150742.3 -157944.58 1156.6083 17197.362 212.79675 318.42806 1.1085537 - 2000 111.02457 -3632.4321 939.77229 -4572.2044 1484.3457 0 1154.0077 150733.65 -157944.21 1008.3019 17124.028 210.32297 314.7467 1.0548599 -Loop time of 111.025 on 1 procs for 2000 steps with 2500 atoms - -Pair time (%) = 87.5509 (78.8572) -Bond time (%) = 0.0493031 (0.0444073) -Kspce time (%) = 3.35179 (3.01896) -Neigh time (%) = 9.36055 (8.43106) -Comm time (%) = 0.69479 (0.625798) -Outpt time (%) = 0.0108259 (0.00975088) -Other time (%) = 10.0064 (9.01281) - -Nlocal: 2500 ave 2500 max 2500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 20348 ave 20348 max 20348 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.09326e+06 ave 2.09326e+06 max 2.09326e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2093261 -Ave neighs/atom = 837.304 -Ave special neighs/atom = 4 -Neighbor list builds = 120 -Dangerous builds = 16 - diff --git a/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.4 b/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.4 deleted file mode 100644 index eb91fb883c..0000000000 --- a/examples/USER/drude/swm4-ndp/log.swm4-ndp.nh.8Jul15.linux.4 +++ /dev/null @@ -1,236 +0,0 @@ -LAMMPS (8 Jul 2015) -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/coul/long 12.0 12.0 -kspace_style pppm 1.0e-3 - -read_data data.swm4-ndp - orthogonal box = (-12 -12 -12) to (12 12 12) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 2500 atoms - scanning bonds ... - 1 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 2000 bonds - reading angles ... - 500 angles - 4 = max # of 1-2 neighbors - 3 = max # of 1-3 neighbors - 3 = max # of 1-4 neighbors - 4 = max # of special neighbors - -pair_coeff 1 1 0.210939 3.183950 # ODw ODw -pair_coeff * 2* 0.000000 0.0 - -group ATOMS type 1:3 -2000 atoms in group ATOMS -group CORES type 1 -500 atoms in group CORES -group DRUDES type 4 -500 atoms in group DRUDES - -variable TK equal 300.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -neighbor 2.0 bin - -timestep 1.0 - -fix DRUDE all drude C N N D - -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 300 12345 -velocity DRUDES create ${TDK} 12345 -velocity DRUDES create 1 12345 - -delete_bonds ATOMS multi -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 1500 300 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 10 steps, check yes - master list distance cutoff = 14 - 2000 total bonds, 500 turned on, 1500 turned off - 500 total angles, 0 turned on, 500 turned off - 0 total dihedrals, 0 turned on, 0 turned off - 0 total impropers, 0 turned on, 0 turned off - -comm_modify vel yes -compute TATOM ATOMS temp/com -compute TEMP all temp/drude - -fix DTDIR all drude/transform/direct -fix RIGID ATOMS rigid/npt/small molecule temp ${TK} ${TK} 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 ${TK} 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso ${PBAR} ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 ${PBAR} 500 -fix RIGID ATOMS rigid/npt/small molecule temp 300 300 100 iso 1 1 500 -500 rigid bodies with 2000 atoms - 0.832099 = max distance from body owner to body atom -fix_modify RIGID temp TATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_rigid_nh_small.cpp:1395) -fix NVT DRUDES nvt temp ${TDK} ${TDK} 100.0 -fix NVT DRUDES nvt temp 1 ${TDK} 100.0 -fix NVT DRUDES nvt temp 1 1 100.0 -fix DTINV all drude/transform/inverse - -thermo_style custom step cpu etotal ke pe ebond eangle evdwl ecoul elong press vol temp c_TEMP[1] c_TEMP[2] -thermo 20 - -run 2000 -PPPM initialization ... - G vector (1/distance) = 0.217457 - grid = 10 10 10 - stencil order = 5 - estimated absolute RMS force accuracy = 0.197288 - estimated relative force accuracy = 0.000594128 - using double precision FFTs - 3d grid and FFT values/proc = 1500 300 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 4 -New max number of 1-2 to 1-4 neighbors: 4 (+0) -Memory usage per processor = 15.0906 Mbytes -Step CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Temp TEMP[1] TEMP[2] - 0 0 4568.0415 903.41148 3664.63 623.46454 0 2890.2449 157955.66 -157804.74 244591.08 13824 202.18534 295.64644 14.858785 - 20 0.60629702 3742.7991 5338.7966 -1595.9975 567.29055 0 662.23349 155098.48 -157924 31679.046 13979.575 1194.8336 1690.2267 201.65776 - 40 1.2431891 2752.9388 4407.9332 -1654.9944 792.86725 0 870.27523 154593.92 -157912.06 27392.302 14278.564 986.5045 1450.7624 56.079837 - 60 1.875339 1995.9775 3980.851 -1984.8735 660.64216 0 750.43214 154538.47 -157934.42 22242.676 14691.413 890.92262 1315.3403 40.305321 - 80 2.471236 1377.1261 3449.7879 -2072.6618 617.64243 0 605.75693 154628.63 -157924.69 17345.214 15201.397 772.06962 1146.6088 21.44718 - 100 3.0357449 886.38995 3038.4108 -2152.0208 537.89929 0 450.99962 154789.13 -157930.05 13299.227 15783.335 680.00257 1011.6773 15.016231 - 120 3.585844 488.055 2928.1336 -2440.0786 536.23164 0 334.88597 154620.05 -157931.25 8694.3472 16409.509 655.3223 977.40122 9.8538294 - 140 4.117424 160.14918 2538.5116 -2378.3624 509.19396 0 249.89205 154793.34 -157930.79 6363.1137 17053.486 568.1241 847.92526 7.2744139 - 160 4.6321139 -103.57595 2403.1613 -2506.7372 494.69822 0 144.07174 154790.83 -157936.34 4017.2005 17699.095 537.83243 803.44775 5.3901399 - 180 5.126441 -315.61252 2216.7944 -2532.4069 477.29447 0 80.852363 154842.41 -157932.96 1958.1627 18336.716 496.12314 741.4685 4.440167 - 200 5.6090059 -490.61276 2058.9074 -2549.5202 470.23217 0 80.799455 154831.63 -157932.18 1260.1943 18960.132 460.78771 688.92684 3.5878733 - 220 6.0495639 -644.09355 2001.1189 -2645.2125 494.11524 0 53.071997 154741.65 -157934.05 -16.373549 19564.819 447.85452 669.94663 2.7746068 - 240 6.5042329 -773.76581 1911.0759 -2684.8417 491.56501 0 36.579309 154722.88 -157935.86 -773.18555 20144.755 427.70271 639.97688 2.2989541 - 260 6.9512041 -886.818 1719.7038 -2606.5218 462.97731 0 47.595907 154814.45 -157931.55 -696.23419 20696.487 384.87324 575.96351 1.9229602 - 280 7.3921249 -983.57561 1659.2167 -2642.7923 476.06924 0 65.542713 154749.27 -157933.68 -1099.4208 21220.613 371.3361 555.78067 1.7042918 - 300 7.8054619 -1069.4015 1531.598 -2600.9995 487.38132 0 130.06616 154709.03 -157927.47 -548.86446 21717.521 342.77477 513.11788 1.4030219 - 320 8.2272029 -1144.9139 1562.933 -2707.8469 509.00464 0 127.16899 154591.31 -157935.33 -1516.7077 22190.692 349.78761 523.61225 1.4145866 - 340 8.6145689 -1216.4369 1511.7737 -2728.2106 518.42214 0 144.71934 154541.92 -157933.27 -1345.493 22636.556 338.33806 506.55234 1.2328234 - 360 9.0159991 -1279.8637 1435.4044 -2715.2681 525.01973 0 153.83119 154536.21 -157930.33 -1447.797 23056.471 321.24646 480.9789 1.1390786 - 380 9.4004741 -1340.2241 1391.5909 -2731.815 536.93555 0 180.52081 154483.31 -157932.58 -1315.0222 23450.141 311.4409 466.34776 1.004293 - 400 9.7971771 -1398.7544 1401.1636 -2799.918 547.12264 0 190.99461 154394.23 -157932.27 -1686.7786 23818.238 313.5833 469.59825 0.92621346 - 420 10.175245 -1450.5676 1355.0166 -2805.5842 555.43355 0 178.57277 154392.99 -157932.58 -1948.3006 24158.665 303.2555 454.12588 0.90821389 - 440 10.550016 -1501.2755 1336.6037 -2837.8792 573.29095 0 195.76657 154324.78 -157931.72 -1845.698 24470.004 299.13465 447.99648 0.8127319 - 460 10.93798 -1551.1246 1327.3311 -2878.4557 580.57019 0 206.92238 154267.88 -157933.83 -2059.7154 24752.911 297.05944 444.88976 0.80466605 - 480 11.304226 -1597.9166 1280.274 -2878.1906 596.27629 0 247.5201 154210.94 -157932.93 -1714.1239 25006.108 286.52794 429.10945 0.79188456 - 500 11.66949 -1645.4221 1303.9947 -2949.4168 620.22431 0 275.42964 154086.38 -157931.45 -1833.6239 25232.592 291.83668 437.06941 0.78754301 - 520 12.030775 -1692.7733 1261.2365 -2954.0098 639.32812 0 295.13753 154045.85 -157934.32 -1715.0443 25432.412 282.26732 422.73896 0.75950535 - 540 12.389967 -1739.3602 1247.1301 -2986.4903 666.88476 0 341.37591 153937.16 -157931.91 -1556.9492 25607.225 279.11027 418.00746 0.75767537 - 560 12.765452 -1783.4916 1212.3647 -2995.8563 669.09681 0 366.501 153899.16 -157930.62 -1543.0147 25758.368 271.3297 406.37068 0.70509124 - 580 13.122579 -1824.6061 1200.7205 -3025.3267 699.41498 0 409.47507 153794.95 -157929.16 -1053.8519 25887.592 268.72372 402.43012 0.77346975 - 600 13.47702 -1864.0982 1206.4231 -3070.5213 726.9912 0 439.25863 153695.5 -157932.27 -1130.6737 26000.4 269.99996 404.33899 0.78190692 - 620 13.82937 -1902.6883 1167.061 -3069.7493 741.54351 0 453.21801 153667.95 -157932.46 -921.61026 26097.341 261.19065 391.14672 0.7561126 - 640 14.180362 -1941.2814 1168.4808 -3109.7622 758.6291 0 484.81029 153578.39 -157931.59 -1084.6877 26180.233 261.50841 391.64626 0.70968727 - 660 14.527615 -1977.9114 1159.1979 -3137.1094 746.51288 0 452.2958 153598.59 -157934.51 -1424.6628 26247.07 259.43088 388.52145 0.73088365 - 680 14.875155 -2015.8231 1149.125 -3164.9481 730.41157 0 417.95266 153620.83 -157934.15 -1485.3138 26293.983 257.17653 385.144 0.72723522 - 700 15.22063 -2052.4439 1175.9011 -3228.345 735.43016 0 393.72125 153577.95 -157935.44 -1936.2883 26318.916 263.16908 394.10321 0.77446426 - 720 15.565813 -2092.4868 1137.4051 -3229.892 739.27374 0 431.22089 153537.92 -157938.3 -1669.6367 26318.64 254.5536 381.18868 0.77432854 - 740 15.926298 -2128.2671 1117.2535 -3245.5206 763.39303 0 451.2336 153475.75 -157935.89 -1554.5185 26294.984 250.04362 374.42691 0.77695221 - 760 16.273413 -2164.5578 1132.9117 -3297.4695 791.93983 0 493.17297 153351.43 -157934.01 -1464.3621 26250.086 253.54797 379.63211 0.87260304 - 780 16.620524 -2201.7367 1138.2941 -3340.0308 832.89022 0 542.69718 153217.14 -157932.76 -1185.0268 26186.538 254.75255 381.43046 0.88724559 - 800 16.968419 -2236.9734 1127.0464 -3364.0197 849.94855 0 579.03844 153137.36 -157930.36 -957.1991 26107.922 252.23529 377.65702 0.8873688 - 820 17.320858 -2274.0191 1152.6791 -3426.6982 878.53555 0 605.98285 153020.89 -157932.1 -1004.5494 26016.264 257.97196 386.24526 0.90940959 - 840 17.671788 -2312.5555 1157.6702 -3470.2257 915.53242 0 653.69994 152892.11 -157931.56 -793.45868 25912.528 259.08897 387.88866 0.97141875 - 860 18.021136 -2351.0088 1136.5124 -3487.5212 921.37408 0 665.09396 152857.19 -157931.18 -528.38134 25800.163 254.35382 380.78143 0.98986969 - 880 18.370286 -2387.3364 1155.2826 -3542.619 934.02359 0 660.06761 152795.05 -157931.76 -775.58796 25681.702 258.55463 386.99987 1.1470186 - 900 18.737898 -2425.9324 1151.5543 -3577.4867 936.00838 0 670.95003 152749.78 -157934.22 -883.49007 25555.357 257.72021 385.72656 1.1920669 - 920 19.09607 -2461.264 1119.906 -3581.17 931.8496 0 682.4928 152739.5 -157935.01 -890.93067 25420.635 250.63726 375.12148 1.1675653 - 940 19.45002 -2496.7293 1081.4763 -3578.2056 971.61744 0 731.21429 152653.33 -157934.36 -483.6151 25277.795 242.03662 362.20568 1.2144341 - 960 19.805087 -2527.097 1111.841 -3638.938 964.7058 0 704.68407 152623.89 -157932.22 -841.64397 25129.524 248.8323 372.33505 1.3291216 - 980 20.160533 -2560.1354 1096.9132 -3657.0486 954.19645 0 693.42648 152627.51 -157932.19 -949.1276 24974.275 245.49142 367.3853 1.2126954 - 1000 20.518917 -2592.9079 1053.7186 -3646.6266 959.23242 0 684.31399 152644.74 -157934.91 -869.15319 24811.035 235.8244 352.90011 1.2013298 - 1020 20.849072 -2623.091 1066.4493 -3689.5404 998.09604 0 709.32917 152535.4 -157932.37 -881.38225 24640.265 238.67355 357.17132 1.2006706 - 1040 21.194962 -2652.822 1083.618 -3736.44 1011.32 0 727.70427 152458.99 -157934.45 -815.2175 24461.841 242.51594 362.90994 1.2429114 - 1060 21.530151 -2683.6347 1074.3994 -3758.0341 1029.3659 0 763.93884 152381.4 -157932.73 -616.78933 24277.069 240.45279 359.82116 1.235143 - 1080 21.868091 -2715.2991 1094.3032 -3809.6022 1068.1764 0 785.28284 152272.57 -157935.63 -541.23611 24088.232 244.9073 366.48583 1.2604348 - 1100 22.209137 -2747.0371 1066.1644 -3813.2016 1080.2369 0 833.94072 152208.13 -157935.51 -217.98411 23897.246 238.60979 357.0619 1.2283546 - 1120 22.551618 -2774.9066 1084.3361 -3859.2427 1113.055 0 847.43384 152114.69 -157934.42 -77.787494 23707.475 242.67665 363.13214 1.2803322 - 1140 22.899431 -2803.21 1072.4113 -3875.6213 1090.9217 0 807.02034 152161.17 -157934.73 -668.47773 23520.606 240.00786 359.14316 1.2572349 - 1160 23.252016 -2834.8697 1052.5943 -3887.464 1096.5034 0 789.77107 152162.88 -157936.62 -589.78074 23331.777 235.57277 352.55512 1.1369148 - 1180 23.609597 -2863.7817 1031.8109 -3895.5926 1087.1932 0 789.79657 152165.44 -157938.03 -586.94333 23140.391 230.92139 345.60929 1.0837566 - 1200 23.970129 -2891.3631 1042.111 -3933.4741 1093.7082 0 775.83298 152136.1 -157939.12 -1109.7168 22947.229 233.22659 349.07035 1.0726257 - 1220 24.3333 -2919.3393 1043.3795 -3962.7187 1095.6802 0 760.56643 152121.29 -157940.25 -1189.6331 22748.747 233.51046 349.50414 1.0560945 - 1240 24.699158 -2942.4201 1015.5889 -3958.009 1114.7861 0 821.20595 152042.69 -157936.69 -581.49954 22545.116 227.29088 340.1868 1.0444581 - 1260 25.06694 -2965.9906 1011.5209 -3977.5115 1137.3984 0 850.69736 151972.34 -157937.95 -557.09399 22340.759 226.38045 338.85243 0.98374803 - 1280 25.506043 -2989.5484 1016.7798 -4006.3282 1160.9102 0 882.24024 151890.5 -157939.98 -93.844073 22136.859 227.55742 340.60408 1.0089629 - 1300 25.885481 -3011.5964 1043.7628 -4055.3592 1184.2311 0 891.6381 151808.85 -157940.08 -307.32007 21936.757 233.59626 349.6133 1.0504806 - 1320 26.286564 -3035.1132 1037.5333 -4072.6466 1179.597 0 903.59052 151784.33 -157940.16 -91.53774 21739.794 232.20209 347.62923 0.8833997 - 1340 26.707803 -3061.1043 1034.7198 -4095.8241 1231.5568 0 955.77666 151655.57 -157938.72 53.261099 21546.978 231.57242 346.58931 1.0307605 - 1360 27.133179 -3085.252 983.77833 -4069.0303 1230.971 0 968.86383 151669.63 -157938.5 197.66951 21360.266 220.17161 329.49241 1.002352 - 1380 27.554558 -3101.9696 1037.9918 -4139.9614 1216.6215 0 897.01691 151685.79 -157939.39 -392.64446 21180.32 232.3047 347.61632 1.0380526 - 1400 27.956349 -3124.8379 1003.328 -4128.1659 1199.4883 0 863.54306 151748.07 -157939.27 -548.32584 21003.378 224.54686 336.16828 0.85494391 - 1420 28.361482 -3146.8927 1020.9417 -4167.8344 1210.319 0 850.57584 151710.13 -157938.86 -1093.8532 20825.938 228.48885 342.04449 0.9178739 - 1440 28.768238 -3170.6554 993.33274 -4163.9882 1239.5959 0 893.87046 151642.2 -157939.65 -436.10089 20645.122 222.30991 332.79717 0.88336557 - 1460 29.177687 -3191.0873 980.2106 -4171.2979 1257.3639 0 955.42122 151554.27 -157938.35 -139.1763 20465.429 219.37314 328.30589 0.99602014 - 1480 29.586943 -3208.4185 993.92387 -4202.3424 1243.9183 0 936.28667 151555.9 -157938.45 -261.1948 20289.512 222.4422 333.01034 0.85071989 - 1500 29.995233 -3229.0775 1028.0284 -4257.1059 1272.6443 0 960.80911 151449.75 -157940.31 -307.25416 20116.744 230.07487 344.43881 0.88683413 - 1520 30.435761 -3250.8294 998.11977 -4248.9491 1282.1976 0 990.08774 151419.81 -157941.05 64.772936 19947.298 223.38125 334.38841 0.90320757 - 1540 30.853458 -3268.3168 1004.1599 -4272.4768 1299.4164 0 987.20608 151381.91 -157941.01 -80.22578 19782.738 224.73305 336.30685 1.007422 - 1560 31.279241 -3289.0826 966.08591 -4255.1685 1287.1272 0 982.95309 151416.22 -157941.47 198.4371 19622.918 216.21201 323.54353 0.99939162 - 1580 31.708028 -3306.2125 979.26815 -4285.4807 1288.5111 0 952.23769 151415.68 -157941.91 -206.26434 19467.717 219.16222 328.0518 0.90689318 - 1600 32.140092 -3325.1219 984.21128 -4309.3331 1308.258 0 963.95207 151360.81 -157942.35 -284.04656 19314.766 220.2685 329.66568 0.9610293 - 1620 32.5727 -3340.9024 1013.5306 -4354.433 1318.1025 0 944.3489 151325.17 -157942.05 -653.005 19163.698 226.83023 339.47468 1.0097397 - 1640 32.982791 -3360.2312 974.13546 -4334.3667 1312.594 0 986.63361 151308.68 -157942.28 343.78235 19013.496 218.01352 326.28924 0.99083786 - 1660 33.419277 -3375.6484 982.60503 -4358.2535 1345.3148 0 970.47388 151266.28 -157940.32 -374.81541 18867.836 219.90902 329.06869 1.0301828 - 1680 33.858902 -3394.428 981.74052 -4376.1685 1319.3919 0 955.09161 151289.81 -157940.47 -162.3498 18724.14 219.71554 328.81202 0.99514477 - 1700 34.30191 -3412.8462 973.87976 -4386.7259 1341.294 0 965.41854 151248.54 -157941.98 -351.70824 18582.062 217.95629 326.03525 1.1973975 - 1720 34.776698 -3429.9352 986.76909 -4416.7043 1362.6752 0 1013.2358 151149.58 -157942.2 37.299904 18441.349 220.84095 330.4706 1.0534043 - 1740 35.222457 -3446.5561 971.25044 -4417.8065 1381.6012 0 1046.8608 151096.61 -157942.88 336.29665 18304.289 217.36784 325.28479 1.0839935 - 1760 35.644247 -3463.1798 999.75562 -4462.9354 1395.5442 0 1012.1296 151070.28 -157940.88 -252.71902 18172.322 223.74736 334.82695 1.1205298 - 1780 36.095301 -3481.5453 991.5153 -4473.0606 1403.686 0 1029.7008 151037.13 -157943.57 -108.73918 18043.082 221.90316 332.00846 1.1669904 - 1800 36.548801 -3496.9886 965.33662 -4462.3252 1390.3088 0 1050.6761 151040.12 -157943.43 539.62368 17917.488 216.04432 323.23991 1.1447201 - 1820 37.00671 -3510.113 991.32596 -4501.439 1392.0482 0 1034.7898 151015.68 -157943.96 152.36115 17797.781 221.86078 332.04409 1.050451 - 1840 37.465953 -3528.9352 974.95032 -4503.8855 1387.6457 0 1012.5199 151036.63 -157940.68 -250.11127 17681.765 218.19588 326.4633 1.104675 - 1860 37.926741 -3545.3967 970.46573 -4515.8624 1391.3683 0 1035.1551 151000.11 -157942.49 -218.15781 17567.52 217.19222 325.05524 1.0190724 - 1880 38.391252 -3561.7398 933.83134 -4495.5711 1404.458 0 1032.7156 151010.9 -157943.64 -1.9885562 17454.833 208.99337 312.70412 1.1301542 - 1900 38.856336 -3574.6165 984.6503 -4559.2668 1422.0814 0 1060.3245 150900.79 -157942.46 190.15103 17344.24 220.36676 329.66505 1.2027369 - 1920 39.32352 -3589.0687 963.85062 -4552.9193 1427.8662 0 1075.6986 150887.22 -157943.7 506.81653 17237.394 215.71175 322.81523 1.0733524 - 1940 39.79544 -3604.8214 970.89136 -4575.7128 1416.926 0 1037.9197 150913.56 -157944.12 -60.261935 17135.412 217.28748 325.12481 1.144127 - 1960 40.270815 -3620.548 963.48434 -4584.0323 1401.1546 0 1016.5609 150941.43 -157943.17 -388.03612 17035.264 215.62977 322.67138 1.1152888 - 1980 40.749353 -3638.3971 977.90456 -4616.3017 1415.5473 0 1009.486 150904.71 -157946.04 -640.67547 16934.97 218.85705 327.48198 1.1614525 - 2000 41.229238 -3654.2588 957.08437 -4611.3432 1418.1059 0 1031.2688 150883.23 -157943.95 -595.60403 16834.098 214.19745 320.55039 1.0631632 -Loop time of 41.2293 on 4 procs for 2000 steps with 2500 atoms - -Pair time (%) = 23.5391 (57.0932) -Bond time (%) = 0.0153775 (0.0372976) -Kspce time (%) = 3.17798 (7.70806) -Neigh time (%) = 2.51543 (6.10108) -Comm time (%) = 1.6585 (4.02262) -Outpt time (%) = 0.00876421 (0.0212572) -Other time (%) = 10.3141 (25.0165) - -Nlocal: 625 ave 632 max 619 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -Nghost: 12577 ave 12644 max 12511 min -Histogram: 1 0 0 1 0 0 1 0 0 1 -Neighs: 532752 ave 581561 max 492708 min -Histogram: 1 1 0 0 0 0 1 0 0 1 - -Total # of neighbors = 2131009 -Ave neighs/atom = 852.404 -Ave special neighs/atom = 4 -Neighbor list builds = 120 -Dangerous builds = 16 - diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 new file mode 100644 index 0000000000..08cc2f0f5c --- /dev/null +++ b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 @@ -0,0 +1,14 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style opls +ERROR: Unknown improper style opls (src/force.cpp:634) +Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 new file mode 100644 index 0000000000..08cc2f0f5c --- /dev/null +++ b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 @@ -0,0 +1,14 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style opls +ERROR: Unknown improper style opls (src/force.cpp:634) +Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 new file mode 100644 index 0000000000..a6807f8ee1 --- /dev/null +++ b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 @@ -0,0 +1,14 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style opls +ERROR: Unknown improper style opls (src/force.cpp:634) +Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 new file mode 100644 index 0000000000..a6807f8ee1 --- /dev/null +++ b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 @@ -0,0 +1,14 @@ +LAMMPS (27 Nov 2018) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style opls +ERROR: Unknown improper style opls (src/force.cpp:634) +Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.1 b/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.1 deleted file mode 100644 index bc51063341..0000000000 --- a/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.1 +++ /dev/null @@ -1,251 +0,0 @@ -LAMMPS (11 Aug 2017) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/thole/long 2.600 8.0 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.toluene extra/special/per/atom 1 - orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 5500 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 8 = max dihedrals/atom - scanning impropers ... - 2 = max impropers/atom - reading bonds ... - 5500 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6000 dihedrals - reading impropers ... - 1500 impropers - 5 = max # of 1-2 neighbors - 10 = max # of 1-3 neighbors - 16 = max # of 1-4 neighbors - 20 = max # of special neighbors - -comm_modify vel yes - -group gTOLUENE molecule 1:250 -5500 atoms in group gTOLUENE -group gCORES type 1 2 3 4 5 6 7 -3750 atoms in group gCORES -group gDRUDES type 8 9 10 11 12 -1750 atoms in group gDRUDES - -pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT -pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO -pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM -pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP -pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT -pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT -pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT -pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO -pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM -pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP -pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT -pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT -pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT -pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM -pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP -pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT -pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT -pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT -pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP -pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT -pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT -pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT -pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT -pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT -pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT -pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT -pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT -pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT -pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT -pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO -pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM -pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP -pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT -pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT -pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO -pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM -pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP -pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT -pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT -pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO -pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM -pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP -pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT -pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT -pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO -pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM -pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP -pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT -pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT -pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO -pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM -pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP -pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT -pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT -pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO -pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM -pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP -pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT -pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO -pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM -pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP -pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT -pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM -pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP -pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT -pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP -pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT -pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C C C C N N D D D D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 - 1250 = # of size 2 clusters - 0 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nve - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.382011 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0325934 - estimated relative force accuracy = 9.8154e-05 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 19 -New max number of 1-2 to 1-4 neighbors: 20 (+1) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut/thole/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 42.06 | 42.06 | 42.06 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] - 0 0 14386.197 2910.7282 202.07402 11475.469 6565.4851 20.333365 1.0706727e-06 1.3894617e-07 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 - 50 4.311986 8083.3901 4729.9995 328.37487 3353.3906 1812.5186 685.40417 646.10358 50.083281 804.80656 1305984.8 -1306630.3 16960.287 48631.318 448.67988 116.22125 - 100 8.756623 6206.7865 3683.944 255.75365 2522.8425 977.52675 777.45439 838.58809 68.086914 471.97862 1306097.1 -1306707.9 15657.142 48631.318 380.53159 35.760643 - 150 13.134938 5386.0219 3582.482 248.70976 1803.5399 752.25928 803.04832 643.43249 49.76684 131.97853 1306139.2 -1306716.2 15140.102 48631.318 383.61303 10.880935 - 200 17.508189 4846.4097 3254.3932 225.93257 1592.0166 700.43329 812.26722 657.52279 51.044716 -64.045174 1306160.5 -1306725.7 13844.277 48631.318 351.90677 3.8489009 - 250 21.871676 4473.215 3091.5333 214.6262 1381.6817 688.24707 842.63267 590.45999 48.22798 -214.02425 1306156.6 -1306730.5 8808.7402 48631.318 335.32872 1.8372171 - 300 26.226064 4191.8834 2883.8468 200.2078 1308.0367 734.36657 856.15482 584.87904 47.590787 -343.44615 1306163.4 -1306734.9 3389.3777 48631.318 313.03581 1.3011826 - 350 30.568716 3972.0739 2756.8392 191.39044 1215.2347 664.4688 866.06348 580.13632 48.515297 -378.8729 1306173.3 -1306738.3 8458.1149 48631.318 299.31146 1.1345329 - 400 34.845648 3838.3528 2731.3975 189.62419 1106.9552 684.0318 870.67752 548.93014 44.038787 -460.1537 1306160.4 -1306741 6697.9188 48631.318 296.54405 1.1332149 - 450 39.17477 3731.18 2607.8585 181.04762 1123.3216 719.57572 894.99915 571.99504 47.625227 -537.60494 1306171.9 -1306745.2 2450.4224 48631.318 283.13713 1.0721818 - 500 43.497489 3607.0055 2565.9469 178.13796 1041.0586 717.36452 841.34375 551.39834 45.985413 -542.47313 1306170.9 -1306743.4 3077.1849 48631.318 278.59462 1.0410963 - 550 47.812038 3513.8132 2548.7259 176.94241 965.08736 673.81272 852.38161 522.99297 44.276434 -552.27379 1306171.2 -1306747.4 4659.7275 48631.318 276.70124 1.0757459 - 600 52.124423 3386.9627 2471.0692 171.55118 915.89348 689.99732 833.61298 517.49343 43.023588 -594.96363 1306170.6 -1306743.8 2159.7328 48631.318 268.27854 1.0287605 - 650 56.370068 3374.3191 2413.6719 167.56644 960.64717 703.32428 874.12028 535.41271 43.256032 -617.25815 1306168.6 -1306746.8 1262.4757 48631.318 261.99584 1.0950976 - 700 60.667476 3342.9467 2412.9563 167.51676 929.99042 683.70355 882.22521 527.03932 43.661355 -616.70117 1306161 -1306751 2950.9009 48631.318 261.92814 1.0771869 - 750 64.964696 3327.7938 2414.3547 167.61385 913.43902 695.12778 863.48248 542.99202 46.408369 -639.60076 1306160.7 -1306755.6 1583.0277 48631.318 262.09771 1.0464936 - 800 69.256916 3391.689 2452.2049 170.24155 939.48407 694.2176 892.61592 557.53726 45.495129 -654.56675 1306155.2 -1306751 1232.1671 48631.318 266.20601 1.0640309 - 850 73.527972 3386.8618 2486.6928 172.63584 900.16902 696.7684 880.27643 545.11446 46.474227 -665.90464 1306154.7 -1306757.3 1129.2062 48631.318 269.97945 1.027015 - 900 77.775993 3368.0724 2416.7145 167.77767 951.35789 718.66654 893.18396 537.79136 46.404626 -641.29596 1306152.9 -1306756.3 1673.0743 48631.318 262.34697 1.0597091 - 950 82.028341 3300.4793 2409.5613 167.28107 890.918 728.06888 890.51193 515.08456 44.36547 -671.13741 1306142.3 -1306758.2 1038.6579 48631.318 261.57036 1.0567234 - 1000 86.189789 3333.2955 2452.2486 170.24458 881.04692 699.8414 915.33862 506.83261 41.77374 -665.68264 1306141.6 -1306758.7 467.42142 48631.318 266.19104 1.0987814 - 1050 90.384168 3303.87 2376.9713 165.01854 926.89875 706.12941 930.65844 524.73304 42.644613 -657.19573 1306139.3 -1306759.4 1737.6624 48631.318 258.00246 1.0954432 - 1100 94.549452 3367.668 2454.9154 170.42973 912.75259 715.68494 935.8363 516.52205 43.261761 -671.86101 1306137.9 -1306764.6 961.79199 48631.318 266.492 1.0797548 - 1150 98.65493 3350.0898 2485.3993 172.54604 864.69051 699.23072 933.76405 510.60424 42.381362 -684.53513 1306127.1 -1306763.8 -272.48178 48631.318 269.82496 1.0512421 - 1200 102.82045 3309.6871 2398.9577 166.54492 910.72944 705.58979 934.53183 531.90967 45.872142 -664.58495 1306126.9 -1306769.5 627.31931 48631.318 260.41866 1.0531639 - 1250 106.9899 3304.504 2491.6998 172.98344 812.80426 710.83366 881.33764 494.90045 41.71618 -672.49264 1306123.8 -1306767.3 136.11723 48631.318 270.51026 1.0516137 - 1300 111.16224 3318.9543 2462.0621 170.92588 856.89219 709.17314 932.87209 503.80373 43.426006 -680.2474 1306121.2 -1306773.3 1276.2503 48631.318 267.28591 1.0510113 - 1350 115.27184 3314.8515 2434.8483 169.03659 880.00316 710.91641 922.28347 540.40795 44.753548 -686.09335 1306124.5 -1306776.7 -438.87694 48631.318 264.31236 1.0731666 - 1400 119.44228 3349.0785 2457.7697 170.62788 891.30875 711.28064 936.58607 516.63511 42.396287 -653.09763 1306113.8 -1306776.3 350.79618 48631.318 266.80555 1.0745043 - 1450 123.61267 3364.1486 2459.8741 170.77397 904.27455 696.57265 946.32098 538.55368 44.69075 -652.75091 1306111 -1306780.1 502.47466 48631.318 267.03201 1.0789056 - 1500 127.72962 3341.9369 2454.3302 170.3891 887.60672 726.46979 903.40815 557.73064 47.536125 -667.65025 1306100.7 -1306780.6 -248.0975 48631.318 266.44821 1.044725 - 1550 131.91041 3270.4282 2437.7916 169.24093 832.63655 691.49462 910.83807 523.17366 44.83093 -654.48655 1306100.5 -1306783.7 490.32965 48631.318 264.63652 1.0662604 - 1600 136.0834 3252.0725 2429.6805 168.67782 822.39196 689.68155 898.22828 535.31963 43.84399 -660.93277 1306100.1 -1306783.9 1729.5956 48631.318 263.74523 1.0817172 - 1650 140.26444 3239.748 2442.6258 169.57653 797.12222 671.1832 907.1659 507.03947 43.048028 -648.14001 1306103.3 -1306786.5 970.43988 48631.318 265.15987 1.0708872 - 1700 144.3855 3202.9157 2410.267 167.33006 792.64869 686.40974 882.40791 527.02899 43.819792 -656.82001 1306096 -1306786.2 -107.50166 48631.318 261.64368 1.062837 - 1750 148.56592 3214.6107 2366.3264 164.27953 848.28434 696.38228 915.58636 538.2236 47.852688 -652.7697 1306093.6 -1306790.6 -164.14366 48631.318 256.84519 1.0937744 - 1800 152.74611 3209.5771 2421.4089 168.10357 788.16819 683.61816 869.45802 532.77927 45.708374 -658.39221 1306103.1 -1306788.1 277.61781 48631.318 262.83282 1.1036154 - 1850 156.86567 3146.3973 2362.3333 164.00232 784.064 697.87032 875.8451 523.54452 43.851379 -665.83106 1306101.5 -1306792.7 497.88657 48631.318 256.42683 1.0654271 - 1900 161.0419 3141.5496 2367.1077 164.33378 774.44186 693.39945 878.97447 515.65653 44.619392 -668.11692 1306103.8 -1306793.9 -1427.3998 48631.318 256.94212 1.0727903 - 1950 165.22235 3134.6473 2295.577 159.36784 839.07025 699.62719 905.76937 519.32307 46.109334 -645.08933 1306104.9 -1306791.6 1744.2846 48631.318 249.19694 1.0064565 - 2000 169.4 3146.866 2361.3821 163.93628 785.48386 682.24124 889.6864 534.94877 46.855983 -678.1614 1306104 -1306794.1 699.8735 48631.318 256.32873 1.0559143 -Loop time of 169.4 on 1 procs for 2000 steps with 5500 atoms - -Performance: 0.510 ns/day, 47.056 hours/ns, 11.806 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 107.93 | 107.93 | 107.93 | 0.0 | 63.71 -Bond | 19.76 | 19.76 | 19.76 | 0.0 | 11.66 -Kspace | 34.926 | 34.926 | 34.926 | 0.0 | 20.62 -Neigh | 1.9932 | 1.9932 | 1.9932 | 0.0 | 1.18 -Comm | 0.73555 | 0.73555 | 0.73555 | 0.0 | 0.43 -Output | 0.0065863 | 0.0065863 | 0.0065863 | 0.0 | 0.00 -Modify | 3.9135 | 3.9135 | 3.9135 | 0.0 | 2.31 -Other | | 0.133 | | | 0.08 - -Nlocal: 5500 ave 5500 max 5500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 13219 ave 13219 max 13219 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1.33739e+06 ave 1.33739e+06 max 1.33739e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1337388 -Ave neighs/atom = 243.161 -Ave special neighs/atom = 15.6364 -Neighbor list builds = 32 -Dangerous builds = 0 -Total wall time: 0:02:49 diff --git a/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.4 b/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.4 deleted file mode 100644 index cebe687c11..0000000000 --- a/examples/USER/drude/toluene/log.toluene.lang.11Aug17.linux.4 +++ /dev/null @@ -1,251 +0,0 @@ -LAMMPS (11 Aug 2017) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/thole/long 2.600 8.0 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.toluene extra/special/per/atom 1 - orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 5500 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 8 = max dihedrals/atom - scanning impropers ... - 2 = max impropers/atom - reading bonds ... - 5500 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6000 dihedrals - reading impropers ... - 1500 impropers - 5 = max # of 1-2 neighbors - 10 = max # of 1-3 neighbors - 16 = max # of 1-4 neighbors - 20 = max # of special neighbors - -comm_modify vel yes - -group gTOLUENE molecule 1:250 -5500 atoms in group gTOLUENE -group gCORES type 1 2 3 4 5 6 7 -3750 atoms in group gCORES -group gDRUDES type 8 9 10 11 12 -1750 atoms in group gDRUDES - -pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT -pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO -pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM -pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP -pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT -pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT -pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT -pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO -pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM -pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP -pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT -pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT -pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT -pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM -pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP -pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT -pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT -pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT -pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP -pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT -pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT -pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT -pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT -pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT -pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT -pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT -pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT -pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT -pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT -pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO -pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM -pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP -pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT -pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT -pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO -pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM -pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP -pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT -pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT -pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO -pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM -pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP -pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT -pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT -pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO -pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM -pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP -pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT -pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT -pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO -pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM -pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP -pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT -pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT -pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO -pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM -pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP -pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT -pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO -pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM -pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP -pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT -pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM -pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP -pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT -pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP -pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT -pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C C C C N N D D D D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 - 1250 = # of size 2 clusters - 0 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes -fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes -fix fNPH all nve - -compute cTEMP all temp/drude - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.382011 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0325934 - estimated relative force accuracy = 9.8154e-05 - using double precision FFTs - 3d grid and FFT values/proc = 34263 16000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 19 -New max number of 1-2 to 1-4 neighbors: 20 (+1) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut/thole/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 18 | 18 | 18 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] - 0 0 14386.197 2910.7282 202.07402 11475.469 6565.4851 20.333365 1.0706727e-06 1.3894617e-07 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 - 50 1.0658228 8014.6879 4671.7498 324.33095 3342.9381 1798.7991 670.22837 651.99307 50.352024 819.34616 1305984.9 -1306632.7 17255.952 48631.318 442.52888 116.12397 - 100 2.136163 6185.5007 3697.0414 256.66292 2488.4593 974.42931 774.88353 840.46625 66.896007 427.27085 1306105.5 -1306701 15044.739 48631.318 381.93582 35.802658 - 150 3.202647 5418.0644 3628.2714 251.88864 1789.7929 764.02696 804.61034 641.14915 47.995428 108.05084 1306138.9 -1306714.9 15258.194 48631.318 388.65363 10.777816 - 200 4.2728949 4838.4235 3303.8964 229.36927 1534.5271 702.10438 772.85348 625.99718 52.299187 -63.792745 1306166.5 -1306721.4 13487.722 48631.318 357.35337 3.7423617 - 250 5.3275268 4461.2438 3084.8973 214.16551 1376.3465 693.85145 823.23815 599.85313 48.280277 -230.56822 1306167.8 -1306726.1 8779.0061 48631.318 334.59262 1.8620294 - 300 6.3794398 4179.6462 2885.0738 200.29299 1294.5724 739.337 868.84011 555.04912 44.838819 -354.73738 1306171.3 -1306730 4410.8735 48631.318 313.17473 1.2892347 - 350 7.427706 3934.3968 2756.2421 191.34899 1178.1546 666.16877 877.32996 548.99846 45.087026 -404.32209 1306179 -1306734.1 8477.8828 48631.318 299.22663 1.1698531 - 400 8.4820418 3800.4769 2674.8317 185.69716 1125.6452 693.29433 841.29833 579.61438 48.325361 -470.18802 1306170.5 -1306737.2 6265.7532 48631.318 290.39105 1.1303952 - 450 9.528651 3685.28 2616.9074 181.67583 1068.3726 702.68328 886.66644 555.74511 46.160811 -557.70651 1306176.6 -1306741.7 2701.7737 48631.318 284.11064 1.091646 - 500 10.579133 3582.6591 2517.6443 174.78461 1065.0148 701.82101 894.9429 554.06012 46.074357 -570.49878 1306181.8 -1306743.2 3643.7426 48631.318 273.31525 1.0831346 - 550 11.629649 3542.0402 2527.0386 175.4368 1015.0016 688.73877 916.2381 521.69932 44.014375 -580.05437 1306171 -1306746.6 2928.6632 48631.318 274.34257 1.0740018 - 600 12.684143 3507.0443 2519.9749 174.94641 987.06936 711.58734 894.63276 525.57884 42.944226 -603.24423 1306161.2 -1306745.7 2082.9907 48631.318 273.57124 1.0784841 - 650 13.737965 3416.2001 2445.9361 169.80635 970.26394 706.95207 891.76446 540.90369 45.970985 -626.32832 1306160.2 -1306749.2 1912.8783 48631.318 265.5023 1.1021764 - 700 14.777375 3419.7572 2446.117 169.81891 973.64019 664.17579 936.51992 551.67148 45.696531 -634.70926 1306159.6 -1306749.4 2215.7085 48631.318 265.53614 1.0774684 - 750 15.795347 3418.6537 2449.343 170.04287 969.31069 706.12432 899.61553 553.21874 45.793213 -642.75298 1306158.1 -1306750.8 1022.2516 48631.318 265.89304 1.0681488 - 800 16.835794 3385.2449 2465.4963 171.16429 919.74864 692.34918 888.91243 530.24204 45.132243 -638.54787 1306154.6 -1306753 1601.1391 48631.318 267.64361 1.0797553 - 850 17.87536 3397.1124 2426.3129 168.44403 970.79951 717.48898 878.71057 580.26487 46.675101 -646.96926 1306150.9 -1306756.3 1048.7905 48631.318 263.38063 1.0785255 - 900 18.899639 3324.2064 2447.5004 169.91495 876.70599 683.62339 881.77789 531.98758 43.646731 -648.59248 1306144.4 -1306760.2 2221.5859 48631.318 265.69596 1.0608373 - 950 19.938468 3316.6329 2398.6988 166.52695 917.93405 702.84237 885.96473 540.35376 45.671318 -638.80334 1306144.4 -1306762.5 1955.2237 48631.318 260.38167 1.0687233 - 1000 20.973543 3287.4205 2384.191 165.51976 903.22949 705.56988 889.96387 535.23674 44.902139 -661.28175 1306150.4 -1306761.6 90.200683 48631.318 258.81506 1.0477545 - 1050 21.990961 3297.7806 2392.0372 166.06448 905.74339 697.33157 889.75086 537.2395 46.319713 -636.03286 1306135.9 -1306764.8 1893.8234 48631.318 259.67633 1.0344207 - 1100 23.006456 3240.651 2370.2217 164.54996 870.42931 693.87289 897.0846 526.89184 43.778979 -657.83716 1306132.1 -1306765.5 799.62979 48631.318 257.28711 1.0618941 - 1150 24.014558 3232.457 2377.9797 165.08855 854.47728 692.51558 897.77048 520.3269 43.903959 -657.38369 1306126.9 -1306769.6 178.21408 48631.318 258.13876 1.0479172 - 1200 25.010178 3238.4266 2392.0623 166.06622 846.36427 695.98996 887.237 522.01974 42.355716 -660.92843 1306124.7 -1306765 1006.1877 48631.318 259.66037 1.0698925 - 1250 26.01949 3198.3364 2332.7551 161.94888 865.58134 690.81786 897.35028 524.47996 44.421121 -640.92419 1306116.3 -1306766.8 2073.9672 48631.318 253.227 1.0326937 - 1300 27.026911 3237.6809 2386.3739 165.67131 851.30706 672.11785 901.04813 530.2964 44.020263 -655.33033 1306125.7 -1306766.5 579.46013 48631.318 259.05838 1.0374113 - 1350 28.033721 3285.9536 2371.155 164.61476 914.79862 718.12968 928.41764 524.02349 43.89896 -657.10221 1306127.3 -1306769.9 518.88041 48631.318 257.36737 1.0993197 - 1400 29.026742 3272.2173 2391.4158 166.02134 880.80147 712.59883 896.13616 532.95785 45.989768 -658.37495 1306125.6 -1306774.1 961.2067 48631.318 259.5968 1.0557033 - 1450 30.032566 3244.2627 2356.0955 163.56926 888.16727 714.72692 901.18382 534.59787 45.517573 -655.58258 1306124.5 -1306776.8 596.10558 48631.318 255.75173 1.058657 - 1500 31.03878 3244.8598 2408.5382 167.21004 836.32161 695.63105 867.27743 527.37333 44.496971 -648.96393 1306125.2 -1306774.7 443.71088 48631.318 261.45495 1.0648973 - 1550 32.041435 3239.3658 2367.1336 164.33557 872.23223 704.16965 884.5938 544.41685 46.110791 -654.61963 1306124.1 -1306776.5 -446.5562 48631.318 256.96289 1.0409003 - 1600 33.058977 3221.4258 2334.2656 162.05375 887.1602 713.8296 885.80472 533.86753 45.413663 -633.58824 1306119.6 -1306777.8 1527.9489 48631.318 253.36367 1.0817678 - 1650 34.080875 3224.4472 2385.9055 165.63879 838.54168 681.01628 879.88017 536.75983 43.884394 -643.24788 1306114 -1306773.8 1314.2208 48631.318 258.97106 1.1033457 - 1700 35.095047 3178.6575 2352.4294 163.31475 826.2281 700.79494 854.06687 549.39826 46.155483 -662.57181 1306115.2 -1306776.9 -187.36898 48631.318 255.35015 1.0638209 - 1750 36.093828 3219.473 2371.9421 164.6694 847.53093 699.44953 891.26068 541.91687 45.714235 -679.13432 1306120.3 -1306771.9 -618.32924 48631.318 257.48034 1.0512601 - 1800 37.110101 3202.0094 2371.8909 164.66585 830.11842 698.44522 858.38216 550.82008 46.315893 -667.77838 1306119.2 -1306775.3 -9.4963278 48631.318 257.46873 1.0619052 - 1850 38.121337 3202.0111 2366.6984 164.30536 835.31277 714.69988 849.6778 553.24258 46.502994 -667.44162 1306114.9 -1306776.3 131.11108 48631.318 256.90165 1.0656162 - 1900 39.132607 3228.7805 2365.934 164.25229 862.84648 720.68418 890.65533 554.75943 45.736726 -685.52803 1306115.1 -1306778.5 -82.525994 48631.318 256.81451 1.0726218 - 1950 40.127507 3218.4068 2443.0023 169.60267 775.40452 673.40001 874.63022 529.69964 43.166847 -680.57322 1306115.4 -1306780.3 622.76654 48631.318 265.20173 1.0693092 - 2000 41.138176 3257.463 2375.6246 164.92505 881.83842 677.60747 933.47776 547.01076 46.507189 -665.56273 1306123.7 -1306780.9 1829.3477 48631.318 257.88171 1.0500311 -Loop time of 41.1383 on 4 procs for 2000 steps with 5500 atoms - -Performance: 2.100 ns/day, 11.427 hours/ns, 48.617 timesteps/s -99.8% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 21.082 | 22.483 | 24.145 | 26.6 | 54.65 -Bond | 4.9992 | 5.0781 | 5.1544 | 2.7 | 12.34 -Kspace | 9.1202 | 10.806 | 12.272 | 39.7 | 26.27 -Neigh | 0.45045 | 0.45076 | 0.45094 | 0.0 | 1.10 -Comm | 0.85982 | 0.87287 | 0.88725 | 1.2 | 2.12 -Output | 0.0036495 | 0.004005 | 0.0049655 | 0.9 | 0.01 -Modify | 1.4009 | 1.401 | 1.4013 | 0.0 | 3.41 -Other | | 0.04245 | | | 0.10 - -Nlocal: 1375 ave 1398 max 1361 min -Histogram: 1 0 2 0 0 0 0 0 0 1 -Nghost: 7745.75 ave 7788 max 7697 min -Histogram: 1 0 0 1 0 0 0 0 1 1 -Neighs: 334374 ave 348629 max 319495 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 1337494 -Ave neighs/atom = 243.181 -Ave special neighs/atom = 15.6364 -Neighbor list builds = 31 -Dangerous builds = 0 -Total wall time: 0:00:41 diff --git a/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.1 b/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.1 deleted file mode 100644 index 6070b858be..0000000000 --- a/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.1 +++ /dev/null @@ -1,259 +0,0 @@ -LAMMPS (11 Aug 2017) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/thole/long 2.600 8.0 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.toluene extra/special/per/atom 1 - orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 5500 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 8 = max dihedrals/atom - scanning impropers ... - 2 = max impropers/atom - reading bonds ... - 5500 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6000 dihedrals - reading impropers ... - 1500 impropers - 5 = max # of 1-2 neighbors - 10 = max # of 1-3 neighbors - 16 = max # of 1-4 neighbors - 20 = max # of special neighbors - -comm_modify vel yes - -group gTOLUENE molecule 1:250 -5500 atoms in group gTOLUENE -group gCORES type 1 2 3 4 5 6 7 -3750 atoms in group gCORES -group gDRUDES type 8 9 10 11 12 -1750 atoms in group gDRUDES - -pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT -pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO -pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM -pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP -pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT -pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT -pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT -pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO -pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM -pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP -pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT -pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT -pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT -pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM -pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP -pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT -pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT -pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT -pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP -pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT -pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT -pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT -pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT -pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT -pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT -pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT -pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT -pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT -pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT -pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO -pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM -pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP -pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT -pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT -pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO -pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM -pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP -pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT -pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT -pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO -pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM -pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP -pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT -pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT -pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO -pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM -pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP -pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT -pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT -pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO -pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM -pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP -pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT -pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT -pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO -pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM -pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP -pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT -pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO -pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM -pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP -pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT -pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM -pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP -pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT -pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP -pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT -pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT - - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C C C C N N D D D D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 - 1250 = # of size 2 clusters - 0 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -compute cTEMP_CORE gCORES temp/com -compute cTEMP all temp/drude - -fix fDIRECT all drude/transform/direct -fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 260 100.0 -fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 1 20.0 -fix fINVERSE all drude/transform/inverse - -fix fMOMENTUM all momentum 100 linear 1 1 1 - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.382011 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0325934 - estimated relative force accuracy = 9.8154e-05 - using double precision FFTs - 3d grid and FFT values/proc = 103823 64000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 19 -New max number of 1-2 to 1-4 neighbors: 20 (+1) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut/thole/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 42.06 | 42.06 | 42.06 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] - 0 0 14386.197 2910.7282 202.07402 11475.469 6565.4851 20.333365 1.0706727e-06 1.3894617e-07 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 - 50 4.462481 6863.642 4633.9267 321.70512 2229.7153 735.2547 604.6946 648.35773 49.039129 824.06033 1306091.3 -1306722.9 17914.827 48631.318 504.18525 0.0086839843 - 100 8.8666639 6628.0722 4376.1868 303.81182 2251.8853 598.11249 651.43051 919.41359 74.216826 589.6504 1306135.1 -1306716 17450.721 48631.318 476.14276 0.0075129702 - 150 13.323556 6336.1884 4726.0692 328.10201 1610.1192 560.01225 621.30109 640.32475 45.531175 288.99128 1306173.9 -1306720 18303.624 48631.318 514.21215 0.0061921467 - 200 17.710109 5997.6194 4565.6288 316.96362 1431.9906 524.2765 591.79843 718.11015 56.374558 88.660843 1306183 -1306730.3 17986.182 48631.318 496.75522 0.00681205 - 250 22.154451 5648.1758 4433.1558 307.76682 1215.02 502.13687 578.85369 665.27326 49.096119 -19.019967 1306179.2 -1306740.5 11771.328 48631.318 482.34141 0.0071619539 - 300 26.524393 5317.8584 4075.2077 282.91669 1242.6506 602.55113 637.40817 647.27074 44.769726 -123.22347 1306183.3 -1306749.5 3571.1867 48631.318 443.3952 0.0071733829 - 350 30.881443 4996.709 3935.7988 273.23838 1060.9102 455.75196 634.36552 638.77826 45.831053 -157.6304 1306198.1 -1306754.3 13525.264 48631.318 428.22739 0.0063722044 - 400 35.218285 4695.9297 3742.6585 259.82983 953.27122 457.49584 620.73047 591.94411 42.495713 -183.91838 1306186.7 -1306762.2 10901.217 48631.318 407.21326 0.005787501 - 450 39.545502 4417.8027 3513.6374 243.9303 904.16528 519.61263 580.76003 624.06933 45.631271 -286.60025 1306184.3 -1306763.6 2956.9012 48631.318 382.29486 0.0057536613 - 500 43.868895 4165.0012 3333.7203 231.43976 831.28089 465.5234 579.36085 580.60005 42.34515 -254.82269 1306183.9 -1306765.6 5818.5565 48631.318 362.71904 0.0059224891 - 550 48.242395 3934.5209 3211.9362 222.98504 722.58462 431.14864 581.46511 517.2025 39.188196 -265.47041 1306182.7 -1306763.6 8537.9404 48631.318 349.46863 0.0055762504 - 600 52.542171 3714.8655 3121.0494 216.67532 593.81611 425.12998 539.89496 490.30508 34.564566 -305.82069 1306175.2 -1306765.5 7402.7677 48631.318 339.57967 0.0057486673 - 650 56.830079 3516.2452 2930.7498 203.46399 585.49537 511.91461 512.48859 521.40636 37.766801 -391.65392 1306163.5 -1306770 381.72879 48631.318 318.87447 0.0054629243 - 700 61.119511 3342.7694 2864.1576 198.8409 478.6118 451.54683 498.82407 489.17207 35.23127 -375.78886 1306153.8 -1306774.2 3691.2716 48631.318 311.62801 0.0071278731 - 750 65.401576 3181.7673 2786.7104 193.46422 395.05691 409.83192 508.19542 454.56182 32.890716 -379.80692 1306149 -1306779.6 7428.3698 48631.318 303.20195 0.006233194 - 800 69.680899 3032.4158 2699.8707 187.43547 332.54509 453.40673 486.16575 441.1235 32.847786 -437.39338 1306144.4 -1306788 1701.7652 48631.318 293.75377 0.0056528223 - 850 73.96463 2898.4928 2563.6959 177.98169 334.7969 463.66637 486.19929 453.38803 34.062233 -455.86062 1306144.2 -1306790.9 -285.03665 48631.318 278.9376 0.0052777781 - 900 78.229548 2780.3555 2528.3241 175.52604 252.03136 396.92692 451.76463 435.59744 33.035257 -413.46176 1306142.9 -1306794.7 3836.4341 48631.318 275.08801 0.0070306435 - 950 82.482848 2679.3417 2456.8817 170.56624 222.45998 385.66656 434.6516 418.37977 32.156722 -387.2201 1306136.9 -1306798.1 5510.2309 48631.318 267.31515 0.0064042654 - 1000 86.722726 2593.4365 2367.4477 164.35738 225.98882 427.8524 453.27435 415.48809 31.097577 -436.62051 1306131.8 -1306796.9 1166.3909 48631.318 257.58464 0.0059160543 - 1050 90.888482 2524.7788 2305.0253 160.02377 219.75349 432.90807 438.86657 412.79356 30.892593 -414.29436 1306119.4 -1306800.8 1698.2687 48631.318 250.79245 0.0065593259 - 1100 95.024656 2471.8176 2311.0953 160.44518 160.72227 378.43572 453.3435 392.48525 29.012472 -409.64374 1306119.6 -1306802.5 4190.91 48631.318 251.45323 0.0059713432 - 1150 99.165724 2433.9279 2279.0766 158.22231 154.8513 395.30434 436.87933 414.39389 31.118973 -428.90902 1306110.2 -1306804.2 3274.8924 48631.318 247.96893 0.0069039065 - 1200 103.31062 2411.3777 2238.4638 155.40282 172.91381 453.61551 460.27693 408.59237 31.237062 -482.78549 1306110.2 -1306808.2 -523.10179 48631.318 243.55012 0.0068754631 - 1250 107.40149 2402.1932 2286.0576 158.70696 116.13565 416.44979 462.75875 391.75373 29.446705 -477.67214 1306102.2 -1306808.8 484.04837 48631.318 248.72579 0.011679749 - 1300 111.55448 2406.5029 2261.2729 156.98631 145.23005 408.68043 437.74725 400.4567 30.448106 -418.44274 1306096.8 -1306810.5 4490.4165 48631.318 245.99228 0.076574936 - 1350 115.71244 2459.1398 2317.5855 160.89575 141.55434 651.84862 447.40877 400.66793 29.060967 -461.45124 1305884.3 -1306810.3 693.59782 48631.318 250.14098 3.5622064 - 1400 119.88515 2479.5991 2285.6701 158.68006 193.929 582.54021 457.54475 430.29254 30.183876 -449.49979 1305955.6 -1306812.8 930.31169 48631.318 247.21826 2.5935077 - 1450 124.05689 2498.3537 2286.4924 158.73715 211.86128 434.79588 477.9598 402.79356 31.070492 -406.60813 1306086.4 -1306814.5 2933.4418 48631.318 248.74646 0.058608522 - 1500 128.29115 2546.66 2423.6257 168.25747 123.03432 392.07474 456.01536 385.97457 29.255586 -417.92459 1306089.9 -1306812.3 3333.3497 48631.318 263.694 0.011243575 - 1550 132.46344 2596.5481 2325.2227 161.42596 271.32542 462.52464 469.53612 461.20308 34.616094 -423.51186 1306080.4 -1306813.4 2155.0566 48631.318 252.98739 0.011191115 - 1600 136.64497 2646.7844 2387.8797 165.77585 258.90469 424.6071 484.95314 449.56642 33.318144 -395.67454 1306077 -1306814.8 1291.5449 48631.318 259.80403 0.012426122 - 1650 140.83234 2700.2847 2387.3033 165.73584 312.98138 431.00741 496.39504 455.52303 32.724808 -357.63815 1306070.3 -1306815.3 5007.2365 48631.318 259.70198 0.081729799 - 1700 145.02103 2777.9556 2386.7756 165.6992 391.18003 636.61544 523.12627 482.84847 35.186128 -391.10505 1305919.7 -1306815.2 2192.7076 48631.318 258.14043 2.7318649 - 1750 149.22218 2829.5998 2559.2796 177.67509 270.32019 684.587 479.93609 446.30457 31.888933 -385.84966 1305832.5 -1306819.1 1683.1471 48631.318 276.95798 2.6465587 - 1800 153.41978 2835.768 2465.6959 171.17815 370.07208 470.05934 508.38934 479.71489 37.826868 -369.0767 1306062.8 -1306819.6 3023.0762 48631.318 268.22249 0.097440318 - 1850 157.62632 2857.7601 2504.3893 173.86439 353.37083 436.06841 516.10132 487.71301 36.514956 -385.43181 1306078.9 -1306816.5 2950.5189 48631.318 272.47825 0.016816883 - 1900 161.8372 2867.791 2528.8957 175.56572 338.89527 446.38065 509.27013 485.03036 37.283587 -402.68445 1306076.6 -1306812.9 3161.5045 48631.318 275.1476 0.011615474 - 1950 166.10858 2861.34 2513.9103 174.52538 347.4297 470.9855 536.84666 467.9604 36.049051 -430.05716 1306079.3 -1306813.6 738.77866 48631.318 273.51233 0.020075246 - 2000 170.32286 2838.0367 2530.4481 175.6735 307.58858 423.18694 516.91384 454.72628 35.048394 -387.67176 1306074.6 -1306809.3 4321.7103 48631.318 275.24492 0.13775419 -Loop time of 170.323 on 1 procs for 2000 steps with 5500 atoms - -Performance: 0.507 ns/day, 47.312 hours/ns, 11.742 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 105.66 | 105.66 | 105.66 | 0.0 | 62.04 -Bond | 19.802 | 19.802 | 19.802 | 0.0 | 11.63 -Kspace | 35.029 | 35.029 | 35.029 | 0.0 | 20.57 -Neigh | 2.7502 | 2.7502 | 2.7502 | 0.0 | 1.61 -Comm | 0.62654 | 0.62654 | 0.62654 | 0.0 | 0.37 -Output | 0.006705 | 0.006705 | 0.006705 | 0.0 | 0.00 -Modify | 6.3072 | 6.3072 | 6.3072 | 0.0 | 3.70 -Other | | 0.1366 | | | 0.08 - -Nlocal: 5500 ave 5500 max 5500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 15407 ave 15407 max 15407 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1.30509e+06 ave 1.30509e+06 max 1.30509e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1305088 -Ave neighs/atom = 237.289 -Ave special neighs/atom = 15.6364 -Neighbor list builds = 44 -Dangerous builds = 0 -Total wall time: 0:02:50 diff --git a/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.4 b/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.4 deleted file mode 100644 index 673f867ab4..0000000000 --- a/examples/USER/drude/toluene/log.toluene.nh.11Aug17.linux.4 +++ /dev/null @@ -1,259 +0,0 @@ -LAMMPS (11 Aug 2017) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style lj/cut/thole/long 2.600 8.0 8.0 -pair_modify mix geometric tail yes -kspace_style pppm 1.0e-4 - -read_data data.toluene extra/special/per/atom 1 - orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) - 2 by 1 by 2 MPI processor grid - reading atoms ... - 5500 atoms - scanning bonds ... - 4 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 8 = max dihedrals/atom - scanning impropers ... - 2 = max impropers/atom - reading bonds ... - 5500 bonds - reading angles ... - 6000 angles - reading dihedrals ... - 6000 dihedrals - reading impropers ... - 1500 impropers - 5 = max # of 1-2 neighbors - 10 = max # of 1-3 neighbors - 16 = max # of 1-4 neighbors - 20 = max # of special neighbors - -comm_modify vel yes - -group gTOLUENE molecule 1:250 -5500 atoms in group gTOLUENE -group gCORES type 1 2 3 4 5 6 7 -3750 atoms in group gCORES -group gDRUDES type 8 9 10 11 12 -1750 atoms in group gDRUDES - -pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT -pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO -pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM -pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP -pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT -pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT -pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT -pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO -pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM -pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP -pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT -pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT -pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT -pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM -pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP -pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT -pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT -pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT -pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP -pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT -pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT -pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT -pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT -pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT -pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT -pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT -pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT -pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT -pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT -pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO -pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM -pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP -pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT -pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT -pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO -pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM -pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP -pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT -pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT -pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO -pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM -pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP -pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT -pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT -pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO -pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM -pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP -pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT -pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT -pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO -pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM -pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP -pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT -pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT -pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO -pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM -pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP -pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT -pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO -pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM -pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP -pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT -pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM -pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP -pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT -pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP -pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT -pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT - - -neighbor 2.0 bin - -variable vTEMP equal 260.0 -variable vTEMP_D equal 1.0 -variable vPRESS equal 1.0 - -velocity gCORES create ${vTEMP} 12345 -velocity gCORES create 260 12345 -velocity gDRUDES create ${vTEMP_D} 12345 -velocity gDRUDES create 1 12345 - -fix fDRUDE all drude C C C C C N N D D D D D - -fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 - 1250 = # of size 2 clusters - 0 = # of size 3 clusters - 250 = # of size 4 clusters - 0 = # of frozen angles - -compute cTEMP_CORE gCORES temp/com -compute cTEMP all temp/drude - -fix fDIRECT all drude/transform/direct -fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 -fix fNVT1 gCORES nvt temp 260 260 100.0 -fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 -fix fNVT2 gDRUDES nvt temp 1 1 20.0 -fix fINVERSE all drude/transform/inverse - -fix fMOMENTUM all momentum 100 linear 1 1 1 - -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] -thermo 50 - -timestep 0.5 -run 2000 -PPPM initialization ... -WARNING: Using 12-bit tables for long-range coulomb (../kspace.cpp:321) - G vector (1/distance) = 0.382011 - grid = 40 40 40 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0325934 - estimated relative force accuracy = 9.8154e-05 - using double precision FFTs - 3d grid and FFT values/proc = 34263 16000 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 19 -New max number of 1-2 to 1-4 neighbors: 20 (+1) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 8 8 8 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut/thole/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 18 | 18 | 18 Mbytes -Step CPU TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] - 0 0 14386.197 2910.7282 202.07402 11475.469 6565.4851 20.333365 1.0706727e-06 1.3894617e-07 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 - 50 1.1419601 6863.6417 4633.9267 321.70512 2229.715 735.2547 604.69459 648.35773 49.039129 824.06033 1306091.3 -1306722.9 17914.827 48631.318 504.18525 0.0086839775 - 100 2.3001912 6628.0719 4376.1868 303.81182 2251.8851 598.11248 651.43051 919.41359 74.216825 589.6504 1306135.1 -1306716 17450.721 48631.318 476.14276 0.0075129701 - 150 3.473469 6336.1884 4726.0692 328.10201 1610.1192 560.01225 621.30109 640.32474 45.531174 288.99129 1306173.9 -1306720 18303.624 48631.318 514.21215 0.006192153 - 200 4.6296241 5997.6192 4565.6288 316.96362 1431.9903 524.27651 591.79844 718.11014 56.374557 88.66084 1306183 -1306730.3 17986.183 48631.318 496.75522 0.0068120542 - 250 5.7982912 5648.1756 4433.1557 307.76682 1215.0199 502.13686 578.8537 665.27326 49.096119 -19.019961 1306179.2 -1306740.5 11771.328 48631.318 482.34141 0.0071619522 - 300 6.9468622 5317.8583 4075.2077 282.91669 1242.6505 602.55113 637.40818 647.27073 44.769725 -123.22347 1306183.3 -1306749.5 3571.1872 48631.318 443.3952 0.0071733908 - 350 8.0925181 4996.7094 3935.7988 273.23838 1060.9106 455.75195 634.3655 638.77824 45.831051 -157.63039 1306198.1 -1306754.3 13525.265 48631.318 428.22739 0.0063722017 - 400 9.2309761 4695.9294 3742.6584 259.82983 953.27093 457.49585 620.73048 591.94413 42.495714 -183.91838 1306186.7 -1306762.2 10901.217 48631.318 407.21326 0.0057875 - 450 10.363872 4417.8018 3513.6374 243.9303 904.1644 519.61261 580.76003 624.06933 45.631272 -286.60025 1306184.3 -1306763.6 2956.9021 48631.318 382.29485 0.0057536673 - 500 11.493601 4165.0005 3333.7203 231.43976 831.28022 465.52341 579.36085 580.60004 42.345149 -254.82269 1306183.9 -1306765.6 5818.5549 48631.318 362.71904 0.0059224858 - 550 12.636785 3934.5207 3211.9362 222.98504 722.58446 431.14864 581.46511 517.20249 39.188194 -265.4704 1306182.7 -1306763.6 8537.9415 48631.318 349.46863 0.0055762027 - 600 13.759642 3714.8658 3121.0493 216.67532 593.81649 425.12998 539.89497 490.30506 34.564567 -305.82067 1306175.2 -1306765.5 7402.7688 48631.318 339.57967 0.005748668 - 650 14.880794 3516.2453 2930.7499 203.464 585.49542 511.91457 512.48857 521.40634 37.766798 -391.65394 1306163.5 -1306770 381.72898 48631.318 318.87448 0.0054629381 - 700 15.99791 3342.7693 2864.1576 198.8409 478.61174 451.54685 498.82406 489.17206 35.231269 -375.78888 1306153.8 -1306774.2 3691.2706 48631.318 311.62801 0.0071278792 - 750 17.111346 3181.7665 2786.7104 193.46422 395.05608 409.83191 508.19537 454.56183 32.890719 -379.80694 1306149 -1306779.6 7428.3698 48631.318 303.20196 0.0062331873 - 800 18.219225 3032.4162 2699.8707 187.43547 332.54543 453.40674 486.16573 441.12346 32.847783 -437.39291 1306144.4 -1306788 1701.7675 48631.318 293.75377 0.0056528077 - 850 19.320825 2898.4936 2563.6961 177.9817 334.79757 463.66634 486.19928 453.38802 34.062236 -455.86081 1306144.2 -1306790.9 -285.04073 48631.318 278.93762 0.0052778244 - 900 20.41979 2780.3551 2528.3241 175.52604 252.03099 396.92693 451.7645 435.59756 33.035261 -413.46181 1306142.9 -1306794.7 3836.4347 48631.318 275.08801 0.0070307677 - 950 21.517533 2679.3418 2456.8821 170.56626 222.45967 385.66649 434.6516 418.37957 32.156706 -387.22039 1306136.9 -1306798.1 5510.2277 48631.318 267.31518 0.0064041284 - 1000 22.614275 2593.435 2367.4471 164.35734 225.98798 427.85237 453.27432 415.48822 31.097611 -436.61808 1306131.8 -1306796.9 1166.3709 48631.318 257.58457 0.0059160188 - 1050 23.688642 2524.7784 2305.0257 160.0238 219.75264 432.90797 438.8666 412.79338 30.892595 -414.29467 1306119.4 -1306800.8 1698.2602 48631.318 250.7925 0.0065595368 - 1100 24.750163 2471.818 2311.095 160.44516 160.72297 378.43554 453.3434 392.485 29.012487 -409.64322 1306119.6 -1306802.5 4190.9174 48631.318 251.4532 0.0059713928 - 1150 25.813605 2433.9311 2279.0768 158.22233 154.85433 395.30409 436.87935 414.39367 31.118959 -428.90913 1306110.2 -1306804.2 3274.9237 48631.318 247.96895 0.0069037916 - 1200 26.876952 2411.3772 2238.4639 155.40283 172.91329 453.61525 460.27658 408.59192 31.237007 -482.78468 1306110.2 -1306808.2 -523.10237 48631.318 243.55013 0.0068752641 - 1250 27.929701 2402.1937 2286.0559 158.70685 116.13778 416.44884 462.75935 391.75448 29.446777 -477.6718 1306102.2 -1306808.8 484.0561 48631.318 248.72561 0.011679662 - 1300 29.000999 2406.5014 2261.274 156.98639 145.22737 408.678 437.74824 400.45662 30.448139 -418.44472 1306096.8 -1306810.5 4490.4105 48631.318 245.9924 0.076575975 - 1350 30.07322 2459.141 2317.5852 160.89573 141.55579 651.85736 447.40791 400.66662 29.060882 -461.45016 1305884.3 -1306810.3 693.5247 48631.318 250.14112 3.5619231 - 1400 31.14859 2479.6103 2285.6714 158.68015 193.93893 582.54135 457.54445 430.29301 30.184026 -449.49877 1305955.6 -1306812.8 930.44669 48631.318 247.21806 2.5941109 - 1450 32.226914 2498.357 2286.4857 158.73668 211.87137 434.79636 477.95951 402.79572 31.070593 -406.60139 1306086.4 -1306814.5 2933.5045 48631.318 248.74572 0.058613153 - 1500 33.410717 2546.6608 2423.6247 168.25741 123.03609 392.07322 456.01243 385.97344 29.255562 -417.91413 1306089.9 -1306812.3 3333.391 48631.318 263.6939 0.011242005 - 1550 34.466176 2596.5534 2325.2208 161.42583 271.33259 462.52172 469.54241 461.20405 34.616224 -423.51068 1306080.4 -1306813.4 2155.1194 48631.318 252.98718 0.011190963 - 1600 35.524206 2646.7837 2387.8846 165.77619 258.8991 424.60563 484.95051 449.57767 33.318683 -395.68293 1306077 -1306814.8 1291.42 48631.318 259.80456 0.01242131 - 1650 36.582854 2700.2921 2387.3119 165.73643 312.98026 431.01369 496.39909 455.52591 32.725057 -357.65832 1306070.3 -1306815.3 5006.9348 48631.318 259.70291 0.081728845 - 1700 37.641527 2777.9572 2386.7777 165.69934 391.1795 636.55763 523.11512 482.8483 35.185863 -391.0955 1305919.8 -1306815.2 2192.6733 48631.318 258.1403 2.7324891 - 1750 38.722299 2829.6167 2559.2488 177.67295 270.36793 684.60746 479.95058 446.29664 31.887359 -385.83616 1305832.5 -1306819 1683.6061 48631.318 276.955 2.6459088 - 1800 39.800548 2835.7772 2465.7031 171.17865 370.07414 470.05306 508.38361 479.70121 37.826988 -369.0694 1306062.8 -1306819.6 3022.9801 48631.318 268.22328 0.097437593 - 1850 40.878327 2857.76 2504.4099 173.86582 353.35016 436.05857 516.10495 487.70907 36.514477 -385.43957 1306078.9 -1306816.5 2950.6415 48631.318 272.48049 0.016822774 - 1900 41.9583 2867.7843 2528.8424 175.56202 338.94193 446.38058 509.30719 485.04661 37.284135 -402.67104 1306076.5 -1306812.9 3161.5835 48631.318 275.1418 0.011620333 - 1950 43.058281 2861.3388 2513.8846 174.5236 347.45414 470.99292 536.81741 467.97736 36.047648 -430.00695 1306079.3 -1306813.6 739.25154 48631.318 273.50953 0.020089235 - 2000 44.142059 2838.068 2530.3189 175.66453 307.74914 423.19157 516.85371 454.76945 35.048253 -387.49234 1306074.6 -1306809.3 4324.0966 48631.318 275.23081 0.13784772 -Loop time of 44.1421 on 4 procs for 2000 steps with 5500 atoms - -Performance: 1.957 ns/day, 12.262 hours/ns, 45.308 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 21.008 | 22.592 | 23.892 | 21.7 | 51.18 -Bond | 4.8951 | 5.1338 | 5.2542 | 6.4 | 11.63 -Kspace | 9.1158 | 10.514 | 12.296 | 35.3 | 23.82 -Neigh | 0.63826 | 0.63849 | 0.63875 | 0.0 | 1.45 -Comm | 0.78008 | 0.80146 | 0.84186 | 2.7 | 1.82 -Output | 0.0036852 | 0.0040929 | 0.0052037 | 1.0 | 0.01 -Modify | 4.3966 | 4.4074 | 4.4147 | 0.3 | 9.98 -Other | | 0.05088 | | | 0.12 - -Nlocal: 1375 ave 1415 max 1340 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 8101 ave 8147 max 8056 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 326274 ave 342552 max 306832 min -Histogram: 1 0 0 0 1 0 1 0 0 1 - -Total # of neighbors = 1305095 -Ave neighs/atom = 237.29 -Ave special neighs/atom = 15.6364 -Neighbor list builds = 44 -Dangerous builds = 0 -Total wall time: 0:00:44 From 7d3caaa1a41c12acdd97e482308833a1bf7de7d3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 11:24:35 -0500 Subject: [PATCH 269/273] step version date for stable release on wednesday --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 6fcd5d1f49..bbbc11a1ba 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -7 Dec 2018 version :c,h2 +12 Dec 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 4bbc739421..9b4a006f86 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "7 Dec 2018" +#define LAMMPS_VERSION "12 Dec 2018" From fb08d3ea46e913cb8042adb7261c15bf519760be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 11:25:24 -0500 Subject: [PATCH 270/273] ignore MSCG build folder more generally --- lib/mscg/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mscg/.gitignore b/lib/mscg/.gitignore index 7d45bcb60a..6c9a531977 100644 --- a/lib/mscg/.gitignore +++ b/lib/mscg/.gitignore @@ -1,4 +1,4 @@ # files to ignore /liblink /includelink -/MSCG-release-master +/MSCG-release-* From 52a1f257c530acb5036c4309b75d0141b5f58fb2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 14:19:03 -0500 Subject: [PATCH 271/273] fix typo --- doc/src/Tools.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index d2e53d8b77..9204ae992a 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -485,7 +485,7 @@ README for more info on Pizza.py and how to use these scripts. reax tool :h4,link(reax_tool) -The reax sub-directory contains stand-alond codes that can +The reax sub-directory contains stand-alone codes that can post-process the output of the "fix reax/bonds"_fix_reax_bonds.html command from a LAMMPS simulation using "ReaxFF"_pair_reax.html. See the README.txt file for more info. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index de60206304..08e106f6d7 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -63,7 +63,6 @@ aliceblue allocaters allosws AlO -alond Alonso amap Amatrix From 052828284d48eab2f7ee2ce1cfc586b10623d871 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 14:53:31 -0500 Subject: [PATCH 272/273] fix typo --- doc/src/Build_extras.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 60bb5bbfea..58ae16a372 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -621,8 +621,8 @@ The USER-ATC package requires the MANYBODY package also be installed. [CMake build]: -No additional settings are needed besides "-D PKG_REAX=yes" and "-D -PKG_MANYBODY=yes". +No additional settings are needed besides "-D PKG_USER-ATC=yes" +and "-D PKG_MANYBODY=yes". [Traditional make]: From 8422bf64fa094e29abead130365d93a3a91aee19 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Dec 2018 17:42:38 -0500 Subject: [PATCH 273/273] prevent configuring -D PKG_USER-ATC=yes with -D LAMMPS_SIZES=bigbig in CMake --- cmake/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7ee1b7f521..e950db99c5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -221,7 +221,7 @@ else() endif() -set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS size limit") +set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES) @@ -856,6 +856,9 @@ if(PKG_USER-AWPMD) endif() if(PKG_USER-ATC) + if(LAMMPS_SIZES STREQUAL BIGBIG) + message(FATAL_ERROR "The USER-ATC Package is not compatible with -DLAMMPS_BIGBIG") + endif() target_link_libraries(atc ${LAPACK_LIBRARIES}) endif()

    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�McTn^@)5uX=ct-}r!(>1_41CM8Pa?3W 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 literal 0 HcmV?d00001 diff --git a/examples/hyper/global.059000.jpg b/examples/hyper/global.059000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b77a9e3454a3de55e2d4f69843fbd1518082d9ab GIT binary patch literal 71492 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 v_Dhop" -compute dsp all displace/atom refresh check - -dump 1 all custom 1000000000 dump.* id type x y z -dump_modify 1 pad 6 thresh c_dsp[4] > ${Dhop} refresh c_dsp - -dump 5 all image 10000000 static.*.ppm v_acolor type & +dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 & zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01 -dump_modify 5 pad 6 amap 1 3 sa 1 3 blue red green +dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green # run -hyper ${steps} 100 HL event min ${tol} ${tol} 1000 1000 dump 1 +hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1 diff --git a/examples/hyper/local.000000.jpg b/examples/hyper/local.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef0ec0cd59adaf184019cafa7fa00746be5828fb GIT binary patch literal 493761 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�EQLSG3m1l8T4Bst}&((=xmWw)5 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 NRK7Vuxas8cPgHlu1? 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 z zsr5G5MZZi`tBAHbZpHkOPai$5lzP9i2^g8#73NfM2oTP(1{s`~g0l)ckX!_K#owux=m3eOln(*YNqw9B`sd98p z+b8ONn0`5);hB-IaKVa^OD&E5sp=&aC~9LpQ&gsNDW1 zfmd#X6?gSv37aI(fotx+?96A&liEd(>7*w)!n2R#+In{A3a9q zq|wBKeO@Y*SNsLgsy_MRbe}5FuRFDYU;JlYJwCy@kW^|3{26#Pc;Kp2*bFH_A5Hfg zy^Ac^vw}!3A*W1TZ?KK!MN>=d0mUf(sLBqW`GIoPb>~qb*dN1a@pL67&k|XnSZWJ= zx2gr9`;Vwk#u>NO|DqnGFzk`MG;~}RAQrK=e+72>HBxaN=P1P2#riPux$Ky_)rpdj zA!g;1cPP2*e?<0;t(JsU2R=+H$J;x!%^Ov3rb~I#?D!#sP>D57!%~BG3w>i5P;0rU zWjpuG9PF%Co+=g?z4760@=0P~ir)>0M458--PfC=a0e0Y%FJ6WW!qV4EIag1=`;`bNY7B3jAwH`#rJpB+GTPRj|pT2-1?-$ab1|(D-$U?F>+qC| zwU8SuV`R`a2B{uS66V7?s`jt4Jpb66>7Up1*^ZelB?k9!nRjMS(YEMIIq1U(YKSdb z24oz4Z>{I;#&q!F+kewGw1m*>hE?`gy}ma>mJGFRfqwN_)ayF*;V+rq5-lC2ZYA0i zUacyK(Lqx%2>lr>Ttg3@%L681!*X2t@Z%0#JTkrAKHG-77S+(Q00 zQsjDQd%0a(ELs`}Q|u|acp@8GDdhCq8Ys={<{e^XS53vST|ZZ#8M3fUaH{naruU@U zi-&SshT93UzcoHtBto59-CwN&O7Qt#mV}Q0zAJO@C_n^y6Nmx!DJzw`{~f z*K9oQ<`$w�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 z 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%0A{&S827`8 z$8pn>9F(spYtZSyT$U*DZDJ)uUo(KRZ+-1+0Ep06wkqlnYaJH*0l5fzme?4~YDG(@ zx*0p5dz?53G(3~k9kLt{v$8~K-ENqckRszt>d|dkjxK`gB_qh71o@-IU ziq)e$cXN%e^t5EWkNNn$DPHX7U14s*vnN)13#xYH|JJ9=b;k*MecB2#^We0CV?$VG zjAlSRiP{|>2Xdv)I;zBm{d+TcIO{)$C>w_;_C82=l%g;$+vF8~5dKx0uU**xM|P}^ z)Xu?XGmkA3PIMwIH$4YjKeg1#V^L%0owQlCGpfS7WOlH zc}R`Tc>ejdny`<>o&cuEuT}qBN;I+|866e{TDcZf9j@%ZzXEW5JbAE|qYWR%I-k!sRIzEJyl}&wOO^`X zVQ-uJzHAQ}Mnni_mx(Mnfo-aV&a_UUx#nFi*z-$#zmS=Ps8{XS|inDHhX*w3pd!k1q& z@k*bx6`UlbP0OJa##6_XQKQU|t@QKs`qO5M6^l=3jnzE8*9|qzrcWM%{Tl9&Q7Ebe z=0AB2Zl{|;l3;X^zK~xqs=7zL0%{^on!$`p)FPV{Tfnzy0wN7)zeJQREoj}N@`lp4 zl7(cZD6-?)1Ic3pZ`t$DfGlWwN(;PaGRE&sD%IAuA7LU zzf~$?#}11v>C?5Xscne!4^|DpRE8wTkv3|>W}xC;G!=`TI(LV{rW!6gX_YtXw2jV4 zF0=85yQ627z=zw4JBHsXw-NBl7lds47feSx{0&ROEU6C|;k)^CH-DndkPsfh$qh(O zP`Tu*UXd3MscXqUmjN!0j*T>~jmi4P!D+GkTyi|j!jkST|#A@9dhrY+I^&eEjTfWE;13Nk;we3T#WU1FmiUe}=+?z>wieP_qyJq}iQWSD}hb;p@|LNU-=*<7|86R*j@%@>! zHhVP5QXtiLedEu%-aT{a?#bZkopqX^82F$`?pP0e zHI-<4A2k)~yiA_*B+}md*^g_sE$riI*wB0eE!HU=8lC=WP2|B>E%(n=aCuXL8(jK- zWQH}7Z%YlmUDAM}xp$#K2py0pB);fV0x}}JCK*%C5tLt=(lyOqq}baGHXFz`+camc+*CvHtPv9s($mh3CU-0I{J?^C&Zpx)?DsiFG9Ll*Q=_?jR!^DDg zltd~8{1Fpv`=Jhc*%%hI;;I@QW>&VcPN1`wc6=7cEv9BX-u}o6E^mNo{uv+>^!H`M zaq(`=r?Yp!F!pvLzFhAayM-a@ zqlP;_=&h#0j&k5Q*d(DiYp{n9mJW2{LKtcH&G>q?7$x^8uv}d!=C5G1EV^??y1Llqqvhj1 zgJ;`1%Sm_OjmG$p>++lb)&DJ)c&OPg^zq*LukDk{0(y541X4Ud3+dEgcqylO!Dj0> z>i9-{>fhu3Q)aQHIHRNsEH-Q^LEwWdd<3Pr zi1ZJ&w-5_S51Q9&bcgofT_QnN)jE}yTiFqbA0Axkcl)#65p+HNJot_AFNmkh`*@h= zCf*@Vc9hX}emmt(bL`U%wirGSlYw3(bB`|vAf10DupeOa8LG`^c-^j~R8JulLOOTL zKhg6qB>mMka@&?9JycuDj#C#gF%*=@^mz^;PeLk9c~U5x7Uv|1PUNha;wZ6mkb+skdfT~1NL!$wC{eJVUb(7WD)~Qdb-mq{%s4uM2eVp~4X3 z@TfuY$&dQCtiA;vQYJDAX{z3Y z6jypb8+kfk?w+0ngj9R|^MzX`g2l)ku+gu2+1Bswef!wW(z)!!qkUFNbm_j9n()=j zQBmzPN*Q_Aso5A)Y!aT7!#w56!F2Eat>zpGls- zyGFzr-I)_4eGix)3&l5CHnci!2ywgFgfS5_UlP19sMz(xVqmRTRHW>(bq6BUecp0V zQ|V$fA%))N6;JIR%iJs*jx{nckOteVLqeU+^ORnfYv>y2SEp=j=tF#)1E38Fq&*MP z^YPF};7V#$!HM^u*wuUwy*Td}{3iSGG4SZdS>+hqu-9CTRzm7vc6mZT{H?LKw2sil zqyzmS$i)YIYi>uU+40U3L7zr0M_EH7LS~#KNz9|v(B((l7rm=e`c{q4PrGh}6HPIp z5*k)vHVas>ohe79WAAj-*xbnFi*%3gOQYqyUr2no5J;C&2C`VC4m@qbR{biac3`7Mz-#f#w~ueG{UXIRT1^IHj^v<%~Yrjfqc5 z?W}tvg1aWi<}D-Hf##>fTwq@AQ;oab7EdeIU(1m#Xg$**7mEL?G@as+)giEny4Dg< z(3E*=UtBWPd*CJ_a8{48S+s)w`8=UV0JX~k=D2Fp9Sd5=xByYA^IP$_j|L&-AoUd~ zt^$VA1f*q1?6nRvs98uyM`)2PY0@0pUS7U?E%^D$P)D#O7M3rKX586P=UM*hHN%d` z3$q|N+4DD`TXlFyx;NMH^GOCx8)cSORz9H)czx?gfsry$9_L>5!D7qdU;)%_pj`m2 z*B#0_3$3)3pGziZR#6H~8>N@(=H#W_j`^|Os9$RTV#8`db7dJeNBhE$i_prxpIwGq zbm^I^TGbEIokFbn_CtoO9`*NKy)i$itbha8%r6do)Y^T?JjjO{n}Bb~!3r{5qd{7> zDeh3R1xozunM;6W{seR_KC;6u5E7-HKlXenL>t7u;=qQ53!a;P1X;gML;t798BJag zDklF6%Ry+UtJ;ynvc7D|pQBSUJq9(rJ@y3F1#D}d4n*z5da=S2AR3j}xuw3M$nM%` z%TC(;BA=u*M)=w}&-Wj2UJC+G&MIe~miFfrNqchguN}HY^ah&#j_X{j^*Wu#Y2%GU z_{ol`2utI_=N@?~92+hAAtlhmko4?^hE_3~Ev#5O!3+^M7kx_ZNv4^`VtjXVou4OU z*JRc3%PFwrUAhYcpV5@d=&C>dspdxH0jCEvVYooY&O9<0x4j6LrW!6u1M( z5j-k@MFuwf+_7?YDGv3Pt6YY<8u9V@*RBW4;o&7?L6p%E4*ywJW(b@aP;+bF)DFz=K<_9zNG1f+(# z8$xfOrX@F>C)WGF{Gg;O?==jbQlsDDk?^40p0*(TZpdgDU~bV4xLZNSlhb#BdgLTUM^o~Oe4+|hJ7FQ1s`i8+6 zm#w^&B`WyFRR>36a}k?l{X9E5W@6-ML5+e;e$cZDk(-D^=;3ENLd9oLaoaMDc4znk zS)Ai}V7`IEvYFbw9eeSpu9<0I-c;br1iQ0xWanS1zyBkvyEH*FuNty}Er30iL}Upl zg{C%6o5NUr)OnzfJ2W5VeO`=XLhnN`FS4^u%R5n4dPs@M3rF`$yY0{+_i*tOhx?zeslig|+5|(yC{{;o5# z07h#qt48f3Z32E|!b)k<@T}GfF$Q?Dldl6QH$z#86g}+{O_RlA{A$kiw+8#-uhljS ztDvH4oV(e!HM4&WeVpCq1+ttt`Of(ixqRY7VI|99%<#U>CFpp)+BYNyNj~p$qU-2eH(gWUylA8)|GCQPRM;XF(%;waofABt&Uo`8cK@J z2sF+9{Oj>X2@bgte`5@_cv^gFW(er&vp5^JK9va2JPLq3p1DcLTC;jD6V7E z89w%4^$)VvKR~#geK?=WRu#u1V^1nMMK+ro@&_;H#B$`ZgX0>HB2DTOrRk9C<0usG zEqI*<-Yk8clt6>%%>43ZUvX{OWioq&AaEWdIQ}7Y0wQWN_bl0__qUGaAF^*QDrDT- zmzzl-y{auGSj1xcx9Pq32Dd*7jJL@eMpS{YT;Hql^9s!|-I*hjVa2~*#tPWFqzkvl z==;2r$jr7qRG3%_5z?uuI7y=MM}kfM4wu@zdf4PppY9ucB$qtG6sbb1MBZz$;{O?K zv}#CiKfhhui=-APNw)d1mYf>z>wsL*S?(t}0qSjuy@y#c8@U6jv=)AUq`mq+gfi28 z^Z+^2MOVx0-^8x!HAiv|DE2?N^hs0^PMcawN6bJClu+R1$74OKJG!FEiVhh{;Ncm& zOZSus-|#Ng2RVHWEs~j@_D2D)tb`5jlvlN|D(|#h55sDh^jpsJ{ZK)9bz(o&uU)QyS5=}m`VyK0)|5n4E!FuxD z{)esMyQXgeQ{E=tl;>drVqPm#v{t4p^44cG5KZhjA7vV4fM1!kkNFN=UR2PX%qZDe1)liQ+pGxg*=a%b-@Bg4w-jvwQ zMy_NMG%)dw&2=?RtoX`w-#5YN&t+dj?(rrl%gT$`Kw;LT_Wa34lmuiP@05DxyiWO{zEjq`rA1yaQcZe>FNh8Xh(gdGwoGl* zgeBqIn;*!^2We#lG4u_`s0_^uQt*n8Z!H6Y|4f`peDO;OKbb1GiI z?+Um>^X2;YBX6cT8W+WxlO&MOy;6!I3+?k%-Q6vmE-sqK%`@_(+74TE`*(tU@MX4t z(0paPa}D3v?0eZ6Y#E!`*Bmb=dG6t5uTl8b<8F_Njx&hP?>o1@-g&OEh?tPTIS6BRx?LWz%rt5seh;#gUNTQDSDxmsE3G)Ix-6)&|LtiymT&L>KX?3j8W@62sa%^YnkL|u@`$N(XlB{Em z5=?Y-q?qIXRC;%xM_VAo(=X|nty6sb5)roSz)Y;P&9>3BEUS$l668%^UUMnc4B5eS z?IzuyRj;xKpNV5!F!`M<1P7BO7LCTWB*FA@RH`;Y-z z|GA>&4`1Oy&w!3iOo=U_v}846rm(rf7wQ}paN>p&(}@l)6uyn)XC#e%bE*5x?0VYm?)I=Cd3>ds zKxM-}y>=#m*Wt7ZVt^h!OHI)Qn~%A&JXBm zz2b9ok0-_v8f7A;iT_Tf|HIA-eGJuSUbyM z*?C<%6ZehxT=+ZQAuUtD`7gL%Mo5me$w>0nxDQx|Ws7@}f$|H(>j>iuYV z{5yBBRkKb{LkeWE7RW4H*|hbe!OI@3TjnhC@|l+*JrR5NRH~8?Y!#q(&= zxH2W zV#Q=vRfG_+83l!U`2I7iGNMS?Sp5Bxp&-2m*kI`%w)4^rhg_&N+)Dcam6G$oJVcYz|m4a=AxxF^YX)@zbBgFQ+`GQeBvv#Il~2y!qMi z`}3N^kE!p?FXiXwqr!d#7R37kxwaj1bNW}=(8&#}x^q1!dEgFsxaCwS29sMbCxl$%!c6#VA#*B-}81&v_P%(`83RT^^Ep+@f&ekrCJ zlw2&*$atP5O2v>)@ly!@<8+jgSliX(xt)oGo}D(Cb$dU3`-!JBgKCs< zJ5;5n>9dGtsep6b&<9)HBZ@I-_STAW7~<^UyhA2Fz@fp2zl4J8Au3# zoTu-2=V_Iv^k1%uj=|@Q+-hr?36F^(SlA1_)u>32(YNTL8A;xK9!t+EpI%jzo(WI} zRA1g#GisVx%hYO#R%z=TX}6+iV2j)ipWvD@Gtsd zb_4ZGeq|3kEv##cHB){KO5~cV>@@&n8^KjRjg)DHnt2!XjlJ1p$BN4H!`9e5sxZ3X zd&u2TP`IxA*&kbBN4^6Elf6Ff)@zCNwxJO+gpaej|z7kP5Vti{w=@{$08-RUkXB zuc-29AJWE%u{jlmD|hBUo~*YsKi9|~*spTpg}!(yrqvW&9M2UV*|8kl-h8vK3rRu5 z*b{CqkB=TgR|U1AH^rvfp2X9QloO?F2;2!7H7r>ku(hS=>#>MA#Lsp`6;G@7f&^DM zrvsrhUA0IsqIBnJN};>z07H7Rjaq;SKP?@{*H;(a+!xh=-a>#v{yN?(sCM< z=c7NlkK}(-B_&ZD^XZ&gTBL=xY*hpuGGJF)8M&)^QFW3e3c-?;u7!Mzt9K^j=So5l0Un&Qt+G5X~?9N#hacwSW?LP5Hk;?PfAEtoZKZkJ3=j|=&(FiNdsnv^Ruc7pS1Bk^@K%diE0izq zXff#9zjo7`f?RR}4vOyS2zI@6os!TQKTQ8QCYDEV25kn|A(YyY@7`t4+cartJX7<| zI4kA~(K#<8ruNMM4egKhi_$bAjC0d!DW>r>*B6J@ORPY79v-)n6osNv78YNQd)-p^ zH=L}t>%)8!MmDJ;SYvFH=;gAqN|7S}a%dAX0_b4rBg(oH_BKF7YG zPik9R;?~+Gz@_O+&LO1gr@!)*Gj)g_<#1Q)e`Wg?P(>eh3A(|eH!4w_HGSf4WnH5& znLM=UNhj1x^JWK$A>^}P*IMBh7FxiVHzQnnekFb`X#2+{I;qK)=UbpTT_=XsHJ@kt zGzMlTIb+<2Zg?CmNe>E+q)7*HeZEns3h;QYIUSz6sgHH_ri&>z7NN?%`xEn%G!PAA zzS6!PJXmnPv>~Hq^)}+~przz;QL`%cl()MenzdbFD*t-Fdt&HQbl)-=bNNc1PZvG> zXzu7xzwvrF^7$^5%iuZjxL!jxYUznQ68wn>Ez;T4xFWxS{wWt=~dG{za7>+7WzV{F0 z(S7D$IlgWdmG^&UeRe1dKmwzY9N%!2 z6>32>xxPk=nmSUj_d7lu*xcxQWo!-*r>h&c?6ib+)0HHoga#)~?Ni6jTJDN*eDF!8y%vlY~cEorH)*fbL`hVkHP3cVLB@F=mzr&c+x8?tfyCPBq4pe`3EZ zE-C&>U~Mu6veMjn6P$zj2rS`c@SS6mnW~JVo+>9`#-uOX%CA8s@^By+7vJtXji{`&+DZ+fwjdN4;ufXse|t!@7ctM3v(xsk5E3tXAjGcTaV)V@ zBJ}c)M%I@v(r*JN>bWgC8}ijqEd>VQSJL!7+E%@i7Lx}3;5JXlEdwsVq z$!q26jrOYBHYsj?m)httIe(tU>^7cjyHDUpl(Y@WhXmSuU&vf->@LLJ z&BtWFm`keQGZttfxCkCuC~ehyXxUL(4ms)(T4xFp0iWVeJ-n`zNj!|`*lsqKvncck-(KNeww_2|| zlpHi2*yu-UJuty9^~jC4^De-h-+a;XoX?uoTvg{oPBIY9!#b1LZMOiK^8rweoy^P* zvPLV2-*|6s(f8_O)s6k8%k0c&GbBYI+S;PeYcY1RyQuEroISpw&0PFhkSgs~{82|z z=-m@CL%c_?5?usJ|M|wTUPH@MO=DRYoBiV_CkXEEOA=QOHGLGuwc(XR?=PDDe86II zht8ont|&XoP)v8!3qjfMh%hn3pI-G7!p~E^uT@&6Mmg-@GVmTrUpv9^34`Mf1}(;T zVZ}c3ZIjzk zd{5>Xt2Y7Z6W;3sniCGbyD#Np8dN?yO-J>NvcMfJ8&LXm`mqCiANeA#`4UkEB50=2 z``c8iIqug2abbDh{Ur?n@s4C?o#~{I9SbS(5-DO>8;5~e2tvtMybAd~^(?6Lklo5o ze#zVf&zc0I;rnHcjM|5y=R=P;H2I9ZR^rzG8}%+=cmWq6D(evjqubi?B>Rz-&B zXB~=%=Anx4tFCL&l*M|eq}bi>Uo_30aVD+2sw0ei#@yWtR&6n>_b1ThuNzpk(t0ZU zU59`rUGx`WK-rz=)+*W{C?>mSB0ePB7F{tYx^E|%7+Nv^-okBr#^8*rd zX+DoW52Rk2tAz)9_!I_fq6l~LXOmf+pHL@@wn*I6TYavZ(Tr*3Zv30B4*Eb zTgz4#yT39l%X(*VG&chuE`y(;9A7~A6DyH_g&RC2jZrB-M=?xK) z#s#mNoTVhK&Q2<^Dumk!GqD-KG<@AhQ6O0Q?0;mQE49o&wFU!uv~B?`{Y8_Gg8494 zd}$oGbave^m0I^3ZiYPnlzu(l1dP4%KbG&&MOjZhWbe_+w34kdsatFD3%u}M0RH+I zlG&;@^zhWirSrjEoA^)LR_*-6${%jm9Cd#V*1FA;KXExhMep|GwyiPrp~5eKMcDRb z;M{y?!`JAUq1X4yw(_ONEtXG_QK>rdOIk9uI==Tepd;PX|LzulPqQs8SVgXZm8wg0 zeSaRs0%Lx)udS<{A#M{>lIso;Sf%zqXzps)jA=3HC0mv(61tYV;z|DEQ{rSO1+m0y zg>?%0U3*+_Qgmg~1$;S;2?zPCEXx1lh)k7BztuQHlkC~GVOa7m_{lU{o+9SdpTLt2 zE#Gcrq2cI|aU0t7FyVZY*cGJ03Sy9L@Q``B5{x?Rdc zlap7HSY$EXPFd zRp&pO?qw)v<+um*zxGRdBl15o=3t8zD73J3?1Ym>71wWBn!%QCZ%d~7zSmHF=8t)9 zzBv9fNfI@-@7v@!`Fj0;!dOK$ZAW%+(gPXVZbNm?zs=M;R z8MDXAM$t0i8$4Eu!Ig!z(O4#Iw$ZqkL%aR#bW_2hMT3QhO$ zeIMU<_icCZ8+wse^;!F~tM)Z#eN!ZlTP`p$gR0t*L4*aG1MSGaop?+VKYk|ZzEyLh zA&AjP!2VtZFFgq?6n#1~`Q1ZsRp&*~OWpKfLL=9vLa*41u9nfLHDE9#plViNI+4c^ zWs{tqO!;`Ot7$|*2443XUmPl}x5%nnUt4qENrTDln@|~f3B&sT4_p_mLs*wsRwS>@ z=OI4K1y_vB*{v~SiMwk+$iV%V)mN42n%;Pv))_c=pacV$Y}Vfc9ci3dB}e164i z%tG(W4)uKdcqpDHeU$WglEltZgbeGn`rc7tvuJa7#Y*AtU$18Eb;~=;pYQI0d&g7L zssZ%Q2aT6oD>&U0V{i9ejnVJH1Lby*Ql#^dFgR2)WoVTK+51eX1DFMJfmXkQ&r4;q~WKmv!e5D~DE3PM+=%iYj zi%rnHJl|c@WRVzQtXOTnUz?B}?jJndh#b6113e*V&KnZ_eO6GY2FIuC>!R{EmEYI2 zv%z;w@iTE!Fz$z-E|r>C4TghW!&|vty@w-6lI%2^)n!HH-BPzI*91!9Irwf}Q`0Bz zWrL<$@k#&HkN`t$SsYs6J2>z+YoJE`gsq4r?Vno?&qPaxC=LKde&({XhFQ0|5*m%b z4$kDq$X8XR*j&2CtI-8(<#b_Hl=f;gCB1d4DtirUs(7P$o_NsjGP((xMOq2aavLln z^6&DM$(F6?JG|g!*q4OG346$VwsT(&eF5y*{Wr-mx2B_FU}_XXiG0AbCC5fWW`wgp z@^QH9e&5ALTELrB@KR7{D~H+H-`I3Mj$|WZz&@fH!3+*QGe58))(~!PcJF%l$mL38 zuuZXk2-3X$9s)e94pAPIR$KCn$Yi(hp;wM%@!`bq>`CIl>L~4QN|9@euleif&jGGV zxu$bvi6_bh5tnjNw0YG289#-yH;L;Xs8fO_i>nsWPmgCj9_<*ol_>cZe@pXt|NTN$ zB2?lZ=K=zc?8XXBpxF`IEp~AO&H;)ktNOWgX|$LKXE<-~xjhXbExWuiek4{~vYCwM z=|#bGJ(_`_gww?57p@H1IC=R3$y`Aj9*k}gzOlPSG7qP(dEWj1@pRtNY`=fl*Q(mH zrM9-H+NHLjD2k%?9xZC5u}2WJ)Tq6+X4QxlsS#>#YVR2Auvb5xF{ew$8>6y z==un8^e}~;=b@2Lu4VU?f8vwY+u?@D{^2Ez2D6&usLGn(dYz&;uHrQT!X$L16KCQf zxAr>xi^0vlny}Is+`dY9@;tp*ax}dP<~RgYA2|W;O?j>MtbX$&d>cYP6DC)d21phLx!LBYs7i3#Bh#9PlZL9j|hbPC~Jf)hPKfvfZw!?!e%Z3hJUzx8{Te z#+`iUmCY~H^*TTcFuaQnFC428^)}k|ea)N#c28FqP@{EtalG}5NF9#cKEa~^( zRyUvvV)qE8@G_dJ)jLLFZtDQ-8+;Y{jwjtSWzLPZ%kjn199b=uhb89==NbeO;*2Cb zI)n8P?>QP<+UpH~kocMtzqqnvoxnA2P|I7*7PU`;COf@YCBGidYp9UzC0bMzEaNP= zzOnjbTBzkTJ#KuqJr%tH9?bj6KfrvC%FBo<;a7VM2=XvbK)=w8*{3hfDr{e;BUrW`BD?$p1}O}fUjGNlqg2*w~mUVs0Y2KYx;hz>R%&vT+&YPEM>fAm4G zPPk6(y%5oI9Xq~pR6NiG9ux9x-nETns!rw;sNh<_epu~JK00WcP+pZxBw5-cNLIXt zUojBXI_!Acr&=}bbF#H#)N|cMBP5OwwI4hO?%E0bJCb>3<;iVFoHSj(a4^~8LmilB5f*3HOE z40cOFng%PXf65bV&F`18SV`ZeY!2%AqsJ$UiqzmpR7H|zHDd*PERGNr@fybUNjlsW zoU)^Vc7}EB^t)MniKv;Mlb|PGcvc>pg*{FovphSAY|yV)QHqxs3kJMZ;!oX!&6okb;1lM zNoJ6qAg`CmXLW!l1UclS(BPaD6EKe#y;8pFb&f>ucXaTDYa~`2;639ogpHHy6a=lhAf7S0p#KNBW#qGCm`xfzy5A@izmdzf?g+ zeG_rkxz`~jGr3wb=+5bw$k?pGW20%td>!8jVe&R1@P;u~qI$)({^R55hbRxJnD%mr z&Xjuy`#dg$lFfOT_?e@AXzWHjZSNDZ|sDCpA z(YUty04J}9a}OxdDOR~kgMHublcH6&n)}kCjJnn_HLIUH738qjZLM>j5qTs`)lv#3 z!1EE=+g2|+Iv>su#L$^29LuypVbr^b9Kw3;HPp9tx+()^y|7o!S-U|jop5kABK0(- zGcc1PnPzZ-o4A_gUf{=EEO#$q+{&HWlX+z&bszfv1^LRzCn zMp)CK&rgaDX0j56VT_>xt4-RVp%8go0SJz>)t%g^Ylr|nB`c96YMA|9iFYrT?v4gX z%e*uv825O~%%YBFkV1{b`8kaPe8=`biL9{oaFmYrn@Q@n@RCI|r3(Z4rJ6e{%g!QT zfM)!@wgYzGnkx>ky4Ki2Te7gnL`i+B{~uA2mY#@re5wm? zh=yRBi;Xn|Uh(fm9c?VNBj(nf@^$^KcAM3j+t_RYP6w;yPQ3r(Zf8YYFAe>mEA_JzDhD zvuy0$uImG)4c&x~E_SaeD*x>D|FIoJDDvULyBltKGW92Xf^@|BOBkAz>2&&Kg*;>x zboF2cn_B#8m!fm_*->In2NSLN-g z?nnk~KjHdrWLH1&`DNT%;7sgl%%m0g{%Tk6lQ*D&KBDEUaqL)+@Ba06n1xJk?ZeLJTYf9B7PY}3&+DLRf!hywq~2@;fyEo!>8D6B^L|=lGvBaLHpczP zg!VJu@Rv*0Q7uh%@d7%_@i1Inxaz$*-CGU{MKVAf*VOoXf_1&QLbQ4410TzH_jBbk zS?!PMB`YnfjHgpUpkFV1Xdf+^LzJfwNIK3V@*nH(#5D!Fzu;z}aV`F3W9#3~Zq%g` zeAC{TN3pWXdo9bTOaoD}N9OiciX@Bo5i$`f(fWc%y)e?-x?3~-2x_=vA)?&Cz~ z#g`q7&6PMp4Yv*FTZHqoWXQMzHFZ@!eVjw|a!RrQ`?Al5d8Q5~Ma`!jIjqc3R2&+2 z@ho>^^%2hCx{DPQnOdR-1kfF3DbK2+U7Z9=ezhz3{gWzC>(kFQ7c82ri7~nrl=oJ^ z!y7d^xELf_xjM2UV|=d7KQ`@)y))N?aKRiP0IXkQF)r0GwR=5)-7|@bd7r(`nOS+DlH^Li z1PJKxH6=++7`|iWKPqV1r}%h6QjaBew=OnVadLZqEbIAuvdW&V?`vLqaEtGY^oing z4QO}c>7JSLG9xWEZ;9*~=wKF5d->Fo5=*>pQ@oxn&+q=kU4Sgz{yhtYk_~SAA?d@FLsV~#tlpAe0 zz#n1Y%WXhgO<#iL8t%O<9O#h$&Pj#lK8=ExYlJiSv)T=m`!&(>$qUYs+Wo^)`tp}qyXvf9IUcmChYRKo0MwsC#TR!r9<^`;-AE^Lpf@5Hd7o+03) z24(wX^S|PegkNa^t-E`x#wD!-`CVf_Z$-?&;&UjCNLUNECm_pvKaa^>O- zXD-ECmq1=*c3OaXBhvDbKsw8B_m0Y6?fokw#`bxBnK$BMY@q@0VnVwY#ewIG@I}e% z3b-6&SAW~$45W5ofO$aiMo`_B7-!Rs3NC@&R5r-PwTF<(3WyQzq-PbQ>mg>E1kSE5 zVc`$V%0<@L#Ol;*8=kt|EoOf$pi(KDj{0~sCoNQ&RXY_Rb&!fcPEf9;;X*-}*|Vxb zZu8^|wT1|m{j8lfmc0&7xh@}4)3^2pk`@apsD^k{=e<5dY=O6=YMvAfVBTyz|ahkoDWeA>3*YRCM4nfeJ>NlR%H(h zF|leGiIpd9?(|v{mTD~jh-Bq|dxixZ>k~rD!uipst*!xQGYxXiOYbvYQ9AK}h)GGI z3Z0d33Y>bk6}E2i0XXxTzPKUza69Ft5QryKOhrcaIoG}4#O_|Nh;7OgzaJRzThSi?qY5Tk)r}m9^#YOK~TviEum;!?^ zUxD=s11t1c`XQmB>EhKGxO`kNiFeHId|R!CivAluaOWZ?Wq$iNUbPU+5PHwKDKgu$ z!U9O`{OgujjycOJ=kFux2HCZ{M9i1UBTDN|pX+RCU7t(9nMNuWH5ndiL<{!eSg6)e zk=_#;`g^J4u6bmbwjY=&-D&%ol%rdto}>oekdi1~O-a&y_wgs{W_wc^PqVdV6JLTF z;Qfw4ZZik<|6bdYA41657-pW$F1M{byh#%w)ZT-E#GO){RMWTI!tF7?a_hn$)PCpr zw_p}LX-4NcZReCCF7r3^3xJf6&gshPD@eb#;&tCml0cR=p`7D-XH7^Sb6At2j zb4}pcctz2kB2oCd5xLM?31>nOGy+Ks71FaeZhN7PDy$s2`NDum`6DKj6Gm!}7N|-^ z#Vgt1GNHS~`cfX&Z?M^)apYg^|7>#Ujd5wYe`}$1Dgux1J>q;KeV*?^#%oOZFG zc7r|6e{azqs9v;n8xm{i+Jeos65&i)T$CsTDQq|TX6nL&<&Pn6CPJ8df0>P;kS=N` zDvHx@j~;=EJboT>eTMNLL5M+^`q4SPdSpf1k9P_z==}w1T8_(xbh%8s z2Wz3n%hE$w!PU(4f5@g95c+I7rE9foZk3@9C+W-gCcxTBpx5l#?5;8)crCKDo=8aF zkWWDzx;66t?P~=k{mm4Qn*YJ)+`+=p_9;(R!P~w&pXLyu$DxeE5ejV*mr=eOcNpl% zZ#g~4_Q$r26rbZP#=4t^GXw)qc*IEpo`8BY0qJ8br)6<<@8WXn8(|j0qb1J}&rgbn zf32!dHc!r()Wgnd#?iN;Kt<}7Iz(c(pUN@=QO#ZN#_EAeO`p}f(%m{VHxj3@Ju0%? zO%&$#0z4k^wK6;5`rIhFt^_@ z*E(&nX4*p)(X~95Z4Mjw)1u7+0%9-l^sv4pZBOrkK^nT(tLW10vg&5%Segx~PB?F; zyc0rgTnl(1ClmL>hNNniOAjC=>Z>j75f7G1@x_$M7AvpRrv!UnNJ@y~<1hc<#4H1& z-o_BhHF+flu&v>=ZJ(27MxVMqNb+~)*zPM87QfH5hB?>vx%m;CWSA;wDH>jZK6K}3 z;Tt@mfpp2T`;>=l!bgsk_O0I%9inUG>e1C8(A0+K%&~>9Fd3;b2+YmovI_S-%{t;7@2gq$WEAM76)qdPE9T0l z7q)Gx>J>-ys(d6hDOe0Q!}SQK`yY`G)^HbIW$7wLo*@JMrga&P`*tt46+5K=sK{vq zXc>GeUAEa*;jRkovth+hu`+!tcQ#y!jfE)^k}w%-f0MO3 z#5w^fFB__87Ea=UEUyBX_7916gR8UV;flu)>E&!)-9^l1l(2Q ze=M)OOU7=@2ES+CK)|Q=WaP=1TkLsU1udlV2(=5|y^cKo&KaY`SyvpG>E+iDw70iy zOv=tz8_xXYJ(O_Th-FjV*j~S@=ZMd`d4c4B4sm9ZC0gs2ow(~6>zPd9)4kyQv+eiH{dY8t z-?hM9WDvu7gwo|Kf}qzsHpuu0RZ_KRq(rS3*b~05CA5Fp1q7^x zlDgy(2FH``Z_f?1zCgvrWX2lH^X?J8=FCLYqzFKHOTg_!gp4en;H@9S3pDh!a?Yt? zi7k}NesD*6lz3=UH*Q`WW~ECt8p}e?mP4(ZIVireRhT}|^mbjc6*K_}t{`E?@a4t6 z{9gDyuwZwjOp8+B#m_FvHlik-@zxY!7-CFbe1zf;g3-hs+N$(i{SI)V867bTE^yzp}E*NFNHMVhfS9Z~h! z(E3BFIWK;u9fJ0c6G+>Yp~yPd#x&)^rPmWj zJz~~qF^hi1SBvn+R{5hfijTpTCWPv3^v6ke$ym$z4@pnQ$YkAK@wu$|9|h8Om7VDH z5xVKChkP=NVVci#%Ch zW0^0Z0+e)tXJdw06R|d!w@Q@4r$fOC>Xp!)e1+{;fd#v&@b_wOiOtgY!pQA=sbg(W9Q!ff6t`Y9xO3^BEVtW@V9$Rg`11W~4im z!20|h!U?{w#0u^@c@t{^ydSnur7S|^YZ$p1z61|B^FL2PoYv>MqpQ42g?Jws_j)&4 z=tw@|5Op5PMAWw)1CxnO)^!x+S0!YO38otVdnWC@{}B-*!3LL=nfi}(KZ~WX1YSIT zkQ3~p4k;I4@SCz#08KYeq?ONB*rZvVxkzOJmz&!~_FO6~o4E^c-+*iKwiGVayEG1e zUeMM>_DS3S=Ew^JG4KlHs7p?uHa1V)jowM|=QQ{~oS8 z3(gsG!MB+kVijg9i@hGvp!254cOJSLO2*8iWa|jwkVnPP?&knaUqb8qCEb$~kM0C8 z^M=InL0Y3t>!DQL*0y-tuA+M zN=)_(ml{v~Bh7p~S)<5-^Y651=%I{NdhiD066?YfGyeB4r1$aj%QtIBvR4!pD8e*? z^*B=UP*r^n2HT$G(UY3o{msCW?^AK7e>p_aK6&&GBVX5Q)Wxk37LY+|6hoSzFnWCs zCl-<=JoNy^YJ&{h1~YK^cH6&$Zp<+@{RGx(n9)xcVfkZJ#(&yb#Pi2xzl8q5Aw}sAMg3tN-A%1m0nFr>QN!!1RR~2q;0L_ z$hrj!c3a?)T|xBU4Zgg<5F!CEcBq&$ztlLiuF}?-6hLLXaAF26*L+WFZ+Rdx)tJ$U_k8C~HY1*H95LD{UlVR>aVADw zG)(T1tWL3oSY_kfP0df6YT_JmMoG$S>c-VM7!3jkVaH%6D1yGC1!T?x+5?#T0}BUJyNxvDV63wqE}*OHbj`W zocvg+iekR#ganLP_8-UOd&%{4?*`SCd5)Mn&-hBH_YF+iGNx+JraRSTvmiCys^&)g@tS&?;5+Am4xrk#g^aEY39n5UWOu%5q#w!XuqVio{` ze#x{<{T2P<_v19kR9O^=rF0Ky$caKY1c5!aG!m_}sN3AK|A>J7-jdUHbt)?6Vg&Tr zEc97f$*&vG6bSJjk(lAv>U92Tn4Y!;VDw1G8)6bW)c@TsV5 z$$9rSW-I+MB*GS${s#%C&_^VcI z8q@ifNzc-n*g@NE>z|T6MTT%IT(T1i8Ektk>$dpjcCw$J#pokd#~GK1Sn?dq7^@MM zua0G&RByd0c=3l!Fu$FeCJE>jbJ|Ry+7(DmUjosBY!#p;v4*PuWf7b z<>eHB7W2!U9_Mc`XJ`U66N-Ay`_5s1K0Nib-!%#a{~}=>+LM(RUkdbR4O0F%r*Cy^ z<0l@LE0+4l58zZH%dN|P2=%*$D_QGWHH3LyhWHAN7OM>wA?sR?1EdOztg{U?6$~^% zJ$bYCy2UaN>_?c<_ZxTI#k5n94NG}!LXIgF*9b`?}$r@66Rp;Hh$V68J6{G36k<%Y8BWPO# z_Zrr1L!kILw%-cea7q}Ip(C3ld%~i1%=tVeq&r@?{@3S{g3F! zMobUR6Xj06e=9NVvmA02M5*>W#S9v0Q0#Dzh-g=HInPVcCQ6bk98b9}?B3Co*Iu;m zC)WMm546?L{2{K}?V!MF=lFRiaXY|Uv@4Nl1q>xfvg*sIoBQcSp9EJ-@dTYR-x?Rj zLgi1a+pR-kZ5pBq0Amsz!>u@*s);&Agyw$8wKP1)yzLRDA!01?(B~R?8CpB3!WqCO z)R9+2MUzJu-NvzoMxNdfJa&BA70wRS4`iYM+SsY#EZ$9*_f z-p{@KyyvdrA1YrNnK3wHuGTmBib60`HkV``R*^V@gK2GRG%Y=Q+Ye-8TA%4xpE;!? zv4baZUjwevf|DV7#Tvo`8T=9p8|j5finBD#6?aY9$Oy6z8?gdRh&%D#EpKzSP3?*B zYfF8`rX-rByc->*wXq0-OL7rCwVxGkG2jZ@3iIA>*Z+cyqwT7$! zBXWlgX%Whg4Iey}i1AP+m6!6l1)Rfja&`t+aurRMt?jv#yvB@PEf ztXa|N2gv3RXlX@`CR}U@%g^{a=rp(HOr$4q{T$w}x*|_x3Qr8h?OCcKkR_6Ty*Og+ zoB$3srX>th*s{(AM8fH7Sd!oT?V)9v8LSF<+`%{qeuYyBdvEPN=QK&&R&Y zuE^db8#3OyXR|3FbXSynIUnExN`WgR(=9qK@O~GNJ$QDEs+^)eLrY{+271ViOcl$|_nDC86-2^Cy5#a*qcX6e{JFC{Dv zn2wI>CP&oNY{%4s8sLWVop~IX;JF0QC-G;(Y2Ro4 z#dWV)D|KB9+sznYhm~9A^JRF9gY+UV#PJdhSZ&j4duIB^7fBeT>InaC~ z!oDk4p!&k_NQPobmGmk7+IYC=Hw)94iPlrgrKQWG6_ML|DYQ0$3Gt! z*;c1%aAO>f-t1q z6O^}@vw#jcT*=oT2V(9E zJQ6OH9cUk$3QlN>L7-8)2HLs_6SXd7mKjT{@foucx1y>TG_a=?)0Qe64m;~3oeL_f*&Aeq=;zn!Mthgp+(Sym+4wY2FPjvU^rk9tT z-A*X#e*BtAs!?#r*3@8htaqo=CmJYbte7wCmeVB#BGZCpoNdZ?X5h#ep8ufmxhfQO z{N+C)ln9m+TD*wM;NUof=}cZ?S?)zcsYtnVYW$DD3gt&djqb&5{}CB7cQFenE_bhb zxztU11{Jea_|8!W8s)H-K^wu2N>$7f6}oK+nM;+X3aRc-3kl32$qr) zjW+|b`Lc+nL_#(KjT(a_ zrfuQcfsb^<`ivs9FcYGFw-=IC$ImjpT`pb;`f%fdTrjtDsM})6tNg=E_oX!=u`yeV z9^8A!HJC=fTwI7?L=41W;l|_2_Zj`g2pgo_iypC&+ur zQ6~=_?5M(X)^?Pl0ucm*W1tOUU2xu4C-h)k`3_Ip-DX-ncuA<-q^63_|89!G*0;9Y zKXiTfp3Awth}CKC{de80=G8h2<5}KnJ$8l=VnbxUQ9WS3wz~Mb`T1>$JN{JHp@e5~ z>|)iIfXWf6aJQtz<7EaqW-6aGj4R=;8(D`Oi8;DQflDHvMJX`lwTt=Yr)pC(Nzc{j*l;UGCKG2rihn!?AiM-3x$(^-Y4XY-4~T52Lzq2zpscksGGm_&&3cfk+kf|jPx z;pe|%#y2RQ|N8v@U$rF~fCh}3YjcS|MYzI&0eFnRTJAF z5$D6UebCuq!AqR^Q9A>KZ(WHR&x|?BhDBOl$A_S|AKUWTBP}9!8XnKMGZ2!#^${p* zCF90vA>Q9Dv0fk5&F}2Q|D=zz&$)d##*V(_X~qfuwAshn+|(#BELVm)$EU|>gItZ` z&a8Hld(CHrA>Q6=`<5d*yfFi*bmZiMQzd~R=9Mx{&FL;$1Gne(^?vP=idPH5_zNZF zHFf|{r81x>zu70Zs?qV+j9|m&az?JXMt2(x_EQ^8zUkMNK$o;5kD@Y#JNrv_G}n~w z5ddtzU5|e*FSt$J0@JcSzlWPNrgZ6wC>yYL1nJZU4;DK`h3mtL1#DvvXV9NsYTLoHiY>&~GWJJ83{|Ri7sm zQ^e%5GIEK71ZC^f+a~t}p$mcWgsFH`i;njO*{8}Mywl3^fM5MN5i&9yvA(DHx)u$` zbv-I@hO8*mxHa0akfJs31YOdy@;1gffX*-6h+CzQ+t&1bEi$^lJ2@WrHTR7G z#_KTEKDoF|5{KqI6Sf$t&AfcQz9{mM-Z}!>+46YxNN}GS0uWGPNJ&R(HhP~tYqA)z z4Cbty#h#aKSgUVKVVM#u7Y27J5NAb6_&@t6Urat7-14H^$R7D!InInm5!tQ^cafzf z(GYzk<(Ao7gyYqJW1;81t#i?kUhy7Qv1b8Rev(>*>~HOBT(CRH(>;JDDlpX7gZmjd z&klbJq`7Z)aEF_;L88zF|Dt^x3{mX{vyV&$mMu|?vNM&F^Yh!N$t&d_#Lk{*=Lq6>o}&L_jv=b z)2gxdw?$jHudv+3FO!0m_+FJV@q4=-P6cCETXJBV&^Q9wSeGq7;ABKHQj__KQ-*k3 zDP30Uuqgcy9-65-*aB&^zys-8S6mPuRnIoC0ftNPey#T$b1I3c*& zP3xdlnRCo<2fL1wgmoyE@#0%miynIo|1~59qiuJj1k-pKpOJY9x^=R7YUWEZpEar# z_vv;9ex9v&K(L-$&EneE1_1m%v!Z3f!_}priGfBv4uOc(FA!haFbM*DX-K%j#XtFe z{KA5!%os6goPC~RdM(zJ(Dfa!1XZ=DNgun}uY9f#CDvE<-VoMC&HUhhx|;+~chhE4 zZisV&GXF=!`h8l9y6Ps7Q&&IVaY-X4&BK??Q&U@0c_{b;9OSclG~K+W6cxFHB5cN^ zp|cy&eYk5yJku3ziC`|qKSFYqVPCF3A9bj;C?Bh>>i41XqcM0Uta0g1pR_2m?AUZn z2xm2RwzznuDi%5t0CL-WTdk$29CsuuLyR432y}{giq*|8U(s=N+n2Yz^lB2jG)mH9 z5Bjoy5jdNn?`8lzUOHRavY;za5jP3?hZxKXv{taJ^$(tzX;{JmF&90GJXovQyY#Dzc=Ju|VY*apBHCGMg9(A=1$1Jz#5{x9f z^wMc}lZxm&nH4;gSvDk7H}sfr{T2<83T{Ya$8Ub>Q?F33_B#8>F4&DsSfOz~$0U}W zoVjIEsh*7!zX%Zk&9PzA$DD+l$htj6PDb!4vKo^^9y{9BU}D}NACcM55-M(DqQ7d? z@Fu^D^AT3%yfB*i8AoSZ_>FJ~oS+Ri+FY+`hL>o;<5ip#_> zHeynbQ84#hvi4ddz)Z;Z3)FJ7{(^*L;PyeSpDfGXpD9A-6WsiI=6F@3rY*zh)kmO_ zh)Q+8^1$9+f8fMwE=<%h82)cJB(khmKW=lgFu)5sG6?f)Ou1;1E>4G?2D`&W)ws$s3iq7AiXg(HfQ!`zM;ju7^fK?a$t znBcfup4k?A7s=xE`RONr%%^-D&BW{10(MF(Y2RR zAwtVd%EH^9a791^Wz^g2a(50=ZP0Bngnv~_1O7rzFV==)xqSN8v zQz^en3Z8*bmf%t>m!+%)t^i#FUfK>G=vVjdGK-%bj?yxk_S1vWvKh!8IqR9$zPr)e z>6G5%9(@P|l7Q;9q5b{4{VQ^z$UIDl(SVjWierH1D%G%92B~wpfSjHkgB;!Yr=D7mZt(D*%4|RtTvll`Vql0H z6>6FljV5QQ5ea)9bv^F69EXG)S}m7iS*fY|+t9h>wRh`Q4FsXuM+W%ugWx#acCY$R_aiC>Ig~hU{|E@bkeX{Mb^F{kY z2yeCXrd~SRp?*`%Dbfqywv(r*q-+5(r#it1p#Q!Yiz>& z(b-Iru8|Cb6OZ5iJ788rLJ4L&pR=IYHGkn>59^}4Pz#A3F-@b*N?Rn>d# z+CJdzBe`>(^fG~k+;_=I zlmBwm?pesqHmob~^^Bu4lLzO3k2~L)H#jB8ZGSE1G^_B2v>odYOjV*yv$KkQi;L1v zTe1+Bko1d70^{RBT|3jRH;=`^f!l|7NUkcmm_nE)megqC(~$^)@@6gfra{@i*0+8I ze4_D}mNZOxub*22;Jtq6-IF;b1!Y89^%agX^mQiDCnp84u*aRj^w()0DX(ekh=8je z=$UmU@LhuYUJ@Ea>4u3dO?#nT+X*ezz96kaO*L)#|=@( zP7?=CjZ^EvwamqfME!<2R8EPuu8AEXlvvR?$>t$T%4irI1{*$RBM{!gBW3>nW%uDr zA^g^db`w60WFjq23-stB<2-XgNt}*{@Xo6&ET?}f34*04tNOVr1P3*r_`s*}zY{r- zxQ>kzy-CDYn%fqee_&{*#=v`=EpI`hS*7r@xz?VI?wn4eL`sUk+kpJ1UIeB;dJ`L8 zl5eMTxUR(vBGIbJ2@}gXF~q@NWAB2)sFmJ@p8jw$i}p~a>LF5kX@CRv$?Zh8nD`cj zIX1?d$C51nzLV0=abNzla+L*Kwcoo~F}el)^XF4;Ay2BNK&t1ITa)G7+|m4%1>%K| zy$QYhiod>_)u?7M(BeoqpurzRy&A1ZkA;5qn@3MsURo0O0lJ&-IVHyt<7N_RA&UPK zX42;Ocr`}p`Hwz4{h)ADJ#P}4C>hG=nz83w*()or6o>CH&OY?+my?csJSlp*tjoqy z$k6v%XyS#^AywRU=-UUZgVbumc=*Y#kD?ZH^k7}FPx=vbsKQ?#otvJHT&O2hkPv$x@g*yPMt=Jbya+=5P;B z*jG{`M46CCSM2V%&L;YKUdT#>q2J5!ZrUpYBx%`Zow<&bG zGWsW+tx*p*k1iQ(f`GeDTG>XkPm78jZiY@I8J*lfqE1^A&KH6}3#DkG7JK0Pd%M2m zRT;~WK5m+k&*FE`9s;)PVE2A0)@v6YVgt<(EDWvd%H?BpTW(YW-KSszl|1jK5#FGEd5 z^y355UA^@doEJ^!)cmU8Lo1617TB@Rcn#DD)7Z7e$Hd_;7K{o~_Fv+zjDtpK`!P5+ z-C6rc!4aAxx`{FB12c_#k?~2tL4(R;%on4t+!G{^Skg+?O z#nB(pJpVm~{|F!r9m_ zU1oL<;tAtX3al=?U|%jiu7ab|Oj;=MB5a2v1a>*=|FzDR#RmNASQnG?@#^xi%dnt$ z-@%u#YLaLhY2pFSg%ZL721~dx4y_(6E4|CsJ%N;MB2=G7_J!Crawly5PsGA?M|nMn z&>9yhC|npj-(@`a=$!IOxBoJ>%;UYUmoe#;w<;WD7GbO#=lmXNpr_#yR6h1&q?NPj zbh6j>Ae6~fQKWvV1n~lWAN7h_pqh%-HZA8LX~-EItI>7)7}JYNG{|jRpj$;Cm0*UA z`8~6W;td&O4%zzRbTLueOR@?f>DqmHJlOlqU`r!J`?V_eTY=+;VA+Rj#roapqWgvI z_`4Nad90EJvYHLcTKHKjm`s%s;$+tv8yUX=QviLKIot>WMl%3`->W9yl*CVq*U)(> zk6DG}%qf@QXnPh(Kl@xCsvkQdCLeuc{C8iIFR`o=&Zxa!Sgd2eXQ&_nHibj3&L!YVLtAu|dD?8h6|r_1#Z@z; zmCQC6`0HM&3f)BG1m&lBUyg#dGrv}ij zuhLneAI&N?F^#9nnrw<1kdMlJ*`LhpxN46ThH#Yb1wtNCLPtCt|BNk(er_L7Gr=T& z1H6Y0mCodJ1yJgGajb+GB+3f2Mt2T5!4mL0gr1;Xb?$ zTN#ii1hMwoAQl?Y#n||^%)-C5wo7jeBtIfkNZ%&>N2I)O2(Il45vrb@dOO?0?=yMt zd6ik1UYk;`-dZ}=dM8oXy{>{SZ5ouD%Q#*Urc9d9iXQ6$S@yu!pLmzw4?3119vdNG z#)8pCML8c}Bmbn%CD45^^Tum}E-U>)3*SD}bSBZp17;%t7^)GeX06X$3K;l?$@)(# zbDg?Fq{6%8)Dc3nrgG}VY=8%9er!V&o>4X6i_GtkW+=#Gr&(Rull`>^ z&&Nl7XP;FD@CxTk3*@&B{%BvSh-EX^PfE6OhOkilMZ80$1iWLNg`vB_hf z>s!t@>&Qw~jw*o)W)f(OW}{Lf`ma(NLrpL}wE7rH`G#EA8+ts_B9+gF!df8ugQB6k^_5yhsxwuO%R@)4|5=zfdlt6UwiWi= zTb_tP+B@?u{F(GH!>lYhB-vs;{~p@zKC%lnwWkbbl+BA9!15Eb)I}pG!Fn;hKcCx~ zues{W_;UINyq$STx$}0wjNM6Kj%){*(;ZTtj5mtp#W1dF(iDZ^D-oWgy`ceh-r1ZT zYd7}y@Bb#t%qsZl%e8e}+Pk~s=?FKd~h#`xaPF7h)O8H2hxyR+-&~{7&Hd&nqh|Ggq;*Le-CQ-d?4;?t>--o~4 zEGastPWSufGKg>9aXO?fCH~wPXj} zyZhknw<~Fyg`;zI9vX32k-5NqcKzBv#AWW{CgoT1uGjeIsHmxcw==~tMbhtFxpJXO z#~y~KtT2F`cw6|Qd`@~GFfU|d3WG&kPe%;?>E@QvA^>*dVRowC#x>A#Bn zuW92|_-}5VEe-_9oV(?*Z2suWj4tZh(J~@#AlK^I)xRbQDtOn1Tq&TS6-j-41I-?< zsuhLnGTVE>JmDw!dN1v5Ymw5f1;@CN!N^KXQoRk60qA~pMu1n4hqr!RjsY5DxV#ZAOTVTFk9CCDMN(|44i~rLN*@8KwLtf(7^Vk}=Lg`Q<6seGa>U-gg!k%e9&l zzg&utAwwa2az?^fUO!j5bS6ojB6bYO+?k71$3%tM%4G|C19@m5@J5R=^r2qgT`MB; zLo$I8rk+)@bdngnwE+WQ#SE^YNtG9$MFS9_b(d_|B%S)kIm4B@7!xWO_dvHm1KPV; zrN&|FGZ?4fNx`He=r0>P#IswY!5GO8OY6TB%^1OMTr1*OD0>Fu4Tx17;#(fGBuLfZ zk_4(N(iwWoan(!s=oqTx(@SZCG%YmTrV=_QUcTt0@9QFgTVnQ`FtM169&=wR7h&~6 zVn$thXx{X#$$VWmH#7d_bZ)SO_IC{5a&_J2YKg7)0-6wI!e#gJ!asYuzW1j4>8tEQ z`l`W&CWiDm-*m@{rahTGPElVk&$ec7_QzyxUTdVDPWC$t*_;FFy~IpFi&R}#9M&?S z_@Fku@vGktLB2<)mz~!2sV+pP^vDbk?Xj7sv^FZX{6o<5X-W9k(_+g2O#Vo$1ITI7Cz* zxD?X(;jiS!@?xgfOIJGTQ4e zHqe9?R%1#;)@4HF7`|}o{e1bA$K{RR(riycm`>Lk!U)&h_NoJ=A>&dMiM%q?sk^q% zh8SqgFQHH_LpBW?Frm_ATQ)8gLMfATeBWHG!7LFks*@fIaTeLWm=_Kyv3LIX1I z(!ngZ2=Up7+ks{!S+R{hpPAmlMeqzzWAv*@DK9XCG}NiK@gb|tc(2TL&)rBBuhUAh z3ZXa|U2jF!;x%r7a$LKZv}Fiua1hD%Pb6uj>Kq?)uHsXM zW@h)VlR5_YINN3xd$GGwf#CJE$KPGP3w=mUyqclE8ZrP8uTr#gTHK8YkEBrpU7xmE z7Zoh~Cp|Wjap|SJgG4QRXfY<>@>h5k|Fl1C0Dxn9F3Ea-+n&)1+~NCH+*?X?dq;Mx zge3%a8F>ly9A>MQzyB&(^t;}mykci@Y$CBXC`DeprJaR61}9P0qPj=rH^b)}#@C8) zX7wl%dFzy9F>~+zGA(6@WJe3DsDYG>{{Pw-&aJ4b7ZC_2$hkP8trNLW6Y(EK_EEPm z$z>pnS^J_*mOhgs-ReBGq-H}{VWePL@KIGtEQU#kH zh!iGr=>l|Z4+**$n;aTSeseMB7Fh58ceI~_rXTA&vv)DC6j!hOiZal@uWR`~`-i7P zrG(MTs&T{R(>BZ6-Ke;akZIztB~tim6pIJYsXVrodZ!%7)NWdzGDP8aRLf82UL@W# zhZHxt(X!}`K!CS!E66;M;tM9@avH&iz4@|VNM{}}Oa~%y)MacWRQ^Eq{h(t=z>JjM zpHKn*4>dhEfMG%REU1ucYMr)O{&4sWMN0e&rpW5%B?tSg|0s+iuBW(y3zZdvXEG-j z4YNV@vJ0p^^fGJ525=ENNfS+yo=+oo=~ig4n!W>izxkL%)GyNT>J4kVVWWd=?QV;2 zRz`hM#01$iQ0i@F<*WTSPIk=Q)dh(1ak$gg={s#X|FTx??}n(p_N5W|vSr748HDBM( zzdR(p44-MP)-@E0JZY)wQW~YPJ`Bi*IAT8PL(4pm=IZKooC!Ve;E-C9p&42(Vb?hQ zxzd|gd9QSsUi;prEaD8scY#S3tIoHfi?NlUl>P@1c~@Q2ooP6SIn~;u()Cv{CfxQg z#%-v3#an~c55srIEm0J^LyyE2dcnCVUilVA)V-H~bv`X2GCp#MDvl5Qi$5K5`Qx!( zTW~M8Xz@(8D9;jN(QlnqUz75$z@=i!9*fQY)I0?@xCABX6VAC2#`rL8_K(OiS96T! zR>qa>N2k?i#j#{p>BJXPpcFN)`k&h=x2FX^DsAp%Fim5tAzUr-wVf`{tLzt-wZG8v z51V&5`&m=n^wk^;L$3frN;}s&-RkZ8lgn{Txn8xhOPQ}VxWM1F?E*qB+q1I#ENaX~ zJTju_dNMoOyE=3I_XmoBwsv1*JSeH;RFiTQ6)|8s+ewKx1d=3qm!(0j7r9>^HGcc^ z*D>phMqqSwab&@{l{Ak>(SsRRo4Mwc7g*h=v7N{ai8>9;)pmx*(?blak|3mDo}{v( zwaRm0Jqn5kTmQ^M%IQIKMulCvd{2AZvtBN)JD@ib^XK%I>*t=3hhR+Ku=l$OpuINU zmF&t#zaQ4%Rf{LoBAV>f=?S?Bom$n~Cs_V&6uUf-^@G4Ra-YLapT`d=@&wXkbjg~z zw@;*eBGeM*A$jG4S%U8CIcVV=&@*bS?D4)srmp0ZF*Aa7DNZHo=5lwgS75FMnB%wj zw_6QVZ&#{Q#b%X6L_y{C(`OAy{nJ&(*>n%#Bl;o`tSBOX`_uz%A1L?>u7XPf=5hc7 zx}nbx&M(@KbnO{TK;X-^a$t?R^e^Ntf4?7QWkuJ^U)VBzL&aM4J*~*}!KvC-J7WjV zk#b-w)D;>edCqgEC8Z30K{4h^${*m0O9s&tGcS*cGYnAso0#mNGmo}bl7 z-x&e(4F3)9Ed{B_m$N8vO;}eLcht>JT0B3aBfZZp6W7f~YO6Oc!uo$`@7R>glVlx# zU0x-{MmPmgS|A(4{kVOjMK~#fd7>{_H=Gn^;b#5TkO|PVG$}5@om2j1-A{aB}aD*GSn#LyuP zdt%kdQODB%yZq4c`RB=5SMB8I^r=TykH+!yEUh8O{-PELMRjRAR)u$B$-+>%2*fK#C zVZ1l+n1Y&(-kN{Bb*uB)1YtrKSQl8B9{p+;pKY-pn$cNM>@`mo-ykYwdww6Wnj&q! z%oRH=u($4*+KPI5VI$CM{;h4gcUW9W9<#Y_W}TGO*a1NXRdj2oT_a&Er!V5YodQD@Dyke#=mQ2Xhs5%vj)G;bhFiN!HCYk|sgTn+-J z3~hV5=4#@FB&#nlNf3h{+_|)`YSBRxMdkM$&KB42h9cB1ST@?TXLo0@qfP@1;)5m?WbJ9P)^iSMQfMJg+i^jN!&m*?Ot%Kn zyE3Xi#mDsZfM}MIgp6!ney?(U3|S3d6W%}lBAmk^oxb6JxKP22C>BE^bU-;O9#mC# zG-}yw$NgZ4o!i9oMTY+WaG?{2e<7mA1>#l(xM~d~w~E|cTYcyGk+w50*>pzL$m<4I z%HRgd`%6PRPx5>{#Ow2W)=7!UJP&SWLlA6dHeFmB05s3-&#HWHWytV&kI5%p?xh)B)u4pj_T9k?};V*1=V2scn&69gud#S z4l$1S(~zkvNg=q1s}oO%Y{m8Nd68ATcx|DNZP9`ULRb2ff4^j=OPk;|g1`mmI`3A( zQup>9r%T&fZrzT(+gs1$_eX5`(^1!d6xX8CCzv1!Y27${_~K|@rC7_M(1Q5l`Puh1 zjrh&JNTpndjByRnEUI>RNd5JkEM9{%${o6C`#AlF&>{783Vx4CpgiCqo%9~fW0tn6 zqPQoZ5{82QeVuGNzzv`iS*UaU_CEiPI#(x=-r-N4T28L}K~1Q9gM=1)>rYu&ur{U|jE>e(HuOo=b(*i8VNzdY$~g7#b67v=`NLV{^*cFy>g)IcibwUmWroTym~c(gi1JYyxQHl*ekn zG6{=kF;l&NNlmB8`Cav7sOQ>Dc}R)j-j-Kdgy$LHpACjLexkoYbA<7*-^X9p;#B6$2Ak^ z<|AIiKDL#cl6!T{KP-$>E$+7H^-8I~#U$qA*?K;Ew0BPbv959RHgTm?E6r@1 zz%8{C?Rae{9?lN@{RsViiQ7=2BqP6_qWN+qDI4#u@ZE})*|@lJv)PJmJO6U`@<_ur zb+=IO&Uzw;It{5hkcrL%%=6%TQsa}D*Gu9GYZGbfgq36;q>3Is$G(GBQvN+{U*m&2 zQQyS1)=pa100M9P(ZtO^IU(Z*x>AL54SNqB+~DW@ak<4o0X)@gx|z0}=o`==nz>!7 zoQ~_Uw^c0V6&1IZW?MMaq@x^JFLhM~Y;JK+WDlM~bg}t~$lWpTVJD2!GEr59$QZ={ zn>!B@u-zEOY)Davs3UXn(ws}Ax6YT-siF7UA?PPLSG7v_xDD_HZ-Gi%`~|==3v=sV zmbOkDp|9cap(&*Llnt|8`~IExieT^$s<+9OkpgpY6(8J8_vBHHp*U6Rp*5DH_YRqc zZ|3tzDO+Zb&rGLQjXBcRpv*GR*vMlVaW*7-)7-)20Cvf5a9CzAYt4l1mL}&I^ zJh6BGQ21dJ7~;Ogiq9P>%vDVOEwb#15%_rGd)s^eKZ>h0m(;{pNdQac^hx{V?ur?- z1tw*sA9a6q^?1|oIp(!`dC^tUNA_4bM`r_jTi$yA+VN8VG|yRs;nv>E4$P0ijBEqn z8o-s}^`*I_?5H!p<9KmzS;~|Um$pHOOTk#@VWpdI2Gdg9IRikyLqv_lm3}_4B-2N5 zbemmN;HURmZm%_Ih*aTL6IY;IH&$*T_TgGoA<71|#SoNxpTu?_H)Gh1_Yo)fF8A%c zm3K!g`~y{6T-t?QZ;W}pri84%{ZRxm?FjMvf_Wjk2TLvH75B>Zb)XB_r7@4G>=}!$ zmhCCIO9|Kp-nkvw(LR+kdB@VRhHo<36#j%%=!G+)F=;R~gt1NC;`--7yU(0z^Stu%~DT2CgeJFHY8UH4)wMD+lESMvL&?ofas593v zMlZydAJQi!A@6fpQ4Q^hjc4NP8SUZH%2y$#5zXCrf8DV(gZ0i^wJ0{L0HXu@o@KGaBBm%gE010;qY&+T&?2 zPnBN2he^P{{2a%zre7LezD#@GNUdXfegBOmeul}wnVD3flE$H1JK?%MwD~XJPQKnL zn>|{(^FbvHi-mRwT}~u)yN58_x+w}CL;*<*8R#NkWv!9lCk(xc|MwD0MbXrE{2oTa z_}k6oplwSr?$=fh?)t~i^Hwy=4p+zm^hKoMO^`pmaeW=f3tPd@9HmfY0^was>%0>A#r3$oPEt`p%{8YKDo@V zk)pKTryrd%puc!Jw|?R6|G3a@GBH0*e0^$IX~9t(HQPP5+`iRdXh}r=byALV>O%GR zT1cUtXnBf%v6#ZGNby*i?(m&rQO8^wZ;GoWvv3plOVzLFdoffp&O<6Xj8`75HeOu+ zG4vV1l)!iAS5Q5Re2v%IIWI`6Y+2^bg3BST(hEJFj8LT=GggiPC6UNw;OZMkfRO@# zq|RVz3@%!}SEE+nfzgE9;d^dEBiW`Ug6{7LIjYY}_GgGLVJxres}=|7d?q@b?0g3< zr0i_T-B{~~GCDd@>4=pCC*a(wT-#Ni)1AK847)=sE^XsuVJTN1&lRXaE7>W9Hs$_M zp1$}yx$W9~bn&C>lv|IR%>8YSy1TWFMhdDdDur(6Oqrc}E^Ywl_ljwj#~eFn?i? z(+#4}yV`EP642mg8qc%nKgfJ6pMS9begm@GKpi~^JQb8?MK*Q2m_+{nLRlX za;V=jJ!jH)AX~+*^X|D(WeBnqvg||jn#Mw1sHHhnFIA_G_m_u->OM1Ixl14F@pJ4K z1lBk`BwDs$g}Hv7q}-GZeaG>GwX$-josz5-dvZdt2z%eutIYaC@j~=J3Qo{I({^5S zlRI0Do2TD;NpZ)%MUa#&#u(cbEbo^sWL@8E?EEvMr33nSY3{tkTN*HdnBXw^{qg^Hr zM-#8Ko4!`39Ud}$Xu><@LE0Ho=b7o`uh?q$&b?NPn)J%h=J^p}#1aPL-XZ;?XP}v& z%Wks~3pNWUC3XHN=yRs^ZR}J*SZ%lfvJy{ivj4TEOESQZRPehS8RIM z*jT>(DAyYu`l}qNA2~c(w*6+%#nGT*8g0V9#n-uJZte@Cy5+y#!U=Ytl4E{2q(1!K zW8(3PWP$6UbNBP;vzYqS9$G3&t$VBB*-f$Ecp7)?|J(-84M2W3&1*(Smj8Ly%V*f2 zty}7~8z$VNZq<_|@wA}$iFE(f)vtp}Z*m)|&fkQZl`OOMDxtl3#}^6JC1sXr626gw zC6(uX24lVDQ&yhNMkW47ajUk|;@X!tBiI?O>p*cu?W;U{{{<-uaDf{qp6X5{lw?@v z?7n&_k-YiLtIWGMhEi!rGu1uWMm)fWe6;v82s(3;wY7$4FJEkL279gK$vb+_7GmZ@ z`ZV|)+=HD2r+0U|r}-+gF=UL)Q!p(Yh=oGF&Fj3j?DDE+*X zj9%%}V1*g#5^`!>BgzN-LKMZR-bGdaF49mQB|#A|Fca5y04#MtI`CifLW!Pz_CvO( z%*s3reZ$6C)9MM=Kz}g?TISck`_; zR<1u3@qg}P#bnNE&-<|roB^8QwurxivzKCcEY+eB!W>_@Ymf8?n0))(O% z(kx(lbj_P=M68cJPGL7e0VR}YXZ&NmA4&mBdBs*lkvBlh3~alV!{wn}rK1s{aoY7I z3qLYtvLAM8?|jJ-=x(yu8<00?C&Y1{*I|fjLDU^jEq+*}83=G8Tt?BC`G)$dzw~6l zbR%`wGyt|Ed#aEoz$qaqC4-X^K65?5hZrm?Ko3l z8{REhMT=AKpeFs`&9}@na1Wt$u!x7SUWDMqW_kq(^}F7aC_RmcW;JiNU++2x>fW=q z34P0Yj`pQG1)pp?rNz;YSZimE_4)NrM7}C0Uhmk@&@N@^se{;E!H|h9D{=sSbcF+p zoc)OiQ2js^oe>@t;{{U~lm|=qpR4)X>v?-lkJ)_=yir>lM_Kg2t1`_XCyM1y%gW8q zGj+Qz=j??Wa#|I#Q{`YW$)UsZ1%$5Hv6v1h!^YzzWqEgR$P&E>RNNaXgX+qiJ%pl! zG6(xmKZvy%_{oN3{+s)zCUdvjH~Uip>)$G|4yy@U}twCD?tRzP@gtI82L#k*@h{~{}n{uJCNJTuV^K>lH^Ea zGA0b5zjz0phbPnt+^4FheR}%6Dv}*qbn7dDvB|3j(x6{8rowF(XZnGs82&qgqE_ST zHkPf02n>VBf_ZAFnhJ;cVfJ*fqxXcmT6NcFoCM1^vPG?k-zD2!fzEMj+YwHbtYU3e z05BdYvE)=RR!+5&~d-bmVTt6)t<++k1e< z`_IKP(>hAb)|;)C%jy;n8$0G^KSte%6t*Y1>CD!0P0_yUxW-#%YNw%|owC})HTs#X z-$Z11e}j;qnUo=PBUwh*7Z9*rES&&5YR4<|U)EM{0J3BCUyME{ z=T(jK%^gERpADfdA778!UJQIV{|Vq@SKsCzC6H@Of|(4lD?$M|Qg!zVs}&F0q=}Yh zCg*5-dwZvgcxlzBfC>^;gIUhmEz7_$q~aItW|u2aRsO|F^yFObX@?4~$0JPQ`R+_t z0Kq+F$uhe1rP{CG{-wz+{Q4p@{ux}<&Th~xt@ZEqu zc`)c_=`b?>dM3v=0f8gLe*C4{ub^VaEi^dzXEdF$u$UzXXCXWfKmQrqRSJ;jf?1h zy9&g$Qm5wgn+`kfFNwwV_Hf#|M}lTR(9!EYF8Rhe3%3RzH$A-hE#mghrRks&q4dukEML+{3z1&kt9Ysq zsyQQ~^pHZ{N`e4d$U<$=o&B2HN!l+$*=g z->^B5I(H|3Ds%A$y2A)Hk%6;cB+W{am)wEpJ&16s*N5eW5(R6p5+>s)o1h0 zk}QkHQuh}_WC88=z;Ex?$wCN6j zMMQ}gG8p{xAHR8?qj-`7hv2*>aW^Aes~bEK=5bD^9*7=!E$f`MjZHn7#6Cx!^qpIKk`Qt{mOM<{qnEi3=A zL=p=YrPH3x)gx}|HTqb+XDDySRl%)@BcvwFqD$>WS!oIOE85CHbCL@<82fpZFIFww z+uvCjF&Dg&S#7@*Pq(=g#lp-ZAbW77PZ$WB=ObFGd#a2ouf^_^vhums`^>DcD9={f zFX;Q1y9uL=Cvvthktk%&##~zWojxE8xpk70_tbX?ay<=hcCimnMcVZ9v$9waB-7$z zx;i25Wz<$z5>644;R8jt^4Dfl^Ia;2_)0m1!{7Li8wEJsM8kP~RwbSK%m^DFLuwqH zn;V?Qyb%(9|J<*}3fy_gLYnz5@^d{Z*I6>fk5x=_D&`vZGTGTJDgtbx8~hg&e3uZ? z&!GF1;8e2~uD7TsRj)oPR^ojp%ZhWTai*J*R2jaOB49qb=K9X*w?VCp9w3ft*SHGH z{f<(no%Pypp5L6=vw!e3>Pd!EC0e@v4_hgC+sZ5Ko4@^M=gb&CjPj_#{OtG!|(^>jZM+#JBIIi}xq zwM|c!*#p9LlE7AYN_{!ee5d8>KUrFMUwU*NmcXAD=tVi08&*D8=o6TlERd@GgLBNk zTad__@*hQ#K#$De-9z#q@DnOGIL&it5B}#9z%#^pQTV3+#dDBYf_xcbA5;@lw_;*s zq!EAlfXJVCH}%x=%?qk$;;ciXX~syYQX-|zoGNA6pI)}SQ6rS?y_d!^r96BW;-5)l zL;+2rac(7M3;dLg-s`&7*BcE(Egs{OWXH8Xk&Fv}j4E|6YIqu(bB#_v8a9|6(MKCd z8RvTe=1x*7HEzi}JSAJzN^w9(eJ4?0+iC8!xY)=p4MKc%#(%At?%y_QyT3W2&(fKm z98^Q{v6unC`eu1v#@BRA+k~h?&)~C7gxr27uIZzC<^jak*Cl)2=)$ld0Yx9(@@-ZXyDD zUI?S4-77jbjyWOvOr^ z-)8t}B3KZlwrv!S>$*g&LDlFsp8p1aI+zA7jXReDd0UaffW0d$HM$bxp63~yMs-E# z`78$AxJ&i{TKTg*r8284F1(%3_6 z*)n3(F+g0s2GyPgr^f;5(|H)b#iSfbD4e?kmFFNueNkOme~$E7^Xb34irIY(`Fk(4 z&aCv}z>Oy$`9j+r=7N*YtRyS76aGyjig2%%yg7A4?=M-0_GyeKaXNizsMwD*0+hjHw!I%Gb>sa-q2sIKf zi*e$dY@)k${Z$9lGz|{?rUvJ3sZgj5DfTo{t%XQk=~@1+`?>B@asI*FwI%G0X3{$; zWX<)lcaJW2Z%ewtpUyOMk{^4^opbzd(C<(3CdZmCEJnoRVuq#k%62cHn0>k2me0F2 zBYqqEK0#%F@!^M|3zF?E$eyGkwYY(^%;oY<8FteS0aKcFN9#f&-C=*v6}S<@`b3eO zy`=myXTHcr!Bzb|V=QuQ)?+4J_C-pzt zfVU#KK5%#GUz%g~s~OI$18VO1-?Ma6L;;<%(#~fLeUfQTQ5E9y-6LrP{GUjpk1IRb z-upE(z@U6)?f()2{znUFD;c0#L^Rt-ShKzN5%^jil&XSKzmOw*&>*T{00Qpv_5INMUs5D&5p=x!cc&X_9e4oz{$9e{hVaEA|+&@WF4Q=dNc8#;YW>ASN+-TkUirDfl-$GQLCIM*5+ zFEl2UJkatZ->6D_cyVj+bk3?8?2!r1X?9l?3MI;qU>x7+myApa4O7L^HpGi*awt)_ zeHk8*j+d*yih@zYTH;ngq&H5qEPGxTX1S$1`oyBF*N;dgKBcs>qY3tLx{z^-`NLn16KS~;VSNLiJlmU6qSMA4VuxO+i3`Cc89x*0hBTAFX~ygpAFj>R z(h1xQ&Ma#4yz$aakyRwQ^O}4*&hPUW&i0sL>Uuw+?`zQZ!?AsRFRqMY0B{%O9NOIW zS-I8VHV9c;5bC%KQK?xe=_$(3*I;h$iG55j3Kxa=-O3Sy{LCCaoe-fj8J(-3R(^r( zv?_zq8WbHm1YjxXT_+hHvWdIp7%(HG;L!n(CoA!uFr@xoF{gMzM=y~Zh7D=`u>>K}r(^jmcfW<#bl`K8i-O#A- zVssi)x2d-eyzG9?Wx_4y-K>TI@wwF&)mvvkB)uXXb3YYP5Q^Ull7hl(R<^GMJz7X) z8TMA%L>;Ncua_=SnV zWTmmqMn`1(*~;EOo`&B8la?3x$@gZLb34ir^x_@+vo*`jmIULstNG6H5T6<+2M35> zgRq?~yFkk$YS_`f-G3Cfx%h`i9Y%cP zz-q&j!MpcbDSShfXi~+?T1ocM&v5OAU!B@Gn9tqxK2<_Rzp3)(hSIj0vbA3bQeWfn zsK=$c(J%X{5En!wsNJuzX~SdAf598Ga8EkP+L?*nJQ-%tD;^$_ax0$l%O1_6P}K{y zYfxDJQv!89;m|Pc$$MZuC;Re!T1y15u1#a>Wd` z9;izN_8Q;B3D=Y78`|G~Jf!|UJV8hfpCaLw$}b?Oa_8;Y&s?|bOPZ{WmK8j56N9%; zW~Bwq3C^)_)*6_Gbq_kI(0ao1&FT=u2YT;%nbD`cXCub`daKc|702~4Bu$#vUO~Lp zQ8%BAooD2%Dy^Pu0}r~~a+5VCN|G;Gu5C^VnSMeb8M-M6hMm!EcJq)#42j+yh^+%s z+BuhfxNLyuKnS&%p1`lhi7o@`7Zt1camG_Hk%A~2rg6FIep86`_8p zsI?PRWn8XOXRkdxaM%^n7$Lpjj-1b5JE>eXQUFZq(2&ZS?ZyW8vWey6T8&s6EJM#v`EQjb*qQrj-BSu_hTW&?xC{eK^&Aqk&K zl|AI9=d5>Kq1yL5BqK+{RvZ^h^rku=;F#iX+P&gcFqGYQ;fkSCe>)$UwUTru5_{zJ zN>5HV_5jO%BY8Ahn9w#QZ5!kp$zNl9*>?Y3P^*v&hmAR_lam}}iy^80n`xSYrz z4N`IDl#dRrUvM0pg|~WWK$?!EqB;5Z z`LF#P0b`Kx^4Xg&6%$Z`q@R^C9w5C*2ZKV^ZS*J z#tXmL3lha-FUl$JD8h)%JO#d+sS#C+79Cj#x6R6mT8E>rOId%WHa3!wSBoS#qlHHUMK;w{6NmREio*jABsHejpBm9ZbF;|< z*O68l{fe9#n^hHXB~nz06N$+Tea!2p-7f*J2~qtDQ1HUPchjPX@<_xyc&EPH5c0z3 z-YZk0qK%d7o%bQUJFl6lcHf$;GbHlt8GAy@L4 zbFlu}jx(J{G0R^`(D7i3Z2OY(0~;$kyWsblH2%>?BIsH$Oym15k(xnF(&@zO{Tb>~7)Q%f4Tu4Q)7wnc9#VY6*9CNj z5Dsk!`}-iDTab_jgO1g6`lbgK1wKok1OivRc|-TY{8l6Am}1ap>w~CVaB?LBWf0}u zVw{LRh#k1?oNR!ymoBh0wTdena*hzW7=FVn!E^LPlY!k(@KF!Ll$Qr5G*$s;7oP;?Fo`&svGBB_7oDmZZWz*cbL;+oG<*bWMoPNg!Uq9sFaZgjI$$L!O51NC1TLma*talg3UKocwE~1M={yxPtLG?wTb-GZm@~P#nuv8S1 zF!-4$Zrn06D)oN4wV?Fb-}&XC$ShcHA0N|nr!zxEN{xrYVraIde%PNO&T->e(=aO| zk?)4#c&OT~ppw6@7Ed{@C(EW5tOjgH(M^$BR)N5sN17XT=}GRpw;Kb(Az{&gI9<%Z zI`N%r#av7MDnv~6xcY_oq{9x@%%^0%W77VkSIz!QFY@zAGJD0MJ%$vvx%=P)`%gg^ zhSXV|2$nVEL?5q$O-t%p(7(6zUw+oc*Ot|feEv$Uqua2VH$fbF-P3Ti`|yB?6SE`Z zjM4SuOq?v~ZI7jheWCe%Pw@zW@L4Me_x%L%(;;> zPh|*R%)HP5a28;_?Z?i?MBKY1BS*FC2GZzAy5C*akQ)sFk)>9ljF^BQ;ukbX7q|pr z=uOa=jZ<8I?n7`b+m2*?j$_EzB|0ET^#$Lf<~P7g^X&{(L)bg)2fM}BmY(w-f=As# zvR-kA_~rBO?GN9fMR z&(ixZK69L_+vm^#1*M5Uy-O=oCqSj0`gTz9e?zp+azFm>8 z5@V#`eMD0kHb`{t?Fx88xX3|PK_3iz!D4VRw|%U3GmCoS*3BkXy_9`oPxyqU$hOQ7 zK0WW|Q>%2`OU3Q$;sxHDN;fJg%MB`7Y1qgoVa~_r6A7#8d_PH%&D%D!MhiL*lQy#K zd%}g>BCO7q(!O=`5+XZFVO7YQ;lFje@VII0@<|ihawpHa-o@fEe?Jzf(c5!_WMV;V z!t5wGyM8r0J#BKKAinVpNS{*^H~gl-usWm4R0Vqz0THlu{@ntR89N$OtD#>zjjmI* z!>jD_o1kM01+BgO8x1IR-#z2t`=7646OA+v$Q28--&fz7tc)w)t-Ln&bML5=+o;aI zMs0u2x*nB-yb$O!A+nfEGg~RYJWG~882cg4qDLtY1QwXXEYOyaCM zW|}9|w2XYW_02B-P!?-h$}!QbIK$ARy0ajA*t+ZseF4Fe_pm-5o{%kYF$Y}KWv$EH zP~6dQH&)`7oXKhTyN!~)2gxqdd1Q970yePStOi&?L`sK>e;HXUhYl}*#(tBJOE6Mkw}G_XaG0T8PZ=wQ59Z-+->mH*IT7*sDz+%1UWwR=Uj|xUl|41todi7*Cpmv}V$opO3pz&_X*3(I zc@^aRINq#Wv(=z)_MuoNwI48X=&IPppH^mz3+s(juYcz$`nWlrnD#xAjwqeb%xiq8 zhd#=OI;!i~-RmyI2XmOqds#1qs`>p2s*3zSJiT>TlkXq5kD?+{qJs30?vRE7q7nmP zQX@vFfC!^=G=g+VE2+{kkQk%8ksKw>M&p2yBR{`=pWpF3f877?IPM+ybzSf4^*T>R ze`O-#I=z=vyLlQiV{JXS-X5FdKF^CPIz~K|WIaa`4|q4~TrFuFxitm>vna1gy=d5{ z+Dtz=i{agcsRO66Qn+yz%ADiiP$HJWZ|f!@SF>f8rmCkG|7TZ1kifivf}a{UCh%bjDQQ zR{yyCgT_MZcUtXbn0z z>tK6AEFNH(oAw`?8QU}Y@4OG;kxP=ckb7suNQKUk+a0Owq_DhYH*=9kh~oO5c027K zGz)v>gGpZX4i2gVa+VQ~Eel>lj%g3mJCaeP2j!N;@0-6l_H69KR7M9d;@cl<5|VsM zH){99bG?+TqM-n#%Nuo7fhWJ~gJAtBm9~|FA$GONHBgwRH==ec!zp{U@}WN%EqSf; zv2LOu`)ZpuI`wU=I(z8k1KX%8;Z^geJ!LjlB}?{@+b+QQB0bH7vloB@aDl%fgzy>ww62JA~bz*24-2<>ScZ*8ne3s|A+f^Fue(8_vsmNo8739!~s^z|05xH zaOOg$0@Vugz6y7JnJa%Gd*`-}M3ThFb5~t|O@bqAwLzF^zL!)#1jB8`@WnYUIyU6I zV>7o=7Q0mE4_;BG*-|1wi?UDa9qwR+hS>JMD-}&A+h^E|TGVZCSNuofW3WBMte3U> zY7ta?WYQoxe}-T#-ft7|^&vl)C)xxoD5ok;_{}|^2aS)hgvQGazrT_m1M*@3kw(%M z&l)aya!+N_|EN7fm5GdrsYxW~7O;^Yh~!oh9_vp(?TOHAscI0v&e3=sBaa1AwTFgV zxXSH3VGm-XF>SnumdEH^g_F0)0=^Gv8L+rOI-C3cN21X&jNumu98Jq0 zE}nUNO@|`T^A@(sz)2w@U3vpJ>Z@It|L&+_de)5QyNVUkIK=n13NT)Pn2#Ve9KU+& z;i%PZ8nC7dz-1Q)qVl@G3Y0_Fh>d??peyZYcdNF4M!I4v$V| zg7o`FYD$4}Y31gh%#YlV^eGLw%_-KHbm6qd7G|T#6zadJ zxs0_(FZ`^>b4mF?J;Vb*XEJM-9)38G4IIc&19~cgk=6viE+z{E9ts{yx^@(<;7O$F z#g+cl&E&l~KivepqUpY7Lu<^i4YFz%g!6}dpNcwnA7J%!H~h2kF4<0*pk(c`=l*3> z3@O2fHfnMb7O4=#xYlJ$?JUM8VCm9B5S+vT%X3EdLj!TA;RO4c24aiO^4`Dq=w$ix z|42+hKwsh%|71oGyB|Id_tU8%j>og`G4m z;L+U3aDLLfpIjg{Zzxk&cV9QHMsl%Hm8Wy+Y{&!b{3qoD(NUQWFN?>MH{3)fv!GW1 z2mGUnwc6bKXXHlPJGW2nIFGaO9YPZVJJsw@1;xAxGamuW6ge!TwWM+Y5u6WKgQM9Al{;rGGd|&OV36=T7=L} zw$YDORFh-%n{wB5BOd#5OEP|HQGjM#&N97`$>DKC<$%Q^k;xf2#9b6FqQqegwWn>` zmM}Y)_?GgN7RCG-%dnCpN5W#b4A=@J|BdIEC71_|QMQ-;=~d&5U8~|HnsRmhmD4O) zI#y3+nzu9Da_v;_=X>nw{4Xe(d#`U*SohyF!Ay&W8XjQ^fm&KHVCEt0P9CY<11dS_sD1uh`G9oom`KsH^P`TMwXq!^TXd zm(Q&e5^H{9PrI4yRy}TyLL%x;C7Wpq3HN9so}!*6p-u;a7DXBQ8urbI%xhMPj+*ex|V#^p)cGuILOw$MN}3qnL^V{erm1_skD7_RoSdm{No zZ15rJ?OW&JU_GLwceHaq91oNCswvT~P^Xzi?=|6;)PJy@|I#&B_t?X2Rzh3a@;~L{ z4N_&O|9AYuOnRV%40CQ0jQmbaa@fY2SpnS&Fj%kkMBcYFg`r1^KFVv8xr~oHx66jv zf`4gozh5WYKk4~M@auFXL|_ziBa#haqO~;wn$WmGi4YCoJ8@zkHk70H_{l?_bZM~L8TD&{}<|S31nefpjL$AU`u5SU}uj7I& zLU;v*mNIBvd{CoNv{xq&0WMR&^%tA)H?qM@z4v0#vLD~Gu~E>tc_h{m;g64(FY-N1TNz0yTEKkpK{=#vfy&nNoC8kfLpEidZ+n{Y@ zYu)@iRXD2jWJDjlIN_DUvXXT!TD4y&N1Q}T2}^M|rqI)Cy&>r01=jy2xR4h zoyNuK>M8_EkYXrgF>s3kmtgwmz&5m54zVM@lv`|nmf=xX*9JqvHRgGy?~f<_-EGjo z0%bUZq4qipbI|q8nTsu39f_aXlc%ungA+Bi$zHC}_VR+Jr_SDP%J;WTd82Q*=C>~j zhW^?)v-Dy%cpn@Tze1*0DV$P1R96&8L;fK6Y2mHC%6wdd-ieTW%>FDCs^~&;T+z3h z{uwCcQvj0>+o*e&Hb(oPX}y5`@?BtR%u2!?D0~JZY5Le+(9xkIrhgCK_a^A#S|FfO zKsTluHHsP6vGA&$W*u^)0EM5B{0MU}PyMozvvo_cT1QN9R7r%O*3~(8(whz| zmg;sqw{ac^9-Q%fANcWAhza0Vvl6GZ1 z=9i;^Z%|Pscq+c>E}j(b`*V6`!wpB=!slr?n2j@+e@DgZM0-7-AlI9BiV_B}SKSZ4 zNy$BIaKg^|LIMI>p8C25s&D$l`iOgS!u&?T-*i>!e)c}mRVDeq51qSeT|@JfBd)w% zqW@B#m&EVJP^V%mdDO8CI&2@uHTWM1M|^&cGQwQWFgB&QN!xK3jhE?CODR(^YU7^5 zwNz9(D>wu^#XoH~jff!T>fFIoqS>37dX1BMFIH9<9N*G78Dv4+uVkj!iQ90Dww6Ks z>-v5J^$tJ;VXBP@@OZ(WY0P>`cY19nJ&xgP*13{ug*b5>JBoA@AHWW^-GAkN{oP|u zO_LZO%`xE&Q966;cK?L#5b64@*`pLptN;CIU=istZ{%G!vM4#fc}cDNiaa>w=L1Iz zJySJEiXnp8T|vsvd=cTdwSSKw+Ox!qK9N2+naZ!bc(>?LGx)Z*XzweD+z8EEc{U{C zpr~E`rm50m&UD8WS}V5yJrp;EkD1j5)I6K6|vU>_d=dXErQh=6>SI3wWNo@*h01+iJz8jH)jKb~Ku@1}E_ z(0wi$^u#&9NSm%XB7tIY>FPzz82gkSMP|crv)*94=r{LT>%_?ws}inT($eeBu7r?(T5LULDuaco*{HQQt^oLOG#s%2GSUUffKOEAX9A1@$WzKNbMK z%tA7zds@C*-#(XnEY!SX><0{ z5@h0{<|iR_McBJ*&NF|m^@jy4@^w_i9XExGK+i8Zck!OfArAhK8AzXM1Ld!mP`Ia1 z`A^sWJ63Y6gp-86jD)x(*CIlK)+BBtT0B8XqE=)fR%Q|C%hv2!F(FDt=p0?;j_c`} z)n;}-7vCHG(_Qn<*E)lBTXlQ82K8O{6n=4FHs{E@uL@e6GK--0Pa(Q>ywX*Y(ciZ$oxC=)Y#BRxU0h+Sh2OEluZ&tIkF{Wt zYtakk6}S3dg{T063x8o2@@oS#E<8C5iSXsTm)e>l1D8uX$c$v?)ZMxghZfhL6F>tZ zoxhG?k29_*0@?8QXA--9eSWwjkLi=jF(%{}*Qs66PoX88MMSJs&j1b5+3hQp_Bx}-Z90eLE z@GFr-w1Sbp6wJ99;c`3#WBHm|qS1s7ty zL|e` zK|#pDe!NlVg+&ctUH!P|>T~E~A3U}!q&<(vTQH=a{q`-{Q8HS1n;Aa7(%I>vF1z%8 z4zNpdth#qQo{{CMJl});tDin?GbHChZJnPF_VtnBbQOpSbL7%xd(I z=qb!E*i=-JB?SfuGQVuWL(&n8U3n_*?qZPxynh?q@+zLnDTn(em`;E*bjU@!%zYK( zHN_0D8zE)oD20H00(Er_tXB~}^yqx_fdUs8R!j<7Yaw_rjozT%G zQltaCvO9-Mi5E5Lc_*#)aUXno@o7W{B$Dp$V1v#1&AH9f4zdUI+) zRH4J0G|8`91Y;6}WQ}&?r;>g0u3kDnAnqwgGDT0dCyBAJ^R9Pfb>w91?(NEPGJS!P zGtHnt#}ng<;eWang!Q=8ag95VXxQI{ChrIaZg#VYH4;1v?NHK3JeiKS%O9*%l6*+E z7-T#4-42>W^2S%Rq^jEhg3>cah8NX#15#T&8pygvBU*{d6X8;rpv!L)sI-|-C~uw5 zMNm#i!sjbaOu|EW+S%)a_3IxE@%QRI8&mV{Ny%E(llF7N`{YhbeF2d`bGx5rD(`KJ zwLa`Yz|SaRk0zE8QS#It45+Y)iLW7H$ukH|ADN{J_e(c zPztw&!mZnAJe}DgA3qpX^0GfZ|Cs6IZ*Gg_dxvJv*fhwF=5l3`dq=LQ@sG-C_Yj^A zY5N;guuRl}IEd@y7!0n~ z4cMRu{wioEY#m-W7OOzXZjach;sSH;?n&t z!NnC+Bn2lrE#^1fmE~~c6D~he&$8LraU+fD#9?s&>o3xHkLGgBz@SragL?np9k{y zltnNuN*~BL6GxsAiKscdJ&;C7eu-l-NLK%Tsq+hp3tACY6j}W) z*`xuXuzJ>iOO2!-i?Y|2H#pG>kPbizJTm^LjakpvOEw$d@V(;SF56p*nlF>MVI=T& z69FU0`$i%7X{fbKI(#RQ{{C7v07m7oH+7e-F>8A^tmi(4hmn2bBz zHE!r+6st#2?`D%iA1ln83u;gCR)4h4#E(TrGDZRK7j-pE=i%fZ%0<9*uBT$!~8puRtDE{Z!#iIwp5 zm-wXRIVhO>VEwg#c}54!py~NKs=GDysW0h4^&YMewr8&tE!+et0<95rySGD3R`-5 zaFQ|?HuP(ulZ|`fey^gSLib!{tcZhf1yZAk&G;_8+S)BNYny3|1)ewN1Sc@HcYLh} zHIL@_{^S413TEfWF7Qj~Ez02oqS^`z=rdVw`-O?DG(^b~XgNI{nOzywUPClH=ZH-M zDLgUe0ylqVJNVT>1F^y6WDFxZ>Td$2l)Ee=ayanxCB?0|9y#Xu-1*7RjN^+cRnWV* zcqhVR5WZ(LxMHK~=-0%1uOr_TmYg=kyH8BZ(Y2YE^TKS*P3fLP1;tDM$ouXqS;Z6X zP#)>%r>tR;uIR3nD>mN#)C^;QWMv;C7cyejTMC#_6_rKWNmCyC)UdN0rP^^xXllUA z)kTg+;*9SKs=g{VUi%(P0-=TQX;y>n#-*&&v-$3ia=hy2)%TuQSsQ<&ESQ_9xnvLv*_wnE;07dL{xmX%9GJZC8Zh91~hnjVn<}fL3GQV~bAeRR(7_=&BqmNk)($CHn_ct^i4!c7 z`*bO)MSWoT1xWm1mH)hS8TJi9o)F5R(EfhxkKK$CO!iZwT0D1au420km0P0!`D%<6 z$^xdYMJ&1jg)vsbA%RBT=73RMHzJ>TTQ$`&*M3 zOi(OQ&(H>gJC_gEAs+m_aF4Y`G^%CTuW-ID4dv*$Y~_p*F6!34W4f)xjV@C4;8{$w zPLoy{ug=HaaU*r)MFVx+R{)Rgl&FXi1YxSw)#qxi9S-kunvdDC1pusIEGdiLZuDiU zitaPHc|vq91aA~`0)8-WvY;ZFCia8&;ZFZOi4HPA>g)WBGd)YCR_|-dDuzGOP`**| zN~iSn#tgf~m!n30&KqwJHbSwN%lDV;Go*gBpoI$$Z4dY8-q)mxG(Ju~*2? zKjCHF7ZUdLrVcVmT;Cp3Sc`sjpQLu}*kmY6-f$APXc66lun9=oVR&_sr`{=$^fLrv z&fAj~k@2qr3lZDVDZHUddsf;3c+v|B$mzEcnPB zb%*F^EYy!OFf#V(5@~{CNScR1o$q0O@9jJqzc{_IVrF!cP7WQoTrAV-Hd^9C;VGY{ zCn{Jlz93bW#=v*?b@o`Qsy9$y&#fXo1yIU1!_^zpIA>3kmaym4KbXJfK|s!_+I;&}kVq=H&v!po z%8D7*Xi-V}?MB}l#${sWwRG3?D`ENOVVUgSN*b%;V+TP_*Uxn3kWw|L4ca!*Au>oJOxik`FNCkPcv~u%o%s+ zhc*|!BoaTXa$Luzz!9dSQU8GE!Z$I_F6q_KS|O6IyH?4GGlT&C`uc%Em`)R{@|Bb+ z9skR4Ht=_4Z|s@#(?I9UMwFJNR^q1{0N$$vtEE8B4hzsQyB%pw*)bVHt-@K^WE$pI6)su1o+7rwLVM|=qUqoBu-DMu zna32CwA-f0+VPMdi_k_&>YeU)@v`hIrwAy`9eDW_FaeVNSF*s%crdF1#D!J1)I{Ok z-{R8>s}|wWWbv;a&H~s|`&i4Eg6IjYfcqW!qqafUSwpQHiRn?F_ZZ#Uh`0B4#e#v} zM-48qzo$5bUY}>D{>v2=blL%CdqA8K$AW}cFNiFh{9V!2t)xRLVyGt0>9*4J)~qbU zNa$kql6f#*r+rS%O>h_mYORHb=Ncx6~1tGP^9X2PS^N~UhEz9axl{G`WS z>E1zG3{V9_u`5a;KO`i69?u$$-|L!XTS^&bTJB5FVQNU$MsGHvg$u<0;0K$m*h!D9 z@mbeF;;97BQbNt^X=j~8XZcadcW<^9ZiV&%^wEl?No#H?<$KMoCsowH5KJD$B|Mom zwdtZw`B0-)l;if{>(++{mQnu1S(qcwcGAe@p8>V6k78-O$XH(}YAa(b5`$K+9T84Q zj)@LFqhy8l%{%yk9tg4-@82q>l0OG_Ez#6@#B(b_X$|5XwTjoCMsU~F6k0$R$*;aY z@|>HmzQw7iF1PTU#$iI&&0c4~AK^63s`>jTQwn<#ztRrT_Ezcl-OedZOKZ>3{}mC; z2UO;6R^rt11UXLIq>6Y~&>XA;|Ls#0--pTv1z%|qi(kFV7LARx#(-2SHBzccJdts? zl#DTth)dR~%k2KBYWIxl5pg2HT6PDfB<*~!{a$7XIA8o-QWs+qyZT$rO*`C(JU~PWdE{;kauiuv&W}ILN=IW5#HE2WD+2~gy9qM z;vU*ud)Lqh*6uAhaE>D0id!zvfAW$K`-7&`OmnG4)P_#-@v^YFM%V3&80TN&Du1q9 zxs~%M-yKTO?m-O}jDDKCJOTSbhdkcTZdvd;Gnm+U6)v8bY>2ByG4Ltq`1A(&L5kvl zw3tOsOLGZ}q%m`e($x5uS4oO5O6k3qxRjpPHlWb^R+IG3i548OorwHy)a9W@S3g>EC@m>VNKhTLPvoELL4kUuq(FP6;CR4`=@p$LESx zUGg@Sr)hZ`z=NoVWK_ZGuZ%&fZ2-`UqH?#`E4q;gk70)IPPfnB6v3R-I(l*KbR%BL zy=tEbWrp~Gxk#xv<+rhY49|*QK6N5nbc(3_5Tv;@forzUrE>J{alMz2_9^X!YZ`X~ zI?3Llq@ykwSA)ul_&F@}kwd(Qm_Xf^EMSAl{LzfwfF5!2dJ(A{#` zN4Vs>?W2_q%A22~R)g;DF7e^bmr{Q%{6~`CLnKZ=-geZl<|qQ#L?XWfS!2&NwGgwIU(~6o_lyB{cg9np6U5>s}S0LS>Pr? zjt&Hpk@GsdqO_4W z329cw_6;Awy<3T~)fgGmC!-tO_jQ(Tw96Z#kJZw*vjb*)Nx~=#S#MUr)G?uiCR~`m zI&;AQiEQd`wE*||rC)lRE;=*ku-5-bCS=9sPIXf;0;>X$wXC`?Sq+s%g5Y1v7~f+r z0eHnwpR2LyaJk(fA|FpKTqJXUTj;faMZH5RXJVgb18g;jv1`Rxv?394ydk{qX|uL= z)aPcuABz;F(_U>6LF?9~3YR-zQFSK1=bwHW%^nC87U7kRGCNK!0L>Dw?5obds&hP9 zDB^S()&1&oD!I3#+MDHjb>o{;^S09GWmnflR2sC&uxq zLBn`K^(A#q&;)S%?}IGT*t_f}#m%=?Eotoo1p_2>5;JveRyv=HC)d++(I$qXQ4_fb zOO^~;Y?ahebUX8{RQ;RIq!mkxYM|5OVt>VQLfH$vL6V&p%6-W}_$E4Bz4wJO-+6-W zSdeLn^x8_&(Y$$`*w6c&v95I7ytaGG-;1{e-MJB&=JW%^&NU!Xa+DFejW-YK9)yO~ z#X*7nf1XgrV!18=JA&}8t{WxoPj9`LXN$n5CmQTErv_8CXE zF+&Z?8@T3je}Kf66c{^+Z%goWX0Q-zwyO}aGLLW4S?lQN$A$JuP1~8y#H|wyVMQ^Z z595hyi#spK03#{sH3_XP3RnLO<(kbsiVa||3t;tIbN0X?zfY;?mg6m3e}x0*7$UE7 z=c47C*xwR>oxtLYkz2S9Vf1trvByRr-kL(%CV(;&%cCs!)>q@TW8aEFfLHa*5qk1? zy-%&8c%AQg7It+mmQq>q5K9hek5RHLj~)4mE9q&V?t2WywZ2-&D)CMSv96%eDZ$Tv z5iqVZ?c{DsoIN}n&BziX*hvX);ka#_{l3o)FPlrw26c^+!}HAW&GcgbkdsPIj2+fH z^6_Mh`(u-qw33cs&`eLk$gj3fplO*jHD)8>knW2IAR7vb+Ic-a;%v5_rL&e%*kLy(V+MYdYM;+D%ZtT0KEIU-aF2rhDmsO|Nn3-h1 zcU_B2T81@o{vbrH02tw)UU<&q6fqgf&m}1T?4t;7_et2Ytg(|*!+?$)F=CIHt-+I1 zz3>NZ1r5oK($W-JOnI}N>rd0=T{}rTp%>lUqu@8kSEU8S75-f-wYH?OJ-86?O;T4f zkraJ5U4Vuqc1_Q5Qk$#xSW#Aufhc(cff|IN8+K()`KfcT*U7#L%X)2Lwa%>e@*k`I zBe{Qqn#a{ngyZyFnbqQ%VcFfcpT~+3Wu&~p&5tqrk74P$#vElmx9kS%G*}+BW?5B$ zv2PAUiZGd40p=e4BAnqTZ_U^~hio$LU)dI)lw3W$E>-l9YGG#mr3#nY zMJl-uznY1wQibRklWuS86N)->I1hNr$IN!5t9PP1OdPGb<&UXf@D~45Nbns_1cCxE z^`v&`Uw6o5JwO=vtOm782jhr(fhE41jSua~w>hmFH~2gqM1B7X|8^dvI=3ItiWT~3 z{^id$Bo01kAeC-xQ1c}w^H)T;T%^klvju@0MC{82fm=5vR3=YE+58J_Y#l7qa!XLCcY3hG5tpI;|N(fXtV!&pCa%CZh9 z?xsKgQlR3O>y+JgAbUeLqSwCe!^0-&k}8yyoT+nGTlpkYb6D65D$&#Y!bUzThL5C@ zBpy3+J{@2>CDJ03r}OrzrtG2!sZ?d}uZ7ys}1L~z0h zNj1Sxvc|K?gb-zfEhHj>JDkdG0v1Na1ga0+kq3;@Nkr7fgjELieYDg?_e^9Y#puOX z+LTUR091*Lw}qQ$1eG6_W?>NIszw`M?+FCqlGmj zmQQ;PMMlcLmIJz6bPZOZi3$`(Blo`qGPZiT&%En3A$|eHR{t1{Pz!)yk9W~s9t}oQ=YZf@^^5+?Gj~w)Z}$EaoLtG zzB(F}(Hgp%iR0kpl1`_oHv9Pi$~XtEkn4dEoG~~U2=Cvx6d8ZU^Y<6GZ`en`73iwW za&;zNs8(2_`_za&ae)f-{$b70I^A-87KhtgHc-N*!MMLGTZ=2XR)H0}kVOAl zZvSJGT-s(&-WVzV%Dw!ThgnV3sd=^-ExADMZQq(6vcKlnEp5+9{8OFe9;;%aWw;48v#3Du(n)SX_eKuphI^@!F3DVLovIHWzBVri_$|s^& zF?JQLAjgtK{L?Y^JohFlYLiRUgl z&t-}sjAY}O(6k`mqR9u~v1IOJCEiz@q!DBM0RRGTaSBQ+Z2XhW;O??d+Bn;V-yI#$6^ zjp<)>e%jt4Iuc4uZmoQU{Un%UX{ffAZclp5UyCruT!t)}jSeIv!Ak*@{#rlna>S=Z zJ^i?wkeS*^3}3IOQX1);i*L1GWQ_lvbi^GIUw~}hC?%^b8ulIONgU0Up^A1LW!`*bIwZj~3fLmO}to3DZY!@y~bVv(#jsM>q}zYughzyOo%$ z3E_=t2rJg93|m^6Am??HpvOp@vOfM!y00YdJpVT!AIUQfITki$`D`96o4G<@6EhMB z6f`u{&$*g5-D#P3w=B4HED6FW_sID}ZD1^zhr+A0KVFcL7$N|@rnvOZNTBd_&aQP5 zh|iskTxh-NXek}D9N7#g-x1qkk`A@{fRQp`lQr`D`oqmNxeuU;!V>Y#9}z1E8FdsI zhZxTHdlUIXB3J+QBKmD>TS7We>QK-fn5k0@5$bIL zi%I6LO>XCY$oj*^jT$`^Xgi&}T9i=k&r0lLB>cPdUZ#zgU5kBxPrSX9ooXBfZ)ZpgNVB+m$YBiU0h9<{PGpf3?^cr=lv-P~PB!+XeR5s70bFG)GOCq+yOkLV@e`B~>|GVl75{s2b~#mv2lr*LwOLuw z=N5KY|9)BZJJ!leVRCLc!C%?^V59Ffass#75d4^H#eXDV_)Tu(q|s(&`pN7J&ArlI z&yTe&NxEj~Z7ogO7eV3!#C3rPu!Vm(0)?o@5BdNbH1uoR&fIr#(}e^rtTu5l7Pp7A zu@~V=>cRark#RJ#QE0=@O&>gslQfrDU8>4k+{SDBdHULfubzKGe~8N)vlhQdh6FOe zv0Za?;Z>}s>CWDYbE$C))0wMXVic_exz{RmNzeMQhCL>L`Rz==TQ7Lkd;zEPSr6{cUf%~%@58v`qb zt^Jl(XvS2D9+J3sH4w=govN@tht#3{{`zJHJ-P}iBP4)pV3+jK3ZGIRlP9G383b|> z5Z9F}WmF_Rw^cti8T<+cPZtncuq}Y@m|N)DEul2o*M6J~WTXh)%x)#RCIYN*dx8K} zy_rEJI9z=3ind8rCvWHmpPL^!~ zuA*)j;5+-T4j`!f`Ry`E-`EYcZ+%%*KV4|9?o3;T1oD`{WxAhwL;fU!<)0{AtjuVy z?z6(((5qP&f_5&7SCvgTF8{8%sv8=3(Tj272znVN@9=aC(hd-stV>eraGrl*KfuDazzU z04}It_7)0FO5!oyGGo6z)Bo_iW`CUPJ2`%mK)L9z7Jg=cf}qp%a1W1)o zWPL1!xN58BCu#jHQ$!~(+7+C9v(`|De^HXyXJwgFiQNKr~&tOv6 zL<=jIKnl=IJHjju|3~r}=Pzv&J2!tl#V`U>$BIT@DOBiG{<0f4dC5V(Ui8w{$Y#c$ z8PI9Y`=%B>B?bR!S^EaOq@ez!Wl3%6Z13cX%Cr>!Fiwsu1rjgrA7?I{pHz+WuKcrc z!$8=COh~qPYfrpE_m$8cVf7oHI{A=R$#tAOP!u5c3`Qf5;G&R8?xYE2rJd)wEpOq9 zL{bVE8$i}&3aNA^%3jPyy~>OC^7wPGOI5&Um0OAaYN*y}$suhm4Ss<|Q?u68>vlp~#7TD+?0y_C%Avn&Y5()Q$&AK%l@#PicI9X=1+8 zZKfp+x9uK8R5{Hy8`{`DtV0D8r2@K4pR*p6S>c&ZgTlO&=nns!o;vbyQ`8@Jf6gVA zXMW$VyaG=(-wm?)cmp`Vg?$-dI9k^*@=x;q;F<*5sIByDBQ5G;R-j;}(>4s69?r=d zd%(+gSX;4A_@BZlB#fy7A!o3jAp9?>jeDVG(+4`Lb)_z|3V2E=Cg|*IPGGW+H$T`2 zo&^Ec4Fl;3HTnl_-Q=Evuvgr8Bs`5HvlYV0d(eKhTTBSRn|5_s+?w*2&af#@GH-e; zPRhx7mD}4e8rCXPL)3^DPFFa-Z~8LV{DEK2ygOD}QC&G(-hW|YVraAIWGzrP%{9$7 zVdUm#RMAtd49)2puMN-u%GM)w{;$;0$2?4cDGjqKf`Y$wqWb)^-t%sjiwAkctrqKY z?0)N%H(!RGSRU);Eu)WkoAS0tk}aQJ=DcQ#HG0%dO{!KwQ8ZSe!rIYeI_(eswL~}- z2H`lN;>zFNTilbFNHG#J#8!^(+wM#i?oJi|H00Z=n6x-;{;-z|)@~lOAO>VkPNNFu z%;)RFJA0X5f5>!8{P7lCbh~c9RUja5^#m0b*DT)Wprf;(w0FLr0gi1I9+SHK$rD%9 zWkZwpbV#L7GZ`{Oy9b+JFT_`qm*ZF^abOpZ^STJY*`I)<=|6hz^ydQZ^9ZQr^U;iVXdw5so< zT}(8MD*f$6PZr)~oWsttvH;!i*iAAhYh-kos*Oh~qNuUr9BD2+4lCY|YI|&rkHs%6 z`B-w?eI|Bq+*}Qbx72JU=ob-8=ZVD%M7yv&R&<{*B^vE~aNN>xQ1|_AF?`aj{soho zGCWC6PSXEX!YXnm+~d0kLRO^giBChW51Wj2Wfel9|h&tH`9<)n*n_xe%m{ovumJvsXA_H8{onKav@`RJ?L;3?@zobEC^tJDf%lEJ#dK zD5cxtna~C~olA$^k}*GWAZTyCU=(sZ*qRmD#qr+p^1 zpNvK!c}1&WyiAW@oMk5@5b#Yc@h`vXTe0>tvL)mV7aZLsUlbv^tH}E%d>ps(|1ahh z+E+G(W&}>{2~kOev>y%#bhQLI#krMiD3p@lU!e15pw>sCc)3z~?N zQ@HDUM2sS*ylJo9v`^^i9N7oX@LF7{Zkx*_g3AQ%j*}mV) zvlUXZOcV%-``W(d&2n6-bLf_YTh`XdSj&6hk)P>gWU;Gn*0eQMaXhvB>iK?e2o`hi zd*zq7HPqzKM%tD4(f{+*pbO0KGx64KL^|}ud?fS8Bdd?&8R&!SvylIfs`rd%^MC)a zwX|B4QhT?kqDE`4sJ3=dyToXV5=v^P#GW-vxNaIG?t*M!GHO zP<9sH#HjyS!u$J`8a(xgwer36l}mM*Ot3o0T(6xLXVMSI96H@b)XjyH@#(a1_DW;h zSBduV57KrhDh`MX2P@0&-3Z{Bs@F+xnYFPclpFS)RLMPoxb@2H4=`owm&Y43Np;X9Uf%U_V!u9Y5A6<_1VO zbahohRh{xv=XT4C*;v#hgvs#QHZ4wHNvzG(x*Cbmo{AZd6z1St7%?NhD~DKU5oSA3 z-o!mOBe|HG(8Qjzpy#lIzPg704GxF(&EW=5%iPWPCJiLO8Qy2D$ySBu8)gVX4S5Iu zK05gtqop+aHz{c>j7%0LAR%yLGTg)YbjWk2lLdwgzPI@eax!Lx^d_z~)OREsAQ= zuL;^k4o#WUUckAD?J77jP~Yy09ixxhJ&;_S--q{!sQXNetP>&1D7XJ8`T{N%Z(tz) zmeI2hjNe=Pti~tVs&kxFh2zFzN#f-*mIJ>)HI^|yZ$Dfl!|cm3)V+5A3=uWN5BdP= zRvn()^|y-+9+=xF>}9dmu>TnahTm@uM8s+!?l=qxvQe*=J0Ovb8UO+VnlDGHj+G5dGzwnZHiM4m>LE7 z2YLmu0LG=tn${} z%_Rn-#`9@Oe?Jhs;3y2Kaz-$k80J)2LV)~jRGZR#S1cmXVax(0;?5v z$UY}Fm3L&d=LgqqF6W);QL_hR8DO%7M{HtFhi!jy=`zi$_>?^2n*V*8IeEz% zX~#{{M5*YlS#Ie|8&bVvm4D7*!NJYz?`4%qopAgIz=9>ZaDlk==MKd__Ukm5ut>&PbwBNj?qgOZ?v1np*48ZP@B)o)T;5S4L4w`IH zsG{`qb{lUi1OoFUcv-e(lH^9;=EasF;|ad0(K%)X?#<&HTM^fXOK{kNVyq=SA=fLn znorUsd+(^d)^oUEvKtWmMse$jI~ST@9g8JYH7&IyaSfD$IK_(+;!`S9G??E(yXif( zx4csF{J$TNZ<2lNv3z-j8Qhq$jMpYR(?SP3uMfB~M+Qam@e#4cs5%~rg)0%8%8$7E z!_^nfHnD60_Xf%Fw%p@8a(U1nG$*__ zKK^2)IvDp+C`06NJImYAdFyj78bpa-4_3`RFkJp|^Tc&6vjXoxFi#Q?Y4&b&sS` zi*HAi+RRyE=Y~a@X+^^u1UUNK<{&-Y!T3sX?*O-_%u}z^lh=t^n5MFnn>dkApttU}j8X0pdD(En8j7hsze~bPp(Q*)lWe21i%5ij%D= zlj?87UqwCdf6(`ZW8=+g?xnsn)EcEC9$0BTPju3)M?T2jdq72_=QF3h<*75mm>`Io z^t(a;xMCDI725%p2`-z;0VtGwtd5Xx&H~nI=%R&|K#TKk7ePLD+v5>*1^PtjAYK4& z%JclB%Wb7lEhRr+5sg=DTFY_HJV#UMI+Qn-(%<*4cUX-R+TlwrV|303o9A~D(reS5 zCD#+5G_B20zH3t0q85&AkW3^gllNM>(LE;^vsMcuPc#L^048;{$suiju_JwPI;pkC zIJwNg$J*4`mz+Yh@Xcrwh6Bag0u2JlrC1-=*zK7ubKeX5i?`0J5{+ZepN$o3ty^Bv z5em=kdIKbxEb~WHOEQ<`_Lf(i2M0*>^#Cs7z^lntWn7M=F%kxTFxA>2Fp{7XzZ{WM ztInmM;<4wdwakiGYN6fL4D>ThTz(}aKJn=~w+E4?NuleaY!Pp9#yz!SanJBH*?@eW z`d3=efI&37y0>cqu9OZ`KGV1O&`?`KN0KG3DUQ7`B>pB`gW8o22a3L6^y#`qL1Dr_ z?fsG%XCL6u$Y#-CZsP2+LQAed6o4 zu;9PtV}5chIu)D!*=*%6YVhEqSr1-RH&?S_$hF1U5O!oEw>KDy+$jhdsoqO153&5R znyjfKtJD72Chz*dvZjL`ByqQ~YmkGQz%E-xup3ZfZF}d$n^COpKvssowC9T9(KnCl zv*pQJrce8217b~fNl#WO-YhU){M=fruoTJf1QSd#PDPL;*Q(b=G)+s#>psGrK%SNz z{+s(~y_Vn7%VV*?SL09}_s7ZW7jHT#cjhL}Y(IS7&65f;BbSS~_e9-0R>M2hbqz5_ zt*vqa0g6WshLfq1(?tB@)wrz36x6yu=AeqR?W1uZF{}?Q& z86qh__4X44R|B;qyT4x&VuL?u(WQfYo0PRgzS2{>Q@j61VWJ~y5vQ|QpQFZ;6pG_x z*!pmm`kUr^1bk?*$JY^t z%XvKWR#1uHI~v@FSUn%1(UTk9_d*f$3U(O^R|NZo`gRFOL3d`IdD$<}#O%wj%PxIQ5 znB6UGMp@bt!fXJiPT2}QP=;h`4-QEfc-#qn-^t$_2zPyZ2Qj|Vm@1%%mvBGn&yInZ*U`4;a zDbDp4&XG%9wX@vii7%P#DcNE|<5gzGJZN-9zvIQu>n=&Xc`?$E`g6UD*>8m@`|>U=WyJC!aEy{~wK#Hz;PS*!P_NU0o>p=^ zK77|IkEzwJ$d&hzzVV`AEM{t`@_||Rl4;+g(gvP@pyIS5rD@TA7UNj+e;{SsgRH{)!r87*3fnGTIsq5ITgEO$y+(7O#3Llc|N~vC&>6(9&8q#KL1}`)3 zl0E&liFw`qL(b|N%g`kjb1o)SyAiiYvqMgTNBV${(*<5*<6bwer%W9yjJzW|un5iwQocscBb!V%n-xen z>|v0jm&Zz3X)Zzi-e>PP0!BAW4=QA-@)sH`YW-T!b#@Fg!PoO*Xjv=itgJsPE?Bm; z698egS0YsrvV&||n#t1-Z}M}|4d?#gZ4-49?#6tmAaE`|b9=k_b^eR}1$g0&Tl%iH&UW;V zuQ+FIEDH^*g;h5048t!rv)0ukTO?M=5A-q&XC7ot;|% zKP+u$Bq=8K$v1z`djkXpIL~&b>;I~zE>YYyl`*7x_?y6q?qTKpStI}4k&W)`r3jb8 zhcTmr6%HPMRIQqMK9ljEq#hKg;ca!V-pFDjpYcgByHGT-pVw+@|ExNpm?II zyhSz9%>#eE7yESmq@x0J8cyd~V5q*p{RXzB9lD9g0@fsWhsu$F{xw%=}Ech0oTWFR?t zLHdv4Z?4Y!5`!Y`hpBdw()vSazo5NgpCH@F{cDhp?q;o??aPOO4{u8rtF?Sjd>vpe z-2D&lcA6xyMhHyxQ*xR4V^0_BA-6U=$o?zg;%Fs zmpPp7Pf!+%S!uF+70S+a<`z4V__l_ycf?2+iQP1r??4I(dAH5eB*7JO;tjWpj#{+- zcEkn23<}<1_VlEu{}fn$$4+BnKZt+xTsG}b?83p7vihe=w)cOQDO18vJsFl`$sHdG zEC?X0&uMoTv1;dv5q`~l>#$SRGf=xf@CG9y_1}LKV{qV3;4aAYBu%OjBHk>MpR)Gb z!xcB{<8L*;PApp(cBmBea9cx1-AisN2Lmdqvr0HGf@~b4(2hPSJysdL39_3eSG#u<$fb+MEDRlJ)knRh8@K=b>M#T{s_J5|DsW3x z4W5(WvV3{on5{4KuX1O8x+-no-9i$$QNKSya<0ca&{so17+~-thYp*Wf4`=^`Jy`T zl}E0_Zwjv#TzxKHTjspxcKWG8E)awleg{2-swVYtc4LI&Ow1afEKj}GX*cn1WMGr9MyzL z$i77o1LU4ITK10Cg^4xmAees1dP(`(OhC$_todr%KK!`7L`}NS==CRr%-%wRILj29 z`0m2s)bl!IY>*@*YQ-9J- zt<~9M>{W90j1w~B*Cj_Uy^kdCZfTlT*FCCeA9>_nxr6R2xAER|&9Y;a8H<*(tITEm z4SDY~e3sIZFi^#ueQk__j()nuJBV){um1j5OQQC`^LwXLO^e5C zW!{tBqZ!kiFmH2Tx8l9xIkV~G0Aa_~2x1@z|8KkJe4Ci}sxiyN^2s|<>sF%>O#?G_ zcmDNcCB`xCkEBNvBuZtMQ>(eK`GN>o`OmeOjoYfA#{eE@^E^6quVJNN!*9i#^I7YZ z=v1|2=Co2;8A3?TO9cJxcmjQT%NK;pvr^HGBoouHgAt>M;%UeJ!coS zMSkS8nr4M0!<+P2W2H*WdT3zwKxv^aN}VUTNK`GL;jeZ&XqFy;6lS-GaA zV0sJ@r^<;0wzSrQ>OUX;xrWW{c*MdM+RnRW%TMSAv0By2d}*xfd(P0KIN%@Gm&?(N zY_++WocZM*VhDSd_xXji8+GZ5pi^$Dm(`Pap_0I${VC*3znLhi*T@>(A-?h(tyY?v!A(n z3uQC>^4giEe~R@YSrAG|?rpU=;lA$)B8+I->sq={EjviBihV!2o(hzCJ ztnmPNr3P*axnFnD#aR1E@TsQ7{jgP*K|#u7fF?@H+MlmE5D&szi*`i)JC^vgZ`XG`jQ;+b?V=Ygp6ax!E}X8(rz%AXX=Lq3BT&z)J{ zrTFvf0V^yfxaPxpNbAJrZlQ{*vF;HLM2 z!$AwztBK&^gooxSCL&i~D?M*$5#+nuSteT5O6q@<({BC?ky+f4FLuqX#or*aLwods znM>l+7o40D>So1B17|iFzWCvgXWVZu^~GK6axja2!+(QYx|D(~im@4Pg2yh%X4~E4 zjXI6IXkYTx*@N;_s^bzAMuIYKRPrk3KJ9q4n#P~oIAFk*ctdUZF)vkg-@zcf>nfZ{ zDnWhNDcke&KDlX2TgOKwA9);*^MR0lE*12*m1ljSnsj67QlOt#xeZx@qE7*{L^ND? zeEW20gM#DFAl0>wCjM&G``(Ly+mFr=yf zdOFD6BgjZAhvpBvbzg`7Jk(qzxR6M8f_C%W0oHE9L=PXs#NGzf$Wn(x#R{}mw%ych zQJk)(o)5Dn#y@Y}G*CE|*^f`><^4VF&OiR}Q2Z-SM2Ry^ocX@ES99yIK_`%Z>)ktRmA=9#mHVbj<(T9M=)8g zI-$RlW#*=Gs3JdoH1D)zFF1&ss z-%|L)?S!V@@HaK*WkjbO19e#9FDQbx``@ihtm@ zFk4TSwiVw;^fRBKjr9&0!-77@)?YD`r)~J!(SrrjNcmu%obWp3TrNTnHx}ZZL}!V8 z;a0BYfAE~U)!krH>lMmzER^qx1(kuzl4J*t+*x)^9$W@^bE%u3)l%}T@cC#eQY|?^ zk;eam+HKPvx{SN0igrK?o1PeS`l<21SYNPT@$k<@DrZ|t6jZkAA>wlx=p2z+dO}uH zmA{JTT64pOu5#n)uP+_51TQ;919)xcTs$DfI?&X(yDVR$KkxwFs`C>2tnhX{6}PW= zZ6V3q)=8rl-Pqr68^--T$d(or1~9HIz!F(NP}(>IT3#0O$;uZ*zUB5ET+>>h&OQt` zFA>ol+-=A!8#cM~Je_A0CM*1KMI6o}k!li`h-yn|2{_hS9^vY$h3eHH!Cgr&b9I>f z4mp09*xxlx`RYkA*7jnBOrSGH_DS03+gcCX3!&_jK{^hv)|~~o>3kFcg=DsEM|8Do zkkZxPDV68nG;VzW4egk(Y#G8|Y!W93cF~Xd39#aC^goB0GitCuCeFnaZ05p|ilyuR zLXvquDnH49M3d8bpLigCA)!>A?Si|qm2Tpkn6=N^(I-t@WsHy*xbe3VlD=K@p}ss2&7>~2CfYr2#tnnsnPFY zM4@9uwj)qydZTlF~ZoYXlf_)yk}xlq?@-8g!A)C_nD-Y08EcI z+nbN4`kBj?KV6|->sp-VX2h+zc`nHLD<7j_gRScMM0W;m%x3oo8zms3Asuo{>&ujGAa>`zXC^}8j*zI+Takal)090$TVcWrd>xAfk}YiLsFi;P-hBmd(D!;VtT}<#NCJ&PtU3tgabJw1kEp`?sPZU|3`tURHJ(X0r!$uH;+ba zjljj$kGn0^@27nHxEXe<>v2fn?W&Sxh7c9La-zM>G$O|VXboKd6PfK;O|PJ~epKZ| z9&knMwrUZ0>RbcIwfq#FD-%2r{HH=IT&n(-%@QuND~{Y@eTRK~?EhyKscX z8B!wPR4fe{>)~mbE;qS%$+J*DGn~}3!1tSwgGkLlTEBsHEeiHNaoC)>wx}vrPDE0N z-%nLvPJasg{6gq_ug~igz+RJrqtDB?-YQ1X#?^d0%@Mq>_)8 z-8|Y3W-2bZ`?b>G0k%uUVRbc8abQX8O~9UX>Tdb;k>3Hyd-DLWPylftkj zfxjA9eg&ebLDM>71*q(~&vTWg?UUjHN7c zsT5t%Yku{xG0HVyQ(U65IN?qEwB{YI>r#dCpFaQDO?etLq4xtzYQH4+yS#DL?itl3 ze-|?JAFk$>T~y5PyNZb~jJ;USOdLL zs;Bc45vAipOq$8pyhTYKAdm}B^LAdS5)#31(4rIEwUHvYTgV>A7c!p5e^l#I4=15UXnJ4p=~ zTCP373hjXJ&AWTFdop2InDG3`18wPx+49ozB6|)ss?#!RJqX_gYToCS6Rj31(#)LxV*Ra|-hR1#Md(TLLzG^4K2Y z)lLE{0i5x>cdyAEX4flLzLD9FmL>^L?(rFl;9edIPTiWy8Xs@t9}6_5w~vDgsk%Z z&6OX`o?|UV(=_%xTE(eEH4+}tPBD4BcyB@7uL@CAcQ>Wkoc+DxZeoB*oxRwiZ62Py zZ7nS?+8Aq{C}Lu`09rul2h?~V^`}gxPn&+Yl5NCVWPzCMzJwz(c}3jg@ekkE{`FEy zydm^yO$0v!d;}-P%31m|N;#D}h@nGw{aB5`%8(rT(x~r9W^QiRvr~Giuz)qqKH}gf z2PAOtXr;sq+(xUaaLlicZ$*q})qOQVKhtGJ>I;mG8}fi>!8Tv|jq@G~+=wVn&E_nvU&934BYo_)32hqGF!VWSFKZzV38olQh91`sSl@ zg)wdB`K%@$T7{aNMA|l=C8A`&G+6Qku(H@lA{Cs@ktsI=ZBV9l@VoY#=)(g7@Izd? zn!#U+!=JUcH6vHQvyc33X+@09vs0{ad!=;#`#DKsEL(&uV4qJRfNF|Wa&=!7pDZzs z{-ZcPsR(9Q;bMq9zFo;brO{jCoi6`J?bW{+T_cZpCv?zQ$#B*D^&)oDv{x@T#17^) zW^Dvh+=N`)(lCn}Q=3;0HiK>=N#Z3E;c7Xb@RXjn*zYW|B$aG*(7OYeF^hAZE4^8( zTDPV1KU%ykEd9tTK$S8gJ-|o5d*nuIFzp6)r7ya%Dk3>MdDrq9Wx{f`*B~``-3ntE z+Nub~*Z7nniZWh1scr0{c@bGb|FaZl=&Sl&jK;j!PAT5%nbR*^bNYLhlcKA3^Bf~O z=uK8tT%U!iMRzKtjhqfwwp^_~qOe~?HQ8MU@iL%Vf#p`jSslGG zH$4mQzTqxA=_7ZGgi5y0g=2(y@4NA?>p`s8XH}+}wGQPUS%+29z(V1*lguemr#%k|;{g2{f@~aXx2{AETMo&fX?OEXcse;C2 z=a)ZXjk`RRe9A3&DJC6=u7$+>fxbPV#yN?)($lVf30(O2uvY(0%ty zIjqfqf!=LVR|W$Tri3*mr4>H12lw%@5)*2VDO+xAy;n+DzkkkQlf;9MjyT@6H&SXlumoyxJlR)1WgMqF+CDeypn@t+?2&E+ zxG`XC~H_6O~h{?Lc{XV?JLX(eG*5@d|JDwEc39 z2h@l@Lww59t`5eT_1?y-ZfP~NKPb;?nv6bxd37HOD)kWliyJVzI0FPP{^v*JwcI^KV6I8&n`xn3W-RDUP zRyebBvQ=m)U@?l(l@EKKZM9>fa&K01Wr#~hbWtf;$G9Xs>8+REiXjCA{$k?j^7+2y zBv@v9gUMMi%-88rC-*KzBI#YCrjmI{D1d9Q62f$7n__AfHLLmlvs}9UAcp$mCCE!R z6QpWaQJ=L%lf&(>IrO?tz{hWx7wkU-*xOW)X0@|dkK-@rpjf`!?R=msel*;EO7^%x@6DV2;8bmYymX$yRYyo0 zs%XR)m9@QH=H*@~q=8(E5ZYJsotPYXG4Hl;>M!rtyqQrlLwr6kkUr7Y=q4^a=l8_7 zQ{dOfY=Tt>=RQd!AXt>>Ij7-ZK@;)s_YR56z7nc|7%ymJ)RI}S%XGM}r7&VeTwCH% z?!pvord#DsgF3_*7OQXZK#Krj5Xu~EMgR}H@?{mXXs|MPPbt_iv(eR z>sl+@b&kj#Vj=RG3>!@4oLQX5cr}+h!F%=euYe8>UFoYO``ksCR}j;@E8Z1X+jaj| zMWKv+Ev0YI^=2EtnJ)yk?gY}3gLuSfUGn($!tMR@4CyWT43A{B zwQo_=&$f~LXpzFrj=LtE9$V?=OosW|BOK`>A!d#W{Cfk?qcOuG?*&BybqvBVJd07^R#yAv+d!%yf{6@2lT(0nE4n3xpFYC@^nFYOc z?iu{+&$gjt5b(#zJn7_OZ06I`b@(G>c4||JZ&MB~+qczb&28TeysF&EOHDBR(orW% zt581xW|Xe2x77Sh-S9TxikS>ovFpu*#}<#v=o|ENHAMb1Yt0*EqT=u|erj1WI<9n6 z<$WREf_#WB-n57-05un)GOo3**Ef8opg3%CRu1Mi_lwHtZBB{>V2ds1#aC%onToXM ziVQy<+1qfI*@A#;2Ms3WN9+0~Jww)~`fC1LTL+#Pr9GJ29ll#cK06f2?`Aw0mfy0_ z*{s;P!u_OQnT*fcenH^tF(C%nU2r%5Ow|5x`!VsUX#7$=wJ;B)w34m=39+BnMq+wT z7MLNz?V(%#*MEssATy)amV+>|9(zv{>wo)^wE`q%ma(=fDT(b zXu8KFK0CMG#TrdUH&-Q_A2oOm^x9ECQhL}H9jAR@5(jcN<86iUYoTfqOV4OLrmlYq z$VDKx7H&?<7)G7@7J0!czgZ6)bSIsDQdPDPAqZ#_0AJL;!Coyo$8mk@`g7@WxDlk( zf|pSmnUfwU;=S)jO%<#=TG>?K=Kwzq;>>Atdo}@?qt5|KK2$Tb%6Oi1h(Sd6 zjeJ0MQFnP7l(}*!CUGB+*}Xz5lWRk!?M(WP%c4T;eAbtOxnlO&EO04hwwIN0!pk+0 zK9`OP*V7>3e^BAxCY1dTQAnAZeTDAmgn#2!N=m{GV!8tJcap#wj#Fk}2ZAR4!pd~K z>$j@3FIVI!{!mxk6_w=P5OGDw4O?z8*}e$4jcjr^~rl<=c5gcBtEH43Uz8PQzZ z_IW+{yNt%0^JDHH*`^gqCP=JX5RajGtfhqcGk4~^SmBohIsX5^5!{Ua)~t0qXa(%ZBViclLg*HBOD(+c`bmZ=gm~* ztx5PhOE)m*vaWWdr&QB|s-n@EmjN-9AZ$voFJ#-}arx?V|FbdP~p;Cb0;I z?9`n`nIV7Cj~A?7Ynn||_OaLMgbTrr$SX<@YfN4j$qyCmA2i7pP3j<8%sUFk%DOjU_n$(G!>^{mxp{!8(62dbMN zxgD-QTWO(NiN}n$--m=h$G>WRs~6)v{6(eyYd^F;D9C1B9$M*vrc@P^?y^dX$+Bx| z9$#)eEUtf|ZEAn|@rBo1c%ApnI_TDJg=G2_Fi$yjc`obrmjr9>V1LZEyaNgb_Z>Y& zj@N#6!CGN zkki>?rzHB6)fKMDgS$~^@av!{%OHUy_$d+mE5bcU28K zw|hp#F-bq6-dnX#oO3#ab+D0CP$b1=9=Ua+DS7d~*9uHOJ!3!GH4PHBCiY8nK|*xa zd&|j-rXf5^(|nA>gq!O+wMw~h<(IMA4Zt}WhfY(cBq``mJVcN;+f!6^D{j74Zvr@l zJ$<7HcUcqBu_PHAx9#Nb7q_=Obz|skm!Agkb$o%r>-r`Oz7>ec?9{r`Y0)r;Nl`2E zxS+eq&9l>(lBw0YDf>|I<$1M{24B_ND#xnjcGrmDev1X_j>cLO)(pBzWa`EU(ql6v zM2$j>;aMZWF|EJI?U$B^@5IXwxyoLLXZ96tThA1@{oZYxiFoOB34zBZei-GK8b|u4 zq$Fcbp_$^`-~cj7!JmwOz*iwEAP15R8yTgtTxnmQ2?@J4i+p5Kq7&o3@Y}S^9E&7r zF~k&1`rLNo+!?L;T4|$nm>o(Eww=KED6EJr#)Of&bA4F1%aZ~Xh=Su>k%5-=Ql2h2 z7Dr$yiG2W!nuj7Ix|Fp&Jw^lnqZlkKTz0Oo>)0?YMfQrOITZf#aV|zqR}2=PY}DBV z0XtZrw3Uz#k1R~4RAyIWw566q{*Za7;OHySW;{z$oQdV6!(`P>8V>B3CRLQp&$}M+ zKHRHs&FuIjlk8hrgC0&G#B|JsKAqBD)J9yVX&h>x3Y^ql^|@KlP)CUD2w%G6jt7mT zC)j+aOx96VH2}>{#u+SF)JG@|@R>i2mNq}lHcd{;ny?||UMTz2M@K<#-~!;Zw%g`^ zhYS1e-%mLVB2z5=qsSn^k+6u37czdcdcw_$wG&BL5_=Rm|VfdF9O0?`VL^ zz5_5_LD1@IMn_4$v_fFximqY5F0Nk5jsbOW;&%OVVRw`^j|CKx*;jAMgV_GD&&Ovc z=H+oz@XAh;faP1fnuwyU30wK$+PzsE^!#1tz=~Jr6SDD)+@Df4$rTBhHm zTzf;U1=y)Y0G|;_B9s1@uG|FGWfOC?b22r#l#j595#F-$J!3bBJr>jZyWU|meYXNK zG!<7A*^gEa&y7g{bStpLnKP|E<3_ioP1EPBpTZPgqXB*_Y!OgPT$`|QN3>R5M>%Zu~SuI7EhRSe z%PX;FRA_)c@k>XiI=C6jJAGA73ex&j(8EYPU+M8fI-mQD^k>l(D`zB{(nL@Meat;O zzxrVph2e`oHe|FJDF6 z6y)@`YQJi`Wb~E_Lj@lX(AmSq$l8W0*}m zn-A%kV-nHOb${v>#KmG|Dzyc>)orz?r_&&qmYEEGiEy<+wcQzGgQ^e=67o0CVJC>f zc~Hjq<8d9TqC!#AySghBP7_Jo7v@uH^x!)3P?5Fy5(VSZQdEfKqv9>xt(3gCnJa}P zsXEb@arMx2=HL3BO+`sbbzvf_s)oA*kEoQCcr28n-5jCgrjSbY*8fv4?{`(@$+WG9 zX~`Gu;1{~O?27#+|57v2T4KeEO)P(RU9HaBcy>J*Xo*}_s5)_=B@z*1j5YYK<;D1V zv?a={rbR))-6PDbW_-FM;))VY(!uF%JeDkYK_~2;RnMf9y`I=ZIt~u^4rT{JlwVKn z?iPi0A5R%R)Vb53tUkc)PM*_TuQa50A*Y+b`-$JcUSc;M+PkZNw7+N?+}t$(hb0^5 zicUy;B*jRjyF~^$AdNCx12yhc?`Gp9>1h|tssFt#0LRoCd4wG86SPVSBAL9;B*7|98j9$WEo*oyuKElX(iHdh$^lL3G4Tt;HJTIkXKUG}9Ejpi3$ z68`WS(a>`+s3bqbFc^54LVZ?t?fU${yg!}NwCnZE9u@@tN8;HD?|HblAaG>E%> zs&dcZ*4yJ^8N{8Gu1f*3IlD~eh zKVMiO(n|TeOv@KJnJk9Xv9aMskCrw2#8$KY2(^2At#?Z8wm|P|FJUTehnl|e@$tMr zR%CR{Q09w+ejCt57AJWa@P-|M^H+VqHE*@!2)1{r=lNnYr=nQ4;xGbc4qUrkcFcNrk{3rHzyS!BjJ={~e~;A>r_ zG%Is@<>cxsL@Ya!o7PRCy|OYLQ}1k>vrKM`F$8zDhd`;OahgQ5N3 zf|K5SJaa^){Wp`a$h{OdZ?_L3a@`4a^7pHiST+n7c!}hOlzktjA6|Orp?E)gN5JFH z_KAhQD?7a8z-+vAAe{Btx@mocfQCDZWdW!AS`q&txf4S57TJ3xCyLi+kFX|l~*BJflL;WjIl=SgZC{E37*2>uo z&K>PbiUzO{d`p%Cb+`4?HLAbFXDCBBHi`HfABcS2?T-l5@$TM%*AM2wsC!SpWarnG z^*Dwo^lRB?PZD4B0_1D()4TN<#V#qEYZ&EdL}-zQ03Wp27q7L@A7C2H@POb$hISO? zJ#T2z>!B5Rr|nj_O8AfB+Lh^?wZocF$*_$-Q$;u8kx{|J!rY_<>-O!I+~Gj;isuP= z(NJI+u^y|}M9#|I`@}4u%M*TGaVVJqaMh8R(IDdgLhSm~7M-Au-sCG*5AOTHp6~VA zb?&@A@jec27_3gilTliL&+OXMvF|($*+mTUM+9h5jKu7^=zB9zP>unwPX%Wv4|_<+ z^ntFotLPMnJf}UB^XkF63RyLvZBV}T`t9&Qpg=(89%LtmB-&-CfVxnrSo#NNdEam7 zldb0W=i4&FN2ZP1{f%FqJ)U<-wI;++%!g6hEzQ6-M}q7CRf=u`c9{r{tB!E6wkc(- z3@cs!_{Nvp;za@5a zI%pG5@D`OWf+*t2BmrOF`nLz>=gi1g*g0IUPiY?J6uq)1=x_Z;(Vz@tDy^up6x9AyiZ5k@e%tLlR)lJ7mh#XM8N?dNQXs+%Kx2I&%C24&@3jwt?k}9 zUzV!Ox`X=2SIE%EQ2*}8#pq^6AG>V$(mxxgqsp&If`|G#{W%}<8qDx}Dpq@yA&=;9 zllYJ=yXg_3#SK0$Ty>fbWPX-#zo1DUdw0`<5E#?u9JnHyr%rEu*=nKZv(Dy(21<1* z(fs9dqJOfNoWDpw#9vqy2L)V;x$kjw^-wpzi7Vj4p#F$<6F-eP9962(w-GtW86nUs zShIEOTftdMm*)eftNzGY`EpqcU)_ZO)c9!&ST*Yf>rpj7N3TL|_;I$uews_w!jhJ! z_>PMm3o*HQ<*(mNz4Vr-1h@`6r+ZM8v3#(HIY>aFC1V>dt;9SaR+50V1kjpS@3M1k z$jl_zWW}8xNm~JY;f3nuJ<_#pSze|KMX9c+hLeNSaJ-L0*4joo%`g%-omePqLM1p| zUEMD3fa$GdDmG5Y$cJnQDDux7>dwN`T@WuyiF+|>4@f@fNer-Yq)5|hsq9C|g#edzq-d&!@ z*3-!;uzgnx8$nB&G8;b{Jfw;y=h2H>K8~z)^kXeOx{F#)*|{Xakrw1SnX?ag+!`TR zBzWfDL3TurXI2 zw)SWLp(OVYc7CVPC(jNT21c*-hcpX~3_69k+MaP8PJWS(&4)NH37qCTfG+d`{X^Xv z>;kR7fpzE;(#Brp)cCVo_H%fm_Z3f`ZKm%2u;WsM{1L>~Qwj{Vm&s-^gE zi1#>733B)tWuiM_*)&tRA)se53|*Xckq-Lq!N3g zJ2_Q|`KiB`_TDTr{?==+-d|*g;f`-^iYD0uDAthBt}rz9I%^_7PNVJB7Clu#yK*v& zKGLJjf;V%yj^MlkscG0u@{I2F(3(DC}8E$6=7V&6~+S*7ttP1ca_raol}2-jI2Tg`aX&}s$M zRzwj~Rw4gvgFTyIy`08Iqo8r82PRpM_wD>~8TdI7k4lnPXlYL6&-J)7KzZ;_#5jLv zrvoo$y7iVYR2saRw*V(;)x-HlF}e3 z6ph~GvAodJKLnmK$;nh?w=vBm9X8dCXNDY@hf`{ z2Js2Z&}rM1GUn5fGqAXFLRDY*;|V$1cPPF3?46Tp@QG-0r$Z6MiR9ZCE--O)-h7w< z>hT&p@4C+7#+aNiw)PLCBlPEgQUZ6tj_+ht(&Kj`2Il8?n&k=#>vV-LYJcI1K|THE zEgJ1xf+gOHb6A;<8JVIMNIlY!vSN^uO1@wP&x;H|j~#o)?(mFm2WeRp2s}umB1lu! zM9{%#TFP3(R?hFt&hC=8zZ&^dJrj%R%Dn)%$(EEjv|>WTaBn**Ck_8GLp0ei942x& z?U8wYjQ_P-l2BoW^f5)vSr`~`PJ#kXk+cu^fR`X7ZsgRS1H8J0zD zGyHlM3xfabAoFJ2J9@W+7wwNb96JIcq!N;q ztC@xMG^*k=Oe`iv_Cl@fZ9`bDcrO%DM@4j7=oQ;i^Ty@iJo}r!i|pDBJ+B(IJ^>hO zgYuBZ|A5^4)hjIDve}0!D9-3``ByxtAAlPPc)xADxG7 zJ}y&ox}rbPFn+aZLR`X_2%WR}_~HgXImiartqoQbcJ~wyqw&-%<Z(-u=o|}{Ddr`X zqOfofH*;7a5A%n~#Jx?y(}srTn!|m#eJT`3hD^Pj0(`sBDN}9msd<~ZYczxUO(Fe; zzKN>vDOB|Zb|d!C{<@`WZsL_$`(##Z^k%NQ`EK3OZ*34OB{y}y zr0)(Xt|Q|ODY5#?sOdwfnl+R&luRa;GD}RB>WUrnMuzaZruSW`5xI8@oWE}oZIR=B z=dl7w85ye{uS067Qu}WeEH60p1=!tc|KFV?*V>xW&=F+*u2S~&@wP_ugZbGM5GDfQ zIS&4h!m9ReP%!LqSt)MBiD@P?mjo?qJb^tT`7cK>k!tqORtABR^)HcLw?`M-eUp1; z^RTrvq^NVGLr<<+1&H=&Xu#pzq~QaGp&)wAybE2L_>qoYsZ%=0q|Z)dqNL;MPh-3E z&@11t0%~01@|VGWglwxUx+mAl$HZc-t#H}H;{4c8zDaXq)Z+)Ak{2o$^PoX_J%!@Q`;Q@ty#Hu6 zHw~;;1u>fCsz)s`QC3OLVP3tVbl#iCsefhmL}qu$%*YK$90jcjuhC2X5qi@94E+nt z%%?}NUYV-PP$xdVX=s%2Lo|cvf;Qgj?ClvnJ-7 zosH`Bx<#id#UV2-lLd-DtxjDgf6dr{Tu49u5%2i_-4OrtM0^MeAd1Q7g*K~gF&6bQ zT!PdZ+N8vj5zfbLY%g=(gmBTR+n5eM>#M-eV*c(77ic7uZpuMMI2G#x%{>Rsg!(&F z+(Va_Vmuu!r>$LCbA4{IVc#`IjIGPl6e%j+Xs*(+BuxiC*%8-LY|zLmL+4Feg4OGZ2Z?S!0f3 z99!g5z2$Wi9LD?p^aL(@fG@8tjM-`S`)#ygv=&ey1ZvvfCaNgKm;|| z0;@{htqe_COsDNz=%2} z@go)GT)W{t&8s7TcrDB75l~*G?7ZA@rv|^;x~jjD^!yx|m0OlJNqyMNsIl5O%g^or>zc3g(BEpB5jw8#v}RH681U&m$L zz5k;Cr{nYes|uBy2-?I%-w(>Ru)@3z8qL(7r@m8>Ry|qL3H67U0jh~wa3~Ne|CkIz ztUfdt(OMxV{DytT`sicpNR^^`abhfN*f_IS-fy+J|B*4FmPbW5T+Z%yd87gbnNu}^ z&)XomNht-OpSJ9d8IJ*Y zGi1cFJZq0<9938DY_Tx>^SmMZE8Xv3>Diepu=cSn204VYlc&o5tz#;yqeF_dji3TD zZQq?ypO`r^+gxhpdgeE~#xc3YoTeDoSuE0%?|T+%qBG=S+))&B`fWPn1GYprJ;BFQ zUt9&ckn4@ow|}0mCOK`<9{@Z~YO=%3$C(W4&of4I)4$dpL%7ZmS(9K(q*o7!w@N%8 zv@qVfQRCA~>^!MxQ(sx4|3^mN@y-00*eR*kp-wQ3GY6c#@kZBoh>%)Py&Tgg$6k<{ zlf^1lPI@;72!C__yR0JhwplaPMAz8@jnP@C4|;2Htq^JroqR}&Bhu|5v&**DpUI6j zodz%8MTFwi8Py}@F7Ix!&mt$8Ex#szyoPR66S&Zr0_cS~$OW(*|9<`x!uR^x^->a9 z-A-*gDdv8-AhS5OL%59@W?S^0o)8Lq)PS(wz6?&+SN1-J2{xComIjMc3r<>i;CGTeVkwT$)Rjl=CQaRl!Rrd`& z94>-u5T>Md&tO8`Shw_F>zCsFGLZ+0|54ce4yO*9(jkl-*ZNjic7+~)JJ#TerO)yn zrrhga)8$$`a9s+IS?3b&J1z9j3A1L`e0_Bi&tS>!@YI&nkpB`G`EOC_Z}3 zjNj$9rcM5Iqi9M#p*E;)+j1uPm!39Zs9q)cJcyA)xBC#U-g@%H= zLPMhr9U;2CR^jgqlr3j7P^|aN(VB;$WY%0<3*+n~jQe|1SV=MZ1iRYO&8(VZMbs^; ze90Slvu%=z8W;Fw6TuE1;pdJ!fEbFM#?y^={zn1e9hi;zbR}rzqE5dDRu+TK?Q*VX zW_a+-Roh30^N&{ptbQ(l&NRxP6_d)f#=*X~pf2S=tsBPKmgZ6wMX%^o?%F4)$*1(?wxObK zuec!A@3`rVZ_>NjVX#&_WS~uAAu!brn!r0u8YF~gzq0!KSEOyfGLp@e;9*6x=|zOo5{h~ zY4`6@tRAUStpPa-OP2jf&Q6}r)Qxpid+UJrz$L#$)-J!w9 z7py)r=d*U9dybAIy%jJ}{i7#9=~!FQ=Ia>WqQBZVo~MnR{a zkscwiFN8O`P4}cFy1>)__PjBRQNw+TQBgggt=b6k&PQ^L$j@z{JeM0LU|W&dDYV0E z1SF~VH@zMKkTkOUCumXNIfLu21SvxJP(PlfRVrAXYX&l(rwke`SO0E$r_3b z$VX*t&sOldW{9O{X3pSuZB^m>Jlo+SQ+NoX!C(6wL-9Vb69*9|2c60Z{5*`g za?zsU0U791KEMf-KE6u%8;;ddJGL>n%0fqcP2%`HN1Ee*56zHwaf$Eh-7j3KMwV50>3`Vhz5U=Qg-?o4+LtZ#POb)35>ZKh z1=igy;u!$}6Sn9%E!ydc2lmQOzpE@?n_fMHavSz8l98@oTpS>OU4HldM5>2A*_zfh z(y6jvKf1W7nPg?a=xbExIwXC<*nwcQYnp>RAGrMZTH>X>^v>@ZRn|^XOQxY#lUtmXDv7z?Yw`a-A++5lF3%BZ<4(>SG zmiXY26k`uoSAQ=%@RPJENxGQXD-dYD;6n7 zy!SCcy^0s2VTDYwL&TdBOxKzlKYsroo|U5N4Bp47_dlML8c+NrS{}}Rz@WK4h6o8n zN-~n{E$;nC@n&;kuJ_mH$L*uaGu*yFf=4moTq9YX))Kh=8gqM3BECA!hWYeGJx=KX zW%69V>-~fTA97eRd||?;K-;X`ATv$(7(@zKM=fL*CfE)D=!w@)bO;i)Sd6v3%;GU& zjITQQ!OpWpvh!R6NV0$~@Zu9J+azx_-~1C)$eEy#3%Gt;z>?wXQ?*`7U<+^T1+z2Z z*QWHQH|^_=J%D%Qrl}eW*i!ALEsz>y9Zb80UwE+UzZ&i@>*M2bXA_=%bXFvUWG|EC zAIu<3BtnFNI(>4xwPTJ))*8Ont+q5pG(nY^F2p@|SoEa$LrW*IueWCy)j9*o=-Ct; zRdRn4Y!gOb-_NN3g#jtMLp56&6lyx@pAy?>!GWfl;;>M3m5$alzY#{~of0xls=2xc zNAZ)5uq?*`|2lgb1(p*TFjT2#Y?=}hdW%OFhEc;!_6&V`=MJp$`j@38A3994Ti>U- zs|bK>6=#x({e9L5hJTGAP7_bXO7>HqcG(1|Wjg2)zwCqg8wlG#z*qjsF)rx+M5=dQ zr4-s^Mc8}DZd0& znMJgoC1L+NXZ~5PNnnCe2SVkP7xp?u+|r;v-blX`%A>b%ARibw0SU7*>|A1m`WfEb z0^Xg&$S&{}Y8o|1bl0n~1?}T{!eu+A-HKUxUFw2pEa#P+9{%1^V#lX%n}>6gNde}C z_h#J4qhorP7RYMd@A|^^8>!Ig$bx3B`_HPD?tqQ3;?%~|<+QrQHB@9-Z>%+uHAsvcNMz#ELsTGddTuDQ{qh31c^t+|&i zTpVErTGDc>Zkwbfnwr!bfs5|9G{6r#*0p*N9HdWrgtFR_&9Az%+4VU>52fyO+BhB| z(dElyvB2_AuvQGlouE71s3qDRz3g~A;#Ww{W0Y*F)7Liem07Fy4LgpSdH{z>TIBhk z9&u!`xW=+C^xdpSlwkkapQIR6Wb4IBRdC~Mk*fSvqg48FP>@MEKPD6?Sx8){`rkFP z=k(84AIF(c#OZ>b7GJmR3ge!BLzCs`bxAeZ*apH`<6rbKfI`{?EQh#<6Dh5Ec!=uJ z_;9|miio#d$B+9yQx&ssS}rjIG|IMGcHp@h4FLmA^h~bbzdTs=ay2noOOYr**d~>h z$Cyt|5iZ#l0JigH9k%-3lNolNh^BHk`l)7m{$WC_KxniKF`;Wq@ zA27zJbKIGicQcMs?c@D1Wx5VkL!& zH#$q%EINk?`1!?2eKHhJc74}o*IJ;ap8smtz`xnHdJN^`{axiUyohqoJaSf9j)=G5 zVg5b6BmU|Gyt68c%%W8P3@{4@5pSWar(Wy%Uw`%dT6!E`(EotaEuPUK@K5R8Jdf&# zJefCl4hGbECl!|SuWNQoQ9OCDx^GCyE=IClxuopw5N>I2n#6m&?sZ6Fzs2N0xj$mx zN(QrEX~|bvq{z(&TN}*kjH2q=(T#(O9xZN;mO)b{1XNVmpYi>shgIeu(P5jby2GRcDddy`TqS;}itin}%xUc{F`b%@FbG_n~bj4$e#g zS;s4j3~UTP**nYTwt48uNKd@dCR4gEVx@M~ z#kc`tTmVoP0hzbYJyt=4Y@z4ikfR70M9&^4h(qWT4El)L#cs;@n=a-Dr`FIdQ=AYV z_rUTSI-k90b;d`8f~!(8&Lc{vhHNgVyz@F7_M0~utWZSrX#B_Ivh{Lb;Rdhtakc#y z4%BCNjD1QU2X_sWYan`1=!=bp1RENx~G^4ecp3wluuKg}B-84?(P)JV?G+4Y^ zJWew|-*ak&@KTdT+^!zGbUcWkRmpy-fB}p zUN+iP%=w)kHIL*ttYs||Es@ie8j3+j-mc^IvkTV$(&wRM9cnJw)Nr_MkJlD3jlP$< zCjF%!qF)?@vWWP6T*wmD+nyoG-~Eh7wmsoUeb0>iScI#MgDn8}T{s*S7_@GuxPDX& zHyxt~KcCp?V5X;~Rrotk051Pr>O{&u_wifIL#P_2F53zBIyaHiPfz;iFxlA)I!Y?A zkr~g0B?sAV1e4^2A~x^xj@i3-V*FrpFn_?t9e!aw%0XI6mduK{fQ+?I)zjK4r*vW;r6{{>Sja0uiI0u*S?C>6cF{rJ2+GBLZB_0+Uen)oT>fTL}RcG z>C4-dqK9}lcl-^n*zVr%l##CzED3%^cl{QW51vnzqp);5m)}iWF*x8C(oLhT8A zaRBL3@beU7+ecG7cOH7XrhYLT2%}oFLa+b~-_~rKEV|5YeyBN5eS~ucI51_F;+P6r z!`l<`GCBNRM}PRbUJPLtLbE(`@Zm^AvYH4zLy)uKx%XFa@KToITf)WOpx_ zICh-yVb>{_m1UW&hsVT=-80YE@!-JWJG1l3QXHAmO+DZ#H$rLnD|`55ns)K)T~mrX zZjSlaPR)_^D~Q`VgvI_>byE&0Mv08_{ecjLW?<40*{ed1`@St!G{0ZD((Eyr)Q;Re zEm-qxA-hLXbCwZt6CdpEAjZFB@NTv>B!3Dt8Nc+kvZn@z0Az7h1?Erqnh&ZM8K`M{ z_@g+<-rwdE`B3Z?e7On0UOl&szL{0>Q_p9_S+!SpeL=V8`KouCY@a3RStUu*09Csy zk5?7^h%{%LT6-Pb&ui?uB*v4CSVmA5iqt$}Es_)sbOD=*K`#a+Ftr939luwsbHLU- z#qM{KmxpW_U2YUMQ4-3?d$lWc6)VDH$8Bk+#0Td0qafrR3svQm(b|!kP4ftbh6Qt# zC(iXzM^@Oc_sbr6^`so@^fxg>h7pfq%yL4^>i-+u>-iWm`fg z2pcw(RhoTQ^Ntdq+C`N5-Dy%fk(CQvNrh<>(2&i*fOi*SMEpq%^x~!1 z8^*GqsXd}M7U1u3iMSNRD}rHfE8-3*>iBGoVT9jNN%X`t-*BxVtO;>liofZb}3QR2R97CsPo;DWLj7X+BTTQJILAqmo$Q|SE$Q8c}sFMM%K@wmIE` zFx}y9YSRJAFT2m*;e9S6V$n`EYt-aku1~tAG*oU0DGu+2wok6=o=k-<_SKSgY30Q1 zbb-MHKkwV9H{29I_K+cm2s%Fmy)9&Vw(<5bqi(sEaqpLn{KqO<-zmRC)#I+j3A6Cp zXBC$J%z?g{FLQo;79C)^cEIIGpt65vp(aSe^n`SLDMxQAJ1V$)Qs}V%uN8SeEzn4R z;pl%|-{%=WaLSYM-U&LIv*jgWc2InI*l3^zskqXGhdR9{FPBs4ZyNh;IxU-!mG9)Y zBJl`aqW&zr_=Ru|-fkhs;)jwsfLtVMZP>C#wSlmgidfS#8nokm*ZaEo<1Ah&&NvD) z&uI1g;s7CuiUgJ5!d;oj(%0HlO;sTZKZYdMJ$+j+b(RzsYaq=+{W~d`wHwpfS$|s7SpGGJJBb?zDNn)qQ!9EUa)sc z*M@H=b_Jrl=?mO%NJEI4oBzu;Poifh4IP*gvXaVl-kXa{bc@P;)qsZ}BLjJBWX-F? zg}Zor%m@wUjl*p2ecefORrbsmZ?Odq2K5OVQxEIzbut`Bu=kr-5x4B_7GV`KLEb-r z>alMRSghe+0>51#_ouzbg?Y!?<=;buBYI9IGS*e4+x{Auk4xnJ^5@)A43{2kTr zfW73{F7%l~z=7@+eN5Kz9@6;52%6n;68(x?2R)H?x0t)mGv`%AyTL8rZPJxlF`>S% zkZA%SU5U2e^qRLBg}e#i-D)0Vj#;+V>#4iY`bdiIrpDjZNXLKG8T!hU@qjVv1)iJ! z#-#?>Ohtece#`xwi%)klW3ffB-0#fSZg6v|Io%)k0POj;R`iD)YlU~>vcl}3y_cq@ z$~rt;fV7V5U3{Q#9C|-_w@D-Rqv4yIye@=9^?TxL$w;<_j3&udWU;1l!0}2o`2FmK z{7+X;p%`%uNaL+OlcCflxxB;-2PQmbZ+hlARM-q^49Z=)4;1w|Zy64p94@N{gc6O~ z^ouPm0bY-Q&-qf`P(Jzv;ByI-?DC9Qut+~EJYtF%1{Z;M#*yt|DK zNDrink!z*ZaDU61_QHdyt@x>skT_CG#(;wPpJKQmVHZM>wT;o9!ofnRK^iUo+oE!~ z8<$cM%Bz1w&PD9DS~toO)&|OaT_gJ^$vq}!t0hdcsqofO{D>&Leb0$}O!&bO8Xrgr z!^)*eJZf*V`fJJX5#|DW=R3X{dd;U2f+@eC?BXRDgNI_)VgaNJs*^d z6rH&>KbTEbPEoWjDo76XJ4uw(psijge%&986gmkS{8`2GK|a(4;VIiH=I-zTMi)53 z8`x2$?}r+DvALHpPSV9-J!6UqSaC;*-OsJRuMk6x3n@L!sm?!x=%%o*SQKW1W+|N@ z;)UvCA`>$=ujGC9Owd;@2^yLhm2RK=IP0TwOUF>e~$P`>WYj(rE zsHbiE^eK^Xs#cy%$LndAeNBk2s-6ewP+KeRVgpZ0@ttgkmmtng9@>cuy_I$o-B#j_ z7U|@{UGZIo82uq{SfrAYSUHzhdFoPC!Kk^RUf5Mjp0ae0k-yN5jS(m`s4>qbB|9v{ z-lAobD()cxKb9i)#x$t`)uBD#vU)qG@pnJ?y5aQQe`*i@sng@ztUylR#nk8iY;nBc z_>_DpO4Y4)qj3fhdMhEcR`jKSN{#L*C~_Rfe|~gW4kk}J^S*D_y14%Y5PBZp`e2}A zv;P#}%*+9lN|@?EY`_P$Y!)Y>A=8tYwL_>?&`+mQ68}WQ<}JBJ)T$Nu~(a zh6q}hkSWZjaai4`5Sx>G;uig@L-l@iY?gDWpr{Y=nZ! zTI7`!_w36$LO6<;+vt}ssZEpoXg&6i7jQOJ+IK6EbTVXRKspK&KTp(*TUJ%X9_OMp z`tyG3@OZqA{7Bx}xG*3ER|c6c-kh#Y7!iA}ajl1jp;P`AoUp%+=_D`nFB5HHeT60W z(p3DP?rZ$5`sLZ6Jca|S<5r65Xc!^AxWoPLM} zQFnFRnN{NkadcGpuDP0{AP*D%JQz}_piPaU8cFoS$(Iv;V6c~21yD6O!@2oLBgVRE zGcAHls)sBWMWerLeDnlspXGzxxnfSNJKvANLk0=Fkq?RQE2=k%q;H!RSy^Sf>hg;G zvDL-xGD}jtLH;+KZ`J6JdH~R1ba;g1cz13zBP~bAh_Bt~sC0(imhjJ`BliQ9h8M;2 zK`v?nE(ah5mXj9k%r;W#)4A7o*iHs`Bjp`>8^f=Y+kTBt8n{(aO&3JZo zst`17%vj74Cnqlh=%#q_bD%lp&5v7Dr1d(0Z|NpOP^GB2@|!n`I&5FPGsUQ$99K^t z8YLDW2E&e(d3bdFrI{Y4ZM|3lCu@HkCr4t5t-XEk{bIqFC zu@UZHh)l|Vw*G=zT{`~e*c4y{8!)HHfBTU(F@i;@WJR$jNxdfxqY6(*uDaR#xcea+ zE#o~I_Q)RJA}qI7x$>1TfiAT;i2hZFzKf)U#Jk~M-gN^N+}Z239o*x-Gfa6|Nx9C- z)?}3(2mf?%^?YvYN&5mzwm!z`pVo31FSd(ttJuHl1y}Bb=e$Rf0TqHdhA^f>FsQyGu^=9@y)7iuTIEV*NZa*ev(`5+%xL*;5u30D2oYezK$YarSmyZ3z=Oxf8-a=nr+ z%D8^}e0VgJM`b#KCY;BXRNlwv(wJMEsKw@-x?p6Pn7+5U*gz5>+8zQ=wrfwh0KaPu zbw#9Ge6pL%TPqE-jvH%NX7+qeJ{}?{pAl&pP0aNrROe&F{;I7OJ+q2n<|mwO*Qur7 z)p2I(!f8>E;jeVhxJAUZy1icDs#KYel*B)u=()YO7@+B=I0QIT631NgR(N}|35_*q z#}2_1)6DqKg|{0;@(;S+kG#5{Ew&+<*G|r8XH{?a>Q>vn62B{gS7l5Q&&}lQP+STl7PbX~$*+6Lr&966VSf5a0*s2!!2z!xoh?o$!T-))y*IDX^ zu>;HAXP2(E$sJsCq|ojb_wB9CVEO5XL#3q|YM1p^JUoOOxl28*DU9&M9sD2J2KBis z&C^@-0gKW|dV|lVXfw$X@piuhU)wqxxno)LgH>`r=EY_j0(OrU^3g9NtPFlVJiT3juUQ)XW&3x;#26SN6}Oto;(>dh^Y;M{vcgHupoZ6wZojW=tvU(Q3^*-mh(+QP0y`!njMI+^*%JiSrWUj%vloNEY-YRpr^ z@Mdr1v*tNGiL#1!6^5zDE5;j$dJJCVwVy5hBBc{Hv8@NXZ)(iLDB1!|NBFxHRcx z+1#=Xebor-Kz04{yKF-lOM(e{uz^wxxJn-g+-}Tv^X#^z>f9&!nsuNghV1*<_1-8g z4Fawrz8^BDEH_=;0=oy2C$A4{{V;hJw+X+KRx%A%-)(hP=HK%k6wrD#1z=dtvyFH` zr2V5N7$&iy8Jq)E@<)YV_|#B z6aq>Xcjun9w_W=GzHf)2`_~fi*}iQT$|)Y~&bbA5Q4DM!1k=(-x^+C_&z^-|W+WQ) z@JaX2#8vXL?19yNt49P=+SnIAO!L*S(el+bs4w7|Y+ZDE%=cilQPReyu`Sz18|`ezUSl(Slkt z-#kw^v<+H5GCYjX_uqVX(#Oq;g;oLwv6h17A9@Vzuzx*Oy-Jtq-$(<|t)%NHY)#Rv z^jjmZuRHTy3qHL5yF-@b*@I@rSp92>T73EQc4p89vwd$7o!jBwjek53KlN7QUe{Y~ z)ZI|gB*O~>*&b{tQK|mcDK{1$xoU5m_RjEvx%AK);7e!Qpi8+IC&|MB1&u(}Pdyy0 zQS!XeA(>Z|OGKpv6URmk6?GrJ=Q0*IF8*9_v=U;v7THiW@;d%W&p96#YX&{D*?r(u zGL=6Wq=(HwMbJxtb# z$oAQ3$J;b1>A(A0uV%KDo|JF47ai^Y-Dr?%V7BVB+smo3c-(3?>#bAT2y72UPq}bt zeX(BgC~~R#=`IX$`c|?0_{Ih|{i|@b8DAs^{l{e@Vy;2Ed(+qE`kx(Z>cUR40OeVv z71?tl0r^SV#k?Q`CO-(s;)5Ugm~g8RDR2aGSqTszGwEA+^$|` zrYw!rWrWiEYb~_rW!7A-XC=UU!kAlV2nKP>+Tk3F_O`YI{@Ll$NCQpLLQ?1t5}(x! z>|Byzap|x697`xWo?R2A)g!!+I*LV3O3^>R2_kV~H6c|ON^L~%8D{Z^3$eKd)*V_r znF)lV?f{OZBurS%y|Y0{cvX6h!1#8n2q_agZn0Tj+rYm47|3M87V?Znfg&xT`Yc)G+ah9F_@v@ z;c;wf_*|uF#WJMS>bo_o5;5k@m}8PP0mF*(Z0zu(_2?mgy?L-N{=yo z`dt&^8zVo}y7ZM$?kEYiOi$8qh`!@*+LD8%?@&^Fle$>fX1083VL<3et=_y6oIDa& zG-_b14F2*yGEOP3d)IdOn1Yv6nbl{9e`71zbf)|^4}3+-neqygPxL?3 z)@04`TM{HcT`)jNCKesD{snpl)9&w`8spJscb+`p`sMV5@(GUnppc9UqB-=8x&N$M zG46p5kG#5r`RgS`x2*LNf>uwgWH?zmkcG2Kvf_=U#=jrfq4E%AB~M&F`PJUv26p86 zu2je=6*r!1w6@u~`Mmx3#v(bGa*yu&^77Pr#s-M&9mty={yWiwUC`3qHJF6e6r>x) zdxOkC=o9xXlSw%Q_0q-j-&3^<)qXjpsqb@9w~0wf(ROnK+|PKv&(tyo1$LYBNJpde zXZ)%0ildZam|}sj7&y9`8SV#o%uxAEq#&f!_#X`z~Z2O zRa4$f5(;|kU2lt!-9SLvT0g{O@`lZsLjy-hC&g0|IS%Y^~?&x#|#>^^dWp>TiQB zhBV`&x{&)NVrD=yA>B<;tz4tFTo2TgZ9!&MoS&jx0cB?v`Iq5*eXf0lNj;5yj6`>m zEFfU@_I4DikDzV*B(=INr%)ELF(9CgE9Wirl4kvUaZLiYtg2;i&#L8oOr7pF>w}37 zHlXw{r%|(!N!EG|vcR%NUZ_?ILVcm2cemg%C$3BT6EWXQNS->bsKbT74ajH0#;*B} zyN8pTp}&oi&;|?2?SanfSZ>N5i*UupsTv6mRlwIeL%uW;4c*?We6HgS$OrJdNw7Qw zM1SkcBU{Y#PUN2_Zuh*r|KcFV;}^0HHDK-f@rN_4uk`9gsC$Nb&DcLN@5(eGwWdv3 zuV~us*=xQ8)>zG#qyK>9-Zr*bVUrDqwDF^=`T~`SYmx|G9r&G@?g>a>WgYy{j8)^z zZi{F~i+xy1Y#|TH-&xL>1O%Plm>_2f@}f4WKT^8wMFp!Q_)byA&k;R80~jGBR>QVm ztx+piSVfzczdznP-aM+VO}L_(x)2hXLvML6${^YFIMZY_!(6i0?-nX#8)^94@r%C{{m66>wVoc0-zviWG~~#;JYOBZPK`)6L4;>gxOK zt7!AZoV>V}z)VG1R7=LoZyWpy(*tV;Pj4JV{>?2HHqEoR*tu9NyPFA+ziDhbvpeNFYLuosB$|d6 zYHWc+hic1$0t{nW%vnwNmEHTsQss(eo;N<_Zl&Tt)~X7@5^`hm z;6WbqcUmUX=jIkYV=*Dw@qjliHsqHeS&ghf&2H~PMTRu#9T9rQAl(R(-txHnUQTIf zB;Ao)a?^kiJEQGrx${uuCURY3WTh`B$aehRrm|0MdBk|LCl#g$^0jZDB7(oev zwa=Ep8Fg-lO>{&6W-gt(IJmQWY=vxMOm!fLkJ|2V?(ry@Ya8)=CRwyS9qrBV>>fNH{=O`zn z*Y|r`i*~+$iHi+a%oi&4DCe0PUK^HF;7jfMO+0UTpDJC7kaxyJ%LB;BL4Q?Do2|f| zo~(R3Xv1U+?0d6a0<5q$;K+(Yp#aM*x*|}HW?0gXHs`;?mSvZp7ACTR)Hm$005;TO zhyA0c9v~Ab9eC|v>E%J52GbpUmLE`o|3}qX1vL5o?|+I4f{N183WCHy329J~7LXb; zN<~DNqhqvygmg`m6e)>;#2DQnAUW7z^hW1K4j6oX`yTuc{s%kX!SmeD`+i^7^}2Si zmhH1R`nc9zS<0?!Q&A$!At=v@Y;nI}31`CkSZA+?KRT{2d97*pEoxAy3sRY_H~lVX zUrc-)LfnuQ%r5B%B}`3}T4q4JkOwjsf-^AAQ>*SId^vOPjS@+$9as`9e?<78n&Lv4NV$v4lc>4(B_{MMeJ0g2af<4;nnHVh! zKl1<)ZAf}Yt`gv(it^0UE2a;-IgQsw64GWmd5C>qEs1-?y3?BQ*rdwT&-r#(RvFQv_4m{DSI# z4^)7Clf;FTygT8@^R_?Rs0*|px|p8U+k7u- z$EOW!t801;ADaP;FL8(U&8SKGl{*-Fw`3_EZj{?^Eq>`dGkB4YGxk}A%(ga4SSQbx zZU(;iK~eE1vFlkjy2$DIPw1rbzIf?fx#kW~s=OF>Mndp5DGQd2O#Lm~k>{6IZthn) zpR`>`r2W%Yk__V=!uEnrU!-@PT{+`?w;5k2nCaOAaUd9m%kW%VE<0$}ku)C|&djbW zHrCO6>^$q|vo8z3KI8>4FXHvii1v1?GHPszM$g?b*82VGu2_2 zp8Wmk4&ylDzNLx`r;4_;l3hZzBxr2)dP>(Kcuw={H?u3{7O#2gW_y*l^T{3yAC(QE z_{%M#7riO^*F~wQ1Sb18^Y`QWeeC^K_lIdab1qqu!+Nh5%t1Qnj4c2CXweAXP*Woo z* z^whW;l`XBXa4CJQMaGh>I=9{ljxo?x-Oa- z->I6P>@i~ac7Z`M{0RDHo+R&b*bkt;CYsY_7&*sFT#cw%tr^ERCBtayGzEJCr86;9 zP-jaT_5Me=LSiwRo~=nbPfAq&oL9y6R{*d*^q4&QU|S(GXC93#>(;e3IWj7^GCd8S z>YLpc@z8jZf&EnlLO&%2g)KDOcHsV<7Uq>wIcAxJt(Z@CuZ80x)!~9waOdxf*pxQT zV7jK8i-FF^)Y!m8&@fMvaKBVy_uo~H^&Dcc@>Sv(k9yl_T9kxWz7YeZc3bFf%V)b< z#T9Co(p8xGD=KL0_s3J!dix?hp5pr0d1-M;WU5q}Rif(@pU9As7s7N|#JzjnMXwx1 zwRcHY7DVK2m#ELJU@$3R$gx=PveRsePvB9S-dMl`YMlY^&@ec*B|$Jg<@-z_yW^5w ztMlx$jjL+C=~|({0Mq-#aUf4fDs;cVF~}-x2=6ggK;-*8gd}v09&Wp1W(1h_I+l84 z{Sq1XF5t8Y%4)wHgMbm;hrrs$v-kDAc(q?20|q}|=fCAjZJjGS$xbvzH|!o~Nx+|M zyc5gd|Bd?`ADFtEw>$uj&$MT1r}e{xNH8dkxQ7N`VB#GmV&ta2{P@`8eyLl+9O)PxL$%-RuM}@lb#`Ko1Wo-+H-H5aCCn zDX;WBWG3?7?+(}pnoUt>qfVD6w4;FEBI=e(CA@p9Dww3}a=1AqC1H+jMnp639O^D1k! zp2LoyN%P?p28Tri=YIhGr&NUXM{MHBkJtGE;;oYXlY()Rt9-hx!HWqr>#a9FIdAQP zpvGohBvx*KeBX{!MR)7fb>6#3ROo=Y9-bKKpe5`mP+(US!W$fc3yua-9G(6He0-Pk zTDI}}eH`68E}y~uSUZ}q%uIKLNU?{KCDu^iBH)0CF4!vGS8z%WQT>DT(5}nrDaZ>crBII)4JFH0m@W6QBEnr>nEoh9zAj5JhYZmXUFE%7zwOZ!Z#dZJMeg$ zH_lJD{z zFMsU?_Y(O!A6LLeYa+0zzVw5FTQ5G6hvb(MhACoP-8P)H)ui{F#%E%`nYm*O~MgGNi8N3!5pfr;=O!=6Dcs|;&)`uzu23fz><4k+E z87_Qx?J5*DphtWV8RFTVHzR``WIxpodMcAyf1kj8)Kdw zqXnI}{HRXd@3k3`X^a}i^99UZ4(S0jy#E1oyU9@KLgO&o#t4=1GN<>fs1Ml4(e9$G zc=fJIZMDOiqDT7NZL+@`o)NH-EmVU|?iR1muMd5xkoXDIUvVXHamY}eY(dr_o=P%9 zute+4uh1K}m(rBfZ%ZGpqE9fHB~s3()5Esb!Df|zOBE07SQ$(V&0$C`psBf-(|I6f z7dWq{dYL#Jf*ig(3@vZ+Zg`gmu(RULsvJ3s*YIe0FhY^E!%zFGD6^plH^ij>4t_s= zlWmy$AAmD?w=*ih!y$LlsrUmnEyhWLoBioO*LuK#V91*Ex(RuAadsyRueRkF@Qii2 z4{r7$;!%mhYOz9re#>i=l4K5{CB}{L=%55I%(0j!8e^UNzB~)e+K^6lvo>zKyJczDx&(@Nu;$gKe% zc?U{q7Lhg-(PV~?GtslXQyWd3k{y@o<46`jj!Pva>L^7#3N-x0r9WgKvJO>J@!NPS zuf_0O)}CSTNe0L`#%)w%Z)ysRX{iV*Q31_AZ6safIQ4RRV*75yayh=9t!4Xra5JY9 z1+FLLTp?5KoG<)>;>v9|K+YR2P;|LlQp#Ql#ye~wCd;tr2qy?0I^i@fbj@WS@e<~t z0>-)xuP4xN0v#TlWc_q&UJTgbA!Q$=W(u$x*s7^UVN6+_CdA%3iXlub!4+N#O3oNu z%aLUURdN+rIKS5O?;|R4PN|I(M0X9-d%te@s*X6{)eEs-y5uNFE-4R`oED}wh@YZB z1vf6#WEf*=8Z-31gS2sXIsRUujJt?Fko+#bKpym&1fiig~VRuo_*{%PBrOEOsEw%>+Q;o-L!k*2&f zB+ZNk2I#vD@A!^|l-snihsuE-uVB<|AxXBk-TLyr?fxJh7O~a68kTaq7Ac0U^{_~f zjBPS^TPzKf+8H*n)E?oOSP1-lC%dlO*Y`;0MrA*oI?_mrmd+b`zd}}wia-!MLGbpe zf0f3i=Bz@?d4771!h_D%`7@wXizoVv)L!L%b1LGlbWP{xY+;VXK-8BrKC)Zfq_L~J zrr#|oSgG30fJ=B6W{A(Gqp~(;q%tXq)N9g5GnTe^O2%H?f$Hi@i4f3&iA~#Kp{~~q zmn~YjF-^9G8*;=oOd9sqtGgP%*xz06o#lH>xe7D(NeR^(h6XYg7hN?-6&ufNZ4CO5 zmlw1L-axJ)oHH7RJ8kYYkhTlMepy|Y+{q$56R=w`{jj0rhCLZq6(OR&mNjWM7$AW~ zxR)Jr3}TPC_lIadO;F`c0?@qom9-;CF3IW1@{G&#@*+ptu;J&y0!FZjCUxPj0`a6{ zn?CuMmF>3-6b8lW_ImY>dTEdy3KxaGJS3YK%+7;Da%@+(*!-wYBbORRPtc_-UI z#Qc?s|2rY3J%(<&m;MY;Zz0;3H}WLp{Os2SPS!t-YL8Adiux4meZ`NN+5^XqXUn`F z+2v=2`Mdr-TW2(^;vGP6;q0^TDl1w)mprXOc6fu5;*j|o0y9a@Px&U0W9(>QY_P5d z+};4gUj}Ns>vw~PK+CHW>#W`t?{ zy)AuUrouWeV+U!m_wi|*5(A%FMRtPuqNxcaE{jPGm#Y5&Lvugt9$0AeFL67_?@nSW zy8Ib$!~AWiU-K-C3vh{RfXOw`UE1OZm-E$=k+s(YdSyG{pSL)mdg-zOtsxJVT^Sn`}Bfs|au!v5#Ebn~_2t`rA8aFFHP#j%JlS@yNMT2~(jX?7; z2Tzm(0{l?#db@C{1rVvOGS0=I=lPePw9Y!yo#hjf#yKm6!zs3q1&CN<-5joc{Ch~B zRkBX|X^OdWa2dH5RD){9~(!v`h8Hsx!Vmie?>%oi}V-#>T<(3Le98VWJh{B zOply|ls`N?8?=>Ra)R|EYRh(E<>tW=1O8J^SnF#r;{iNx!D8d+FUK_Y2Kyh~T}cKZ z0;*r6X>vLW$ZphS5j&*eTkew_W-Yu_G^e8sNs-I@aT5@D~GU?#IU&(udyQrIe!G%?=Sj^+5l!FGjt*x>qqfWsuP zjZ84>x?;c0hHl3pH`|Tr*W9PIw5x{cZbs3_3!C?6;wrvor4l~+D$Pr${?iEdy688^jV=O8S%_pU(Hx_z>x zCg@Vk$Go&dY#ua(CvnrnmOkoa%vIR7&KDt!lg;0ubOaS2y{e2jtEbuf9o!gSigs`@ z@$>G%SXDV%h{z7I3T5bPp8Gvm`ZpXI%t+BMCYyjJ@*1^20rMY(>V(eN3Gz}r%W`NP zv&HL3%BSXEFnY5(DSl6@#6N9jKA!24yvw6aP>TgWsU|2v=}%RZ49A^imNNQ(Z0AWm zd?)?aD)I45EES8a=o9N@%f&uo2a|j$_&)Q=t?L{^S_U2ot7iQ>%MvZ=ryQaqM{aq~ zYVfle#>cE#CmExg6&fzR606ThUcE63XcuUBVcroOpxobW>0?za5c@yaQw1F)o4sz& zi)&Yk^h$nUhet|*RjYfoi_y#|@M^H5%Re1Dkc#H`uf zmNVzd`nS_q6Ro#b8+x6pQaS(t-W>R=T2gQf_1bg=5mM92`QqP`{v_$=|16#57}LCW z9vOI$Ulk1AeSQZ-ac(%mj;{YXVdKpgdnc;uqUvlZ=fDbePV;FwzmtzBTgsPj>9+FJo?&`BB_mq|utP<^an^zmhdcY4i0i@)We}#YhHzdmTq)x|41mVMM~fNDzBz7B_`)(h~v z)2f^+@u{mrQCFeJskuU`Ub;c*geU*l%1@DTLqm(plT8%1zTx1sqcf!Jv~AkTk*o zVJ4yppKm-$Z)n-r5Ir6{J(3HsU&vtrlfk_fSP5;*zbK7;XO0W6;qoMc3;7uk*{FW? zC`oY4vOap9rv1L1n4o=C{wn{CWmf|!5oJAm4x6>(pY>CCVeV2#t{sq>gA_kF5^XJk z?e@O7egZ9wG^qbk{#fFv_|v=VSbCKWrdKggG0)~!g9zjUaeY`vW`2Ikikq>y&RX-f zLWA7qdrP8lsIqzK$A)Z#1H78*6wH@$NK|~E=_8C(U$CWzRajHq=1GeK1HmXkpzEem z4P;q@=E(vhKb)i2FRfEmn0mol7}%|xbOPq>dNyR!#U^Q*UJmG}zur!}(xW9y+gU^M zI*!`eIpFe7t<&aIh|;`rk3V~UE0&teMTsC(!PHkRwZtTxli5jU?R>LawiLdFYPEM> zhB9|%Kb%mub13>(dM)3+Ux>Jse2pN;?Z3oKP0Uc_%E%rTPfoKgrhm`)#s|G=DT+4` z6ZQWOaA!S8BEr%$Sr6mRZU<ki>_cE=wCcXq>|_6RL`Ky#cI%m%#A3Ys zvHWp)STFD831y{4pcJ*4*Hq_fciqP^IgV%X-?ynn#65=ix=+xEJZHOjI{4eDn~g?V z{VZ<)0B(AHcgZL@Rj%rBSsu}C&-J`(a}McJ@pTL3TuC}bM%EUB2h)bexewp0_Q{GE z=*^88X81qcEXXOX5`XQecAG%`J$LUGbuuqca|Ln@`|^Y?C`Xdx6*B?SSir5x zatG=NM^a4?%7qrF`#c2r&VMlOy#ZTr_dhsT$#60-iawWI9~run#bI0u&U3N+xb$nQ zCfVk2+kbwbaBrZ993RX%y^eeND^SyyUb7%d{Hfr=XWuqq;x9tSoWewtK3n+j^(spz zslUwq-^@N7pXDE1{Q5K8X#m$NN(){D=W6 zKN#Gjiuk=UmAsgmf(N>1{pC^&74jEh;)-E0&W@+L2bs zTpxazdIGMQVM%Wt0`BeZqjPzwxckwAm_c?eRC99`N>td=yFae?(hrYB6;ep3M|-C- z&!R0GIn1g)OjEn3=!TF9Ltof(*glh{EA7DFVH>w3^9#;^r;S9Lw30H{s0<5R;8G%A z7PA123Z3{ICHAN!h>axFOdE5p@+ViWw0Pp5&xwNOCh$+ZTI$1h8Rl85t>VsVt!)ps z%x}2XGBeV{*5@~ktC4eYb9;_jKVaiKxMfpM@jm<1NMH2dNH{W-SbGt4yxoNUH=**u+P@6_Lnmkf0v?P z?$iO)(jUKH|LtiR>amPrav%qdg@%HAKd9;e*{qb4Yg%j&iOkc>>bD-RuZNfILfi{Z zb{xs5XXJ=)Pma@f;4*9;#gAt66j_tBo&z5I3G8;7B{Otkf&i5h74v_DBL`iicq;-CQDv2t&O51d|EbNgD{$sd}7L#<)B42uQx*bWv&4+yVX}5!eWE7 z9U-ziV$?D$ADNm*NXe*-)N~(m`Z9D%3+_@|q0e#7-Z`gGN4z@Jm>=aL(+H_{bmKG- zfX&>T>U{GEXOgHhV8_jDOpzqgeho1HZ96lq$ISqB2ESAr+|cy%=4~ZdwkP1va&Fp! z*AriQ9(^Aa8SZPmq$5A1x*K2;AQ?=6DxDd5LKx1zFKR#vYmCp#zS4+NH>WNLr`aU} zOVd%~!J6B1<TS{=Pwqn+ccO!^4*yt$8-I-pR70k=<1~VboFk+emZle?>oexi{#_}Ec%wQveXF) zh=qqUZenM9tS?{}rA5-}2;wI;7StkOJzh`A;#@Qc5GJ9EqlvH3%4!`Pi+eyl2XkkB z?L@^&&b6!B&hh!*ZSQ$1RNdt9n>_HUj&B-gP|EO!U&q6Ft&G;S>rK33SQxJM+gZ;Z zMY*!JE)-T%M_`~INR;O|1qGC31}?8xtlAZTiet;*cagtVoFs;@`Wku;=%BOI3tpI3 z_XR)tkPY3==1L=e#wF+$mOUGZ01;ci9G=^Dv8M~cOD8-1_#Ja2Hca@k+0*EKmn8qU z(P#dA>AoQytfISxk9hI(h|QSrOG*a}Z-0 zkxn<&m8%Uux~Zv|7tY&BbDDAS?4k0)Jk6~=zagAL)r_$~nL0_9IX(A3Gy--v3>1%rfAS28 zc(&e#l|Ca~iLtx7l$Hi4pVr1{x!ACL$PHy=*~kV~OBUH!&NCFew;(*ObA3h&@xbzw zm_JE@BV5D+l4=SxMPW{&R#<~MY7W-1v|bMao=e}v^>$I)Cs&_O%)cbD+!2o|0cq6T zs(McoGT-W|$oJ_m9sAiUP+)NDA#o7;7d~_m#W=rx`RKrI|J<- zBm$dj-pt5+^6d%AZXL=e!i(a70oT2NO(yF3GcVsKF2Nnzc&`ON|$;R)%eYnP0poMVEmO%$--XAXmqm6Z*N6p!Pm@!l? zRuQcYFWdaaD^)XrfI1Ue!za6*u-ZS+7F?~pPH_X<2w^B1l2M35mFIJyda2SIdwR^D z)uatDHJ|Dc%NGu+0yp&@7l2u3&cnQyYZ{P^Zqv4M{*UL>s>u;CH?kj&?E-Pyo%iZ~ zaKN`m6IkDEwyP?}wAFG_#w`8=*v)hm&c^=Zh|42;6V--U&3kk1AZ=OtYfoba9{i(! z_qZyn4;4zcLD!B)tdGIkTX?}Zx)1t7_qT5+veH|`@a3*#p8utYQ2hx{U^5Dx7D1L~ zoiqxn_PaInn&*>KK%0!sypj4v#>kcjbwrKTDA1ZvcGd0aTT=dBn>}i$hiMBgH_7uh z6JGjC9eAa*+RsC4=#x(b+U2_hVUDGcgTjv&_eg0J0Ticod{&9oWY@C&naoX55de4X zi1#6nn<<4S7#}ESUDu2jFVCxkDWej(p_=@OnjVwy?Wp}(sqdGKBs+;Gyql%;iA7pB zMMQ+(kL5I^`{`-<__xGBlY~MR8QCGK618La7h%Q@{JC$oB9kTwd$Ph^YK)sUd=o7L zZl0}>=%4oEpFLf zj-$i8evwp}aj$w*Q`3WNH&-h=Oam+GoTEqY$cn^1vg%%W5j|z&D^JlE?y9&0YcvU+ zBUnYeB55|#90EMc0)xBf#3l|hAdqQ&ou6@+yKLAdFL8Us28TP8VH=Xo_b3L9S`5aA z1;WBSL2`M`sbK4|#vuCv+sKxOX^a0{Kap&?1V!fhpHI((dR4_ zg&nHhhE*MLczqZDV#NKg7s9*bfG#>=4PUIM=+1H0Bdd_2HmOl_qLjO_Hr3`U;Zu?+8UD2_Q=%TM_Qb?TN zUiSn0oxaW4W2l9tCy6c2J-`uKV7Z~T&OFQDnM!GErRm~zi4 ziA=y1_M7~D>wQMAD;T4CzarT1lLh3u{(Fg!Z?!&BusUXKB%txrT)%f^;VIjXKQG(f zYrTPSA{s?kJ7{Qdn{G_}F5-lEmS>DYAX}&^>%g0myc9KTfaI^&amHI=z=j%Kj@#_q zH@qnunW`+LfAhBxP5O>11(+C_6#$iREb*d8U0QSI%_D(jalbd5d4!vg9`n)eYt=;? zI<=20SE9D2V~O*gq_x0?i7a})yLt;8=?_1|XfG!|R&wvkhP7>KwX-dyZ2JeEUcIOW zv#jgt6zs|ui{)?k*Jo8gCCeLWJ6*29^17Iv)TUl`zqQ6*z103nIx}U1iXN{~R(%7}#y4N*ruTNT8bda0?^UK}^04YANWrm^ zy`HltnGKf6M!6ZU;qWHVg=D05(?`43Go5Eu`egfem$uv6R6N4|(%wg^3X`SHi3nnt zX;W~`&s&rC>ZtP1AV#9e$Q~ahA@~({UP%8_{$^9Q>XE`Qt8EWwYqXbtnG?0wl!WAN|Hrc*Ywr4EiY=2{b}< z!w(y*z;#J|u8<3K znmVtCAL7R_qxWi<{sRolz5*PqDS=q1=T7);BotxOY5cA2X64_?v@hL7@v)L&Rus21Z594q zbF@XyoeL1ly5_O(xscvS>}<0UBHg80#4Rw4l^ri9UFo>F9n>OJ8Ya|e=g19e4D;)l zNB_hHGY93=B(|=qNS}|IQ6$S?{nVmM9?s5J^|+87wlV2@qFo6M3MxvslqOnz>$)XX z%KrnXr(YlYB8Evt9h(@t#Wfx}_Z`-DHPA*hX(7n#GC=y%87FCh@8SPiUb{E_`P(-% z+xyv%@Am*nH3Y8*ggG8>+pA1|zh{JDXEPn-dHnhwNpTI^s^X15DRiI2q=({K+Z;S%#e@9~sHxlrY2 z73-X(I47N($Ujm;jYpw=Zkr<@;m9VH3MW`9&ijRI>-VIqB>WaFo|DsK`hNOJeR?!HjXBFg( zP8(_cX97QVk8igae+!&{DsA;2AU43-AKy6TA}Hx09xEpm>fS|E_x&ry)npB`4PtSM0;qecWUa(8vqYre?%W;~| zSls`gdjVPR6_w>M1RN!Hwz%Qy=UJ!7W7ceQ`xZJzg0UQ5zU;O1lmveWcwR@eZz)gz zRJ~SpnQ76P`Q0Bu7XCz^8y>L`~?AGQXW4G|*Xe zH>6RkpR)3j74EhXWDRWgqp4z*_hdhu7i@$u>Qg!^*{iWGAOSCSVhjipHN#A67veE` zf8hD!5=CsqcLEER?ZRLA1^j!uN|UY4JvK|0?5Tp)-sCe!S*w}&c8Ehob=&LsmpRJS zIEOjQo6BLfn3XZy^6uEWy0`xGpiYkG1Ssy=82kQ=Vcyj6Et zP{tIOCO6>HzpVQ5#j1I_L3C|Q1|Ds@vTXQkw;qB|`yyL$lRB_FII+h8`xoxiJyO^P zQM8CTU4D!qHRt}Xn;3YO-olxlx+Nvy>T@_YRDlgGj{39of(HPXPZV7KRgU>UH_x zY$IM-&uV?b0&ly=t~EVjG}urOK=3kBNe>6XH*H=!V$yc){RMO+lkO(za9Cy4_ddfU zM4nO=C7F3vYije|v7Yx4;>P#qk7C<0SI==1n&`}QeT#XQPLu6NvYVIzV$Fse=iJWB z1~#Vk$v2<50X@g6`fCY`yX;OjlGRo5qts>K-?$tP0h;ZkY(h?dIYoVpqVvlMucGO8 zG?{sgsdl7DMQ8PLa%Y##gRv%ip2MtynTC+yM9ZG{?t!687?)VevodmmY1S@cCw+DJ z(Lcf1VvA?(nnRD;4rw`l>zcU1;Z)&jzJATLRGpEtCUt4)Y~N#F%n88-o@;1Hx3%l> zW9-t?)AJ2bFBpJArJO?@o$tWWl>nwTK37JSQse247U^m-)G^pozvYJnfr+NxT}Sv( zmM>m5;qC^fY%bXWnIJ^LNQrs~w>9_eXvyjtg6#Pj1ZZu;$A2;%APR=PR%v-t3LtZjvl1 z&$>G9=QSQuE;U%q|Awde66I^#@H2}bc5HxozEj$69&T>n{!i%)Q;Fx5z0dmA{5*Hf z2Yu!9n~o^AU?!gH&yhO1#{sAn$B*+(h+q|90g@?D*al63K#Cl(qFD3{gC~;?YE>D) zSgd?$COx5tQ!<|U^~DgjrjNRP4W;(4$La_dnj$440`#ftg|VHXj;%S|46q}@xU4+V zRbKg!25Cd;jZ)ST{`#(Y+}Oee^vd;TwKMN{%5qhe`$a3$>Qzgese9(fd3*obty)JU z*Zk_*#{f;@am;}~9kcZ}4euyLf&T!W@gf(ui3XMIZ3#TKwjv?2lQrwmp-$8%AFg=D zAP#dCLQa%oYgGQ8mwBCZI|oSTc7#S-&$A^jzAQh4?`k5GY}@Xs)3RNJ{6(6JIgVd#CKVMyvYcG#+uL zJhO&LEDys^O7QDPY|zjT^Y}hVRFxNRyA|y$Dr!FQWDC9Qwmo$y-6Tx{?`jdfun`MzHk|iKZ!s%l$N%0S z+Bk{BW~occgYSutrn5@6iqy#Ki1}OOgoT@tk+L^sYxr1fGQP?I2Pte-R_$$nzlPA~ z#p4?!BW$F|j~BO}908RKNH_4y7Oyw%Ojj5Bmv;cvz$c&P0edrQ7y(^mMwNR3R2I4p zvNl6NPI8P=-DLI^`@@|a3wC9>_PEmjkRRh4E#et{2n*a5;QJVkg zoJ(6_it(0%9$j~AJ1SJ#>MX8}X4Y;cEZbz{lVcVJD`KHu&s^{)g>ij*tCk>?vvdT_ zN-s_B0YZ%lhF-jKA(UW|jPCj~z#Xa)KLPCGPxzqFOR$yY?u1Jo`KA2_U?h(`P# z%PWQm)q)u4@S>5pXY$2Wt#V3*E#>=(ff%0h!FDU?XC51-#9yOgxoRT=Yxtvw!a`2T zBdd3&PsHscU7c876I+qzO5DdDltVgHRWmxMP<{gGW=Qz6_}BKDX7`e?MJkWl4Y^6{ z>GKJeWPps`pyKWelKpt{kg(;Cmtt;rrcrc%`=1b!%jkq@|4?K1B)&E%4XD1(TC7Jg zdhipmMlm0h+!?WRInl>XASK@58NQ{FCK*(g8+F7wmOeIKzJs1VE(UMl4{Mk z^n>q%g(vmtE$NL&f9oPtVWi?55Yie2wn4Et3Sy`zNC>ag-8@%vZ*U`+?>5E4>o@E> z#Jo00)1K+k^k=c)whI9=S01_g4Ag5#vU`cBf7=j0-j4mr5Eh^5K#eLqqn5n4-nJd| z33S1eZ$v&22Td3Sg;YnAJS30A9VS%bKzWe4tn5-yn$oU)dC_*gcfjVNsGSu!^INix ze7SkPP4ToI3i<@=kxfn@=`@)aS+w7O8j8EaN!P}G2}F@5e5)cq&*tFNO|&xG?@BiGu=Xw>7>4bWHL*IJLG>)J zVoyeT>FQjLzbY9nh~+7F4vV^dDK=ZlnqDayDC`Sn(wX%}#!B7dkGE5ERJ7SvvUonI zd7LKQ7&BjpYE9~f(c%MCd5CkR`9MS?az|b1w|L$u$fuK$Yv!Zv?fePPGmVD2Z)2~G zRWj;67#pb3Pgj!I+r+FHP0$iDd`vdY=#(RBST}p+#%H>(?UxiC3LU8tIf^CGyd(QQ zXD!@?AXjHhXSrPSaoA=cY|~oS{baOF+&#}iD8;;>5MeWD>L(mHF`v|ZOYF2qdIK&} zn3*Gsf~QnDHgk=-6rOIqvw>Bcj08aVqE?W54|EtPo#6^)E>SH?Io+qJDAX;%bQ?>k z&zua&p`AMNKp6e~0w7oRwYi?;*lVa~(+z1Of}>Ow$r^aAue+a`v_Aa~x$H=q{*|cW z!)&W`!$;IS*Qk-YPq+xab0D8NWVWjMV%+!ByeQOK(wj1%mlsb$b*VtQv-zrZ5Lt-r z-0RGuZ=k&#hh-2d90i$`74bRX+jQ;e#;owuihrP4kJm{q`nI~2Ri9?c-L%m40h zTx>zFTr--?-1Gn30*_fVWQC-Es0Yr)R)5XB?R}Y!`567wui*6k}sUlqg z)pjl?(;>PB|Mw^NN`e`hT&O8HT-?NRT;x~hCAcoZEPhVo<>ABIvB9UC!{6Qt`zo^X zoi`l(2k2|ywzvouuaI2r=s~wMt-JT1is+O>3R?yn#SWDVn)Li><7EbIO`j)Q+Vpyz zjnKKr^6~gm(+rqaD(3z_K!+K17wzc#P|%lUE6y+T0AOxXLQY$#CKulPfJb-l3YzPw zB{Pjrqm)ZURvo#yxe2+~iU;v(pN9!_hcQsTZjglFOd_}&!c&rS?2+lcX|qGip#0%7 ztm3W3Lt704k~0>3_5wXIx1QgKvRkdPdD0C^KkbjK$HQ#`_P!YBKu(&UI#GqU3kyd)+-)3NTq1s zZn7nscj3~G3U=bkakEvTG7VnHeCM`@uXH{odw*6uU`;9}7cBtizleKkj!<5PjwGkK zsY8!yhpmTnY&w6k`bw~Vs4Au#Mc6}-h8cQO^T$cv)F9Lg>(Et^7S%9pBX;7q;7^aw&44Uad*+#)MjUi)u_Km3@kd1?|_=N?Be>q>0-q za^)lPVVY^4QV%h@CY~pWI9^1c%RO@)$?fgsY^h6t+@VYD0`kMMk-x}c3r|wYbi6!r z$tfnFkYBH58T@tL7;2hv+>7M*ULsk^bLN1%%Tz>J>$ApcBrr#yRcj>HP>H8L-USrT zK5Z82)?`x(H+)f!OPRJWm~F6H{zUORb%t#xsE5Hqe`{ zPwbPvIhZX4DJK>piK4yTq>b8I)yLAB-QT!Uk!NZ)-)-E;$B5ymY%#I|o?+eD1sY)H z(pu){H+`S+=R18HyRE$~;9dqzfZhFGSL*v(u-km z*4XT`pJbGt9cO9zcm5Zj08&O%sm$@-At@>2>FI>7V8AL7`Yra9FIsNe`7+rO$AGb> z?qG+;uEE+)_tQ@wx=uL2#`COocF!_!s=+NbV1f34K>58A&!2fb$f?Z|bfC?u+@i}@ zA3x!6S+$#;uBA|aPiH|x(8Iiwhs8mB6ypXWd~m(`$9?~rhh2xFko=JVLn3`|2dY6~ zBtRdAx<$p_g--0;=eK*D=v`rgs|jL-l~Nf*ha$T&+iG3MQjbKvPfrP%io|1+@;D zldz^vf|BIz2Jz7A|8gFk=ul5r&NYe`N$rA(k;QT|rI)_Opxo>!L$`}lwh&n&K+mOg z1_x`=idg=z_Z3RroWx!{64|VL)me1FJ7_(>Z4IrSzkqBZF*8kH!{`jT;4hH zRamIrqk(xqnA129yf?9Lvb+g#G}c)!#moZ7xBrqOSDmufD$Q+P1{x7QNB6fMJ(>J!Mo@Uk~*ITkKZU_({Zk+x@#wmF1&)2&yFu z1q1)KYE~S*kjOym1C$A0Th1LslN>?8D+zk#U;p#6Xu7*)jI6L0u3c93vZ}6MN;R1k zMB)OzF;3Ei%={M5rEo0;Z?PD@f28z%JHIA{p)JYq-}$AbReokL``kS;|D2Hi^P60j zm8x%otEZ-?HK4suO+6BNTDc#|D_)cZ;F^%t49q``{3 zNFt*FNg4dhu|@WKuSlZh46qobpwRwG-ELZzJ^Il0vto9!?2MmzoXqIGzma;;Ll4c* zClu~e@xK#DPM<8rBlG6pjzKYGY-Bcz_=9@@hvd?iKMkY7tfsnS^d@EamLh3-YxYC)@}!4gQA4D{S4w|ANPzHp_l}qjK5wvCW8Ci zt}`Ue-hN&Yl&73-NJAZ1gu()SyYCGy)#V-<@(0LE{0m{5} z<^Ekk!WUyCZgBE%2X>K%X4I16D*)PNpKMl)DvjjVx$~M<78^DN2vk$ay!LG-;oY9* z({nLPV-kD&!=`6E2b>1Y@7Y`)L$`j`#!vDc`{7$G<>1_ncg0miWeWyeqI1M1AVtc} zaz3g>5<_kl5nR&~IwCF)dw;A01sO9>L539{8IYYbPR}$ zdQ!UJFUiOjvxOPhyGkQFMbRY9cc`%#2({LbR9bHH>#Higx4N{}g_ZNCj%*&(nOG}D zog|+;Su2@5H)8W=MjI5c-8Rg@XX620f;ps{X7X_2oMs&N9Rr=4^KA>uw}zGQzV>r{ zqlL++PQf&BBnD`$GJCM`hOC6QYLE*#G`!I@%HiUo-+3Uc#2S1AMiJ5Y6xhoRk;~7= ztb2@NK5Lt-gVXuGsyUoV-n3q)ZXcO!YI?=I{9Paq{;9TD(jbFHC&(Un+mLkqtb;or zaYqGL`{Cb!?-(3YxkKs9_}{;=TN4`{a-Uot52{)>M~=mK)_c~LUtmC6@ba^~e|_Y_ z7AadZQ~Uw6ph6lQ9NE8fYWcyHmyeW+vAuIJ8#E^S4S)Ry;iZGPQKVrHvdNav{Fd^T zJ*of&b8Z?L2)__O1ANL+ok2omu{`oGpeELUbQh*0a;4HTF!TK?mpLt8oECw~#pRng zq^gIsF$)?0m_%RqLMmT#$BM1C+NGZuR?PN@hU8#%^^9GJI;p6WXSDo*f+L__;a zLUP6$TKQnT3l}Ia?qfDp0VEyE6?F0}dxC@DM8chbmt>Pts`XVf8{3rx#tBX0aANlG z);YmMeWrihc^^lLU5L%WdvEgM!bMBG2*P5Pi_uFUfB!+%7(M56Mgc92SoK}iY_sSN+&yBTqdn{@ZGYW*R!|7EB%nTofp`k&?7BK!1FlH`S89!;jHs9 zD{DP@vg>{CYwv424L{Z1yiT`=N+th2ye%vJtzhl$91D906-oF0lF@W&*h|qlil5if z`1~iHks|ztr4tWqa@>wlGnZi~DKIjO$>BMV##(;VxulMse3np7EFnLh5UX%2+Pn>k zFi$NOXQIV~6Z#B3v9SEjqf9VVezj=bv@?4U{K{7#7g|+H+vX{)za3(+c&8A4Mh67!VvkB2!dy!-K1dZinfH>CH6aEWV_2vxB4^}-j)yA4dU2I!I36 zKPBlIh^_PeRm&GzyM6^0Ka3)oZ{F_}ixms1jX%M<8K|Fg?14h@5w=S{&72Y96o%tx zr@^U@PGUBH#=gqFV7x|TsW_kbV=Cn2B*TraLioH>Uk`rh?W?}TJ$W(ejtI4k79q_5 z=5P;8jI(dh<#$PiTmtLoajEdT>=7%`xX^8Z*%8;6fXK1k+d~So*#`88LZKb(5n!|E zaDnN#*9`%Pt_r_gq4)6%EoDL=}w==`E1x=@wCb zPT4&=*k1V_MGkU_-y82aFyYy@HAK(VY|MqAYrTSM$jctIimknfP&q@cA`L{T=>$!( zI>ca~xVM;UTZ6SiGB9*$Myt(7r7(xNJAM z23A;a-_;0&OWd0?+(EMelDH;rIC+W?y$wsC zT#nT3=QGf@FVpiFL4%pB2iTA(m`K%RMJiDEZcQvL zM5oQU)q!Od6HK2r-^?J31oPrc7abL2A&t-fN>TQ?)zLAVMoSFZLN{|AUL1$_ZetZF zf`<0OO>fFOe}dX3*%ZTUJWIRy61!uLWm>B`$Jws*IME3&4^O$1x|S?y zs0&pYmM`>+4W7jB8y;I7lVTYf?JjE($6hbo_oFS-MUAXPHG2yHMnBB#RJJXSnw3S_ zgLce?!KfHl$cEQTVErRc?Cn8n^{c2Ezx<F-`~&Lahe0eK*`Wk0`!quEfz+o$EA!ff_t|oFECC zhx8sfmvmg9CI8Curm?lVp1Nque*18Djt)XwTd;O4-3o_Fg`|%3G~0Ts#xiVY9AKY` zRMtTZ)MofWlBRiP&e3rr9lfOd4ew-yMzI;bk;7iJ3iI!d#y|X%y`4Hn^BGbEC$=pI z4U1YF&|siPYT=YvfvjHq3HoUL3;<3y2#LBJG?DX74W=4xyFH=K^6CAP1|H&nXvo}+ z>CoJ}28@^({awX&X~NpwE;7iQ`3C8XkkgQt26vj5*%XIP9BvO|JtJ9qv>#IU0uCbg z!3u&C(?y#%zvietIlbCxcw9`NgBCvo)JiWfEifF=<<5!YQeGfxgW^e`*v6`s%%f1~ zR>+9$zL6*M*z+bE`9yT`mr}-zHRIfScU#*5T9b5D>NIlpuqS>%39KoF3fUy0U+8kB z-jGP;FY~~xkZ>!X1W!0wd;o+2K;F*u#$KX8gex}#9hbEt0gh0+V8eYBimv0O~ z--4#cB~{IE=KD)L;4#ECS3@T1ZSTq-AaS9!1*!Sv#3L0mPF&0*qvf8(;cRWBPy@k& z%h^Y(BkqCN>mGow2&40dnGPE_tTx&UV}MPj8kdO`ibr!x8)Q=hk*DFrU$%wIozAeH zIbnebo}?CcZdIBvQq4^r$}+N15R0~eD!$&gJS(d%hygqqf#nNb#jovD5aD{%l71#% zqF3-!N-nOFxQ#zF+TbXx|xmCVzKv(><$W+(O z(}>-^y3v-7IvgRv;=s!l^$I?!1b5fZKS4ra!W$6{5{C$9>LcXq5?Bcas-zQ@vgGmE zF3O2RuomF-ncP!e=@Zt3k+0LecIIlU-P}TZ3dxS6wKtyWN{?3S@fD%HS!wX@z_|1( z*Kemi&bA*)4rv=j%C|2f3*8#)1kz`9eXAFm%*}91DvZz5>?qaBQDb-qr3IdOGGWK! z6wedH{hV~M^Us1=CB!b0JWD!ZXD|U z32*Eo8yDuJU;W+tc>c-qI7>}|ZY&J$+JuquZK5{&C`bUDaK%1R=s{Yj+~K=_cV zuWn?{c)n4@36hF=M)#-De8u~#+8;}q5+s5YRO*NV#J&0%kn{|yaY#mQKVWi@DpT&p zJ5_3EF=*4pn`*WMsmJeDx)trZA{ZuZT9~H7k_lRW_ZR9{@-3UwCsk!Db`ilst$c$)vI-Nt1o z_!jW+T+-ACZM~d3((Lua6Fv4+`xCs~l|GNen#^g|3|(xH`3VZxxe^w-04zn}{6eJa zosD!e@a7MeU>7r(0qA#N%V_5D%29wod!W%q?ar-R)o@Hi=cfgk4khEwuY$gG+fRSd z-)YSiB~ueFaowSl$t{mF-s|^KdVRlW?P7yYMWcYOeg$q>zt7p`u1`tiiJf@T)#d;a z#Vc&YqkZ`M(zf+|0c$t+b>Vv0L}mSE;6+B-jQLsjEMWu+>nyHJzRr8zR#ZWj#fY96 z=QO(`h`yXW$@ElHUD|*bofV3JV&Y-v2~E_;74+s7 z2J^_V=+k-FgaFXXZlCZHI;E<13!8U$PsTed#-tX&$Q0uU(Tq&dHzTQEN^l(bbVyDQ zWvm)eJ2(+ULu>E1O!Aa7b*9k=e@NaMS$>IlA&3rBV?=4IQkM_zLryqSTTL7)K|aFi zvyqcL{omjTQwFF!^qBqPp-l6BPzHJZ0xo4r_M=xU>rts7@#wFR%x8_J8?v_tyvjze zjRahINF<|4q;6-gYc4F$J_)hV9Jk$NUO2J)7ufk+{ao zwo@0PXA|oJ$aXlFI>c}pE(DM9d^){l9w(d6An8P0;Cq9u({L7eA9+^WC(NeQyu`lx z{+#9mrK15G%aMOnPo5#UJB>xir|av|pEy_Zu7rej9v2VibT6RFJ5L>ZTdw}yO+@Jf z#Anj=LwxU5-=r2ZGd;moqDsdjZW~wQ#s|5%rT(%skBA+u= zN%R-cpO?O>zb1?R+Gwz$!pYHB+#HL$I{YBeG~B~ed}9Hd5u)I8HSoRenUTX|Zlv+= zmt)J9l(ogf^Q>{z8DlVQm6DdzD&JO#SkC?H3bs$((f?%6t&z((EyrH9z4Us&=18-q z!whm!!mJPEP%V^G^c(y|SLfLl|0eZIAG!4TSw>k8b@8%BgeH|CoI|+!s@d3UBx|Cb zkDjP8ZB;$;`ACyg{10J`w*Go>yQ+)V7KB5A*$*e)Fd_QULDL{tYUsVL+AiRx zcUII$vT%mF_n^eO*2{@NW%kBBQcbSGi0=UxODJ?Cp>h4us2RnM79=ADpcwpJ#ox_A2EkD9pAH z3Y=M6HdNtWo_ux<)tfh4O&UDxq>Mm`QDy*cQtWR(pNVC%R5vxI{si5m8=`mK2wu#j zd3A~CpL<;(EBoDNtYg)_&ZRJ^O@_O~X5NkT6_3HBE;wm~Yxk%=S%Qb0#@s3vaaoz^ z>dUtua5s1CB#~kKO=lQ+iZ8TnbSoY^bKNe~zo*>ukVst&P!w?^wUY>PzE17_G8&Ws zTXtJIi|8wNyUB>Y4<5>9KU|a6F0i6u#v`q~md8Ky++zlGc#eS<)K-l*cS1dHf;|fv z^8;u0GbSjjqzkJ^yF5`VCzI1cS-A)qCOT-vAwBOVzNV>`**`Tr(}@eNn-&cjt*Uan zO4=b;NVR(l(6SDjyjNDHadGvv2>wr?KOGL%lUJFh8%Av@?H;Tr-jTkwzZv4#Ujq@h z_i?Su06bQO@BR>;ZAeF<{yuu&L;DGKZQ^N?5tEH)5ZD8scard#0xX*Ejq&#kC~5b~ zB_YK zQeC&@TT_V>*L!#8Owd6NJUCPQaB|l6E?8a4g&;Oh!0xrXj%3Dl8(BG@d>>VC!N~l( zvK?+~D>7E}#%5zLz$=OliVR-iwlHw_`EM!`&P|su8dE0h0YU zWw9@Xp8EIUWz1DB&!(iKKB^1zaG^B`8K$@;Ygj_#Qx~l7)ygX4F~`4z9^^_;x)X5o ze!94$Jh>?mq@t$H(eS%;x#xkgSGJ0cwEJI`${wL*#m5)zA&}X-wW9OH)Sw!3M>lN( zrNOu7a(q9eB-Plgt0%rA5-F)ap)Y*=O0iD&T7x4*Y}vxXuG7qKKCMAPHQg#c@OEUj zq;lg>3T6Dub1v7DTI{nYqv8XkWHJ_lwudfgS_MVd7DY41G*jqBZ}6eT5g#)#xP+1%?h@g+b1?K{f1oY|SqiQJbDKW5$b zPD#?Tx}9Vs=avq6U3$eRL%wkKdOYl+xvpnJ*a%@H#l=U7pNcd%Q>qooQd<-Qt_y>v z68yD;$7IVxUE__iY{OT@c(;3u42(TZa=j-@&EAa%pBt>zKYW5@3ub+KesE%Gder0g zY`D9ibWYA(kNn*NO#^j47rmY|{)xwSLhQ$`6j?wI9$?mc4|fk;>^QluEH31Q@Y>nz zmL+1APG3s5?kt-Vu><3l)Ylp?#D^bIx4jWbn%sk8DP4jOx!+p)04dC*!#^#%G4~rV zeskM7xLCezNvX0%7stbG_U=6_cY?BgocMVJzaHyu_Y?nMP+p~RefHMtWz-CK%G-Q~*QhjZxsb&=9 z7x(8QpMt-8eeYNp$>7TLydk^uLEDk@z<(28e}ZZp2u^MYoXPU!sl?id*P&3}%dk(wmu6AF33-@| zJXmM8cEB_4v_yZn|1~;3tk#xGVHEiWkg=?0t){;T#7!_Q(f$GHcDj8ppLZ7H#~|dl z!&nvnHn^ztLcN#c@DzfP_Wr=Tfr53gfO(0!F!vn9KUpr@W5~iwf!?2rZ(D20vhCbj z;4ci#j^%gDNx}oaplkE3+0)7?czK@KGuQ7>6ePw!JLD!8rS)#t?Jwr4J>e5|C5uJdK@V&sQ^5_2Du$>>_r5?nw=`+yp$(bWF{-aa zHt$#%cSMl#n;W+`U0Ua-6#7+XilGloF0zY#5cz^MI3e*N*A7qK|3()}N($b6w<#L9 zN>C%odVAY?x$ZV^s#c1hHRe}JdH%~G!2!M(SA%nsF*gicFE1##x%Y@!`U1vsD{nOu z7Kj{AbWXD!)R));SSU3)Z>{Z&J9y;XPvMk?9Gmbtbc4WI`v3Rl@ z_{M!p!sO*}f?WBDzy4>7mchrWa%4}j{mlpKHO9`Neza+$w0iirC$ zq-OE(={_5-^idtE>B&E#WPqUEpD3QlR^+ZFYn+BKe>FL3DJI1RZ{Q;MYH?ZG3ILB6 zqy~ES$Z~}*$;e(#3wpQ@&8StaMT@I;Uyl|G!)q3XzN7?Jml=)Z=O>6Odg#qZ2A@aW zQxd#pJfzP*1uo)F+GxC+iuEb@~Pykwp8KFsT|KItq%1AaB+ti*7u@k$(FP10$Igr@UXHpalw;E%uT+9Kj z8Y6tnKmJ90{J(mg{>NSaewPZ+bA_aV4S2-=J0JcBP1k?ZcK!e7|D-YdKO_&)pJV?6 DjY8&0 literal 0 HcmV?d00001 diff --git a/examples/hyper/local.000700.jpg b/examples/hyper/local.000700.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1e61dd6aa242cff2f12d7f2517c630f62631ccf GIT binary patch literal 490185 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 z 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%0D9(U3_^N>i&m>@;Wj@=cKvAR-711F24F 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